<?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>133798</bug_id>
          
          <creation_ts>2014-06-12 08:35:29 -0700</creation_ts>
          <short_desc>Enable frame traversal through range-based for-loops</short_desc>
          <delta_ts>2015-01-10 10:28:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140338</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1015120</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-06-12 08:35:29 -0700</bug_when>
    <thetext>Enable frame traversal through range-based for-loops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015136</commentid>
    <comment_count>1</comment_count>
      <attachid>232958</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-06-12 09:41:56 -0700</bug_when>
    <thetext>Created attachment 232958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015139</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-12 09:43:41 -0700</bug_when>
    <thetext>Attachment 232958 did not pass style-queue:


ERROR: Source/WebCore/page/Page.cpp:432:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/FrameIterator.h:108:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/FrameIterator.h:114:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/dom/Document.cpp:5111:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019331</commentid>
    <comment_count>3</comment_count>
      <attachid>232958</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-30 08:16:25 -0700</bug_when>
    <thetext>Comment on attachment 232958
Patch

Great idea. Not compiling in EWS, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020625</commentid>
    <comment_count>4</comment_count>
      <attachid>234448</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-05 12:54:19 -0700</bug_when>
    <thetext>Created attachment 234448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020626</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-05 12:56:52 -0700</bug_when>
    <thetext>Attachment 234448 did not pass style-queue:


ERROR: Source/WebCore/page/Page.cpp:432:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/FrameIterator.h:108:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/FrameIterator.h:114:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/dom/Document.cpp:5137:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020641</commentid>
    <comment_count>6</comment_count>
      <attachid>234453</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-05 23:01:15 -0700</bug_when>
    <thetext>Created attachment 234453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020642</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-05 23:03:14 -0700</bug_when>
    <thetext>Attachment 234453 did not pass style-queue:


ERROR: Source/WebCore/page/Page.cpp:432:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/FrameIterator.h:108:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/FrameIterator.h:114:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/dom/Document.cpp:5137:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020657</commentid>
    <comment_count>8</comment_count>
      <attachid>234459</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-07-06 08:30:28 -0700</bug_when>
    <thetext>Created attachment 234459
Patch

Uploading for EWS processing, won&apos;t be requesting review until the patch builds everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020658</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-06 08:32:40 -0700</bug_when>
    <thetext>Attachment 234459 did not pass style-queue:


ERROR: Source/WebCore/page/Page.cpp:432:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/page/FrameIterator.h:108:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/page/FrameIterator.h:114:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/WebCore/dom/Document.cpp:5137:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 36 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020709</commentid>
    <comment_count>10</comment_count>
      <attachid>234459</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-06 17:05:33 -0700</bug_when>
    <thetext>Comment on attachment 234459
Patch

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

In such refactorings we have to be sure that both readability and performance as the same or better than before.

I am slightly concerned about performance, for example making sure that the empty objects being copied as m_incrementOperation don’t have a performance cost.

The code rewritten to use standard library functions like find_of and any_of looks harder to read than the original, although clearer in some ways, it’s noisy with begin/end and lambda syntax and as I am accustomed to reading loops sometimes I find the non-loop version harder to understand. I wonder if we could fix that somehow.

&gt; Source/WebCore/ChangeLog:22
&gt; +        - frameChildren(Type&amp; frame)
&gt; +        - frameReverseChildren(Type&amp; frame)
&gt; +        - frameLastChildren(Type&amp; frame)
&gt; +        - frameLineage(Type&amp; frame)
&gt; +        - frameAncestors(Type&amp; frame)
&gt; +        - frameTraversal(Type&amp; frame)
&gt; +        - frameTraversalWithin(Type&amp; frame)
&gt; +        - frameTraversalWithin(Type&amp; frame, const Frame&amp; stayWithin)

I don’t think these functions need the word “frame” in their names.

I’m also not sure that “reverse children” is the right name for iterating children backwards. I think “children backwards” might work better.

I don’t think that “last children” really makes sense as a name of a set of objects. This is a peculiar enough operation that I think we might want to omit it and leave it written out the old way at the single call site.

I don’t think we should have both frameTraversal and frameTraversalWithin. There is no case where starting to traverse at a frame other than the main frame, and iterating out to the parent, is intentional rather than a bug. So the two functions should be merged into a single one. To do that we might want to fix the code *before* this refactoring so there are no call sites that try to make a distinction.

The “descendants” operation should be named that, not “traversal”. But I don’t know what to call “descendants including self”; Antti or Andreas might have an idea.\

&gt; Source/WebCore/dom/Document.cpp:357
&gt; +    for (auto&amp; ancestorFrame : frameLineage(*targetFrame)) {
&gt; +        Document* ancestorDocument = ancestorFrame.document();

Makes me wish for a document lineage function.

&gt; Source/WebCore/dom/Document.cpp:1950
&gt; +    for (const auto&amp; frame : frameTraversal(page.mainFrame())) {

Seems to me that frameTraversal should take either a Page or a MainFrame, not a Frame.

&gt; Source/WebCore/dom/Document.cpp:5135
&gt; +            auto traversal = frameTraversal(*frame());

This does a complete traversal only because this is a “document in main frame only” function. Would be best to assert this, I think.

&gt; Source/WebCore/dom/Document.cpp:5137
&gt; +            descendentHasNonEmptyStack = std::any_of(traversal.begin(), traversal.end(),
&gt; +                [](const Frame&amp; descendant) { return !!descendant.document()-&gt;webkitFullscreenElement(); });

Maybe it will take some getting used to; I don’t find this any_of form all that readable. Especially when we have to pass both begin and end. Maybe it’s partly because the lambda isn’t formatted the way we usually do?

The use of !! here is ugly. There has to be a more elegant way of doing that. Maybe just declaring the return value for the lambda and then leaving it out? Maybe we could just leave out the !! and everything would work fine?

&gt; Source/WebCore/dom/Document.cpp:5259
&gt; +        for (auto&amp; descendant : frameTraversal(*frame())) {

This does a complete traversal only because this is a “document in main frame only” function. Would be best to assert this, I think.

&gt; Source/WebCore/dom/Document.cpp:5790
&gt; +    for (const auto&amp; frame : frameTraversal(page-&gt;mainFrame())) {

The fact that this does a complete traversal is a bug.

&gt; Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp:102
&gt; +    for (auto&amp; frame : frameTraversalWithin(*m_pageAgent-&gt;mainFrame())) {

There is no reason to use frameTraversalWithin here; for the main frame there is no distinction between frameTraversal and frameTraversalWithin.

&gt; Source/WebCore/inspector/InspectorDOMAgent.cpp:270
&gt; +    for (auto&amp; frame : frameTraversal(*m_document-&gt;frame())) {

This function only uses frameTraversal because it is actually a “main frame only” function. We should assert that instead.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:514
&gt; +    for (auto&amp; frame : frameTraversalWithin(*mainFrame())) {

There is no reason to use frameTraversalWithin here; for the main frame there is no distinction between frameTraversal and frameTraversalWithin.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:546
&gt; +    for (auto&amp; frame : frameTraversalWithin(*mainFrame()))

There is no reason to use frameTraversalWithin here; for the main frame there is no distinction between frameTraversal and frameTraversalWithin.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:628
&gt; +    for (auto&amp; frame : frameTraversalWithin(*mainFrame())) {

There is no reason to use frameTraversalWithin here; for the main frame there is no distinction between frameTraversal and frameTraversalWithin.

&gt; Source/WebCore/loader/FrameLoader.cpp:272
&gt; +    fprintf(stderr, &quot;FrameLoader::init() %p frame %p ref count %d\n&quot;, this, &amp;m_frame, m_frame.refCount());

Please don’t add this unconditional printf. Maybe you were using it to debug this patch?

&gt; Source/WebCore/loader/FrameLoader.cpp:785
&gt; +    auto children = frameChildren(m_frame);
&gt; +    return std::all_of(children.begin(), children.end(), [](const Frame&amp; frame) {
&gt; +        return frame.loader().m_isComplete;
&gt; +    });

Seems like we should make an all_of that takes a collection so we don’t need the local variable and the begin/end. Is there something coming in future C++ to address this? (Same thought for any_of, naturally.)

&gt; Source/WebCore/loader/FrameLoader.cpp:1141
&gt; +    fprintf(stderr, &quot;FrameLoader::completed() %p frame %p (%d) m_isComplete %d\n&quot;, this, &amp;m_frame, m_frame.refCount(), m_isComplete);

More unconditional printf?

&gt; Source/WebCore/loader/FrameLoader.cpp:1146
&gt; +    if (Frame* descendant = m_frame.tree().traverseNext(&amp;m_frame)) {
&gt; +        for (auto&amp; frame : frameTraversalWithin(*descendant, m_frame))
&gt; +            frame.navigationScheduler().startTimer();
&gt; +    }

This is pretty awkward. I guess the point here to include everything within the frame, not counting the frame itself. That calls into question the behavior of frameTraversal. In the other cases we have used the name descendants to mean “descendants not counting this thing itself” and we should use that. I don’t think that “self plus descendants” ought to be named “traversal within”.

&gt; Source/WebCore/loader/FrameLoader.cpp:1147
&gt; +    fprintf(stderr, &quot;\tframe %p (%d)\n&quot;, &amp;m_frame, m_frame.refCount());

More unconditional printf?

&gt; Source/WebCore/loader/FrameLoader.cpp:1150
&gt; +        fprintf(stderr, &quot;\tparent %p\n&quot;, parent);

More unconditional printf?

&gt; Source/WebCore/loader/FrameLoader.cpp:1154
&gt; +    fprintf(stderr, &quot;\tframe %p (%d)\n&quot;, &amp;m_frame, m_frame.refCount());

More unconditional printf?

&gt; Source/WebCore/loader/FrameLoader.cpp:1158
&gt; +    fprintf(stderr, &quot;\tEND OF FrameLoader::completed() %p frame %p (%d)\n&quot;, this, &amp;m_frame, m_frame.refCount());

More unconditional printf?

&gt; Source/WebCore/loader/FrameLoader.cpp:2812
&gt; +    if (Frame* firstChild = m_frame.tree().firstChild()) {
&gt; +        for (auto&amp; frame : frameTraversalWithin(*firstChild, m_frame))
&gt; +            targetFrames.append(frame);
&gt; +    }

Should be descendants.

&gt; Source/WebCore/page/FrameIterator.h:1
&gt; +#ifndef FrameIterator_h

New source files need a copyright header.

&gt; Source/WebCore/page/FrameIterator.h:11
&gt; +struct ChildIteratorIncrement {

Not happy with the names of these structures.

&gt; Source/WebCore/page/FrameIterator.h:35
&gt; +struct FrameIterator : std::iterator&lt;std::input_iterator_tag, FrameType&gt; {

Why struct instead of class?

&gt; Source/WebCore/page/FrameIterator.h:36
&gt; +    FrameIterator() = default;

Seems strange that we don’t initialize the members in the default constructor.

&gt; Source/WebCore/page/FrameIterator.h:48
&gt; +    operator FrameType*() const { return m_frame; }

Do we need this? What code uses it?

&gt; Source/WebCore/page/FrameIterator.h:58
&gt; +    bool operator==(const FrameIterator&amp; other) const { return m_frame == other.m_frame; }
&gt; +    bool operator!=(const FrameIterator&amp; other) const { return !(*this == other); }

I’d normally suggest making these free functions rather than members.

&gt; Source/WebCore/page/FrameTree.cpp:426
&gt; +    for (const auto&amp; child : WebCore::frameChildren(frame))

The WebCore:: prefix should not be needed here because the type being passed in is already in the WebCore namespace, so argument dependent lookup should work.

&gt; Source/WebCore/page/FrameView.cpp:4039
&gt; +    for (auto&amp; frame : frameTraversal(m_frame-&gt;tree().top())) {
&gt; +        if (RenderView* renderView = frame.contentRenderer())
&gt;              renderView-&gt;compositor().setTracksRepaints(trackRepaints);
&gt;      }

This code is peculiar. Why would a particular subframe’s FrameView be so presumptuous as to set this on its parent frame’s RenderView. My guess is that this is an “only top level FrameView” function and needs an assertion saying that.

&gt; Source/WebCore/page/Page.cpp:272
&gt; +    // FIXME: Revert to mainFrame() when const iteration is supported.

Doesn’t seem like a valuable FIXME. Even if we do plan to make this change, it doesn’t seem worth a FIXME.

&gt; Source/WebCore/replay/SerializationMethods.cpp:87
&gt;      unsigned long currentIndex = 0;

The use of unsigned long in this function is quite strange.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232958</attachid>
            <date>2014-06-12 09:41:56 -0700</date>
            <delta_ts>2014-07-05 12:54:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133798-20140612094129.patch</filename>
            <type>text/plain</type>
            <size>114947</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5ODkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDBlMjJmM2ZiODdmNWI5
ODU0MjIwNmJmYTg0NzJjYTNiYWRiM2E0YS4uZmE2ZDJjMTEwYWE4ZjUzMjUwNDJiNjhhMGE3N2E1
NjRmMGUxODA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIzMCBAQAogMjAxNC0wNi0xMiAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKKyAgICAgICAgRW5hYmxlIGZyYW1l
IHRyYXZlcnNhbCB0aHJvdWdoIHJhbmdlLWJhc2VkIGZvci1sb29wcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zcGlyZWQgYnkgdGhlIHNpbWlsYXIg
c3VwcG9ydCBmb3IgdHJhdmVyc2luZyBET00gZWxlbWVudHMsIHRoaXMgcGF0Y2gKKyAgICAgICAg
aW50cm9kdWNlcyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZW5hYmxlIGl0ZXJhdGlv
biBvdmVyIHRoZSBmcmFtZQorICAgICAgICB0cmVlIGluIHJhbmdlLWJhc2VkIGZvci1sb29wcyBh
bmQgb3RoZXIgU1RMIGFsZ29yaXRobXMgdGhhdCBjYW4gb3BlcmF0ZQorICAgICAgICBvbiBhIHBh
aXIgb2YgaXRlcmF0b3JzLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBi
ZSB1c2VkLCB3aXRoIFR5cGUgZGVub3RpbmcgYSB0eXBlIHRoYXQgaXMgb3IKKyAgICAgICAgZGVy
aXZlcyBmcm9tIEZyYW1lOgorICAgICAgICAtIGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisg
ICAgICAgIC0gZnJhbWVSZXZlcnNlQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJh
bWVMYXN0Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJhbWVMaW5lYWdlKFR5cGUm
IGZyYW1lKQorICAgICAgICAtIGZyYW1lQW5jZXN0b3JzKFR5cGUmIGZyYW1lKQorICAgICAgICAt
IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0
aGluKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0aGluKFR5cGUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgc3RheVdpdGhpbikKKworICAgICAgICBBbGwgZnVuY3Rpb25zIHJl
dHVybiBhIFdURjo6SXRlcmF0b3JSYW5nZSBvYmplY3QgdGhhdCBpcyBjb25zdHJ1Y3RlZCB3aXRo
CisgICAgICAgIGEgcGFpciBvZiBGcmFtZUl0ZXJhdG9ycy4gVGhlIHR5cGUgb2YgdGhlIGxhdHRl
ciBpcyBpbnN0YW50aWF0ZWQgZnJvbSB0aGUKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgdGhhdCBy
ZXNwZWN0cyB0aGUgY29uc3RuZXNzIG9mIHRoZSByZWZlcmVuY2UgcGFzc2VkIHRvIHRoZQorICAg
ICAgICBoZWxwZXIgZnVuY3Rpb24gYW5kIHVzZXMgdGhlIGluY3JlbWVudCBvcGVyYXRpb24gZm9y
IHRoZSBpdGVyYXRvciB0aGF0IGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBkZXNpcmVkIHR5
cGUgb2YgdHJhdmVyc2FsLgorCisgICAgICAgIFNpbWlsYXJseSwgdGhlIGJlZ2luIGl0ZXJhdG9y
IGlzIGNvbnN0cnVjdGVkIGluIHRoZSB3YXkgdGhhdCdzIHNwZWNpZmljIHRvCisgICAgICAgIHRo
ZSBuYXR1cmUgb2YgdHJhdmVyc2FsIC0tIGl0IGNhbiB1c2UgdGhlIGZpcnN0IGNoaWxkLCBsYXN0
IGNoaWxkLCBwYXJlbnQKKyAgICAgICAgb3IgdGhlIHBhc3NlZC1pbiBmcmFtZSBkaXJlY3RseSBh
cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbmQgaXRlcmF0b3IgaXMKKyAgICAgICAgaG9sZHMg
YSBudWxsIHBvaW50ZXIgYW5kIHN0b3BzIHRoZSBpdGVyYXRpb24gb25jZSB0aGUgaW5jcmVtZW50
IG9wZXJhdGlvbgorICAgICAgICBhbHNvIGVuZHMgdXAgcmV0dXJuaW5nIGEgbnVsbCBwb2ludGVy
LgorCisgICAgICAgIFRoaXMga2VlcHMgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgZnJhbWUgdHJl
ZSB0cmF2ZXJzYWwsIGJ1dCBwYWNrcyBpdCBpbnRvCisgICAgICAgIGEgbmljZXIgZm9ybWF0IHdp
dGggdGhlIGhlbHAgb2YgV1RGOjpJdGVyYXRvclJhbmdlLCBlbmFibGluZyB0aGUgdXNlIG9mCisg
ICAgICAgIHByZXR0aWVyIHJhbmdlLWJhc2VkIGZvci1sb29wcy4gRm9yIHN0YXJ0ZXJzIGFsbCB0
aGUgYWZmZWN0ZWQgZm9yLWxvb3BzCisgICAgICAgIGluIFdlYkNvcmUgaGF2ZSBiZWVuIHN3aXRj
aGVkIG92ZXIgdG8gdGhlIG5ldyBzeW50YXguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuQWNjZXNzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFnZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzZXREZXNpZ25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUpOgorICAgICAg
ICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdl
OjpyZXN0b3JlKToKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKiBodG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVnSW5zKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZCk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxBbmNlc3RvcnNBcmVDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsb3Nl
T2xkRGF0YVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1YmZyYW1l
SXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRp
b25zKToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVw
ZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlv
blNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpt
dXN0TG9ja0JhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6On5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9v
bUZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNVUkxBbGxvd2VkKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lSXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVRyYXZlcnNhbDo6Q2hpbGRJdGVyYXRvckluY3JlbWVudDo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6Okxhc3RD
aGlsZEl0ZXJhdG9ySW5jcmVtZW50OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVHJhdmVyc2FsOjpMaW5lYWdlSXRlcmF0b3JJbmNyZW1lbnQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6OkZyYW1lSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6Om9wZXJhdG9yIEZyYW1lVHlwZSopOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVJldmVyc2VDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUxhc3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUxpbmVhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhbWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVUcmF2ZXJzYWxXaXRoaW4p
OgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
VHJlZTo6fkZyYW1lVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnVuaXF1ZUNo
aWxkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVHJlZTo6c2NvcGVkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjpz
Y29wZWRDaGlsZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6Y2hpbGRDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVHJlZTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmlzRGVz
Y2VuZGFudE9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6ZGVlcExhc3RDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnRvcCk6CisgICAgICAgIChwcmludEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXND
b21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6aGFzQ29tcG9zaXRpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0SXNPdmVybGFwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVCYWNrZ3JvdW5kUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRUcmFja3NSZXBhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
dGlvbjo6YW5jZXN0b3JPcmlnaW5zKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojp+UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW5kZXJUcmVlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFu
Z2VJbkVudmlyb25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWZyZXNoUGx1Z2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xs
YmFyc1RvSGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXREZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZW1v
cnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRUaW1lclRo
cm90dGxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmRuc1ByZWZldGNoaW5n
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBsdWdpblZpZXdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0U2Vzc2lvbklEKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBh
Z2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZy
YW1lKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEltYWdlTG9hZGluZ1NldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRU
ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rvcik6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVz
KToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0VGltZXJzUGF1c2VkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BhdGNoUGFnZUhpZGVFdmVudEJlZm9y
ZVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRC
ZWZvcmVSZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlY3Vyc2l2ZVNldFVwZGF0
ZUFwcGVhcmFuY2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUZyYW1lSGFzVGlsZWRM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJt
aXNzaW9uKToKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OmFkZFNjaGVkdWxlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1v
dmVTY2hlZHVsZVBhaXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlG
cmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdt
ZW50KToKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZnJhbWVJbmRleEZyb21GcmFtZSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bnVtYmVyT2ZTY3JvbGxhYmxlQXJlYXMpOgorCisyMDE0LTA2LTEyICBaYW4gRG9iZXJz
ZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKwogICAgICAgICBXb3JrZXJSdW5Mb29wOjpUYXNr
OjpwZXJmb3JtVGFzayBzaG91bGQgdGFrZSBpbiBXb3JrZXJHbG9iYWxTY29wZSogdG8gYXZvaWQg
ZG93bmNhc3RpbmcKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMzYxNgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxODAyZDU5ODAxNDFjOWY2
ZGRiODZlOWU4MTk4ZjgwNTUzMjM2NmFjLi40NjNhODdjMTkyMjhhNzE3NDJmMzIzMDI4NTBiZDIw
NjQ2ODNkNjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb250TG9hZGVyLmgiCiAjaW5j
bHVkZSAiRm9ybUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMzUxLDggKzM1Miw4IEBAIHN0YXRpYyBib29sIGNhbkFj
Y2Vzc0FuY2VzdG9yKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBhY3RpdmVTZWN1cml0eU9yaWdpbiwg
RnJhbWUqCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IGJvb2wgaXNMb2NhbEFj
dGl2ZU9yaWdpbiA9IGFjdGl2ZVNlY3VyaXR5T3JpZ2luLT5pc0xvY2FsKCk7Ci0gICAgZm9yIChG
cmFtZSogYW5jZXN0b3JGcmFtZSA9IHRhcmdldEZyYW1lOyBhbmNlc3RvckZyYW1lOyBhbmNlc3Rv
ckZyYW1lID0gYW5jZXN0b3JGcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIERvY3Vt
ZW50KiBhbmNlc3RvckRvY3VtZW50ID0gYW5jZXN0b3JGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBm
b3IgKGF1dG8mIGFuY2VzdG9yRnJhbWUgOiBmcmFtZUxpbmVhZ2UoKnRhcmdldEZyYW1lKSkgewor
ICAgICAgICBEb2N1bWVudCogYW5jZXN0b3JEb2N1bWVudCA9IGFuY2VzdG9yRnJhbWUuZG9jdW1l
bnQoKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhbiBBU1NFUlQ/IEZyYW1lcyBzaG91
bGQgYWx3YXkgaGF2ZSBkb2N1bWVudHMuCiAgICAgICAgIGlmICghYW5jZXN0b3JEb2N1bWVudCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk0Nyw4ICsxOTQ4LDggQEAgdm9pZCBEb2N1
bWVudDo6Y3JlYXRlUmVuZGVyVHJlZSgpCiBzdGF0aWMgdm9pZCBwYWdlV2hlZWxFdmVudEhhbmRs
ZXJDb3VudENoYW5nZWQoUGFnZSYgcGFnZSkKIHsKICAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0g
ICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSAmcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBm
cmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICAgICAgY291bnQg
Kz0gZG9jdW1lbnQtPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKICAgICB9CiAgICAgcGFnZS5j
aHJvbWUoKS5jbGllbnQoKS5udW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKGNvdW50KTsKQEAg
LTQzMTIsOCArNDMxMywxNiBAQCB2b2lkIERvY3VtZW50OjpzZXRUcmFuc2Zvcm1Tb3VyY2Uoc3Rk
Ojp1bmlxdWVfcHRyPFRyYW5zZm9ybVNvdXJjZT4gc291cmNlKQogdm9pZCBEb2N1bWVudDo6c2V0
RGVzaWduTW9kZShJbmhlcml0ZWRCb29sIHZhbHVlKQogewogICAgIG1fZGVzaWduTW9kZSA9IHZh
bHVlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZTsgZnJhbWUgJiYgZnJhbWUtPmRv
Y3VtZW50KCk7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZSkpCi0g
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjKCk7CisK
KyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9mcmFtZSkpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZnJhbWUuZG9jdW1l
bnQoKS0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygpOworICAgIH0KIH0KIAogRG9jdW1lbnQ6
OkluaGVyaXRlZEJvb2wgRG9jdW1lbnQ6OmdldERlc2lnbk1vZGUoKSBjb25zdApAQCAtNTA5Niwx
MiArNTEwNSwxMiBAQCB2b2lkIERvY3VtZW50OjpyZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQo
RWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgc2hvcnQgZmxhZwogCiAgICAgICAgIC8vIEEgZGVz
Y2VuZGFudCBicm93c2luZyBjb250ZXh0J3MgZG9jdW1lbnQgaGFzIGEgbm9uLWVtcHR5IGZ1bGxz
Y3JlZW4gZWxlbWVudCBzdGFjay4KICAgICAgICAgYm9vbCBkZXNjZW5kZW50SGFzTm9uRW1wdHlT
dGFjayA9IGZhbHNlOwotICAgICAgICBmb3IgKEZyYW1lKiBkZXNjZW5kYW50ID0gZnJhbWUoKSA/
IGZyYW1lKCktPnRyZWUoKS50cmF2ZXJzZU5leHQoKSA6IG51bGxwdHI7IGRlc2NlbmRhbnQ7IGRl
c2NlbmRhbnQgPSBkZXNjZW5kYW50LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
ICAgIGlmIChkZXNjZW5kYW50LT5kb2N1bWVudCgpLT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoZnJhbWUo
KSkgeworICAgICAgICAgICAgYXV0byB0cmF2ZXJzYWwgPSBmcmFtZVRyYXZlcnNhbCgqZnJhbWUo
KSk7CisgICAgICAgICAgICBkZXNjZW5kZW50SGFzTm9uRW1wdHlTdGFjayA9IHN0ZDo6YW55X29m
KHRyYXZlcnNhbC5iZWdpbigpLCB0cmF2ZXJzYWwuZW5kKCksCisgICAgICAgICAgICAgICAgW10o
Y29uc3QgRnJhbWUmIGRlc2NlbmRhbnQpIHsgcmV0dXJuICEhZGVzY2VuZGFudC5kb2N1bWVudCgp
LT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpOyB9KTsKICAgICAgICAgfQorCiAgICAgICAgIGlm
IChkZXNjZW5kZW50SGFzTm9uRW1wdHlTdGFjayAmJiAhaW5MZWdhY3lNb3ppbGxhTW9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogCkBAIC01MjIwLDExICs1MjI5LDEzIEBAIHZvaWQgRG9jdW1lbnQ6
OndlYmtpdEV4aXRGdWxsc2NyZWVuKCkKICAgICAvLyBlbGVtZW50IHN0YWNrIChpZiBhbnkpLCBv
cmRlcmVkIHNvIHRoYXQgdGhlIGNoaWxkIG9mIHRoZSBkb2MgaXMgbGFzdCBhbmQgdGhlIGRvY3Vt
ZW50IGZ1cnRoZXN0CiAgICAgLy8gYXdheSBmcm9tIHRoZSBkb2MgaXMgZmlyc3QuCiAgICAgRGVx
dWU8UmVmUHRyPERvY3VtZW50Pj4gZGVzY2VuZGFudHM7Ci0gICAgZm9yIChGcmFtZSogZGVzY2Vu
ZGFudCA9IGZyYW1lKCkgPyBmcmFtZSgpLT50cmVlKCkudHJhdmVyc2VOZXh0KCkgOiBudWxscHRy
OyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmIChkZXNjZW5kYW50LT5kb2N1bWVudCgpLT53ZWJraXRGdWxsc2Ny
ZWVuRWxlbWVudCgpKQotICAgICAgICAgICAgZGVzY2VuZGFudHMucHJlcGVuZChkZXNjZW5kYW50
LT5kb2N1bWVudCgpKTsKKyAgICBpZiAoZnJhbWUoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGRl
c2NlbmRhbnQgOiBmcmFtZVRyYXZlcnNhbCgqZnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChk
ZXNjZW5kYW50LmRvY3VtZW50KCktPndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50KCkpCisgICAgICAg
ICAgICAgICAgZGVzY2VuZGFudHMucHJlcGVuZChkZXNjZW5kYW50LmRvY3VtZW50KCkpOworICAg
ICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIC8vIDQuIEZvciBlYWNoIGRlc2NlbmRhbnQg
aW4gZGVzY2VuZGFudHMsIGVtcHR5IGRlc2NlbmRhbnQncyBmdWxsc2NyZWVuIGVsZW1lbnQgc3Rh
Y2ssIGFuZCBxdWV1ZSBhCiAgICAgLy8gdGFzayB0byBmaXJlIGFuIGV2ZW50IG5hbWVkIGZ1bGxz
Y3JlZW5jaGFuZ2Ugd2l0aCBpdHMgYnViYmxlcyBhdHRyaWJ1dGUgc2V0IHRvIHRydWUgb24gZGVz
Y2VuZGFudC4KICAgICBmb3IgKERlcXVlPFJlZlB0cjxEb2N1bWVudD4+OjppdGVyYXRvciBpID0g
ZGVzY2VuZGFudHMuYmVnaW4oKTsgaSAhPSBkZXNjZW5kYW50cy5lbmQoKTsgKytpKSB7CkBAIC01
NzQ0LDggKzU3NTUsOCBAQCB2b2lkIERvY3VtZW50OjpkaWRSZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cihOb2RlKiBoYW5kbGVyKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fdG91Y2hFdmVudFRh
cmdldHMtPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZy
YW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+
ZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVudEhhbmRsZXJzKCkpCisgICAgZm9yIChjb25zdCBhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBp
ZiAoZnJhbWUuZG9jdW1lbnQoKSAmJiBmcmFtZS5kb2N1bWVudCgpLT5oYXNUb3VjaEV2ZW50SGFu
ZGxlcnMoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcGFnZS0+Y2hyb21lKCku
Y2xpZW50KCkubmVlZFRvdWNoRXZlbnRzKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRGcmFtZS5jcHAKaW5kZXggMzQ4NjkwYWVhOTdjNzZmNGUxOTEzZTYyNGRiYjllZTI5N2RmY2Ew
MC4uNzkyZjgyODlhODI2NDFiMDg3NDkzNTY2MTU1ZDQ0YTRiZTI3NzY5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZvY3Vz
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCkBAIC0xNTcsOCArMTU4LDggQEAgQ2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1lKEZy
YW1lJiBmcmFtZSkKICAgICBmcmFtZS5sb2FkZXIoKS5zdG9wTG9hZGluZyhVbmxvYWRFdmVudFBv
bGljeVVubG9hZEFuZFBhZ2VIaWRlKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgQ2FjaGVkRnJhbWVz
IGZvciBhbGwgRnJhbWVzIGluIHRoZSBGcmFtZVRyZWUuCi0gICAgZm9yIChGcmFtZSogY2hpbGQg
PSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpCi0gICAgICAgIG1fY2hpbGRGcmFtZXMuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8Q2FjaGVkRnJhbWU+KCpjaGlsZCkpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFt
ZUNoaWxkcmVuKGZyYW1lKSkKKyAgICAgICAgbV9jaGlsZEZyYW1lcy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxDYWNoZWRGcmFtZT4oY2hpbGQpKTsKIAogICAgIC8vIEFjdGl2ZSBET00gb2JqZWN0
cyBtdXN0IGJlIHN1c3BlbmRlZCBiZWZvcmUgd2UgY2FjaGUgdGhlIGZyYW1lIHNjcmlwdCBkYXRh
LAogICAgIC8vIGJ1dCBhZnRlciB3ZSd2ZSBmaXJlZCB0aGUgcGFnZWhpZGUgZXZlbnQsIGluIGNh
c2UgdGhhdCBjcmVhdGVzIG1vcmUgb2JqZWN0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBh
Z2UuY3BwCmluZGV4IDc3MjFlNTM1YmY0NzQwYTRiYTQxNzY5NzlmYjJlMjAwNWJjOTU4OWQuLmQ1
OWFjNWI1ZWY3ZDNjYjVjOTdmMDA2ZTE2ODgxYWRmYTlkODdkZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9DYWNoZWRQYWdlLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJOb2RlLmgiCkBAIC05Nyw4ICs5OCw4IEBAIHZv
aWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlJiBwYWdlKQogICAgIH0KIAogICAgIGlmIChtX25l
ZWRTdHlsZVJlY2FsY0ZvclZpc2l0ZWRMaW5rcykgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3Rh
dGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgICAgICBmb3IgKGF1dG8mIGZy
YW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS5tYWluRnJhbWUoKSkpCisgICAgICAgICAgICBmcmFt
ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlu
a3MoKTsKICAgICB9CiAKICAgICBpZiAobV9uZWVkc0RldmljZVNjYWxlQ2hhbmdlZCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IGU4YWEwYjYwNzlhMTUxZWI5ZWEyYzUx
OTlkYmQyZjY5OWZlYjI3N2YuLmQzOTY0OWQ2MDU5NWU0MzljMmQzNDJlYzJiMzQ1MDYyNTcxOGVi
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgpAQCAtMTgwLDgg
KzE4MSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUq
IGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCiAgICAgICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBD
bGllbnREZW5pZXNDYWNoaW5nOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJh
bWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dDYW5DYWNoZUZyYW1lRGVj
aXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dDYW5DYWNo
ZUZyYW1lRGVjaXNpb24oJmNoaWxkLCBpbmRlbnRMZXZlbCArIDEpOwogICAgIAogICAgIFBDTE9H
KHJlamVjdFJlYXNvbnMgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFtZSBDQU4g
YmUgY2FjaGVkIik7CiAgICAgUENMT0coIistLS0iKTsKQEAgLTI3Nyw4ICsyNzgsOCBAQCBQYWdl
Q2FjaGU6OlBhZ2VDYWNoZSgpCiAgICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29u
dGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQg
PSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUo
KS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1Ro
aXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKmZy
YW1lKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoJmNo
aWxkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCBkMzY4MTg2NjE2
YWE4MGRhZThlY2IzOGYwNjVmNjc5YTI5OTIxNzliLi5iYmFkNWZiN2U1YTFkZWQyOGRhZjU2NjIz
OWI4MzljYTMxMjQ4ZThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJh
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzNSwxOCArNDM2LDE4
IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVnSW5zKCkK
ICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFt
ZS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZG9jdW1lbnQoKS5wYWdlKCktPm1haW5GcmFt
ZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVyKCkuY29u
dGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAg
IGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGlmICghZnJhbWUuZG9jdW1lbnQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z0lu
cyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZShlbWJlZFRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z0lucyA9IGZyYW1lLmRvY3Vt
ZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFnLmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgaWYgKHBsdWdJbnMpCiAgICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0TWF0Y2hp
bmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdpbiwgbWlt
ZVR5cGUpOwogCi0gICAgICAgIHBsdWdJbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dHNCeVRhZ05hbWUob2JqZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcGx1Z0lucyA9IGZy
YW1lLmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKG9iamVjdFRhZy5sb2NhbE5hbWUo
KSk7CiAgICAgICAgIGlmIChwbHVnSW5zKQogICAgICAgICAgICAgYWRkUGx1Z0luc0Zyb21Ob2Rl
TGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnSW5zLCBwbHVnSW5P
cmlnaW4sIG1pbWVUeXBlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4IGFhOTFl
YjFiYWZjMTVkMDE4NjE3ODBhMDRmNmU2YzIwN2RmYTE0YmYuLmE1NGYwZWJiYThhODM1ZjBlM2Uz
YTM5MDY4ZjRmYTQ2NjYxNzQ4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRlICJEb2N1
bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oIgpAQCAt
OTgsOSArOTksOCBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cgogewogICAgIHJlc3VsdCA9IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFwcGxp
Y2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAKLSAgICBGcmFtZSog
bWFpbkZyYW1lID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpKSkgeworICAg
ICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAgICAgICAg
Y29udGludWU7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cgog
ICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5nKCk7CiAg
ICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZl
c3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJh
bWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEZyYW1lSWQobV9w
YWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgICAgICAgIC5zZXRGcmFtZUlkKG1f
cGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1hbmlmZXN0
VVJMKG1hbmlmZXN0VVJMKQogICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGljX2Nhc3Q8
aW50Pihob3N0LT5zdGF0dXMoKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHZhbHVl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmlu
ZGV4IDY4MTFjMjAyMmE1NmUzMmY5NDUzMmUyY2UwYjlmODUyZWJkODgxY2MuLjliZTk5ODU3ZjEx
NjA4NTY3YzAwYjRhZTcyYzNiZTM2ZGFiMmNmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUg
IkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVU
cmVlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKQEAgLTI2Niw4ICsyNjcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhc29uKQog
VmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiB7CiAgICAg
VmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9kb2N1
bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoKm1fZG9jdW1lbnQtPmZyYW1lKCkp
KSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAg
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgcmVzdWx0
LmFwcGVuZChkb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3Zjk2NDgy
NDE4ZGUuLjBlMGZmYmM5MTQ2ZTIxYzM1ODE3OGMxMGQ1MzYyZDJiYjk3NDhmYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC00Nyw2
ICs0Nyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRpbmcuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxMCwxMCArNTExLDEwIEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6CiAgICAgLy8gYWx3YXlzIHJldHVybiB0aGUgc2FtZSB0cnVlL2ZhbHNlIHZhbHVl
LgogICAgIGJvb2wgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZmFsc2U7CiAKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
V2l0aGluKCptYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUuZG9jdW1lbnQoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHVybCA6IGFsbFJlc291cmNlc1VS
THNGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiBhbGxSZXNvdXJj
ZXNVUkxzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9j
Q29va2llc0xpc3Q7CiAgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdD
b29raWVzKGRvY3VtZW50LCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBkb2NDb29raWVzTGlz
dCk7CiAKQEAgLTU0Miw4ICs1NDMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29v
a2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOgogdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVVJMIHBhcnNlZFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9wYWdlLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1f
cGFnZS0+bWFpbkZyYW1lKCkpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZnJhbWUt
PmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpCisgICAgICAgIFdlYkNvcmU6
OmRlbGV0ZUNvb2tpZShmcmFtZS5kb2N1bWVudCgpLCBwYXJzZWRVUkwsIGNvb2tpZU5hbWUpOwog
fQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5n
KiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVl
PiYgb2JqZWN0KQpAQCAtNjI0LDIxICs2MjUsMjEgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24K
ICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9u
YWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CiAgICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lv
biByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4KHRleHQs
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1l
VHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQ7
CiAKLSAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0Zv
ckZyYW1lKGZyYW1lKSkgeworICAgICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDogY2Fj
aGVkUmVzb3VyY2VzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRleHRDb250
ZW50Rm9yQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UsICZjb250ZW50KSkgewogICAgICAg
ICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjb3Vu
dFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoZXNDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy0+
YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFtZUlkKGZyYW1lKSwgY2FjaGVk
UmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgc2Vh
cmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFtZUlkKCZm
cmFtZSksIGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVudChmcmFtZSwg
ZmFsc2UsICZjb250ZW50KSkgeworICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVudCgmZnJh
bWUsIGZhbHNlLCAmY29udGVudCkpIHsKICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBD
b250ZW50U2VhcmNoVXRpbGl0aWVzOjpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdl
eCwgY29udGVudCk7CiAgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQotICAgICAgICAgICAg
ICAgIHNlYXJjaFJlc3VsdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoZnJh
bWVJZChmcmFtZSksIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7Cisg
ICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJj
aFJlc3VsdChmcmFtZUlkKCZmcmFtZSksIGZyYW1lLmRvY3VtZW50KCktPnVybCgpLCBtYXRjaGVz
Q291bnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMwLDEwICs4MzEsMTAgQEAgU3RyaW5n
IEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIAog
RnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKGNv
bnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkb2N1bWVudE9yaWdp
biA9IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCgqbWFpbkZyYW1lKCkpKSB7CisgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpOwogICAgICAgICBpZiAoZG9jdW1lbnRPcmlnaW4tPnRvUmF3U3RyaW5nKCkgPT0g
b3JpZ2luUmF3U3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAgICAgICAg
cmV0dXJuICZmcmFtZTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC05ODQsMTIg
Kzk4NSwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OgogICAgIH0KIAogICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7Ci0gICAgZm9yIChGcmFtZSogY2hp
bGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRy
ZW4oKmZyYW1lKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKICAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKICAgICAgICAgfQot
ICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKGNo
aWxkKSk7CisgICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JGcmFt
ZVRyZWUoJmNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYmFkNGE4M2E5YTUz
YzIwZjUyY2NhOTI3YjQ1NGNiZjgzY2JkYWY0YS4uMDZhOTExZmE4NTU1MWEyODdmYjRiNTA2YjQ3
Y2ZkOGY2NGIyODc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VS
dW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlUnVudGlt
ZUFnZW50LmNwcApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAj
aW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCkBAIC0xNTUsMTQgKzE1NiwxNCBAQCB2b2lkIFBh
Z2VSdW50aW1lQWdlbnQ6OnVubXV0ZUNvbnNvbGUoKQogdm9pZCBQYWdlUnVudGltZUFnZW50Ojpy
ZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKQogewogICAgIFZlY3RvcjxzdGQ6OnBhaXI8
SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+PiBpc29sYXRlZENvbnRleHRzOwotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFm
cmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQp
KQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX2luc3BlY3RlZFBhZ2Ut
Pm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLnNjcmlwdCgpLmNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKTsKKyAg
ICAgICAgU3RyaW5nIGZyYW1lSWQgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUpOwogCi0g
ICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZShm
cmFtZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4
ZWNTdGF0ZSgmZnJhbWUpOwogICAgICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChmcmFtZUlkLCBz
Y3JpcHRTdGF0ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQoKS5jb2xs
ZWN0SXNvbGF0ZWRDb250ZXh0cyhpc29sYXRlZENvbnRleHRzKTsKKyAgICAgICAgZnJhbWUuc2Ny
aXB0KCkuY29sbGVjdElzb2xhdGVkQ29udGV4dHMoaXNvbGF0ZWRDb250ZXh0cyk7CiAgICAgICAg
IGlmIChpc29sYXRlZENvbnRleHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaTwgaXNvbGF0ZWRDb250ZXh0cy5zaXplKCk7IGkr
KykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKaW5kZXggZTU4OWE0ZGRjNDc2MTBiMzU5ZDhhMjJhNGQzMjM0OWQ5NTVlMjQ5Zi4uNDhk
MTIwNDE3ZTJiMzRiY2RlMjk0MDhkMmRlNTVjYzY1ZmJhZjY4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29wLmgiCisj
aW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBAIC0xNjIs
OCArMTYzLDggQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVz
ZWQoUGFnZSogcGFnZSwgYm9vbCBwYXVzZWQpCiAKICAgICBwYWdlLT5zZXREZWZlcnNMb2FkaW5n
KHBhdXNlZCk7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgc2V0
SmF2YVNjcmlwdFBhdXNlZChmcmFtZSwgcGF1c2VkKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDog
ZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKQorICAgICAgICBzZXRKYXZhU2NyaXB0
UGF1c2VkKCZmcmFtZSwgcGF1c2VkKTsKIH0KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6
OnNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWUqIGZyYW1lLCBib29sIHBhdXNlZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGExNDg5MjU1ODFlMjRkNDE1NWM3MTQ3MThk
NzUwNzMyNjExOWJiNWQuLmZjMDA3NGI0YTJlZTBlZDVmZTI4NGRlMjVkZWQwZWQwZjIwNzk5YWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTksNiArNTksNyBAQAog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2luY2x1ZGUg
IkZvcm1TdWJtaXNzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKQEAgLTI2Nyw2ICsyNjgsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlcihtX2NsaWVu
dC5jcmVhdGVEb2N1bWVudExvYWRlcihSZXNvdXJjZVJlcXVlc3QoVVJMKFBhcnNlZFVSTFN0cmlu
ZywgZW1wdHlTdHJpbmcoKSkpLCBTdWJzdGl0dXRlRGF0YSgpKS5nZXQoKSk7CiAgICAgc2V0UHJv
dmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50TG9hZGVyLmdldCgpKTsKICAg
ICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0YXJ0TG9hZGluZ01haW5SZXNvdXJjZSgp
OworICAgIGZwcmludGYoc3RkZXJyLCAiRnJhbWVMb2FkZXI6OmluaXQoKSAlcCBmcmFtZSAlcCBy
ZWYgY291bnQgJWRcbiIsIHRoaXMsICZtX2ZyYW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogICAg
IG1fZnJhbWUuZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVNYWNoaW5l
LmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRpYWxFbXB0
eURvY3VtZW50KTsKIApAQCAtNzc2LDIwICs3NzgsMTggQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZERvbmUoKQogCiBib29sIEZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRlKCkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGlmICghY2hpbGQtPmxvYWRlcigpLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1l
Q2hpbGRyZW4obV9mcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6YWxsX29mKGNoaWxkcmVuLmJlZ2lu
KCksIGNoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAgICAgcmV0
dXJuIGZyYW1lLmxvYWRlcigpLm1faXNDb21wbGV0ZTsKKyAgICB9KTsKIH0KIAogYm9vbCBGcmFt
ZUxvYWRlcjo6YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGZvciAoRnJh
bWUqIGFuY2VzdG9yID0gJm1fZnJhbWU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT50
cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCkubV9pc0Nv
bXBsZXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBhdXRvIGxpbmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV9mcmFtZSk7CisgICAgcmV0dXJu
IHN0ZDo6YWxsX29mKGxpbmVhZ2UuYmVnaW4oKSwgbGluZWFnZS5lbmQoKSwgW10oY29uc3QgRnJh
bWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBmcmFtZS5sb2FkZXIoKS5tX2lzQ29tcGxldGU7
CisgICAgfSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkKQEAgLTEw
NTgsOCArMTA1OCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlGb3JDb29r
aWVzKCkKIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoY29uc3Qg
VVJMJiB1cmwpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKQotICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKKyAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV9mcmFtZSkpCisgICAgICAgIGZyYW1l
LmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JDb29raWVzKHVybCk7CiB9CiAKIC8vIFRoaXMg
ZG9lcyB0aGUgc2FtZSBraW5kIG9mIHdvcmsgdGhhdCBkaWRPcGVuVVJMIGRvZXMsIGV4Y2VwdCBp
dCByZWxpZXMgb24gdGhlIGZhY3QKQEAgLTExMzcsMjQgKzExMzcsMzIgQEAgYm9vbCBGcmFtZUxv
YWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0ZWQoKQog
ewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IkZyYW1lTG9hZGVyOjpjb21wbGV0ZWQoKSAlcCBmcmFtZSAlcCAoJWQpIG1faXNDb21wbGV0ZSAl
ZFxuIiwgdGhpcywgJm1fZnJhbWUsIG1fZnJhbWUucmVmQ291bnQoKSwgbV9pc0NvbXBsZXRlKTsK
IAotICAgIGZvciAoRnJhbWUqIGRlc2NlbmRhbnQgPSBtX2ZyYW1lLnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fZnJhbWUpOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgmbV9mcmFtZSkpCi0gICAgICAgIGRlc2NlbmRhbnQtPm5hdmlnYXRpb25T
Y2hlZHVsZXIoKS5zdGFydFRpbWVyKCk7CisgICAgaWYgKEZyYW1lKiBkZXNjZW5kYW50ID0gbV9m
cmFtZS50cmVlKCkudHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgeworICAgICAgICBmb3IgKGF1dG8m
IGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmRlc2NlbmRhbnQsIG1fZnJhbWUpKQorICAg
ICAgICAgICAgZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLnN0YXJ0VGltZXIoKTsKKyAgICB9
CisgICAgZnByaW50ZihzdGRlcnIsICJcdGZyYW1lICVwICglZClcbiIsICZtX2ZyYW1lLCBtX2Zy
YW1lLnJlZkNvdW50KCkpOwogCi0gICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1lLnRyZWUo
KS5wYXJlbnQoKSkKKyAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUudHJlZSgpLnBhcmVu
dCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHRwYXJlbnQgJXBcbiIsIHBhcmVudCk7
CiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCkuY2hlY2tDb21wbGV0ZWQoKTsKKyAgICB9CiAKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIlx0ZnJhbWUgJXAgKCVkKVxuIiwgJm1fZnJhbWUsIG1fZnJhbWUu
cmVmQ291bnQoKSk7CiAgICAgaWYgKG1fZnJhbWUudmlldygpKQogICAgICAgICBtX2ZyYW1lLnZp
ZXcoKS0+bWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKDApOwogICAgIG1fYWN0aXZpdHlB
c3NlcnRpb24gPSBudWxscHRyOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRFTkQgT0YgRnJhbWVM
b2FkZXI6OmNvbXBsZXRlZCgpICVwIGZyYW1lICVwICglZClcbiIsIHRoaXMsICZtX2ZyYW1lLCBt
X2ZyYW1lLnJlZkNvdW50KCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVkKCkKIHsK
ICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPnBhZ2VUaHJvdHRsZXIo
KSkKICAgICAgICAgbV9hY3Rpdml0eUFzc2VydGlvbiA9IG1fZnJhbWUucGFnZSgpLT5wYWdlVGhy
b3R0bGVyKCktPnBhZ2VMb2FkQWN0aXZpdHlUb2tlbigpOwotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8m
IGZyYW1lIDogZnJhbWVMaW5lYWdlKG1fZnJhbWUpKQorICAgICAgICBmcmFtZS5sb2FkZXIoKS5t
X2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJlcGFyZUZvckhp
c3RvcnlOYXZpZ2F0aW9uKCkKQEAgLTE2MTgsOCArMTYyNiw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnN0b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5IGNsZWFyUHJvdmlzaW9u
YWxJdGVtCiAgICAgaWYgKGNsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5ID09IFNob3VsZENsZWFy
UHJvdmlzaW9uYWxJdGVtKQogICAgICAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKDAp
OwogCi0gICAgZm9yIChSZWZQdHI8RnJhbWU+IGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5sb2FkZXIoKS5zdG9wQWxsTG9hZGVycyhjbGVhclByb3Zpc2lvbmFsSXRlbVBv
bGljeSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisg
ICAgICAgIGNoaWxkLmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKGNsZWFyUHJvdmlzaW9uYWxJdGVt
UG9saWN5KTsKICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQogICAgICAgICBt
X3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7CiAgICAgaWYgKG1fZG9j
dW1lbnRMb2FkZXIpCkBAIC0yMDMwLDggKzIwMzgsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbG9z
ZU9sZERhdGFTb3VyY2VzKCkKICAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IGZvciB0aGlz
IHRyYXZlcnNhbCB0byBiZSBwb3N0b3JkZXIgaW5zdGVhZCBvZiBwcmVvcmRlcj8KICAgICAvLyBJ
ZiBzbywgYWRkIGhlbHBlcnMgZm9yIHBvc3RvcmRlciB0cmF2ZXJzYWwsIGFuZCB1c2UgdGhlbS4g
SWYgbm90LCB0aGVuIGxldHMgbm90CiAgICAgLy8gdXNlIGEgcmVjdXJzaXZlIGFsZ29yaXRobSBo
ZXJlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNo
aWxkLT5sb2FkZXIoKS5jbG9zZU9sZERhdGFTb3VyY2VzKCk7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLmNsb3Nl
T2xkRGF0YVNvdXJjZXMoKTsKICAgICAKICAgICBpZiAobV9kb2N1bWVudExvYWRlcikKICAgICAg
ICAgbV9jbGllbnQuZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKQEAgLTIxMjMsOCArMjEzMSw4IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OnNldFJlcGxhY2luZygpCiBib29sIEZyYW1lTG9hZGVyOjpzdWJmcmFt
ZUlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgLy8gSXQncyBtb3N0IGxpa2VseSB0aGF0IHRoZSBs
YXN0IGFkZGVkIGZyYW1lIGlzIHRoZSBsYXN0IHRvIGxvYWQgc28gd2Ugd2FsayBiYWNrd2FyZHMu
Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBG
cmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGZyYW1lUmV2ZXJzZUNoaWxkcmVuKG1fZnJhbWUpKSB7CisgICAgICAgIEZyYW1l
TG9hZGVyJiBjaGlsZExvYWRlciA9IGNoaWxkLmxvYWRlcigpOwogICAgICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBjaGlsZExvYWRlci5kb2N1bWVudExvYWRlcigpOwogICAg
ICAgICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZ0luQVBJ
U2Vuc2UoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwMyw4ICsyNDExLDggQEAg
dm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoQ2hpbGRyZW4oKQogewogICAgIFZlY3RvcjxSZWY8RnJh
bWU+LCAxNj4gY2hpbGRyZW5Ub0RldGFjaDsKICAgICBjaGlsZHJlblRvRGV0YWNoLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9mcmFtZS50cmVlKCkuY2hpbGRDb3VudCgpKTsKLSAgICBmb3IgKEZy
YW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+dHJlZSgpLnByZXZpb3VzU2libGluZygpKQotICAgICAgICBjaGlsZHJlblRvRGV0YWNo
LnVuY2hlY2tlZEFwcGVuZCgqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZVJl
dmVyc2VDaGlsZHJlbihtX2ZyYW1lKSkKKyAgICAgICAgY2hpbGRyZW5Ub0RldGFjaC51bmNoZWNr
ZWRBcHBlbmQoY2hpbGQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlblRv
RGV0YWNoLnNpemUoKTsgKytpKQogICAgICAgICBjaGlsZHJlblRvRGV0YWNoW2ldLT5sb2FkZXIo
KS5kZXRhY2hGcm9tUGFyZW50KCk7CiB9CkBAIC0yNDM1LDggKzI0NDMsOCBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiAgICAgLy8gRklYTUU6IEFsd2F5cyB0cmF2ZXJz
aW5nIHRoZSBlbnRpcmUgZnJhbWUgdHJlZSBpcyBhIGJpdCBpbmVmZmljaWVudCwgYnV0IAogICAg
IC8vIGlzIGN1cnJlbnRseSBuZWVkZWQgaW4gb3JkZXIgdG8gbnVsbCBvdXQgdGhlIHByZXZpb3Vz
IGhpc3RvcnkgaXRlbSBmb3IgYWxsIGZyYW1lcy4KICAgICBWZWN0b3I8UmVmPEZyYW1lPiwgMTY+
IGZyYW1lczsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFt
ZXMuYXBwZW5kKCpmcmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
KG1fZnJhbWUubWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKIAog
ICAgIC8vIFRvIHByb2Nlc3MgY2hpbGRyZW4gYmVmb3JlIHRoZWlyIHBhcmVudHMsIGl0ZXJhdGUg
dGhlIHZlY3RvciBiYWNrd2FyZHMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJhbWVzLnNpemUo
KTsgaTsgLS1pKQpAQCAtMjQ0OSw4ICsyNDU3LDggQEAgaW50IEZyYW1lTG9hZGVyOjpudW1QZW5k
aW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNlKSBjb25zdAogICAgICAgICByZXR1cm4g
bV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q291bnQo
KTsKIAogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFt
ZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKQot
ICAgICAgICBjb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS0+cmVxdWVzdENvdW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
V2l0aGluKG1fZnJhbWUpKQorICAgICAgICBjb3VudCArPSBmcmFtZS5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKICAgICByZXR1cm4gY291bnQ7CiB9
CiAKQEAgLTI3OTUsOCArMjgwMywxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRDbG9zZSgp
CiAgICAgLy8gU3RvcmUgYWxsIHJlZmVyZW5jZXMgdG8gZWFjaCBzdWJmcmFtZSBpbiBhZHZhbmNl
IHNpbmNlIGJlZm9yZXVubG9hZCdzIGV2ZW50IGhhbmRsZXIgbWF5IG1vZGlmeSBmcmFtZQogICAg
IFZlY3RvcjxSZWY8RnJhbWU+LCAxNj4gdGFyZ2V0RnJhbWVzOwogICAgIHRhcmdldEZyYW1lcy5h
cHBlbmQobV9mcmFtZSk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZt
X2ZyYW1lKSkKLSAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZCgqY2hpbGQpOworICAgIGlmIChG
cmFtZSogZmlyc3RDaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmZpcnN0Q2hpbGQsIG1f
ZnJhbWUpKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgfQog
CiAgICAgYm9vbCBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgIHsKQEAgLTMwNTUsOCArMzA2NSw4
IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRpb25z
KGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uCiAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwogICAgICAgICBpZiAoIW9y
aWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wRnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcmlnaW4tPmlzU2FtZVNjaGVtZUhv
c3RQb3J0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lQW5jZXN0b3JzKG1fZnJhbWUpKSB7CisgICAgICAgICAgICBp
ZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAKaW5kZXggZTgyZTdkMWVmY2M3NmE2Zjg5YWFiNGI5MzkzYzA3NTc3YjQyYzQzNy4uZmRlMDU0
MzNjMTRhZGI5YzEwZGM1NGNkYTRhYmI4M2UzMTQ1YzkzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
Q2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lLmgiCkBAIC0xOTMsOSArMTk0LDkgQEAgdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQogLy8gaGlzdG9yeSBpdGVtLgogdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQogewotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCZtX2ZyYW1lKSkgewotICAgICAgICBmcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnNh
dmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuc2F2
ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5
KCkuY3VycmVudEl0ZW0oKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
V2l0aGluKG1fZnJhbWUpKSB7CisgICAgICAgIGZyYW1lLmxvYWRlcigpLmhpc3RvcnkoKS5zYXZl
RG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5oaXN0b3J5KCkuc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLmxvYWRlcigpLmhpc3RvcnkoKS5j
dXJyZW50SXRlbSgpKTsKICAgICB9CiB9CiAKQEAgLTUxNyw4ICs1MTgsOCBAQCB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKQogICAgIH0KIAogICAgIC8v
IEl0ZXJhdGUgb3ZlciB0aGUgcmVzdCBvZiB0aGUgdHJlZQotICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJl
ZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVj
dXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hp
bGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1cnNp
dmVVcGRhdGVGb3JDb21taXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRl
Rm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpCkBAIC01NjEsOCArNTYyLDggQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigp
CiAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOwogCiAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBy
ZXN0IG9mIHRoZSB0cmVlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlVXBkYXRlRm9yU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxk
cmVuKG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZl
VXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwogfQogCiB2b2lkIEhpc3RvcnlDb250
cm9sbGVyOjp1cGRhdGVGb3JGcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNjgwLDggKzY4MSw4IEBA
IFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVtVHJl
ZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAgICAgICAgICAgICBiZkl0ZW0tPnNldERvY3VtZW50
U2VxdWVuY2VOdW1iZXIobV9wcmV2aW91c0l0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgp
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVy
KCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKG1fZnJhbWUpKSB7
CisgICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC5sb2FkZXIoKTsK
ICAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci5mcmFtZUhhc0xv
YWRlZCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFtZSBjb3JyZXNw
b25kaW5nIHRvIGFuIDxvYmplY3Q+IGVsZW1lbnQgdGhhdCBuZXZlciBsb2FkZWQsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKaW5kZXggMzUwNTY3ZTUx
ODgwYzQ0ZGEwNGU2OGExMWQ4YzMxZjYzZWYyNjFhZS4uMmJlNTE3MGY1YmFjOWQ0NDEwMjdiNTc3
ZWUxN2RjNzMwZDQ4NTRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmln
YXRpb25TY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9u
U2NoZWR1bGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgog
I2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaCIK
QEAgLTM0MSw5ICszNDIsOSBAQCBMb2NrQmFja0ZvcndhcmRMaXN0IE5hdmlnYXRpb25TY2hlZHVs
ZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lJiB0YXJnZXRGcgogICAgIC8vIE5hdmln
YXRpb24gb2YgYSBzdWJmcmFtZSBkdXJpbmcgbG9hZGluZyBvZiBhbiBhbmNlc3RvciBmcmFtZSBk
b2VzIG5vdCBjcmVhdGUgYSBuZXcgYmFjay9mb3J3YXJkIGl0ZW0uCiAgICAgLy8gVGhlIGRlZmlu
aXRpb24gb2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgYWxsIGhhbmRsZXJzIGZv
ciB0aGUgbG9hZCBldmVudCBoYXZlIGJlZW4gcnVuLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTcgZm9yIHRoZSBvcmlnaW5hbCBtb3RpdmF0
aW9uIGZvciB0aGlzLgotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gdGFyZ2V0RnJhbWUudHJl
ZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgpLnBhcmVu
dCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFuY2VzdG9yLT5kb2N1bWVudCgp
OwotICAgICAgICBpZiAoIWFuY2VzdG9yLT5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwgKGRvY3Vt
ZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQorICAgIGZvciAoYXV0byYg
YW5jZXN0b3IgOiBmcmFtZUFuY2VzdG9ycyh0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gYW5jZXN0b3IuZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFhbmNlc3Rv
ci5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNz
aW5nTG9hZEV2ZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6
OlllczsKICAgICB9CiAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCmluZGV4IDBiNTJjMjk1ODhhYTFhOTNlYTExN2VkM2FjODZiZDYwYjZiOWFh
NWUuLjVhYjdiNzY3MTRkYjFjYmNlYTZiMTBmNWIxNzVmMGNiZTAyZGJlNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGaWxlQ2hvb3Nlci5oIgog
I2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
RnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkdlb2xv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC0yMTYsOCArMjE3LDgg
QEAgYm9vbCBDaHJvbWU6OmNhblJ1bk1vZGFsKCkgY29uc3QKIAogc3RhdGljIGJvb2wgY2FuUnVu
TW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwoUGFnZSYgcGFnZSwgQ2hyb21lQ2xpZW50OjpEaWFs
b2dUeXBlIGRpYWxvZywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBl
IGRpc21pc3NhbCA9IGZyYW1lLT5sb2FkZXIoKS5wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3Bh
dGNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS5tYWlu
RnJhbWUoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBlIGRpc21p
c3NhbCA9IGZyYW1lLmxvYWRlcigpLnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCgp
OwogICAgICAgICBpZiAoZGlzbWlzc2FsICE9IEZyYW1lTG9hZGVyOjpOb0Rpc21pc3NhbCkKICAg
ICAgICAgICAgIHJldHVybiBwYWdlLmNocm9tZSgpLmNsaWVudCgpLnNob3VsZFJ1bk1vZGFsRGlh
bG9nRHVyaW5nUGFnZURpc21pc3NhbChkaWFsb2csIG1lc3NhZ2UsIGRpc21pc3NhbCk7CiAgICAg
fQpAQCAtNTU4LDkgKzU1OSw5IEBAIHZvaWQgQ2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2Uo
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogCiAgICAgbV9kaXNwbGF5SUQgPSBkaXNwbGF5
SUQ7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPndpbmRvd1Nj
cmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRy
YXZlcnNhbChtX3BhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5kb2N1bWVu
dCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+d2luZG93U2NyZWVuRGlkQ2hhbmdl
KGRpc3BsYXlJRCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAKaW5kZXggYmUxN2VhZWZiMmZkZmRmNThhYjZlYzg0ZGU5ZTBhNzQxZDg0MTYxZC4uNjhh
ODYxNmY4MjBiMDAwZWRkMThiY2FiMzY3ZWI2MzZhZjEwMGExMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkV2ZW50
SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBA
IC02ODcsOCArNjg4LDggQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJsZUludGVy
bmFsKGJvb2wgY29udGVudElzVmlzaWJsZSkKIAogICAgIGNvbnRlbnRBcmVhRGlkU2hvd09ySGlk
ZSh2aWV3LCBjb250ZW50SXNWaXNpYmxlKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1f
cGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7Cisg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFnZS5tYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgICAg
IGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKaW5kZXggZTA5MjQ0ZDQyYzY1YWE1ZGIyNDgxYzJhMGY3NjcwZjViMDRjNDE3ZS4uNGJhNTg3
ZWUwNzQyNWIyMDM1YTUxZWQxN2JjY2FkOWIwMDM1N2ZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBA
IC0yMTIsNiArMjEzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWU6OmNyZWF0ZShQYWdlKiBw
YWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKIAogRnJhbWU6On5GcmFt
ZSgpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJGcmFtZTo6fkZyYW1lICVwXG4iLCB0aGlzKTsK
ICAgICBzZXRWaWV3KDApOwogICAgIGxvYWRlcigpLmNhbmNlbEFuZENsZWFyKCk7CiAKQEAgLTY1
Miw4ICs2NTQsOCBAQCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjb25z
dCBGbG9hdFNpemUmIHBhZ2VTaXplLCBjb25zdCBGbG9hdFNpegogICAgIH0KIAogICAgIC8vIFN1
YmZyYW1lcyBvZiB0aGUgb25lIHdlJ3JlIHByaW50aW5nIGRvbid0IGxheSBvdXQgdG8gdGhlIHBh
Z2Ugc2l6ZS4KLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVlKCkuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAg
IGNoaWxkLT5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAw
LCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hp
bGRyZW4oKnRoaXMpKQorICAgICAgICBjaGlsZC5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRT
aXplKCksIEZsb2F0U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAKIGJvb2wg
RnJhbWU6OnNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgY29uc3QKQEAgLTk4Niw4ICs5ODgsOCBA
QCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFj
dG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgZG9jdW1lbnQtPnJlY2FsY1N0eWxlKFN0
eWxlOjpGb3JjZSk7CiAKLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKG1fcGFnZVpvb21GYWN0b3Is
IG1fdGV4dFpvb21GYWN0b3IpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVu
KCp0aGlzKSkKKyAgICAgICAgY2hpbGQuc2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhtX3BhZ2Va
b29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKTsKIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSB0aGlzLT52aWV3KCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJWaWV3KCkgJiYg
ZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRGaXJzdExh
eW91dCgpKQpAQCAtMTA0NCw4ICsxMDQ2LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiB2b2lkIEZyYW1lOjpkZXZpY2VPclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWQoKQogewotICAgIGZvciAoUmVmUHRyPEZyYW1lPiBjaGlsZCA9IHRyZWUoKS5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgY2hpbGQtPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOworICAgIGZv
ciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hpbGQuZGV2
aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBpZiAoUmVuZGVyVmlldyogcm9v
dCA9IGNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByb290LT5jb21wb3NpdG9yKCkuZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CkBAIC0xMDU4LDggKzEwNjAsOCBAQCBib29sIEZy
YW1lOjppc1VSTEFsbG93ZWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgaWYgKG1fcGFnZS0+
c3ViZnJhbWVDb3VudCgpID49IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxzZTsKLSAgICBmb3Ig
KGNvbnN0IEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCB1cmwpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBm
cmFtZSA6IGZyYW1lTGluZWFnZSgqdGhpcykpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdG
cmFnbWVudElkZW50aWZpZXIoZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCksIHVybCkpIHsKICAgICAg
ICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZUl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzZWJkODMzNjQ5Mzg3NTRhOTMwNzI5YjM5
NTExNDhkMmZkNTNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVJdGVyYXRvci5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIEZyYW1lSXRlcmF0b3JfaAor
I2RlZmluZSBGcmFtZUl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSA8
d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
RnJhbWVUcmF2ZXJzYWwgeworCitzdHJ1Y3QgQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVUeXBlKiYg
ZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCk7IH0KK307CisKK3N0
cnVjdCBSZXZlcnNlQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVUeXBlKiYgZnJhbWUpIHsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnByZXZpb3VzU2libGluZygpOyB9Cit9OworCitzdHJ1Y3QgTGFzdENo
aWxkSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZyYW1lVHlwZT4g
dm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS5sYXN0Q2hpbGQoKTsgfQorfTsKKworc3RydWN0IExpbmVhZ2VJdGVyYXRvckluY3JlbWVudCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVU
eXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpOyB9Cit9OworCitz
dHJ1Y3QgVHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZyYW1lVHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoc3RheVdpdGhpbik7IH0KKyAgICBjb25zdCBGcmFt
ZSogc3RheVdpdGhpbjsKK307CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZyYW1lVHlwZSwg
dHlwZW5hbWUgSW5jcmVtZW50T3BlcmF0aW9uPgorc3RydWN0IEZyYW1lSXRlcmF0b3IgOiBzdGQ6
Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBGcmFtZVR5cGU+IHsKKyAgICBGcmFt
ZUl0ZXJhdG9yKCkgPSBkZWZhdWx0OworICAgIEZyYW1lSXRlcmF0b3IoRnJhbWVUeXBlKiBmcmFt
ZSwgSW5jcmVtZW50T3BlcmF0aW9uJiYgaW5jcmVtZW50T3BlcmF0aW9uID0gSW5jcmVtZW50T3Bl
cmF0aW9uKCkpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2luY3JlbWVu
dE9wZXJhdGlvbihzdGQ6Om1vdmUoaW5jcmVtZW50T3BlcmF0aW9uKSkKKyAgICB7CisgICAgfQor
CisgICAgRnJhbWVUeXBlJiBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZnJhbWUpOworICAgICAgICByZXR1cm4gKm1fZnJhbWU7CisgICAgfQorICAgIG9wZXJhdG9y
IEZyYW1lVHlwZSooKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBGcmFtZUl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICAg
ICAgbV9pbmNyZW1lbnRPcGVyYXRpb24obV9mcmFtZSk7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhbWVJdGVyYXRvciYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUgPT0gb3RoZXIubV9mcmFtZTsgfQorICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGcmFtZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7IH0KKworcHJvdGVjdGVkOgorICAgIEZyYW1lVHlwZSogbV9mcmFtZTsKKyAg
ICBJbmNyZW1lbnRPcGVyYXRpb24gbV9pbmNyZW1lbnRPcGVyYXRpb247Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBJbmNyZW1lbnRPcGVyYXRpb24+Cit1c2luZyBGcmFt
ZUl0ZXJhdG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFzZV9vZjxG
cmFtZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VHlwZT46OnR5cGU+Ojp2YWx1ZSwKKyAg
ICBGcmFtZUl0ZXJhdG9yPHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19jb25zdDxU
eXBlPjo6dmFsdWUsIGNvbnN0IEZyYW1lLCBGcmFtZT46OnR5cGUsIEluY3JlbWVudE9wZXJhdGlv
bj4+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0
b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6Q2hpbGRJdGVy
YXRvckluY3JlbWVudD4+IGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJu
IHsgeyBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlw
ZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1lbnQ+PiBm
cmFtZVJldmVyc2VDaGlsZHJlbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7IGZyYW1l
LnRyZWUoKS5sYXN0Q2hpbGQoKSB9LCB7IH0gfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlw
ZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJdGVyYXRvclR5cGU8VHlwZSwgRnJh
bWVUcmF2ZXJzYWw6Okxhc3RDaGlsZEl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMYXN0Q2hpbGRy
ZW4oVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkubGFzdENoaWxk
KCkgfSAsIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6
SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6TGlu
ZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMaW5lYWdlKFR5cGUmIGZyYW1lKQoreworICAg
IHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFt
ZVRyYXZlcnNhbDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVBbmNlc3RvcnMoVHlw
ZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkucGFyZW50KCkgfSwgeyB9
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitpbmxpbmUgV1RGOjpJdGVyYXRvclJh
bmdlPEZyYW1lSXRlcmF0b3JUeXBlPFR5cGUsIEZyYW1lVHJhdmVyc2FsOjpUcmF2ZXJzYWxJdGVy
YXRvckluY3JlbWVudD4+IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQoreworICAgIHJldHVy
biB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5s
aW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZl
cnNhbDo6VHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQ+PiBmcmFtZVRyYXZlcnNhbFdpdGhpbihU
eXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7ICZmcmFtZSwgRnJhbWVUcmF2ZXJzYWw6OlRy
YXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50eyAmZnJhbWUgfSB9LCB7IH0gfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJdGVyYXRv
clR5cGU8VHlwZSwgRnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50Pj4g
ZnJhbWVUcmF2ZXJzYWxXaXRoaW4oVHlwZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiBzdGF5V2l0aGlu
KQoreworICAgIHJldHVybiB7IHsgJmZyYW1lLCBGcmFtZVRyYXZlcnNhbDo6VHJhdmVyc2FsSXRl
cmF0b3JJbmNyZW1lbnR7ICZzdGF5V2l0aGluIH0gfSwgeyB9IH07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lSXRlcmF0b3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVRyZWUuY3BwCmluZGV4IDJlZjIzYjMzNThhOWQyMmUyMGJiZWFlNDYwOGY3YzBiYzczYmE3ZmMu
LjQ0NjE3OTllMmVlNTdiODZlMGYzZGYwYTE2M2RiZTk5MTE4NTY2YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVHJlZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIK
IAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtMzcsOCArMzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEZyYW1lVHJlZTo6fkZyYW1lVHJlZSgpCiB7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGQtPnNldFZpZXcoMCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZy
YW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpKQorICAgICAgICBmcmFtZS5zZXRWaWV3KG51bGxwdHIp
OwogfQogCiB2b2lkIEZyYW1lVHJlZTo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUp
IApAQCAtMTQ0LDExICsxNDUsMTIgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6dW5pcXVlQ2hp
bGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKIAogICAgIC8v
IEZpbmQgdGhlIG5lYXJlc3QgcGFyZW50IHRoYXQgaGFzIGEgZnJhbWUgd2l0aCBhIHBhdGggaW4g
aXQuCiAgICAgVmVjdG9yPEZyYW1lKiwgMTY+IGNoYWluOwotICAgIEZyYW1lKiBmcmFtZTsKLSAg
ICBmb3IgKGZyYW1lID0gJm1fdGhpc0ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUoKS5zdGFy
dHNXaXRoKGZyYW1lUGF0aFByZWZpeCkpCisgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0cjsKKyAg
ICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkpIHsKKyAgICAg
ICAgZnJhbWUgPSAmcGFyZW50OworICAgICAgICBpZiAocGFyZW50LnRyZWUoKS51bmlxdWVOYW1l
KCkuc3RhcnRzV2l0aChmcmFtZVBhdGhQcmVmaXgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNoYWluLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGNoYWluLmFwcGVuZCgmcGFyZW50KTsK
ICAgICB9CiAgICAgU3RyaW5nQnVpbGRlciBuYW1lOwogICAgIG5hbWUuYXBwZW5kKGZyYW1lUGF0
aFByZWZpeCk7CkBAIC0xNjksNyArMTcxLDcgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6dW5p
cXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKICAg
ICByZXR1cm4gbmFtZS50b0F0b21pY1N0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBpblNjb3Bl
KEZyYW1lJiBmcmFtZSwgVHJlZVNjb3BlJiBzY29wZSkKK3N0YXRpYyBib29sIGluU2NvcGUoY29u
c3QgRnJhbWUmIGZyYW1lLCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKQogewogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTE4
NSwxNiArMTg3LDExIEBAIGlubGluZSBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNp
Z25lZCBpbmRleCwgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHVuc2lnbmVkIHNjb3BlZEluZGV4ID0gMDsKLSAg
ICBmb3IgKEZyYW1lKiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0ID0gcmVz
dWx0LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgqcmVzdWx0
LCAqc2NvcGUpKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGVkSW5kZXggPT0gaW5kZXgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIHNjb3BlZEluZGV4Kys7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBjb3Vu
dCA9IDA7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOwor
ICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCks
IFsmXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAgICAgcmV0dXJuIGluU2NvcGUoZnJhbWUs
ICpzY29wZSkgJiYgY291bnQrKyA9PSBpbmRleDsKKyAgICB9KTsKIH0KIAogaW5saW5lIEZyYW1l
KiBGcmFtZVRyZWU6OnNjb3BlZENoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVHJlZVNj
b3BlKiBzY29wZSkgY29uc3QKQEAgLTIwMiwxMSArMTk5LDEwIEBAIGlubGluZSBGcmFtZSogRnJh
bWVUcmVlOjpzY29wZWRDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFRyZWVTY29wZSog
c2NvcGUpCiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBm
b3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLnVuaXF1ZU5h
bWUoKSA9PSBuYW1lICYmIGluU2NvcGUoKmNoaWxkLCAqc2NvcGUpKQotICAgICAgICAgICAgcmV0
dXJuIGNoaWxkOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNoaWxkcmVu
ID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihj
aGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBmcmFtZSkg
eworICAgICAgICByZXR1cm4gZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lICYmIGlu
U2NvcGUoZnJhbWUsICpzY29wZSk7CisgICAgfSk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBGcmFt
ZVRyZWU6OnNjb3BlZENoaWxkQ291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAgLTIxNCwx
MyArMjEwLDEwIEBAIGlubGluZSB1bnNpZ25lZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxkQ291bnQo
VHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHVuc2lnbmVkIHNjb3BlZENvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1lKiByZXN1
bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT50cmVlKCkubmV4dFNp
YmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgqcmVzdWx0LCAqc2NvcGUpKQotICAgICAg
ICAgICAgc2NvcGVkQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NvcGVkQ291bnQ7Cisg
ICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAgIHJldHVy
biBzdGQ6OmNvdW50X2lmKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBbPV0oY29u
c3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBpblNjb3BlKGZyYW1lLCAqc2NvcGUp
OworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKQEAgLTI0MiwyNiArMjM1LDI1IEBAIHVuc2lnbmVkIEZyYW1lVHJlZTo6c2Nv
cGVkQ2hpbGRDb3VudCgpIGNvbnN0CiAKIHVuc2lnbmVkIEZyYW1lVHJlZTo6Y2hpbGRDb3VudCgp
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoRnJhbWUqIHJlc3Vs
dCA9IGZpcnN0Q2hpbGQoKTsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPnRyZWUoKS5uZXh0U2li
bGluZygpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKKyAgICBhdXRvIGNo
aWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6ZGlz
dGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCiBGcmFtZSogRnJh
bWVUcmVlOjpjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBGcmFtZSogcmVzdWx0
ID0gZmlyc3RDaGlsZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHJlc3VsdCAmJiBpICE9
IGluZGV4OyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+dHJlZSgpLm5leHRTaWJsaW5n
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgYXV0
byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAgIHJldHVybiBzdGQ6
OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFsmXShjb25zdCBGcmFt
ZSYpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50KysgPT0gaW5kZXg7CisgICAgfSk7CiB9CiAKIEZy
YW1lKiBGcmFtZVRyZWU6OmNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsK
LSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoY2hpbGQtPnRyZWUoKS51bmlx
dWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBhdXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7
CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQo
KSwgWyZdKGNvbnN0IEZyYW1lJiBmcmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUudHJlZSgp
LnVuaXF1ZU5hbWUoKSA9PSBuYW1lOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVUcmVlOjpm
aW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI4MCwxNSArMjcyLDE1IEBA
IEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFNlYXJjaCBzdWJ0cmVlIHN0YXJ0aW5n
IHdpdGggdGhpcyBmcmFtZSBmaXJzdC4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3RoaXNG
cmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fdGhpc0Zy
YW1lKSkgewotICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0gbmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVU
cmF2ZXJzYWxXaXRoaW4obV90aGlzRnJhbWUpKSB7CisgICAgICAgIGlmIChmcmFtZS50cmVlKCku
dW5pcXVlTmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwogICAgIH0K
IAogICAgIC8vIFRoZW4gdGhlIHJlc3Qgb2YgdGhlIHRyZWUuCi0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbV90aGlzRnJhbWUubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkudW5pcXVlTmFt
ZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgZm9yIChhdXRvJiBm
cmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fdGhpc0ZyYW1lLm1haW5GcmFtZSgpKSkgeworICAgICAg
ICBpZiAoZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0
dXJuICZmcmFtZTsKICAgICB9CiAKICAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVlIG9mIGVh
Y2ggb2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgpAQCAtMzAwLDkgKzI5Miw5
IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25z
dAogICAgIGZvciAoYXV0byogb3RoZXJQYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygpKSB7CiAg
ICAgICAgIGlmIChvdGhlclBhZ2UgPT0gcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
ZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZnJhbWU7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChvdGhl
clBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLnRyZWUoKS51bmlx
dWVOYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0zMTcsMTAgKzMwOSwxMCBAQCBib29sIEZyYW1lVHJlZTo6aXNEZXNj
ZW5kYW50T2YoY29uc3QgRnJhbWUqIGFuY2VzdG9yKSBjb25zdAogICAgIGlmIChtX3RoaXNGcmFt
ZS5wYWdlKCkgIT0gYW5jZXN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIGlmIChmcmFtZSA9PSBhbmNlc3RvcikKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGxpbmVhZ2Ug
PSBmcmFtZUxpbmVhZ2UobV90aGlzRnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9vZihsaW5l
YWdlLmJlZ2luKCksIGxpbmVhZ2UuZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAg
ICAgICAgcmV0dXJuICZmcmFtZSA9PSBhbmNlc3RvcjsKKyAgICB9KTsKIH0KIAogRnJhbWUqIEZy
YW1lVHJlZTo6dHJhdmVyc2VOZXh0KGNvbnN0IEZyYW1lKiBzdGF5V2l0aGluKSBjb25zdApAQCAt
Mzg3LDE3ICszNzksMTggQEAgRnJhbWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VQcmV2aW91c1dpdGhX
cmFwKGJvb2wgd3JhcCkgY29uc3QKIEZyYW1lKiBGcmFtZVRyZWU6OmRlZXBMYXN0Q2hpbGQoKSBj
b25zdAogewogICAgIEZyYW1lKiByZXN1bHQgPSAmbV90aGlzRnJhbWU7Ci0gICAgZm9yIChGcmFt
ZSogbGFzdCA9IGxhc3RDaGlsZCgpOyBsYXN0OyBsYXN0ID0gbGFzdC0+dHJlZSgpLmxhc3RDaGls
ZCgpKQotICAgICAgICByZXN1bHQgPSBsYXN0OworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFt
ZUxhc3RDaGlsZHJlbihtX3RoaXNGcmFtZSkpCisgICAgICAgIHJlc3VsdCA9ICZmcmFtZTsKIAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEZyYW1lJiBGcmFtZVRyZWU6OnRvcCgpIGNvbnN0CiB7
Ci0gICAgRnJhbWUqIGZyYW1lID0gJm1fdGhpc0ZyYW1lOwotICAgIGZvciAoRnJhbWUqIHBhcmVu
dCA9ICZtX3RoaXNGcmFtZTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnRyZWUoKS5wYXJlbnQo
KSkKLSAgICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0cjsK
KyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkpCisgICAg
ICAgIGZyYW1lID0gJnBhcmVudDsKKyAgICBBU1NFUlQoZnJhbWUpOwogICAgIHJldHVybiAqZnJh
bWU7CiB9CiAKQEAgLTQzMCw4ICs0MjMsOCBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1lcyhjb25z
dCBXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZyYW1lKiB0YXJnZQogICAg
IHByaW50SW5kZW50KGluZGVudCk7CiAgICAgcHJpbnRmKCIgIHVyaT0lc1xuXG4iLCBmcmFtZS5k
b2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgZm9yIChXZWJD
b3JlOjpGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHByaW50RnJhbWVzKCpj
aGlsZCwgdGFyZ2V0RnJhbWUsIGluZGVudCArIDEpOworICAgIGZvciAoY29uc3QgYXV0byYgY2hp
bGQgOiBXZWJDb3JlOjpmcmFtZUNoaWxkcmVuKGZyYW1lKSkKKyAgICAgICAgcHJpbnRGcmFtZXMo
Y2hpbGQsIHRhcmdldEZyYW1lLCBpbmRlbnQgKyAxKTsKIH0KIAogdm9pZCBzaG93RnJhbWVUcmVl
KGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApp
bmRleCA3ZDdmZTc0NmMzNjhhOGEzZmE0NWQ2OWY0NzFkMjAxNmU0NDJmNWY4Li45ZjYyM2E0N2Fm
OWJhMGZjNWQxNWEwZDIxNzFiM2I1NGMwZTY1YWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTQxNyw3ICs0
MTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpCiAgICAgaWYgKG5ld1JlY3Qud2lkdGgoKSAhPSBvbGRSZWN0LndpZHRoKCkpIHsKICAgICAg
ICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAgICAgICBpZiAoZnJhbWUoKS5pc01h
aW5GcmFtZSgpICYmIHBhZ2UtPnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkKICAgICAg
ICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVjYWxjdWxh
dGVNdWx0aXBsaWVycygpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTYwLDggKzk2MSw4IEBAIGJv
b2wgRnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0CiAKIGJvb2wgRnJhbWVW
aWV3OjpoYXNDb21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkgY29uc3QKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgIFJlbmRl
clZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7CisgICAgICAgIFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKTsKICAgICAgICAg
aWYgKFJlbmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvciA9IHJlbmRlclZpZXcgPyAmcmVu
ZGVyVmlldy0+Y29tcG9zaXRvcigpIDogMCkgewogICAgICAgICAgICAgaWYgKGNvbXBvc2l0b3It
PmluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05
NzUsOCArOTc2LDggQEAgYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50SW5jbHVk
aW5nRGVzY2VuZGFudHMoKSBjb25zdAogCiBib29sIEZyYW1lVmlldzo6aGFzQ29tcG9zaXRpbmdB
bmNlc3RvcigpIGNvbnN0CiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgp
LnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkg
ewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgeworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZUFuY2VzdG9ycyhmcmFtZSgpKSkgeworICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICBpZiAodmlldy0+
aGFzQ29tcG9zaXRlZENvbnRlbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtMTAwNywxMyArMTAwOCwxMSBAQCBib29sIEZyYW1lVmlldzo6aXNFbmNsb3Nl
ZEluQ29tcG9zaXRpbmdMYXllcigpIGNvbnN0CiAKIGJvb2wgRnJhbWVWaWV3OjpmbHVzaENvbXBv
c2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKQogewotICAgIGJvb2wgYWxsRnJhbWVzRmx1
c2hlZCA9IGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZSgmZnJhbWUoKSk7Ci0gICAg
Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZSgpLnRyZWUoKS5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSgpKSkgewotICAg
ICAgICBib29sIGZsdXNoZWQgPSBjaGlsZC0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzRnJhbWUoJmZyYW1lKCkpOwotICAgICAgICBhbGxGcmFtZXNGbHVzaGVkICY9IGZsdXNo
ZWQ7Ci0gICAgfQotICAgIHJldHVybiBhbGxGcmFtZXNGbHVzaGVkOworICAgIEZyYW1lKiByb290
RnJhbWUgPSAmZnJhbWUoKTsKKyAgICBhdXRvIHRyYXZlcnNhbCA9IGZyYW1lVHJhdmVyc2FsV2l0
aGluKGZyYW1lKCkpOworICAgIHJldHVybiBzdGQ6OmFsbF9vZih0cmF2ZXJzYWwuYmVnaW4oKSwg
dHJhdmVyc2FsLmVuZCgpLCBbPV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVy
biBmcmFtZS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZShyb290RnJh
bWUpOworICAgIH0pOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTb2Z0d2FyZVJlbmRlcmFibGUo
KSBjb25zdApAQCAtMTQ2MCw4ICsxNDU5LDggQEAgYm9vbCBGcmFtZVZpZXc6OnVzZVNsb3dSZXBh
aW50c0lmTm90T3ZlcmxhcHBlZCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVDYW5C
bGl0T25TY3JvbGxSZWN1cnNpdmVseSgpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2Zy
YW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2Zy
YW1lLmdldCgpKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJhbWUoKSkp
IHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAgICAg
ICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbCghdmlldy0+dXNlU2xvd1JlcGFpbnRzKCkpOwog
ICAgIH0KIH0KQEAgLTE4NDksOCArMTg0OCw4IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRJc092ZXJs
YXBwZWQoYm9vbCBpc092ZXJsYXBwZWQpCiAgICAgICAgIGlmIChSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKHRoaXMpKSB7CiAgICAgICAg
ICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJpZ2dlciByZWV2YWx1YXRpb24gZm9yIHRoaXMgYW5k
IGFsbCBkZXNjZW5kYW50IGZyYW1lcywKICAgICAgICAgICAgIC8vIHNpbmNlIGEgZnJhbWUgdXNl
cyBjb21wb3NpdGluZyBpZiBhbnkgYW5jZXN0b3IgaXMgY29tcG9zaXRpbmcuCi0gICAgICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFtZSgpKSkg
eworICAgICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUuY29udGVudFJl
bmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yJiBj
b21wb3NpdG9yID0gdmlldy0+Y29tcG9zaXRvcigpOwogICAgICAgICAgICAgICAgICAgICBjb21w
b3NpdG9yLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAgICAgICAg
ICAgICAgY29tcG9zaXRvci5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsKQEAgLTIy
NTYsOCArMjI1NSw4IEBAIHZvaWQgRnJhbWVWaWV3OjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxp
bmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCkKIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXll
ckZsdXNoVGhyb3R0bGluZ0luQWxsRnJhbWVzKCkKIHsKICAgICBib29sIGlzTWFpbkxvYWRQcm9n
cmVzc2luZyA9IGZyYW1lKCkucGFnZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2lu
ZygpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7Cisg
ICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVy
KCkpCiAgICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRo
cm90dGxpbmdFbmFibGVkKGlzTWFpbkxvYWRQcm9ncmVzc2luZyk7CiAgICAgfQogfQpAQCAtMjQ2
MywxNCArMjQ2MiwxNCBAQCB2b2lkIEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIEZyYW1lVmlldzo6c2Vydmlj
ZVNjcmlwdGVkQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKQog
ewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+dmlldygpLT5z
ZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpOwotICAgICAgICBmcmFtZS0+YW5pbWF0aW9uKCkuc2Vy
dmljZUFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwo
ZnJhbWUoKSkpIHsKKyAgICAgICAgZnJhbWUudmlldygpLT5zZXJ2aWNlU2Nyb2xsQW5pbWF0aW9u
cygpOworICAgICAgICBmcmFtZS5hbmltYXRpb24oKS5zZXJ2aWNlQW5pbWF0aW9ucygpOwogICAg
IH0KIAogICAgIFZlY3RvcjxSZWZQdHI8RG9jdW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBkb2N1bWVudHMuYXBwZW5kKGZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZnJhbWUoKSkpCisg
ICAgICAgIGRvY3VtZW50cy5hcHBlbmQoZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGRvY3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgZG9jdW1lbnRz
W2ldLT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGlt
ZSk7CkBAIC0yNTA5LDggKzI1MDgsOCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0QmFzZUJhY2tncm91
bmRDb2xvcihjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogCiB2b2lkIEZyYW1lVmlldzo6
dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3Is
IGJvb2wgdHJhbnNwYXJlbnQpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdl
dCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdl
dCgpKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFtZSgpKSkgewor
ICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAg
ICB2aWV3LT5zZXRUcmFuc3BhcmVudCh0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICB2aWV3LT5z
ZXRCYXNlQmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7CiAgICAgICAgIH0KQEAgLTM2
NTAsOCArMzY0OSw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3Qo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gaW4gdGhlIHJl
bmRlciB0cmVlIG9ubHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXN0b3JlIHRoZSBzZWxlY3Rp
b24gZnJvbSB0aGUgRE9NCiAgICAgLy8gYWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAg
IGlmIChzaG91bGRQYWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7Ci0gICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiByb290ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJhbWUoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICAgICAgcm9vdC0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM2NjYsOCArMzY2NSw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNo
b3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAKICAgICAvLyBSZXN0
b3JlIHNlbGVjdGlvbi4KICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNl
bGVjdGlvbikgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKQot
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKQorICAg
ICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgIH0KIAog
ICAgIC8vIFJlc3RvcmUgY2FjaGVkIHBhaW50IGJlaGF2aW9yLgpAQCAtNDAxMCw4ICs0MDA5LDgg
QEAgdm9pZCBGcmFtZVZpZXc6OnNldFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tSZXBhaW50cykK
ICAgICAgICAgICAgIGZyYW1lKCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgfQog
Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZS0+dHJlZSgpLnRvcCgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChmcmFtZSgpLnRyZWUoKS50b3AoKSkpIHsKKyAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIo
KSkKICAgICAgICAgICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5zZXRUcmFja3NSZXBhaW50
cyh0cmFja1JlcGFpbnRzKTsKICAgICB9CiAKQEAgLTQxMjcsOCArNDEyNiw4IEBAIGJvb2wgRnJh
bWVWaWV3Ojppc0ZsaXBwZWREb2N1bWVudCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3Rp
ZnlXaWRnZXRzSW5BbGxGcmFtZXMoV2lkZ2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChG
cmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbFdpdGhpbihmcmFtZSgpKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2
aWV3ID0gZnJhbWUudmlldygpKQogICAgICAgICAgICAgdmlldy0+bm90aWZ5V2lkZ2V0cyhub3Rp
ZmljYXRpb24pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9j
YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKaW5kZXggNDRmNTIy
MGZkMzljYWQ3MWZkZGQ3ZGUzNTczNjM5Yzc4ODY5YWUxNS4uZWY1ODVlY2QyZjFlZTI3ZTIxNGY5
ODRkNGRkNDgyNTk0ODA1NTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2Nh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCkBAIC0xMjksOCArMTMwLDggQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBM
b2NhdGlvbjo6YW5jZXN0b3JPcmlnaW5zKCkgY29uc3QKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb3JpZ2lucyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGlmICghbV9mcmFtZSkK
ICAgICAgICAgcmV0dXJuIG9yaWdpbnMucmVsZWFzZSgpOwotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gbV9mcmFtZS0+dHJlZSgpLnBhcmVudCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnBhcmVudCgpKQotICAgICAgICBvcmlnaW5zLT5hcHBlbmQoZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFt
ZUFuY2VzdG9ycygqbV9mcmFtZSkpCisgICAgICAgIG9yaWdpbnMtPmFwcGVuZChmcmFtZS5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICByZXR1cm4gb3JpZ2lu
cy5yZWxlYXNlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDExZTg5MzQzMmI3MDAyNzJh
OTAyN2VjYjg2ZjJjY2ZkMTEzY2MwMWEuLmExMmYyOTdhZmIwNWY5NWIwNTk3YjEwMzQwYzFjM2E3
NzUzM2QxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNp
bmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBAIC0xMDksMTAgKzExMCwxMCBAQCBzdGF0aWMg
dm9pZCBuZXR3b3JrU3RhdGVDaGFuZ2VkKGJvb2wgaXNPbkxpbmUpCiAgICAgVmVjdG9yPFJlZjxG
cmFtZT4+IGZyYW1lczsKICAgICAKICAgICAvLyBHZXQgYWxsIHRoZSBmcmFtZXMgb2YgYWxsIHRo
ZSBwYWdlcyBpbiBhbGwgdGhlIHBhZ2UgZ3JvdXBzCi0gICAgZm9yIChhdXRvIGl0ID0gYWxsUGFn
ZXMtPmJlZ2luKCksIGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgIGZyYW1lcy5h
cHBlbmQoKmZyYW1lKTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3Jr
U3RhdGVDaGFuZ2VkKCppdCk7CisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFsbFBhZ2VzKSB7Cisg
ICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUo
KSkpCisgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKHBhZ2UpOwogICAgIH0KIAogICAg
IEF0b21pY1N0cmluZyBldmVudE5hbWUgPSBpc09uTGluZSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVF
dmVudCA6IGV2ZW50TmFtZXMoKS5vZmZsaW5lRXZlbnQ7CkBAIC0yMzUsOSArMjM2LDkgQEAgUGFn
ZTo6flBhZ2UoKQogICAgIHNldEdyb3VwTmFtZShTdHJpbmcoKSk7CiAgICAgYWxsUGFnZXMtPnJl
bW92ZSh0aGlzKTsKICAgICAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBm
cmFtZS0+d2lsbERldGFjaFBhZ2UoKTsKLSAgICAgICAgZnJhbWUtPmRldGFjaEZyb21QYWdlKCk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgewor
ICAgICAgICBmcmFtZS53aWxsRGV0YWNoUGFnZSgpOworICAgICAgICBmcmFtZS5kZXRhY2hGcm9t
UGFnZSgpOwogICAgIH0KIAogICAgIG1fZWRpdG9yQ2xpZW50LT5wYWdlRGVzdHJveWVkKCk7CkBA
IC0yNjgsMTAgKzI2OSwxMSBAQCBQYWdlOjp+UGFnZSgpCiB1aW50NjRfdCBQYWdlOjpyZW5kZXJU
cmVlU2l6ZSgpIGNvbnN0CiB7CiAgICAgdWludDY0X3QgdG90YWwgPSAwOwotICAgIGZvciAoY29u
c3QgRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkgfHwg
IWZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgLy8gRklYTUU6IFJldmVydCB0
byBtYWluRnJhbWUoKSB3aGVuIGNvbnN0IGl0ZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCisgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKCptX21haW5GcmFtZSkpIHsKKyAgICAgICAg
aWYgKCFmcmFtZS5kb2N1bWVudCgpIHx8ICFmcmFtZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdG90YWwgKz0gZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKS0+cmVuZGVyZXJDb3VudCgpOworICAgICAgICB0b3RhbCArPSBmcmFt
ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCktPnJlbmRlcmVyQ291bnQoKTsKICAgICB9CiAgICAg
cmV0dXJuIHRvdGFsOwogfQpAQCAtNDI2LDIyICs0MjgsMjIgQEAgdm9pZCBQYWdlOjp1cGRhdGVT
dHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCkKIHsKICAgICBp
ZiAoIWFsbFBhZ2VzKQogICAgICAgICByZXR1cm47Ci0gICAgSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVy
YXRvciBpdCA9IGFsbFBhZ2VzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworCisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFs
bFBhZ2VzKQorICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+
bWFpbkZyYW1lKCkpKSB7CiAgICAgICAgICAgICAvLyBJZiBhIGNoYW5nZSBpbiB0aGUgZ2xvYmFs
IGVudmlyb25tZW50IGhhcyBvY2N1cnJlZCwgd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIGFsbCB0aGUgcHJvcGVydGllcyBhIHJlY29tcHV0ZWQsIHRoZXJlZm9yZSB3ZSBpbnZh
bGlkYXRlCiAgICAgICAgICAgICAvLyB0aGUgcHJvcGVydGllcyBjYWNoZS4KLSAgICAgICAgICAg
IGlmIChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyID0gZnJhbWUtPmRvY3VtZW50KCktPnN0
eWxlUmVzb2x2ZXJJZkV4aXN0cygpKQorICAgICAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIgPSBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSkK
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZSgpOwotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2Vk
U3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnNjaGVkdWxlRm9y
Y2VkU3R5bGVSZWNhbGMoKTsKICAgICAgICAgfQogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAg
aWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgICAgICBk
b2N1bWVudC0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgfQog
fQpAQCAtNDYyLDkgKzQ2NCw5IEBAIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxv
YWQpCiAgICAgICAgIGlmICghcmVsb2FkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IAotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
ZnJhbWUtPmxvYWRlcigpLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkpCi0gICAg
ICAgICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoKmZyYW1lKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UubWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgICAgICBpZiAoZnJhbWUubG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1Bs
dWdpbnMoKSkKKyAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFt
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ4MSw4ICs0ODMsOCBAQCBQbHVnaW5EYXRhJiBQ
YWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKIAogaW5saW5lIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciog
UGFnZTo6dGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpCiB7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+dGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpKQorICAg
IGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgaWYgKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmcmFtZS5kb2N1bWVudCgp
LT50YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbGlz
dGVuZXI7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNjY5LDggKzY3MSw4IEBAIHZvaWQgUGFn
ZTo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKICAgICB9CiAKICAgICBtX2RlZmVyc0xv
YWRpbmcgPSBkZWZlcnM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1l
LT5sb2FkZXIoKS5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUubG9hZGVyKCku
c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwogfQogCiB2b2lkIFBhZ2U6OmNsZWFyVW5kb1JlZG9P
cGVyYXRpb25zKCkKQEAgLTY5Nyw5ICs2OTksOCBAQCB2b2lkIFBhZ2U6OnNldE1lZGlhVm9sdW1l
KGZsb2F0IHZvbHVtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tZWRpYVZvbHVtZSA9IHZv
bHVtZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRab29tZWRPdXRQ
YWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCkBAIC03MzAsOCArNzMxLDggQEAgdm9pZCBQYWdl
OjpzZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4s
IGJvb2wgaW5TdGFibGUKICAgICAgICAgfQogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJ
UFQpCiAgICAgICAgIGlmIChpblN0YWJsZVN0YXRlKSB7Ci0gICAgICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgICAgICAgICBmcmFtZS5kb2N1
bWVudCgpLT5wYWdlU2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgICAgIH0KICNl
bmRpZgogICAgICAgICByZXR1cm47CkBAIC03NjgsOCArNzY5LDggQEAgdm9pZCBQYWdlOjpzZXRQ
YWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wg
aW5TdGFibGUKIAogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGlu
U3RhYmxlU3RhdGUpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwor
ICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQor
ICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0
YWJsZSgpOwogICAgIH0KICNlbmRpZgogfQpAQCAtNzg5LDggKzc5MCw4IEBAIHZvaWQgUGFnZTo6
c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgbWFpbkZyYW1lKCku
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgcGFnZUNhY2hlKCktPm1hcmtQ
YWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCh0aGlzKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKQotICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBw
YWdlQ2FjaGUoKS0+bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOwogICAgIEdyYXBo
aWNzQ29udGV4dDo6dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKQEAgLTgyNCw4ICs4
MjUsOCBAQCB2b2lkIFBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xsYmFyc1RvSGlkZGVuKGJvb2wg
bG9ja092ZXJsYXlTY3JvbGxiYXJzKQogCiAgICAgdmlldy0+bG9ja092ZXJsYXlTY3JvbGxiYXJT
dGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmll
dygpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgICAg
IGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTgzMywxMCArODM0
LDggQEAgdm9pZCBQYWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxv
Y2tPdmVybGF5U2Nyb2xsYmFycykKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNj
cm9sbGFibGVBcmVhcy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gKml0OworICAgICAgICBmb3IgKGF1dG8qIHNj
cm9sbGFibGVBcmVhIDogKnNjcm9sbGFibGVBcmVhcykKICAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhLT5sb2NrT3ZlcmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxi
YXJzKTsKLSAgICAgICAgfQogICAgIH0KIH0KICAgICAKQEAgLTg5Miw4ICs4OTEsOCBAQCB2b2lk
IFBhZ2U6OnNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KQogCiB2b2lkIFBhZ2U6OnNldElz
SW5XaW5kb3dJbnRlcm5hbChib29sIGlzSW5XaW5kb3cpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7
CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAg
ICAgICAgIGZyYW1lVmlldy0+c2V0SXNJbldpbmRvdyhpc0luV2luZG93KTsKICAgICB9CiAKQEAg
LTkwNCwxOCArOTAzLDE4IEBAIHZvaWQgUGFnZTo6c2V0SXNJbldpbmRvd0ludGVybmFsKGJvb2wg
aXNJbldpbmRvdykKIHZvaWQgUGFnZTo6c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9ucygpCiB7CiAg
ICAgbV9zY3JpcHRlZEFuaW1hdGlvbnNTdXNwZW5kZWQgPSB0cnVlOwotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
IGZyYW1lLT5kb2N1bWVudCgpLT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2Fs
bGJhY2tzKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFt
ZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1l
LmRvY3VtZW50KCktPnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3Mo
KTsKICAgICB9CiB9CiAKIHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsK
ICAgICBtX3NjcmlwdGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJD
YWxsYmFja3MoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZy
YW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJh
bWUuZG9jdW1lbnQoKS0+cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tz
KCk7CiAgICAgfQogfQogCkBAIC05MjMsOSArOTIyLDkgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc3Vh
bGx5SWRsZUludGVybmFsKGJvb2wgaXNWaXN1YWxseUlkbGUpCiB7CiAgICAgc2V0VGltZXJUaHJv
dHRsaW5nRW5hYmxlZChpc1Zpc3VhbGx5SWRsZSk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChp
c1Zpc3VhbGx5SWRsZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1h
aW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAg
IGZyYW1lLmRvY3VtZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxl
ZChpc1Zpc3VhbGx5SWRsZSk7CiAgICAgfQogfQogCkBAIC05NTUsOSArOTU0LDkgQEAgdm9pZCBQ
YWdlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiAgICAgICAgICAgICBtX3VzZXJT
dHlsZVNoZWV0ID0gU3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5
bGVTaGVldEFzVVRGOC5zaXplKCkpOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAgfQog
fQogCkBAIC0xMDE3LDE0ICsxMDE2LDE0IEBAIHZvaWQgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCkKIAogdm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKQogewotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT52
aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFt
ZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlu
a3MoKTsKIH0KIAogdm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCBs
aW5rSGFzaCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmso
bGlua0hhc2gpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJh
bWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZh
bGlkYXRlU3R5bGVGb3JMaW5rKGxpbmtIYXNoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXREZWJ1Z2dl
cihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKQEAgLTEwMzQsOCArMTAzMyw4IEBAIHZvaWQgUGFn
ZTo6c2V0RGVidWdnZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiAKICAgICBtX2RlYnVnZ2Vy
ID0gZGVidWdnZXI7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBm
cmFtZS0+c2NyaXB0KCkuYXR0YWNoRGVidWdnZXIobV9kZWJ1Z2dlcik7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuc2Ny
aXB0KCkuYXR0YWNoRGVidWdnZXIobV9kZWJ1Z2dlcik7CiB9CiAKIFN0b3JhZ2VOYW1lc3BhY2Uq
IFBhZ2U6OnNlc3Npb25TdG9yYWdlKGJvb2wgb3B0aW9uYWxDcmVhdGUpCkBAIC0xMDcxLDE3ICsx
MDcwLDE3IEBAIHZvaWQgUGFnZTo6c2V0TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChSZWZQdHI8RnJhbWU+IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+bG9hZGVyKCkudGVsbENs
aWVudEFib3V0UGFzdE1lbW9yeUNhY2hlTG9hZHMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDog
ZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5sb2FkZXIoKS50ZWxs
Q2xpZW50QWJvdXRQYXN0TWVtb3J5Q2FjaGVMb2FkcygpOwogfQogCiB2b2lkIFBhZ2U6OnNldE1p
bmltdW1UaW1lckludGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKICAgICBk
b3VibGUgb2xkVGltZXJJbnRlcnZhbCA9IG1fbWluaW11bVRpbWVySW50ZXJ2YWw7CiAgICAgbV9t
aW5pbXVtVGltZXJJbnRlcnZhbCA9IG1pbmltdW1UaW1lckludGVydmFsOwotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dFdpdGhXcmFwKGZhbHNlKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50
KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+YWRqdXN0TWluaW11bVRpbWVySW50
ZXJ2YWwob2xkVGltZXJJbnRlcnZhbCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAg
ICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9s
ZFRpbWVySW50ZXJ2YWwpOwogICAgIH0KIH0KIApAQCAtMTEwOCwzMSArMTEwNywzMCBAQCB2b2lk
IFBhZ2U6OnNldFRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fdGlt
ZXJUaHJvdHRsaW5nRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgbV90aW1lckFsaWdubWVudEludGVy
dmFsID0gZW5hYmxlZCA/IFNldHRpbmdzOjpoaWRkZW5QYWdlRE9NVGltZXJBbGlnbm1lbnRJbnRl
cnZhbCgpIDogU2V0dGluZ3M6OmRlZmF1bHRET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiAg
ICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0V2l0aFdyYXAoZmFsc2UpKSB7Ci0gICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRD
aGFuZ2VUaW1lckFsaWdubWVudEludGVydmFsKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZy
YW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmRpZENoYW5nZVRpbWVyQWxpZ25tZW50
SW50ZXJ2YWwoKTsKICAgICB9CiB9CiAKIHZvaWQgUGFnZTo6ZG5zUHJlZmV0Y2hpbmdTdGF0ZUNo
YW5nZWQoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+aW5pdEROU1ByZWZldGNoKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1l
VHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+aW5pdERO
U1ByZWZldGNoKCk7CiB9CiAKIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdlOjpwbHVn
aW5WaWV3cygpCiB7CiAgICAgVmVjdG9yPFJlZjxQbHVnaW5WaWV3QmFzZT4+IHZpZXdzOwogCi0g
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZy
YW1lKCkpKSB7CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICAg
ICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZm9yIChhdXRvIGl0
ID0gdmlldy0+Y2hpbGRyZW4oKS5iZWdpbigpLCBlbmQgPSB2aWV3LT5jaGlsZHJlbigpLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gKCppdCku
Z2V0KCk7CisgICAgICAgIGZvciAoYXV0byYgd2lkZ2V0IDogdmlldy0+Y2hpbGRyZW4oKSkgewog
ICAgICAgICAgICAgaWYgKHdpZGdldC0+aXNQbHVnaW5WaWV3QmFzZSgpKQotICAgICAgICAgICAg
ICAgIHZpZXdzLmFwcGVuZCgqdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpKTsKKyAgICAgICAgICAg
ICAgICB2aWV3cy5hcHBlbmQoKnRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0LmdldCgpKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTExNDEsOCArMTEzOSw4IEBAIFZlY3RvcjxSZWY8UGx1Z2luVmll
d0Jhc2U+PiBQYWdlOjpwbHVnaW5WaWV3cygpCiAKIHZvaWQgUGFnZTo6c3RvcmFnZUJsb2NraW5n
U3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJh
bWUuZG9jdW1lbnQoKS0+c3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogICAgIC8v
IENvbGxlY3QgdGhlIFBsdWdpblZpZXdzIGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFj
dGlvbiB0aGUgcGx1Zy1pbiB0YWtlcwogICAgIC8vIGZyb20gYmVsb3cgc3RvcmFnZUJsb2NraW5n
U3RhdGVDaGFuZ2VkIGRvZXMgbm90IGFmZmVjdCB0aGVpciBsaWZldGltZS4KQEAgLTExNjYsNyAr
MTE2NCw3IEBAIHZvaWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVuY3koKSBjb25z
dAogICAgIEFTU0VSVChtX3N1YmZyYW1lQ291bnQgPj0gMCk7CiAKICAgICBpbnQgc3ViZnJhbWVD
b3VudCA9IDA7Ci0gICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCisgICAgZm9yIChjb25z
dCBhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKICAgICAgICAgKytz
dWJmcmFtZUNvdW50OwogCiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCArIDEgPT0gc3ViZnJh
bWVDb3VudCk7CkBAIC0xMTc4LDggKzExNzYsOCBAQCB2b2lkIFBhZ2U6OnJlc3VtZUFuaW1hdGlu
Z0ltYWdlcygpCiAgICAgLy8gRHJhd2luZyBtb2RlbHMgd2hpY2ggY2FjaGUgcGFpbnRlZCBjb250
ZW50IHdoaWxlIG91dC1vZi13aW5kb3cgKFdlYktpdDIncyBjb21wb3NpdGVkIGRyYXdpbmcgYXJl
YXMsIGV0Yy4pCiAgICAgLy8gcmVxdWlyZSB0aGF0IHdlIHJlcGFpbnQgYW5pbWF0ZWQgaW1hZ2Vz
IHRvIGtpY2tzdGFydCB0aGUgYW5pbWF0aW9uIGxvb3AuCiAKLSAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWlu
RnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50
UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlclZpZXctPnJlc3VtZVBhdXNlZEltYWdlQW5p
bWF0aW9uc0lmTmVlZGVkKCk7CiAgICAgfQogfQpAQCAtMTIyNSw4ICsxMjIzLDggQEAgdm9pZCBQ
YWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICBpZiAoaXNWaXNp
YmxlKSB7CiAgICAgICAgIG1faXNQcmVyZW5kZXIgPSBmYWxzZTsKIAotICAgICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
KG1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZnJhbWUudmlldygpKQogICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+ZGlkTW92ZU9uc2NyZWVu
KCk7CiAgICAgICAgIH0KIApAQCAtMTI0NSw4ICsxMjQzLDggQEAgdm9pZCBQYWdlOjpzZXRJc1Zp
c2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKIAogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJ
VFlfQVBJKQogICAgIFZlY3RvcjxSZWY8RG9jdW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZG9jdW1lbnRzLmFwcGVuZCgqZnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJh
bWUoKSkpCisgICAgICAgIGRvY3VtZW50cy5hcHBlbmQoKmZyYW1lLmRvY3VtZW50KCkpOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkb2N1bWVudHMuc2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKQogICAgICAgICBkb2N1bWVudHNbaV0tPnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKTsKQEAg
LTEyNTgsOCArMTI1Niw4IEBAIHZvaWQgUGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBp
c1Zpc2libGUpCiAgICAgICAgICAgICBtYWluRnJhbWUoKS5hbmltYXRpb24oKS5zdXNwZW5kQW5p
bWF0aW9ucygpOwogI2VuZGlmCiAKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAg
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAg
ICAgICAgICAgICBmcmFtZVZpZXctPndpbGxNb3ZlT2Zmc2NyZWVuKCk7CiAgICAgICAgIH0KIApA
QCAtMTQ4MCwxNCArMTQ3OCwxNCBAQCB2b2lkIFBhZ2U6OmFkZFJlbGV2YW50VW5wYWludGVkT2Jq
ZWN0KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBvYgogCiB2b2lkIFBh
Z2U6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiB7Ci0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFp
bkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKIH0KIAogdm9pZCBQYWdlOjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5yZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLnJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CiAKICAgICByZXN1bWVBbmltYXRpbmdJbWFnZXMo
KTsKIH0KQEAgLTE1NDcsOCArMTU0NSw4IEBAIHZvaWQgUGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIHZv
aWQgUGFnZTo6Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYXB0aW9uUHJlZmVyZW5jZXND
aGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFt
ZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOwogfQogI2VuZGlmCiAKQEAgLTE2MDMsOCArMTYwMSw4IEBAIHZvaWQgUGFnZTo6c2V0U2Vz
c2lvbklEKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgaWYgKCFwcml2YXRlQnJvd3NpbmdTdGF0
ZUNoYW5nZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQot
ICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFuZ2Uo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQor
ICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgp
OwogCiAgICAgLy8gQ29sbGVjdCB0aGUgUGx1Z2luVmlld3MgaW4gdG8gYSB2ZWN0b3IgdG8gZW5z
dXJlIHRoYXQgYWN0aW9uIHRoZSBwbHVnLWluIHRha2VzCiAgICAgLy8gZnJvbSBiZWxvdyBwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQgZG9lcyBub3QgYWZmZWN0IHRoZWlyIGxpZmV0aW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCmluZGV4IGI1
ZjFjYTM0MWM4MjE0NjcyN2ZjZjVlMWVkMWZkMDNhMjcwMDA4YjMuLmE3YmY1ZDIyYzUyZGYxZDQ5
MTc0OGNmMDIxYzNlNTUyMTBmODRmYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cExvYWREZWZlcnJlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VHcm91cC5oIgpAQCAtNDQsOCArNDUsOCBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6
OlBhZ2VHcm91cExvYWREZWZlcnJlcihQYWdlJiBwYWdlLCBib29sIGRlZmVyU2VsZikKIAogICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY29kZSBpcyBub3QgbG9naWNhbGx5IHBhcnQgb2YgbG9hZCBk
ZWZlcnJpbmcsIGJ1dCB3ZSBkbyBub3Qgd2FudCBKUyBjb2RlIGV4ZWN1dGVkIGJlbmVhdGggbW9k
YWwKICAgICAgICAgICAgICAgICAvLyB3aW5kb3dzIG9yIHNoZWV0cywgd2hpY2ggaXMgZXhhY3Rs
eSB3aGVuIFBhZ2VHcm91cExvYWREZWZlcnJlciBpcyB1c2VkLgotICAgICAgICAgICAgICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm90aGVyUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIGZyYW1l
LT5kb2N1bWVudCgpLT5zdXNwZW5kU2NoZWR1bGVkVGFza3MoQWN0aXZlRE9NT2JqZWN0OjpXaWxs
RGVmZXJMb2FkaW5nKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVU
cmF2ZXJzYWwob3RoZXJQYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAgICAgICAgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPnN1c3BlbmRTY2hlZHVsZWRUYXNrcyhBY3RpdmVET01PYmplY3Q6Oldp
bGxEZWZlckxvYWRpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjIs
OCArNjMsOCBAQCBQYWdlR3JvdXBMb2FkRGVmZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIo
KQogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZGVmZXJyZWRGcmFtZXNbaV0tPnBhZ2UoKSkg
ewogICAgICAgICAgICAgcGFnZS0+c2V0RGVmZXJzTG9hZGluZyhmYWxzZSk7CiAKLSAgICAgICAg
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5yZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVET01PYmplY3Q6OldpbGxEZWZl
ckxvYWRpbmcpOworICAgICAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
KHBhZ2UtPm1haW5GcmFtZSgpKSkKKyAgICAgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5y
ZXN1bWVTY2hlZHVsZWRUYXNrcyhBY3RpdmVET01PYmplY3Q6OldpbGxEZWZlckxvYWRpbmcpOwog
ICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApp
bmRleCBjODAyNTljZjEwMGY2ODI4MDg3MTY2ODMxNzYyMDNiYjAxZTNkNzdmLi5jMDlkZjMxZTI4
NTcxZWIwYzlmMGYzNGQ4OWM4OWY3MDJiN2YxYTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
QEAgLTI0OCw4ICsyNDksOCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShG
cmFtZSogZnJhbWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKEZyYW1lKiBjaGlsZEZy
YW1lID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUg
PSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgc2VyaWFsaXplRnJh
bWUoY2hpbGRGcmFtZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZEZyYW1lIDogZnJhbWVDaGlsZHJl
bigqZnJhbWUpKQorICAgICAgICBzZXJpYWxpemVGcmFtZSgmY2hpbGRGcmFtZSk7CiB9CiAKIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCwgY29uc3QgVVJMJiB1cmwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4
IGQ3YjBiZWU3N2JhOWU0MDlhMzBlYTRiNmM2NDZlMGRkNTNiOGRiZTkuLmNhMjMyNGQ5NjAwYjEx
NjAyN2VmM2I1ZWIxMGExYTc2MTQ3MTM3NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udEdlbmVyaWNGYW1pbGllcy5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCkBAIC01Myw5ICs1NCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MoUGFnZSogcGFn
ZSkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+c2V0SW1hZ2VzRW5hYmxlZChwYWdl
LT5zZXR0aW5ncygpLmFyZUltYWdlc0VuYWJsZWQoKSk7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5zZXRBdXRvTG9hZEltYWdlcyhwYWdlLT5zZXR0
aW5ncygpLmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1l
IDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPnNldEltYWdlc0VuYWJsZWQocGFnZS0+
c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkpOworICAgICAgICBmcmFtZS5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5zZXRBdXRvTG9hZEltYWdlcyhwYWdlLT5zZXR0aW5n
cygpLmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKICAgICB9CiB9CiAKQEAgLTM0NSw4ICsz
NDYsOCBAQCB2b2lkIFNldHRpbmdzOjpzZXRUZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rvcihm
bG9hdCBmb250U2NhbGVGYWN0b3IpCiAgICAgbV90ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rv
ciA9IGZvbnRTY2FsZUZhY3RvcjsKIAogICAgIC8vIEZJWE1FOiBJIHdvbmRlciBpZiB0aGlzIG5l
ZWRzIHRvIHRyYXZlcnNlIGZyYW1lcyBsaWtlIGluIFdlYlZpZXdJbXBsOjpyZXNpemUsIG9yIHdo
ZXRoZXIgdGhlcmUgaXMgb25seSBvbmUgZG9jdW1lbnQgcGVyIFNldHRpbmdzIGluc3RhbmNlPwot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVjYWxjdWxhdGVNdWx0aXBsaWVycygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX3BhZ2UtPm1haW5GcmFtZSgpKSkKKyAgICAg
ICAgZnJhbWUuZG9jdW1lbnQoKS0+dGV4dEF1dG9zaXplcigpLT5yZWNhbGN1bGF0ZU11bHRpcGxp
ZXJzKCk7CiAKICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRleCBiOGM4ODUx
OTY1YTkxNDQ2YzZmZWY0OTU4YmYzMWIzYmVhZmNkODNkLi5jMGI5MDJhOTc4OTE1N2VkNjU1ZTZj
NzdjNzBiOTUyNGYxMGJkZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0
aW9uLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRN
TEFyZWFFbGVtZW50LmgiCkBAIC01MDQsMTMgKzUwNSwxNiBAQCBib29sIGNhblNjcm9sbEluRGly
ZWN0aW9uKGNvbnN0IEZyYW1lKiBmcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogCiBz
dGF0aWMgTGF5b3V0UmVjdCByZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVzKEZyYW1lKiBpbml0aWFs
RnJhbWUsIGNvbnN0IExheW91dFJlY3QmIGluaXRpYWxSZWN0KQogeworICAgIGlmICghaW5pdGlh
bEZyYW1lKQorICAgICAgICByZXR1cm4gaW5pdGlhbFJlY3Q7CisKICAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBpbml0aWFsUmVjdDsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGluaXRpYWxGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IGZyYW1lLT5vd25lckVsZW1lbnQoKSkgeworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZUxpbmVhZ2UoKmluaXRpYWxGcmFtZSkpIHsKKyAgICAgICAgaWYgKEVsZW1l
bnQqIGVsZW1lbnQgPSBmcmFtZS5vd25lckVsZW1lbnQoKSkgewogICAgICAgICAgICAgZG8gewog
ICAgICAgICAgICAgICAgIHJlY3QubW92ZShlbGVtZW50LT5vZmZzZXRMZWZ0KCksIGVsZW1lbnQt
Pm9mZnNldFRvcCgpKTsKICAgICAgICAgICAgIH0gd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC0+
b2Zmc2V0UGFyZW50KCkpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLT52aWV3KCkt
PnNjcm9sbE9mZnNldCgpKSk7CisgICAgICAgICAgICByZWN0Lm1vdmUoKC1mcmFtZS52aWV3KCkt
PnNjcm9sbE9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlY3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKaW5kZXggNDNm
ZDk0ZmFiYjFhYjc3NTRlZTlkNTc5MjZiZDc5MTE3YTJhMmY2ZS4uZTIxNzE2MWRiYjQwMDlkYjdi
ZGFhNzg2NGJmYmNmOGM5YTFjNGYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9V
c2VyQ29udGVudENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRDb250cm9sbGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRE9NV3Jh
cHBlcldvcmxkLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlVzZXJTY3JpcHQuaCIKQEAgLTE4Niw5ICsxODcsOSBAQCB2b2lkIFVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoKQogdm9pZCBVc2VyQ29udGVudENvbnRyb2xs
ZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzKCkKIHsKICAg
ICBmb3IgKGF1dG8mIHBhZ2UgOiBtX3BhZ2VzKSB7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVTaGVldENv
bGxlY3Rpb24oKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKLSAgICAgICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0
eWxlKTsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1h
aW5GcmFtZSgpKSkgeworICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+c3R5bGVTaGVldENv
bGxlY3Rpb24oKS5pbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGUoKTsKKyAgICAgICAg
ICAgIGZyYW1lLmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5
bGUpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA3NDZkNWU1ZjExMzk2MjIx
N2ZlMjI3MmMxZDBmMTVhMmRjNWQ3YTg0Li5iMmNiYjgwY2M1YWI3ZWQ1Yzk4OTlhZDYwMzUyNTNm
ZjBkMGZkMDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25Db250cm9sbGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNvbXBv
c2l0ZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgpAQCAtMjU2
LDggKzI1Nyw4IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zKCkKICAgICBzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1l
bnQoKSk7CiAKICAgICAvLyBUcmF2ZXJzZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGls
ZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+YW5pbWF0aW9uKCkuc3VzcGVuZEFu
aW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogZnJhbWVDaGlsZHJlbihtX2ZyYW1l
KSkKKyAgICAgICAgY2hpbGQuYW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKIAogICAg
IG1faXNTdXNwZW5kZWQgPSB0cnVlOwogfQpAQCAtMjcwLDggKzI3MSw4IEBAIHZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnMoKQogICAgIHJlc3VtZUFuaW1h
dGlvbnNGb3JEb2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gVHJhdmVyc2Ug
c3ViZnJhbWVzCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAg
ICAgY2hpbGQtPmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogZnJhbWVDaGlsZHJlbihtX2ZyYW1lKSkKKyAgICAgICAgY2hpbGQuYW5pbWF0aW9u
KCkucmVzdW1lQW5pbWF0aW9ucygpOwogCiAgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCAyNDVhOTk5MjMyZmM0MzU3NWMyYjMy
ZTEzYjk4Yjg5ZDcyZTFhODAwLi4yZjc5ZmVkNzEwYzNjMzYxOTM5ODkzNjBjNDc4NzQ3NDhiYjM2
MzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNDIsNiArNDIsNyBAQAog
I2ltcG9ydCAiRXZlbnRIYW5kbGVyLmgiCiAjaW1wb3J0ICJFdmVudE5hbWVzLmgiCiAjaW1wb3J0
ICJGb3JtQ29udHJvbGxlci5oIgorI2ltcG9ydCAiRnJhbWVJdGVyYXRvci5oIgogI2ltcG9ydCAi
RnJhbWVTZWxlY3Rpb24uaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiSFRNTEFy
ZWFFbGVtZW50LmgiCkBAIC02NjMsOCArNjY0LDggQEAgdm9pZCBGcmFtZTo6c2V0VGltZXJzUGF1
c2VkSW50ZXJuYWwoYm9vbCBwYXVzZWQpCiAgICAgfQogCiAgICAgLy8gV2UgbmVlZCB0byBtYWtl
IHN1cmUgYWxsIHN1YmZyYW1lcycgc3RhdGVzIGFyZSB1cCB0byBkYXRlLgotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gdHJlZSgpLmZpcnN0Q2hpbGQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBmcmFtZS0+c2V0VGltZXJzUGF1c2VkSW50ZXJu
YWwocGF1c2VkKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVDaGlsZHJlbigqdGhpcykp
CisgICAgICAgIGZyYW1lLnNldFRpbWVyc1BhdXNlZEludGVybmFsKHBhdXNlZCk7CiB9CiAKIHZv
aWQgRnJhbWU6OmRpc3BhdGNoUGFnZUhpZGVFdmVudEJlZm9yZVBhdXNlKCkKQEAgLTY3Myw4ICs2
NzQsOCBAQCB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VIaWRlRXZlbnRCZWZvcmVQYXVzZSgpCiAg
ICAgaWYgKCFpc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KHRoaXMpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmRpc3BhdGNo
RXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wYWdlaGlkZUV2
ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKCp0aGlzKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5wYWdlaGlkZUV2ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgRnJhbWU6OmRp
c3BhdGNoUGFnZVNob3dFdmVudEJlZm9yZVJlc3VtZSgpCkBAIC02ODMsOCArNjg0LDggQEAgdm9p
ZCBGcmFtZTo6ZGlzcGF0Y2hQYWdlU2hvd0V2ZW50QmVmb3JlUmVzdW1lKCkKICAgICBpZiAoIWlz
TWFpbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
dGhpczsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQodGhpcykpCi0g
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdl
VHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VzaG93RXZlbnQsIHRydWUp
LCBkb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRo
aW4oKnRoaXMpKQorICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0
Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VzaG93
RXZlbnQsIHRydWUpLCBkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2Vs
ZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVjdGlvbigpCkBAIC03MzQsOCArNzM1LDggQEAgVmlzaWJs
ZVNlbGVjdGlvbiBGcmFtZTo6cmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0CiB2
b2lkIEZyYW1lOjpyZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAgICAgc2VsZWN0aW9uKCkuc2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoZW5hYmxl
ZCk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSB0cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZWN1
cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChlbmFibGVkKTsKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogZnJhbWVDaGlsZHJlbigqdGhpcykpCisgICAgICAgIGNoaWxkLnJlY3Vyc2l2ZVNl
dFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKGVuYWJsZWQpOwogfQogCiAvLyBGSVhNRTogQnJlYWsg
dGhpcyBmdW5jdGlvbiB1cCBpbnRvIHBpZWNlcyB3aXRoIGRlc2NyaXB0aXZlIGZ1bmN0aW9uIG5h
bWVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gZm9sbG93LgpAQCAtODE3LDExICs4MTgsMTMgQEAg
TlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAog
c3RhdGljIGJvb2wgYW55RnJhbWVIYXNUaWxlZExheWVycyhGcmFtZSogcm9vdEZyYW1lKQogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcm9vdEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dChyb290RnJhbWUpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+Y29u
dGFpbnNUaWxlZEJhY2tpbmdMYXllcnMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFyb290RnJhbWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gdHJhdmVyc2FsID0gZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKnJv
b3RGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6YW55X29mKHRyYXZlcnNhbC5iZWdpbigpLCB0cmF2
ZXJzYWwuZW5kKCksIFtdKGNvbnN0IEZyYW1lJiBmcmFtZSkgeworICAgICAgICByZXR1cm4gZnJh
bWUuY29udGFpbnNUaWxlZEJhY2tpbmdMYXllcnMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBGcmFt
ZTo6dmlld3BvcnRPZmZzZXRDaGFuZ2VkKFZpZXdwb3J0T2Zmc2V0Q2hhbmdlVHlwZSBjaGFuZ2VU
eXBlKQpAQCAtODY2LDggKzg2OSw4IEBAIHZvaWQgRnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKCkKICAgICBpZiAoZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpCiAgICAgICAgIGRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLT5yZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpOwog
Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSB0cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXNldEFs
bEdlb2xvY2F0aW9uUGVybWlzc2lvbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNo
aWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hpbGQucmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Np
b24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdl
TWFjLmNwcAppbmRleCBhMmY1NDhjMmQ0YzQ0Njk4OTc5MjI5MjlmNmRiN2I4MmQ0YzFlMDlhLi41
MjI3NTVhMTg5NjZmNTRlMjEyZDZkMTdkYWJhZjA1NWY0ZDkzNWQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9QYWdlTWFjLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCkBAIC00NSwxMCArNDYsMTAgQEAgdm9pZCBQYWdlOjphZGRTY2hlZHVs
ZVBhaXIoUGFzc1JlZlB0cjxTY2hlZHVsZVBhaXI+IHBycFBhaXIpCiAgICAgbV9zY2hlZHVsZWRS
dW5Mb29wUGFpcnMtPmFkZChwYWlyKTsKIAogI2lmICFQTEFURk9STShJT1MpCi0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAo
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zY2hlZHVsZSgqcGFpcik7Ci0g
ICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVy
KCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQorICAgICAgICBpZiAoRG9jdW1lbnRMb2Fk
ZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUubG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExv
YWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNjaGVkdWxlKCpwYWlyKTsKICAg
ICB9CiAjZW5kaWYKQEAgLTY2LDEwICs2NywxMCBAQCB2b2lkIFBhZ2U6OnJlbW92ZVNjaGVkdWxl
UGFpcihQYXNzUmVmUHRyPFNjaGVkdWxlUGFpcj4gcHJwUGFpcikKICAgICBtX3NjaGVkdWxlZFJ1
bkxvb3BQYWlycy0+cmVtb3ZlKHBhaXIpOwogCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlm
IChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnVuc2NoZWR1bGUoKnBhaXIp
OwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxv
YWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgaWYgKERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT51bnNjaGVkdWxlKCpwYWly
KTsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRleCA2MWU3YmY5MWU2OTMwYmYxMDVkMzg2
OTQxOTBlZmZlODFjYmIzM2Q0Li5lNjcxMTBmMTI5MDI5MTNhMTJhNWU2ODc4NzQ5ZjVkOGRhMDU1
YWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBAIC0xNDUsOCArMTQ2LDggQEAgUmVnaW9uIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3Qg
RnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24udW5pdGUo
cGx1Z2luVmlld0Jhc2UtPmZyYW1lUmVjdCgpKTsKICAgICB9CiAKLSAgICBmb3IgKEZyYW1lKiBz
dWJmcmFtZSA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBzdWJmcmFtZTsgc3ViZnJhbWUg
PSBzdWJmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIG5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uLnVuaXRlKGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihzdWJmcmFtZSwg
b2Zmc2V0KSk7CisgICAgZm9yIChhdXRvJiBzdWJmcmFtZSA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1l
KSkKKyAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24udW5pdGUoY29tcHV0ZU5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKCZzdWJmcmFtZSwgb2Zmc2V0KSk7CiAKICAgICByZXR1cm4gbm9uRmFz
dFNjcm9sbGFibGVSZWdpb247CiAjZW5kaWYKQEAgLTE1Niw5ICsxNTcsOSBAQCB1bnNpZ25lZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZUN1cnJlbnRXaGVlbEV2ZW50SGFuZGxlckNvdW50
KCkKIHsKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50ID0gMDsKIAotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudCArPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtX3BhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUu
ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgKz0gZnJhbWUu
ZG9jdW1lbnQoKS0+d2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOwogICAgIH0KIAogICAgIHJldHVy
biB3aGVlbEV2ZW50SGFuZGxlckNvdW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBlMjMxZWQwOGIyNTQ3ZGJlNDVkMWIy
NTdhNmU1YmI1YzRkY2VhMGM1Li5hYmU3Y2JmODVmZmZkZGUyMDQ5OTIwZTQ3ZjMzYjdhMWY2NGZi
MmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCkBAIC02
MDAsOSArNjAxLDkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyVGlsZWRCYWNr
aW5nVXNhZ2VDaGFuZ2VkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGcKIAogUmVuZGVyTGF5ZXJDb21w
b3NpdG9yKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGlu
Z0xheWVycygpIGNvbnN0CiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50
KCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBjb21wb3NpdG9yID0gZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpID8gJmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRv
cigpIDogMDsKLSAgICAgICAgaWYgKGNvbXBvc2l0b3ItPmlzRmx1c2hpbmdMYXllcnMoKSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpKSkgeworICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGNvbXBvc2l0b3Ig
PSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSA/ICZmcmFtZS5jb250ZW50UmVuZGVyZXIoKS0+Y29t
cG9zaXRvcigpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKGNvbXBvc2l0b3IgJiYgY29tcG9zaXRv
ci0+aXNGbHVzaGluZ0xheWVycygpKQogICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2l0b3I7CiAg
ICAgfQogICAgIApAQCAtMzQ0MSw5ICszNDQyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyb290TGF5ZXJBdHRhY2htZW50Q2hhbmdlZCgpCiB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6bm90aWZ5SUZyYW1lc09mQ29tcG9zaXRpbmdDaGFuZ2UoKQogewogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOwotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnRyZWUoKS50cmF2ZXJzZU5leHQoJmZyYW1lKSkgewotICAgICAgICBpZiAoY2hpbGQtPmRvY3Vt
ZW50KCkgJiYgY2hpbGQtPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAg
Y2hpbGQtPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5zY2hlZHVsZVNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgIEZyYW1lKiBmcmFtZUNoaWxkID0gZnJh
bWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoZnJhbWVDaGlsZCkgeworICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmZyYW1lQ2hpbGQsIGZyYW1l
KSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLmRvY3VtZW50KCkgJiYgY2hpbGQuZG9jdW1lbnQo
KS0+b3duZXJFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgY2hpbGQuZG9jdW1lbnQoKS0+b3du
ZXJFbGVtZW50KCktPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gQ29tcG9zaXRpbmcgYWxzbyBh
ZmZlY3RzIHRoZSBhbnN3ZXIgdG8gUmVuZGVySUZyYW1lOjpyZXF1aXJlc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSwgc28gCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5j
cHAKaW5kZXggNjdiNDI0N2RjYzdhZjQ3NDcwZWIzYTBlMjZlZGQzZDllYzQ4OGQ0Ny4uMjFlN2Qy
N2Q3MDRlYTBjNWU4NGQwZDNlNDEyZDhhYWY4OTQxOGRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
cGxheS9SZXBsYXlDb250cm9sbGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTG9jYXRpb24u
aCIKQEAgLTIzNCw3ICsyMzUsNyBAQCB2b2lkIFJlcGxheUNvbnRyb2xsZXI6OnVubG9hZFNlZ21l
bnQoYm9vbCBzdXBwcmVzc05vdGlmaWNhdGlvbnMpCiAKICAgICBtX2FjdGl2ZUN1cnNvciA9IG51
bGxwdHI7CiAgICAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiB1bmxvYWRlZFNlZ21lbnQg
PSBtX2xvYWRlZFNlZ21lbnQucmVsZWFzZSgpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1f
cGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgeworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX3BhZ2UubWFp
bkZyYW1lKCkpKSB7CiAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpLT5zZXRJbnB1dEN1cnNvcihtX2VtcHR5Q3Vyc29yKTsKICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnNldElucHV0Q3Vyc29yKG1fZW1wdHlDdXJzb3IpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9k
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwCmlu
ZGV4IGJlNDVmMWI0MDQ5NmFkNDYzYzFjOGEzNWRkNDBmNmM3ZjZiYTRiMzAuLmUxODcyYmE3ZjY0
NWYxY2YxMTY2MWQ1MmMwNTdlOWVhYWM3YmEwYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkFsbFJlcGxheUlucHV0cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtODQsMTAgKzg1
LDEwIEBAIHVuc2lnbmVkIGxvbmcgZnJhbWVJbmRleEZyb21GcmFtZShjb25zdCBGcmFtZSogdGFy
Z2V0RnJhbWUpCiAgICAgQVNTRVJUKHRhcmdldEZyYW1lKTsKIAogICAgIHVuc2lnbmVkIGxvbmcg
Y3VycmVudEluZGV4ID0gMDsKLSAgICBjb25zdCBGcmFtZSogbWFpbkZyYW1lID0gJnRhcmdldEZy
YW1lLT50cmVlKCkudG9wKCk7Ci0gICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSBtYWluRnJh
bWU7IGZyYW1lOyArK2N1cnJlbnRJbmRleCwgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIGlmIChmcmFtZSA9PSB0YXJnZXRGcmFtZSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4odGFyZ2V0RnJhbWUtPnRy
ZWUoKS50b3AoKSkpIHsKKyAgICAgICAgaWYgKCZmcmFtZSA9PSB0YXJnZXRGcmFtZSkKICAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CisgICAgICAgIGN1cnJlbnRJbmRleCsrOwogICAg
IH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYjRkZTliODU3ODllZDhmODc2
MmIxZDEyYWY1M2JlZjU0ZTVhMjRkNS4uNmMxNTNhNjliNmFlYmU2Y2VmMzgzYjk3NmEwYzdjMjFi
ZTcwMzA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnRE
aXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERp
c3BhdGNoZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
RnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ3LDkgKzQ4LDkg
QEAgdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZl
bnRzKGNvbnN0IFN0cmluZyYga2V5LCBjb24KICAgICBWZWN0b3I8UmVmUHRyPEZyYW1lPj4gZnJh
bWVzOwogCiAgICAgLy8gU2VuZCBldmVudHMgb25seSB0byBvdXIgcGFnZS4KLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoc291cmNlRnJhbWUgIT0gZnJhbWUg
JiYgZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3Jp
Z2luKSkKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZnJhbWUpOworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYg
KHNvdXJjZUZyYW1lICE9ICZmcmFtZSAmJiBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikpCisgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKCZm
cmFtZSk7CiAgICAgfQogCiAgICAgZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50c1RvRnJhbWVz
KCpwYWdlLCBmcmFtZXMsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCksIHNlY3VyaXR5T3JpZ2luKTsKQEAgLTY0LDExICs2NSwxMCBAQCB2b2lk
IFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdAogICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+PiBmcmFtZXM7CiAK
ICAgICAvLyBTZW5kIGV2ZW50cyB0byBldmVyeSBwYWdlLgotICAgIGNvbnN0IEhhc2hTZXQ8UGFn
ZSo+JiBwYWdlcyA9IHBhZ2UtPmdyb3VwKCkucGFnZXMoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UGFn
ZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBhZ2VzLmJlZ2luKCksIGVuZCA9IHBhZ2VzLmVuZCgp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmKCppdCkt
Pm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgICAgICBpZiAoc291cmNlRnJhbWUgIT0gZnJhbWUgJiYgZnJhbWUtPmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3VyaXR5T3JpZ2luKSkKLSAgICAgICAg
ICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBwYWdl
LT5ncm91cCgpLnBhZ2VzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKHNvdXJjZUZyYW1l
ICE9ICZmcmFtZSAmJiBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChz
ZWN1cml0eU9yaWdpbikpCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgmZnJhbWUpOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXgg
OTYzMTc1OTcxNmE0ODY5ZDc3OGNkYTI0ZmMxMTlhNDgxNzZmYTMxNi4uMzM0YjFlYjUxM2QyNTQ5
NTc2ODAwOWM0NDI5NGQ1NzBkMGY0NjFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCkBAIC0xNTUwLDkg
KzE1NTEsOSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mU2Nyb2xsYWJsZUFyZWFzKEV4
Y2VwdGlvbkNvZGUmKQogICAgIGlmIChmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKSkK
ICAgICAgICAgY291bnQgKz0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCktPnNpemUo
KTsKIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBp
ZiAoY2hpbGQtPnZpZXcoKSAmJiBjaGlsZC0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKSkKLSAg
ICAgICAgICAgIGNvdW50ICs9IGNoaWxkLT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLT5zaXpl
KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkgeworICAg
ICAgICBpZiAoY2hpbGQudmlldygpICYmIGNoaWxkLnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkp
CisgICAgICAgICAgICBjb3VudCArPSBjaGlsZC52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLT5z
aXplKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvdW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234448</attachid>
            <date>2014-07-05 12:54:19 -0700</date>
            <delta_ts>2014-07-05 23:01:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133798-20140705125359.patch</filename>
            <type>text/plain</type>
            <size>114798</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwODI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU3ZjQ4MWNkOTE5ODdh
ZThiZDdmMDhkN2U4ZGRkNTEwOTAwZDkyNS4uOTVkNWVmMzRmOGIxNGQ5ZGFhMWYwMmFhYjhhNDUw
MzE3MTdkMzFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAxNC0wNy0wNSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIGZyYW1l
IHRyYXZlcnNhbCB0aHJvdWdoIHJhbmdlLWJhc2VkIGZvci1sb29wcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zcGlyZWQgYnkgdGhlIHNpbWlsYXIg
c3VwcG9ydCBmb3IgdHJhdmVyc2luZyBET00gZWxlbWVudHMsIHRoaXMgcGF0Y2gKKyAgICAgICAg
aW50cm9kdWNlcyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZW5hYmxlIGl0ZXJhdGlv
biBvdmVyIHRoZSBmcmFtZQorICAgICAgICB0cmVlIGluIHJhbmdlLWJhc2VkIGZvci1sb29wcyBh
bmQgb3RoZXIgU1RMIGFsZ29yaXRobXMgdGhhdCBjYW4gb3BlcmF0ZQorICAgICAgICBvbiBhIHBh
aXIgb2YgaXRlcmF0b3JzLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBi
ZSB1c2VkLCB3aXRoIFR5cGUgZGVub3RpbmcgYSB0eXBlIHRoYXQgaXMgb3IKKyAgICAgICAgZGVy
aXZlcyBmcm9tIEZyYW1lOgorICAgICAgICAtIGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisg
ICAgICAgIC0gZnJhbWVSZXZlcnNlQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJh
bWVMYXN0Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJhbWVMaW5lYWdlKFR5cGUm
IGZyYW1lKQorICAgICAgICAtIGZyYW1lQW5jZXN0b3JzKFR5cGUmIGZyYW1lKQorICAgICAgICAt
IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0
aGluKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0aGluKFR5cGUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgc3RheVdpdGhpbikKKworICAgICAgICBBbGwgZnVuY3Rpb25zIHJl
dHVybiBhIFdURjo6SXRlcmF0b3JSYW5nZSBvYmplY3QgdGhhdCBpcyBjb25zdHJ1Y3RlZCB3aXRo
CisgICAgICAgIGEgcGFpciBvZiBGcmFtZUl0ZXJhdG9ycy4gVGhlIHR5cGUgb2YgdGhlIGxhdHRl
ciBpcyBpbnN0YW50aWF0ZWQgZnJvbSB0aGUKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgdGhhdCBy
ZXNwZWN0cyB0aGUgY29uc3RuZXNzIG9mIHRoZSByZWZlcmVuY2UgcGFzc2VkIHRvIHRoZQorICAg
ICAgICBoZWxwZXIgZnVuY3Rpb24gYW5kIHVzZXMgdGhlIGluY3JlbWVudCBvcGVyYXRpb24gZm9y
IHRoZSBpdGVyYXRvciB0aGF0IGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBkZXNpcmVkIHR5
cGUgb2YgdHJhdmVyc2FsLgorCisgICAgICAgIFNpbWlsYXJseSwgdGhlIGJlZ2luIGl0ZXJhdG9y
IGlzIGNvbnN0cnVjdGVkIGluIHRoZSB3YXkgdGhhdCdzIHNwZWNpZmljIHRvCisgICAgICAgIHRo
ZSBuYXR1cmUgb2YgdHJhdmVyc2FsIC0tIGl0IGNhbiB1c2UgdGhlIGZpcnN0IGNoaWxkLCBsYXN0
IGNoaWxkLCBwYXJlbnQKKyAgICAgICAgb3IgdGhlIHBhc3NlZC1pbiBmcmFtZSBkaXJlY3RseSBh
cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbmQgaXRlcmF0b3IgaXMKKyAgICAgICAgaG9sZHMg
YSBudWxsIHBvaW50ZXIgYW5kIHN0b3BzIHRoZSBpdGVyYXRpb24gb25jZSB0aGUgaW5jcmVtZW50
IG9wZXJhdGlvbgorICAgICAgICBhbHNvIGVuZHMgdXAgcmV0dXJuaW5nIGEgbnVsbCBwb2ludGVy
LgorCisgICAgICAgIFRoaXMga2VlcHMgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgZnJhbWUgdHJl
ZSB0cmF2ZXJzYWwsIGJ1dCBwYWNrcyBpdCBpbnRvCisgICAgICAgIGEgbmljZXIgZm9ybWF0IHdp
dGggdGhlIGhlbHAgb2YgV1RGOjpJdGVyYXRvclJhbmdlLCBlbmFibGluZyB0aGUgdXNlIG9mCisg
ICAgICAgIHByZXR0aWVyIHJhbmdlLWJhc2VkIGZvci1sb29wcy4gRm9yIHN0YXJ0ZXJzIGFsbCB0
aGUgYWZmZWN0ZWQgZm9yLWxvb3BzCisgICAgICAgIGluIFdlYkNvcmUgaGF2ZSBiZWVuIHN3aXRj
aGVkIG92ZXIgdG8gdGhlIG5ldyBzeW50YXguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuQWNjZXNzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFnZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzZXREZXNpZ25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUpOgorICAgICAg
ICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdl
OjpyZXN0b3JlKToKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKiBodG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVnSW5zKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZCk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxBbmNlc3RvcnNBcmVDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsb3Nl
T2xkRGF0YVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1YmZyYW1l
SXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRp
b25zKToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVw
ZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlv
blNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpt
dXN0TG9ja0JhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6On5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9v
bUZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNVUkxBbGxvd2VkKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lSXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVRyYXZlcnNhbDo6Q2hpbGRJdGVyYXRvckluY3JlbWVudDo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6Okxhc3RD
aGlsZEl0ZXJhdG9ySW5jcmVtZW50OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVHJhdmVyc2FsOjpMaW5lYWdlSXRlcmF0b3JJbmNyZW1lbnQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6OkZyYW1lSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6Om9wZXJhdG9yIEZyYW1lVHlwZSopOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVJldmVyc2VDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUxhc3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUxpbmVhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhbWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVUcmF2ZXJzYWxXaXRoaW4p
OgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
VHJlZTo6fkZyYW1lVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnVuaXF1ZUNo
aWxkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVHJlZTo6c2NvcGVkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjpz
Y29wZWRDaGlsZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6Y2hpbGRDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVHJlZTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmlzRGVz
Y2VuZGFudE9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6ZGVlcExhc3RDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnRvcCk6CisgICAgICAgIChwcmludEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXND
b21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6aGFzQ29tcG9zaXRpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0SXNPdmVybGFwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVCYWNrZ3JvdW5kUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRUcmFja3NSZXBhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
dGlvbjo6YW5jZXN0b3JPcmlnaW5zKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojp+UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW5kZXJUcmVlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFu
Z2VJbkVudmlyb25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWZyZXNoUGx1Z2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xs
YmFyc1RvSGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXREZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZW1v
cnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRUaW1lclRo
cm90dGxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmRuc1ByZWZldGNoaW5n
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBsdWdpblZpZXdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0U2Vzc2lvbklEKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBh
Z2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZy
YW1lKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEltYWdlTG9hZGluZ1NldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRU
ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rvcik6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVz
KToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0VGltZXJzUGF1c2VkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BhdGNoUGFnZUhpZGVFdmVudEJlZm9y
ZVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRC
ZWZvcmVSZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlY3Vyc2l2ZVNldFVwZGF0
ZUFwcGVhcmFuY2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUZyYW1lSGFzVGlsZWRM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJt
aXNzaW9uKToKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OmFkZFNjaGVkdWxlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1v
dmVTY2hlZHVsZVBhaXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlG
cmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdt
ZW50KToKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZnJhbWVJbmRleEZyb21GcmFtZSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bnVtYmVyT2ZTY3JvbGxhYmxlQXJlYXMpOgorCiAyMDE0LTA3LTA1ICBDb21taXQgUXVl
dWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByMTcwODI1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWI1M2FhMzhhYzk5
OTU2Nzg4MGYzM2U2NGFmMzc3YzgyNzFlNWQxNy4uZGZlZjMyN2ViYjE2YWRjNmNhOWJjNDI2YWNk
ZDkyMDVhODExM2E1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01OCw2ICs1OCw3IEBA
CiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgog
I2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM1Miw4ICszNTMsOCBAQCBzdGF0aWMgYm9vbCBj
YW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9yaWdpbiogYWN0aXZlU2VjdXJpdHlPcmln
aW4sIEZyYW1lKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBib29sIGlzTG9j
YWxBY3RpdmVPcmlnaW4gPSBhY3RpdmVTZWN1cml0eU9yaWdpbi0+aXNMb2NhbCgpOwotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yRnJhbWUgPSB0YXJnZXRGcmFtZTsgYW5jZXN0b3JGcmFtZTsgYW5j
ZXN0b3JGcmFtZSA9IGFuY2VzdG9yRnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBE
b2N1bWVudCogYW5jZXN0b3JEb2N1bWVudCA9IGFuY2VzdG9yRnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgZm9yIChhdXRvJiBhbmNlc3RvckZyYW1lIDogZnJhbWVMaW5lYWdlKCp0YXJnZXRGcmFtZSkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGFuY2VzdG9yRG9jdW1lbnQgPSBhbmNlc3RvckZyYW1lLmRv
Y3VtZW50KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYW4gQVNTRVJUPyBGcmFtZXMg
c2hvdWxkIGFsd2F5IGhhdmUgZG9jdW1lbnRzLgogICAgICAgICBpZiAoIWFuY2VzdG9yRG9jdW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5NDYsOCArMTk0Nyw4IEBAIHZvaWQg
RG9jdW1lbnQ6OmNyZWF0ZVJlbmRlclRyZWUoKQogc3RhdGljIHZvaWQgcGFnZVdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKFBhZ2UmIHBhZ2UpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAw
OwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZvciAoY29uc3QgYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLm1haW5GcmFtZSgpKSkgeworICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGNv
dW50ICs9IGRvY3VtZW50LT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQogICAgIHBh
Z2UuY2hyb21lKCkuY2xpZW50KCkubnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZChjb3VudCk7
CkBAIC00MzM4LDggKzQzMzksMTYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNl
KHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2Zvcm1Tb3VyY2U+IHNvdXJjZSkKIHZvaWQgRG9jdW1lbnQ6
OnNldERlc2lnbk1vZGUoSW5oZXJpdGVkQm9vbCB2YWx1ZSkKIHsKICAgICBtX2Rlc2lnbk1vZGUg
PSB2YWx1ZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7IGZyYW1lICYmIGZyYW1l
LT5kb2N1bWVudCgpOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUp
KQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygp
OworCisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8m
IGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKm1fZnJhbWUpKSB7CisgICAgICAgIGlmICgh
ZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICB9CiB9CiAKIERvY3Vt
ZW50OjpJbmhlcml0ZWRCb29sIERvY3VtZW50OjpnZXREZXNpZ25Nb2RlKCkgY29uc3QKQEAgLTUx
MjIsMTIgKzUxMzEsMTIgQEAgdm9pZCBEb2N1bWVudDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHNob3J0IGZsYWcKIAogICAgICAgICAvLyBB
IGRlc2NlbmRhbnQgYnJvd3NpbmcgY29udGV4dCdzIGRvY3VtZW50IGhhcyBhIG5vbi1lbXB0eSBm
dWxsc2NyZWVuIGVsZW1lbnQgc3RhY2suCiAgICAgICAgIGJvb2wgZGVzY2VuZGVudEhhc05vbkVt
cHR5U3RhY2sgPSBmYWxzZTsKLSAgICAgICAgZm9yIChGcmFtZSogZGVzY2VuZGFudCA9IGZyYW1l
KCkgPyBmcmFtZSgpLT50cmVlKCkudHJhdmVyc2VOZXh0KCkgOiBudWxscHRyOyBkZXNjZW5kYW50
OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRIYXNOb25FbXB0eVN0YWNrID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGZy
YW1lKCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHJhdmVyc2FsID0gZnJhbWVUcmF2ZXJzYWwoKmZy
YW1lKCkpOworICAgICAgICAgICAgZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgPSBzdGQ6OmFu
eV9vZih0cmF2ZXJzYWwuYmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLAorICAgICAgICAgICAgICAg
IFtdKGNvbnN0IEZyYW1lJiBkZXNjZW5kYW50KSB7IHJldHVybiAhIWRlc2NlbmRhbnQuZG9jdW1l
bnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsgfSk7CiAgICAgICAgIH0KKwogICAgICAg
ICBpZiAoZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgJiYgIWluTGVnYWN5TW96aWxsYU1vZGUp
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNTI0NiwxMSArNTI1NSwxMyBAQCB2b2lkIERvY3Vt
ZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbigpCiAgICAgLy8gZWxlbWVudCBzdGFjayAoaWYgYW55
KSwgb3JkZXJlZCBzbyB0aGF0IHRoZSBjaGlsZCBvZiB0aGUgZG9jIGlzIGxhc3QgYW5kIHRoZSBk
b2N1bWVudCBmdXJ0aGVzdAogICAgIC8vIGF3YXkgZnJvbSB0aGUgZG9jIGlzIGZpcnN0LgogICAg
IERlcXVlPFJlZlB0cjxEb2N1bWVudD4+IGRlc2NlbmRhbnRzOwotICAgIGZvciAoRnJhbWUqIGRl
c2NlbmRhbnQgPSBmcmFtZSgpID8gZnJhbWUoKS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpIDogbnVs
bHB0cjsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVs
bHNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2Vu
ZGFudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKGZyYW1lKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBkZXNjZW5kYW50IDogZnJhbWVUcmF2ZXJzYWwoKmZyYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoZGVzY2VuZGFudC5kb2N1bWVudCgpLT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpKQorICAg
ICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2VuZGFudC5kb2N1bWVudCgpKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICAvLyA0LiBGb3IgZWFjaCBkZXNjZW5k
YW50IGluIGRlc2NlbmRhbnRzLCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
IHN0YWNrLCBhbmQgcXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBm
dWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9u
IGRlc2NlbmRhbnQuCiAgICAgZm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6aXRlcmF0b3Ig
aSA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7ICsraSkgewpA
QCAtNTc3Niw4ICs1Nzg3LDggQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSogaGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3RvdWNoRXZl
bnRUYXJnZXRzLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IEZyYW1l
KiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJh
bWUtPmRvY3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQorICAgIGZvciAoY29uc3Qg
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgaWYgKGZyYW1lLmRvY3VtZW50KCkgJiYgZnJhbWUuZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLm5lZWRUb3VjaEV2ZW50cyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuY3BwCmluZGV4IDc2NDk3NGJjMzEzZmI4MjIxZTlkNzgwMmYyMThjZTNjODY5
MWU4YmEuLmRiOTEyZmYzODY0NmQ2NzdlOWM1ZWRkZmI4NzgwNWM3YzVlYTA4MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgpAQCAtMTU3LDggKzE1OCw4IEBAIENhY2hlZEZyYW1lOjpDYWNoZWRGcmFt
ZShGcmFtZSYgZnJhbWUpCiAgICAgZnJhbWUubG9hZGVyKCkuc3RvcExvYWRpbmcoVW5sb2FkRXZl
bnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIENhY2hlZEZy
YW1lcyBmb3IgYWxsIEZyYW1lcyBpbiB0aGUgRnJhbWVUcmVlLgotICAgIGZvciAoRnJhbWUqIGNo
aWxkID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBtX2NoaWxkRnJhbWVzLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPENhY2hlZEZyYW1lPigqY2hpbGQpKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
ZnJhbWVDaGlsZHJlbihmcmFtZSkpCisgICAgICAgIG1fY2hpbGRGcmFtZXMuYXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8Q2FjaGVkRnJhbWU+KGNoaWxkKSk7CiAKICAgICAvLyBBY3RpdmUgRE9NIG9i
amVjdHMgbXVzdCBiZSBzdXNwZW5kZWQgYmVmb3JlIHdlIGNhY2hlIHRoZSBmcmFtZSBzY3JpcHQg
ZGF0YSwKICAgICAvLyBidXQgYWZ0ZXIgd2UndmUgZmlyZWQgdGhlIHBhZ2VoaWRlIGV2ZW50LCBp
biBjYXNlIHRoYXQgY3JlYXRlcyBtb3JlIG9iamVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRQYWdlLmNwcAppbmRleCBhZjA2ZjU4ZTZmODFhMjE2NzM3YmM0NThlYWNmYzkyOTY4NjUxNzc5
Li41YzM4MzM4YzBjZDAzMDYzNzZlZmQ2NDRhNmIxMWZiNzBmMGU2ZGNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtMTA2LDggKzEwNyw4
IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlJiBwYWdlKQogICAgIH0KIAogICAgIGlm
IChtX25lZWRTdHlsZVJlY2FsY0ZvclZpc2l0ZWRMaW5rcykgewotICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnZpc2l0ZWRM
aW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgICAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS5tYWluRnJhbWUoKSkpCisgICAgICAgICAg
ICBmcmFtZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9y
QWxsTGlua3MoKTsKICAgICB9CiAKICAgICBpZiAobV9uZWVkc0RldmljZVNjYWxlQ2hhbmdlZCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IDA4MzVmYTg1NGYzOTRiNjM5
YmUyYjg4MDMyNDNjNjBiNjdlMGZiYTUuLmQyYzFiNmM1ZTFkZDJkNDkzMmRhOTI5MDhkZjBhOTA4
MDA5ZmZhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgpAQCAt
MTgwLDggKzE4MSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24o
RnJhbWUqIGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCiAgICAgICAgIHJlamVjdFJlYXNvbnMgfD0g
MSA8PCBDbGllbnREZW5pZXNDYWNoaW5nOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dDYW5DYWNoZUZy
YW1lRGVjaXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSk7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dD
YW5DYWNoZUZyYW1lRGVjaXNpb24oJmNoaWxkLCBpbmRlbnRMZXZlbCArIDEpOwogICAgIAogICAg
IFBDTE9HKHJlamVjdFJlYXNvbnMgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFt
ZSBDQU4gYmUgY2FjaGVkIik7CiAgICAgUENMT0coIistLS0iKTsKQEAgLTI3Nyw4ICsyNzgsOCBA
QCBQYWdlQ2FjaGU6OlBhZ2VDYWNoZSgpCiAgICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQ
YWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFp
bmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRy
ZW4oKmZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoJmNoaWxkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlNjMx
YWUyYjE4MzE5ZDM4ZGI4YzBiZjE2NzVlNTc2MzQ2MGM2NmI2Li5hYTc1N2M4YzE0YzEwYTA4MmQ1
ZWYyODZjMmY1ZDI2YjI0ZWM4YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzNSwxOCAr
NDM2LDE4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVn
SW5zKCkKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFmcmFtZS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZG9jdW1lbnQoKS5wYWdlKCktPm1h
aW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVy
KCkuY29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGlmICghZnJhbWUuZG9jdW1l
bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxOb2RlTGlzdD4g
cGx1Z0lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZShlbWJlZFRh
Zy5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z0lucyA9IGZyYW1l
LmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICAgICAgaWYgKHBsdWdJbnMpCiAgICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0
TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdp
biwgbWltZVR5cGUpOwogCi0gICAgICAgIHBsdWdJbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudHNCeVRhZ05hbWUob2JqZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcGx1Z0lu
cyA9IGZyYW1lLmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKG9iamVjdFRhZy5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIGlmIChwbHVnSW5zKQogICAgICAgICAgICAgYWRkUGx1Z0luc0Zy
b21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnSW5zLCBw
bHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4
IGFhOTFlYjFiYWZjMTVkMDE4NjE3ODBhMDRmNmU2YzIwN2RmYTE0YmYuLmE1NGYwZWJiYThhODM1
ZjBlM2UzYTM5MDY4ZjRmYTQ2NjYxNzQ4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5o
IgpAQCAtOTgsOSArOTksOCBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cgogewogICAgIHJlc3Vs
dCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAKLSAgICBG
cmFtZSogbWFpbkZyYW1lID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpKSkg
eworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJl
ZlB0cgogICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5n
KCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRo
TWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNo
ZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEZyYW1l
SWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgICAgICAgIC5zZXRGcmFt
ZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1h
bmlmZXN0VVJMKG1hbmlmZXN0VVJMKQogICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGlj
X2Nhc3Q8aW50Pihob3N0LT5zdGF0dXMoKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVt
KHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IDdkM2ZhNzdlOTNlYzk4YjZmYzhmMjA5YjdmNGFmY2FjZjM3ODVkMTcuLjg0OTFh
NWQxZDAwMTEwMTNlOTQ2Mjg5MTM2NDFjZGRlMWI4OWIzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTksNiArNTksNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKQEAgLTI2Niw4ICsyNjcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVh
c29uKQogVmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiB7
CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
bV9kb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoKm1fZG9jdW1lbnQtPmZy
YW1lKCkpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7
CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
cmVzdWx0LmFwcGVuZChkb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3
Zjk2NDgyNDE4ZGUuLjBlMGZmYmM5MTQ2ZTIxYzM1ODE3OGMxMGQ1MzYyZDJiYjk3NDhmYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBA
IC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRpbmcu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxMCwxMCArNTExLDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6CiAgICAgLy8gYWx3YXlzIHJldHVybiB0aGUgc2FtZSB0cnVlL2ZhbHNl
IHZhbHVlLgogICAgIGJvb2wgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZmFsc2U7CiAKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUuZG9jdW1lbnQoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHVybCA6IGFsbFJlc291
cmNlc1VSTHNGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiBhbGxS
ZXNvdXJjZXNVUkxzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tp
ZT4gZG9jQ29va2llc0xpc3Q7CiAgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBn
ZXRSYXdDb29raWVzKGRvY3VtZW50LCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBkb2NDb29r
aWVzTGlzdCk7CiAKQEAgLTU0Miw4ICs1NDMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOgog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVVJMIHBhcnNl
ZFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZnJhbWUtPmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpCisgICAgICAgIFdl
YkNvcmU6OmRlbGV0ZUNvb2tpZShmcmFtZS5kb2N1bWVudCgpLCBwYXJzZWRVUkwsIGNvb2tpZU5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQpAQCAtNjI0LDIxICs2MjUsMjEgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb24KICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CiAgICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4
KHRleHQsIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKICAgICAgICAgU3RyaW5nIGNv
bnRlbnQ7CiAKLSAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291
cmNlc0ZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNl
IDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRl
eHRDb250ZW50Rm9yQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UsICZjb250ZW50KSkgewog
ICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
Ojpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVz
dWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFtZUlkKGZyYW1lKSwg
Y2FjaGVkUmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFt
ZUlkKCZmcmFtZSksIGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVudChm
cmFtZSwgZmFsc2UsICZjb250ZW50KSkgeworICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVu
dCgmZnJhbWUsIGZhbHNlLCAmY29udGVudCkpIHsKICAgICAgICAgICAgIGludCBtYXRjaGVzQ291
bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hl
cyhyZWdleCwgY29udGVudCk7CiAgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQotICAgICAg
ICAgICAgICAgIHNlYXJjaFJlc3VsdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1
bHQoZnJhbWVJZChmcmFtZSksIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50
KSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZv
clNlYXJjaFJlc3VsdChmcmFtZUlkKCZmcmFtZSksIGZyYW1lLmRvY3VtZW50KCktPnVybCgpLCBt
YXRjaGVzQ291bnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMwLDEwICs4MzEsMTAgQEAg
U3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKIAogRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKQogewotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkb2N1bWVu
dE9yaWdpbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCgqbWFpbkZyYW1lKCkpKSB7CisgICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpOwogICAgICAgICBpZiAoZG9jdW1lbnRPcmlnaW4tPnRvUmF3U3RyaW5n
KCkgPT0gb3JpZ2luUmF3U3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAg
ICAgICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC05
ODQsMTIgKzk4NSwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OgogICAgIH0KIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7Ci0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1l
Q2hpbGRyZW4oKmZyYW1lKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKICAgICAg
ICAgICAgIGNoaWxkcmVuQXJyYXkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKICAgICAg
ICAgfQotICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJhbWVU
cmVlKGNoaWxkKSk7CisgICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JGcmFtZVRyZWUoJmNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYmFkNGE4
M2E5YTUzYzIwZjUyY2NhOTI3YjQ1NGNiZjgzY2JkYWY0YS4uMDZhOTExZmE4NTU1MWEyODdmYjRi
NTA2YjQ3Y2ZkOGY2NGIyODc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
UnVudGltZUFnZW50LmNwcApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCkBAIC0xNTUsMTQgKzE1NiwxNCBAQCB2
b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnVubXV0ZUNvbnNvbGUoKQogdm9pZCBQYWdlUnVudGltZUFn
ZW50OjpyZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKQogewogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+PiBpc29sYXRlZENvbnRleHRz
OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFmcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVT
Y3JpcHQpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLnNjcmlwdCgpLmNhbkV4
ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1l
KTsKKyAgICAgICAgU3RyaW5nIGZyYW1lSWQgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUp
OwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNT
dGF0ZShmcmFtZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5X
b3JsZEV4ZWNTdGF0ZSgmZnJhbWUpOwogICAgICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChmcmFt
ZUlkLCBzY3JpcHRTdGF0ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQo
KS5jb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhpc29sYXRlZENvbnRleHRzKTsKKyAgICAgICAgZnJh
bWUuc2NyaXB0KCkuY29sbGVjdElzb2xhdGVkQ29udGV4dHMoaXNvbGF0ZWRDb250ZXh0cyk7CiAg
ICAgICAgIGlmIChpc29sYXRlZENvbnRleHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaTwgaXNvbGF0ZWRDb250ZXh0cy5zaXpl
KCk7IGkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKaW5kZXggZTU4OWE0ZGRjNDc2MTBiMzU5ZDhhMjJhNGQzMjM0OWQ5NTVlMjQ5
Zi4uNDhkMTIwNDE3ZTJiMzRiY2RlMjk0MDhkMmRlNTVjYzY1ZmJhZjY4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBA
IC0xNjIsOCArMTYzLDggQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3Jp
cHRQYXVzZWQoUGFnZSogcGFnZSwgYm9vbCBwYXVzZWQpCiAKICAgICBwYWdlLT5zZXREZWZlcnNM
b2FkaW5nKHBhdXNlZCk7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAg
ICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZSwgcGF1c2VkKTsKKyAgICBmb3IgKGF1dG8mIGZy
YW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKQorICAgICAgICBzZXRKYXZh
U2NyaXB0UGF1c2VkKCZmcmFtZSwgcGF1c2VkKTsKIH0KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWUqIGZyYW1lLCBib29sIHBhdXNlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGI3NThjYjgyMDE3NmQzM2I4MmMx
MDgzMzI2MDk1ZDVkOTkyMWY5NTIuLjk1NmY0NGY2Njc3MGM5ZDM1OTFmNjI2YTdiMWYzMTBhNzk4
M2M0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTksNiArNTks
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKQEAgLTI2OCw2ICsyNjksNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlciht
X2NsaWVudC5jcmVhdGVEb2N1bWVudExvYWRlcihSZXNvdXJjZVJlcXVlc3QoVVJMKFBhcnNlZFVS
TFN0cmluZywgZW1wdHlTdHJpbmcoKSkpLCBTdWJzdGl0dXRlRGF0YSgpKS5nZXQoKSk7CiAgICAg
c2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50TG9hZGVyLmdldCgp
KTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0YXJ0TG9hZGluZ01haW5SZXNv
dXJjZSgpOworICAgIGZwcmludGYoc3RkZXJyLCAiRnJhbWVMb2FkZXI6OmluaXQoKSAlcCBmcmFt
ZSAlcCByZWYgY291bnQgJWRcbiIsIHRoaXMsICZtX2ZyYW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkp
OwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVN
YWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRp
YWxFbXB0eURvY3VtZW50KTsKIApAQCAtNzc3LDIwICs3NzksMTggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZERvbmUoKQogCiBib29sIEZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRl
KCkgY29uc3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgIGlmICghY2hpbGQtPmxvYWRlcigpLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBjaGlsZHJlbiA9
IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6YWxsX29mKGNoaWxkcmVu
LmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAg
ICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLm1faXNDb21wbGV0ZTsKKyAgICB9KTsKIH0KIAogYm9v
bCBGcmFtZUxvYWRlcjo6YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yID0gJm1fZnJhbWU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCku
bV9pc0NvbXBsZXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIGxpbmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV9mcmFtZSk7CisgICAg
cmV0dXJuIHN0ZDo6YWxsX29mKGxpbmVhZ2UuYmVnaW4oKSwgbGluZWFnZS5lbmQoKSwgW10oY29u
c3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBmcmFtZS5sb2FkZXIoKS5tX2lzQ29t
cGxldGU7CisgICAgfSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkK
QEAgLTEwNTksOCArMTA1OSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlG
b3JDb29raWVzKCkKIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
Y29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKQotICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV9mcmFtZSkpCisgICAgICAg
IGZyYW1lLmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JDb29raWVzKHVybCk7CiB9CiAKIC8v
IFRoaXMgZG9lcyB0aGUgc2FtZSBraW5kIG9mIHdvcmsgdGhhdCBkaWRPcGVuVVJMIGRvZXMsIGV4
Y2VwdCBpdCByZWxpZXMgb24gdGhlIGZhY3QKQEAgLTExMzgsMjQgKzExMzgsMzIgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0
ZWQoKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkZyYW1lTG9hZGVyOjpjb21wbGV0ZWQoKSAlcCBmcmFtZSAlcCAoJWQpIG1faXNDb21w
bGV0ZSAlZFxuIiwgdGhpcywgJm1fZnJhbWUsIG1fZnJhbWUucmVmQ291bnQoKSwgbV9pc0NvbXBs
ZXRlKTsKIAotICAgIGZvciAoRnJhbWUqIGRlc2NlbmRhbnQgPSBtX2ZyYW1lLnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fZnJhbWUpOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZSkpCi0gICAgICAgIGRlc2NlbmRhbnQtPm5hdmln
YXRpb25TY2hlZHVsZXIoKS5zdGFydFRpbWVyKCk7CisgICAgaWYgKEZyYW1lKiBkZXNjZW5kYW50
ID0gbV9mcmFtZS50cmVlKCkudHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmRlc2NlbmRhbnQsIG1fZnJhbWUp
KQorICAgICAgICAgICAgZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLnN0YXJ0VGltZXIoKTsK
KyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJcdGZyYW1lICVwICglZClcbiIsICZtX2ZyYW1l
LCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogCi0gICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1l
LnRyZWUoKS5wYXJlbnQoKSkKKyAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUudHJlZSgp
LnBhcmVudCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHRwYXJlbnQgJXBcbiIsIHBh
cmVudCk7CiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCkuY2hlY2tDb21wbGV0ZWQoKTsKKyAgICB9
CiAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0ZnJhbWUgJXAgKCVkKVxuIiwgJm1fZnJhbWUsIG1f
ZnJhbWUucmVmQ291bnQoKSk7CiAgICAgaWYgKG1fZnJhbWUudmlldygpKQogICAgICAgICBtX2Zy
YW1lLnZpZXcoKS0+bWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKDApOwogICAgIG1fYWN0
aXZpdHlBc3NlcnRpb24gPSBudWxscHRyOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRFTkQgT0Yg
RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpICVwIGZyYW1lICVwICglZClcbiIsIHRoaXMsICZtX2Zy
YW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVk
KCkKIHsKICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPnBhZ2VUaHJv
dHRsZXIoKSkKICAgICAgICAgbV9hY3Rpdml0eUFzc2VydGlvbiA9IG1fZnJhbWUucGFnZSgpLT5w
YWdlVGhyb3R0bGVyKCktPnBhZ2VMb2FkQWN0aXZpdHlUb2tlbigpOwotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50KCkp
Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKG1fZnJhbWUpKQorICAgICAgICBmcmFtZS5sb2Fk
ZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJlcGFy
ZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCkKQEAgLTE2MjEsOCArMTYyOSw4IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnN0b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5IGNsZWFyUHJv
dmlzaW9uYWxJdGVtCiAgICAgaWYgKGNsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5ID09IFNob3Vs
ZENsZWFyUHJvdmlzaW9uYWxJdGVtKQogICAgICAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJ
dGVtKDApOwogCi0gICAgZm9yIChSZWZQdHI8RnJhbWU+IGNoaWxkID0gbV9mcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5zdG9wQWxsTG9hZGVycyhjbGVhclByb3Zpc2lvbmFs
SXRlbVBvbGljeSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFt
ZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKGNsZWFyUHJvdmlzaW9u
YWxJdGVtUG9saWN5KTsKICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQogICAg
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7CiAgICAgaWYg
KG1fZG9jdW1lbnRMb2FkZXIpCkBAIC0yMDMzLDggKzIwNDEsOCBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjbG9zZU9sZERhdGFTb3VyY2VzKCkKICAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IGZv
ciB0aGlzIHRyYXZlcnNhbCB0byBiZSBwb3N0b3JkZXIgaW5zdGVhZCBvZiBwcmVvcmRlcj8KICAg
ICAvLyBJZiBzbywgYWRkIGhlbHBlcnMgZm9yIHBvc3RvcmRlciB0cmF2ZXJzYWwsIGFuZCB1c2Ug
dGhlbS4gSWYgbm90LCB0aGVuIGxldHMgbm90CiAgICAgLy8gdXNlIGEgcmVjdXJzaXZlIGFsZ29y
aXRobSBoZXJlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5sb2FkZXIoKS5jbG9zZU9sZERhdGFTb3VyY2VzKCk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigp
LmNsb3NlT2xkRGF0YVNvdXJjZXMoKTsKICAgICAKICAgICBpZiAobV9kb2N1bWVudExvYWRlcikK
ICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKQEAgLTIxMjYsOCArMjEzNCw4
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNldFJlcGxhY2luZygpCiBib29sIEZyYW1lTG9hZGVyOjpz
dWJmcmFtZUlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgLy8gSXQncyBtb3N0IGxpa2VseSB0aGF0
IHRoZSBsYXN0IGFkZGVkIGZyYW1lIGlzIHRoZSBsYXN0IHRvIGxvYWQgc28gd2Ugd2FsayBiYWNr
d2FyZHMuCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5wcmV2aW91c1NpYmxpbmcoKSkgewotICAg
ICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGZyYW1lUmV2ZXJzZUNoaWxkcmVuKG1fZnJhbWUpKSB7CisgICAgICAg
IEZyYW1lTG9hZGVyJiBjaGlsZExvYWRlciA9IGNoaWxkLmxvYWRlcigpOwogICAgICAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBjaGlsZExvYWRlci5kb2N1bWVudExvYWRlcigp
OwogICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwNiw4ICsyNDE0
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoQ2hpbGRyZW4oKQogewogICAgIFZlY3RvcjxS
ZWY8RnJhbWU+LCAxNj4gY2hpbGRyZW5Ub0RldGFjaDsKICAgICBjaGlsZHJlblRvRGV0YWNoLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9mcmFtZS50cmVlKCkuY2hpbGRDb3VudCgpKTsKLSAgICBm
b3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmxhc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLnByZXZpb3VzU2libGluZygpKQotICAgICAgICBjaGlsZHJlblRv
RGV0YWNoLnVuY2hlY2tlZEFwcGVuZCgqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBm
cmFtZVJldmVyc2VDaGlsZHJlbihtX2ZyYW1lKSkKKyAgICAgICAgY2hpbGRyZW5Ub0RldGFjaC51
bmNoZWNrZWRBcHBlbmQoY2hpbGQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGls
ZHJlblRvRGV0YWNoLnNpemUoKTsgKytpKQogICAgICAgICBjaGlsZHJlblRvRGV0YWNoW2ldLT5s
b2FkZXIoKS5kZXRhY2hGcm9tUGFyZW50KCk7CiB9CkBAIC0yNDM4LDggKzI0NDYsOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiAgICAgLy8gRklYTUU6IEFsd2F5cyB0
cmF2ZXJzaW5nIHRoZSBlbnRpcmUgZnJhbWUgdHJlZSBpcyBhIGJpdCBpbmVmZmljaWVudCwgYnV0
IAogICAgIC8vIGlzIGN1cnJlbnRseSBuZWVkZWQgaW4gb3JkZXIgdG8gbnVsbCBvdXQgdGhlIHBy
ZXZpb3VzIGhpc3RvcnkgaXRlbSBmb3IgYWxsIGZyYW1lcy4KICAgICBWZWN0b3I8UmVmPEZyYW1l
PiwgMTY+IGZyYW1lczsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZXMuYXBwZW5kKCpmcmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1fZnJhbWUubWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1l
KTsKIAogICAgIC8vIFRvIHByb2Nlc3MgY2hpbGRyZW4gYmVmb3JlIHRoZWlyIHBhcmVudHMsIGl0
ZXJhdGUgdGhlIHZlY3RvciBiYWNrd2FyZHMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJhbWVz
LnNpemUoKTsgaTsgLS1pKQpAQCAtMjQ1Miw4ICsyNDYwLDggQEAgaW50IEZyYW1lTG9hZGVyOjpu
dW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNlKSBjb25zdAogICAgICAgICBy
ZXR1cm4gbV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0
Q291bnQoKTsKIAogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9mcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJh
bWUpKQotICAgICAgICBjb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+cmVxdWVzdENvdW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKQorICAgICAgICBjb3VudCArPSBmcmFtZS5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKICAgICByZXR1cm4gY291
bnQ7CiB9CiAKQEAgLTI3OTgsOCArMjgwNiwxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRD
bG9zZSgpCiAgICAgLy8gU3RvcmUgYWxsIHJlZmVyZW5jZXMgdG8gZWFjaCBzdWJmcmFtZSBpbiBh
ZHZhbmNlIHNpbmNlIGJlZm9yZXVubG9hZCdzIGV2ZW50IGhhbmRsZXIgbWF5IG1vZGlmeSBmcmFt
ZQogICAgIFZlY3RvcjxSZWY8RnJhbWU+LCAxNj4gdGFyZ2V0RnJhbWVzOwogICAgIHRhcmdldEZy
YW1lcy5hcHBlbmQobV9mcmFtZSk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKLSAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZCgqY2hpbGQpOworICAg
IGlmIChGcmFtZSogZmlyc3RDaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmZpcnN0Q2hp
bGQsIG1fZnJhbWUpKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZChmcmFtZSk7Cisg
ICAgfQogCiAgICAgYm9vbCBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgIHsKQEAgLTMwNTgsOCAr
MzA2OCw4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVP
cHRpb25zKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uCiAgICAgICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwogICAgICAgICBp
ZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wRnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcmlnaW4tPmlzU2FtZVNj
aGVtZUhvc3RQb3J0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lQW5jZXN0b3JzKG1fZnJhbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoZnJhbWUuZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hp
c3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5jcHAKaW5kZXggZTFiOGM5Mzk5ZGUwYTQ0NmMzNmRlMzYwZTAyNWQzYzQ1OWM5MTYzYi4u
OTQ2NjI5ZTY3YmJhMjE3NGI0ODdhNzBhODg1ZDU4OTM5N2I1NWZlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmgiCkBAIC0xOTcsOSArMTk4LDkgQEAgdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQogLy8gaGlzdG9yeSBpdGVtLgogdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQogewotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgewotICAgICAgICBmcmFtZS0+bG9hZGVyKCkuaGlzdG9y
eSgpLnNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5
KCkuc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS5o
aXN0b3J5KCkuY3VycmVudEl0ZW0oKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKSB7CisgICAgICAgIGZyYW1lLmxvYWRlcigpLmhpc3Rvcnko
KS5zYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5oaXN0b3J5KCku
c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLmxvYWRlcigpLmhpc3Rv
cnkoKS5jdXJyZW50SXRlbSgpKTsKICAgICB9CiB9CiAKQEAgLTUyMiw4ICs1MjMsOCBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKQogICAgIH0KIAog
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVzdCBvZiB0aGUgdHJlZQotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5
KCkucmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLmhpc3RvcnkoKS5y
ZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpCkBAIC01NjYsOCArNTY3LDggQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdh
dGlvbigpCiAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOwogCiAgICAgLy8gSXRlcmF0ZSBvdmVy
IHRoZSByZXN0IG9mIHRoZSB0cmVlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50
cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlVXBkYXRl
Rm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFt
ZUNoaWxkcmVuKG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5sb2FkZXIoKS5oaXN0b3J5KCkucmVj
dXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwogfQogCiB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JGcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNjg1LDggKzY4
Niw4IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJ
dGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAgICAgICAgICAgICBiZkl0ZW0tPnNldERv
Y3VtZW50U2VxdWVuY2VOdW1iZXIobV9wcmV2aW91c0l0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUu
dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+
bG9hZGVyKCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKG1fZnJh
bWUpKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC5sb2Fk
ZXIoKTsKICAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci5mcmFt
ZUhhc0xvYWRlZCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFtZSBj
b3JyZXNwb25kaW5nIHRvIGFuIDxvYmplY3Q+IGVsZW1lbnQgdGhhdCBuZXZlciBsb2FkZWQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKaW5kZXggZjVl
ZjJkM2E2ZjNhYzRhNjlmNDE0Y2NmZjBmZDY1NzI2NGEwYjg4YS4uNmI5ZWE5ODJlZGYwZTg3OGVj
NWY5MDkwZTVlYThhMGNmNWE3YzkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZp
Z2F0aW9uU2NoZWR1bGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuaCIKQEAgLTM0Miw5ICszNDMsOSBAQCBMb2NrQmFja0ZvcndhcmRMaXN0IE5hdmlnYXRpb25T
Y2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lJiB0YXJnZXRGcgogICAgIC8v
IE5hdmlnYXRpb24gb2YgYSBzdWJmcmFtZSBkdXJpbmcgbG9hZGluZyBvZiBhbiBhbmNlc3RvciBm
cmFtZSBkb2VzIG5vdCBjcmVhdGUgYSBuZXcgYmFjay9mb3J3YXJkIGl0ZW0uCiAgICAgLy8gVGhl
IGRlZmluaXRpb24gb2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgYWxsIGhhbmRs
ZXJzIGZvciB0aGUgbG9hZCBldmVudCBoYXZlIGJlZW4gcnVuLgogICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTcgZm9yIHRoZSBvcmlnaW5hbCBt
b3RpdmF0aW9uIGZvciB0aGlzLgotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gdGFyZ2V0RnJh
bWUudHJlZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFuY2VzdG9yLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWFuY2VzdG9yLT5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwg
KGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQorICAgIGZvciAo
YXV0byYgYW5jZXN0b3IgOiBmcmFtZUFuY2VzdG9ycyh0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gYW5jZXN0b3IuZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFh
bmNlc3Rvci5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5w
cm9jZXNzaW5nTG9hZEV2ZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2Fy
ZExpc3Q6OlllczsKICAgICB9CiAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDBiNTJjMjk1ODhhYTFhOTNlYTExN2VkM2FjODZiZDYw
YjZiOWFhNWUuLjVhYjdiNzY3MTRkYjFjYmNlYTZiMTBmNWIxNzVmMGNiZTAyZGJlNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC0yMTYsOCAr
MjE3LDggQEAgYm9vbCBDaHJvbWU6OmNhblJ1bk1vZGFsKCkgY29uc3QKIAogc3RhdGljIGJvb2wg
Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwoUGFnZSYgcGFnZSwgQ2hyb21lQ2xpZW50
OjpEaWFsb2dUeXBlIGRpYWxvZywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNz
YWxUeXBlIGRpc21pc3NhbCA9IGZyYW1lLT5sb2FkZXIoKS5wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFn
ZS5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBl
IGRpc21pc3NhbCA9IGZyYW1lLmxvYWRlcigpLnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCgpOwogICAgICAgICBpZiAoZGlzbWlzc2FsICE9IEZyYW1lTG9hZGVyOjpOb0Rpc21pc3Nh
bCkKICAgICAgICAgICAgIHJldHVybiBwYWdlLmNocm9tZSgpLmNsaWVudCgpLnNob3VsZFJ1bk1v
ZGFsRGlhbG9nRHVyaW5nUGFnZURpc21pc3NhbChkaWFsb2csIG1lc3NhZ2UsIGRpc21pc3NhbCk7
CiAgICAgfQpAQCAtNTU4LDkgKzU1OSw5IEBAIHZvaWQgQ2hyb21lOjp3aW5kb3dTY3JlZW5EaWRD
aGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogCiAgICAgbV9kaXNwbGF5SUQgPSBk
aXNwbGF5SUQ7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPndp
bmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtX3BhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5k
b2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+d2luZG93U2NyZWVuRGlk
Q2hhbmdlKGRpc3BsYXlJRCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKaW5kZXggYmUxN2VhZWZiMmZkZmRmNThhYjZlYzg0ZGU5ZTBhNzQxZDg0MTYx
ZC4uNjhhODYxNmY4MjBiMDAwZWRkMThiY2FiMzY3ZWI2MzZhZjEwMGExMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC02ODcsOCArNjg4LDggQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJs
ZUludGVybmFsKGJvb2wgY29udGVudElzVmlzaWJsZSkKIAogICAgIGNvbnRlbnRBcmVhRGlkU2hv
d09ySGlkZSh2aWV3LCBjb250ZW50SXNWaXNpYmxlKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1fcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFnZS5tYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAg
ICAgICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKaW5kZXggZTA5MjQ0ZDQyYzY1YWE1ZGIyNDgxYzJhMGY3NjcwZjViMDRjNDE3ZS4u
NGJhNTg3ZWUwNzQyNWIyMDM1YTUxZWQxN2JjY2FkOWIwMDM1N2ZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCkBAIC0yMTIsNiArMjEzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWU6OmNyZWF0ZShQ
YWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKIAogRnJhbWU6
On5GcmFtZSgpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJGcmFtZTo6fkZyYW1lICVwXG4iLCB0
aGlzKTsKICAgICBzZXRWaWV3KDApOwogICAgIGxvYWRlcigpLmNhbmNlbEFuZENsZWFyKCk7CiAK
QEAgLTY1Miw4ICs2NTQsOCBAQCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5n
LCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBjb25zdCBGbG9hdFNpegogICAgIH0KIAogICAg
IC8vIFN1YmZyYW1lcyBvZiB0aGUgb25lIHdlJ3JlIHByaW50aW5nIGRvbid0IGxheSBvdXQgdG8g
dGhlIHBhZ2Ugc2l6ZS4KLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRTaXplKCksIEZsb2F0U2l6
ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBjaGlsZC5zZXRQcmludGluZyhwcmludGluZywg
RmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAK
IGJvb2wgRnJhbWU6OnNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgY29uc3QKQEAgLTk4Niw4ICs5
ODgsOCBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Va
b29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgZG9jdW1lbnQtPnJlY2FsY1N0
eWxlKFN0eWxlOjpGb3JjZSk7CiAKLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVl
KCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIGNoaWxkLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKG1fcGFnZVpvb21G
YWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNo
aWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hpbGQuc2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyht
X3BhZ2Vab29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKTsKIAogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJWaWV3
KCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRG
aXJzdExheW91dCgpKQpAQCAtMTA0NCw4ICsxMDQ2LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiB2b2lkIEZyYW1lOjpkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIGZvciAoUmVmUHRyPEZyYW1lPiBjaGlsZCA9IHRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgY2hpbGQtPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwor
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hp
bGQuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBpZiAoUmVuZGVyVmll
dyogcm9vdCA9IGNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByb290LT5jb21wb3NpdG9yKCku
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CkBAIC0xMDU4LDggKzEwNjAsOCBAQCBi
b29sIEZyYW1lOjppc1VSTEFsbG93ZWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgaWYgKG1f
cGFnZS0+c3ViZnJhbWVDb3VudCgpID49IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxzZTsKLSAg
ICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50
aWZpZXIoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCB1cmwpKSB7CisgICAgZm9yIChjb25zdCBh
dXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSgqdGhpcykpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdGcmFnbWVudElkZW50aWZpZXIoZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCksIHVybCkpIHsK
ICAgICAgICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZUl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzZWJkODMzNjQ5Mzg3NTRhOTMw
NzI5YjM5NTExNDhkMmZkNTNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVJdGVyYXRvci5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIEZyYW1lSXRlcmF0
b3JfaAorI2RlZmluZSBGcmFtZUl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgRnJhbWVUcmF2ZXJzYWwgeworCitzdHJ1Y3QgQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVU
eXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCk7IH0KK307
CisKK3N0cnVjdCBSZXZlcnNlQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVUeXBlKiYgZnJhbWUpIHsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnByZXZpb3VzU2libGluZygpOyB9Cit9OworCitzdHJ1Y3Qg
TGFzdENoaWxkSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS5sYXN0Q2hpbGQoKTsgfQorfTsKKworc3RydWN0IExpbmVhZ2VJdGVyYXRvckluY3Jl
bWVudCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCko
RnJhbWVUeXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpOyB9Cit9
OworCitzdHJ1Y3QgVHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZyYW1lVHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoc3RheVdpdGhpbik7IH0KKyAgICBjb25z
dCBGcmFtZSogc3RheVdpdGhpbjsKK307CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZSwgdHlwZW5hbWUgSW5jcmVtZW50T3BlcmF0aW9uPgorc3RydWN0IEZyYW1lSXRlcmF0b3Ig
OiBzdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBGcmFtZVR5cGU+IHsKKyAg
ICBGcmFtZUl0ZXJhdG9yKCkgPSBkZWZhdWx0OworICAgIEZyYW1lSXRlcmF0b3IoRnJhbWVUeXBl
KiBmcmFtZSwgSW5jcmVtZW50T3BlcmF0aW9uJiYgaW5jcmVtZW50T3BlcmF0aW9uID0gSW5jcmVt
ZW50T3BlcmF0aW9uKCkpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2lu
Y3JlbWVudE9wZXJhdGlvbihzdGQ6Om1vdmUoaW5jcmVtZW50T3BlcmF0aW9uKSkKKyAgICB7Cisg
ICAgfQorCisgICAgRnJhbWVUeXBlJiBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZnJhbWUpOworICAgICAgICByZXR1cm4gKm1fZnJhbWU7CisgICAgfQorICAgIG9w
ZXJhdG9yIEZyYW1lVHlwZSooKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBGcmFt
ZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsK
KyAgICAgICAgbV9pbmNyZW1lbnRPcGVyYXRpb24obV9mcmFtZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhbWVJdGVyYXRvciYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUgPT0gb3RoZXIubV9mcmFtZTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFtZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworcHJvdGVjdGVkOgorICAgIEZyYW1lVHlwZSogbV9mcmFt
ZTsKKyAgICBJbmNyZW1lbnRPcGVyYXRpb24gbV9pbmNyZW1lbnRPcGVyYXRpb247Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBJbmNyZW1lbnRPcGVyYXRpb24+Cit1c2lu
ZyBGcmFtZUl0ZXJhdG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFz
ZV9vZjxGcmFtZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VHlwZT46OnR5cGU+Ojp2YWx1
ZSwKKyAgICBGcmFtZUl0ZXJhdG9yPHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19j
b25zdDxUeXBlPjo6dmFsdWUsIGNvbnN0IEZyYW1lLCBGcmFtZT46OnR5cGUsIEluY3JlbWVudE9w
ZXJhdGlvbj4+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6
SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6Q2hp
bGRJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAg
cmV0dXJuIHsgeyBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpIH0sIHsgfSB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJh
dG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ+PiBmcmFtZVJldmVyc2VDaGlsZHJlbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7
IGZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQoKSB9LCB7IH0gfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJdGVyYXRvclR5cGU8VHlw
ZSwgRnJhbWVUcmF2ZXJzYWw6Okxhc3RDaGlsZEl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMYXN0
Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkubGFz
dENoaWxkKCkgfSAsIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5l
IFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNh
bDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMaW5lYWdlKFR5cGUmIGZyYW1lKQor
eworICAgIHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBl
LCBGcmFtZVRyYXZlcnNhbDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVBbmNlc3Rv
cnMoVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkucGFyZW50KCkg
fSwgeyB9IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitpbmxpbmUgV1RGOjpJdGVy
YXRvclJhbmdlPEZyYW1lSXRlcmF0b3JUeXBlPFR5cGUsIEZyYW1lVHJhdmVyc2FsOjpUcmF2ZXJz
YWxJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQoreworICAg
IHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFt
ZVRyYXZlcnNhbDo6VHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQ+PiBmcmFtZVRyYXZlcnNhbFdp
dGhpbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7ICZmcmFtZSwgRnJhbWVUcmF2ZXJz
YWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50eyAmZnJhbWUgfSB9LCB7IH0gfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJ
dGVyYXRvclR5cGU8VHlwZSwgRnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVt
ZW50Pj4gZnJhbWVUcmF2ZXJzYWxXaXRoaW4oVHlwZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiBzdGF5
V2l0aGluKQoreworICAgIHJldHVybiB7IHsgJmZyYW1lLCBGcmFtZVRyYXZlcnNhbDo6VHJhdmVy
c2FsSXRlcmF0b3JJbmNyZW1lbnR7ICZzdGF5V2l0aGluIH0gfSwgeyB9IH07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lSXRlcmF0b3JfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVRyZWUuY3BwCmluZGV4IDJlZjIzYjMzNThhOWQyMmUyMGJiZWFlNDYwOGY3YzBiYzcz
YmE3ZmMuLjQ0NjE3OTllMmVlNTdiODZlMGYzZGYwYTE2M2RiZTk5MTE4NTY2YjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVHJlZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtMzcsOCArMzgsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEZyYW1lVHJlZTo6fkZyYW1lVHJlZSgpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnNldFZpZXcoMCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpKQorICAgICAgICBmcmFtZS5zZXRWaWV3KG51
bGxwdHIpOwogfQogCiB2b2lkIEZyYW1lVHJlZTo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIApAQCAtMTQ0LDExICsxNDUsMTIgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6dW5p
cXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKIAog
ICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgcGFyZW50IHRoYXQgaGFzIGEgZnJhbWUgd2l0aCBhIHBh
dGggaW4gaXQuCiAgICAgVmVjdG9yPEZyYW1lKiwgMTY+IGNoYWluOwotICAgIEZyYW1lKiBmcmFt
ZTsKLSAgICBmb3IgKGZyYW1lID0gJm1fdGhpc0ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUo
KS5zdGFydHNXaXRoKGZyYW1lUGF0aFByZWZpeCkpCisgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkpIHsK
KyAgICAgICAgZnJhbWUgPSAmcGFyZW50OworICAgICAgICBpZiAocGFyZW50LnRyZWUoKS51bmlx
dWVOYW1lKCkuc3RhcnRzV2l0aChmcmFtZVBhdGhQcmVmaXgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNoYWluLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGNoYWluLmFwcGVuZCgmcGFy
ZW50KTsKICAgICB9CiAgICAgU3RyaW5nQnVpbGRlciBuYW1lOwogICAgIG5hbWUuYXBwZW5kKGZy
YW1lUGF0aFByZWZpeCk7CkBAIC0xNjksNyArMTcxLDcgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJl
ZTo6dW5pcXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29u
c3QKICAgICByZXR1cm4gbmFtZS50b0F0b21pY1N0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBp
blNjb3BlKEZyYW1lJiBmcmFtZSwgVHJlZVNjb3BlJiBzY29wZSkKK3N0YXRpYyBib29sIGluU2Nv
cGUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkK
QEAgLTE4NSwxNiArMTg3LDExIEBAIGlubGluZSBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGls
ZCh1bnNpZ25lZCBpbmRleCwgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3Bl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHVuc2lnbmVkIHNjb3BlZEluZGV4ID0g
MDsKLSAgICBmb3IgKEZyYW1lKiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0
ID0gcmVzdWx0LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgq
cmVzdWx0LCAqc2NvcGUpKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGVkSW5kZXggPT0gaW5kZXgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIHNjb3BlZEluZGV4
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJh
bWUpOworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4u
ZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAgICAgcmV0dXJuIGluU2NvcGUo
ZnJhbWUsICpzY29wZSkgJiYgY291bnQrKyA9PSBpbmRleDsKKyAgICB9KTsKIH0KIAogaW5saW5l
IEZyYW1lKiBGcmFtZVRyZWU6OnNjb3BlZENoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
VHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAgLTIwMiwxMSArMTk5LDEwIEBAIGlubGluZSBGcmFt
ZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFRyZWVT
Y29wZSogc2NvcGUpCiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLnVu
aXF1ZU5hbWUoKSA9PSBuYW1lICYmIGluU2NvcGUoKmNoaWxkLCAqc2NvcGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNo
aWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6Zmlu
ZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBm
cmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1l
ICYmIGluU2NvcGUoZnJhbWUsICpzY29wZSk7CisgICAgfSk7CiB9CiAKIGlubGluZSB1bnNpZ25l
ZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxkQ291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAg
LTIxNCwxMyArMjEwLDEwIEBAIGlubGluZSB1bnNpZ25lZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxk
Q291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHVuc2lnbmVkIHNjb3BlZENvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1l
KiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT50cmVlKCku
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgqcmVzdWx0LCAqc2NvcGUpKQot
ICAgICAgICAgICAgc2NvcGVkQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NvcGVkQ291
bnQ7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAg
IHJldHVybiBzdGQ6OmNvdW50X2lmKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBb
PV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBpblNjb3BlKGZyYW1lLCAq
c2NvcGUpOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKQEAgLTI0MiwyNiArMjM1LDI1IEBAIHVuc2lnbmVkIEZyYW1lVHJl
ZTo6c2NvcGVkQ2hpbGRDb3VudCgpIGNvbnN0CiAKIHVuc2lnbmVkIEZyYW1lVHJlZTo6Y2hpbGRD
b3VudCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoRnJhbWUq
IHJlc3VsdCA9IGZpcnN0Q2hpbGQoKTsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPnRyZWUoKS5u
ZXh0U2libGluZygpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKKyAgICBh
dXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0
ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCiBGcmFt
ZSogRnJhbWVUcmVlOjpjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBGcmFtZSog
cmVzdWx0ID0gZmlyc3RDaGlsZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHJlc3VsdCAm
JiBpICE9IGluZGV4OyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+dHJlZSgpLm5leHRT
aWJsaW5nKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cisg
ICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAgIHJldHVy
biBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFsmXShjb25z
dCBGcmFtZSYpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50KysgPT0gaW5kZXg7CisgICAgfSk7CiB9
CiAKIEZyYW1lKiBGcmFtZVRyZWU6OmNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoY2hpbGQtPnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNG
cmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJl
bi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBmcmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUu
dHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVU
cmVlOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI4MCwxNSArMjcy
LDE1IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFNlYXJjaCBzdWJ0cmVlIHN0
YXJ0aW5nIHdpdGggdGhpcyBmcmFtZSBmaXJzdC4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
X3RoaXNGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1f
dGhpc0ZyYW1lKSkgewotICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0g
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDog
ZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV90aGlzRnJhbWUpKSB7CisgICAgICAgIGlmIChmcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgIH0KIAogICAgIC8vIFRoZW4gdGhlIHJlc3Qgb2YgdGhlIHRyZWUuCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV90aGlzRnJhbWUubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkudW5p
cXVlTmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fdGhpc0ZyYW1lLm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBpZiAoZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAKICAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVl
IG9mIGVhY2ggb2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgpAQCAtMzAwLDkg
KzI5Miw5IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIGZvciAoYXV0byogb3RoZXJQYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygp
KSB7CiAgICAgICAgIGlmIChvdGhlclBhZ2UgPT0gcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWU7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bChvdGhlclBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zMTcsMTAgKzMwOSwxMCBAQCBib29sIEZyYW1lVHJlZTo6
aXNEZXNjZW5kYW50T2YoY29uc3QgRnJhbWUqIGFuY2VzdG9yKSBjb25zdAogICAgIGlmIChtX3Ro
aXNGcmFtZS5wYWdlKCkgIT0gYW5jZXN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIGlmIChmcmFtZSA9PSBhbmNlc3RvcikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGxp
bmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV90aGlzRnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9v
ZihsaW5lYWdlLmJlZ2luKCksIGxpbmVhZ2UuZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUp
IHsKKyAgICAgICAgcmV0dXJuICZmcmFtZSA9PSBhbmNlc3RvcjsKKyAgICB9KTsKIH0KIAogRnJh
bWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VOZXh0KGNvbnN0IEZyYW1lKiBzdGF5V2l0aGluKSBjb25z
dApAQCAtMzg3LDE3ICszNzksMTggQEAgRnJhbWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VQcmV2aW91
c1dpdGhXcmFwKGJvb2wgd3JhcCkgY29uc3QKIEZyYW1lKiBGcmFtZVRyZWU6OmRlZXBMYXN0Q2hp
bGQoKSBjb25zdAogewogICAgIEZyYW1lKiByZXN1bHQgPSAmbV90aGlzRnJhbWU7Ci0gICAgZm9y
IChGcmFtZSogbGFzdCA9IGxhc3RDaGlsZCgpOyBsYXN0OyBsYXN0ID0gbGFzdC0+dHJlZSgpLmxh
c3RDaGlsZCgpKQotICAgICAgICByZXN1bHQgPSBsYXN0OworICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZUxhc3RDaGlsZHJlbihtX3RoaXNGcmFtZSkpCisgICAgICAgIHJlc3VsdCA9ICZmcmFt
ZTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEZyYW1lJiBGcmFtZVRyZWU6OnRvcCgpIGNv
bnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gJm1fdGhpc0ZyYW1lOwotICAgIGZvciAoRnJhbWUq
IHBhcmVudCA9ICZtX3RoaXNGcmFtZTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnRyZWUoKS5w
YXJlbnQoKSkKLSAgICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgRnJhbWUqIGZyYW1lID0gbnVs
bHB0cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkp
CisgICAgICAgIGZyYW1lID0gJnBhcmVudDsKKyAgICBBU1NFUlQoZnJhbWUpOwogICAgIHJldHVy
biAqZnJhbWU7CiB9CiAKQEAgLTQzMCw4ICs0MjMsOCBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1l
cyhjb25zdCBXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZyYW1lKiB0YXJn
ZQogICAgIHByaW50SW5kZW50KGluZGVudCk7CiAgICAgcHJpbnRmKCIgIHVyaT0lc1xuXG4iLCBm
cmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgZm9y
IChXZWJDb3JlOjpGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHByaW50RnJh
bWVzKCpjaGlsZCwgdGFyZ2V0RnJhbWUsIGluZGVudCArIDEpOworICAgIGZvciAoY29uc3QgYXV0
byYgY2hpbGQgOiBXZWJDb3JlOjpmcmFtZUNoaWxkcmVuKGZyYW1lKSkKKyAgICAgICAgcHJpbnRG
cmFtZXMoY2hpbGQsIHRhcmdldEZyYW1lLCBpbmRlbnQgKyAxKTsKIH0KIAogdm9pZCBzaG93RnJh
bWVUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCBkNjU3NzRmOTM5ZDA2ZDQwYmVmMzhlZDk1YjViNTM4MWFkZGE0NzZlLi5jNWI5
ZTE5NzdiMDMwZGM4ODNiMmM5YjE0OWU0YmQ3ZDdmMTBjNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTQx
Nyw3ICs0MTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IG5ld1JlY3QpCiAgICAgaWYgKG5ld1JlY3Qud2lkdGgoKSAhPSBvbGRSZWN0LndpZHRoKCkpIHsK
ICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAgICAgICBpZiAoZnJhbWUo
KS5pc01haW5GcmFtZSgpICYmIHBhZ2UtPnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkK
ICAgICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVj
YWxjdWxhdGVNdWx0aXBsaWVycygpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTYwLDggKzk2MSw4
IEBAIGJvb2wgRnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0CiAKIGJvb2wg
RnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAg
IFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7CisgICAg
ICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKFJlbmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvciA9IHJlbmRlclZpZXcg
PyAmcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpIDogMCkgewogICAgICAgICAgICAgaWYgKGNvbXBv
c2l0b3ItPmluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC05NzUsOCArOTc2LDggQEAgYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50
SW5jbHVkaW5nRGVzY2VuZGFudHMoKSBjb25zdAogCiBib29sIEZyYW1lVmlldzo6aGFzQ29tcG9z
aXRpbmdBbmNlc3RvcigpIGNvbnN0CiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZUFuY2VzdG9ycyhmcmFtZSgpKSkgeworICAgICAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICBpZiAo
dmlldy0+aGFzQ29tcG9zaXRlZENvbnRlbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMTAwNywxMyArMTAwOCwxMSBAQCBib29sIEZyYW1lVmlldzo6aXNF
bmNsb3NlZEluQ29tcG9zaXRpbmdMYXllcigpIGNvbnN0CiAKIGJvb2wgRnJhbWVWaWV3OjpmbHVz
aENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKQogewotICAgIGJvb2wgYWxsRnJh
bWVzRmx1c2hlZCA9IGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZSgmZnJhbWUoKSk7
Ci0gICAgCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZSgpLnRyZWUoKS5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSgpKSkg
ewotICAgICAgICBib29sIGZsdXNoZWQgPSBjaGlsZC0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzRnJhbWUoJmZyYW1lKCkpOwotICAgICAgICBhbGxGcmFtZXNGbHVzaGVkICY9
IGZsdXNoZWQ7Ci0gICAgfQotICAgIHJldHVybiBhbGxGcmFtZXNGbHVzaGVkOworICAgIEZyYW1l
KiByb290RnJhbWUgPSAmZnJhbWUoKTsKKyAgICBhdXRvIHRyYXZlcnNhbCA9IGZyYW1lVHJhdmVy
c2FsV2l0aGluKGZyYW1lKCkpOworICAgIHJldHVybiBzdGQ6OmFsbF9vZih0cmF2ZXJzYWwuYmVn
aW4oKSwgdHJhdmVyc2FsLmVuZCgpLCBbPV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAg
IHJldHVybiBmcmFtZS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZShy
b290RnJhbWUpOworICAgIH0pOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTb2Z0d2FyZVJlbmRl
cmFibGUoKSBjb25zdApAQCAtMTQ2MCw4ICsxNDU5LDggQEAgYm9vbCBGcmFtZVZpZXc6OnVzZVNs
b3dSZXBhaW50c0lmTm90T3ZlcmxhcHBlZCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVDYW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dChtX2ZyYW1lLmdldCgpKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUt
PnZpZXcoKSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJh
bWUoKSkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKSkKICAg
ICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbCghdmlldy0+dXNlU2xvd1JlcGFpbnRz
KCkpOwogICAgIH0KIH0KQEAgLTE4NTMsOCArMTg1Miw4IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRJ
c092ZXJsYXBwZWQoYm9vbCBpc092ZXJsYXBwZWQpCiAgICAgICAgIGlmIChSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKHRoaXMpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJpZ2dlciByZWV2YWx1YXRpb24gZm9yIHRo
aXMgYW5kIGFsbCBkZXNjZW5kYW50IGZyYW1lcywKICAgICAgICAgICAgIC8vIHNpbmNlIGEgZnJh
bWUgdXNlcyBjb21wb3NpdGluZyBpZiBhbnkgYW5jZXN0b3IgaXMgY29tcG9zaXRpbmcuCi0gICAg
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFt
ZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUuY29u
dGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yJiBjb21wb3NpdG9yID0gdmlldy0+Y29tcG9zaXRvcigpOwogICAgICAgICAgICAgICAgICAg
ICBjb21wb3NpdG9yLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAg
ICAgICAgICAgICAgY29tcG9zaXRvci5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsK
QEAgLTIyODAsOCArMjI3OSw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllckZsdXNoVGhy
b3R0bGluZygpCiAgICAgaWYgKGZyYW1lKCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5hZGp1
c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncykpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7CisgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFi
bGVkKGlzTWFpbkxvYWRQcm9ncmVzc2luZyk7CiAgICAgfQogfQpAQCAtMjQ4NywxNCArMjQ4Niwx
NCBAQCB2b2lkIEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIEZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5p
bWF0aW9ucyhkb3VibGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+dmlldygpLT5zZXJ2aWNlU2Nyb2xs
QW5pbWF0aW9ucygpOwotICAgICAgICBmcmFtZS0+YW5pbWF0aW9uKCkuc2VydmljZUFuaW1hdGlv
bnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZnJhbWUoKSkpIHsK
KyAgICAgICAgZnJhbWUudmlldygpLT5zZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpOworICAgICAg
ICBmcmFtZS5hbmltYXRpb24oKS5zZXJ2aWNlQW5pbWF0aW9ucygpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxSZWZQdHI8RG9jdW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKQotICAgICAgICBkb2N1bWVudHMuYXBwZW5kKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZnJhbWUoKSkpCisgICAgICAgIGRvY3Vt
ZW50cy5hcHBlbmQoZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRvY3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgZG9jdW1lbnRzW2ldLT5zZXJ2aWNl
U2NyaXB0ZWRBbmltYXRpb25zKG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSk7CkBAIC0yNTMz
LDggKzI1MzIsOCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0QmFzZUJhY2tncm91bmRDb2xvcihjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dy
b3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdHJhbnNw
YXJlbnQpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgewotICAg
ICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgeworICAgIGZvciAoYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFtZSgpKSkgeworICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICB2aWV3LT5zZXRU
cmFuc3BhcmVudCh0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICB2aWV3LT5zZXRCYXNlQmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7CiAgICAgICAgIH0KQEAgLTM2NzQsOCArMzY3Myw4
IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gaW4gdGhlIHJlbmRlciB0cmVlIG9u
bHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
RE9NCiAgICAgLy8gYWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQ
YWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiBy
b290ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICBmb3IgKGF1dG8mIGZyYW1l
IDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByb290ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
cm9vdC0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM2OTAsOCArMzY4
OSw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAKICAgICAvLyBSZXN0b3JlIHNlbGVjdGlv
bi4KICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewot
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKQotICAgICAgICAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICAgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKQorICAgICAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgIH0KIAogICAgIC8vIFJlc3Rv
cmUgY2FjaGVkIHBhaW50IGJlaGF2aW9yLgpAQCAtNDAzNCw4ICs0MDMzLDggQEAgdm9pZCBGcmFt
ZVZpZXc6OnNldFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tSZXBhaW50cykKICAgICAgICAgICAg
IGZyYW1lKCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgfQogCi0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbV9mcmFtZS0+dHJlZSgpLnRvcCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZVRyYXZlcnNhbChmcmFtZSgpLnRyZWUoKS50b3AoKSkpIHsKKyAgICAgICAgaWYgKFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5zZXRUcmFja3NSZXBhaW50cyh0cmFja1JlcGFp
bnRzKTsKICAgICB9CiAKQEAgLTQxNjksOCArNDE2OCw4IEBAIGJvb2wgRnJhbWVWaWV3Ojppc0Zs
aXBwZWREb2N1bWVudCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzSW5B
bGxGcmFtZXMoV2lkZ2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZp
ZXcgPSBmcmFtZS0+dmlldygpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bFdpdGhpbihmcmFtZSgpKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUu
dmlldygpKQogICAgICAgICAgICAgdmlldy0+bm90aWZ5V2lkZ2V0cyhub3RpZmljYXRpb24pOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKaW5kZXggNDRmNTIyMGZkMzljYWQ3MWZk
ZGQ3ZGUzNTczNjM5Yzc4ODY5YWUxNS4uZWY1ODVlY2QyZjFlZTI3ZTIxNGY5ODRkNGRkNDgyNTk0
ODA1NTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBA
IC0xMjksOCArMTMwLDggQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBMb2NhdGlvbjo6YW5j
ZXN0b3JPcmlnaW5zKCkgY29uc3QKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb3JpZ2lucyA9
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0
dXJuIG9yaWdpbnMucmVsZWFzZSgpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS0+
dHJlZSgpLnBhcmVudCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQot
ICAgICAgICBvcmlnaW5zLT5hcHBlbmQoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZUFuY2VzdG9ycygq
bV9mcmFtZSkpCisgICAgICAgIG9yaWdpbnMtPmFwcGVuZChmcmFtZS5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICByZXR1cm4gb3JpZ2lucy5yZWxlYXNlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDM4YmI0NTEyMmNiYzQyY2I2Yjg1YmMwNzYzMTlj
ZWI1OTM2ZDY0NzQuLjFhZGUyZjgzNzFkODBmNjFmZTVjMTZlMGJkNjNkZTg2MjhhMjljOTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCkBAIC0xMDksMTAgKzExMCwxMCBAQCBzdGF0aWMgdm9pZCBuZXR3b3Jr
U3RhdGVDaGFuZ2VkKGJvb2wgaXNPbkxpbmUpCiAgICAgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1l
czsKICAgICAKICAgICAvLyBHZXQgYWxsIHRoZSBmcmFtZXMgb2YgYWxsIHRoZSBwYWdlcyBpbiBh
bGwgdGhlIHBhZ2UgZ3JvdXBzCi0gICAgZm9yIChhdXRvIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCks
IGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1l
KTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KCppdCk7CisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFsbFBhZ2VzKSB7CisgICAgICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAg
ICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKHBhZ2UpOwogICAgIH0KIAogICAgIEF0b21pY1N0cmlu
ZyBldmVudE5hbWUgPSBpc09uTGluZSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCA6IGV2ZW50
TmFtZXMoKS5vZmZsaW5lRXZlbnQ7CkBAIC0yMzUsOSArMjM2LDkgQEAgUGFnZTo6flBhZ2UoKQog
ICAgIHNldEdyb3VwTmFtZShTdHJpbmcoKSk7CiAgICAgYWxsUGFnZXMtPnJlbW92ZSh0aGlzKTsK
ICAgICAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+d2lsbERl
dGFjaFBhZ2UoKTsKLSAgICAgICAgZnJhbWUtPmRldGFjaEZyb21QYWdlKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICBmcmFt
ZS53aWxsRGV0YWNoUGFnZSgpOworICAgICAgICBmcmFtZS5kZXRhY2hGcm9tUGFnZSgpOwogICAg
IH0KIAogICAgIG1fZWRpdG9yQ2xpZW50LT5wYWdlRGVzdHJveWVkKCk7CkBAIC0yNjgsMTAgKzI2
OSwxMSBAQCBQYWdlOjp+UGFnZSgpCiB1aW50NjRfdCBQYWdlOjpyZW5kZXJUcmVlU2l6ZSgpIGNv
bnN0CiB7CiAgICAgdWludDY0X3QgdG90YWwgPSAwOwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZy
YW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgLy8gRklYTUU6IFJldmVydCB0byBtYWluRnJhbWUo
KSB3aGVuIGNvbnN0IGl0ZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKCptX21haW5GcmFtZSkpIHsKKyAgICAgICAgaWYgKCFmcmFtZS5k
b2N1bWVudCgpIHx8ICFmcmFtZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdG90YWwgKz0gZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZp
ZXcoKS0+cmVuZGVyZXJDb3VudCgpOworICAgICAgICB0b3RhbCArPSBmcmFtZS5kb2N1bWVudCgp
LT5yZW5kZXJWaWV3KCktPnJlbmRlcmVyQ291bnQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRvdGFs
OwogfQpAQCAtNDI2LDIyICs0MjgsMjIgQEAgdm9pZCBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBh
Z2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCkKIHsKICAgICBpZiAoIWFsbFBhZ2Vz
KQogICAgICAgICByZXR1cm47Ci0gICAgSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGVuZCA9IGFs
bFBhZ2VzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdCA9IGFs
bFBhZ2VzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgeworCisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFsbFBhZ2VzKQorICAg
ICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkp
KSB7CiAgICAgICAgICAgICAvLyBJZiBhIGNoYW5nZSBpbiB0aGUgZ2xvYmFsIGVudmlyb25tZW50
IGhhcyBvY2N1cnJlZCwgd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFsbCB0
aGUgcHJvcGVydGllcyBhIHJlY29tcHV0ZWQsIHRoZXJlZm9yZSB3ZSBpbnZhbGlkYXRlCiAgICAg
ICAgICAgICAvLyB0aGUgcHJvcGVydGllcyBjYWNoZS4KLSAgICAgICAgICAgIGlmIChTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyID0gZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpKQorICAgICAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIg
PSBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSkKICAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwot
ICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNh
bGMoKTsKICAgICAgICAgfQogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVjYWxjU3R5bGVJbkFs
bEZyYW1lcygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3R5
bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgfQogfQpAQCAtNDYyLDkg
KzQ2NCw5IEBAIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCiAgICAgICAg
IGlmICghcmVsb2FkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUtPmxvYWRl
cigpLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkpCi0gICAgICAgICAgICAgICAg
ZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoKmZyYW1lKTsKKyAgICAgICAgZm9yIChhdXRvJiBm
cmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoZnJhbWUubG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAg
ICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFtZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTQ4MSw4ICs0ODMsOCBAQCBQbHVnaW5EYXRhJiBQYWdlOjpwbHVnaW5E
YXRhKCkgY29uc3QKIAogaW5saW5lIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogUGFnZTo6dGFrZUFu
eU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgaWYgKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+dGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpKQorICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmcmFtZS5kb2N1bWVudCgpLT50YWtlQW55TWVk
aWFDYW5TdGFydExpc3RlbmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7CiAgICAg
fQogICAgIHJldHVybiAwOwpAQCAtNjY5LDggKzY3MSw4IEBAIHZvaWQgUGFnZTo6c2V0RGVmZXJz
TG9hZGluZyhib29sIGRlZmVycykKICAgICB9CiAKICAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZl
cnM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5z
ZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUubG9hZGVyKCkuc2V0RGVmZXJzTG9h
ZGluZyhkZWZlcnMpOwogfQogCiB2b2lkIFBhZ2U6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkK
QEAgLTY5Nyw5ICs2OTksOCBAQCB2b2lkIFBhZ2U6OnNldE1lZGlhVm9sdW1lKGZsb2F0IHZvbHVt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tZWRpYVZvbHVtZSA9IHZvbHVtZTsKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+bWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+bWVkaWFWb2x1
bWVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRab29tZWRPdXRQYWdlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGUpCkBAIC03MzAsOCArNzMxLDggQEAgdm9pZCBQYWdlOjpzZXRQYWdlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgaW5TdGFi
bGUKICAgICAgICAgfQogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgICAg
IGlmIChpblN0YWJsZVN0YXRlKSB7Ci0gICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkK
LSAgICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZEFuZFN0YWJsZSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVy
c2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5wYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAg
ICByZXR1cm47CkBAIC03NjgsOCArNzY5LDggQEAgdm9pZCBQYWdlOjpzZXRQYWdlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgaW5TdGFibGUKIAog
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGluU3RhYmxlU3RhdGUp
IHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOworICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICAgICAg
ZnJhbWUuZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwogICAg
IH0KICNlbmRpZgogfQpAQCAtNzg5LDggKzc5MCw4IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgbWFpbkZyYW1lKCkuZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckRldmlj
ZVNjYWxlQ2hhbmdlZCh0aGlzKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUu
ZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBwYWdlQ2FjaGUoKS0+
bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6
dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKQEAgLTgyNCw4ICs4MjUsOCBAQCB2b2lk
IFBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xsYmFyc1RvSGlkZGVuKGJvb2wgbG9ja092ZXJsYXlT
Y3JvbGxiYXJzKQogCiAgICAgdmlldy0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVu
KGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgICAgIGlmICghZnJhbWVW
aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTgzMywxMCArODM0LDggQEAgdm9pZCBQ
YWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Ny
b2xsYmFycykKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNjcm9sbGFibGVBcmVh
cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhID0gKml0OworICAgICAgICBmb3IgKGF1dG8qIHNjcm9sbGFibGVBcmVh
IDogKnNjcm9sbGFibGVBcmVhcykKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5sb2NrT3Zl
cmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsKLSAgICAg
ICAgfQogICAgIH0KIH0KICAgICAKQEAgLTg5Miw4ICs4OTEsOCBAQCB2b2lkIFBhZ2U6OnNldElz
SW5XaW5kb3coYm9vbCBpc0luV2luZG93KQogCiB2b2lkIFBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbChib29sIGlzSW5XaW5kb3cpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAgICAgICAgIGZyYW1l
Vmlldy0+c2V0SXNJbldpbmRvdyhpc0luV2luZG93KTsKICAgICB9CiAKQEAgLTkwNCwxOCArOTAz
LDE4IEBAIHZvaWQgUGFnZTo6c2V0SXNJbldpbmRvd0ludGVybmFsKGJvb2wgaXNJbldpbmRvdykK
IHZvaWQgUGFnZTo6c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9ucygpCiB7CiAgICAgbV9zY3JpcHRl
ZEFuaW1hdGlvbnNTdXNwZW5kZWQgPSB0cnVlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7Cisg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAg
ICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCkt
PnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICB9CiB9
CiAKIHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKICAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CiAgICAgfQog
fQogCkBAIC05MjMsOSArOTIyLDkgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVy
bmFsKGJvb2wgaXNWaXN1YWxseUlkbGUpCiB7CiAgICAgc2V0VGltZXJUaHJvdHRsaW5nRW5hYmxl
ZChpc1Zpc3VhbGx5SWRsZSk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChpc1Zpc3VhbGx5SWRs
ZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkg
eworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3Vt
ZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChpc1Zpc3VhbGx5
SWRsZSk7CiAgICAgfQogfQogCkBAIC05NTUsOSArOTU0LDkgQEAgdm9pZCBQYWdlOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiAgICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0g
U3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRG
OC5zaXplKCkpOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKKyAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChm
cmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+c3R5bGVTaGVl
dENvbGxlY3Rpb24oKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAgfQogfQogCkBAIC0xMDE3
LDE0ICsxMDE2LDE0IEBAIHZvaWQgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIAogdm9p
ZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0
YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1l
IDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5kb2N1bWVudCgp
LT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKIH0KIAog
dm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCBsaW5rSGFzaCkKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlua0hhc2gpOwor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAg
ICAgIGZyYW1lLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVG
b3JMaW5rKGxpbmtIYXNoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXREZWJ1Z2dlcihKU0M6OkRlYnVn
Z2VyKiBkZWJ1Z2dlcikKQEAgLTEwMzQsOCArMTAzMyw4IEBAIHZvaWQgUGFnZTo6c2V0RGVidWdn
ZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiAKICAgICBtX2RlYnVnZ2VyID0gZGVidWdnZXI7
CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+c2NyaXB0
KCkuYXR0YWNoRGVidWdnZXIobV9kZWJ1Z2dlcik7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZy
YW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuc2NyaXB0KCkuYXR0YWNo
RGVidWdnZXIobV9kZWJ1Z2dlcik7CiB9CiAKIFN0b3JhZ2VOYW1lc3BhY2UqIFBhZ2U6OnNlc3Np
b25TdG9yYWdlKGJvb2wgb3B0aW9uYWxDcmVhdGUpCkBAIC0xMDcxLDE3ICsxMDcwLDE3IEBAIHZv
aWQgUGFnZTo6c2V0TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChSZWZQdHI8RnJh
bWU+IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+bG9hZGVyKCkudGVsbENsaWVudEFib3V0UGFz
dE1lbW9yeUNhY2hlTG9hZHMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJz
YWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5sb2FkZXIoKS50ZWxsQ2xpZW50QWJvdXRQ
YXN0TWVtb3J5Q2FjaGVMb2FkcygpOwogfQogCiB2b2lkIFBhZ2U6OnNldE1pbmltdW1UaW1lcklu
dGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKICAgICBkb3VibGUgb2xkVGlt
ZXJJbnRlcnZhbCA9IG1fbWluaW11bVRpbWVySW50ZXJ2YWw7CiAgICAgbV9taW5pbXVtVGltZXJJ
bnRlcnZhbCA9IG1pbmltdW1UaW1lckludGVydmFsOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dFdp
dGhXcmFwKGZhbHNlKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwob2xkVGlt
ZXJJbnRlcnZhbCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZFRpbWVySW50ZXJ2
YWwpOwogICAgIH0KIH0KIApAQCAtMTEwOCwzMSArMTEwNywzMCBAQCB2b2lkIFBhZ2U6OnNldFRp
bWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fdGltZXJUaHJvdHRsaW5n
RW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgbV90aW1lckFsaWdubWVudEludGVydmFsID0gZW5hYmxl
ZCA/IFNldHRpbmdzOjpoaWRkZW5QYWdlRE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpIDogU2V0
dGluZ3M6OmRlZmF1bHRET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiAgICAgCi0gICAgZm9y
IChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0V2l0aFdyYXAoZmFsc2UpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaGFuZ2VUaW1lckFs
aWdubWVudEludGVydmFsKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
KG1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAg
ICAgIGZyYW1lLmRvY3VtZW50KCktPmRpZENoYW5nZVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKTsK
ICAgICB9CiB9CiAKIHZvaWQgUGFnZTo6ZG5zUHJlZmV0Y2hpbmdTdGF0ZUNoYW5nZWQoKQogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5p
dEROU1ByZWZldGNoKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1h
aW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+aW5pdEROU1ByZWZldGNoKCk7
CiB9CiAKIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdlOjpwbHVnaW5WaWV3cygpCiB7
CiAgICAgVmVjdG9yPFJlZjxQbHVnaW5WaWV3QmFzZT4+IHZpZXdzOwogCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3
KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gdmlldy0+Y2hp
bGRyZW4oKS5iZWdpbigpLCBlbmQgPSB2aWV3LT5jaGlsZHJlbigpLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gKCppdCkuZ2V0KCk7CisgICAg
ICAgIGZvciAoYXV0byYgd2lkZ2V0IDogdmlldy0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAg
aWYgKHdpZGdldC0+aXNQbHVnaW5WaWV3QmFzZSgpKQotICAgICAgICAgICAgICAgIHZpZXdzLmFw
cGVuZCgqdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpKTsKKyAgICAgICAgICAgICAgICB2aWV3cy5h
cHBlbmQoKnRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTExNDEsOCArMTEzOSw4IEBAIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdl
OjpwbHVnaW5WaWV3cygpCiAKIHZvaWQgUGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2Vk
KCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+c3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogICAgIC8vIENvbGxlY3QgdGhl
IFBsdWdpblZpZXdzIGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFjdGlvbiB0aGUgcGx1
Zy1pbiB0YWtlcwogICAgIC8vIGZyb20gYmVsb3cgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2Vk
IGRvZXMgbm90IGFmZmVjdCB0aGVpciBsaWZldGltZS4KQEAgLTExNjYsNyArMTE2NCw3IEBAIHZv
aWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVuY3koKSBjb25zdAogICAgIEFTU0VS
VChtX3N1YmZyYW1lQ291bnQgPj0gMCk7CiAKICAgICBpbnQgc3ViZnJhbWVDb3VudCA9IDA7Ci0g
ICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKICAgICAgICAgKytzdWJmcmFtZUNvdW50
OwogCiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCArIDEgPT0gc3ViZnJhbWVDb3VudCk7CkBA
IC0xMTc4LDggKzExNzYsOCBAQCB2b2lkIFBhZ2U6OnJlc3VtZUFuaW1hdGluZ0ltYWdlcygpCiAg
ICAgLy8gRHJhd2luZyBtb2RlbHMgd2hpY2ggY2FjaGUgcGFpbnRlZCBjb250ZW50IHdoaWxlIG91
dC1vZi13aW5kb3cgKFdlYktpdDIncyBjb21wb3NpdGVkIGRyYXdpbmcgYXJlYXMsIGV0Yy4pCiAg
ICAgLy8gcmVxdWlyZSB0aGF0IHdlIHJlcGFpbnQgYW5pbWF0ZWQgaW1hZ2VzIHRvIGtpY2tzdGFy
dCB0aGUgYW5pbWF0aW9uIGxvb3AuCiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZy
YW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHJlbmRlclZpZXctPnJlc3VtZVBhdXNlZEltYWdlQW5pbWF0aW9uc0lmTmVl
ZGVkKCk7CiAgICAgfQogfQpAQCAtMTIyNSw4ICsxMjIzLDggQEAgdm9pZCBQYWdlOjpzZXRJc1Zp
c2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICBpZiAoaXNWaXNpYmxlKSB7CiAgICAg
ICAgIG1faXNQcmVyZW5kZXIgPSBmYWxzZTsKIAotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgp
KSkgeworICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUudmlldygp
KQogICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+ZGlkTW92ZU9uc2NyZWVuKCk7CiAgICAgICAg
IH0KIApAQCAtMTI0Miw4ICsxMjQwLDggQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5h
bChib29sIGlzVmlzaWJsZSkKICAgICB9CiAKICAgICBWZWN0b3I8UmVmPERvY3VtZW50Pj4gZG9j
dW1lbnRzOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGRvY3VtZW50
cy5hcHBlbmQoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJh
bWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBkb2N1bWVudHMuYXBwZW5kKCpmcmFt
ZS5kb2N1bWVudCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZG9jdW1lbnRz
LnNpemUoKTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgZG9jdW1lbnRzW2ldLT52aXNpYmlsaXR5
U3RhdGVDaGFuZ2VkKCk7CkBAIC0xMjUyLDggKzEyNTAsOCBAQCB2b2lkIFBhZ2U6OnNldElzVmlz
aWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlk
ZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtYWlu
RnJhbWUoKS5hbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwogCi0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS0+dmlldygpKQorICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJz
YWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS52aWV3KCkpCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LT53aWxsTW92ZU9mZnNj
cmVlbigpOwogICAgICAgICB9CiAKQEAgLTE0NzIsMTQgKzE0NzAsMTQgQEAgdm9pZCBQYWdlOjph
ZGRSZWxldmFudFVucGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgb2IKIAogdm9pZCBQYWdlOjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuc3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgUGFnZTo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KQotICAgICAgICBmcmFtZS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAg
ICAgICBmcmFtZS5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwogCiAgICAg
cmVzdW1lQW5pbWF0aW5nSW1hZ2VzKCk7CiB9CkBAIC0xNTM3LDggKzE1MzUsOCBAQCB2b2lkIFBh
Z2U6OmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCkKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIFBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQo
KQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KICNlbmRpZgogCkBAIC0xNTkzLDggKzE1OTEs
OCBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25JRChTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIGlm
ICghcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnByaXZhdGVC
cm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+cHJpdmF0ZUJy
b3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogICAgIC8vIENvbGxlY3QgdGhlIFBsdWdpblZpZXdz
IGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFjdGlvbiB0aGUgcGx1Zy1pbiB0YWtlcwog
ICAgIC8vIGZyb20gYmVsb3cgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkIGRvZXMgbm90IGFm
ZmVjdCB0aGVpciBsaWZldGltZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmNwcAppbmRleCBiNWYxY2EzNDFjODIxNDY3MjdmY2Y1ZTFlZDFmZDAzYTI3MDAw
OGIzLi5hN2JmNWQyMmM1MmRmMWQ0OTE3NDhjZjAyMWMzZTU1MjEwZjg0ZmI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgi
CisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTQ0LDggKzQ1LDggQEAg
UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSYgcGFnZSwg
Ym9vbCBkZWZlclNlbGYpCiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IGxv
Z2ljYWxseSBwYXJ0IG9mIGxvYWQgZGVmZXJyaW5nLCBidXQgd2UgZG8gbm90IHdhbnQgSlMgY29k
ZSBleGVjdXRlZCBiZW5lYXRoIG1vZGFsCiAgICAgICAgICAgICAgICAgLy8gd2luZG93cyBvciBz
aGVldHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlbiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgaXMgdXNl
ZC4KLSAgICAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3VzcGVuZFNjaGVkdWxlZFRhc2tz
KEFjdGl2ZURPTU9iamVjdDo6V2lsbERlZmVyTG9hZGluZyk7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG90aGVyUGFnZS0+bWFpbkZyYW1lKCkpKQor
ICAgICAgICAgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zdXNwZW5kU2NoZWR1bGVkVGFz
a3MoQWN0aXZlRE9NT2JqZWN0OjpXaWxsRGVmZXJMb2FkaW5nKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTYyLDggKzYzLDggQEAgUGFnZUdyb3VwTG9hZERlZmVycmVyOjp+
UGFnZUdyb3VwTG9hZERlZmVycmVyKCkKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RlZmVy
cmVkRnJhbWVzW2ldLT5wYWdlKCkpIHsKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwogCi0gICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWlu
RnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAg
ICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1lU2NoZWR1bGVkVGFza3MoQWN0
aXZlRE9NT2JqZWN0OjpXaWxsRGVmZXJMb2FkaW5nKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAgICAgICAg
ICAgZnJhbWUuZG9jdW1lbnQoKS0+cmVzdW1lU2NoZWR1bGVkVGFza3MoQWN0aXZlRE9NT2JqZWN0
OjpXaWxsRGVmZXJMb2FkaW5nKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzgwMjU5Y2YxMDBmNjgyODA4NzE2NjgzMTc2MjAz
YmIwMWUzZDc3Zi4uYzA5ZGYzMWUyODU3MWViMGM5ZjBmMzRkODljODlmNzAyYjdmMWExYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCkBAIC0yNDgsOCArMjQ5LDggQEAgdm9pZCBQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBj
aGlsZEZyYW1lOyBjaGlsZEZyYW1lID0gY2hpbGRGcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIHNlcmlhbGl6ZUZyYW1lKGNoaWxkRnJhbWUpOworICAgIGZvciAoYXV0byYgY2hp
bGRGcmFtZSA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUo
JmNoaWxkRnJhbWUpOwogfQogCiB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFVSTCYgdXJsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcAppbmRleCBlODY1M2RmYWQ2YzEyNjRlZjNkNDg3NDQzNGEwMDBjZmU3
Y2I4M2VhLi4yMDA2MjRhOWQyYzZkOGI1Y2FkYTkwMjZmMmQwODM3NWI0NTlkNzZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRHZW5lcmljRmFtaWxpZXMuaCIK
KyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgpAQCAtNTMs
OSArNTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIHNldEltYWdlTG9h
ZGluZ1NldHRpbmdzKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpIHsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkt
PnNldEltYWdlc0VuYWJsZWQocGFnZS0+c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkpOwot
ICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+c2V0QXV0
b0xvYWRJbWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgp
KSkgeworICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5z
ZXRJbWFnZXNFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKKyAg
ICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+c2V0QXV0b0xv
YWRJbWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CiAg
ICAgfQogfQogCkBAIC0zNDMsOCArMzQ0LDggQEAgdm9pZCBTZXR0aW5nczo6c2V0VGV4dEF1dG9z
aXppbmdGb250U2NhbGVGYWN0b3IoZmxvYXQgZm9udFNjYWxlRmFjdG9yKQogICAgIG1fdGV4dEF1
dG9zaXppbmdGb250U2NhbGVGYWN0b3IgPSBmb250U2NhbGVGYWN0b3I7CiAKICAgICAvLyBGSVhN
RTogSSB3b25kZXIgaWYgdGhpcyBuZWVkcyB0byB0cmF2ZXJzZSBmcmFtZXMgbGlrZSBpbiBXZWJW
aWV3SW1wbDo6cmVzaXplLCBvciB3aGV0aGVyIHRoZXJlIGlzIG9ubHkgb25lIGRvY3VtZW50IHBl
ciBTZXR0aW5ncyBpbnN0YW5jZT8KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0g
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT50ZXh0QXV0b3NpemVyKCktPnJlY2FsY3VsYXRlTXVs
dGlwbGllcnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobV9wYWdl
LT5tYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIo
KS0+cmVjYWxjdWxhdGVNdWx0aXBsaWVycygpOwogCiAgICAgbV9wYWdlLT5zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5jcHAKaW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFiM2JlYWZjZDgzZC4u
YzBiOTAyYTk3ODkxNTdlZDY1NWU2Yzc3YzcwYjk1MjRmMTBiZGU2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgogCisjaW5jbHVkZSAi
RnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgpAQCAtNTA0LDEzICs1MDUsMTYg
QEAgYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihjb25zdCBGcmFtZSogZnJhbWUsIEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbikKIAogc3RhdGljIExheW91dFJlY3QgcmVjdFRvQWJzb2x1dGVDb29y
ZGluYXRlcyhGcmFtZSogaW5pdGlhbEZyYW1lLCBjb25zdCBMYXlvdXRSZWN0JiBpbml0aWFsUmVj
dCkKIHsKKyAgICBpZiAoIWluaXRpYWxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGluaXRpYWxSZWN0
OworCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gaW5pdGlhbFJlY3Q7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBpbml0aWFsRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50
KCkpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+b3duZXJFbGVtZW50
KCkpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKCppbml0aWFsRnJhbWUp
KSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+
b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CiAgICAgICAgICAgICB9IHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7Ci0gICAgICAgICAgICByZWN0
Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICAgICAgcmVj
dC5tb3ZlKCgtZnJhbWUudmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCmluZGV4IGY2YTlkNWFhNWY5YTE5ZWY1MDc5NTFmMjg0ZGU0OThmNmRhNTc4
ODkuLjEyNzNjNjQ4NzBiNmM1OGNmZWFiYWIwYjU2NWI1MzU2MWI3MzMxOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJVc2VyU2NyaXB0LmgiCkBAIC0xODYsOSArMTg3LDkg
QEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKIHZv
aWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2Fj
aGVJbkFsbEZyYW1lcygpCiB7CiAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlcykgewotICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlKCk7Ci0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZl
ckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlKCk7CisgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVy
Q2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggOWQyYjU0NDNkNzAwMzZlMWNlOGI2ODBjMmVmN2ZjZDdmZGQwMGQ3Ni4uZWY3NjI1MzQx
YmMyNDNmYzZiYmFiZmY4Y2U3MzE3ZDg3NjZhY2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBz
ZXVkb0VsZW1lbnQuaCIKQEAgLTI1Niw4ICsyNTcsOCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9ucygpCiAgICAgc3VzcGVuZEFuaW1hdGlvbnNGb3JE
b2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVz
Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PmFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmFuaW1hdGlvbigpLnN1c3Bl
bmRBbmltYXRpb25zKCk7CiAKICAgICBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsKIH0KQEAgLTI3MCw4
ICsyNzEsOCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRp
b25zKCkKICAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKIAogICAgIC8vIFRyYXZlcnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
bV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5hbmltYXRpb24oKS5yZXN1bWVBbmltYXRp
b25zKCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisg
ICAgICAgIGNoaWxkLmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKIAogICAgIG1faXNT
dXNwZW5kZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXgg
MjQ1YTk5OTIzMmZjNDM1NzVjMmIzMmUxM2I5OGI4OWQ3MmUxYTgwMC4uMmY3OWZlZDcxMGMzYzM2
MTkzOTg5MzYwYzQ3ODc0NzQ4YmIzNjMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgogI2ltcG9ydCAi
RXZlbnROYW1lcy5oIgogI2ltcG9ydCAiRm9ybUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1l
SXRlcmF0b3IuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgpAQCAtNjYzLDggKzY2NCw4IEBAIHZv
aWQgRnJhbWU6OnNldFRpbWVyc1BhdXNlZEludGVybmFsKGJvb2wgcGF1c2VkKQogICAgIH0KIAog
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBzdWJmcmFtZXMnIHN0YXRlcyBhcmUgdXAg
dG8gZGF0ZS4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHRyZWUoKS5maXJzdENoaWxkKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgZnJhbWUt
PnNldFRpbWVyc1BhdXNlZEludGVybmFsKHBhdXNlZCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBmcmFtZS5zZXRUaW1lcnNQYXVzZWRJbnRl
cm5hbChwYXVzZWQpOwogfQogCiB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VIaWRlRXZlbnRCZWZv
cmVQYXVzZSgpCkBAIC02NzMsOCArNjc0LDggQEAgdm9pZCBGcmFtZTo6ZGlzcGF0Y2hQYWdlSGlk
ZUV2ZW50QmVmb3JlUGF1c2UoKQogICAgIGlmICghaXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCh0aGlzKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1ZSksIGRvY3VtZW50KCkpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqdGhpcykpCisgICAgICAgIGZyYW1l
LmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1ZSksIGRvY3VtZW50KCkp
OwogfQogCiB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRCZWZvcmVSZXN1bWUoKQpA
QCAtNjgzLDggKzY4NCw4IEBAIHZvaWQgRnJhbWU6OmRpc3BhdGNoUGFnZVNob3dFdmVudEJlZm9y
ZVJlc3VtZSgpCiAgICAgaWYgKCFpc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KHRoaXMpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5wYWdlc2hvd0V2ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCp0aGlzKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CiB9CiAKIHZv
aWQgRnJhbWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb24oKQpAQCAt
NzM0LDggKzczNSw4IEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWU6OnJhbmdlZFNlbGVjdGlvbklu
aXRpYWxFeHRlbnQoKSBjb25zdAogdm9pZCBGcmFtZTo6cmVjdXJzaXZlU2V0VXBkYXRlQXBwZWFy
YW5jZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIHNlbGVjdGlvbigpLnNldFVwZGF0ZUFw
cGVhcmFuY2VFbmFibGVkKGVuYWJsZWQpOwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgp
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygp
KQotICAgICAgICBjaGlsZC0+cmVjdXJzaXZlU2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoZW5h
YmxlZCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKnRoaXMpKQorICAg
ICAgICBjaGlsZC5yZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChlbmFibGVkKTsK
IH0KIAogLy8gRklYTUU6IEJyZWFrIHRoaXMgZnVuY3Rpb24gdXAgaW50byBwaWVjZXMgd2l0aCBk
ZXNjcmlwdGl2ZSBmdW5jdGlvbiBuYW1lcyBzbyB0aGF0IGl0J3MgZWFzaWVyIHRvIGZvbGxvdy4K
QEAgLTgxNywxMSArODE4LDEzIEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JD
dXJyZW50Um9vdCgpIGNvbnN0CiAKIHN0YXRpYyBib29sIGFueUZyYW1lSGFzVGlsZWRMYXllcnMo
RnJhbWUqIHJvb3RGcmFtZSkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHJvb3RGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQocm9vdEZyYW1lKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPmNvbnRhaW5zVGlsZWRCYWNraW5nTGF5ZXJzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcm9v
dEZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHRyYXZlcnNhbCA9IGZy
YW1lVHJhdmVyc2FsV2l0aGluKCpyb290RnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9vZih0
cmF2ZXJzYWwuYmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUp
IHsKKyAgICAgICAgcmV0dXJuIGZyYW1lLmNvbnRhaW5zVGlsZWRCYWNraW5nTGF5ZXJzKCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgRnJhbWU6OnZpZXdwb3J0T2Zmc2V0Q2hhbmdlZChWaWV3cG9ydE9m
ZnNldENoYW5nZVR5cGUgY2hhbmdlVHlwZSkKQEAgLTg2Niw4ICs4NjksOCBAQCB2b2lkIEZyYW1l
OjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpCiAgICAgaWYgKGRvY3VtZW50KCktPmRv
bVdpbmRvdygpKQogICAgICAgICBkb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cmVzZXRBbGxHZW9s
b2NhdGlvblBlcm1pc3Npb24oKTsKIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgpLmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKTsKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogZnJhbWVDaGlsZHJlbigqdGhpcykpCisgICAgICAgIGNoaWxkLnJlc2V0
QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKaW5kZXggYTJmNTQ4YzJkNGM0NDY5ODk3OTIy
OTI5ZjZkYjdiODJkNGMxZTA5YS4uNTIyNzU1YTE4OTY2ZjU0ZTIxMmQ2ZDE3ZGFiYWYwNTVmNGQ5
MzVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtNDUsMTAgKzQ2LDEwIEBA
IHZvaWQgUGFnZTo6YWRkU2NoZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1bGVQYWlyPiBwcnBQ
YWlyKQogICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5hZGQocGFpcik7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICBkb2N1bWVudExvYWRl
ci0+c2NoZWR1bGUoKnBhaXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigp
LnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVy
LT5zY2hlZHVsZSgqcGFpcik7CiAgICAgfQogI2VuZGlmCkBAIC02NiwxMCArNjcsMTAgQEAgdm9p
ZCBQYWdlOjpyZW1vdmVTY2hlZHVsZVBhaXIoUGFzc1JlZlB0cjxTY2hlZHVsZVBhaXI+IHBycFBh
aXIpCiAgICAgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMtPnJlbW92ZShwYWlyKTsKIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0g
ZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9h
ZGVyLT51bnNjaGVkdWxlKCpwYWlyKTsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkp
CisgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2Fk
ZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICBkb2N1bWVudExv
YWRlci0+dW5zY2hlZHVsZSgqcGFpcik7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXgg
NjFlN2JmOTFlNjkzMGJmMTA1ZDM4Njk0MTkwZWZmZTgxY2JiMzNkNC4uZTY3MTEwZjEyOTAyOTEz
YTEyYTVlNjg3ODc0OWY1ZDhkYTA1NWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMTQ1
LDggKzE0Niw4IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKGNvbnN0IEZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgIG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uLnVuaXRlKHBsdWdpblZpZXdCYXNlLT5mcmFtZVJlY3QoKSk7CiAgICAg
fQogCi0gICAgZm9yIChGcmFtZSogc3ViZnJhbWUgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQo
KTsgc3ViZnJhbWU7IHN1YmZyYW1lID0gc3ViZnJhbWUtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbi51bml0ZShjb21wdXRlTm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oc3ViZnJhbWUsIG9mZnNldCkpOworICAgIGZvciAoYXV0byYgc3ViZnJhbWUg
OiBmcmFtZUNoaWxkcmVuKCpmcmFtZSkpCisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
LnVuaXRlKGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigmc3ViZnJhbWUsIG9mZnNldCkp
OwogCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogI2VuZGlmCkBAIC0xNTYs
OSArMTU3LDkgQEAgdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50
V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudCA9IDA7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVy
Q291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobV9wYWdlLT5tYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgICAgICB3aGVlbEV2ZW50
SGFuZGxlckNvdW50ICs9IGZyYW1lLmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQo
KTsKICAgICB9CiAKICAgICByZXR1cm4gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXgg
NzQ2YTA3ZDAwMzkyNDQ1YjI2YzA5ZmVmZTliZmY5MDUzOTVjOWU3ZS4uM2I4ZDRkZjY0YjliMjE2
NGY2ZGU0YTQ2NDcyNmFkNmIzOGI5NzVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgpAQCAtNTk5LDkgKzYwMCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsYXllclRpbGVkQmFja2luZ1VzYWdlQ2hhbmdlZChjb25zdCBHcmFwaGljc0xheWVy
KiBnCiAKIFJlbmRlckxheWVyQ29tcG9zaXRvciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmNs
b3NpbmdDb21wb3NpdG9yRmx1c2hpbmdMYXllcnMoKSBjb25zdAogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRv
ciogY29tcG9zaXRvciA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSA/ICZmcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKSA6IDA7Ci0gICAgICAgIGlmIChjb21wb3NpdG9yLT5p
c0ZsdXNoaW5nTGF5ZXJzKCkpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSht
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKSkpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yKiBjb21wb3NpdG9yID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkgPyAmZnJhbWUu
Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChj
b21wb3NpdG9yICYmIGNvbXBvc2l0b3ItPmlzRmx1c2hpbmdMYXllcnMoKSkKICAgICAgICAgICAg
IHJldHVybiBjb21wb3NpdG9yOwogICAgIH0KICAgICAKQEAgLTM0MTAsOSArMzQxMSwxMiBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKQog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlGcmFtZXNPZkNvbXBvc2l0aW5nQ2hh
bmdlKCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJh
bWUoKTsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSkpIHsKLSAg
ICAgICAgaWYgKGNoaWxkLT5kb2N1bWVudCgpICYmIGNoaWxkLT5kb2N1bWVudCgpLT5vd25lckVs
ZW1lbnQoKSkKLSAgICAgICAgICAgIGNoaWxkLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+
c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBG
cmFtZSogZnJhbWVDaGlsZCA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7CisgICAgaWYgKGZy
YW1lQ2hpbGQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lVHJhdmVyc2FsV2l0
aGluKCpmcmFtZUNoaWxkLCBmcmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5kb2N1bWVu
dCgpICYmIGNoaWxkLmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgICAg
IGNoaWxkLmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5zY2hlZHVsZVNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IC8vIENvbXBvc2l0aW5nIGFsc28gYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJlbmRlcklGcmFtZTo6
cmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCksIHNvIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCmluZGV4IGQ3NmU0YjdlNTA0MTBjYzM2YzAzNWE3ZjY1
YjBkZTcxYzE0YzMxZDYuLjNhZWFjNmM2ZTMyOWUwYzgzNjI5NDFmMDM5OGNhMjIwODAyZTg0Mzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCkBAIC0yMzQsNyArMjM1LDcgQEAgdm9pZCBSZXBsYXlD
b250cm9sbGVyOjp1bmxvYWRTZWdtZW50KGJvb2wgc3VwcHJlc3NOb3RpZmljYXRpb25zKQogCiAg
ICAgbV9hY3RpdmVDdXJzb3IgPSBudWxscHRyOwogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4gdW5sb2FkZWRTZWdtZW50ID0gbV9sb2FkZWRTZWdtZW50LnJlbGVhc2UoKTsKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJh
bWVUcmF2ZXJzYWwobV9wYWdlLm1haW5GcmFtZSgpKSkgewogICAgICAgICBmcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+c2V0SW5wdXRDdXJzb3Io
bV9lbXB0eUN1cnNvcik7CiAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zZXRJbnB1dEN1cnNv
cihtX2VtcHR5Q3Vyc29yKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZXBs
YXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1Nlcmlh
bGl6YXRpb25NZXRob2RzLmNwcAppbmRleCAyNDBhYjE0ZDNhNmE1NDVkOTRjYzk5OGJiZTMwZDg5
NGUzMmJjOTkzLi5jZTU5NWE1OGY1N2FkMGFmZTM2YzJlY2YyYmU3NGI3OGRhMDU0M2Q3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJBbGxSZXBsYXlJbnB1dHMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKQEAgLTg0LDEwICs4NSwxMCBAQCB1bnNpZ25lZCBsb25nIGZyYW1lSW5kZXhGcm9t
RnJhbWUoY29uc3QgRnJhbWUqIHRhcmdldEZyYW1lKQogICAgIEFTU0VSVCh0YXJnZXRGcmFtZSk7
CiAKICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRJbmRleCA9IDA7Ci0gICAgY29uc3QgRnJhbWUq
IG1haW5GcmFtZSA9ICZ0YXJnZXRGcmFtZS0+dHJlZSgpLnRvcCgpOwotICAgIGZvciAoY29uc3Qg
RnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgKytjdXJyZW50SW5kZXgsIGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobWFpbkZyYW1lKSkgewotICAgICAgICBpZiAoZnJh
bWUgPT0gdGFyZ2V0RnJhbWUpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
V2l0aGluKHRhcmdldEZyYW1lLT50cmVlKCkudG9wKCkpKSB7CisgICAgICAgIGlmICgmZnJhbWUg
PT0gdGFyZ2V0RnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4OworICAgICAg
ICBjdXJyZW50SW5kZXgrKzsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCmlu
ZGV4IGI0ZGU5Yjg1Nzg5ZWQ4Zjg3NjJiMWQxMmFmNTNiZWY1NGU1YTI0ZDUuLjZjMTUzYTY5YjZh
ZWJlNmNlZjM4M2I5NzZhMGM3YzIxYmU3MDMwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCkBAIC00Nyw5ICs0OCw5IEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uCiAgICAgVmVj
dG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKIAogICAgIC8vIFNlbmQgZXZlbnRzIG9ubHkgdG8g
b3VyIHBhZ2UuCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KHNvdXJjZUZyYW1lICE9IGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikpCi0gICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGZy
YW1lKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZy
YW1lKCkpKSB7CisgICAgICAgIGlmIChzb3VyY2VGcmFtZSAhPSAmZnJhbWUgJiYgZnJhbWUuZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQorICAgICAg
ICAgICAgZnJhbWVzLmFwcGVuZCgmZnJhbWUpOwogICAgIH0KIAogICAgIGRpc3BhdGNoU2Vzc2lv
blN0b3JhZ2VFdmVudHNUb0ZyYW1lcygqcGFnZSwgZnJhbWVzLCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBzZWN1cml0eU9yaWdpbik7CkBA
IC02NCwxMSArNjUsMTAgQEAgdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaExv
Y2FsU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QKICAgICBWZWN0b3I8UmVm
UHRyPEZyYW1lPj4gZnJhbWVzOwogCiAgICAgLy8gU2VuZCBldmVudHMgdG8gZXZlcnkgcGFnZS4K
LSAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBhZ2VzKCk7
Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdlcy5iZWdp
bigpLCBlbmQgPSBwYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKHNvdXJjZUZyYW1lICE9
IGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1
cml0eU9yaWdpbikpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAg
Zm9yIChhdXRvJiBwYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygpKSB7CisgICAgICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChzb3VyY2VGcmFtZSAhPSAmZnJhbWUgJiYgZnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQorICAgICAgICAgICAgICAgIGZy
YW1lcy5hcHBlbmQoJmZyYW1lKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCmluZGV4IDQwYTJjYzc5MTViODliNzkzNTJlODdmNWY0ZGY1YjVlOTg3
MGU1ZGMuLmRmYTk3NTVmMWQwZjc4NmJiYzQ5MmMzYWJkNThlYmY1MTliZTEyZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJF
dmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRm9y
bUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgpAQCAtMTU1MCw5ICsxNTUxLDkgQEAgdW5zaWduZWQgSW50ZXJuYWxzOjpudW1i
ZXJPZlNjcm9sbGFibGVBcmVhcyhFeGNlcHRpb25Db2RlJikKICAgICBpZiAoZnJhbWUtPnZpZXco
KS0+c2Nyb2xsYWJsZUFyZWFzKCkpCiAgICAgICAgIGNvdW50ICs9IGZyYW1lLT52aWV3KCktPnNj
cm9sbGFibGVBcmVhcygpLT5zaXplKCk7CiAKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1l
LT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRT
aWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT52aWV3KCkgJiYgY2hpbGQtPnZpZXcoKS0+
c2Nyb2xsYWJsZUFyZWFzKCkpCi0gICAgICAgICAgICBjb3VudCArPSBjaGlsZC0+dmlldygpLT5z
Y3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNo
aWxkcmVuKCpmcmFtZSkpIHsKKyAgICAgICAgaWYgKGNoaWxkLnZpZXcoKSAmJiBjaGlsZC52aWV3
KCktPnNjcm9sbGFibGVBcmVhcygpKQorICAgICAgICAgICAgY291bnQgKz0gY2hpbGQudmlldygp
LT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOwogICAgIH0KIAogICAgIHJldHVybiBjb3VudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234453</attachid>
            <date>2014-07-05 23:01:15 -0700</date>
            <delta_ts>2014-07-06 08:30:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133798-20140705230054.patch</filename>
            <type>text/plain</type>
            <size>115032</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIxYTI1YTA3YjNiOTNh
MGJkYmFjNDNhMzNiMzBiZDE4OWU2NzhiNS4uM2E2NzAxNWVhNGEyY2Y4ZDIyYjMyMGU0M2UyOTEy
ODJjOTIxN2UyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAxNC0wNy0wNSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIGZyYW1l
IHRyYXZlcnNhbCB0aHJvdWdoIHJhbmdlLWJhc2VkIGZvci1sb29wcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zcGlyZWQgYnkgdGhlIHNpbWlsYXIg
c3VwcG9ydCBmb3IgdHJhdmVyc2luZyBET00gZWxlbWVudHMsIHRoaXMgcGF0Y2gKKyAgICAgICAg
aW50cm9kdWNlcyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZW5hYmxlIGl0ZXJhdGlv
biBvdmVyIHRoZSBmcmFtZQorICAgICAgICB0cmVlIGluIHJhbmdlLWJhc2VkIGZvci1sb29wcyBh
bmQgb3RoZXIgU1RMIGFsZ29yaXRobXMgdGhhdCBjYW4gb3BlcmF0ZQorICAgICAgICBvbiBhIHBh
aXIgb2YgaXRlcmF0b3JzLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBi
ZSB1c2VkLCB3aXRoIFR5cGUgZGVub3RpbmcgYSB0eXBlIHRoYXQgaXMgb3IKKyAgICAgICAgZGVy
aXZlcyBmcm9tIEZyYW1lOgorICAgICAgICAtIGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisg
ICAgICAgIC0gZnJhbWVSZXZlcnNlQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJh
bWVMYXN0Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJhbWVMaW5lYWdlKFR5cGUm
IGZyYW1lKQorICAgICAgICAtIGZyYW1lQW5jZXN0b3JzKFR5cGUmIGZyYW1lKQorICAgICAgICAt
IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0
aGluKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0aGluKFR5cGUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgc3RheVdpdGhpbikKKworICAgICAgICBBbGwgZnVuY3Rpb25zIHJl
dHVybiBhIFdURjo6SXRlcmF0b3JSYW5nZSBvYmplY3QgdGhhdCBpcyBjb25zdHJ1Y3RlZCB3aXRo
CisgICAgICAgIGEgcGFpciBvZiBGcmFtZUl0ZXJhdG9ycy4gVGhlIHR5cGUgb2YgdGhlIGxhdHRl
ciBpcyBpbnN0YW50aWF0ZWQgZnJvbSB0aGUKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgdGhhdCBy
ZXNwZWN0cyB0aGUgY29uc3RuZXNzIG9mIHRoZSByZWZlcmVuY2UgcGFzc2VkIHRvIHRoZQorICAg
ICAgICBoZWxwZXIgZnVuY3Rpb24gYW5kIHVzZXMgdGhlIGluY3JlbWVudCBvcGVyYXRpb24gZm9y
IHRoZSBpdGVyYXRvciB0aGF0IGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBkZXNpcmVkIHR5
cGUgb2YgdHJhdmVyc2FsLgorCisgICAgICAgIFNpbWlsYXJseSwgdGhlIGJlZ2luIGl0ZXJhdG9y
IGlzIGNvbnN0cnVjdGVkIGluIHRoZSB3YXkgdGhhdCdzIHNwZWNpZmljIHRvCisgICAgICAgIHRo
ZSBuYXR1cmUgb2YgdHJhdmVyc2FsIC0tIGl0IGNhbiB1c2UgdGhlIGZpcnN0IGNoaWxkLCBsYXN0
IGNoaWxkLCBwYXJlbnQKKyAgICAgICAgb3IgdGhlIHBhc3NlZC1pbiBmcmFtZSBkaXJlY3RseSBh
cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbmQgaXRlcmF0b3IgaXMKKyAgICAgICAgaG9sZHMg
YSBudWxsIHBvaW50ZXIgYW5kIHN0b3BzIHRoZSBpdGVyYXRpb24gb25jZSB0aGUgaW5jcmVtZW50
IG9wZXJhdGlvbgorICAgICAgICBhbHNvIGVuZHMgdXAgcmV0dXJuaW5nIGEgbnVsbCBwb2ludGVy
LgorCisgICAgICAgIFRoaXMga2VlcHMgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgZnJhbWUgdHJl
ZSB0cmF2ZXJzYWwsIGJ1dCBwYWNrcyBpdCBpbnRvCisgICAgICAgIGEgbmljZXIgZm9ybWF0IHdp
dGggdGhlIGhlbHAgb2YgV1RGOjpJdGVyYXRvclJhbmdlLCBlbmFibGluZyB0aGUgdXNlIG9mCisg
ICAgICAgIHByZXR0aWVyIHJhbmdlLWJhc2VkIGZvci1sb29wcy4gRm9yIHN0YXJ0ZXJzIGFsbCB0
aGUgYWZmZWN0ZWQgZm9yLWxvb3BzCisgICAgICAgIGluIFdlYkNvcmUgaGF2ZSBiZWVuIHN3aXRj
aGVkIG92ZXIgdG8gdGhlIG5ldyBzeW50YXguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuQWNjZXNzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFnZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzZXREZXNpZ25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUpOgorICAgICAg
ICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdl
OjpyZXN0b3JlKToKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKiBodG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVnSW5zKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZCk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxBbmNlc3RvcnNBcmVDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsb3Nl
T2xkRGF0YVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1YmZyYW1l
SXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRp
b25zKToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVw
ZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlv
blNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpt
dXN0TG9ja0JhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6On5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9v
bUZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNVUkxBbGxvd2VkKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lSXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVRyYXZlcnNhbDo6Q2hpbGRJdGVyYXRvckluY3JlbWVudDo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6Okxhc3RD
aGlsZEl0ZXJhdG9ySW5jcmVtZW50OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVHJhdmVyc2FsOjpMaW5lYWdlSXRlcmF0b3JJbmNyZW1lbnQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6OkZyYW1lSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6Om9wZXJhdG9yIEZyYW1lVHlwZSopOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVJldmVyc2VDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUxhc3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUxpbmVhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhbWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVUcmF2ZXJzYWxXaXRoaW4p
OgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
VHJlZTo6fkZyYW1lVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnVuaXF1ZUNo
aWxkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVHJlZTo6c2NvcGVkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjpz
Y29wZWRDaGlsZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6Y2hpbGRDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVHJlZTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmlzRGVz
Y2VuZGFudE9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6ZGVlcExhc3RDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnRvcCk6CisgICAgICAgIChwcmludEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXND
b21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6aGFzQ29tcG9zaXRpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0SXNPdmVybGFwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVCYWNrZ3JvdW5kUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRUcmFja3NSZXBhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
dGlvbjo6YW5jZXN0b3JPcmlnaW5zKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojp+UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW5kZXJUcmVlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFu
Z2VJbkVudmlyb25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWZyZXNoUGx1Z2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xs
YmFyc1RvSGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXREZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZW1v
cnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRUaW1lclRo
cm90dGxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmRuc1ByZWZldGNoaW5n
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBsdWdpblZpZXdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0U2Vzc2lvbklEKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBh
Z2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZy
YW1lKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEltYWdlTG9hZGluZ1NldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRU
ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rvcik6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVz
KToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0VGltZXJzUGF1c2VkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BhdGNoUGFnZUhpZGVFdmVudEJlZm9y
ZVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRC
ZWZvcmVSZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlY3Vyc2l2ZVNldFVwZGF0
ZUFwcGVhcmFuY2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUZyYW1lSGFzVGlsZWRM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJt
aXNzaW9uKToKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OmFkZFNjaGVkdWxlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1v
dmVTY2hlZHVsZVBhaXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlG
cmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdt
ZW50KToKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZnJhbWVJbmRleEZyb21GcmFtZSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bnVtYmVyT2ZTY3JvbGxhYmxlQXJlYXMpOgorCiAyMDE0LTA3LTA1ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNZWRpYURvY3VtZW50IHNob3Vs
ZCBzZXQgYSB2aWV3cG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWI1M2FhMzhhYzk5
OTU2Nzg4MGYzM2U2NGFmMzc3YzgyNzFlNWQxNy4uZGZlZjMyN2ViYjE2YWRjNmNhOWJjNDI2YWNk
ZDkyMDVhODExM2E1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01OCw2ICs1OCw3IEBA
CiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgog
I2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM1Miw4ICszNTMsOCBAQCBzdGF0aWMgYm9vbCBj
YW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9yaWdpbiogYWN0aXZlU2VjdXJpdHlPcmln
aW4sIEZyYW1lKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBib29sIGlzTG9j
YWxBY3RpdmVPcmlnaW4gPSBhY3RpdmVTZWN1cml0eU9yaWdpbi0+aXNMb2NhbCgpOwotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yRnJhbWUgPSB0YXJnZXRGcmFtZTsgYW5jZXN0b3JGcmFtZTsgYW5j
ZXN0b3JGcmFtZSA9IGFuY2VzdG9yRnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBE
b2N1bWVudCogYW5jZXN0b3JEb2N1bWVudCA9IGFuY2VzdG9yRnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgZm9yIChhdXRvJiBhbmNlc3RvckZyYW1lIDogZnJhbWVMaW5lYWdlKCp0YXJnZXRGcmFtZSkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGFuY2VzdG9yRG9jdW1lbnQgPSBhbmNlc3RvckZyYW1lLmRv
Y3VtZW50KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYW4gQVNTRVJUPyBGcmFtZXMg
c2hvdWxkIGFsd2F5IGhhdmUgZG9jdW1lbnRzLgogICAgICAgICBpZiAoIWFuY2VzdG9yRG9jdW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5NDYsOCArMTk0Nyw4IEBAIHZvaWQg
RG9jdW1lbnQ6OmNyZWF0ZVJlbmRlclRyZWUoKQogc3RhdGljIHZvaWQgcGFnZVdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKFBhZ2UmIHBhZ2UpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAw
OwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZvciAoY29uc3QgYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLm1haW5GcmFtZSgpKSkgeworICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGNv
dW50ICs9IGRvY3VtZW50LT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQogICAgIHBh
Z2UuY2hyb21lKCkuY2xpZW50KCkubnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZChjb3VudCk7
CkBAIC00MzM4LDggKzQzMzksMTYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNl
KHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2Zvcm1Tb3VyY2U+IHNvdXJjZSkKIHZvaWQgRG9jdW1lbnQ6
OnNldERlc2lnbk1vZGUoSW5oZXJpdGVkQm9vbCB2YWx1ZSkKIHsKICAgICBtX2Rlc2lnbk1vZGUg
PSB2YWx1ZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7IGZyYW1lICYmIGZyYW1l
LT5kb2N1bWVudCgpOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUp
KQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygp
OworCisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8m
IGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKm1fZnJhbWUpKSB7CisgICAgICAgIGlmICgh
ZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICB9CiB9CiAKIERvY3Vt
ZW50OjpJbmhlcml0ZWRCb29sIERvY3VtZW50OjpnZXREZXNpZ25Nb2RlKCkgY29uc3QKQEAgLTUx
MjIsMTIgKzUxMzEsMTIgQEAgdm9pZCBEb2N1bWVudDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHNob3J0IGZsYWcKIAogICAgICAgICAvLyBB
IGRlc2NlbmRhbnQgYnJvd3NpbmcgY29udGV4dCdzIGRvY3VtZW50IGhhcyBhIG5vbi1lbXB0eSBm
dWxsc2NyZWVuIGVsZW1lbnQgc3RhY2suCiAgICAgICAgIGJvb2wgZGVzY2VuZGVudEhhc05vbkVt
cHR5U3RhY2sgPSBmYWxzZTsKLSAgICAgICAgZm9yIChGcmFtZSogZGVzY2VuZGFudCA9IGZyYW1l
KCkgPyBmcmFtZSgpLT50cmVlKCkudHJhdmVyc2VOZXh0KCkgOiBudWxscHRyOyBkZXNjZW5kYW50
OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRIYXNOb25FbXB0eVN0YWNrID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGZy
YW1lKCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHJhdmVyc2FsID0gZnJhbWVUcmF2ZXJzYWwoKmZy
YW1lKCkpOworICAgICAgICAgICAgZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgPSBzdGQ6OmFu
eV9vZih0cmF2ZXJzYWwuYmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLAorICAgICAgICAgICAgICAg
IFtdKGNvbnN0IEZyYW1lJiBkZXNjZW5kYW50KSB7IHJldHVybiAhIWRlc2NlbmRhbnQuZG9jdW1l
bnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsgfSk7CiAgICAgICAgIH0KKwogICAgICAg
ICBpZiAoZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgJiYgIWluTGVnYWN5TW96aWxsYU1vZGUp
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNTI0NiwxMSArNTI1NSwxMyBAQCB2b2lkIERvY3Vt
ZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbigpCiAgICAgLy8gZWxlbWVudCBzdGFjayAoaWYgYW55
KSwgb3JkZXJlZCBzbyB0aGF0IHRoZSBjaGlsZCBvZiB0aGUgZG9jIGlzIGxhc3QgYW5kIHRoZSBk
b2N1bWVudCBmdXJ0aGVzdAogICAgIC8vIGF3YXkgZnJvbSB0aGUgZG9jIGlzIGZpcnN0LgogICAg
IERlcXVlPFJlZlB0cjxEb2N1bWVudD4+IGRlc2NlbmRhbnRzOwotICAgIGZvciAoRnJhbWUqIGRl
c2NlbmRhbnQgPSBmcmFtZSgpID8gZnJhbWUoKS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpIDogbnVs
bHB0cjsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVs
bHNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2Vu
ZGFudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKGZyYW1lKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBkZXNjZW5kYW50IDogZnJhbWVUcmF2ZXJzYWwoKmZyYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoZGVzY2VuZGFudC5kb2N1bWVudCgpLT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpKQorICAg
ICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2VuZGFudC5kb2N1bWVudCgpKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICAvLyA0LiBGb3IgZWFjaCBkZXNjZW5k
YW50IGluIGRlc2NlbmRhbnRzLCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
IHN0YWNrLCBhbmQgcXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBm
dWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9u
IGRlc2NlbmRhbnQuCiAgICAgZm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6aXRlcmF0b3Ig
aSA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7ICsraSkgewpA
QCAtNTc3Niw4ICs1Nzg3LDggQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSogaGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3RvdWNoRXZl
bnRUYXJnZXRzLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IEZyYW1l
KiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJh
bWUtPmRvY3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQorICAgIGZvciAoY29uc3Qg
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgaWYgKGZyYW1lLmRvY3VtZW50KCkgJiYgZnJhbWUuZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLm5lZWRUb3VjaEV2ZW50cyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuY3BwCmluZGV4IDc2NDk3NGJjMzEzZmI4MjIxZTlkNzgwMmYyMThjZTNjODY5
MWU4YmEuLmRiOTEyZmYzODY0NmQ2NzdlOWM1ZWRkZmI4NzgwNWM3YzVlYTA4MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgpAQCAtMTU3LDggKzE1OCw4IEBAIENhY2hlZEZyYW1lOjpDYWNoZWRGcmFt
ZShGcmFtZSYgZnJhbWUpCiAgICAgZnJhbWUubG9hZGVyKCkuc3RvcExvYWRpbmcoVW5sb2FkRXZl
bnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIENhY2hlZEZy
YW1lcyBmb3IgYWxsIEZyYW1lcyBpbiB0aGUgRnJhbWVUcmVlLgotICAgIGZvciAoRnJhbWUqIGNo
aWxkID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBtX2NoaWxkRnJhbWVzLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPENhY2hlZEZyYW1lPigqY2hpbGQpKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
ZnJhbWVDaGlsZHJlbihmcmFtZSkpCisgICAgICAgIG1fY2hpbGRGcmFtZXMuYXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8Q2FjaGVkRnJhbWU+KGNoaWxkKSk7CiAKICAgICAvLyBBY3RpdmUgRE9NIG9i
amVjdHMgbXVzdCBiZSBzdXNwZW5kZWQgYmVmb3JlIHdlIGNhY2hlIHRoZSBmcmFtZSBzY3JpcHQg
ZGF0YSwKICAgICAvLyBidXQgYWZ0ZXIgd2UndmUgZmlyZWQgdGhlIHBhZ2VoaWRlIGV2ZW50LCBp
biBjYXNlIHRoYXQgY3JlYXRlcyBtb3JlIG9iamVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRQYWdlLmNwcAppbmRleCBhZjA2ZjU4ZTZmODFhMjE2NzM3YmM0NThlYWNmYzkyOTY4NjUxNzc5
Li41YzM4MzM4YzBjZDAzMDYzNzZlZmQ2NDRhNmIxMWZiNzBmMGU2ZGNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtMTA2LDggKzEwNyw4
IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlJiBwYWdlKQogICAgIH0KIAogICAgIGlm
IChtX25lZWRTdHlsZVJlY2FsY0ZvclZpc2l0ZWRMaW5rcykgewotICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnZpc2l0ZWRM
aW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgICAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS5tYWluRnJhbWUoKSkpCisgICAgICAgICAg
ICBmcmFtZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9y
QWxsTGlua3MoKTsKICAgICB9CiAKICAgICBpZiAobV9uZWVkc0RldmljZVNjYWxlQ2hhbmdlZCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IDA4MzVmYTg1NGYzOTRiNjM5
YmUyYjg4MDMyNDNjNjBiNjdlMGZiYTUuLmQyYzFiNmM1ZTFkZDJkNDkzMmRhOTI5MDhkZjBhOTA4
MDA5ZmZhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgpAQCAt
MTgwLDggKzE4MSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24o
RnJhbWUqIGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCiAgICAgICAgIHJlamVjdFJlYXNvbnMgfD0g
MSA8PCBDbGllbnREZW5pZXNDYWNoaW5nOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dDYW5DYWNoZUZy
YW1lRGVjaXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSk7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dD
YW5DYWNoZUZyYW1lRGVjaXNpb24oJmNoaWxkLCBpbmRlbnRMZXZlbCArIDEpOwogICAgIAogICAg
IFBDTE9HKHJlamVjdFJlYXNvbnMgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFt
ZSBDQU4gYmUgY2FjaGVkIik7CiAgICAgUENMT0coIistLS0iKTsKQEAgLTI3Nyw4ICsyNzgsOCBA
QCBQYWdlQ2FjaGU6OlBhZ2VDYWNoZSgpCiAgICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQ
YWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFp
bmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRy
ZW4oKmZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoJmNoaWxkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlNjMx
YWUyYjE4MzE5ZDM4ZGI4YzBiZjE2NzVlNTc2MzQ2MGM2NmI2Li5hYTc1N2M4YzE0YzEwYTA4MmQ1
ZWYyODZjMmY1ZDI2YjI0ZWM4YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzNSwxOCAr
NDM2LDE4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVn
SW5zKCkKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFmcmFtZS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZG9jdW1lbnQoKS5wYWdlKCktPm1h
aW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVy
KCkuY29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGlmICghZnJhbWUuZG9jdW1l
bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxOb2RlTGlzdD4g
cGx1Z0lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZShlbWJlZFRh
Zy5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z0lucyA9IGZyYW1l
LmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICAgICAgaWYgKHBsdWdJbnMpCiAgICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0
TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdp
biwgbWltZVR5cGUpOwogCi0gICAgICAgIHBsdWdJbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudHNCeVRhZ05hbWUob2JqZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcGx1Z0lu
cyA9IGZyYW1lLmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKG9iamVjdFRhZy5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIGlmIChwbHVnSW5zKQogICAgICAgICAgICAgYWRkUGx1Z0luc0Zy
b21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnSW5zLCBw
bHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4
IGFhOTFlYjFiYWZjMTVkMDE4NjE3ODBhMDRmNmU2YzIwN2RmYTE0YmYuLmE1NGYwZWJiYThhODM1
ZjBlM2UzYTM5MDY4ZjRmYTQ2NjYxNzQ4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5o
IgpAQCAtOTgsOSArOTksOCBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cgogewogICAgIHJlc3Vs
dCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAKLSAgICBG
cmFtZSogbWFpbkZyYW1lID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpKSkg
eworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJl
ZlB0cgogICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5n
KCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRo
TWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNo
ZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEZyYW1l
SWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgICAgICAgIC5zZXRGcmFt
ZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1h
bmlmZXN0VVJMKG1hbmlmZXN0VVJMKQogICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGlj
X2Nhc3Q8aW50Pihob3N0LT5zdGF0dXMoKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVt
KHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IDdkM2ZhNzdlOTNlYzk4YjZmYzhmMjA5YjdmNGFmY2FjZjM3ODVkMTcuLjg0OTFh
NWQxZDAwMTEwMTNlOTQ2Mjg5MTM2NDFjZGRlMWI4OWIzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTksNiArNTksNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKQEAgLTI2Niw4ICsyNjcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVh
c29uKQogVmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiB7
CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
bV9kb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoKm1fZG9jdW1lbnQtPmZy
YW1lKCkpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7
CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
cmVzdWx0LmFwcGVuZChkb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3
Zjk2NDgyNDE4ZGUuLjBlMGZmYmM5MTQ2ZTIxYzM1ODE3OGMxMGQ1MzYyZDJiYjk3NDhmYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBA
IC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRpbmcu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxMCwxMCArNTExLDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6CiAgICAgLy8gYWx3YXlzIHJldHVybiB0aGUgc2FtZSB0cnVlL2ZhbHNl
IHZhbHVlLgogICAgIGJvb2wgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZmFsc2U7CiAKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUuZG9jdW1lbnQoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHVybCA6IGFsbFJlc291
cmNlc1VSTHNGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiBhbGxS
ZXNvdXJjZXNVUkxzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tp
ZT4gZG9jQ29va2llc0xpc3Q7CiAgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBn
ZXRSYXdDb29raWVzKGRvY3VtZW50LCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBkb2NDb29r
aWVzTGlzdCk7CiAKQEAgLTU0Miw4ICs1NDMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOgog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVVJMIHBhcnNl
ZFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZnJhbWUtPmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpCisgICAgICAgIFdl
YkNvcmU6OmRlbGV0ZUNvb2tpZShmcmFtZS5kb2N1bWVudCgpLCBwYXJzZWRVUkwsIGNvb2tpZU5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQpAQCAtNjI0LDIxICs2MjUsMjEgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb24KICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CiAgICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4
KHRleHQsIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKICAgICAgICAgU3RyaW5nIGNv
bnRlbnQ7CiAKLSAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291
cmNlc0ZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNl
IDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRl
eHRDb250ZW50Rm9yQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UsICZjb250ZW50KSkgewog
ICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
Ojpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVz
dWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFtZUlkKGZyYW1lKSwg
Y2FjaGVkUmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFt
ZUlkKCZmcmFtZSksIGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVudChm
cmFtZSwgZmFsc2UsICZjb250ZW50KSkgeworICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVu
dCgmZnJhbWUsIGZhbHNlLCAmY29udGVudCkpIHsKICAgICAgICAgICAgIGludCBtYXRjaGVzQ291
bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hl
cyhyZWdleCwgY29udGVudCk7CiAgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQotICAgICAg
ICAgICAgICAgIHNlYXJjaFJlc3VsdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1
bHQoZnJhbWVJZChmcmFtZSksIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50
KSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZv
clNlYXJjaFJlc3VsdChmcmFtZUlkKCZmcmFtZSksIGZyYW1lLmRvY3VtZW50KCktPnVybCgpLCBt
YXRjaGVzQ291bnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMwLDEwICs4MzEsMTAgQEAg
U3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKIAogRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKQogewotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkb2N1bWVu
dE9yaWdpbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCgqbWFpbkZyYW1lKCkpKSB7CisgICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpOwogICAgICAgICBpZiAoZG9jdW1lbnRPcmlnaW4tPnRvUmF3U3RyaW5n
KCkgPT0gb3JpZ2luUmF3U3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAg
ICAgICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC05
ODQsMTIgKzk4NSwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OgogICAgIH0KIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7Ci0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1l
Q2hpbGRyZW4oKmZyYW1lKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKICAgICAg
ICAgICAgIGNoaWxkcmVuQXJyYXkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKICAgICAg
ICAgfQotICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJhbWVU
cmVlKGNoaWxkKSk7CisgICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JGcmFtZVRyZWUoJmNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYmFkNGE4
M2E5YTUzYzIwZjUyY2NhOTI3YjQ1NGNiZjgzY2JkYWY0YS4uMDZhOTExZmE4NTU1MWEyODdmYjRi
NTA2YjQ3Y2ZkOGY2NGIyODc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
UnVudGltZUFnZW50LmNwcApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCkBAIC0xNTUsMTQgKzE1NiwxNCBAQCB2
b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnVubXV0ZUNvbnNvbGUoKQogdm9pZCBQYWdlUnVudGltZUFn
ZW50OjpyZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKQogewogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+PiBpc29sYXRlZENvbnRleHRz
OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFmcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVT
Y3JpcHQpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLnNjcmlwdCgpLmNhbkV4
ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1l
KTsKKyAgICAgICAgU3RyaW5nIGZyYW1lSWQgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUp
OwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNT
dGF0ZShmcmFtZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5X
b3JsZEV4ZWNTdGF0ZSgmZnJhbWUpOwogICAgICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChmcmFt
ZUlkLCBzY3JpcHRTdGF0ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQo
KS5jb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhpc29sYXRlZENvbnRleHRzKTsKKyAgICAgICAgZnJh
bWUuc2NyaXB0KCkuY29sbGVjdElzb2xhdGVkQ29udGV4dHMoaXNvbGF0ZWRDb250ZXh0cyk7CiAg
ICAgICAgIGlmIChpc29sYXRlZENvbnRleHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaTwgaXNvbGF0ZWRDb250ZXh0cy5zaXpl
KCk7IGkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKaW5kZXggZTU4OWE0ZGRjNDc2MTBiMzU5ZDhhMjJhNGQzMjM0OWQ5NTVlMjQ5
Zi4uNDhkMTIwNDE3ZTJiMzRiY2RlMjk0MDhkMmRlNTVjYzY1ZmJhZjY4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBA
IC0xNjIsOCArMTYzLDggQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3Jp
cHRQYXVzZWQoUGFnZSogcGFnZSwgYm9vbCBwYXVzZWQpCiAKICAgICBwYWdlLT5zZXREZWZlcnNM
b2FkaW5nKHBhdXNlZCk7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAg
ICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZSwgcGF1c2VkKTsKKyAgICBmb3IgKGF1dG8mIGZy
YW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKQorICAgICAgICBzZXRKYXZh
U2NyaXB0UGF1c2VkKCZmcmFtZSwgcGF1c2VkKTsKIH0KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWUqIGZyYW1lLCBib29sIHBhdXNlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGI3NThjYjgyMDE3NmQzM2I4MmMx
MDgzMzI2MDk1ZDVkOTkyMWY5NTIuLjk1NmY0NGY2Njc3MGM5ZDM1OTFmNjI2YTdiMWYzMTBhNzk4
M2M0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTksNiArNTks
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKQEAgLTI2OCw2ICsyNjksNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlciht
X2NsaWVudC5jcmVhdGVEb2N1bWVudExvYWRlcihSZXNvdXJjZVJlcXVlc3QoVVJMKFBhcnNlZFVS
TFN0cmluZywgZW1wdHlTdHJpbmcoKSkpLCBTdWJzdGl0dXRlRGF0YSgpKS5nZXQoKSk7CiAgICAg
c2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50TG9hZGVyLmdldCgp
KTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0YXJ0TG9hZGluZ01haW5SZXNv
dXJjZSgpOworICAgIGZwcmludGYoc3RkZXJyLCAiRnJhbWVMb2FkZXI6OmluaXQoKSAlcCBmcmFt
ZSAlcCByZWYgY291bnQgJWRcbiIsIHRoaXMsICZtX2ZyYW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkp
OwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVN
YWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRp
YWxFbXB0eURvY3VtZW50KTsKIApAQCAtNzc3LDIwICs3NzksMTggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZERvbmUoKQogCiBib29sIEZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRl
KCkgY29uc3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgIGlmICghY2hpbGQtPmxvYWRlcigpLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBjaGlsZHJlbiA9
IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6YWxsX29mKGNoaWxkcmVu
LmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAg
ICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLm1faXNDb21wbGV0ZTsKKyAgICB9KTsKIH0KIAogYm9v
bCBGcmFtZUxvYWRlcjo6YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yID0gJm1fZnJhbWU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCku
bV9pc0NvbXBsZXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIGxpbmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV9mcmFtZSk7CisgICAg
cmV0dXJuIHN0ZDo6YWxsX29mKGxpbmVhZ2UuYmVnaW4oKSwgbGluZWFnZS5lbmQoKSwgW10oY29u
c3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBmcmFtZS5sb2FkZXIoKS5tX2lzQ29t
cGxldGU7CisgICAgfSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkK
QEAgLTEwNTksOCArMTA1OSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlG
b3JDb29raWVzKCkKIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
Y29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKQotICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV9mcmFtZSkpCisgICAgICAg
IGZyYW1lLmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JDb29raWVzKHVybCk7CiB9CiAKIC8v
IFRoaXMgZG9lcyB0aGUgc2FtZSBraW5kIG9mIHdvcmsgdGhhdCBkaWRPcGVuVVJMIGRvZXMsIGV4
Y2VwdCBpdCByZWxpZXMgb24gdGhlIGZhY3QKQEAgLTExMzgsMjQgKzExMzgsMzIgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0
ZWQoKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkZyYW1lTG9hZGVyOjpjb21wbGV0ZWQoKSAlcCBmcmFtZSAlcCAoJWQpIG1faXNDb21w
bGV0ZSAlZFxuIiwgdGhpcywgJm1fZnJhbWUsIG1fZnJhbWUucmVmQ291bnQoKSwgbV9pc0NvbXBs
ZXRlKTsKIAotICAgIGZvciAoRnJhbWUqIGRlc2NlbmRhbnQgPSBtX2ZyYW1lLnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fZnJhbWUpOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZSkpCi0gICAgICAgIGRlc2NlbmRhbnQtPm5hdmln
YXRpb25TY2hlZHVsZXIoKS5zdGFydFRpbWVyKCk7CisgICAgaWYgKEZyYW1lKiBkZXNjZW5kYW50
ID0gbV9mcmFtZS50cmVlKCkudHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmRlc2NlbmRhbnQsIG1fZnJhbWUp
KQorICAgICAgICAgICAgZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLnN0YXJ0VGltZXIoKTsK
KyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJcdGZyYW1lICVwICglZClcbiIsICZtX2ZyYW1l
LCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogCi0gICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1l
LnRyZWUoKS5wYXJlbnQoKSkKKyAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUudHJlZSgp
LnBhcmVudCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHRwYXJlbnQgJXBcbiIsIHBh
cmVudCk7CiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCkuY2hlY2tDb21wbGV0ZWQoKTsKKyAgICB9
CiAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0ZnJhbWUgJXAgKCVkKVxuIiwgJm1fZnJhbWUsIG1f
ZnJhbWUucmVmQ291bnQoKSk7CiAgICAgaWYgKG1fZnJhbWUudmlldygpKQogICAgICAgICBtX2Zy
YW1lLnZpZXcoKS0+bWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKDApOwogICAgIG1fYWN0
aXZpdHlBc3NlcnRpb24gPSBudWxscHRyOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRFTkQgT0Yg
RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpICVwIGZyYW1lICVwICglZClcbiIsIHRoaXMsICZtX2Zy
YW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVk
KCkKIHsKICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPnBhZ2VUaHJv
dHRsZXIoKSkKICAgICAgICAgbV9hY3Rpdml0eUFzc2VydGlvbiA9IG1fZnJhbWUucGFnZSgpLT5w
YWdlVGhyb3R0bGVyKCktPnBhZ2VMb2FkQWN0aXZpdHlUb2tlbigpOwotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50KCkp
Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKG1fZnJhbWUpKQorICAgICAgICBmcmFtZS5sb2Fk
ZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJlcGFy
ZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCkKQEAgLTE2MjEsOCArMTYyOSw4IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnN0b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5IGNsZWFyUHJv
dmlzaW9uYWxJdGVtCiAgICAgaWYgKGNsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5ID09IFNob3Vs
ZENsZWFyUHJvdmlzaW9uYWxJdGVtKQogICAgICAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJ
dGVtKDApOwogCi0gICAgZm9yIChSZWZQdHI8RnJhbWU+IGNoaWxkID0gbV9mcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5zdG9wQWxsTG9hZGVycyhjbGVhclByb3Zpc2lvbmFs
SXRlbVBvbGljeSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFt
ZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKGNsZWFyUHJvdmlzaW9u
YWxJdGVtUG9saWN5KTsKICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQogICAg
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7CiAgICAgaWYg
KG1fZG9jdW1lbnRMb2FkZXIpCkBAIC0yMDMzLDggKzIwNDEsOCBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjbG9zZU9sZERhdGFTb3VyY2VzKCkKICAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IGZv
ciB0aGlzIHRyYXZlcnNhbCB0byBiZSBwb3N0b3JkZXIgaW5zdGVhZCBvZiBwcmVvcmRlcj8KICAg
ICAvLyBJZiBzbywgYWRkIGhlbHBlcnMgZm9yIHBvc3RvcmRlciB0cmF2ZXJzYWwsIGFuZCB1c2Ug
dGhlbS4gSWYgbm90LCB0aGVuIGxldHMgbm90CiAgICAgLy8gdXNlIGEgcmVjdXJzaXZlIGFsZ29y
aXRobSBoZXJlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5sb2FkZXIoKS5jbG9zZU9sZERhdGFTb3VyY2VzKCk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigp
LmNsb3NlT2xkRGF0YVNvdXJjZXMoKTsKICAgICAKICAgICBpZiAobV9kb2N1bWVudExvYWRlcikK
ICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKQEAgLTIxMjYsOCArMjEzNCw4
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNldFJlcGxhY2luZygpCiBib29sIEZyYW1lTG9hZGVyOjpz
dWJmcmFtZUlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgLy8gSXQncyBtb3N0IGxpa2VseSB0aGF0
IHRoZSBsYXN0IGFkZGVkIGZyYW1lIGlzIHRoZSBsYXN0IHRvIGxvYWQgc28gd2Ugd2FsayBiYWNr
d2FyZHMuCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5wcmV2aW91c1NpYmxpbmcoKSkgewotICAg
ICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGZyYW1lUmV2ZXJzZUNoaWxkcmVuKG1fZnJhbWUpKSB7CisgICAgICAg
IEZyYW1lTG9hZGVyJiBjaGlsZExvYWRlciA9IGNoaWxkLmxvYWRlcigpOwogICAgICAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBjaGlsZExvYWRlci5kb2N1bWVudExvYWRlcigp
OwogICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwNiw4ICsyNDE0
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoQ2hpbGRyZW4oKQogewogICAgIFZlY3RvcjxS
ZWY8RnJhbWU+LCAxNj4gY2hpbGRyZW5Ub0RldGFjaDsKICAgICBjaGlsZHJlblRvRGV0YWNoLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9mcmFtZS50cmVlKCkuY2hpbGRDb3VudCgpKTsKLSAgICBm
b3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmxhc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLnByZXZpb3VzU2libGluZygpKQotICAgICAgICBjaGlsZHJlblRv
RGV0YWNoLnVuY2hlY2tlZEFwcGVuZCgqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBm
cmFtZVJldmVyc2VDaGlsZHJlbihtX2ZyYW1lKSkKKyAgICAgICAgY2hpbGRyZW5Ub0RldGFjaC51
bmNoZWNrZWRBcHBlbmQoY2hpbGQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGls
ZHJlblRvRGV0YWNoLnNpemUoKTsgKytpKQogICAgICAgICBjaGlsZHJlblRvRGV0YWNoW2ldLT5s
b2FkZXIoKS5kZXRhY2hGcm9tUGFyZW50KCk7CiB9CkBAIC0yNDM4LDggKzI0NDYsOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiAgICAgLy8gRklYTUU6IEFsd2F5cyB0
cmF2ZXJzaW5nIHRoZSBlbnRpcmUgZnJhbWUgdHJlZSBpcyBhIGJpdCBpbmVmZmljaWVudCwgYnV0
IAogICAgIC8vIGlzIGN1cnJlbnRseSBuZWVkZWQgaW4gb3JkZXIgdG8gbnVsbCBvdXQgdGhlIHBy
ZXZpb3VzIGhpc3RvcnkgaXRlbSBmb3IgYWxsIGZyYW1lcy4KICAgICBWZWN0b3I8UmVmPEZyYW1l
PiwgMTY+IGZyYW1lczsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZXMuYXBwZW5kKCpmcmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1fZnJhbWUubWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1l
KTsKIAogICAgIC8vIFRvIHByb2Nlc3MgY2hpbGRyZW4gYmVmb3JlIHRoZWlyIHBhcmVudHMsIGl0
ZXJhdGUgdGhlIHZlY3RvciBiYWNrd2FyZHMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJhbWVz
LnNpemUoKTsgaTsgLS1pKQpAQCAtMjQ1Miw4ICsyNDYwLDggQEAgaW50IEZyYW1lTG9hZGVyOjpu
dW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNlKSBjb25zdAogICAgICAgICBy
ZXR1cm4gbV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0
Q291bnQoKTsKIAogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9mcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJh
bWUpKQotICAgICAgICBjb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+cmVxdWVzdENvdW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKQorICAgICAgICBjb3VudCArPSBmcmFtZS5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKICAgICByZXR1cm4gY291
bnQ7CiB9CiAKQEAgLTI3OTgsOCArMjgwNiwxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRD
bG9zZSgpCiAgICAgLy8gU3RvcmUgYWxsIHJlZmVyZW5jZXMgdG8gZWFjaCBzdWJmcmFtZSBpbiBh
ZHZhbmNlIHNpbmNlIGJlZm9yZXVubG9hZCdzIGV2ZW50IGhhbmRsZXIgbWF5IG1vZGlmeSBmcmFt
ZQogICAgIFZlY3RvcjxSZWY8RnJhbWU+LCAxNj4gdGFyZ2V0RnJhbWVzOwogICAgIHRhcmdldEZy
YW1lcy5hcHBlbmQobV9mcmFtZSk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKLSAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZCgqY2hpbGQpOworICAg
IGlmIChGcmFtZSogZmlyc3RDaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmZpcnN0Q2hp
bGQsIG1fZnJhbWUpKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZChmcmFtZSk7Cisg
ICAgfQogCiAgICAgYm9vbCBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgIHsKQEAgLTMwNTgsOCAr
MzA2OCw4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVP
cHRpb25zKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uCiAgICAgICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwogICAgICAgICBp
ZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wRnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcmlnaW4tPmlzU2FtZVNj
aGVtZUhvc3RQb3J0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lQW5jZXN0b3JzKG1fZnJhbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoZnJhbWUuZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hp
c3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5jcHAKaW5kZXggZTFiOGM5Mzk5ZGUwYTQ0NmMzNmRlMzYwZTAyNWQzYzQ1OWM5MTYzYi4u
OTQ2NjI5ZTY3YmJhMjE3NGI0ODdhNzBhODg1ZDU4OTM5N2I1NWZlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmgiCkBAIC0xOTcsOSArMTk4LDkgQEAgdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQogLy8gaGlzdG9yeSBpdGVtLgogdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQogewotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgewotICAgICAgICBmcmFtZS0+bG9hZGVyKCkuaGlzdG9y
eSgpLnNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5
KCkuc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS5o
aXN0b3J5KCkuY3VycmVudEl0ZW0oKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKSB7CisgICAgICAgIGZyYW1lLmxvYWRlcigpLmhpc3Rvcnko
KS5zYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5oaXN0b3J5KCku
c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLmxvYWRlcigpLmhpc3Rv
cnkoKS5jdXJyZW50SXRlbSgpKTsKICAgICB9CiB9CiAKQEAgLTUyMiw4ICs1MjMsOCBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKQogICAgIH0KIAog
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVzdCBvZiB0aGUgdHJlZQotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5
KCkucmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLmhpc3RvcnkoKS5y
ZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpCkBAIC01NjYsOCArNTY3LDggQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdh
dGlvbigpCiAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOwogCiAgICAgLy8gSXRlcmF0ZSBvdmVy
IHRoZSByZXN0IG9mIHRoZSB0cmVlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50
cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlVXBkYXRl
Rm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFt
ZUNoaWxkcmVuKG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5sb2FkZXIoKS5oaXN0b3J5KCkucmVj
dXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwogfQogCiB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JGcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNjg1LDggKzY4
Niw4IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJ
dGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAgICAgICAgICAgICBiZkl0ZW0tPnNldERv
Y3VtZW50U2VxdWVuY2VOdW1iZXIobV9wcmV2aW91c0l0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUu
dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+
bG9hZGVyKCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKG1fZnJh
bWUpKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC5sb2Fk
ZXIoKTsKICAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci5mcmFt
ZUhhc0xvYWRlZCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFtZSBj
b3JyZXNwb25kaW5nIHRvIGFuIDxvYmplY3Q+IGVsZW1lbnQgdGhhdCBuZXZlciBsb2FkZWQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKaW5kZXggZjVl
ZjJkM2E2ZjNhYzRhNjlmNDE0Y2NmZjBmZDY1NzI2NGEwYjg4YS4uNmI5ZWE5ODJlZGYwZTg3OGVj
NWY5MDkwZTVlYThhMGNmNWE3YzkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZp
Z2F0aW9uU2NoZWR1bGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuaCIKQEAgLTM0Miw5ICszNDMsOSBAQCBMb2NrQmFja0ZvcndhcmRMaXN0IE5hdmlnYXRpb25T
Y2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lJiB0YXJnZXRGcgogICAgIC8v
IE5hdmlnYXRpb24gb2YgYSBzdWJmcmFtZSBkdXJpbmcgbG9hZGluZyBvZiBhbiBhbmNlc3RvciBm
cmFtZSBkb2VzIG5vdCBjcmVhdGUgYSBuZXcgYmFjay9mb3J3YXJkIGl0ZW0uCiAgICAgLy8gVGhl
IGRlZmluaXRpb24gb2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgYWxsIGhhbmRs
ZXJzIGZvciB0aGUgbG9hZCBldmVudCBoYXZlIGJlZW4gcnVuLgogICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTcgZm9yIHRoZSBvcmlnaW5hbCBt
b3RpdmF0aW9uIGZvciB0aGlzLgotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gdGFyZ2V0RnJh
bWUudHJlZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFuY2VzdG9yLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWFuY2VzdG9yLT5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwg
KGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQorICAgIGZvciAo
YXV0byYgYW5jZXN0b3IgOiBmcmFtZUFuY2VzdG9ycyh0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gYW5jZXN0b3IuZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFh
bmNlc3Rvci5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5w
cm9jZXNzaW5nTG9hZEV2ZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2Fy
ZExpc3Q6OlllczsKICAgICB9CiAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDBiNTJjMjk1ODhhYTFhOTNlYTExN2VkM2FjODZiZDYw
YjZiOWFhNWUuLjVhYjdiNzY3MTRkYjFjYmNlYTZiMTBmNWIxNzVmMGNiZTAyZGJlNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC0yMTYsOCAr
MjE3LDggQEAgYm9vbCBDaHJvbWU6OmNhblJ1bk1vZGFsKCkgY29uc3QKIAogc3RhdGljIGJvb2wg
Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwoUGFnZSYgcGFnZSwgQ2hyb21lQ2xpZW50
OjpEaWFsb2dUeXBlIGRpYWxvZywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNz
YWxUeXBlIGRpc21pc3NhbCA9IGZyYW1lLT5sb2FkZXIoKS5wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFn
ZS5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBl
IGRpc21pc3NhbCA9IGZyYW1lLmxvYWRlcigpLnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCgpOwogICAgICAgICBpZiAoZGlzbWlzc2FsICE9IEZyYW1lTG9hZGVyOjpOb0Rpc21pc3Nh
bCkKICAgICAgICAgICAgIHJldHVybiBwYWdlLmNocm9tZSgpLmNsaWVudCgpLnNob3VsZFJ1bk1v
ZGFsRGlhbG9nRHVyaW5nUGFnZURpc21pc3NhbChkaWFsb2csIG1lc3NhZ2UsIGRpc21pc3NhbCk7
CiAgICAgfQpAQCAtNTU4LDkgKzU1OSw5IEBAIHZvaWQgQ2hyb21lOjp3aW5kb3dTY3JlZW5EaWRD
aGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogCiAgICAgbV9kaXNwbGF5SUQgPSBk
aXNwbGF5SUQ7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPndp
bmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtX3BhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5k
b2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+d2luZG93U2NyZWVuRGlk
Q2hhbmdlKGRpc3BsYXlJRCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKaW5kZXggYmUxN2VhZWZiMmZkZmRmNThhYjZlYzg0ZGU5ZTBhNzQxZDg0MTYx
ZC4uNjhhODYxNmY4MjBiMDAwZWRkMThiY2FiMzY3ZWI2MzZhZjEwMGExMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC02ODcsOCArNjg4LDggQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJs
ZUludGVybmFsKGJvb2wgY29udGVudElzVmlzaWJsZSkKIAogICAgIGNvbnRlbnRBcmVhRGlkU2hv
d09ySGlkZSh2aWV3LCBjb250ZW50SXNWaXNpYmxlKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1fcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFnZS5tYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAg
ICAgICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKaW5kZXggZTA5MjQ0ZDQyYzY1YWE1ZGIyNDgxYzJhMGY3NjcwZjViMDRjNDE3ZS4u
NGJhNTg3ZWUwNzQyNWIyMDM1YTUxZWQxN2JjY2FkOWIwMDM1N2ZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCkBAIC0yMTIsNiArMjEzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWU6OmNyZWF0ZShQ
YWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKIAogRnJhbWU6
On5GcmFtZSgpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJGcmFtZTo6fkZyYW1lICVwXG4iLCB0
aGlzKTsKICAgICBzZXRWaWV3KDApOwogICAgIGxvYWRlcigpLmNhbmNlbEFuZENsZWFyKCk7CiAK
QEAgLTY1Miw4ICs2NTQsOCBAQCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5n
LCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBjb25zdCBGbG9hdFNpegogICAgIH0KIAogICAg
IC8vIFN1YmZyYW1lcyBvZiB0aGUgb25lIHdlJ3JlIHByaW50aW5nIGRvbid0IGxheSBvdXQgdG8g
dGhlIHBhZ2Ugc2l6ZS4KLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRTaXplKCksIEZsb2F0U2l6
ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBjaGlsZC5zZXRQcmludGluZyhwcmludGluZywg
RmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAK
IGJvb2wgRnJhbWU6OnNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgY29uc3QKQEAgLTk4Niw4ICs5
ODgsOCBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Va
b29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgZG9jdW1lbnQtPnJlY2FsY1N0
eWxlKFN0eWxlOjpGb3JjZSk7CiAKLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVl
KCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIGNoaWxkLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKG1fcGFnZVpvb21G
YWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNo
aWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hpbGQuc2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyht
X3BhZ2Vab29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKTsKIAogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJWaWV3
KCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRG
aXJzdExheW91dCgpKQpAQCAtMTA0NCw4ICsxMDQ2LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiB2b2lkIEZyYW1lOjpkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIGZvciAoUmVmUHRyPEZyYW1lPiBjaGlsZCA9IHRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgY2hpbGQtPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwor
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hp
bGQuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBpZiAoUmVuZGVyVmll
dyogcm9vdCA9IGNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByb290LT5jb21wb3NpdG9yKCku
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CkBAIC0xMDU4LDggKzEwNjAsOCBAQCBi
b29sIEZyYW1lOjppc1VSTEFsbG93ZWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgaWYgKG1f
cGFnZS0+c3ViZnJhbWVDb3VudCgpID49IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxzZTsKLSAg
ICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50
aWZpZXIoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCB1cmwpKSB7CisgICAgZm9yIChjb25zdCBh
dXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSgqdGhpcykpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdGcmFnbWVudElkZW50aWZpZXIoZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCksIHVybCkpIHsK
ICAgICAgICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZUl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzZWJkODMzNjQ5Mzg3NTRhOTMw
NzI5YjM5NTExNDhkMmZkNTNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVJdGVyYXRvci5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIEZyYW1lSXRlcmF0
b3JfaAorI2RlZmluZSBGcmFtZUl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgRnJhbWVUcmF2ZXJzYWwgeworCitzdHJ1Y3QgQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVU
eXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCk7IH0KK307
CisKK3N0cnVjdCBSZXZlcnNlQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVUeXBlKiYgZnJhbWUpIHsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnByZXZpb3VzU2libGluZygpOyB9Cit9OworCitzdHJ1Y3Qg
TGFzdENoaWxkSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS5sYXN0Q2hpbGQoKTsgfQorfTsKKworc3RydWN0IExpbmVhZ2VJdGVyYXRvckluY3Jl
bWVudCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCko
RnJhbWVUeXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpOyB9Cit9
OworCitzdHJ1Y3QgVHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZyYW1lVHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoc3RheVdpdGhpbik7IH0KKyAgICBjb25z
dCBGcmFtZSogc3RheVdpdGhpbjsKK307CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZSwgdHlwZW5hbWUgSW5jcmVtZW50T3BlcmF0aW9uPgorc3RydWN0IEZyYW1lSXRlcmF0b3Ig
OiBzdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBGcmFtZVR5cGU+IHsKKyAg
ICBGcmFtZUl0ZXJhdG9yKCkgPSBkZWZhdWx0OworICAgIEZyYW1lSXRlcmF0b3IoRnJhbWVUeXBl
KiBmcmFtZSwgSW5jcmVtZW50T3BlcmF0aW9uJiYgaW5jcmVtZW50T3BlcmF0aW9uID0gSW5jcmVt
ZW50T3BlcmF0aW9uKCkpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2lu
Y3JlbWVudE9wZXJhdGlvbihzdGQ6Om1vdmUoaW5jcmVtZW50T3BlcmF0aW9uKSkKKyAgICB7Cisg
ICAgfQorCisgICAgRnJhbWVUeXBlJiBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZnJhbWUpOworICAgICAgICByZXR1cm4gKm1fZnJhbWU7CisgICAgfQorICAgIG9w
ZXJhdG9yIEZyYW1lVHlwZSooKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBGcmFt
ZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsK
KyAgICAgICAgbV9pbmNyZW1lbnRPcGVyYXRpb24obV9mcmFtZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhbWVJdGVyYXRvciYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUgPT0gb3RoZXIubV9mcmFtZTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFtZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworcHJvdGVjdGVkOgorICAgIEZyYW1lVHlwZSogbV9mcmFt
ZTsKKyAgICBJbmNyZW1lbnRPcGVyYXRpb24gbV9pbmNyZW1lbnRPcGVyYXRpb247Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBJbmNyZW1lbnRPcGVyYXRpb24+Cit1c2lu
ZyBGcmFtZUl0ZXJhdG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFz
ZV9vZjxGcmFtZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VHlwZT46OnR5cGU+Ojp2YWx1
ZSwKKyAgICBGcmFtZUl0ZXJhdG9yPHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19j
b25zdDxUeXBlPjo6dmFsdWUsIGNvbnN0IEZyYW1lLCBGcmFtZT46OnR5cGUsIEluY3JlbWVudE9w
ZXJhdGlvbj4+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6
SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6Q2hp
bGRJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAg
cmV0dXJuIHsgeyBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpIH0sIHsgfSB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJh
dG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ+PiBmcmFtZVJldmVyc2VDaGlsZHJlbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7
IGZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQoKSB9LCB7IH0gfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJdGVyYXRvclR5cGU8VHlw
ZSwgRnJhbWVUcmF2ZXJzYWw6Okxhc3RDaGlsZEl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMYXN0
Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkubGFz
dENoaWxkKCkgfSAsIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5l
IFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNh
bDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMaW5lYWdlKFR5cGUmIGZyYW1lKQor
eworICAgIHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBl
LCBGcmFtZVRyYXZlcnNhbDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVBbmNlc3Rv
cnMoVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkucGFyZW50KCkg
fSwgeyB9IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitpbmxpbmUgV1RGOjpJdGVy
YXRvclJhbmdlPEZyYW1lSXRlcmF0b3JUeXBlPFR5cGUsIEZyYW1lVHJhdmVyc2FsOjpUcmF2ZXJz
YWxJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQoreworICAg
IHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFt
ZVRyYXZlcnNhbDo6VHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQ+PiBmcmFtZVRyYXZlcnNhbFdp
dGhpbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7ICZmcmFtZSwgRnJhbWVUcmF2ZXJz
YWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50eyAmZnJhbWUgfSB9LCB7IH0gfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJ
dGVyYXRvclR5cGU8VHlwZSwgRnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVt
ZW50Pj4gZnJhbWVUcmF2ZXJzYWxXaXRoaW4oVHlwZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiBzdGF5
V2l0aGluKQoreworICAgIHJldHVybiB7IHsgJmZyYW1lLCBGcmFtZVRyYXZlcnNhbDo6VHJhdmVy
c2FsSXRlcmF0b3JJbmNyZW1lbnR7ICZzdGF5V2l0aGluIH0gfSwgeyB9IH07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lSXRlcmF0b3JfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVRyZWUuY3BwCmluZGV4IDJlZjIzYjMzNThhOWQyMmUyMGJiZWFlNDYwOGY3YzBiYzcz
YmE3ZmMuLjQ0NjE3OTllMmVlNTdiODZlMGYzZGYwYTE2M2RiZTk5MTE4NTY2YjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVHJlZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtMzcsOCArMzgsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEZyYW1lVHJlZTo6fkZyYW1lVHJlZSgpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnNldFZpZXcoMCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpKQorICAgICAgICBmcmFtZS5zZXRWaWV3KG51
bGxwdHIpOwogfQogCiB2b2lkIEZyYW1lVHJlZTo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIApAQCAtMTQ0LDExICsxNDUsMTIgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6dW5p
cXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKIAog
ICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgcGFyZW50IHRoYXQgaGFzIGEgZnJhbWUgd2l0aCBhIHBh
dGggaW4gaXQuCiAgICAgVmVjdG9yPEZyYW1lKiwgMTY+IGNoYWluOwotICAgIEZyYW1lKiBmcmFt
ZTsKLSAgICBmb3IgKGZyYW1lID0gJm1fdGhpc0ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUo
KS5zdGFydHNXaXRoKGZyYW1lUGF0aFByZWZpeCkpCisgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkpIHsK
KyAgICAgICAgZnJhbWUgPSAmcGFyZW50OworICAgICAgICBpZiAocGFyZW50LnRyZWUoKS51bmlx
dWVOYW1lKCkuc3RhcnRzV2l0aChmcmFtZVBhdGhQcmVmaXgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNoYWluLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGNoYWluLmFwcGVuZCgmcGFy
ZW50KTsKICAgICB9CiAgICAgU3RyaW5nQnVpbGRlciBuYW1lOwogICAgIG5hbWUuYXBwZW5kKGZy
YW1lUGF0aFByZWZpeCk7CkBAIC0xNjksNyArMTcxLDcgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJl
ZTo6dW5pcXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29u
c3QKICAgICByZXR1cm4gbmFtZS50b0F0b21pY1N0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBp
blNjb3BlKEZyYW1lJiBmcmFtZSwgVHJlZVNjb3BlJiBzY29wZSkKK3N0YXRpYyBib29sIGluU2Nv
cGUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkK
QEAgLTE4NSwxNiArMTg3LDExIEBAIGlubGluZSBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGls
ZCh1bnNpZ25lZCBpbmRleCwgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3Bl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHVuc2lnbmVkIHNjb3BlZEluZGV4ID0g
MDsKLSAgICBmb3IgKEZyYW1lKiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0
ID0gcmVzdWx0LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgq
cmVzdWx0LCAqc2NvcGUpKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGVkSW5kZXggPT0gaW5kZXgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIHNjb3BlZEluZGV4
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJh
bWUpOworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4u
ZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAgICAgcmV0dXJuIGluU2NvcGUo
ZnJhbWUsICpzY29wZSkgJiYgY291bnQrKyA9PSBpbmRleDsKKyAgICB9KTsKIH0KIAogaW5saW5l
IEZyYW1lKiBGcmFtZVRyZWU6OnNjb3BlZENoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
VHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAgLTIwMiwxMSArMTk5LDEwIEBAIGlubGluZSBGcmFt
ZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFRyZWVT
Y29wZSogc2NvcGUpCiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLnVu
aXF1ZU5hbWUoKSA9PSBuYW1lICYmIGluU2NvcGUoKmNoaWxkLCAqc2NvcGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNo
aWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6Zmlu
ZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBm
cmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1l
ICYmIGluU2NvcGUoZnJhbWUsICpzY29wZSk7CisgICAgfSk7CiB9CiAKIGlubGluZSB1bnNpZ25l
ZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxkQ291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAg
LTIxNCwxMyArMjEwLDEwIEBAIGlubGluZSB1bnNpZ25lZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxk
Q291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHVuc2lnbmVkIHNjb3BlZENvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1l
KiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT50cmVlKCku
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgqcmVzdWx0LCAqc2NvcGUpKQot
ICAgICAgICAgICAgc2NvcGVkQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NvcGVkQ291
bnQ7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAg
IHJldHVybiBzdGQ6OmNvdW50X2lmKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBb
PV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBpblNjb3BlKGZyYW1lLCAq
c2NvcGUpOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKQEAgLTI0MiwyNiArMjM1LDI1IEBAIHVuc2lnbmVkIEZyYW1lVHJl
ZTo6c2NvcGVkQ2hpbGRDb3VudCgpIGNvbnN0CiAKIHVuc2lnbmVkIEZyYW1lVHJlZTo6Y2hpbGRD
b3VudCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoRnJhbWUq
IHJlc3VsdCA9IGZpcnN0Q2hpbGQoKTsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPnRyZWUoKS5u
ZXh0U2libGluZygpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKKyAgICBh
dXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0
ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCiBGcmFt
ZSogRnJhbWVUcmVlOjpjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBGcmFtZSog
cmVzdWx0ID0gZmlyc3RDaGlsZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHJlc3VsdCAm
JiBpICE9IGluZGV4OyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+dHJlZSgpLm5leHRT
aWJsaW5nKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cisg
ICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAgIHJldHVy
biBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFsmXShjb25z
dCBGcmFtZSYpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50KysgPT0gaW5kZXg7CisgICAgfSk7CiB9
CiAKIEZyYW1lKiBGcmFtZVRyZWU6OmNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoY2hpbGQtPnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNG
cmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJl
bi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBmcmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUu
dHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVU
cmVlOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI4MCwxNSArMjcy
LDE1IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFNlYXJjaCBzdWJ0cmVlIHN0
YXJ0aW5nIHdpdGggdGhpcyBmcmFtZSBmaXJzdC4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
X3RoaXNGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1f
dGhpc0ZyYW1lKSkgewotICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0g
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDog
ZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV90aGlzRnJhbWUpKSB7CisgICAgICAgIGlmIChmcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgIH0KIAogICAgIC8vIFRoZW4gdGhlIHJlc3Qgb2YgdGhlIHRyZWUuCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV90aGlzRnJhbWUubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkudW5p
cXVlTmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fdGhpc0ZyYW1lLm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBpZiAoZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAKICAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVl
IG9mIGVhY2ggb2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgpAQCAtMzAwLDkg
KzI5Miw5IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIGZvciAoYXV0byogb3RoZXJQYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygp
KSB7CiAgICAgICAgIGlmIChvdGhlclBhZ2UgPT0gcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWU7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bChvdGhlclBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zMTcsMTAgKzMwOSwxMCBAQCBib29sIEZyYW1lVHJlZTo6
aXNEZXNjZW5kYW50T2YoY29uc3QgRnJhbWUqIGFuY2VzdG9yKSBjb25zdAogICAgIGlmIChtX3Ro
aXNGcmFtZS5wYWdlKCkgIT0gYW5jZXN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIGlmIChmcmFtZSA9PSBhbmNlc3RvcikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGxp
bmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV90aGlzRnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9v
ZihsaW5lYWdlLmJlZ2luKCksIGxpbmVhZ2UuZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUp
IHsKKyAgICAgICAgcmV0dXJuICZmcmFtZSA9PSBhbmNlc3RvcjsKKyAgICB9KTsKIH0KIAogRnJh
bWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VOZXh0KGNvbnN0IEZyYW1lKiBzdGF5V2l0aGluKSBjb25z
dApAQCAtMzg3LDE3ICszNzksMTggQEAgRnJhbWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VQcmV2aW91
c1dpdGhXcmFwKGJvb2wgd3JhcCkgY29uc3QKIEZyYW1lKiBGcmFtZVRyZWU6OmRlZXBMYXN0Q2hp
bGQoKSBjb25zdAogewogICAgIEZyYW1lKiByZXN1bHQgPSAmbV90aGlzRnJhbWU7Ci0gICAgZm9y
IChGcmFtZSogbGFzdCA9IGxhc3RDaGlsZCgpOyBsYXN0OyBsYXN0ID0gbGFzdC0+dHJlZSgpLmxh
c3RDaGlsZCgpKQotICAgICAgICByZXN1bHQgPSBsYXN0OworICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZUxhc3RDaGlsZHJlbihtX3RoaXNGcmFtZSkpCisgICAgICAgIHJlc3VsdCA9ICZmcmFt
ZTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEZyYW1lJiBGcmFtZVRyZWU6OnRvcCgpIGNv
bnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gJm1fdGhpc0ZyYW1lOwotICAgIGZvciAoRnJhbWUq
IHBhcmVudCA9ICZtX3RoaXNGcmFtZTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnRyZWUoKS5w
YXJlbnQoKSkKLSAgICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgRnJhbWUqIGZyYW1lID0gbnVs
bHB0cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkp
CisgICAgICAgIGZyYW1lID0gJnBhcmVudDsKKyAgICBBU1NFUlQoZnJhbWUpOwogICAgIHJldHVy
biAqZnJhbWU7CiB9CiAKQEAgLTQzMCw4ICs0MjMsOCBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1l
cyhjb25zdCBXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZyYW1lKiB0YXJn
ZQogICAgIHByaW50SW5kZW50KGluZGVudCk7CiAgICAgcHJpbnRmKCIgIHVyaT0lc1xuXG4iLCBm
cmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgZm9y
IChXZWJDb3JlOjpGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHByaW50RnJh
bWVzKCpjaGlsZCwgdGFyZ2V0RnJhbWUsIGluZGVudCArIDEpOworICAgIGZvciAoY29uc3QgYXV0
byYgY2hpbGQgOiBXZWJDb3JlOjpmcmFtZUNoaWxkcmVuKGZyYW1lKSkKKyAgICAgICAgcHJpbnRG
cmFtZXMoY2hpbGQsIHRhcmdldEZyYW1lLCBpbmRlbnQgKyAxKTsKIH0KIAogdm9pZCBzaG93RnJh
bWVUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCBkNjU3NzRmOTM5ZDA2ZDQwYmVmMzhlZDk1YjViNTM4MWFkZGE0NzZlLi5jNWI5
ZTE5NzdiMDMwZGM4ODNiMmM5YjE0OWU0YmQ3ZDdmMTBjNzlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTQx
Nyw3ICs0MTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IG5ld1JlY3QpCiAgICAgaWYgKG5ld1JlY3Qud2lkdGgoKSAhPSBvbGRSZWN0LndpZHRoKCkpIHsK
ICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAgICAgICBpZiAoZnJhbWUo
KS5pc01haW5GcmFtZSgpICYmIHBhZ2UtPnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkK
ICAgICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVj
YWxjdWxhdGVNdWx0aXBsaWVycygpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTYwLDggKzk2MSw4
IEBAIGJvb2wgRnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0CiAKIGJvb2wg
RnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAg
IFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7CisgICAg
ICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKFJlbmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvciA9IHJlbmRlclZpZXcg
PyAmcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpIDogMCkgewogICAgICAgICAgICAgaWYgKGNvbXBv
c2l0b3ItPmluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC05NzUsOCArOTc2LDggQEAgYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRDb250ZW50
SW5jbHVkaW5nRGVzY2VuZGFudHMoKSBjb25zdAogCiBib29sIEZyYW1lVmlldzo6aGFzQ29tcG9z
aXRpbmdBbmNlc3RvcigpIGNvbnN0CiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZUFuY2VzdG9ycyhmcmFtZSgpKSkgeworICAgICAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICBpZiAo
dmlldy0+aGFzQ29tcG9zaXRlZENvbnRlbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMTAwNywxMyArMTAwOCwxMSBAQCBib29sIEZyYW1lVmlldzo6aXNF
bmNsb3NlZEluQ29tcG9zaXRpbmdMYXllcigpIGNvbnN0CiAKIGJvb2wgRnJhbWVWaWV3OjpmbHVz
aENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKQogewotICAgIGJvb2wgYWxsRnJh
bWVzRmx1c2hlZCA9IGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZSgmZnJhbWUoKSk7
Ci0gICAgCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZSgpLnRyZWUoKS5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSgpKSkg
ewotICAgICAgICBib29sIGZsdXNoZWQgPSBjaGlsZC0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzRnJhbWUoJmZyYW1lKCkpOwotICAgICAgICBhbGxGcmFtZXNGbHVzaGVkICY9
IGZsdXNoZWQ7Ci0gICAgfQotICAgIHJldHVybiBhbGxGcmFtZXNGbHVzaGVkOworICAgIEZyYW1l
KiByb290RnJhbWUgPSAmZnJhbWUoKTsKKyAgICBhdXRvIHRyYXZlcnNhbCA9IGZyYW1lVHJhdmVy
c2FsV2l0aGluKGZyYW1lKCkpOworICAgIHJldHVybiBzdGQ6OmFsbF9vZih0cmF2ZXJzYWwuYmVn
aW4oKSwgdHJhdmVyc2FsLmVuZCgpLCBbPV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAg
IHJldHVybiBmcmFtZS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFtZShy
b290RnJhbWUpOworICAgIH0pOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTb2Z0d2FyZVJlbmRl
cmFibGUoKSBjb25zdApAQCAtMTQ2MCw4ICsxNDU5LDggQEAgYm9vbCBGcmFtZVZpZXc6OnVzZVNs
b3dSZXBhaW50c0lmTm90T3ZlcmxhcHBlZCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVDYW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dChtX2ZyYW1lLmdldCgpKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUt
PnZpZXcoKSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJh
bWUoKSkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKSkKICAg
ICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbCghdmlldy0+dXNlU2xvd1JlcGFpbnRz
KCkpOwogICAgIH0KIH0KQEAgLTE4NTMsOCArMTg1Miw4IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRJ
c092ZXJsYXBwZWQoYm9vbCBpc092ZXJsYXBwZWQpCiAgICAgICAgIGlmIChSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKHRoaXMpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJpZ2dlciByZWV2YWx1YXRpb24gZm9yIHRo
aXMgYW5kIGFsbCBkZXNjZW5kYW50IGZyYW1lcywKICAgICAgICAgICAgIC8vIHNpbmNlIGEgZnJh
bWUgdXNlcyBjb21wb3NpdGluZyBpZiBhbnkgYW5jZXN0b3IgaXMgY29tcG9zaXRpbmcuCi0gICAg
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFt
ZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUuY29u
dGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yJiBjb21wb3NpdG9yID0gdmlldy0+Y29tcG9zaXRvcigpOwogICAgICAgICAgICAgICAgICAg
ICBjb21wb3NpdG9yLnNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKTsKICAgICAgICAg
ICAgICAgICAgICAgY29tcG9zaXRvci5zY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJVcGRhdGUoKTsK
QEAgLTIyODAsOCArMjI3OSw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllckZsdXNoVGhy
b3R0bGluZygpCiAgICAgaWYgKGZyYW1lKCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5hZGp1
c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncykpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKSB7CisgICAgICAgIGlmIChS
ZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFi
bGVkKGlzTWFpbkxvYWRQcm9ncmVzc2luZyk7CiAgICAgfQogfQpAQCAtMjQ4NywxNCArMjQ4Niwx
NCBAQCB2b2lkIEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIEZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5p
bWF0aW9ucyhkb3VibGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+dmlldygpLT5zZXJ2aWNlU2Nyb2xs
QW5pbWF0aW9ucygpOwotICAgICAgICBmcmFtZS0+YW5pbWF0aW9uKCkuc2VydmljZUFuaW1hdGlv
bnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZnJhbWUoKSkpIHsK
KyAgICAgICAgZnJhbWUudmlldygpLT5zZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpOworICAgICAg
ICBmcmFtZS5hbmltYXRpb24oKS5zZXJ2aWNlQW5pbWF0aW9ucygpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxSZWZQdHI8RG9jdW1lbnQ+PiBkb2N1bWVudHM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKQotICAgICAgICBkb2N1bWVudHMuYXBwZW5kKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZnJhbWUoKSkpCisgICAgICAgIGRvY3Vt
ZW50cy5hcHBlbmQoZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGRvY3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgZG9jdW1lbnRzW2ldLT5zZXJ2aWNl
U2NyaXB0ZWRBbmltYXRpb25zKG1vbm90b25pY0FuaW1hdGlvblN0YXJ0VGltZSk7CkBAIC0yNTMz
LDggKzI1MzIsOCBAQCB2b2lkIEZyYW1lVmlldzo6c2V0QmFzZUJhY2tncm91bmRDb2xvcihjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogCiB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dy
b3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IsIGJvb2wgdHJhbnNw
YXJlbnQpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgewotICAg
ICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgeworICAgIGZvciAoYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbihmcmFtZSgpKSkgeworICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICB2aWV3LT5zZXRU
cmFuc3BhcmVudCh0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICB2aWV3LT5zZXRCYXNlQmFja2dy
b3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7CiAgICAgICAgIH0KQEAgLTM2NzQsOCArMzY3Myw4
IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gaW4gdGhlIHJlbmRlciB0cmVlIG9u
bHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
RE9NCiAgICAgLy8gYWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQ
YWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiBy
b290ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICBmb3IgKGF1dG8mIGZyYW1l
IDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oZnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByb290ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
cm9vdC0+Y2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM2OTAsOCArMzY4
OSw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAKICAgICAvLyBSZXN0b3JlIHNlbGVjdGlv
bi4KICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewot
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKQotICAgICAgICAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKKyAgICAgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKGZyYW1lKCkpKQorICAgICAgICAgICAgZnJh
bWUuc2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgIH0KIAogICAgIC8vIFJlc3Rv
cmUgY2FjaGVkIHBhaW50IGJlaGF2aW9yLgpAQCAtNDAzNCw4ICs0MDMzLDggQEAgdm9pZCBGcmFt
ZVZpZXc6OnNldFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tSZXBhaW50cykKICAgICAgICAgICAg
IGZyYW1lKCkuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgfQogCi0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbV9mcmFtZS0+dHJlZSgpLnRvcCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZVRyYXZlcnNhbChmcmFtZSgpLnRyZWUoKS50b3AoKSkpIHsKKyAgICAgICAgaWYgKFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAg
ICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5zZXRUcmFja3NSZXBhaW50cyh0cmFja1JlcGFp
bnRzKTsKICAgICB9CiAKQEAgLTQxNjksOCArNDE2OCw4IEBAIGJvb2wgRnJhbWVWaWV3Ojppc0Zs
aXBwZWREb2N1bWVudCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRzSW5B
bGxGcmFtZXMoV2lkZ2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZp
ZXcgPSBmcmFtZS0+dmlldygpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bFdpdGhpbihmcmFtZSgpKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUu
dmlldygpKQogICAgICAgICAgICAgdmlldy0+bm90aWZ5V2lkZ2V0cyhub3RpZmljYXRpb24pOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKaW5kZXggNDRmNTIyMGZkMzljYWQ3MWZk
ZGQ3ZGUzNTczNjM5Yzc4ODY5YWUxNS4uZWY1ODVlY2QyZjFlZTI3ZTIxNGY5ODRkNGRkNDgyNTk0
ODA1NTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBA
IC0xMjksOCArMTMwLDggQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBMb2NhdGlvbjo6YW5j
ZXN0b3JPcmlnaW5zKCkgY29uc3QKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb3JpZ2lucyA9
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0
dXJuIG9yaWdpbnMucmVsZWFzZSgpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS0+
dHJlZSgpLnBhcmVudCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpKQot
ICAgICAgICBvcmlnaW5zLT5hcHBlbmQoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCktPnRvU3RyaW5nKCkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZUFuY2VzdG9ycygq
bV9mcmFtZSkpCisgICAgICAgIG9yaWdpbnMtPmFwcGVuZChmcmFtZS5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKICAgICByZXR1cm4gb3JpZ2lucy5yZWxlYXNlKCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDM4YmI0NTEyMmNiYzQyY2I2Yjg1YmMwNzYzMTlj
ZWI1OTM2ZDY0NzQuLjFhZGUyZjgzNzFkODBmNjFmZTVjMTZlMGJkNjNkZTg2MjhhMjljOTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGVQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCkBAIC0xMDksMTAgKzExMCwxMCBAQCBzdGF0aWMgdm9pZCBuZXR3b3Jr
U3RhdGVDaGFuZ2VkKGJvb2wgaXNPbkxpbmUpCiAgICAgVmVjdG9yPFJlZjxGcmFtZT4+IGZyYW1l
czsKICAgICAKICAgICAvLyBHZXQgYWxsIHRoZSBmcmFtZXMgb2YgYWxsIHRoZSBwYWdlcyBpbiBh
bGwgdGhlIHBhZ2UgZ3JvdXBzCi0gICAgZm9yIChhdXRvIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCks
IGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoKmZyYW1l
KTsKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KCppdCk7CisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFsbFBhZ2VzKSB7CisgICAgICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAg
ICAgICBmcmFtZXMuYXBwZW5kKGZyYW1lKTsKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpuZXR3b3JrU3RhdGVDaGFuZ2VkKHBhZ2UpOwogICAgIH0KIAogICAgIEF0b21pY1N0cmlu
ZyBldmVudE5hbWUgPSBpc09uTGluZSA/IGV2ZW50TmFtZXMoKS5vbmxpbmVFdmVudCA6IGV2ZW50
TmFtZXMoKS5vZmZsaW5lRXZlbnQ7CkBAIC0yMzUsOSArMjM2LDkgQEAgUGFnZTo6flBhZ2UoKQog
ICAgIHNldEdyb3VwTmFtZShTdHJpbmcoKSk7CiAgICAgYWxsUGFnZXMtPnJlbW92ZSh0aGlzKTsK
ICAgICAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+d2lsbERl
dGFjaFBhZ2UoKTsKLSAgICAgICAgZnJhbWUtPmRldGFjaEZyb21QYWdlKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICBmcmFt
ZS53aWxsRGV0YWNoUGFnZSgpOworICAgICAgICBmcmFtZS5kZXRhY2hGcm9tUGFnZSgpOwogICAg
IH0KIAogICAgIG1fZWRpdG9yQ2xpZW50LT5wYWdlRGVzdHJveWVkKCk7CkBAIC0yNjgsMTAgKzI2
OSwxMSBAQCBQYWdlOjp+UGFnZSgpCiB1aW50NjRfdCBQYWdlOjpyZW5kZXJUcmVlU2l6ZSgpIGNv
bnN0CiB7CiAgICAgdWludDY0X3QgdG90YWwgPSAwOwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZy
YW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgLy8gRklYTUU6IFJldmVydCB0byBtYWluRnJhbWUo
KSB3aGVuIGNvbnN0IGl0ZXJhdGlvbiBpcyBzdXBwb3J0ZWQuCisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKCptX21haW5GcmFtZSkpIHsKKyAgICAgICAgaWYgKCFmcmFtZS5k
b2N1bWVudCgpIHx8ICFmcmFtZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdG90YWwgKz0gZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZp
ZXcoKS0+cmVuZGVyZXJDb3VudCgpOworICAgICAgICB0b3RhbCArPSBmcmFtZS5kb2N1bWVudCgp
LT5yZW5kZXJWaWV3KCktPnJlbmRlcmVyQ291bnQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRvdGFs
OwogfQpAQCAtNDI2LDIyICs0MjgsMjIgQEAgdm9pZCBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBh
Z2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCkKIHsKICAgICBpZiAoIWFsbFBhZ2Vz
KQogICAgICAgICByZXR1cm47Ci0gICAgSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGVuZCA9IGFs
bFBhZ2VzLT5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdCA9IGFs
bFBhZ2VzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgeworCisgICAgZm9yIChhdXRvKiBwYWdlIDogKmFsbFBhZ2VzKQorICAg
ICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkp
KSB7CiAgICAgICAgICAgICAvLyBJZiBhIGNoYW5nZSBpbiB0aGUgZ2xvYmFsIGVudmlyb25tZW50
IGhhcyBvY2N1cnJlZCwgd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGFsbCB0
aGUgcHJvcGVydGllcyBhIHJlY29tcHV0ZWQsIHRoZXJlZm9yZSB3ZSBpbnZhbGlkYXRlCiAgICAg
ICAgICAgICAvLyB0aGUgcHJvcGVydGllcyBjYWNoZS4KLSAgICAgICAgICAgIGlmIChTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyID0gZnJhbWUtPmRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXJJ
ZkV4aXN0cygpKQorICAgICAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIg
PSBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVySWZFeGlzdHMoKSkKICAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwot
ICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMo
KTsKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNh
bGMoKTsKICAgICAgICAgfQogfQogCiB2b2lkIFBhZ2U6OnNldE5lZWRzUmVjYWxjU3R5bGVJbkFs
bEZyYW1lcygpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+c3R5
bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgfQogfQpAQCAtNDYyLDkg
KzQ2NCw5IEBAIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCiAgICAgICAg
IGlmICghcmVsb2FkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWUtPmxvYWRl
cigpLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkpCi0gICAgICAgICAgICAgICAg
ZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoKmZyYW1lKTsKKyAgICAgICAgZm9yIChhdXRvJiBm
cmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoZnJhbWUubG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAg
ICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFtZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTQ4MSw4ICs0ODMsOCBAQCBQbHVnaW5EYXRhJiBQYWdlOjpwbHVnaW5E
YXRhKCkgY29uc3QKIAogaW5saW5lIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogUGFnZTo6dGFrZUFu
eU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgaWYgKE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+dGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpKQorICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciogbGlzdGVuZXIgPSBmcmFtZS5kb2N1bWVudCgpLT50YWtlQW55TWVk
aWFDYW5TdGFydExpc3RlbmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7CiAgICAg
fQogICAgIHJldHVybiAwOwpAQCAtNjY5LDggKzY3MSw4IEBAIHZvaWQgUGFnZTo6c2V0RGVmZXJz
TG9hZGluZyhib29sIGRlZmVycykKICAgICB9CiAKICAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZl
cnM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5z
ZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUubG9hZGVyKCkuc2V0RGVmZXJzTG9h
ZGluZyhkZWZlcnMpOwogfQogCiB2b2lkIFBhZ2U6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCkK
QEAgLTY5Nyw5ICs2OTksOCBAQCB2b2lkIFBhZ2U6OnNldE1lZGlhVm9sdW1lKGZsb2F0IHZvbHVt
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tZWRpYVZvbHVtZSA9IHZvbHVtZTsKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+bWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKLSAgICB9CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+bWVkaWFWb2x1
bWVEaWRDaGFuZ2UoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRab29tZWRPdXRQYWdlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGUpCkBAIC03MzAsOCArNzMxLDggQEAgdm9pZCBQYWdlOjpzZXRQYWdlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgaW5TdGFi
bGUKICAgICAgICAgfQogI2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgICAg
IGlmIChpblN0YWJsZVN0YXRlKSB7Ci0gICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkK
LSAgICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdl
ZEFuZFN0YWJsZSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVy
c2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5wYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkQW5kU3RhYmxlKCk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAg
ICByZXR1cm47CkBAIC03NjgsOCArNzY5LDggQEAgdm9pZCBQYWdlOjpzZXRQYWdlU2NhbGVGYWN0
b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4sIGJvb2wgaW5TdGFibGUKIAog
I2lmIEVOQUJMRShNRURJQV9DT05UUk9MU19TQ1JJUFQpCiAgICAgaWYgKGluU3RhYmxlU3RhdGUp
IHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOworICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICAgICAg
ZnJhbWUuZG9jdW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwogICAg
IH0KICNlbmRpZgogfQpAQCAtNzg5LDggKzc5MCw4IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgbWFpbkZyYW1lKCkuZGV2aWNlT3JQYWdl
U2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgcGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckRldmlj
ZVNjYWxlQ2hhbmdlZCh0aGlzKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUu
ZWRpdG9yKCkuZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBwYWdlQ2FjaGUoKS0+
bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6
dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKQEAgLTgyNCw4ICs4MjUsOCBAQCB2b2lk
IFBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xsYmFyc1RvSGlkZGVuKGJvb2wgbG9ja092ZXJsYXlT
Y3JvbGxiYXJzKQogCiAgICAgdmlldy0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVu
KGxvY2tPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgICAgIGlmICghZnJhbWVW
aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTgzMywxMCArODM0LDggQEAgdm9pZCBQ
YWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbihib29sIGxvY2tPdmVybGF5U2Ny
b2xsYmFycykKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBmb3IgKEhhc2hTZXQ8U2Nyb2xsYWJsZUFyZWEqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBzY3JvbGxhYmxlQXJlYXMtPmJlZ2luKCksIGVuZCA9IHNjcm9sbGFibGVBcmVh
cy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhID0gKml0OworICAgICAgICBmb3IgKGF1dG8qIHNjcm9sbGFibGVBcmVh
IDogKnNjcm9sbGFibGVBcmVhcykKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5sb2NrT3Zl
cmxheVNjcm9sbGJhclN0YXRlVG9IaWRkZW4obG9ja092ZXJsYXlTY3JvbGxiYXJzKTsKLSAgICAg
ICAgfQogICAgIH0KIH0KICAgICAKQEAgLTg5Miw4ICs4OTEsOCBAQCB2b2lkIFBhZ2U6OnNldElz
SW5XaW5kb3coYm9vbCBpc0luV2luZG93KQogCiB2b2lkIFBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbChib29sIGlzSW5XaW5kb3cpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlm
IChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAgICAgICAgIGZyYW1l
Vmlldy0+c2V0SXNJbldpbmRvdyhpc0luV2luZG93KTsKICAgICB9CiAKQEAgLTkwNCwxOCArOTAz
LDE4IEBAIHZvaWQgUGFnZTo6c2V0SXNJbldpbmRvd0ludGVybmFsKGJvb2wgaXNJbldpbmRvdykK
IHZvaWQgUGFnZTo6c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9ucygpCiB7CiAgICAgbV9zY3JpcHRl
ZEFuaW1hdGlvbnNTdXNwZW5kZWQgPSB0cnVlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1h
aW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1
bWVudCgpLT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7Cisg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAg
ICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCkt
PnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsKICAgICB9CiB9
CiAKIHZvaWQgUGFnZTo6cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25zKCkKIHsKICAgICBtX3Njcmlw
dGVkQW5pbWF0aW9uc1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5yZXN1bWVTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJDYWxsYmFja3MoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tzKCk7CiAgICAgfQog
fQogCkBAIC05MjMsOSArOTIyLDkgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVy
bmFsKGJvb2wgaXNWaXN1YWxseUlkbGUpCiB7CiAgICAgc2V0VGltZXJUaHJvdHRsaW5nRW5hYmxl
ZChpc1Zpc3VhbGx5SWRsZSk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAg
ICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChpc1Zpc3VhbGx5SWRs
ZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkg
eworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3Vt
ZW50KCktPnNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlclNldFRocm90dGxlZChpc1Zpc3VhbGx5
SWRsZSk7CiAgICAgfQogfQogCkBAIC05NTUsOSArOTU0LDkgQEAgdm9pZCBQYWdlOjp1c2VyU3R5
bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpCiAgICAgICAgICAgICBtX3VzZXJTdHlsZVNoZWV0ID0g
U3RyaW5nOjpmcm9tVVRGOChzdHlsZVNoZWV0QXNVVEY4LmRhdGEoKSwgc3R5bGVTaGVldEFzVVRG
OC5zaXplKCkpOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5z
dHlsZVNoZWV0Q29sbGVjdGlvbigpLnVwZGF0ZVBhZ2VVc2VyU2hlZXQoKTsKKyAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChm
cmFtZS5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+c3R5bGVTaGVl
dENvbGxlY3Rpb24oKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7CiAgICAgfQogfQogCkBAIC0xMDE3
LDE0ICsxMDE2LDE0IEBAIHZvaWQgUGFnZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIAogdm9p
ZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0
YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1l
IDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5kb2N1bWVudCgp
LT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9yQWxsTGlua3MoKTsKIH0KIAog
dm9pZCBQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayhMaW5rSGFzaCBsaW5rSGFzaCkKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlua0hhc2gpOwor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAg
ICAgIGZyYW1lLmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVG
b3JMaW5rKGxpbmtIYXNoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXREZWJ1Z2dlcihKU0M6OkRlYnVn
Z2VyKiBkZWJ1Z2dlcikKQEAgLTEwMzQsOCArMTAzMyw4IEBAIHZvaWQgUGFnZTo6c2V0RGVidWdn
ZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiAKICAgICBtX2RlYnVnZ2VyID0gZGVidWdnZXI7
CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+c2NyaXB0
KCkuYXR0YWNoRGVidWdnZXIobV9kZWJ1Z2dlcik7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZy
YW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuc2NyaXB0KCkuYXR0YWNo
RGVidWdnZXIobV9kZWJ1Z2dlcik7CiB9CiAKIFN0b3JhZ2VOYW1lc3BhY2UqIFBhZ2U6OnNlc3Np
b25TdG9yYWdlKGJvb2wgb3B0aW9uYWxDcmVhdGUpCkBAIC0xMDcxLDE3ICsxMDcwLDE3IEBAIHZv
aWQgUGFnZTo6c2V0TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ICAgIGlmICghZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChSZWZQdHI8RnJh
bWU+IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+bG9hZGVyKCkudGVsbENsaWVudEFib3V0UGFz
dE1lbW9yeUNhY2hlTG9hZHMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJz
YWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5sb2FkZXIoKS50ZWxsQ2xpZW50QWJvdXRQ
YXN0TWVtb3J5Q2FjaGVMb2FkcygpOwogfQogCiB2b2lkIFBhZ2U6OnNldE1pbmltdW1UaW1lcklu
dGVydmFsKGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCkKIHsKICAgICBkb3VibGUgb2xkVGlt
ZXJJbnRlcnZhbCA9IG1fbWluaW11bVRpbWVySW50ZXJ2YWw7CiAgICAgbV9taW5pbXVtVGltZXJJ
bnRlcnZhbCA9IG1pbmltdW1UaW1lckludGVydmFsOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dFdp
dGhXcmFwKGZhbHNlKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwob2xkVGlt
ZXJJbnRlcnZhbCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPmFkanVzdE1pbmltdW1UaW1lckludGVydmFsKG9sZFRpbWVySW50ZXJ2
YWwpOwogICAgIH0KIH0KIApAQCAtMTEwOCwzMSArMTEwNywzMCBAQCB2b2lkIFBhZ2U6OnNldFRp
bWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIG1fdGltZXJUaHJvdHRsaW5n
RW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgbV90aW1lckFsaWdubWVudEludGVydmFsID0gZW5hYmxl
ZCA/IFNldHRpbmdzOjpoaWRkZW5QYWdlRE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpIDogU2V0
dGluZ3M6OmRlZmF1bHRET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiAgICAgCi0gICAgZm9y
IChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0V2l0aFdyYXAoZmFsc2UpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kaWRDaGFuZ2VUaW1lckFs
aWdubWVudEludGVydmFsKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2Fs
KG1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAg
ICAgIGZyYW1lLmRvY3VtZW50KCktPmRpZENoYW5nZVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKTsK
ICAgICB9CiB9CiAKIHZvaWQgUGFnZTo6ZG5zUHJlZmV0Y2hpbmdTdGF0ZUNoYW5nZWQoKQogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5p
dEROU1ByZWZldGNoKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1h
aW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+aW5pdEROU1ByZWZldGNoKCk7
CiB9CiAKIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdlOjpwbHVnaW5WaWV3cygpCiB7
CiAgICAgVmVjdG9yPFJlZjxQbHVnaW5WaWV3QmFzZT4+IHZpZXdzOwogCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7Cisg
ICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3
KQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gdmlldy0+Y2hp
bGRyZW4oKS5iZWdpbigpLCBlbmQgPSB2aWV3LT5jaGlsZHJlbigpLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gKCppdCkuZ2V0KCk7CisgICAg
ICAgIGZvciAoYXV0byYgd2lkZ2V0IDogdmlldy0+Y2hpbGRyZW4oKSkgewogICAgICAgICAgICAg
aWYgKHdpZGdldC0+aXNQbHVnaW5WaWV3QmFzZSgpKQotICAgICAgICAgICAgICAgIHZpZXdzLmFw
cGVuZCgqdG9QbHVnaW5WaWV3QmFzZSh3aWRnZXQpKTsKKyAgICAgICAgICAgICAgICB2aWV3cy5h
cHBlbmQoKnRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0LmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTExNDEsOCArMTEzOSw4IEBAIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiBQYWdl
OjpwbHVnaW5WaWV3cygpCiAKIHZvaWQgUGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2Vk
KCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+c3RvcmFnZUJsb2NraW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogICAgIC8vIENvbGxlY3QgdGhl
IFBsdWdpblZpZXdzIGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFjdGlvbiB0aGUgcGx1
Zy1pbiB0YWtlcwogICAgIC8vIGZyb20gYmVsb3cgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2Vk
IGRvZXMgbm90IGFmZmVjdCB0aGVpciBsaWZldGltZS4KQEAgLTExNjYsNyArMTE2NCw3IEBAIHZv
aWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50Q29uc2lzdGVuY3koKSBjb25zdAogICAgIEFTU0VS
VChtX3N1YmZyYW1lQ291bnQgPj0gMCk7CiAKICAgICBpbnQgc3ViZnJhbWVDb3VudCA9IDA7Ci0g
ICAgZm9yIChjb25zdCBGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKICAgICAgICAgKytzdWJmcmFtZUNvdW50
OwogCiAgICAgQVNTRVJUKG1fc3ViZnJhbWVDb3VudCArIDEgPT0gc3ViZnJhbWVDb3VudCk7CkBA
IC0xMTc4LDggKzExNzYsOCBAQCB2b2lkIFBhZ2U6OnJlc3VtZUFuaW1hdGluZ0ltYWdlcygpCiAg
ICAgLy8gRHJhd2luZyBtb2RlbHMgd2hpY2ggY2FjaGUgcGFpbnRlZCBjb250ZW50IHdoaWxlIG91
dC1vZi13aW5kb3cgKFdlYktpdDIncyBjb21wb3NpdGVkIGRyYXdpbmcgYXJlYXMsIGV0Yy4pCiAg
ICAgLy8gcmVxdWlyZSB0aGF0IHdlIHJlcGFpbnQgYW5pbWF0ZWQgaW1hZ2VzIHRvIGtpY2tzdGFy
dCB0aGUgYW5pbWF0aW9uIGxvb3AuCiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZy
YW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkK
ICAgICAgICAgICAgIHJlbmRlclZpZXctPnJlc3VtZVBhdXNlZEltYWdlQW5pbWF0aW9uc0lmTmVl
ZGVkKCk7CiAgICAgfQogfQpAQCAtMTIyNSw4ICsxMjIzLDggQEAgdm9pZCBQYWdlOjpzZXRJc1Zp
c2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICBpZiAoaXNWaXNpYmxlKSB7CiAgICAg
ICAgIG1faXNQcmVyZW5kZXIgPSBmYWxzZTsKIAotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgp
KSkgeworICAgICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUudmlldygp
KQogICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+ZGlkTW92ZU9uc2NyZWVuKCk7CiAgICAgICAg
IH0KIApAQCAtMTI0Miw4ICsxMjQwLDggQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5h
bChib29sIGlzVmlzaWJsZSkKICAgICB9CiAKICAgICBWZWN0b3I8UmVmPERvY3VtZW50Pj4gZG9j
dW1lbnRzOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGRvY3VtZW50
cy5hcHBlbmQoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJh
bWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBkb2N1bWVudHMuYXBwZW5kKCpmcmFt
ZS5kb2N1bWVudCgpKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gZG9jdW1lbnRz
LnNpemUoKTsgaSA8IHNpemU7ICsraSkKICAgICAgICAgZG9jdW1lbnRzW2ldLT52aXNpYmlsaXR5
U3RhdGVDaGFuZ2VkKCk7CkBAIC0xMjUyLDggKzEyNTAsOCBAQCB2b2lkIFBhZ2U6OnNldElzVmlz
aWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlk
ZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtYWlu
RnJhbWUoKS5hbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwogCi0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS0+dmlldygpKQorICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJz
YWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS52aWV3KCkpCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LT53aWxsTW92ZU9mZnNj
cmVlbigpOwogICAgICAgICB9CiAKQEAgLTE0NzIsMTQgKzE0NzAsMTQgQEAgdm9pZCBQYWdlOjph
ZGRSZWxldmFudFVucGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgb2IKIAogdm9pZCBQYWdlOjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuc3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgUGFnZTo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KQotICAgICAgICBmcmFtZS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAg
ICAgICBmcmFtZS5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwogCiAgICAg
cmVzdW1lQW5pbWF0aW5nSW1hZ2VzKCk7CiB9CkBAIC0xNTM3LDggKzE1MzUsOCBAQCB2b2lkIFBh
Z2U6OmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCkKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIFBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQo
KQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0KICNlbmRpZgogCkBAIC0xNTkzLDggKzE1OTEs
OCBAQCB2b2lkIFBhZ2U6OnNldFNlc3Npb25JRChTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIGlm
ICghcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnByaXZhdGVC
cm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+cHJpdmF0ZUJy
b3dzaW5nU3RhdGVEaWRDaGFuZ2UoKTsKIAogICAgIC8vIENvbGxlY3QgdGhlIFBsdWdpblZpZXdz
IGluIHRvIGEgdmVjdG9yIHRvIGVuc3VyZSB0aGF0IGFjdGlvbiB0aGUgcGx1Zy1pbiB0YWtlcwog
ICAgIC8vIGZyb20gYmVsb3cgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkIGRvZXMgbm90IGFm
ZmVjdCB0aGVpciBsaWZldGltZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUdyb3VwTG9hZERlZmVycmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmNwcAppbmRleCBiNWYxY2EzNDFjODIxNDY3MjdmY2Y1ZTFlZDFmZDAzYTI3MDAw
OGIzLi5hN2JmNWQyMmM1MmRmMWQ0OTE3NDhjZjAyMWMzZTU1MjEwZjg0ZmI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCkBAIC0yMyw2ICsyMyw3
IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgi
CisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTQ0LDggKzQ1LDggQEAg
UGFnZUdyb3VwTG9hZERlZmVycmVyOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoUGFnZSYgcGFnZSwg
Ym9vbCBkZWZlclNlbGYpCiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvZGUgaXMgbm90IGxv
Z2ljYWxseSBwYXJ0IG9mIGxvYWQgZGVmZXJyaW5nLCBidXQgd2UgZG8gbm90IHdhbnQgSlMgY29k
ZSBleGVjdXRlZCBiZW5lYXRoIG1vZGFsCiAgICAgICAgICAgICAgICAgLy8gd2luZG93cyBvciBz
aGVldHMsIHdoaWNoIGlzIGV4YWN0bHkgd2hlbiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIgaXMgdXNl
ZC4KLSAgICAgICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3VzcGVuZFNjaGVkdWxlZFRhc2tz
KEFjdGl2ZURPTU9iamVjdDo6V2lsbERlZmVyTG9hZGluZyk7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG90aGVyUGFnZS0+bWFpbkZyYW1lKCkpKQor
ICAgICAgICAgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zdXNwZW5kU2NoZWR1bGVkVGFz
a3MoQWN0aXZlRE9NT2JqZWN0OjpXaWxsRGVmZXJMb2FkaW5nKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTYyLDggKzYzLDggQEAgUGFnZUdyb3VwTG9hZERlZmVycmVyOjp+
UGFnZUdyb3VwTG9hZERlZmVycmVyKCkKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RlZmVy
cmVkRnJhbWVzW2ldLT5wYWdlKCkpIHsKICAgICAgICAgICAgIHBhZ2UtPnNldERlZmVyc0xvYWRp
bmcoZmFsc2UpOwogCi0gICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWlu
RnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAg
ICAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1lU2NoZWR1bGVkVGFza3MoQWN0
aXZlRE9NT2JqZWN0OjpXaWxsRGVmZXJMb2FkaW5nKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpCisgICAgICAgICAgICAg
ICAgZnJhbWUuZG9jdW1lbnQoKS0+cmVzdW1lU2NoZWR1bGVkVGFza3MoQWN0aXZlRE9NT2JqZWN0
OjpXaWxsRGVmZXJMb2FkaW5nKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzgwMjU5Y2YxMDBmNjgyODA4NzE2NjgzMTc2MjAz
YmIwMWUzZDc3Zi4uYzA5ZGYzMWUyODU3MWViMGM5ZjBmMzRkODljODlmNzAyYjdmMWExYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCkBAIC0yNDgsOCArMjQ5LDggQEAgdm9pZCBQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBj
aGlsZEZyYW1lOyBjaGlsZEZyYW1lID0gY2hpbGRGcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIHNlcmlhbGl6ZUZyYW1lKGNoaWxkRnJhbWUpOworICAgIGZvciAoYXV0byYgY2hp
bGRGcmFtZSA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUo
JmNoaWxkRnJhbWUpOwogfQogCiB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFVSTCYgdXJsKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmNwcAppbmRleCBlODY1M2RmYWQ2YzEyNjRlZjNkNDg3NDQzNGEwMDBjZmU3
Y2I4M2VhLi4yMDA2MjRhOWQyYzZkOGI1Y2FkYTkwMjZmMmQwODM3NWI0NTlkNzZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRHZW5lcmljRmFtaWxpZXMuaCIK
KyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgpAQCAtNTMs
OSArNTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyB2b2lkIHNldEltYWdlTG9h
ZGluZ1NldHRpbmdzKFBhZ2UqIHBhZ2UpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFn
ZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpIHsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkt
PnNldEltYWdlc0VuYWJsZWQocGFnZS0+c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkpOwot
ICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+c2V0QXV0
b0xvYWRJbWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgp
KSkgeworICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5z
ZXRJbWFnZXNFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKKyAg
ICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+c2V0QXV0b0xv
YWRJbWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7CiAg
ICAgfQogfQogCkBAIC0zNDMsOCArMzQ0LDggQEAgdm9pZCBTZXR0aW5nczo6c2V0VGV4dEF1dG9z
aXppbmdGb250U2NhbGVGYWN0b3IoZmxvYXQgZm9udFNjYWxlRmFjdG9yKQogICAgIG1fdGV4dEF1
dG9zaXppbmdGb250U2NhbGVGYWN0b3IgPSBmb250U2NhbGVGYWN0b3I7CiAKICAgICAvLyBGSVhN
RTogSSB3b25kZXIgaWYgdGhpcyBuZWVkcyB0byB0cmF2ZXJzZSBmcmFtZXMgbGlrZSBpbiBXZWJW
aWV3SW1wbDo6cmVzaXplLCBvciB3aGV0aGVyIHRoZXJlIGlzIG9ubHkgb25lIGRvY3VtZW50IHBl
ciBTZXR0aW5ncyBpbnN0YW5jZT8KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0g
ICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT50ZXh0QXV0b3NpemVyKCktPnJlY2FsY3VsYXRlTXVs
dGlwbGllcnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobV9wYWdl
LT5tYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIo
KS0+cmVjYWxjdWxhdGVNdWx0aXBsaWVycygpOwogCiAgICAgbV9wYWdlLT5zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5jcHAKaW5kZXggYjhjODg1MTk2NWE5MTQ0NmM2ZmVmNDk1OGJmMzFiM2JlYWZjZDgzZC4u
YzBiOTAyYTk3ODkxNTdlZDY1NWU2Yzc3YzcwYjk1MjRmMTBiZGU2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgogCisjaW5jbHVkZSAi
RnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgpAQCAtNTA0LDEzICs1MDUsMTYg
QEAgYm9vbCBjYW5TY3JvbGxJbkRpcmVjdGlvbihjb25zdCBGcmFtZSogZnJhbWUsIEZvY3VzRGly
ZWN0aW9uIGRpcmVjdGlvbikKIAogc3RhdGljIExheW91dFJlY3QgcmVjdFRvQWJzb2x1dGVDb29y
ZGluYXRlcyhGcmFtZSogaW5pdGlhbEZyYW1lLCBjb25zdCBMYXlvdXRSZWN0JiBpbml0aWFsUmVj
dCkKIHsKKyAgICBpZiAoIWluaXRpYWxGcmFtZSkKKyAgICAgICAgcmV0dXJuIGluaXRpYWxSZWN0
OworCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gaW5pdGlhbFJlY3Q7Ci0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBpbml0aWFsRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50
KCkpIHsKLSAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+b3duZXJFbGVtZW50
KCkpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKCppbml0aWFsRnJhbWUp
KSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUub3duZXJFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUoZWxlbWVudC0+
b2Zmc2V0TGVmdCgpLCBlbGVtZW50LT5vZmZzZXRUb3AoKSk7CiAgICAgICAgICAgICB9IHdoaWxl
ICgoZWxlbWVudCA9IGVsZW1lbnQtPm9mZnNldFBhcmVudCgpKSk7Ci0gICAgICAgICAgICByZWN0
Lm1vdmUoKC1mcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOworICAgICAgICAgICAgcmVj
dC5tb3ZlKCgtZnJhbWUudmlldygpLT5zY3JvbGxPZmZzZXQoKSkpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiByZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2Vy
Q29udGVudENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCmluZGV4IGY2YTlkNWFhNWY5YTE5ZWY1MDc5NTFmMjg0ZGU0OThmNmRhNTc4
ODkuLjEyNzNjNjQ4NzBiNmM1OGNmZWFiYWIwYjU2NWI1MzU2MWI3MzMxOWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJVc2VyU2NyaXB0LmgiCkBAIC0xODYsOSArMTg3LDkg
QEAgdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKIHZv
aWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2Fj
aGVJbkFsbEZyYW1lcygpCiB7CiAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlcykgewotICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlKCk7Ci0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZl
ckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkuaW52YWxpZGF0ZUluamVjdGVkU3R5bGVT
aGVldENhY2hlKCk7CisgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVJlc29sdmVy
Q2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAK
aW5kZXggOWQyYjU0NDNkNzAwMzZlMWNlOGI2ODBjMmVmN2ZjZDdmZGQwMGQ3Ni4uZWY3NjI1MzQx
YmMyNDNmYzZiYmFiZmY4Y2U3MzE3ZDg3NjZhY2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBz
ZXVkb0VsZW1lbnQuaCIKQEAgLTI1Niw4ICsyNTcsOCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9ucygpCiAgICAgc3VzcGVuZEFuaW1hdGlvbnNGb3JE
b2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOwogCiAgICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVz
Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PmFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6
IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmFuaW1hdGlvbigpLnN1c3Bl
bmRBbmltYXRpb25zKCk7CiAKICAgICBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsKIH0KQEAgLTI3MCw4
ICsyNzEsOCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRp
b25zKCkKICAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKIAogICAgIC8vIFRyYXZlcnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
bV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5hbmltYXRpb24oKS5yZXN1bWVBbmltYXRp
b25zKCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisg
ICAgICAgIGNoaWxkLmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKIAogICAgIG1faXNT
dXNwZW5kZWQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXgg
MjQ1YTk5OTIzMmZjNDM1NzVjMmIzMmUxM2I5OGI4OWQ3MmUxYTgwMC4uMmY3OWZlZDcxMGMzYzM2
MTkzOTg5MzYwYzQ3ODc0NzQ4YmIzNjMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1Mu
bW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgogI2ltcG9ydCAi
RXZlbnROYW1lcy5oIgogI2ltcG9ydCAiRm9ybUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQgIkZyYW1l
SXRlcmF0b3IuaCIKICNpbXBvcnQgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW1wb3J0ICJGcmFtZVZp
ZXcuaCIKICNpbXBvcnQgIkhUTUxBcmVhRWxlbWVudC5oIgpAQCAtNjYzLDggKzY2NCw4IEBAIHZv
aWQgRnJhbWU6OnNldFRpbWVyc1BhdXNlZEludGVybmFsKGJvb2wgcGF1c2VkKQogICAgIH0KIAog
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIGFsbCBzdWJmcmFtZXMnIHN0YXRlcyBhcmUgdXAg
dG8gZGF0ZS4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHRyZWUoKS5maXJzdENoaWxkKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgZnJhbWUt
PnNldFRpbWVyc1BhdXNlZEludGVybmFsKHBhdXNlZCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBmcmFtZS5zZXRUaW1lcnNQYXVzZWRJbnRl
cm5hbChwYXVzZWQpOwogfQogCiB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VIaWRlRXZlbnRCZWZv
cmVQYXVzZSgpCkBAIC02NzMsOCArNjc0LDggQEAgdm9pZCBGcmFtZTo6ZGlzcGF0Y2hQYWdlSGlk
ZUV2ZW50QmVmb3JlUGF1c2UoKQogICAgIGlmICghaXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCh0aGlzKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1ZSksIGRvY3VtZW50KCkpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqdGhpcykpCisgICAgICAgIGZyYW1l
LmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgdHJ1ZSksIGRvY3VtZW50KCkp
OwogfQogCiB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRCZWZvcmVSZXN1bWUoKQpA
QCAtNjgzLDggKzY4NCw4IEBAIHZvaWQgRnJhbWU6OmRpc3BhdGNoUGFnZVNob3dFdmVudEJlZm9y
ZVJlc3VtZSgpCiAgICAgaWYgKCFpc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KHRoaXMpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5wYWdlc2hvd0V2ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCp0aGlzKSkKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCktPmRpc3BhdGNoRXZlbnQoUGFnZVRyYW5zaXRpb25FdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5wYWdlc2hvd0V2ZW50LCB0cnVlKSwgZG9jdW1lbnQoKSk7CiB9CiAKIHZv
aWQgRnJhbWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb24oKQpAQCAt
NzM0LDggKzczNSw4IEBAIFZpc2libGVTZWxlY3Rpb24gRnJhbWU6OnJhbmdlZFNlbGVjdGlvbklu
aXRpYWxFeHRlbnQoKSBjb25zdAogdm9pZCBGcmFtZTo6cmVjdXJzaXZlU2V0VXBkYXRlQXBwZWFy
YW5jZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIHNlbGVjdGlvbigpLnNldFVwZGF0ZUFw
cGVhcmFuY2VFbmFibGVkKGVuYWJsZWQpOwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgp
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygp
KQotICAgICAgICBjaGlsZC0+cmVjdXJzaXZlU2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJsZWQoZW5h
YmxlZCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKnRoaXMpKQorICAg
ICAgICBjaGlsZC5yZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChlbmFibGVkKTsK
IH0KIAogLy8gRklYTUU6IEJyZWFrIHRoaXMgZnVuY3Rpb24gdXAgaW50byBwaWVjZXMgd2l0aCBk
ZXNjcmlwdGl2ZSBmdW5jdGlvbiBuYW1lcyBzbyB0aGF0IGl0J3MgZWFzaWVyIHRvIGZvbGxvdy4K
QEAgLTgxNywxMSArODE4LDEzIEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JD
dXJyZW50Um9vdCgpIGNvbnN0CiAKIHN0YXRpYyBib29sIGFueUZyYW1lSGFzVGlsZWRMYXllcnMo
RnJhbWUqIHJvb3RGcmFtZSkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHJvb3RGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQocm9vdEZyYW1lKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPmNvbnRhaW5zVGlsZWRCYWNraW5nTGF5ZXJzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghcm9v
dEZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHRyYXZlcnNhbCA9IGZy
YW1lVHJhdmVyc2FsV2l0aGluKCpyb290RnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9vZih0
cmF2ZXJzYWwuYmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUp
IHsKKyAgICAgICAgcmV0dXJuIGZyYW1lLmNvbnRhaW5zVGlsZWRCYWNraW5nTGF5ZXJzKCk7Cisg
ICAgfSk7CiB9CiAKIHZvaWQgRnJhbWU6OnZpZXdwb3J0T2Zmc2V0Q2hhbmdlZChWaWV3cG9ydE9m
ZnNldENoYW5nZVR5cGUgY2hhbmdlVHlwZSkKQEAgLTg2Niw4ICs4NjksOCBAQCB2b2lkIEZyYW1l
OjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpCiAgICAgaWYgKGRvY3VtZW50KCktPmRv
bVdpbmRvdygpKQogICAgICAgICBkb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cmVzZXRBbGxHZW9s
b2NhdGlvblBlcm1pc3Npb24oKTsKIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gdHJlZSgpLmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKTsKKyAgICBmb3Ig
KGF1dG8mIGNoaWxkIDogZnJhbWVDaGlsZHJlbigqdGhpcykpCisgICAgICAgIGNoaWxkLnJlc2V0
QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKaW5kZXggYTJmNTQ4YzJkNGM0NDY5ODk3OTIy
OTI5ZjZkYjdiODJkNGMxZTA5YS4uNTIyNzU1YTE4OTY2ZjU0ZTIxMmQ2ZDE3ZGFiYWYwNTVmNGQ5
MzVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvUGFnZU1hYy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtNDUsMTAgKzQ2LDEwIEBA
IHZvaWQgUGFnZTo6YWRkU2NoZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1bGVQYWlyPiBwcnBQ
YWlyKQogICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5hZGQocGFpcik7CiAKICNpZiAhUExB
VEZPUk0oSU9TKQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUuZ2V0KCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVu
dExvYWRlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICBkb2N1bWVudExvYWRl
ci0+c2NoZWR1bGUoKnBhaXIpOwotICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigp
LnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVy
LT5zY2hlZHVsZSgqcGFpcik7CiAgICAgfQogI2VuZGlmCkBAIC02NiwxMCArNjcsMTAgQEAgdm9p
ZCBQYWdlOjpyZW1vdmVTY2hlZHVsZVBhaXIoUGFzc1JlZlB0cjxTY2hlZHVsZVBhaXI+IHBycFBh
aXIpCiAgICAgbV9zY2hlZHVsZWRSdW5Mb29wUGFpcnMtPnJlbW92ZShwYWlyKTsKIAogI2lmICFQ
TEFURk9STShJT1MpCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBp
ZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0g
ZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9h
ZGVyLT51bnNjaGVkdWxlKCpwYWlyKTsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkp
CisgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2Fk
ZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICBkb2N1bWVudExv
YWRlci0+dW5zY2hlZHVsZSgqcGFpcik7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXgg
NjFlN2JmOTFlNjkzMGJmMTA1ZDM4Njk0MTkwZWZmZTgxY2JiMzNkNC4uZTY3MTEwZjEyOTAyOTEz
YTEyYTVlNjg3ODc0OWY1ZDhkYTA1NWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtMTQ1
LDggKzE0Niw4IEBAIFJlZ2lvbiBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29tcHV0ZU5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKGNvbnN0IEZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgIG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uLnVuaXRlKHBsdWdpblZpZXdCYXNlLT5mcmFtZVJlY3QoKSk7CiAgICAg
fQogCi0gICAgZm9yIChGcmFtZSogc3ViZnJhbWUgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQo
KTsgc3ViZnJhbWU7IHN1YmZyYW1lID0gc3ViZnJhbWUtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbi51bml0ZShjb21wdXRlTm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oc3ViZnJhbWUsIG9mZnNldCkpOworICAgIGZvciAoYXV0byYgc3ViZnJhbWUg
OiBmcmFtZUNoaWxkcmVuKCpmcmFtZSkpCisgICAgICAgIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
LnVuaXRlKGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigmc3ViZnJhbWUsIG9mZnNldCkp
OwogCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogI2VuZGlmCkBAIC0xNTYs
OSArMTU3LDkgQEAgdW5zaWduZWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50
V2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCiB7CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudCA9IDA7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVy
Q291bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobV9wYWdlLT5tYWluRnJhbWUoKSkp
IHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgICAgICB3aGVlbEV2ZW50
SGFuZGxlckNvdW50ICs9IGZyYW1lLmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQo
KTsKICAgICB9CiAKICAgICByZXR1cm4gd2hlZWxFdmVudEhhbmRsZXJDb3VudDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXgg
NzQ2YTA3ZDAwMzkyNDQ1YjI2YzA5ZmVmZTliZmY5MDUzOTVjOWU3ZS4uM2I4ZDRkZjY0YjliMjE2
NGY2ZGU0YTQ2NDcyNmFkNmIzOGI5NzVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgpAQCAtNTk5LDkgKzYwMCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsYXllclRpbGVkQmFja2luZ1VzYWdlQ2hhbmdlZChjb25zdCBHcmFwaGljc0xheWVy
KiBnCiAKIFJlbmRlckxheWVyQ29tcG9zaXRvciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmNs
b3NpbmdDb21wb3NpdG9yRmx1c2hpbmdMYXllcnMoKSBjb25zdAogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRv
ciogY29tcG9zaXRvciA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSA/ICZmcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKSA6IDA7Ci0gICAgICAgIGlmIChjb21wb3NpdG9yLT5p
c0ZsdXNoaW5nTGF5ZXJzKCkpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSht
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKSkpIHsKKyAgICAgICAgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yKiBjb21wb3NpdG9yID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkgPyAmZnJhbWUu
Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChj
b21wb3NpdG9yICYmIGNvbXBvc2l0b3ItPmlzRmx1c2hpbmdMYXllcnMoKSkKICAgICAgICAgICAg
IHJldHVybiBjb21wb3NpdG9yOwogICAgIH0KICAgICAKQEAgLTM0MTAsOSArMzQxMSwxMiBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKQog
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlGcmFtZXNPZkNvbXBvc2l0aW5nQ2hh
bmdlKCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJh
bWUoKTsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSkpIHsKLSAg
ICAgICAgaWYgKGNoaWxkLT5kb2N1bWVudCgpICYmIGNoaWxkLT5kb2N1bWVudCgpLT5vd25lckVs
ZW1lbnQoKSkKLSAgICAgICAgICAgIGNoaWxkLT5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+
c2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICBG
cmFtZSogZnJhbWVDaGlsZCA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7CisgICAgaWYgKGZy
YW1lQ2hpbGQpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lVHJhdmVyc2FsV2l0
aGluKCpmcmFtZUNoaWxkLCBmcmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC5kb2N1bWVu
dCgpICYmIGNoaWxkLmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpKQorICAgICAgICAgICAgICAg
IGNoaWxkLmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpLT5zY2hlZHVsZVNldE5lZWRzU3R5bGVS
ZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IC8vIENvbXBvc2l0aW5nIGFsc28gYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJlbmRlcklGcmFtZTo6
cmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCksIHNvIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVw
bGF5L1JlcGxheUNvbnRyb2xsZXIuY3BwCmluZGV4IGQ3NmU0YjdlNTA0MTBjYzM2YzAzNWE3ZjY1
YjBkZTcxYzE0YzMxZDYuLjRkNmMwZWMyOWIwODA1YWM5YjAwMmJhMGQ1ZWY3YTQzOGY5NWZhYTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29udHJvbGxlci5jcHAKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCkBAIC0yMzQsOSArMjM1LDkgQEAgdm9pZCBSZXBsYXlD
b250cm9sbGVyOjp1bmxvYWRTZWdtZW50KGJvb2wgc3VwcHJlc3NOb3RpZmljYXRpb25zKQogCiAg
ICAgbV9hY3RpdmVDdXJzb3IgPSBudWxscHRyOwogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uU2Vn
bWVudD4gdW5sb2FkZWRTZWdtZW50ID0gbV9sb2FkZWRTZWdtZW50LnJlbGVhc2UoKTsKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnNldElucHV0Q3Vyc29yKG1fZW1w
dHlDdXJzb3IpOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0SW5wdXRDdXJzb3IobV9l
bXB0eUN1cnNvcik7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFn
ZS5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+c2V0SW5wdXRDdXJzb3IobV9lbXB0eUN1cnNvcik7Cisg
ICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnNldElucHV0Q3Vyc29yKG1fZW1wdHlDdXJzb3IpOwog
ICAgIH0KIAogICAgIC8vIFdoZW4gd2Ugc3RvcCBjYXB0dXJpbmcsIGRvbid0IHNlbmQgb3V0IHNl
Z21lbnQgdW5sb2FkZWQgZXZlbnRzIHNpbmNlIHdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5
L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcAppbmRleCAyNDBhYjE0ZDNhNmE1NDVkOTRjYzk5OGJi
ZTMwZDg5NGUzMmJjOTkzLi5jZTU5NWE1OGY1N2FkMGFmZTM2YzJlY2YyYmU3NGI3OGRhMDU0M2Q3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBbGxSZXBsYXlJbnB1dHMuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKQEAgLTg0LDEwICs4NSwxMCBAQCB1bnNpZ25lZCBsb25nIGZyYW1lSW5k
ZXhGcm9tRnJhbWUoY29uc3QgRnJhbWUqIHRhcmdldEZyYW1lKQogICAgIEFTU0VSVCh0YXJnZXRG
cmFtZSk7CiAKICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRJbmRleCA9IDA7Ci0gICAgY29uc3Qg
RnJhbWUqIG1haW5GcmFtZSA9ICZ0YXJnZXRGcmFtZS0+dHJlZSgpLnRvcCgpOwotICAgIGZvciAo
Y29uc3QgRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgKytjdXJyZW50SW5kZXgsIGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobWFpbkZyYW1lKSkgewotICAgICAgICBp
ZiAoZnJhbWUgPT0gdGFyZ2V0RnJhbWUpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKHRhcmdldEZyYW1lLT50cmVlKCkudG9wKCkpKSB7CisgICAgICAgIGlmICgm
ZnJhbWUgPT0gdGFyZ2V0RnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4Owor
ICAgICAgICBjdXJyZW50SW5kZXgrKzsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIu
Y3BwCmluZGV4IGI0ZGU5Yjg1Nzg5ZWQ4Zjg3NjJiMWQxMmFmNTNiZWY1NGU1YTI0ZDUuLjZjMTUz
YTY5YjZhZWJlNmNlZjM4M2I5NzZhMGM3YzIxYmU3MDMwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCkBAIC00Nyw5ICs0OCw5IEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uCiAg
ICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKIAogICAgIC8vIFNlbmQgZXZlbnRzIG9u
bHkgdG8gb3VyIHBhZ2UuCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAg
ICAgaWYgKHNvdXJjZUZyYW1lICE9IGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLT5lcXVhbChzZWN1cml0eU9yaWdpbikpCi0gICAgICAgICAgICBmcmFtZXMuYXBw
ZW5kKGZyYW1lKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+
bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChzb3VyY2VGcmFtZSAhPSAmZnJhbWUgJiYgZnJh
bWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQor
ICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgmZnJhbWUpOwogICAgIH0KIAogICAgIGRpc3BhdGNo
U2Vzc2lvblN0b3JhZ2VFdmVudHNUb0ZyYW1lcygqcGFnZSwgZnJhbWVzLCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBzZWN1cml0eU9yaWdp
bik7CkBAIC02NCwxMSArNjUsMTAgQEAgdm9pZCBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaExvY2FsU3RvcmFnZUV2ZW50cyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QKICAgICBWZWN0
b3I8UmVmUHRyPEZyYW1lPj4gZnJhbWVzOwogCiAgICAgLy8gU2VuZCBldmVudHMgdG8gZXZlcnkg
cGFnZS4KLSAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlLT5ncm91cCgpLnBh
Z2VzKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwYWdl
cy5iZWdpbigpLCBlbmQgPSBwYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKHNvdXJjZUZy
YW1lICE9IGZyYW1lICYmIGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVh
bChzZWN1cml0eU9yaWdpbikpCi0gICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7
CisgICAgZm9yIChhdXRvJiBwYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygpKSB7CisgICAgICAg
IGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsK
KyAgICAgICAgICAgIGlmIChzb3VyY2VGcmFtZSAhPSAmZnJhbWUgJiYgZnJhbWUuZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQorICAgICAgICAgICAg
ICAgIGZyYW1lcy5hcHBlbmQoJmZyYW1lKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDQwYTJjYzc5MTViODliNzkzNTJlODdmNWY0ZGY1
YjVlOTg3MGU1ZGMuLmRmYTk3NTVmMWQwZjc4NmJiYzQ5MmMzYWJkNThlYmY1MTliZTEyZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNs
dWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVk
ZSAiRm9ybUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1M
SUZyYW1lRWxlbWVudC5oIgpAQCAtMTU1MCw5ICsxNTUxLDkgQEAgdW5zaWduZWQgSW50ZXJuYWxz
OjpudW1iZXJPZlNjcm9sbGFibGVBcmVhcyhFeGNlcHRpb25Db2RlJikKICAgICBpZiAoZnJhbWUt
PnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkpCiAgICAgICAgIGNvdW50ICs9IGZyYW1lLT52aWV3
KCktPnNjcm9sbGFibGVBcmVhcygpLT5zaXplKCk7CiAKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9
IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT52aWV3KCkgJiYgY2hpbGQtPnZp
ZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkpCi0gICAgICAgICAgICBjb3VudCArPSBjaGlsZC0+dmll
dygpLT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBm
cmFtZUNoaWxkcmVuKCpmcmFtZSkpIHsKKyAgICAgICAgaWYgKGNoaWxkLnZpZXcoKSAmJiBjaGls
ZC52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpKQorICAgICAgICAgICAgY291bnQgKz0gY2hpbGQu
dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKS0+c2l6ZSgpOwogICAgIH0KIAogICAgIHJldHVybiBj
b3VudDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234459</attachid>
            <date>2014-07-06 08:30:28 -0700</date>
            <delta_ts>2014-07-06 17:05:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133798-20140706083008.patch</filename>
            <type>text/plain</type>
            <size>115055</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIxYTI1YTA3YjNiOTNh
MGJkYmFjNDNhMzNiMzBiZDE4OWU2NzhiNS4uM2E2NzAxNWVhNGEyY2Y4ZDIyYjMyMGU0M2UyOTEy
ODJjOTIxN2UyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAxNC0wNy0wNSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIGZyYW1l
IHRyYXZlcnNhbCB0aHJvdWdoIHJhbmdlLWJhc2VkIGZvci1sb29wcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNzk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zcGlyZWQgYnkgdGhlIHNpbWlsYXIg
c3VwcG9ydCBmb3IgdHJhdmVyc2luZyBET00gZWxlbWVudHMsIHRoaXMgcGF0Y2gKKyAgICAgICAg
aW50cm9kdWNlcyBhIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZW5hYmxlIGl0ZXJhdGlv
biBvdmVyIHRoZSBmcmFtZQorICAgICAgICB0cmVlIGluIHJhbmdlLWJhc2VkIGZvci1sb29wcyBh
bmQgb3RoZXIgU1RMIGFsZ29yaXRobXMgdGhhdCBjYW4gb3BlcmF0ZQorICAgICAgICBvbiBhIHBh
aXIgb2YgaXRlcmF0b3JzLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNhbiBi
ZSB1c2VkLCB3aXRoIFR5cGUgZGVub3RpbmcgYSB0eXBlIHRoYXQgaXMgb3IKKyAgICAgICAgZGVy
aXZlcyBmcm9tIEZyYW1lOgorICAgICAgICAtIGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisg
ICAgICAgIC0gZnJhbWVSZXZlcnNlQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJh
bWVMYXN0Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCisgICAgICAgIC0gZnJhbWVMaW5lYWdlKFR5cGUm
IGZyYW1lKQorICAgICAgICAtIGZyYW1lQW5jZXN0b3JzKFR5cGUmIGZyYW1lKQorICAgICAgICAt
IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0
aGluKFR5cGUmIGZyYW1lKQorICAgICAgICAtIGZyYW1lVHJhdmVyc2FsV2l0aGluKFR5cGUmIGZy
YW1lLCBjb25zdCBGcmFtZSYgc3RheVdpdGhpbikKKworICAgICAgICBBbGwgZnVuY3Rpb25zIHJl
dHVybiBhIFdURjo6SXRlcmF0b3JSYW5nZSBvYmplY3QgdGhhdCBpcyBjb25zdHJ1Y3RlZCB3aXRo
CisgICAgICAgIGEgcGFpciBvZiBGcmFtZUl0ZXJhdG9ycy4gVGhlIHR5cGUgb2YgdGhlIGxhdHRl
ciBpcyBpbnN0YW50aWF0ZWQgZnJvbSB0aGUKKyAgICAgICAgY2xhc3MgdGVtcGxhdGUgdGhhdCBy
ZXNwZWN0cyB0aGUgY29uc3RuZXNzIG9mIHRoZSByZWZlcmVuY2UgcGFzc2VkIHRvIHRoZQorICAg
ICAgICBoZWxwZXIgZnVuY3Rpb24gYW5kIHVzZXMgdGhlIGluY3JlbWVudCBvcGVyYXRpb24gZm9y
IHRoZSBpdGVyYXRvciB0aGF0IGlzCisgICAgICAgIHNwZWNpZmljIHRvIHRoZSBkZXNpcmVkIHR5
cGUgb2YgdHJhdmVyc2FsLgorCisgICAgICAgIFNpbWlsYXJseSwgdGhlIGJlZ2luIGl0ZXJhdG9y
IGlzIGNvbnN0cnVjdGVkIGluIHRoZSB3YXkgdGhhdCdzIHNwZWNpZmljIHRvCisgICAgICAgIHRo
ZSBuYXR1cmUgb2YgdHJhdmVyc2FsIC0tIGl0IGNhbiB1c2UgdGhlIGZpcnN0IGNoaWxkLCBsYXN0
IGNoaWxkLCBwYXJlbnQKKyAgICAgICAgb3IgdGhlIHBhc3NlZC1pbiBmcmFtZSBkaXJlY3RseSBh
cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBlbmQgaXRlcmF0b3IgaXMKKyAgICAgICAgaG9sZHMg
YSBudWxsIHBvaW50ZXIgYW5kIHN0b3BzIHRoZSBpdGVyYXRpb24gb25jZSB0aGUgaW5jcmVtZW50
IG9wZXJhdGlvbgorICAgICAgICBhbHNvIGVuZHMgdXAgcmV0dXJuaW5nIGEgbnVsbCBwb2ludGVy
LgorCisgICAgICAgIFRoaXMga2VlcHMgdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgZnJhbWUgdHJl
ZSB0cmF2ZXJzYWwsIGJ1dCBwYWNrcyBpdCBpbnRvCisgICAgICAgIGEgbmljZXIgZm9ybWF0IHdp
dGggdGhlIGhlbHAgb2YgV1RGOjpJdGVyYXRvclJhbmdlLCBlbmFibGluZyB0aGUgdXNlIG9mCisg
ICAgICAgIHByZXR0aWVyIHJhbmdlLWJhc2VkIGZvci1sb29wcy4gRm9yIHN0YXJ0ZXJzIGFsbCB0
aGUgYWZmZWN0ZWQgZm9yLWxvb3BzCisgICAgICAgIGluIFdlYkNvcmUgaGF2ZSBiZWVuIHN3aXRj
aGVkIG92ZXIgdG8gdGhlIG5ldyBzeW50YXguCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FuQWNjZXNzQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6cGFnZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50OjpzZXREZXNpZ25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpy
ZXF1ZXN0RnVsbFNjcmVlbkZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OndlYmtpdEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRS
ZW1vdmVUb3VjaEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUpOgorICAgICAg
ICAqIGhpc3RvcnkvQ2FjaGVkUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRQYWdl
OjpyZXN0b3JlKToKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNoZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKiBodG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVnSW5zKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudHMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50
OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVj
dG9yL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3Jp
cHREZWJ1Z1NlcnZlcjo6c2V0SmF2YVNjcmlwdFBhdXNlZCk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjphbGxBbmNlc3RvcnNBcmVDb21wbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6c3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6c3RvcEFsbExvYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNsb3Nl
T2xkRGF0YVNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1YmZyYW1l
SXNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hDaGlsZHJl
bik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Om51bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVPcHRp
b25zKToKKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JD
b21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVw
ZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKToKKyAgICAgICAgKiBsb2FkZXIvTmF2aWdhdGlv
blNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0aW9uU2NoZWR1bGVyOjpt
dXN0TG9ja0JhY2tGb3J3YXJkTGlzdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2hyb21lOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UpOgorICAgICAgICAqIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
cjo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6On5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
c2V0UHJpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9v
bUZhY3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNVUkxBbGxvd2VkKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lSXRlcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVRyYXZlcnNhbDo6Q2hpbGRJdGVyYXRvckluY3JlbWVudDo6b3BlcmF0b3IoKSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ6Om9wZXJhdG9yKCkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6Okxhc3RD
aGlsZEl0ZXJhdG9ySW5jcmVtZW50OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVHJhdmVyc2FsOjpMaW5lYWdlSXRlcmF0b3JJbmNyZW1lbnQ6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6OkZyYW1lSXRl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lSXRlcmF0b3I6Om9wZXJhdG9yIEZyYW1lVHlwZSopOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVJldmVyc2VDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpmcmFtZUxhc3RDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUxpbmVhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVBbmNlc3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6
ZnJhbWVUcmF2ZXJzYWwpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVUcmF2ZXJzYWxXaXRoaW4p
OgorICAgICAgICAqIHBhZ2UvRnJhbWVUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
VHJlZTo6fkZyYW1lVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnVuaXF1ZUNo
aWxkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjppblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVHJlZTo6c2NvcGVkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVUcmVlOjpz
Y29wZWRDaGlsZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6Y2hpbGRDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVHJlZTo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OmlzRGVz
Y2VuZGFudE9mKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVHJlZTo6ZGVlcExhc3RDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVRyZWU6OnRvcCk6CisgICAgICAgIChwcmludEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpoYXND
b21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6aGFzQ29tcG9zaXRpbmdBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUNhbkJsaXRPblNjcm9sbFJlY3Vyc2l2ZWx5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0SXNPdmVybGFwcGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZy
YW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVCYWNrZ3JvdW5kUmVj
dXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRUcmFja3NSZXBhaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Om5vdGlmeVdpZGdldHNJbkFsbEZyYW1l
cyk6CisgICAgICAgICogcGFnZS9Mb2NhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2Nh
dGlvbjo6YW5jZXN0b3JPcmlnaW5zKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV0d29ya1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojp+UGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW5kZXJUcmVlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFu
Z2VJbkVudmlyb25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldE5lZWRzUmVjYWxj
U3R5bGVJbkFsbEZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZWZyZXNoUGx1Z2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp0YWtlQW55TWVkaWFDYW5TdGFydExpc3RlbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6c2V0TWVkaWFWb2x1bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
c2V0UGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldERldmljZVNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmxvY2tBbGxPdmVybGF5U2Nyb2xs
YmFyc1RvSGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldElzSW5XaW5kb3dJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRJc1Zpc3VhbGx5SWRsZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2U6OmludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcyk6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjppbnZhbGlkYXRlU3R5bGVzRm9yTGluayk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXREZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZW1v
cnlDYWNoZUNsaWVudENhbGxzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRUaW1lclRo
cm90dGxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmRuc1ByZWZldGNoaW5n
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnBsdWdpblZpZXdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpjaGVja1N1YmZyYW1lQ291bnRDb25zaXN0ZW5jeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQYWdlOjpyZXN1bWVBbmltYXRpbmdJbWFnZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0U2Vzc2lvbklEKToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cExvYWRE
ZWZlcnJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXI6OlBh
Z2VHcm91cExvYWREZWZlcnJlcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVm
ZXJyZXI6On5QYWdlR3JvdXBMb2FkRGVmZXJyZXIpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZy
YW1lKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEltYWdlTG9hZGluZ1NldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRU
ZXh0QXV0b3NpemluZ0ZvbnRTY2FsZUZhY3Rvcik6CisgICAgICAgICogcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWN0VG9BYnNvbHV0ZUNvb3JkaW5hdGVz
KToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hl
ZXRDYWNoZUluQWxsRnJhbWVzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0VGltZXJzUGF1c2VkSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmRpc3BhdGNoUGFnZUhpZGVFdmVudEJlZm9y
ZVBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkaXNwYXRjaFBhZ2VTaG93RXZlbnRC
ZWZvcmVSZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlY3Vyc2l2ZVNldFVwZGF0
ZUFwcGVhcmFuY2VFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OmFueUZyYW1lSGFzVGlsZWRM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJt
aXNzaW9uKToKKyAgICAgICAgKiBwYWdlL21hYy9QYWdlTWFjLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2U6OmFkZFNjaGVkdWxlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW1v
dmVTY2hlZHVsZVBhaXIpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhhbmRsZXJDb3VudCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5vdGlmeUlG
cmFtZXNPZkNvbXBvc2l0aW5nQ2hhbmdlKToKKyAgICAgICAgKiByZXBsYXkvUmVwbGF5Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYXlDb250cm9sbGVyOjp1bmxvYWRTZWdt
ZW50KToKKyAgICAgICAgKiByZXBsYXkvU2VyaWFsaXphdGlvbk1ldGhvZHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZnJhbWVJbmRleEZyb21GcmFtZSk6CisgICAgICAgICogc3RvcmFnZS9TdG9y
YWdlRXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VFdmVudERp
c3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMpOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6bnVtYmVyT2ZTY3JvbGxhYmxlQXJlYXMpOgorCiAyMDE0LTA3LTA1ICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBNZWRpYURvY3VtZW50IHNob3Vs
ZCBzZXQgYSB2aWV3cG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWI1M2FhMzhhYzk5
OTU2Nzg4MGYzM2U2NGFmMzc3YzgyNzFlNWQxNy4uZGZlZjMyN2ViYjE2YWRjNmNhOWJjNDI2YWNk
ZDkyMDVhODExM2E1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01OCw2ICs1OCw3IEBA
CiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgog
I2luY2x1ZGUgIkZvcm1Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTM1Miw4ICszNTMsOCBAQCBzdGF0aWMgYm9vbCBj
YW5BY2Nlc3NBbmNlc3Rvcihjb25zdCBTZWN1cml0eU9yaWdpbiogYWN0aXZlU2VjdXJpdHlPcmln
aW4sIEZyYW1lKgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBib29sIGlzTG9j
YWxBY3RpdmVPcmlnaW4gPSBhY3RpdmVTZWN1cml0eU9yaWdpbi0+aXNMb2NhbCgpOwotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yRnJhbWUgPSB0YXJnZXRGcmFtZTsgYW5jZXN0b3JGcmFtZTsgYW5j
ZXN0b3JGcmFtZSA9IGFuY2VzdG9yRnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBE
b2N1bWVudCogYW5jZXN0b3JEb2N1bWVudCA9IGFuY2VzdG9yRnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgZm9yIChhdXRvJiBhbmNlc3RvckZyYW1lIDogZnJhbWVMaW5lYWdlKCp0YXJnZXRGcmFtZSkp
IHsKKyAgICAgICAgRG9jdW1lbnQqIGFuY2VzdG9yRG9jdW1lbnQgPSBhbmNlc3RvckZyYW1lLmRv
Y3VtZW50KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYW4gQVNTRVJUPyBGcmFtZXMg
c2hvdWxkIGFsd2F5IGhhdmUgZG9jdW1lbnRzLgogICAgICAgICBpZiAoIWFuY2VzdG9yRG9jdW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5NDYsOCArMTk0Nyw4IEBAIHZvaWQg
RG9jdW1lbnQ6OmNyZWF0ZVJlbmRlclRyZWUoKQogc3RhdGljIHZvaWQgcGFnZVdoZWVsRXZlbnRI
YW5kbGVyQ291bnRDaGFuZ2VkKFBhZ2UmIHBhZ2UpCiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAw
OwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgIGZvciAoY29uc3QgYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLm1haW5GcmFtZSgpKSkgeworICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGNv
dW50ICs9IGRvY3VtZW50LT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQogICAgIHBh
Z2UuY2hyb21lKCkuY2xpZW50KCkubnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZChjb3VudCk7
CkBAIC00MzM4LDggKzQzMzksMTYgQEAgdm9pZCBEb2N1bWVudDo6c2V0VHJhbnNmb3JtU291cmNl
KHN0ZDo6dW5pcXVlX3B0cjxUcmFuc2Zvcm1Tb3VyY2U+IHNvdXJjZSkKIHZvaWQgRG9jdW1lbnQ6
OnNldERlc2lnbk1vZGUoSW5oZXJpdGVkQm9vbCB2YWx1ZSkKIHsKICAgICBtX2Rlc2lnbk1vZGUg
PSB2YWx1ZTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7IGZyYW1lICYmIGZyYW1l
LT5kb2N1bWVudCgpOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUp
KQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2NoZWR1bGVGb3JjZWRTdHlsZVJlY2FsYygp
OworCisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8m
IGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKm1fZnJhbWUpKSB7CisgICAgICAgIGlmICgh
ZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGZyYW1lLmRv
Y3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICB9CiB9CiAKIERvY3Vt
ZW50OjpJbmhlcml0ZWRCb29sIERvY3VtZW50OjpnZXREZXNpZ25Nb2RlKCkgY29uc3QKQEAgLTUx
MjIsMTIgKzUxMzEsMTIgQEAgdm9pZCBEb2N1bWVudDo6cmVxdWVzdEZ1bGxTY3JlZW5Gb3JFbGVt
ZW50KEVsZW1lbnQqIGVsZW1lbnQsIHVuc2lnbmVkIHNob3J0IGZsYWcKIAogICAgICAgICAvLyBB
IGRlc2NlbmRhbnQgYnJvd3NpbmcgY29udGV4dCdzIGRvY3VtZW50IGhhcyBhIG5vbi1lbXB0eSBm
dWxsc2NyZWVuIGVsZW1lbnQgc3RhY2suCiAgICAgICAgIGJvb2wgZGVzY2VuZGVudEhhc05vbkVt
cHR5U3RhY2sgPSBmYWxzZTsKLSAgICAgICAgZm9yIChGcmFtZSogZGVzY2VuZGFudCA9IGZyYW1l
KCkgPyBmcmFtZSgpLT50cmVlKCkudHJhdmVyc2VOZXh0KCkgOiBudWxscHRyOyBkZXNjZW5kYW50
OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1l
bnQoKSkgewotICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRIYXNOb25FbXB0eVN0YWNrID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGZy
YW1lKCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHJhdmVyc2FsID0gZnJhbWVUcmF2ZXJzYWwoKmZy
YW1lKCkpOworICAgICAgICAgICAgZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgPSBzdGQ6OmFu
eV9vZih0cmF2ZXJzYWwuYmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLAorICAgICAgICAgICAgICAg
IFtdKGNvbnN0IEZyYW1lJiBkZXNjZW5kYW50KSB7IHJldHVybiAhIWRlc2NlbmRhbnQuZG9jdW1l
bnQoKS0+d2Via2l0RnVsbHNjcmVlbkVsZW1lbnQoKTsgfSk7CiAgICAgICAgIH0KKwogICAgICAg
ICBpZiAoZGVzY2VuZGVudEhhc05vbkVtcHR5U3RhY2sgJiYgIWluTGVnYWN5TW96aWxsYU1vZGUp
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNTI0NiwxMSArNTI1NSwxMyBAQCB2b2lkIERvY3Vt
ZW50Ojp3ZWJraXRFeGl0RnVsbHNjcmVlbigpCiAgICAgLy8gZWxlbWVudCBzdGFjayAoaWYgYW55
KSwgb3JkZXJlZCBzbyB0aGF0IHRoZSBjaGlsZCBvZiB0aGUgZG9jIGlzIGxhc3QgYW5kIHRoZSBk
b2N1bWVudCBmdXJ0aGVzdAogICAgIC8vIGF3YXkgZnJvbSB0aGUgZG9jIGlzIGZpcnN0LgogICAg
IERlcXVlPFJlZlB0cjxEb2N1bWVudD4+IGRlc2NlbmRhbnRzOwotICAgIGZvciAoRnJhbWUqIGRl
c2NlbmRhbnQgPSBmcmFtZSgpID8gZnJhbWUoKS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpIDogbnVs
bHB0cjsgZGVzY2VuZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoZGVzY2VuZGFudC0+ZG9jdW1lbnQoKS0+d2Via2l0RnVs
bHNjcmVlbkVsZW1lbnQoKSkKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2Vu
ZGFudC0+ZG9jdW1lbnQoKSk7CisgICAgaWYgKGZyYW1lKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
JiBkZXNjZW5kYW50IDogZnJhbWVUcmF2ZXJzYWwoKmZyYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoZGVzY2VuZGFudC5kb2N1bWVudCgpLT53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCgpKQorICAg
ICAgICAgICAgICAgIGRlc2NlbmRhbnRzLnByZXBlbmQoZGVzY2VuZGFudC5kb2N1bWVudCgpKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICAvLyA0LiBGb3IgZWFjaCBkZXNjZW5k
YW50IGluIGRlc2NlbmRhbnRzLCBlbXB0eSBkZXNjZW5kYW50J3MgZnVsbHNjcmVlbiBlbGVtZW50
IHN0YWNrLCBhbmQgcXVldWUgYQogICAgIC8vIHRhc2sgdG8gZmlyZSBhbiBldmVudCBuYW1lZCBm
dWxsc2NyZWVuY2hhbmdlIHdpdGggaXRzIGJ1YmJsZXMgYXR0cmlidXRlIHNldCB0byB0cnVlIG9u
IGRlc2NlbmRhbnQuCiAgICAgZm9yIChEZXF1ZTxSZWZQdHI8RG9jdW1lbnQ+Pjo6aXRlcmF0b3Ig
aSA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGkgIT0gZGVzY2VuZGFudHMuZW5kKCk7ICsraSkgewpA
QCAtNTc3Niw4ICs1Nzg3LDggQEAgdm9pZCBEb2N1bWVudDo6ZGlkUmVtb3ZlVG91Y2hFdmVudEhh
bmRsZXIoTm9kZSogaGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3RvdWNoRXZl
bnRUYXJnZXRzLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKGNvbnN0IEZyYW1l
KiBmcmFtZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJh
bWUtPmRvY3VtZW50KCktPmhhc1RvdWNoRXZlbnRIYW5kbGVycygpKQorICAgIGZvciAoY29uc3Qg
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgaWYgKGZyYW1lLmRvY3VtZW50KCkgJiYgZnJhbWUuZG9jdW1lbnQoKS0+aGFzVG91Y2hFdmVu
dEhhbmRsZXJzKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBhZ2UtPmNocm9t
ZSgpLmNsaWVudCgpLm5lZWRUb3VjaEV2ZW50cyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuY3BwCmluZGV4IDc2NDk3NGJjMzEzZmI4MjIxZTlkNzgwMmYyMThjZTNjODY5
MWU4YmEuLmRiOTEyZmYzODY0NmQ2NzdlOWM1ZWRkZmI4NzgwNWM3YzVlYTA4MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJG
b2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgpAQCAtMTU3LDggKzE1OCw4IEBAIENhY2hlZEZyYW1lOjpDYWNoZWRGcmFt
ZShGcmFtZSYgZnJhbWUpCiAgICAgZnJhbWUubG9hZGVyKCkuc3RvcExvYWRpbmcoVW5sb2FkRXZl
bnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlkZSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIENhY2hlZEZy
YW1lcyBmb3IgYWxsIEZyYW1lcyBpbiB0aGUgRnJhbWVUcmVlLgotICAgIGZvciAoRnJhbWUqIGNo
aWxkID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBtX2NoaWxkRnJhbWVzLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPENhY2hlZEZyYW1lPigqY2hpbGQpKTsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDog
ZnJhbWVDaGlsZHJlbihmcmFtZSkpCisgICAgICAgIG1fY2hpbGRGcmFtZXMuYXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8Q2FjaGVkRnJhbWU+KGNoaWxkKSk7CiAKICAgICAvLyBBY3RpdmUgRE9NIG9i
amVjdHMgbXVzdCBiZSBzdXNwZW5kZWQgYmVmb3JlIHdlIGNhY2hlIHRoZSBmcmFtZSBzY3JpcHQg
ZGF0YSwKICAgICAvLyBidXQgYWZ0ZXIgd2UndmUgZmlyZWQgdGhlIHBhZ2VoaWRlIGV2ZW50LCBp
biBjYXNlIHRoYXQgY3JlYXRlcyBtb3JlIG9iamVjdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRQYWdlLmNwcAppbmRleCBhZjA2ZjU4ZTZmODFhMjE2NzM3YmM0NThlYWNmYzkyOTY4NjUxNzc5
Li41YzM4MzM4YzBjZDAzMDYzNzZlZmQ2NDRhNmIxMWZiNzBmMGU2ZGNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgpAQCAtMTA2LDggKzEwNyw4
IEBAIHZvaWQgQ2FjaGVkUGFnZTo6cmVzdG9yZShQYWdlJiBwYWdlKQogICAgIH0KIAogICAgIGlm
IChtX25lZWRTdHlsZVJlY2FsY0ZvclZpc2l0ZWRMaW5rcykgewotICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZwYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnZpc2l0ZWRM
aW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOworICAgICAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS5tYWluRnJhbWUoKSkpCisgICAgICAgICAg
ICBmcmFtZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52YWxpZGF0ZVN0eWxlRm9y
QWxsTGlua3MoKTsKICAgICB9CiAKICAgICBpZiAobV9uZWVkc0RldmljZVNjYWxlQ2hhbmdlZCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IDA4MzVmYTg1NGYzOTRiNjM5
YmUyYjg4MDMyNDNjNjBiNjdlMGZiYTUuLmQyYzFiNmM1ZTFkZDJkNDkzMmRhOTI5MDhkZjBhOTA4
MDA5ZmZhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJh
bWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgpAQCAt
MTgwLDggKzE4MSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24o
RnJhbWUqIGZyYW1lLCBpbnQgaW5kZW50TGV2ZWwpCiAgICAgICAgIHJlamVjdFJlYXNvbnMgfD0g
MSA8PCBDbGllbnREZW5pZXNDYWNoaW5nOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVl
KCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dDYW5DYWNoZUZy
YW1lRGVjaXNpb24oY2hpbGQsIGluZGVudExldmVsICsgMSk7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkKKyAgICAgICAgcmVqZWN0UmVhc29ucyB8PSBsb2dD
YW5DYWNoZUZyYW1lRGVjaXNpb24oJmNoaWxkLCBpbmRlbnRMZXZlbCArIDEpOwogICAgIAogICAg
IFBDTE9HKHJlamVjdFJlYXNvbnMgPyAiIEZyYW1lIENBTk5PVCBiZSBjYWNoZWQiIDogIiBGcmFt
ZSBDQU4gYmUgY2FjaGVkIik7CiAgICAgUENMT0coIistLS0iKTsKQEAgLTI3Nyw4ICsyNzgsOCBA
QCBQYWdlQ2FjaGU6OlBhZ2VDYWNoZSgpCiAgICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQ
YWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
PnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFp
bmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRy
ZW4oKmZyYW1lKSkgeworICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUoJmNoaWxkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAppbmRleCBlNjMx
YWUyYjE4MzE5ZDM4ZGI4YzBiZjE2NzVlNTc2MzQ2MGM2NmI2Li5hYTc1N2M4YzE0YzEwYTA4MmQ1
ZWYyODZjMmY1ZDI2YjI0ZWM4YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBs
dWdJbkltYWdlRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJFdmVudC5o
IgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTQzNSwxOCAr
NDM2LDE4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVzdGFydFNpbWlsYXJQbHVn
SW5zKCkKICAgICBpZiAoIWRvY3VtZW50KCkucGFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZkb2N1bWVudCgpLnBhZ2UoKS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFmcmFtZS0+bG9hZGVyKCkuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoZG9jdW1lbnQoKS5wYWdlKCktPm1h
aW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVy
KCkuY29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGlmICghZnJhbWUuZG9jdW1l
bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxOb2RlTGlzdD4g
cGx1Z0lucyA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZShlbWJlZFRh
Zy5sb2NhbE5hbWUoKSk7CisgICAgICAgIFJlZlB0cjxOb2RlTGlzdD4gcGx1Z0lucyA9IGZyYW1l
LmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKGVtYmVkVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICAgICAgaWYgKHBsdWdJbnMpCiAgICAgICAgICAgICBhZGRQbHVnSW5zRnJvbU5vZGVMaXN0
TWF0Y2hpbmdQbHVnSW5PcmlnaW4oc2ltaWxhclBsdWdpbnMsIHBsdWdJbnMsIHBsdWdJbk9yaWdp
biwgbWltZVR5cGUpOwogCi0gICAgICAgIHBsdWdJbnMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0
RWxlbWVudHNCeVRhZ05hbWUob2JqZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgcGx1Z0lu
cyA9IGZyYW1lLmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKG9iamVjdFRhZy5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIGlmIChwbHVnSW5zKQogICAgICAgICAgICAgYWRkUGx1Z0luc0Zy
b21Ob2RlTGlzdE1hdGNoaW5nUGx1Z0luT3JpZ2luKHNpbWlsYXJQbHVnaW5zLCBwbHVnSW5zLCBw
bHVnSW5PcmlnaW4sIG1pbWVUeXBlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4
IGFhOTFlYjFiYWZjMTVkMDE4NjE3ODBhMDRmNmU2YzIwN2RmYTE0YmYuLmE1NGYwZWJiYThhODM1
ZjBlM2UzYTM5MDY4ZjRmYTQ2NjYxNzQ4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
UGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5o
IgpAQCAtOTgsOSArOTksOCBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJlZlB0cgogewogICAgIHJlc3Vs
dCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAKLSAgICBG
cmFtZSogbWFpbkZyYW1lID0gbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpOwotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOworICAgIGZvciAoYXV0byYg
ZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9wYWdlQWdlbnQtPm1haW5GcmFtZSgpKSkg
eworICAgICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyosIFJl
ZlB0cgogICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBpbmZvLm1fbWFuaWZlc3Quc3RyaW5n
KCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRo
TWFuaWZlc3Q+IHZhbHVlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNo
ZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEZyYW1l
SWQobV9wYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQorICAgICAgICAgICAgICAgIC5zZXRGcmFt
ZUlkKG1fcGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1h
bmlmZXN0VVJMKG1hbmlmZXN0VVJMKQogICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGlj
X2Nhc3Q8aW50Pihob3N0LT5zdGF0dXMoKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVt
KHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IDdkM2ZhNzdlOTNlYzk4YjZmYzhmMjA5YjdmNGFmY2FjZjM3ODVkMTcuLjg0OTFh
NWQxZDAwMTEwMTNlOTQ2Mjg5MTM2NDFjZGRlMWI4OWIzNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNTksNiArNTksNyBAQAogI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKQEAgLTI2Niw4ICsyNjcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVh
c29uKQogVmVjdG9yPERvY3VtZW50Kj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50cygpCiB7
CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gcmVzdWx0OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
bV9kb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoKm1fZG9jdW1lbnQtPmZy
YW1lKCkpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7
CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
cmVzdWx0LmFwcGVuZChkb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3
Zjk2NDgyNDE4ZGUuLjBlMGZmYmM5MTQ2ZTIxYzM1ODE3OGMxMGQ1MzYyZDJiYjk3NDhmYmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBA
IC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTbmFwc2hvdHRpbmcu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxMCwxMCArNTExLDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6CiAgICAgLy8gYWx3YXlzIHJldHVybiB0aGUgc2FtZSB0cnVlL2ZhbHNl
IHZhbHVlLgogICAgIGJvb2wgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZmFsc2U7CiAKLSAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUuZG9jdW1lbnQoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHVybCA6IGFsbFJlc291
cmNlc1VSTHNGb3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiBhbGxS
ZXNvdXJjZXNVUkxzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tp
ZT4gZG9jQ29va2llc0xpc3Q7CiAgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBn
ZXRSYXdDb29raWVzKGRvY3VtZW50LCBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBkb2NDb29r
aWVzTGlzdCk7CiAKQEAgLTU0Miw4ICs1NDMsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOgog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVVJMIHBhcnNl
ZFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKQotICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZnJhbWUtPmRvY3VtZW50KCksIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpCisgICAgICAgIFdl
YkNvcmU6OmRlbGV0ZUNvb2tpZShmcmFtZS5kb2N1bWVudCgpLCBwYXJzZWRVUkwsIGNvb2tpZU5h
bWUpOwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQpAQCAtNjI0LDIxICs2MjUsMjEgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb24KICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7CiAgICAgSlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbiByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4
KHRleHQsIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptYWluRnJhbWUoKSkpIHsKICAgICAgICAgU3RyaW5nIGNv
bnRlbnQ7CiAKLSAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291
cmNlc0ZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNl
IDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoJmZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRl
eHRDb250ZW50Rm9yQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UsICZjb250ZW50KSkgewog
ICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
Ojpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKLSAgICAgICAgICAgICAgICAgICAgc2VhcmNoUmVz
dWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFtZUlkKGZyYW1lKSwg
Y2FjaGVkUmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChmcmFt
ZUlkKCZmcmFtZSksIGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVudChm
cmFtZSwgZmFsc2UsICZjb250ZW50KSkgeworICAgICAgICBpZiAobWFpblJlc291cmNlQ29udGVu
dCgmZnJhbWUsIGZhbHNlLCAmY29udGVudCkpIHsKICAgICAgICAgICAgIGludCBtYXRjaGVzQ291
bnQgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hl
cyhyZWdleCwgY29udGVudCk7CiAgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQotICAgICAg
ICAgICAgICAgIHNlYXJjaFJlc3VsdHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1
bHQoZnJhbWVJZChmcmFtZSksIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50
KSk7CisgICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0cy0+YWRkSXRlbShidWlsZE9iamVjdEZv
clNlYXJjaFJlc3VsdChmcmFtZUlkKCZmcmFtZSksIGZyYW1lLmRvY3VtZW50KCktPnVybCgpLCBt
YXRjaGVzQ291bnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODMwLDEwICs4MzEsMTAgQEAg
U3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKIAogRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3Jp
Z2luKGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKQogewotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBkb2N1bWVu
dE9yaWdpbiA9IGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCgqbWFpbkZyYW1lKCkpKSB7CisgICAgICAgIFJl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gZG9jdW1lbnRPcmlnaW4gPSBmcmFtZS5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpOwogICAgICAgICBpZiAoZG9jdW1lbnRPcmlnaW4tPnRvUmF3U3RyaW5n
KCkgPT0gb3JpZ2luUmF3U3RyaW5nKQotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOworICAgICAg
ICAgICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkBAIC05
ODQsMTIgKzk4NSwxMiBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OgogICAgIH0KIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7Ci0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1l
Q2hpbGRyZW4oKmZyYW1lKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKICAgICAg
ICAgICAgIGNoaWxkcmVuQXJyYXkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKICAgICAg
ICAgfQotICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJhbWVU
cmVlKGNoaWxkKSk7CisgICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JGcmFtZVRyZWUoJmNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYmFkNGE4
M2E5YTUzYzIwZjUyY2NhOTI3YjQ1NGNiZjgzY2JkYWY0YS4uMDZhOTExZmE4NTU1MWEyODdmYjRi
NTA2YjQ3Y2ZkOGY2NGIyODc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdl
UnVudGltZUFnZW50LmNwcApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRz
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCkBAIC0xNTUsMTQgKzE1NiwxNCBAQCB2
b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnVubXV0ZUNvbnNvbGUoKQogdm9pZCBQYWdlUnVudGltZUFn
ZW50OjpyZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKQogewogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8SlNDOjpFeGVjU3RhdGUqLCBTZWN1cml0eU9yaWdpbio+PiBpc29sYXRlZENvbnRleHRz
OwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFmcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVT
Y3JpcHQpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoIWZyYW1lLnNjcmlwdCgpLmNhbkV4
ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBTdHJpbmcgZnJhbWVJZCA9IG1fcGFnZUFnZW50LT5mcmFtZUlkKGZyYW1l
KTsKKyAgICAgICAgU3RyaW5nIGZyYW1lSWQgPSBtX3BhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUp
OwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNT
dGF0ZShmcmFtZSk7CisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5X
b3JsZEV4ZWNTdGF0ZSgmZnJhbWUpOwogICAgICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChmcmFt
ZUlkLCBzY3JpcHRTdGF0ZSwgbnVsbHB0ciwgdHJ1ZSk7Ci0gICAgICAgIGZyYW1lLT5zY3JpcHQo
KS5jb2xsZWN0SXNvbGF0ZWRDb250ZXh0cyhpc29sYXRlZENvbnRleHRzKTsKKyAgICAgICAgZnJh
bWUuc2NyaXB0KCkuY29sbGVjdElzb2xhdGVkQ29udGV4dHMoaXNvbGF0ZWRDb250ZXh0cyk7CiAg
ICAgICAgIGlmIChpc29sYXRlZENvbnRleHRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaTwgaXNvbGF0ZWRDb250ZXh0cy5zaXpl
KCk7IGkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1
Z1NlcnZlci5jcHAKaW5kZXggZTU4OWE0ZGRjNDc2MTBiMzU5ZDhhMjJhNGQzMjM0OWQ5NTVlMjQ5
Zi4uNDhkMTIwNDE3ZTJiMzRiY2RlMjk0MDhkMmRlNTVjYzY1ZmJhZjY4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKQEAgLTMx
LDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMb29w
LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCkBA
IC0xNjIsOCArMTYzLDggQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEphdmFTY3Jp
cHRQYXVzZWQoUGFnZSogcGFnZSwgYm9vbCBwYXVzZWQpCiAKICAgICBwYWdlLT5zZXREZWZlcnNM
b2FkaW5nKHBhdXNlZCk7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdlLT5tYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAg
ICAgc2V0SmF2YVNjcmlwdFBhdXNlZChmcmFtZSwgcGF1c2VkKTsKKyAgICBmb3IgKGF1dG8mIGZy
YW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKQorICAgICAgICBzZXRKYXZh
U2NyaXB0UGF1c2VkKCZmcmFtZSwgcGF1c2VkKTsKIH0KIAogdm9pZCBQYWdlU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNldEphdmFTY3JpcHRQYXVzZWQoRnJhbWUqIGZyYW1lLCBib29sIHBhdXNlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IGI3NThjYjgyMDE3NmQzM2I4MmMx
MDgzMzI2MDk1ZDVkOTkyMWY5NTIuLjk1NmY0NGY2Njc3MGM5ZDM1OTFmNjI2YTdiMWYzMTBhNzk4
M2M0OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNTksNiArNTks
NyBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgogI2lu
Y2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKQEAgLTI2OCw2ICsyNjksNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjppbml0KCkKICAgICBzZXRQb2xpY3lEb2N1bWVudExvYWRlciht
X2NsaWVudC5jcmVhdGVEb2N1bWVudExvYWRlcihSZXNvdXJjZVJlcXVlc3QoVVJMKFBhcnNlZFVS
TFN0cmluZywgZW1wdHlTdHJpbmcoKSkpLCBTdWJzdGl0dXRlRGF0YSgpKS5nZXQoKSk7CiAgICAg
c2V0UHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcihtX3BvbGljeURvY3VtZW50TG9hZGVyLmdldCgp
KTsKICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0YXJ0TG9hZGluZ01haW5SZXNv
dXJjZSgpOworICAgIGZwcmludGYoc3RkZXJyLCAiRnJhbWVMb2FkZXI6OmluaXQoKSAlcCBmcmFt
ZSAlcCByZWYgY291bnQgJWRcbiIsIHRoaXMsICZtX2ZyYW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkp
OwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+Y2FuY2VsUGFyc2luZygpOwogICAgIG1fc3RhdGVN
YWNoaW5lLmFkdmFuY2VUbyhGcmFtZUxvYWRlclN0YXRlTWFjaGluZTo6RGlzcGxheWluZ0luaXRp
YWxFbXB0eURvY3VtZW50KTsKIApAQCAtNzc3LDIwICs3NzksMTggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZERvbmUoKQogCiBib29sIEZyYW1lTG9hZGVyOjphbGxDaGlsZHJlbkFyZUNvbXBsZXRl
KCkgY29uc3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgIGlmICghY2hpbGQtPmxvYWRlcigpLm1faXNDb21wbGV0ZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBjaGlsZHJlbiA9
IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6YWxsX29mKGNoaWxkcmVu
LmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAg
ICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLm1faXNDb21wbGV0ZTsKKyAgICB9KTsKIH0KIAogYm9v
bCBGcmFtZUxvYWRlcjo6YWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGZv
ciAoRnJhbWUqIGFuY2VzdG9yID0gJm1fZnJhbWU7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2Vz
dG9yLT50cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKCFhbmNlc3Rvci0+bG9hZGVyKCku
bV9pc0NvbXBsZXRlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBhdXRvIGxpbmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV9mcmFtZSk7CisgICAg
cmV0dXJuIHN0ZDo6YWxsX29mKGxpbmVhZ2UuYmVnaW4oKSwgbGluZWFnZS5lbmQoKSwgW10oY29u
c3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBmcmFtZS5sb2FkZXIoKS5tX2lzQ29t
cGxldGU7CisgICAgfSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkK
QEAgLTEwNTksOCArMTA1OSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUZpcnN0UGFydHlG
b3JDb29raWVzKCkKIAogdm9pZCBGcmFtZUxvYWRlcjo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMo
Y29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpKQotICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXModXJsKTsKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV9mcmFtZSkpCisgICAgICAg
IGZyYW1lLmRvY3VtZW50KCktPnNldEZpcnN0UGFydHlGb3JDb29raWVzKHVybCk7CiB9CiAKIC8v
IFRoaXMgZG9lcyB0aGUgc2FtZSBraW5kIG9mIHdvcmsgdGhhdCBkaWRPcGVuVVJMIGRvZXMsIGV4
Y2VwdCBpdCByZWxpZXMgb24gdGhlIGZhY3QKQEAgLTExMzgsMjQgKzExMzgsMzIgQEAgYm9vbCBG
cmFtZUxvYWRlcjo6aXNDb21wbGV0ZSgpIGNvbnN0CiB2b2lkIEZyYW1lTG9hZGVyOjpjb21wbGV0
ZWQoKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkZyYW1lTG9hZGVyOjpjb21wbGV0ZWQoKSAlcCBmcmFtZSAlcCAoJWQpIG1faXNDb21w
bGV0ZSAlZFxuIiwgdGhpcywgJm1fZnJhbWUsIG1fZnJhbWUucmVmQ291bnQoKSwgbV9pc0NvbXBs
ZXRlKTsKIAotICAgIGZvciAoRnJhbWUqIGRlc2NlbmRhbnQgPSBtX2ZyYW1lLnRyZWUoKS50cmF2
ZXJzZU5leHQoJm1fZnJhbWUpOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZSkpCi0gICAgICAgIGRlc2NlbmRhbnQtPm5hdmln
YXRpb25TY2hlZHVsZXIoKS5zdGFydFRpbWVyKCk7CisgICAgaWYgKEZyYW1lKiBkZXNjZW5kYW50
ID0gbV9mcmFtZS50cmVlKCkudHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmRlc2NlbmRhbnQsIG1fZnJhbWUp
KQorICAgICAgICAgICAgZnJhbWUubmF2aWdhdGlvblNjaGVkdWxlcigpLnN0YXJ0VGltZXIoKTsK
KyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJcdGZyYW1lICVwICglZClcbiIsICZtX2ZyYW1l
LCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogCi0gICAgaWYgKEZyYW1lKiBwYXJlbnQgPSBtX2ZyYW1l
LnRyZWUoKS5wYXJlbnQoKSkKKyAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUudHJlZSgp
LnBhcmVudCgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHRwYXJlbnQgJXBcbiIsIHBh
cmVudCk7CiAgICAgICAgIHBhcmVudC0+bG9hZGVyKCkuY2hlY2tDb21wbGV0ZWQoKTsKKyAgICB9
CiAKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0ZnJhbWUgJXAgKCVkKVxuIiwgJm1fZnJhbWUsIG1f
ZnJhbWUucmVmQ291bnQoKSk7CiAgICAgaWYgKG1fZnJhbWUudmlldygpKQogICAgICAgICBtX2Zy
YW1lLnZpZXcoKS0+bWFpbnRhaW5TY3JvbGxQb3NpdGlvbkF0QW5jaG9yKDApOwogICAgIG1fYWN0
aXZpdHlBc3NlcnRpb24gPSBudWxscHRyOworICAgIGZwcmludGYoc3RkZXJyLCAiXHRFTkQgT0Yg
RnJhbWVMb2FkZXI6OmNvbXBsZXRlZCgpICVwIGZyYW1lICVwICglZClcbiIsIHRoaXMsICZtX2Zy
YW1lLCBtX2ZyYW1lLnJlZkNvdW50KCkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpzdGFydGVk
KCkKIHsKICAgICBpZiAobV9mcmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPnBhZ2VUaHJv
dHRsZXIoKSkKICAgICAgICAgbV9hY3Rpdml0eUFzc2VydGlvbiA9IG1fZnJhbWUucGFnZSgpLT5w
YWdlVGhyb3R0bGVyKCktPnBhZ2VMb2FkQWN0aXZpdHlUb2tlbigpOwotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFyZW50KCkp
Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVMaW5lYWdlKG1fZnJhbWUpKQorICAgICAgICBmcmFtZS5sb2Fk
ZXIoKS5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6cHJlcGFy
ZUZvckhpc3RvcnlOYXZpZ2F0aW9uKCkKQEAgLTE2MjEsOCArMTYyOSw4IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OnN0b3BBbGxMb2FkZXJzKENsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5IGNsZWFyUHJv
dmlzaW9uYWxJdGVtCiAgICAgaWYgKGNsZWFyUHJvdmlzaW9uYWxJdGVtUG9saWN5ID09IFNob3Vs
ZENsZWFyUHJvdmlzaW9uYWxJdGVtKQogICAgICAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJ
dGVtKDApOwogCi0gICAgZm9yIChSZWZQdHI8RnJhbWU+IGNoaWxkID0gbV9mcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5zdG9wQWxsTG9hZGVycyhjbGVhclByb3Zpc2lvbmFs
SXRlbVBvbGljeSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFt
ZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKGNsZWFyUHJvdmlzaW9u
YWxJdGVtUG9saWN5KTsKICAgICBpZiAobV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKQogICAg
ICAgICBtX3Byb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXItPnN0b3BMb2FkaW5nKCk7CiAgICAgaWYg
KG1fZG9jdW1lbnRMb2FkZXIpCkBAIC0yMDMzLDggKzIwNDEsOCBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpjbG9zZU9sZERhdGFTb3VyY2VzKCkKICAgICAvLyBGSVhNRTogSXMgaXQgaW1wb3J0YW50IGZv
ciB0aGlzIHRyYXZlcnNhbCB0byBiZSBwb3N0b3JkZXIgaW5zdGVhZCBvZiBwcmVvcmRlcj8KICAg
ICAvLyBJZiBzbywgYWRkIGhlbHBlcnMgZm9yIHBvc3RvcmRlciB0cmF2ZXJzYWwsIGFuZCB1c2Ug
dGhlbS4gSWYgbm90LCB0aGVuIGxldHMgbm90CiAgICAgLy8gdXNlIGEgcmVjdXJzaXZlIGFsZ29y
aXRobSBoZXJlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5sb2FkZXIoKS5jbG9zZU9sZERhdGFTb3VyY2VzKCk7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigp
LmNsb3NlT2xkRGF0YVNvdXJjZXMoKTsKICAgICAKICAgICBpZiAobV9kb2N1bWVudExvYWRlcikK
ICAgICAgICAgbV9jbGllbnQuZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKQEAgLTIxMjYsOCArMjEzNCw4
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNldFJlcGxhY2luZygpCiBib29sIEZyYW1lTG9hZGVyOjpz
dWJmcmFtZUlzTG9hZGluZygpIGNvbnN0CiB7CiAgICAgLy8gSXQncyBtb3N0IGxpa2VseSB0aGF0
IHRoZSBsYXN0IGFkZGVkIGZyYW1lIGlzIHRoZSBsYXN0IHRvIGxvYWQgc28gd2Ugd2FsayBiYWNr
d2FyZHMuCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5wcmV2aW91c1NpYmxpbmcoKSkgewotICAg
ICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGZyYW1lUmV2ZXJzZUNoaWxkcmVuKG1fZnJhbWUpKSB7CisgICAgICAg
IEZyYW1lTG9hZGVyJiBjaGlsZExvYWRlciA9IGNoaWxkLmxvYWRlcigpOwogICAgICAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBjaGlsZExvYWRlci5kb2N1bWVudExvYWRlcigp
OwogICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgZG9jdW1lbnRMb2FkZXItPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjQwNiw4ICsyNDE0
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGV0YWNoQ2hpbGRyZW4oKQogewogICAgIFZlY3RvcjxS
ZWY8RnJhbWU+LCAxNj4gY2hpbGRyZW5Ub0RldGFjaDsKICAgICBjaGlsZHJlblRvRGV0YWNoLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9mcmFtZS50cmVlKCkuY2hpbGRDb3VudCgpKTsKLSAgICBm
b3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmxhc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+dHJlZSgpLnByZXZpb3VzU2libGluZygpKQotICAgICAgICBjaGlsZHJlblRv
RGV0YWNoLnVuY2hlY2tlZEFwcGVuZCgqY2hpbGQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBm
cmFtZVJldmVyc2VDaGlsZHJlbihtX2ZyYW1lKSkKKyAgICAgICAgY2hpbGRyZW5Ub0RldGFjaC51
bmNoZWNrZWRBcHBlbmQoY2hpbGQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGls
ZHJlblRvRGV0YWNoLnNpemUoKTsgKytpKQogICAgICAgICBjaGlsZHJlblRvRGV0YWNoW2ldLT5s
b2FkZXIoKS5kZXRhY2hGcm9tUGFyZW50KCk7CiB9CkBAIC0yNDM4LDggKzI0NDYsOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiAgICAgLy8gRklYTUU6IEFsd2F5cyB0
cmF2ZXJzaW5nIHRoZSBlbnRpcmUgZnJhbWUgdHJlZSBpcyBhIGJpdCBpbmVmZmljaWVudCwgYnV0
IAogICAgIC8vIGlzIGN1cnJlbnRseSBuZWVkZWQgaW4gb3JkZXIgdG8gbnVsbCBvdXQgdGhlIHBy
ZXZpb3VzIGhpc3RvcnkgaXRlbSBmb3IgYWxsIGZyYW1lcy4KICAgICBWZWN0b3I8UmVmPEZyYW1l
PiwgMTY+IGZyYW1lczsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAg
ICBmcmFtZXMuYXBwZW5kKCpmcmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1fZnJhbWUubWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZXMuYXBwZW5kKGZyYW1l
KTsKIAogICAgIC8vIFRvIHByb2Nlc3MgY2hpbGRyZW4gYmVmb3JlIHRoZWlyIHBhcmVudHMsIGl0
ZXJhdGUgdGhlIHZlY3RvciBiYWNrd2FyZHMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJhbWVz
LnNpemUoKTsgaTsgLS1pKQpAQCAtMjQ1Miw4ICsyNDYwLDggQEAgaW50IEZyYW1lTG9hZGVyOjpu
dW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMoYm9vbCByZWN1cnNlKSBjb25zdAogICAgICAgICBy
ZXR1cm4gbV9mcmFtZS5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0
Q291bnQoKTsKIAogICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9mcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJh
bWUpKQotICAgICAgICBjb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+cmVxdWVzdENvdW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKQorICAgICAgICBjb3VudCArPSBmcmFtZS5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5yZXF1ZXN0Q291bnQoKTsKICAgICByZXR1cm4gY291
bnQ7CiB9CiAKQEAgLTI3OTgsOCArMjgwNiwxMCBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRD
bG9zZSgpCiAgICAgLy8gU3RvcmUgYWxsIHJlZmVyZW5jZXMgdG8gZWFjaCBzdWJmcmFtZSBpbiBh
ZHZhbmNlIHNpbmNlIGJlZm9yZXVubG9hZCdzIGV2ZW50IGhhbmRsZXIgbWF5IG1vZGlmeSBmcmFt
ZQogICAgIFZlY3RvcjxSZWY8RnJhbWU+LCAxNj4gdGFyZ2V0RnJhbWVzOwogICAgIHRhcmdldEZy
YW1lcy5hcHBlbmQobV9mcmFtZSk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCZtX2ZyYW1lKSkKLSAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZCgqY2hpbGQpOworICAg
IGlmIChGcmFtZSogZmlyc3RDaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKmZpcnN0Q2hp
bGQsIG1fZnJhbWUpKQorICAgICAgICAgICAgdGFyZ2V0RnJhbWVzLmFwcGVuZChmcmFtZSk7Cisg
ICAgfQogCiAgICAgYm9vbCBzaG91bGRDbG9zZSA9IGZhbHNlOwogICAgIHsKQEAgLTMwNTgsOCAr
MzA2OCw4IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZEludGVycnVwdExvYWRGb3JYRnJhbWVP
cHRpb25zKGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uCiAgICAgICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gb3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwogICAgICAgICBp
ZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodG9wRnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKCFvcmlnaW4tPmlzU2FtZVNj
aGVtZUhvc3RQb3J0KGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lQW5jZXN0b3JzKG1fZnJhbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIW9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQoZnJhbWUuZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hp
c3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5jcHAKaW5kZXggZTFiOGM5Mzk5ZGUwYTQ0NmMzNmRlMzYwZTAyNWQzYzQ1OWM5MTYzYi4u
OTQ2NjI5ZTY3YmJhMjE3NGI0ODdhNzBhODg1ZDU4OTM5N2I1NWZlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmgiCkBAIC0xOTcsOSArMTk4LDkgQEAgdm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQogLy8gaGlzdG9yeSBpdGVtLgogdm9pZCBI
aXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQogewotICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCZtX2ZyYW1lKSkgewotICAgICAgICBmcmFtZS0+bG9hZGVyKCkuaGlzdG9y
eSgpLnNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5
KCkuc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS5o
aXN0b3J5KCkuY3VycmVudEl0ZW0oKSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsV2l0aGluKG1fZnJhbWUpKSB7CisgICAgICAgIGZyYW1lLmxvYWRlcigpLmhpc3Rvcnko
KS5zYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAgICBmcmFtZS5sb2FkZXIoKS5oaXN0b3J5KCku
c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKGZyYW1lLmxvYWRlcigpLmhpc3Rv
cnkoKS5jdXJyZW50SXRlbSgpKTsKICAgICB9CiB9CiAKQEAgLTUyMiw4ICs1MjMsOCBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKQogICAgIH0KIAog
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgcmVzdCBvZiB0aGUgdHJlZQotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5
KCkucmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4obV9mcmFtZSkpCisgICAgICAgIGNoaWxkLmxvYWRlcigpLmhpc3RvcnkoKS5y
ZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKIH0KIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpCkBAIC01NjYsOCArNTY3LDggQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdh
dGlvbigpCiAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOwogCiAgICAgLy8gSXRlcmF0ZSBvdmVy
IHRoZSByZXN0IG9mIHRoZSB0cmVlLgotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50
cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJs
aW5nKCkpCi0gICAgICAgIGNoaWxkLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlVXBkYXRl
Rm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFt
ZUNoaWxkcmVuKG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5sb2FkZXIoKS5oaXN0b3J5KCkucmVj
dXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwogfQogCiB2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JGcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNjg1LDggKzY4
Niw4IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJ
dGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAgICAgICAgICAgICBiZkl0ZW0tPnNldERv
Y3VtZW50U2VxdWVuY2VOdW1iZXIobV9wcmV2aW91c0l0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUu
dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2li
bGluZygpKSB7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC0+
bG9hZGVyKCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKG1fZnJh
bWUpKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlciYgY2hpbGRMb2FkZXIgPSBjaGlsZC5sb2Fk
ZXIoKTsKICAgICAgICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci5mcmFt
ZUhhc0xvYWRlZCgpOwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFtZSBj
b3JyZXNwb25kaW5nIHRvIGFuIDxvYmplY3Q+IGVsZW1lbnQgdGhhdCBuZXZlciBsb2FkZWQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKaW5kZXggZjVl
ZjJkM2E2ZjNhYzRhNjlmNDE0Y2NmZjBmZDY1NzI2NGEwYjg4YS4uNmI5ZWE5ODJlZGYwZTg3OGVj
NWY5MDkwZTVlYThhMGNmNWE3YzkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L05hdmlnYXRpb25TY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZp
Z2F0aW9uU2NoZWR1bGVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkZvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJTdGF0ZU1hY2hp
bmUuaCIKQEAgLTM0Miw5ICszNDMsOSBAQCBMb2NrQmFja0ZvcndhcmRMaXN0IE5hdmlnYXRpb25T
Y2hlZHVsZXI6Om11c3RMb2NrQmFja0ZvcndhcmRMaXN0KEZyYW1lJiB0YXJnZXRGcgogICAgIC8v
IE5hdmlnYXRpb24gb2YgYSBzdWJmcmFtZSBkdXJpbmcgbG9hZGluZyBvZiBhbiBhbmNlc3RvciBm
cmFtZSBkb2VzIG5vdCBjcmVhdGUgYSBuZXcgYmFjay9mb3J3YXJkIGl0ZW0uCiAgICAgLy8gVGhl
IGRlZmluaXRpb24gb2YgImR1cmluZyBsb2FkIiBpcyBhbnkgdGltZSBiZWZvcmUgYWxsIGhhbmRs
ZXJzIGZvciB0aGUgbG9hZCBldmVudCBoYXZlIGJlZW4gcnVuLgogICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTcgZm9yIHRoZSBvcmlnaW5hbCBt
b3RpdmF0aW9uIGZvciB0aGlzLgotICAgIGZvciAoRnJhbWUqIGFuY2VzdG9yID0gdGFyZ2V0RnJh
bWUudHJlZSgpLnBhcmVudCgpOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+dHJlZSgp
LnBhcmVudCgpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFuY2VzdG9yLT5kb2N1
bWVudCgpOwotICAgICAgICBpZiAoIWFuY2VzdG9yLT5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwg
KGRvY3VtZW50ICYmIGRvY3VtZW50LT5wcm9jZXNzaW5nTG9hZEV2ZW50KCkpKQorICAgIGZvciAo
YXV0byYgYW5jZXN0b3IgOiBmcmFtZUFuY2VzdG9ycyh0YXJnZXRGcmFtZSkpIHsKKyAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gYW5jZXN0b3IuZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKCFh
bmNlc3Rvci5sb2FkZXIoKS5pc0NvbXBsZXRlKCkgfHwgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5w
cm9jZXNzaW5nTG9hZEV2ZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2Fy
ZExpc3Q6OlllczsKICAgICB9CiAgICAgcmV0dXJuIExvY2tCYWNrRm9yd2FyZExpc3Q6Ok5vOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IDBiNTJjMjk1ODhhYTFhOTNlYTExN2VkM2FjODZiZDYw
YjZiOWFhNWUuLjVhYjdiNzY3MTRkYjFjYmNlYTZiMTBmNWIxNzVmMGNiZTAyZGJlNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5j
bHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC0yMTYsOCAr
MjE3LDggQEAgYm9vbCBDaHJvbWU6OmNhblJ1bk1vZGFsKCkgY29uc3QKIAogc3RhdGljIGJvb2wg
Y2FuUnVuTW9kYWxJZkR1cmluZ1BhZ2VEaXNtaXNzYWwoUGFnZSYgcGFnZSwgQ2hyb21lQ2xpZW50
OjpEaWFsb2dUeXBlIGRpYWxvZywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJnBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNz
YWxUeXBlIGRpc21pc3NhbCA9IGZyYW1lLT5sb2FkZXIoKS5wYWdlRGlzbWlzc2FsRXZlbnRCZWlu
Z0Rpc3BhdGNoZWQoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFn
ZS5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OlBhZ2VEaXNtaXNzYWxUeXBl
IGRpc21pc3NhbCA9IGZyYW1lLmxvYWRlcigpLnBhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCgpOwogICAgICAgICBpZiAoZGlzbWlzc2FsICE9IEZyYW1lTG9hZGVyOjpOb0Rpc21pc3Nh
bCkKICAgICAgICAgICAgIHJldHVybiBwYWdlLmNocm9tZSgpLmNsaWVudCgpLnNob3VsZFJ1bk1v
ZGFsRGlhbG9nRHVyaW5nUGFnZURpc21pc3NhbChkaWFsb2csIG1lc3NhZ2UsIGRpc21pc3NhbCk7
CiAgICAgfQpAQCAtNTU4LDkgKzU1OSw5IEBAIHZvaWQgQ2hyb21lOjp3aW5kb3dTY3JlZW5EaWRD
aGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKQogCiAgICAgbV9kaXNwbGF5SUQgPSBk
aXNwbGF5SUQ7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UubWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPndp
bmRvd1NjcmVlbkRpZENoYW5nZShkaXNwbGF5SUQpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtX3BhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5k
b2N1bWVudCgpKQorICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+d2luZG93U2NyZWVuRGlk
Q2hhbmdlKGRpc3BsYXlJRCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKaW5kZXggYmUxN2VhZWZiMmZkZmRmNThhYjZlYzg0ZGU5ZTBhNzQxZDg0MTYx
ZC4uNjhhODYxNmY4MjBiMDAwZWRkMThiY2FiMzY3ZWI2MzZhZjEwMGExMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
U2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCkBAIC02ODcsOCArNjg4LDggQEAgdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldElzVmlzaWJs
ZUludGVybmFsKGJvb2wgY29udGVudElzVmlzaWJsZSkKIAogICAgIGNvbnRlbnRBcmVhRGlkU2hv
d09ySGlkZSh2aWV3LCBjb250ZW50SXNWaXNpYmxlKTsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1fcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFnZS5tYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCk7CiAg
ICAgICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5jcHAKaW5kZXggZTA5MjQ0ZDQyYzY1YWE1ZGIyNDgxYzJhMGY3NjcwZjViMDRjNDE3ZS4u
NGJhNTg3ZWUwNzQyNWIyMDM1YTUxZWQxN2JjY2FkOWIwMDM1N2ZiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIu
aCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCkBAIC0yMTIsNiArMjEzLDcgQEAgUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWU6OmNyZWF0ZShQ
YWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKIAogRnJhbWU6
On5GcmFtZSgpCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJGcmFtZTo6fkZyYW1lICVwXG4iLCB0
aGlzKTsKICAgICBzZXRWaWV3KDApOwogICAgIGxvYWRlcigpLmNhbmNlbEFuZENsZWFyKCk7CiAK
QEAgLTY1Miw4ICs2NTQsOCBAQCB2b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5n
LCBjb25zdCBGbG9hdFNpemUmIHBhZ2VTaXplLCBjb25zdCBGbG9hdFNpegogICAgIH0KIAogICAg
IC8vIFN1YmZyYW1lcyBvZiB0aGUgb25lIHdlJ3JlIHByaW50aW5nIGRvbid0IGxheSBvdXQgdG8g
dGhlIHBhZ2Ugc2l6ZS4KLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5zZXRQcmludGluZyhwcmludGluZywgRmxvYXRTaXplKCksIEZsb2F0U2l6
ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZy
YW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAgICBjaGlsZC5zZXRQcmludGluZyhwcmludGluZywg
RmxvYXRTaXplKCksIEZsb2F0U2l6ZSgpLCAwLCBzaG91bGRBZGp1c3RWaWV3U2l6ZSk7CiB9CiAK
IGJvb2wgRnJhbWU6OnNob3VsZFVzZVByaW50aW5nTGF5b3V0KCkgY29uc3QKQEAgLTk4Niw4ICs5
ODgsOCBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Va
b29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogCiAgICAgZG9jdW1lbnQtPnJlY2FsY1N0
eWxlKFN0eWxlOjpGb3JjZSk7CiAKLSAgICBmb3IgKFJlZlB0cjxGcmFtZT4gY2hpbGQgPSB0cmVl
KCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIGNoaWxkLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKG1fcGFnZVpvb21G
YWN0b3IsIG1fdGV4dFpvb21GYWN0b3IpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNo
aWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hpbGQuc2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyht
X3BhZ2Vab29tRmFjdG9yLCBtX3RleHRab29tRmFjdG9yKTsKIAogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKICAgICAgICAgaWYgKGRvY3VtZW50LT5yZW5kZXJWaWV3
KCkgJiYgZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRG
aXJzdExheW91dCgpKQpAQCAtMTA0NCw4ICsxMDQ2LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiB2b2lkIEZyYW1lOjpkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKQogewotICAgIGZvciAoUmVmUHRyPEZyYW1lPiBjaGlsZCA9IHRy
ZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgY2hpbGQtPmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwor
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKCp0aGlzKSkKKyAgICAgICAgY2hp
bGQuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAKICAgICBpZiAoUmVuZGVyVmll
dyogcm9vdCA9IGNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByb290LT5jb21wb3NpdG9yKCku
ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CkBAIC0xMDU4LDggKzEwNjAsOCBAQCBi
b29sIEZyYW1lOjppc1VSTEFsbG93ZWQoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiAgICAgaWYgKG1f
cGFnZS0+c3ViZnJhbWVDb3VudCgpID49IFBhZ2U6Om1heE51bWJlck9mRnJhbWVzKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxzZTsKLSAg
ICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IHRoaXM7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkucGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50
aWZpZXIoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCB1cmwpKSB7CisgICAgZm9yIChjb25zdCBh
dXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSgqdGhpcykpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdGcmFnbWVudElkZW50aWZpZXIoZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCksIHVybCkpIHsK
ICAgICAgICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZUl0ZXJhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzZWJkODMzNjQ5Mzg3NTRhOTMw
NzI5YjM5NTExNDhkMmZkNTNmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVJdGVyYXRvci5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIEZyYW1lSXRlcmF0
b3JfaAorI2RlZmluZSBGcmFtZUl0ZXJhdG9yX2gKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgRnJhbWVUcmF2ZXJzYWwgeworCitzdHJ1Y3QgQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVU
eXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCk7IH0KK307
CisKK3N0cnVjdCBSZXZlcnNlQ2hpbGRJdGVyYXRvckluY3JlbWVudCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCkoRnJhbWVUeXBlKiYgZnJhbWUpIHsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnByZXZpb3VzU2libGluZygpOyB9Cit9OworCitzdHJ1Y3Qg
TGFzdENoaWxkSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS5sYXN0Q2hpbGQoKTsgfQorfTsKKworc3RydWN0IExpbmVhZ2VJdGVyYXRvckluY3Jl
bWVudCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnJhbWVUeXBlPiB2b2lkIG9wZXJhdG9yKCko
RnJhbWVUeXBlKiYgZnJhbWUpIHsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpOyB9Cit9
OworCitzdHJ1Y3QgVHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZyYW1lVHlwZT4gdm9pZCBvcGVyYXRvcigpKEZyYW1lVHlwZSomIGZyYW1lKSB7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoc3RheVdpdGhpbik7IH0KKyAgICBjb25z
dCBGcmFtZSogc3RheVdpdGhpbjsKK307CisKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZyYW1l
VHlwZSwgdHlwZW5hbWUgSW5jcmVtZW50T3BlcmF0aW9uPgorc3RydWN0IEZyYW1lSXRlcmF0b3Ig
OiBzdGQ6Oml0ZXJhdG9yPHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnLCBGcmFtZVR5cGU+IHsKKyAg
ICBGcmFtZUl0ZXJhdG9yKCkgPSBkZWZhdWx0OworICAgIEZyYW1lSXRlcmF0b3IoRnJhbWVUeXBl
KiBmcmFtZSwgSW5jcmVtZW50T3BlcmF0aW9uJiYgaW5jcmVtZW50T3BlcmF0aW9uID0gSW5jcmVt
ZW50T3BlcmF0aW9uKCkpCisgICAgICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAgICAgLCBtX2lu
Y3JlbWVudE9wZXJhdGlvbihzdGQ6Om1vdmUoaW5jcmVtZW50T3BlcmF0aW9uKSkKKyAgICB7Cisg
ICAgfQorCisgICAgRnJhbWVUeXBlJiBvcGVyYXRvciooKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fZnJhbWUpOworICAgICAgICByZXR1cm4gKm1fZnJhbWU7CisgICAgfQorICAgIG9w
ZXJhdG9yIEZyYW1lVHlwZSooKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBGcmFt
ZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lKTsK
KyAgICAgICAgbV9pbmNyZW1lbnRPcGVyYXRpb24obV9mcmFtZSk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJhbWVJdGVyYXRvciYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUgPT0gb3RoZXIubV9mcmFtZTsgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBGcmFtZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7IH0KKworcHJvdGVjdGVkOgorICAgIEZyYW1lVHlwZSogbV9mcmFt
ZTsKKyAgICBJbmNyZW1lbnRPcGVyYXRpb24gbV9pbmNyZW1lbnRPcGVyYXRpb247Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSBJbmNyZW1lbnRPcGVyYXRpb24+Cit1c2lu
ZyBGcmFtZUl0ZXJhdG9yVHlwZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYmFz
ZV9vZjxGcmFtZSwgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VHlwZT46OnR5cGU+Ojp2YWx1
ZSwKKyAgICBGcmFtZUl0ZXJhdG9yPHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19j
b25zdDxUeXBlPjo6dmFsdWUsIGNvbnN0IEZyYW1lLCBGcmFtZT46OnR5cGUsIEluY3JlbWVudE9w
ZXJhdGlvbj4+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6
SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6Q2hp
bGRJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lQ2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAg
cmV0dXJuIHsgeyBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpIH0sIHsgfSB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJh
dG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNhbDo6UmV2ZXJzZUNoaWxkSXRlcmF0b3JJbmNyZW1l
bnQ+PiBmcmFtZVJldmVyc2VDaGlsZHJlbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7
IGZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQoKSB9LCB7IH0gfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJdGVyYXRvclR5cGU8VHlw
ZSwgRnJhbWVUcmF2ZXJzYWw6Okxhc3RDaGlsZEl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMYXN0
Q2hpbGRyZW4oVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkubGFz
dENoaWxkKCkgfSAsIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgoraW5saW5l
IFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFtZVRyYXZlcnNh
bDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVMaW5lYWdlKFR5cGUmIGZyYW1lKQor
eworICAgIHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBl
LCBGcmFtZVRyYXZlcnNhbDo6TGluZWFnZUl0ZXJhdG9ySW5jcmVtZW50Pj4gZnJhbWVBbmNlc3Rv
cnMoVHlwZSYgZnJhbWUpCit7CisgICAgcmV0dXJuIHsgeyBmcmFtZS50cmVlKCkucGFyZW50KCkg
fSwgeyB9IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitpbmxpbmUgV1RGOjpJdGVy
YXRvclJhbmdlPEZyYW1lSXRlcmF0b3JUeXBlPFR5cGUsIEZyYW1lVHJhdmVyc2FsOjpUcmF2ZXJz
YWxJdGVyYXRvckluY3JlbWVudD4+IGZyYW1lVHJhdmVyc2FsKFR5cGUmIGZyYW1lKQoreworICAg
IHJldHVybiB7IHsgJmZyYW1lIH0sIHsgfSB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgoraW5saW5lIFdURjo6SXRlcmF0b3JSYW5nZTxGcmFtZUl0ZXJhdG9yVHlwZTxUeXBlLCBGcmFt
ZVRyYXZlcnNhbDo6VHJhdmVyc2FsSXRlcmF0b3JJbmNyZW1lbnQ+PiBmcmFtZVRyYXZlcnNhbFdp
dGhpbihUeXBlJiBmcmFtZSkKK3sKKyAgICByZXR1cm4geyB7ICZmcmFtZSwgRnJhbWVUcmF2ZXJz
YWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVtZW50eyAmZnJhbWUgfSB9LCB7IH0gfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2lubGluZSBXVEY6Okl0ZXJhdG9yUmFuZ2U8RnJhbWVJ
dGVyYXRvclR5cGU8VHlwZSwgRnJhbWVUcmF2ZXJzYWw6OlRyYXZlcnNhbEl0ZXJhdG9ySW5jcmVt
ZW50Pj4gZnJhbWVUcmF2ZXJzYWxXaXRoaW4oVHlwZSYgZnJhbWUsIGNvbnN0IEZyYW1lJiBzdGF5
V2l0aGluKQoreworICAgIHJldHVybiB7IHsgJmZyYW1lLCBGcmFtZVRyYXZlcnNhbDo6VHJhdmVy
c2FsSXRlcmF0b3JJbmNyZW1lbnR7ICZzdGF5V2l0aGluIH0gfSwgeyB9IH07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEZyYW1lSXRlcmF0b3JfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVRyZWUuY3BwCmluZGV4IDJlZjIzYjMzNThhOWQyMmUyMGJiZWFlNDYwOGY3YzBiYzcz
YmE3ZmMuLjQ0NjE3OTllMmVlNTdiODZlMGYzZGYwYTE2M2RiZTk5MTE4NTY2YjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVUcmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVHJlZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpAQCAtMzcsOCArMzgsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIEZyYW1lVHJlZTo6fkZyYW1lVHJlZSgpCiB7Ci0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnNldFZpZXcoMCk7CisgICAgZm9yIChhdXRvJiBmcmFt
ZSA6IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpKQorICAgICAgICBmcmFtZS5zZXRWaWV3KG51
bGxwdHIpOwogfQogCiB2b2lkIEZyYW1lVHJlZTo6c2V0TmFtZShjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIApAQCAtMTQ0LDExICsxNDUsMTIgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJlZTo6dW5p
cXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29uc3QKIAog
ICAgIC8vIEZpbmQgdGhlIG5lYXJlc3QgcGFyZW50IHRoYXQgaGFzIGEgZnJhbWUgd2l0aCBhIHBh
dGggaW4gaXQuCiAgICAgVmVjdG9yPEZyYW1lKiwgMTY+IGNoYWluOwotICAgIEZyYW1lKiBmcmFt
ZTsKLSAgICBmb3IgKGZyYW1lID0gJm1fdGhpc0ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUo
KS5zdGFydHNXaXRoKGZyYW1lUGF0aFByZWZpeCkpCisgICAgRnJhbWUqIGZyYW1lID0gbnVsbHB0
cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkpIHsK
KyAgICAgICAgZnJhbWUgPSAmcGFyZW50OworICAgICAgICBpZiAocGFyZW50LnRyZWUoKS51bmlx
dWVOYW1lKCkuc3RhcnRzV2l0aChmcmFtZVBhdGhQcmVmaXgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNoYWluLmFwcGVuZChmcmFtZSk7CisgICAgICAgIGNoYWluLmFwcGVuZCgmcGFy
ZW50KTsKICAgICB9CiAgICAgU3RyaW5nQnVpbGRlciBuYW1lOwogICAgIG5hbWUuYXBwZW5kKGZy
YW1lUGF0aFByZWZpeCk7CkBAIC0xNjksNyArMTcxLDcgQEAgQXRvbWljU3RyaW5nIEZyYW1lVHJl
ZTo6dW5pcXVlQ2hpbGROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcmVxdWVzdGVkTmFtZSkgY29u
c3QKICAgICByZXR1cm4gbmFtZS50b0F0b21pY1N0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBp
blNjb3BlKEZyYW1lJiBmcmFtZSwgVHJlZVNjb3BlJiBzY29wZSkKK3N0YXRpYyBib29sIGluU2Nv
cGUoY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkK
QEAgLTE4NSwxNiArMTg3LDExIEBAIGlubGluZSBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGls
ZCh1bnNpZ25lZCBpbmRleCwgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3Bl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHVuc2lnbmVkIHNjb3BlZEluZGV4ID0g
MDsKLSAgICBmb3IgKEZyYW1lKiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0
ID0gcmVzdWx0LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgq
cmVzdWx0LCAqc2NvcGUpKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGVkSW5kZXggPT0gaW5kZXgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIHNjb3BlZEluZGV4
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJh
bWUpOworICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4u
ZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUpIHsKKyAgICAgICAgcmV0dXJuIGluU2NvcGUo
ZnJhbWUsICpzY29wZSkgJiYgY291bnQrKyA9PSBpbmRleDsKKyAgICB9KTsKIH0KIAogaW5saW5l
IEZyYW1lKiBGcmFtZVRyZWU6OnNjb3BlZENoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
VHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAgLTIwMiwxMSArMTk5LDEwIEBAIGlubGluZSBGcmFt
ZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFRyZWVT
Y29wZSogc2NvcGUpCiAgICAgaWYgKCFzY29wZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+dHJlZSgpLnVu
aXF1ZU5hbWUoKSA9PSBuYW1lICYmIGluU2NvcGUoKmNoaWxkLCAqc2NvcGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGNoaWxkOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNo
aWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6Zmlu
ZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJlbi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBm
cmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1l
ICYmIGluU2NvcGUoZnJhbWUsICpzY29wZSk7CisgICAgfSk7CiB9CiAKIGlubGluZSB1bnNpZ25l
ZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxkQ291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKQEAg
LTIxNCwxMyArMjEwLDEwIEBAIGlubGluZSB1bnNpZ25lZCBGcmFtZVRyZWU6OnNjb3BlZENoaWxk
Q291bnQoVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHVuc2lnbmVkIHNjb3BlZENvdW50ID0gMDsKLSAgICBmb3IgKEZyYW1l
KiByZXN1bHQgPSBmaXJzdENoaWxkKCk7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT50cmVlKCku
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoaW5TY29wZSgqcmVzdWx0LCAqc2NvcGUpKQot
ICAgICAgICAgICAgc2NvcGVkQ291bnQrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NvcGVkQ291
bnQ7CisgICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAg
IHJldHVybiBzdGQ6OmNvdW50X2lmKGNoaWxkcmVuLmJlZ2luKCksIGNoaWxkcmVuLmVuZCgpLCBb
PV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBpblNjb3BlKGZyYW1lLCAq
c2NvcGUpOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVUcmVlOjpzY29wZWRDaGlsZCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKQEAgLTI0MiwyNiArMjM1LDI1IEBAIHVuc2lnbmVkIEZyYW1lVHJl
ZTo6c2NvcGVkQ2hpbGRDb3VudCgpIGNvbnN0CiAKIHVuc2lnbmVkIEZyYW1lVHJlZTo6Y2hpbGRD
b3VudCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIGZvciAoRnJhbWUq
IHJlc3VsdCA9IGZpcnN0Q2hpbGQoKTsgcmVzdWx0OyByZXN1bHQgPSByZXN1bHQtPnRyZWUoKS5u
ZXh0U2libGluZygpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKKyAgICBh
dXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNGcmFtZSk7CisgICAgcmV0dXJuIHN0
ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwogfQogCiBGcmFt
ZSogRnJhbWVUcmVlOjpjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBGcmFtZSog
cmVzdWx0ID0gZmlyc3RDaGlsZCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IHJlc3VsdCAm
JiBpICE9IGluZGV4OyArK2kpCi0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+dHJlZSgpLm5leHRT
aWJsaW5nKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7Cisg
ICAgYXV0byBjaGlsZHJlbiA9IGZyYW1lQ2hpbGRyZW4obV90aGlzRnJhbWUpOworICAgIHJldHVy
biBzdGQ6OmZpbmRfaWYoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCksIFsmXShjb25z
dCBGcmFtZSYpIHsKKyAgICAgICAgcmV0dXJuIGNvdW50KysgPT0gaW5kZXg7CisgICAgfSk7CiB9
CiAKIEZyYW1lKiBGcmFtZVRyZWU6OmNoaWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBpZiAoY2hpbGQtPnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIGNoaWxkcmVuID0gZnJhbWVDaGlsZHJlbihtX3RoaXNG
cmFtZSk7CisgICAgcmV0dXJuIHN0ZDo6ZmluZF9pZihjaGlsZHJlbi5iZWdpbigpLCBjaGlsZHJl
bi5lbmQoKSwgWyZdKGNvbnN0IEZyYW1lJiBmcmFtZSkgeworICAgICAgICByZXR1cm4gZnJhbWUu
dHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lOworICAgIH0pOwogfQogCiBGcmFtZSogRnJhbWVU
cmVlOjpmaW5kKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKQEAgLTI4MCwxNSArMjcy
LDE1IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFNlYXJjaCBzdWJ0cmVlIHN0
YXJ0aW5nIHdpdGggdGhpcyBmcmFtZSBmaXJzdC4KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZt
X3RoaXNGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1f
dGhpc0ZyYW1lKSkgewotICAgICAgICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0g
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDog
ZnJhbWVUcmF2ZXJzYWxXaXRoaW4obV90aGlzRnJhbWUpKSB7CisgICAgICAgIGlmIChmcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgIH0KIAogICAgIC8vIFRoZW4gdGhlIHJlc3Qgb2YgdGhlIHRyZWUuCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV90aGlzRnJhbWUubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT50cmVlKCkudW5p
cXVlTmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fdGhpc0ZyYW1lLm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBpZiAoZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuICZmcmFtZTsKICAgICB9CiAKICAgICAvLyBTZWFyY2ggdGhlIGVudGlyZSB0cmVl
IG9mIGVhY2ggb2YgdGhlIG90aGVyIHBhZ2VzIGluIHRoaXMgbmFtZXNwYWNlLgpAQCAtMzAwLDkg
KzI5Miw5IEBAIEZyYW1lKiBGcmFtZVRyZWU6OmZpbmQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdAogICAgIGZvciAoYXV0byogb3RoZXJQYWdlIDogcGFnZS0+Z3JvdXAoKS5wYWdlcygp
KSB7CiAgICAgICAgIGlmIChvdGhlclBhZ2UgPT0gcGFnZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZvdGhlclBhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWU7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bChvdGhlclBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLnRyZWUo
KS51bmlxdWVOYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmZyYW1lOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zMTcsMTAgKzMwOSwxMCBAQCBib29sIEZyYW1lVHJlZTo6
aXNEZXNjZW5kYW50T2YoY29uc3QgRnJhbWUqIGFuY2VzdG9yKSBjb25zdAogICAgIGlmIChtX3Ro
aXNGcmFtZS5wYWdlKCkgIT0gYW5jZXN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV90aGlzRnJhbWU7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkucGFyZW50KCkpCi0gICAgICAgIGlmIChmcmFtZSA9PSBhbmNlc3RvcikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIGxp
bmVhZ2UgPSBmcmFtZUxpbmVhZ2UobV90aGlzRnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFueV9v
ZihsaW5lYWdlLmJlZ2luKCksIGxpbmVhZ2UuZW5kKCksIFsmXShjb25zdCBGcmFtZSYgZnJhbWUp
IHsKKyAgICAgICAgcmV0dXJuICZmcmFtZSA9PSBhbmNlc3RvcjsKKyAgICB9KTsKIH0KIAogRnJh
bWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VOZXh0KGNvbnN0IEZyYW1lKiBzdGF5V2l0aGluKSBjb25z
dApAQCAtMzg3LDE3ICszNzksMTggQEAgRnJhbWUqIEZyYW1lVHJlZTo6dHJhdmVyc2VQcmV2aW91
c1dpdGhXcmFwKGJvb2wgd3JhcCkgY29uc3QKIEZyYW1lKiBGcmFtZVRyZWU6OmRlZXBMYXN0Q2hp
bGQoKSBjb25zdAogewogICAgIEZyYW1lKiByZXN1bHQgPSAmbV90aGlzRnJhbWU7Ci0gICAgZm9y
IChGcmFtZSogbGFzdCA9IGxhc3RDaGlsZCgpOyBsYXN0OyBsYXN0ID0gbGFzdC0+dHJlZSgpLmxh
c3RDaGlsZCgpKQotICAgICAgICByZXN1bHQgPSBsYXN0OworICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZUxhc3RDaGlsZHJlbihtX3RoaXNGcmFtZSkpCisgICAgICAgIHJlc3VsdCA9ICZmcmFt
ZTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEZyYW1lJiBGcmFtZVRyZWU6OnRvcCgpIGNv
bnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gJm1fdGhpc0ZyYW1lOwotICAgIGZvciAoRnJhbWUq
IHBhcmVudCA9ICZtX3RoaXNGcmFtZTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnRyZWUoKS5w
YXJlbnQoKSkKLSAgICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgRnJhbWUqIGZyYW1lID0gbnVs
bHB0cjsKKyAgICBmb3IgKGF1dG8mIHBhcmVudCA6IGZyYW1lTGluZWFnZShtX3RoaXNGcmFtZSkp
CisgICAgICAgIGZyYW1lID0gJnBhcmVudDsKKyAgICBBU1NFUlQoZnJhbWUpOwogICAgIHJldHVy
biAqZnJhbWU7CiB9CiAKQEAgLTQzMCw4ICs0MjMsOCBAQCBzdGF0aWMgdm9pZCBwcmludEZyYW1l
cyhjb25zdCBXZWJDb3JlOjpGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkZyYW1lKiB0YXJn
ZQogICAgIHByaW50SW5kZW50KGluZGVudCk7CiAgICAgcHJpbnRmKCIgIHVyaT0lc1xuXG4iLCBm
cmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudFVSSSgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgZm9y
IChXZWJDb3JlOjpGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHByaW50RnJh
bWVzKCpjaGlsZCwgdGFyZ2V0RnJhbWUsIGluZGVudCArIDEpOworICAgIGZvciAoY29uc3QgYXV0
byYgY2hpbGQgOiBXZWJDb3JlOjpmcmFtZUNoaWxkcmVuKGZyYW1lKSkKKyAgICAgICAgcHJpbnRG
cmFtZXMoY2hpbGQsIHRhcmdldEZyYW1lLCBpbmRlbnQgKyAxKTsKIH0KIAogdm9pZCBzaG93RnJh
bWVUcmVlKGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCBkNjU3NzRmOTM5ZDA2ZDQwYmVmMzhlZDk1YjViNTM4MWFkZGE0NzZlLi4yNjRm
ZDIyODc4MTg2MWUyMjE0NDNjYjczYjgxMzA2MmFjYTE1MzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udExvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTQx
Nyw3ICs0MTgsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IG5ld1JlY3QpCiAgICAgaWYgKG5ld1JlY3Qud2lkdGgoKSAhPSBvbGRSZWN0LndpZHRoKCkpIHsK
ICAgICAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkucGFnZSgpOwogICAgICAgICBpZiAoZnJhbWUo
KS5pc01haW5GcmFtZSgpICYmIHBhZ2UtPnNldHRpbmdzKCkudGV4dEF1dG9zaXppbmdFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAg
ICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkK
ICAgICAgICAgICAgICAgICBmcmFtZSgpLmRvY3VtZW50KCktPnRleHRBdXRvc2l6ZXIoKS0+cmVj
YWxjdWxhdGVNdWx0aXBsaWVycygpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTYwLDggKzk2MSw4
IEBAIGJvb2wgRnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0CiAKIGJvb2wg
RnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVudEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkgY29u
c3QKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAg
IFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptX2ZyYW1lKSkgeworICAg
ICAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCk7CiAg
ICAgICAgIGlmIChSZW5kZXJMYXllckNvbXBvc2l0b3IqIGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3
ID8gJnJlbmRlclZpZXctPmNvbXBvc2l0b3IoKSA6IDApIHsKICAgICAgICAgICAgIGlmIChjb21w
b3NpdG9yLT5pbkNvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtOTc1LDggKzk3Niw4IEBAIGJvb2wgRnJhbWVWaWV3OjpoYXNDb21wb3NpdGVkQ29udGVu
dEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCkgY29uc3QKIAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBv
c2l0aW5nQW5jZXN0b3IoKSBjb25zdAogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKS50cmVlKCkucGFyZW50KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkucGFy
ZW50KCkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVBbmNlc3RvcnMoKm1fZnJhbWUpKSB7CisgICAg
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCkpIHsKICAgICAgICAgICAgIGlm
ICh2aWV3LT5oYXNDb21wb3NpdGVkQ29udGVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC0xMDA3LDEzICsxMDA4LDExIEBAIGJvb2wgRnJhbWVWaWV3Ojpp
c0VuY2xvc2VkSW5Db21wb3NpdGluZ0xheWVyKCkgY29uc3QKIAogYm9vbCBGcmFtZVZpZXc6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpCiB7Ci0gICAgYm9vbCBhbGxG
cmFtZXNGbHVzaGVkID0gZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0ZyYW1lKCZmcmFtZSgp
KTsKLSAgICAKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lKCkudHJlZSgpLmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS50cmF2ZXJzZU5leHQoJmZyYW1lKCkp
KSB7Ci0gICAgICAgIGJvb2wgZmx1c2hlZCA9IGNoaWxkLT52aWV3KCktPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNGcmFtZSgmZnJhbWUoKSk7Ci0gICAgICAgIGFsbEZyYW1lc0ZsdXNoZWQg
Jj0gZmx1c2hlZDsKLSAgICB9Ci0gICAgcmV0dXJuIGFsbEZyYW1lc0ZsdXNoZWQ7CisgICAgRnJh
bWUqIHJvb3RGcmFtZSA9ICZmcmFtZSgpOworICAgIGF1dG8gdHJhdmVyc2FsID0gZnJhbWVUcmF2
ZXJzYWxXaXRoaW4oKm1fZnJhbWUpOworICAgIHJldHVybiBzdGQ6OmFsbF9vZih0cmF2ZXJzYWwu
YmVnaW4oKSwgdHJhdmVyc2FsLmVuZCgpLCBbPV0oY29uc3QgRnJhbWUmIGZyYW1lKSB7CisgICAg
ICAgIHJldHVybiBmcmFtZS52aWV3KCktPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNGcmFt
ZShyb290RnJhbWUpOworICAgIH0pOwogfQogCiBib29sIEZyYW1lVmlldzo6aXNTb2Z0d2FyZVJl
bmRlcmFibGUoKSBjb25zdApAQCAtMTQ2MCw4ICsxNDU5LDggQEAgYm9vbCBGcmFtZVZpZXc6OnVz
ZVNsb3dSZXBhaW50c0lmTm90T3ZlcmxhcHBlZCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojp1
cGRhdGVDYW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dChtX2ZyYW1lLmdldCgpKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4o
Km1fZnJhbWUpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCkp
CiAgICAgICAgICAgICB2aWV3LT5zZXRDYW5CbGl0T25TY3JvbGwoIXZpZXctPnVzZVNsb3dSZXBh
aW50cygpKTsKICAgICB9CiB9CkBAIC0xODUzLDggKzE4NTIsOCBAQCB2b2lkIEZyYW1lVmlldzo6
c2V0SXNPdmVybGFwcGVkKGJvb2wgaXNPdmVybGFwcGVkKQogICAgICAgICBpZiAoUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphbGxvd3NJbmRlcGVuZGVudGx5Q29tcG9zaXRlZEZyYW1lcyh0aGlzKSkg
ewogICAgICAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHRyaWdnZXIgcmVldmFsdWF0aW9uIGZv
ciB0aGlzIGFuZCBhbGwgZGVzY2VuZGFudCBmcmFtZXMsCiAgICAgICAgICAgICAvLyBzaW5jZSBh
IGZyYW1lIHVzZXMgY29tcG9zaXRpbmcgaWYgYW55IGFuY2VzdG9yIGlzIGNvbXBvc2l0aW5nLgot
ICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgewotICAgICAg
ICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4o
Km1fZnJhbWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFt
ZS5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJMYXllckNv
bXBvc2l0b3ImIGNvbXBvc2l0b3IgPSB2aWV3LT5jb21wb3NpdG9yKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBvc2l0b3Iuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwogICAg
ICAgICAgICAgICAgICAgICBjb21wb3NpdG9yLnNjaGVkdWxlQ29tcG9zaXRpbmdMYXllclVwZGF0
ZSgpOwpAQCAtMjI4MCw4ICsyMjc5LDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyRmx1
c2hUaHJvdHRsaW5nKCkKICAgICBpZiAoZnJhbWUoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LmFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKGZsYWdzKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgewotICAgICAgICBpZiAoUmVu
ZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKKyAgICBmb3Ig
KGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKm1fZnJhbWUpKSB7CisgICAgICAg
IGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxp
bmdFbmFibGVkKGlzTWFpbkxvYWRQcm9ncmVzc2luZyk7CiAgICAgfQogfQpAQCAtMjQ4NywxNCAr
MjQ4NiwxNCBAQCB2b2lkIEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIEZyYW1lVmlldzo6c2VydmljZVNjcmlw
dGVkQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKQogewotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBmcmFtZS0+dmlldygpLT5zZXJ2aWNl
U2Nyb2xsQW5pbWF0aW9ucygpOwotICAgICAgICBmcmFtZS0+YW5pbWF0aW9uKCkuc2VydmljZUFu
aW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwoKm1fZnJh
bWUpKSB7CisgICAgICAgIGZyYW1lLnZpZXcoKS0+c2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKTsK
KyAgICAgICAgZnJhbWUuYW5pbWF0aW9uKCkuc2VydmljZUFuaW1hdGlvbnMoKTsKICAgICB9CiAK
ICAgICBWZWN0b3I8UmVmUHRyPERvY3VtZW50Pj4gZG9jdW1lbnRzOwotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkKLSAgICAgICAgZG9jdW1lbnRzLmFwcGVuZChmcmFtZS0+ZG9jdW1lbnQoKSk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKCptX2ZyYW1lKSkKKyAgICAg
ICAgZG9jdW1lbnRzLmFwcGVuZChmcmFtZS5kb2N1bWVudCgpKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZG9jdW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBkb2N1bWVudHNbaV0t
PnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMobW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKTsK
QEAgLTI1MzMsOCArMjUzMiw4IEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRCYXNlQmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpCiAKIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvciwgYm9v
bCB0cmFuc3BhcmVudCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkp
KSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAg
Zm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsV2l0aGluKCptX2ZyYW1lKSkgeworICAg
ICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpKSB7CiAgICAgICAgICAgICB2
aWV3LT5zZXRUcmFuc3BhcmVudCh0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICB2aWV3LT5zZXRC
YXNlQmFja2dyb3VuZENvbG9yKGJhY2tncm91bmRDb2xvcik7CiAgICAgICAgIH0KQEAgLTM2NzQs
OCArMzY3Myw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gaW4gdGhlIHJlbmRl
ciB0cmVlIG9ubHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZXN0b3JlIHRoZSBzZWxlY3Rpb24g
ZnJvbSB0aGUgRE9NCiAgICAgLy8gYWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlm
IChzaG91bGRQYWludFNlbGVjdGlvbiA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7Ci0gICAgICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByb290ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKm1fZnJhbWUpKSB7CisgICAgICAgICAg
ICBpZiAoUmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAg
ICAgICAgICAgIHJvb3QtPmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0z
NjkwLDggKzM2ODksOCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNuYXBzaG90
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdAogCiAgICAgLy8gUmVzdG9y
ZSBzZWxlY3Rpb24uCiAgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxl
Y3Rpb24pIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkKLSAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CisgICAgICAg
IGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqbV9mcmFtZSkpCisgICAg
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgfQogCiAg
ICAgLy8gUmVzdG9yZSBjYWNoZWQgcGFpbnQgYmVoYXZpb3IuCkBAIC00MDM0LDggKzQwMzMsOCBA
QCB2b2lkIEZyYW1lVmlldzo6c2V0VHJhY2tzUmVwYWludHMoYm9vbCB0cmFja1JlcGFpbnRzKQog
ICAgICAgICAgICAgZnJhbWUoKS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICB9CiAK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLT50cmVlKCkudG9wKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKFJlbmRl
clZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fZnJhbWUtPnRyZWUoKS50b3AoKSkpIHsKKyAg
ICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIo
KSkKICAgICAgICAgICAgIHJlbmRlclZpZXctPmNvbXBvc2l0b3IoKS5zZXRUcmFja3NSZXBhaW50
cyh0cmFja1JlcGFpbnRzKTsKICAgICB9CiAKQEAgLTQxNjksOCArNDE2OCw4IEBAIGJvb2wgRnJh
bWVWaWV3Ojppc0ZsaXBwZWREb2N1bWVudCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3Rp
ZnlXaWRnZXRzSW5BbGxGcmFtZXMoV2lkZ2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7Ci0gICAgICAgIGlmIChG
cmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbFdpdGhpbigqbV9mcmFtZSkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyog
dmlldyA9IGZyYW1lLnZpZXcoKSkKICAgICAgICAgICAgIHZpZXctPm5vdGlmeVdpZGdldHMobm90
aWZpY2F0aW9uKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xv
Y2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCmluZGV4IDQ0ZjUy
MjBmZDM5Y2FkNzFmZGRkN2RlMzU3MzYzOWM3ODg2OWFlMTUuLmVmNTg1ZWNkMmYxZWUyN2UyMTRm
OTg0ZDRkZDQ4MjU5NDgwNTUwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9j
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJTZWN1cml0
eU9yaWdpbi5oIgpAQCAtMTI5LDggKzEzMCw4IEBAIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
TG9jYXRpb246OmFuY2VzdG9yT3JpZ2lucygpIGNvbnN0CiAgICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IG9yaWdpbnMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBpZiAoIW1fZnJhbWUp
CiAgICAgICAgIHJldHVybiBvcmlnaW5zLnJlbGVhc2UoKTsKLSAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9IG1fZnJhbWUtPnRyZWUoKS5wYXJlbnQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS5wYXJlbnQoKSkKLSAgICAgICAgb3JpZ2lucy0+YXBwZW5kKGZyYW1lLT5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJh
bWVBbmNlc3RvcnMoKm1fZnJhbWUpKQorICAgICAgICBvcmlnaW5zLT5hcHBlbmQoZnJhbWUuZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7CiAgICAgcmV0dXJuIG9yaWdp
bnMucmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAzOGJiNDUxMjJjYmM0MmNi
NmI4NWJjMDc2MzE5Y2ViNTkzNmQ2NDc0Li4xYWRlMmY4MzcxZDgwZjYxZmU1YzE2ZTBiZDYzZGU4
NjI4YTI5Yzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtMTA5LDEwICsxMTAsMTAgQEAgc3RhdGlj
IHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZChib29sIGlzT25MaW5lKQogICAgIFZlY3RvcjxSZWY8
RnJhbWU+PiBmcmFtZXM7CiAgICAgCiAgICAgLy8gR2V0IGFsbCB0aGUgZnJhbWVzIG9mIGFsbCB0
aGUgcGFnZXMgaW4gYWxsIHRoZSBwYWdlIGdyb3VwcwotICAgIGZvciAoYXV0byBpdCA9IGFsbFBh
Z2VzLT5iZWdpbigpLCBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgICAgICBmcmFtZXMu
YXBwZW5kKCpmcmFtZSk7Ci0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6bmV0d29y
a1N0YXRlQ2hhbmdlZCgqaXQpOworICAgIGZvciAoYXV0byogcGFnZSA6ICphbGxQYWdlcykgewor
ICAgICAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1l
KCkpKQorICAgICAgICAgICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6bmV0d29ya1N0YXRlQ2hhbmdlZChwYWdlKTsKICAgICB9CiAKICAg
ICBBdG9taWNTdHJpbmcgZXZlbnROYW1lID0gaXNPbkxpbmUgPyBldmVudE5hbWVzKCkub25saW5l
RXZlbnQgOiBldmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwpAQCAtMjM1LDkgKzIzNiw5IEBAIFBh
Z2U6On5QYWdlKCkKICAgICBzZXRHcm91cE5hbWUoU3RyaW5nKCkpOwogICAgIGFsbFBhZ2VzLT5y
ZW1vdmUodGhpcyk7CiAgICAgCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
ZnJhbWUtPndpbGxEZXRhY2hQYWdlKCk7Ci0gICAgICAgIGZyYW1lLT5kZXRhY2hGcm9tUGFnZSgp
OworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsK
KyAgICAgICAgZnJhbWUud2lsbERldGFjaFBhZ2UoKTsKKyAgICAgICAgZnJhbWUuZGV0YWNoRnJv
bVBhZ2UoKTsKICAgICB9CiAKICAgICBtX2VkaXRvckNsaWVudC0+cGFnZURlc3Ryb3llZCgpOwpA
QCAtMjY4LDEwICsyNjksMTEgQEAgUGFnZTo6flBhZ2UoKQogdWludDY0X3QgUGFnZTo6cmVuZGVy
VHJlZVNpemUoKSBjb25zdAogewogICAgIHVpbnQ2NF90IHRvdGFsID0gMDsKLSAgICBmb3IgKGNv
bnN0IEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8
ICFmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKQorICAgIC8vIEZJWE1FOiBSZXZlcnQg
dG8gbWFpbkZyYW1lKCkgd2hlbiBjb25zdCBpdGVyYXRpb24gaXMgc3VwcG9ydGVkLgorICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCgqbV9tYWluRnJhbWUpKSB7CisgICAgICAg
IGlmICghZnJhbWUuZG9jdW1lbnQoKSB8fCAhZnJhbWUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRvdGFsICs9IGZyYW1lLT5kb2N1bWVu
dCgpLT5yZW5kZXJWaWV3KCktPnJlbmRlcmVyQ291bnQoKTsKKyAgICAgICAgdG90YWwgKz0gZnJh
bWUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpLT5yZW5kZXJlckNvdW50KCk7CiAgICAgfQogICAg
IHJldHVybiB0b3RhbDsKIH0KQEAgLTQyNiwyMiArNDI4LDIyIEBAIHZvaWQgUGFnZTo6dXBkYXRl
U3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpCiB7CiAgICAg
aWYgKCFhbGxQYWdlcykKICAgICAgICAgcmV0dXJuOwotICAgIEhhc2hTZXQ8UGFnZSo+OjppdGVy
YXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRl
cmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKworICAgIGZvciAoYXV0byogcGFnZSA6ICph
bGxQYWdlcykKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKHBhZ2Ut
Pm1haW5GcmFtZSgpKSkgewogICAgICAgICAgICAgLy8gSWYgYSBjaGFuZ2UgaW4gdGhlIGdsb2Jh
bCBlbnZpcm9ubWVudCBoYXMgb2NjdXJyZWQsIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8vIG1h
a2Ugc3VyZSBhbGwgdGhlIHByb3BlcnRpZXMgYSByZWNvbXB1dGVkLCB0aGVyZWZvcmUgd2UgaW52
YWxpZGF0ZQogICAgICAgICAgICAgLy8gdGhlIHByb3BlcnRpZXMgY2FjaGUuCi0gICAgICAgICAg
ICBpZiAoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciA9IGZyYW1lLT5kb2N1bWVudCgpLT5z
dHlsZVJlc29sdmVySWZFeGlzdHMoKSkKKyAgICAgICAgICAgIGlmIChTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyID0gZnJhbWUuZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcklmRXhpc3RzKCkp
CiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+aW52YWxpZGF0ZU1hdGNoZWRQcm9wZXJ0
aWVzQ2FjaGUoKTsKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zY2hlZHVsZUZvcmNl
ZFN0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zY2hlZHVsZUZv
cmNlZFN0eWxlUmVjYWxjKCk7CiAgICAgICAgIH0KIH0KIAogdm9pZCBQYWdlOjpzZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMoKQogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0g
ICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBm
b3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICAgICAg
ZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwogICAgIH0K
IH0KQEAgLTQ2Miw5ICs0NjQsOSBAQCB2b2lkIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVs
b2FkKQogICAgICAgICBpZiAoIXJlbG9hZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYg
KGZyYW1lLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLmNvbnRhaW5zUGx1Z2lucygpKQotICAg
ICAgICAgICAgICAgIGZyYW1lc05lZWRpbmdSZWxvYWQuYXBwZW5kKCpmcmFtZSk7CisgICAgICAg
IGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdlLm1haW5GcmFtZSgpKSkgewor
ICAgICAgICAgICAgaWYgKGZyYW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQ
bHVnaW5zKCkpCisgICAgICAgICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoZnJh
bWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00ODEsOCArNDgzLDggQEAgUGx1Z2luRGF0YSYg
UGFnZTo6cGx1Z2luRGF0YSgpIGNvbnN0CiAKIGlubGluZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIq
IFBhZ2U6OnRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmIChNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVy
ID0gZnJhbWUtPmRvY3VtZW50KCktPnRha2VBbnlNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKSkKKyAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAg
ICAgIGlmIChNZWRpYUNhblN0YXJ0TGlzdGVuZXIqIGxpc3RlbmVyID0gZnJhbWUuZG9jdW1lbnQo
KS0+dGFrZUFueU1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigpKQogICAgICAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTY2OSw4ICs2NzEsOCBAQCB2b2lkIFBh
Z2U6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcnMpCiAgICAgfQogCiAgICAgbV9kZWZlcnNM
b2FkaW5nID0gZGVmZXJzOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFt
ZS0+bG9hZGVyKCkuc2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOworICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmxvYWRlcigp
LnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAogdm9pZCBQYWdlOjpjbGVhclVuZG9SZWRv
T3BlcmF0aW9ucygpCkBAIC02OTcsOSArNjk5LDggQEAgdm9pZCBQYWdlOjpzZXRNZWRpYVZvbHVt
ZShmbG9hdCB2b2x1bWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbWVkaWFWb2x1bWUgPSB2
b2x1bWU7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgZnJhbWUtPmRvY3Vt
ZW50KCktPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50
KCktPm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiB9CiAKIHZvaWQgUGFnZTo6c2V0Wm9vbWVkT3V0
UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQpAQCAtNzMwLDggKzczMSw4IEBAIHZvaWQgUGFn
ZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2lu
LCBib29sIGluU3RhYmxlCiAgICAgICAgIH0KICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NS
SVBUKQogICAgICAgICBpZiAoaW5TdGFibGVTdGF0ZSkgewotICAgICAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWRBbmRTdGFibGUoKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZnJhbWUg
OiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgICAgICAgICAgZnJhbWUuZG9j
dW1lbnQoKS0+cGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEFuZFN0YWJsZSgpOwogICAgICAgICB9CiAj
ZW5kaWYKICAgICAgICAgcmV0dXJuOwpAQCAtNzY4LDggKzc2OSw4IEBAIHZvaWQgUGFnZTo6c2V0
UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29s
IGluU3RhYmxlCiAKICNpZiBFTkFCTEUoTUVESUFfQ09OVFJPTFNfU0NSSVBUKQogICAgIGlmIChp
blN0YWJsZVN0YXRlKSB7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPnBhZ2VTY2FsZUZhY3RvckNoYW5nZWRBbmRTdGFibGUoKTsK
KyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkK
KyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnBhZ2VTY2FsZUZhY3RvckNoYW5nZWRBbmRT
dGFibGUoKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTc4OSw4ICs3OTAsOCBAQCB2b2lkIFBhZ2U6
OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIG1haW5GcmFtZSgp
LmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogICAgIHBhZ2VDYWNoZSgpLT5tYXJr
UGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQodGhpcyk7CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkKLSAgICAgICAgZnJhbWUtPmVkaXRvcigpLmRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
OworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisg
ICAgICAgIGZyYW1lLmVkaXRvcigpLmRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogCiAgICAg
cGFnZUNhY2hlKCktPm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKICAgICBHcmFw
aGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CkBAIC04MjQsOCAr
ODI1LDggQEAgdm9pZCBQYWdlOjpsb2NrQWxsT3ZlcmxheVNjcm9sbGJhcnNUb0hpZGRlbihib29s
IGxvY2tPdmVybGF5U2Nyb2xsYmFycykKIAogICAgIHZpZXctPmxvY2tPdmVybGF5U2Nyb2xsYmFy
U3RhdGVUb0hpZGRlbihsb2NrT3ZlcmxheVNjcm9sbGJhcnMpOwogICAgIAotICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZp
ZXcoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkp
KSB7CisgICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUudmlldygpOwogICAgICAg
ICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC04MzMsMTAgKzgz
NCw4IEBAIHZvaWQgUGFnZTo6bG9ja0FsbE92ZXJsYXlTY3JvbGxiYXJzVG9IaWRkZW4oYm9vbCBs
b2NrT3ZlcmxheVNjcm9sbGJhcnMpCiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUFyZWFzKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZm9yIChIYXNoU2V0PFNjcm9sbGFibGVBcmVh
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2Nyb2xsYWJsZUFyZWFzLT5iZWdpbigpLCBlbmQgPSBz
Y3JvbGxhYmxlQXJlYXMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFNj
cm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9ICppdDsKKyAgICAgICAgZm9yIChhdXRvKiBz
Y3JvbGxhYmxlQXJlYSA6ICpzY3JvbGxhYmxlQXJlYXMpCiAgICAgICAgICAgICBzY3JvbGxhYmxl
QXJlYS0+bG9ja092ZXJsYXlTY3JvbGxiYXJTdGF0ZVRvSGlkZGVuKGxvY2tPdmVybGF5U2Nyb2xs
YmFycyk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAgICAgCkBAIC04OTIsOCArODkxLDggQEAgdm9p
ZCBQYWdlOjpzZXRJc0luV2luZG93KGJvb2wgaXNJbldpbmRvdykKIAogdm9pZCBQYWdlOjpzZXRJ
c0luV2luZG93SW50ZXJuYWwoYm9vbCBpc0luV2luZG93KQogewotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCkpCisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkg
eworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS52aWV3KCkpCiAgICAg
ICAgICAgICBmcmFtZVZpZXctPnNldElzSW5XaW5kb3coaXNJbldpbmRvdyk7CiAgICAgfQogCkBA
IC05MDQsMTggKzkwMywxOCBAQCB2b2lkIFBhZ2U6OnNldElzSW5XaW5kb3dJbnRlcm5hbChib29s
IGlzSW5XaW5kb3cpCiB2b2lkIFBhZ2U6OnN1c3BlbmRTY3JpcHRlZEFuaW1hdGlvbnMoKQogewog
ICAgIG1fc2NyaXB0ZWRBbmltYXRpb25zU3VzcGVuZGVkID0gdHJ1ZTsKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+c3VzcGVuZFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNh
bGxiYWNrcygpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJh
bWUoKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgICAgICBmcmFt
ZS5kb2N1bWVudCgpLT5zdXNwZW5kU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyQ2FsbGJhY2tz
KCk7CiAgICAgfQogfQogCiB2b2lkIFBhZ2U6OnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9ucygpCiB7
CiAgICAgbV9zY3JpcHRlZEFuaW1hdGlvbnNTdXNwZW5kZWQgPSBmYWxzZTsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVzdW1lU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
Q2FsbGJhY2tzKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPnJlc3VtZVNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlckNhbGxiYWNr
cygpOwogICAgIH0KIH0KIApAQCAtOTIzLDkgKzkyMiw5IEBAIHZvaWQgUGFnZTo6c2V0SXNWaXN1
YWxseUlkbGVJbnRlcm5hbChib29sIGlzVmlzdWFsbHlJZGxlKQogewogICAgIHNldFRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQoaXNWaXN1YWxseUlkbGUpOwogICAgIAotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNl
TmV4dCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJvdHRsZWQo
aXNWaXN1YWxseUlkbGUpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbCht
YWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpCisgICAgICAgICAg
ICBmcmFtZS5kb2N1bWVudCgpLT5zY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXJTZXRUaHJvdHRs
ZWQoaXNWaXN1YWxseUlkbGUpOwogICAgIH0KIH0KIApAQCAtOTU1LDkgKzk1NCw5IEBAIHZvaWQg
UGFnZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKQogICAgICAgICAgICAgbV91c2Vy
U3R5bGVTaGVldCA9IFN0cmluZzo6ZnJvbVVURjgoc3R5bGVTaGVldEFzVVRGOC5kYXRhKCksIHN0
eWxlU2hlZXRBc1VURjguc2l6ZSgpKTsKICAgICB9CiAKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+c3R5bGVTaGVldENvbGxlY3Rpb24oKS51cGRhdGVQYWdlVXNlclNoZWV0KCk7
CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgewor
ICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50
KCktPnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXBkYXRlUGFnZVVzZXJTaGVldCgpOwogICAgIH0K
IH0KIApAQCAtMTAxNywxNCArMTAxNiwxNCBAQCB2b2lkIFBhZ2U6OnJlbW92ZUFsbFZpc2l0ZWRM
aW5rcygpCiAKIHZvaWQgUGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCkKIHsKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+
dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckFsbExpbmtzKCk7CisgICAgZm9y
IChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJh
bWUuZG9jdW1lbnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckFsbExp
bmtzKCk7CiB9CiAKIHZvaWQgUGFnZTo6aW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsoTGlua0hhc2gg
bGlua0hhc2gpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JMaW5r
KGxpbmtIYXNoKTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZy
YW1lKCkpKQorICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCkuaW52
YWxpZGF0ZVN0eWxlRm9yTGluayhsaW5rSGFzaCk7CiB9CiAKIHZvaWQgUGFnZTo6c2V0RGVidWdn
ZXIoSlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCkBAIC0xMDM0LDggKzEwMzMsOCBAQCB2b2lkIFBh
Z2U6OnNldERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogCiAgICAgbV9kZWJ1Z2dl
ciA9IGRlYnVnZ2VyOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAg
ZnJhbWUtPnNjcmlwdCgpLmF0dGFjaERlYnVnZ2VyKG1fZGVidWdnZXIpOworICAgIGZvciAoYXV0
byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLnNj
cmlwdCgpLmF0dGFjaERlYnVnZ2VyKG1fZGVidWdnZXIpOwogfQogCiBTdG9yYWdlTmFtZXNwYWNl
KiBQYWdlOjpzZXNzaW9uU3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlKQpAQCAtMTA3MSwxNyAr
MTA3MCwxNyBAQCB2b2lkIFBhZ2U6OnNldE1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZv
ciAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLnRlbGxD
bGllbnRBYm91dFBhc3RNZW1vcnlDYWNoZUxvYWRzKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZnJhbWUubG9hZGVyKCkudGVs
bENsaWVudEFib3V0UGFzdE1lbW9yeUNhY2hlTG9hZHMoKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRN
aW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgbWluaW11bVRpbWVySW50ZXJ2YWwpCiB7CiAgICAg
ZG91YmxlIG9sZFRpbWVySW50ZXJ2YWwgPSBtX21pbmltdW1UaW1lckludGVydmFsOwogICAgIG1f
bWluaW11bVRpbWVySW50ZXJ2YWwgPSBtaW5pbXVtVGltZXJJbnRlcnZhbDsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHRXaXRoV3JhcChmYWxzZSkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVu
dCgpKQotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmFkanVzdE1pbmltdW1UaW1lcklu
dGVydmFsKG9sZFRpbWVySW50ZXJ2YWwpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRy
YXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpCisg
ICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5hZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChv
bGRUaW1lckludGVydmFsKTsKICAgICB9CiB9CiAKQEAgLTExMDgsMzEgKzExMDcsMzAgQEAgdm9p
ZCBQYWdlOjpzZXRUaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBtX3Rp
bWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIG1fdGltZXJBbGlnbm1lbnRJbnRl
cnZhbCA9IGVuYWJsZWQgPyBTZXR0aW5nczo6aGlkZGVuUGFnZURPTVRpbWVyQWxpZ25tZW50SW50
ZXJ2YWwoKSA6IFNldHRpbmdzOjpkZWZhdWx0RE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpOwog
ICAgIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dFdpdGhXcmFwKGZhbHNlKSkgewotICAgICAgICBp
ZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZGlk
Q2hhbmdlVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50
KCkpCisgICAgICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5kaWRDaGFuZ2VUaW1lckFsaWdubWVu
dEludGVydmFsKCk7CiAgICAgfQogfQogCiB2b2lkIFBhZ2U6OmRuc1ByZWZldGNoaW5nU3RhdGVD
aGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPmRv
Y3VtZW50KCktPmluaXRETlNQcmVmZXRjaCgpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFt
ZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmluaXRE
TlNQcmVmZXRjaCgpOwogfQogCiBWZWN0b3I8UmVmPFBsdWdpblZpZXdCYXNlPj4gUGFnZTo6cGx1
Z2luVmlld3MoKQogewogICAgIFZlY3RvcjxSZWY8UGx1Z2luVmlld0Jhc2U+PiB2aWV3czsKIAot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkgeworICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAg
ICAgIGlmICghdmlldykKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGZvciAoYXV0byBp
dCA9IHZpZXctPmNoaWxkcmVuKCkuYmVnaW4oKSwgZW5kID0gdmlldy0+Y2hpbGRyZW4oKS5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBXaWRnZXQqIHdpZGdldCA9ICgqaXQp
LmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIHdpZGdldCA6IHZpZXctPmNoaWxkcmVuKCkpIHsK
ICAgICAgICAgICAgIGlmICh3aWRnZXQtPmlzUGx1Z2luVmlld0Jhc2UoKSkKLSAgICAgICAgICAg
ICAgICB2aWV3cy5hcHBlbmQoKnRvUGx1Z2luVmlld0Jhc2Uod2lkZ2V0KSk7CisgICAgICAgICAg
ICAgICAgdmlld3MuYXBwZW5kKCp0b1BsdWdpblZpZXdCYXNlKHdpZGdldC5nZXQoKSkpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0xMTQxLDggKzExMzksOCBAQCBWZWN0b3I8UmVmPFBsdWdpblZp
ZXdCYXNlPj4gUGFnZTo6cGx1Z2luVmlld3MoKQogCiB2b2lkIFBhZ2U6OnN0b3JhZ2VCbG9ja2lu
Z1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZURpZENoYW5nZSgpOworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPnN0b3JhZ2VCbG9ja2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiAKICAgICAv
LyBDb2xsZWN0IHRoZSBQbHVnaW5WaWV3cyBpbiB0byBhIHZlY3RvciB0byBlbnN1cmUgdGhhdCBh
Y3Rpb24gdGhlIHBsdWctaW4gdGFrZXMKICAgICAvLyBmcm9tIGJlbG93IHN0b3JhZ2VCbG9ja2lu
Z1N0YXRlQ2hhbmdlZCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgbGlmZXRpbWUuCkBAIC0xMTY2LDcg
KzExNjQsNyBAQCB2b2lkIFBhZ2U6OmNoZWNrU3ViZnJhbWVDb3VudENvbnNpc3RlbmN5KCkgY29u
c3QKICAgICBBU1NFUlQobV9zdWJmcmFtZUNvdW50ID49IDApOwogCiAgICAgaW50IHN1YmZyYW1l
Q291bnQgPSAwOwotICAgIGZvciAoY29uc3QgRnJhbWUqIGZyYW1lID0gJm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgIGZvciAoY29u
c3QgYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCiAgICAgICAgICsr
c3ViZnJhbWVDb3VudDsKIAogICAgIEFTU0VSVChtX3N1YmZyYW1lQ291bnQgKyAxID09IHN1YmZy
YW1lQ291bnQpOwpAQCAtMTE3OCw4ICsxMTc2LDggQEAgdm9pZCBQYWdlOjpyZXN1bWVBbmltYXRp
bmdJbWFnZXMoKQogICAgIC8vIERyYXdpbmcgbW9kZWxzIHdoaWNoIGNhY2hlIHBhaW50ZWQgY29u
dGVudCB3aGlsZSBvdXQtb2Ytd2luZG93IChXZWJLaXQyJ3MgY29tcG9zaXRlZCBkcmF3aW5nIGFy
ZWFzLCBldGMuKQogICAgIC8vIHJlcXVpcmUgdGhhdCB3ZSByZXBhaW50IGFuaW1hdGVkIGltYWdl
cyB0byBraWNrc3RhcnQgdGhlIGFuaW1hdGlvbiBsb29wLgogCi0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSBtX21haW5GcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFp
bkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVu
dFJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJWaWV3LT5yZXN1bWVQYXVzZWRJbWFnZUFu
aW1hdGlvbnNJZk5lZWRlZCgpOwogICAgIH0KIH0KQEAgLTEyMjUsOCArMTIyMyw4IEBAIHZvaWQg
UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAgICAgaWYgKGlzVmlz
aWJsZSkgewogICAgICAgICBtX2lzUHJlcmVuZGVyID0gZmFsc2U7CiAKLSAgICAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCku
dHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IGZyYW1lLT52aWV3KCkpCisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNh
bChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9
IGZyYW1lLnZpZXcoKSkKICAgICAgICAgICAgICAgICBmcmFtZVZpZXctPmRpZE1vdmVPbnNjcmVl
bigpOwogICAgICAgICB9CiAKQEAgLTEyNDIsOCArMTI0MCw4IEBAIHZvaWQgUGFnZTo6c2V0SXNW
aXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAgICAgfQogCiAgICAgVmVjdG9yPFJlZjxE
b2N1bWVudD4+IGRvY3VtZW50czsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1l
LmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQotICAg
ICAgICBkb2N1bWVudHMuYXBwZW5kKCpmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgZm9yIChhdXRv
JiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkKKyAgICAgICAgZG9jdW1lbnRz
LmFwcGVuZCgqZnJhbWUuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IGRvY3VtZW50cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCiAgICAgICAgIGRvY3VtZW50c1tp
XS0+dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpOwpAQCAtMTI1Miw4ICsxMjUwLDggQEAgdm9pZCBQ
YWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKICAgICAgICAgaWYgKG1f
c2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQogICAg
ICAgICAgICAgbWFpbkZyYW1lKCkuYW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKIAot
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgZm9yIChhdXRvJiBmcmFtZSA6
IGZyYW1lVHJhdmVyc2FsKG1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gZnJhbWUudmlldygpKQogICAgICAgICAgICAgICAgIGZyYW1lVmlldy0+
d2lsbE1vdmVPZmZzY3JlZW4oKTsKICAgICAgICAgfQogCkBAIC0xNDcyLDE0ICsxNDcwLDE0IEBA
IHZvaWQgUGFnZTo6YWRkUmVsZXZhbnRVbnBhaW50ZWRPYmplY3QoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IExheW91dFJlY3QmIG9iCiAKIHZvaWQgUGFnZTo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAg
ICAgZnJhbWUtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZy
YW1lLnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwogfQogCiB2b2lkIFBh
Z2U6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIHsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJhbWUtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1haW5G
cmFtZSgpKSkKKyAgICAgICAgZnJhbWUucmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKIAogICAgIHJlc3VtZUFuaW1hdGluZ0ltYWdlcygpOwogfQpAQCAtMTUzNyw4ICsxNTM1
LDggQEAgdm9pZCBQYWdlOjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hh
bmdlZCgpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogdm9pZCBQYWdlOjpjYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwobWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5k
b2N1bWVudCgpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9CiAjZW5kaWYKIApAQCAt
MTU5Myw4ICsxNTkxLDggQEAgdm9pZCBQYWdlOjpzZXRTZXNzaW9uSUQoU2Vzc2lvbklEIHNlc3Np
b25JRCkKICAgICBpZiAoIXByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCi0gICAgICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5wcml2YXRlQnJvd3NpbmdTdGF0ZURpZENoYW5nZSgpOworICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbChtYWluRnJhbWUoKSkpCisgICAgICAgIGZyYW1lLmRvY3VtZW50
KCktPnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKCk7CiAKICAgICAvLyBDb2xsZWN0IHRo
ZSBQbHVnaW5WaWV3cyBpbiB0byBhIHZlY3RvciB0byBlbnN1cmUgdGhhdCBhY3Rpb24gdGhlIHBs
dWctaW4gdGFrZXMKICAgICAvLyBmcm9tIGJlbG93IHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdl
ZCBkb2VzIG5vdCBhZmZlY3QgdGhlaXIgbGlmZXRpbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAKaW5kZXggYjVmMWNhMzQxYzgyMTQ2NzI3ZmNmNWUx
ZWQxZmQwM2EyNzAwMDhiMy4uYTdiZjVkMjJjNTJkZjFkNDkxNzQ4Y2YwMjFjM2U1NTIxMGY4NGZi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcApA
QCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1
bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC00
NCw4ICs0NSw4IEBAIFBhZ2VHcm91cExvYWREZWZlcnJlcjo6UGFnZUdyb3VwTG9hZERlZmVycmVy
KFBhZ2UmIHBhZ2UsIGJvb2wgZGVmZXJTZWxmKQogCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBj
b2RlIGlzIG5vdCBsb2dpY2FsbHkgcGFydCBvZiBsb2FkIGRlZmVycmluZywgYnV0IHdlIGRvIG5v
dCB3YW50IEpTIGNvZGUgZXhlY3V0ZWQgYmVuZWF0aCBtb2RhbAogICAgICAgICAgICAgICAgIC8v
IHdpbmRvd3Mgb3Igc2hlZXRzLCB3aGljaCBpcyBleGFjdGx5IHdoZW4gUGFnZUdyb3VwTG9hZERl
ZmVycmVyIGlzIHVzZWQuCi0gICAgICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmb3Ro
ZXJQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnN1c3BlbmRT
Y2hlZHVsZWRUYXNrcyhBY3RpdmVET01PYmplY3Q6OldpbGxEZWZlckxvYWRpbmcpOworICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChvdGhlclBhZ2UtPm1h
aW5GcmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+c3VzcGVu
ZFNjaGVkdWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6V2lsbERlZmVyTG9hZGluZyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02Miw4ICs2Myw4IEBAIFBhZ2VHcm91cExv
YWREZWZlcnJlcjo6flBhZ2VHcm91cExvYWREZWZlcnJlcigpCiAgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gbV9kZWZlcnJlZEZyYW1lc1tpXS0+cGFnZSgpKSB7CiAgICAgICAgICAgICBwYWdlLT5z
ZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKIAotICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnJlc3VtZVNjaGVk
dWxlZFRhc2tzKEFjdGl2ZURPTU9iamVjdDo6V2lsbERlZmVyTG9hZGluZyk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKQor
ICAgICAgICAgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPnJlc3VtZVNjaGVkdWxlZFRhc2tzKEFj
dGl2ZURPTU9iamVjdDo6V2lsbERlZmVyTG9hZGluZyk7CiAgICAgICAgIH0KICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGM4MDI1OWNmMTAwZjY4Mjgw
ODcxNjY4MzE3NjIwM2JiMDFlM2Q3N2YuLmMwOWRmMzFlMjg1NzFlYjBjOWYwZjM0ZDg5Yzg5Zjcw
MmI3ZjFhMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgpAQCAtMjQ4LDggKzI0OSw4IEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICAgICAg
fQogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxkRnJhbWUgPSBmcmFtZS0+dHJlZSgpLmZp
cnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS5u
ZXh0U2libGluZygpKQotICAgICAgICBzZXJpYWxpemVGcmFtZShjaGlsZEZyYW1lKTsKKyAgICBm
b3IgKGF1dG8mIGNoaWxkRnJhbWUgOiBmcmFtZUNoaWxkcmVuKCpmcmFtZSkpCisgICAgICAgIHNl
cmlhbGl6ZUZyYW1lKCZjaGlsZEZyYW1lKTsKIH0KIAogdm9pZCBQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBVUkwm
IHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZTg2NTNkZmFkNmMxMjY0ZWYzZDQ4
NzQ0MzRhMDAwY2ZlN2NiODNlYS4uMjAwNjI0YTlkMmM2ZDhiNWNhZGE5MDI2ZjJkMDgzNzViNDU5
ZDc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250R2VuZXJp
Y0ZhbWlsaWVzLmgiCisjaW5jbHVkZSAiRnJhbWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1l
bnQuaCIKQEAgLTUzLDkgKzU0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9p
ZCBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQogewotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLT5zZXRJbWFnZXNFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2Vz
RW5hYmxlZCgpKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5KCkpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChwYWdl
LT5tYWluRnJhbWUoKSkpIHsKKyAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKS0+c2V0SW1hZ2VzRW5hYmxlZChwYWdlLT5zZXR0aW5ncygpLmFyZUltYWdlc0Vu
YWJsZWQoKSk7CisgICAgICAgIGZyYW1lLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVy
KCktPnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KCkpOwogICAgIH0KIH0KIApAQCAtMzQzLDggKzM0NCw4IEBAIHZvaWQgU2V0dGluZ3M6
OnNldFRleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yKGZsb2F0IGZvbnRTY2FsZUZhY3RvcikK
ICAgICBtX3RleHRBdXRvc2l6aW5nRm9udFNjYWxlRmFjdG9yID0gZm9udFNjYWxlRmFjdG9yOwog
CiAgICAgLy8gRklYTUU6IEkgd29uZGVyIGlmIHRoaXMgbmVlZHMgdG8gdHJhdmVyc2UgZnJhbWVz
IGxpa2UgaW4gV2ViVmlld0ltcGw6OnJlc2l6ZSwgb3Igd2hldGhlciB0aGVyZSBpcyBvbmx5IG9u
ZSBkb2N1bWVudCBwZXIgU2V0dGluZ3MgaW5zdGFuY2U/Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dGV4dEF1dG9zaXplcigpLT5y
ZWNhbGN1bGF0ZU11bHRpcGxpZXJzKCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKG1fcGFnZS0+bWFpbkZyYW1lKCkpKQorICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT50
ZXh0QXV0b3NpemVyKCktPnJlY2FsY3VsYXRlTXVsdGlwbGllcnMoKTsKIAogICAgIG1fcGFnZS0+
c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IGI4Yzg4NTE5NjVhOTE0NDZjNmZlZjQ5NThiZjMx
YjNiZWFmY2Q4M2QuLmMwYjkwMmE5Nzg5MTU3ZWQ2NTVlNmM3N2M3MGI5NTI0ZjEwYmRlNjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIK
IAorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKQEAgLTUw
NCwxMyArNTA1LDE2IEBAIGJvb2wgY2FuU2Nyb2xsSW5EaXJlY3Rpb24oY29uc3QgRnJhbWUqIGZy
YW1lLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIHN0YXRpYyBMYXlvdXRSZWN0IHJlY3RU
b0Fic29sdXRlQ29vcmRpbmF0ZXMoRnJhbWUqIGluaXRpYWxGcmFtZSwgY29uc3QgTGF5b3V0UmVj
dCYgaW5pdGlhbFJlY3QpCiB7CisgICAgaWYgKCFpbml0aWFsRnJhbWUpCisgICAgICAgIHJldHVy
biBpbml0aWFsUmVjdDsKKwogICAgIExheW91dFJlY3QgcmVjdCA9IGluaXRpYWxSZWN0OwotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gaW5pdGlhbEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUt
Pm93bmVyRWxlbWVudCgpKSB7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lTGluZWFnZSgq
aW5pdGlhbEZyYW1lKSkgeworICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGZyYW1lLm93
bmVyRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgcmVjdC5t
b3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOwogICAgICAg
ICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZzZXRQYXJlbnQoKSkpOwotICAg
ICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIHJlY3QubW92ZSgoLWZyYW1lLnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAppbmRleCBmNmE5ZDVhYTVmOWExOWVmNTA3OTUxZjI4
NGRlNDk4ZjZkYTU3ODg5Li4xMjczYzY0ODcwYjZjNThjZmVhYmFiMGI1NjViNTM1NjFiNzMzMTli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVXNlclNjcmlwdC5oIgpAQCAt
MTg2LDkgKzE4Nyw5IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2Vy
Q29udGVudCgpCiB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6aW52YWxpZGF0ZUluamVjdGVk
U3R5bGVTaGVldENhY2hlSW5BbGxGcmFtZXMoKQogewogICAgIGZvciAoYXV0byYgcGFnZSA6IG1f
cGFnZXMpIHsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOwotICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgICAgICBmb3IgKGF1
dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWwocGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAg
ICAgICBmcmFtZS5kb2N1bWVudCgpLT5zdHlsZVNoZWV0Q29sbGVjdGlvbigpLmludmFsaWRhdGVJ
bmplY3RlZFN0eWxlU2hlZXRDYWNoZSgpOworICAgICAgICAgICAgZnJhbWUuZG9jdW1lbnQoKS0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAgICAgICAgIH0KICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCmluZGV4IDlkMmI1NDQzZDcwMDM2ZTFjZThiNjgwYzJlZjdmY2Q3ZmRkMDBk
NzYuLmVmNzYyNTM0MWJjMjQzZmM2YmJhYmZmOGNlNzMxN2Q4NzY2YWNhNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCkBAIC0yNTYsOCArMjU3LDggQEAgdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQogICAgIHN1c3BlbmRB
bmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgpKTsKIAogICAgIC8vIFRyYXZl
cnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5hbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVuKG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5hbmlt
YXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwogCiAgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7
CiB9CkBAIC0yNzAsOCArMjcxLDggQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgcmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZnJh
bWUuZG9jdW1lbnQoKSk7CiAKICAgICAvLyBUcmF2ZXJzZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZy
YW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+YW5pbWF0aW9uKCku
cmVzdW1lQW5pbWF0aW9ucygpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVu
KG1fZnJhbWUpKQorICAgICAgICBjaGlsZC5hbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zKCk7
CiAKICAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCmluZGV4IDI0NWE5OTkyMzJmYzQzNTc1YzJiMzJlMTNiOThiODlkNzJlMWE4MDAuLjJm
NzlmZWQ3MTBjM2MzNjE5Mzk4OTM2MGM0Nzg3NDc0OGJiMzYzMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0ICJFdmVudEhhbmRsZXIu
aCIKICNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKICNpbXBvcnQgIkZvcm1Db250cm9sbGVyLmgiCisj
aW1wb3J0ICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJGcmFtZVNlbGVjdGlvbi5oIgogI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJIVE1MQXJlYUVsZW1lbnQuaCIKQEAgLTY2Myw4
ICs2NjQsOCBAQCB2b2lkIEZyYW1lOjpzZXRUaW1lcnNQYXVzZWRJbnRlcm5hbChib29sIHBhdXNl
ZCkKICAgICB9CiAKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBhbGwgc3ViZnJhbWVzJyBz
dGF0ZXMgYXJlIHVwIHRvIGRhdGUuCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0cmVlKCkuZmly
c3RDaGlsZCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGZyYW1lLT5zZXRUaW1lcnNQYXVzZWRJbnRlcm5hbChwYXVzZWQpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBmcmFtZUNoaWxkcmVuKCp0aGlzKSkKKyAgICAgICAgZnJhbWUuc2V0VGlt
ZXJzUGF1c2VkSW50ZXJuYWwocGF1c2VkKTsKIH0KIAogdm9pZCBGcmFtZTo6ZGlzcGF0Y2hQYWdl
SGlkZUV2ZW50QmVmb3JlUGF1c2UoKQpAQCAtNjczLDggKzY3NCw4IEBAIHZvaWQgRnJhbWU6OmRp
c3BhdGNoUGFnZUhpZGVFdmVudEJlZm9yZVBhdXNlKCkKICAgICBpZiAoIWlzTWFpbkZyYW1lKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gdGhpczsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQodGhpcykpCi0gICAgICAgIGZyYW1l
LT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdlVHJhbnNpdGlvbkV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIHRydWUpLCBkb2N1bWVudCgp
KTsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2ZXJzYWxXaXRoaW4oKnRoaXMpKQor
ICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChQYWdl
VHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBhZ2VoaWRlRXZlbnQsIHRydWUp
LCBkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBGcmFtZTo6ZGlzcGF0Y2hQYWdlU2hvd0V2ZW50QmVm
b3JlUmVzdW1lKCkKQEAgLTY4Myw4ICs2ODQsOCBAQCB2b2lkIEZyYW1lOjpkaXNwYXRjaFBhZ2VT
aG93RXZlbnRCZWZvcmVSZXN1bWUoKQogICAgIGlmICghaXNNYWluRnJhbWUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSB0aGlzOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCh0aGlzKSkKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkucGFnZXNob3dFdmVudCwgdHJ1ZSksIGRvY3VtZW50KCkpOworICAgIGZv
ciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbigqdGhpcykpCisgICAgICAgIGZy
YW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9u
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZXNob3dFdmVudCwgdHJ1ZSksIGRvY3VtZW50
KCkpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25CYXNlVG9DdXJyZW50U2Vs
ZWN0aW9uKCkKQEAgLTczNCw4ICs3MzUsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lOjpyYW5n
ZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50KCkgY29uc3QKIHZvaWQgRnJhbWU6OnJlY3Vyc2l2ZVNl
dFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBzZWxlY3Rpb24o
KS5zZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxlZChlbmFibGVkKTsKLSAgICBmb3IgKEZyYW1lKiBj
aGlsZCA9IHRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCku
bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnJlY3Vyc2l2ZVNldFVwZGF0ZUFwcGVhcmFu
Y2VFbmFibGVkKGVuYWJsZWQpOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFtZUNoaWxkcmVu
KCp0aGlzKSkKKyAgICAgICAgY2hpbGQucmVjdXJzaXZlU2V0VXBkYXRlQXBwZWFyYW5jZUVuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKIC8vIEZJWE1FOiBCcmVhayB0aGlzIGZ1bmN0aW9uIHVwIGludG8g
cGllY2VzIHdpdGggZGVzY3JpcHRpdmUgZnVuY3Rpb24gbmFtZXMgc28gdGhhdCBpdCdzIGVhc2ll
ciB0byBmb2xsb3cuCkBAIC04MTcsMTEgKzgxOCwxMyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJw
cmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiBzdGF0aWMgYm9vbCBhbnlGcmFtZUhh
c1RpbGVkTGF5ZXJzKEZyYW1lKiByb290RnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSByb290RnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KHJv
b3RGcmFtZSkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5jb250YWluc1RpbGVkQmFja2luZ0xheWVy
cygpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIXJvb3RGcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byB0
cmF2ZXJzYWwgPSBmcmFtZVRyYXZlcnNhbFdpdGhpbigqcm9vdEZyYW1lKTsKKyAgICByZXR1cm4g
c3RkOjphbnlfb2YodHJhdmVyc2FsLmJlZ2luKCksIHRyYXZlcnNhbC5lbmQoKSwgW10oY29uc3Qg
RnJhbWUmIGZyYW1lKSB7CisgICAgICAgIHJldHVybiBmcmFtZS5jb250YWluc1RpbGVkQmFja2lu
Z0xheWVycygpOworICAgIH0pOwogfQogCiB2b2lkIEZyYW1lOjp2aWV3cG9ydE9mZnNldENoYW5n
ZWQoVmlld3BvcnRPZmZzZXRDaGFuZ2VUeXBlIGNoYW5nZVR5cGUpCkBAIC04NjYsOCArODY5LDgg
QEAgdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQogICAgIGlmIChk
b2N1bWVudCgpLT5kb21XaW5kb3coKSkKICAgICAgICAgZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkt
PnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCk7CiAKLSAgICBmb3IgKEZyYW1lKiBjaGls
ZCA9IHRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9u
KCk7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKnRoaXMpKQorICAgICAg
ICBjaGlsZC5yZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwCmluZGV4IGEyZjU0OGMy
ZDRjNDQ2OTg5NzkyMjkyOWY2ZGI3YjgyZDRjMWUwOWEuLjUyMjc1NWExODk2NmY1NGUyMTJkNmQx
N2RhYmFmMDU1ZjRkOTM1ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Bh
Z2VNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKQEAgLTQ1
LDEwICs0NiwxMCBAQCB2b2lkIFBhZ2U6OmFkZFNjaGVkdWxlUGFpcihQYXNzUmVmUHRyPFNjaGVk
dWxlUGFpcj4gcHJwUGFpcikKICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy0+YWRkKHBhaXIp
OwogCiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZy
YW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7
Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9h
ZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogZnJhbWVUcmF2
ZXJzYWwobWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQogICAgICAgICAgICAg
ZG9jdW1lbnRMb2FkZXItPnNjaGVkdWxlKCpwYWlyKTsKLSAgICAgICAgaWYgKERvY3VtZW50TG9h
ZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKCkpCisgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBm
cmFtZS5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICBk
b2N1bWVudExvYWRlci0+c2NoZWR1bGUoKnBhaXIpOwogICAgIH0KICNlbmRpZgpAQCAtNjYsMTAg
KzY3LDEwIEBAIHZvaWQgUGFnZTo6cmVtb3ZlU2NoZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1
bGVQYWlyPiBwcnBQYWlyKQogICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5yZW1vdmUocGFp
cik7CiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9tYWlu
RnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRy
YXZlcnNhbChtYWluRnJhbWUoKSkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAg
ICBkb2N1bWVudExvYWRlci0+dW5zY2hlZHVsZSgqcGFpcik7Ci0gICAgICAgIGlmIChEb2N1bWVu
dExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1
bWVudExvYWRlcigpKQorICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVy
ID0gZnJhbWUubG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQogICAgICAgICAg
ICAgZG9jdW1lbnRMb2FkZXItPnVuc2NoZWR1bGUoKnBhaXIpOwogICAgIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY3BwCmluZGV4IDYxZTdiZjkxZTY5MzBiZjEwNWQzODY5NDE5MGVmZmU4MWNiYjMzZDQuLmU2
NzExMGYxMjkwMjkxM2ExMmE1ZTY4Nzg3NDlmNWQ4ZGEwNTVhZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKQEAgLTE0NSw4ICsxNDYsOCBAQCBSZWdpb24gU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNv
bXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBGcmFtZSogZnJhbWUsCiAgICAgICAg
ICAgICBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbi51bml0ZShwbHVnaW5WaWV3QmFzZS0+ZnJhbWVS
ZWN0KCkpOwogICAgIH0KIAotICAgIGZvciAoRnJhbWUqIHN1YmZyYW1lID0gZnJhbWUtPnRyZWUo
KS5maXJzdENoaWxkKCk7IHN1YmZyYW1lOyBzdWJmcmFtZSA9IHN1YmZyYW1lLT50cmVlKCkubmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgbm9uRmFzdFNjcm9sbGFibGVSZWdpb24udW5pdGUoY29tcHV0
ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHN1YmZyYW1lLCBvZmZzZXQpKTsKKyAgICBmb3IgKGF1
dG8mIHN1YmZyYW1lIDogZnJhbWVDaGlsZHJlbigqZnJhbWUpKQorICAgICAgICBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbi51bml0ZShjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24oJnN1YmZy
YW1lLCBvZmZzZXQpKTsKIAogICAgIHJldHVybiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKICNl
bmRpZgpAQCAtMTU2LDkgKzE1Nyw5IEBAIHVuc2lnbmVkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b21wdXRlQ3VycmVudFdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQogewogICAgIHVuc2lnbmVkIHdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwogCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9w
YWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICB3aGVl
bEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxl
ckNvdW50KCk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJhdmVyc2FsKG1fcGFnZS0+
bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICAg
ICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudCArPSBmcmFtZS5kb2N1bWVudCgpLT53aGVlbEV2ZW50
SGFuZGxlckNvdW50KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCmluZGV4IDc0NmEwN2QwMDM5MjQ0NWIyNmMwOWZlZmU5YmZmOTA1Mzk1YzllN2UuLjNi
OGQ0ZGY2NGI5YjIxNjRmNmRlNGE0NjQ3MjZhZDZiMzhiOTc1YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRmxvd1RocmVhZENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAj
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKQEAgLTU5OSw5ICs2MDAsOSBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJUaWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3Qg
R3JhcGhpY3NMYXllciogZwogCiBSZW5kZXJMYXllckNvbXBvc2l0b3IqIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZW5jbG9zaW5nQ29tcG9zaXRvckZsdXNoaW5nTGF5ZXJzKCkgY29uc3QKIHsKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBSZW5kZXJM
YXllckNvbXBvc2l0b3IqIGNvbXBvc2l0b3IgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgPyAm
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCkgOiAwOwotICAgICAgICBpZiAo
Y29tcG9zaXRvci0+aXNGbHVzaGluZ0xheWVycygpKQorICAgIGZvciAoYXV0byYgZnJhbWUgOiBm
cmFtZUxpbmVhZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkpKSB7CisgICAgICAg
IFJlbmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvciA9IGZyYW1lLmNvbnRlbnRSZW5kZXJl
cigpID8gJmZyYW1lLmNvbnRlbnRSZW5kZXJlcigpLT5jb21wb3NpdG9yKCkgOiBudWxscHRyOwor
ICAgICAgICBpZiAoY29tcG9zaXRvciAmJiBjb21wb3NpdG9yLT5pc0ZsdXNoaW5nTGF5ZXJzKCkp
CiAgICAgICAgICAgICByZXR1cm4gY29tcG9zaXRvcjsKICAgICB9CiAgICAgCkBAIC0zNDEwLDkg
KzM0MTEsMTIgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJvb3RMYXllckF0dGFjaG1l
bnRDaGFuZ2VkKCkKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlJRnJhbWVzT2ZD
b21wb3NpdGluZ0NoYW5nZSgpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLmZyYW1lKCk7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCku
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLnRyYXZlcnNlTmV4dCgm
ZnJhbWUpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+ZG9jdW1lbnQoKSAmJiBjaGlsZC0+ZG9jdW1l
bnQoKS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgICAgICBjaGlsZC0+ZG9jdW1lbnQoKS0+b3du
ZXJFbGVtZW50KCktPnNjaGVkdWxlU2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNo
YW5nZSk7CisgICAgRnJhbWUqIGZyYW1lQ2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgp
OworICAgIGlmIChmcmFtZUNoaWxkKSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBmcmFt
ZVRyYXZlcnNhbFdpdGhpbigqZnJhbWVDaGlsZCwgZnJhbWUpKSB7CisgICAgICAgICAgICBpZiAo
Y2hpbGQuZG9jdW1lbnQoKSAmJiBjaGlsZC5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKSkKKyAg
ICAgICAgICAgICAgICBjaGlsZC5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKS0+c2NoZWR1bGVT
ZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICAgICAgfQogICAg
IH0KICAgICAKICAgICAvLyBDb21wb3NpdGluZyBhbHNvIGFmZmVjdHMgdGhlIGFuc3dlciB0byBS
ZW5kZXJJRnJhbWU6OnJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpLCBzbyAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlcGxheS9SZXBsYXlDb250cm9sbGVyLmNwcAppbmRleCBkNzZlNGI3ZTUwNDEw
Y2MzNmMwMzVhN2Y2NWIwZGU3MWMxNGMzMWQ2Li40ZDZjMGVjMjliMDgwNWFjOWIwMDJiYTBkNWVm
N2E0MzhmOTVmYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvUmVwbGF5Q29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVwbGF5L1JlcGxheUNvbnRyb2xsZXIu
Y3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lSXRl
cmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJMb2NhdGlvbi5oIgpAQCAtMjM0LDkgKzIzNSw5IEBA
IHZvaWQgUmVwbGF5Q29udHJvbGxlcjo6dW5sb2FkU2VnbWVudChib29sIHN1cHByZXNzTm90aWZp
Y2F0aW9ucykKIAogICAgIG1fYWN0aXZlQ3Vyc29yID0gbnVsbHB0cjsKICAgICBSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+IHVubG9hZGVkU2VnbWVudCA9IG1fbG9hZGVkU2VnbWVudC5yZWxl
YXNlKCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9wYWdlLm1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5zZXRJbnB1
dEN1cnNvcihtX2VtcHR5Q3Vyc29yKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnNldElu
cHV0Q3Vyc29yKG1fZW1wdHlDdXJzb3IpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRy
YXZlcnNhbChtX3BhZ2UubWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGZyYW1lLnNjcmlwdCgpLmds
b2JhbE9iamVjdChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnNldElucHV0Q3Vyc29yKG1fZW1w
dHlDdXJzb3IpOworICAgICAgICBmcmFtZS5kb2N1bWVudCgpLT5zZXRJbnB1dEN1cnNvcihtX2Vt
cHR5Q3Vyc29yKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHdlIHN0b3AgY2FwdHVyaW5nLCBkb24n
dCBzZW5kIG91dCBzZWdtZW50IHVubG9hZGVkIGV2ZW50cyBzaW5jZSB3ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6YXRpb25NZXRob2RzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlcGxheS9TZXJpYWxpemF0aW9uTWV0aG9kcy5jcHAKaW5kZXggMjQwYWIxNGQzYTZh
NTQ1ZDk0Y2M5OThiYmUzMGQ4OTRlMzJiYzk5My4uY2U1OTVhNThmNTdhZDBhZmUzNmMyZWNmMmJl
NzRiNzhkYTA1NDNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVwbGF5L1NlcmlhbGl6
YXRpb25NZXRob2RzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZXBsYXkvU2VyaWFsaXphdGlv
bk1ldGhvZHMuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWxsUmVwbGF5SW5wdXRz
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC04NCwxMCArODUsMTAgQEAgdW5zaWduZWQg
bG9uZyBmcmFtZUluZGV4RnJvbUZyYW1lKGNvbnN0IEZyYW1lKiB0YXJnZXRGcmFtZSkKICAgICBB
U1NFUlQodGFyZ2V0RnJhbWUpOwogCiAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50SW5kZXggPSAw
OwotICAgIGNvbnN0IEZyYW1lKiBtYWluRnJhbWUgPSAmdGFyZ2V0RnJhbWUtPnRyZWUoKS50b3Ao
KTsKLSAgICBmb3IgKGNvbnN0IEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZTsgZnJhbWU7ICsrY3Vy
cmVudEluZGV4LCBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1haW5GcmFtZSkp
IHsKLSAgICAgICAgaWYgKGZyYW1lID09IHRhcmdldEZyYW1lKQorICAgIGZvciAoYXV0byYgZnJh
bWUgOiBmcmFtZVRyYXZlcnNhbFdpdGhpbih0YXJnZXRGcmFtZS0+dHJlZSgpLnRvcCgpKSkgewor
ICAgICAgICBpZiAoJmZyYW1lID09IHRhcmdldEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRJbmRleDsKKyAgICAgICAgY3VycmVudEluZGV4Kys7CiAgICAgfQogCiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VFdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlRXZl
bnREaXNwYXRjaGVyLmNwcAppbmRleCBiNGRlOWI4NTc4OWVkOGY4NzYyYjFkMTJhZjUzYmVmNTRl
NWEyNGQ1Li41YzUxYjcwNjdlMDE3ZGEwY2QyNmU2MWQyOGU5ZGNhN2QyZjE0MTFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudERpc3BhdGNoZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZUl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTWFpbkZy
YW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNDcsOSArNDgsOSBAQCB2b2lkIFN0b3JhZ2VF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudHMoY29uc3QgU3RyaW5n
JiBrZXksIGNvbgogICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+PiBmcmFtZXM7CiAKICAgICAvLyBT
ZW5kIGV2ZW50cyBvbmx5IHRvIG91ciBwYWdlLgotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJnBh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgIGlmIChzb3VyY2VGcmFtZSAhPSBmcmFtZSAmJiBmcmFtZS0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQotICAgICAgICAg
ICAgZnJhbWVzLmFwcGVuZChmcmFtZSk7CisgICAgZm9yIChhdXRvJiBmcmFtZSA6IGZyYW1lVHJh
dmVyc2FsKHBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBpZiAoc291cmNlRnJhbWUgIT0g
JmZyYW1lICYmIGZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmVxdWFsKHNlY3Vy
aXR5T3JpZ2luKSkKKyAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoJmZyYW1lKTsKICAgICB9CiAK
ICAgICBkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnRzVG9GcmFtZXMoKnBhZ2UsIGZyYW1lcywg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwg
c2VjdXJpdHlPcmlnaW4pOwpAQCAtNjQsMTEgKzY1LDEwIEBAIHZvaWQgU3RvcmFnZUV2ZW50RGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHMoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0CiAgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKIAogICAgIC8vIFNlbmQgZXZl
bnRzIHRvIGV2ZXJ5IHBhZ2UuCi0gICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFn
ZS0+Z3JvdXAoKS5wYWdlcygpOwotICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gcGFnZXMuYmVnaW4oKSwgZW5kID0gcGFnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAg
IGlmIChzb3VyY2VGcmFtZSAhPSBmcmFtZSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+ZXF1YWwoc2VjdXJpdHlPcmlnaW4pKQotICAgICAgICAgICAgICAgIGZyYW1lcy5h
cHBlbmQoZnJhbWUpOworICAgIGZvciAoYXV0byogZ3JvdXBQYWdlIDogcGFnZS0+Z3JvdXAoKS5w
YWdlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgZnJhbWUgOiBmcmFtZVRyYXZlcnNhbChncm91
cFBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICAgICAgaWYgKHNvdXJjZUZyYW1lICE9ICZm
cmFtZSAmJiBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5lcXVhbChzZWN1cml0
eU9yaWdpbikpCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgmZnJhbWUpOwogICAgICAg
ICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggNDBhMmNj
NzkxNWI4OWI3OTM1MmU4N2Y1ZjRkZjViNWU5ODcwZTVkYy4uZGZhOTc1NWYxZDBmNzg2YmJjNDky
YzNhYmQ1OGViZjUxOWJlMTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApA
QCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGb3JtQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZy
YW1lSXRlcmF0b3IuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCkBAIC0xNTUwLDkgKzE1NTEs
OSBAQCB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mU2Nyb2xsYWJsZUFyZWFzKEV4Y2VwdGlv
bkNvZGUmKQogICAgIGlmIChmcmFtZS0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKSkKICAgICAg
ICAgY291bnQgKz0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCktPnNpemUoKTsKIAot
ICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoY2hp
bGQtPnZpZXcoKSAmJiBjaGlsZC0+dmlldygpLT5zY3JvbGxhYmxlQXJlYXMoKSkKLSAgICAgICAg
ICAgIGNvdW50ICs9IGNoaWxkLT52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLT5zaXplKCk7Cisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGZyYW1lQ2hpbGRyZW4oKmZyYW1lKSkgeworICAgICAgICBp
ZiAoY2hpbGQudmlldygpICYmIGNoaWxkLnZpZXcoKS0+c2Nyb2xsYWJsZUFyZWFzKCkpCisgICAg
ICAgICAgICBjb3VudCArPSBjaGlsZC52aWV3KCktPnNjcm9sbGFibGVBcmVhcygpLT5zaXplKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGNvdW50Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>