<?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>160735</bug_id>
          
          <creation_ts>2016-08-10 02:43:51 -0700</creation_ts>
          <short_desc>Migrate from ints to unsigneds when referring to indices into strings</short_desc>
          <delta_ts>2017-10-11 09:47:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=160786</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>pnormand</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1219008</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-10 02:43:51 -0700</bug_when>
    <thetext>Migrate from ints to unsigneds when referring to indices into strings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219009</commentid>
    <comment_count>1</comment_count>
      <attachid>285726</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-10 02:47:24 -0700</bug_when>
    <thetext>Created attachment 285726
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219227</commentid>
    <comment_count>2</comment_count>
      <attachid>285798</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-10 18:32:02 -0700</bug_when>
    <thetext>Created attachment 285798
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219249</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-10 19:32:39 -0700</bug_when>
    <thetext>Attachment 285798 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 50 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>1219389</commentid>
    <comment_count>4</comment_count>
      <attachid>285848</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 13:25:37 -0700</bug_when>
    <thetext>Created attachment 285848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219402</commentid>
    <comment_count>5</comment_count>
      <attachid>285851</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 13:47:07 -0700</bug_when>
    <thetext>Created attachment 285851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219413</commentid>
    <comment_count>6</comment_count>
      <attachid>285851</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-08-11 14:20:06 -0700</bug_when>
    <thetext>Comment on attachment 285851
Patch

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

&gt; Source/WebCore/editing/FrameSelection.cpp:2094
&gt; +        ASSERT(startOffset &gt;= 0 &amp;&amp; endOffset &gt;= 0);

The autos hide whether these are ints or unsigned so I have no idea whether the assertion is useful.

&gt; Source/WebCore/platform/DragImage.cpp:179
&gt; +    auto startOffset = start.deprecatedEditingOffset();
&gt; +    auto endOffset = end.deprecatedEditingOffset();
&gt; +    ASSERT(startOffset &gt;= 0 &amp;&amp; endOffset &gt;= 0);

Ditto.

&gt; Source/WebCore/platform/graphics/Latin1TextIterator.h:62
&gt; +    unsigned m_currentCharacter;
&gt; +    unsigned m_lastCharacter;

These could be renamed to current/lastIndex perhaps?

&gt; Source/WebCore/platform/graphics/SurrogatePairAwareTextIterator.h:65
&gt; +    unsigned m_currentCharacter;
&gt; +    unsigned m_lastCharacter;
&gt; +    unsigned m_endCharacter;

Ditto

&gt; Source/WebCore/platform/graphics/WidthIterator.cpp:111
&gt; +    ASSERT(glyphBufferSize &gt;= lastGlyphCount);

I would flip this: ASSERT(lastGlyphCount &lt;= glyphBufferSize);

&gt; Source/WebCore/rendering/InlineTextBox.cpp:139
&gt; +    // FIXME: We should only be checking if sPos &gt;= ePos here, because those are the
&gt; +    // indices used to actually generate the selection rect. Allowing us past this guard
&gt; +    // on any other condition creates zero-width selection rects.

But what&apos;s the proposed solution? Should this reference a bug?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:175
&gt; +            ASSERT(static_cast&lt;int&gt;(selectionStart) &gt;= 0 &amp;&amp; static_cast&lt;int&gt;(selectionEnd) &gt;= 0);

This will never fire, right?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:206
&gt; +    // FIXME: We should only be checking if sPos &gt;= ePos here, because those are the
&gt; +    // indices used to actually generate the selection rect. Allowing us past this guard
&gt; +    // on any other condition creates zero-width selection rects.

But what&apos;s the proposed solution? Should this reference a bug?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:597
&gt; +unsigned InlineTextBox::clampedOffset(unsigned x) const

Blank line above pls.

&gt; Source/WebCore/rendering/RenderView.cpp:917
&gt; +                auto newEndPos = node-&gt;offsetInCharacters() ? node-&gt;maxCharacterOffset() : node-&gt;countChildNodes();
&gt; +                ASSERT(newEndPos &gt;= 0);

Can&apos;t tell whether the assertion is useful.

&gt; Source/WebCore/rendering/RenderView.h:321
&gt;      RenderObject* m_selectionUnsplitStart;
&gt;      RenderObject* m_selectionUnsplitEnd;

Maybe move this class to initializers?

&gt; Source/WebCore/rendering/svg/RenderSVGInlineText.cpp:135
&gt; +    ASSERT(caretOffset &gt; 0);

Nope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219420</commentid>
    <comment_count>7</comment_count>
      <attachid>285851</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 14:44:52 -0700</bug_when>
    <thetext>Comment on attachment 285851
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderView.h:321
&gt;&gt;      RenderObject* m_selectionUnsplitEnd;
&gt; 
&gt; Maybe move this class to initializers?

I don&apos;t understand what you mean by this. Could you explain it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219443</commentid>
    <comment_count>8</comment_count>
      <attachid>285863</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 16:30:08 -0700</bug_when>
    <thetext>Created attachment 285863
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219452</commentid>
    <comment_count>9</comment_count>
      <attachid>285868</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 16:56:55 -0700</bug_when>
    <thetext>Created attachment 285868
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219456</commentid>
    <comment_count>10</comment_count>
      <attachid>285870</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-11 17:10:18 -0700</bug_when>
    <thetext>Created attachment 285870
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219498</commentid>
    <comment_count>11</comment_count>
      <attachid>285870</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-11 18:24:25 -0700</bug_when>
    <thetext>Comment on attachment 285870
Patch for committing

Clearing flags on attachment: 285870

Committed r204400: &lt;http://trac.webkit.org/changeset/204400&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219576</commentid>
    <comment_count>12</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-08-12 04:02:30 -0700</bug_when>
    <thetext>Looks like this patch broke the GTK Debug tests bot.

For instance fast/forms/input-text-paste-maxlength.html now crashes the WebProcess:

https://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug%20(Tests)/r204408%20(10632)/fast/forms/input-text-paste-maxlength-crash-log.txt

Thread 1 (Thread 0x7f4976d6a940 (LWP 45002)):
#0  0x00007f49868ac334 in WTFCrash () at ../../Source/WTF/wtf/Assertions.cpp:323
#1  0x00007f498eb7800d in (anonymous namespace)::HarfBuzzShaper::selectionRect (this=0x7fffa92bfe70, point=..., height=0, from=0, to=5) at ../../Source/WebCore/platform/graphics/harfbuzz/HarfBuzzShaper.cpp:661
#2  0x00007f498eb57b8c in (anonymous namespace)::FontCascade::adjustSelectionRectForComplexText (this=0x7f4976257018, run=..., selectionRect=..., from=0, to=7) at ../../Source/WebCore/platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:93
#3  0x00007f498e385b62 in (anonymous namespace)::FontCascade::adjustSelectionRectForText (this=0x7f4976257018, run=..., selectionRect=..., from=0, to=...) at ../../Source/WebCore/platform/graphics/FontCascade.cpp:505
#4  0x00007f498e4f66ba in (anonymous namespace)::InlineTextBox::positionForOffset (this=0x7f4976259a80, offset=7) at ../../Source/WebCore/rendering/InlineTextBox.cpp:1016
#5  0x00007f498e6ff30b in (anonymous namespace)::RenderText::localCaretRect (this=0x7f497625aae0, inlineBox=0x7f4976259a80, caretOffset=7, extraWidthToEndOfLine=0x0) at ../../Source/WebCore/rendering/RenderText.cpp:451
#6  0x00007f498dd5a36d in (anonymous namespace)::VisiblePosition::localCaretRect (this=0x7fffa92c0350, renderer=@0x7fffa92c0288: 0x7f497625aae0) at ../../Source/WebCore/editing/VisiblePosition.cpp:660
#7  0x00007f498dd72726 in (anonymous namespace)::localCaretRectInRendererForCaretPainting (caretPosition=..., caretPainter=@0x7fffa92c0318: 0x7f498d0a0352 &lt;(anonymous namespace)::Frame::document() const+30&gt;) at ../../Source/WebCore/editing/htmlediting.cpp:1269
#8  0x00007f498dd1053d in (anonymous namespace)::CaretBase::updateCaretRect (this=0x7f49763bf230, document=0x7f49762ac000, caretPosition=...) at ../../Source/WebCore/editing/FrameSelection.cpp:1559
#9  0x00007f498dd10917 in (anonymous namespace)::FrameSelection::recomputeCaretRect (this=0x7f49763bf230) at ../../Source/WebCore/editing/FrameSelection.cpp:1613
#10 0x00007f498dd12fa4 in (anonymous namespace)::FrameSelection::updateAppearance (this=0x7f49763bf230) at ../../Source/WebCore/editing/FrameSelection.cpp:2033
#11 0x00007f498dd09889 in (anonymous namespace)::FrameSelection::updateAndRevealSelection (this=0x7f49763bf230, intent=...) at ../../Source/WebCore/editing/FrameSelection.cpp:380
#12 0x00007f498dd14c69 in (anonymous namespace)::FrameSelection::updateAppearanceAfterLayout (this=0x7f49763bf230) at ../../Source/WebCore/editing/FrameSelection.cpp:2386
#13 0x00007f498e1f7cd5 in (anonymous namespace)::FrameView::performPostLayoutTasks (this=0x7f49345fdb00) at ../../Source/WebCore/page/FrameView.cpp:3206
#14 0x00007f498e1f1f01 in (anonymous namespace)::FrameView::layout (this=0x7f49345fdb00, allowSubtree=true) at ../../Source/WebCore/page/FrameView.cpp:1523
#15 0x00007f498db5e712 in (anonymous namespace)::Document::updateLayout (this=0x7f49762ac000) at ../../Source/WebCore/dom/Document.cpp:2009
#16 0x00007f498db5e814 in (anonymous namespace)::Document::updateLayoutIgnorePendingStylesheets (this=0x7f49762ac000, runPostLayoutTasks=(anonymous namespace)::Document::RunPostLayoutTasks::Asynchronously) at ../../Source/WebCore/dom/Document.cpp:2041
#17 0x00007f498dd03ce6 in (anonymous namespace)::Editor::Command::execute (this=0x7fffa92c0a30, parameter=&quot;(null)&quot;, triggeringEvent=0x0) at ../../Source/WebCore/editing/EditorCommand.cpp:1778
#18 0x00007f498db6a452 in (anonymous namespace)::Document::execCommand (this=0x7f49762ac000, commandName=&quot;SelectAll&quot;, userInterface=false, value=&quot;(null)&quot;) at ../../Source/WebCore/dom/Document.cpp:4964
#19 0x00007f498ee3b17e in (anonymous namespace)::jsDocumentPrototypeFunctionExecCommand (state=0x7fffa92c0b20) at DerivedSources/WebCore/JSDocument.cpp:4633
#20 0x00007f4935ffe028 in ?? ()
#21 0x00007fffa92c0ba0 in ?? ()
#22 0x00007f49864dc8e8 in llint_entry () at ../../Source/WTF/wtf/RefPtr.h:79</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219695</commentid>
    <comment_count>13</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-12 14:01:25 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Looks like this patch broke the GTK Debug tests bot.
I&apos;m working on this in https://bugs.webkit.org/show_bug.cgi?id=160818</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285726</attachid>
            <date>2016-08-10 02:47:24 -0700</date>
            <delta_ts>2016-08-10 18:31:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-160735-20160810024548.patch</filename>
            <type>text/plain</type>
            <size>59673</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBmYTg2NzlhMTY2ODUy
MDg1NTMxYzU0MDA0OWQzZTA1NjBkMzZmMy4uZDNjZTg2MmQyMjJmNzBjNjEzYmQzYjc0YjFhZTli
ZGQ2OWFhNGQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAorMjAxNi0wOC0xMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVE9E
TzoKKyAgICAgICAgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKCkKKyAgICAgICAgUmVuZGVyVmll
dzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoKQorICAgICAgICAKKyAgICAgICAgbm9k
ZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkKKyAgICAgICAgb2Zmc2V0SW5Db250YWluZXJOb2RlKCkK
KyAgICAgICAgY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpCisgICAgICAgIE5vZGU6Om1h
eENoYXJhY3Rlck9mZnNldCgpCisgICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hp
ZnRNYXJrZXJzKCkKKyAgICAgICAgbGFzdE9mZnNldEZvckVkaXRpbmcoKQorICAgICAgICBQb3Np
dGlvbjo6bWluT2Zmc2V0Rm9yTm9kZSgpCisgICAgICAgIFBvc2l0aW9uOjpvZmZzZXRJc0JlZm9y
ZUxhc3ROb2RlT2Zmc2V0KCkKKyAgICAgICAgCisgICAgICAgIGludCBOb2RlOjptYXhDaGFyYWN0
ZXJPZmZzZXQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UKKyAgICAgICAgUmVuZGVyVGV4dDo6
Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UKKyAgICAgICAgY2FsbGVycyBvZiBJbmxpbmVU
ZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3Q7CisgICAg
ICAgIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CisgICAgICAgIElu
bGluZVRleHRCb3g6Om9mZnNldFJ1bgorICAgICAgICBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZv
ck9mZnNldAorICAgICAgICAKKyAgICAgICAgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JUZXh0CisgICAgICAgIEZvbnRDYXNjYWRlOjpkcmF3VGV4dAorICAgICAgICBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdUZXh0CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lz
TWFya3MKKyAgICAgICAgCisgICAgICAgIFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RG
b3JUZXh0RnJhZ21lbnQKKyAgICAgICAgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25S
ZWN0CisKKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNl
dENhcmV0VmlzaWJpbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
Ojppc1NlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlv
blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9u
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6SW5saW5l
VGV4dEJveCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5kKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjppc1Nl
bGVjdGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVh
clN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXBwbHlT
dWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rp
b25TdWJ0cmVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6c2VsZWN0aW9uQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJl
ZURhdGE6OnNldFNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2V0U2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6Ok9sZFNlbGVjdGlvbkRhdGE6Ok9sZFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
UGFpbnRlcjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQ
YWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFy
dEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9u
Q2FsbGJhY2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmg6CisKIDIw
MTYtMDgtMDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBPcHRp
bWl6YXRpb24gaW4gTm9kZS5yZXBsYWNlQ2hpbGQoKSBpcyBub3Qgc3BlYy1jb21wbGlhbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMzM4MzRhZDA5NmU4
MTgyMjUxNmU3ODEzYjJiODBkYzliYjI2ZTJkNC4uZTVkN2JmOWM0OGFkYTM4OGJhNjMyODUwODcx
MGU0NThlMjA3N2I4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTIwODgsOCArMjA4OCwxMSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlKCkKICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHlldCBub3RpZnkgdGhlIEZyYW1lU2Vs
ZWN0aW9uIG9mIHRleHQgcmVtb3ZhbC4KICAgICBpZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYg
ZW5kUG9zLmlzTm90TnVsbCgpICYmIHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSAhPSBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9
IHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIGF1dG8gc3Rh
cnRPZmZzZXQgPSBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBS
ZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCk7Ci0gICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSZW5kZXJlciwgZW5kUG9zLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBhdXRvIGVuZE9mZnNldCA9IGVuZFBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAm
JiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxp
dHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgp
ID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBsYXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAo
bV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUo
Km1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2Ni
YzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQwODQwNmMwLi5iMjBiNzE3MjRiNDRlZjg0MTBm
M2Q2YjIyNTFhNjVhYTMzZWE2MTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
cjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyOwotICAgIGludCBzdGFydE9mZnNldDsK
LSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsK
KyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZv
cmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwxMCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFj
awogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25z
ID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8g
U25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQgOiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAg
ICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBS
ZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgYXV0byBzdGFydE9mZnNldCA9IHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgYXV0byBlbmRPZmZzZXQgPSBlbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBl
bmRPZmZzZXQgPj0gMCk7CisgICAgdmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0
YXJ0T2Zmc2V0LCBlbmRSZW5kZXJlciwgZW5kT2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90
aGluZyk7CiAgICAgLy8gV2UgY2FwdHVyZSB1c2luZyBzbmFwc2hvdEZyYW1lUmVjdCgpIGJlY2F1
c2Ugd2UgZmFrZSB1cCB0aGUgc2VsZWN0aW9uIHVzaW5nCiAgICAgLy8gRnJhbWVWaWV3IGJ1dCBz
bmFwc2hvdFNlbGVjdGlvbigpIHVzZXMgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBGcmFtZSBpdHNl
bGYuCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1l
UmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9uQm91bmRzKCksIG9wdGlvbnMpLCBudWxscHRyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmMzJhMGIz
YjNlNTZiZjU3OWVhMDVkMzkxNzA2MDlkZjI5MDliMDlkLi44ODdiMTkwZmEwNGUwYTc2YjczMmZm
YTk2NzdmZjI4MTM3N2IyNjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCkBAIC0xMzAsMTAgKzEzMCwxMCBAQCBMYXlvdXRVbml0IElubGluZVRleHRCb3g6
OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25IZWln
aHQoKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywg
aW50IGVuZFBvcykgY29uc3QKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25l
ZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3Rk
OjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVu
ZFBvcyAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PGludD4obV9sZW4pKTsKKyAgICBpbnQgc1BvcyA9
IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMFUpOworICAgIGludCBlUG9zID0gc3RkOjpt
aW4oZW5kUG9zIC0gbV9zdGFydCwgbGVuKCkpOwogICAgIHJldHVybiAoc1BvcyA8IGVQb3MpOwog
fQogCkBAIC0xNDEsMTAgKzE0MSwxMSBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElu
bGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90
aCkgewotICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnRQb3MsIGVuZFBvczsKICAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFy
dFBvcywgZW5kUG9zKTsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5l
IGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgotICAgICAgICBpbnQgbGFz
dFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsK
KyAgICAgICAgQVNTRVJUKHN0YXJ0KCkgKyBsZW4oKSA+PSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAw
KSk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0g
KGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYmIHN0
YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVuZFBv
cyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0xNjUsOCArMTY2LDggQEAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAgICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uICYmIHJvb3QoKS5lbGxpcHNpc0JveCgpKSB7CiAg
ICAgICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpcyA9IHJvb3QoKS5lbGxpcHNpc0JveCgpOwogICAg
ICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAg
ICAgICBpbnQgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgICAgICAgICBpbnQgc2VsZWN0aW9uRW5kOwor
ICAgICAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2Vs
ZWN0aW9uRW5kKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgICAgICAgICAvLyBUaGUgZWxs
aXBzaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgog
ICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiBpcyBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHRydW5jYXRpb24gYW5kIHRoZQpAQCAtMTkzLDggKzE5NCw4IEBAIHN0YXRpYyBjb25zdCBGb250
Q2FzY2FkZSYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVy
VGV4dCYKIAogTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50
IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3RkOjptYXgo
c3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAt
IG1fc3RhcnQsIChpbnQpbV9sZW4pOworICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3Mg
LSBtX3N0YXJ0LCAwVSk7CisgICAgaW50IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0
LCBsZW4oKSk7CiAgICAgCiAgICAgaWYgKHNQb3MgPiBlUG9zKQogICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOwpAQCAtNTA4LDE4ICs1MDksMTggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAog
ICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBhbHRlcm5h
dGVTdHJpbmdUb1JlbmRlcik7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgo
KTsKIAotICAgIGludCBzZWxlY3Rpb25TdGFydCA9IDA7Ci0gICAgaW50IHNlbGVjdGlvbkVuZCA9
IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAwOworICAgIHVuc2lnbmVkIHNlbGVj
dGlvbkVuZCA9IDA7CiAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgKHBhaW50U2VsZWN0ZWRUZXh0
T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpKQogICAgICAgICBzdGQ6OnRpZShz
ZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAKICAg
ICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgc2VsZWN0aW9u
U3RhcnQgPSBzdGQ6Om1pbjxpbnQ+KHNlbGVjdGlvblN0YXJ0LCBtX3RydW5jYXRpb24pOwotICAg
ICAgICBzZWxlY3Rpb25FbmQgPSBzdGQ6Om1pbjxpbnQ+KHNlbGVjdGlvbkVuZCwgbV90cnVuY2F0
aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGQ6Om1pbihzZWxlY3Rpb25TdGFydCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOworICAgICAgICBzZWxlY3Rpb25F
bmQgPSBzdGQ6Om1pbihzZWxlY3Rpb25FbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5j
YXRpb24pKTsKICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwogICAgIH0KIAotICAgIGlu
dCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOworICAgIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCA9
IDA7CiAgICAgYm9vbCBlbXBoYXNpc01hcmtBYm92ZTsKICAgICBib29sIGhhc1RleHRFbXBoYXNp
cyA9IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNpc01hcmtB
Ym92ZSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBoYXNUZXh0RW1w
aGFzaXMgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0b207CkBA
IC01ODcsMjAgKzU4OCwyMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgICAgIGNvbnRl
eHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KIAot
c3RkOjpwYWlyPGludCwgaW50PiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNv
bnN0CitzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rp
b25TdGFydEVuZCgpIGNvbnN0CiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGF0ZSA9IHJlbmRlcmVy
KCkuc2VsZWN0aW9uU3RhdGUoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVuIH07CiAgICAg
Ci0gICAgaW50IHN0YXJ0OwotICAgIGludCBlbmQ7CisgICAgdW5zaWduZWQgc3RhcnQ7CisgICAg
dW5zaWduZWQgZW5kOwogICAgIHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVu
ZCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQpCiAgICAgICAgIGVuZCA9IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpOwogICAgIGVsc2UgaWYg
KHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQogICAgICAgICBz
dGFydCA9IDA7Ci0gICAgcmV0dXJuIHsgc3RkOjptYXgoc3RhcnQgLSBtX3N0YXJ0LCAwKSwgc3Rk
OjptaW48aW50PihlbmQgLSBtX3N0YXJ0LCBtX2xlbikgfTsKKyAgICByZXR1cm4geyBzdGQ6Om1h
eChzdGFydCAtIG1fc3RhcnQsIDBVKSwgc3RkOjptaW4oZW5kIC0gbV9zdGFydCwgbGVuKCkpIH07
CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKQEAgLTYx
MCw4ICs2MTEsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHNlbGVjdGlvbiB0byBwYWludCBhdCBhbGwuCi0gICAg
aW50IHNlbGVjdGlvblN0YXJ0OwotICAgIGludCBzZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQg
c2VsZWN0aW9uU3RhcnQ7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kOwogICAgIHN0ZDo6dGll
KHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhcnQgPj0gc2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm47CkBA
IC02MzQsNyArNjM1LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IGxl
bigpOwogCiAgICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmc7Ci0gICAgYm9vbCByZXNwZWN0SHlw
aGVuID0gc2VsZWN0aW9uRW5kID09IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAmJiBoYXNIeXBo
ZW4oKTsKKyAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gbGVuZ3RoICYm
IGhhc0h5cGhlbigpOwogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAgICAgICBoeXBoZW5hdGVk
U3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUsIGxlbmd0aCk7CiAgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgaHlwaGVuYXRlZFN0cmlu
ZywgT3B0aW9uYWw8dW5zaWduZWQ+KGxlbmd0aCkpOwpAQCAtNzU2LDcgKzc1Nyw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pCiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRv
IG1lYXN1cmUgdGV4dAogICAgIGJvb2wgbWFya2VyU3BhbnNXaG9sZUJveCA9IHRydWU7Ci0gICAg
aWYgKG1fc3RhcnQgPD0gKGludCltYXJrZXIuc3RhcnRPZmZzZXQoKSkKKyAgICBpZiAobV9zdGFy
dCA8PSBtYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9
IGZhbHNlOwogICAgIGlmICgoZW5kKCkgKyAxKSAhPSBtYXJrZXIuZW5kT2Zmc2V0KCkpIC8vIGVu
ZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBhc3QgaXQKICAgICAgICAgbWFya2VyU3Bh
bnNXaG9sZUJveCA9IGZhbHNlOwpAQCAtOTg3LDggKzk4OCw4IEBAIGludCBJbmxpbmVUZXh0Qm94
OjpvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCBsaW5lT2Zmc2V0LCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzCiAKIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZz
ZXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG9mZnNldCA+PSBtX3N0YXJ0KTsKLSAgICBBU1NFUlQo
b2Zmc2V0IDw9IG1fc3RhcnQgKyBtX2xlbik7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvZmZzZXQpID49IG1fc3RhcnQpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ob2Zmc2V0KSA8PSBtX3N0YXJ0ICsgbGVuKCkpOwogCiAgICAgaWYgKGlzTGluZUJyZWFrKCkp
CiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmgKaW5kZXggNjdiNjM0YmE1NzhjMzgwZjcwOWIyMzFjYTZiMzE4OTg3MzU2
OTRiZC4uOWZiNzA1NmFlODk1NjBkZmFjZGE1ZjBiMjNmYjk5NmE2NGNmNjJkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC00MiwxMSArNDIsNiBAQCBjbGFz
cyBJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgSW5saW5lVGV4dEJveChSZW5kZXJUZXh0JiByZW5kZXJlcikKICAgICAgICAgOiBJbmxpbmVC
b3gocmVuZGVyZXIpCi0gICAgICAgICwgbV9wcmV2VGV4dEJveChudWxscHRyKQotICAgICAgICAs
IG1fbmV4dFRleHRCb3gobnVsbHB0cikKLSAgICAgICAgLCBtX3N0YXJ0KDApCi0gICAgICAgICwg
bV9sZW4oMCkKLSAgICAgICAgLCBtX3RydW5jYXRpb24oY05vVHJ1bmNhdGlvbikKICAgICB7CiAg
ICAgICAgIHNldEJlaGF2ZXNMaWtlVGV4dCh0cnVlKTsKICAgICB9CkBAIC0xMjEsOCArMTE2LDgg
QEAgcHVibGljOgogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0K
IAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9z
LCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBp
bnQgZW5kUG9zKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IHNlbGVjdGlvblN0YXJ0
RW5kKCkgY29uc3Q7CisgICAgYm9vbCBpc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNp
Z25lZCBlbmRQb3MpIGNvbnN0OworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHNl
bGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwpAQCAtMTczLDE1ICsxNjgsMTUgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgYmVoYXZlc0xpa2VUZXh0KCkgY29uc3QgPSBkZWxldGU7CiAKLSAgICBJbmxp
bmVUZXh0Qm94KiBtX3ByZXZUZXh0Qm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1
c2VzIG91ciBSZW5kZXJPYmplY3QKLSAgICBJbmxpbmVUZXh0Qm94KiBtX25leHRUZXh0Qm94OyAv
LyBUaGUgbmV4dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElubGlu
ZVRleHRCb3gqIG1fcHJldlRleHRCb3ggeyBudWxscHRyIH07IC8vIFRoZSBwcmV2aW91cyBib3gg
dGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElubGluZVRleHRCb3gqIG1fbmV4
dFRleHRCb3ggeyBudWxscHRyIH07IC8vIFRoZSBuZXh0IGJveCB0aGF0IGFsc28gdXNlcyBvdXIg
UmVuZGVyT2JqZWN0CiAKLSAgICBpbnQgbV9zdGFydDsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2xl
bjsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIHNob3J0IG1fbGVu
IHsgMCB9OwogCiAgICAgLy8gV2hlcmUgdG8gdHJ1bmNhdGUgd2hlbiB0ZXh0IG92ZXJmbG93IGlz
IGFwcGxpZWQuIFdlIHVzZSBzcGVjaWFsIGNvbnN0YW50cyB0bwogICAgIC8vIGRlbm90ZSBubyB0
cnVuY2F0aW9uICh0aGUgd2hvbGUgcnVuIHBhaW50cykgYW5kIGZ1bGwgdHJ1bmNhdGlvbiAobm90
aGluZyBwYWludHMgYXQgYWxsKS4KLSAgICB1bnNpZ25lZCBzaG9ydCBtX3RydW5jYXRpb247Cisg
ICAgdW5zaWduZWQgc2hvcnQgbV90cnVuY2F0aW9uIHsgY05vVHJ1bmNhdGlvbiB9OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCAwZWI4YWQ2MTg0YTk3NjM0MjM5M2M2NzNhMzJiMzAyMjIxMTEyMjZjLi41
NTc4ZWExYWIwOWNhNWE5MmYzYTg4YjNhYzhmNDNjZjE3NGU1ZGE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgU2VsZWN0
aW9uU3VidHJlZVJvb3QmIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9vdCgpIGNvbnN0CiAgICAg
cmV0dXJuIHZpZXcoKTsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5k
KGludCYgc3BvcywgaW50JiBlcG9zKSBjb25zdAordm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlv
blN0YXJ0RW5kKHVuc2lnbmVkJiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3QKIHsKICAgICBz
ZWxlY3Rpb25Sb290KCkuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25z
KHNwb3MsIGVwb3MpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IGM2YzZjM2ZlZTVlMjY1MDhjMzE5NmI5MzBiYzQ2M2M3NmE3YjYzYWMuLjc0NmY2NjI1ZWZi
ZmY4YTIzM2M0YmE1NDMzNzUxM2Y0Yzk2ZWJhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTc4Miw3ICs3ODIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0
cikgeyB9CiAKICAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgc2VsZWN0aW9uUm9vdCgpIGNvbnN0
OwotICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0
OworICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNwb3MsIHVuc2lnbmVkJiBl
cG9zKSBjb25zdDsKICAgICAKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYWEyYzM0Y2I2YWFj
M2RjNzhkNjcxNGQ2M2JhNzViMGI3YTU0YjgzYi4uMGJmYjRiYTc5MDViMjcwMDk1M2YxYjY5ZWJh
NDQ0M2ViY2QwODNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCkBAIC02MTYsMTggKzYxNiwxOCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVj
dGVkKCkgY29uc3QKICAgICBpZiAocyA9PSBTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7CisgICAgdW5z
aWduZWQgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZDsKICAgICBzZWxlY3Rpb25TdGFydEVu
ZChzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKICAgICBpZiAocyA9PSBTZWxlY3Rpb25T
dGFydCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7CiAgICAgICAgIAotICAg
IGludCBlbmQgPSBlbGVtZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRD
aGlsZE5vZGVzKCkgOiAxOworICAgIHVuc2lnbmVkIGVuZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGRO
b2RlcygpID8gZWxlbWVudCgpLT5jb3VudENoaWxkTm9kZXMoKSA6IDE7CiAgICAgaWYgKHMgPT0g
U2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBp
ZiAocyA9PSBTZWxlY3Rpb25Cb3RoKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0g
MCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgICAgICAKLSAgICBBU1NFUlQoMCk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggMDI4ODZiYjgwZmMzNGViNGU0M2RkMGFj
ZDNkOWZmN2FlMDJhMTczMy4uODY1ZGMxMmFhNDQ2N2I0ODlhOTIxNWY2MzQ1OWY2OThhMmY0NTcz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMTM3MiwxMyAr
MTM3MiwxMiBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0Zv
ckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAg
ICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWNiKQorICAg
IGlmICghY29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAK
ICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNl
bGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAK
LSAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICB1bnNpZ25lZCBzdGFydFBvcywgZW5kUG9z
OwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkluc2lkZSkgewogICAgICAg
ICAvLyBXZSBhcmUgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgIHN0YXJ0UG9zID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBk
OTQzZjNhNTgxZmYwY2I1ZjYxNzViY2Q5ODE0ZjY0MDc1ODYwZWRkLi5lNTlmM2RlNjE2MzFkZjNj
MjNjY2VhMjY5ZmU1MmJjOTJhOWQ3NGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBSZW5k
ZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwg
UmVuZGVyT2JqZWN0OjoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBzdGFydCwg
ZW5kOworICAgIHVuc2lnbmVkIHN0YXJ0LCBlbmQ7CiAgICAgcmVuZGVyZXIuc2VsZWN0aW9uU3Rh
cnRFbmQoc3RhcnQsIGVuZCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uU3RhcnQpIHsKICAgICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExlbmd0aCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGE4ZGQ3MThkODhiMzk5Y2E5Zjhl
Yjc3MGUzMjEyYTUwYjE0YWQ5YzYuLjA5NjQ3MGRiYzNkYTFlZTI2MTdlMmE2MWQ4ZDY3NDI1ODAx
YzUwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEyMCw4
ICsxMjAsNiBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KERvY3VtZW50JiBkb2N1bWVudCwgUmVu
ZGVyU3R5bGUmJiBzdHlsZSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1bWVudC52aWV3KCkpCiAg
ICAgLCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydChudWxscHRyKQogICAgICwgbV9zZWxlY3Rpb25V
bnNwbGl0RW5kKG51bGxwdHIpCi0gICAgLCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvcygtMSkK
LSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvcygtMSkKICAgICAsIG1fbGF6eVJlcGFpbnRU
aW1lcigqdGhpcywgJlJlbmRlclZpZXc6OmxhenlSZXBhaW50VGltZXJGaXJlZCkKICAgICAsIG1f
cGFnZUxvZ2ljYWxIZWlnaHQoMCkKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZh
bHNlKQpAQCAtNzcyLDcgKzc3MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlclZpZXc6OnN1YnRyZWVT
ZWxlY3Rpb25Cb3VuZHMoY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QsCiAgICAgU2Vs
ZWN0aW9uTWFwIHNlbGVjdGVkT2JqZWN0czsKIAogICAgIFJlbmRlck9iamVjdCogb3MgPSByb290
LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3Rv
cCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25F
bmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8q
IHNlbGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAg
IFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVuZCkKKyAg
ICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJvb3Quc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0
ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAob3MgJiYgb3MgIT0gc3Rv
cCkgewogICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBvcyA9PSByb290
LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IG9zID09IHJvb3Quc2VsZWN0aW9u
RGF0YSgpLnNlbGVjdGlvbkVuZCgpKSAmJiBvcy0+c2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rp
b25Ob25lKSB7CkBAIC04MjEsNyArODIyLDEwIEBAIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFN1
YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QpIGNvbnN0CiB7
CiAgICAgSGFzaFNldDxSZW5kZXJCbG9jayo+IHByb2Nlc3NlZEJsb2NrczsKIAotICAgIFJlbmRl
ck9iamVjdCogZW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgp
LnNlbGVjdGlvbkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7
CisgICAgYXV0byogc2VsZWN0aW9uRW5kID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
RW5kKCk7CisgICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rp
b25FbmQpCisgICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQs
IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNl
bGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvblN0YXJ0KCkpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gc2VsZWN0aW9uSXRl
cmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBvID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4
dCgpKSB7CiAgICAgICAgIGlmICghby0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgbyAhPSByb290
LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIG8gIT0gcm9vdC5zZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uRW5kKCkpCkBAIC04NDAsNyArODQ0LDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9v
dCkgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRl
ck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQ
b3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit2b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4g
c3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBPcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBT
ZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQogewogICAgIC8vIE1ha2Ugc3Vy
ZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCiAgICAgLy8gQ2hl
Y2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNl
IHdoZXJlIHRoaXMgaGFwcGVuZWQuCkBAIC04NzcsNyArODgxLDcgQEAgdm9pZCBSZW5kZXJWaWV3
OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIGUKICAgICBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhzdGFydCwgc3RhcnRQ
b3MsIGVuZCwgZW5kUG9zLCBibG9ja1JlcGFpbnRNb2RlKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3
OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0
LCBpbnQgc3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxl
Y3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQordm9pZCBSZW5kZXJWaWV3OjpzcGxp
dFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0LCBPcHRp
b25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5kLCBPcHRpb25h
bDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2Rl
KQogewogICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUgc2VsZWN0aW9uIGVuZCBwb2ludHMgZm9y
IGVhY2ggb2YgdGhlIHN1YnRyZWVzLgogICAgIFJlbmRlclN1YnRyZWVzTWFwIHJlbmRlclN1YnRy
ZWVzTWFwOwpAQCAtOTAyLDE0ICs5MDYsMTcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3QKICAg
ICAgICAgICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhIHNlbGVjdGlvbkRhdGEgPSByZW5kZXJTdWJ0
cmVlc01hcC5nZXQoJnJvb3QpOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuc2VsZWN0
aW9uQ2xlYXIoKSkgewogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9u
U3RhcnQobm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5z
ZXRTZWxlY3Rpb25TdGFydFBvcyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0YXJ0UG9zIDogMCk7Cisg
ICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhub2RlID09
IHN0YXJ0Tm9kZSA/IHN0YXJ0UG9zIDogT3B0aW9uYWw8dW5zaWduZWQ+KDApKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmQobm9kZS0+
cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmROb2RlKQogICAgICAgICAg
ICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVuZFBvcyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQ
b3Mobm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KSA6IG5vZGUtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGF1dG8gbmV3RW5kUG9zID0gbm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBu
b2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hpbGROb2RlcygpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChuZXdFbmRQb3MgPj0gMCk7CisgICAgICAgICAgICAgICAgc2Vs
ZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsKKyAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgcmVuZGVyU3VidHJlZXNNYXAuc2V0KCZyb290LCBzZWxlY3Rpb25EYXRh
KTsKICAgICAgICAgfQpAQCAtOTYwLDcgKzk2NywxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmNsZWFy
U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0
aQogICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUg
ZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KIAogICAgIFJlbmRlck9iamVjdCogb3Mg
PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVj
dCogc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxl
Y3Rpb25FbmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAg
IGF1dG8qIHNlbGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgp
OworICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVu
ZCkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJv
b3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVj
dGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAob3MgJiYgb3Mg
IT0gc3RvcCkgewogICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVjdGlvbihyb290
LCAqb3MpKSB7CkBAIC05OTgsNyArMTAwOCwxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmFwcGx5U3Vi
dHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0aQog
ICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQgPSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5k
ID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVu
ZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byog
c2VsZWN0aW9uRGF0YUVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwor
ICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0
aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9u
KHNlbGVjdGlvbkRhdGFFbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygp
LnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVj
dGlvblN0YXJ0KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyID0gc2Vs
ZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0
aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKICAg
ICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxl
Y3Rpb25FbmQoKSkKQEAgLTEwODksNyArMTEwMiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6YXBwbHlT
dWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290LCBTZWxlY3Rp
CiAgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQg
UmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGlu
dCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNl
dCkgY29uc3QKK3ZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0
YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVj
dComIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIGVuZE9mZnNldCkgY29uc3QKIHsK
ICAgICBzdGFydFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQ7CiAgICAgc3RhcnRP
ZmZzZXQgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKQEAgLTExMDAsNyArMTExMyw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVy
ZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlCiB2b2lkIFJlbmRlclZpZXc6OmNsZWFyU2VsZWN0aW9u
KCkKIHsKICAgICBsYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0
U2VsZWN0aW9uKG51bGxwdHIsIC0xLCBudWxscHRyLCAtMSwgUmVwYWludE5ld01pbnVzT2xkKTsK
KyAgICBzZXRTZWxlY3Rpb24obnVsbHB0ciwgTnVsbG9wdCwgbnVsbHB0ciwgTnVsbG9wdCwgUmVw
YWludE5ld01pbnVzT2xkKTsKIH0KIAogYm9vbCBSZW5kZXJWaWV3OjpwcmludGluZygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBjN2M5Mjg2NGYwMzQ1YTVl
ZGIyYjRjMTExMzMxNDI3OTA1MzJkMGJmLi40NWNjYTIxOTJiNDc0NTA2NWNlOGUxY2Y1MDBmYmZj
NzNmY2EyYTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTg1LDgg
Kzg1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBTZWxlY3Rpb25SZXBh
aW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCwgUmVwYWludE5v
dGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQg
c3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50
TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9i
amVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVu
ZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3Rpb24o
UmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIGVuZE9iamVjdCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVw
YWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKKyAgICB2b2lkIGdldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIHN0YXJ0T2Zmc2V0
LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZz
ZXQpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAgICBSZW5kZXJPYmplY3Qq
IHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxp
dFN0YXJ0OyB9CiAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0RW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOyB9CkBAIC0zMDcsNyArMzA3LDcgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25z
dCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIGludCBzdGFydFBvcywgY29uc3QgUmVuZGVy
T2JqZWN0KiBlbmRSZW5kZXJlciwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxv
Y2tSZXBhaW50TW9kZSk7CisgICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhj
b25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFy
dFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+
IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CiAgICAgdm9p
ZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxl
Y3Rpb25SZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uRm9yU3VidHJlZXMoUmVuZGVyU3VidHJlZXNNYXAmLCBTZWxlY3Rpb25SZXBh
aW50TW9kZSk7CiAgICAgdm9pZCBhcHBseVN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
U3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0
YSYpOwpAQCAtMzE5LDggKzMxOSw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJPYmplY3QqIG1f
c2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwogICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNw
bGl0RW5kOwotICAgIGludCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKLSAgICBpbnQgbV9z
ZWxlY3Rpb25VbnNwbGl0RW5kUG9zOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlv
blVuc3BsaXRTdGFydFBvczsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNw
bGl0RW5kUG9zOwogCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZpZXcuCiAgICAgdWludDY0
X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKaW5kZXggOWY2NWU5NGI1ZTQ0YmNkZTBiZTAzZmJk
ZGRmOTg0YWExYTk4NDhjYy4uNjg4MDhiYmE3NjM2NGMyZDY1OTc0MTVkYjZkN2NhZjlmYmE5Y2U4
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVS
b290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJv
b3QuY3BwCkBAIC00MiwxOSArNDIsMTQgQEAgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlv
blN1YnRyZWVSb290KCkKIHsKIH0KIAotU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1
YnRyZWVSb290KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25TdGFy
dFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rpb25FbmRQb3MpCi0g
ICAgOiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25TdGFy
dFBvcywgc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmRQb3MpCi17Ci19Ci0KIHZvaWQgU2VsZWN0
aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50KQogewogICAgIGlmIChtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkNsZWFyKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIHJhbmdlIGJhc2VkIG9uIHRoZSBj
YWNoZWQgZW5kIHBvaW50cwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydCgp
LT5ub2RlKCksIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnRQb3MoKSk7Ci0g
ICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9z
ZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBtX3NlbGVjdGlvblN1
YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9u
ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2Vs
ZWN0aW9uU3RhcnQoKS0+bm9kZSgpLCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvblN0
YXJ0UG9zKCkudmFsdWUoKSk7CisgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+
bm9kZSgpLCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkp
OwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHN0
YXJ0UG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZFBvc2l0aW9uLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigq
cmFuZ2UpOwpAQCAtODIsMTAgKzc3LDEzIEBAIHZvaWQgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OmFk
anVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIGlmICgmc3Rh
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c2VsZWN0aW9uUm9vdCgpICE9IHRo
aXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gbmV3U3RhcnRQb3MgPSBzdGFydFBvcy5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8gbmV3RW5kUG9zID0gZW5kUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKG5ld1N0YXJ0UG9zID49IDAgJiYg
bmV3RW5kUG9zID49IDApOwogICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9u
U3RhcnQoc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgbV9zZWxl
Y3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhzdGFydFBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKyAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlv
blN0YXJ0UG9zKG5ld1N0YXJ0UG9zKTsKICAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNl
bGVjdGlvbkVuZChlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgbV9z
ZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MoZW5kUG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkpOworICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9u
RW5kUG9zKG5ld0VuZFBvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKaW5kZXggZGQxOTE5
NzhmZDY0Yjk5YjE2ZTQ4MTBmOTZiZGU2YWQwNDEzNGU5NS4uNTYxOTFhMmE4OTJiYTJkMzM0MWRm
MmFhOTcxN2MyNzFlNjQwMzUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Nl
bGVjdGlvblN1YnRyZWVSb290LmgKQEAgLTQ1LDI4ICs0NSwyMCBAQCBwdWJsaWM6CiAKICAgICBz
dHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YSB7CiAgICAgICAgIE9sZFNlbGVjdGlvbkRhdGEoKQotICAg
ICAgICAgICAgOiBzZWxlY3Rpb25TdGFydFBvcygtMSkKLSAgICAgICAgICAgICwgc2VsZWN0aW9u
RW5kUG9zKC0xKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgc2VsZWN0aW9u
U3RhcnRQb3M7Ci0gICAgICAgIGludCBzZWxlY3Rpb25FbmRQb3M7CisgICAgICAgIE9wdGlvbmFs
PHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvczsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IHNlbGVjdGlvbkVuZFBvczsKICAgICAgICAgU2VsZWN0ZWRPYmplY3RNYXAgc2VsZWN0ZWRPYmpl
Y3RzOwogICAgICAgICBTZWxlY3RlZEJsb2NrTWFwIHNlbGVjdGVkQmxvY2tzOwogICAgIH07CiAK
ICAgICBjbGFzcyBTZWxlY3Rpb25TdWJ0cmVlRGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBT
ZWxlY3Rpb25TdWJ0cmVlRGF0YSgpCi0gICAgICAgICAgICA6IG1fc2VsZWN0aW9uU3RhcnQobnVs
bHB0cikKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcygtMSkKLSAgICAgICAgICAg
ICwgbV9zZWxlY3Rpb25FbmQobnVsbHB0cikKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmRQ
b3MoLTEpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0
YSgpID0gZGVmYXVsdDsKIAotICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YShSZW5kZXJPYmpl
Y3QqIHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9iamVjdCog
c2VsZWN0aW9uRW5kLCBpbnQgc2VsZWN0aW9uRW5kUG9zKQorICAgICAgICBTZWxlY3Rpb25TdWJ0
cmVlRGF0YShSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4g
c2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kLCBPcHRpb25hbDx1
bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKQogICAgICAgICAgICAgOiBtX3NlbGVjdGlvblN0YXJ0
KHNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgLCBtX3NlbGVjdGlvblN0YXJ0UG9zKHNlbGVj
dGlvblN0YXJ0UG9zKQogICAgICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZChzZWxlY3Rpb25FbmQp
CkBAIC03NSw0NiArNjcsNDUgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVy
T2JqZWN0KiBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnQ7
IH0KLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdGFydFBvczsgfQorICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3Rh
cnRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0UG9zOyB9CiAgICAgICAgIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmQ7
IH0KLSAgICAgICAgaW50IHNlbGVjdGlvbkVuZFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uRW5kUG9zOyB9CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3Mo
KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQogICAgICAgICBib29sIHNlbGVj
dGlvbkNsZWFyKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICFtX3NlbGVj
dGlvblN0YXJ0Ci0gICAgICAgICAgICAmJiAobV9zZWxlY3Rpb25TdGFydFBvcyA9PSAtMSkKKyAg
ICAgICAgICAgICYmICghbV9zZWxlY3Rpb25TdGFydFBvcykKICAgICAgICAgICAgICYmICFtX3Nl
bGVjdGlvbkVuZAotICAgICAgICAgICAgJiYgKG1fc2VsZWN0aW9uRW5kUG9zID09IC0xKTsKKyAg
ICAgICAgICAgICYmICghbV9zZWxlY3Rpb25FbmRQb3MpOwogICAgICAgICB9CiAKLSAgICAgICAg
dm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhpbnQmIHN0YXJ0UG9zLCBpbnQmIGVuZFBv
cykgY29uc3QKKyAgICAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyh1bnNpZ25l
ZCYgc3RhcnRQb3MsIHVuc2lnbmVkJiBlbmRQb3MpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAgICAgIGVuZFBvcyA9
IG1fc2VsZWN0aW9uRW5kUG9zOworICAgICAgICAgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlvblN0
YXJ0UG9zLnZhbHVlKCk7CisgICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvcy52
YWx1ZSgpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnQoUmVuZGVy
T2JqZWN0KiBzZWxlY3Rpb25TdGFydCkgeyBtX3NlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3Rh
cnQ7IH0KLSAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydFBvcyhpbnQgc2VsZWN0aW9uU3Rh
cnRQb3MpIHsgbV9zZWxlY3Rpb25TdGFydFBvcyA9IHNlbGVjdGlvblN0YXJ0UG9zOyB9CisgICAg
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnRQb3MoT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlv
blN0YXJ0UG9zKSB7IG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzZWxlY3Rpb25TdGFydFBvczsgfQog
ICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCkg
eyBtX3NlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfQotICAgICAgICB2b2lkIHNldFNlbGVj
dGlvbkVuZFBvcyhpbnQgc2VsZWN0aW9uRW5kUG9zKSB7IG1fc2VsZWN0aW9uRW5kUG9zID0gc2Vs
ZWN0aW9uRW5kUG9zOyB9CisgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kUG9zKE9wdGlvbmFs
PHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MpIHsgbV9zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rp
b25FbmRQb3M7IH0KICAgICAgICAgdm9pZCBjbGVhclNlbGVjdGlvbigpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBudWxscHRyOwotICAgICAgICAgICAgbV9zZWxl
Y3Rpb25TdGFydFBvcyA9IC0xOworICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFydFBvcyA9IE51
bGxvcHQ7CiAgICAgICAgICAgICBtX3NlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBtX3NlbGVjdGlvbkVuZFBvcyA9IC0xOworICAgICAgICAgICAgbV9zZWxlY3Rpb25FbmRQb3Mg
PSBOdWxsb3B0OwogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBSZW5kZXJPYmpl
Y3QqIG1fc2VsZWN0aW9uU3RhcnQ7Ci0gICAgICAgIGludCBtX3NlbGVjdGlvblN0YXJ0UG9zOwot
ICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uRW5kOwotICAgICAgICBpbnQgbV9zZWxl
Y3Rpb25FbmRQb3M7CisgICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25TdGFydCB7IG51
bGxwdHIgfTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uU3RhcnRQb3M7
CisgICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25FbmQgeyBudWxscHRyIH07CisgICAg
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlvbkVuZFBvczsKICAgICB9OwogCiAgICAg
dHlwZWRlZiBIYXNoTWFwPFNlbGVjdGlvblN1YnRyZWVSb290KiwgU2VsZWN0aW9uU3VidHJlZURh
dGE+IFJlbmRlclN1YnRyZWVzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBTZWxlY3Rp
b25TdWJ0cmVlUm9vdCosIHN0ZDo6dW5pcXVlX3B0cjxPbGRTZWxlY3Rpb25EYXRhPj4gU3VidHJl
ZU9sZFNlbGVjdGlvbkRhdGFNYXA7CiAKICAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCgpOwotICAg
IFNlbGVjdGlvblN1YnRyZWVSb290KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGludCBz
ZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rp
b25FbmRQb3MpOwogCiAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvbkRhdGEoKSB7
IHJldHVybiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9CiAgICAgY29uc3QgU2VsZWN0aW9uU3Vi
dHJlZURhdGEmIHNlbGVjdGlvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN1YnRy
ZWVEYXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAppbmRleCA4
ZDM1OTdmMmM4NGE3MGY3NjkxNWJkMjljNTgzYzc2OTUxYWE3M2EwLi42ZTVlY2MyNjdjYjZjZTA2
YzRhNWRjOTI4NGZlZmQxZjVlMjk1ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5jcHAKQEAgLTg0LDE3ICs4NCwxNyBAQCBUZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogfQogCiB2b2lkIFRleHRQYWludGVyOjpkcmF3VGV4
dE9yRW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssCi0gICAgaW50IGVtcGhh
c2lzTWFya09mZnNldCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0KQorICAgIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3Qg
RmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCkKIHsKICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPCBlbmRPZmZzZXQpOwogICAgIGlm
IChlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQogICAgICAgICBtX2NvbnRleHQuZHJhd1RleHQoZm9u
dCwgdGV4dFJ1biwgdGV4dE9yaWdpbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAgICAgZWxz
ZQotICAgICAgICBtX2NvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1biwgZW1w
aGFzaXNNYXJrLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSgwLCBlbXBoYXNpc01hcmtPZmZzZXQpLCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgbV9jb250ZXh0LmRyYXdFbXBoYXNpc01h
cmtzKGZvbnQsIHRleHRSdW4sIGVtcGhhc2lzTWFyaywgdGV4dE9yaWdpbiArIEZsb2F0U2l6ZSgw
LCBlbXBoYXNpc01hcmtPZmZzZXQpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIH0KIAogdm9p
ZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29u
c3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAg
IGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBo
YXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCkKKyAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcm
IGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQpCiB7
CiAgICAgaWYgKCFzaGFkb3cpIHsKICAgICAgICAgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoZm9u
dCwgdGV4dFJ1biwgZW1waGFzaXNNYXJrLCBlbXBoYXNpc01hcmtPZmZzZXQsIHRleHRPcmlnaW4s
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgVGV4dFBh
aW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgY29u
c3QgRm9udENhc2NhCiAgICAgfQogfQogCi12b2lkIFRleHRQYWludGVyOjpwYWludFRleHRBbmRF
bXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmxvYXRS
ZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZz
ZXQsIGludCBlbmRPZmZzZXQsCit2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRBbmRFbXBoYXNp
c01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmxvYXRSZWN0JiBi
b3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LAogICAgIGNvbnN0IFRleHRQYWludFN0eWxlJiBwYWludFN0
eWxlLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7CiAgICAgLy8gRklYTUU6IFRydW5jYXRl
IHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBU
ZXh0UGFpbnRlcjo6cGFpbnRUZXh0QW5kRW1waGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGNvbnMKICAgICAgICAgbV9jb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihi
b3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAgICAgCi12b2lkIFRleHRQYWludGVyOjpw
YWludFRleHQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgaW50IGxlbmd0aCwgY29uc3QgRmxvYXRS
ZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgc2VsZWN0aW9u
U3RhcnQsIGludCBzZWxlY3Rpb25FbmQsCit2b2lkIFRleHRQYWludGVyOjpwYWludFRleHQoY29u
c3QgVGV4dFJ1biYgdGV4dFJ1biwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGbG9hdFJlY3QmIGJv
eFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHNlbGVjdGlvblN0
YXJ0LCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQsCiAgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5KQogewogICAgIEFTU0VSVChtX2Zv
bnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAppbmRleCBlNGI1YjE4Y2Nm
M2NhMjYxMzM0MGUwZWE0ZGRhZGIxYmY5NTBiZjEyLi4yZTE2N2ZiMzM4ZjdhZmVkMmFiYjQ2Yjcz
ZGIwZTliZGQ4MmQyZDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4
dFBhaW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaApA
QCAtNTQsMTggKzU0LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNlbGVjdGlvblBhaW50U3R5
bGUoY29uc3QgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlvblBhaW50U3R5bGUpIHsgbV9zZWxlY3Rp
b25QYWludFN0eWxlID0gc2VsZWN0aW9uUGFpbnRTdHlsZTsgfQogICAgIHZvaWQgc2V0SXNIb3Jp
em9udGFsKGJvb2wgaXNIb3Jpem9udGFsKSB7IG1fdGV4dEJveElzSG9yaXpvbnRhbCA9IGlzSG9y
aXpvbnRhbDsgfQogICAgIHZvaWQgc2V0Rm9udChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkgeyBt
X2ZvbnQgPSAmZm9udDsgfQotICAgIHZvaWQgYWRkRW1waGFzaXMoY29uc3QgQXRvbWljU3RyaW5n
JiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0
Kik7CisgICAgdm9pZCBhZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFy
aywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5kZXJDb21iaW5lVGV4dCopOwogICAgIHZv
aWQgYWRkVGV4dFNoYWRvdyhjb25zdCBTaGFkb3dEYXRhKiB0ZXh0U2hhZG93LCBjb25zdCBTaGFk
b3dEYXRhKiBzZWxlY3Rpb25TaGFkb3cpOwogCi0gICAgdm9pZCBwYWludFRleHQoY29uc3QgVGV4
dFJ1biYsIGludCBsZW5ndGgsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQ
b2ludCYgdGV4dE9yaWdpbiwKLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0ID0gMCwgaW50IHNl
bGVjdGlvbkVuZCA9IDAsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gZmFsc2UsIGJvb2wg
cGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRUZXh0
KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwKKyAgICAgICAgdW5zaWduZWQgc2VsZWN0
aW9uU3RhcnQgPSAwLCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSAwLCBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSA9IGZhbHNlLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IGZh
bHNlKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFz
aXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LAotICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOworICAgIHZvaWQg
ZHJhd1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09m
ZnNldCwKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAgICAgdm9pZCBwYWludFRleHRXaXRoU2hh
ZG93cyhjb25zdCBTaGFkb3dEYXRhKiwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2lu
LAotICAgICAgICBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0
cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQp
OwotICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1waGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNp
c01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwgYm9vbCBzdHJva2VkKTsKKyAgICB2b2lk
IHBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LAogICAgICAgICBjb25zdCBUZXh0UGFp
bnRTdHlsZSYsIGNvbnN0IFNoYWRvd0RhdGEqKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgbV9j
b250ZXh0OwpAQCAtNzYsMTEgKzc2LDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgU2hhZG93RGF0
YSogbV9zZWxlY3Rpb25TaGFkb3cgeyBudWxscHRyIH07CiAgICAgQXRvbWljU3RyaW5nIG1fZW1w
aGFzaXNNYXJrOwogICAgIFJlbmRlckNvbWJpbmVUZXh0KiBtX2NvbWJpbmVkVGV4dCB7IG51bGxw
dHIgfTsKLSAgICBpbnQgbV9lbXBoYXNpc01hcmtPZmZzZXQgeyAwIH07CisgICAgZmxvYXQgbV9l
bXBoYXNpc01hcmtPZmZzZXQgeyAwIH07CiAgICAgYm9vbCBtX3RleHRCb3hJc0hvcml6b250YWwg
eyB0cnVlIH07CiB9OwogCi1pbmxpbmUgdm9pZCBUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMoY29u
c3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIFJl
bmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQpCitpbmxpbmUgdm9pZCBUZXh0UGFpbnRlcjo6
YWRkRW1waGFzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGZsb2F0IGVtcGhh
c2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCkKIHsKICAgICBt
X2VtcGhhc2lzTWFyayA9IGVtcGhhc2lzTWFyazsKICAgICBtX2VtcGhhc2lzTWFya09mZnNldCA9
IGVtcGhhc2lzTWFya09mZnNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IGE0ZjQxOWZkNmE4ZjliNGNmZDg1OGJkMzJjZmQw
ZDUzYThhNDg5NTAuLmE3MGVlMjQ2NjFjOTM2M2M3OWMxYTcxOWM5ZTA1NzYwMzY5ZWNiMTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cApAQCAtMTQ2LDggKzE0Niw4IEBAIExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxT
ZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpCiAKICAgICBBZmZp
bmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3Q7Ci0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgaW50IGZyYWdtZW50
RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7
CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKICAgICB1bnNpZ25lZCB0
ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTIwMywxMiArMjAz
LDEyIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBh
aW50SW5mbyYgcGFpbnRJbmZvKQogCiAgICAgYXV0byYgc3R5bGUgPSBwYXJlbnRSZW5kZXJlci5z
dHlsZSgpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uOwor
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb247CiAg
ICAgc3RkOjp0aWUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pID0gc2VsZWN0aW9uU3RhcnRF
bmQoKTsKIAotICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBmcmFn
bWVudEVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24g
PSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogICAgIEFmZmluZVRy
YW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6
ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTQwNywyMSArNDA3LDI0IEBAIFRleHRSdW4g
U1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IFNWR1RlCiAgICAgcmV0dXJuIHJ1bjsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0
Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3Np
dGlvbikgY29uc3QKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1
bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewog
ICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpbnQgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5jaGFyYWN0
ZXJPZmZzZXQpIC0gc3RhcnQoKTsKLSAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50Pihm
cmFnbWVudC5sZW5ndGgpOworICAgIEFTU0VSVChmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgPj0g
c3RhcnQoKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0
IC0gc3RhcnQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBmcmFnbWVudC5sZW5ndGg7CiAKICAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBvZmZzZXQgKyBsZW5ndGggfHwgZW5kUG9zaXRpb24gPD0g
b2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8
IG9mZnNldCkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgZWxzZQorICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA+PSBvZmZzZXQpOwogICAgICAgICBzdGFy
dFBvc2l0aW9uIC09IG9mZnNldDsKKyAgICB9CiAKICAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZz
ZXQgKyBsZW5ndGgpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGVuZ3RoOwpAQCAtNTQwLDcgKzU0
Myw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgVGV4dERlCiAgICAgICAgIHJlbGVhc2VQYWludGluZ1Jl
c291cmNlKGNvbnRleHRQdHIsICZwYXRoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikKK3ZvaWQgU1ZHSW5s
aW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVu
ZFBvc2l0aW9uKQogewogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSByZW5kZXJlcigpLnNjYWxp
bmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CkBAIC01OTAsOCArNTkzLDgg
QEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3QKICAgICBBU1NFUlQoc3R5bGUpOwogICAgIEFTU0VS
VChzZWxlY3Rpb25TdHlsZSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgaW50
IGVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gMDsKKyAgICB1
bnNpZ25lZCBlbmRQb3NpdGlvbiA9IDA7CiAgICAgaWYgKGhhc1NlbGVjdGlvbikgewogICAgICAg
ICBzdGQ6OnRpZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgPSBzZWxlY3Rpb25TdGFydEVu
ZCgpOwogICAgICAgICBoYXNTZWxlY3Rpb24gPSBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBA
IC02MTgsNyArNjIxLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3QKICAgICAgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5
bGVEaWZmZXJlbmNlUmVwYWludCwgKnN0eWxlKTsKIAogICAgIC8vIEV2ZW50dWFsbHkgZHJhdyB0
ZXh0IHVzaW5nIHJlZ3VsYXIgc3R5bGUgZnJvbSB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxl
Y3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjaHVuayBwYXJ0Ci0gICAgaWYgKGVuZFBv
c2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5sZW5ndGgpICYmICFwYWludFNlbGVj
dGVkVGV4dE9ubHkpCisgICAgaWYgKGVuZFBvc2l0aW9uIDwgZnJhZ21lbnQubGVuZ3RoICYmICFw
YWludFNlbGVjdGVkVGV4dE9ubHkpCiAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwgZW5kUG9zaXRpb24sIGZyYWdtZW50Lmxlbmd0
aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmgKaW5kZXggYzhmZDE0ODg4YjQ2MjM0MjUxM2FlOTcwOTliNzc2MDk2M2JiMTgyNy4uYTU4
ODc1NWJjMGEyNDM3YWZlN2NiOTAxYTY2NjQwOTc5Y2Y3ZmE5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CiAgICAg
TGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQ
b3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25z
SW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFy
dFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50Jiwg
dW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAK
ICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlOwogCkBA
IC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFw
aGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jik7CiAg
ICAgdm9pZCBwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiwgVGV4dERl
Y29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIFJlbmRlckJveE1vZGVsT2JqZWN0JiBk
ZWNvcmF0aW9uUmVuZGVyZXIpOwotICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbik7CisgICAgdm9pZCBw
YWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSos
IFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1bnNpZ25lZCBzdGFydFBvc2l0aW9u
LCB1bnNpZ25lZCBlbmRQb3NpdGlvbik7CiAgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5
bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50
U2VsZWN0ZWRUZXh0T25seSk7CiAKICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25J
bkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbikgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVy
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKaW5k
ZXggZmYzNjY3NzE3MTUzMTU4ZjY3NjI4NzdhOTg4MDg4MGIyZWMwZDdlZS4uOTMzMGFhYTFjNzEx
ZGFlNTE2ODJiY2IzOTM2MTUzYjJiMTRmYzllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcApAQCAtMTM0LDEzICsxMzQsMTUgQEAgYm9vbCBTVkdU
ZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRhKiBxdWVyeURhdGEsIFByb2Nlc3NUZXh0RnJhZ21l
bnRDYWxsYmFjayBmcmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5
OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5
RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9u
LCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWdu
ZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIC8vIFJldXNlIHRoZSBzYW1lIGxvZ2ljIHVz
ZWQgZm9yIHRleHQgc2VsZWN0aW9uICYgcGFpbnRpbmcsIHRvIG1hcCBvdXIgcXVlcnkgc3RhcnQv
bGVuZ3RoIGludG8gc3RhcnQvZW5kUG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IHRleHQgZnJhZ21l
bnQuCisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFy
YWN0ZXJzKTsKKyAgICBBU1NFUlQoZW5kUG9zaXRpb24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRD
aGFyYWN0ZXJzKTsKICAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hh
cmFjdGVyczsKICAgICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3Rl
cnM7CiAKLSAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbiB8fCBzdGFydFBvc2l0
aW9uIDwgMCB8fCBlbmRQb3NpdGlvbiA8IDApCisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5k
UG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1vZGlmeVN0YXJ0RW5kUG9z
aXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhxdWVyeURhdGEsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKQEAgLTE1MSw3ICsxNTMsNyBAQCBib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0
aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpbnQmIHN0YXJ0UG9zaXRp
b24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Cit2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3Rh
cnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgdW5zaWdu
ZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICBT
VkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbGF5b3V0QXR0cmlidXRlcyA9IHF1ZXJ5RGF0YS0+dGV4
dFJlbmRlcmVyLT5sYXlvdXRBdHRyaWJ1dGVzKCk7CiAgICAgVmVjdG9yPFNWR1RleHRNZXRyaWNz
PiYgdGV4dE1ldHJpY3NWYWx1ZXMgPSBsYXlvdXRBdHRyaWJ1dGVzLT50ZXh0TWV0cmljc1ZhbHVl
cygpOwpAQCAtMTY3LDcgKzE2OSw3IEBAIHZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVu
ZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpCiAgICAgYm9v
bCBhbHRlclN0YXJ0UG9zaXRpb24gPSB0cnVlOwogICAgIGJvb2wgYWx0ZXJFbmRQb3NpdGlvbiA9
IHRydWU7CiAKLSAgICBpbnQgbGFzdFBvc2l0aW9uT2Zmc2V0ID0gLTE7CisgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IGxhc3RQb3NpdGlvbk9mZnNldDsKICAgICBmb3IgKDsgdGV4dE1ldHJpY3NPZmZz
ZXQgPCB0ZXh0TWV0cmljc1NpemUgJiYgcG9zaXRpb25PZmZzZXQgPCBwb3NpdGlvblNpemU7ICsr
dGV4dE1ldHJpY3NPZmZzZXQpIHsKICAgICAgICAgU1ZHVGV4dE1ldHJpY3MmIG1ldHJpY3MgPSB0
ZXh0TWV0cmljc1ZhbHVlc1t0ZXh0TWV0cmljc09mZnNldF07CiAKQEAgLTE4MiwyMSArMTg0LDIx
IEBAIHZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdM
aWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0
cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBpdC4KLSAgICAgICAgaWYgKHN0YXJ0
UG9zaXRpb24gPT0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgIGlm
IChzdGFydFBvc2l0aW9uID09IHBvc2l0aW9uT2Zmc2V0KQogICAgICAgICAgICAgYWx0ZXJTdGFy
dFBvc2l0aW9uID0gZmFsc2U7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IHBvc2l0aW9uIG1h
cHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhlIG1ldHJpY3MgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0byBt
b2RpZnkgaXQuCi0gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHBvc2l0aW9uT2Zmc2V0
KQogICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOwogCiAgICAgICAgIC8vIERl
dGVjdCBsaWdhdHVyZXMuCi0gICAgICAgIGlmIChsYXN0UG9zaXRpb25PZmZzZXQgIT0gLTEgJiYg
bGFzdFBvc2l0aW9uT2Zmc2V0IC0gcG9zaXRpb25PZmZzZXQgPiAxKSB7Ci0gICAgICAgICAgICBp
ZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZz
ZXQgJiYgc3RhcnRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKSB7
Ci0gICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldDsKKyAg
ICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAmJiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUo
KSAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgeworICAgICAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3Np
dGlvbiAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgJiYgc3Rh
cnRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgc3RhcnRQb3Np
dGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGFsdGVy
U3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
YWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBl
bmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKSB7CisgICAgICAg
ICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9m
ZnNldC52YWx1ZSgpICYmIGVuZFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpIHsKICAgICAgICAg
ICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uT2Zmc2V0OwogICAgICAgICAgICAgICAgIGFs
dGVyRW5kUG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTIxMiwxMSArMjE0LDEx
IEBAIHZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdM
aWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpCiAgICAgaWYgKCFhbHRlclN0YXJ0UG9zaXRpb24g
JiYgIWFsdGVyRW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsYXN0UG9z
aXRpb25PZmZzZXQgIT0gLTEgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0IC0gcG9zaXRpb25PZmZzZXQg
PiAxKSB7Ci0gICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+
IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihw
b3NpdGlvbk9mZnNldCkpCi0gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9u
T2Zmc2V0OworICAgIGlmIChsYXN0UG9zaXRpb25PZmZzZXQgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0
LnZhbHVlKCkgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKKyAgICAgICAgaWYgKGFsdGVyU3RhcnRQ
b3NpdGlvbiAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgJiYg
c3RhcnRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KQorICAgICAgICAgICAgc3RhcnRQb3NpdGlv
biA9IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpOwogCi0gICAgICAgIGlmIChhbHRlckVuZFBv
c2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9u
IDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgIGlmIChhbHRlckVu
ZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgJiYg
ZW5kUG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkKICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0g
cG9zaXRpb25PZmZzZXQ7CiAgICAgfQogfQpAQCAtMjg0LDggKzI4Niw4IEBAIGJvb2wgU1ZHVGV4
dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R1RleHRGcmFnbWVuCiB7CiAgICAgU3ViU3RyaW5nTGVuZ3RoRGF0YSogZGF0YSA9IHN0YXRpY19j
YXN0PFN1YlN0cmluZ0xlbmd0aERhdGEqPihxdWVyeURhdGEpOwogCi0gICAgaW50IHN0YXJ0UG9z
aXRpb24gPSBkYXRhLT5zdGFydFBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyBkYXRhLT5sZW5ndGg7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRh
dGEtPnN0YXJ0UG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uICsgZGF0YS0+bGVuZ3RoOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzE5LDggKzMyMSw4IEBAIGJv
b2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1RlCiB7CiAgICAgU3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0
YSogZGF0YSA9IHN0YXRpY19jYXN0PFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVy
eURhdGEpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAgICBp
bnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uID0gZGF0YS0+cG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFy
dFBvc2l0aW9uICsgMTsKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM2OCw4ICszNzAsOCBAQCBib29sIFNW
R1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0
YSwgY29uc3QgU1ZHVGV4dAogewogICAgIEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRh
ID0gc3RhdGljX2Nhc3Q8RW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwog
Ci0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9z
aXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0g
ZGF0YS0+cG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9u
ICsgMTsKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0
ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQxNiw4ICs0MTgsOCBAQCBib29sIFNWR1RleHRRdWVy
eTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZH
VGV4dEZyYQogewogICAgIFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nh
c3Q8Um90YXRpb25PZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCi0gICAgaW50IHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBv
c2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247
CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKICAgICBpZiAo
IW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBm
cmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTQ1NCw3ICs0NTYsNyBAQCBzdHJ1Y3QgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhIDog
U1ZHVGV4dFF1ZXJ5OjpEYXRhIHsKICAgICBGbG9hdFJlY3QgZXh0ZW50OwogfTsKIAotc3RhdGlj
IGlubGluZSB2b2lkIGNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRhdGEq
IHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9z
aXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQorc3RhdGljIGlubGluZSB2b2lkIGNhbGN1bGF0ZUds
eXBoQm91bmRhcmllcyhTVkdUZXh0UXVlcnk6OkRhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgRmxvYXRSZWN0JiBl
eHRlbnQpCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRl
cmVyLT5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwpAQCAtNDg0
LDggKzQ4Niw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNr
KERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtCiB7CiAgICAgRXh0ZW50T2ZDaGFy
YWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKj4ocXVl
cnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAg
aW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3Rh
cnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVu
dENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MTksOCArNTIxLDggQEAgYm9vbCBT
VkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVy
eURhdGEsIGNvbnN0IFNWR1QKIAogICAgIEZsb2F0UmVjdCBleHRlbnQ7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGludCBzdGFy
dFBvc2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7Ci0gICAgICAgIGludCBl
bmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgICAgICB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7CisgICAgICAgIHVuc2lnbmVk
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgICAgIGlmICghbWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKaW5kZXggNzIxYjJkZjhl
MzMyNDVkYTg2NDMzODViZTZlZTJiMWQyYjA5MzhkZi4uMzg3MzBhMzhkMDYxZTgyNWNkOTM3ZDc4
MTg0YjhkM2IzZmEwZmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRRdWVyeS5oCkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRlUXVl
cnkoRGF0YSosIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykgY29uc3Q7CiAKICAgICB2b2lk
IGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCopOwotICAgIGJvb2wgbWFw
U3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25z
dDsKLSAgICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhE
YXRhKiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBi
b29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSosIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYg
ZW5kUG9zaXRpb24pIGNvbnN0OworICAgIHZvaWQgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNw
ZWN0aW5nTGlnYXR1cmVzKERhdGEqLCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQm
IGVuZFBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIG51bWJlck9mQ2hhcmFj
dGVyc0NhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285798</attachid>
            <date>2016-08-10 18:32:02 -0700</date>
            <delta_ts>2016-08-11 13:25:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-160735-20160810183025.patch</filename>
            <type>text/plain</type>
            <size>132539</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBmYTg2NzlhMTY2ODUy
MDg1NTMxYzU0MDA0OWQzZTA1NjBkMzZmMy4uOTllMzU1MDY1MTdjYWVhNDViZDY1OGI2ZjQwMjdi
MDcyNzU5ZjA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3OSBAQAorMjAxNi0wOC0xMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVEcmFnSW1hZ2VGb3JSYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdseXBoQnVmZmVyRm9y
VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd1RleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlVW5kZXJsaW5lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6
OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmdseXBocyk6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhCdWZmZXI6OmZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhB
dCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZUF0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlw
aEJ1ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0
SW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNocmluayk6CisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c3dhcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lz
TWFya3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oOgorICAgICAg
ICAoV2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpMYXRpbjFUZXh0SXRlcmF0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpT
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
YWR2YW5jZU9uZUNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRT
ZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNsYW1w
ZWRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3Rh
cnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1h
cmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
dCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6Om9mZnNldFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpJbmxpbmVUZXh0Qm94KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRS
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxD
YXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3Rl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVj
dGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OmdldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJW
aWV3KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVE
YXRhOjpTZWxlY3Rpb25TdWJ0cmVlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0
YTo6c2VsZWN0aW9uRW5kUG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uQ2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rp
b25TdGFydEVuZFBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVl
Um9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNldFNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6
c2V0U2VsZWN0aW9uRW5kUG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6Ok9sZFNlbGVjdGlvbkRhdGE6Ok9sZFNlbGVjdGlv
bkRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRQYWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFp
bnRlcjo6YWRkRW1waGFzaXMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25S
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVl
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0
aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRR
dWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFy
YWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OnJvdGF0aW9u
T2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVHbHlwaEJv
dW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJh
Y3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVy
TnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRRdWVyeS5oOgorCiAyMDE2LTA4LTA5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgT3B0aW1pemF0aW9uIGluIE5vZGUucmVwbGFjZUNoaWxkKCkgaXMgbm90IHNw
ZWMtY29tcGxpYW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmlu
ZGV4IDMzODM0YWQwOTZlODE4MjI1MTZlNzgxM2IyYjgwZGM5YmIyNmUyZDQuLmU1ZDdiZjljNDhh
ZGEzODhiYTYzMjg1MDg3MTBlNDU4ZTIwNzdiODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMDg4LDggKzIwODgsMTEgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCB5ZXQgbm90
aWZ5IHRoZSBGcmFtZVNlbGVjdGlvbiBvZiB0ZXh0IHJlbW92YWwuCiAgICAgaWYgKHN0YXJ0UG9z
LmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewogICAgICAgICBSZW5kZXJPYmplY3Qq
IHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwor
ICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRS
ZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIs
IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgYXV0byBlbmRPZmZz
ZXQgPSBlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICAgICAgQVNTRVJUKHN0
YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOworICAgICAgICB2aWV3LT5zZXRTZWxl
Y3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVuZFJlbmRlcmVyLCBlbmRPZmZzZXQp
OwogICAgIH0KIH0KIApAQCAtMjA5OCw3ICsyMTAxLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6
c2V0Q2FyZXRWaXNpYmlsaXR5KENhcmV0VmlzaWJpbGl0eSB2aXNpYmlsaXR5KQogICAgIGlmIChj
YXJldFZpc2liaWxpdHkoKSA9PSB2aXNpYmlsaXR5KQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJub3VzbHkgbGF5b3V0IGhlcmUu
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCB0cmlnZ2VyIGEgc3luY2hyb25vdXMgbGF5b3V0
IGhlcmUuCiAgICAgaWYgKG1fZnJhbWUpCiAgICAgICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRp
bmdMYXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFn
ZS5jcHAKaW5kZXggZDNjYmMxYTYzYjEwYjczMDgzZTVlMzA4OWNlOTJjYjU0MDg0MDZjMC4uYjIw
YjcxNzI0YjQ0ZWY4NDEwZjNkNmIyMjUxYTY1YWEzM2VhNjExYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0xNDEsOCArMTQxLDggQEAgc3RydWN0IFNjb3BlZEZyYW1l
U2VsZWN0aW9uU3RhdGUgewogICAgIGNvbnN0IEZyYW1lJiBmcmFtZTsKICAgICBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UmVuZGVyZXI7CiAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlcjsKLSAgICBp
bnQgc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGVuZE9mZnNldDsKKyAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gc3RhcnRPZmZzZXQ7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldDsKIH07CiAK
IERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdl
JiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKQEAgLTE3NCw3ICsxNzQsMTAgQEAgRHJhZ0lt
YWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdl
LCBib29sIGZvcmNlQmxhY2sKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBTbmFwc2hv
dE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc1BhaW50U2VsZWN0aW9uT25seSB8IChm
b3JjZUJsYWNrVGV4dCA/IFNuYXBzaG90T3B0aW9uc0ZvcmNlQmxhY2tUZXh0IDogU25hcHNob3RP
cHRpb25zTm9uZSk7Ci0gICAgdmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVuZFJlbmRlcmVyLCBlbmQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhpbmcpOworICAgIGF1dG8gc3Rh
cnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8gZW5k
T2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKHN0YXJ0
T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOworICAgIHZpZXctPnNldFNlbGVjdGlvbihz
dGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVy
Vmlldzo6UmVwYWludE5vdGhpbmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RG
cmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8v
IEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJv
bSB0aGUgRnJhbWUgaXRzZWxmLgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNo
b3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbkJvdW5kcygpLCBvcHRp
b25zKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKaW5kZXggNDM4MGI1YzA4NTMyZTgyMWFjYWEzNGVmMmNkNzhiNTExNjZh
NWJiOS4uMzg2Njk5MWYwODhkYjE1OWQ1MGNkMzdiYTJhMzFjYmNiNDkxMGNhNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMjk0
LDE0ICsyOTQsMTQgQEAgdm9pZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0
b3I+JiYgZm9udFNlbGVjdG9yKSBjb25zdAogICAgIG1fcmVxdWlyZXNTaGFwaW5nID0gY29tcHV0
ZVJlcXVpcmVzU2hhcGluZygpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJG
b3JUZXh0UnVuKENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9u
dENhc2NhZGU6OmdseXBoQnVmZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBj
b25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIpIGNvbnN0CiB7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKICAgICAgICAgcmV0dXJuIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4s
IGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7CiAgICAgcmV0dXJuIGdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOwogfQogCi1mbG9hdCBG
b250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAorZmxv
YXQgRm9udENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0
aW9uYWw8dW5zaWduZWQ+IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uKSBjb25zdAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUg
d2UgYXJlIHVzaW5nIGN1c3RvbSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2Fk
aW5nLAogICAgIC8vIGV4Y2VwdCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1
ZSAoaW4gd2hpY2ggY2FzZSBpdCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zMDksMTUgKzMwOSwx
NSBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRz
KCkgJiYgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFk
eSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgo
KSA6IHRvKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0
aCgpKTsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAg
IC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFs
IHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMDA1MAotICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5p
bmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpKQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBs
ZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwg
ZGVzdGluYXRpb24gIT0gcnVuLmxlbmd0aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENv
bXBsZXg7CiAKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBzdGFydFgg
PSBwb2ludC54KCkgKyBnbHlwaEJ1ZmZlckZvclRleHRSdW4oY29kZVBhdGhUb1VzZSwgcnVuLCBm
cm9tLCB0bywgZ2x5cGhCdWZmZXIpOworICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGds
eXBoQnVmZmVyRm9yVGV4dFJ1bihjb2RlUGF0aFRvVXNlLCBydW4sIGZyb20sIGRlc3RpbmF0aW9u
LCBnbHlwaEJ1ZmZlcik7CiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBm
b3IgdGhlIHJ1bi4gR2l2ZSB1cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTMyNywyMyArMzI3LDIyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpk
cmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udENh
c2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2ln
bmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykgY29uc3QKIHsKICAgICBpZiAoaXNMb2Fk
aW5nQ3VzdG9tRm9udHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRvIDwgMCkKLSAg
ICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52
YWx1ZU9yKHJ1bi5sZW5ndGgoKSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29k
ZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0
IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0
cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBh
dGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5n
KCkpICYmIChmcm9tIHx8IGRlc3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNv
ZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxl
eCkKLSAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwg
bWFyaywgcG9pbnQsIGZyb20sIHRvKTsKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1w
bGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKICAg
ICBlbHNlCi0gICAgICAgIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwg
cnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0Zv
ckNvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9u
KTsKIH0KIAogZmxvYXQgRm9udENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFz
aFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3Zl
cmZsb3cpIGNvbnN0CkBAIC00OTEsMTkgKzQ5MCwxOSBAQCBib29sIEZvbnRDYXNjYWRlOjpmYXN0
QXZlcmFnZUNoYXJXaWR0aElmQXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKICAgICByZXR1
cm4gc3VjY2VzczsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1
bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pIGNvbnN0CiB7Ci0gICAgdG8gPSAo
dG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24g
PSB0by52YWx1ZU9yKHJ1bi5sZW5ndGgoKSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNl
ID0gY29kZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBv
bmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBT
ZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBD
b21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9t
IHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAo
Y29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNT
aGFwaW5nKCkpICYmIChmcm9tIHx8IGRlc3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAg
ICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21wbGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0g
Q29tcGxleCkKLSAgICAgICAgcmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0
KHJ1biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm4gYWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5h
dGlvbik7CiAKLSAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1
biwgc2VsZWN0aW9uUmVjdCwgZnJvbSwgdG8pOworICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7
CiB9CiAKIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdApAQCAtMTEyMyw3
ICsxMTIyLDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25z
dAogICAgIHJldHVybiBtX2ZvbnRzICYmIG1fZm9udHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7
CiB9CiAgICAgCi1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21w
dXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIGludCBpbmRleCkKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhV
bmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAg
Ly8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBw
aW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVu
ZGVyaW5ncywKICAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVy
cyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KQEAgLTEyMzgsNyArMTIzNyw3
IEBAIGludCBGb250Q2FzY2FkZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaykgY29uc3QKICAgICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhl
aWdodCgpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNv
bnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xMjY4LDcgKzEyNjcsNyBA
QCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgaW50IGZybwogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBp
bml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZy
b20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEyODcsOCArMTI4Niw4
IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJiBnCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQo
KSk7CiAgICAgZmxvYXQgbmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFu
Y2VBdCgwKS53aWR0aCgpOwogICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoMCkuaGVpZ2h0KCk7Ci0gICAgaW50IGxhc3RGcm9tID0gMDsKLSAg
ICBpbnQgbmV4dEdseXBoID0gMTsKKyAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CisgICAgdW5z
aWduZWQgbmV4dEdseXBoID0gMTsKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIu
c2l6ZSgpKSB7CiAgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVy
LmZvbnRBdChuZXh0R2x5cGgpOwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBo
QnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQCBpbmxpbmUg
c3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250KiBmb250RGF0YSwg
R2x5cGggZ2x5cGgpCiAgICAgcmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAv
IDI7CiB9CiAKLWlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRl
eChjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQoraW5saW5lIHN0YXRp
YyBmbG9hdCBvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgaSkKIHsKICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkds
eXBoKGdseXBoQnVmZmVyLmZvbnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CkBA
IC0xMzQ0LDcgKzEzNDMsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJgogICAgIEZsb2F0UG9p
bnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlk
ZGxlT2ZHbHlwaChtYXJrRm9udERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAKICAgICBH
bHlwaEJ1ZmZlciBtYXJrQnVmZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBo
QnVmZmVyLnNpemUoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBn
bHlwaEJ1ZmZlci5zaXplKCk7ICsraSkgewogICAgICAgICBmbG9hdCBtaWRkbGVPZk5leHRHbHlw
aCA9IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAxKTsKICAg
ICAgICAgZmxvYXQgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpIC0g
bWlkZGxlT2ZMYXN0R2x5cGggKyBtaWRkbGVPZk5leHRHbHlwaDsKICAgICAgICAgbWFya0J1ZmZl
ci5hZGQoZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1h
cmtGb250RGF0YSwgYWR2YW5jZSk7CkBAIC0xMzcxLDcgKzEzNzAsNyBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0
PGNvbnN0IEZvbgogICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QK
K3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAg
V2lkdGhJdGVyYXRvciBpdCh0aGlzLCBydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggYzZkMGMyNTk4ZWQxNjMxYmU2MTZlN2Q3OGJk
MzI2NTBjNjZjYzFkYS4uOGJkY2NhODA3MjJlMjU5OWI4MTQ1MTZmMjg2YzBiNDE0MTZkODg2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBA
IC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAw
OwogICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQogfTsKLUdseXBoVG9Q
YXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNv
bnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CitHbHlwaFRvUGF0
aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25z
dCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBpbmRleCk7CiAKIGNsYXNz
IFRleHRMYXlvdXREZWxldGVyIHsKIHB1YmxpYzoKQEAgLTEzMyw5ICsxMzMsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCB1cGRhdGUoUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJikgY29uc3Q7CiAKICAgICBl
bnVtIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwg
VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRy
YXdUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01v
ZGUpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0
IGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQs
IEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29u
c3Q7CisgICAgc3RhdGljIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3
RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAK
QEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRM
YXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+
KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3Qg
VGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25z
dDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25z
dDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5z
aWduZWQ+IHRvID0gTnVsbG9wdCkgY29uc3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29u
c3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFu
dENhcHM6OlNtYWxsOyB9CiAKQEAgLTIxOCwxNSArMjE4LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9y
VGV4dEVtcGhhc2lzIH07CiAKLSAgICBmbG9hdCBnbHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBh
dGgsIGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0
OworICAgIGZsb2F0IGdseXBoQnVmZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1
biYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OwogICAg
IC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwg
aW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVt
cGhhc2lzKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQg
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9
IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0Zv
clNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRv
bWljU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lk
dGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNl
dEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24s
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPEds
eXBoRGF0YT4gZ2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OwogCkBAIC0yMzQsMTEgKzIzNCwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGNh
bkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFk
dmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEds
eXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNv
bnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JU
ZXh0RW1waGFzaXMpIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNv
bnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwg
SGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9
IDApIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29u
c3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bykgY29uc3Q7CiAKICAgICBzdGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBU
ZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25CZWhhdmlvcik7CiAgICAgc3RhdGljIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgYm9vbD4gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKaW5kZXgg
YzgyYWYzOTA4NDRmNWQyN2UyZTYwNDc5ZDliZDdlYjQ5MWQwNzlkYi4uNTYzNTQwYzBlNzQzOWUy
NDQ4NjQxM2UwNmI5NDc4YjFjNzhjY2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIHR5cGVkZWYgRmxvYXRT
aXplIEdseXBoQnVmZmVyQWR2YW5jZTsKIGNsYXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXNFbXB0eSgpOyB9Ci0gICAg
aW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5zaXplKCk7IH0KICAgICAKICAgICB2b2lkIGNs
ZWFyKCkKICAgICB7CkBAIC05MSwxMiArOTEsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQog
Ci0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKGludCBmcm9tKSB7IHJldHVybiBtX2dseXBo
cy5kYXRhKCkgKyBmcm9tOyB9Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQg
ZnJvbSkgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9Ci0gICAgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5k
YXRhKCkgKyBmcm9tOyB9Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhp
bnQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CisgICAg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJuIG1fZ2x5cGhz
LmRhdGEoKSArIGZyb207IH0KKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2ln
bmVkIGZyb20pIHsgcmV0dXJuIG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyh1bnNpZ25lZCBmcm9tKSBjb25zdCB7IHJldHVybiBt
X2dseXBocy5kYXRhKCkgKyBmcm9tOyB9CisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcyh1bnNpZ25lZCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSAr
IGZyb207IH0KIAotICAgIGNvbnN0IEZvbnQqIGZvbnRBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udFtpbmRleF07IH0KKyAgICBjb25zdCBGb250KiBmb250QXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFtpbmRleF07IH0KIAogICAgIHZvaWQgc2V0SW5pdGlh
bEFkdmFuY2UoR2x5cGhCdWZmZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFk
dmFuY2UgPSBpbml0aWFsQWR2YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYg
aW5pdGlhbEFkdmFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CkBAIC0x
MDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGVhZGluZ0V4cGFuc2lvbihmbG9h
dCBsZWFkaW5nRXhwYW5zaW9uKSB7IG1fbGVhZGluZ0V4cGFuc2lvbiA9IGxlYWRpbmdFeHBhbnNp
b247IH0KICAgICBmbG9hdCBsZWFkaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9sZWFk
aW5nRXhwYW5zaW9uOyB9CiAgICAgCi0gICAgR2x5cGggZ2x5cGhBdChpbnQgaW5kZXgpIGNvbnN0
CisgICAgR2x5cGggZ2x5cGhBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgVVNF
KENBSVJPKQogICAgICAgICByZXR1cm4gbV9nbHlwaHNbaW5kZXhdLmluZGV4OwpAQCAtMTEzLDEy
ICsxMTMsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZh
bmNlIGFkdmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFk
dmFuY2VBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Fk
dmFuY2VzW2luZGV4XTsKICAgICB9CiAKLSAgICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4
KSBjb25zdAorICAgIEZsb2F0U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAg
ICB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsK
QEAgLTE4MCw5ICsxODAsOSBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJl
dmVyc2UoaW50IGZyb20sIGludCBsZW5ndGgpCisgICAgdm9pZCByZXZlcnNlKHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tLCBl
bmQgPSBmcm9tICsgbGVuZ3RoIC0gMTsgaSA8IGVuZDsgKytpLCAtLWVuZCkKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZnJvbSwgZW5kID0gZnJvbSArIGxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsr
aSwgLS1lbmQpCiAgICAgICAgICAgICBzd2FwKGksIGVuZCk7CiAgICAgfQogCkBAIC0xOTgsMTQg
KzE5OCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fb2Zmc2V0c0luU3RyaW5nLnJlc2V0KG5ldyBW
ZWN0b3I8dW5zaWduZWQsIDIwNDg+KCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIGNv
bnZlcnRzIGZyb20gYW4gdW5zaWduZWQgdG8gYW4gaW50Ci0gICAgaW50IG9mZnNldEluU3RyaW5n
KGludCBpbmRleCkgY29uc3QKKyAgICBpbnQgb2Zmc2V0SW5TdHJpbmcodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9vZmZzZXRzSW5TdHJpbmcpOwogICAgICAg
ICByZXR1cm4gKCptX29mZnNldHNJblN0cmluZylbaW5kZXhdOwogICAgIH0KIAotICAgIHZvaWQg
c2hyaW5rKGludCB0cnVuY2F0aW9uUG9pbnQpCisgICAgdm9pZCBzaHJpbmsodW5zaWduZWQgdHJ1
bmNhdGlvblBvaW50KQogICAgIHsKICAgICAgICAgbV9mb250LnNocmluayh0cnVuY2F0aW9uUG9p
bnQpOwogICAgICAgICBtX2dseXBocy5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKQEAgLTIxOCw3
ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dhcChpbnQg
aW5kZXgxLCBpbnQgaW5kZXgyKQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEsIHVuc2ln
bmVkIGluZGV4MikKICAgICB7CiAgICAgICAgIGNvbnN0IEZvbnQqIGYgPSBtX2ZvbnRbaW5kZXgx
XTsKICAgICAgICAgbV9mb250W2luZGV4MV0gPSBtX2ZvbnRbaW5kZXgyXTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4
IGFmMTkxMjI3MDM0ZWFjMTYwYmUzZmIyYTA2ZjZkNGRlM2JmZjI3ZWUuLmVkZjYwNTM4Yjg5MzBi
ZTBiODk3OTk5YTVlNDMxMGM3NTBhNDc3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNjM2LDcgKzYzNiw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgLS1tX3Ry
YW5zcGFyZW5jeUNvdW50OwogfQogCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjQ1
LDcgKzY0NSw3IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uCiAgICAgcmV0dXJuIGZvbnQuZHJh
d1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjU4LDcgKzY1OCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3Qg
Rm9udCYgZm9uCiAgICAgZm9udENhc2NhZGUuZHJhd0dseXBocygqdGhpcywgZm9udCwgYnVmZmVy
LCBmcm9tLCBudW1HbHlwaHMsIHBvaW50LCBmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKS5m
b250U21vb3RoaW5nKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNp
Z25lZD4gdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCAzODkzNDA2NjQ5MzQ4OTQ2NDBjMzM2ZGJiMjJlZTE4ZmE2YjJhNWFmLi5hNmU2
ZmIwM2MyYmRiMDA3ZjFhNmI4MDE2MDk3Y2RmNmIzODc4YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzgxLDkgKzM4
MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01v
ZGVGbGFncyk7CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIGZsb2F0IGRyYXdU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7
CisgICAgZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4g
dG8gPSBOdWxsb3B0KTsKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNp
Z25lZD4gdG8gPSBOdWxsb3B0KTsKICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90
UmVhZHkpOwogCiAgICAgdm9pZCBhcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFU
ZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRl
eHRJdGVyYXRvci5oCmluZGV4IGM0MDE4OWJmZTkzMzJhMGRlYjQwNjQzYzE0ZDFlMjgwNzdkYWQz
ODkuLjZiN2U1OTlkMDAyM2Y5OGIzMjYwNjgyMDlmOWM2MDI3Mjc3ZWRiYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5o
CkBAIC0zMCw3ICszMCw3IEBAIGNsYXNzIExhdGluMVRleHRJdGVyYXRvciB7CiBwdWJsaWM6CiAg
ICAgLy8gVGhlIHBhc3NlZCBpbiBMQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJh
Y3RlcicuIFRoZSBpdGVyYXRvciBvcGVyYXRlcyBvbiB0aGUgcmFuZ2UgW2N1cnJlbnRDaGFyYWN0
ZXIsIGxhc3RDaGFyYWN0ZXJdLgogICAgIC8vICdlbmRDaGFyYWN0ZXInIGRlbm90ZXMgdGhlIG1h
eGltdW0gbGVuZ3RoIG9mIHRoZSBVQ2hhciBhcnJheSwgd2hpY2ggbWlnaHQgZXhjZWVkICdsYXN0
Q2hhcmFjdGVyJy4KLSAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJhY3Rl
cnMsIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50IC8qZW5kQ2hh
cmFjdGVyKi8pCisgICAgTGF0aW4xVGV4dEl0ZXJhdG9yKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVyLCB1bnNp
Z25lZCAvKmVuZENoYXJhY3RlciovKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJz
KQogICAgICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQogICAgICAg
ICAsIG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFjdGVyKQpAQCAtNTMsMTMgKzUzLDEzIEBAIHB1
YmxpYzoKICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5ndGg7CiAgICAg
fQogCi0gICAgaW50IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRD
aGFyYWN0ZXI7IH0KKyAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9CiAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMoKSBj
b25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBMQ2hh
ciogbV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1f
bGFzdENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgdW5z
aWduZWQgbV9sYXN0Q2hhcmFjdGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5jcHAKaW5kZXggOTE1NWU3MTFhOGRhODBkNGViM2RjZjVkYTVhYzMwNWEyOGNiZWE3
OS4uY2U3MDRiZTNmMjM2MDNjODJmODhkMTE1Y2RkNmJlYzBmNTQxNjdlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dh
dGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBjdXJyZW50
Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvcjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25l
ZCBsYXN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBlbmRDaGFyYWN0ZXIpCiAgICAgOiBtX2NoYXJhY3Rl
cnMoY2hhcmFjdGVycykKICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVy
KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFyYWN0ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oCmluZGV4IDg1Yzk2OTRjNzZhMjJjZGVhZWViM2JhODQxYjEwYTBhNTAz
MTY4MTMuLjFhNzE1YzBjYTJkMjQ4M2IyNDcyOTk3NWViNzVjOWZhMjIzNmVkNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oCkBAIC0zMCw3ICszMCw3IEBAIGNsYXNzIFN1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgLy8gVGhlIHBhc3NlZCBp
biBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJhY3RlcicuIFRoZSBpdGVyYXRv
ciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVy
XS4KICAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0
aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3RlcicuCi0gICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVyKTsKKyAgICBTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBjdXJyZW50
Q2hhcmFjdGVyLCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBlbmRDaGFyYWN0ZXIp
OwogCiAgICAgaW5saW5lIGJvb2wgY29uc3VtZShVQ2hhcjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVk
JiBjbHVzdGVyTGVuZ3RoKQogICAgIHsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAgICBpbnQg
Y3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQor
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRD
aGFyYWN0ZXI7IH0KICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgpAQCAtNjAsOSArNjAsOSBAQCBwcml2YXRlOgog
ICAgIFVDaGFyMzIgbm9ybWFsaXplVm9pY2luZ01hcmtzKCk7CiAKICAgICBjb25zdCBVQ2hhciog
bV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFz
dENoYXJhY3RlcjsKLSAgICBpbnQgbV9lbmRDaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9jdXJy
ZW50Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fbGFzdENoYXJhY3RlcjsKKyAgICB1bnNpZ25l
ZCBtX2VuZENoYXJhY3RlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKaW5kZXggMGI5YTc0MDJhZmI2MTM2MDYwNThl
ZDk4MzE0YTZiMWRjYjkwNTZiNC4uODBlZTQyMjcwZTJlNGMyMzkwYTI5NjQwYzJhNDRiNGFlYzA0
Njg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5jcHAKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzU29mdEJh
bmtFbW9qaShVQ2hhcjMyIGNvZGVwb2ludCkKICAgICByZXR1cm4gY29kZXBvaW50ID49IDB4RTAw
MSAmJiBjb2RlcG9pbnQgPD0gMHhFNTM3OwogfQogCi1pbmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9y
OjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZl
ciwgaW50IGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdCAt
PiBUcmFuc2Zvcm1zVHlwZQoraW5saW5lIGF1dG8gV2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlG
b250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGxh
c3RHbHlwaENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdCAtPiBUcmFuc2Zv
cm1zVHlwZQogewogICAgIGlmIChnbHlwaEJ1ZmZlciAmJiBnbHlwaEJ1ZmZlci0+c2l6ZSgpID09
IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJhbmtFbW9qaShwcmV2aW91c0NoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkOwpAQCAtOTAsMTQgKzkw
LDE0IEBAIGlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRyYW5zZm9y
bXMoY29uc3QgR2x5cGhCdWZmZXIqIGdseXBoQnVmCiAgICAgcmV0dXJuIFRyYW5zZm9ybXNUeXBl
OjpOb3RGb3JjZWQ7CiB9CiAKLWlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEds
eXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJv
b2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlKQoraW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5
cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50
LCBjb25zdCBGb250KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNl
LCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzQ2hhcmFjdGVyLCBzaG91bGRBcHBseUZvbnRUcmFu
c2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIpICE9
IFdpZHRoSXRlcmF0b3I6OlRyYW5zZm9ybXNUeXBlOjpOb25lKTsKIAogICAgIGlmICghZ2x5cGhC
dWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGdseXBoQnVmZmVyU2l6ZSA9IGds
eXBoQnVmZmVyLT5zaXplKCk7CisgICAgdW5zaWduZWQgZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhC
dWZmZXItPnNpemUoKTsKICAgICBpZiAoIWZvcmNlICYmIGdseXBoQnVmZmVyU2l6ZSA8PSBsYXN0
R2x5cGhDb3VudCArIDEpIHsKICAgICAgICAgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlclNp
emU7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA1LDkgKzEwNSwxMCBAQCBpbmxpbmUgZmxvYXQg
V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIsIGJvb2wgbAogCiAgICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBoQnVm
ZmVyLT5hZHZhbmNlcygwKTsKICAgICBmbG9hdCB3aWR0aERpZmZlcmVuY2UgPSAwOwotICAgIGZv
ciAoaW50IGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsgKytpKQorICAg
IGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyAr
K2kpCiAgICAgICAgIHdpZHRoRGlmZmVyZW5jZSAtPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogCisg
ICAgQVNTRVJUKGdseXBoQnVmZmVyU2l6ZSA+PSBsYXN0R2x5cGhDb3VudCk7CiAgICAgaWYgKCFs
dHIpCiAgICAgICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1
ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBpbmxpbmUg
ZmxvYXQgV2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIsIGJvb2wgbAogICAgIH0KICAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuY2xl
YXIoKTsKIAotICAgIGZvciAoaW50IGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVy
U2l6ZTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5
cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIHdpZHRoRGlmZmVyZW5jZSArPSBhZHZhbmNlc1tp
XS53aWR0aCgpOwogCiAgICAgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlclNpemU7CkBAIC0x
ODEsNyArMTgyLDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRl
cm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKIAogICAgIGNvbnN0IEZvbnQm
IHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOwogICAgIGNvbnN0IEZvbnQqIGxh
c3RGb250RGF0YSA9ICZwcmltYXJ5Rm9udDsKLSAgICBpbnQgbGFzdEdseXBoQ291bnQgPSBnbHlw
aEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOworICAgIHVuc2lnbmVkIGxhc3RHbHlw
aENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVD
aGFyMzIgY2hhcmFjdGVyID0gMDsKICAgICBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyID0gMDsK
QEAgLTM1NiwxNCArMzU3LDE0IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZh
bmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgcmV0dXJu
IGNvbnN1bWVkQ2hhcmFjdGVyczsKIH0KIAotdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZShpbnQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit1bnNpZ25lZCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
KQogewotICAgIGludCBsZW5ndGggPSBtX3J1bi5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBsZW5n
dGggPSBtX3J1bi5sZW5ndGgoKTsKIAogICAgIGlmIChvZmZzZXQgPiBsZW5ndGgpCiAgICAgICAg
IG9mZnNldCA9IGxlbmd0aDsKIAotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkpCisgICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA+PSBv
ZmZzZXQpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKG1fcnVuLmlzOEJpdCgpKSB7CkBA
IC0zNzcsMTAgKzM3OCwxMCBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBv
ZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIAogYm9vbCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
KQogewotICAgIGludCBvbGRTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOworICAgIHVuc2lnbmVk
IG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7CiAgICAgYWR2YW5jZShtX2N1cnJlbnRDaGFy
YWN0ZXIgKyAxLCAmZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0IHcgPSAwOwotICAgIGZvciAoaW50
IGkgPSBvbGRTaXplOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpCisgICAgZm9yICh1bnNp
Z25lZCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQogICAgICAgICB3
ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOwogICAgIHdpZHRoID0gdzsKICAg
ICByZXR1cm4gZ2x5cGhCdWZmZXIuc2l6ZSgpID4gb2xkU2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAppbmRleCA2OGZlM2YzZjViYjNm
OTc5Mjg5Mjc1MjU4NjA2ODYxZTVjZTkyODYzLi5jNDVmZGI4YzM2YTNmZTJmM2VmODZjODk1OWVm
NTUxNmEzOTAxMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9XaWR0aEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
V2lkdGhJdGVyYXRvci5oCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsK
IHB1YmxpYzoKICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4
dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2Nv
dW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7
CiAKLSAgICB1bnNpZ25lZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqKTsKKyAgICB1bnNp
Z25lZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciopOwogICAgIGJvb2wgYWR2YW5j
ZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJik7CiAKICAgICBmbG9hdCBt
YXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsgQVNTRVJUKG1fYWNjb3VudEZvckdseXBoQm91
bmRzKTsgcmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KQEAgLTcwLDggKzcwLDggQEAg
cHJpdmF0ZToKICAgICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRv
ciYsIEdseXBoQnVmZmVyKik7CiAKICAgICBlbnVtIGNsYXNzIFRyYW5zZm9ybXNUeXBlIHsgTm9u
ZSwgRm9yY2VkLCBOb3RGb3JjZWQgfTsKLSAgICBUcmFuc2Zvcm1zVHlwZSBzaG91bGRBcHBseUZv
bnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyKiwgaW50IGxhc3RHbHlwaENvdW50LCBVQ2hh
cjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdDsKLSAgICBmbG9hdCBhcHBseUZvbnRUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyKiwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZv
bnQqLCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJl
YXRlZEFzU3BhY2UmKTsKKyAgICBUcmFuc2Zvcm1zVHlwZSBzaG91bGRBcHBseUZvbnRUcmFuc2Zv
cm1zKGNvbnN0IEdseXBoQnVmZmVyKiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIg
cHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0OworICAgIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMo
R2x5cGhCdWZmZXIqLCBib29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBG
b250KiwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVyc1Ry
ZWF0ZWRBc1NwYWNlJik7CiAKICAgICBIYXNoU2V0PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0Zv
bnRzIHsgbnVsbHB0ciB9OwogICAgIGJvb2wgbV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMgeyBmYWxz
ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCAyMTZkOTExZGUzYTA3ZmM3ZjQ0
Zjk1Y2IwZDQ1YWI4NjRlNmRmYzY3Li4wOGJhZTM4MDg0ODg0NTRhZDczODY3MmMzZTI4ODQ1Yzg0
YmZkMDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtNDAsNyArNDAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50LCBpbnQsIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4dEVtcGhh
c2lzICovKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCwgdW5zaWduZWQsIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4dEVtcGhh
c2lzICovKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwog
ICAgIGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKQEAgLTUyLDcgKzUyLDcgQEAg
ZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBpbnQsIGkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20g
Ki8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiAvKiBjb250ZXh0ICovLCBjb25zdCBU
ZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3Qg
RmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIHVuc2lnbmVkIC8qIGZyb20gKi8sIHVuc2lnbmVkIC8q
IHRvICovKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC04NSw3ICs4NSw3
IEBAIGludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywg
cnVuKTsKICAgICBpZiAoc2hhcGVyLnNoYXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCmluZGV4
IDdmNTY0YjA1MmQ1ZjUxNzQwOThlYzBkNDUwZGY3YTkyYTIyNWNlMTIuLjljMWYxZGFmN2I5Njkw
YWY3ZjQzM2JhYWZiNDgyMGI5MTkyZDQzNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQpAQCAtNzAs
MTEgKzcwLDExIEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJ
bkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAy
NTY+JiBwb3NpdGlvbnMsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR1NpemUqIGFkdmFu
Y2VzLCBzaXplX3QgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFZlY3RvcldpdGhIb3Jp
em9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dD
b250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
KQogewogICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52
ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOwogICAgIHBvc2l0aW9uc1swXSA9
IENHUG9pbnRaZXJvOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY291bnQ7ICsraSkgewor
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIENHU2l6
ZSBhZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBt
YXRyaXgpOwogICAgICAgICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFk
dmFuY2Uud2lkdGg7CiAgICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55
ICsgYWR2YW5jZS5oZWlnaHQ7CkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2
YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4
dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFk
dmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAgICAg
aWYgKCFjb3VudCkKQEAgLTE1OCw3ICsxNTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi1z
dGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCog
Z2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3QgY291bnQpCitzdGF0aWMgdm9p
ZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBG
b250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBj
b25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBpZiAoIWNvdW50
KQogICAgICAgICByZXR1cm47CkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHZvaWQgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9u
dCwgQ0cKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFu
c2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CiAKICAgICAgICAg
Q0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250
LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZv
bnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgewogICAgICAgICAgICAgQ0dTaXplIHRyYW5zbGF0aW9uID0gQ0dTaXplQXBwbHlBZmZp
bmVUcmFuc2Zvcm0odHJhbnNsYXRpb25zW2ldLCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKICAgICAg
ICAgICAgIHBvc2l0aW9uc1tpXSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50
TWFrZShwb3NpdGlvbi54IC0gdHJhbnNsYXRpb24ud2lkdGgsIHBvc2l0aW9uLnkgKyB0cmFuc2xh
dGlvbi5oZWlnaHQpLCB0cmFuc2Zvcm0pOwogICAgICAgICAgICAgcG9zaXRpb24ueCArPSBhZHZh
bmNlc1tpXS53aWR0aDsKQEAgLTIyMCw3ICsyMjAsNyBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZvbnRS
ZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBDR0NvbnRleHRTZXRT
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVsUXVhbnRpemF0
aW9uKTsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQordm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKIHsKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBmb250LnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKQEAg
LTQzNCw3ICs0MzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKCkgZmluYWw7CiAKIHBy
aXZhdGU6Ci0gICAgaW50IG1faW5kZXg7CisgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICBjb25z
dCBUZXh0UnVuJiBtX3RleHRSdW47CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZm
ZXI7CiAgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKQEAgLTQ4OCw3ICs0ODgsNyBAQCBEYXNo
QXJyYXkgRm9udENhc2NhZGU6OmRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgRmxvYXRQb2ludCBvcmlnaW4gPSBGbG9hdFBvaW50KHRl
eHRPcmlnaW4ueCgpICsgZGVsdGFYLCB0ZXh0T3JpZ2luLnkoKSk7CiAgICAgTWFjR2x5cGhUb1Bh
dGhUcmFuc2xhdG9yIHRyYW5zbGF0b3IocnVuLCBnbHlwaEJ1ZmZlciwgb3JpZ2luKTsKICAgICBE
YXNoQXJyYXkgcmVzdWx0OwotICAgIGZvciAoaW50IGluZGV4ID0gMDsgdHJhbnNsYXRvci5jb250
YWluc01vcmVQYXRocygpOyArK2luZGV4LCB0cmFuc2xhdG9yLmFkdmFuY2UoKSkgeworICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyB0cmFuc2xhdG9yLmNvbnRhaW5zTW9yZVBhdGhzKCk7ICsr
aW5kZXgsIHRyYW5zbGF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgIEdseXBoSXRlcmF0aW9uU3Rh
dGUgaW5mbyA9IEdseXBoSXRlcmF0aW9uU3RhdGUoQ0dQb2ludE1ha2UoMCwgMCksIENHUG9pbnRN
YWtlKDAsIDApLCBsaW5lRXh0ZW50cy55KCksIGxpbmVFeHRlbnRzLnkoKSArIGxpbmVFeHRlbnRz
LmhlaWdodCgpLCBsaW5lRXh0ZW50cy54KCkgKyBsaW5lRXh0ZW50cy53aWR0aCgpLCBsaW5lRXh0
ZW50cy54KCkpOwogICAgICAgICBjb25zdCBGb250KiBsb2NhbEZvbnQgPSBnbHlwaEJ1ZmZlci5m
b250QXQoaW5kZXgpOwogICAgICAgICBpZiAoIWxvY2FsRm9udCkgewpAQCAtNTI3LDcgKzUyNyw3
IEBAIGJvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKICAg
ICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29w
eUZvbnREZXNjcmlwdG9yKGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKSkuZ2V0KCkp
OwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVj
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29tcGxleFRleHRD
b250cm9sbGVyIGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7CiAgICAgY29udHJvbGxlci5hZHZhbmNl
KGZyb20pOwpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlCiAgICAg
c2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVyV2lk
dGggLSBiZWZvcmVXaWR0aCkpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQg
dG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4
dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JU
ZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CiAKQEAgLTU2
NSw3ICs1NjUsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcgogICAgIHJldHVybiBpbml0aWFs
QWR2YW5jZTsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVy
OwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCAwYmYxNGJlZjc5YmQz
YWIyZmI3M2Y2Yzc1MDgwNzI2ZGE0NDFlMzFkLi5hMjI0Mjk4OGMwNjAzNjM4YTk2NDNiZTk3MDJm
NjM2ZWEzNTY0NmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBSZWNvcmRlcjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlckxpbWl0KQogICAgIGFwcGVuZEl0ZW0oU2V0TWl0ZXJMaW1pdDo6Y3JlYXRlKG1pdGVyTGlt
aXQpKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQordm9pZCBSZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3Ro
aW5nTW9kZSkKIHsKICAgICBEcmF3aW5nSXRlbSYgbmV3SXRlbSA9IGRvd25jYXN0PERyYXdpbmdJ
dGVtPihhcHBlbmRJdGVtKERyYXdHbHlwaHM6OmNyZWF0ZShmb250LCBnbHlwaEJ1ZmZlci5nbHlw
aHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMsIEZsb2F0UG9p
bnQoKSwgdG9GbG9hdFNpemUoc3RhcnRQb2ludCksIHNtb290aGluZ01vZGUpKSk7CiAgICAgdXBk
YXRlSXRlbUV4dGVudChuZXdJdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCmluZGV4IGViOTlhM2RkYTAwZDMxNzBjZmM4ZjA4NmE0MDI5Y2JiY2UxY2QzYTQuLjUyZWEx
MDZlZGE4NGVhZTBmZmU5YWM1Zjc0MDBmMWU5MGM1OTUwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKCk7CiAjZW5kaWYKIAotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBG
b250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNt
b290aGluZ01vZGUpOwogCiAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKTsKICAgICB2b2lkIGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggNTI1NzBlY2UzOGVl
MzhiNzQwZDhkZjdlYzdiYTNhNGEwNTE3NzFkMy4uYzkyNTM0OWExNjNmZjVmMmE5NTZjNTIwMTk4
YjUzMmY5NzZiMTRlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtNjQwLDcgKzY0MCw3
IEBAIGludCBIYXJmQnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkK
ICAgICByZXR1cm4gY2hhcmFjdGVyc1NvRmFyOwogfQogCi1GbG9hdFJlY3QgSGFyZkJ1enpTaGFw
ZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGlu
dCBmcm9tLCBpbnQgdG8pCitGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvKQogewogICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKICAgICBmbG9hdCBmcm9tWCA9IDA7
CkBAIC02NTQsMTcgKzY1NCwyMSBAQCBGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlv
blJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGludAogICAgICAgICBp
ZiAobV9ydW4ucnRsKCkpCiAgICAgICAgICAgICBjdXJyZW50WCAtPSBtX2hhcmZCdXp6UnVuc1tp
XS0+d2lkdGgoKTsKICAgICAgICAgaW50IG51bUNoYXJhY3RlcnMgPSBtX2hhcmZCdXp6UnVuc1tp
XS0+bnVtQ2hhcmFjdGVycygpOwotICAgICAgICBpZiAoIWZvdW5kRnJvbVggJiYgZnJvbSA+PSAw
ICYmIGZyb20gPCBudW1DaGFyYWN0ZXJzKSB7CisgICAgICAgIGlmICghZm91bmRGcm9tWCAmJiBm
cm9tIDwgbnVtQ2hhcmFjdGVycykgewogICAgICAgICAgICAgZnJvbVggPSBtX2hhcmZCdXp6UnVu
c1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZyb20pICsgY3VycmVudFg7CiAgICAgICAgICAgICBm
b3VuZEZyb21YID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQoZnJvbSA+PSBudW1DaGFyYWN0ZXJzKTsKICAgICAgICAgICAgIGZyb20g
LT0gbnVtQ2hhcmFjdGVyczsKKyAgICAgICAgfQogCi0gICAgICAgIGlmICghZm91bmRUb1ggJiYg
dG8gPj0gMCAmJiB0byA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgaWYgKCFmb3VuZFRvWCAm
JiB0byA8IG51bUNoYXJhY3RlcnMpIHsKICAgICAgICAgICAgIHRvWCA9IG1faGFyZkJ1enpSdW5z
W2ldLT54UG9zaXRpb25Gb3JPZmZzZXQodG8pICsgY3VycmVudFg7CiAgICAgICAgICAgICBmb3Vu
ZFRvWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgQVNTRVJUKHRvID49IG51bUNoYXJhY3RlcnMpOwogICAgICAgICAgICAgdG8gLT0gbnVtQ2hh
cmFjdGVyczsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChmb3VuZEZyb21YICYmIGZvdW5kVG9Y
KQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAppbmRleCBiZjc2ZjMxN2U5
ODFiNWRmNmNkY2E4NTRiMDQ1OWE5ZWFkMGFkYjlhLi4wMjEyOWUxNjQ2NzM1M2JjNjQ5YTE0MGM2
YWJkMDFlNjM0MjU0ODhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmgKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogICAgIEZsb2F0UG9pbnQgYWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50
Jik7CiAgICAgZmxvYXQgdG90YWxXaWR0aCgpIHsgcmV0dXJuIG1fdG90YWxXaWR0aDsgfQogICAg
IGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKLSAgICBGbG9hdFJlY3Qgc2Vs
ZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0
byk7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGludCBo
ZWlnaHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIAogcHJpdmF0ZToKICAgICBjbGFz
cyBIYXJmQnV6elJ1biB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKaW5kZXggYWU5NmFkMTc5MWE5
MDcxZGVjOTc2MzY5OGViMDhmNzBjMDFjMWYyNC4uN2RmNGVmZmYzMmE0YjUwNDhkMDYyNGIwMTkw
YzRjZDRlYzVjM2FlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaApAQCAtNTQsNyArNTQsNyBA
QCBwdWJsaWM6CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24gPSBmYWxz
ZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGZvclRleHRF
bXBoYXNpcyA9IGZhbHNlKTsKIAogICAgIC8vIEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRv
IHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywg
R2x5cGhCdWZmZXIqID0gMCwgR2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5
cGhzLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOworICAgIHZvaWQg
YWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gbnVsbHB0ciwgR2x5cGhJdGVyYXRp
b25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFs
bGJhY2tGb250cyA9IG51bGxwdHIpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9m
ZnNldCBmb3IgYSBnaXZlbiB4IGNvb3JkaW5hdGUuCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
KGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IDIzOTZhNGRlZTNkZWUx
NTBlNzM2OWY3ZTE2YTQwZDUwMGY5ZWM5ZWIuLjY5ZmM5Y2QyNTBmZjA2NzYyZGNhMzQ1YmJjMGI2
OWFlYjZkZDAxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFdpbi5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIFVuaXNjcmliZUNvbnRyb2xs
ZXIgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZhbmNlKGZyb20pOwpAQCAtNjYsNyArNjYsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0
ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwg
aW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZv
clRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZh
bmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3Qg
Zm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGlmIChmb3JUZXh0RW1waGFzaXMpIHsKICAg
ICAgICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1waGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmli
ZUNvbnRyb2xsZXIgYW5kIHVzZSBpdC4KQEAgLTkxLDcgKzkxLDcgQEAgZmxvYXQgRm9udENhc2Nh
ZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBpbnQgZnIKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRl
OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIsIEZvclRleHRFbXBoYXNpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcAppbmRleCAyMDkzOGIxZjc0NDc3YWFkNjBjN2IxMDRkY2YyMDlkN2ZhNGRmZDI2Li40NWZk
ZDdmMzJiY2FlZGQyYzRjZGRjZjU5Y2JiZmFhOWUzOTM2MjAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIEVsbGlwc2lz
Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFBvaW50JiBwYQogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkg
cGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QoeCgpICsgcGFpbnRPZmZzZXQueCgpLCB5KCkgKyBwYWlu
dE9mZnNldC55KCkgKyByb290Qm94LnNlbGVjdGlvblRvcCgpLCAwLCByb290Qm94LnNlbGVjdGlv
bkhlaWdodCgpKTsKICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0
UnVuKG1fc3RyLCBzdHlsZSwgQWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7Ci0gICAgZm9udC5hZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIDAsIC0xKTsKKyAgICBm
b250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCk7CiAgICAg
Y29udGV4dC5maWxsUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rp
b24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCksIHJ1bi5sdHIoKSksIGMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKaW5kZXggZjMyYTBiM2IzZTU2YmY1NzllYTA1ZDM5MTcwNjA5ZGYyOTA5YjA5
ZC4uYjYwY2NhNGZjYTkyMDAwZGM1YWVjYjkzZjg1ZGNiNjYyZjA5ZjI0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtMTMwLDIxICsxMzAsMjUgQEAg
TGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKSBjb25zdAogICAgIHJl
dHVybiByb290KCkuc2VsZWN0aW9uSGVpZ2h0KCk7CiB9CiAKLWJvb2wgSW5saW5lVGV4dEJveDo6
aXNTZWxlY3RlZChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0Citib29sIElubGluZVRl
eHRCb3g6OmlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29u
c3QKIHsKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7Ci0g
ICAgaW50IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCBzdGF0aWNfY2FzdDxpbnQ+
KG1fbGVuKSk7Ci0gICAgcmV0dXJuIChzUG9zIDwgZVBvcyk7CisgICAgaW50IHNQb3MgPSBjbGFt
cGVkT2Zmc2V0KHN0YXJ0UG9zKTsKKyAgICBpbnQgZVBvcyA9IGNsYW1wZWRPZmZzZXQoZW5kUG9z
KTsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG9ubHkgYmUgY2hlY2tpbmcgaWYgc1BvcyA+PSBl
UG9zIGhlcmUsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZQorICAgIC8vIGluZGljZXMgdXNlZCB0byBh
Y3R1YWxseSBnZW5lcmF0ZSB0aGUgc2VsZWN0aW9uIHJlY3QuIEFsbG93aW5nIHVzIHBhc3QgdGhp
cyBndWFyZAorICAgIC8vIG9uIGFueSBvdGhlciBjb25kaXRpb24gY3JlYXRlcyB6ZXJvLXdpZHRo
IHNlbGVjdGlvbiByZWN0cy4KKyAgICByZXR1cm4gc1BvcyA8IGVQb3MgfHwgKHN0YXJ0UG9zID09
IGVuZFBvcyAmJiBzdGFydFBvcyA+PSBzdGFydCgpICYmIHN0YXJ0UG9zIDw9IChzdGFydCgpICsg
bGVuKCkpKTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBz
dGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsKICAgICBpZiAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKLSAgICAg
ICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zLCBlbmRQ
b3M7CiAgICAgICAgIHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBv
cyk7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBhZnRlciBhIGhhcmQgbGluZSBicmVhayBpcyBj
b25zaWRlcmVkIHRvIGJlIHBhc3QgaXRzIGVuZC4KLSAgICAgICAgaW50IGxhc3RTZWxlY3RhYmxl
ID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CisgICAgICAgIEFT
U0VSVChzdGFydCgpICsgbGVuKCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOworICAgICAg
ICB1bnNpZ25lZCBsYXN0U2VsZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVh
aygpID8gMSA6IDApOwogCiAgICAgICAgIGJvb2wgc3RhcnQgPSAoc3RhdGUgIT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25FbmQgJiYgc3RhcnRQb3MgPj0gbV9zdGFydCAmJiBzdGFydFBvcyA8IG1f
c3RhcnQgKyBtX2xlbik7CiAgICAgICAgIGJvb2wgZW5kID0gKHN0YXRlICE9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhcnQgJiYgZW5kUG9zID4gbV9zdGFydCAmJiBlbmRQb3MgPD0gbGFzdFNl
bGVjdGFibGUpOwpAQCAtMTY1LDkgKzE2OSwxMCBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKICAgICBpZiAobV90cnVuY2F0aW9u
ICE9IGNOb1RydW5jYXRpb24gJiYgcm9vdCgpLmVsbGlwc2lzQm94KCkpIHsKICAgICAgICAgRWxs
aXBzaXNCb3gqIGVsbGlwc2lzID0gcm9vdCgpLmVsbGlwc2lzQm94KCk7CiAgICAgICAgIGlmIChz
dGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgIGludCBz
ZWxlY3Rpb25TdGFydDsKLSAgICAgICAgICAgIGludCBzZWxlY3Rpb25FbmQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZDsKICAgICAgICAgICAgIHN0ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQp
ID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KHNlbGVjdGlvblN0YXJ0KSA+PSAwICYmIHN0YXRpY19jYXN0PGludD4oc2VsZWN0aW9uRW5k
KSA+PSAwKTsKICAgICAgICAgICAgIC8vIFRoZSBlbGxpcHNpcyBzaG91bGQgYmUgY29uc2lkZXJl
ZCB0byBiZSBzZWxlY3RlZCBpZiB0aGUgZW5kIG9mCiAgICAgICAgICAgICAvLyB0aGUgc2VsZWN0
aW9uIGlzIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCiAgICAg
ICAgICAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWZvcmUgb3IgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUKQEAgLTE5MSwxMiArMTk2LDE1IEBAIHN0YXRpYyBjb25zdCBGb250
Q2FzY2FkZSYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVy
VGV4dCYKICAgICByZXR1cm4gc3R5bGUuZm9udENhc2NhZGUoKTsKIH0KIAotTGF5b3V0UmVjdCBJ
bmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9z
KSBjb25zdAorTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5z
aWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsKLSAgICBpbnQgc1BvcyA9
IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1p
bihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKLSAgICAKLSAgICBpZiAoc1BvcyA+IGVQ
b3MpCisgICAgdW5zaWduZWQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3MpOworICAgIHVu
c2lnbmVkIGVQb3MgPSBjbGFtcGVkT2Zmc2V0KGVuZFBvcyk7CisKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG9ubHkgYmUgY2hlY2tpbmcgaWYgc1BvcyA+PSBlUG9zIGhlcmUsIGJlY2F1c2UgdGhv
c2UgYXJlIHRoZQorICAgIC8vIGluZGljZXMgdXNlZCB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUg
c2VsZWN0aW9uIHJlY3QuIEFsbG93aW5nIHVzIHBhc3QgdGhpcyBndWFyZAorICAgIC8vIG9uIGFu
eSBvdGhlciBjb25kaXRpb24gY3JlYXRlcyB6ZXJvLXdpZHRoIHNlbGVjdGlvbiByZWN0cy4KKyAg
ICBpZiAoc1BvcyA+PSBlUG9zICYmICEoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49
IHN0YXJ0KCkgJiYgc3RhcnRQb3MgPD0gKHN0YXJ0KCkgKyBsZW4oKSkpKQogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSB0aGlzLT5z
ZWxlY3Rpb25Ub3AoKTsKQEAgLTIxMiw3ICsyMjAsNyBAQCBMYXlvdXRSZWN0IElubGluZVRleHRC
b3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0CiAK
ICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxv
Z2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNl
bGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3
aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgot
ICAgIGlmIChzUG9zIHx8IGVQb3MgIT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgaWYg
KHNQb3MgfHwgZVBvcyAhPSBtX2xlbikKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0
IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRo
KCk7CkBAIC01MDgsMTggKzUxNiwxOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgVGV4
dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGFsdGVybmF0ZVN0cmlu
Z1RvUmVuZGVyKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogCi0g
ICAgaW50IHNlbGVjdGlvblN0YXJ0ID0gMDsKLSAgICBpbnQgc2VsZWN0aW9uRW5kID0gMDsKKyAg
ICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5k
ID0gMDsKICAgICBpZiAoaGF2ZVNlbGVjdGlvbiAmJiAocGFpbnRTZWxlY3RlZFRleHRPbmx5IHx8
IHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkpCiAgICAgICAgIHN0ZDo6dGllKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKIAogICAgIGlmICht
X3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewotICAgICAgICBzZWxlY3Rpb25TdGFydCA9
IHN0ZDo6bWluPGludD4oc2VsZWN0aW9uU3RhcnQsIG1fdHJ1bmNhdGlvbik7Ci0gICAgICAgIHNl
bGVjdGlvbkVuZCA9IHN0ZDo6bWluPGludD4oc2VsZWN0aW9uRW5kLCBtX3RydW5jYXRpb24pOwor
ICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHN0ZDo6bWluKHNlbGVjdGlvblN0YXJ0LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV90cnVuY2F0aW9uKSk7CisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHN0
ZDo6bWluKHNlbGVjdGlvbkVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikp
OwogICAgICAgICBsZW5ndGggPSBtX3RydW5jYXRpb247CiAgICAgfQogCi0gICAgaW50IGVtcGhh
c2lzTWFya09mZnNldCA9IDA7CisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKICAg
ICBib29sIGVtcGhhc2lzTWFya0Fib3ZlOwogICAgIGJvb2wgaGFzVGV4dEVtcGhhc2lzID0gZW1w
aGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5lU3R5bGUsIGVtcGhhc2lzTWFya0Fib3ZlKTsK
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyayA9IGhhc1RleHRFbXBoYXNpcyA/
IGxpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbTsKQEAgLTU4Niwy
MSArNTk0LDI1IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICBpZiAoc2hvdWxkUm90YXRl
KQogICAgICAgICBjb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xv
Y2t3aXNlKSk7CiB9Cit1bnNpZ25lZCBJbmxpbmVUZXh0Qm94OjpjbGFtcGVkT2Zmc2V0KHVuc2ln
bmVkIHgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWluKHgsIHN0YXJ0KCkg
KyBsZW4oKSksIHN0YXJ0KCkpIC0gc3RhcnQoKTsKK30KIAotc3RkOjpwYWlyPGludCwgaW50PiBJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CitzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiB7
CiAgICAgYXV0byBzZWxlY3Rpb25TdGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsK
ICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUp
CiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVuIH07CiAgICAgCi0gICAgaW50IHN0YXJ0OwotICAg
IGludCBlbmQ7CisgICAgdW5zaWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOwogICAgIHJl
bmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVuZCk7CiAgICAgaWYgKHNlbGVjdGlv
blN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpCiAgICAgICAgIGVuZCA9IHJl
bmRlcmVyKCkudGV4dExlbmd0aCgpOwogICAgIGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQogICAgICAgICBzdGFydCA9IDA7Ci0gICAgcmV0dXJu
IHsgc3RkOjptYXgoc3RhcnQgLSBtX3N0YXJ0LCAwKSwgc3RkOjptaW48aW50PihlbmQgLSBtX3N0
YXJ0LCBtX2xlbikgfTsKKyAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBl
ZE9mZnNldChlbmQpIH07CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24o
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIENvbG9yIHRl
eHRDb2xvcikKQEAgLTYxMCw4ICs2MjIsOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2Vs
ZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIHNlbGVjdGlvbiB0byBwYWlu
dCBhdCBhbGwuCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0OwotICAgIGludCBzZWxlY3Rpb25FbmQ7
CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQ7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5k
OwogICAgIHN0ZDo6dGllKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gc2VsZWN0aW9u
U3RhcnRFbmQoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPj0gc2VsZWN0aW9uRW5kKQogICAg
ICAgICByZXR1cm47CkBAIC02MzQsNyArNjQ2LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1f
dHJ1bmNhdGlvbiA6IGxlbigpOwogCiAgICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmc7Ci0gICAg
Ym9vbCByZXNwZWN0SHlwaGVuID0gc2VsZWN0aW9uRW5kID09IHN0YXRpY19jYXN0PGludD4obGVu
Z3RoKSAmJiBoYXNIeXBoZW4oKTsKKyAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25F
bmQgPT0gbGVuZ3RoICYmIGhhc0h5cGhlbigpOwogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAg
ICAgICBoeXBoZW5hdGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUs
IGxlbmd0aCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwg
aHlwaGVuYXRlZFN0cmluZywgT3B0aW9uYWw8dW5zaWduZWQ+KGxlbmd0aCkpOwpAQCAtNjYwLDEx
ICs2NzIsMTAgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lkIElu
bGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
Cit2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCB1bnNpZ25lZCBzdGFydFBv
cywgdW5zaWduZWQgZW5kUG9zKQogewotICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwotICAgIGlu
dCBzZWxlY3Rpb25TdGFydCA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKLSAgICBp
bnQgc2VsZWN0aW9uRW5kID0gc3RkOjptaW48aW50PihlbmRQb3MgLSBvZmZzZXQsIG1fbGVuKTsK
KyAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3MpOwor
ICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zKTsKICAgICBp
ZiAoc2VsZWN0aW9uU3RhcnQgPj0gc2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm47CiAKQEAg
LTc1Niw3ICs3NjcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaQogCiAgICAgLy8gRGV0ZXJt
aW5lIHdoZXRoZXIgd2UgbmVlZCB0byBtZWFzdXJlIHRleHQKICAgICBib29sIG1hcmtlclNwYW5z
V2hvbGVCb3ggPSB0cnVlOwotICAgIGlmIChtX3N0YXJ0IDw9IChpbnQpbWFya2VyLnN0YXJ0T2Zm
c2V0KCkpCisgICAgaWYgKG1fc3RhcnQgPD0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAg
IG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKICAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFy
a2VyLmVuZE9mZnNldCgpKSAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0
IGl0CiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKQEAgLTc2NSwxMSArNzc2
LDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pCiAKICAgICBib29sIGlzRGljdGF0aW9uTWFy
a2VyID0gbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVzOwogICAgIGlmICghbWFya2VyU3BhbnNXaG9sZUJveCB8fCBncmFtbWFyIHx8IGlzRGljdGF0
aW9uTWFya2VyKSB7Ci0gICAgICAgIGludCBzdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50Piht
YXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsIDApOwotICAgICAgICBpbnQgZW5kUG9zaXRp
b24gPSBzdGQ6Om1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQobWFya2VyLnN0
YXJ0T2Zmc2V0KCkpOworICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGNsYW1wZWRPZmZz
ZXQobWFya2VyLmVuZE9mZnNldCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChtX3RydW5jYXRp
b24gIT0gY05vVHJ1bmNhdGlvbikKLSAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW48
aW50PihlbmRQb3NpdGlvbiwgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9u
ID0gc3RkOjptaW4oZW5kUG9zaXRpb24sIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRp
b24pKTsKIAogICAgICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgJiB3aWR0aAogICAgICAgICBpbnQg
ZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CkBAIC04MTgsOCArODI5LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG8K
ICAgICBMYXlvdXRVbml0IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5l
c1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxv
Z2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dCA9IExheW91dFJlY3QoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwgMCwg
dGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCkpOwogCi0gICAgaW50IHNQb3MgPSBzdGQ6Om1heDxpbnQ+
KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6
Om1pbjxpbnQ+KG1hcmtlci5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKKyAgICB1bnNp
Z25lZCBzUG9zID0gY2xhbXBlZE9mZnNldChtYXJrZXIuc3RhcnRPZmZzZXQoKSk7CisgICAgdW5z
aWduZWQgZVBvcyA9IGNsYW1wZWRPZmZzZXQobWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBUZXh0
UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOwogICAgIGZvbnQuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKIApAQCAtOTg1
LDE4ICs5OTYsMTggQEAgaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0
IGxpbmVPZmZzZXQsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMKICAgICByZXR1cm4gZm9udC5v
ZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSksIGxpbmVPZmZzZXQg
LSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLWZsb2F0IElubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CitmbG9hdCBJbmxp
bmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKG9mZnNldCA+PSBtX3N0YXJ0KTsKLSAgICBBU1NFUlQob2Zmc2V0IDw9IG1fc3Rh
cnQgKyBtX2xlbik7CisgICAgQVNTRVJUKG9mZnNldCA8PSBtX3N0YXJ0ICsgbGVuKCkpOwogCiAg
ICAgaWYgKGlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIo
KSk7Ci0gICAgaW50IGZyb20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0g
bV9zdGFydCA6IDA7Ci0gICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1f
bGVuIDogb2Zmc2V0IC0gbV9zdGFydDsKKyAgICB1bnNpZ25lZCBmcm9tID0gIWlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IGNsYW1wZWRPZmZzZXQob2Zmc2V0KSA6IDA7CisgICAgdW5zaWduZWQg
dG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZW4gOiBjbGFtcGVkT2Zmc2V0KG9m
ZnNldCk7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJl
PwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QobG9naWNhbExlZnQo
KSwgMCwgMCwgMCk7CiAgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHls
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCA2N2I2MzRi
YTU3OGMzODBmNzA5YjIzMWNhNmIzMTg5ODczNTY5NGJkLi43MjM2ZjYwMmFhNjYxMzYxYjM3NDdj
YTA2MzE1OGQ0NTMyYmNjMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgKQEAgLTQyLDExICs0Miw2IEBAIGNsYXNzIElubGluZVRleHRCb3ggOiBwdWJsaWMgSW5s
aW5lQm94IHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbmxpbmVUZXh0Qm94KFJlbmRlclRleHQm
IHJlbmRlcmVyKQogICAgICAgICA6IElubGluZUJveChyZW5kZXJlcikKLSAgICAgICAgLCBtX3By
ZXZUZXh0Qm94KG51bGxwdHIpCi0gICAgICAgICwgbV9uZXh0VGV4dEJveChudWxscHRyKQotICAg
ICAgICAsIG1fc3RhcnQoMCkKLSAgICAgICAgLCBtX2xlbigwKQotICAgICAgICAsIG1fdHJ1bmNh
dGlvbihjTm9UcnVuY2F0aW9uKQogICAgIHsKICAgICAgICAgc2V0QmVoYXZlc0xpa2VUZXh0KHRy
dWUpOwogICAgIH0KQEAgLTY5LDcgKzY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhcnQo
dW5zaWduZWQgc3RhcnQpIHsgbV9zdGFydCA9IHN0YXJ0OyB9CiAgICAgdm9pZCBzZXRMZW4odW5z
aWduZWQgbGVuKSB7IG1fbGVuID0gbGVuOyB9CiAKLSAgICB2b2lkIG9mZnNldFJ1bihpbnQgZCkg
eyBBU1NFUlQoIWlzRGlydHkoKSk7IG1fc3RhcnQgKz0gZDsgfQorICAgIHZvaWQgb2Zmc2V0UnVu
KGludCBkKSB7IEFTU0VSVCghaXNEaXJ0eSgpKTsgQVNTRVJUKGQgPiAwIHx8IG1fc3RhcnQgPj0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1kKSk7IG1fc3RhcnQgKz0gZDsgfQogCiAgICAgdW5zaWdu
ZWQgc2hvcnQgdHJ1bmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGlvbjsgfQogCkBA
IC0xMjAsOSArMTE1LDkgQEAgcHJpdmF0ZToKIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgY2FsY3Vs
YXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCh4KCksIHko
KSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CiAKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxT
ZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3Q7Ci0gICAgYm9vbCBp
c1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3Q7Ci0gICAgc3RkOjpwYWly
PGludCwgaW50PiBzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0
UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBv
cykgY29uc3Q7CisgICAgYm9vbCBpc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25l
ZCBlbmRQb3MpIGNvbnN0OworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHNlbGVj
dGlvblN0YXJ0RW5kKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVCb3R0b20pIG92ZXJyaWRlOwpAQCAtMTU1LDEyICsxNTAsMTMgQEAgcHJpdmF0ZToKIAog
cHVibGljOgogICAgIHZpcnR1YWwgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHBv
c2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcG9z
aXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAg
IHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIHVuc2lnbmVkIHN0YXJ0
UG9zLCB1bnNpZ25lZCBlbmRQb3MpOwogICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBh
aW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOworICAgIHVuc2lnbmVk
IGNsYW1wZWRPZmZzZXQodW5zaWduZWQpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFp
bnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgUmVuZGVy
Q29tYmluZVRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdp
biwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LApAQCAtMTczLDE1ICsxNjksMTUgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgYmVoYXZlc0xpa2VUZXh0KCkgY29uc3QgPSBkZWxldGU7CiAKLSAgICBJ
bmxpbmVUZXh0Qm94KiBtX3ByZXZUZXh0Qm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxz
byB1c2VzIG91ciBSZW5kZXJPYmplY3QKLSAgICBJbmxpbmVUZXh0Qm94KiBtX25leHRUZXh0Qm94
OyAvLyBUaGUgbmV4dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElu
bGluZVRleHRCb3gqIG1fcHJldlRleHRCb3ggeyBudWxscHRyIH07IC8vIFRoZSBwcmV2aW91cyBi
b3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElubGluZVRleHRCb3gqIG1f
bmV4dFRleHRCb3ggeyBudWxscHRyIH07IC8vIFRoZSBuZXh0IGJveCB0aGF0IGFsc28gdXNlcyBv
dXIgUmVuZGVyT2JqZWN0CiAKLSAgICBpbnQgbV9zdGFydDsKLSAgICB1bnNpZ25lZCBzaG9ydCBt
X2xlbjsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIHNob3J0IG1f
bGVuIHsgMCB9OwogCiAgICAgLy8gV2hlcmUgdG8gdHJ1bmNhdGUgd2hlbiB0ZXh0IG92ZXJmbG93
IGlzIGFwcGxpZWQuIFdlIHVzZSBzcGVjaWFsIGNvbnN0YW50cyB0bwogICAgIC8vIGRlbm90ZSBu
byB0cnVuY2F0aW9uICh0aGUgd2hvbGUgcnVuIHBhaW50cykgYW5kIGZ1bGwgdHJ1bmNhdGlvbiAo
bm90aGluZyBwYWludHMgYXQgYWxsKS4KLSAgICB1bnNpZ25lZCBzaG9ydCBtX3RydW5jYXRpb247
CisgICAgdW5zaWduZWQgc2hvcnQgbV90cnVuY2F0aW9uIHsgY05vVHJ1bmNhdGlvbiB9OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKaW5kZXggY2RlNjA3Y2Y1YWNmMWFmZjk1ZmE2MGM4MjVmYWFlMGFmZmQ3OTE1Mi4u
ZDI2NGQyYTk3NjRhZDI1MzdiMzdhMzczMTg2ZmM5NjIxYjVhNTk1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zNDg5LDcgKzM0ODksNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgTGF5b3V0UG9pbnQmCiAgICAgfQogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICAvLyBEbyB0aGUgbm9ybWFs
IGNhbGN1bGF0aW9uIGluIG1vc3QgY2FzZXMuCiAgICAgaWYgKGZpcnN0Q2hpbGQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggMzE1MjIzNTU1MTE0YmEyOThlZjg5
MmE1YzBjZmI1ZTc1Y2MzOGJlNS4uMzIzZDE3MGRmZWE1ZDA4NmQ3OTdmNWYxNDg1MGNiOWE2NjMz
M2ZlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQ3Niw3ICs0
NzYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0gMCkgZmluYWw7CiAgICAgCiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1v
dmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxv
Y2tGbG93CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJ
bmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA4MWIwYWQ2Nzg4OGE1NzA1
OGMxYmNhZjJkNzk5OGU3OGYwYzdmYzU3Li5lYWU3MmJhMmMzNDVjZDliYjc5NWFiYmIwZTIwYjhk
Y2QyMDYyMWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNDM4
Myw3ICs0MzgzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhl
aWdodFJlcGxhY2VkKExvZ2ljYWxFeHRlbnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVl
cy5tX3Bvc2l0aW9uID0gbG9naWNhbFRvcFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9m
ZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMgZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMg
YmVmb3JlL2FmdGVyCiAgICAgLy8gdGhvc2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3Qg
ZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxv
Y2suCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMDM4MzBjN2E4Mzc2M2Q1
YzMxOWJiMjdmZDA2YWE0NzdiNTMxYzg3Ni4uYzYwMTdkOGRmOTFhZDhiYzFhZGJhMjA0MThmZDA1
NWE4ZGVhNDc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNDgxLDcg
KzQ4MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Vuc3BsaXR0YWJsZVNjcm9sbGluZ092ZXJm
bG93KCkgY29uc3Q7CiAgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZUZvclBhZ2luYXRpb24oKSBjb25z
dDsKIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0
T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBvdmVy
cmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVk
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRy
KSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNv
bnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpOwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVy
Zmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXllcnMoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZh
bmN5KSB7IHJldHVybiBvdmVyZmxvd0NsaXBSZWN0KGxvY2F0aW9uLCByZWdpb24sIHJlbGV2YW5j
eSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggZGJi
NDgzZDY5ZjI2NjFkMzkwZGY1MWE1ZjhmMTEwYTEwMDViNDcwNi4uYWRhYjY0ODVjYWRjYTIxYzZl
NTQzODQ3ZGNiMTIyNDdiMDJlMTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRl
QWx3YXlzQ3JlYXRlTGluZUJveGVzKGJvb2wgZnVsbExheW91dCkKICAgICB9CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwg
aW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRl
cklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgaWYgKGZpcnN0Q2hpbGQo
KSkgewogICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVy
SW5saW5lIGlzIGF0IGFuIGVkaXRpbmcgYm91bmRhcnksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmgKaW5kZXggNWNlYWZjMmQ4YTJmZmMzN2EzM2UxN2M0YjI2ZTJhZTk3OWY4
NjM2Zi4uMDBiYzllYzFkNDA0OTI4MGFmYTQwZTRmODA5ZDI3OWZjYTgwN2NhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBbHdheXNDcmVhdGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFs
d2F5c0NyZWF0ZXNMaW5lQm94ZXModHJ1ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0
ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqLCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkg
ZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKIAogICAgIGJvb2wg
aGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCcmVhay5jcHAKaW5kZXggMWNkOTYzNGJhZTQwMGI4NThkZjZmZWZhYTMxNzU0
NTZiMTE4YWY2Yy4uYjhjMjM1OGQxNTdkZGIyY2MyOGExMzY3MmI4Y2ExYzdkMDFiNTg2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTE2Niw3
ICsxNjYsNyBAQCB2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0
aW9uU3RhdGUgc3RhdGUpCiAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2Vs
ZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKIH0KIAotTGF5b3V0UmVjdCBS
ZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQg
Y2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJl
Y3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwg
dW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkK
IHsKICAgICBBU1NFUlRfVU5VU0VEKGNhcmV0T2Zmc2V0LCAhY2FyZXRPZmZzZXQpOwogICAgIEFT
U0VSVF9VTlVTRUQoaW5saW5lQm94LCBpbmxpbmVCb3ggPT0gbV9pbmxpbmVCb3hXcmFwcGVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCAxMWZkM2Jk
OTIxNzQ5NzYzNmQwY2E2MDExNDI5ODI1OTQyMmIxMjM2Li45NzA3Y2QxNmU1ODM2YTc4MWZmZDY1
MzUwMmYzMDgzZmIxMmZhMTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5oCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgaW50IGNhcmV0TWluT2Zm
c2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZTsKKyAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlv
dXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOwogCiAgICAgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCmluZGV4IDBlYjhhZDYxODRhOTc2MzQyMzkzYzY3M2EzMmIzMDIyMjExMTIyNmMuLmFj
MzEyMjYyNjA0YTJkM2UxNGExYmNlNWMzYmRlN2UxZGRlZTU3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMjA2LDcgKzEyMDYsNyBAQCBTZWxlY3Rp
b25TdWJ0cmVlUm9vdCYgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Sb290KCkgY29uc3QKICAgICBy
ZXR1cm4gdmlldygpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQo
aW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0Cit2b2lkIFJlbmRlck9iamVjdDo6c2VsZWN0aW9u
U3RhcnRFbmQodW5zaWduZWQmIHNwb3MsIHVuc2lnbmVkJiBlcG9zKSBjb25zdAogewogICAgIHNl
bGVjdGlvblJvb3QoKS5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnMo
c3BvcywgZXBvcyk7CiB9CkBAIC0xMzc3LDcgKzEzNzcsNyBAQCBMYXlvdXRTaXplIFJlbmRlck9i
amVjdDo6b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5l
cikgYwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojps
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAg
IGlmIChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGM2YzZj
M2ZlZTVlMjY1MDhjMzE5NmI5MzBiYzQ2M2M3NmE3YjYzYWMuLjQxMTZhNTBiMGZhMGQ3MjkwMThl
OTcxZjU0NDQ1OWMwM2U4OGM0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTc0OSw3ICs3NDksNyBAQCBwdWJsaWM6CiAgICAgICogQHBhcmFtIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSBvcHRpb25hbCBvdXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGggdG8gZW5k
IG9mIGxpbmUgLQogICAgICAqIHVzZWZ1bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3QgY29tcHV0
YXRpb25zCiAgICAgICovCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lID0gbnVsbHB0cik7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9F
bmRPZkxpbmUgPSBudWxscHRyKTsKIAogICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGdsb2JhbCBk
b2N1bWVudCB0ZWFyLWRvd24sIHRoZSByZW5kZXJlciBvZiB0aGUgZG9jdW1lbnQgaXMgY2xlYXJl
ZC4gIFdlIHVzZSB0aGlzCiAgICAgLy8gYXMgYSBob29rIHRvIGRldGVjdCB0aGUgY2FzZSBvZiBk
b2N1bWVudCBkZXN0cnVjdGlvbiBhbmQgZG9uJ3Qgd2FzdGUgdGltZSBkb2luZyB1bm5lY2Vzc2Fy
eSB3b3JrLgpAQCAtNzgyLDcgKzc4Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW1h
Z2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0K
IAogICAgIFNlbGVjdGlvblN1YnRyZWVSb290JiBzZWxlY3Rpb25Sb290KCkgY29uc3Q7Ci0gICAg
dm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNwb3MsIGludCYgZXBvcykgY29uc3Q7CisgICAg
dm9pZCBzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc3BvcywgdW5zaWduZWQmIGVwb3MpIGNv
bnN0OwogICAgIAogICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCBhYTJjMzRjYjZhYWMzZGM3OGQ2
NzE0ZDYzYmE3NWIwYjdhNTRiODNiLi4wYmZiNGJhNzkwNWIyNzAwOTUzZjFiNjllYmE0NDQzZWJj
ZDA4M2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAK
QEAgLTYxNiwxOCArNjE2LDE4IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OmlzU2VsZWN0ZWQoKSBj
b25zdAogICAgIGlmIChzID09IFNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBpbnQgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZDsKKyAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOwogICAgIHNlbGVjdGlvblN0YXJ0RW5kKHNlbGVj
dGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogICAgIGlmIChzID09IFNlbGVjdGlvblN0YXJ0KQog
ICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMDsKICAgICAgICAgCi0gICAgaW50IGVu
ZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGROb2RlcygpID8gZWxlbWVudCgpLT5jb3VudENoaWxkTm9k
ZXMoKSA6IDE7CisgICAgdW5zaWduZWQgZW5kID0gZWxlbWVudCgpLT5oYXNDaGlsZE5vZGVzKCkg
PyBlbGVtZW50KCktPmNvdW50Q2hpbGROb2RlcygpIDogMTsKICAgICBpZiAocyA9PSBTZWxlY3Rp
b25FbmQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIGlmIChzID09
IFNlbGVjdGlvbkJvdGgpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNl
bGVjdGlvbkVuZCA9PSBlbmQ7CiAgICAgICAgIAotICAgIEFTU0VSVCgwKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCAwMjg4NmJiODBmYzM0ZWI0ZTQzZGQwYWNkM2Q5ZmY3
YWUwMmExNzMzLi5kM2ZiZTdjODU5MzE3OWE5OTUwNGRiNTAxZGZmMTYyNzA1Yzc3OTNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC00NDIsNyArNDQyLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50LCBjb25zdCBSZW4KICAgICByZXR1cm4gbV9saW5lQm94ZXMucG9zaXRpb25G
b3JQb2ludCgqdGhpcywgcG9pbnQpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2Fs
Q2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlv
dXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgaWYgKCFpbmxpbmVCb3gpCiAg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CkBAIC0xMzcyLDEzICsxMzcyLDEyIEBAIExheW91
dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rp
b25Ob25lKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIFJlbmRlckJsb2NrKiBj
YiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghY2IpCisgICAgaWYgKCFjb250YWluaW5n
QmxvY2soKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIC8vIE5vdyBjYWxj
dWxhdGUgc3RhcnRQb3MgYW5kIGVuZFBvcyBmb3IgcGFpbnRpbmcgc2VsZWN0aW9uLgogICAgIC8v
IFdlIGluY2x1ZGUgYSBzZWxlY3Rpb24gd2hpbGUgZW5kUG9zID4gMAotICAgIGludCBzdGFydFBv
cywgZW5kUG9zOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgaWYgKHNlbGVj
dGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFyZSBmdWxs
eSBzZWxlY3RlZC4KICAgICAgICAgc3RhcnRQb3MgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKaW5kZXggZDYzZTYwODljZGU0MDM3YzU1ZTVmMWM4YzYyMjgxZThhY2E2MmJi
NC4uMWZjOGRjMzk5ZmMzNjIwMWQ3Y2U1NWUwMjYwM2IyMjJhMDg2YzkyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAg
IGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIGZpbmFsOwogICAg
IExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRy
dWUpIG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
aW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBv
dmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2ln
bmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBv
dmVycmlkZTsKIAogICAgIExheW91dFJlY3QgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJv
eGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQsIFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXgg
ZDk0M2YzYTU4MWZmMGNiNWY2MTc1YmNkOTgxNGY2NDA3NTg2MGVkZC4uZTU5ZjNkZTYxNjMxZGYz
YzIzY2NlYTI2OWZlNTJiYzkyYTlkNzRjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgUmVu
ZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIs
IFJlbmRlck9iamVjdDo6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc3RhcnQs
IGVuZDsKKyAgICB1bnNpZ25lZCBzdGFydCwgZW5kOwogICAgIHJlbmRlcmVyLnNlbGVjdGlvblN0
YXJ0RW5kKHN0YXJ0LCBlbmQpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXJ0KSB7CiAgICAgICAgIGVuZCA9IHJlbmRlcmVyLnRleHRMZW5ndGgoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAppbmRleCBhOGRkNzE4ZDg4YjM5OWNhOWY4
ZWI3NzBlMzIxMmE1MGIxNGFkOWM2Li4wOTY0NzBkYmMzZGExZWUyNjE3ZTJhNjFkOGQ2NzQyNTgw
MWM1MGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xMjAs
OCArMTIwLDYgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhEb2N1bWVudCYgZG9jdW1lbnQsIFJl
bmRlclN0eWxlJiYgc3R5bGUpCiAgICAgLCBtX2ZyYW1lVmlldygqZG9jdW1lbnQudmlldygpKQog
ICAgICwgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQobnVsbHB0cikKICAgICAsIG1fc2VsZWN0aW9u
VW5zcGxpdEVuZChudWxscHRyKQotICAgICwgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3MoLTEp
Ci0gICAgLCBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MoLTEpCiAgICAgLCBtX2xhenlSZXBhaW50
VGltZXIoKnRoaXMsICZSZW5kZXJWaWV3OjpsYXp5UmVwYWludFRpbWVyRmlyZWQpCiAgICAgLCBt
X3BhZ2VMb2dpY2FsSGVpZ2h0KDApCiAgICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZChm
YWxzZSkKQEAgLTc3Miw3ICs3NzAsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJWaWV3OjpzdWJ0cmVl
U2VsZWN0aW9uQm91bmRzKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290LAogICAgIFNl
bGVjdGlvbk1hcCBzZWxlY3RlZE9iamVjdHM7CiAKICAgICBSZW5kZXJPYmplY3QqIG9zID0gcm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0
b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
RW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRv
KiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKKyAg
ICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb25FbmQpCisg
ICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCByb290LnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKICAgICBTZWxlY3Rpb25J
dGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7CiAgICAgd2hpbGUgKG9zICYmIG9zICE9IHN0
b3ApIHsKICAgICAgICAgaWYgKChvcy0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgb3MgPT0gcm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSB8fCBvcyA9PSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0
aW9uTm9uZSkgewpAQCAtODIxLDcgKzgyMiwxMCBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRT
dWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290KSBjb25zdAog
ewogICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBwcm9jZXNzZWRCbG9ja3M7CiAKLSAgICBSZW5k
ZXJPYmplY3QqIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25FbmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkp
OworICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
bkVuZCgpOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0
aW9uRW5kKQorICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5k
LCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKICAgICBT
ZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihyb290LnNlbGVjdGlvbkRhdGEoKS5z
ZWxlY3Rpb25TdGFydCgpKTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogbyA9IHNlbGVjdGlvbkl0
ZXJhdG9yLmN1cnJlbnQoKTsgbyAmJiBvICE9IGVuZDsgbyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5l
eHQoKSkgewogICAgICAgICBpZiAoIW8tPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIG8gIT0gcm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBvICE9IHJvb3Quc2VsZWN0aW9u
RGF0YSgpLnNlbGVjdGlvbkVuZCgpKQpAQCAtODQwLDcgKzg0NCw3IEBAIHZvaWQgUmVuZGVyVmll
dzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJv
b3QpIGNvbnN0CiAgICAgfQogfQogCi12b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5k
UG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQordm9pZCBSZW5kZXJW
aWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+
IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywg
U2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKIHsKICAgICAvLyBNYWtlIHN1
cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgogICAgIC8vIENo
ZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBjbGlja2luZyBhcm91bmQgdG8gZmluZCB0aGUgY2Fz
ZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgpAQCAtODc3LDcgKzg4MSw3IEBAIHZvaWQgUmVuZGVyVmll
dzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVy
T2JqZWN0KiBlCiAgICAgc3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoc3RhcnQsIHN0YXJ0
UG9zLCBlbmQsIGVuZFBvcywgYmxvY2tSZXBhaW50TW9kZSk7CiB9CiAKLXZvaWQgUmVuZGVyVmll
dzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFy
dCwgaW50IHN0YXJ0UG9zLCBjb25zdCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3ZvaWQgUmVuZGVyVmlldzo6c3Bs
aXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0
aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBjb25zdCBSZW5kZXJPYmplY3QqIGVuZCwgT3B0aW9u
YWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9k
ZSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB2aXNpYmxlIHNlbGVjdGlvbiBlbmQgcG9pbnRzIGZv
ciBlYWNoIG9mIHRoZSBzdWJ0cmVlcy4KICAgICBSZW5kZXJTdWJ0cmVlc01hcCByZW5kZXJTdWJ0
cmVlc01hcDsKQEAgLTkwMiwxNCArOTA2LDE3IEBAIHZvaWQgUmVuZGVyVmlldzo6c3BsaXRTZWxl
Y3Rpb25CZXR3ZWVuU3VidHJlZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0CiAg
ICAgICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSBzZWxlY3Rpb25EYXRhID0gcmVuZGVyU3Vi
dHJlZXNNYXAuZ2V0KCZyb290KTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25EYXRhLnNlbGVj
dGlvbkNsZWFyKCkpIHsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlv
blN0YXJ0KG5vZGUtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEu
c2V0U2VsZWN0aW9uU3RhcnRQb3Mobm9kZSA9PSBzdGFydE5vZGUgPyBzdGFydFBvcyA6IDApOwor
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uU3RhcnRQb3Mobm9kZSA9
PSBzdGFydE5vZGUgPyBzdGFydFBvcyA6IE9wdGlvbmFsPHVuc2lnbmVkPigwKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kKG5vZGUt
PnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhlbmRQb3MpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5k
UG9zKG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpID8gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0
KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIG5ld0VuZFBvcyA9IG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpID8g
bm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobmV3RW5kUG9zID49IDApOworICAgICAgICAgICAgICAgIHNl
bGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKG5ld0VuZFBvcyk7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIHJlbmRlclN1YnRyZWVzTWFwLnNldCgmcm9vdCwgc2VsZWN0aW9uRGF0
YSk7CiAgICAgICAgIH0KQEAgLTk2MCw3ICs5NjcsMTAgQEAgdm9pZCBSZW5kZXJWaWV3OjpjbGVh
clN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QsIFNlbGVj
dGkKICAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1l
IGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCiAKICAgICBSZW5kZXJPYmplY3QqIG9z
ID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBSZW5kZXJPYmpl
Y3QqIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAg
ICBhdXRvKiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQo
KTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb25F
bmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBy
b290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKICAgICBTZWxl
Y3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7CiAgICAgd2hpbGUgKG9zICYmIG9z
ICE9IHN0b3ApIHsKICAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24ocm9v
dCwgKm9zKSkgewpAQCAtOTk4LDcgKzEwMDgsMTAgQEAgdm9pZCBSZW5kZXJWaWV3OjphcHBseVN1
YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QsIFNlbGVjdGkK
ICAgICB9CiAKICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0ID0gcm9vdC5zZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVu
ZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25F
bmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8q
IHNlbGVjdGlvbkRhdGFFbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsK
KyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVj
dGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlv
bihzZWxlY3Rpb25EYXRhRW5kLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3Mo
KS52YWx1ZSgpKTsKICAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxl
Y3Rpb25TdGFydCk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnRSZW5kZXJlciA9IHNl
bGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVj
dGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CiAg
ICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uU3RhcnQoKSB8fCBjdXJyZW50UmVuZGVyZXIgPT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kKCkpCkBAIC0xMDg5LDcgKzExMDIsNyBAQCB2b2lkIFJlbmRlclZpZXc6OmFwcGx5
U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0
aQogICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS0+cmVwYWludCgpOwogfQogCi12b2lk
IFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBp
bnQmIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgaW50JiBlbmRPZmZz
ZXQpIGNvbnN0Cit2b2lkIFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBz
dGFydFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmpl
Y3QqJiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0CiB7
CiAgICAgc3RhcnRSZW5kZXJlciA9IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwogICAgIHN0YXJ0
T2Zmc2V0ID0gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7CkBAIC0xMTAwLDcgKzExMTMsNyBA
QCB2b2lkIFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRl
cmVyLCBpbnQmIHN0YXJ0T2Zmc2V0LCBSZQogdm9pZCBSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlv
bigpCiB7CiAgICAgbGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotICAgIHNl
dFNlbGVjdGlvbihudWxscHRyLCAtMSwgbnVsbHB0ciwgLTEsIFJlcGFpbnROZXdNaW51c09sZCk7
CisgICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIE51bGxvcHQsIG51bGxwdHIsIE51bGxvcHQsIFJl
cGFpbnROZXdNaW51c09sZCk7CiB9CiAKIGJvb2wgUmVuZGVyVmlldzo6cHJpbnRpbmcoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggYzdjOTI4NjRmMDM0NWE1
ZWRiMmI0YzExMTMzMTQyNzkwNTMyZDBiZi4uNDVjY2EyMTkyYjQ3NDUwNjVjZThlMWNmNTAwZmJm
YzczZmNhMmE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC04NSw4
ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKIAogICAgIGVudW0gU2VsZWN0aW9uUmVw
YWludE1vZGUgeyBSZXBhaW50TmV3WE9ST2xkLCBSZXBhaW50TmV3TWludXNPbGQsIFJlcGFpbnRO
b3RoaW5nIH07Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50
IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWlu
dE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqJiBzdGFydFJlbmRlcmVyLCBpbnQmIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBl
bmRSZW5kZXJlciwgaW50JiBlbmRPZmZzZXQpIGNvbnN0OworICAgIHZvaWQgc2V0U2VsZWN0aW9u
KFJlbmRlck9iamVjdCogc3RhcnQsIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVy
T2JqZWN0KiBlbmRPYmplY3QsIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRQb3MsIFNlbGVjdGlvblJl
cGFpbnRNb2RlID0gUmVwYWludE5ld1hPUk9sZCk7CisgICAgdm9pZCBnZXRTZWxlY3Rpb24oUmVu
ZGVyT2JqZWN0KiYgc3RhcnRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBzdGFydE9mZnNl
dCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgZW5kT2Zm
c2V0KSBjb25zdDsKICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7CiAgICAgUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25VbnNwbGl0U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblVuc3Bs
aXRTdGFydDsgfQogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uVW5zcGxpdEVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdEVuZDsgfQpAQCAtMzA3LDcgKzMwNyw3IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgc3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBpbnQgc3RhcnRQb3MsIGNvbnN0IFJlbmRl
ck9iamVjdCogZW5kUmVuZGVyZXIsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJs
b2NrUmVwYWludE1vZGUpOworICAgIHZvaWQgc3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMo
Y29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4gc3Rh
cnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVk
PiBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpOwogICAgIHZv
aWQgY2xlYXJTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiwgU2Vs
ZWN0aW9uUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmKSBjb25zdDsKICAgICB2b2lkIHVw
ZGF0ZVNlbGVjdGlvbkZvclN1YnRyZWVzKFJlbmRlclN1YnRyZWVzTWFwJiwgU2VsZWN0aW9uUmVw
YWludE1vZGUpOwogICAgIHZvaWQgYXBwbHlTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlv
blN1YnRyZWVSb290JiwgU2VsZWN0aW9uUmVwYWludE1vZGUsIGNvbnN0IE9sZFNlbGVjdGlvbkRh
dGEmKTsKQEAgLTMxOSw4ICszMTksOCBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyT2JqZWN0KiBt
X3NlbGVjdGlvblVuc3BsaXRTdGFydDsKICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5z
cGxpdEVuZDsKLSAgICBpbnQgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7Ci0gICAgaW50IG1f
c2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rp
b25VbnNwbGl0U3RhcnRQb3M7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5z
cGxpdEVuZFBvczsKIAogICAgIC8vIEluY2x1ZGUgdGhpcyBSZW5kZXJWaWV3LgogICAgIHVpbnQ2
NF90IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCmluZGV4IDlmNjVlOTRiNWU0NGJjZGUwYmUwM2Zi
ZGRkZjk4NGFhMWE5ODQ4Y2MuLjE4MWU2YjUyNzEzN2I0M2U1YWNjNDg3MDMwNzg5M2UwMDIxNDBh
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVl
Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVS
b290LmNwcApAQCAtNDIsMTkgKzQyLDE2IEBAIFNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rp
b25TdWJ0cmVlUm9vdCgpCiB7CiB9CiAKLVNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdChSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uU3Rh
cnRQb3MsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kLCBpbnQgc2VsZWN0aW9uRW5kUG9zKQot
ICAgIDogbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uU3Rh
cnRQb3MsIHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRW5kUG9zKQotewotfQotCiB2b2lkIFNlbGVj
dGlvblN1YnRyZWVSb290OjphZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1
bWVudCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25DbGVhcigp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDcmVhdGUgYSByYW5nZSBiYXNlZCBvbiB0aGUg
Y2FjaGVkIGVuZCBwb2ludHMKLSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnQo
KS0+bm9kZSgpLCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0UG9zKCkpOwot
ICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1f
c2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uRW5kKCktPm5vZGUoKSwgbV9zZWxlY3Rpb25T
dWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9
IG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnRQb3MoKS52YWx1ZSgpOworICAg
IGF1dG8gc2VsZWN0aW9uRW5kID0gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmRQ
b3MoKS52YWx1ZSgpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydCgpLT5u
b2RlKCksIHNlbGVjdGlvblN0YXJ0KTsKKyAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVu
ZCgpLT5ub2RlKCksIHNlbGVjdGlvbkVuZCk7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgc3RhcnRQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSwgZW5kUG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCpyYW5nZSk7CkBAIC04MiwxMCArNzksMTMgQEAgdm9p
ZCBTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbihEb2N1bWVu
dCYgZG9jdW1lbnQpCiAgICAgaWYgKCZzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLT5zZWxlY3Rpb25Sb290KCkgIT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0
byBuZXdTdGFydFBvcyA9IHN0YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAg
YXV0byBuZXdFbmRQb3MgPSBlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBB
U1NFUlQobmV3U3RhcnRQb3MgPj0gMCAmJiBuZXdFbmRQb3MgPj0gMCk7CiAgICAgbV9zZWxlY3Rp
b25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydChzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpKTsKLSAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvblN0
YXJ0UG9zKHN0YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIG1fc2VsZWN0
aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9uU3RhcnRQb3MobmV3U3RhcnRQb3MpOwogICAgIG1f
c2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9uRW5kKGVuZFBvcy5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpKTsKLSAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlv
bkVuZFBvcyhlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgbV9zZWxlY3Rp
b25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Nl
bGVjdGlvblN1YnRyZWVSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9u
U3VidHJlZVJvb3QuaAppbmRleCBkZDE5MTk3OGZkNjRiOTliMTZlNDgxMGY5NmJkZTZhZDA0MTM0
ZTk1Li5hODIxMjExYmMzYTU5NTIyODZmN2IyNTRlOGZkOWRiNjA3YzgwOWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaApAQCAtNDUsMjgg
KzQ1LDIwIEBAIHB1YmxpYzoKIAogICAgIHN0cnVjdCBPbGRTZWxlY3Rpb25EYXRhIHsKICAgICAg
ICAgT2xkU2VsZWN0aW9uRGF0YSgpCi0gICAgICAgICAgICA6IHNlbGVjdGlvblN0YXJ0UG9zKC0x
KQotICAgICAgICAgICAgLCBzZWxlY3Rpb25FbmRQb3MoLTEpCiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAgaW50IHNlbGVjdGlv
bkVuZFBvczsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zOwor
ICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zOwogICAgICAgICBTZWxl
Y3RlZE9iamVjdE1hcCBzZWxlY3RlZE9iamVjdHM7CiAgICAgICAgIFNlbGVjdGVkQmxvY2tNYXAg
c2VsZWN0ZWRCbG9ja3M7CiAgICAgfTsKIAogICAgIGNsYXNzIFNlbGVjdGlvblN1YnRyZWVEYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhKCkKLSAgICAgICAg
ICAgIDogbV9zZWxlY3Rpb25TdGFydChudWxscHRyKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlv
blN0YXJ0UG9zKC0xKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZChudWxscHRyKQotICAg
ICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZFBvcygtMSkKLSAgICAgICAgewotICAgICAgICB9Cisg
ICAgICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhKCkgPSBkZWZhdWx0OwogCi0gICAgICAgIFNlbGVj
dGlvblN1YnRyZWVEYXRhKFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rp
b25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rpb25FbmRQ
b3MpCisgICAgICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhKFJlbmRlck9iamVjdCogc2VsZWN0aW9u
U3RhcnQsIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25FbmQsIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MpCiAgICAg
ICAgICAgICA6IG1fc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCiAgICAgICAgICAgICAs
IG1fc2VsZWN0aW9uU3RhcnRQb3Moc2VsZWN0aW9uU3RhcnRQb3MpCiAgICAgICAgICAgICAsIG1f
c2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkKQEAgLTc1LDQ2ICs2Nyw0NSBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KIAogICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb25TdGFydDsgfQotICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnRQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0UG9zOyB9CisgICAgICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uU3RhcnRQb3M7IH0KICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZDsgfQotICAgICAgICBpbnQgc2VsZWN0aW9uRW5kUG9z
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmRQb3M7IH0KKyAgICAgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5k
UG9zOyB9CiAgICAgICAgIGJvb2wgc2VsZWN0aW9uQ2xlYXIoKSBjb25zdAogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gIW1fc2VsZWN0aW9uU3RhcnQKLSAgICAgICAgICAgICYmIChtX3Nl
bGVjdGlvblN0YXJ0UG9zID09IC0xKQorICAgICAgICAgICAgJiYgKCFtX3NlbGVjdGlvblN0YXJ0
UG9zKQogICAgICAgICAgICAgJiYgIW1fc2VsZWN0aW9uRW5kCi0gICAgICAgICAgICAmJiAobV9z
ZWxlY3Rpb25FbmRQb3MgPT0gLTEpOworICAgICAgICAgICAgJiYgKCFtX3NlbGVjdGlvbkVuZFBv
cyk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25z
KGludCYgc3RhcnRQb3MsIGludCYgZW5kUG9zKSBjb25zdAorICAgICAgICB2b2lkIHNlbGVjdGlv
blN0YXJ0RW5kUG9zaXRpb25zKHVuc2lnbmVkJiBzdGFydFBvcywgdW5zaWduZWQmIGVuZFBvcykg
Y29uc3QKICAgICAgICAgewotICAgICAgICAgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlvblN0YXJ0
UG9zOwotICAgICAgICAgICAgZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3M7CisgICAgICAgICAg
ICBzdGFydFBvcyA9IG1fc2VsZWN0aW9uU3RhcnRQb3MudmFsdWUoKTsKKyAgICAgICAgICAgIGVu
ZFBvcyA9IG1fc2VsZWN0aW9uRW5kUG9zLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgdm9p
ZCBzZXRTZWxlY3Rpb25TdGFydChSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0KSB7IG1fc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsgfQotICAgICAgICB2b2lkIHNldFNlbGVjdGlv
blN0YXJ0UG9zKGludCBzZWxlY3Rpb25TdGFydFBvcykgeyBtX3NlbGVjdGlvblN0YXJ0UG9zID0g
c2VsZWN0aW9uU3RhcnRQb3M7IH0KKyAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydFBvcyhP
cHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MpIHsgbV9zZWxlY3Rpb25TdGFydFBv
cyA9IHNlbGVjdGlvblN0YXJ0UG9zO30KICAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmQoUmVu
ZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQpIHsgbV9zZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmQ7
IH0KLSAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmRQb3MoaW50IHNlbGVjdGlvbkVuZFBvcykg
eyBtX3NlbGVjdGlvbkVuZFBvcyA9IHNlbGVjdGlvbkVuZFBvczsgfQorICAgICAgICB2b2lkIHNl
dFNlbGVjdGlvbkVuZFBvcyhPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKSB7IG1f
c2VsZWN0aW9uRW5kUG9zID0gc2VsZWN0aW9uRW5kUG9zO30KICAgICAgICAgdm9pZCBjbGVhclNl
bGVjdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uU3RhcnQgPSBudWxs
cHRyOwotICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFydFBvcyA9IC0xOworICAgICAgICAgICAg
bV9zZWxlY3Rpb25TdGFydFBvcyA9IE51bGxvcHQ7CiAgICAgICAgICAgICBtX3NlbGVjdGlvbkVu
ZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IC0xOworICAgICAg
ICAgICAgbV9zZWxlY3Rpb25FbmRQb3MgPSBOdWxsb3B0OwogICAgICAgICB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uU3RhcnQ7Ci0gICAgICAgIGlu
dCBtX3NlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9u
RW5kOwotICAgICAgICBpbnQgbV9zZWxlY3Rpb25FbmRQb3M7CisgICAgICAgIFJlbmRlck9iamVj
dCogbV9zZWxlY3Rpb25TdGFydCB7IG51bGxwdHIgfTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IG1fc2VsZWN0aW9uU3RhcnRQb3M7CisgICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rp
b25FbmQgeyBudWxscHRyIH07CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlv
bkVuZFBvczsKICAgICB9OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFNlbGVjdGlvblN1YnRyZWVS
b290KiwgU2VsZWN0aW9uU3VidHJlZURhdGE+IFJlbmRlclN1YnRyZWVzTWFwOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCosIHN0ZDo6dW5pcXVlX3B0cjxP
bGRTZWxlY3Rpb25EYXRhPj4gU3VidHJlZU9sZFNlbGVjdGlvbkRhdGFNYXA7CiAKICAgICBTZWxl
Y3Rpb25TdWJ0cmVlUm9vdCgpOwotICAgIFNlbGVjdGlvblN1YnRyZWVSb290KFJlbmRlck9iamVj
dCogc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBz
ZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rpb25FbmRQb3MpOwogCiAgICAgU2VsZWN0aW9uU3VidHJl
ZURhdGEmIHNlbGVjdGlvbkRhdGEoKSB7IHJldHVybiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9
CiAgICAgY29uc3QgU2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvbkRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmNwcAppbmRleCA4ZDM1OTdmMmM4NGE3MGY3NjkxNWJkMjljNTgzYzc2OTUx
YWE3M2EwLi42ZTVlY2MyNjdjYjZjZTA2YzRhNWRjOTI4NGZlZmQxZjVlMjk1ZDBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKQEAgLTg0LDE3ICs4NCwxNyBAQCBU
ZXh0UGFpbnRlcjo6VGV4dFBhaW50ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogfQogCiB2
b2lkIFRleHRQYWludGVyOjpkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBo
YXNpc01hcmssCi0gICAgaW50IGVtcGhhc2lzTWFya09mZnNldCwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQorICAgIGZsb2F0IGVt
cGhhc2lzTWFya09mZnNldCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKIHsKICAgICBBU1NFUlQoc3RhcnRPZmZz
ZXQgPCBlbmRPZmZzZXQpOwogICAgIGlmIChlbXBoYXNpc01hcmsuaXNFbXB0eSgpKQogICAgICAg
ICBtX2NvbnRleHQuZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbiwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCk7CiAgICAgZWxzZQotICAgICAgICBtX2NvbnRleHQuZHJhd0VtcGhhc2lz
TWFya3MoZm9udCwgdGV4dFJ1biwgZW1waGFzaXNNYXJrLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSgw
LCBlbXBoYXNpc01hcmtPZmZzZXQpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAg
bV9jb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGZvbnQsIHRleHRSdW4sIGVtcGhhc2lzTWFyaywg
dGV4dE9yaWdpbiArIEZsb2F0U2l6ZSgwLCBlbXBoYXNpc01hcmtPZmZzZXQpLCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRv
d3MoY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9h
dFBvaW50JiB0ZXh0T3JpZ2luLAotICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQs
IGJvb2wgc3Ryb2tlZCkKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJr
T2Zmc2V0LCBib29sIHN0cm9rZWQpCiB7CiAgICAgaWYgKCFzaGFkb3cpIHsKICAgICAgICAgZHJh
d1RleHRPckVtcGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1biwgZW1waGFzaXNNYXJrLCBlbXBoYXNp
c01hcmtPZmZzZXQsIHRleHRPcmlnaW4sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwpAQCAtMTIw
LDcgKzEyMCw3IEBAIHZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvdywgY29uc3QgRm9udENhc2NhCiAgICAgfQogfQogCi12b2lkIFRl
eHRQYWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1
biYgdGV4dFJ1biwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0
ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsCit2b2lkIFRleHRQYWlu
dGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4
dFJ1biwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3Jp
Z2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LAogICAgIGNvbnN0
IFRleHRQYWludFN0eWxlJiBwYWludFN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7
CiAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCkBA
IC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0QW5kRW1waGFzaXNN
YXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnMKICAgICAgICAgbV9jb250
ZXh0LmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7CiB9CiAg
ICAgCi12b2lkIFRleHRQYWludGVyOjpwYWludFRleHQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwg
aW50IGxlbmd0aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0
ZXh0T3JpZ2luLCBpbnQgc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25FbmQsCit2b2lkIFRl
eHRQYWludGVyOjpwYWludFRleHQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQsCiAgICAg
Ym9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHksIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0
ZWx5KQogewogICAgIEFTU0VSVChtX2ZvbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1RleHRQYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuaAppbmRleCBlNGI1YjE4Y2NmM2NhMjYxMzM0MGUwZWE0ZGRhZGIxYmY5NTBiZjEyLi4y
ZTE2N2ZiMzM4ZjdhZmVkMmFiYjQ2YjczZGIwZTliZGQ4MmQyZDc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFBhaW50ZXIuaApAQCAtNTQsMTggKzU0LDE4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFNlbGVjdGlvblBhaW50U3R5bGUoY29uc3QgVGV4dFBhaW50U3R5bGUmIHNlbGVjdGlv
blBhaW50U3R5bGUpIHsgbV9zZWxlY3Rpb25QYWludFN0eWxlID0gc2VsZWN0aW9uUGFpbnRTdHls
ZTsgfQogICAgIHZvaWQgc2V0SXNIb3Jpem9udGFsKGJvb2wgaXNIb3Jpem9udGFsKSB7IG1fdGV4
dEJveElzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbDsgfQogICAgIHZvaWQgc2V0Rm9udChjb25z
dCBGb250Q2FzY2FkZSYgZm9udCkgeyBtX2ZvbnQgPSAmZm9udDsgfQotICAgIHZvaWQgYWRkRW1w
aGFzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtP
ZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0Kik7CisgICAgdm9pZCBhZGRFbXBoYXNpcyhjb25zdCBB
dG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5k
ZXJDb21iaW5lVGV4dCopOwogICAgIHZvaWQgYWRkVGV4dFNoYWRvdyhjb25zdCBTaGFkb3dEYXRh
KiB0ZXh0U2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBzZWxlY3Rpb25TaGFkb3cpOwogCi0gICAg
dm9pZCBwYWludFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBsZW5ndGgsIGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwKLSAgICAgICAgaW50IHNl
bGVjdGlvblN0YXJ0ID0gMCwgaW50IHNlbGVjdGlvbkVuZCA9IDAsIGJvb2wgcGFpbnRTZWxlY3Rl
ZFRleHRPbmx5ID0gZmFsc2UsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gZmFs
c2UpOworICAgIHZvaWQgcGFpbnRUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwK
KyAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAwLCB1bnNpZ25lZCBzZWxlY3Rpb25F
bmQgPSAwLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IGZhbHNlLCBib29sIHBhaW50U2Vs
ZWN0ZWRUZXh0U2VwYXJhdGVseSA9IGZhbHNlKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdU
ZXh0T3JFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LAot
ICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBlbmRPZmZzZXQpOworICAgIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01h
cmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAg
ICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhjb25zdCBTaGFkb3dEYXRhKiwgY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICBpbnQgc3RhcnRPZmZzZXQsIGludCBl
bmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNN
YXJrT2Zmc2V0LCBib29sIHN0cm9rZWQpOwotICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1waGFzaXNN
YXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29u
c3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwg
Ym9vbCBzdHJva2VkKTsKKyAgICB2b2lkIHBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRl
ZChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LAogICAgICAgICBjb25zdCBUZXh0UGFpbnRTdHlsZSYsIGNvbnN0IFNoYWRvd0RhdGEqKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCYgbV9jb250ZXh0OwpAQCAtNzYsMTEgKzc2LDExIEBAIHByaXZh
dGU6CiAgICAgY29uc3QgU2hhZG93RGF0YSogbV9zZWxlY3Rpb25TaGFkb3cgeyBudWxscHRyIH07
CiAgICAgQXRvbWljU3RyaW5nIG1fZW1waGFzaXNNYXJrOwogICAgIFJlbmRlckNvbWJpbmVUZXh0
KiBtX2NvbWJpbmVkVGV4dCB7IG51bGxwdHIgfTsKLSAgICBpbnQgbV9lbXBoYXNpc01hcmtPZmZz
ZXQgeyAwIH07CisgICAgZmxvYXQgbV9lbXBoYXNpc01hcmtPZmZzZXQgeyAwIH07CiAgICAgYm9v
bCBtX3RleHRCb3hJc0hvcml6b250YWwgeyB0cnVlIH07CiB9OwogCi1pbmxpbmUgdm9pZCBUZXh0
UGFpbnRlcjo6YWRkRW1waGFzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGlu
dCBlbXBoYXNpc01hcmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQpCitp
bmxpbmUgdm9pZCBUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBl
bXBoYXNpc01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQq
IGNvbWJpbmVkVGV4dCkKIHsKICAgICBtX2VtcGhhc2lzTWFyayA9IGVtcGhhc2lzTWFyazsKICAg
ICBtX2VtcGhhc2lzTWFya09mZnNldCA9IGVtcGhhc2lzTWFya09mZnNldDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCmluZGV4
IDk3MTMzZTEwYzBkNDM2ZTI5MjkyOTY5NDI2ZjUxNDJiMWVmZjIyMmYuLmUzN2ZmNjEwZTljNzNj
YWU2NzY1MDdkZDBjMGRiZmEzZDcyNmRmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcApAQCAtMTE2LDIyICsxMTYsMjMg
QEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IFJlbmRlclNWR0lubGluZVRleHQ6OmNy
ZWF0ZVRleHRCb3goKQogICAgIHJldHVybiBXVEZNb3ZlKGJveCk7CiB9CiAKLUxheW91dFJlY3Qg
UmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCopCitMYXlvdXRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5
b3V0VW5pdCopCiB7CiAgICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94Pihib3gpKQogICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElubGlu
ZVRleHRCb3g+KCpib3gpOwotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZz
ZXQpIDwgdGV4dEJveC5zdGFydCgpIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNl
dCkgPiB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKQorICAgIGlmIChjYXJldE9mZnNl
dCA8IHRleHRCb3guc3RhcnQoKSB8fCBjYXJldE9mZnNldCA+IHRleHRCb3guc3RhcnQoKSArIHRl
eHRCb3gubGVuKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBVc2Ug
dGhlIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0aGUgY2FyZXQgcmVj
dC4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0KSA8IHRleHRCb3gu
c3RhcnQoKSArIHRleHRCb3gubGVuKCkpIHsKKyAgICBpZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94
LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSB7CiAgICAgICAgIExheW91dFJlY3QgcmVjdCA9IHRl
eHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCArIDEpOwog
ICAgICAgICBMYXlvdXRVbml0IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHJl
Y3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKICAgICB9CiAKKyAgICBBU1NFUlQo
Y2FyZXRPZmZzZXQgPiAwKTsKICAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2Vs
ZWN0aW9uUmVjdChjYXJldE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKICAgICBMYXlvdXRVbml0
IHggPSB0ZXh0Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVj
dC54KCk7CiAgICAgcmV0dXJuIExheW91dFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJl
Y3QuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuaAppbmRleCA3NDY3NzNiZDkyZGVjOTE4ZDk3ZDFmMzM0NGZlMzFlMDQ3
Y2M4NTNkLi45OTk4ZmUxYWY2NjQ5YzM2YzQ2YTYzMWRhZTA4MjdkMWYzZjFjYTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApA
QCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVy
cmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7
CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7
CiAgICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNyZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
aW5kZXggYTRmNDE5ZmQ2YThmOWI0Y2ZkODU4YmQzMmNmZDBkNTNhOGE0ODk1MC4uNzUxNTVjODI3
MjM3ZjBlZjQwN2EzOGZhNjgwYjExMzUwNTg1MzAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0xMDAsMTQgKzEwMCwxNCBA
QCBpbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbgogICAgIHJldHVybiBmcmFnbWVudC5jaGFyYWN0ZXJP
ZmZzZXQgLSBzdGFydCgpICsgcmVuZGVyZXIoKS5zY2FsZWRGb250KCkub2Zmc2V0Rm9yUG9zaXRp
b24odGV4dFJ1biwgcG9zaXRpb24gKiBzY2FsaW5nRmFjdG9yLCBpbmNsdWRlUGFydGlhbEdseXBo
cyk7CiB9CiAKLWZsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCkg
Y29uc3QKK2Zsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVk
KSBjb25zdAogewogICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0IDwtPiBwb3NpdGlv
biBzZWxlY3Rpb24gc3lzdGVtLiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JU
ZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9z
aXRpb24sIGludCBlbmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
RmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQo
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwg
dW5zaWduZWQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGFydFBvc2l0aW9uIDwgZW5k
UG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xMzQsMTEgKzEzNCwxMCBAQCBGbG9h
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25z
dCBTVkdUZXh0RnJhZ21lbnQmCiAgICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0OwogfQog
Ci1MYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3Rh
cnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKSBjb25zdAorTGF5b3V0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWdu
ZWQgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaW50IGJveFN0YXJ0ID0gc3RhcnQoKTsKLSAg
ICBzdGFydFBvc2l0aW9uID0gc3RkOjptYXgoc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsK
LSAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIHN0YXRp
Y19jYXN0PGludD4obGVuKCkpKTsKKyAgICBzdGFydFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChz
dGFydFBvc2l0aW9uKTsKKyAgICBlbmRQb3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zaXRp
b24pOwogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0xNDYsOCArMTQ1LDggQEAgTGF5b3V0UmVjdCBTVkdJbmxp
bmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQ
b3NpdGkKIAogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICBGbG9h
dFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsK
LSAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRT
dGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsK
IAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkg
ewpAQCAtMjAzLDEyICsyMDIsMTIgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVj
dGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8pCiAKICAgICBhdXRvJiBzdHlsZSA9
IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbjsKLSAgICBp
bnQgZW5kUG9zaXRpb247CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbjsKKyAgICB1bnNpZ25l
ZCBlbmRQb3NpdGlvbjsKICAgICBzdGQ6OnRpZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikg
PSBzZWxlY3Rpb25TdGFydEVuZCgpOwogCi0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9
IDA7Ci0gICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdt
ZW50U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9
IDA7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIHVuc2lnbmVk
IHRleHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtNDA3LDIxICs0
MDYsMjQgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGUKICAgICByZXR1cm4gcnVuOwogfQogCi1i
b29sIFNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0
aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjptYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9z
aXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCkgLSBzdGFydCgpOwotICAgIGludCBsZW5ndGggPSBz
dGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCk7CisgICAgQVNTRVJUKGZyYWdtZW50LmNo
YXJhY3Rlck9mZnNldCA+PSBzdGFydCgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBmcmFnbWVu
dC5jaGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZyYWdt
ZW50Lmxlbmd0aDsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uID49IG9mZnNldCArIGxlbmd0aCB8
fCBlbmRQb3NpdGlvbiA8PSBvZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChzdGFydFBvc2l0aW9uIDwgb2Zmc2V0KQogICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAg
ICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uID49IG9mZnNl
dCk7CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gLT0gb2Zmc2V0OworICAgIH0KIAogICAgIGlmIChl
bmRQb3NpdGlvbiA+IG9mZnNldCArIGxlbmd0aCkKICAgICAgICAgZW5kUG9zaXRpb24gPSBsZW5n
dGg7CkBAIC01NDAsNyArNTQyLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29y
YXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBUZXh0RGUKICAgICAgICAg
cmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dFB0ciwgJnBhdGgpOwogfQogCi12b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0
aW9uKQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4
dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9
IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsK
QEAgLTU5MCw4ICs1OTIsOCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgIEFTU0VSVChz
dHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKIAotICAgIGludCBzdGFydFBvc2l0
aW9uID0gMDsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHN0YXJ0UG9z
aXRpb24gPSAwOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gMDsKICAgICBpZiAoaGFzU2Vs
ZWN0aW9uKSB7CiAgICAgICAgIHN0ZDo6dGllKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSA9
IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgICAgIGhhc1NlbGVjdGlvbiA9IG1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKTsKQEAgLTYxOCw3ICs2MjAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dAogICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHBhcmVudCgp
LT5yZW5kZXJlcigpLCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCAqc3R5bGUpOwogCiAgICAgLy8g
RXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9z
aXRpb24gb2YgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNodW5rIHBh
cnQKLSAgICBpZiAoZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0
aCkgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAgICBpZiAoZW5kUG9zaXRpb24gPCBmcmFn
bWVudC5sZW5ndGggJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgcGFpbnRUZXh0
V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCBlbmRQb3NpdGlv
biwgZnJhZ21lbnQubGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guaAppbmRleCBjOGZkMTQ4ODhiNDYyMzQyNTEzYWU5NzA5OWI3
NzYwOTYzYmIxODI3Li4xZTMyYTQyMjI5NGU1NjM5Y2IzMmZlYTU5OTNkZjBkNDMyNWRlODBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApA
QCAtNDMsMTMgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1
cm4gdG9wKCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVpZ2h0KCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50PihjZWlsZihtX2xvZ2ljYWxIZWlnaHQpKTsgfQogICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25z
dCBvdmVycmlkZTsKIAogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5m
byYpOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7Ci0gICAgTGF5
b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3Qo
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQ
b3NpdGlvbikgY29uc3Q7CisgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVu
dENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZTsKIApAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsg
bV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRG
b3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRp
b24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFn
bWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50
KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwg
dW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsK
IAogcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5lVGV4dEJveCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
cGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmKTsKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFw
aGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIGRlY29yYXRpb25SZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludFRl
eHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRleHRS
dW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBv
c2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKTsKICAgICB2b2lkIHBh
aW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNT
ZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5KTsKIAogICAgIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBI
aXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFF1ZXJ5LmNwcAppbmRleCBmZjM2Njc3MTcxNTMxNThmNjc2Mjg3N2E5ODgwODgwYjJl
YzBkN2VlLi45MzMwYWFhMWM3MTFkYWU1MTY4MmJjYjM5MzYxNTNiMmIxNGZjOWU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCkBAIC0xMzQsMTMg
KzEzNCwxNSBAQCBib29sIFNWR1RleHRRdWVyeTo6ZXhlY3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5RGF0
YSwgUHJvY2Vzc1RleHRGcmFnbWVudENhbGxiYWNrIGZyYQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50
LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR1Rl
eHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRh
KiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBz
dGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgLy8gUmV1
c2UgdGhlIHNhbWUgbG9naWMgdXNlZCBmb3IgdGV4dCBzZWxlY3Rpb24gJiBwYWludGluZywgdG8g
bWFwIG91ciBxdWVyeSBzdGFydC9sZW5ndGggaW50byBzdGFydC9lbmRQb3NpdGlvbnMgb2YgdGhl
IGN1cnJlbnQgdGV4dCBmcmFnbWVudC4KKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA+PSBxdWVy
eURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMpOworICAgIEFTU0VSVChlbmRQb3NpdGlvbiA+PSBx
dWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMpOwogICAgIHN0YXJ0UG9zaXRpb24gLT0gcXVl
cnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogICAgIGVuZFBvc2l0aW9uIC09IHF1ZXJ5RGF0
YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsKIAotICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBv
c2l0aW9uIHx8IHN0YXJ0UG9zaXRpb24gPCAwIHx8IGVuZFBvc2l0aW9uIDwgMCkKKyAgICBpZiAo
c3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKHF1ZXJ5RGF0YSwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwpAQCAtMTUxLDcgKzE1Myw3IEBAIGJvb2wgU1ZH
VGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERh
dGEqIHF1ZXJ5RGF0YSwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdUZXh0UXVlcnk6
Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURh
dGEsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK3ZvaWQgU1ZH
VGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0
YSogcXVlcnlEYXRhLCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0
aW9uKSBjb25zdAogewogICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1
dGVzID0gcXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPmxheW91dEF0dHJpYnV0ZXMoKTsKICAgICBW
ZWN0b3I8U1ZHVGV4dE1ldHJpY3M+JiB0ZXh0TWV0cmljc1ZhbHVlcyA9IGxheW91dEF0dHJpYnV0
ZXMtPnRleHRNZXRyaWNzVmFsdWVzKCk7CkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBTVkdUZXh0
UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBx
dWVyeURhdGEsIGkKICAgICBib29sIGFsdGVyU3RhcnRQb3NpdGlvbiA9IHRydWU7CiAgICAgYm9v
bCBhbHRlckVuZFBvc2l0aW9uID0gdHJ1ZTsKIAotICAgIGludCBsYXN0UG9zaXRpb25PZmZzZXQg
PSAtMTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGFzdFBvc2l0aW9uT2Zmc2V0OwogICAgIGZv
ciAoOyB0ZXh0TWV0cmljc09mZnNldCA8IHRleHRNZXRyaWNzU2l6ZSAmJiBwb3NpdGlvbk9mZnNl
dCA8IHBvc2l0aW9uU2l6ZTsgKyt0ZXh0TWV0cmljc09mZnNldCkgewogICAgICAgICBTVkdUZXh0
TWV0cmljcyYgbWV0cmljcyA9IHRleHRNZXRyaWNzVmFsdWVzW3RleHRNZXRyaWNzT2Zmc2V0XTsK
IApAQCAtMTgyLDIxICsxODQsMjEgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5k
UG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEg
Y2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0
LgotICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9u
T2Zmc2V0KSkKKyAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAg
ICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0
aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBsaXN0
LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBpdC4KLSAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09
IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoZW5kUG9zaXRp
b24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFs
c2U7CiAKICAgICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJlcy4KLSAgICAgICAgaWYgKGxhc3RQb3Np
dGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+
IDEpIHsKLSAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlv
biA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50
Pihwb3NpdGlvbk9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFz
dFBvc2l0aW9uT2Zmc2V0OworICAgICAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGxhc3RQ
b3NpdGlvbk9mZnNldC52YWx1ZSgpIC0gcG9zaXRpb25PZmZzZXQgPiAxKSB7CisgICAgICAgICAg
ICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25P
ZmZzZXQudmFsdWUoKSAmJiBzdGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCk7CiAg
ICAgICAgICAgICAgICAgYWx0ZXJTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFz
dFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlv
bk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0
aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgJiYgZW5kUG9zaXRpb24gPCBwb3NpdGlv
bk9mZnNldCkgewogICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7
CiAgICAgICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAg
fQpAQCAtMjEyLDExICsyMTQsMTEgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5k
UG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICBpZiAo
IWFsdGVyU3RhcnRQb3NpdGlvbiAmJiAhYWx0ZXJFbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZz
ZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlv
biAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24g
PCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKLSAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CisgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAm
JiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgeworICAg
ICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRp
b25PZmZzZXQudmFsdWUoKSAmJiBzdGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpCisgICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCk7CiAKLSAg
ICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25P
ZmZzZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkK
KyAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRp
b25PZmZzZXQudmFsdWUoKSAmJiBlbmRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KQogICAgICAg
ICAgICAgZW5kUG9zaXRpb24gPSBwb3NpdGlvbk9mZnNldDsKICAgICB9CiB9CkBAIC0yODQsOCAr
Mjg2LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEq
IHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW4KIHsKICAgICBTdWJTdHJpbmdMZW5ndGhE
YXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3ViU3RyaW5nTGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7
CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnN0YXJ0UG9zaXRpb247Ci0gICAgaW50
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKKyAgICB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQ
b3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBkYXRhLT5sZW5ndGg7CiAgICAgaWYgKCFtYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQs
IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMTksOCArMzIxLDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJh
Y3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGUKIHsKICAgICBTdGFydFBv
c2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9m
Q2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRh
dGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwor
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25l
ZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzY4
LDggKzM3MCw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2Fs
bGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0CiB7CiAgICAgRW5kUG9zaXRpb25P
ZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFbmRQb3NpdGlvbk9mQ2hhcmFjdGVy
RGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0
aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3Np
dGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE2LDggKzQxOCw4
IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhCiB7CiAgICAgUm90YXRpb25PZkNoYXJhY3RlckRh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0
YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBl
bmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29y
ZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDU0LDcgKzQ1Niw3IEBAIHN0cnVjdCBFeHRl
bnRPZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXVlcnk6OkRhdGEgewogICAgIEZsb2F0UmVjdCBl
eHRlbnQ7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVz
KFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgRmxvYXRSZWN0JiBleHRlbnQpCitzdGF0aWMgaW5s
aW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVudCkKIHsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0g
cXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2Nh
bGluZ0ZhY3Rvcik7CkBAIC00ODQsOCArNDg2LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4dGVu
dE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ20K
IHsKICAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFeHRlbnRP
ZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBk
YXRhLT5wb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsK
KyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247CisgICAgdW5zaWdu
ZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKICAgICBpZiAoIW1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUx
OSw4ICs1MjEsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlv
bkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVAogCiAgICAgRmxvYXRSZWN0IGV4
dGVudDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJz
ICsgaTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsg
aTsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKICAg
ICAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1
ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVl
cnkuaAppbmRleCA3MjFiMmRmOGUzMzI0NWRhODY0MzM4NWJlNmVlMmIxZDJiMDkzOGRmLi4zODcz
MGEzOGQwNjFlODI1Y2Q5MzdkNzgxODRiOGQzYjNmYTBmYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKQEAgLTUyLDggKzUyLDggQEAgcHJpdmF0ZToK
ICAgICBib29sIGV4ZWN1dGVRdWVyeShEYXRhKiwgUHJvY2Vzc1RleHRGcmFnbWVudENhbGxiYWNr
KSBjb25zdDsKIAogICAgIHZvaWQgY29sbGVjdFRleHRCb3hlc0luRmxvd0JveChJbmxpbmVGbG93
Qm94Kik7Ci0gICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGlu
dCYgZW5kUG9zaXRpb24pIGNvbnN0OwotICAgIHZvaWQgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNS
ZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9z
aXRpb24pIGNvbnN0OworICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRD
b29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0
UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgdm9pZCBtb2RpZnlT
dGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIHVuc2lnbmVkJiBzdGFy
dFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGJvb2wgbnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285848</attachid>
            <date>2016-08-11 13:25:37 -0700</date>
            <delta_ts>2016-08-11 13:47:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160735-20160811132405.patch</filename>
            <type>text/plain</type>
            <size>136570</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ0MzAwYTQwN2UxNGYx
MTExMTY1NzIyYjY1ODk0ZDI1YjFhY2YwZC4uYmZhODA0YzhkZWYxZGYzOTkzNmFmNWYwYWFhOGVj
ZjEyNzY0ZTZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NCBAQAorMjAxNi0wOC0xMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
cmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlIHdlIHVzZSBpbnRzIHRvIHJlZmVyIHRvIGluZGljZXMg
aW50byBzdHJpbmdzOgorICAgICAgICAtIEEgc2ltcGxlIGhpc3RvcmljYWwgYWNjaWRlbnQuIFRo
ZXNlIHdlcmUgbWlncmF0ZWQgdG8gdW5zaWduZWRzIGRpcmVjdGx5LgorICAgICAgICAtIFdoZXJl
IHdlIHVzZSAtMSBhcyBhIHNlbnRpbmFsIHZhbHVlLiBUaGVzZSB3ZXJlIG1pZ3JhdGVkIHRvIE9w
dGlvbmFsPHVuc2lnbmVkPi4KKworICAgICAgICBUaGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVu
ZGVyaW5nIGNvZGUgKHJhdGhlciB0aGFuIERPTSBjb2RlKS4gVGhlcmUgYXJlIGEgZmV3CisgICAg
ICAgIHBsYWNlcyBpbiBET00gY29kZSAoc3VjaCBhcyBQb3NpdGlvbiBhbmQgTm9kZTo6bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkpIHdoaWNoIGFsc28KKyAgICAgICAgZXJyb25lb3VzbHkgdXNlIGludHM7
IGhvd2V2ZXIsIEkgZGlkbid0IHdhbnQgdGhpcyBjaGFuZ2UgdG8gYmUgb2JzZXJ2YWJsZSBmcm9t
CisgICAgICAgIHNjcmlwdCBhbmQgSSB3YW50ZWQgdG8ga2VlcCB0aGlzIHBhdGNoIHRvIGEgcmVh
c29uYWJsZSBzaXplLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5v
IGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVVbmRlcmxpbmVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHbHlw
aEJ1ZmZlcjo6Zm9udEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpnbHlwaEF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlQXQpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhCdWZmZXI6Om9mZnNldEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBo
QnVmZmVyOjpyZXZlcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRJ
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c2hyaW5rKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNN
YXJrcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXRpbjFUZXh0SXRlcmF0b3I6OkxhdGluMVRleHRJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXRpbjFUZXh0SXRlcmF0b3I6OmN1cnJlbnRDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OlN1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OmN1cnJlbnRDaGFyYWN0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlT25lQ2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNUb0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgorICAgICAgICAo
V2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6aXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2xhbXBlZE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
b2Zmc2V0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OklubGluZVRleHRC
b3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFr
Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0
aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNwbGl0U2Vs
ZWN0aW9uQmV0d2VlblN1YnRyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNs
ZWFyU3VidHJlZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjphcHBs
eVN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Z2V0U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVj
dGlvblN1YnRyZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjphZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rp
b25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25FbmRQb3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpzZWxlY3Rpb25DbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2V0U2VsZWN0aW9uU3RhcnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZXRTZWxlY3Rpb25FbmRQb3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6T2xkU2VsZWN0aW9uRGF0YTo6T2xkU2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRQYWludGVyOjpkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4
dFBhaW50ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQYWludGVyOjphZGRFbXBoYXNpcyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVu
ZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmg6CisKIDIwMTYt
MDgtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgVVJMUGFyc2VyIHN0dWIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggMzM4MzRhZDA5NmU4MTgyMjUxNmU3ODEzYjJiODBkYzliYjI2ZTJkNC4u
ZTVkN2JmOWM0OGFkYTM4OGJhNjMyODUwODcxMGU0NThlMjA3N2I4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIwODgsOCArMjA4OCwxMSBAQCB2b2lk
IEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICAvLyBiZWNhdXNlIHdlIGRv
bid0IHlldCBub3RpZnkgdGhlIEZyYW1lU2VsZWN0aW9uIG9mIHRleHQgcmVtb3ZhbC4KICAgICBp
ZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgZW5kUG9zLmlzTm90TnVsbCgpICYmIHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSAhPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB7CiAgICAgICAgIFJl
bmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CisgICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzdGFydFBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5k
UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIHZpZXctPnNldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
bmRSZW5kZXJlciwgZW5kUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBh
dXRvIGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAg
ICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZp
ZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIs
IGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBAIC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkp
CiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgpID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBs
YXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJv
bm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAobV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2NiYzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQw
ODQwNmMwLi5iMjBiNzE3MjRiNDRlZjg0MTBmM2Q2YjIyNTFhNjVhYTMzZWE2MTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3Qg
U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAg
IFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlcjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRl
cmVyOwotICAgIGludCBzdGFydE9mZnNldDsKLSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zm
c2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwx
MCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFjawogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rp
b25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8gU25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQg
OiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5k
ZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7Cisg
ICAgYXV0byBzdGFydE9mZnNldCA9IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Cisg
ICAgYXV0byBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBB
U1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CisgICAgdmlldy0+c2V0
U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRSZW5kZXJlciwgZW5kT2Zm
c2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CiAgICAgLy8gV2UgY2FwdHVyZSB1c2lu
ZyBzbmFwc2hvdEZyYW1lUmVjdCgpIGJlY2F1c2Ugd2UgZmFrZSB1cCB0aGUgc2VsZWN0aW9uIHVz
aW5nCiAgICAgLy8gRnJhbWVWaWV3IGJ1dCBzbmFwc2hvdFNlbGVjdGlvbigpIHVzZXMgdGhlIHNl
bGVjdGlvbiBmcm9tIHRoZSBGcmFtZSBpdHNlbGYuCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFn
ZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9uQm91
bmRzKCksIG9wdGlvbnMpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MzgwYjVjMDg1MzJlODIxYWNhYTM0ZWYy
Y2Q3OGI1MTE2NmE1YmI5Li4zODY2OTkxZjA4OGRiMTU5ZDUwY2QzN2JhMmEzMWNiY2I0OTEwY2E0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUoUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpIGNvbnN0CiAgICAgbV9yZXF1aXJlc1NoYXBp
bmcgPSBjb21wdXRlUmVxdWlyZXNTaGFwaW5nKCk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpn
bHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBhdGggY29kZVBhdGhUb1VzZSwgY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpIGNvbnN0
CitmbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8s
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikgY29uc3QKIHsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSAhPSBDb21wbGV4KQogICAgICAgICByZXR1cm4gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1w
bGVUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKICAgICByZXR1cm4gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7CiB9
CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25l
ZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0CiB7CiAgICAgLy8gRG9uJ3QgZHJhdyBhbnl0
aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9j
ZXNzIG9mIGxvYWRpbmcsCiAgICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlz
IHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKQEAgLTMw
OSwxNSArMzA5LDE1IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICBpZiAoaXNMb2FkaW5n
Q3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHRvID0gKHRvID09IC0xID8g
cnVuLmxlbmd0aCgpIDogdG8pOworICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVP
cihydW4ubGVuZ3RoKCkpOwogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRo
KHJ1bik7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5k
bGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93
ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiAo
ZW5hYmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpKSAmJiAoZnJvbSB8fCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkpCisgICAgaWYgKGNvZGVQYXRoVG9V
c2UgIT0gQ29tcGxleCAmJiAoZW5hYmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpKSAm
JiAoZnJvbSB8fCBkZXN0aW5hdGlvbiAhPSBydW4ubGVuZ3RoKCkpKQogICAgICAgICBjb2RlUGF0
aFRvVXNlID0gQ29tcGxleDsKIAogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGZs
b2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdseXBoQnVmZmVyRm9yVGV4dFJ1bihjb2RlUGF0aFRv
VXNlLCBydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7CisgICAgZmxvYXQgc3RhcnRYID0gcG9p
bnQueCgpICsgZ2x5cGhCdWZmZXJGb3JUZXh0UnVuKGNvZGVQYXRoVG9Vc2UsIHJ1biwgZnJvbSwg
ZGVzdGluYXRpb24sIGdseXBoQnVmZmVyKTsKICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBh
bnkgZ2x5cGhzIGZvciB0aGUgcnVuLiBHaXZlIHVwLgogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzI3LDIzICszMjcsMjIgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdAogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAot
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKSBjb25zdAogewogICAg
IGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
dG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRo
VG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBw
YXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVy
ZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aFRvVXNl
ICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYg
KGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpKQorICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1
aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVuLmxlbmd0aCgpKSkK
ICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoY29u
dGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgZGVzdGlu
YXRpb24pOwogICAgIGVsc2UKLSAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgICAgIGRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwg
ZGVzdGluYXRpb24pOwogfQogCiBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdykgY29uc3QKQEAgLTQ5MSwxOSArNDkwLDE5IEBAIGJvb2wgRm9udENh
c2NhZGU6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25z
dAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykgY29uc3QKIHsK
LSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKyAgICB1bnNpZ25lZCBk
ZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQYXRoIGNv
ZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3Qg
Y29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBs
aWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0
aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmco
KSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkp
KQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8
fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVuLmxlbmd0
aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBpZiAoY29kZVBh
dGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CisgICAgICAgIHJldHVy
biBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZy
b20sIGRlc3RpbmF0aW9uKTsKIAotICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CisgICAgcmV0dXJuIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIGRl
c3RpbmF0aW9uKTsKIH0KIAogaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbihjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
CkBAIC0xMTIzLDcgKzExMjIsNyBAQCBib29sIEZvbnRDYXNjYWRlOjppc0xvYWRpbmdDdXN0b21G
b250cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9udHMgJiYgbV9mb250cy0+aXNMb2FkaW5nQ3Vz
dG9tRm9udHMoKTsKIH0KICAgICAKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxp
bmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQorR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1
biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBpbmRl
eCkKIHsKICAgICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93
ZXZlciwgc2tpcHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRl
c2lyYWJsZSByZW5kZXJpbmdzLAogICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENK
SyBjaGFyYWN0ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgpAQCAtMTIz
OCw3ICsxMjM3LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0
RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CiAKQEAgLTEyNjgs
NyArMTI2Nyw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNp
bXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvCiAgICAgcmV0dXJuIGluaXRpYWxB
ZHZhbmNlOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBs
ZVRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBs
ZVRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwog
ICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVU
ZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTI4
Nyw4ICsxMjg2LDggQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcKICAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5j
ZSgpLmhlaWdodCgpKTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhC
dWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50
LnkoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQoKTsKLSAgICBpbnQgbGFzdEZy
b20gPSAwOwotICAgIGludCBuZXh0R2x5cGggPSAxOworICAgIHVuc2lnbmVkIGxhc3RGcm9tID0g
MDsKKyAgICB1bnNpZ25lZCBuZXh0R2x5cGggPSAxOwogICAgIHdoaWxlIChuZXh0R2x5cGggPCBn
bHlwaEJ1ZmZlci5zaXplKCkpIHsKICAgICAgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0g
Z2x5cGhCdWZmZXIuZm9udEF0KG5leHRHbHlwaCk7CiAgICAgICAgIEZsb2F0U2l6ZSBuZXh0T2Zm
c2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQobmV4dEdseXBoKTsKQEAgLTEzMjEsNyArMTMyMCw3
IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IEZvbnQq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKICAgICByZXR1cm4gZm9udERhdGEtPndpZHRoRm9yR2x5
cGgoZ2x5cGgpIC8gMjsKIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9m
R2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCitp
bmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBpKQogewogICAgIHJldHVybiBvZmZzZXRU
b01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udEF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0
KGkpKTsKIH0KQEAgLTEzNDQsNyArMTM0Myw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImCiAg
ICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0g
b2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgp
KTsKIAogICAgIEdseXBoQnVmZmVyIG1hcmtCdWZmZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
KyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGZsb2F0IG1pZGRs
ZU9mTmV4dEdseXBoID0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwg
aSArIDEpOwogICAgICAgICBmbG9hdCBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkp
LndpZHRoKCkgLSBtaWRkbGVPZkxhc3RHbHlwaCArIG1pZGRsZU9mTmV4dEdseXBoOwogICAgICAg
ICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpID8gbWFya0dseXBoIDogc3Bh
Y2VHbHlwaCwgbWFya0ZvbnREYXRhLCBhZHZhbmNlKTsKQEAgLTEzNzEsNyArMTM3MCw3IEBAIGZs
b2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9uCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCBjNmQwYzI1OThlZDE2MzFi
ZTYxNmU3ZDc4YmQzMjY1MGM2NmNjMWRhLi44YmRjY2E4MDcyMmUyNTk5YjgxNDUxNmYyODZjMGI0
MTQxNmQ4ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2UoKSA9IDA7CiAgICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkgeyB9CiB9
OwotR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVy
bGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGluZGV4KTsK
K0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxp
bmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGluZGV4
KTsKIAogY2xhc3MgVGV4dExheW91dERlbGV0ZXIgewogcHVibGljOgpAQCAtMTMzLDkgKzEzMyw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKSBjb25z
dDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9u
dE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHN0YXRpYyB2
b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
ID0gTnVsbG9wdCwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gTnVsbG9wdCkgY29uc3Q7CiAKICAgICBE
YXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRz
KSBjb25zdDsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQg
d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxj
b25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20gPSAwLCBP
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0KSBjb25zdDsKIAogICAgIGJvb2wgaXNTbWFs
bENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi52YXJpYW50Q2FwcygpID09
IEZvbnRWYXJpYW50Q2Fwczo6U21hbGw7IH0KIApAQCAtMjE4LDE1ICsyMTgsMTUgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBlbnVtIEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVt
cGhhc2lzLCBGb3JUZXh0RW1waGFzaXMgfTsKIAotICAgIGZsb2F0IGdseXBoQnVmZmVyRm9yVGV4
dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJikgY29uc3Q7CisgICAgZmxvYXQgZ2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRoLCBj
b25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJikg
Y29uc3Q7CiAgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAg
ICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYs
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBO
b3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
KyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBo
YXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxv
YXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCiAgICAg
T3B0aW9uYWw8R2x5cGhEYXRhPiBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7CiAKQEAgLTIzNCwxMSArMjM0LDExIEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGJvb2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKIAogICAg
IC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20s
IGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRF
bXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9h
dCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5v
dCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bykgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBo
T3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciosIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKICAgICBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25C
ZWhhdmlvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZm
ZXIuaAppbmRleCBjODJhZjM5MDg0NGY1ZDI3ZTJlNjA0NzlkOWJkN2ViNDkxZDA3OWRiLi41NjM1
NDBjMGU3NDM5ZTI0NDg2NDEzZTA2Yjk0NzhiMWM3OGNjZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgdHlw
ZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogY2xhc3MgR2x5cGhCdWZmZXIgewog
cHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pc0VtcHR5
KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5zaXplKCk7IH0KKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnNpemUoKTsgfQogICAgIAog
ICAgIHZvaWQgY2xlYXIoKQogICAgIHsKQEAgLTkxLDEyICs5MSwxMiBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICB9CiAKLSAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIHsgcmV0
dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzKGludCBmcm9tKSB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KLSAg
ICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJu
IG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZy
b207IH0KKyAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHModW5zaWduZWQgZnJvbSkgeyByZXR1
cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQorICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXModW5zaWduZWQgZnJvbSkgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9
CisgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKHVuc2lnbmVkIGZyb20pIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KKyAgICBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fYWR2YW5j
ZXMuZGF0YSgpICsgZnJvbTsgfQogCi0gICAgY29uc3QgRm9udCogZm9udEF0KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQorICAgIGNvbnN0IEZvbnQqIGZvbnRBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQogCiAgICAgdm9p
ZCBzZXRJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UgaW5pdGlhbEFkdmFuY2UpIHsg
bV9pbml0aWFsQWR2YW5jZSA9IGluaXRpYWxBZHZhbmNlOyB9CiAgICAgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlJiBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbEFkdmFu
Y2U7IH0KQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMZWFkaW5nRXhw
YW5zaW9uKGZsb2F0IGxlYWRpbmdFeHBhbnNpb24pIHsgbV9sZWFkaW5nRXhwYW5zaW9uID0gbGVh
ZGluZ0V4cGFuc2lvbjsgfQogICAgIGZsb2F0IGxlYWRpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2xlYWRpbmdFeHBhbnNpb247IH0KICAgICAKLSAgICBHbHlwaCBnbHlwaEF0KGludCBp
bmRleCkgY29uc3QKKyAgICBHbHlwaCBnbHlwaEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAg
IHsKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF0uaW5kZXg7
CkBAIC0xMTMsMTIgKzExMywxMiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgYWR2YW5jZUF0KGludCBpbmRleCkgY29uc3QKKyAgICBHbHlwaEJ1ZmZl
ckFkdmFuY2UgYWR2YW5jZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBvZmZzZXRB
dChpbnQgaW5kZXgpIGNvbnN0CisgICAgRmxvYXRTaXplIG9mZnNldEF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAogICAgIHsKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIHJldHVybiBtX29mZnNl
dHNbaW5kZXhdOwpAQCAtMTgwLDkgKzE4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAot
ICAgIHZvaWQgcmV2ZXJzZShpbnQgZnJvbSwgaW50IGxlbmd0aCkKKyAgICB2b2lkIHJldmVyc2Uo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IGZyb20sIGVuZCA9IGZyb20gKyBsZW5ndGggLSAxOyBpIDwgZW5kOyArK2ksIC0tZW5kKQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3RoIC0gMTsg
aSA8IGVuZDsgKytpLCAtLWVuZCkKICAgICAgICAgICAgIHN3YXAoaSwgZW5kKTsKICAgICB9CiAK
QEAgLTE5OCwxNCArMTk4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9vZmZzZXRzSW5TdHJpbmcu
cmVzZXQobmV3IFZlY3Rvcjx1bnNpZ25lZCwgMjA0OD4oKSk7CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IFRoaXMgY29udmVydHMgZnJvbSBhbiB1bnNpZ25lZCB0byBhbiBpbnQKLSAgICBpbnQgb2Zm
c2V0SW5TdHJpbmcoaW50IGluZGV4KSBjb25zdAorICAgIGludCBvZmZzZXRJblN0cmluZyh1bnNp
Z25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29mZnNldHNJblN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiAoKm1fb2Zmc2V0c0luU3RyaW5nKVtpbmRleF07CiAgICAgfQog
Ci0gICAgdm9pZCBzaHJpbmsoaW50IHRydW5jYXRpb25Qb2ludCkKKyAgICB2b2lkIHNocmluayh1
bnNpZ25lZCB0cnVuY2F0aW9uUG9pbnQpCiAgICAgewogICAgICAgICBtX2ZvbnQuc2hyaW5rKHRy
dW5jYXRpb25Qb2ludCk7CiAgICAgICAgIG1fZ2x5cGhzLnNocmluayh0cnVuY2F0aW9uUG9pbnQp
OwpAQCAtMjE4LDcgKzIxNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBzd2FwKGludCBpbmRleDEsIGludCBpbmRleDIpCisgICAgdm9pZCBzd2FwKHVuc2lnbmVkIGlu
ZGV4MSwgdW5zaWduZWQgaW5kZXgyKQogICAgIHsKICAgICAgICAgY29uc3QgRm9udCogZiA9IG1f
Zm9udFtpbmRleDFdOwogICAgICAgICBtX2ZvbnRbaW5kZXgxXSA9IG1fZm9udFtpbmRleDJdOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggYWYxOTEyMjcwMzRlYWMxNjBiZTNmYjJhMDZmNmQ0ZGUzYmZmMjdlZS4uZWRm
NjA1MzhiODkzMGJlMGI4OTc5OTlhNWU0MzEwYzc1MGE0NzcyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC02MzYs
NyArNjM2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
ICAgICAtLW1fdHJhbnNwYXJlbmN5Q291bnQ7CiB9CiAKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCitmbG9hdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNp
Z25lZD4gdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC02NDUsNyArNjQ1LDcgQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb24KICAgICByZXR1
cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2Nh
ZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02NTgsNyArNjU4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNj
YWRlLCBjb25zdCBGb250JiBmb24KICAgICBmb250Q2FzY2FkZS5kcmF3R2x5cGhzKCp0aGlzLCBm
b250LCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQsIGZvbnRDYXNjYWRlLmZvbnREZXNj
cmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9w
dGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDM4OTM0MDY2NDkzNDg5NDY0MGMzMzZkYmIyMmVlMThmYTZi
MmE1YWYuLmE2ZTZmYjAzYzJiZGIwMDdmMWE2YjgwMTYwOTdjZGY2YjM4NzhiNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC0zODEsOSArMzgxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRl
eHREcmF3aW5nTW9kZUZsYWdzKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2lu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQogCi0gICAg
ZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwotICAgIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdm9pZCBk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKTsKKyAgICBmbG9hdCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IE51bGxvcHQpOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQpOwogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSk7CiAKICAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0xhdGluMVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKaW5kZXggYzQwMTg5YmZlOTMzMmEwZGViNDA2NDNjMTRk
MWUyODA3N2RhZDM4OS4uNmI3ZTU5OWQwMDIzZjk4YjMyNjA2ODIwOWY5YzYwMjcyNzdlZGJhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4
dEl0ZXJhdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgTGF0aW4xVGV4dEl0ZXJhdG9yIHsK
IHB1YmxpYzoKICAgICAvLyBUaGUgcGFzc2VkIGluIExDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdj
dXJyZW50Q2hhcmFjdGVyJy4gVGhlIGl0ZXJhdG9yIG9wZXJhdGVzIG9uIHRoZSByYW5nZSBbY3Vy
cmVudENoYXJhY3RlciwgbGFzdENoYXJhY3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVu
b3RlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBl
eGNlZWQgJ2xhc3RDaGFyYWN0ZXInLgotICAgIExhdGluMVRleHRJdGVyYXRvcihjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBp
bnQgLyplbmRDaGFyYWN0ZXIqLykKKyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFy
YWN0ZXIsIHVuc2lnbmVkIC8qZW5kQ2hhcmFjdGVyKi8pCiAgICAgICAgIDogbV9jaGFyYWN0ZXJz
KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0
ZXIpCiAgICAgICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFyYWN0ZXIpCkBAIC01MywxMyAr
NTMsMTMgQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxl
bmd0aDsKICAgICB9CiAKLSAgICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudENoYXJhY3RlcjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0KICAgICBjb25zdCBMQ2hhciogY2hh
cmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgogICAg
IGNvbnN0IExDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsK
LSAgICBpbnQgbV9sYXN0Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3Rl
cjsKKyAgICB1bnNpZ25lZCBtX2xhc3RDaGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA5MTU1ZTcxMWE4ZGE4MGQ0ZWIzZGNmNWRhNWFj
MzA1YTI4Y2JlYTc5Li5jZTcwNGJlM2YyMzYwM2M4MmY4OGQxMTVjZGQ2YmVjMGY1NDE2N2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6
OlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVy
KQorU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0
SXRlcmF0b3IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0
ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIGVuZENoYXJhY3RlcikKICAgICA6
IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJl
bnRDaGFyYWN0ZXIpCiAgICAgLCBtX2xhc3RDaGFyYWN0ZXIobGFzdENoYXJhY3RlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKaW5kZXggODVjOTY5NGM3NmEyMmNkZWFlZWIzYmE4
NDFiMTBhMGE1MDMxNjgxMy4uMWE3MTVjMGNhMmQyNDgzYjI0NzI5OTc1ZWI3NWM5ZmEyMjM2ZWQ0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRl
UGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAg
Y2xhc3MgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICAvLyBU
aGUgcGFzc2VkIGluIFVDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50Q2hhcmFjdGVyJy4g
VGhlIGl0ZXJhdG9yIG9wZXJhdG9lcyBvbiB0aGUgcmFuZ2UgW2N1cnJlbnRDaGFyYWN0ZXIsIGxh
c3RDaGFyYWN0ZXJdLgogICAgIC8vICdlbmRDaGFyYWN0ZXInIGRlbm90ZXMgdGhlIG1heGltdW0g
bGVuZ3RoIG9mIHRoZSBVQ2hhciBhcnJheSwgd2hpY2ggbWlnaHQgZXhjZWVkICdsYXN0Q2hhcmFj
dGVyJy4KLSAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqLCBp
bnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCBlbmRDaGFyYWN0ZXIp
OworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIGVu
ZENoYXJhY3Rlcik7CiAKICAgICBpbmxpbmUgYm9vbCBjb25zdW1lKFVDaGFyMzImIGNoYXJhY3Rl
ciwgdW5zaWduZWQmIGNsdXN0ZXJMZW5ndGgpCiAgICAgewpAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fY3VycmVudENoYXJhY3RlciArPSBhZHZhbmNlTGVuZ3RoOwogICAgIH0K
IAotICAgIGludCBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q2hh
cmFjdGVyOyB9CisgICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudENoYXJhY3RlcjsgfQogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAKIHByaXZhdGU6CkBAIC02MCw5ICs2MCw5IEBA
IHByaXZhdGU6CiAgICAgVUNoYXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoKTsKIAogICAgIGNv
bnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAg
ICBpbnQgbV9sYXN0Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZENoYXJhY3RlcjsKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9sYXN0Q2hhcmFjdGVyOwor
ICAgIHVuc2lnbmVkIG1fZW5kQ2hhcmFjdGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCAwYjlhNzQwMmFm
YjYxMzYwNjA1OGVkOTgzMTRhNmIxZGNiOTA1NmI0Li44MGVlNDIyNzBlMmU0YzIzOTBhMjk2NDBj
MmE0NGI0YWVjMDQ2ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNTb2Z0QmFua0Vtb2ppKFVDaGFyMzIgY29kZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9p
bnQgPj0gMHhFMDAxICYmIGNvZGVwb2ludCA8PSAweEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdp
ZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyLCBpbnQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitpbmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9yOjpz
aG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwg
dW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0
IC0+IFRyYW5zZm9ybXNUeXBlCiB7CiAgICAgaWYgKGdseXBoQnVmZmVyICYmIGdseXBoQnVmZmVy
LT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsgMSkgJiYgaXNTb2Z0QmFua0Vtb2ppKHByZXZp
b3VzQ2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQ7CkBA
IC05MCwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8gV2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlG
b250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWYKICAgICByZXR1cm4gVHJh
bnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0KIAotaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6
OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwg
aW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0No
YXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UpCitpbmxpbmUgZmxvYXQgV2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJh
bnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFz
dEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIs
IGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRB
c1NwYWNlKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNDaGFyYWN0ZXIsIHNob3VsZEFw
cGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBwcmV2aW91c0No
YXJhY3RlcikgIT0gV2lkdGhJdGVyYXRvcjo6VHJhbnNmb3Jtc1R5cGU6Ok5vbmUpOwogCiAgICAg
aWYgKCFnbHlwaEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgZ2x5cGhCdWZm
ZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKKyAgICB1bnNpZ25lZCBnbHlwaEJ1ZmZlclNp
emUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOwogICAgIGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJT
aXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewogICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDUsOSArMTA1LDEwIEBAIGlu
bGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
ID0gZ2x5cGhCdWZmZXItPmFkdmFuY2VzKDApOwogICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9
IDA7Ci0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXpl
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1
ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhEaWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndp
ZHRoKCk7CiAKKyAgICBBU1NFUlQoZ2x5cGhCdWZmZXJTaXplID49IGxhc3RHbHlwaENvdW50KTsK
ICAgICBpZiAoIWx0cikKICAgICAgICAgZ2x5cGhCdWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291
bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIApAQCAtMTI1LDcgKzEyNiw3
IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAgICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZS5jbGVhcigpOwogCi0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwg
Z2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291
bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhEaWZmZXJlbmNlICs9
IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVy
U2l6ZTsKQEAgLTE4MSw3ICsxODIsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAg
Y29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBtX2ZvbnQtPnByaW1hcnlGb250KCk7CiAgICAgY29u
c3QgRm9udCogbGFzdEZvbnREYXRhID0gJnByaW1hcnlGb250OwotICAgIGludCBsYXN0R2x5cGhD
b3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZmZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWdu
ZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAw
OwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFy
YWN0ZXIgPSAwOwpAQCAtMzU2LDE0ICszNTcsMTQgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgK
ICAgICByZXR1cm4gY29uc3VtZWRDaGFyYWN0ZXJzOwogfQogCi11bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKGludCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3Vuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOwogCiAgICAgaWYgKG9mZnNldCA+IGxlbmd0
aCkKICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOwogCi0gICAgaWYgKG1fY3VycmVudENoYXJhY3Rl
ciA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSkKKyAgICBpZiAobV9jdXJyZW50Q2hh
cmFjdGVyID49IG9mZnNldCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAobV9ydW4uaXM4
Qml0KCkpIHsKQEAgLTM3NywxMCArMzc4LDEwIEBAIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogCiBib29sIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7Cisg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKICAgICBhZHZhbmNlKG1f
Y3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7Ci0g
ICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kp
CiAgICAgICAgIHcgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndpZHRoKCk7CiAgICAgd2lk
dGggPSB3OwogICAgIHJldHVybiBnbHlwaEJ1ZmZlci5zaXplKCkgPiBvbGRTaXplOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IDY4
ZmUzZjNmNWJiM2Y5NzkyODkyNzUyNTg2MDY4NjFlNWNlOTI4NjMuLmM0NWZkYjhjMzZhM2ZlMmYz
ZWY4NmM4OTU5ZWY1NTE2YTM5MDEyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IFdpZHRo
SXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
LCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNp
cyA9IGZhbHNlKTsKIAotICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciop
OworICAgIHVuc2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKik7CiAgICAg
Ym9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAog
ICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50
Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNzAs
OCArNzAsOCBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBhZHZhbmNlSW50ZXJuYWwo
VGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKIAogICAgIGVudW0gY2xhc3MgVHJhbnNmb3Jt
c1R5cGUgeyBOb25lLCBGb3JjZWQsIE5vdEZvcmNlZCB9OwotICAgIFRyYW5zZm9ybXNUeXBlIHNo
b3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqLCBpbnQgbGFzdEdseXBo
Q291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0OwotICAgIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3Vu
dCwgY29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENo
YXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYpOworICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5
Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3Vu
dCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7CisgICAgZmxvYXQgYXBwbHlGb250
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291
bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBD
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsKIAogICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBt
X2ZhbGxiYWNrRm9udHMgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX2FjY291bnRGb3JHbHlwaEJv
dW5kcyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBlODk1ZjE3NTk2NjI5NDA5OWQ5YmYwYWRlMjZm
MTI0NDgzOTcxYjM2Li45ZTMwODAxNTg1MjgzOWNkNDI4NmE2YWM0NTQyMDAyY2IzOGVjNWM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykKK3N0YXRpYyB2
b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwpAQCAtNjYsNyArNjYsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZv
bnQmIGZvbnQsIEdseXBoQnVmZmVyRwogICAgICAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQs
ICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3co
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlw
aHMpCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBudW1HbHlwaHMpCiB7CiAgICAgU2hhZG93
Qmx1ciYgc2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5zaGFkb3dC
bHVyKCk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKIH0KIAog
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKQorICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKQogewogICAgIGlmICghZm9udC5wbGF0
Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNv
bnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CiAK
ICAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
IGkrKykgewogICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNldDsKICAgICAgICAgZ2x5cGhzW2ld
LnkgPSBwb2ludC55KCk7CiAgICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
ZnJvbSArIGkpLndpZHRoKCk7CkBAIC0yMjksNyArMjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YWR2YW5jZSgpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIGludCBtX2luZGV4OworICAgIHVuc2ln
bmVkIG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVuOwogICAgIGNvbnN0IEds
eXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwogICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4IDIxNmQ5MTFkZTNhMDdmYzdmNDRmOTVjYjBk
NDVhYjg2NGU2ZGZjNjcuLjA4YmFlMzgwODQ4ODQ1NGFkNzM4NjcyYzNlMjg4NDVjODRiZmQwMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyb0hhcmZidXp6TkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQsIGludCwgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8p
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkLCB1bnNpZ25lZCwgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8p
IGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYg
KCFzaGFwZXIuc2hhcGUoJmdseXBoQnVmZmVyKSkgewpAQCAtNTIsNyArNTIsNyBAQCBmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGludCwgaQogICAgIHJldHVybiAwOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgLyogY29udGV4
dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1h
cmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50
IC8qIHRvICovKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgdW5zaWduZWQgLyogZnJvbSAqLywgdW5zaWduZWQgLyogdG8gKi8p
IGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTg1LDcgKzg1LDcgQEAgaW50
IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgZmxvYXQgeCwgYm8KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2FzY2Fk
ZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
TGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQg
Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwog
ICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggN2Y1NjRi
MDUyZDVmNTE3NDA5OGVjMGQ0NTBkZjdhOTJhMjI1Y2UxMi4uOWMxZjFkYWY3Yjk2OTBhZjdmNDMz
YmFhZmI0ODIwYjkxOTJkNDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC03MCwxMSArNzAs
MTEgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxl
eFRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbFZl
Y3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBv
c2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNp
emVfdCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCiB7CiAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CiAgICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgQ0dTaXplIGFkdmFu
Y2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7
CiAgICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53
aWR0aDsKICAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZh
bmNlLmhlaWdodDsKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFVz
ZUxldHRlcnByZXNzRWZmZWN0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICNlbmRp
ZgogfQogCi1zdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6
ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5j
ZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHVuc2lnbmVkIGNvdW50KQogewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNv
dW50KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2
b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMs
IGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQogewogICAgIGlmICghY291bnQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDRwog
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUlu
dmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKIAogICAgICAgICBDR1BvaW50
IHBvc2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1l
dHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJp
Y3MoKS5mbG9hdEFzY2VudCgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5z
Zm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwogICAgICAgICAgICAg
cG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBv
c2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhl
aWdodCksIHRyYW5zZm9ybSk7CiAgICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ld
LndpZHRoOwpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmlu
Z01vZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIENHQ29udGV4dFNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOwog
fQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQu
cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDM0LDcg
KzQzNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2UoKSBmaW5hbDsKIAogcHJpdmF0ZToK
LSAgICBpbnQgbV9pbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRS
dW4mIG1fdGV4dFJ1bjsKICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKICAg
ICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIERhc2hBcnJheSBG
b250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0UG9pbnQodGV4dE9yaWdp
bi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKICAgICBNYWNHbHlwaFRvUGF0aFRyYW5z
bGF0b3IgdHJhbnNsYXRvcihydW4sIGdseXBoQnVmZmVyLCBvcmlnaW4pOwogICAgIERhc2hBcnJh
eSByZXN1bHQ7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyB0cmFuc2xhdG9yLmNvbnRhaW5zTW9y
ZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3IuYWR2YW5jZSgpKSB7CisgICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IHRyYW5zbGF0b3IuY29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgR2x5cGhJdGVyYXRpb25TdGF0ZSBpbmZv
ID0gR2x5cGhJdGVyYXRpb25TdGF0ZShDR1BvaW50TWFrZSgwLCAwKSwgQ0dQb2ludE1ha2UoMCwg
MCksIGxpbmVFeHRlbnRzLnkoKSwgbGluZUV4dGVudHMueSgpICsgbGluZUV4dGVudHMuaGVpZ2h0
KCksIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRzLndpZHRoKCksIGxpbmVFeHRlbnRzLngo
KSk7CiAgICAgICAgIGNvbnN0IEZvbnQqIGxvY2FsRm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChp
bmRleCk7CiAgICAgICAgIGlmICghbG9jYWxGb250KSB7CkBAIC01MjcsNyArNTI3LDcgQEAgYm9v
bCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25zdAogICAgIHJldHVy
biBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3IoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiB9CiAK
LXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7
CkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICBzZWxlY3Rp
b25SZWN0LnNldFdpZHRoKExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJl
Zm9yZVdpZHRoKSk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFz
aXMpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBo
YXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNTY1LDcgKzU2
NSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNl
OwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDBiZjE0YmVmNzliZDNhYjJmYjcz
ZjZjNzUwODA3MjZkYTQ0MWUzMWQuLmEyMjQyOTg4YzA2MDM2MzhhOTY0M2JlOTcwMmY2MzZlYTM1
NjQ2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEw
MCw3ICsxMDAsNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpCiAgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOwog
fQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2
b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgRmxvYXRQb2ludCgpLCB0
b0Zsb2F0U2l6ZShzdGFydFBvaW50KSwgc21vb3RoaW5nTW9kZSkpKTsKICAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5k
ZXggZWI5OWEzZGRhMDBkMzE3MGNmYzhmMDg2YTQwMjljYmJjZTFjZDNhNC4uNTJlYTEwNmVkYTg0
ZWFlMGZmZTlhYzVmNzQwMGYxZTkwYzU5NTAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGx5Rmls
bFBhdHRlcm4oKTsKICNlbmRpZgogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSk7CiAKICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOwogICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCA1MjU3MGVjZTM4ZWUzOGI3NDBk
OGRmN2VjN2JhM2E0YTA1MTc3MWQzLi5jOTI1MzQ5YTE2M2ZmNWYyYTk1NmM1MjAxOThiNTMyZjk3
NmIxNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC02NDAsNyArNjQwLDcgQEAgaW50
IEhhcmZCdXp6U2hhcGVyOjpvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKQogICAgIHJl
dHVybiBjaGFyYWN0ZXJzU29GYXI7CiB9CiAKLUZsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2Vs
ZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20s
IGludCB0bykKK0Zsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
CiB7CiAgICAgZmxvYXQgY3VycmVudFggPSAwOwogICAgIGZsb2F0IGZyb21YID0gMDsKQEAgLTY1
NCwxNyArNjU0LDIxIEBAIEZsb2F0UmVjdCBIYXJmQnV6elNoYXBlcjo6c2VsZWN0aW9uUmVjdChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50CiAgICAgICAgIGlmIChtX3J1
bi5ydGwoKSkKICAgICAgICAgICAgIGN1cnJlbnRYIC09IG1faGFyZkJ1enpSdW5zW2ldLT53aWR0
aCgpOwogICAgICAgICBpbnQgbnVtQ2hhcmFjdGVycyA9IG1faGFyZkJ1enpSdW5zW2ldLT5udW1D
aGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmICghZm91bmRGcm9tWCAmJiBmcm9tID49IDAgJiYgZnJv
bSA8IG51bUNoYXJhY3RlcnMpIHsKKyAgICAgICAgaWYgKCFmb3VuZEZyb21YICYmIGZyb20gPCBu
dW1DaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICBmcm9tWCA9IG1faGFyZkJ1enpSdW5zW2ldLT54
UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKICAgICAgICAgICAgIGZvdW5kRnJv
bVggPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEFTU0VSVChmcm9tID49IG51bUNoYXJhY3RlcnMpOwogICAgICAgICAgICAgZnJvbSAtPSBudW1D
aGFyYWN0ZXJzOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmb3VuZFRvWCAmJiB0byA+PSAw
ICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICBpZiAoIWZvdW5kVG9YICYmIHRvIDwg
bnVtQ2hhcmFjdGVycykgewogICAgICAgICAgICAgdG9YID0gbV9oYXJmQnV6elJ1bnNbaV0tPnhQ
b3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKICAgICAgICAgICAgIGZvdW5kVG9YID0g
dHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQodG8gPj0gbnVtQ2hhcmFjdGVycyk7CiAgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJz
OworICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kRnJvbVggJiYgZm91bmRUb1gpCiAgICAg
ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCmluZGV4IGJmNzZmMzE3ZTk4MWI1ZGY2
Y2RjYTg1NGIwNDU5YTllYWQwYWRiOWEuLjAyMTI5ZTE2NDY3MzUzYmM2NDlhMTQwYzZhYmQwMWU2
MzQyNTQ4OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2hhcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiAgICAgRmxvYXRQb2ludCBhZGp1c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKTsKICAg
ICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRoOyB9CiAgICAgaW50IG9m
ZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKTsKKyAg
ICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogCiBwcml2YXRlOgogICAgIGNsYXNzIEhhcmZC
dXp6UnVuIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAppbmRleCBhZTk2YWQxNzkxYTkwNzFkZWM5
NzYzNjk4ZWIwOGY3MGMwMWMxZjI0Li43ZGY0ZWZmZjMyYTRiNTA0OGQwNjI0YjAxOTBjNGNkNGVj
NWMzYWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1Ymxp
YzoKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
ID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNw
ZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1
ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisgICAgdm9pZCBhZHZhbmNl
KHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxl
ID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzID0gbnVsbHB0cik7CiAKICAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZv
ciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGI1YmZmMjcxZjIzMTg3OTVl
MmYxMTEyZmI1ODRmNmIwMjNlYzg0ZTMuLmU4ZDczM2E0NDRmYzU2ZTcyNjY2MWQ2YzViMmJkZGE2
MDYzZTdjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBjcmVh
dGVQYXRoRm9yR2x5cGgoSERDIGhkYywgR2x5cGggZ2x5cGgpCiB9CiAKIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
IHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91
bGRVc2VGb250U21vb3RoaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKaW5kZXggMjM5NmE0ZGVlM2RlZTE1MGU3MzY5ZjdlMTZhNDBk
NTAwZjllYzllYi4uNjlmYzljZDI1MGZmMDY3NjJkY2EzNDViYmMwYjY5YWViNmRkMDE1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApA
QCAtNTAsNyArNTAsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4p
OwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMp
IGNvbnN0CiB7CiAgICAgaWYgKGZvclRleHRFbXBoYXNpcykgewogICAgICAgICAvLyBGSVhNRTog
QWRkIGZvclRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQg
dXNlIGl0LgpAQCAtOTEsNyArOTEsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcgogICAgIHJl
dHVybiBiZWZvcmVXaWR0aDsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDIwOTM4
YjFmNzQ0NzdhYWQ2MGM3YjEwNGRjZjIwOWQ3ZmE0ZGZkMjYuLjQ1ZmRkN2YzMmJjYWVkZDJjNGNk
ZGNmNTljYmJmYWE5ZTM5MzYyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3Qg
dGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdCh4KCkgKyBwYWludE9mZnNldC54KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHJv
b3RCb3guc2VsZWN0aW9uVG9wKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOwogICAg
IFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxl
LCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RG
b3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgMCwgLTEpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0KTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0
LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwg
Yyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRl
eCBmMzJhMGIzYjNlNTZiZjU3OWVhMDVkMzkxNzA2MDlkZjI5MDliMDlkLi5iNjBjY2E0ZmNhOTIw
MDBkYzVhZWNiOTNmODVkY2I2NjJmMDlmMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCkBAIC0xMzAsMjEgKzEzMCwyNSBAQCBMYXlvdXRVbml0IElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxl
Y3Rpb25IZWlnaHQoKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBz
dGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3Rl
ZCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBz
UG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0
ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PGludD4obV9sZW4pKTsKLSAgICBy
ZXR1cm4gKHNQb3MgPCBlUG9zKTsKKyAgICBpbnQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQ
b3MpOworICAgIGludCBlUG9zID0gY2xhbXBlZE9mZnNldChlbmRQb3MpOworICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgb25seSBiZSBjaGVja2luZyBpZiBzUG9zID49IGVQb3MgaGVyZSwgYmVjYXVz
ZSB0aG9zZSBhcmUgdGhlCisgICAgLy8gaW5kaWNlcyB1c2VkIHRvIGFjdHVhbGx5IGdlbmVyYXRl
IHRoZSBzZWxlY3Rpb24gcmVjdC4gQWxsb3dpbmcgdXMgcGFzdCB0aGlzIGd1YXJkCisgICAgLy8g
b24gYW55IG90aGVyIGNvbmRpdGlvbiBjcmVhdGVzIHplcm8td2lkdGggc2VsZWN0aW9uIHJlY3Rz
LgorICAgIHJldHVybiBzUG9zIDwgZVBvcyB8fCAoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0
UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQb3MgPD0gKHN0YXJ0KCkgKyBsZW4oKSkpOwogfQogCiBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRl
KCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIo
KS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRl
ID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICBpbnQgc3RhcnRQb3Ms
IGVuZFBvczsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsKICAgICAgICAgcmVu
ZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKICAgICAgICAgLy8g
VGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUg
cGFzdCBpdHMgZW5kLgotICAgICAgICBpbnQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVu
KCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKKyAgICAgICAgQVNTRVJUKHN0YXJ0KCkgKyBs
ZW4oKSA+PSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKSk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RT
ZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAK
ICAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCAmJiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYmIHN0YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsK
ICAgICAgICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFy
dCAmJiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVuZFBvcyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0x
NjUsOSArMTY5LDEwIEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJv
eDo6c2VsZWN0aW9uU3RhdGUoKQogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlv
biAmJiByb290KCkuZWxsaXBzaXNCb3goKSkgewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBz
aXMgPSByb290KCkuZWxsaXBzaXNCb3goKTsKICAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uTm9uZSkgewotICAgICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0Owot
ICAgICAgICAgICAgaW50IHNlbGVjdGlvbkVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVj
dGlvblN0YXJ0OworICAgICAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kOwogICAgICAgICAg
ICAgc3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFy
dEVuZCgpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4oc2VsZWN0aW9uU3Rh
cnQpID49IDAgJiYgc3RhdGljX2Nhc3Q8aW50PihzZWxlY3Rpb25FbmQpID49IDApOwogICAgICAg
ICAgICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVk
IGlmIHRoZSBlbmQgb2YKICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0aGUKICAgICAgICAgICAgIC8vIGJlZ2lu
bmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZQpAQCAtMTkxLDEyICsxOTYsMTUgQEAgc3RhdGljIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250VG9V
c2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJUZXh0JgogICAgIHJldHVy
biBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCi1MYXlvdXRSZWN0IElubGluZVRleHRCb3g6Omxv
Y2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0CitMYXlvdXRS
ZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywg
dW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQ
b3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3Rh
cnQsIChpbnQpbV9sZW4pOwotICAgIAotICAgIGlmIChzUG9zID4gZVBvcykKKyAgICB1bnNpZ25l
ZCBzUG9zID0gY2xhbXBlZE9mZnNldChzdGFydFBvcyk7CisgICAgdW5zaWduZWQgZVBvcyA9IGNs
YW1wZWRPZmZzZXQoZW5kUG9zKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBj
aGVja2luZyBpZiBzUG9zID49IGVQb3MgaGVyZSwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlCisgICAg
Ly8gaW5kaWNlcyB1c2VkIHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzZWxlY3Rpb24gcmVjdC4g
QWxsb3dpbmcgdXMgcGFzdCB0aGlzIGd1YXJkCisgICAgLy8gb24gYW55IG90aGVyIGNvbmRpdGlv
biBjcmVhdGVzIHplcm8td2lkdGggc2VsZWN0aW9uIHJlY3RzLgorICAgIGlmIChzUG9zID49IGVQ
b3MgJiYgIShzdGFydFBvcyA9PSBlbmRQb3MgJiYgc3RhcnRQb3MgPj0gc3RhcnQoKSAmJiBzdGFy
dFBvcyA8PSAoc3RhcnQoKSArIGxlbigpKSkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwpA
QCAtMjEyLDcgKzIyMCw3IEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rp
b25SZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKIAogICAgIExheW91dFJlY3Qg
c2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoTGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2Vs
ZWN0aW9uVG9wKSwgTGF5b3V0U2l6ZShtX2xvZ2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7
CiAgICAgLy8gQXZvaWQgY29tcHV0aW5nIHRoZSBmb250IHdpZHRoIHdoZW4gdGhlIGVudGlyZSBs
aW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCi0gICAgaWYgKHNQb3MgfHwg
ZVBvcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KG1fbGVuKSkKKyAgICBpZiAoc1BvcyB8fCBlUG9zICE9
IG1fbGVuKQogICAgICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4s
IHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwogICAgIEludFJlY3Qgc25hcHBlZFNlbGVjdGlv
blJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwogICAgIExheW91dFVuaXQg
bG9naWNhbFdpZHRoID0gc25hcHBlZFNlbGVjdGlvblJlY3Qud2lkdGgoKTsKQEAgLTUwOCwxOCAr
NTE2LDE4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIpOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKLSAgICBpbnQgc2VsZWN0aW9u
U3RhcnQgPSAwOwotICAgIGludCBzZWxlY3Rpb25FbmQgPSAwOworICAgIHVuc2lnbmVkIHNlbGVj
dGlvblN0YXJ0ID0gMDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSAwOwogICAgIGlmICho
YXZlU2VsZWN0aW9uICYmIChwYWludFNlbGVjdGVkVGV4dE9ubHkgfHwgcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5KSkKICAgICAgICAgc3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlv
bkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogCiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKSB7Ci0gICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc3RkOjptaW48aW50Pihz
ZWxlY3Rpb25TdGFydCwgbV90cnVuY2F0aW9uKTsKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gc3Rk
OjptaW48aW50PihzZWxlY3Rpb25FbmQsIG1fdHJ1bmNhdGlvbik7CisgICAgICAgIHNlbGVjdGlv
blN0YXJ0ID0gc3RkOjptaW4oc2VsZWN0aW9uU3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3RydW5jYXRpb24pKTsKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gc3RkOjptaW4oc2VsZWN0aW9u
RW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cnVuY2F0aW9uKSk7CiAgICAgICAgIGxlbmd0
aCA9IG1fdHJ1bmNhdGlvbjsKICAgICB9CiAKLSAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0ID0g
MDsKKyAgICBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOwogICAgIGJvb2wgZW1waGFzaXNN
YXJrQWJvdmU7CiAgICAgYm9vbCBoYXNUZXh0RW1waGFzaXMgPSBlbXBoYXNpc01hcmtFeGlzdHNB
bmRJc0Fib3ZlKGxpbmVTdHlsZSwgZW1waGFzaXNNYXJrQWJvdmUpOwogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgZW1waGFzaXNNYXJrID0gaGFzVGV4dEVtcGhhc2lzID8gbGluZVN0eWxlLnRleHRF
bXBoYXNpc01hcmtTdHJpbmcoKSA6IG51bGxBdG9tOwpAQCAtNTg2LDIxICs1OTQsMjUgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGlmIChzaG91bGRSb3RhdGUpCiAgICAgICAgIGNvbnRl
eHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KK3Vu
c2lnbmVkIElubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RkOjptYXgoc3RkOjptaW4oeCwgc3RhcnQoKSArIGxlbigpKSwgc3RhcnQo
KSkgLSBzdGFydCgpOworfQogCi1zdGQ6OnBhaXI8aW50LCBpbnQ+IElubGluZVRleHRCb3g6OnNl
bGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElu
bGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKIHsKICAgICBhdXRvIHNlbGVj
dGlvblN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzZWxlY3Rp
b25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJu
IHsgMCwgbV9sZW4gfTsKICAgICAKLSAgICBpbnQgc3RhcnQ7Ci0gICAgaW50IGVuZDsKKyAgICB1
bnNpZ25lZCBzdGFydDsKKyAgICB1bnNpZ25lZCBlbmQ7CiAgICAgcmVuZGVyZXIoKS5zZWxlY3Rp
b25TdGFydEVuZChzdGFydCwgZW5kKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGFydCkKICAgICAgICAgZW5kID0gcmVuZGVyZXIoKS50ZXh0TGVu
Z3RoKCk7CiAgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25FbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICByZXR1cm4geyBzdGQ6Om1heChzdGFy
dCAtIG1fc3RhcnQsIDApLCBzdGQ6Om1pbjxpbnQ+KGVuZCAtIG1fc3RhcnQsIG1fbGVuKSB9Owor
ICAgIHJldHVybiB7IGNsYW1wZWRPZmZzZXQoc3RhcnQpLCBjbGFtcGVkT2Zmc2V0KGVuZCkgfTsK
IH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQpAQCAtNjEw
LDggKzYyMiw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAgICBp
bnQgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgaW50IHNlbGVjdGlvbkVuZDsKKyAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQ7CiAgICAgc3RkOjp0aWUo
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogICAg
IGlmIChzZWxlY3Rpb25TdGFydCA+PSBzZWxlY3Rpb25FbmQpCiAgICAgICAgIHJldHVybjsKQEAg
LTYzNCw3ICs2NDYsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbGVu
KCk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKLSAgICBib29sIHJlc3BlY3RIeXBo
ZW4gPSBzZWxlY3Rpb25FbmQgPT0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpICYmIGhhc0h5cGhl
bigpOworICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IHNlbGVjdGlvbkVuZCA9PSBsZW5ndGggJiYg
aGFzSHlwaGVuKCk7CiAgICAgaWYgKHJlc3BlY3RIeXBoZW4pCiAgICAgICAgIGh5cGhlbmF0ZWRT
dHJpbmcgPSBoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihzdHlsZSwgbGVuZ3RoKTsKICAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBoeXBoZW5hdGVkU3RyaW5n
LCBPcHRpb25hbDx1bnNpZ25lZD4obGVuZ3RoKSk7CkBAIC02NjAsMTEgKzY3MiwxMCBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRQb2ludCYgYgogI2VuZGlmCiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQ
b3MpCiB7Ci0gICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7Ci0gICAgaW50IHNlbGVjdGlvblN0YXJ0
ID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwotICAgIGludCBzZWxlY3Rpb25FbmQg
PSBzdGQ6Om1pbjxpbnQ+KGVuZFBvcyAtIG9mZnNldCwgbV9sZW4pOworICAgIHVuc2lnbmVkIHNl
bGVjdGlvblN0YXJ0ID0gY2xhbXBlZE9mZnNldChzdGFydFBvcyk7CisgICAgdW5zaWduZWQgc2Vs
ZWN0aW9uRW5kID0gY2xhbXBlZE9mZnNldChlbmRQb3MpOwogICAgIGlmIChzZWxlY3Rpb25TdGFy
dCA+PSBzZWxlY3Rpb25FbmQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzU2LDcgKzc2Nyw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pCiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBu
ZWVkIHRvIG1lYXN1cmUgdGV4dAogICAgIGJvb2wgbWFya2VyU3BhbnNXaG9sZUJveCA9IHRydWU7
Ci0gICAgaWYgKG1fc3RhcnQgPD0gKGludCltYXJrZXIuc3RhcnRPZmZzZXQoKSkKKyAgICBpZiAo
bV9zdGFydCA8PSBtYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9s
ZUJveCA9IGZhbHNlOwogICAgIGlmICgoZW5kKCkgKyAxKSAhPSBtYXJrZXIuZW5kT2Zmc2V0KCkp
IC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBhc3QgaXQKICAgICAgICAgbWFy
a2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwpAQCAtNzY1LDExICs3NzYsMTEgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRQb2kKIAogICAgIGJvb2wgaXNEaWN0YXRpb25NYXJrZXIgPSBtYXJrZXIudHlw
ZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgaWYgKCFt
YXJrZXJTcGFuc1dob2xlQm94IHx8IGdyYW1tYXIgfHwgaXNEaWN0YXRpb25NYXJrZXIpIHsKLSAg
ICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNl
dCgpIC0gbV9zdGFydCwgMCk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGlu
dD4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9sZW4pOworICAgICAgICB1bnNpZ25l
ZCBzdGFydFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChtYXJrZXIuc3RhcnRPZmZzZXQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChtYXJrZXIuZW5kT2Zm
c2V0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0
aW9uKQotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVuZFBvc2l0aW9u
LCBtX3RydW5jYXRpb24pOworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbihlbmRQ
b3NpdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOwogCiAgICAgICAg
IC8vIENhbGN1bGF0ZSBzdGFydCAmIHdpZHRoCiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJl
cigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9t
KCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKQEAg
LTgxOCw4ICs4MjksOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2Vy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQbwogICAgIExheW91dFVuaXQg
ZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/
IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2Vs
ZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZLCAwLCB0aGlzLT5zZWxlY3Rpb25I
ZWlnaHQoKSk7CiAKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4PGludD4obWFya2VyLnN0YXJ0T2Zm
c2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluPGludD4obWFya2Vy
LmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9sZW4pOworICAgIHVuc2lnbmVkIHNQb3MgPSBjbGFt
cGVkT2Zmc2V0KG1hcmtlci5zdGFydE9mZnNldCgpKTsKKyAgICB1bnNpZ25lZCBlUG9zID0gY2xh
bXBlZE9mZnNldChtYXJrZXIuZW5kT2Zmc2V0KCkpOwogICAgIFRleHRSdW4gcnVuID0gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSk7CiAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChy
dW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3MpOwogCkBAIC05ODUsMTggKzk5NiwxOCBAQCBp
bnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgbGluZU9mZnNldCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocwogICAgIHJldHVybiBmb250Lm9mZnNldEZvclBvc2l0aW9u
KGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlKSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCks
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRp
b25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKK2Zsb2F0IElubGluZVRleHRCb3g6OnBvc2l0
aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQob2Zmc2V0
ID49IG1fc3RhcnQpOwotICAgIEFTU0VSVChvZmZzZXQgPD0gbV9zdGFydCArIG1fbGVuKTsKKyAg
ICBBU1NFUlQob2Zmc2V0IDw9IG1fc3RhcnQgKyBsZW4oKSk7CiAKICAgICBpZiAoaXNMaW5lQnJl
YWsoKSkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0KCk7CiAKICAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKLSAgICBpbnQgZnJv
bSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKLSAg
ICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZW4gOiBvZmZzZXQgLSBt
X3N0YXJ0OworICAgIHVuc2lnbmVkIGZyb20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
Y2xhbXBlZE9mZnNldChvZmZzZXQpIDogMDsKKyAgICB1bnNpZ25lZCB0byA9ICFpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IGNsYW1wZWRPZmZzZXQob2Zmc2V0KTsKICAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAwLCAwLCAwKTsKICAg
ICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDY3YjYzNGJhNTc4YzM4MGY3MDliMjMx
Y2E2YjMxODk4NzM1Njk0YmQuLjcyMzZmNjAyYWE2NjEzNjFiMzc0N2NhMDYzMTU4ZDQ1MzJiY2Mw
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtNDIsMTEg
KzQyLDYgQEAgY2xhc3MgSW5saW5lVGV4dEJveCA6IHB1YmxpYyBJbmxpbmVCb3ggewogcHVibGlj
OgogICAgIGV4cGxpY2l0IElubGluZVRleHRCb3goUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiAgICAg
ICAgIDogSW5saW5lQm94KHJlbmRlcmVyKQotICAgICAgICAsIG1fcHJldlRleHRCb3gobnVsbHB0
cikKLSAgICAgICAgLCBtX25leHRUZXh0Qm94KG51bGxwdHIpCi0gICAgICAgICwgbV9zdGFydCgw
KQotICAgICAgICAsIG1fbGVuKDApCi0gICAgICAgICwgbV90cnVuY2F0aW9uKGNOb1RydW5jYXRp
b24pCiAgICAgewogICAgICAgICBzZXRCZWhhdmVzTGlrZVRleHQodHJ1ZSk7CiAgICAgfQpAQCAt
NjksNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydCh1bnNpZ25lZCBzdGFydCkg
eyBtX3N0YXJ0ID0gc3RhcnQ7IH0KICAgICB2b2lkIHNldExlbih1bnNpZ25lZCBsZW4pIHsgbV9s
ZW4gPSBsZW47IH0KIAotICAgIHZvaWQgb2Zmc2V0UnVuKGludCBkKSB7IEFTU0VSVCghaXNEaXJ0
eSgpKTsgbV9zdGFydCArPSBkOyB9CisgICAgdm9pZCBvZmZzZXRSdW4oaW50IGQpIHsgQVNTRVJU
KCFpc0RpcnR5KCkpOyBBU1NFUlQoZCA+IDAgfHwgbV9zdGFydCA+PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oLWQpKTsgbV9zdGFydCArPSBkOyB9CiAKICAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cnVuY2F0aW9uOyB9CiAKQEAgLTEyMCw5ICsxMTUsOSBA
QCBwcml2YXRlOgogcHVibGljOgogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWln
aHQoKSk7IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50
IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0
YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IHNlbGVj
dGlvblN0YXJ0RW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0
aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdDsKKyAgICBi
b29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7
CisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBj
b25zdDsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3Zl
cnJpZGU7CkBAIC0xNTUsMTIgKzE1MCwxMyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgdmly
dHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQo
aW50IG9mZnNldCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYWludENvbXBv
c2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVu
ZFBvcyk7CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9u
dENhc2NhZGUmLCBib29sIGJhY2tncm91bmQpOwogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVu
ZGVybGluZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNv
bnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7CisgICAgdW5zaWduZWQgY2xhbXBlZE9mZnNldCh1
bnNpZ25lZCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRm9udENhc2NhZGUmLCBSZW5kZXJDb21iaW5lVGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QsCkBAIC0xNzMsMTUgKzE2OSwxNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBi
ZWhhdmVzTGlrZVRleHQoKSBjb25zdCA9IGRlbGV0ZTsKIAotICAgIElubGluZVRleHRCb3gqIG1f
cHJldlRleHRCb3g7IC8vIFRoZSBwcmV2aW91cyBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRl
ck9iamVjdAotICAgIElubGluZVRleHRCb3gqIG1fbmV4dFRleHRCb3g7IC8vIFRoZSBuZXh0IGJv
eCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CisgICAgSW5saW5lVGV4dEJveCogbV9w
cmV2VGV4dEJveCB7IG51bGxwdHIgfTsgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNl
cyBvdXIgUmVuZGVyT2JqZWN0CisgICAgSW5saW5lVGV4dEJveCogbV9uZXh0VGV4dEJveCB7IG51
bGxwdHIgfTsgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QK
IAotICAgIGludCBtX3N0YXJ0OwotICAgIHVuc2lnbmVkIHNob3J0IG1fbGVuOworICAgIHVuc2ln
bmVkIG1fc3RhcnQgeyAwIH07CisgICAgdW5zaWduZWQgc2hvcnQgbV9sZW4geyAwIH07CiAKICAg
ICAvLyBXaGVyZSB0byB0cnVuY2F0ZSB3aGVuIHRleHQgb3ZlcmZsb3cgaXMgYXBwbGllZC4gV2Ug
dXNlIHNwZWNpYWwgY29uc3RhbnRzIHRvCiAgICAgLy8gZGVub3RlIG5vIHRydW5jYXRpb24gKHRo
ZSB3aG9sZSBydW4gcGFpbnRzKSBhbmQgZnVsbCB0cnVuY2F0aW9uIChub3RoaW5nIHBhaW50cyBh
dCBhbGwpLgotICAgIHVuc2lnbmVkIHNob3J0IG1fdHJ1bmNhdGlvbjsKKyAgICB1bnNpZ25lZCBz
aG9ydCBtX3RydW5jYXRpb24geyBjTm9UcnVuY2F0aW9uIH07CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBj
ZGU2MDdjZjVhY2YxYWZmOTVmYTYwYzgyNWZhYWUwYWZmZDc5MTUyLi5kMjY0ZDJhOTc2NGFkMjUz
N2IzN2EzNzMxODZmYzk2MjFiNWE1OTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTM0ODksNyArMzQ4OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0
ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYK
ICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4g
bW9zdCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAppbmRleCAzMTUyMjM1NTUxMTRiYTI5OGVmODkyYTVjMGNmYjVlNzVjYzM4
YmU1Li4zMjNkMTcwZGZlYTVkMDg2ZDc5N2Y1ZjE0ODUwY2I5YTY2MzMzZmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNDc2LDcgKzQ3Niw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAw
KSBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2ln
bmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBm
aW5hbDsKICAgICAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9u
IHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0
dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyUmVnaW9uKik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDgxYjBhZDY3ODg4YTU3MDU4YzFiY2FmMmQ3OTk4ZTc4
ZjBjN2ZjNTcuLmVhZTcyYmEyYzM0NWNkOWJiNzk1YWJiYjBlMjBiOGRjZDIwNjIxZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC00MzgzLDcgKzQzODMsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQoTG9n
aWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAgIGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBs
b2dpY2FsVG9wUG9zOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBib3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lKQogewogICAgIC8vIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29u
dGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8gdGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAg
ICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJsZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikg
cmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lkZSBhbiBlbXB0eSBibG9jay4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAwMzgzMGM3YTgzNzYzZDVjMzE5YmIyN2ZkMDZhYTQ3
N2I1MzFjODc2Li5jNjAxN2Q4ZGY5MWFkOGJjMWFkYmEyMDQxOGZkMDU1YThkZWE0NzRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC00ODEsNyArNDgxLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzVW5zcGxpdHRhYmxlU2Nyb2xsaW5nT3ZlcmZsb3coKSBjb25zdDsKICAg
ICBib29sIGlzVW5zcGxpdHRhYmxlRm9yUGFnaW5hdGlvbigpIGNvbnN0OwogCi0gICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIG92ZXJyaWRlOworICAgIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBSZW5kZXJSZWdpb24qLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBQYWludFBoYXNlID0gUGFpbnRQaGFzZUJsb2Nr
QmFja2dyb3VuZCk7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JD
aGlsZExheWVycyhjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVn
aW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92
ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJlZ2lvbiwgcmVsZXZhbmN5KTsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAppbmRleCBkYmI0ODNkNjlmMjY2MWQzOTBk
ZjUxYTVmOGYxMTBhMTAwNWI0NzA2Li5hZGFiNjQ4NWNhZGNhMjFjNmU1NDM4NDdkY2IxMjI0N2Iw
MmUxOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAt
MjQ5LDcgKzI0OSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5l
Qm94ZXMoYm9vbCBmdWxsTGF5b3V0KQogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJJbmxp
bmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBpZiAoZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIC8v
IFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxlIGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMgYXQgYW4g
ZWRpdGluZyBib3VuZGFyeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaApp
bmRleCA1Y2VhZmMyZDhhMmZmYzM3YTMzZTE3YzRiMjZlMmFlOTc5Zjg2MzZmLi4wMGJjOWVjMWQ0
MDQ5MjgwYWZhNDBlNGY4MDlkMjc5ZmNhODA3Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFs
d2F5c0NyZWF0ZUxpbmVCb3hlcygpIHsgc2V0UmVuZGVySW5saW5lQWx3YXlzQ3JlYXRlc0xpbmVC
b3hlcyh0cnVlKTsgfQogICAgIHZvaWQgdXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKGJvb2wg
ZnVsbExheW91dCk7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCos
IGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlv
dXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpIGZpbmFsOwogCiAgICAgYm9vbCBoaXRUZXN0Q3VsbGVkSW5s
aW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcAppbmRleCAxY2Q5NjM0YmFlNDAwYjg1OGRmNmZlZmFhMzE3NTQ1NmIxMThhZjZjLi5iOGMy
MzU4ZDE1N2RkYjJjYzI4YTEzNjcyYjhjYTFjN2QwMWI1ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQg
UmVuZGVyTGluZUJyZWFrOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkK
ICAgICBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0
YXRlICE9IFNlbGVjdGlvbk5vbmUpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckxpbmVCcmVhazo6
bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJMaW5lQnJl
YWs6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9m
ZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIEFTU0VSVF9V
TlVTRUQoY2FyZXRPZmZzZXQsICFjYXJldE9mZnNldCk7CiAgICAgQVNTRVJUX1VOVVNFRChpbmxp
bmVCb3gsIGlubGluZUJveCA9PSBtX2lubGluZUJveFdyYXBwZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IDExZmQzYmQ5MjE3NDk3NjM2ZDBjYTYw
MTE0Mjk4MjU5NDIyYjEyMzYuLjk3MDdjZDE2ZTU4MzZhNzgxZmZkNjUzNTAyZjMwODNmYjEyZmEx
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY2
LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBvdmVy
cmlkZTsKICAgICBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29s
IGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRlOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSkgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMGVi
OGFkNjE4NGE5NzYzNDIzOTNjNjczYTMyYjMwMjIyMTExMjI2Yy4uYWMzMTIyNjI2MDRhMmQzZTE0
YTFiY2U1YzNiZGU3ZTFkZGVlNTdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIFNlbGVjdGlvblN1YnRyZWVSb290JiBS
ZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3QoKSBjb25zdAogICAgIHJldHVybiB2aWV3KCk7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNwb3MsIGludCYg
ZXBvcykgY29uc3QKK3ZvaWQgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25l
ZCYgc3BvcywgdW5zaWduZWQmIGVwb3MpIGNvbnN0CiB7CiAgICAgc2VsZWN0aW9uUm9vdCgpLnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhzcG9zLCBlcG9zKTsKIH0K
QEAgLTEzNzcsNyArMTM3Nyw3IEBAIExheW91dFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9t
QW5jZXN0b3JDb250YWluZXIoUmVuZGVyRWxlbWVudCYgY29udGFpbmVyKSBjCiAgICAgcmV0dXJu
IG9mZnNldDsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElu
bGluZUJveCosIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0
UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkLCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgaWYgKGV4dHJhV2lkdGhU
b0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYzZjNmMzZmVlNWUyNjUwOGMzMTk2
YjkzMGJjNDYzYzc2YTdiNjNhYy4uNDExNmE1MGIwZmEwZDcyOTAxOGU5NzFmNTQ0NDU5YzAzZTg4
YzRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNzQ5LDcg
Kzc0OSw3IEBAIHB1YmxpYzoKICAgICAgKiBAcGFyYW0gZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIG9w
dGlvbmFsIG91dCBhcmcgdG8gZ2l2ZSBleHRyYSB3aWR0aCB0byBlbmQgb2YgbGluZSAtCiAgICAg
ICogdXNlZnVsIGZvciBjaGFyYWN0ZXIgcmFuZ2UgcmVjdCBjb21wdXRhdGlvbnMKICAgICAgKi8K
LSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNh
cmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKTsK
KyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWdu
ZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxw
dHIpOwogCiAgICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEgZ2xvYmFsIGRvY3VtZW50IHRlYXItZG93
biwgdGhlIHJlbmRlcmVyIG9mIHRoZSBkb2N1bWVudCBpcyBjbGVhcmVkLiAgV2UgdXNlIHRoaXMK
ICAgICAvLyBhcyBhIGhvb2sgdG8gZGV0ZWN0IHRoZSBjYXNlIG9mIGRvY3VtZW50IGRlc3RydWN0
aW9uIGFuZCBkb24ndCB3YXN0ZSB0aW1lIGRvaW5nIHVubmVjZXNzYXJ5IHdvcmsuCkBAIC03ODIs
NyArNzgyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBl
ZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIHsgfQogCiAgICAgU2VsZWN0aW9u
U3VidHJlZVJvb3QmIHNlbGVjdGlvblJvb3QoKSBjb25zdDsKLSAgICB2b2lkIHNlbGVjdGlvblN0
YXJ0RW5kKGludCYgc3BvcywgaW50JiBlcG9zKSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdGlvblN0
YXJ0RW5kKHVuc2lnbmVkJiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3Q7CiAgICAgCiAgICAg
dm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCmluZGV4IGFhMmMzNGNiNmFhYzNkYzc4ZDY3MTRkNjNiYTc1YjBiN2E1
NGI4M2IuLjBiZmI0YmE3OTA1YjI3MDA5NTNmMWI2OWViYTQ0NDNlYmNkMDgzYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtNjE2LDE4ICs2MTYs
MTggQEAgYm9vbCBSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCgpIGNvbnN0CiAgICAgaWYgKHMg
PT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGludCBzZWxl
Y3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCBz
ZWxlY3Rpb25FbmQ7CiAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc2VsZWN0aW9uU3RhcnQsIHNlbGVj
dGlvbkVuZCk7CiAgICAgaWYgKHMgPT0gU2VsZWN0aW9uU3RhcnQpCiAgICAgICAgIHJldHVybiBz
ZWxlY3Rpb25TdGFydCA9PSAwOwogICAgICAgICAKLSAgICBpbnQgZW5kID0gZWxlbWVudCgpLT5o
YXNDaGlsZE5vZGVzKCkgPyBlbGVtZW50KCktPmNvdW50Q2hpbGROb2RlcygpIDogMTsKKyAgICB1
bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291
bnRDaGlsZE5vZGVzKCkgOiAxOwogICAgIGlmIChzID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkVuZCA9PSBlbmQ7CiAgICAgaWYgKHMgPT0gU2VsZWN0aW9uQm90aCkK
ICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDAgJiYgc2VsZWN0aW9uRW5kID09IGVu
ZDsKICAgICAgICAgCi0gICAgQVNTRVJUKDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCmluZGV4IDAyODg2YmI4MGZjMzRlYjRlNDNkZDBhY2QzZDlmZjdhZTAyYTE3MzMuLmQzZmJl
N2M4NTkzMTc5YTk5NTA0ZGI1MDFkZmYxNjI3MDVjNzc5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ0Miw3ICs0NDIsNyBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNv
bnN0IFJlbgogICAgIHJldHVybiBtX2xpbmVCb3hlcy5wb3NpdGlvbkZvclBvaW50KCp0aGlzLCBw
b2ludCk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lk
dGhUb0VuZE9mTGluZSkKIHsKICAgICBpZiAoIWlubGluZUJveCkKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoKTsKQEAgLTEzNzIsMTMgKzEzNzIsMTIgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0
Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2Rl
bE8KIAogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgaWYgKCFjYikKKyAgICBpZiAoIWNvbnRhaW5pbmdCbG9jaygpKQogICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gTm93IGNhbGN1bGF0ZSBzdGFydFBvcyBh
bmQgZW5kUG9zIGZvciBwYWludGluZyBzZWxlY3Rpb24uCiAgICAgLy8gV2UgaW5jbHVkZSBhIHNl
bGVjdGlvbiB3aGlsZSBlbmRQb3MgPiAwCi0gICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAg
dW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8gV2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAg
ICAgICBzdGFydFBvcyA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRl
eCBkNjNlNjA4OWNkZTQwMzdjNTVlNWYxYzhjNjIyODFlOGFjYTYyYmI0Li4xZmM4ZGMzOTlmYzM2
MjAxZDdjZTU1ZTAyNjAzYjIyMmEwODZjOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5CZVNlbGVj
dGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgb3ZlcnJpZGU7Ci0g
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQs
IExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApIG92ZXJyaWRlOworICAgIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQs
IExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApIG92ZXJyaWRlOwogCiAgICAg
TGF5b3V0UmVjdCBjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29u
dGVudCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBkOTQzZjNhNTgxZmYwY2I1
ZjYxNzViY2Q5ODE0ZjY0MDc1ODYwZWRkLi5lNTlmM2RlNjE2MzFkZjNjMjNjY2VhMjY5ZmU1MmJj
OTJhOWQ3NGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwCkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBSZW5kZXJUZXh0TGluZUJveGVz
OjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVuZGVyT2JqZWN0OjoK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBzdGFydCwgZW5kOworICAgIHVuc2ln
bmVkIHN0YXJ0LCBlbmQ7CiAgICAgcmVuZGVyZXIuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVu
ZCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpIHsKICAg
ICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCmluZGV4IGE4ZGQ3MThkODhiMzk5Y2E5ZjhlYjc3MGUzMjEyYTUwYjE0
YWQ5YzYuLjA5NjQ3MGRiYzNkYTFlZTI2MTdlMmE2MWQ4ZDY3NDI1ODAxYzUwZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTEyMCw4ICsxMjAsNiBAQCBSZW5k
ZXJWaWV3OjpSZW5kZXJWaWV3KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHls
ZSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1bWVudC52aWV3KCkpCiAgICAgLCBtX3NlbGVjdGlv
blVuc3BsaXRTdGFydChudWxscHRyKQogICAgICwgbV9zZWxlY3Rpb25VbnNwbGl0RW5kKG51bGxw
dHIpCi0gICAgLCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvcygtMSkKLSAgICAsIG1fc2VsZWN0
aW9uVW5zcGxpdEVuZFBvcygtMSkKICAgICAsIG1fbGF6eVJlcGFpbnRUaW1lcigqdGhpcywgJlJl
bmRlclZpZXc6OmxhenlSZXBhaW50VGltZXJGaXJlZCkKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWln
aHQoMCkKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKGZhbHNlKQpAQCAtNzcyLDcg
Kzc3MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlclZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMo
Y29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QsCiAgICAgU2VsZWN0aW9uTWFwIHNlbGVj
dGVkT2JqZWN0czsKIAogICAgIFJlbmRlck9iamVjdCogb3MgPSByb290LnNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyQWZ0
ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSwgcm9vdC5zZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9
IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCog
c3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVuZCkKKyAgICAgICAgc3RvcCA9IHJl
bmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlv
bkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAob3MgJiYgb3MgIT0gc3RvcCkgewogICAgICAgICBp
ZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBvcyA9PSByb290LnNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpIHx8IG9zID09IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
bkVuZCgpKSAmJiBvcy0+c2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7CkBAIC04
MjEsNyArODIyLDEwIEBAIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxS
ZW5kZXJCbG9jayo+IHByb2Nlc3NlZEJsb2NrczsKIAotICAgIFJlbmRlck9iamVjdCogZW5kID0g
cmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgp
LCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byogc2Vs
ZWN0aW9uRW5kID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCk7CisgICAgUmVu
ZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb25FbmQpCisgICAgICAg
IGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0aW9u
RGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9y
IHNlbGVjdGlvbkl0ZXJhdG9yKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkp
OwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgp
OyBvICYmIG8gIT0gZW5kOyBvID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAg
IGlmICghby0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgbyAhPSByb290LnNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpICYmIG8gIT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
RW5kKCkpCkBAIC04NDAsNyArODQ0LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJl
ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQs
IGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJl
cGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqIHN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZW5kLCBPcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50
TW9kZSBibG9ja1JlcGFpbnRNb2RlKQogewogICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFy
dCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCiAgICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNv
bSBhbmQgdHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFw
cGVuZWQuCkBAIC04NzcsNyArODgxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24o
UmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICBz
cGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9z
LCBibG9ja1JlcGFpbnRNb2RlKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlv
bkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3Ms
IGNvbnN0IFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9k
ZSBibG9ja1JlcGFpbnRNb2RlKQordm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdl
ZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4g
c3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5kLCBPcHRpb25hbDx1bnNpZ25lZD4gZW5k
UG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQogewogICAgIC8vIENv
bXB1dGUgdGhlIHZpc2libGUgc2VsZWN0aW9uIGVuZCBwb2ludHMgZm9yIGVhY2ggb2YgdGhlIHN1
YnRyZWVzLgogICAgIFJlbmRlclN1YnRyZWVzTWFwIHJlbmRlclN1YnRyZWVzTWFwOwpAQCAtOTAy
LDE0ICs5MDYsMTcgQEAgdm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0
cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3QKICAgICAgICAgICAgIFNlbGVj
dGlvblN1YnRyZWVEYXRhIHNlbGVjdGlvbkRhdGEgPSByZW5kZXJTdWJ0cmVlc01hcC5nZXQoJnJv
b3QpOwogICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uQ2xlYXIoKSkgewog
ICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uU3RhcnQobm9kZS0+cmVu
ZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFy
dFBvcyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0YXJ0UG9zIDogMCk7CisgICAgICAgICAgICAgICAg
c2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0
YXJ0UG9zIDogT3B0aW9uYWw8dW5zaWduZWQ+KDApKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmQobm9kZS0+cmVuZGVyZXIoKSk7CiAg
ICAgICAgICAgICBpZiAobm9kZSA9PSBlbmROb2RlKQogICAgICAgICAgICAgICAgIHNlbGVjdGlv
bkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVuZFBvcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3Mobm9kZS0+b2Zmc2V0
SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50
Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8g
bmV3RW5kUG9zID0gbm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhDaGFyYWN0
ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgIEFT
U0VSVChuZXdFbmRQb3MgPj0gMCk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRT
ZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
cmVuZGVyU3VidHJlZXNNYXAuc2V0KCZyb290LCBzZWxlY3Rpb25EYXRhKTsKICAgICAgICAgfQpA
QCAtOTYwLDcgKzk2NywxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmNsZWFyU3VidHJlZVNlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0aQogICAgIC8vIHRoZSB1
bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5n
ZXMgaGF2ZSBvY2N1cnJlZC4KIAogICAgIFJlbmRlck9iamVjdCogb3MgPSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRl
cmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSwgcm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8qIHNlbGVjdGlv
bkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9i
amVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVuZCkKKyAgICAgICAgc3Rv
cCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNl
bGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAob3MgJiYgb3MgIT0gc3RvcCkgewogICAg
ICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVjdGlvbihyb290LCAqb3MpKSB7CkBAIC05
OTgsNyArMTAwOCwxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbihj
b25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0aQogICAgIH0KIAogICAgIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRl
clBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpLCByb290LnNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVu
ZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVj
dCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAg
ICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkRhdGFF
bmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAg
IFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1
cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50
UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGN1cnJl
bnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1
cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKQEAg
LTEwODksNyArMTEwMiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9u
KGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290LCBTZWxlY3RpCiAgICAgICAgIHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Z2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQs
IFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3QKK3ZvaWQg
UmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIE9w
dGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVy
LCBPcHRpb25hbDx1bnNpZ25lZD4mIGVuZE9mZnNldCkgY29uc3QKIHsKICAgICBzdGFydFJlbmRl
cmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQ7CiAgICAgc3RhcnRPZmZzZXQgPSBtX3NlbGVj
dGlvblVuc3BsaXRTdGFydFBvczsKQEAgLTExMDAsNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyVmll
dzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRP
ZmZzZXQsIFJlCiB2b2lkIFJlbmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBsYXll
cigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxw
dHIsIC0xLCBudWxscHRyLCAtMSwgUmVwYWludE5ld01pbnVzT2xkKTsKKyAgICBzZXRTZWxlY3Rp
b24obnVsbHB0ciwgTnVsbG9wdCwgbnVsbHB0ciwgTnVsbG9wdCwgUmVwYWludE5ld01pbnVzT2xk
KTsKIH0KIAogYm9vbCBSZW5kZXJWaWV3OjpwcmludGluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBjN2M5Mjg2NGYwMzQ1YTVlZGIyYjRjMTExMzMxNDI3
OTA1MzJkMGJmLi40NWNjYTIxOTJiNDc0NTA2NWNlOGUxY2Y1MDBmYmZjNzNmY2EyYTljIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAgLTg1LDggKzg1LDggQEAgcHVibGlj
OgogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFp
bnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2
b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnRO
ZXdYT1JPbGQpOwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVu
ZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQm
IGVuZE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBz
dGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVj
dCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgPSBSZXBh
aW50TmV3WE9ST2xkKTsKKyAgICB2b2lkIGdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFy
dFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3Qq
JiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwogICAg
IHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3Bs
aXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9CiAgICAg
UmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25VbnNwbGl0RW5kOyB9CkBAIC0zMDcsNyArMzA3LDcgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3Qq
IHN0YXJ0UmVuZGVyZXIsIGludCBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5k
ZXJlciwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7
CisgICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgY29uc3QgUmVu
ZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0
aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CiAgICAgdm9pZCBjbGVhclN1YnRyZWVT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9k
ZSwgT2xkU2VsZWN0aW9uRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uRm9y
U3VidHJlZXMoUmVuZGVyU3VidHJlZXNNYXAmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSk7CiAgICAg
dm9pZCBhcHBseVN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBT
ZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0YSYpOwpAQCAtMzE5LDgg
KzMxOSw4IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxp
dFN0YXJ0OwogICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNwbGl0RW5kOwotICAgIGlu
dCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKLSAgICBpbnQgbV9zZWxlY3Rpb25VbnNwbGl0
RW5kUG9zOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBv
czsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwogCiAg
ICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZpZXcuCiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNv
dW50IHsgMSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlv
blN1YnRyZWVSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0
cmVlUm9vdC5jcHAKaW5kZXggOWY2NWU5NGI1ZTQ0YmNkZTBiZTAzZmJkZGRmOTg0YWExYTk4NDhj
Yy4uMTgxZTZiNTI3MTM3YjQzZTVhY2M0ODcwMzA3ODkzZTAwMjE0MGE2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCkBAIC00Miwx
OSArNDIsMTYgQEAgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KCkK
IHsKIH0KIAotU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KFJlbmRl
ck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rpb25FbmRQb3MpCi0gICAgOiBtX3NlbGVjdGlv
blN1YnRyZWVEYXRhKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25TdGFydFBvcywgc2VsZWN0aW9u
RW5kLCBzZWxlY3Rpb25FbmRQb3MpCi17Ci19Ci0KIHZvaWQgU2VsZWN0aW9uU3VidHJlZVJvb3Q6
OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlm
IChtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkNsZWFyKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIENyZWF0ZSBhIHJhbmdlIGJhc2VkIG9uIHRoZSBjYWNoZWQgZW5kIHBvaW50
cwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydCgpLT5ub2RlKCksIG1fc2Vs
ZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnRQb3MoKSk7Ci0gICAgUG9zaXRpb24gZW5k
UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVl
RGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVj
dGlvbkVuZFBvcygpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25TdWJ0
cmVlRGF0YS5zZWxlY3Rpb25TdGFydFBvcygpLnZhbHVlKCk7CisgICAgYXV0byBzZWxlY3Rpb25F
bmQgPSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCk7Cisg
ICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbiht
X3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0KCktPm5vZGUoKSwgc2VsZWN0aW9u
U3RhcnQpOworICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uRW5kKCktPm5vZGUoKSwgc2Vs
ZWN0aW9uRW5kKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50LCBzdGFydFBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRQb3Np
dGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24oKnJhbmdlKTsKQEAgLTgyLDEwICs3OSwxMyBAQCB2b2lkIFNlbGVjdGlvblN1YnRy
ZWVSb290OjphZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAg
ICBpZiAoJnN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnNlbGVjdGlvblJv
b3QoKSAhPSB0aGlzKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIG5ld1N0YXJ0UG9zID0g
c3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBhdXRvIG5ld0VuZFBvcyA9
IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIEFTU0VSVChuZXdTdGFydFBv
cyA+PSAwICYmIG5ld0VuZFBvcyA+PSAwKTsKICAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNl
dFNlbGVjdGlvblN0YXJ0KHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwot
ICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9uU3RhcnRQb3Moc3RhcnRQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5z
ZXRTZWxlY3Rpb25TdGFydFBvcyhuZXdTdGFydFBvcyk7CiAgICAgbV9zZWxlY3Rpb25TdWJ0cmVl
RGF0YS5zZXRTZWxlY3Rpb25FbmQoZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkp
OwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVuZFBvcy5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNl
dFNlbGVjdGlvbkVuZFBvcyhuZXdFbmRQb3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJv
b3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCmlu
ZGV4IGRkMTkxOTc4ZmQ2NGI5OWIxNmU0ODEwZjk2YmRlNmFkMDQxMzRlOTUuLmE4MjEyMTFiYzNh
NTk1MjI4NmY3YjI1NGU4ZmQ5ZGI2MDdjODA5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCkBAIC00NSwyOCArNDUsMjAgQEAgcHVibGlj
OgogCiAgICAgc3RydWN0IE9sZFNlbGVjdGlvbkRhdGEgewogICAgICAgICBPbGRTZWxlY3Rpb25E
YXRhKCkKLSAgICAgICAgICAgIDogc2VsZWN0aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAs
IHNlbGVjdGlvbkVuZFBvcygtMSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW50
IHNlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBpbnQgc2VsZWN0aW9uRW5kUG9zOworICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3M7CisgICAgICAgIE9wdGlvbmFs
PHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7CiAgICAgICAgIFNlbGVjdGVkT2JqZWN0TWFwIHNl
bGVjdGVkT2JqZWN0czsKICAgICAgICAgU2VsZWN0ZWRCbG9ja01hcCBzZWxlY3RlZEJsb2NrczsK
ICAgICB9OwogCiAgICAgY2xhc3MgU2VsZWN0aW9uU3VidHJlZURhdGEgewogICAgIHB1YmxpYzoK
LSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKQotICAgICAgICAgICAgOiBtX3NlbGVjdGlv
blN0YXJ0KG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCi0g
ICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kKG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fc2Vs
ZWN0aW9uRW5kUG9zKC0xKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgU2VsZWN0aW9u
U3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEo
UmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5k
ZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVuZFBvcykKKyAgICAgICAgU2Vs
ZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgT3B0aW9uYWw8
dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwg
T3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcykKICAgICAgICAgICAgIDogbV9zZWxl
Y3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkKICAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFy
dFBvcyhzZWxlY3Rpb25TdGFydFBvcykKICAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmQoc2Vs
ZWN0aW9uRW5kKQpAQCAtNzUsNDYgKzY3LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvblN0YXJ0OyB9Ci0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0KKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHNl
bGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGFydFBvczsgfQog
ICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uRW5kOyB9Ci0gICAgICAgIGludCBzZWxlY3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbkVuZFBvczsgfQorICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0
aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmRQb3M7IH0KICAgICAgICAg
Ym9vbCBzZWxlY3Rpb25DbGVhcigpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biAhbV9zZWxlY3Rpb25TdGFydAotICAgICAgICAgICAgJiYgKG1fc2VsZWN0aW9uU3RhcnRQb3Mg
PT0gLTEpCisgICAgICAgICAgICAmJiAoIW1fc2VsZWN0aW9uU3RhcnRQb3MpCiAgICAgICAgICAg
ICAmJiAhbV9zZWxlY3Rpb25FbmQKLSAgICAgICAgICAgICYmIChtX3NlbGVjdGlvbkVuZFBvcyA9
PSAtMSk7CisgICAgICAgICAgICAmJiAoIW1fc2VsZWN0aW9uRW5kUG9zKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnMoaW50JiBzdGFydFBvcywg
aW50JiBlbmRQb3MpIGNvbnN0CisgICAgICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlv
bnModW5zaWduZWQmIHN0YXJ0UG9zLCB1bnNpZ25lZCYgZW5kUG9zKSBjb25zdAogICAgICAgICB7
Ci0gICAgICAgICAgICBzdGFydFBvcyA9IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgICAg
ICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvczsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gbV9z
ZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgpOworICAgICAgICAgICAgZW5kUG9zID0gbV9zZWxlY3Rp
b25FbmRQb3MudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0
YXJ0KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQpIHsgbV9zZWxlY3Rpb25TdGFydCA9IHNl
bGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnRQb3MoaW50IHNl
bGVjdGlvblN0YXJ0UG9zKSB7IG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzZWxlY3Rpb25TdGFydFBv
czsgfQorICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0UG9zKE9wdGlvbmFsPHVuc2lnbmVk
PiBzZWxlY3Rpb25TdGFydFBvcykgeyBtX3NlbGVjdGlvblN0YXJ0UG9zID0gc2VsZWN0aW9uU3Rh
cnRQb3M7fQogICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChSZW5kZXJPYmplY3QqIHNlbGVj
dGlvbkVuZCkgeyBtX3NlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsgfQotICAgICAgICB2b2lk
IHNldFNlbGVjdGlvbkVuZFBvcyhpbnQgc2VsZWN0aW9uRW5kUG9zKSB7IG1fc2VsZWN0aW9uRW5k
UG9zID0gc2VsZWN0aW9uRW5kUG9zOyB9CisgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kUG9z
KE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MpIHsgbV9zZWxlY3Rpb25FbmRQb3Mg
PSBzZWxlY3Rpb25FbmRQb3M7fQogICAgICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFydCA9IG51bGxwdHI7Ci0gICAgICAgICAg
ICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gLTE7CisgICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0
UG9zID0gTnVsbG9wdDsKICAgICAgICAgICAgIG1fc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIG1fc2VsZWN0aW9uRW5kUG9zID0gLTE7CisgICAgICAgICAgICBtX3NlbGVjdGlv
bkVuZFBvcyA9IE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJl
bmRlck9iamVjdCogbV9zZWxlY3Rpb25TdGFydDsKLSAgICAgICAgaW50IG1fc2VsZWN0aW9uU3Rh
cnRQb3M7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGlu
dCBtX3NlbGVjdGlvbkVuZFBvczsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0
YXJ0IHsgbnVsbHB0ciB9OworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25T
dGFydFBvczsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvbkVuZCB7IG51bGxwdHIg
fTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uRW5kUG9zOwogICAgIH07
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U2VsZWN0aW9uU3VidHJlZVJvb3QqLCBTZWxlY3Rpb25T
dWJ0cmVlRGF0YT4gUmVuZGVyU3VidHJlZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0
IFNlbGVjdGlvblN1YnRyZWVSb290Kiwgc3RkOjp1bmlxdWVfcHRyPE9sZFNlbGVjdGlvbkRhdGE+
PiBTdWJ0cmVlT2xkU2VsZWN0aW9uRGF0YU1hcDsKIAogICAgIFNlbGVjdGlvblN1YnRyZWVSb290
KCk7Ci0gICAgU2VsZWN0aW9uU3VidHJlZVJvb3QoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFy
dCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50
IHNlbGVjdGlvbkVuZFBvcyk7CiAKICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9u
RGF0YSgpIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KICAgICBjb25zdCBTZWxl
Y3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uU3VidHJlZURhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9U
ZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3Bw
CmluZGV4IDhkMzU5N2YyYzg0YTcwZjc2OTE1YmQyOWM1ODNjNzY5NTFhYTczYTAuLjZlNWVjYzI2
N2NiNmNlMDZjNGE1ZGM5Mjg0ZmVmZDFmNWUyOTVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1RleHRQYWludGVyLmNwcApAQCAtODQsMTcgKzg0LDE3IEBAIFRleHRQYWludGVyOjpUZXh0
UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB9CiAKIHZvaWQgVGV4dFBhaW50ZXI6
OmRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKLSAgICBp
bnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0
LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQogewogICAgIEFTU0VSVChzdGFydE9mZnNldCA8IGVuZE9mZnNldCk7
CiAgICAgaWYgKGVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCiAgICAgICAgIG1fY29udGV4dC5kcmF3
VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsK
ICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC5kcmF3RW1waGFzaXNNYXJrcyhmb250LCB0ZXh0
UnVuLCBlbXBoYXNpc01hcmssIHRleHRPcmlnaW4gKyBJbnRTaXplKDAsIGVtcGhhc2lzTWFya09m
ZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAgICBtX2NvbnRleHQuZHJhd0Vt
cGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1biwgZW1waGFzaXNNYXJrLCB0ZXh0T3JpZ2luICsgRmxv
YXRTaXplKDAsIGVtcGhhc2lzTWFya09mZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwog
fQogCiB2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRXaXRoU2hhZG93cyhjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3csIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmln
aW4sCi0gICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJp
bmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgYm9vbCBzdHJva2VkKQor
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ry
b2tlZCkKIHsKICAgICBpZiAoIXNoYWRvdykgewogICAgICAgICBkcmF3VGV4dE9yRW1waGFzaXNN
YXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgdGV4
dE9yaWdpbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9p
ZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93LCBjb25zdCBGb250Q2FzY2EKICAgICB9CiB9CiAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50
VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25z
dCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwKK3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFu
ZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9h
dFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsCiAgICAgY29uc3QgVGV4dFBhaW50U3R5bGUm
IHBhaW50U3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKIHsKICAgICAvLyBGSVhNRTog
VHJ1bmNhdGUgcmlnaHQtdG8tbGVmdCB0ZXh0IGNvcnJlY3RseS4KQEAgLTE0NSw3ICsxNDUsNyBA
QCB2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29u
c3QgVGV4dFJ1biYgdGV4dFJ1biwgY29ucwogICAgICAgICBtX2NvbnRleHQuY29uY2F0Q1RNKHJv
dGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KICAgICAKLXZvaWQgVGV4dFBh
aW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBpbnQgbGVuZ3RoLCBjb25z
dCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBz
ZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCwKK3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50
VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZsb2F0
UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQgc2Vs
ZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCwKICAgICBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpCiB7CiAgICAgQVNT
RVJUKG1fZm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmluZGV4IGU0
YjViMThjY2YzY2EyNjEzMzQwZTBlYTRkZGFkYjFiZjk1MGJmMTIuLjJlMTY3ZmIzMzhmN2FmZWQy
YWJiNDZiNzNkYjBlOWJkZDgyZDJkNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5oCkBAIC01NCwxOCArNTQsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9u
UGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHlsZSYgc2VsZWN0aW9uUGFpbnRTdHlsZSkgeyBt
X3NlbGVjdGlvblBhaW50U3R5bGUgPSBzZWxlY3Rpb25QYWludFN0eWxlOyB9CiAgICAgdm9pZCBz
ZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV90ZXh0Qm94SXNIb3Jpem9udGFs
ID0gaXNIb3Jpem9udGFsOyB9CiAgICAgdm9pZCBzZXRGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250KSB7IG1fZm9udCA9ICZmb250OyB9Ci0gICAgdm9pZCBhZGRFbXBoYXNpcyhjb25zdCBBdG9t
aWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29t
YmluZVRleHQqKTsKKyAgICB2b2lkIGFkZEVtcGhhc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZW1w
aGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0Kik7
CiAgICAgdm9pZCBhZGRUZXh0U2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNv
bnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlvblNoYWRvdyk7CiAKLSAgICB2b2lkIHBhaW50VGV4dChj
b25zdCBUZXh0UnVuJiwgaW50IGxlbmd0aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSAw
LCBpbnQgc2VsZWN0aW9uRW5kID0gMCwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBmYWxz
ZSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSBmYWxzZSk7CisgICAgdm9pZCBw
YWludFRleHQoY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRmxvYXRSZWN0
JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAorICAgICAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25TdGFydCA9IDAsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IDAsIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5ID0gZmFsc2UsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0
ZWx5ID0gZmFsc2UpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFy
a3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5n
JiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsCi0gICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7Cisg
ICAgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFz
aXNNYXJrT2Zmc2V0LAorICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsKICAgICB2b2lkIHBhaW50VGV4
dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRl
eHRPcmlnaW4sCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wg
c3Ryb2tlZCk7Ci0gICAgdm9pZCBwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LAorICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcm
IGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQpOwor
ICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1waGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4s
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsCiAgICAgICAgIGNvbnN0
IFRleHRQYWludFN0eWxlJiwgY29uc3QgU2hhZG93RGF0YSopOwogCiAgICAgR3JhcGhpY3NDb250
ZXh0JiBtX2NvbnRleHQ7CkBAIC03NiwxMSArNzYsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBT
aGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRvdyB7IG51bGxwdHIgfTsKICAgICBBdG9taWNTdHJp
bmcgbV9lbXBoYXNpc01hcms7CiAgICAgUmVuZGVyQ29tYmluZVRleHQqIG1fY29tYmluZWRUZXh0
IHsgbnVsbHB0ciB9OwotICAgIGludCBtX2VtcGhhc2lzTWFya09mZnNldCB7IDAgfTsKKyAgICBm
bG9hdCBtX2VtcGhhc2lzTWFya09mZnNldCB7IDAgfTsKICAgICBib29sIG1fdGV4dEJveElzSG9y
aXpvbnRhbCB7IHRydWUgfTsKIH07CiAKLWlubGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBo
YXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09m
ZnNldCwgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCkKK2lubGluZSB2b2lkIFRleHRQ
YWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxv
YXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KQog
ewogICAgIG1fZW1waGFzaXNNYXJrID0gZW1waGFzaXNNYXJrOwogICAgIG1fZW1waGFzaXNNYXJr
T2Zmc2V0ID0gZW1waGFzaXNNYXJrT2Zmc2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5kZXggOTcxMzNlMTBjMGQ0MzZl
MjkyOTI5Njk0MjZmNTE0MmIxZWZmMjIyZi4uZTM3ZmY2MTBlOWM3M2NhZTY3NjUwN2RkMGMwZGJm
YTNkNzI2ZGZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0xMTYsMjIgKzExNiwyMyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SW5saW5lVGV4dEJveD4gUmVuZGVyU1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiAg
ICAgcmV0dXJuIFdURk1vdmUoYm94KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlv
dXRVbml0KikKK0xheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKIHsKICAg
ICBpZiAoIWlzPElubGluZVRleHRCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CiAKICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7
Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LnN0
YXJ0KCkgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0KSA+IHRleHRCb3guc3Rh
cnQoKSArIHRleHRCb3gubGVuKCkpCisgICAgaWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFy
dCgpIHx8IGNhcmV0T2Zmc2V0ID4gdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkKICAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIC8vIFVzZSB0aGUgZWRnZSBvZiB0aGUg
c2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJtaW5lIHRoZSBjYXJldCByZWN0LgotICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpIDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJv
eC5sZW4oKSkgeworICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRCb3guc3RhcnQoKSArIHRleHRC
b3gubGVuKCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0gdGV4dEJveC5sb2NhbFNlbGVj
dGlvblJlY3QoY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0ICsgMSk7CiAgICAgICAgIExheW91dFVu
aXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC54KCkgOiByZWN0
Lm1heFgoKTsKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lk
dGgsIHJlY3QuaGVpZ2h0KCkpOwogICAgIH0KIAorICAgIEFTU0VSVChjYXJldE9mZnNldCA+IDAp
OwogICAgIExheW91dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0
T2Zmc2V0IC0gMSwgY2FyZXRPZmZzZXQpOwogICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC5tYXhYKCkgOiByZWN0LngoKTsKICAgICByZXR1
cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5o
CmluZGV4IDc0Njc3M2JkOTJkZWM5MThkOTdkMWYzMzQ0ZmUzMWUwNDdjYzg1M2QuLjk5OThmZTFh
ZjY2NDljMzZjNDZhNjMxZGFlMDgyN2QxZjNmMWNhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCkBAIC02MCw3ICs2MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopIG92ZXJyaWRlOwotICAgIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKICAgICBJbnRSZWN0IGxp
bmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5s
aW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBhNGY0MTlmZDZh
OGY5YjRjZmQ4NThiZDMyY2ZkMGQ1M2E4YTQ4OTUwLi43NTE1NWM4MjcyMzdmMGVmNDA3YTM4ZmE2
ODBiMTEzNTA1ODUzMDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTEwMCwxNCArMTAwLDE0IEBAIGludCBTVkdJbmxpbmVU
ZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiBmcmFnbWVuCiAgICAgcmV0dXJuIGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCAtIHN0YXJ0KCkg
KyByZW5kZXJlcigpLnNjYWxlZEZvbnQoKS5vZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCBwb3Np
dGlvbiAqIHNjYWxpbmdGYWN0b3IsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQg
U1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50KSBjb25zdAorZmxvYXQgU1ZH
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQpIGNvbnN0CiB7CiAgICAg
Ly8gU1ZHIGRvZXNuJ3QgdXNlIHRoZSBvZmZzZXQgPC0+IHBvc2l0aW9uIHNlbGVjdGlvbiBzeXN0
ZW0uIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCi1GbG9h
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25z
dCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBv
c2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJh
Z21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3Np
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAg
QVNTRVJUKHN0eWxlKTsKQEAgLTEzNCwxMSArMTM0LDEwIEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYKICAgICByZXR1cm4gc25hcHBlZFNlbGVjdGlvblJlY3Q7CiB9CiAKLUxheW91dFJlY3QgU1ZH
SW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQg
ZW5kUG9zaXRpb24pIGNvbnN0CitMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2Vs
ZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikg
Y29uc3QKIHsKLSAgICBpbnQgYm94U3RhcnQgPSBzdGFydCgpOwotICAgIHN0YXJ0UG9zaXRpb24g
PSBzdGQ6Om1heChzdGFydFBvc2l0aW9uIC0gYm94U3RhcnQsIDApOwotICAgIGVuZFBvc2l0aW9u
ID0gc3RkOjptaW4oZW5kUG9zaXRpb24gLSBib3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4o
KSkpOworICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KHN0YXJ0UG9zaXRpb24pOwor
ICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChlbmRQb3NpdGlvbik7CiAgICAgaWYgKHN0
YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKQEAgLTE0Niw4ICsxNDUsOCBAQCBMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2Fs
U2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aQogCiAgICAgQWZm
aW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25S
ZWN0OwotICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBmcmFnbWVu
dEVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAw
OworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogCiAgICAgdW5zaWduZWQg
dGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRGcmFnbWVudHMuc2l6ZSgpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CkBAIC0yMDMsMTIgKzIw
MiwxMiBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQ
YWludEluZm8mIHBhaW50SW5mbykKIAogICAgIGF1dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIu
c3R5bGUoKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbjsK
KyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uOwog
ICAgIHN0ZDo6dGllKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSA9IHNlbGVjdGlvblN0YXJ0
RW5kKCk7CiAKLSAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZnJh
Z21lbnRFbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9u
ID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1Np
emUgPSBtX3RleHRGcmFnbWVudHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CkBAIC00MDcsMjEgKzQwNiwyNCBAQCBUZXh0UnVu
IFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBTVkdUZQogICAgIHJldHVybiBydW47CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4
dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9z
aXRpb24pIGNvbnN0Citib29sIFNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25z
SW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwg
dW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsK
ICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaW50IG9mZnNldCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQuY2hhcmFj
dGVyT2Zmc2V0KSAtIHN0YXJ0KCk7Ci0gICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4o
ZnJhZ21lbnQubGVuZ3RoKTsKKyAgICBBU1NFUlQoZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0ID49
IHN0YXJ0KCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9IGZyYWdtZW50LmNoYXJhY3Rlck9mZnNl
dCAtIHN0YXJ0KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZnJhZ21lbnQubGVuZ3RoOwogCiAg
ICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gb2Zmc2V0ICsgbGVuZ3RoIHx8IGVuZFBvc2l0aW9uIDw9
IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24g
PCBvZmZzZXQpCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGVsc2UKKyAgICBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPj0gb2Zmc2V0KTsKICAgICAgICAgc3Rh
cnRQb3NpdGlvbiAtPSBvZmZzZXQ7CisgICAgfQogCiAgICAgaWYgKGVuZFBvc2l0aW9uID4gb2Zm
c2V0ICsgbGVuZ3RoKQogICAgICAgICBlbmRQb3NpdGlvbiA9IGxlbmd0aDsKQEAgLTU0MCw3ICs1
NDIsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFRleHREZQogICAgICAgICByZWxlYXNlUGFpbnRpbmdS
ZXNvdXJjZShjb250ZXh0UHRyLCAmcGF0aCk7CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pCit2b2lkIFNWR0lu
bGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBl
bmRQb3NpdGlvbikKIHsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5zY2Fs
aW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdGYWN0b3IpOwpAQCAtNTkwLDggKzU5Miw4
IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NF
UlQoc2VsZWN0aW9uU3R5bGUpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGlu
dCBlbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CisgICAg
dW5zaWduZWQgZW5kUG9zaXRpb24gPSAwOwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKICAgICAg
ICAgc3RkOjp0aWUoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pID0gc2VsZWN0aW9uU3RhcnRF
bmQoKTsKICAgICAgICAgaGFzU2VsZWN0aW9uID0gbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwpA
QCAtNjE4LDcgKzYyMCw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0CiAgICAgICAgIFNWR1Jl
c291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQocGFyZW50KCktPnJlbmRlcmVyKCksIFN0
eWxlRGlmZmVyZW5jZVJlcGFpbnQsICpzdHlsZSk7CiAKICAgICAvLyBFdmVudHVhbGx5IGRyYXcg
dGV4dCB1c2luZyByZWd1bGFyIHN0eWxlIGZyb20gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc2Vs
ZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY2h1bmsgcGFydAotICAgIGlmIChlbmRQ
b3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQubGVuZ3RoKSAmJiAhcGFpbnRTZWxl
Y3RlZFRleHRPbmx5KQorICAgIGlmIChlbmRQb3NpdGlvbiA8IGZyYWdtZW50Lmxlbmd0aCAmJiAh
cGFpbnRTZWxlY3RlZFRleHRPbmx5KQogICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250
ZXh0LCBzdHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIGVuZFBvc2l0aW9uLCBmcmFnbWVudC5sZW5n
dGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oCmluZGV4IGM4ZmQxNDg4OGI0NjIzNDI1MTNhZTk3MDk5Yjc3NjA5NjNiYjE4MjcuLjFl
MzJhNDIyMjk0ZTU2MzljYjMyZmVhNTk5M2RmMGQ0MzI1ZGU4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCkBAIC00MywxMyArNDMsMTMg
QEAgcHVibGljOgogICAgIGludCBzZWxlY3Rpb25Ub3AoKSB7IHJldHVybiB0b3AoKTsgfQogICAg
IGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1f
bG9naWNhbEhlaWdodCkpOyB9CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgsIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdCBvdmVycmlkZTsKLSAgICBmbG9h
dCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICBmbG9h
dCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJik7CiAgICAgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsU2Vs
ZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29s
IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsK
KyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBl
bmRQb3NpdGlvbikgY29uc3Q7CiAKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygp
IGNvbnN0IG92ZXJyaWRlOwogCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5ld1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRD
aHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5GcmFn
bWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0
RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlv
biwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7Cisg
ICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiwgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFnbWVu
dEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYWludERlY29yYXRpb24o
R3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYp
OwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCYsIFRl
eHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZv
aWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5
bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pOwogICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlv
blN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHkpOwogCiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3Bw
CmluZGV4IGZmMzY2NzcxNzE1MzE1OGY2NzYyODc3YTk4ODA4ODBiMmVjMGQ3ZWUuLjkzMzBhYWEx
YzcxMWRhZTUxNjgyYmNiMzkzNjE1M2IyYjE0ZmM5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKQEAgLTEzNCwxMyArMTM0LDE1IEBAIGJvb2wg
U1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnkoRGF0YSogcXVlcnlEYXRhLCBQcm9jZXNzVGV4dEZy
YWdtZW50Q2FsbGJhY2sgZnJhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR1RleHRR
dWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3Np
dGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVu
c2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICAvLyBSZXVzZSB0aGUgc2FtZSBsb2dp
YyB1c2VkIGZvciB0ZXh0IHNlbGVjdGlvbiAmIHBhaW50aW5nLCB0byBtYXAgb3VyIHF1ZXJ5IHN0
YXJ0L2xlbmd0aCBpbnRvIHN0YXJ0L2VuZFBvc2l0aW9ucyBvZiB0aGUgY3VycmVudCB0ZXh0IGZy
YWdtZW50LgorICAgIEFTU0VSVChzdGFydFBvc2l0aW9uID49IHF1ZXJ5RGF0YS0+cHJvY2Vzc2Vk
Q2hhcmFjdGVycyk7CisgICAgQVNTRVJUKGVuZFBvc2l0aW9uID49IHF1ZXJ5RGF0YS0+cHJvY2Vz
c2VkQ2hhcmFjdGVycyk7CiAgICAgc3RhcnRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3Nl
ZENoYXJhY3RlcnM7CiAgICAgZW5kUG9zaXRpb24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFy
YWN0ZXJzOwogCi0gICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24gfHwgc3RhcnRQ
b3NpdGlvbiA8IDAgfHwgZW5kUG9zaXRpb24gPCAwKQorICAgIGlmIChzdGFydFBvc2l0aW9uID49
IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtb2RpZnlTdGFydEVu
ZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMocXVlcnlEYXRhLCBzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbik7CkBAIC0xNTEsNyArMTUzLDcgQEAgYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaW50JiBzdGFydFBv
c2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAordm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlm
eVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIHVu
c2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAg
ICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGxheW91dEF0dHJpYnV0ZXMgPSBxdWVyeURhdGEt
PnRleHRSZW5kZXJlci0+bGF5b3V0QXR0cmlidXRlcygpOwogICAgIFZlY3RvcjxTVkdUZXh0TWV0
cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0gbGF5b3V0QXR0cmlidXRlcy0+dGV4dE1ldHJpY3NW
YWx1ZXMoKTsKQEAgLTE2Nyw3ICsxNjksNyBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3Rh
cnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAg
IGJvb2wgYWx0ZXJTdGFydFBvc2l0aW9uID0gdHJ1ZTsKICAgICBib29sIGFsdGVyRW5kUG9zaXRp
b24gPSB0cnVlOwogCi0gICAgaW50IGxhc3RQb3NpdGlvbk9mZnNldCA9IC0xOworICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBsYXN0UG9zaXRpb25PZmZzZXQ7CiAgICAgZm9yICg7IHRleHRNZXRyaWNz
T2Zmc2V0IDwgdGV4dE1ldHJpY3NTaXplICYmIHBvc2l0aW9uT2Zmc2V0IDwgcG9zaXRpb25TaXpl
OyArK3RleHRNZXRyaWNzT2Zmc2V0KSB7CiAgICAgICAgIFNWR1RleHRNZXRyaWNzJiBtZXRyaWNz
ID0gdGV4dE1ldHJpY3NWYWx1ZXNbdGV4dE1ldHJpY3NPZmZzZXRdOwogCkBAIC0xODIsMjEgKzE4
NCwyMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0
aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgLy8gSWYgdGhlIHN0YXJ0IHBvc2l0aW9uIG1hcHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhl
IG1ldHJpY3MgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0byBtb2RpZnkgaXQuCi0gICAgICAgIGlmIChz
dGFydFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbk9mZnNldCkKICAgICAgICAgICAgIGFsdGVy
U3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogCiAgICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlv
biBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQg
dG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gc3RhdGljX2Nhc3Q8aW50
Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PSBwb3NpdGlvbk9m
ZnNldCkKICAgICAgICAgICAgIGFsdGVyRW5kUG9zaXRpb24gPSBmYWxzZTsKIAogICAgICAgICAv
LyBEZXRlY3QgbGlnYXR1cmVzLgotICAgICAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0x
ICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgewotICAgICAgICAg
ICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9u
T2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0
KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7
CisgICAgICAgIGlmIChsYXN0UG9zaXRpb25PZmZzZXQgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0LnZh
bHVlKCkgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKKyAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0
UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYm
IHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgeworICAgICAgICAgICAgICAgIHN0YXJ0
UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKTsKICAgICAgICAgICAgICAgICBh
bHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
aWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQg
JiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgeworICAg
ICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRp
b25PZmZzZXQudmFsdWUoKSAmJiBlbmRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAg
ICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwb3NpdGlvbk9mZnNldDsKICAgICAgICAgICAgICAg
ICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0yMTIsMTEgKzIx
NCwxMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0
aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAgIGlmICghYWx0ZXJTdGFydFBvc2l0
aW9uICYmICFhbHRlckVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGFz
dFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zm
c2V0ID4gMSkgewotICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRp
b24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgc3RhcnRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb25PZmZzZXQpKQotICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQb3Np
dGlvbk9mZnNldDsKKyAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGxhc3RQb3NpdGlvbk9m
ZnNldC52YWx1ZSgpIC0gcG9zaXRpb25PZmZzZXQgPiAxKSB7CisgICAgICAgIGlmIChhbHRlclN0
YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgp
ICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkKKyAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKTsKIAotICAgICAgICBpZiAoYWx0ZXJF
bmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBlbmRQb3Np
dGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoYWx0
ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgp
ICYmIGVuZFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBlbmRQb3NpdGlv
biA9IHBvc2l0aW9uT2Zmc2V0OwogICAgIH0KIH0KQEAgLTI4NCw4ICsyODYsOCBAQCBib29sIFNW
R1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhZ21lbgogewogICAgIFN1YlN0cmluZ0xlbmd0aERhdGEqIGRhdGEgPSBzdGF0
aWNfY2FzdDxTdWJTdHJpbmdMZW5ndGhEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFy
dFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uICsgZGF0YS0+bGVuZ3RoOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24g
PSBkYXRhLT5zdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQ
b3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMxOSw4ICszMjEsOCBA
QCBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0
YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZQogewogICAgIFN0YXJ0UG9zaXRpb25PZkNoYXJhY3Rl
ckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4o
cXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0g
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0g
c3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNjgsOCArMzcwLDggQEAgYm9v
bCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVy
eURhdGEsIGNvbnN0IFNWR1RleHQKIHsKICAgICBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSog
ZGF0YSA9IHN0YXRpY19jYXN0PEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRh
KTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVu
ZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlv
biA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MTYsOCArNDE4LDggQEAgYm9vbCBTVkdUZXh0
UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0
IFNWR1RleHRGcmEKIHsKICAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRp
Y19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBz
dGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3Rh
cnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0
aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAg
aWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0
YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC00NTQsNyArNDU2LDcgQEAgc3RydWN0IEV4dGVudE9mQ2hhcmFjdGVyRGF0
YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAgICAgRmxvYXRSZWN0IGV4dGVudDsKIH07CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1ZXJ5OjpE
YXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFy
dFBvc2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxh
dGVHbHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1ZXJ5OjpEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNW
R1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVj
dCYgZXh0ZW50KQogewogICAgIGZsb2F0IHNjYWxpbmdGYWN0b3IgPSBxdWVyeURhdGEtPnRleHRS
ZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAg
LTQ4NCw4ICs0ODYsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxs
YmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbQogewogICAgIEV4dGVudE9m
Q2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEV4dGVudE9mQ2hhcmFjdGVyRGF0YSo+
KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwot
ICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0
YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9
IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTE5LDggKzUyMSw4IEBAIGJv
b2wgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2FsbGJhY2soRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdUCiAKICAgICBGbG9hdFJlY3QgZXh0ZW50OwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudC5sZW5ndGg7ICsraSkgewotICAgICAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMgKyBpOwotICAgICAgICBp
bnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMgKyBpOworICAgICAgICB1bnNp
Z25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgICAgICBpZiAoIW1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVu
dCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICAgICAgY29udGludWU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCmluZGV4IDcyMWIy
ZGY4ZTMzMjQ1ZGE4NjQzMzg1YmU2ZWUyYjFkMmIwOTM4ZGYuLjM4NzMwYTM4ZDA2MWU4MjVjZDkz
N2Q3ODE4NGI4ZDNiM2ZhMGZhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UXVlcnkuaApAQCAtNTIsOCArNTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhlY3V0
ZVF1ZXJ5KERhdGEqLCBQcm9jZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2spIGNvbnN0OwogCiAgICAg
dm9pZCBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KElubGluZUZsb3dCb3gqKTsKLSAgICBib29s
IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikg
Y29uc3Q7Ci0gICAgdm9pZCBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVy
ZXMoRGF0YSosIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7Cisg
ICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEq
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWdu
ZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25z
UmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2ln
bmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBudW1iZXJPZkNo
YXJhY3RlcnNDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285851</attachid>
            <date>2016-08-11 13:47:07 -0700</date>
            <delta_ts>2016-08-11 14:20:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160735-20160811134535.patch</filename>
            <type>text/plain</type>
            <size>140305</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0Mzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ0MzAwYTQwN2UxNGYx
MTExMTY1NzIyYjY1ODk0ZDI1YjFhY2YwZC4uYmZhODA0YzhkZWYxZGYzOTkzNmFmNWYwYWFhOGVj
ZjEyNzY0ZTZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NCBAQAorMjAxNi0wOC0xMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
cmUgYXJlIGEgZmV3IGNhc2VzIHdoZXJlIHdlIHVzZSBpbnRzIHRvIHJlZmVyIHRvIGluZGljZXMg
aW50byBzdHJpbmdzOgorICAgICAgICAtIEEgc2ltcGxlIGhpc3RvcmljYWwgYWNjaWRlbnQuIFRo
ZXNlIHdlcmUgbWlncmF0ZWQgdG8gdW5zaWduZWRzIGRpcmVjdGx5LgorICAgICAgICAtIFdoZXJl
IHdlIHVzZSAtMSBhcyBhIHNlbnRpbmFsIHZhbHVlLiBUaGVzZSB3ZXJlIG1pZ3JhdGVkIHRvIE9w
dGlvbmFsPHVuc2lnbmVkPi4KKworICAgICAgICBUaGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgcmVu
ZGVyaW5nIGNvZGUgKHJhdGhlciB0aGFuIERPTSBjb2RlKS4gVGhlcmUgYXJlIGEgZmV3CisgICAg
ICAgIHBsYWNlcyBpbiBET00gY29kZSAoc3VjaCBhcyBQb3NpdGlvbiBhbmQgTm9kZTo6bWF4Q2hh
cmFjdGVyT2Zmc2V0KCkpIHdoaWNoIGFsc28KKyAgICAgICAgZXJyb25lb3VzbHkgdXNlIGludHM7
IGhvd2V2ZXIsIEkgZGlkbid0IHdhbnQgdGhpcyBjaGFuZ2UgdG8gYmUgb2JzZXJ2YWJsZSBmcm9t
CisgICAgICAgIHNjcmlwdCBhbmQgSSB3YW50ZWQgdG8ga2VlcCB0aGlzIHBhdGNoIHRvIGEgcmVh
c29uYWJsZSBzaXplLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5v
IGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldENhcmV0VmlzaWJpbGl0eSk6Cisg
ICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVVbmRlcmxpbmVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6Om9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6
c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHbHlw
aEJ1ZmZlcjo6Zm9udEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpnbHlwaEF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlQXQpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhCdWZmZXI6Om9mZnNldEF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBo
QnVmZmVyOjpyZXZlcnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRJ
blN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c2hyaW5rKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpzd2FwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdH
bHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNN
YXJrcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmg6CisgICAgICAg
IChXZWJDb3JlOjpMYXRpbjFUZXh0SXRlcmF0b3I6OkxhdGluMVRleHRJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXRpbjFUZXh0SXRlcmF0b3I6OmN1cnJlbnRDaGFyYWN0ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OlN1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpT
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OmN1cnJlbnRDaGFyYWN0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
dGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlT25lQ2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdHbHlwaHNUb0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd0dseXBoc1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgorICAgICAgICAo
V2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRD
YXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBl
cjo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6aXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2xhbXBlZE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
b2Zmc2V0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OklubGluZVRleHRC
b3gpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGluZUJyZWFr
Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpsb2Nh
bENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0
aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZp
ZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNwbGl0U2Vs
ZWN0aW9uQmV0d2VlblN1YnRyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNs
ZWFyU3VidHJlZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjphcHBs
eVN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Z2V0U2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVj
dGlvblN1YnRyZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjphZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rp
b25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25FbmRQb3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpzZWxlY3Rpb25DbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2V0U2VsZWN0aW9uU3RhcnRQb3MpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZXRTZWxlY3Rpb25FbmRQb3Mp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6T2xkU2VsZWN0aW9uRGF0YTo6T2xkU2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRQYWludGVyOjpkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4
dFBhaW50ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQYWludGVyOjphZGRFbXBoYXNpcyk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVu
ZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3RlckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZUdseXBoQm91bmRhcmllcyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJBdFBvc2l0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5Lmg6CisKIDIwMTYt
MDgtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgVVJMUGFyc2VyIHN0dWIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKaW5kZXggMzM4MzRhZDA5NmU4MTgyMjUxNmU3ODEzYjJiODBkYzliYjI2ZTJkNC4u
ZTVkN2JmOWM0OGFkYTM4OGJhNjMyODUwODcxMGU0NThlMjA3N2I4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIwODgsOCArMjA4OCwxMSBAQCB2b2lk
IEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKICAgICAvLyBiZWNhdXNlIHdlIGRv
bid0IHlldCBub3RpZnkgdGhlIEZyYW1lU2VsZWN0aW9uIG9mIHRleHQgcmVtb3ZhbC4KICAgICBp
ZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgZW5kUG9zLmlzTm90TnVsbCgpICYmIHNlbGVjdGlv
bi52aXNpYmxlU3RhcnQoKSAhPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB7CiAgICAgICAgIFJl
bmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CisgICAgICAgIGF1dG8gc3RhcnRPZmZzZXQgPSBzdGFydFBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5k
UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIHZpZXctPnNldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
bmRSZW5kZXJlciwgZW5kUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBh
dXRvIGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAg
ICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZp
ZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIs
IGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBAIC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkp
CiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgpID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBs
YXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJv
bm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAobV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0
aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2NiYzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQw
ODQwNmMwLi5iMjBiNzE3MjRiNDRlZjg0MTBmM2Q2YjIyNTFhNjVhYTMzZWE2MTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3Qg
U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAg
IFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlcjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRl
cmVyOwotICAgIGludCBzdGFydE9mZnNldDsKLSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlv
bmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zm
c2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwx
MCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFjawogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25zID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rp
b25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8gU25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQg
OiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5k
ZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7Cisg
ICAgYXV0byBzdGFydE9mZnNldCA9IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Cisg
ICAgYXV0byBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBB
U1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CisgICAgdmlldy0+c2V0
U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRSZW5kZXJlciwgZW5kT2Zm
c2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CiAgICAgLy8gV2UgY2FwdHVyZSB1c2lu
ZyBzbmFwc2hvdEZyYW1lUmVjdCgpIGJlY2F1c2Ugd2UgZmFrZSB1cCB0aGUgc2VsZWN0aW9uIHVz
aW5nCiAgICAgLy8gRnJhbWVWaWV3IGJ1dCBzbmFwc2hvdFNlbGVjdGlvbigpIHVzZXMgdGhlIHNl
bGVjdGlvbiBmcm9tIHRoZSBGcmFtZSBpdHNlbGYuCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFn
ZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9uQm91
bmRzKCksIG9wdGlvbnMpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA0MzgwYjVjMDg1MzJlODIxYWNhYTM0ZWYy
Y2Q3OGI1MTE2NmE1YmI5Li4zODY2OTkxZjA4OGRiMTU5ZDUwY2QzN2JhMmEzMWNiY2I0OTEwY2E0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCkBAIC0yOTQsMTQgKzI5NCwxNCBAQCB2b2lkIEZvbnRDYXNjYWRlOjp1cGRhdGUoUmVmUHRy
PEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpIGNvbnN0CiAgICAgbV9yZXF1aXJlc1NoYXBp
bmcgPSBjb21wdXRlUmVxdWlyZXNTaGFwaW5nKCk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpn
bHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBhdGggY29kZVBhdGhUb1VzZSwgY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpIGNvbnN0
CitmbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRoIGNvZGVQ
YXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8s
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikgY29uc3QKIHsKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSAhPSBDb21wbGV4KQogICAgICAgICByZXR1cm4gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1w
bGVUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyKTsKICAgICByZXR1cm4gZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7CiB9
CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24p
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25l
ZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBj
dXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0CiB7CiAgICAgLy8gRG9uJ3QgZHJhdyBhbnl0
aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRoZSBwcm9j
ZXNzIG9mIGxvYWRpbmcsCiAgICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3VtZW50IGlz
IHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sKQEAgLTMw
OSwxNSArMzA5LDE1IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICBpZiAoaXNMb2FkaW5n
Q3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWludElm
Rm9udE5vdFJlYWR5KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHRvID0gKHRvID09IC0xID8g
cnVuLmxlbmd0aCgpIDogdG8pOworICAgIHVuc2lnbmVkIGRlc3RpbmF0aW9uID0gdG8udmFsdWVP
cihydW4ubGVuZ3RoKCkpOwogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRo
KHJ1bik7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5k
bGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93
ZWJraXQub3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiAo
ZW5hYmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpKSAmJiAoZnJvbSB8fCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odG8pICE9IHJ1bi5sZW5ndGgoKSkpCisgICAgaWYgKGNvZGVQYXRoVG9V
c2UgIT0gQ29tcGxleCAmJiAoZW5hYmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpKSAm
JiAoZnJvbSB8fCBkZXN0aW5hdGlvbiAhPSBydW4ubGVuZ3RoKCkpKQogICAgICAgICBjb2RlUGF0
aFRvVXNlID0gQ29tcGxleDsKIAogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGZs
b2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdseXBoQnVmZmVyRm9yVGV4dFJ1bihjb2RlUGF0aFRv
VXNlLCBydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlcik7CisgICAgZmxvYXQgc3RhcnRYID0gcG9p
bnQueCgpICsgZ2x5cGhCdWZmZXJGb3JUZXh0UnVuKGNvZGVQYXRoVG9Vc2UsIHJ1biwgZnJvbSwg
ZGVzdGluYXRpb24sIGdseXBoQnVmZmVyKTsKICAgICAvLyBXZSBjb3VsZG4ndCBnZW5lcmF0ZSBh
bnkgZ2x5cGhzIGZvciB0aGUgcnVuLiBHaXZlIHVwLgogICAgIGlmIChnbHlwaEJ1ZmZlci5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzI3LDIzICszMjcsMjIgQEAgZmxvYXQgRm9u
dENhc2NhZGU6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdAogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAot
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKSBjb25zdAogewogICAg
IGlmIChpc0xvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
dG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBkZXN0aW5h
dGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRo
VG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBw
YXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVy
ZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0aFRvVXNl
ICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYg
KGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkpKQorICAg
IGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1
aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVuLmxlbmd0aCgpKSkK
ICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBpZiAoY29kZVBhdGhUb1Vz
ZSAhPSBDb21wbGV4KQotICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoY29u
dGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNN
YXJrc0ZvclNpbXBsZVRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgZGVzdGlu
YXRpb24pOwogICAgIGVsc2UKLSAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChjb250ZXh0LCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CisgICAgICAgIGRyYXdFbXBo
YXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwg
ZGVzdGluYXRpb24pOwogfQogCiBmbG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoY29uc3QgVGV4dFJ1
biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxv
dyogZ2x5cGhPdmVyZmxvdykgY29uc3QKQEAgLTQ5MSwxOSArNDkwLDE5IEBAIGJvb2wgRm9udENh
c2NhZGU6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25z
dAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykgY29uc3QKIHsK
LSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKyAgICB1bnNpZ25lZCBk
ZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQYXRoIGNv
ZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3Qg
Y29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBs
aWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChjb2RlUGF0
aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmco
KSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVuZ3RoKCkp
KQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8
fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVuLmxlbmd0
aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBpZiAoY29kZVBh
dGhUb1VzZSAhPSBDb21wbGV4KQotICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZv
clNpbXBsZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CisgICAgICAgIHJldHVy
biBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZy
b20sIGRlc3RpbmF0aW9uKTsKIAotICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCB0byk7CisgICAgcmV0dXJuIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChydW4sIHNlbGVjdGlvblJlY3QsIGZyb20sIGRl
c3RpbmF0aW9uKTsKIH0KIAogaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbihjb25z
dCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0
CkBAIC0xMTIzLDcgKzExMjIsNyBAQCBib29sIEZvbnRDYXNjYWRlOjppc0xvYWRpbmdDdXN0b21G
b250cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9udHMgJiYgbV9mb250cy0+aXNMb2FkaW5nQ3Vz
dG9tRm9udHMoKTsKIH0KICAgICAKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxp
bmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQorR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1
biYgdGV4dFJ1biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBpbmRl
eCkKIHsKICAgICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93
ZXZlciwgc2tpcHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRl
c2lyYWJsZSByZW5kZXJpbmdzLAogICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENK
SyBjaGFyYWN0ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgpAQCAtMTIz
OCw3ICsxMjM3LDcgQEAgaW50IEZvbnRDYXNjYWRlOjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3Qg
QXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRN
ZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRv
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRF
bXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0
RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CiAKQEAgLTEyNjgs
NyArMTI2Nyw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNp
bXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvCiAgICAgcmV0dXJuIGluaXRpYWxB
ZHZhbmNlOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBs
ZVRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBs
ZVRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwog
ICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVU
ZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTI4
Nyw4ICsxMjg2LDggQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImIGcKICAgICBGbG9hdFBvaW50IHN0
YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5j
ZSgpLmhlaWdodCgpKTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhC
dWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50
LnkoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQoKTsKLSAgICBpbnQgbGFzdEZy
b20gPSAwOwotICAgIGludCBuZXh0R2x5cGggPSAxOworICAgIHVuc2lnbmVkIGxhc3RGcm9tID0g
MDsKKyAgICB1bnNpZ25lZCBuZXh0R2x5cGggPSAxOwogICAgIHdoaWxlIChuZXh0R2x5cGggPCBn
bHlwaEJ1ZmZlci5zaXplKCkpIHsKICAgICAgICAgY29uc3QgRm9udCogbmV4dEZvbnREYXRhID0g
Z2x5cGhCdWZmZXIuZm9udEF0KG5leHRHbHlwaCk7CiAgICAgICAgIEZsb2F0U2l6ZSBuZXh0T2Zm
c2V0ID0gZ2x5cGhCdWZmZXIub2Zmc2V0QXQobmV4dEdseXBoKTsKQEAgLTEzMjEsNyArMTMyMCw3
IEBAIGlubGluZSBzdGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGNvbnN0IEZvbnQq
IGZvbnREYXRhLCBHbHlwaCBnbHlwaCkKICAgICByZXR1cm4gZm9udERhdGEtPndpZHRoRm9yR2x5
cGgoZ2x5cGgpIC8gMjsKIH0KIAotaW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01pZGRsZU9m
R2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgc2l6ZV90IGkpCitp
bmxpbmUgc3RhdGljIGZsb2F0IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBpKQogewogICAgIHJldHVybiBvZmZzZXRU
b01pZGRsZU9mR2x5cGgoZ2x5cGhCdWZmZXIuZm9udEF0KGkpLCBnbHlwaEJ1ZmZlci5nbHlwaEF0
KGkpKTsKIH0KQEAgLTEzNDQsNyArMTM0Myw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBo
YXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhCdWZmZXImCiAg
ICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0g
b2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgp
KTsKIAogICAgIEdseXBoQnVmZmVyIG1hcmtCdWZmZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
KyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGZsb2F0IG1pZGRs
ZU9mTmV4dEdseXBoID0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwg
aSArIDEpOwogICAgICAgICBmbG9hdCBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkp
LndpZHRoKCkgLSBtaWRkbGVPZkxhc3RHbHlwaCArIG1pZGRsZU9mTmV4dEdseXBoOwogICAgICAg
ICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpID8gbWFya0dseXBoIDogc3Bh
Y2VHbHlwaCwgbWFya0ZvbnREYXRhLCBhZHZhbmNlKTsKQEAgLTEzNzEsNyArMTM3MCw3IEBAIGZs
b2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIEhhc2hTZXQ8Y29uc3QgRm9uCiAgICAgcmV0dXJuIGl0Lm1fcnVuV2lkdGhTb0ZhcjsKIH0K
IAotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1
ZmZlcjsKICAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCBjNmQwYzI1OThlZDE2MzFi
ZTYxNmU3ZDc4YmQzMjY1MGM2NmNjMWRhLi44YmRjY2E4MDcyMmUyNTk5YjgxNDUxNmYyODZjMGI0
MTQxNmQ4ODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmgKQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2UoKSA9IDA7CiAgICAgdmlydHVhbCB+R2x5cGhUb1BhdGhUcmFuc2xhdG9yKCkgeyB9CiB9
OwotR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVy
bGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGluZGV4KTsK
K0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxp
bmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGluZGV4
KTsKIAogY2xhc3MgVGV4dExheW91dERlbGV0ZXIgewogcHVibGljOgpAQCAtMTMzLDkgKzEzMyw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKSBjb25z
dDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9u
dE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07Ci0gICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHN0YXRpYyB2
b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
ID0gTnVsbG9wdCwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKKyAgICBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gTnVsbG9wdCkgY29uc3Q7CiAKICAgICBE
YXNoQXJyYXkgZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRz
KSBjb25zdDsKIApAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQg
d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxj
b25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20gPSAwLCBP
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0KSBjb25zdDsKIAogICAgIGJvb2wgaXNTbWFs
bENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi52YXJpYW50Q2FwcygpID09
IEZvbnRWYXJpYW50Q2Fwczo6U21hbGw7IH0KIApAQCAtMjE4LDE1ICsyMTgsMTUgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBlbnVtIEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVt
cGhhc2lzLCBGb3JUZXh0RW1waGFzaXMgfTsKIAotICAgIGZsb2F0IGdseXBoQnVmZmVyRm9yVGV4
dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJikgY29uc3Q7CisgICAgZmxvYXQgZ2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRoLCBj
b25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJikg
Y29uc3Q7CiAgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1zdHJlYW0gYWR2YW5jZS4KLSAg
ICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYs
IGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBO
b3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JT
aW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
KyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBo
YXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR2x5cGhCdWZmZXIm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxv
YXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3Qg
Rm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBh
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCiAgICAg
T3B0aW9uYWw8R2x5cGhEYXRhPiBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWlj
U3RyaW5nJikgY29uc3Q7CiAKQEAgLTIzNCwxMSArMjM0LDExIEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGJvb2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKIAogICAg
IC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20s
IGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRF
bXBoYXNpcykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1h
cmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9h
dCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5v
dCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJr
c0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBB
dG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bykgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBo
T3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIHN0YXRpYyBzdGQ6OnBhaXI8dW5zaWduZWQsIGJv
b2w+IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnRJbnRlcm5hbChjb25zdCBMQ2hhciosIHNpemVf
dCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIEV4cGFuc2lvbkJlaGF2aW9yKTsKICAgICBzdGF0aWMg
c3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50SW50ZXJu
YWwoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBhbnNpb25C
ZWhhdmlvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
bHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZm
ZXIuaAppbmRleCBjODJhZjM5MDg0NGY1ZDI3ZTJlNjA0NzlkOWJkN2ViNDkxZDA3OWRiLi41NjM1
NDBjMGU3NDM5ZTI0NDg2NDEzZTA2Yjk0NzhiMWM3OGNjZDk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKQEAgLTc3LDcgKzc3LDcgQEAgdHlw
ZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogY2xhc3MgR2x5cGhCdWZmZXIgewog
cHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pc0VtcHR5
KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5zaXplKCk7IH0KKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnNpemUoKTsgfQogICAgIAog
ICAgIHZvaWQgY2xlYXIoKQogICAgIHsKQEAgLTkxLDEyICs5MSwxMiBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICB9CiAKLSAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIHsgcmV0
dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzKGludCBmcm9tKSB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KLSAg
ICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJu
IG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2Uq
IGFkdmFuY2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZy
b207IH0KKyAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHModW5zaWduZWQgZnJvbSkgeyByZXR1
cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQorICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXModW5zaWduZWQgZnJvbSkgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9
CisgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKHVuc2lnbmVkIGZyb20pIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KKyAgICBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fYWR2YW5j
ZXMuZGF0YSgpICsgZnJvbTsgfQogCi0gICAgY29uc3QgRm9udCogZm9udEF0KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQorICAgIGNvbnN0IEZvbnQqIGZvbnRBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQogCiAgICAgdm9p
ZCBzZXRJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UgaW5pdGlhbEFkdmFuY2UpIHsg
bV9pbml0aWFsQWR2YW5jZSA9IGluaXRpYWxBZHZhbmNlOyB9CiAgICAgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlJiBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbEFkdmFu
Y2U7IH0KQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMZWFkaW5nRXhw
YW5zaW9uKGZsb2F0IGxlYWRpbmdFeHBhbnNpb24pIHsgbV9sZWFkaW5nRXhwYW5zaW9uID0gbGVh
ZGluZ0V4cGFuc2lvbjsgfQogICAgIGZsb2F0IGxlYWRpbmdFeHBhbnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX2xlYWRpbmdFeHBhbnNpb247IH0KICAgICAKLSAgICBHbHlwaCBnbHlwaEF0KGludCBp
bmRleCkgY29uc3QKKyAgICBHbHlwaCBnbHlwaEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAg
IHsKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF0uaW5kZXg7
CkBAIC0xMTMsMTIgKzExMywxMiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UgYWR2YW5jZUF0KGludCBpbmRleCkgY29uc3QKKyAgICBHbHlwaEJ1ZmZl
ckFkdmFuY2UgYWR2YW5jZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwogICAgIH0KIAotICAgIEZsb2F0U2l6ZSBvZmZzZXRB
dChpbnQgaW5kZXgpIGNvbnN0CisgICAgRmxvYXRTaXplIG9mZnNldEF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAogICAgIHsKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIHJldHVybiBtX29mZnNl
dHNbaW5kZXhdOwpAQCAtMTgwLDkgKzE4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAot
ICAgIHZvaWQgcmV2ZXJzZShpbnQgZnJvbSwgaW50IGxlbmd0aCkKKyAgICB2b2lkIHJldmVyc2Uo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQg
aSA9IGZyb20sIGVuZCA9IGZyb20gKyBsZW5ndGggLSAxOyBpIDwgZW5kOyArK2ksIC0tZW5kKQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3RoIC0gMTsg
aSA8IGVuZDsgKytpLCAtLWVuZCkKICAgICAgICAgICAgIHN3YXAoaSwgZW5kKTsKICAgICB9CiAK
QEAgLTE5OCwxNCArMTk4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV9vZmZzZXRzSW5TdHJpbmcu
cmVzZXQobmV3IFZlY3Rvcjx1bnNpZ25lZCwgMjA0OD4oKSk7CiAgICAgfQogCi0gICAgLy8gRklY
TUU6IFRoaXMgY29udmVydHMgZnJvbSBhbiB1bnNpZ25lZCB0byBhbiBpbnQKLSAgICBpbnQgb2Zm
c2V0SW5TdHJpbmcoaW50IGluZGV4KSBjb25zdAorICAgIGludCBvZmZzZXRJblN0cmluZyh1bnNp
Z25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29mZnNldHNJblN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiAoKm1fb2Zmc2V0c0luU3RyaW5nKVtpbmRleF07CiAgICAgfQog
Ci0gICAgdm9pZCBzaHJpbmsoaW50IHRydW5jYXRpb25Qb2ludCkKKyAgICB2b2lkIHNocmluayh1
bnNpZ25lZCB0cnVuY2F0aW9uUG9pbnQpCiAgICAgewogICAgICAgICBtX2ZvbnQuc2hyaW5rKHRy
dW5jYXRpb25Qb2ludCk7CiAgICAgICAgIG1fZ2x5cGhzLnNocmluayh0cnVuY2F0aW9uUG9pbnQp
OwpAQCAtMjE4LDcgKzIxNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBzd2FwKGludCBpbmRleDEsIGludCBpbmRleDIpCisgICAgdm9pZCBzd2FwKHVuc2lnbmVkIGlu
ZGV4MSwgdW5zaWduZWQgaW5kZXgyKQogICAgIHsKICAgICAgICAgY29uc3QgRm9udCogZiA9IG1f
Zm9udFtpbmRleDFdOwogICAgICAgICBtX2ZvbnRbaW5kZXgxXSA9IG1fZm9udFtpbmRleDJdOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAKaW5kZXggYWYxOTEyMjcwMzRlYWMxNjBiZTNmYjJhMDZmNmQ0ZGUzYmZmMjdlZS4uZWRm
NjA1MzhiODkzMGJlMGI4OTc5OTlhNWU0MzEwYzc1MGE0NzcyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC02MzYs
NyArNjM2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
ICAgICAtLW1fdHJhbnNwYXJlbmN5Q291bnQ7CiB9CiAKLWZsb2F0IEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pCitmbG9hdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNp
Z25lZD4gdG8pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IDA7CkBAIC02NDUsNyArNjQ1LDcgQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb24KICAgICByZXR1
cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250Q2FzY2FkZSYgZm9udENhc2Nh
ZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBidWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC02NTgsNyArNjU4LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNj
YWRlLCBjb25zdCBGb250JiBmb24KICAgICBmb250Q2FzY2FkZS5kcmF3R2x5cGhzKCp0aGlzLCBm
b250LCBidWZmZXIsIGZyb20sIG51bUdseXBocywgcG9pbnQsIGZvbnRDYXNjYWRlLmZvbnREZXNj
cmlwdGlvbigpLmZvbnRTbW9vdGhpbmcoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9w
dGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCmluZGV4IDM4OTM0MDY2NDkzNDg5NDY0MGMzMzZkYmIyMmVlMThmYTZi
MmE1YWYuLmE2ZTZmYjAzYzJiZGIwMDdmMWE2YjgwMTYwOTdjZGY2YjM4NzhiNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBA
IC0zODEsOSArMzgxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRl
eHREcmF3aW5nTW9kZUZsYWdzKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2lu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQogCi0gICAg
ZmxvYXQgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpOwotICAgIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdm9pZCBk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKTsKKyAgICBmbG9hdCBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFs
PHVuc2lnbmVkPiB0byA9IE51bGxvcHQpOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgZHJhd0Vt
cGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9w
dGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQpOwogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNv
bnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250
Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFp
bnRJZkZvbnROb3RSZWFkeSk7CiAKICAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0xhdGluMVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKaW5kZXggYzQwMTg5YmZlOTMzMmEwZGViNDA2NDNjMTRk
MWUyODA3N2RhZDM4OS4uNmI3ZTU5OWQwMDIzZjk4YjMyNjA2ODIwOWY5YzYwMjcyNzdlZGJhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0
ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4
dEl0ZXJhdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgTGF0aW4xVGV4dEl0ZXJhdG9yIHsK
IHB1YmxpYzoKICAgICAvLyBUaGUgcGFzc2VkIGluIExDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdj
dXJyZW50Q2hhcmFjdGVyJy4gVGhlIGl0ZXJhdG9yIG9wZXJhdGVzIG9uIHRoZSByYW5nZSBbY3Vy
cmVudENoYXJhY3RlciwgbGFzdENoYXJhY3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVu
b3RlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBl
eGNlZWQgJ2xhc3RDaGFyYWN0ZXInLgotICAgIExhdGluMVRleHRJdGVyYXRvcihjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBp
bnQgLyplbmRDaGFyYWN0ZXIqLykKKyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFy
YWN0ZXIsIHVuc2lnbmVkIC8qZW5kQ2hhcmFjdGVyKi8pCiAgICAgICAgIDogbV9jaGFyYWN0ZXJz
KGNoYXJhY3RlcnMpCiAgICAgICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0
ZXIpCiAgICAgICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFyYWN0ZXIpCkBAIC01MywxMyAr
NTMsMTMgQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxl
bmd0aDsKICAgICB9CiAKLSAgICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudENoYXJhY3RlcjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0KICAgICBjb25zdCBMQ2hhciogY2hh
cmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgogICAg
IGNvbnN0IExDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsK
LSAgICBpbnQgbV9sYXN0Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3Rl
cjsKKyAgICB1bnNpZ25lZCBtX2xhc3RDaGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA5MTU1ZTcxMWE4ZGE4MGQ0ZWIzZGNmNWRhNWFj
MzA1YTI4Y2JlYTc5Li5jZTcwNGJlM2YyMzYwM2M4MmY4OGQxMTVjZGQ2YmVjMGY1NDE2N2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6
OlN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVy
KQorU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0
SXRlcmF0b3IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0
ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIGVuZENoYXJhY3RlcikKICAgICA6
IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJl
bnRDaGFyYWN0ZXIpCiAgICAgLCBtX2xhc3RDaGFyYWN0ZXIobGFzdENoYXJhY3RlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKaW5kZXggODVjOTY5NGM3NmEyMmNkZWFlZWIzYmE4
NDFiMTBhMGE1MDMxNjgxMy4uMWE3MTVjMGNhMmQyNDgzYjI0NzI5OTc1ZWI3NWM5ZmEyMjM2ZWQ0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRl
UGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKQEAgLTMwLDcgKzMwLDcgQEAg
Y2xhc3MgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICAvLyBU
aGUgcGFzc2VkIGluIFVDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50Q2hhcmFjdGVyJy4g
VGhlIGl0ZXJhdG9yIG9wZXJhdG9lcyBvbiB0aGUgcmFuZ2UgW2N1cnJlbnRDaGFyYWN0ZXIsIGxh
c3RDaGFyYWN0ZXJdLgogICAgIC8vICdlbmRDaGFyYWN0ZXInIGRlbm90ZXMgdGhlIG1heGltdW0g
bGVuZ3RoIG9mIHRoZSBVQ2hhciBhcnJheSwgd2hpY2ggbWlnaHQgZXhjZWVkICdsYXN0Q2hhcmFj
dGVyJy4KLSAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqLCBp
bnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCBlbmRDaGFyYWN0ZXIp
OworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciosIHVuc2ln
bmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIGVu
ZENoYXJhY3Rlcik7CiAKICAgICBpbmxpbmUgYm9vbCBjb25zdW1lKFVDaGFyMzImIGNoYXJhY3Rl
ciwgdW5zaWduZWQmIGNsdXN0ZXJMZW5ndGgpCiAgICAgewpAQCAtNTIsNyArNTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fY3VycmVudENoYXJhY3RlciArPSBhZHZhbmNlTGVuZ3RoOwogICAgIH0K
IAotICAgIGludCBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q2hh
cmFjdGVyOyB9CisgICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudENoYXJhY3RlcjsgfQogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAKIHByaXZhdGU6CkBAIC02MCw5ICs2MCw5IEBA
IHByaXZhdGU6CiAgICAgVUNoYXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoKTsKIAogICAgIGNv
bnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAg
ICBpbnQgbV9sYXN0Q2hhcmFjdGVyOwotICAgIGludCBtX2VuZENoYXJhY3RlcjsKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9sYXN0Q2hhcmFjdGVyOwor
ICAgIHVuc2lnbmVkIG1fZW5kQ2hhcmFjdGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCAwYjlhNzQwMmFm
YjYxMzYwNjA1OGVkOTgzMTRhNmIxZGNiOTA1NmI0Li44MGVlNDIyNzBlMmU0YzIzOTBhMjk2NDBj
MmE0NGI0YWVjMDQ2ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgaXNTb2Z0QmFua0Vtb2ppKFVDaGFyMzIgY29kZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9p
bnQgPj0gMHhFMDAxICYmIGNvZGVwb2ludCA8PSAweEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdp
ZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyLCBpbnQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitpbmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9yOjpz
aG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwg
dW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0
IC0+IFRyYW5zZm9ybXNUeXBlCiB7CiAgICAgaWYgKGdseXBoQnVmZmVyICYmIGdseXBoQnVmZmVy
LT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsgMSkgJiYgaXNTb2Z0QmFua0Vtb2ppKHByZXZp
b3VzQ2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQ7CkBA
IC05MCwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8gV2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlG
b250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWYKICAgICByZXR1cm4gVHJh
bnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0KIAotaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6
OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwg
aW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0No
YXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UpCitpbmxpbmUgZmxvYXQgV2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJh
bnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFz
dEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIs
IGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRB
c1NwYWNlKQogewogICAgIEFTU0VSVF9VTlVTRUQocHJldmlvdXNDaGFyYWN0ZXIsIHNob3VsZEFw
cGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBwcmV2aW91c0No
YXJhY3RlcikgIT0gV2lkdGhJdGVyYXRvcjo6VHJhbnNmb3Jtc1R5cGU6Ok5vbmUpOwogCiAgICAg
aWYgKCFnbHlwaEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgZ2x5cGhCdWZm
ZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKKyAgICB1bnNpZ25lZCBnbHlwaEJ1ZmZlclNp
emUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOwogICAgIGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJT
aXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewogICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDUsOSArMTA1LDEwIEBAIGlu
bGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2Vz
ID0gZ2x5cGhCdWZmZXItPmFkdmFuY2VzKDApOwogICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9
IDA7Ci0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXpl
OyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1
ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhEaWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndp
ZHRoKCk7CiAKKyAgICBBU1NFUlQoZ2x5cGhCdWZmZXJTaXplID49IGxhc3RHbHlwaENvdW50KTsK
ICAgICBpZiAoIWx0cikKICAgICAgICAgZ2x5cGhCdWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291
bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIApAQCAtMTI1LDcgKzEyNiw3
IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAgICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZS5jbGVhcigpOwogCi0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwg
Z2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291
bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhEaWZmZXJlbmNlICs9
IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVy
U2l6ZTsKQEAgLTE4MSw3ICsxODIsNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAg
Y29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBtX2ZvbnQtPnByaW1hcnlGb250KCk7CiAgICAgY29u
c3QgRm9udCogbGFzdEZvbnREYXRhID0gJnByaW1hcnlGb250OwotICAgIGludCBsYXN0R2x5cGhD
b3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZmZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWdu
ZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAw
OwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFy
YWN0ZXIgPSAwOwpAQCAtMzU2LDE0ICszNTcsMTQgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRl
cmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgK
ICAgICByZXR1cm4gY29uc3VtZWRDaGFyYWN0ZXJzOwogfQogCi11bnNpZ25lZCBXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKGludCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3Vuc2ln
bmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciog
Z2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOwogCiAgICAgaWYgKG9mZnNldCA+IGxlbmd0
aCkKICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOwogCi0gICAgaWYgKG1fY3VycmVudENoYXJhY3Rl
ciA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSkKKyAgICBpZiAobV9jdXJyZW50Q2hh
cmFjdGVyID49IG9mZnNldCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAobV9ydW4uaXM4
Qml0KCkpIHsKQEAgLTM3NywxMCArMzc4LDEwIEBAIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogCiBib29sIFdpZHRo
SXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7Cisg
ICAgdW5zaWduZWQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKICAgICBhZHZhbmNlKG1f
Y3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7Ci0g
ICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kp
CiAgICAgICAgIHcgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndpZHRoKCk7CiAgICAgd2lk
dGggPSB3OwogICAgIHJldHVybiBnbHlwaEJ1ZmZlci5zaXplKCkgPiBvbGRTaXplOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IDY4
ZmUzZjNmNWJiM2Y5NzkyODkyNzUyNTg2MDY4NjFlNWNlOTI4NjMuLmM0NWZkYjhjMzZhM2ZlMmYz
ZWY4NmM4OTU5ZWY1NTE2YTM5MDEyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IFdpZHRo
SXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRoSXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUq
LCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAw
LCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNp
cyA9IGZhbHNlKTsKIAotICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciop
OworICAgIHVuc2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKik7CiAgICAg
Ym9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAog
ICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50
Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNzAs
OCArNzAsOCBAQCBwcml2YXRlOgogICAgIGlubGluZSB1bnNpZ25lZCBhZHZhbmNlSW50ZXJuYWwo
VGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKIAogICAgIGVudW0gY2xhc3MgVHJhbnNmb3Jt
c1R5cGUgeyBOb25lLCBGb3JjZWQsIE5vdEZvcmNlZCB9OwotICAgIFRyYW5zZm9ybXNUeXBlIHNo
b3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqLCBpbnQgbGFzdEdseXBo
Q291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0OwotICAgIGZsb2F0IGFwcGx5
Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3Vu
dCwgY29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENo
YXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYpOworICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5
Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3Vu
dCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7CisgICAgZmxvYXQgYXBwbHlGb250
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291
bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBD
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsKIAogICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBt
X2ZhbGxiYWNrRm9udHMgeyBudWxscHRyIH07CiAgICAgYm9vbCBtX2FjY291bnRGb3JHbHlwaEJv
dW5kcyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBlODk1ZjE3NTk2NjI5NDA5OWQ5YmYwYWRlMjZm
MTI0NDgzOTcxYjM2Li45ZTMwODAxNTg1MjgzOWNkNDI4NmE2YWM0NTQyMDAyY2IzOGVjNWM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykKK3N0YXRpYyB2
b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBudW1HbHlwaHMpCiB7CiAgICAg
Y2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zvcm07CiAgICAgZmxvYXQgc3ludGhldGljQm9s
ZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwpAQCAtNjYsNyArNjYsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZv
bnQmIGZvbnQsIEdseXBoQnVmZmVyRwogICAgICAgICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQs
ICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3co
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBjb25zdCBGb250JiBmb250LCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlw
aHMpCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR2x5
cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBudW1HbHlwaHMpCiB7CiAgICAgU2hhZG93
Qmx1ciYgc2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5zaGFkb3dC
bHVyKCk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKIH0KIAog
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKQorICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKQogewogICAgIGlmICghZm9udC5wbGF0
Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNv
bnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CiAK
ICAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7
IGkrKykgewogICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNldDsKICAgICAgICAgZ2x5cGhzW2ld
LnkgPSBwb2ludC55KCk7CiAgICAgICAgIG9mZnNldCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
ZnJvbSArIGkpLndpZHRoKCk7CkBAIC0yMjksNyArMjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
YWR2YW5jZSgpIGZpbmFsOwogCiBwcml2YXRlOgotICAgIGludCBtX2luZGV4OworICAgIHVuc2ln
bmVkIG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVuOwogICAgIGNvbnN0IEds
eXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwogICAgIGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4IDIxNmQ5MTFkZTNhMDdmYzdmNDRmOTVjYjBk
NDVhYjg2NGU2ZGZjNjcuLjA4YmFlMzgwODQ4ODQ1NGFkNzM4NjcyYzNlMjg4NDVjODRiZmQwMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyb0hhcmZidXp6TkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2Vz
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQsIGludCwgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8p
IGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkLCB1bnNpZ25lZCwgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8p
IGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYg
KCFzaGFwZXIuc2hhcGUoJmdseXBoQnVmZmVyKSkgewpAQCAtNTIsNyArNTIsNyBAQCBmbG9hdCBG
b250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGludCwgaQogICAgIHJldHVybiAwOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgLyogY29udGV4
dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1h
cmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50
IC8qIHRvICovKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4m
IC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBv
aW50JiAvKiBwb2ludCAqLywgdW5zaWduZWQgLyogZnJvbSAqLywgdW5zaWduZWQgLyogdG8gKi8p
IGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTg1LDcgKzg1LDcgQEAgaW50
IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRS
dW4mIHJ1biwgZmxvYXQgeCwgYm8KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2FzY2Fk
ZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
TGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQg
Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwog
ICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggN2Y1NjRi
MDUyZDVmNTE3NDA5OGVjMGQ0NTBkZjdhOTJhMjI1Y2UxMi4uOWMxZjFkYWY3Yjk2OTBhZjdmNDMz
YmFhZmI0ODIwYjkxOTJkNDM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC03MCwxMSArNzAs
MTEgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxl
eFRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbFZl
Y3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBv
c2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNp
emVfdCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCiB7CiAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CiAgICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgQ0dTaXplIGFkdmFu
Y2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7
CiAgICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53
aWR0aDsKICAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZh
bmNlLmhlaWdodDsKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZFVz
ZUxldHRlcnByZXNzRWZmZWN0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICNlbmRp
ZgogfQogCi1zdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6
ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5j
ZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJl
ZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMs
IHVuc2lnbmVkIGNvdW50KQogewogI2lmIEVOQUJMRShMRVRURVJQUkVTUykKICAgICBpZiAoIWNv
dW50KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2
b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMs
IGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQogewogICAgIGlmICghY291bnQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDRwog
ICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUlu
dmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKIAogICAgICAgICBDR1BvaW50
IHBvc2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1l
dHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJp
Y3MoKS5mbG9hdEFzY2VudCgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CiAgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5z
Zm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwogICAgICAgICAgICAg
cG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBv
c2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhl
aWdodCksIHRyYW5zZm9ybSk7CiAgICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ld
LndpZHRoOwpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmlu
Z01vZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgIENHQ29udGV4dFNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOwog
fQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdN
b2RlKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQu
cGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDM0LDcg
KzQzNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2UoKSBmaW5hbDsKIAogcHJpdmF0ZToK
LSAgICBpbnQgbV9pbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRS
dW4mIG1fdGV4dFJ1bjsKICAgICBjb25zdCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKICAg
ICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIERhc2hBcnJheSBG
b250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QKICAgICBGbG9hdFBvaW50IG9yaWdpbiA9IEZsb2F0UG9pbnQodGV4dE9yaWdp
bi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgpKTsKICAgICBNYWNHbHlwaFRvUGF0aFRyYW5z
bGF0b3IgdHJhbnNsYXRvcihydW4sIGdseXBoQnVmZmVyLCBvcmlnaW4pOwogICAgIERhc2hBcnJh
eSByZXN1bHQ7Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyB0cmFuc2xhdG9yLmNvbnRhaW5zTW9y
ZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3IuYWR2YW5jZSgpKSB7CisgICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IHRyYW5zbGF0b3IuY29udGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwg
dHJhbnNsYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgR2x5cGhJdGVyYXRpb25TdGF0ZSBpbmZv
ID0gR2x5cGhJdGVyYXRpb25TdGF0ZShDR1BvaW50TWFrZSgwLCAwKSwgQ0dQb2ludE1ha2UoMCwg
MCksIGxpbmVFeHRlbnRzLnkoKSwgbGluZUV4dGVudHMueSgpICsgbGluZUV4dGVudHMuaGVpZ2h0
KCksIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRlbnRzLndpZHRoKCksIGxpbmVFeHRlbnRzLngo
KSk7CiAgICAgICAgIGNvbnN0IEZvbnQqIGxvY2FsRm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChp
bmRleCk7CiAgICAgICAgIGlmICghbG9jYWxGb250KSB7CkBAIC01MjcsNyArNTI3LDcgQEAgYm9v
bCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25zdAogICAgIHJldHVy
biBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3IoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiB9CiAK
LXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQg
dG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7
CkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICBzZWxlY3Rp
b25SZWN0LnNldFdpZHRoKExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJl
Zm9yZVdpZHRoKSk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFz
aXMpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBo
YXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNTY1LDcgKzU2
NSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyCiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNl
OwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAg
ZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDBiZjE0YmVmNzliZDNhYjJmYjcz
ZjZjNzUwODA3MjZkYTQ0MWUzMWQuLmEyMjQyOTg4YzA2MDM2MzhhOTY0M2JlOTcwMmY2MzZlYTM1
NjQ2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEw
MCw3ICsxMDAsNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGlt
aXQpCiAgICAgYXBwZW5kSXRlbShTZXRNaXRlckxpbWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOwog
fQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2
b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2Rl
KQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVtID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFw
cGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZvbnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocywgRmxvYXRQb2ludCgpLCB0
b0Zsb2F0U2l6ZShzdGFydFBvaW50KSwgc21vb3RoaW5nTW9kZSkpKTsKICAgICB1cGRhdGVJdGVt
RXh0ZW50KG5ld0l0ZW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5k
ZXggZWI5OWEzZGRhMDBkMzE3MGNmYzhmMDg2YTQwMjljYmJjZTFjZDNhNC4uNTJlYTEwNmVkYTg0
ZWFlMGZmZTlhYzVmNzQwMGYxZTkwYzU5NTAyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGx5Rmls
bFBhdHRlcm4oKTsKICNlbmRpZgogCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOworICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSk7CiAKICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpOwogICAgIHZvaWQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCA1MjU3MGVjZTM4ZWUzOGI3NDBk
OGRmN2VjN2JhM2E0YTA1MTc3MWQzLi45MGIyMTZjZGQ5MGE3M2ViM2U4ZmFmNzdmODQ0NGM0YzBh
MzM5ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
SGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25l
ZCBpbmRleCwgdWludDE2X3QKICAgICBtX29mZnNldHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZz
ZXRYLCBvZmZzZXRZKTsKIH0KIAotaW50IEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hh
cmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKK3Vuc2lnbmVkIEhhcmZCdXp6
U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFy
Z2V0WCkKIHsKICAgICBBU1NFUlQodGFyZ2V0WCA8PSBtX3dpZHRoKTsKICAgICBmbG9hdCBjdXJy
ZW50WCA9IDA7CkBAIC0xNTYsOSArMTU2LDkgQEAgZmxvYXQgSGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KQogICAgIHJldHVybiBw
b3NpdGlvbjsKIH0KIAotc3RhdGljIHZvaWQgbm9ybWFsaXplQ2hhcmFjdGVycyhjb25zdCBUZXh0
UnVuJiBydW4sIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCkKK3N0YXRpYyB2b2lkIG5v
cm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGV4dFJ1biYgcnVuLCBVQ2hhciogZGVzdGluYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpbnQgcG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVk
IHBvc2l0aW9uID0gMDsKICAgICBib29sIGVycm9yID0gZmFsc2U7CiAgICAgY29uc3QgVUNoYXIq
IHNvdXJjZTsKICAgICBTdHJpbmcgc3RyaW5nRm9yOEJpdFJ1bjsKQEAgLTE3MCw3ICsxNzAsNyBA
QCBzdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFRleHRSdW4mIHJ1biwgVUNo
YXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZwogCiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3Ro
KSB7CiAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotICAgICAgICBpbnQgbmV4dFBvc2l0aW9u
ID0gcG9zaXRpb247CisgICAgICAgIHVuc2lnbmVkIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uOwog
ICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQb3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIp
OwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUgdGFicyBhcyB0aGV5IGFyZSBub3QgdHJlYXRl
ZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgogICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0
QXNTcGFjZShjaGFyYWN0ZXIpICYmIGNoYXJhY3RlciAhPSAnXHQnKQpAQCAtMjA0LDE0ICsyMDQs
MTQgQEAgSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6elNoYXBlcigpCiB7CiB9CiAKLXN0YXRpYyB2
b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVD
aGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCwgSGFyZkJ1enpTaGFwZXI6Ok5vcm1hbGl6ZU1v
ZGUgbm9ybWFsaXplTW9kZSkKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNo
YXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgbGVu
Z3RoLCBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXplTW9kZSBub3JtYWxpemVNb2RlKQogewotICAg
IGludCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOwogICAgIGJvb2wg
ZXJyb3IgPSBmYWxzZTsKICAgICAvLyBJdGVyYXRlIGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBt
aXJyb3IgY2hhcmFjdGVyIGlmIG5lZWRlZC4KICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgp
IHsKICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CiAg
ICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7
CiAgICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVk
IGFzIHNwYWNlcyBmb3Igd29yZC1lbmQKICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFz
U3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIgIT0gJ1x0JykKQEAgLTQxNywxMSArNDE3LDEx
IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0
ZXIpICYgVV9HQ19NX01BU0spIHsKLSAgICAgICAgICAgICAgICBpbnQgbWFya0xlbmd0aCA9IGNs
dXN0ZXJMZW5ndGg7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbWFya0xlbmd0aCA9IGNsdXN0
ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIG1hcmtDaGFyYWN0ZXJzRW5k
ID0gaXRlcmF0b3IuY2hhcmFjdGVycygpICsgY2x1c3Rlckxlbmd0aDsKICAgICAgICAgICAgICAg
ICB3aGlsZSAobWFya0NoYXJhY3RlcnNFbmQgPCBub3JtYWxpemVkQnVmZmVyRW5kKSB7CiAgICAg
ICAgICAgICAgICAgICAgIFVDaGFyMzIgbmV4dENoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IG5leHRDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBuZXh0Q2hhcmFjdGVyTGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICAgICAgVTE2X05F
WFQobWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFyYWN0ZXJMZW5ndGgsIG5vcm1hbGl6ZWRCdWZm
ZXJFbmQgLSBtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rlcik7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghKFVfR0VUX0dDX01BU0sobmV4dENoYXJhY3RlcikgJiBVX0dDX01fTUFTSykp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY0MCw3ICs2NDAsNyBAQCBpbnQg
SGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpCiAgICAgcmV0
dXJuIGNoYXJhY3RlcnNTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxl
Y3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwg
aW50IHRvKQorRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykK
IHsKICAgICBmbG9hdCBjdXJyZW50WCA9IDA7CiAgICAgZmxvYXQgZnJvbVggPSAwOwpAQCAtNjUz
LDE4ICs2NTMsMjIgQEAgRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1f
cnVuLnJ0bCgpKQogICAgICAgICAgICAgY3VycmVudFggLT0gbV9oYXJmQnV6elJ1bnNbaV0tPndp
ZHRoKCk7Ci0gICAgICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJmQnV6elJ1bnNbaV0tPm51
bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKCFmb3VuZEZyb21YICYmIGZyb20gPj0gMCAmJiBm
cm9tIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzID0g
bV9oYXJmQnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAgaWYgKCFmb3VuZEZy
b21YICYmIGZyb20gPCBudW1DaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICBmcm9tWCA9IG1faGFy
ZkJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJyZW50WDsKICAgICAg
ICAgICAgIGZvdW5kRnJvbVggPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIEFTU0VSVChmcm9tID49IG51bUNoYXJhY3RlcnMpOwogICAgICAgICAg
ICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmb3Vu
ZFRvWCAmJiB0byA+PSAwICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICBpZiAoIWZv
dW5kVG9YICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgewogICAgICAgICAgICAgdG9YID0gbV9oYXJm
QnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50WDsKICAgICAgICAg
ICAgIGZvdW5kVG9YID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQodG8gPj0gbnVtQ2hhcmFjdGVycyk7CiAgICAgICAgICAgICB0byAt
PSBudW1DaGFyYWN0ZXJzOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGZvdW5kRnJvbVggJiYg
Zm91bmRUb1gpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCmluZGV4IGJm
NzZmMzE3ZTk4MWI1ZGY2Y2RjYTg1NGIwNDU5YTllYWQwYWRiOWEuLjY0ZDQwYmU3MGVkYzlmYTgz
NmVlYWE3OTAyZDFjMGEzOWFjZWY2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaApAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCBhZGp1c3RTdGFydFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmKTsKICAgICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRo
OyB9CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOwotICAgIEZsb2F0
UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJv
bSwgaW50IHRvKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50
JiwgaW50IGhlaWdodCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogCiBwcml2YXRlOgog
ICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5
cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSk7CiAgICAg
ICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CiAKLSAg
ICAgICAgaW50IGNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOworICAg
ICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsK
ICAgICAgICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKICAg
ICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7IHJldHVybiBtX2ZvbnREYXRhOyB9CkBAIC04
OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgRm9udCog
bV9mb250RGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9zdGFydEluZGV4OwotICAgICAgICBzaXpl
X3QgbV9udW1DaGFyYWN0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUNoYXJhY3RlcnM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwogICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGly
ZWN0aW9uOwogICAgICAgICBoYl9zY3JpcHRfdCBtX3NjcmlwdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaAppbmRleCBhZTk2YWQxNzkxYTkwNzFkZWM5NzYzNjk4ZWIwOGY3MGMwMWMxZjI0Li43ZGY0
ZWZmZjMyYTRiNTA0OGQwNjI0YjAxOTBjNGNkNGVjNWMzYWVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFs
V3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tG
b250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5j
ZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9p
ZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0
eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFj
a0ZvbnRzID0gMCk7CisgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciog
PSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gbnVsbHB0cik7CiAKICAgICAvLyBD
b21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAg
ICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwCmluZGV4IGI1YmZmMjcxZjIzMTg3OTVlMmYxMTEyZmI1ODRmNmIwMjNlYzg0ZTMuLmU4
ZDczM2E0NDRmYzU2ZTcyNjY2MWQ2YzViMmJkZGE2MDYzZTdjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xMjgsNyAr
MTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5cGgoSERDIGhkYywgR2x5
cGggZ2x5cGgpCiB9CiAKIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGJvb2wgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKaW5kZXgg
MjM5NmE0ZGVlM2RlZTE1MGU3MzY5ZjdlMTZhNDBkNTAwZjllYzllYi4uNjlmYzljZDI1MGZmMDY3
NjJkY2EzNDViYmMwYjY5YWViNmRkMDE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApAQCAtNTAsNyArNTAsNyBAQCBib29sIEZvbnRD
YXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgVW5p
c2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBA
IC02Niw3ICs2Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlCiAgICAgc2VsZWN0aW9uUmVj
dC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250Q2Fz
Y2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBy
dW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVt
cGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6Omdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0
RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgaWYgKGZvclRleHRF
bXBoYXNpcykgewogICAgICAgICAvLyBGSVhNRTogQWRkIGZvclRleHRFbXBoYXNpcyBwYXJlbWV0
ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQgdXNlIGl0LgpAQCAtOTEsNyArOTEsNyBAQCBm
bG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGludCBmcgogICAgIHJldHVybiBiZWZvcmVXaWR0aDsKIH0KIAotdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3Zv
aWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
KSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRp
YWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20s
IHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDIwOTM4YjFmNzQ0NzdhYWQ2MGM3YjEwNGRjZjIwOWQ3
ZmE0ZGZkMjYuLjQ1ZmRkN2YzMmJjYWVkZDJjNGNkZGNmNTljYmJmYWE5ZTM5MzYyMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMTM2LDcgKzEzNiw3IEBA
IHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5
cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCkgKyBwYWludE9mZnNldC54
KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9wKCksIDAsIHJv
b3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxlLCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsK
LSAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwg
MCwgLTEpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rp
b25SZWN0KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRo
V3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwgYyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmMzJhMGIzYjNlNTZiZjU3OWVhMDVkMzkx
NzA2MDlkZjI5MDliMDlkLi5iNjBjY2E0ZmNhOTIwMDBkYzVhZWNiOTNmODVkY2I2NjJmMDlmMjQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xMzAs
MjEgKzEzMCwyNSBAQCBMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgp
IGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25IZWlnaHQoKTsKIH0KIAotYm9vbCBJ
bmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QK
K2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWdu
ZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBt
X3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIHN0
YXRpY19jYXN0PGludD4obV9sZW4pKTsKLSAgICByZXR1cm4gKHNQb3MgPCBlUG9zKTsKKyAgICBp
bnQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3MpOworICAgIGludCBlUG9zID0gY2xhbXBl
ZE9mZnNldChlbmRQb3MpOworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjaGVja2lu
ZyBpZiBzUG9zID49IGVQb3MgaGVyZSwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlCisgICAgLy8gaW5k
aWNlcyB1c2VkIHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzZWxlY3Rpb24gcmVjdC4gQWxsb3dp
bmcgdXMgcGFzdCB0aGlzIGd1YXJkCisgICAgLy8gb24gYW55IG90aGVyIGNvbmRpdGlvbiBjcmVh
dGVzIHplcm8td2lkdGggc2VsZWN0aW9uIHJlY3RzLgorICAgIHJldHVybiBzUG9zIDwgZVBvcyB8
fCAoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQb3Mg
PD0gKHN0YXJ0KCkgKyBsZW4oKSkpOwogfQogCiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRl
IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlm
IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Qm90aCkgewotICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICAgICAgdW5zaWduZWQg
c3RhcnRQb3MsIGVuZFBvczsKICAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChz
dGFydFBvcywgZW5kUG9zKTsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBs
aW5lIGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgotICAgICAgICBpbnQg
bGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAw
KTsKKyAgICAgICAgQVNTRVJUKHN0YXJ0KCkgKyBsZW4oKSA+PSAoaXNMaW5lQnJlYWsoKSA/IDEg
OiAwKSk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigp
IC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0
ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYm
IHN0YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgYm9vbCBlbmQgPSAoc3RhdGUg
IT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVu
ZFBvcyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0xNjUsOSArMTY5LDEwIEBAIFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUoKQogICAgIGlm
IChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiAmJiByb290KCkuZWxsaXBzaXNCb3goKSkg
ewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXMgPSByb290KCkuZWxsaXBzaXNCb3goKTsK
ICAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgewotICAg
ICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0OwotICAgICAgICAgICAgaW50IHNlbGVjdGlvbkVu
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgICAgICAgICAgdW5z
aWduZWQgc2VsZWN0aW9uRW5kOwogICAgICAgICAgICAgc3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQs
IHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOworICAgICAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PGludD4oc2VsZWN0aW9uU3RhcnQpID49IDAgJiYgc3RhdGljX2Nhc3Q8aW50
PihzZWxlY3Rpb25FbmQpID49IDApOwogICAgICAgICAgICAgLy8gVGhlIGVsbGlwc2lzIHNob3Vs
ZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YKICAgICAgICAgICAg
IC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9u
IGFuZCB0aGUKICAgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJl
Zm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQpAQCAtMTkxLDEyICsxOTYsMTUgQEAgc3Rh
dGljIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBjb25zdCBSZW5kZXJUZXh0JgogICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQog
Ci1MYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpIGNvbnN0CitMYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2Vs
ZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewot
ICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQg
ZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwotICAgIAotICAg
IGlmIChzUG9zID4gZVBvcykKKyAgICB1bnNpZ25lZCBzUG9zID0gY2xhbXBlZE9mZnNldChzdGFy
dFBvcyk7CisgICAgdW5zaWduZWQgZVBvcyA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zKTsKKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSBiZSBjaGVja2luZyBpZiBzUG9zID49IGVQb3MgaGVy
ZSwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlCisgICAgLy8gaW5kaWNlcyB1c2VkIHRvIGFjdHVhbGx5
IGdlbmVyYXRlIHRoZSBzZWxlY3Rpb24gcmVjdC4gQWxsb3dpbmcgdXMgcGFzdCB0aGlzIGd1YXJk
CisgICAgLy8gb24gYW55IG90aGVyIGNvbmRpdGlvbiBjcmVhdGVzIHplcm8td2lkdGggc2VsZWN0
aW9uIHJlY3RzLgorICAgIGlmIChzUG9zID49IGVQb3MgJiYgIShzdGFydFBvcyA9PSBlbmRQb3Mg
JiYgc3RhcnRQb3MgPj0gc3RhcnQoKSAmJiBzdGFydFBvcyA8PSAoc3RhcnQoKSArIGxlbigpKSkp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBMYXlvdXRVbml0IHNlbGVjdGlv
blRvcCA9IHRoaXMtPnNlbGVjdGlvblRvcCgpOwpAQCAtMjEyLDcgKzIyMCw3IEBAIExheW91dFJl
Y3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVu
ZFBvcykgY29uc3QKIAogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3Qo
TGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKSwgTGF5b3V0U2l6ZShtX2xv
Z2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7CiAgICAgLy8gQXZvaWQgY29tcHV0aW5nIHRo
ZSBmb250IHdpZHRoIHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgaWYgKHNQb3MgfHwgZVBvcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
bGVuKSkKKyAgICBpZiAoc1BvcyB8fCBlUG9zICE9IG1fbGVuKQogICAgICAgICBmb250LmFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3Mp
OwogICAgIEludFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNl
bGVjdGlvblJlY3QpOwogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gc25hcHBlZFNlbGVj
dGlvblJlY3Qud2lkdGgoKTsKQEAgLTUwOCwxOCArNTE2LDE4IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwKICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwg
YWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHRSdW4u
bGVuZ3RoKCk7CiAKLSAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSAwOwotICAgIGludCBzZWxlY3Rp
b25FbmQgPSAwOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gMDsKKyAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25FbmQgPSAwOwogICAgIGlmIChoYXZlU2VsZWN0aW9uICYmIChwYWludFNlbGVj
dGVkVGV4dE9ubHkgfHwgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5KSkKICAgICAgICAgc3Rk
Ojp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgp
OwogCiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKSB7Ci0gICAgICAgIHNl
bGVjdGlvblN0YXJ0ID0gc3RkOjptaW48aW50PihzZWxlY3Rpb25TdGFydCwgbV90cnVuY2F0aW9u
KTsKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gc3RkOjptaW48aW50PihzZWxlY3Rpb25FbmQsIG1f
dHJ1bmNhdGlvbik7CisgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc3RkOjptaW4oc2VsZWN0aW9u
U3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKKyAgICAgICAgc2Vs
ZWN0aW9uRW5kID0gc3RkOjptaW4oc2VsZWN0aW9uRW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV90cnVuY2F0aW9uKSk7CiAgICAgICAgIGxlbmd0aCA9IG1fdHJ1bmNhdGlvbjsKICAgICB9CiAK
LSAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKKyAgICBmbG9hdCBlbXBoYXNpc01hcmtP
ZmZzZXQgPSAwOwogICAgIGJvb2wgZW1waGFzaXNNYXJrQWJvdmU7CiAgICAgYm9vbCBoYXNUZXh0
RW1waGFzaXMgPSBlbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGxpbmVTdHlsZSwgZW1waGFz
aXNNYXJrQWJvdmUpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrID0gaGFz
VGV4dEVtcGhhc2lzID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSA6IG51bGxB
dG9tOwpAQCAtNTg2LDIxICs1OTQsMjUgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGlm
IChzaG91bGRSb3RhdGUpCiAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJl
Y3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0KK3Vuc2lnbmVkIElubGluZVRleHRCb3g6OmNsYW1w
ZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3RkOjpt
aW4oeCwgc3RhcnQoKSArIGxlbigpKSwgc3RhcnQoKSkgLSBzdGFydCgpOworfQogCi1zdGQ6OnBh
aXI8aW50LCBpbnQ+IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKK3N0
ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0
RW5kKCkgY29uc3QKIHsKICAgICBhdXRvIHNlbGVjdGlvblN0YXRlID0gcmVuZGVyZXIoKS5zZWxl
Y3Rpb25TdGF0ZSgpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJuIHsgMCwgbV9sZW4gfTsKICAgICAKLSAgICBp
bnQgc3RhcnQ7Ci0gICAgaW50IGVuZDsKKyAgICB1bnNpZ25lZCBzdGFydDsKKyAgICB1bnNpZ25l
ZCBlbmQ7CiAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkKICAg
ICAgICAgZW5kID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgZWxzZSBpZiAoc2VsZWN0
aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCiAgICAgICAgIHN0YXJ0ID0g
MDsKLSAgICByZXR1cm4geyBzdGQ6Om1heChzdGFydCAtIG1fc3RhcnQsIDApLCBzdGQ6Om1pbjxp
bnQ+KGVuZCAtIG1fc3RhcnQsIG1fbGVuKSB9OworICAgIHJldHVybiB7IGNsYW1wZWRPZmZzZXQo
c3RhcnQpLCBjbGFtcGVkT2Zmc2V0KGVuZCkgfTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
IGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgQ29sb3IgdGV4dENvbG9yKQpAQCAtNjEwLDggKzYyMiw4IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiBiCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgc2Vs
ZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAgICBpbnQgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgaW50
IHNlbGVjdGlvbkVuZDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydDsKKyAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25FbmQ7CiAgICAgc3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVu
ZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogICAgIGlmIChzZWxlY3Rpb25TdGFydCA+PSBzZWxl
Y3Rpb25FbmQpCiAgICAgICAgIHJldHVybjsKQEAgLTYzNCw3ICs2NDYsNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRQb2ludCYgYgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9U
cnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbGVuKCk7CiAKICAgICBTdHJpbmcgaHlwaGVuYXRl
ZFN0cmluZzsKLSAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gc3RhdGlj
X2Nhc3Q8aW50PihsZW5ndGgpICYmIGhhc0h5cGhlbigpOworICAgIGJvb2wgcmVzcGVjdEh5cGhl
biA9IHNlbGVjdGlvbkVuZCA9PSBsZW5ndGggJiYgaGFzSHlwaGVuKCk7CiAgICAgaWYgKHJlc3Bl
Y3RIeXBoZW4pCiAgICAgICAgIGh5cGhlbmF0ZWRTdHJpbmcgPSBoeXBoZW5hdGVkU3RyaW5nRm9y
VGV4dFJ1bihzdHlsZSwgbGVuZ3RoKTsKICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlLCBoeXBoZW5hdGVkU3RyaW5nLCBPcHRpb25hbDx1bnNpZ25lZD4obGVuZ3Ro
KSk7CkBAIC02NjAsMTEgKzY3MiwxMCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogI2VuZGlm
CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGludCBzdGFydFBv
cywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIHVu
c2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpCiB7Ci0gICAgaW50IG9mZnNldCA9IG1f
c3RhcnQ7Ci0gICAgaW50IHNlbGVjdGlvblN0YXJ0ID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZz
ZXQsIDApOwotICAgIGludCBzZWxlY3Rpb25FbmQgPSBzdGQ6Om1pbjxpbnQ+KGVuZFBvcyAtIG9m
ZnNldCwgbV9sZW4pOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0ID0gY2xhbXBlZE9mZnNl
dChzdGFydFBvcyk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kID0gY2xhbXBlZE9mZnNldChl
bmRQb3MpOwogICAgIGlmIChzZWxlY3Rpb25TdGFydCA+PSBzZWxlY3Rpb25FbmQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNzU2LDcgKzc2Nyw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRE
b2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pCiAK
ICAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIG1lYXN1cmUgdGV4dAogICAgIGJv
b2wgbWFya2VyU3BhbnNXaG9sZUJveCA9IHRydWU7Ci0gICAgaWYgKG1fc3RhcnQgPD0gKGludClt
YXJrZXIuc3RhcnRPZmZzZXQoKSkKKyAgICBpZiAobV9zdGFydCA8PSBtYXJrZXIuc3RhcnRPZmZz
ZXQoKSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwogICAgIGlmICgoZW5k
KCkgKyAxKSAhPSBtYXJrZXIuZW5kT2Zmc2V0KCkpIC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3Qg
Y2hhciwgbm90IHBhc3QgaXQKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwpA
QCAtNzY1LDExICs3NzYsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFy
a2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2kKIAogICAgIGJvb2wg
aXNEaWN0YXRpb25NYXJrZXIgPSBtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXM7CiAgICAgaWYgKCFtYXJrZXJTcGFuc1dob2xlQm94IHx8IGdyYW1t
YXIgfHwgaXNEaWN0YXRpb25NYXJrZXIpIHsKLSAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBz
dGQ6Om1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7Ci0gICAgICAg
IGludCBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9z
dGFydCwgbV9sZW4pOworICAgICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gY2xhbXBlZE9m
ZnNldChtYXJrZXIuc3RhcnRPZmZzZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9u
ID0gY2xhbXBlZE9mZnNldChtYXJrZXIuZW5kT2Zmc2V0KCkpOwogICAgICAgICAKICAgICAgICAg
aWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQotICAgICAgICAgICAgZW5kUG9zaXRp
b24gPSBzdGQ6Om1pbjxpbnQ+KGVuZFBvc2l0aW9uLCBtX3RydW5jYXRpb24pOworICAgICAgICAg
ICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbihlbmRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fdHJ1bmNhdGlvbikpOwogCiAgICAgICAgIC8vIENhbGN1bGF0ZSBzdGFydCAmIHdpZHRo
CiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNX
cml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dp
Y2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTgxOCw4ICs4MjksOCBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRQbwogICAgIExheW91dFVuaXQgZGVsdGFZID0gcmVuZGVyZXIoKS5zdHlsZSgp
LmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNh
bEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgTGF5b3V0UmVj
dCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgp
IC0gZGVsdGFZLCAwLCB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKSk7CiAKLSAgICBpbnQgc1BvcyA9
IHN0ZDo6bWF4PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICBp
bnQgZVBvcyA9IHN0ZDo6bWluPGludD4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgbV9s
ZW4pOworICAgIHVuc2lnbmVkIHNQb3MgPSBjbGFtcGVkT2Zmc2V0KG1hcmtlci5zdGFydE9mZnNl
dCgpKTsKKyAgICB1bnNpZ25lZCBlUG9zID0gY2xhbXBlZE9mZnNldChtYXJrZXIuZW5kT2Zmc2V0
KCkpOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CiAgICAgZm9u
dC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQ
b3MpOwogCkBAIC05ODUsMTggKzk5NiwxOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9y
UG9zaXRpb24oZmxvYXQgbGluZU9mZnNldCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocwogICAg
IHJldHVybiBmb250Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxl
KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0K
IAotZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29u
c3QKK2Zsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKIHsKICAgICBBU1NFUlQob2Zmc2V0ID49IG1fc3RhcnQpOwotICAgIEFTU0VSVChv
ZmZzZXQgPD0gbV9zdGFydCArIG1fbGVuKTsKKyAgICBBU1NFUlQob2Zmc2V0IDw9IG1fc3RhcnQg
KyBsZW4oKSk7CiAKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxMZWZ0KCk7CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGlu
ZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0
eWxlLCByZW5kZXJlcigpKTsKLSAgICBpbnQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKLSAgICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OworICAgIHVuc2lnbmVkIGZyb20g
PSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY2xhbXBlZE9mZnNldChvZmZzZXQpIDogMDsK
KyAgICB1bnNpZ25lZCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IGNs
YW1wZWRPZmZzZXQob2Zmc2V0KTsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmln
aHRCZWFyaW5nIGhlcmU/CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVj
dChsb2dpY2FsTGVmdCgpLCAwLCAwLCAwKTsKICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRl
eHRSdW4obGluZVN0eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CmluZGV4IDY3YjYzNGJhNTc4YzM4MGY3MDliMjMxY2E2YjMxODk4NzM1Njk0YmQuLjcyMzZmNjAy
YWE2NjEzNjFiMzc0N2NhMDYzMTU4ZDQ1MzJiY2MwZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaApAQCAtNDIsMTEgKzQyLDYgQEAgY2xhc3MgSW5saW5lVGV4dEJv
eCA6IHB1YmxpYyBJbmxpbmVCb3ggewogcHVibGljOgogICAgIGV4cGxpY2l0IElubGluZVRleHRC
b3goUmVuZGVyVGV4dCYgcmVuZGVyZXIpCiAgICAgICAgIDogSW5saW5lQm94KHJlbmRlcmVyKQot
ICAgICAgICAsIG1fcHJldlRleHRCb3gobnVsbHB0cikKLSAgICAgICAgLCBtX25leHRUZXh0Qm94
KG51bGxwdHIpCi0gICAgICAgICwgbV9zdGFydCgwKQotICAgICAgICAsIG1fbGVuKDApCi0gICAg
ICAgICwgbV90cnVuY2F0aW9uKGNOb1RydW5jYXRpb24pCiAgICAgewogICAgICAgICBzZXRCZWhh
dmVzTGlrZVRleHQodHJ1ZSk7CiAgICAgfQpAQCAtNjksNyArNjQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTdGFydCh1bnNpZ25lZCBzdGFydCkgeyBtX3N0YXJ0ID0gc3RhcnQ7IH0KICAgICB2
b2lkIHNldExlbih1bnNpZ25lZCBsZW4pIHsgbV9sZW4gPSBsZW47IH0KIAotICAgIHZvaWQgb2Zm
c2V0UnVuKGludCBkKSB7IEFTU0VSVCghaXNEaXJ0eSgpKTsgbV9zdGFydCArPSBkOyB9CisgICAg
dm9pZCBvZmZzZXRSdW4oaW50IGQpIHsgQVNTRVJUKCFpc0RpcnR5KCkpOyBBU1NFUlQoZCA+IDAg
fHwgbV9zdGFydCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLWQpKTsgbV9zdGFydCArPSBkOyB9
CiAKICAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90cnVu
Y2F0aW9uOyB9CiAKQEAgLTEyMCw5ICsxMTUsOSBAQCBwcml2YXRlOgogcHVibGljOgogICAgIEZs
b2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxv
YXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KIAotICAgIHZpcnR1YWwgTGF5
b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25z
dDsKLSAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsK
LSAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CisgICAg
dmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywg
dW5zaWduZWQgZW5kUG9zKSBjb25zdDsKKyAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3Rh
cnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7CisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVU
b3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CkBAIC0xNTUsMTIgKzE1MCwxMyBA
QCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24o
ZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZp
cnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAgdmly
dHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiBw
cm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwg
Y29uc3QgRm9udENhc2NhZGUmLCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOworICAgIHZvaWQg
cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
dW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcyk7CiAgICAgdm9pZCBwYWludERvY3Vt
ZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4s
IGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCBib29sIGJhY2tncm91bmQp
OwogICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJik7
CisgICAgdW5zaWduZWQgY2xhbXBlZE9mZnNldCh1bnNpZ25lZCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRm9udENh
c2NhZGUmLCBSZW5kZXJDb21iaW5lVGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsCkBAIC0xNzMsMTUgKzE2
OSwxNSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBiZWhhdmVzTGlrZVRleHQoKSBjb25zdCA9IGRl
bGV0ZTsKIAotICAgIElubGluZVRleHRCb3gqIG1fcHJldlRleHRCb3g7IC8vIFRoZSBwcmV2aW91
cyBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAotICAgIElubGluZVRleHRCb3gq
IG1fbmV4dFRleHRCb3g7IC8vIFRoZSBuZXh0IGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVy
T2JqZWN0CisgICAgSW5saW5lVGV4dEJveCogbV9wcmV2VGV4dEJveCB7IG51bGxwdHIgfTsgLy8g
VGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CisgICAgSW5s
aW5lVGV4dEJveCogbV9uZXh0VGV4dEJveCB7IG51bGxwdHIgfTsgLy8gVGhlIG5leHQgYm94IHRo
YXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKIAotICAgIGludCBtX3N0YXJ0OwotICAgIHVu
c2lnbmVkIHNob3J0IG1fbGVuOworICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CisgICAgdW5z
aWduZWQgc2hvcnQgbV9sZW4geyAwIH07CiAKICAgICAvLyBXaGVyZSB0byB0cnVuY2F0ZSB3aGVu
IHRleHQgb3ZlcmZsb3cgaXMgYXBwbGllZC4gV2UgdXNlIHNwZWNpYWwgY29uc3RhbnRzIHRvCiAg
ICAgLy8gZGVub3RlIG5vIHRydW5jYXRpb24gKHRoZSB3aG9sZSBydW4gcGFpbnRzKSBhbmQgZnVs
bCB0cnVuY2F0aW9uIChub3RoaW5nIHBhaW50cyBhdCBhbGwpLgotICAgIHVuc2lnbmVkIHNob3J0
IG1fdHJ1bmNhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX3RydW5jYXRpb24geyBjTm9UcnVu
Y2F0aW9uIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBjZGU2MDdjZjVhY2YxYWZmOTVmYTYwYzgyNWZh
YWUwYWZmZDc5MTUyLi5kMjY0ZDJhOTc2NGFkMjUzN2IzN2EzNzMxODZmYzk2MjFiNWE1OTUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTM0ODksNyArMzQ4
OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRP
ZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVu
ZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8v
IERvIHRoZSBub3JtYWwgY2FsY3VsYXRpb24gaW4gbW9zdCBjYXNlcy4KICAgICBpZiAoZmlyc3RD
aGlsZCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCAzMTUyMjM1
NTUxMTRiYTI5OGVmODkyYTVjMGNmYjVlNzVjYzM4YmU1Li4zMjNkMTcwZGZlYTVkMDg2ZDc5N2Y1
ZjE0ODUwY2I5YTY2MzMzZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aApAQCAtNDc2LDcgKzQ3Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhaW50Q29udGludWF0
aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBmaW5hbDsKICAgICAKICAgICAvLyBGSVhNRS1C
TE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3Zl
ZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVu
ZGVyUmVnaW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDgx
YjBhZDY3ODg4YTU3MDU4YzFiY2FmMmQ3OTk4ZTc4ZjBjN2ZjNTcuLmVhZTcyYmEyYzM0NWNkOWJi
Nzk1YWJiYjBlMjBiOGRjZDIwNjIxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC00MzgzLDcgKzQzODMsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQoTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdQogICAg
IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb24gPSBsb2dpY2FsVG9wUG9zOwogfQogCi1MYXlvdXRS
ZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIGludCBjYXJldE9m
ZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5k
ZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCB1bnNpZ25lZCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIFZpc2libGVQ
b3NpdGlvbnMgYXQgb2Zmc2V0cyBpbnNpZGUgY29udGFpbmVycyBlaXRoZXIgYSkgcmVmZXIgdG8g
dGhlIHBvc2l0aW9ucyBiZWZvcmUvYWZ0ZXIKICAgICAvLyB0aG9zZSBjb250YWluZXJzICh0YWJs
ZXMgYW5kIHNlbGVjdCBlbGVtZW50cykgb3IgYikgcmVmZXIgdG8gdGhlIHBvc2l0aW9uIGluc2lk
ZSBhbiBlbXB0eSBibG9jay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAw
MzgzMGM3YTgzNzYzZDVjMzE5YmIyN2ZkMDZhYTQ3N2I1MzFjODc2Li5jNjAxN2Q4ZGY5MWFkOGJj
MWFkYmEyMDQxOGZkMDU1YThkZWE0NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCkBAIC00ODEsNyArNDgxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVW5zcGxpdHRhYmxl
U2Nyb2xsaW5nT3ZlcmZsb3coKSBjb25zdDsKICAgICBib29sIGlzVW5zcGxpdHRhYmxlRm9yUGFn
aW5hdGlvbigpIGNvbnN0OwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IG51bGxwdHIpIG92ZXJyaWRlOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSA9IG51bGxwdHIpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IG92ZXJm
bG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJSZWdpb24qLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
LCBQYWludFBoYXNlID0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCk7CiAgICAgdmlydHVhbCBM
YXlvdXRSZWN0IG92ZXJmbG93Q2xpcFJlY3RGb3JDaGlsZExheWVycyhjb25zdCBMYXlvdXRQb2lu
dCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiogcmVnaW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSByZWxldmFuY3kpIHsgcmV0dXJuIG92ZXJmbG93Q2xpcFJlY3QobG9jYXRpb24sIHJl
Z2lvbiwgcmVsZXZhbmN5KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAppbmRleCBkYmI0ODNkNjlmMjY2MWQzOTBkZjUxYTVmOGYxMTBhMTAwNWI0NzA2Li5hZGFi
NjQ4NWNhZGNhMjFjNmU1NDM4NDdkY2IxMjI0N2IwMmUxOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcApAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KQogICAg
IH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCogaW5saW5lQm94LCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xh
eW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJv
eCwgdW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBp
ZiAoZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIGlzIHBvc3NpYmxl
IGlmIHRoZSBSZW5kZXJJbmxpbmUgaXMgYXQgYW4gZWRpdGluZyBib3VuZGFyeSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCA1Y2VhZmMyZDhhMmZmYzM3YTMzZTE3
YzRiMjZlMmFlOTc5Zjg2MzZmLi4wMGJjOWVjMWQ0MDQ5MjgwYWZhNDBlNGY4MDlkMjc5ZmNhODA3
Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC05Niw3ICs5
Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpIHsgc2V0
UmVuZGVySW5saW5lQWx3YXlzQ3JlYXRlc0xpbmVCb3hlcyh0cnVlKTsgfQogICAgIHZvaWQgdXBk
YXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKGJvb2wgZnVsbExheW91dCk7CiAKLSAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCosIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGZpbmFs
OwogCiAgICAgYm9vbCBoaXRUZXN0Q3VsbGVkSW5saW5lKGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCAxY2Q5NjM0YmFlNDAwYjg1
OGRmNmZlZmFhMzE3NTQ1NmIxMThhZjZjLi5iOGMyMzU4ZDE1N2RkYjJjYzI4YTEzNjcyYjhjYTFj
N2QwMWI1ODY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFr
LmNwcApAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgUmVuZGVyTGluZUJyZWFrOjpzZXRTZWxlY3Rp
b25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKICAgICBtX2lubGluZUJveFdyYXBwZXItPnJv
b3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpOwogfQog
Ci1MYXlvdXRSZWN0IFJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBp
bmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lKQorTGF5b3V0UmVjdCBSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKQogewogICAgIEFTU0VSVF9VTlVTRUQoY2FyZXRPZmZzZXQsICFjYXJldE9m
ZnNldCk7CiAgICAgQVNTRVJUX1VOVVNFRChpbmxpbmVCb3gsIGlubGluZUJveCA9PSBtX2lubGlu
ZUJveFdyYXBwZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
CmluZGV4IDExZmQzYmQ5MjE3NDk3NjM2ZDBjYTYwMTE0Mjk4MjU5NDIyYjEyMzYuLjk3MDdjZDE2
ZTU4MzZhNzgxZmZkNjUzNTAyZjMwODNmYjEyZmExNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICBpbnQgY2FyZXRNYXhPZmZz
ZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0
IG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRl
OworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2Fy
ZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgb3ZlcnJpZGU7CiAKICAg
ICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMGViOGFkNjE4NGE5NzYzNDIzOTNjNjczYTMyYjMw
MjIyMTExMjI2Yy4uYWMzMTIyNjI2MDRhMmQzZTE0YTFiY2U1YzNiZGU3ZTFkZGVlNTdmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEyMDYsNyArMTIw
Niw3IEBAIFNlbGVjdGlvblN1YnRyZWVSb290JiBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3Qo
KSBjb25zdAogICAgIHJldHVybiB2aWV3KCk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZWxl
Y3Rpb25TdGFydEVuZChpbnQmIHNwb3MsIGludCYgZXBvcykgY29uc3QKK3ZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc3BvcywgdW5zaWduZWQmIGVwb3MpIGNv
bnN0CiB7CiAgICAgc2VsZWN0aW9uUm9vdCgpLnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFy
dEVuZFBvc2l0aW9ucyhzcG9zLCBlcG9zKTsKIH0KQEAgLTEzNzcsNyArMTM3Nyw3IEBAIExheW91
dFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoUmVuZGVyRWxl
bWVudCYgY29udGFpbmVyKSBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotTGF5b3V0UmVjdCBS
ZW5kZXJPYmplY3Q6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJPYmplY3Q6OmxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCiB7CiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKICAgICAgICAgKmV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggYzZjNmMzZmVlNWUyNjUwOGMzMTk2YjkzMGJjNDYzYzc2YTdiNjNhYy4uNDExNmE1
MGIwZmEwZDcyOTAxOGU5NzFmNTQ0NDU5YzAzZTg4YzRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApAQCAtNzQ5LDcgKzc0OSw3IEBAIHB1YmxpYzoKICAgICAgKiBA
cGFyYW0gZXh0cmFXaWR0aFRvRW5kT2ZMaW5lIG9wdGlvbmFsIG91dCBhcmcgdG8gZ2l2ZSBleHRy
YSB3aWR0aCB0byBlbmQgb2YgbGluZSAtCiAgICAgICogdXNlZnVsIGZvciBjaGFyYWN0ZXIgcmFu
Z2UgcmVjdCBjb21wdXRhdGlvbnMKICAgICAgKi8KLSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIpOwogCiAgICAgLy8gV2hlbiBwZXJmb3Jt
aW5nIGEgZ2xvYmFsIGRvY3VtZW50IHRlYXItZG93biwgdGhlIHJlbmRlcmVyIG9mIHRoZSBkb2N1
bWVudCBpcyBjbGVhcmVkLiAgV2UgdXNlIHRoaXMKICAgICAvLyBhcyBhIGhvb2sgdG8gZGV0ZWN0
IHRoZSBjYXNlIG9mIGRvY3VtZW50IGRlc3RydWN0aW9uIGFuZCBkb24ndCB3YXN0ZSB0aW1lIGRv
aW5nIHVubmVjZXNzYXJ5IHdvcmsuCkBAIC03ODIsNyArNzgyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9
IG51bGxwdHIpIHsgfQogCiAgICAgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHNlbGVjdGlvblJvb3Qo
KSBjb25zdDsKLSAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3BvcywgaW50JiBlcG9z
KSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzcG9zLCB1bnNp
Z25lZCYgZXBvcykgY29uc3Q7CiAgICAgCiAgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IGFhMmMz
NGNiNmFhYzNkYzc4ZDY3MTRkNjNiYTc1YjBiN2E1NGI4M2IuLjBiZmI0YmE3OTA1YjI3MDA5NTNm
MWI2OWViYTQ0NDNlYmNkMDgzYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcApAQCAtNjE2LDE4ICs2MTYsMTggQEAgYm9vbCBSZW5kZXJSZXBsYWNlZDo6
aXNTZWxlY3RlZCgpIGNvbnN0CiAgICAgaWYgKHMgPT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGludCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOwor
ICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7CiAgICAgc2VsZWN0aW9u
U3RhcnRFbmQoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiAgICAgaWYgKHMgPT0gU2Vs
ZWN0aW9uU3RhcnQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25TdGFydCA9PSAwOwogICAgICAg
ICAKLSAgICBpbnQgZW5kID0gZWxlbWVudCgpLT5oYXNDaGlsZE5vZGVzKCkgPyBlbGVtZW50KCkt
PmNvdW50Q2hpbGROb2RlcygpIDogMTsKKyAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhh
c0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwogICAgIGlm
IChzID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbkVuZCA9PSBlbmQ7
CiAgICAgaWYgKHMgPT0gU2VsZWN0aW9uQm90aCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0
YXJ0ID09IDAgJiYgc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICAgICAgCi0gICAgQVNTRVJUKDAp
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDAyODg2YmI4MGZjMzRlYjRl
NDNkZDBhY2QzZDlmZjdhZTAyYTE3MzMuLmQzZmJlN2M4NTkzMTc5YTk5NTA0ZGI1MDFkZmYxNjI3
MDVjNzc5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQ0
Miw3ICs0NDIsNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dDo6cG9zaXRpb25Gb3JQb2lu
dChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGNvbnN0IFJlbgogICAgIHJldHVybiBtX2xpbmVC
b3hlcy5wb3NpdGlvbkZvclBvaW50KCp0aGlzLCBwb2ludCk7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9m
ZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5k
ZXJUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2Fy
ZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBpZiAo
IWlubGluZUJveCkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKQEAgLTEzNzIsMTMgKzEz
NzIsMTIgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JM
aW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KIAogICAgIGlmIChzZWxlY3Rpb25TdGF0
ZSgpID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAg
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFjYikKKyAgICBp
ZiAoIWNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAg
ICAgLy8gTm93IGNhbGN1bGF0ZSBzdGFydFBvcyBhbmQgZW5kUG9zIGZvciBwYWludGluZyBzZWxl
Y3Rpb24uCiAgICAgLy8gV2UgaW5jbHVkZSBhIHNlbGVjdGlvbiB3aGlsZSBlbmRQb3MgPiAwCi0g
ICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsK
ICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAg
Ly8gV2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCBkNjNlNjA4OWNkZTQwMzdjNTVlNWYxYzhj
NjIyODFlOGFjYTYyYmI0Li4xZmM4ZGMzOTlmYzM2MjAxZDdjZTU1ZTAyNjAzYjIyMmEwODZjOTI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTExOSw3ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0
ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50ID0gdHJ1ZSkgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSA9IDApIG92ZXJyaWRlOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5s
aW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSA9IDApIG92ZXJyaWRlOwogCiAgICAgTGF5b3V0UmVjdCBjb2xsZWN0U2VsZWN0aW9u
UmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCwgVmVjdG9yPExheW91dFJlY3Q+JiBy
ZWN0cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmNwcAppbmRleCBkOTQzZjNhNTgxZmYwY2I1ZjYxNzViY2Q5ODE0ZjY0MDc1ODYwZWRkLi5l
NTlmM2RlNjE2MzFkZjNjMjNjY2VhMjY5ZmU1MmJjOTJhOWQ3NGMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCkBAIC00NDUsNyArNDQ1
LDcgQEAgdm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJU
ZXh0JiByZW5kZXJlciwgUmVuZGVyT2JqZWN0OjoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGludCBzdGFydCwgZW5kOworICAgIHVuc2lnbmVkIHN0YXJ0LCBlbmQ7CiAgICAgcmVuZGVy
ZXIuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVuZCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpIHsKICAgICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExl
bmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGE4ZGQ3
MThkODhiMzk5Y2E5ZjhlYjc3MGUzMjEyYTUwYjE0YWQ5YzYuLjA5NjQ3MGRiYzNkYTFlZTI2MTdl
MmE2MWQ4ZDY3NDI1ODAxYzUwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKQEAgLTEyMCw4ICsxMjAsNiBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KERvY3VtZW50
JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1
bWVudC52aWV3KCkpCiAgICAgLCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydChudWxscHRyKQogICAg
ICwgbV9zZWxlY3Rpb25VbnNwbGl0RW5kKG51bGxwdHIpCi0gICAgLCBtX3NlbGVjdGlvblVuc3Bs
aXRTdGFydFBvcygtMSkKLSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvcygtMSkKICAgICAs
IG1fbGF6eVJlcGFpbnRUaW1lcigqdGhpcywgJlJlbmRlclZpZXc6OmxhenlSZXBhaW50VGltZXJG
aXJlZCkKICAgICAsIG1fcGFnZUxvZ2ljYWxIZWlnaHQoMCkKICAgICAsIG1fcGFnZUxvZ2ljYWxI
ZWlnaHRDaGFuZ2VkKGZhbHNlKQpAQCAtNzcyLDcgKzc3MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRl
clZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMoY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3Qm
IHJvb3QsCiAgICAgU2VsZWN0aW9uTWFwIHNlbGVjdGVkT2JqZWN0czsKIAogICAgIFJlbmRlck9i
amVjdCogb3MgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJl
bmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25FbmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9z
KCkpOworICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVj
dGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNl
bGVjdGlvbkVuZCkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rp
b25FbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwog
ICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAo
b3MgJiYgb3MgIT0gc3RvcCkgewogICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxlYWYo
KSB8fCBvcyA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IG9zID09
IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpKSAmJiBvcy0+c2VsZWN0aW9uU3Rh
dGUoKSAhPSBTZWxlY3Rpb25Ob25lKSB7CkBAIC04MjEsNyArODIyLDEwIEBAIHZvaWQgUmVuZGVy
Vmlldzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3Qm
IHJvb3QpIGNvbnN0CiB7CiAgICAgSGFzaFNldDxSZW5kZXJCbG9jayo+IHByb2Nlc3NlZEJsb2Nr
czsKIAotICAgIFJlbmRlck9iamVjdCogZW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Qu
c2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxl
Y3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byogc2VsZWN0aW9uRW5kID0gcm9vdC5zZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uRW5kKCk7CisgICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOwor
ICAgIGlmIChzZWxlY3Rpb25FbmQpCisgICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlv
bihzZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZh
bHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHJvb3Quc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBv
ID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBvID0gc2VsZWN0
aW9uSXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIGlmICghby0+Y2FuQmVTZWxlY3Rpb25MZWFm
KCkgJiYgbyAhPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIG8gIT0g
cm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCkBAIC04NDAsNyArODQ0LDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25T
dWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6c2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUp
Cit2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBPcHRp
b25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBPcHRpb25hbDx1bnNp
Z25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQogewog
ICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmlu
ZWQuCiAgICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNraW5nIGFyb3VuZCB0
byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQuCkBAIC04NzcsNyArODgxLDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0
YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGUKICAgICBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVl
cyhzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9zLCBibG9ja1JlcGFpbnRNb2RlKTsKIH0KIAot
dm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5k
ZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5kLCBp
bnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQordm9pZCBS
ZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVj
dCogZW5kLCBPcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBi
bG9ja1JlcGFpbnRNb2RlKQogewogICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUgc2VsZWN0aW9u
IGVuZCBwb2ludHMgZm9yIGVhY2ggb2YgdGhlIHN1YnRyZWVzLgogICAgIFJlbmRlclN1YnRyZWVz
TWFwIHJlbmRlclN1YnRyZWVzTWFwOwpAQCAtOTAyLDE0ICs5MDYsMTcgQEAgdm9pZCBSZW5kZXJW
aWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0
YXJ0LCBpbnQgc3QKICAgICAgICAgICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhIHNlbGVjdGlvbkRh
dGEgPSByZW5kZXJTdWJ0cmVlc01hcC5nZXQoJnJvb3QpOwogICAgICAgICAgICAgaWYgKHNlbGVj
dGlvbkRhdGEuc2VsZWN0aW9uQ2xlYXIoKSkgewogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRh
dGEuc2V0U2VsZWN0aW9uU3RhcnQobm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAg
c2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0
YXJ0UG9zIDogMCk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25T
dGFydFBvcyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0YXJ0UG9zIDogT3B0aW9uYWw8dW5zaWduZWQ+
KDApKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxl
Y3Rpb25FbmQobm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmRO
b2RlKQogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVu
ZFBvcyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5z
ZXRTZWxlY3Rpb25FbmRQb3Mobm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhD
aGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hpbGROb2RlcygpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gbmV3RW5kUG9zID0gbm9kZS0+b2Zmc2V0SW5D
aGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hp
bGROb2RlcygpOworICAgICAgICAgICAgICAgIEFTU0VSVChuZXdFbmRQb3MgPj0gMCk7CisgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsK
KyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmVuZGVyU3VidHJlZXNNYXAuc2V0KCZyb290
LCBzZWxlY3Rpb25EYXRhKTsKICAgICAgICAgfQpAQCAtOTYwLDcgKzk2NywxMCBAQCB2b2lkIFJl
bmRlclZpZXc6OmNsZWFyU3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9v
dCYgcm9vdCwgU2VsZWN0aQogICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCBy
ZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KIAogICAgIFJl
bmRlck9iamVjdCogb3MgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwot
ICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
RW5kUG9zKCkpOworICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgp
LnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAg
aWYgKHNlbGVjdGlvbkVuZCkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihz
ZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVl
KCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3
aGlsZSAob3MgJiYgb3MgIT0gc3RvcCkgewogICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5l
d1NlbGVjdGlvbihyb290LCAqb3MpKSB7CkBAIC05OTgsNyArMTAwOCwxMCBAQCB2b2lkIFJlbmRl
clZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYg
cm9vdCwgU2VsZWN0aQogICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQg
PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVj
dCogc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvbkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3Mo
KSk7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsK
KyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVy
ZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkRhdGFFbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlv
bkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVu
dFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVu
ZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRv
ci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKQEAgLTEwODksNyArMTEwMiw3IEBAIHZvaWQgUmVu
ZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290
JiByb290LCBTZWxlY3RpCiAgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50
KCk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0
YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVy
LCBpbnQmIGVuZE9mZnNldCkgY29uc3QKK3ZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJl
bmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZz
ZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIGVuZE9m
ZnNldCkgY29uc3QKIHsKICAgICBzdGFydFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0U3Rh
cnQ7CiAgICAgc3RhcnRPZmZzZXQgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKQEAgLTEx
MDAsNyArMTExMyw3IEBAIHZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVj
dComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlCiB2b2lkIFJlbmRlclZpZXc6
OmNsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBsYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25H
YXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIC0xLCBudWxscHRyLCAtMSwgUmVwYWlu
dE5ld01pbnVzT2xkKTsKKyAgICBzZXRTZWxlY3Rpb24obnVsbHB0ciwgTnVsbG9wdCwgbnVsbHB0
ciwgTnVsbG9wdCwgUmVwYWludE5ld01pbnVzT2xkKTsKIH0KIAogYm9vbCBSZW5kZXJWaWV3Ojpw
cmludGluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBj
N2M5Mjg2NGYwMzQ1YTVlZGIyYjRjMTExMzMxNDI3OTA1MzJkMGJmLi40NWNjYTIxOTJiNDc0NTA2
NWNlOGUxY2Y1MDBmYmZjNzNmY2EyYTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKQEAgLTg1LDggKzg1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogCiAgICAgZW51
bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51
c09sZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBT
ZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQgZ2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJl
bmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0
YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBv
cywgU2VsZWN0aW9uUmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKKyAgICB2b2lkIGdl
dFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25l
ZD4mIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5z
aWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAg
ICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9CiAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNw
bGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOyB9CkBAIC0zMDcs
NyArMzA3LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdl
ZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIGludCBzdGFydFBv
cywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgaW50IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CisgICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJl
dHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFs
PHVuc2lnbmVkPiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgT3B0
aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50
TW9kZSk7CiAgICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3Vi
dHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0YSYpIGNvbnN0
OwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMoUmVuZGVyU3VidHJlZXNNYXAm
LCBTZWxlY3Rpb25SZXBhaW50TW9kZSk7CiAgICAgdm9pZCBhcHBseVN1YnRyZWVTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3Qg
T2xkU2VsZWN0aW9uRGF0YSYpOwpAQCAtMzE5LDggKzMxOSw4IEBAIHByaXZhdGU6CiAKICAgICBS
ZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwogICAgIFJlbmRlck9iamVjdCog
bV9zZWxlY3Rpb25VbnNwbGl0RW5kOwotICAgIGludCBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBv
czsKLSAgICBpbnQgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOworICAgIE9wdGlvbmFsPHVuc2ln
bmVkPiBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4g
bV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwogCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZp
ZXcuCiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKaW5kZXggOWY2NWU5NGI1
ZTQ0YmNkZTBiZTAzZmJkZGRmOTg0YWExYTk4NDhjYy4uMTgxZTZiNTI3MTM3YjQzZTVhY2M0ODcw
MzA3ODkzZTAwMjE0MGE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Nl
bGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuY3BwCkBAIC00MiwxOSArNDIsMTYgQEAgU2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KCkKIHsKIH0KIAotU2VsZWN0aW9uU3VidHJlZVJv
b3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGlu
dCBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxl
Y3Rpb25FbmRQb3MpCi0gICAgOiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhKHNlbGVjdGlvblN0YXJ0
LCBzZWxlY3Rpb25TdGFydFBvcywgc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmRQb3MpCi17Ci19
Ci0KIHZvaWQgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24o
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlmIChtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNl
bGVjdGlvbkNsZWFyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIHJhbmdl
IGJhc2VkIG9uIHRoZSBjYWNoZWQgZW5kIHBvaW50cwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5z
ZWxlY3Rpb25TdGFydCgpLT5ub2RlKCksIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9u
U3RhcnRQb3MoKSk7Ci0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgp
LCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydFBvcygp
LnZhbHVlKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtX3NlbGVjdGlvblN1YnRyZWVEYXRh
LnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCk7CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVj
dGlvblN0YXJ0KCktPm5vZGUoKSwgc2VsZWN0aW9uU3RhcnQpOworICAgIFBvc2l0aW9uIGVuZFBv
c2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJlZURh
dGEuc2VsZWN0aW9uRW5kKCktPm5vZGUoKSwgc2VsZWN0aW9uRW5kKTsKIAogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBzdGFydFBvc2l0aW9uLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKnJhbmdlKTsKQEAgLTgyLDEw
ICs3OSwxMyBAQCB2b2lkIFNlbGVjdGlvblN1YnRyZWVSb290OjphZGp1c3RGb3JWaXNpYmxlU2Vs
ZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICBpZiAoJnN0YXJ0UG9zLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCktPnNlbGVjdGlvblJvb3QoKSAhPSB0aGlzKQogICAgICAgICByZXR1
cm47CiAKKyAgICBhdXRvIG5ld1N0YXJ0UG9zID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKTsKKyAgICBhdXRvIG5ld0VuZFBvcyA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpOworICAgIEFTU0VSVChuZXdTdGFydFBvcyA+PSAwICYmIG5ld0VuZFBvcyA+PSAwKTsK
ICAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0UG9zLmRl
cHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEu
c2V0U2VsZWN0aW9uU3RhcnRQb3Moc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CisgICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhuZXdTdGFy
dFBvcyk7CiAgICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmQoZW5kUG9z
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURh
dGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
KyAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhuZXdFbmRQb3Mp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCmluZGV4IGRkMTkxOTc4ZmQ2NGI5OWIxNmU0ODEw
Zjk2YmRlNmFkMDQxMzRlOTUuLmE4MjEyMTFiYzNhNTk1MjI4NmY3YjI1NGU4ZmQ5ZGI2MDdjODA5
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVl
Um9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9v
dC5oCkBAIC00NSwyOCArNDUsMjAgQEAgcHVibGljOgogCiAgICAgc3RydWN0IE9sZFNlbGVjdGlv
bkRhdGEgewogICAgICAgICBPbGRTZWxlY3Rpb25EYXRhKCkKLSAgICAgICAgICAgIDogc2VsZWN0
aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAsIHNlbGVjdGlvbkVuZFBvcygtMSkKICAgICAg
ICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0UG9zOwotICAgICAg
ICBpbnQgc2VsZWN0aW9uRW5kUG9zOworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0
aW9uU3RhcnRQb3M7CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7
CiAgICAgICAgIFNlbGVjdGVkT2JqZWN0TWFwIHNlbGVjdGVkT2JqZWN0czsKICAgICAgICAgU2Vs
ZWN0ZWRCbG9ja01hcCBzZWxlY3RlZEJsb2NrczsKICAgICB9OwogCiAgICAgY2xhc3MgU2VsZWN0
aW9uU3VidHJlZURhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURh
dGEoKQotICAgICAgICAgICAgOiBtX3NlbGVjdGlvblN0YXJ0KG51bGxwdHIpCi0gICAgICAgICAg
ICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5k
KG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kUG9zKC0xKQotICAgICAgICB7
Ci0gICAgICAgIH0KKyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7CiAK
LSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFy
dCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50
IHNlbGVjdGlvbkVuZFBvcykKKyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25TdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9z
LCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlv
bkVuZFBvcykKICAgICAgICAgICAgIDogbV9zZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkK
ICAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykKICAg
ICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmQoc2VsZWN0aW9uRW5kKQpAQCAtNzUsNDYgKzY3LDQ1
IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9u
U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIGludCBz
ZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0K
KyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25TdGFydFBvczsgfQogICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVj
dGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9Ci0gICAgICAgIGludCBz
ZWxlY3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQorICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb25FbmRQb3M7IH0KICAgICAgICAgYm9vbCBzZWxlY3Rpb25DbGVhcigpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhbV9zZWxlY3Rpb25TdGFydAotICAgICAg
ICAgICAgJiYgKG1fc2VsZWN0aW9uU3RhcnRQb3MgPT0gLTEpCisgICAgICAgICAgICAmJiAoIW1f
c2VsZWN0aW9uU3RhcnRQb3MpCiAgICAgICAgICAgICAmJiAhbV9zZWxlY3Rpb25FbmQKLSAgICAg
ICAgICAgICYmIChtX3NlbGVjdGlvbkVuZFBvcyA9PSAtMSk7CisgICAgICAgICAgICAmJiAoIW1f
c2VsZWN0aW9uRW5kUG9zKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2VsZWN0aW9uU3Rh
cnRFbmRQb3NpdGlvbnMoaW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MpIGNvbnN0CisgICAgICAg
IHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnModW5zaWduZWQmIHN0YXJ0UG9zLCB1bnNp
Z25lZCYgZW5kUG9zKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBzdGFydFBvcyA9IG1f
c2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBv
czsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgpOwor
ICAgICAgICAgICAgZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3MudmFsdWUoKTsKICAgICAgICAg
fQogICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KFJlbmRlck9iamVjdCogc2VsZWN0aW9u
U3RhcnQpIHsgbV9zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIHZv
aWQgc2V0U2VsZWN0aW9uU3RhcnRQb3MoaW50IHNlbGVjdGlvblN0YXJ0UG9zKSB7IG1fc2VsZWN0
aW9uU3RhcnRQb3MgPSBzZWxlY3Rpb25TdGFydFBvczsgfQorICAgICAgICB2b2lkIHNldFNlbGVj
dGlvblN0YXJ0UG9zKE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcykgeyBtX3Nl
bGVjdGlvblN0YXJ0UG9zID0gc2VsZWN0aW9uU3RhcnRQb3M7fQogICAgICAgICB2b2lkIHNldFNl
bGVjdGlvbkVuZChSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCkgeyBtX3NlbGVjdGlvbkVuZCA9
IHNlbGVjdGlvbkVuZDsgfQotICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZFBvcyhpbnQgc2Vs
ZWN0aW9uRW5kUG9zKSB7IG1fc2VsZWN0aW9uRW5kUG9zID0gc2VsZWN0aW9uRW5kUG9zOyB9Cisg
ICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kUG9zKE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rp
b25FbmRQb3MpIHsgbV9zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25FbmRQb3M7fQogICAgICAg
ICB2b2lkIGNsZWFyU2VsZWN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9zZWxlY3Rp
b25TdGFydCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gLTE7
CisgICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gTnVsbG9wdDsKICAgICAgICAgICAg
IG1fc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uRW5kUG9z
ID0gLTE7CisgICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IE51bGxvcHQ7CiAgICAgICAg
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25TdGFy
dDsKLSAgICAgICAgaW50IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogbV9zZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGludCBtX3NlbGVjdGlvbkVuZFBvczsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0YXJ0IHsgbnVsbHB0ciB9OworICAgICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25TdGFydFBvczsKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBtX3NlbGVjdGlvbkVuZCB7IG51bGxwdHIgfTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IG1fc2VsZWN0aW9uRW5kUG9zOwogICAgIH07CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U2Vs
ZWN0aW9uU3VidHJlZVJvb3QqLCBTZWxlY3Rpb25TdWJ0cmVlRGF0YT4gUmVuZGVyU3VidHJlZXNN
YXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290Kiwgc3Rk
Ojp1bmlxdWVfcHRyPE9sZFNlbGVjdGlvbkRhdGE+PiBTdWJ0cmVlT2xkU2VsZWN0aW9uRGF0YU1h
cDsKIAogICAgIFNlbGVjdGlvblN1YnRyZWVSb290KCk7Ci0gICAgU2VsZWN0aW9uU3VidHJlZVJv
b3QoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVuZFBvcyk7CiAKICAgICBT
ZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIHsgcmV0dXJuIG1fc2VsZWN0aW9u
U3VidHJlZURhdGE7IH0KICAgICBjb25zdCBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9u
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IDhkMzU5N2YyYzg0YTcwZjc2OTE1
YmQyOWM1ODNjNzY5NTFhYTczYTAuLjZlNWVjYzI2N2NiNmNlMDZjNGE1ZGM5Mjg0ZmVmZDFmNWUy
OTVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtODQs
MTcgKzg0LDE3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiB9CiAKIHZvaWQgVGV4dFBhaW50ZXI6OmRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKLSAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQp
CisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3Jp
Z2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewogICAgIEFT
U0VSVChzdGFydE9mZnNldCA8IGVuZE9mZnNldCk7CiAgICAgaWYgKGVtcGhhc2lzTWFyay5pc0Vt
cHR5KCkpCiAgICAgICAgIG1fY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3Jp
Z2luLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4
dC5kcmF3RW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIHRleHRPcmln
aW4gKyBJbnRTaXplKDAsIGVtcGhhc2lzTWFya09mZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQpOworICAgICAgICBtX2NvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1biwg
ZW1waGFzaXNNYXJrLCB0ZXh0T3JpZ2luICsgRmxvYXRTaXplKDAsIGVtcGhhc2lzTWFya09mZnNl
dCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogfQogCiB2b2lkIFRleHRQYWludGVyOjpwYWlu
dFRleHRXaXRoU2hhZG93cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhh
c2lzTWFya09mZnNldCwgYm9vbCBzdHJva2VkKQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9h
dCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCkKIHsKICAgICBpZiAoIXNoYWRvdykg
ewogICAgICAgICBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNp
c01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgdGV4dE9yaWdpbiwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0
aFNoYWRvd3MoY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGb250Q2FzY2EKICAgICB9
CiB9CiAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRl
ZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwK
K3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25z
dCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsCiAgICAgY29uc3QgVGV4dFBhaW50U3R5bGUmIHBhaW50U3R5bGUsIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdykKIHsKICAgICAvLyBGSVhNRTogVHJ1bmNhdGUgcmlnaHQtdG8tbGVmdCB0ZXh0
IGNvcnJlY3RseS4KQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFRleHRQYWludGVyOjpwYWludFRl
eHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29ucwog
ICAgICAgICBtX2NvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9j
a3dpc2UpKTsKIH0KICAgICAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0
UnVuJiB0ZXh0UnVuLCBpbnQgbGVuZ3RoLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0
IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlv
bkVuZCwKK3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQ
b2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVj
dGlvbkVuZCwKICAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVj
dGVkVGV4dFNlcGFyYXRlbHkpCiB7CiAgICAgQVNTRVJUKG1fZm9udCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9UZXh0UGFpbnRlci5oCmluZGV4IGU0YjViMThjY2YzY2EyNjEzMzQwZTBlYTRkZGFk
YjFiZjk1MGJmMTIuLjJlMTY3ZmIzMzhmN2FmZWQyYWJiNDZiNzNkYjBlOWJkZDgyZDJkNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC01NCwxOCArNTQsMTggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRT
dHlsZSYgc2VsZWN0aW9uUGFpbnRTdHlsZSkgeyBtX3NlbGVjdGlvblBhaW50U3R5bGUgPSBzZWxl
Y3Rpb25QYWludFN0eWxlOyB9CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6
b250YWwpIHsgbV90ZXh0Qm94SXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9CiAgICAgdm9p
ZCBzZXRGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9Ci0g
ICAgdm9pZCBhZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50
IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqKTsKKyAgICB2b2lkIGFkZEVt
cGhhc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0Kik7CiAgICAgdm9pZCBhZGRUZXh0U2hhZG93KGNv
bnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlvblNo
YWRvdyk7CiAKLSAgICB2b2lkIHBhaW50VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGxlbmd0aCwg
Y29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAot
ICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSAwLCBpbnQgc2VsZWN0aW9uRW5kID0gMCwgYm9v
bCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBmYWxzZSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNl
cGFyYXRlbHkgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFRleHQoY29uc3QgVGV4dFJ1biYsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLAorICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDAsIHVuc2ln
bmVkIHNlbGVjdGlvbkVuZCA9IDAsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gZmFsc2Us
IGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gZmFsc2UpOwogCiBwcml2YXRlOgot
ICAgIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNp
c01hcmtPZmZzZXQsCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJp
bmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LAorICAgICAgICBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0KTsKICAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRvd0Rh
dGEqLCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3Qm
IGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgICAgIGludCBzdGFy
dE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmss
IGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCk7Ci0gICAgdm9pZCBwYWludFRl
eHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UmVj
dCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zmc2V0
LCBpbnQgZW5kT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQg
ZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFz
aXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQpOworICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1waGFz
aXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3Qs
IGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNp
Z25lZCBlbmRPZmZzZXQsCiAgICAgICAgIGNvbnN0IFRleHRQYWludFN0eWxlJiwgY29uc3QgU2hh
ZG93RGF0YSopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CkBAIC03NiwxMSAr
NzYsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRv
dyB7IG51bGxwdHIgfTsKICAgICBBdG9taWNTdHJpbmcgbV9lbXBoYXNpc01hcms7CiAgICAgUmVu
ZGVyQ29tYmluZVRleHQqIG1fY29tYmluZWRUZXh0IHsgbnVsbHB0ciB9OwotICAgIGludCBtX2Vt
cGhhc2lzTWFya09mZnNldCB7IDAgfTsKKyAgICBmbG9hdCBtX2VtcGhhc2lzTWFya09mZnNldCB7
IDAgfTsKICAgICBib29sIG1fdGV4dEJveElzSG9yaXpvbnRhbCB7IHRydWUgfTsKIH07CiAKLWlu
bGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVt
cGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqIGNv
bWJpbmVkVGV4dCkKK2lubGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBB
dG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5k
ZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KQogewogICAgIG1fZW1waGFzaXNNYXJrID0gZW1w
aGFzaXNNYXJrOwogICAgIG1fZW1waGFzaXNNYXJrT2Zmc2V0ID0gZW1waGFzaXNNYXJrT2Zmc2V0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHAKaW5kZXggOTcxMzNlMTBjMGQ0MzZlMjkyOTI5Njk0MjZmNTE0MmIxZWZmMjIyZi4u
ZTM3ZmY2MTBlOWM3M2NhZTY3NjUwN2RkMGMwZGJmYTNkNzI2ZGZkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0x
MTYsMjIgKzExNiwyMyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gUmVuZGVyU1ZH
SW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiAgICAgcmV0dXJuIFdURk1vdmUoYm94KTsKIH0K
IAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVC
b3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKK0xheW91dFJlY3QgUmVuZGVy
U1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNh
cmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKIHsKICAgICBpZiAoIWlzPElubGluZVRleHRCb3g+KGJv
eCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBhdXRvJiB0ZXh0Qm94ID0g
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LnN0YXJ0KCkgfHwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNhcmV0T2Zmc2V0KSA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpCisgICAg
aWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpIHx8IGNhcmV0T2Zmc2V0ID4gdGV4dEJv
eC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsK
IAogICAgIC8vIFVzZSB0aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJtaW5l
IHRoZSBjYXJldCByZWN0LgotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZz
ZXQpIDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkgeworICAgIGlmIChjYXJldE9m
ZnNldCA8IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpIHsKICAgICAgICAgTGF5b3V0
UmVjdCByZWN0ID0gdGV4dEJveC5sb2NhbFNlbGVjdGlvblJlY3QoY2FyZXRPZmZzZXQsIGNhcmV0
T2Zmc2V0ICsgMSk7CiAgICAgICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gcmVjdC54KCkgOiByZWN0Lm1heFgoKTsKICAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwogICAgIH0K
IAorICAgIEFTU0VSVChjYXJldE9mZnNldCA+IDApOwogICAgIExheW91dFJlY3QgcmVjdCA9IHRl
eHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0IC0gMSwgY2FyZXRPZmZzZXQpOwog
ICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVj
dC5tYXhYKCkgOiByZWN0LngoKTsKICAgICByZXR1cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwg
Y2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCmluZGV4IDc0Njc3M2JkOTJkZWM5MThkOTdk
MWYzMzQ0ZmUzMWUwNDdjYzg1M2QuLjk5OThmZTFhZjY2NDljMzZjNDZhNjMxZGFlMDgyN2QxZjNm
MWNhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5oCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lu
bGluZVRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBWaXNpYmxl
UG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRl
clJlZ2lvbiopIG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSAwKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCos
IHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSAwKSBvdmVycmlkZTsKICAgICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVy
cmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgp
IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAppbmRleCBhNGY0MTlmZDZhOGY5YjRjZmQ4NThiZDMyY2ZkMGQ1M2E4YTQ4
OTUwLi43NTE1NWM4MjcyMzdmMGVmNDA3YTM4ZmE2ODBiMTEzNTA1ODUzMDFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTEw
MCwxNCArMTAwLDE0IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbklu
RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVuCiAgICAgcmV0dXJuIGZyYWdt
ZW50LmNoYXJhY3Rlck9mZnNldCAtIHN0YXJ0KCkgKyByZW5kZXJlcigpLnNjYWxlZEZvbnQoKS5v
ZmZzZXRGb3JQb3NpdGlvbih0ZXh0UnVuLCBwb3NpdGlvbiAqIHNjYWxpbmdGYWN0b3IsIGluY2x1
ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25G
b3JPZmZzZXQoaW50KSBjb25zdAorZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JP
ZmZzZXQodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgLy8gU1ZHIGRvZXNuJ3QgdXNlIHRoZSBvZmZz
ZXQgPC0+IHBvc2l0aW9uIHNlbGVjdGlvbiBzeXN0ZW0uIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50
LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZv
clRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0
UG9zaXRpb24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTEzNCwxMSAr
MTM0LDEwIEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4
dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYKICAgICByZXR1cm4gc25hcHBlZFNlbGVj
dGlvblJlY3Q7CiB9CiAKLUxheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rp
b25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pIGNvbnN0CitMYXlvdXRS
ZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3QKIHsKLSAgICBpbnQgYm94U3RhcnQg
PSBzdGFydCgpOwotICAgIHN0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heChzdGFydFBvc2l0aW9uIC0g
Ym94U3RhcnQsIDApOwotICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW4oZW5kUG9zaXRpb24gLSBi
b3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAgIHN0YXJ0UG9zaXRpb24gPSBj
bGFtcGVkT2Zmc2V0KHN0YXJ0UG9zaXRpb24pOworICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9m
ZnNldChlbmRQb3NpdGlvbik7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24p
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKQEAgLTE0Niw4ICsxNDUsOCBAQCBMYXlv
dXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3Np
dGlvbiwgaW50IGVuZFBvc2l0aQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNm
b3JtOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OwotICAgIGludCBmcmFnbWVudFN0YXJ0
UG9zaXRpb24gPSAwOwotICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNp
Z25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5k
UG9zaXRpb24gPSAwOwogCiAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRG
cmFnbWVudHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21l
bnRzU2l6ZTsgKytpKSB7CkBAIC0yMDMsMTIgKzIwMiwxMiBAQCB2b2lkIFNWR0lubGluZVRleHRC
b3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbykKIAogICAg
IGF1dG8mIHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAotICAgIGludCBzdGFydFBv
c2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9u
OworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uOwogICAgIHN0ZDo6dGllKHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAKLSAgICBpbnQgZnJhZ21lbnRT
dGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CisgICAg
dW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVu
dEVuZFBvc2l0aW9uID0gMDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07
CiAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRGcmFnbWVudHMuc2l6ZSgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7
CkBAIC00MDcsMjEgKzQwNiwyNCBAQCBUZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVj
dFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZQogICAgIHJldHVy
biBydW47CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBp
bnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR0lubGlu
ZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVu
c2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBl
bmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IG9mZnNldCA9IHN0
YXRpY19jYXN0PGludD4oZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0KSAtIHN0YXJ0KCk7Ci0gICAg
aW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQubGVuZ3RoKTsKKyAgICBBU1NF
UlQoZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0ID49IHN0YXJ0KCkpOworICAgIHVuc2lnbmVkIG9m
ZnNldCA9IGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCAtIHN0YXJ0KCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gZnJhZ21lbnQubGVuZ3RoOwogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gb2Zm
c2V0ICsgbGVuZ3RoIHx8IGVuZFBvc2l0aW9uIDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBvZmZzZXQpCiAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSAwOwotICAgIGVsc2UKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0UG9z
aXRpb24gPj0gb2Zmc2V0KTsKICAgICAgICAgc3RhcnRQb3NpdGlvbiAtPSBvZmZzZXQ7CisgICAg
fQogCiAgICAgaWYgKGVuZFBvc2l0aW9uID4gb2Zmc2V0ICsgbGVuZ3RoKQogICAgICAgICBlbmRQ
b3NpdGlvbiA9IGxlbmd0aDsKQEAgLTU0MCw3ICs1NDIsNyBAQCB2b2lkIFNWR0lubGluZVRleHRC
b3g6OnBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFRl
eHREZQogICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0UHRyLCAmcGF0aCk7
CiB9CiAKLXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRl
eHRSdW4sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9u
LCBpbnQgZW5kUG9zaXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNp
Z25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikKIHsKICAgICBmbG9hdCBz
Y2FsaW5nRmFjdG9yID0gcmVuZGVyZXIoKS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNj
YWxpbmdGYWN0b3IpOwpAQCAtNTkwLDggKzU5Miw4IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uU3R5bGUpOwogCi0gICAg
aW50IHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBlbmRQb3NpdGlvbiA9IDA7CisgICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSAwOwog
ICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKICAgICAgICAgc3RkOjp0aWUoc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24pID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKICAgICAgICAgaGFzU2VsZWN0aW9u
ID0gbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwpAQCAtNjE4LDcgKzYyMCw3IEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0CiAgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNo
YW5nZWQocGFyZW50KCktPnJlbmRlcmVyKCksIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsICpzdHls
ZSk7CiAKICAgICAvLyBFdmVudHVhbGx5IGRyYXcgdGV4dCB1c2luZyByZWd1bGFyIHN0eWxlIGZy
b20gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGN1
cnJlbnQgY2h1bmsgcGFydAotICAgIGlmIChlbmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4o
ZnJhZ21lbnQubGVuZ3RoKSAmJiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgIGlmIChlbmRQ
b3NpdGlvbiA8IGZyYWdtZW50Lmxlbmd0aCAmJiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogICAg
ICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBzdHlsZSwgdGV4dFJ1biwgZnJhZ21l
bnQsIGVuZFBvc2l0aW9uLCBmcmFnbWVudC5sZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IGM4ZmQxNDg4OGI0NjIz
NDI1MTNhZTk3MDk5Yjc3NjA5NjNiYjE4MjcuLjFlMzJhNDIyMjk0ZTU2MzljYjMyZmVhNTk5M2Rm
MGQ0MzI1ZGU4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCkBAIC00MywxMyArNDMsMTMgQEAgcHVibGljOgogICAgIGludCBzZWxlY3Rp
b25Ub3AoKSB7IHJldHVybiB0b3AoKTsgfQogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fbG9naWNhbEhlaWdodCkpOyB9CiAgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0
cnVlKSBjb25zdCBvdmVycmlkZTsKLSAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zm
c2V0KSBjb25zdCBvdmVycmlkZTsKKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25l
ZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tn
cm91bmQoUGFpbnRJbmZvJik7CiAgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVy
cmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlv
biwgaW50IGVuZFBvc2l0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2Fs
U2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlv
bikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0
aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRp
b25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWdu
ZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKICAgICBG
bG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC02NCw3
ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5l
d1RleHRDaHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAg
ICAgaW50IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
LCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RG
b3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQgZnJhZ21lbnRT
dGFydFBvc2l0aW9uLCB1bnNpZ25lZCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29y
YXRpb24sIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9u
V2l0aFN0eWxlKEdyYXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAg
ICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRl
clN0eWxlKiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24p
OwogICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwogCiAg
ICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCmluZGV4IGZmMzY2NzcxNzE1MzE1OGY2NzYy
ODc3YTk4ODA4ODBiMmVjMGQ3ZWUuLjkzMzBhYWExYzcxMWRhZTUxNjgyYmNiMzkzNjE1M2IyYjE0
ZmM5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5j
cHAKQEAgLTEzNCwxMyArMTM0LDE1IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnko
RGF0YSogcXVlcnlEYXRhLCBQcm9jZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2sgZnJhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29u
c3QKK2Jvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENv
b3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QK
IHsKICAgICAvLyBSZXVzZSB0aGUgc2FtZSBsb2dpYyB1c2VkIGZvciB0ZXh0IHNlbGVjdGlvbiAm
IHBhaW50aW5nLCB0byBtYXAgb3VyIHF1ZXJ5IHN0YXJ0L2xlbmd0aCBpbnRvIHN0YXJ0L2VuZFBv
c2l0aW9ucyBvZiB0aGUgY3VycmVudCB0ZXh0IGZyYWdtZW50LgorICAgIEFTU0VSVChzdGFydFBv
c2l0aW9uID49IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyk7CisgICAgQVNTRVJUKGVu
ZFBvc2l0aW9uID49IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyk7CiAgICAgc3RhcnRQ
b3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7CiAgICAgZW5kUG9zaXRp
b24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogCi0gICAgaWYgKHN0YXJ0UG9z
aXRpb24gPj0gZW5kUG9zaXRpb24gfHwgc3RhcnRQb3NpdGlvbiA8IDAgfHwgZW5kUG9zaXRpb24g
PCAwKQorICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVy
ZXMocXVlcnlEYXRhLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBAIC0xNTEsNyArMTUz
LDcgQEAgYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVz
KERhdGEqIHF1ZXJ5RGF0YSwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBj
b25zdAordm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGlu
Z0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNp
Z25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMq
IGxheW91dEF0dHJpYnV0ZXMgPSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+bGF5b3V0QXR0cmli
dXRlcygpOwogICAgIFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0g
bGF5b3V0QXR0cmlidXRlcy0+dGV4dE1ldHJpY3NWYWx1ZXMoKTsKQEAgLTE2Nyw3ICsxNjksNyBA
QCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGln
YXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAgIGJvb2wgYWx0ZXJTdGFydFBvc2l0aW9uID0g
dHJ1ZTsKICAgICBib29sIGFsdGVyRW5kUG9zaXRpb24gPSB0cnVlOwogCi0gICAgaW50IGxhc3RQ
b3NpdGlvbk9mZnNldCA9IC0xOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0UG9zaXRpb25P
ZmZzZXQ7CiAgICAgZm9yICg7IHRleHRNZXRyaWNzT2Zmc2V0IDwgdGV4dE1ldHJpY3NTaXplICYm
IHBvc2l0aW9uT2Zmc2V0IDwgcG9zaXRpb25TaXplOyArK3RleHRNZXRyaWNzT2Zmc2V0KSB7CiAg
ICAgICAgIFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzID0gdGV4dE1ldHJpY3NWYWx1ZXNbdGV4dE1l
dHJpY3NPZmZzZXRdOwogCkBAIC0xODIsMjEgKzE4NCwyMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6
bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0
YSwgaQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IHBvc2l0
aW9uIG1hcHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhlIG1ldHJpY3MgbGlzdCwgd2UgZG9uJ3QgbmVl
ZCB0byBtb2RpZnkgaXQuCi0gICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09IHN0YXRpY19jYXN0
PGludD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBwb3Np
dGlvbk9mZnNldCkKICAgICAgICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogCiAg
ICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRo
ZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAo
ZW5kUG9zaXRpb24gPT0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAg
IGlmIChlbmRQb3NpdGlvbiA9PSBwb3NpdGlvbk9mZnNldCkKICAgICAgICAgICAgIGFsdGVyRW5k
UG9zaXRpb24gPSBmYWxzZTsKIAogICAgICAgICAvLyBEZXRlY3QgbGlnYXR1cmVzLgotICAgICAg
ICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBv
c2l0aW9uT2Zmc2V0ID4gMSkgewotICAgICAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAm
JiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBz
dGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0
UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CisgICAgICAgIGlmIChsYXN0UG9zaXRpb25P
ZmZzZXQgJiYgbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgLSBwb3NpdGlvbk9mZnNldCA+IDEp
IHsKKyAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+
IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9m
ZnNldCkgeworICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZz
ZXQudmFsdWUoKTsKICAgICAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5k
UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2Fz
dDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgeworICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRp
b24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBlbmRQb3Np
dGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBw
b3NpdGlvbk9mZnNldDsKICAgICAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7
CiAgICAgICAgICAgICB9CkBAIC0yMTIsMTEgKzIxNCwxMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6
bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0
YSwgaQogICAgIGlmICghYWx0ZXJTdGFydFBvc2l0aW9uICYmICFhbHRlckVuZFBvc2l0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxh
c3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgewotICAgICAgICBpZiAoYWx0
ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYg
c3RhcnRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQotICAgICAg
ICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldDsKKyAgICBpZiAobGFzdFBv
c2l0aW9uT2Zmc2V0ICYmIGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpIC0gcG9zaXRpb25PZmZz
ZXQgPiAxKSB7CisgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlv
biA+IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlv
bk9mZnNldCkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQu
dmFsdWUoKTsKIAotICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+
IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBlbmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9z
aXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlv
biA+IGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIGVuZFBvc2l0aW9uIDwgcG9zaXRpb25P
ZmZzZXQpCiAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uT2Zmc2V0OwogICAgIH0K
IH0KQEAgLTI4NCw4ICsyODYsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3Ro
Q2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbgogewogICAgIFN1
YlN0cmluZ0xlbmd0aERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdWJTdHJpbmdMZW5ndGhEYXRh
Kj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3Np
dGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgZGF0YS0+bGVuZ3Ro
OworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5zdGFydFBvc2l0aW9uOworICAg
IHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKICAg
ICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlE
YXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMxOSw4ICszMjEsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQ
b3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZQog
ewogICAgIFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxT
dGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFy
dFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQ
b3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9u
OworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYg
KCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwg
ZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC0zNjgsOCArMzcwLDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9u
T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHQKIHsKICAg
ICBFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEVuZFBvc2l0
aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9u
ID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiAr
IDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVu
c2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQs
IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC00MTYsOCArNDE4LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJD
YWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmEKIHsKICAgICBSb3RhdGlv
bk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJE
YXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRp
b247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTQsNyArNDU2LDcg
QEAgc3RydWN0IEV4dGVudE9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAg
ICAgRmxvYXRSZWN0IGV4dGVudDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVH
bHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1ZXJ5OjpEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVu
dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1
ZXJ5OjpEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQogewogICAgIGZsb2F0IHNj
YWxpbmdGYWN0b3IgPSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpOwog
ICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTQ4NCw4ICs0ODYsOCBAQCBib29sIFNWR1Rl
eHRRdWVyeTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0
IFNWR1RleHRGcmFnbQogewogICAgIEV4dGVudE9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRp
Y19jYXN0PEV4dGVudE9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlv
bjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlm
ICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEs
IGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNTE5LDggKzUyMSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJO
dW1iZXJBdFBvc2l0aW9uQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUCiAKICAg
ICBGbG9hdFJlY3QgZXh0ZW50OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVu
dC5sZW5ndGg7ICsraSkgewotICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nl
c3NlZENoYXJhY3RlcnMgKyBpOwotICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uICsgMTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nlc3Nl
ZENoYXJhY3RlcnMgKyBpOworICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gKyAxOwogICAgICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRp
b24pKQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRRdWVyeS5oCmluZGV4IDcyMWIyZGY4ZTMzMjQ1ZGE4NjQzMzg1YmU2ZWUyYjFk
MmIwOTM4ZGYuLjM4NzMwYTM4ZDA2MWU4MjVjZDkzN2Q3ODE4NGI4ZDNiM2ZhMGZhYWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaApAQCAtNTIsOCArNTIs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQcm9jZXNzVGV4dEZy
YWdtZW50Q2FsbGJhY2spIGNvbnN0OwogCiAgICAgdm9pZCBjb2xsZWN0VGV4dEJveGVzSW5GbG93
Qm94KElubGluZUZsb3dCb3gqKTsKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3Rh
cnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7Ci0gICAgdm9pZCBtb2RpZnlTdGFy
dEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIGludCYgc3RhcnRQb3NpdGlv
biwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1
bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAg
ICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiwg
dW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBudW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayhEYXRhKiwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JikgY29uc3Q7Cg==
</data>
<flag name="review"
          id="309435"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285863</attachid>
            <date>2016-08-11 16:30:08 -0700</date>
            <delta_ts>2016-08-11 16:56:39 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-160735-20160811162830.patch</filename>
            <type>text/plain</type>
            <size>144263</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU1NDBlMTUxMGFmYzc4
MjQyNzM5MmM1NTczNDAwODQ1MDdiYTEyNy4uZGRiOGRkNjA4MjQ2YmNkMmEwNTc2NGE4ZDMwY2Y4
MTg4NGE5M2E5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NCBAQAorMjAxNi0wOC0xMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFRoZXJl
IGFyZSBhIGZldyBjYXNlcyB3aGVyZSB3ZSB1c2UgaW50cyB0byByZWZlciB0byBpbmRpY2VzIGlu
dG8gc3RyaW5nczoKKyAgICAgICAgLSBBIHNpbXBsZSBoaXN0b3JpY2FsIGFjY2lkZW50LiBUaGVz
ZSB3ZXJlIG1pZ3JhdGVkIHRvIHVuc2lnbmVkcyBkaXJlY3RseS4KKyAgICAgICAgLSBXaGVyZSB3
ZSB1c2UgLTEgYXMgYSBzZW50aW5hbCB2YWx1ZS4gVGhlc2Ugd2VyZSBtaWdyYXRlZCB0byBPcHRp
b25hbDx1bnNpZ25lZD4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IG1vZGlmaWVzIHJlbmRl
cmluZyBjb2RlIChyYXRoZXIgdGhhbiBET00gY29kZSkuIFRoZXJlIGFyZSBhIGZldworICAgICAg
ICBwbGFjZXMgaW4gRE9NIGNvZGUgKHN1Y2ggYXMgUG9zaXRpb24gYW5kIE5vZGU6Om1heENoYXJh
Y3Rlck9mZnNldCgpKSB3aGljaCBhbHNvCisgICAgICAgIGVycm9uZW91c2x5IHVzZSBpbnRzOyBo
b3dldmVyLCBJIGRpZG4ndCB3YW50IHRoaXMgY2hhbmdlIHRvIGJlIG9ic2VydmFibGUgZnJvbQor
ICAgICAgICBzY3JpcHQgYW5kIEkgd2FudGVkIHRvIGtlZXAgdGhpcyBwYXRjaCB0byBhIHJlYXNv
bmFibGUgc2l6ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGb3JSYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdseXBoQnVmZmVyRm9yVGV4
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd1RleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVW5kZXJsaW5lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmdseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhC
dWZmZXI6OmZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNocmluayk6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c3dhcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFy
a3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpMYXRpbjFUZXh0SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZU9uZUNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzVG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdHbHlwaHNTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRy
YXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9jYWxTZWxl
Y3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om9m
ZnNldFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpJbmxpbmVUZXh0Qm94
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6
bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlv
blJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVh
clN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXBwbHlT
dWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rp
b25TdWJ0cmVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6c2VsZWN0aW9uQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJl
ZURhdGE6OnNldFNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2V0U2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6Ok9sZFNlbGVjdGlvbkRhdGE6Ok9sZFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
UGFpbnRlcjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQ
YWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRR
dWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oOgorCiAyMDE2LTA4
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWxpZ24gUmFu
Z2Uuc3Vycm91bmRDb250ZW50cygpIHdpdGggdGhlIGxhdGVzdCBET00gc3BlY2lmaWNhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAzMzgzNGFkMDk2
ZTgxODIyNTE2ZTc4MTNiMmI4MGRjOWJiMjZlMmQ0Li42ZTExMDQ5MDE4NjhhODgzZmFjNDMyNzlm
YjYxYmVlODA2YmYxYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcApAQCAtMjA4OCw4ICsyMDg4LDExIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFw
cGVhcmFuY2UoKQogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlmeSB0aGUgRnJhbWVT
ZWxlY3Rpb24gb2YgdGV4dCByZW1vdmFsLgogICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAm
JiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVy
ID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQ
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAm
JiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxp
dHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgp
ID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBsYXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAo
bV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUo
Km1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2Ni
YzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQwODQwNmMwLi41MjkwZGViZTQ0NGJiZDMxODNh
ZmYyOWZkMDM2NWQzNjgwMDQ4MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
cjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyOwotICAgIGludCBzdGFydE9mZnNldDsK
LSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsK
KyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZv
cmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwxMCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFj
awogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25z
ID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8g
U25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQgOiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAg
ICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBS
ZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5k
T2Zmc2V0ID49IDApOworICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFy
dE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhp
bmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNl
IHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25h
cHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxm
LgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJl
Y3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5k
ZXggNDM4MGI1YzA4NTMyZTgyMWFjYWEzNGVmMmNkNzhiNTExNjZhNWJiOS4uMzg2Njk5MWYwODhk
YjE1OWQ1MGNkMzdiYTJhMzFjYmNiNDkxMGNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMjk0LDE0ICsyOTQsMTQgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9y
KSBjb25zdAogICAgIG1fcmVxdWlyZXNTaGFwaW5nID0gY29tcHV0ZVJlcXVpcmVzU2hhcGluZygp
OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRo
IGNvZGVQYXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdseXBoQnVm
ZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBjb25zdCBUZXh0UnVuJiBydW4s
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpIGNv
bnN0CiB7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKICAgICAgICAgcmV0dXJu
IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1
ZmZlcik7CiAgICAgcmV0dXJuIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1Rl
eHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRy
YXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25z
dAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3Rv
bSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2Vw
dCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBp
dCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zMDksMTUgKzMwOSwxNSBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKyAgICB1bnNp
Z25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1No
YXBpbmcoKSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVu
Z3RoKCkpKQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5p
bmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVu
Lmxlbmd0aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCkgKyBnbHlw
aEJ1ZmZlckZvclRleHRSdW4oY29kZVBhdGhUb1VzZSwgcnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIpOworICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdseXBoQnVmZmVyRm9yVGV4dFJ1
bihjb2RlUGF0aFRvVXNlLCBydW4sIGZyb20sIGRlc3RpbmF0aW9uLCBnbHlwaEJ1ZmZlcik7CiAg
ICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gR2l2ZSB1
cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTMyNywyMyArMzI3LDIyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gc3Rh
cnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFs
PHVuc2lnbmVkPiB0bykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5sZW5ndGgo
KSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICAv
LyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBy
dW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8x
MDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVLZXJuaW5n
KCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IGRl
c3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21w
bGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgZHJhd0Vt
cGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1
biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwg
ZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRl
eHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKIH0KIAogZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CkBAIC00
OTEsMTkgKzQ5MCwxOSBAQCBib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNoYXJXaWR0aElm
QXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAot
dm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCBPcHRp
b25hbDx1bnNpZ25lZD4gdG8pIGNvbnN0CiB7Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVu
Z3RoKCkgOiB0byk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5s
ZW5ndGgoKSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsK
ICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFy
dGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5v
cmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBD
b21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9t
IHx8IGRlc3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2Ug
PSBDb21wbGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAg
cmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiAKLSAgICByZXR1
cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwg
ZnJvbSwgdG8pOworICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
cnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiB9CiAKIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdApAQCAtMTEyMyw3ICsxMTIyLDcgQEAgYm9vbCBG
b250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
bnRzICYmIG1fZm9udHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CiB9CiAgICAgCi1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBpbmRleCkKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gSW4gZ2VuZXJhbCwgd2Ug
d2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24g
Q0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKICAgICAvLyBz
byB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXIt
YnktY2hhcmFjdGVyIGJhc2lzKS4KQEAgLTEyMzgsNyArMTIzNyw3IEBAIGludCBGb250Q2FzY2Fk
ZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBG
b3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0
IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xMjY4LDcgKzEyNjcsNyBAQCBmbG9hdCBGb250Q2FzY2Fk
ZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
aW50IGZybwogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEyODcsOCArMTI4Niw4IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgp
IC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAgICAgZmxvYXQgbmV4
dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpOwog
ICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
MCkuaGVpZ2h0KCk7Ci0gICAgaW50IGxhc3RGcm9tID0gMDsKLSAgICBpbnQgbmV4dEdseXBoID0g
MTsKKyAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CisgICAgdW5zaWduZWQgbmV4dEdseXBoID0g
MTsKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAg
IGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgp
OwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5l
eHRHbHlwaCk7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNl
dFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCiAgICAg
cmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7CiB9CiAKLWlubGluZSBz
dGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQoraW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01p
ZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgaSkKIHsKICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZv
bnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CkBAIC0xMzQ0LDcgKzEzNDMsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2lu
dC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9u
dERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAKICAgICBHbHlwaEJ1ZmZlciBtYXJrQnVm
ZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBnbHlwaEJ1ZmZlci5zaXplKCk7
ICsraSkgewogICAgICAgICBmbG9hdCBtaWRkbGVPZk5leHRHbHlwaCA9IG9mZnNldFRvTWlkZGxl
T2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAxKTsKICAgICAgICAgZmxvYXQgYWR2YW5j
ZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpIC0gbWlkZGxlT2ZMYXN0R2x5cGgg
KyBtaWRkbGVPZk5leHRHbHlwaDsKICAgICAgICAgbWFya0J1ZmZlci5hZGQoZ2x5cGhCdWZmZXIu
Z2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1hcmtGb250RGF0YSwgYWR2YW5j
ZSk7CkBAIC0xMzcxLDcgKzEzNzAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJl
dHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0
aGlzLCBydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKaW5kZXggYzZkMGMyNTk4ZWQxNjMxYmU2MTZlN2Q3OGJkMzI2NTBjNjZjYzFkYS4uOGJk
Y2NhODA3MjJlMjU5OWI4MTQ1MTZmMjg2YzBiNDE0MTZkODg2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwogICAgIHZpcnR1YWwgfkds
eXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQogfTsKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBo
VW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBpbmRleCk7CiAKIGNsYXNzIFRleHRMYXlvdXREZWxldGVy
IHsKIHB1YmxpYzoKQEAgLTEzMyw5ICsxMzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUo
UmVmUHRyPEZvbnRTZWxlY3Rvcj4mJikgY29uc3Q7CiAKICAgICBlbnVtIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQsIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgc3RhdGljIHZv
aWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0
byA9IE51bGxvcHQpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAKQEAgLTE0NSw3ICsxNDUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0g
MCk7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gTnVsbG9w
dCkgY29uc3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENhcHM6OlNtYWxsOyB9CiAK
QEAgLTIxOCwxNSArMjE4LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0
RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CiAK
LSAgICBmbG9hdCBnbHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBhdGgsIGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OworICAgIGZsb2F0IGdseXBo
QnVmZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGlu
aXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKICAgICB2
b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEds
eXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPEdseXBoRGF0YT4gZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogCkBAIC0yMzQsMTEg
KzIzNCwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0
cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4
dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0
OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGlu
dCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBw
b3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0
U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3Q7CiAKICAgICBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBh
bnNpb25CZWhhdmlvcik7CiAgICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKaW5kZXggYzgyYWYzOTA4NDRmNWQyN2Uy
ZTYwNDc5ZDliZDdlYjQ5MWQwNzlkYi4uNTYzNTQwYzBlNzQzOWUyNDQ4NjQxM2UwNmI5NDc4YjFj
NzhjY2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1
ZmZlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIHR5cGVkZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2
YW5jZTsKIGNsYXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnQuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udC5zaXplKCk7IH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CkBAIC05
MSwxMiArOTEsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzKGludCBmcm9tKSB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgeyByZXR1cm4gbV9h
ZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9Ci0g
ICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgY29uc3QgeyBy
ZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CisgICAgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
KyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJu
IG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocyh1bnNpZ25lZCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBm
cm9tOyB9CisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyh1bnNpZ25lZCBm
cm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAgIGNv
bnN0IEZvbnQqIGZvbnRBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFtpbmRleF07
IH0KKyAgICBjb25zdCBGb250KiBmb250QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udFtpbmRleF07IH0KIAogICAgIHZvaWQgc2V0SW5pdGlhbEFkdmFuY2UoR2x5cGhCdWZm
ZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFkdmFuY2UgPSBpbml0aWFsQWR2
YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYgaW5pdGlhbEFkdmFuY2UoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TGVhZGluZ0V4cGFuc2lvbihmbG9hdCBsZWFkaW5nRXhwYW5zaW9u
KSB7IG1fbGVhZGluZ0V4cGFuc2lvbiA9IGxlYWRpbmdFeHBhbnNpb247IH0KICAgICBmbG9hdCBs
ZWFkaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9sZWFkaW5nRXhwYW5zaW9uOyB9CiAg
ICAgCi0gICAgR2x5cGggZ2x5cGhBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGggZ2x5cGhB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBy
ZXR1cm4gbV9nbHlwaHNbaW5kZXhdLmluZGV4OwpAQCAtMTEzLDEyICsxMTMsMTIgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdChpbnQg
aW5kZXgpIGNvbnN0CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkdmFuY2VzW2luZGV4XTsKICAg
ICB9CiAKLSAgICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdAorICAgIEZsb2F0
U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgUExBVEZPUk0o
V0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKQEAgLTE4MCw5ICsxODAsOSBA
QCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJldmVyc2UoaW50IGZyb20sIGlu
dCBsZW5ndGgpCisgICAgdm9pZCByZXZlcnNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0
aCkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3Ro
IC0gMTsgaSA8IGVuZDsgKytpLCAtLWVuZCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJv
bSwgZW5kID0gZnJvbSArIGxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsraSwgLS1lbmQpCiAgICAgICAg
ICAgICBzd2FwKGksIGVuZCk7CiAgICAgfQogCkBAIC0xOTgsMTQgKzE5OCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fb2Zmc2V0c0luU3RyaW5nLnJlc2V0KG5ldyBWZWN0b3I8dW5zaWduZWQsIDIw
NDg+KCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnRzIGZyb20gYW4gdW5z
aWduZWQgdG8gYW4gaW50Ci0gICAgaW50IG9mZnNldEluU3RyaW5nKGludCBpbmRleCkgY29uc3QK
KyAgICBpbnQgb2Zmc2V0SW5TdHJpbmcodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vZmZzZXRzSW5TdHJpbmcpOwogICAgICAgICByZXR1cm4gKCptX29mZnNl
dHNJblN0cmluZylbaW5kZXhdOwogICAgIH0KIAotICAgIHZvaWQgc2hyaW5rKGludCB0cnVuY2F0
aW9uUG9pbnQpCisgICAgdm9pZCBzaHJpbmsodW5zaWduZWQgdHJ1bmNhdGlvblBvaW50KQogICAg
IHsKICAgICAgICAgbV9mb250LnNocmluayh0cnVuY2F0aW9uUG9pbnQpOwogICAgICAgICBtX2ds
eXBocy5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKQEAgLTIxOCw3ICsyMTcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgy
KQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEsIHVuc2lnbmVkIGluZGV4MikKICAgICB7
CiAgICAgICAgIGNvbnN0IEZvbnQqIGYgPSBtX2ZvbnRbaW5kZXgxXTsKICAgICAgICAgbV9mb250
W2luZGV4MV0gPSBtX2ZvbnRbaW5kZXgyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGFmMTkxMjI3MDM0ZWFjMTYw
YmUzZmIyYTA2ZjZkNGRlM2JmZjI3ZWUuLmVkZjYwNTM4Yjg5MzBiZTBiODk3OTk5YTVlNDMxMGM3
NTBhNDc3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50Owog
fQogCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
dW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjQ1LDcgKzY0NSw3IEBAIGZsb2F0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwg
cG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjU4LDcgKzY1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3QgRm9udCYgZm9uCiAgICAgZm9u
dENhc2NhZGUuZHJhd0dseXBocygqdGhpcywgZm9udCwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50LCBmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAzODkzNDA2
NjQ5MzQ4OTQ2NDBjMzM2ZGJiMjJlZTE4ZmE2YjJhNWFmLi5hNmU2ZmIwM2MyYmRiMDA3ZjFhNmI4
MDE2MDk3Y2RmNmIzODc4YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzgxLDkgKzM4MSw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7CiAgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgZmxvYXQgZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0KTsKKyAg
ICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0
KTsKICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCiAgICAgdm9p
ZCBhcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCmluZGV4
IGM0MDE4OWJmZTkzMzJhMGRlYjQwNjQzYzE0ZDFlMjgwNzdkYWQzODkuLjQzMWQ4ZmYyMGQ0N2U0
ZTU5ZmU5YjRhYjA0N2RhNDA5NmIwN2YwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCkBAIC0yOCwxOCArMjgsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXRpbjFUZXh0SXRlcmF0b3IgewogcHVi
bGljOgotICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJl
bnRDaGFyYWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0ZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50
Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdENoYXJhY3RlcicuCi0gICAgTGF0aW4xVGV4dEl0ZXJhdG9yKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCAv
KmVuZENoYXJhY3RlciovKQorICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFy
dHMgYXQgJ2N1cnJlbnRJbmRleCcuIFRoZSBpdGVyYXRvciBvcGVyYXRlcyBvbiB0aGUgcmFuZ2Ug
W2N1cnJlbnRJbmRleCwgbGFzdEluZGV4XS4KKyAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdEluZGV4Jy4KKyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRJbmRleCwgdW5zaWduZWQgbGFzdEluZGV4LCB1bnNpZ25l
ZCAvKmVuZENoYXJhY3RlciovKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQot
ICAgICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICAgICAs
IG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFjdGVyKQorICAgICAgICAsIG1fY3VycmVudEluZGV4
KGN1cnJlbnRJbmRleCkKKyAgICAgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCiAgICAgewog
ICAgIH0KIAogICAgIGJvb2wgY29uc3VtZShVQ2hhcjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVkJiBj
bHVzdGVyTGVuZ3RoKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA+PSBt
X2xhc3RDaGFyYWN0ZXIpCisgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2xhc3RJbmRl
eCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjaGFyYWN0ZXIgPSAqbV9j
aGFyYWN0ZXJzOwpAQCAtNTAsMTYgKzUwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2Uo
dW5zaWduZWQgYWR2YW5jZUxlbmd0aCkKICAgICB7CiAgICAgICAgIG1fY2hhcmFjdGVycyArPSBh
ZHZhbmNlTGVuZ3RoOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0
aDsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAg
ICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rl
cjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEluZGV4OyB9CiAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXJz
OwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFzdENoYXJhY3RlcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCmluZGV4IDkxNTVl
NzExYThkYTgwZDRlYjNkY2Y1ZGE1YWMzMDVhMjhjYmVhNzkuLjY4MmQ5OGUyNTM1YzJkYjRiN2Fl
MTMwYjUzY2QxNjJkMGI2OWUxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcApAQCAtMjcsMTEgKzI3LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Io
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENo
YXJhY3RlciwgaW50IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRv
cjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBjdXJyZW50SW5kZXgsIHVuc2lnbmVkIGxhc3RJbmRleCwgdW5zaWduZWQgZW5k
SW5kZXgpCiAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKLSAgICAsIG1fY3VycmVudENo
YXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFy
YWN0ZXIpCi0gICAgLCBtX2VuZENoYXJhY3RlcihlbmRDaGFyYWN0ZXIpCisgICAgLCBtX2N1cnJl
bnRJbmRleChjdXJyZW50SW5kZXgpCisgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCisgICAg
LCBtX2VuZEluZGV4KGVuZEluZGV4KQogewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgU3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjb25zdW1lU2xvd0Nhc2UoVUNoYXIzMiYgY2hh
cmFjdGVyLCB1bnNpZ25lCiAKICAgICAvLyBEbyB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXI/IElm
IHNvLCBkZXRlcm1pbmUgdGhlIGZ1bGwgVW5pY29kZSAoMzIgYml0KSBjb2RlIHBvaW50IGJlZm9y
ZSBnbHlwaCBsb29rdXAuCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW5vdGhlciBjaGFyYWN0
ZXIgYW5kIGl0J3MgYSBsb3cgc3Vycm9nYXRlLgotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIg
KyAxID49IG1fZW5kQ2hhcmFjdGVyKQorICAgIGlmIChtX2N1cnJlbnRJbmRleCArIDEgPj0gbV9l
bmRJbmRleCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIgbG93ID0gbV9jaGFy
YWN0ZXJzWzFdOwpAQCAtNzQsNyArNzQsNyBAQCBVQ2hhcjMyIFN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvcjo6bm9ybWFsaXplVm9pY2luZ01hcmtzKCkKICAgICAvLyBBY2NvcmRpbmcgdG8g
aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRtbCNDYW5vbmljYWxf
Q29tYmluaW5nX0NsYXNzX1ZhbHVlcwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhpcmFnYW5h
S2F0YWthbmFWb2ljaW5nTWFya3NDb21iaW5pbmdDbGFzcyA9IDg7CiAKLSAgICBpZiAobV9jdXJy
ZW50Q2hhcmFjdGVyICsgMSA+PSBtX2VuZENoYXJhY3RlcikKKyAgICBpZiAobV9jdXJyZW50SW5k
ZXggKyAxID49IG1fZW5kSW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHVfZ2V0
Q29tYmluaW5nQ2xhc3MobV9jaGFyYWN0ZXJzWzFdKSA9PSBoaXJhZ2FuYUthdGFrYW5hVm9pY2lu
Z01hcmtzQ29tYmluaW5nQ2xhc3MpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgK
aW5kZXggODVjOTY5NGM3NmEyMmNkZWFlZWIzYmE4NDFiMTBhMGE1MDMxNjgxMy4uNDcwZDE0YWYy
NWRjNGI0NjA1OTM3ZDQ1MjVhZjUyZjVhMTE2YTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4
dEl0ZXJhdG9yLmgKQEAgLTI4LDEzICsyOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8gVGhl
IHBhc3NlZCBpbiBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJhY3RlcicuIFRo
ZSBpdGVyYXRvciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0
Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxl
bmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3Rl
cicuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVyKTsK
KyAgICAvLyBUaGUgcGFzc2VkIGluIFVDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50SW5k
ZXgnLiBUaGUgaXRlcmF0b3Igb3BlcmF0b2VzIG9uIHRoZSByYW5nZSBbY3VycmVudEluZGV4LCBs
YXN0SW5kZXhdLgorICAgIC8vICdlbmRJbmRleCcgZGVub3RlcyB0aGUgbWF4aW11bSBsZW5ndGgg
b2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xhc3RJbmRleCcuCisgICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgY3Vy
cmVudEluZGV4LCB1bnNpZ25lZCBsYXN0SW5kZXgsIHVuc2lnbmVkIGVuZEluZGV4KTsKIAogICAg
IGlubGluZSBib29sIGNvbnN1bWUoVUNoYXIzMiYgY2hhcmFjdGVyLCB1bnNpZ25lZCYgY2x1c3Rl
ckxlbmd0aCkKICAgICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPj0gbV9sYXN0
Q2hhcmFjdGVyKQorICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9sYXN0SW5kZXgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2hhcmFjdGVyID0gKm1fY2hhcmFj
dGVyczsKQEAgLTQ5LDEwICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKHVuc2ln
bmVkIGFkdmFuY2VMZW5ndGgpCiAgICAgewogICAgICAgICBtX2NoYXJhY3RlcnMgKz0gYWR2YW5j
ZUxlbmd0aDsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5ndGg7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ICs9IGFkdmFuY2VMZW5ndGg7CiAgICAgfQogCi0gICAgaW50
IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0K
KyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRl
eDsgfQogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
YWN0ZXJzOyB9CiAKIHByaXZhdGU6CkBAIC02MCw5ICs2MCw5IEBAIHByaXZhdGU6CiAgICAgVUNo
YXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoKTsKIAogICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9sYXN0Q2hhcmFj
dGVyOwotICAgIGludCBtX2VuZENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VuZEluZGV4Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcAppbmRleCAwYjlhNzQwMmFmYjYxMzYwNjA1OGVkOTgzMTRhNmIxZGNiOTA1NmI0
Li41NGRiNGYyOWZhZDRjNzM3YzAwODgwODZiNmEyMDk1NzIwODMzMTNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtODEs
NyArODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFua0Vtb2ppKFVDaGFyMzIgY29k
ZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAxICYmIGNvZGVwb2ludCA8PSAw
eEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRy
YW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBpbnQgbGFzdEdseXBoQ291
bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitp
bmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFy
MzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7CiAgICAgaWYg
KGdseXBoQnVmZmVyICYmIGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsg
MSkgJiYgaXNTb2Z0QmFua0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQ7CkBAIC05MCwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8g
V2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWYKICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0KIAot
aW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9u
dCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitpbmxpbmUgZmxvYXQg
V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQs
IFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQogewogICAgIEFTU0VSVF9VTlVTRUQo
cHJldmlvdXNDaGFyYWN0ZXIsIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIs
IGxhc3RHbHlwaENvdW50LCBwcmV2aW91c0NoYXJhY3RlcikgIT0gV2lkdGhJdGVyYXRvcjo6VHJh
bnNmb3Jtc1R5cGU6Ok5vbmUpOwogCiAgICAgaWYgKCFnbHlwaEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpbnQgZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsK
KyAgICB1bnNpZ25lZCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOwogICAg
IGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJTaXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewog
ICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0xMDUsOSArMTA1LDEwIEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBs
eUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAKICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXItPmFkdmFuY2VzKDApOwog
ICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlw
aENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhE
aWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKKyAgICBBU1NFUlQobGFzdEdseXBo
Q291bnQgPD0gZ2x5cGhCdWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikKICAgICAgICAgZ2x5cGhC
dWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlw
aENvdW50KTsKIApAQCAtMTI1LDcgKzEyNiw3IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9y
OjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAg
ICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOwogCi0gICAgZm9yIChp
bnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkK
ICAgICAgICAgd2lkdGhEaWZmZXJlbmNlICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBs
YXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKQEAgLTE4MSw3ICsxODIsNyBAQCBpbmxp
bmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYg
dGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBtX2Zv
bnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgRm9udCogbGFzdEZvbnREYXRhID0gJnByaW1h
cnlGb250OwotICAgIGludCBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZm
ZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWduZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZl
ciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAw
OwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIgPSAwOwpAQCAtMzU2LDE0ICszNTcsMTQg
QEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRl
cmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICByZXR1cm4gY29uc3VtZWRDaGFyYWN0ZXJz
OwogfQogCi11bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3Vuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UodW5z
aWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IGxlbmd0
aCA9IG1fcnVuLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgp
OwogCiAgICAgaWYgKG9mZnNldCA+IGxlbmd0aCkKICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOwog
Ci0gICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zm
c2V0KSkKKyAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID49IG9mZnNldCkKICAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKQEAgLTM3NywxMCArMzc4LDEwIEBA
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIq
IGdseXBoQnVmZmVyKQogCiBib29sIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0ZXIo
ZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IG9sZFNp
emUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IGdseXBoQnVm
ZmVyLnNpemUoKTsKICAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1
ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBn
bHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBp
IDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpCiAgICAgICAgIHcgKz0gZ2x5cGhCdWZmZXIuYWR2
YW5jZUF0KGkpLndpZHRoKCk7CiAgICAgd2lkdGggPSB3OwogICAgIHJldHVybiBnbHlwaEJ1ZmZl
ci5zaXplKCkgPiBvbGRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IDY4ZmUzZjNmNWJiM2Y5NzkyODkyNzUyNTg2MDY4NjFl
NWNlOTI4NjMuLmM0NWZkYjhjMzZhM2ZlMmYzZWY4NmM4OTU5ZWY1NTE2YTM5MDEyNTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAg
LTQyLDcgKzQyLDcgQEAgc3RydWN0IFdpZHRoSXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRo
SXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9
IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAotICAgIHVuc2lnbmVkIGFk
dmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciopOworICAgIHVuc2lnbmVkIGFkdmFuY2UodW5zaWdu
ZWQgdG8sIEdseXBoQnVmZmVyKik7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0
JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZ
KCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhH
bHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIGlubGlu
ZSB1bnNpZ25lZCBhZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsK
IAogICAgIGVudW0gY2xhc3MgVHJhbnNmb3Jtc1R5cGUgeyBOb25lLCBGb3JjZWQsIE5vdEZvcmNl
ZCB9OwotICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3Qg
R2x5cGhCdWZmZXIqLCBpbnQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXIpIGNvbnN0OwotICAgIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqLCBi
b29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlv
dXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYpOworICAg
IFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZm
ZXIqLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3Rlcikg
Y29uc3Q7CisgICAgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJvb2wg
bHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHByZXZp
b3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsKIAog
ICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBtX2ZhbGxiYWNrRm9udHMgeyBudWxscHRyIH07CiAg
ICAgYm9vbCBtX2FjY291bnRGb3JHbHlwaEJvdW5kcyB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBl
ODk1ZjE3NTk2NjI5NDA5OWQ5YmYwYWRlMjZmMTI0NDgzOTcxYjM2Li45ZTMwODAxNTg1MjgzOWNk
NDI4NmE2YWM0NTQyMDAyY2IzOGVjNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0KGNh
aXJvX3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cywgaW50IG51bUdseXBocykKK3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9f
dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1
bnNpZ25lZCBudW1HbHlwaHMpCiB7CiAgICAgY2Fpcm9fbWF0cml4X3Qgb3JpZ2luYWxUcmFuc2Zv
cm07CiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9m
ZnNldCgpOwpAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzVG9Db250ZXh0
KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIEdseXBoQnVmZmVyRwogICAgICAg
ICBjYWlyb19zZXRfbWF0cml4KGNvbnRleHQsICZvcmlnaW5hbFRyYW5zZm9ybSk7CiB9CiAKLXN0
YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHbHlwaEJ1ZmZl
ckdseXBoKiBnbHlwaHMsIGludCBudW1HbHlwaHMpCitzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hh
ZG93KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgY29uc3QgRm9udCYgZm9udCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25l
ZCBudW1HbHlwaHMpCiB7CiAgICAgU2hhZG93Qmx1ciYgc2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5zaGFkb3dCbHVyKCk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYKIH0KIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKQorICAgIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlKQogewogICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGds
eXBoQnVmZmVyLmdseXBocyhmcm9tKSk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54KCk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAgICBnbHlwaHNbaV0ueCA9
IG9mZnNldDsKICAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7CiAgICAgICAgIG9mZnNl
dCArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpLndpZHRoKCk7CkBAIC0yMjksNyAr
MjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWR2YW5jZSgpIGZpbmFsOwogCiBwcml2YXRlOgot
ICAgIGludCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1
biYgbV90ZXh0UnVuOwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwogICAg
IGNvbnN0IEZvbnQqIG1fZm9udERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCmluZGV4
IDIxNmQ5MTFkZTNhMDdmYzdmNDRmOTVjYjBkNDVhYjg2NGU2ZGZjNjcuLjA4YmFlMzgwODQ4ODQ1
NGFkNzM4NjcyYzNlMjg4NDVjODRiZmQwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3Bw
CkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZmxvYXQgRm9udENh
c2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBpbnQsIGludCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8pIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkLCB1bnNpZ25lZCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNP
ck5vdCAvKiBmb3JUZXh0RW1waGFzaXMgKi8pIGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIg
c2hhcGVyKHRoaXMsIHJ1bik7CiAgICAgaWYgKCFzaGFwZXIuc2hhcGUoJmdseXBoQnVmZmVyKSkg
ewpAQCAtNTIsNyArNTIsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCwgaQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYgLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICov
LCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBv
aW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBGb250Q2Fz
Y2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIC8q
IGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5n
JiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgdW5zaWduZWQgLyog
ZnJvbSAqLywgdW5zaWduZWQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KQEAgLTg1LDcgKzg1LDcgQEAgaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlv
bkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm8KICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50
IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2Nh
ZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW0KaW5kZXggN2Y1NjRiMDUyZDVmNTE3NDA5OGVjMGQ0NTBkZjdhOTJhMjI1
Y2UxMi4uOWMxZjFkYWY3Yjk2OTBhZjdmNDMzYmFhZmI0ODIwYjkxOTJkNDM2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tCkBAIC03MCwxMSArNzAsMTEgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhw
YW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlv
bnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwg
MjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZh
bmNlcywgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7
CiAgICAgcG9zaXRpb25zWzBdID0gQ0dQb2ludFplcm87Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9y
bShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7CiAgICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9z
aXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKICAgICAgICAgcG9zaXRpb25zW2ldLnkg
PSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKQEAgLTkxLDcgKzkxLDcgQEAg
c3RhdGljIGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3Qg
Rm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywg
Y29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0xl
dHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlw
aHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQogewogI2lmIEVOQUJM
RShMRVRURVJQUkVTUykKICAgICBpZiAoIWNvdW50KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250
ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHNpemVf
dCBjb3VudCkKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
KQogewogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKQEAgLTE4Miw3ICsxODIsNyBA
QCBzdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBGb250JiBmb250LCBDRwogICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNv
bnRleHQpKTsKIAogICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54
KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhp
Y0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRp
b24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxl
ZnRUcmFuc2Zvcm0pOwogICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZm
aW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwg
cG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CiAgICAgICAgICAg
ICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOwpAQCAtMjIwLDcgKzIyMCw3IEBAIHN0
YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQogICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQs
IGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2
b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBG
b250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0
Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDM0LDcgKzQzNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
dmFuY2UoKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9pbmRleDsKKyAgICB1bnNpZ25l
ZCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRSdW4mIG1fdGV4dFJ1bjsKICAgICBjb25zdCBHbHlw
aEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKICAgICBjb25zdCBGb250KiBtX2ZvbnREYXRhOwpAQCAt
NDg4LDcgKzQ4OCw3IEBAIERhc2hBcnJheSBGb250Q2FzY2FkZTo6ZGFzaGVzRm9ySW50ZXJzZWN0
aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICBGbG9hdFBvaW50IG9y
aWdpbiA9IEZsb2F0UG9pbnQodGV4dE9yaWdpbi54KCkgKyBkZWx0YVgsIHRleHRPcmlnaW4ueSgp
KTsKICAgICBNYWNHbHlwaFRvUGF0aFRyYW5zbGF0b3IgdHJhbnNsYXRvcihydW4sIGdseXBoQnVm
ZmVyLCBvcmlnaW4pOwogICAgIERhc2hBcnJheSByZXN1bHQ7Ci0gICAgZm9yIChpbnQgaW5kZXgg
PSAwOyB0cmFuc2xhdG9yLmNvbnRhaW5zTW9yZVBhdGhzKCk7ICsraW5kZXgsIHRyYW5zbGF0b3Iu
YWR2YW5jZSgpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IHRyYW5zbGF0b3IuY29u
dGFpbnNNb3JlUGF0aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci5hZHZhbmNlKCkpIHsKICAgICAg
ICAgR2x5cGhJdGVyYXRpb25TdGF0ZSBpbmZvID0gR2x5cGhJdGVyYXRpb25TdGF0ZShDR1BvaW50
TWFrZSgwLCAwKSwgQ0dQb2ludE1ha2UoMCwgMCksIGxpbmVFeHRlbnRzLnkoKSwgbGluZUV4dGVu
dHMueSgpICsgbGluZUV4dGVudHMuaGVpZ2h0KCksIGxpbmVFeHRlbnRzLngoKSArIGxpbmVFeHRl
bnRzLndpZHRoKCksIGxpbmVFeHRlbnRzLngoKSk7CiAgICAgICAgIGNvbnN0IEZvbnQqIGxvY2Fs
Rm9udCA9IGdseXBoQnVmZmVyLmZvbnRBdChpbmRleCk7CiAgICAgICAgIGlmICghbG9jYWxGb250
KSB7CkBAIC01MjcsNyArNTI3LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5
c3RlbUZvbnQoKSBjb25zdAogICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZv
bnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERhdGEucGxhdGZvcm1EYXRh
KCkuY3RGb250KCkpKS5nZXQoKSk7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QK
IHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcigqdGhpcywgcnVuKTsKICAg
ICBjb250cm9sbGVyLmFkdmFuY2UoZnJvbSk7CkBAIC01NDIsNyArNTQyLDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmUKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKExheW91dFVuaXQ6OmZy
b21GbG9hdENlaWwoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKSk7CiB9CiAKLWZsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0
RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6
Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0
aWFsQWR2YW5jZTsKIApAQCAtNTY1LDcgKzU2NSw3IEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpnZXRH
bHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZy
CiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3
RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5
cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlw
aHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBG
b3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CmluZGV4IDBiZjE0YmVmNzliZDNhYjJmYjczZjZjNzUwODA3MjZkYTQ0MWUzMWQuLmEyMjQyOTg4
YzA2MDM2MzhhOTY0M2JlOTcwMmY2MzZlYTM1NjQ2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFJlY29yZGVyOjpz
ZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCiAgICAgYXBwZW5kSXRlbShTZXRNaXRlckxp
bWl0OjpjcmVhdGUobWl0ZXJMaW1pdCkpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit2b2lkIFJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBzdGFydFBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIERyYXdpbmdJdGVtJiBuZXdJdGVt
ID0gZG93bmNhc3Q8RHJhd2luZ0l0ZW0+KGFwcGVuZEl0ZW0oRHJhd0dseXBoczo6Y3JlYXRlKGZv
bnQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSks
IG51bUdseXBocywgRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShzdGFydFBvaW50KSwgc21vb3Ro
aW5nTW9kZSkpKTsKICAgICB1cGRhdGVJdGVtRXh0ZW50KG5ld0l0ZW0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKaW5kZXggZWI5OWEzZGRhMDBkMzE3MGNmYzhmMDg2YTQw
MjljYmJjZTFjZDNhNC4uNTJlYTEwNmVkYTg0ZWFlMGZmZTlhYzVmNzQwMGYxZTkwYzU5NTAyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC04MCw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKICNlbmRpZgogCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBp
bnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGlu
Z01vZGUpOworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAKICAgICB2b2lkIGRyYXdJbWFnZShJ
bWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogICAgIHZvaWQgZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50
JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNw
cAppbmRleCA1MjU3MGVjZTM4ZWUzOGI3NDBkOGRmN2VjN2JhM2E0YTA1MTc3MWQzLi45MGIyMTZj
ZGQ5MGE3M2ViM2U4ZmFmNzdmODQ0NGM0YzBhMzM5ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIu
Y3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpz
ZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QKICAgICBtX29mZnNl
dHNbaW5kZXhdID0gRmxvYXRQb2ludChvZmZzZXRYLCBvZmZzZXRZKTsKIH0KIAotaW50IEhhcmZC
dXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQg
dGFyZ2V0WCkKK3Vuc2lnbmVkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6Y2hhcmFjdGVy
SW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKIHsKICAgICBBU1NFUlQodGFyZ2V0WCA8
PSBtX3dpZHRoKTsKICAgICBmbG9hdCBjdXJyZW50WCA9IDA7CkBAIC0xNTYsOSArMTU2LDkgQEAg
ZmxvYXQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjp4UG9zaXRpb25Gb3JPZmZzZXQodW5z
aWduZWQgb2Zmc2V0KQogICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotc3RhdGljIHZvaWQgbm9y
bWFsaXplQ2hhcmFjdGVycyhjb25zdCBUZXh0UnVuJiBydW4sIFVDaGFyKiBkZXN0aW5hdGlvbiwg
aW50IGxlbmd0aCkKK3N0YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGV4dFJ1
biYgcnVuLCBVQ2hhciogZGVzdGluYXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBpbnQg
cG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKICAgICBib29sIGVycm9y
ID0gZmFsc2U7CiAgICAgY29uc3QgVUNoYXIqIHNvdXJjZTsKICAgICBTdHJpbmcgc3RyaW5nRm9y
OEJpdFJ1bjsKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0
ZXJzKGNvbnN0IFRleHRSdW4mIHJ1biwgVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZwogCiAg
ICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7CiAgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVy
OwotICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgIHVuc2lnbmVk
IG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgICAgICBVMTZfTkVYVChzb3VyY2UsIG5leHRQ
b3NpdGlvbiwgbGVuZ3RoLCBjaGFyYWN0ZXIpOwogICAgICAgICAvLyBEb24ndCBub3JtYWxpemUg
dGFicyBhcyB0aGV5IGFyZSBub3QgdHJlYXRlZCBhcyBzcGFjZXMgZm9yIHdvcmQtZW5kLgogICAg
ICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpICYmIGNoYXJhY3Rl
ciAhPSAnXHQnKQpAQCAtMjA0LDE0ICsyMDQsMTQgQEAgSGFyZkJ1enpTaGFwZXI6On5IYXJmQnV6
elNoYXBlcigpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNo
YXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVDaGFyKiBkZXN0aW5hdGlvbiwgaW50IGxlbmd0aCwg
SGFyZkJ1enpTaGFwZXI6Ok5vcm1hbGl6ZU1vZGUgbm9ybWFsaXplTW9kZSkKK3N0YXRpYyB2b2lk
IG5vcm1hbGl6ZVNwYWNlc0FuZE1pcnJvckNoYXJzKGNvbnN0IFVDaGFyKiBzb3VyY2UsIFVDaGFy
KiBkZXN0aW5hdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXpl
TW9kZSBub3JtYWxpemVNb2RlKQogewotICAgIGludCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWdu
ZWQgcG9zaXRpb24gPSAwOwogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICAvLyBJdGVyYXRl
IGNoYXJhY3RlcnMgaW4gc291cmNlIGFuZCBtaXJyb3IgY2hhcmFjdGVyIGlmIG5lZWRlZC4KICAg
ICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsKICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7
Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQg
bmV4dFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBv
c2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CiAgICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0
YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFzIHNwYWNlcyBmb3Igd29yZC1lbmQKICAgICAg
ICAgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSAmJiBjaGFyYWN0ZXIg
IT0gJ1x0JykKQEAgLTQxNywxMSArNDE3LDExIEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxl
Y3RIYXJmQnV6elJ1bnMoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19NX01BU0spIHsKLSAgICAgICAg
ICAgICAgICBpbnQgbWFya0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgbWFya0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgY29u
c3QgVUNoYXIqIG1hcmtDaGFyYWN0ZXJzRW5kID0gaXRlcmF0b3IuY2hhcmFjdGVycygpICsgY2x1
c3Rlckxlbmd0aDsKICAgICAgICAgICAgICAgICB3aGlsZSAobWFya0NoYXJhY3RlcnNFbmQgPCBu
b3JtYWxpemVkQnVmZmVyRW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgbmV4dENo
YXJhY3RlcjsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5leHRDaGFyYWN0ZXJMZW5ndGggPSAw
OworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0Q2hhcmFjdGVyTGVuZ3RoID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgVTE2X05FWFQobWFya0NoYXJhY3RlcnNFbmQsIG5leHRDaGFy
YWN0ZXJMZW5ndGgsIG5vcm1hbGl6ZWRCdWZmZXJFbmQgLSBtYXJrQ2hhcmFjdGVyc0VuZCwgbmV4
dENoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKFVfR0VUX0dDX01BU0sobmV4
dENoYXJhY3RlcikgJiBVX0dDX01fTUFTSykpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTY0MCw3ICs2NDAsNyBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0
aW9uKGZsb2F0IHRhcmdldFgpCiAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0ZhcjsKIH0KIAotRmxv
YXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQorRmxvYXRSZWN0IEhhcmZCdXp6U2hh
cGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKICAgICBmbG9hdCBjdXJyZW50WCA9IDA7CiAg
ICAgZmxvYXQgZnJvbVggPSAwOwpAQCAtNjUzLDE4ICs2NTMsMjIgQEAgRmxvYXRSZWN0IEhhcmZC
dXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVp
Z2h0LCBpbnQKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fcnVuLnJ0bCgpKQogICAgICAgICAgICAgY3VycmVu
dFggLT0gbV9oYXJmQnV6elJ1bnNbaV0tPndpZHRoKCk7Ci0gICAgICAgIGludCBudW1DaGFyYWN0
ZXJzID0gbV9oYXJmQnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKCFm
b3VuZEZyb21YICYmIGZyb20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAg
ICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzID0gbV9oYXJmQnV6elJ1bnNbaV0tPm51bUNoYXJhY3Rl
cnMoKTsKKyAgICAgICAgaWYgKCFmb3VuZEZyb21YICYmIGZyb20gPCBudW1DaGFyYWN0ZXJzKSB7
CiAgICAgICAgICAgICBmcm9tWCA9IG1faGFyZkJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZz
ZXQoZnJvbSkgKyBjdXJyZW50WDsKICAgICAgICAgICAgIGZvdW5kRnJvbVggPSB0cnVlOwotICAg
ICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChmcm9tID49
IG51bUNoYXJhY3RlcnMpOwogICAgICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFmb3VuZFRvWCAmJiB0byA+PSAwICYmIHRvIDwgbnVtQ2hh
cmFjdGVycykgeworICAgICAgICBpZiAoIWZvdW5kVG9YICYmIHRvIDwgbnVtQ2hhcmFjdGVycykg
ewogICAgICAgICAgICAgdG9YID0gbV9oYXJmQnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNl
dCh0bykgKyBjdXJyZW50WDsKICAgICAgICAgICAgIGZvdW5kVG9YID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodG8gPj0gbnVtQ2hh
cmFjdGVycyk7CiAgICAgICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGZvdW5kRnJvbVggJiYgZm91bmRUb1gpCiAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5oCmluZGV4IGJmNzZmMzE3ZTk4MWI1ZGY2Y2RjYTg1NGIwNDU5YTll
YWQwYWRiOWEuLjY0ZDQwYmU3MGVkYzlmYTgzNmVlYWE3OTAyZDFjMGEzOWFjZWY2OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2lu
dCBhZGp1c3RTdGFydFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBmbG9hdCB0b3RhbFdp
ZHRoKCkgeyByZXR1cm4gbV90b3RhbFdpZHRoOyB9CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9u
KGZsb2F0IHRhcmdldFgpOwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKTsKKyAgICBGbG9hdFJlY3Qgc2Vs
ZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pOwogCiBwcml2YXRlOgogICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKQEAgLTcw
LDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1
bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zm
c2V0WCwgZmxvYXQgb2Zmc2V0WSk7CiAgICAgICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgp
IHsgbV93aWR0aCA9IHdpZHRoOyB9CiAKLSAgICAgICAgaW50IGNoYXJhY3RlckluZGV4Rm9yWFBv
c2l0aW9uKGZsb2F0IHRhcmdldFgpOworICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleEZv
clhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKICAgICAgICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zm
c2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKICAgICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7
IHJldHVybiBtX2ZvbnREYXRhOyB9CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgcHJp
dmF0ZToKICAgICAgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICAgICAgdW5zaWduZWQg
bV9zdGFydEluZGV4OwotICAgICAgICBzaXplX3QgbV9udW1DaGFyYWN0ZXJzOworICAgICAgICB1
bnNpZ25lZCBtX251bUNoYXJhY3RlcnM7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwog
ICAgICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogICAgICAgICBoYl9zY3JpcHRfdCBt
X3NjcmlwdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAppbmRleCBhZTk2YWQxNzkxYTkwNzFkZWM5
NzYzNjk4ZWIwOGY3MGMwMWMxZjI0Li43ZGY0ZWZmZjMyYTRiNTA0OGQwNjI0YjAxOTBjNGNkNGVj
NWMzYWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1Ymxp
YzoKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNo
U2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lz
ID0gZmFsc2UpOwogCiAgICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNw
ZWNpZmllZCBjaGFyYWN0ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1
ZmZlciogPSAwLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisgICAgdm9pZCBhZHZhbmNl
KHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxl
ID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0Zv
bnRzID0gbnVsbHB0cik7CiAKICAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZv
ciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQg
eCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGI1YmZmMjcxZjIzMTg3OTVl
MmYxMTEyZmI1ODRmNmIwMjNlYzg0ZTMuLmU4ZDczM2E0NDRmYzU2ZTcyNjY2MWQ2YzViMmJkZGE2
MDYzZTdjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q0dXaW4uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBjcmVh
dGVQYXRoRm9yR2x5cGgoSERDIGhkYywgR2x5cGggZ2x5cGgpCiB9CiAKIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IHNtb290aGluZ01vZGUpCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
IHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91
bGRVc2VGb250U21vb3RoaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFdpbi5jcHAKaW5kZXggMjM5NmE0ZGVlM2RlZTE1MGU3MzY5ZjdlMTZhNDBk
NTAwZjllYzllYi4uNjlmYzljZDI1MGZmMDY3NjJkY2EzNDViYmMwYjY5YWViNmRkMDE1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApA
QCAtNTAsNyArNTAsNyBAQCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnRDYXNj
YWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4p
OwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlCiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMp
IGNvbnN0CiB7CiAgICAgaWYgKGZvclRleHRFbXBoYXNpcykgewogICAgICAgICAvLyBGSVhNRTog
QWRkIGZvclRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQg
dXNlIGl0LgpAQCAtOTEsNyArOTEsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcgogICAgIHJl
dHVybiBiZWZvcmVXaWR0aDsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01h
cmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhh
c2lzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDIwOTM4
YjFmNzQ0NzdhYWQ2MGM3YjEwNGRjZjIwOWQ3ZmE0ZGZkMjYuLjQ1ZmRkN2YzMmJjYWVkZDJjNGNk
ZGNmNTljYmJmYWE5ZTM5MzYyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lz
Qm94LmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3Qg
dGV4dCBydW4gZmxhZ3MgYmVsb3cuCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5
b3V0UmVjdCh4KCkgKyBwYWludE9mZnNldC54KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHJv
b3RCb3guc2VsZWN0aW9uVG9wKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOwogICAg
IFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxl
LCBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RG
b3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgMCwgLTEpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0KTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0
LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwg
Yyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRl
eCBmMzJhMGIzYjNlNTZiZjU3OWVhMDVkMzkxNzA2MDlkZjI5MDliMDlkLi5iOGE1YTUyZmVkNGY0
M2ZlMmE1ODBiODc2ZGY3ZmI5ZDA4ZWYyZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCkBAIC0xMzAsMjEgKzEzMCwyNiBAQCBMYXlvdXRVbml0IElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxl
Y3Rpb25IZWlnaHQoKTsKIH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBz
dGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3Rl
ZCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBz
UG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0
ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PGludD4obV9sZW4pKTsKLSAgICBy
ZXR1cm4gKHNQb3MgPCBlUG9zKTsKKyAgICBpbnQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQ
b3MpOworICAgIGludCBlUG9zID0gY2xhbXBlZE9mZnNldChlbmRQb3MpOworICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzg2CisgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgYmUgY2hlY2tpbmcgaWYgc1BvcyA+PSBlUG9zIGhlcmUsIGJlY2F1c2Ug
dGhvc2UgYXJlIHRoZQorICAgIC8vIGluZGljZXMgdXNlZCB0byBhY3R1YWxseSBnZW5lcmF0ZSB0
aGUgc2VsZWN0aW9uIHJlY3QuIEFsbG93aW5nIHVzIHBhc3QgdGhpcyBndWFyZAorICAgIC8vIG9u
IGFueSBvdGhlciBjb25kaXRpb24gY3JlYXRlcyB6ZXJvLXdpZHRoIHNlbGVjdGlvbiByZWN0cy4K
KyAgICByZXR1cm4gc1BvcyA8IGVQb3MgfHwgKHN0YXJ0UG9zID09IGVuZFBvcyAmJiBzdGFydFBv
cyA+PSBzdGFydCgpICYmIHN0YXJ0UG9zIDw9IChzdGFydCgpICsgbGVuKCkpKTsKIH0KIAogUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgp
CiB7CiAgICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHJlbmRlcmVyKCku
c2VsZWN0aW9uU3RhdGUoKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKLSAgICAgICAgaW50IHN0YXJ0UG9zLCBl
bmRQb3M7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgIHJlbmRl
cmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CiAgICAgICAgIC8vIFRo
ZSBwb3NpdGlvbiBhZnRlciBhIGhhcmQgbGluZSBicmVhayBpcyBjb25zaWRlcmVkIHRvIGJlIHBh
c3QgaXRzIGVuZC4KLSAgICAgICAgaW50IGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigp
IC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CisgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVu
KCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOworICAgICAgICB1bnNpZ25lZCBsYXN0U2Vs
ZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwogCiAg
ICAgICAgIGJvb2wgc3RhcnQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQg
JiYgc3RhcnRQb3MgPj0gbV9zdGFydCAmJiBzdGFydFBvcyA8IG1fc3RhcnQgKyBtX2xlbik7CiAg
ICAgICAgIGJvb2wgZW5kID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQg
JiYgZW5kUG9zID4gbV9zdGFydCAmJiBlbmRQb3MgPD0gbGFzdFNlbGVjdGFibGUpOwpAQCAtMTY1
LDggKzE3MCw4IEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6
c2VsZWN0aW9uU3RhdGUoKQogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiAm
JiByb290KCkuZWxsaXBzaXNCb3goKSkgewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXMg
PSByb290KCkuZWxsaXBzaXNCb3goKTsKICAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uTm9uZSkgewotICAgICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0OwotICAg
ICAgICAgICAgaW50IHNlbGVjdGlvbkVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlv
blN0YXJ0OworICAgICAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kOwogICAgICAgICAgICAg
c3RkOjp0aWUoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVu
ZCgpOwogICAgICAgICAgICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRv
IGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YKICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24g
aXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0aGUKQEAgLTE5MSwx
MiArMTk2LDE2IEBAIHN0YXRpYyBjb25zdCBGb250Q2FzY2FkZSYgZm9udFRvVXNlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyVGV4dCYKICAgICByZXR1cm4gc3R5bGUuZm9u
dENhc2NhZGUoKTsKIH0KIAotTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlv
blJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorTGF5b3V0UmVjdCBJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVu
ZFBvcykgY29uc3QKIHsKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFy
dCwgMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1f
bGVuKTsKLSAgICAKLSAgICBpZiAoc1BvcyA+IGVQb3MpCisgICAgdW5zaWduZWQgc1BvcyA9IGNs
YW1wZWRPZmZzZXQoc3RhcnRQb3MpOworICAgIHVuc2lnbmVkIGVQb3MgPSBjbGFtcGVkT2Zmc2V0
KGVuZFBvcyk7CisKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MDc4NgorICAgIC8vIFdlIHNob3VsZCBvbmx5IGJlIGNoZWNraW5nIGlmIHNQ
b3MgPj0gZVBvcyBoZXJlLCBiZWNhdXNlIHRob3NlIGFyZSB0aGUKKyAgICAvLyBpbmRpY2VzIHVz
ZWQgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIHNlbGVjdGlvbiByZWN0LiBBbGxvd2luZyB1cyBw
YXN0IHRoaXMgZ3VhcmQKKyAgICAvLyBvbiBhbnkgb3RoZXIgY29uZGl0aW9uIGNyZWF0ZXMgemVy
by13aWR0aCBzZWxlY3Rpb24gcmVjdHMuCisgICAgaWYgKHNQb3MgPj0gZVBvcyAmJiAhKHN0YXJ0
UG9zID09IGVuZFBvcyAmJiBzdGFydFBvcyA+PSBzdGFydCgpICYmIHN0YXJ0UG9zIDw9IChzdGFy
dCgpICsgbGVuKCkpKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91
dFVuaXQgc2VsZWN0aW9uVG9wID0gdGhpcy0+c2VsZWN0aW9uVG9wKCk7CkBAIC0yMTIsNyArMjIx
LDcgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0
YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludChsb2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25Ub3ApLCBM
YXlvdXRTaXplKG1fbG9naWNhbFdpZHRoLCBzZWxlY3Rpb25IZWlnaHQpKTsKICAgICAvLyBBdm9p
ZCBjb21wdXRpbmcgdGhlIGZvbnQgd2lkdGggd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNl
bGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4KLSAgICBpZiAoc1BvcyB8fCBlUG9zICE9IHN0YXRp
Y19jYXN0PGludD4obV9sZW4pKQorICAgIGlmIChzUG9zIHx8IGVQb3MgIT0gbV9sZW4pCiAgICAg
ICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVj
dCwgc1BvcywgZVBvcyk7CiAgICAgSW50UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3Qoc2VsZWN0aW9uUmVjdCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgg
PSBzbmFwcGVkU2VsZWN0aW9uUmVjdC53aWR0aCgpOwpAQCAtNTA4LDE4ICs1MTcsMTggQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRS
dW4obGluZVN0eWxlLCBhbHRlcm5hdGVTdHJpbmdUb1JlbmRlcik7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIGludCBzZWxlY3Rpb25TdGFydCA9IDA7Ci0g
ICAgaW50IHNlbGVjdGlvbkVuZCA9IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAw
OworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCA9IDA7CiAgICAgaWYgKGhhdmVTZWxlY3Rpb24g
JiYgKHBhaW50U2VsZWN0ZWRUZXh0T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkp
KQogICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9IHNlbGVj
dGlvblN0YXJ0RW5kKCk7CiAKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24p
IHsKLSAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGQ6Om1pbjxpbnQ+KHNlbGVjdGlvblN0YXJ0
LCBtX3RydW5jYXRpb24pOwotICAgICAgICBzZWxlY3Rpb25FbmQgPSBzdGQ6Om1pbjxpbnQ+KHNl
bGVjdGlvbkVuZCwgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGQ6
Om1pbihzZWxlY3Rpb25TdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikp
OworICAgICAgICBzZWxlY3Rpb25FbmQgPSBzdGQ6Om1pbihzZWxlY3Rpb25FbmQsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0
aW9uOwogICAgIH0KIAotICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOworICAgIGZsb2F0
IGVtcGhhc2lzTWFya09mZnNldCA9IDA7CiAgICAgYm9vbCBlbXBoYXNpc01hcmtBYm92ZTsKICAg
ICBib29sIGhhc1RleHRFbXBoYXNpcyA9IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGlu
ZVN0eWxlLCBlbXBoYXNpc01hcmtBYm92ZSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBo
YXNpc01hcmsgPSBoYXNUZXh0RW1waGFzaXMgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0
cmluZygpIDogbnVsbEF0b207CkBAIC01ODcsMjAgKzU5NiwyNSBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQsCiAgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50
ZXJjbG9ja3dpc2UpKTsKIH0KIAotc3RkOjpwYWlyPGludCwgaW50PiBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0Cit1bnNpZ25lZCBJbmxpbmVUZXh0Qm94OjpjbGFtcGVk
T2Zmc2V0KHVuc2lnbmVkIHgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWlu
KHgsIHN0YXJ0KCkgKyBsZW4oKSksIHN0YXJ0KCkpIC0gc3RhcnQoKTsKK30KKworc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoKSBj
b25zdAogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhdGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0
YXRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
SW5zaWRlKQogICAgICAgICByZXR1cm4geyAwLCBtX2xlbiB9OwogICAgIAotICAgIGludCBzdGFy
dDsKLSAgICBpbnQgZW5kOworICAgIHVuc2lnbmVkIHN0YXJ0OworICAgIHVuc2lnbmVkIGVuZDsK
ICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAgICBl
bmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKICAgICAgICAgc3RhcnQgPSAwOwotICAg
IHJldHVybiB7IHN0ZDo6bWF4KHN0YXJ0IC0gbV9zdGFydCwgMCksIHN0ZDo6bWluPGludD4oZW5k
IC0gbV9zdGFydCwgbV9sZW4pIH07CisgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChzdGFydCks
IGNsYW1wZWRPZmZzZXQoZW5kKSB9OwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2Vs
ZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3Jp
Z2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBD
b2xvciB0ZXh0Q29sb3IpCkBAIC02MTAsOCArNjI0LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQm
IGIKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBzZWxlY3Rpb24g
dG8gcGFpbnQgYXQgYWxsLgotICAgIGludCBzZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgc2VsZWN0
aW9uRW5kOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgIHVuc2lnbmVkIHNlbGVj
dGlvbkVuZDsKICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9IHNl
bGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID49IHNlbGVjdGlvbkVu
ZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjM0LDcgKzY0OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBiCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRp
b24gPyBtX3RydW5jYXRpb24gOiBsZW4oKTsKIAogICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5n
OwotICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IHNlbGVjdGlvbkVuZCA9PSBzdGF0aWNfY2FzdDxp
bnQ+KGxlbmd0aCkgJiYgaGFzSHlwaGVuKCk7CisgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2Vs
ZWN0aW9uRW5kID09IGxlbmd0aCAmJiBoYXNIeXBoZW4oKTsKICAgICBpZiAocmVzcGVjdEh5cGhl
bikKICAgICAgICAgaHlwaGVuYXRlZFN0cmluZyA9IGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVu
KHN0eWxlLCBsZW5ndGgpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4o
c3R5bGUsIGh5cGhlbmF0ZWRTdHJpbmcsIE9wdGlvbmFsPHVuc2lnbmVkPihsZW5ndGgpKTsKQEAg
LTY2MCwxMSArNjc0LDEwIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAjZW5kaWYKIH0KIAot
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgdW5zaWduZWQg
c3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykKIHsKLSAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsK
LSAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSBzdGQ6Om1heChzdGFydFBvcyAtIG9mZnNldCwgMCk7
Ci0gICAgaW50IHNlbGVjdGlvbkVuZCA9IHN0ZDo6bWluPGludD4oZW5kUG9zIC0gb2Zmc2V0LCBt
X2xlbik7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSBjbGFtcGVkT2Zmc2V0KHN0YXJ0
UG9zKTsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSBjbGFtcGVkT2Zmc2V0KGVuZFBvcyk7
CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID49IHNlbGVjdGlvbkVuZCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC03NTYsNyArNzY5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50
TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2kKIAogICAgIC8v
IERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9vbCBtYXJr
ZXJTcGFuc1dob2xlQm94ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydCA8PSAoaW50KW1hcmtlci5z
dGFydE9mZnNldCgpKQorICAgIGlmIChtX3N0YXJ0IDw9IG1hcmtlci5zdGFydE9mZnNldCgpKQog
ICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CiAgICAgaWYgKChlbmQoKSArIDEp
ICE9IG1hcmtlci5lbmRPZmZzZXQoKSkgLy8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBu
b3QgcGFzdCBpdAogICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CkBAIC03NjUs
MTEgKzc3OCwxMSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaQogCiAgICAgYm9vbCBpc0RpY3Rh
dGlvbk1hcmtlciA9IG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFs
dGVybmF0aXZlczsKICAgICBpZiAoIW1hcmtlclNwYW5zV2hvbGVCb3ggfHwgZ3JhbW1hciB8fCBp
c0RpY3RhdGlvbk1hcmtlcikgewotICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4
PGludD4obWFya2VyLnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICAgICAgaW50IGVu
ZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBt
X2xlbik7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KG1h
cmtlci5zdGFydE9mZnNldCgpKTsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBjbGFt
cGVkT2Zmc2V0KG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV90
cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pCi0gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0
ZDo6bWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CisgICAgICAgICAgICBlbmRQ
b3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90
cnVuY2F0aW9uKSk7CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0ICYgd2lkdGgKICAgICAg
ICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdN
b2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3Ao
KSAtIHNlbGVjdGlvblRvcCgpOwpAQCAtODE4LDggKzgzMSw4IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFBvCiAgICAgTGF5b3V0VW5pdCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlw
cGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9t
KCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRSZWN0IHNlbGVj
dGlvblJlY3QgPSBMYXlvdXRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0
YVksIDAsIHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpKTsKIAotICAgIGludCBzUG9zID0gc3RkOjpt
YXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9z
ID0gc3RkOjptaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7Cisg
ICAgdW5zaWduZWQgc1BvcyA9IGNsYW1wZWRPZmZzZXQobWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwor
ICAgIHVuc2lnbmVkIGVQb3MgPSBjbGFtcGVkT2Zmc2V0KG1hcmtlci5lbmRPZmZzZXQoKSk7CiAg
ICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKTsKICAgICBmb250LmFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgc1BvcywgZVBvcyk7CiAK
QEAgLTk4NSwxOCArOTk4LDE4IEBAIGludCBJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlv
bihmbG9hdCBsaW5lT2Zmc2V0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzCiAgICAgcmV0dXJu
IGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUpLCBsaW5l
T2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1mbG9h
dCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAorZmxv
YXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25z
dAogewogICAgIEFTU0VSVChvZmZzZXQgPj0gbV9zdGFydCk7Ci0gICAgQVNTRVJUKG9mZnNldCA8
PSBtX3N0YXJ0ICsgbV9sZW4pOworICAgIEFTU0VSVChvZmZzZXQgPD0gbV9zdGFydCArIGxlbigp
KTsKIAogICAgIGlmIChpc0xpbmVCcmVhaygpKQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnQo
KTsKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUo
KTsKICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJl
bmRlcmVyKCkpOwotICAgIGludCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9m
ZnNldCAtIG1fc3RhcnQgOiAwOwotICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CisgICAgdW5zaWduZWQgZnJvbSA9ICFpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjbGFtcGVkT2Zmc2V0KG9mZnNldCkgOiAwOworICAgIHVu
c2lnbmVkIHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogY2xhbXBlZE9m
ZnNldChvZmZzZXQpOwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJp
bmcgaGVyZT8KICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KGxvZ2lj
YWxMZWZ0KCksIDAsIDAsIDApOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihs
aW5lU3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXgg
NjdiNjM0YmE1NzhjMzgwZjcwOWIyMzFjYTZiMzE4OTg3MzU2OTRiZC4uNzIzNmY2MDJhYTY2MTM2
MWIzNzQ3Y2EwNjMxNThkNDUzMmJjYzBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCkBAIC00MiwxMSArNDIsNiBAQCBjbGFzcyBJbmxpbmVUZXh0Qm94IDogcHVi
bGljIElubGluZUJveCB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5saW5lVGV4dEJveChSZW5k
ZXJUZXh0JiByZW5kZXJlcikKICAgICAgICAgOiBJbmxpbmVCb3gocmVuZGVyZXIpCi0gICAgICAg
ICwgbV9wcmV2VGV4dEJveChudWxscHRyKQotICAgICAgICAsIG1fbmV4dFRleHRCb3gobnVsbHB0
cikKLSAgICAgICAgLCBtX3N0YXJ0KDApCi0gICAgICAgICwgbV9sZW4oMCkKLSAgICAgICAgLCBt
X3RydW5jYXRpb24oY05vVHJ1bmNhdGlvbikKICAgICB7CiAgICAgICAgIHNldEJlaGF2ZXNMaWtl
VGV4dCh0cnVlKTsKICAgICB9CkBAIC02OSw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFN0YXJ0KHVuc2lnbmVkIHN0YXJ0KSB7IG1fc3RhcnQgPSBzdGFydDsgfQogICAgIHZvaWQgc2V0
TGVuKHVuc2lnbmVkIGxlbikgeyBtX2xlbiA9IGxlbjsgfQogCi0gICAgdm9pZCBvZmZzZXRSdW4o
aW50IGQpIHsgQVNTRVJUKCFpc0RpcnR5KCkpOyBtX3N0YXJ0ICs9IGQ7IH0KKyAgICB2b2lkIG9m
ZnNldFJ1bihpbnQgZCkgeyBBU1NFUlQoIWlzRGlydHkoKSk7IEFTU0VSVChkID4gMCB8fCBtX3N0
YXJ0ID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtZCkpOyBtX3N0YXJ0ICs9IGQ7IH0KIAogICAg
IHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRpb247
IH0KIApAQCAtMTIwLDkgKzExNSw5IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgRmxvYXRSZWN0
IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3Qo
eCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQogCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0
IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0OwotICAg
IGJvb2wgaXNTZWxlY3RlZChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0OwotICAgIHN0
ZDo6cGFpcjxpbnQsIGludD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25l
ZCBlbmRQb3MpIGNvbnN0OworICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywg
dW5zaWduZWQgZW5kUG9zKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVk
PiBzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKQEAgLTE1NSwxMiArMTUwLDEzIEBAIHByaXZh
dGU6CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4
LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBm
bG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZs
b2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250Q2FzY2FkZSYsIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7CisgICAgdm9pZCBwYWludENv
bXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCB1bnNpZ25l
ZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKTsKICAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAg
dm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICB1
bnNpZ25lZCBjbGFtcGVkT2Zmc2V0KHVuc2lnbmVkKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2
b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250Q2FzY2FkZSYs
IFJlbmRlckNvbWJpbmVUZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRl
eHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwKQEAgLTE3MywxNSArMTY5LDE1IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGJlaGF2ZXNMaWtlVGV4dCgpIGNvbnN0ID0gZGVsZXRlOwog
Ci0gICAgSW5saW5lVGV4dEJveCogbV9wcmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0
aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0Ci0gICAgSW5saW5lVGV4dEJveCogbV9uZXh0
VGV4dEJveDsgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QK
KyAgICBJbmxpbmVUZXh0Qm94KiBtX3ByZXZUZXh0Qm94IHsgbnVsbHB0ciB9OyAvLyBUaGUgcHJl
dmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKKyAgICBJbmxpbmVUZXh0
Qm94KiBtX25leHRUZXh0Qm94IHsgbnVsbHB0ciB9OyAvLyBUaGUgbmV4dCBib3ggdGhhdCBhbHNv
IHVzZXMgb3VyIFJlbmRlck9iamVjdAogCi0gICAgaW50IG1fc3RhcnQ7Ci0gICAgdW5zaWduZWQg
c2hvcnQgbV9sZW47CisgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBz
aG9ydCBtX2xlbiB7IDAgfTsKIAogICAgIC8vIFdoZXJlIHRvIHRydW5jYXRlIHdoZW4gdGV4dCBv
dmVyZmxvdyBpcyBhcHBsaWVkLiBXZSB1c2Ugc3BlY2lhbCBjb25zdGFudHMgdG8KICAgICAvLyBk
ZW5vdGUgbm8gdHJ1bmNhdGlvbiAodGhlIHdob2xlIHJ1biBwYWludHMpIGFuZCBmdWxsIHRydW5j
YXRpb24gKG5vdGhpbmcgcGFpbnRzIGF0IGFsbCkuCi0gICAgdW5zaWduZWQgc2hvcnQgbV90cnVu
Y2F0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IG1fdHJ1bmNhdGlvbiB7IGNOb1RydW5jYXRpb24g
fTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCmluZGV4IGNkZTYwN2NmNWFjZjFhZmY5NWZhNjBjODI1ZmFhZTBhZmZk
NzkxNTIuLmQyNjRkMmE5NzY0YWQyNTM3YjM3YTM3MzE4NmZjOTYyMWI1YTU5NTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzQ4OSw3ICszNDg5LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IExheW91dFBvaW50JgogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCbG9j
azo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCbG9j
azo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zm
c2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhl
IG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDMxNTIyMzU1NTExNGJh
Mjk4ZWY4OTJhNWMwY2ZiNWU3NWNjMzhiZTUuLjMyM2QxNzBkZmVhNWQwODZkNzk3ZjVmMTQ4NTBj
YjlhNjYzMzNmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC00
NzYsNyArNDc2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51YXRpb25PdXRs
aW5lcyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5b3V0UmVjdCBs
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4
dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApIGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IDApIGZpbmFsOwogICAgIAogICAgIC8vIEZJWE1FLUJMT0NLRkxP
VzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJl
bmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9p
bnRXaXRoSW5saW5lQ2hpbGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdp
b24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggODFiMGFkNjc4
ODhhNTcwNThjMWJjYWYyZDc5OThlNzhmMGM3ZmM1Ny4uZWFlNzJiYTJjMzQ1Y2Q5YmI3OTVhYmJi
MGUyMGI4ZGNkMjA2MjFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
QEAgLTQzODMsNyArNDM4Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxIZWlnaHRSZXBsYWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1CiAgICAgY29tcHV0
ZWRWYWx1ZXMubV9wb3NpdGlvbiA9IGxvZ2ljYWxUb3BQb3M7CiB9CiAKLUxheW91dFJlY3QgUmVu
ZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJveDo6
bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlv
dXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9u
cyBhdCBvZmZzZXRzIGluc2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9z
aXRpb25zIGJlZm9yZS9hZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQg
c2VsZWN0IGVsZW1lbnRzKSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVt
cHR5IGJsb2NrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDAzODMwYzdh
ODM3NjNkNWMzMTliYjI3ZmQwNmFhNDc3YjUzMWM4NzYuLmM2MDE3ZDhkZjkxYWQ4YmMxYWRiYTIw
NDE4ZmQwNTVhOGRlYTQ3NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAg
LTQ4MSw3ICs0ODEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNVbnNwbGl0dGFibGVTY3JvbGxp
bmdPdmVyZmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNVbnNwbGl0dGFibGVGb3JQYWdpbmF0aW9u
KCkgY29uc3Q7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGlu
dCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1
bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0g
bnVsbHB0cikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiosIE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50
UGhhc2UgPSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKTsKICAgICB2aXJ0dWFsIExheW91dFJl
Y3Qgb3ZlcmZsb3dDbGlwUmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2Nh
dGlvbiwgUmVuZGVyUmVnaW9uKiByZWdpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IHJlbGV2YW5jeSkgeyByZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgcmVnaW9uLCBy
ZWxldmFuY3kpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmlu
ZGV4IGRiYjQ4M2Q2OWYyNjYxZDM5MGRmNTFhNWY4ZjExMGExMDA1YjQ3MDYuLmFkYWI2NDg1Y2Fk
Y2EyMWM2ZTU0Mzg0N2RjYjEyMjQ3YjAyZTE5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAgfQogfQog
Ci1MYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIGludCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVj
dCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNp
Z25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIGlmIChmaXJz
dENoaWxkKCkpIHsKICAgICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhl
IFJlbmRlcklubGluZSBpcyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCmluZGV4IDVjZWFmYzJkOGEyZmZjMzdhMzNlMTdjNGIyNmUy
YWU5NzlmODYzNmYuLjAwYmM5ZWMxZDQwNDkyODBhZmE0MGU0ZjgwOWQyNzlmY2E4MDdjYTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTk2LDcgKzk2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBzZXRSZW5kZXJJ
bmxpbmVBbHdheXNDcmVhdGVzTGluZUJveGVzKHRydWUpOyB9CiAgICAgdm9pZCB1cGRhdGVBbHdh
eXNDcmVhdGVMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKIAotICAgIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
dW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgZmluYWw7CiAKICAg
ICBib29sIGhpdFRlc3RDdWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCmluZGV4IDFjZDk2MzRiYWU0MDBiODU4ZGY2ZmVm
YWEzMTc1NDU2YjExOGFmNmMuLmI4YzIzNThkMTU3ZGRiMmNjMjhhMTM2NzJiOGNhMWM3ZDAxYjU4
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCkBA
IC0xNjYsNyArMTY2LDcgQEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHN0YXRlKQogICAgIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNl
dEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0gU2VsZWN0aW9uTm9uZSk7CiB9CiAKLUxheW91
dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJv
eCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitM
YXlvdXRSZWN0IFJlbmRlckxpbmVCcmVhazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjYXJldE9mZnNldCwgIWNhcmV0T2Zmc2V0KTsK
ICAgICBBU1NFUlRfVU5VU0VEKGlubGluZUJveCwgaW5saW5lQm94ID09IG1faW5saW5lQm94V3Jh
cHBlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKaW5kZXgg
MTFmZDNiZDkyMTc0OTc2MzZkMGNhNjAxMTQyOTgyNTk0MjJiMTIzNi4uOTcwN2NkMTZlNTgzNmE3
ODFmZmQ2NTM1MDJmMzA4M2ZiMTJmYTE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQnJlYWsuaApAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIGludCBjYXJl
dE1pbk9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRP
ZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7CisgICAg
TGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlkZTsKIAogICAgIExheW91
dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQ
b3NpdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAppbmRleCAwZWI4YWQ2MTg0YTk3NjM0MjM5M2M2NzNhMzJiMzAyMjIxMTEy
MjZjLi5hYzMxMjI2MjYwNGEyZDNlMTRhMWJjZTVjM2JkZTdlMWRkZWU1N2YwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTIwNiw3ICsxMjA2LDcgQEAg
U2VsZWN0aW9uU3VidHJlZVJvb3QmIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9vdCgpIGNvbnN0
CiAgICAgcmV0dXJuIHZpZXcoKTsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0
YXJ0RW5kKGludCYgc3BvcywgaW50JiBlcG9zKSBjb25zdAordm9pZCBSZW5kZXJPYmplY3Q6OnNl
bGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3QKIHsK
ICAgICBzZWxlY3Rpb25Sb290KCkuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0RW5kUG9z
aXRpb25zKHNwb3MsIGVwb3MpOwogfQpAQCAtMTM3Nyw3ICsxMzc3LDcgQEAgTGF5b3V0U2l6ZSBS
ZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBj
b250YWluZXIpIGMKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck9i
amVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiwgdW5zaWduZWQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkK
IHsKICAgICBpZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICAqZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRl
eCBjNmM2YzNmZWU1ZTI2NTA4YzMxOTZiOTMwYmM0NjNjNzZhN2I2M2FjLi40MTE2YTUwYjBmYTBk
NzI5MDE4ZTk3MWY1NDQ0NTljMDNlODhjNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCkBAIC03NDksNyArNzQ5LDcgQEAgcHVibGljOgogICAgICAqIEBwYXJhbSBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUgb3B0aW9uYWwgb3V0IGFyZyB0byBnaXZlIGV4dHJhIHdpZHRo
IHRvIGVuZCBvZiBsaW5lIC0KICAgICAgKiB1c2VmdWwgZm9yIGNoYXJhY3RlciByYW5nZSByZWN0
IGNvbXB1dGF0aW9ucwogICAgICAqLwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhU
b0VuZE9mTGluZSA9IG51bGxwdHIpOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFX
aWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cik7CiAKICAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBn
bG9iYWwgZG9jdW1lbnQgdGVhci1kb3duLCB0aGUgcmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlz
IGNsZWFyZWQuICBXZSB1c2UgdGhpcwogICAgIC8vIGFzIGEgaG9vayB0byBkZXRlY3QgdGhlIGNh
c2Ugb2YgZG9jdW1lbnQgZGVzdHJ1Y3Rpb24gYW5kIGRvbid0IHdhc3RlIHRpbWUgZG9pbmcgdW5u
ZWNlc3Nhcnkgd29yay4KQEAgLTc4Miw3ICs3ODIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0
cikgeyB9CiAKICAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgc2VsZWN0aW9uUm9vdCgpIGNvbnN0
OwotICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0
OworICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNwb3MsIHVuc2lnbmVkJiBl
cG9zKSBjb25zdDsKICAgICAKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYWEyYzM0Y2I2YWFj
M2RjNzhkNjcxNGQ2M2JhNzViMGI3YTU0YjgzYi4uMGJmYjRiYTc5MDViMjcwMDk1M2YxYjY5ZWJh
NDQ0M2ViY2QwODNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCkBAIC02MTYsMTggKzYxNiwxOCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVj
dGVkKCkgY29uc3QKICAgICBpZiAocyA9PSBTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaW50IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7CisgICAgdW5z
aWduZWQgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZDsKICAgICBzZWxlY3Rpb25TdGFydEVu
ZChzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKICAgICBpZiAocyA9PSBTZWxlY3Rpb25T
dGFydCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7CiAgICAgICAgIAotICAg
IGludCBlbmQgPSBlbGVtZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRD
aGlsZE5vZGVzKCkgOiAxOworICAgIHVuc2lnbmVkIGVuZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGRO
b2RlcygpID8gZWxlbWVudCgpLT5jb3VudENoaWxkTm9kZXMoKSA6IDE7CiAgICAgaWYgKHMgPT0g
U2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBp
ZiAocyA9PSBTZWxlY3Rpb25Cb3RoKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0g
MCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgICAgICAKLSAgICBBU1NFUlQoMCk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggMDI4ODZiYjgwZmMzNGViNGU0M2RkMGFj
ZDNkOWZmN2FlMDJhMTczMy4uZDNmYmU3Yzg1OTMxNzlhOTk1MDRkYjUwMWRmZjE2MjcwNWM3Nzkz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtNDQyLDcgKzQ0
Miw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0
IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgUmVuCiAgICAgcmV0dXJuIG1fbGluZUJveGVzLnBv
c2l0aW9uRm9yUG9pbnQoKnRoaXMsIHBvaW50KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUZXh0
Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBM
YXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlclRleHQ6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIGlmICghaW5saW5l
Qm94KQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwpAQCAtMTM3MiwxMyArMTM3MiwxMiBA
QCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hl
cyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0g
U2VsZWN0aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBSZW5kZXJC
bG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWNiKQorICAgIGlmICghY29u
dGFpbmluZ0Jsb2NrKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBO
b3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4K
ICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICBpbnQg
c3RhcnRQb3MsIGVuZFBvczsKKyAgICB1bnNpZ25lZCBzdGFydFBvcywgZW5kUG9zOwogICAgIGlm
IChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkluc2lkZSkgewogICAgICAgICAvLyBXZSBh
cmUgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgIHN0YXJ0UG9zID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IGQ2M2U2MDg5Y2RlNDAzN2M1NWU1ZjFjOGM2MjI4MWU4
YWNhNjJiYjQuLjFmYzhkYzM5OWZjMzYyMDFkN2NlNTVlMDI2MDNiMjIyYTA4NmM5MjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBmaW5h
bDsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQgPSB0cnVlKSBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gMCkgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gMCkgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRSZWN0IGNvbGxlY3RTZWxlY3Rpb25SZWN0c0Zv
ckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3Bw
CmluZGV4IGQ5NDNmM2E1ODFmZjBjYjVmNjE3NWJjZDk4MTRmNjQwNzU4NjBlZGQuLmU1OWYzZGU2
MTYzMWRmM2MyM2NjZWEyNjlmZTUyYmM5MmE5ZDc0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2
b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJl
bmRlcmVyLCBSZW5kZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50
IHN0YXJ0LCBlbmQ7CisgICAgdW5zaWduZWQgc3RhcnQsIGVuZDsKICAgICByZW5kZXJlci5zZWxl
Y3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggYThkZDcxOGQ4OGIz
OTljYTlmOGViNzcwZTMyMTJhNTBiMTRhZDljNi4uMWU3ZTJlY2MwYmFjMDE2NWQxNzBjYWU2YzJl
NDJiOTNkZjFjZjFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApA
QCAtMTE4LDE5ICsxMTgsNyBAQCBwcml2YXRlOgogUmVuZGVyVmlldzo6UmVuZGVyVmlldyhEb2N1
bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJCbG9ja0Zs
b3coZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9mcmFtZVZpZXcoKmRvY3VtZW50
LnZpZXcoKSkKLSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KG51bGxwdHIpCi0gICAgLCBt
X3NlbGVjdGlvblVuc3BsaXRFbmQobnVsbHB0cikKLSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdFN0
YXJ0UG9zKC0xKQotICAgICwgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zKC0xKQogICAgICwgbV9s
YXp5UmVwYWludFRpbWVyKCp0aGlzLCAmUmVuZGVyVmlldzo6bGF6eVJlcGFpbnRUaW1lckZpcmVk
KQotICAgICwgbV9wYWdlTG9naWNhbEhlaWdodCgwKQotICAgICwgbV9wYWdlTG9naWNhbEhlaWdo
dENoYW5nZWQoZmFsc2UpCi0gICAgLCBtX2xheW91dFN0YXRlKG51bGxwdHIpCi0gICAgLCBtX2xh
eW91dFN0YXRlRGlzYWJsZUNvdW50KDApCi0gICAgLCBtX3JlbmRlclF1b3RlSGVhZChudWxscHRy
KQotICAgICwgbV9yZW5kZXJDb3VudGVyQ291bnQoMCkKLSAgICAsIG1fc2VsZWN0aW9uV2FzQ2Fy
ZXQoZmFsc2UpCi0gICAgLCBtX2hhc1NvZnR3YXJlRmlsdGVycyhmYWxzZSkKICNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKICAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKCp0aGlzKQog
I2VuZGlmCkBAIC03NzIsNyArNzYwLDEwIEBAIExheW91dFJlY3QgUmVuZGVyVmlldzo6c3VidHJl
ZVNlbGVjdGlvbkJvdW5kcyhjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwKICAgICBT
ZWxlY3Rpb25NYXAgc2VsZWN0ZWRPYmplY3RzOwogCiAgICAgUmVuZGVyT2JqZWN0KiBvcyA9IHJv
b3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBz
dG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
bkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0
byogc2VsZWN0aW9uRW5kID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCk7Cisg
ICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRW5kKQor
ICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkVuZCwgcm9vdC5z
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7CiAgICAgU2VsZWN0aW9u
SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Iob3MpOwogICAgIHdoaWxlIChvcyAmJiBvcyAhPSBz
dG9wKSB7CiAgICAgICAgIGlmICgob3MtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHJv
b3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgb3MgPT0gcm9vdC5zZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVj
dGlvbk5vbmUpIHsKQEAgLTgyMSw3ICs4MTIsMTAgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50
U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QK
IHsKICAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwogCi0gICAgUmVu
ZGVyT2JqZWN0KiBlbmQgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygp
KTsKKyAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25FbmQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVj
dGlvbkVuZCkKKyAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkVu
ZCwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7CiAgICAg
U2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Iocm9vdC5zZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnQoKSk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIG8gPSBzZWxlY3Rpb25J
dGVyYXRvci5jdXJyZW50KCk7IG8gJiYgbyAhPSBlbmQ7IG8gPSBzZWxlY3Rpb25JdGVyYXRvci5u
ZXh0KCkpIHsKICAgICAgICAgaWYgKCFvLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAmJiBvICE9IHJv
b3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgJiYgbyAhPSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKQEAgLTg0MCw3ICs4MzQsNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiBy
b290KSBjb25zdAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVu
ZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVu
ZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3ZvaWQgUmVuZGVy
Vmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIE9wdGlvbmFsPHVuc2lnbmVk
PiBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRQb3Ms
IFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCiB7CiAgICAgLy8gTWFrZSBz
dXJlIGJvdGggb3VyIHN0YXJ0IGFuZCBlbmQgb2JqZWN0cyBhcmUgZGVmaW5lZC4KICAgICAvLyBD
aGVjayB3d3cubXNuYmMuY29tIGFuZCB0cnkgY2xpY2tpbmcgYXJvdW5kIHRvIGZpbmQgdGhlIGNh
c2Ugd2hlcmUgdGhpcyBoYXBwZW5lZC4KQEAgLTg3Nyw3ICs4NzEsNyBAQCB2b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogZQogICAgIHNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKHN0YXJ0LCBzdGFy
dFBvcywgZW5kLCBlbmRQb3MsIGJsb2NrUmVwYWludE1vZGUpOwogfQogCi12b2lkIFJlbmRlclZp
ZXc6OnNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3Rh
cnQsIGludCBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MsIFNl
bGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit2b2lkIFJlbmRlclZpZXc6OnNw
bGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQsIE9w
dGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmQsIE9wdGlv
bmFsPHVuc2lnbmVkPiBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1v
ZGUpCiB7CiAgICAgLy8gQ29tcHV0ZSB0aGUgdmlzaWJsZSBzZWxlY3Rpb24gZW5kIHBvaW50cyBm
b3IgZWFjaCBvZiB0aGUgc3VidHJlZXMuCiAgICAgUmVuZGVyU3VidHJlZXNNYXAgcmVuZGVyU3Vi
dHJlZXNNYXA7CkBAIC05MDIsMTQgKzg5NiwxNiBAQCB2b2lkIFJlbmRlclZpZXc6OnNwbGl0U2Vs
ZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdAog
ICAgICAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEgc2VsZWN0aW9uRGF0YSA9IHJlbmRlclN1
YnRyZWVzTWFwLmdldCgmcm9vdCk7CiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRGF0YS5zZWxl
Y3Rpb25DbGVhcigpKSB7CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rp
b25TdGFydChub2RlLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRh
LnNldFNlbGVjdGlvblN0YXJ0UG9zKG5vZGUgPT0gc3RhcnROb2RlID8gc3RhcnRQb3MgOiAwKTsK
KyAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvblN0YXJ0UG9zKG5vZGUg
PT0gc3RhcnROb2RlID8gc3RhcnRQb3MgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVuZChub2Rl
LT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCiAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MoZW5kUG9zKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVu
ZFBvcyhub2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSA/IG5vZGUtPm1heENoYXJhY3Rlck9mZnNl
dCgpIDogbm9kZS0+Y291bnRDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kUG9zID0gbm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJz
KCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hpbGROb2Rlcygp
OworICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKG5ld0Vu
ZFBvcyk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJlbmRlclN1YnRyZWVzTWFwLnNl
dCgmcm9vdCwgc2VsZWN0aW9uRGF0YSk7CiAgICAgICAgIH0KQEAgLTk2MCw3ICs5NTYsMTAgQEAg
dm9pZCBSZW5kZXJWaWV3OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3Vi
dHJlZVJvb3QmIHJvb3QsIFNlbGVjdGkKICAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMg
bWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCiAK
ICAgICBSZW5kZXJPYmplY3QqIG9zID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRy
OworICAgIGlmIChzZWxlY3Rpb25FbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9z
aXRpb24oc2VsZWN0aW9uRW5kLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3Mo
KS52YWx1ZSgpKTsKICAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7
CiAgICAgd2hpbGUgKG9zICYmIG9zICE9IHN0b3ApIHsKICAgICAgICAgaWYgKGlzVmFsaWRPYmpl
Y3RGb3JOZXdTZWxlY3Rpb24ocm9vdCwgKm9zKSkgewpAQCAtOTk4LDcgKzk5NywxMCBAQCB2b2lk
IFJlbmRlclZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVl
Um9vdCYgcm9vdCwgU2VsZWN0aQogICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9u
U3RhcnQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRl
ck9iamVjdCogc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0
aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25F
bmRQb3MoKSk7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVs
bHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5kID0g
cmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkRhdGFFbmQsIHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNl
bGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJy
ZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25J
dGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9PSByb290
LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKQEAgLTEwODksNyArMTA5MSw3IEBAIHZv
aWQgUmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRy
ZWVSb290JiByb290LCBTZWxlY3RpCiAgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5y
ZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVj
dComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJl
bmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3QKK3ZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0
aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgc3Rh
cnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4m
IGVuZE9mZnNldCkgY29uc3QKIHsKICAgICBzdGFydFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNw
bGl0U3RhcnQ7CiAgICAgc3RhcnRPZmZzZXQgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsK
QEAgLTExMDAsNyArMTEwMiw3IEBAIHZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRl
ck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlCiB2b2lkIFJlbmRl
clZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKIHsKICAgICBsYXllcigpLT5yZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIC0xLCBudWxscHRyLCAtMSwg
UmVwYWludE5ld01pbnVzT2xkKTsKKyAgICBzZXRTZWxlY3Rpb24obnVsbHB0ciwgTnVsbG9wdCwg
bnVsbHB0ciwgTnVsbG9wdCwgUmVwYWludE5ld01pbnVzT2xkKTsKIH0KIAogYm9vbCBSZW5kZXJW
aWV3OjpwcmludGluZygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApp
bmRleCBjN2M5Mjg2NGYwMzQ1YTVlZGIyYjRjMTExMzMxNDI3OTA1MzJkMGJmLi41MjM5NDI2ZGYw
MjdjN2RkNjU2ZjdmZDA1MzNhMDc1YjI4Y2U0NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmgKQEAgLTg1LDggKzg1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogCiAg
ICAgZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnRO
ZXdNaW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5k
UG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQg
Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZz
ZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgT3B0aW9uYWw8dW5zaWduZWQ+
IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKKyAgICB2
b2lkIGdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBPcHRpb25hbDx1
bnNpZ25lZD4mIHN0YXJ0T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgT3B0aW9u
YWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24o
KTsKICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9CiAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rp
b25VbnNwbGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOyB9CkBA
IC0zMDcsNyArMzA3LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzcGxpdFNlbGVjdGlv
bkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIGludCBz
dGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgaW50IGVuZFBvcywgU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CisgICAgdm9pZCBzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIE9w
dGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJl
ciwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tS
ZXBhaW50TW9kZSk7CiAgICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0YSYp
IGNvbnN0OwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMoUmVuZGVyU3VidHJl
ZXNNYXAmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSk7CiAgICAgdm9pZCBhcHBseVN1YnRyZWVTZWxl
Y3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwg
Y29uc3QgT2xkU2VsZWN0aW9uRGF0YSYpOwpAQCAtMzE3LDEwICszMTcsMTAgQEAgcHJpdmF0ZToK
IHByaXZhdGU6CiAgICAgRnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKIAotICAgIFJlbmRlck9iamVj
dCogbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQ7Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlv
blVuc3BsaXRFbmQ7Ci0gICAgaW50IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zOwotICAgIGlu
dCBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3M7CisgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlv
blVuc3BsaXRTdGFydCB7IG51bGxwdHIgfTsKKyAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9u
VW5zcGxpdEVuZCB7IG51bGxwdHIgfTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rp
b25VbnNwbGl0U3RhcnRQb3M7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5z
cGxpdEVuZFBvczsKIAogICAgIC8vIEluY2x1ZGUgdGhpcyBSZW5kZXJWaWV3LgogICAgIHVpbnQ2
NF90IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKQEAgLTMyOSwxOCArMzI5LDExIEBAIHByaXZhdGU6
CiAKICAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBB
cHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8gcmVtb3ZlLgogICAgIHN0cnVjdCBMZWdhY3lQ
cmludGluZyB7Ci0gICAgICAgIExlZ2FjeVByaW50aW5nKCkKLSAgICAgICAgICAgIDogbV9iZXN0
VHJ1bmNhdGVkQXQoMCkKLSAgICAgICAgICAgICwgbV90cnVuY2F0ZWRBdCgwKQotICAgICAgICAg
ICAgLCBtX3RydW5jYXRvcldpZHRoKDApCi0gICAgICAgICAgICAsIG1fZm9yY2VkUGFnZUJyZWFr
KGZhbHNlKQotICAgICAgICB7IH0KLQotICAgICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7Ci0g
ICAgICAgIGludCBtX3RydW5jYXRlZEF0OwotICAgICAgICBpbnQgbV90cnVuY2F0b3JXaWR0aDsK
KyAgICAgICAgaW50IG1fYmVzdFRydW5jYXRlZEF0IHsgMCB9OworICAgICAgICBpbnQgbV90cnVu
Y2F0ZWRBdCB7IDAgfTsKKyAgICAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGggeyAwIH07CiAgICAg
ICAgIEludFJlY3QgbV9wcmludFJlY3Q7Ci0gICAgICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7
CisgICAgICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWsgeyBmYWxzZSB9OwogICAgIH07CiAgICAg
TGVnYWN5UHJpbnRpbmcgbV9sZWdhY3lQcmludGluZzsKICAgICAvLyBFbmQgZGVwcmVjYXRlZCBt
ZW1iZXJzLgpAQCAtMzU0LDE3ICszNDcsMTcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZVF1YWxpdHlDb250cm9sbGVyPiBtX2ltYWdlUXVhbGl0eUNvbnRyb2xsZXI7CiAg
ICAgTGF5b3V0VW5pdCBtX3BhZ2VMb2dpY2FsSGVpZ2h0OwotICAgIGJvb2wgbV9wYWdlTG9naWNh
bEhlaWdodENoYW5nZWQ7CisgICAgYm9vbCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCB7IGZh
bHNlIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPExheW91dFN0YXRlPiBtX2xheW91dFN0YXRlOwot
ICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9s
YXlvdXRTdGF0ZURpc2FibGVDb3VudCB7IDAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
TGF5ZXJDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dU
aHJlYWRDb250cm9sbGVyPiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogCi0gICAgUmVuZGVyUXVv
dGUqIG1fcmVuZGVyUXVvdGVIZWFkOwotICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRlckNvdW50
OworICAgIFJlbmRlclF1b3RlKiBtX3JlbmRlclF1b3RlSGVhZCB7IG51bGxwdHIgfTsKKyAgICB1
bnNpZ25lZCBtX3JlbmRlckNvdW50ZXJDb3VudCB7IDAgfTsKIAotICAgIGJvb2wgbV9zZWxlY3Rp
b25XYXNDYXJldDsKLSAgICBib29sIG1faGFzU29mdHdhcmVGaWx0ZXJzOworICAgIGJvb2wgbV9z
ZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1NvZnR3YXJlRmlsdGVy
cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKaW5kZXggOWY2NWU5
NGI1ZTQ0YmNkZTBiZTAzZmJkZGRmOTg0YWExYTk4NDhjYy4uMTgxZTZiNTI3MTM3YjQzZTVhY2M0
ODcwMzA3ODkzZTAwMjE0MGE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCkBAIC00MiwxOSArNDIsMTYgQEAgU2VsZWN0aW9uU3Vi
dHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KCkKIHsKIH0KIAotU2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQs
IGludCBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBz
ZWxlY3Rpb25FbmRQb3MpCi0gICAgOiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhKHNlbGVjdGlvblN0
YXJ0LCBzZWxlY3Rpb25TdGFydFBvcywgc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmRQb3MpCi17
Ci19Ci0KIHZvaWQgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rp
b24oRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGlmIChtX3NlbGVjdGlvblN1YnRyZWVEYXRh
LnNlbGVjdGlvbkNsZWFyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIHJh
bmdlIGJhc2VkIG9uIHRoZSBjYWNoZWQgZW5kIHBvaW50cwotICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0
YS5zZWxlY3Rpb25TdGFydCgpLT5ub2RlKCksIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0
aW9uU3RhcnRQb3MoKSk7Ci0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9k
ZSgpLCBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydFBv
cygpLnZhbHVlKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtX3NlbGVjdGlvblN1YnRyZWVE
YXRhLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCk7CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlv
biA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNl
bGVjdGlvblN0YXJ0KCktPm5vZGUoKSwgc2VsZWN0aW9uU3RhcnQpOworICAgIFBvc2l0aW9uIGVu
ZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJl
ZURhdGEuc2VsZWN0aW9uRW5kKCktPm5vZGUoKSwgc2VsZWN0aW9uRW5kKTsKIAogICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBzdGFydFBvc2l0aW9uLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKnJhbmdlKTsKQEAgLTgy
LDEwICs3OSwxMyBAQCB2b2lkIFNlbGVjdGlvblN1YnRyZWVSb290OjphZGp1c3RGb3JWaXNpYmxl
U2VsZWN0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICBpZiAoJnN0YXJ0UG9zLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCktPnNlbGVjdGlvblJvb3QoKSAhPSB0aGlzKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBhdXRvIG5ld1N0YXJ0UG9zID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBhdXRvIG5ld0VuZFBvcyA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpOworICAgIEFTU0VSVChuZXdTdGFydFBvcyA+PSAwICYmIG5ld0VuZFBvcyA+PSAw
KTsKICAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0UG9z
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURh
dGEuc2V0U2VsZWN0aW9uU3RhcnRQb3Moc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CisgICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhuZXdT
dGFydFBvcyk7CiAgICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmQoZW5k
UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJl
ZURhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhuZXdFbmRQ
b3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCmluZGV4IGRkMTkxOTc4ZmQ2NGI5OWIxNmU0
ODEwZjk2YmRlNmFkMDQxMzRlOTUuLmE4MjEyMTFiYzNhNTk1MjI4NmY3YjI1NGU4ZmQ5ZGI2MDdj
ODA5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0
cmVlUm9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVl
Um9vdC5oCkBAIC00NSwyOCArNDUsMjAgQEAgcHVibGljOgogCiAgICAgc3RydWN0IE9sZFNlbGVj
dGlvbkRhdGEgewogICAgICAgICBPbGRTZWxlY3Rpb25EYXRhKCkKLSAgICAgICAgICAgIDogc2Vs
ZWN0aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAsIHNlbGVjdGlvbkVuZFBvcygtMSkKICAg
ICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0UG9zOwotICAg
ICAgICBpbnQgc2VsZWN0aW9uRW5kUG9zOworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2Vs
ZWN0aW9uU3RhcnRQb3M7CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQ
b3M7CiAgICAgICAgIFNlbGVjdGVkT2JqZWN0TWFwIHNlbGVjdGVkT2JqZWN0czsKICAgICAgICAg
U2VsZWN0ZWRCbG9ja01hcCBzZWxlY3RlZEJsb2NrczsKICAgICB9OwogCiAgICAgY2xhc3MgU2Vs
ZWN0aW9uU3VidHJlZURhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJl
ZURhdGEoKQotICAgICAgICAgICAgOiBtX3NlbGVjdGlvblN0YXJ0KG51bGxwdHIpCi0gICAgICAg
ICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9u
RW5kKG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kUG9zKC0xKQotICAgICAg
ICB7Ci0gICAgICAgIH0KKyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7
CiAKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25T
dGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwg
aW50IHNlbGVjdGlvbkVuZFBvcykKKyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVy
T2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0
UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVj
dGlvbkVuZFBvcykKICAgICAgICAgICAgIDogbV9zZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFy
dCkKICAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykK
ICAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmQoc2VsZWN0aW9uRW5kKQpAQCAtNzUsNDYgKzY3
LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIGlu
dCBzZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7
IH0KKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb25TdGFydFBvczsgfQogICAgICAgICBSZW5kZXJPYmplY3QqIHNl
bGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9Ci0gICAgICAgIGlu
dCBzZWxlY3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQor
ICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3Rpb25FbmRQb3M7IH0KICAgICAgICAgYm9vbCBzZWxlY3Rpb25DbGVhcigpIGNv
bnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAhbV9zZWxlY3Rpb25TdGFydAotICAg
ICAgICAgICAgJiYgKG1fc2VsZWN0aW9uU3RhcnRQb3MgPT0gLTEpCisgICAgICAgICAgICAmJiAo
IW1fc2VsZWN0aW9uU3RhcnRQb3MpCiAgICAgICAgICAgICAmJiAhbV9zZWxlY3Rpb25FbmQKLSAg
ICAgICAgICAgICYmIChtX3NlbGVjdGlvbkVuZFBvcyA9PSAtMSk7CisgICAgICAgICAgICAmJiAo
IW1fc2VsZWN0aW9uRW5kUG9zKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2VsZWN0aW9u
U3RhcnRFbmRQb3NpdGlvbnMoaW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MpIGNvbnN0CisgICAg
ICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnModW5zaWduZWQmIHN0YXJ0UG9zLCB1
bnNpZ25lZCYgZW5kUG9zKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBzdGFydFBvcyA9
IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVu
ZFBvczsKKyAgICAgICAgICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgp
OworICAgICAgICAgICAgZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3MudmFsdWUoKTsKICAgICAg
ICAgfQogICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0KFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQpIHsgbV9zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhcnRQb3MoaW50IHNlbGVjdGlvblN0YXJ0UG9zKSB7IG1fc2Vs
ZWN0aW9uU3RhcnRQb3MgPSBzZWxlY3Rpb25TdGFydFBvczsgfQorICAgICAgICB2b2lkIHNldFNl
bGVjdGlvblN0YXJ0UG9zKE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcykgeyBt
X3NlbGVjdGlvblN0YXJ0UG9zID0gc2VsZWN0aW9uU3RhcnRQb3M7fQogICAgICAgICB2b2lkIHNl
dFNlbGVjdGlvbkVuZChSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCkgeyBtX3NlbGVjdGlvbkVu
ZCA9IHNlbGVjdGlvbkVuZDsgfQotICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZFBvcyhpbnQg
c2VsZWN0aW9uRW5kUG9zKSB7IG1fc2VsZWN0aW9uRW5kUG9zID0gc2VsZWN0aW9uRW5kUG9zOyB9
CisgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kUG9zKE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxl
Y3Rpb25FbmRQb3MpIHsgbV9zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25FbmRQb3M7fQogICAg
ICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9zZWxl
Y3Rpb25TdGFydCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0g
LTE7CisgICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gTnVsbG9wdDsKICAgICAgICAg
ICAgIG1fc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uRW5k
UG9zID0gLTE7CisgICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IE51bGxvcHQ7CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25T
dGFydDsKLSAgICAgICAgaW50IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIFJlbmRlck9i
amVjdCogbV9zZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGludCBtX3NlbGVjdGlvbkVuZFBvczsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0YXJ0IHsgbnVsbHB0ciB9OworICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25TdGFydFBvczsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBtX3NlbGVjdGlvbkVuZCB7IG51bGxwdHIgfTsKKyAgICAgICAgT3B0aW9uYWw8dW5z
aWduZWQ+IG1fc2VsZWN0aW9uRW5kUG9zOwogICAgIH07CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8
U2VsZWN0aW9uU3VidHJlZVJvb3QqLCBTZWxlY3Rpb25TdWJ0cmVlRGF0YT4gUmVuZGVyU3VidHJl
ZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290Kiwg
c3RkOjp1bmlxdWVfcHRyPE9sZFNlbGVjdGlvbkRhdGE+PiBTdWJ0cmVlT2xkU2VsZWN0aW9uRGF0
YU1hcDsKIAogICAgIFNlbGVjdGlvblN1YnRyZWVSb290KCk7Ci0gICAgU2VsZWN0aW9uU3VidHJl
ZVJvb3QoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9z
LCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVuZFBvcyk7CiAKICAg
ICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIHsgcmV0dXJuIG1fc2VsZWN0
aW9uU3VidHJlZURhdGE7IH0KICAgICBjb25zdCBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0
aW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IDhkMzU5N2YyYzg0YTcwZjc2
OTE1YmQyOWM1ODNjNzY5NTFhYTczYTAuLjZlNWVjYzI2N2NiNmNlMDZjNGE1ZGM5Mjg0ZmVmZDFm
NWUyOTVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAt
ODQsMTcgKzg0LDE3IEBAIFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCiB9CiAKIHZvaWQgVGV4dFBhaW50ZXI6OmRyYXdUZXh0T3JFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBB
dG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywKLSAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZz
ZXQpCisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewogICAg
IEFTU0VSVChzdGFydE9mZnNldCA8IGVuZE9mZnNldCk7CiAgICAgaWYgKGVtcGhhc2lzTWFyay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0
T3JpZ2luLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC5kcmF3RW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIHRleHRP
cmlnaW4gKyBJbnRTaXplKDAsIGVtcGhhc2lzTWFya09mZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOworICAgICAgICBtX2NvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1
biwgZW1waGFzaXNNYXJrLCB0ZXh0T3JpZ2luICsgRmxvYXRTaXplKDAsIGVtcGhhc2lzTWFya09m
ZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogfQogCiB2b2lkIFRleHRQYWludGVyOjpw
YWludFRleHRXaXRoU2hhZG93cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJv
eFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgaW50IHN0YXJ0T2Zmc2V0
LCBpbnQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVt
cGhhc2lzTWFya09mZnNldCwgYm9vbCBzdHJva2VkKQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBm
bG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCkKIHsKICAgICBpZiAoIXNoYWRv
dykgewogICAgICAgICBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBo
YXNpc01hcmssIGVtcGhhc2lzTWFya09mZnNldCwgdGV4dE9yaWdpbiwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0
V2l0aFNoYWRvd3MoY29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGb250Q2FzY2EKICAg
ICB9CiB9CiAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5l
ZWRlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwKK3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZs
b2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsCiAgICAgY29uc3QgVGV4dFBhaW50U3R5bGUmIHBhaW50U3R5bGUsIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvdykKIHsKICAgICAvLyBGSVhNRTogVHJ1bmNhdGUgcmlnaHQtdG8tbGVmdCB0
ZXh0IGNvcnJlY3RseS4KQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFRleHRQYWludGVyOjpwYWlu
dFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29u
cwogICAgICAgICBtX2NvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJj
bG9ja3dpc2UpKTsKIH0KICAgICAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBpbnQgbGVuZ3RoLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVj
dGlvbkVuZCwKK3ZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxv
YXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNl
bGVjdGlvbkVuZCwKICAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNl
bGVjdGVkVGV4dFNlcGFyYXRlbHkpCiB7CiAgICAgQVNTRVJUKG1fZm9udCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmluZGV4IGU0YjViMThjY2YzY2EyNjEzMzQwZTBlYTRk
ZGFkYjFiZjk1MGJmMTIuLjJlMTY3ZmIzMzhmN2FmZWQyYWJiNDZiNzNkYjBlOWJkZDgyZDJkNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC01NCwxOCArNTQsMTgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFp
bnRTdHlsZSYgc2VsZWN0aW9uUGFpbnRTdHlsZSkgeyBtX3NlbGVjdGlvblBhaW50U3R5bGUgPSBz
ZWxlY3Rpb25QYWludFN0eWxlOyB9CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hv
cml6b250YWwpIHsgbV90ZXh0Qm94SXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9CiAgICAg
dm9pZCBzZXRGb250KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9
Ci0gICAgdm9pZCBhZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywg
aW50IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqKTsKKyAgICB2b2lkIGFk
ZEVtcGhhc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNp
c01hcmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0Kik7CiAgICAgdm9pZCBhZGRUZXh0U2hhZG93
KGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlv
blNoYWRvdyk7CiAKLSAgICB2b2lkIHBhaW50VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGxlbmd0
aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2lu
LAotICAgICAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSAwLCBpbnQgc2VsZWN0aW9uRW5kID0gMCwg
Ym9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBmYWxzZSwgYm9vbCBwYWludFNlbGVjdGVkVGV4
dFNlcGFyYXRlbHkgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFRleHQoY29uc3QgVGV4dFJ1biYs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLAorICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDAsIHVu
c2lnbmVkIHNlbGVjdGlvbkVuZCA9IDAsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gZmFs
c2UsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gZmFsc2UpOwogCiBwcml2YXRl
OgotICAgIHZvaWQgZHJhd1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBo
YXNpc01hcmtPZmZzZXQsCi0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CisgICAgdm9pZCBkcmF3VGV4dE9yRW1waGFz
aXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNT
dHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LAorICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0KTsKICAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRv
d0RhdGEqLCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgICAgIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01h
cmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCk7Ci0gICAgdm9pZCBwYWlu
dFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0LAorICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1w
aGFzaXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQpOworICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1w
aGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQsCiAgICAgICAgIGNvbnN0IFRleHRQYWludFN0eWxlJiwgY29uc3Qg
U2hhZG93RGF0YSopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CkBAIC03Niwx
MSArNzYsMTEgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNo
YWRvdyB7IG51bGxwdHIgfTsKICAgICBBdG9taWNTdHJpbmcgbV9lbXBoYXNpc01hcms7CiAgICAg
UmVuZGVyQ29tYmluZVRleHQqIG1fY29tYmluZWRUZXh0IHsgbnVsbHB0ciB9OwotICAgIGludCBt
X2VtcGhhc2lzTWFya09mZnNldCB7IDAgfTsKKyAgICBmbG9hdCBtX2VtcGhhc2lzTWFya09mZnNl
dCB7IDAgfTsKICAgICBib29sIG1fdGV4dEJveElzSG9yaXpvbnRhbCB7IHRydWUgfTsKIH07CiAK
LWlubGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcm
IGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQq
IGNvbWJpbmVkVGV4dCkKK2lubGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25z
dCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBS
ZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KQogewogICAgIG1fZW1waGFzaXNNYXJrID0g
ZW1waGFzaXNNYXJrOwogICAgIG1fZW1waGFzaXNNYXJrT2Zmc2V0ID0gZW1waGFzaXNNYXJrT2Zm
c2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bmxpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lVGV4dC5jcHAKaW5kZXggOTcxMzNlMTBjMGQ0MzZlMjkyOTI5Njk0MjZmNTE0MmIxZWZmMjIy
Zi4uYzZlYmFmM2ZkNDQwODUyMDM3MmRmMzY0OGQwMjAzNDA5MDk2NTExYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBA
IC0xMTYsMTcgKzExNiwxNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gUmVuZGVy
U1ZHSW5saW5lVGV4dDo6Y3JlYXRlVGV4dEJveCgpCiAgICAgcmV0dXJuIFdURk1vdmUoYm94KTsK
IH0KIAotTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxp
bmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKK0xheW91dFJlY3QgUmVu
ZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVk
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKIHsKICAgICBpZiAoIWlzPElubGluZVRleHRCb3g+
KGJveCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBhdXRvJiB0ZXh0Qm94
ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LnN0YXJ0KCkgfHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNhcmV0T2Zmc2V0KSA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpCisg
ICAgaWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpIHx8IGNhcmV0T2Zmc2V0ID4gdGV4
dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKIAogICAgIC8vIFVzZSB0aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJt
aW5lIHRoZSBjYXJldCByZWN0LgotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRP
ZmZzZXQpIDwgdGV4dEJveC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkgeworICAgIGlmIChjYXJl
dE9mZnNldCA8IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpIHsKICAgICAgICAgTGF5
b3V0UmVjdCByZWN0ID0gdGV4dEJveC5sb2NhbFNlbGVjdGlvblJlY3QoY2FyZXRPZmZzZXQsIGNh
cmV0T2Zmc2V0ICsgMSk7CiAgICAgICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gcmVjdC54KCkgOiByZWN0Lm1heFgoKTsKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApp
bmRleCA3NDY3NzNiZDkyZGVjOTE4ZDk3ZDFmMzM0NGZlMzFlMDQ3Y2M4NTNkLi45OTk4ZmUxYWY2
NjQ5YzM2YzQ2YTYzMWRhZTA4MjdkMWYzZjFjYTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaApAQCAtNjAsNyArNjAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKLSAgICBMYXlvdXRS
ZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBs
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBsaW5l
c0JvdW5kaW5nQm94KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGlu
ZVRleHRCb3g+IGNyZWF0ZVRleHRCb3goKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYTRmNDE5ZmQ2YThm
OWI0Y2ZkODU4YmQzMmNmZDBkNTNhOGE0ODk1MC4uNzUxNTVjODI3MjM3ZjBlZjQwN2EzOGZhNjgw
YjExMzUwNTg1MzAxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCkBAIC0xMDAsMTQgKzEwMCwxNCBAQCBpbnQgU1ZHSW5saW5lVGV4
dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbgogICAgIHJldHVybiBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpICsg
cmVuZGVyZXIoKS5zY2FsZWRGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9zaXRp
b24gKiBzY2FsaW5nRmFjdG9yLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLWZsb2F0IFNW
R0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCkgY29uc3QKK2Zsb2F0IFNWR0lu
bGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkKSBjb25zdAogewogICAgIC8v
IFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVt
LiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotRmxvYXRS
ZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorRmxvYXRSZWN0IFNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRp
b24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFT
U0VSVChzdHlsZSk7CkBAIC0xMzQsMTEgKzEzNCwxMCBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4
dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
CiAgICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0OwogfQogCi1MYXlvdXRSZWN0IFNWR0lu
bGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVu
ZFBvc2l0aW9uKSBjb25zdAorTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVj
dGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNv
bnN0CiB7Ci0gICAgaW50IGJveFN0YXJ0ID0gc3RhcnQoKTsKLSAgICBzdGFydFBvc2l0aW9uID0g
c3RkOjptYXgoc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsKLSAgICBlbmRQb3NpdGlvbiA9
IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIHN0YXRpY19jYXN0PGludD4obGVuKCkp
KTsKKyAgICBzdGFydFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChzdGFydFBvc2l0aW9uKTsKKyAg
ICBlbmRQb3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zaXRpb24pOwogICAgIGlmIChzdGFy
dFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwog
CkBAIC0xNDYsOCArMTQ1LDggQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGkKIAogICAgIEFmZmlu
ZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVj
dDsKLSAgICBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZnJhZ21lbnRF
bmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsK
KyAgICB1bnNpZ25lZCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIAogICAgIHVuc2lnbmVkIHRl
eHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtMjAzLDEyICsyMDIs
MTIgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFp
bnRJbmZvJiBwYWludEluZm8pCiAKICAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0
eWxlKCk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb247Cisg
ICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbjsKICAg
ICBzdGQ6OnRpZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgPSBzZWxlY3Rpb25TdGFydEVu
ZCgpOwogCi0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgaW50IGZyYWdt
ZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9
IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXpl
ID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtNDA3LDIxICs0MDYsMjQgQEAgVGV4dFJ1biBT
VkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgU1ZHVGUKICAgICByZXR1cm4gcnVuOwogfQogCi1ib29sIFNWR0lubGluZVRleHRC
b3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0
aW9uKSBjb25zdAorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVu
c2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAg
ICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50LmNoYXJhY3Rl
ck9mZnNldCkgLSBzdGFydCgpOwotICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGZy
YWdtZW50Lmxlbmd0aCk7CisgICAgQVNTRVJUKGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCA+PSBz
dGFydCgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQg
LSBzdGFydCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZyYWdtZW50Lmxlbmd0aDsKIAogICAg
IGlmIChzdGFydFBvc2l0aW9uID49IG9mZnNldCArIGxlbmd0aCB8fCBlbmRQb3NpdGlvbiA8PSBv
ZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uIDwg
b2Zmc2V0KQogICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICBlbHNlCisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uID49IG9mZnNldCk7CiAgICAgICAgIHN0YXJ0
UG9zaXRpb24gLT0gb2Zmc2V0OworICAgIH0KIAogICAgIGlmIChlbmRQb3NpdGlvbiA+IG9mZnNl
dCArIGxlbmd0aCkKICAgICAgICAgZW5kUG9zaXRpb24gPSBsZW5ndGg7CkBAIC01NDAsNyArNTQy
LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBUZXh0RGUKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVz
b3VyY2UoY29udGV4dFB0ciwgJnBhdGgpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQordm9pZCBTVkdJbmxp
bmVUZXh0Qm94OjpwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5k
UG9zaXRpb24pCiB7CiAgICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGlu
Z0ZhY3RvcigpOwogICAgIEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTU5MCw4ICs1OTIsOCBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJU
KHNlbGVjdGlvblN0eWxlKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQg
ZW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVu
c2lnbmVkIGVuZFBvc2l0aW9uID0gMDsKICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CiAgICAgICAg
IHN0ZDo6dGllKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSA9IHNlbGVjdGlvblN0YXJ0RW5k
KCk7CiAgICAgICAgIGhhc1NlbGVjdGlvbiA9IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdt
ZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKQEAg
LTYxOCw3ICs2MjAsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHBhcmVudCgpLT5yZW5kZXJlcigpLCBTdHls
ZURpZmZlcmVuY2VSZXBhaW50LCAqc3R5bGUpOwogCiAgICAgLy8gRXZlbnR1YWxseSBkcmF3IHRl
eHQgdXNpbmcgcmVndWxhciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIHNlbGVj
dGlvbiB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBpZiAoZW5kUG9z
aXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCkgJiYgIXBhaW50U2VsZWN0
ZWRUZXh0T25seSkKKyAgICBpZiAoZW5kUG9zaXRpb24gPCBmcmFnbWVudC5sZW5ndGggJiYgIXBh
aW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4
dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCBlbmRQb3NpdGlvbiwgZnJhZ21lbnQubGVuZ3Ro
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaAppbmRleCBjOGZkMTQ4ODhiNDYyMzQyNTEzYWU5NzA5OWI3NzYwOTYzYmIxODI3Li4xZTMy
YTQyMjI5NGU1NjM5Y2IzMmZlYTU5OTNkZjBkNDMyNWRlODBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtNDMsMTMgKzQzLDEzIEBA
IHB1YmxpYzoKICAgICBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICBp
bnQgc2VsZWN0aW9uSGVpZ2h0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihtX2xv
Z2ljYWxIZWlnaHQpKTsgfQogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgZmxvYXQg
cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQg
cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogICAg
IHZvaWQgcGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYpOwogICAgIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbFNlbGVj
dGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBt
YXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRG
cmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7Cisg
ICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0
IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5k
UG9zaXRpb24pIGNvbnN0OwogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBj
b25zdCBvdmVycmlkZTsKIApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
dGFydHNOZXdUZXh0Q2h1bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1
bmsgPSBuZXdUZXh0Q2h1bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21l
bnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBh
cnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZy
YWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24s
IGludCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFn
bWVudCYsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZnJhZ21lbnRF
bmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBi
b29sIGlzU1ZHSW5saW5lVGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
QEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdy
YXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKTsK
ICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQmLCBUZXh0
RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgUmVuZGVyQm94TW9kZWxPYmplY3Qm
IGRlY29yYXRpb25SZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0
RnJhZ21lbnQmLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lk
IHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxl
KiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKTsKICAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25T
dHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlv
bkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVy
cmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcApp
bmRleCBmZjM2Njc3MTcxNTMxNThmNjc2Mjg3N2E5ODgwODgwYjJlYzBkN2VlLi45MzMwYWFhMWM3
MTFkYWU1MTY4MmJjYjM5MzYxNTNiMmIxNGZjOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCkBAIC0xMzQsMTMgKzEzNCwxNSBAQCBib29sIFNW
R1RleHRRdWVyeTo6ZXhlY3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5RGF0YSwgUHJvY2Vzc1RleHRGcmFn
bWVudENhbGxiYWNrIGZyYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdUZXh0UXVl
cnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9zaXRp
b24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNp
Z25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWMg
dXNlZCBmb3IgdGV4dCBzZWxlY3Rpb24gJiBwYWludGluZywgdG8gbWFwIG91ciBxdWVyeSBzdGFy
dC9sZW5ndGggaW50byBzdGFydC9lbmRQb3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4dCBmcmFn
bWVudC4KKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3NlZENo
YXJhY3RlcnMpOworICAgIEFTU0VSVChlbmRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3Nl
ZENoYXJhY3RlcnMpOwogICAgIHN0YXJ0UG9zaXRpb24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRD
aGFyYWN0ZXJzOwogICAgIGVuZFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFj
dGVyczsKIAotICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uIHx8IHN0YXJ0UG9z
aXRpb24gPCAwIHx8IGVuZFBvc2l0aW9uIDwgMCkKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBl
bmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKHF1ZXJ5RGF0YSwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pOwpAQCAtMTUxLDcgKzE1Myw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9z
aXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGludCYgc3RhcnRQb3Np
dGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK3ZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlT
dGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCB1bnNp
Z25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAg
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzID0gcXVlcnlEYXRhLT50
ZXh0UmVuZGVyZXItPmxheW91dEF0dHJpYnV0ZXMoKTsKICAgICBWZWN0b3I8U1ZHVGV4dE1ldHJp
Y3M+JiB0ZXh0TWV0cmljc1ZhbHVlcyA9IGxheW91dEF0dHJpYnV0ZXMtPnRleHRNZXRyaWNzVmFs
dWVzKCk7CkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0
RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICBi
b29sIGFsdGVyU3RhcnRQb3NpdGlvbiA9IHRydWU7CiAgICAgYm9vbCBhbHRlckVuZFBvc2l0aW9u
ID0gdHJ1ZTsKIAotICAgIGludCBsYXN0UG9zaXRpb25PZmZzZXQgPSAtMTsKKyAgICBPcHRpb25h
bDx1bnNpZ25lZD4gbGFzdFBvc2l0aW9uT2Zmc2V0OwogICAgIGZvciAoOyB0ZXh0TWV0cmljc09m
ZnNldCA8IHRleHRNZXRyaWNzU2l6ZSAmJiBwb3NpdGlvbk9mZnNldCA8IHBvc2l0aW9uU2l6ZTsg
Kyt0ZXh0TWV0cmljc09mZnNldCkgewogICAgICAgICBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9
IHRleHRNZXRyaWNzVmFsdWVzW3RleHRNZXRyaWNzT2Zmc2V0XTsKIApAQCAtMTgyLDIxICsxODQs
MjEgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGlu
Z0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBt
ZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoc3Rh
cnRQb3NpdGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAg
aWYgKHN0YXJ0UG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlclN0
YXJ0UG9zaXRpb24gPSBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRpb24g
bWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRv
IG1vZGlmeSBpdC4KLSAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4o
cG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gcG9zaXRpb25PZmZz
ZXQpCiAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAKICAgICAgICAgLy8g
RGV0ZWN0IGxpZ2F0dXJlcy4KLSAgICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAm
JiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgICAg
IGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9m
ZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkp
IHsKLSAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0Owor
ICAgICAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGxhc3RQb3NpdGlvbk9mZnNldC52YWx1
ZSgpIC0gcG9zaXRpb25PZmZzZXQgPiAxKSB7CisgICAgICAgICAgICBpZiAoYWx0ZXJTdGFydFBv
c2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBz
dGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFydFBv
c2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgYWx0
ZXJTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
IChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYm
IGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAg
ICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9u
T2Zmc2V0LnZhbHVlKCkgJiYgZW5kUG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewogICAgICAg
ICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAg
YWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjEyLDExICsyMTQs
MTEgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGlu
Z0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICBpZiAoIWFsdGVyU3RhcnRQb3NpdGlv
biAmJiAhYWx0ZXJFbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxhc3RQ
b3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNl
dCA+IDEpIHsKLSAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBvc2l0aW9u
ID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+
KHBvc2l0aW9uT2Zmc2V0KSkKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRp
b25PZmZzZXQ7CisgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAmJiBsYXN0UG9zaXRpb25PZmZz
ZXQudmFsdWUoKSAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgeworICAgICAgICBpZiAoYWx0ZXJTdGFy
dFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAm
JiBzdGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpCisgICAgICAgICAgICBzdGFydFBvc2l0
aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKGFsdGVyRW5k
UG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgZW5kUG9zaXRp
b24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKGFsdGVy
RW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAm
JiBlbmRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KQogICAgICAgICAgICAgZW5kUG9zaXRpb24g
PSBwb3NpdGlvbk9mZnNldDsKICAgICB9CiB9CkBAIC0yODQsOCArMjg2LDggQEAgYm9vbCBTVkdU
ZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW4KIHsKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8U3ViU3RyaW5nTGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQ
b3NpdGlvbiA9IGRhdGEtPnN0YXJ0UG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3Rh
cnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0g
ZGF0YS0+c3RhcnRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gKyBkYXRhLT5sZW5ndGg7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9G
cmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMTksOCArMzIxLDggQEAg
Ym9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEq
IHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGUKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJE
YXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1
ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAg
IGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21l
bnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3Np
dGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzY4LDggKzM3MCw4IEBAIGJvb2wg
U1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlE
YXRhLCBjb25zdCBTVkdUZXh0CiB7CiAgICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRh
dGEgPSBzdGF0aWNfY2FzdDxFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7
CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQ
b3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24g
PSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRp
b24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGlu
YXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE2LDggKzQxOCw4IEBAIGJvb2wgU1ZHVGV4dFF1
ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdUZXh0RnJhCiB7CiAgICAgUm90YXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNf
Y2FzdDxSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlv
bjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlm
ICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEs
IGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNDU0LDcgKzQ1Niw3IEBAIHN0cnVjdCBFeHRlbnRPZkNoYXJhY3RlckRhdGEg
OiBTVkdUZXh0UXVlcnk6OkRhdGEgewogICAgIEZsb2F0UmVjdCBleHRlbnQ7CiB9OwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0
YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQ
b3NpdGlvbiwgRmxvYXRSZWN0JiBleHRlbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRl
R2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBGbG9hdFJlY3Qm
IGV4dGVudCkKIHsKICAgICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcXVlcnlEYXRhLT50ZXh0UmVu
ZGVyZXItPnNjYWxpbmdGYWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CkBAIC00
ODQsOCArNDg2LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJh
Y2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ20KIHsKICAgICBFeHRlbnRPZkNo
YXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFeHRlbnRPZkNoYXJhY3RlckRhdGEqPihx
dWVyeURhdGEpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAg
ICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBz
dGFydFBvc2l0aW9uICsgMTsKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdt
ZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxOSw4ICs1MjEsOCBAQCBib29s
IFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1
ZXJ5RGF0YSwgY29uc3QgU1ZHVAogCiAgICAgRmxvYXRSZWN0IGV4dGVudDsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaW50IHN0
YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKLSAgICAgICAgaW50
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKKyAgICAgICAgdW5zaWdu
ZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKICAgICAgICAgaWYgKCFtYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQs
IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAppbmRleCA3MjFiMmRm
OGUzMzI0NWRhODY0MzM4NWJlNmVlMmIxZDJiMDkzOGRmLi4zODczMGEzOGQwNjFlODI1Y2Q5Mzdk
NzgxODRiOGQzYjNmYTBmYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFF1ZXJ5LmgKQEAgLTUyLDggKzUyLDggQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVR
dWVyeShEYXRhKiwgUHJvY2Vzc1RleHRGcmFnbWVudENhbGxiYWNrKSBjb25zdDsKIAogICAgIHZv
aWQgY29sbGVjdFRleHRCb3hlc0luRmxvd0JveChJbmxpbmVGbG93Qm94Kik7Ci0gICAgYm9vbCBt
YXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNv
bnN0OwotICAgIHZvaWQgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVz
KERhdGEqLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAg
IGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwg
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVk
JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgdm9pZCBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jl
c3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25l
ZCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgbnVtYmVyT2ZDaGFy
YWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285868</attachid>
            <date>2016-08-11 16:56:55 -0700</date>
            <delta_ts>2016-08-11 17:09:22 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-160735-20160811165521.patch</filename>
            <type>text/plain</type>
            <size>145315</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU1NDBlMTUxMGFmYzc4
MjQyNzM5MmM1NTczNDAwODQ1MDdiYTEyNy4uZGRiOGRkNjA4MjQ2YmNkMmEwNTc2NGE4ZDMwY2Y4
MTg4NGE5M2E5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NCBAQAorMjAxNi0wOC0xMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFRoZXJl
IGFyZSBhIGZldyBjYXNlcyB3aGVyZSB3ZSB1c2UgaW50cyB0byByZWZlciB0byBpbmRpY2VzIGlu
dG8gc3RyaW5nczoKKyAgICAgICAgLSBBIHNpbXBsZSBoaXN0b3JpY2FsIGFjY2lkZW50LiBUaGVz
ZSB3ZXJlIG1pZ3JhdGVkIHRvIHVuc2lnbmVkcyBkaXJlY3RseS4KKyAgICAgICAgLSBXaGVyZSB3
ZSB1c2UgLTEgYXMgYSBzZW50aW5hbCB2YWx1ZS4gVGhlc2Ugd2VyZSBtaWdyYXRlZCB0byBPcHRp
b25hbDx1bnNpZ25lZD4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IG1vZGlmaWVzIHJlbmRl
cmluZyBjb2RlIChyYXRoZXIgdGhhbiBET00gY29kZSkuIFRoZXJlIGFyZSBhIGZldworICAgICAg
ICBwbGFjZXMgaW4gRE9NIGNvZGUgKHN1Y2ggYXMgUG9zaXRpb24gYW5kIE5vZGU6Om1heENoYXJh
Y3Rlck9mZnNldCgpKSB3aGljaCBhbHNvCisgICAgICAgIGVycm9uZW91c2x5IHVzZSBpbnRzOyBo
b3dldmVyLCBJIGRpZG4ndCB3YW50IHRoaXMgY2hhbmdlIHRvIGJlIG9ic2VydmFibGUgZnJvbQor
ICAgICAgICBzY3JpcHQgYW5kIEkgd2FudGVkIHRvIGtlZXAgdGhpcyBwYXRjaCB0byBhIHJlYXNv
bmFibGUgc2l6ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGb3JSYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdseXBoQnVmZmVyRm9yVGV4
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd1RleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVW5kZXJsaW5lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmdseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhC
dWZmZXI6OmZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNocmluayk6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c3dhcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFy
a3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpMYXRpbjFUZXh0SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZU9uZUNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzVG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdHbHlwaHNTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRy
YXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9jYWxTZWxl
Y3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om9m
ZnNldFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpJbmxpbmVUZXh0Qm94
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6
bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlv
blJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVh
clN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXBwbHlT
dWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rp
b25TdWJ0cmVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6c2VsZWN0aW9uQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJl
ZURhdGE6OnNldFNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2V0U2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6Ok9sZFNlbGVjdGlvbkRhdGE6Ok9sZFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
UGFpbnRlcjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQ
YWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRR
dWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oOgorCiAyMDE2LTA4
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWxpZ24gUmFu
Z2Uuc3Vycm91bmRDb250ZW50cygpIHdpdGggdGhlIGxhdGVzdCBET00gc3BlY2lmaWNhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAzMzgzNGFkMDk2
ZTgxODIyNTE2ZTc4MTNiMmI4MGRjOWJiMjZlMmQ0Li42ZTExMDQ5MDE4NjhhODgzZmFjNDMyNzlm
YjYxYmVlODA2YmYxYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcApAQCAtMjA4OCw4ICsyMDg4LDExIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFw
cGVhcmFuY2UoKQogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlmeSB0aGUgRnJhbWVT
ZWxlY3Rpb24gb2YgdGV4dCByZW1vdmFsLgogICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAm
JiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVy
ID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQ
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAm
JiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxp
dHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgp
ID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBsYXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAo
bV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUo
Km1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2Ni
YzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQwODQwNmMwLi41MjkwZGViZTQ0NGJiZDMxODNh
ZmYyOWZkMDM2NWQzNjgwMDQ4MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
cjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyOwotICAgIGludCBzdGFydE9mZnNldDsK
LSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsK
KyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZv
cmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwxMCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFj
awogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25z
ID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8g
U25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQgOiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAg
ICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBS
ZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5k
T2Zmc2V0ID49IDApOworICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFy
dE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhp
bmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNl
IHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25h
cHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxm
LgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJl
Y3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5k
ZXggNDM4MGI1YzA4NTMyZTgyMWFjYWEzNGVmMmNkNzhiNTExNjZhNWJiOS4uMzg2Njk5MWYwODhk
YjE1OWQ1MGNkMzdiYTJhMzFjYmNiNDkxMGNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMjk0LDE0ICsyOTQsMTQgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9y
KSBjb25zdAogICAgIG1fcmVxdWlyZXNTaGFwaW5nID0gY29tcHV0ZVJlcXVpcmVzU2hhcGluZygp
OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRo
IGNvZGVQYXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdseXBoQnVm
ZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBjb25zdCBUZXh0UnVuJiBydW4s
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpIGNv
bnN0CiB7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKICAgICAgICAgcmV0dXJu
IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1
ZmZlcik7CiAgICAgcmV0dXJuIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1Rl
eHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRy
YXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25z
dAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3Rv
bSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2Vw
dCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBp
dCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zMDksMTUgKzMwOSwxNSBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKyAgICB1bnNp
Z25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1No
YXBpbmcoKSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVu
Z3RoKCkpKQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5p
bmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVu
Lmxlbmd0aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCkgKyBnbHlw
aEJ1ZmZlckZvclRleHRSdW4oY29kZVBhdGhUb1VzZSwgcnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIpOworICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdseXBoQnVmZmVyRm9yVGV4dFJ1
bihjb2RlUGF0aFRvVXNlLCBydW4sIGZyb20sIGRlc3RpbmF0aW9uLCBnbHlwaEJ1ZmZlcik7CiAg
ICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gR2l2ZSB1
cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTMyNywyMyArMzI3LDIyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gc3Rh
cnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFs
PHVuc2lnbmVkPiB0bykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5sZW5ndGgo
KSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICAv
LyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBy
dW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8x
MDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVLZXJuaW5n
KCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IGRl
c3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21w
bGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgZHJhd0Vt
cGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1
biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwg
ZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRl
eHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKIH0KIAogZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CkBAIC00
OTEsMTkgKzQ5MCwxOSBAQCBib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNoYXJXaWR0aElm
QXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAot
dm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCBPcHRp
b25hbDx1bnNpZ25lZD4gdG8pIGNvbnN0CiB7Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVu
Z3RoKCkgOiB0byk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5s
ZW5ndGgoKSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsK
ICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFy
dGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5v
cmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBD
b21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9t
IHx8IGRlc3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2Ug
PSBDb21wbGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAg
cmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiAKLSAgICByZXR1
cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwg
ZnJvbSwgdG8pOworICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
cnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiB9CiAKIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdApAQCAtMTEyMyw3ICsxMTIyLDcgQEAgYm9vbCBG
b250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
bnRzICYmIG1fZm9udHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CiB9CiAgICAgCi1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBpbmRleCkKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gSW4gZ2VuZXJhbCwgd2Ug
d2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24g
Q0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKICAgICAvLyBz
byB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXIt
YnktY2hhcmFjdGVyIGJhc2lzKS4KQEAgLTEyMzgsNyArMTIzNyw3IEBAIGludCBGb250Q2FzY2Fk
ZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBG
b3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0
IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xMjY4LDcgKzEyNjcsNyBAQCBmbG9hdCBGb250Q2FzY2Fk
ZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
aW50IGZybwogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEyODcsOCArMTI4Niw4IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgp
IC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAgICAgZmxvYXQgbmV4
dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpOwog
ICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
MCkuaGVpZ2h0KCk7Ci0gICAgaW50IGxhc3RGcm9tID0gMDsKLSAgICBpbnQgbmV4dEdseXBoID0g
MTsKKyAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CisgICAgdW5zaWduZWQgbmV4dEdseXBoID0g
MTsKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAg
IGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgp
OwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5l
eHRHbHlwaCk7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNl
dFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCiAgICAg
cmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7CiB9CiAKLWlubGluZSBz
dGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQoraW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01p
ZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgaSkKIHsKICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZv
bnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CkBAIC0xMzQ0LDcgKzEzNDMsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2lu
dC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9u
dERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAKICAgICBHbHlwaEJ1ZmZlciBtYXJrQnVm
ZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBnbHlwaEJ1ZmZlci5zaXplKCk7
ICsraSkgewogICAgICAgICBmbG9hdCBtaWRkbGVPZk5leHRHbHlwaCA9IG9mZnNldFRvTWlkZGxl
T2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAxKTsKICAgICAgICAgZmxvYXQgYWR2YW5j
ZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpIC0gbWlkZGxlT2ZMYXN0R2x5cGgg
KyBtaWRkbGVPZk5leHRHbHlwaDsKICAgICAgICAgbWFya0J1ZmZlci5hZGQoZ2x5cGhCdWZmZXIu
Z2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1hcmtGb250RGF0YSwgYWR2YW5j
ZSk7CkBAIC0xMzcxLDcgKzEzNzAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJl
dHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0
aGlzLCBydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKaW5kZXggYzZkMGMyNTk4ZWQxNjMxYmU2MTZlN2Q3OGJkMzI2NTBjNjZjYzFkYS4uOGJk
Y2NhODA3MjJlMjU5OWI4MTQ1MTZmMjg2YzBiNDE0MTZkODg2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwogICAgIHZpcnR1YWwgfkds
eXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQogfTsKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBo
VW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBpbmRleCk7CiAKIGNsYXNzIFRleHRMYXlvdXREZWxldGVy
IHsKIHB1YmxpYzoKQEAgLTEzMyw5ICsxMzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUo
UmVmUHRyPEZvbnRTZWxlY3Rvcj4mJikgY29uc3Q7CiAKICAgICBlbnVtIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQsIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgc3RhdGljIHZv
aWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0
byA9IE51bGxvcHQpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAKQEAgLTE0NSw3ICsxNDUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0g
MCk7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gTnVsbG9w
dCkgY29uc3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENhcHM6OlNtYWxsOyB9CiAK
QEAgLTIxOCwxNSArMjE4LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0
RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CiAK
LSAgICBmbG9hdCBnbHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBhdGgsIGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OworICAgIGZsb2F0IGdseXBo
QnVmZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGlu
aXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKICAgICB2
b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEds
eXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPEdseXBoRGF0YT4gZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogCkBAIC0yMzQsMTEg
KzIzNCwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0
cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4
dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0
OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGlu
dCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBw
b3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0
U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3Q7CiAKICAgICBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBh
bnNpb25CZWhhdmlvcik7CiAgICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKaW5kZXggYzgyYWYzOTA4NDRmNWQyN2Uy
ZTYwNDc5ZDliZDdlYjQ5MWQwNzlkYi4uNTYzNTQwYzBlNzQzOWUyNDQ4NjQxM2UwNmI5NDc4YjFj
NzhjY2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1
ZmZlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIHR5cGVkZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2
YW5jZTsKIGNsYXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnQuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udC5zaXplKCk7IH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CkBAIC05
MSwxMiArOTEsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzKGludCBmcm9tKSB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgeyByZXR1cm4gbV9h
ZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9Ci0g
ICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgY29uc3QgeyBy
ZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CisgICAgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
KyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJu
IG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocyh1bnNpZ25lZCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBm
cm9tOyB9CisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyh1bnNpZ25lZCBm
cm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAgIGNv
bnN0IEZvbnQqIGZvbnRBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFtpbmRleF07
IH0KKyAgICBjb25zdCBGb250KiBmb250QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udFtpbmRleF07IH0KIAogICAgIHZvaWQgc2V0SW5pdGlhbEFkdmFuY2UoR2x5cGhCdWZm
ZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFkdmFuY2UgPSBpbml0aWFsQWR2
YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYgaW5pdGlhbEFkdmFuY2UoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TGVhZGluZ0V4cGFuc2lvbihmbG9hdCBsZWFkaW5nRXhwYW5zaW9u
KSB7IG1fbGVhZGluZ0V4cGFuc2lvbiA9IGxlYWRpbmdFeHBhbnNpb247IH0KICAgICBmbG9hdCBs
ZWFkaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9sZWFkaW5nRXhwYW5zaW9uOyB9CiAg
ICAgCi0gICAgR2x5cGggZ2x5cGhBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGggZ2x5cGhB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBy
ZXR1cm4gbV9nbHlwaHNbaW5kZXhdLmluZGV4OwpAQCAtMTEzLDEyICsxMTMsMTIgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdChpbnQg
aW5kZXgpIGNvbnN0CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkdmFuY2VzW2luZGV4XTsKICAg
ICB9CiAKLSAgICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdAorICAgIEZsb2F0
U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgUExBVEZPUk0o
V0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKQEAgLTE4MCw5ICsxODAsOSBA
QCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJldmVyc2UoaW50IGZyb20sIGlu
dCBsZW5ndGgpCisgICAgdm9pZCByZXZlcnNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0
aCkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3Ro
IC0gMTsgaSA8IGVuZDsgKytpLCAtLWVuZCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJv
bSwgZW5kID0gZnJvbSArIGxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsraSwgLS1lbmQpCiAgICAgICAg
ICAgICBzd2FwKGksIGVuZCk7CiAgICAgfQogCkBAIC0xOTgsMTQgKzE5OCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fb2Zmc2V0c0luU3RyaW5nLnJlc2V0KG5ldyBWZWN0b3I8dW5zaWduZWQsIDIw
NDg+KCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnRzIGZyb20gYW4gdW5z
aWduZWQgdG8gYW4gaW50Ci0gICAgaW50IG9mZnNldEluU3RyaW5nKGludCBpbmRleCkgY29uc3QK
KyAgICBpbnQgb2Zmc2V0SW5TdHJpbmcodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vZmZzZXRzSW5TdHJpbmcpOwogICAgICAgICByZXR1cm4gKCptX29mZnNl
dHNJblN0cmluZylbaW5kZXhdOwogICAgIH0KIAotICAgIHZvaWQgc2hyaW5rKGludCB0cnVuY2F0
aW9uUG9pbnQpCisgICAgdm9pZCBzaHJpbmsodW5zaWduZWQgdHJ1bmNhdGlvblBvaW50KQogICAg
IHsKICAgICAgICAgbV9mb250LnNocmluayh0cnVuY2F0aW9uUG9pbnQpOwogICAgICAgICBtX2ds
eXBocy5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKQEAgLTIxOCw3ICsyMTcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgy
KQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEsIHVuc2lnbmVkIGluZGV4MikKICAgICB7
CiAgICAgICAgIGNvbnN0IEZvbnQqIGYgPSBtX2ZvbnRbaW5kZXgxXTsKICAgICAgICAgbV9mb250
W2luZGV4MV0gPSBtX2ZvbnRbaW5kZXgyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGFmMTkxMjI3MDM0ZWFjMTYw
YmUzZmIyYTA2ZjZkNGRlM2JmZjI3ZWUuLmVkZjYwNTM4Yjg5MzBiZTBiODk3OTk5YTVlNDMxMGM3
NTBhNDc3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50Owog
fQogCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
dW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjQ1LDcgKzY0NSw3IEBAIGZsb2F0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwg
cG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjU4LDcgKzY1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3QgRm9udCYgZm9uCiAgICAgZm9u
dENhc2NhZGUuZHJhd0dseXBocygqdGhpcywgZm9udCwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50LCBmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAzODkzNDA2
NjQ5MzQ4OTQ2NDBjMzM2ZGJiMjJlZTE4ZmE2YjJhNWFmLi5hNmU2ZmIwM2MyYmRiMDA3ZjFhNmI4
MDE2MDk3Y2RmNmIzODc4YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzgxLDkgKzM4MSw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7CiAgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgZmxvYXQgZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0KTsKKyAg
ICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0
KTsKICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCiAgICAgdm9p
ZCBhcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCmluZGV4
IGM0MDE4OWJmZTkzMzJhMGRlYjQwNjQzYzE0ZDFlMjgwNzdkYWQzODkuLjQzMWQ4ZmYyMGQ0N2U0
ZTU5ZmU5YjRhYjA0N2RhNDA5NmIwN2YwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCkBAIC0yOCwxOCArMjgsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXRpbjFUZXh0SXRlcmF0b3IgewogcHVi
bGljOgotICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJl
bnRDaGFyYWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0ZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50
Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdENoYXJhY3RlcicuCi0gICAgTGF0aW4xVGV4dEl0ZXJhdG9yKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCAv
KmVuZENoYXJhY3RlciovKQorICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFy
dHMgYXQgJ2N1cnJlbnRJbmRleCcuIFRoZSBpdGVyYXRvciBvcGVyYXRlcyBvbiB0aGUgcmFuZ2Ug
W2N1cnJlbnRJbmRleCwgbGFzdEluZGV4XS4KKyAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdEluZGV4Jy4KKyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRJbmRleCwgdW5zaWduZWQgbGFzdEluZGV4LCB1bnNpZ25l
ZCAvKmVuZENoYXJhY3RlciovKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQot
ICAgICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICAgICAs
IG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFjdGVyKQorICAgICAgICAsIG1fY3VycmVudEluZGV4
KGN1cnJlbnRJbmRleCkKKyAgICAgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCiAgICAgewog
ICAgIH0KIAogICAgIGJvb2wgY29uc3VtZShVQ2hhcjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVkJiBj
bHVzdGVyTGVuZ3RoKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA+PSBt
X2xhc3RDaGFyYWN0ZXIpCisgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2xhc3RJbmRl
eCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjaGFyYWN0ZXIgPSAqbV9j
aGFyYWN0ZXJzOwpAQCAtNTAsMTYgKzUwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2Uo
dW5zaWduZWQgYWR2YW5jZUxlbmd0aCkKICAgICB7CiAgICAgICAgIG1fY2hhcmFjdGVycyArPSBh
ZHZhbmNlTGVuZ3RoOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0
aDsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAg
ICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rl
cjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEluZGV4OyB9CiAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXJz
OwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFzdENoYXJhY3RlcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCmluZGV4IDkxNTVl
NzExYThkYTgwZDRlYjNkY2Y1ZGE1YWMzMDVhMjhjYmVhNzkuLjY4MmQ5OGUyNTM1YzJkYjRiN2Fl
MTMwYjUzY2QxNjJkMGI2OWUxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcApAQCAtMjcsMTEgKzI3LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Io
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENo
YXJhY3RlciwgaW50IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRv
cjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBjdXJyZW50SW5kZXgsIHVuc2lnbmVkIGxhc3RJbmRleCwgdW5zaWduZWQgZW5k
SW5kZXgpCiAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKLSAgICAsIG1fY3VycmVudENo
YXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFy
YWN0ZXIpCi0gICAgLCBtX2VuZENoYXJhY3RlcihlbmRDaGFyYWN0ZXIpCisgICAgLCBtX2N1cnJl
bnRJbmRleChjdXJyZW50SW5kZXgpCisgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCisgICAg
LCBtX2VuZEluZGV4KGVuZEluZGV4KQogewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgU3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjb25zdW1lU2xvd0Nhc2UoVUNoYXIzMiYgY2hh
cmFjdGVyLCB1bnNpZ25lCiAKICAgICAvLyBEbyB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXI/IElm
IHNvLCBkZXRlcm1pbmUgdGhlIGZ1bGwgVW5pY29kZSAoMzIgYml0KSBjb2RlIHBvaW50IGJlZm9y
ZSBnbHlwaCBsb29rdXAuCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW5vdGhlciBjaGFyYWN0
ZXIgYW5kIGl0J3MgYSBsb3cgc3Vycm9nYXRlLgotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIg
KyAxID49IG1fZW5kQ2hhcmFjdGVyKQorICAgIGlmIChtX2N1cnJlbnRJbmRleCArIDEgPj0gbV9l
bmRJbmRleCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIgbG93ID0gbV9jaGFy
YWN0ZXJzWzFdOwpAQCAtNzQsNyArNzQsNyBAQCBVQ2hhcjMyIFN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvcjo6bm9ybWFsaXplVm9pY2luZ01hcmtzKCkKICAgICAvLyBBY2NvcmRpbmcgdG8g
aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRtbCNDYW5vbmljYWxf
Q29tYmluaW5nX0NsYXNzX1ZhbHVlcwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhpcmFnYW5h
S2F0YWthbmFWb2ljaW5nTWFya3NDb21iaW5pbmdDbGFzcyA9IDg7CiAKLSAgICBpZiAobV9jdXJy
ZW50Q2hhcmFjdGVyICsgMSA+PSBtX2VuZENoYXJhY3RlcikKKyAgICBpZiAobV9jdXJyZW50SW5k
ZXggKyAxID49IG1fZW5kSW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHVfZ2V0
Q29tYmluaW5nQ2xhc3MobV9jaGFyYWN0ZXJzWzFdKSA9PSBoaXJhZ2FuYUthdGFrYW5hVm9pY2lu
Z01hcmtzQ29tYmluaW5nQ2xhc3MpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgK
aW5kZXggODVjOTY5NGM3NmEyMmNkZWFlZWIzYmE4NDFiMTBhMGE1MDMxNjgxMy4uNDcwZDE0YWYy
NWRjNGI0NjA1OTM3ZDQ1MjVhZjUyZjVhMTE2YTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4
dEl0ZXJhdG9yLmgKQEAgLTI4LDEzICsyOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8gVGhl
IHBhc3NlZCBpbiBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJhY3RlcicuIFRo
ZSBpdGVyYXRvciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0
Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxl
bmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3Rl
cicuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVyKTsK
KyAgICAvLyBUaGUgcGFzc2VkIGluIFVDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50SW5k
ZXgnLiBUaGUgaXRlcmF0b3Igb3BlcmF0b2VzIG9uIHRoZSByYW5nZSBbY3VycmVudEluZGV4LCBs
YXN0SW5kZXhdLgorICAgIC8vICdlbmRJbmRleCcgZGVub3RlcyB0aGUgbWF4aW11bSBsZW5ndGgg
b2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xhc3RJbmRleCcuCisgICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgY3Vy
cmVudEluZGV4LCB1bnNpZ25lZCBsYXN0SW5kZXgsIHVuc2lnbmVkIGVuZEluZGV4KTsKIAogICAg
IGlubGluZSBib29sIGNvbnN1bWUoVUNoYXIzMiYgY2hhcmFjdGVyLCB1bnNpZ25lZCYgY2x1c3Rl
ckxlbmd0aCkKICAgICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPj0gbV9sYXN0
Q2hhcmFjdGVyKQorICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9sYXN0SW5kZXgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2hhcmFjdGVyID0gKm1fY2hhcmFj
dGVyczsKQEAgLTQ5LDEwICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKHVuc2ln
bmVkIGFkdmFuY2VMZW5ndGgpCiAgICAgewogICAgICAgICBtX2NoYXJhY3RlcnMgKz0gYWR2YW5j
ZUxlbmd0aDsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5ndGg7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ICs9IGFkdmFuY2VMZW5ndGg7CiAgICAgfQogCi0gICAgaW50
IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0K
KyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRl
eDsgfQogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
YWN0ZXJzOyB9CiAKIHByaXZhdGU6CkBAIC02MCw5ICs2MCw5IEBAIHByaXZhdGU6CiAgICAgVUNo
YXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoKTsKIAogICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9sYXN0Q2hhcmFj
dGVyOwotICAgIGludCBtX2VuZENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VuZEluZGV4Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcAppbmRleCAwYjlhNzQwMmFmYjYxMzYwNjA1OGVkOTgzMTRhNmIxZGNiOTA1NmI0
Li4zNmZiYTBmOWQwNmY4Nzk3NmU1YWVkMGJhMDlhYTY2YTU5YTUwN2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtODEs
NyArODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFua0Vtb2ppKFVDaGFyMzIgY29k
ZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAxICYmIGNvZGVwb2ludCA8PSAw
eEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRy
YW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBpbnQgbGFzdEdseXBoQ291
bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitp
bmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFy
MzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7CiAgICAgaWYg
KGdseXBoQnVmZmVyICYmIGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsg
MSkgJiYgaXNTb2Z0QmFua0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQ7CkBAIC05MCwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8g
V2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWYKICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0KIAot
aW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9u
dCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitpbmxpbmUgZmxvYXQg
V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQs
IFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQogewogICAgIEFTU0VSVF9VTlVTRUQo
cHJldmlvdXNDaGFyYWN0ZXIsIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIs
IGxhc3RHbHlwaENvdW50LCBwcmV2aW91c0NoYXJhY3RlcikgIT0gV2lkdGhJdGVyYXRvcjo6VHJh
bnNmb3Jtc1R5cGU6Ok5vbmUpOwogCiAgICAgaWYgKCFnbHlwaEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpbnQgZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsK
KyAgICB1bnNpZ25lZCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOwogICAg
IGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJTaXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewog
ICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0xMDUsOSArMTA1LDEwIEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBs
eUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAKICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXItPmFkdmFuY2VzKDApOwog
ICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlw
aENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhE
aWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKKyAgICBBU1NFUlQobGFzdEdseXBo
Q291bnQgPD0gZ2x5cGhCdWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikKICAgICAgICAgZ2x5cGhC
dWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlw
aENvdW50KTsKIApAQCAtMTI1LDcgKzEyNiw3IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9y
OjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAg
ICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOwogCi0gICAgZm9yIChp
bnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkK
ICAgICAgICAgd2lkdGhEaWZmZXJlbmNlICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBs
YXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKQEAgLTE4MSw3ICsxODIsNyBAQCBpbmxp
bmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYg
dGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBtX2Zv
bnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgRm9udCogbGFzdEZvbnREYXRhID0gJnByaW1h
cnlGb250OwotICAgIGludCBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZm
ZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWduZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZl
ciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAw
OwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIgPSAwOwpAQCAtMTkxLDcgKzE5Miw3IEBA
IGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJh
dG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgLy8gV2UgYXJlIGl0ZXJhdGluZyBpbiBzdHJp
bmcgb3JkZXIsIG5vdCBnbHlwaCBvcmRlci4gQ29tcGFyZSB0aGlzIHRvIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQogICAgIHdoaWxlICh0ZXh0SXRlcmF0
b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVk
IGFkdmFuY2VMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwotICAgICAgICBpbnQgY3VycmVudENoYXJh
Y3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIGludCBjdXJy
ZW50Q2hhcmFjdGVyID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpOwogICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgcnRsKTsKICAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaERhdGEuZ2x5cGg7CiAg
ICAgICAgIGlmICghZ2x5cGgpIHsKQEAgLTM0OSwyMSArMzUwLDIxIEBAIGlubGluZSB1bnNpZ25l
ZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0
b3IsIEdseXBoCiAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5rKGxhc3RHbHlwaENvdW50
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3RlcnMgPSB0ZXh0SXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIG1fY3VycmVu
dENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgdW5zaWdu
ZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpIC0gbV9j
dXJyZW50Q2hhcmFjdGVyOworICAgIG1fY3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5j
dXJyZW50SW5kZXgoKTsKICAgICBtX3J1bldpZHRoU29GYXIgKz0gd2lkdGhTaW5jZUxhc3RSb3Vu
ZGluZzsKICAgICBtX2ZpbmFsUm91bmRpbmdXaWR0aCA9IGxhc3RSb3VuZGluZ1dpZHRoOwogICAg
IHJldHVybiBjb25zdW1lZENoYXJhY3RlcnM7CiB9CiAKLXVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQordW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlw
aEJ1ZmZlcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKQog
ICAgICAgICBvZmZzZXQgPSBsZW5ndGg7CiAKLSAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID49
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKQorICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0
ZXIgPj0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChtX3J1bi5pczhCaXQo
KSkgewpAQCAtMzc3LDEwICszNzgsMTAgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZShpbnQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAKIGJvb2wgV2lkdGhJdGVy
YXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlcikKIHsKLSAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAgICB1
bnNpZ25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIGFkdmFuY2UobV9jdXJy
ZW50Q2hhcmFjdGVyICsgMSwgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCB3ID0gMDsKLSAgICBm
b3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQorICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKICAg
ICAgICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKICAgICB3aWR0aCA9
IHc7CiAgICAgcmV0dXJuIGdseXBoQnVmZmVyLnNpemUoKSA+IG9sZFNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXggNjhmZTNm
M2Y1YmIzZjk3OTI4OTI3NTI1ODYwNjg2MWU1Y2U5Mjg2My4uYzQ1ZmRiOGMzNmEzZmUyZjNlZjg2
Yzg5NTllZjU1MTZhMzkwMTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvciB7CiBwdWJsaWM6CiAgICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOwogCi0gICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7Cisg
ICAgdW5zaWduZWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBib29s
IGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwogCiAgICAg
ZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IEFTU0VSVChtX2FjY291bnRGb3JH
bHlwaEJvdW5kcyk7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9CkBAIC03MCw4ICs3
MCw4IEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0
SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciopOwogCiAgICAgZW51bSBjbGFzcyBUcmFuc2Zvcm1zVHlw
ZSB7IE5vbmUsIEZvcmNlZCwgTm90Rm9yY2VkIH07Ci0gICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxk
QXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIGludCBsYXN0R2x5cGhDb3Vu
dCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7Ci0gICAgZmxvYXQgYXBwbHlGb250
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJvb2wgbHRyLCBpbnQmIGxhc3RHbHlwaENvdW50LCBj
b25zdCBGb250KiwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFj
dGVyc1RyZWF0ZWRBc1NwYWNlJik7CisgICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxkQXBwbHlGb250
VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBV
Q2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdDsKKyAgICBmbG9hdCBhcHBseUZvbnRUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyKiwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5cGhDb3VudCwg
Y29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZSYpOwogCiAgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFs
bGJhY2tGb250cyB7IG51bGxwdHIgfTsKICAgICBib29sIG1fYWNjb3VudEZvckdseXBoQm91bmRz
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IGU4OTVmMTc1OTY2Mjk0MDk5ZDliZjBhZGUyNmYxMjQ0
ODM5NzFiMzYuLjllMzA4MDE1ODUyODM5Y2Q0Mjg2YTZhYzQ1NDIwMDJjYjM4ZWM1YzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcApAQCAtNDcsNyArNDcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2
b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQg
ZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIG51bUdseXBocykKIHsKICAgICBjYWly
b19tYXRyaXhfdCBvcmlnaW5hbFRyYW5zZm9ybTsKICAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zm
c2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC02Niw3ICs2Niw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgR2x5cGhCdWZmZXJHCiAgICAgICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwgJm9y
aWdpbmFsVHJhbnNmb3JtKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEZvbnQmIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykK
K3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIG51bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVy
JiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIo
KTsKIApAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogfQogCiB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01v
ZGUpCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKCFmb250LnBsYXRmb3Jt
RGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBHCiAgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3Rf
Y2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKIAogICAg
IGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUds
eXBoczsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsr
KSB7CiAgICAgICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OwogICAgICAgICBnbHlwaHNbaV0ueSA9
IHBvaW50LnkoKTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9t
ICsgaSkud2lkdGgoKTsKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZh
bmNlKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1faW5kZXg7CisgICAgdW5zaWduZWQg
bV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47CiAgICAgY29uc3QgR2x5cGhC
dWZmZXImIG1fZ2x5cGhCdWZmZXI7CiAgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggMjE2ZDkxMWRlM2EwN2ZjN2Y0NGY5NWNiMGQ0NWFi
ODY0ZTZkZmM2Ny4uMDhiYWUzODA4NDg4NDU0YWQ3Mzg2NzJjM2UyODg0NWM4NGJmZDAzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQsIHVuc2lnbmVkLCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29u
c3QKIHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNo
YXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKSB7CkBAIC01Miw3ICs1Miw3IEBAIGZsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50LCBpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiAvKiBjb250ZXh0ICov
LCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAq
LywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCB1bnNpZ25lZCAvKiBmcm9tICovLCB1bnNpZ25lZCAvKiB0byAqLykgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtODUsNyArODUsNyBAQCBpbnQgRm9u
dENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBibwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAg
aWYgKHNoYXBlci5zaGFwZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCA3ZjU2NGIwNTJk
NWY1MTc0MDk4ZWMwZDQ1MGRmN2E5MmEyMjVjZTEyLi45YzFmMWRhZjdiOTY5MGFmN2Y0MzNiYWFm
YjQ4MjBiOTE5MmQ0MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTcwLDExICs3MCwxMSBA
QCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4
dCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9y
V2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRp
b25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90
IGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBo
UG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMsIENHQ29udGV4dFJlZiBj
b250ZXh0LCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRl
eHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKICAgICBwb3NpdGlvbnNbMF0gPSBDR1BvaW50WmVy
bzsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBDR1NpemUgYWR2YW5jZSA9
IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKGFkdmFuY2VzW2kgLSAxXSwgbWF0cml4KTsKICAg
ICAgICAgcG9zaXRpb25zW2ldLnggPSBwb3NpdGlvbnNbaSAtIDFdLnggKyBhZHZhbmNlLndpZHRo
OwogICAgICAgICBwb3NpdGlvbnNbaV0ueSA9IHBvc2l0aW9uc1tpIC0gMV0ueSArIGFkdmFuY2Uu
aGVpZ2h0OwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0
dGVycHJlc3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogI2VuZGlmCiB9
CiAKLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3Qg
Y291bnQpCitzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5z
aWduZWQgY291bnQpCiB7CiAjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQogICAgIGlmICghY291bnQp
CkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9u
dCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29u
c3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwg
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXpl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHCiAgICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0
KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOwogCiAgICAgICAgIENHUG9pbnQgcG9z
aXRpb24gPSBGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAg
ICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CiAgICAgICAgICAgICBwb3Np
dGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9zaXRp
b24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVpZ2h0
KSwgdHJhbnNmb3JtKTsKICAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0ud2lk
dGg7CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9k
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7CiB9CiAK
LXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0
Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00MzQsNyArNDM0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWR2YW5jZSgpIGZpbmFsOwogCiBwcml2YXRlOgotICAg
IGludCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYg
bV90ZXh0UnVuOwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwogICAgIGNv
bnN0IEZvbnQqIG1fZm9udERhdGE7CkBAIC00ODgsNyArNDg4LDcgQEAgRGFzaEFycmF5IEZvbnRD
YXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdAogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gRmxvYXRQb2ludCh0ZXh0T3JpZ2luLngo
KSArIGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOwogICAgIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRv
ciB0cmFuc2xhdG9yKHJ1biwgZ2x5cGhCdWZmZXIsIG9yaWdpbik7CiAgICAgRGFzaEFycmF5IHJl
c3VsdDsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3IuY29udGFpbnNNb3JlUGF0
aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgdHJhbnNsYXRvci5jb250YWluc01vcmVQYXRocygpOyArK2luZGV4LCB0cmFu
c2xhdG9yLmFkdmFuY2UoKSkgewogICAgICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBH
bHlwaEl0ZXJhdGlvblN0YXRlKENHUG9pbnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwg
bGluZUV4dGVudHMueSgpLCBsaW5lRXh0ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwg
bGluZUV4dGVudHMueCgpICsgbGluZUV4dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsK
ICAgICAgICAgY29uc3QgRm9udCogbG9jYWxGb250ID0gZ2x5cGhCdWZmZXIuZm9udEF0KGluZGV4
KTsKICAgICAgICAgaWYgKCFsb2NhbEZvbnQpIHsKQEAgLTUyNyw3ICs1MjcsNyBAQCBib29sIEZv
bnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0CiAgICAgcmV0dXJuIENU
Rm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3Jp
cHRvcihmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKCp0aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAg
LTU0Miw3ICs1NDIsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykg
Y29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lz
KSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC01NjUsNyArNTY1LDcg
QEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnIKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9h
dCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMGJmMTRiZWY3OWJkM2FiMmZiNzNmNmM3
NTA4MDcyNmRhNDQxZTMxZC4uYTIyNDI5ODhjMDYwMzYzOGE5NjQzYmU5NzAyZjYzNmVhMzU2NDZl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkK
ICAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
CiAgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHN0YXJ0UG9pbnQpLCBzbW9vdGhpbmdNb2RlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBl
Yjk5YTNkZGEwMGQzMTcwY2ZjOGYwODZhNDAyOWNiYmNlMWNkM2E0Li41MmVhMTA2ZWRhODRlYWUw
ZmZlOWFjNWY3NDAwZjFlOTBjNTk1MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
KTsKIAogICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CiAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCmluZGV4IDUyNTcwZWNlMzhlZTM4Yjc0MGQ4ZGY3
ZWM3YmEzYTRhMDUxNzcxZDMuLjkwYjIxNmNkZDkwYTczZWIzZThmYWY3N2Y4NDQ0YzRjMGEzMzll
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGlu
ZGV4LCB1aW50MTZfdAogICAgIG1fb2Zmc2V0c1tpbmRleF0gPSBGbG9hdFBvaW50KG9mZnNldFgs
IG9mZnNldFkpOwogfQogCi1pbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0
ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKQordW5zaWduZWQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRY
KQogewogICAgIEFTU0VSVCh0YXJnZXRYIDw9IG1fd2lkdGgpOwogICAgIGZsb2F0IGN1cnJlbnRY
ID0gMDsKQEAgLTE1Niw5ICsxNTYsOSBAQCBmbG9hdCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgcmV0dXJuIHBvc2l0
aW9uOwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFRleHRSdW4m
IHJ1biwgVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQorc3RhdGljIHZvaWQgbm9ybWFs
aXplQ2hhcmFjdGVycyhjb25zdCBUZXh0UnVuJiBydW4sIFVDaGFyKiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIGludCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOwogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICBjb25zdCBVQ2hhciogc291
cmNlOwogICAgIFN0cmluZyBzdHJpbmdGb3I4Qml0UnVuOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0
YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGV4dFJ1biYgcnVuLCBVQ2hhciog
ZGVzdGluYXRpb24sIGludCBsZW5nCiAKICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsK
ICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAg
ICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFz
IHNwYWNlcyBmb3Igd29yZC1lbmQuCiAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCkBAIC0yMDQsMTQgKzIwNCwxNCBA
QCBIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKCkKIHsKIH0KIAotc3RhdGljIHZvaWQg
bm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoLCBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXplTW9kZSBu
b3JtYWxpemVNb2RlKQorc3RhdGljIHZvaWQgbm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMo
Y29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBsZW5ndGgs
IEhhcmZCdXp6U2hhcGVyOjpOb3JtYWxpemVNb2RlIG5vcm1hbGl6ZU1vZGUpCiB7Ci0gICAgaW50
IHBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CiAgICAgYm9vbCBlcnJv
ciA9IGZhbHNlOwogICAgIC8vIEl0ZXJhdGUgY2hhcmFjdGVycyBpbiBzb3VyY2UgYW5kIG1pcnJv
ciBjaGFyYWN0ZXIgaWYgbmVlZGVkLgogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewog
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uOworICAgICAgICB1bnNpZ25lZCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAg
ICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAg
ICAgICAgLy8gRG9uJ3Qgbm9ybWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMg
c3BhY2VzIGZvciB3b3JkLWVuZAogICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFj
ZShjaGFyYWN0ZXIpICYmIGNoYXJhY3RlciAhPSAnXHQnKQpAQCAtNDE3LDExICs0MTcsMTEgQEAg
Ym9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmIChVX0dFVF9HQ19NQVNLKGNoYXJhY3Rlcikg
JiBVX0dDX01fTUFTSykgewotICAgICAgICAgICAgICAgIGludCBtYXJrTGVuZ3RoID0gY2x1c3Rl
ckxlbmd0aDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYXJrTGVuZ3RoID0gY2x1c3Rlckxl
bmd0aDsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogbWFya0NoYXJhY3RlcnNFbmQgPSBp
dGVyYXRvci5jaGFyYWN0ZXJzKCkgKyBjbHVzdGVyTGVuZ3RoOwogICAgICAgICAgICAgICAgIHdo
aWxlIChtYXJrQ2hhcmFjdGVyc0VuZCA8IG5vcm1hbGl6ZWRCdWZmZXJFbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgICAgICBp
bnQgbmV4dENoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG5leHRDaGFyYWN0ZXJMZW5ndGggPSAwOwogICAgICAgICAgICAgICAgICAgICBVMTZfTkVYVCht
YXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rlckxlbmd0aCwgbm9ybWFsaXplZEJ1ZmZlckVu
ZCAtIG1hcmtDaGFyYWN0ZXJzRW5kLCBuZXh0Q2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEoVV9HRVRfR0NfTUFTSyhuZXh0Q2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjQwLDcgKzY0MCw3IEBAIGludCBIYXJm
QnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCkKICAgICByZXR1cm4g
Y2hhcmFjdGVyc1NvRmFyOwogfQogCi1GbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlv
blJlY3QoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQg
dG8pCitGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQogewog
ICAgIGZsb2F0IGN1cnJlbnRYID0gMDsKICAgICBmbG9hdCBmcm9tWCA9IDA7CkBAIC02NTMsMTgg
KzY1MywyMiBAQCBGbG9hdFJlY3QgSGFyZkJ1enpTaGFwZXI6OnNlbGVjdGlvblJlY3QoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsIGludAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2hhcmZCdXp6UnVucy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9ydW4u
cnRsKCkpCiAgICAgICAgICAgICBjdXJyZW50WCAtPSBtX2hhcmZCdXp6UnVuc1tpXS0+d2lkdGgo
KTsKLSAgICAgICAgaW50IG51bUNoYXJhY3RlcnMgPSBtX2hhcmZCdXp6UnVuc1tpXS0+bnVtQ2hh
cmFjdGVycygpOwotICAgICAgICBpZiAoIWZvdW5kRnJvbVggJiYgZnJvbSA+PSAwICYmIGZyb20g
PCBudW1DaGFyYWN0ZXJzKSB7CisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBtX2hh
cmZCdXp6UnVuc1tpXS0+bnVtQ2hhcmFjdGVycygpOworICAgICAgICBpZiAoIWZvdW5kRnJvbVgg
JiYgZnJvbSA8IG51bUNoYXJhY3RlcnMpIHsKICAgICAgICAgICAgIGZyb21YID0gbV9oYXJmQnV6
elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldChmcm9tKSArIGN1cnJlbnRYOwogICAgICAgICAg
ICAgZm91bmRGcm9tWCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKGZyb20gPj0gbnVtQ2hhcmFjdGVycyk7CiAgICAgICAgICAgICBm
cm9tIC09IG51bUNoYXJhY3RlcnM7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZvdW5kVG9Y
ICYmIHRvID49IDAgJiYgdG8gPCBudW1DaGFyYWN0ZXJzKSB7CisgICAgICAgIGlmICghZm91bmRU
b1ggJiYgdG8gPCBudW1DaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICB0b1ggPSBtX2hhcmZCdXp6
UnVuc1tpXS0+eFBvc2l0aW9uRm9yT2Zmc2V0KHRvKSArIGN1cnJlbnRYOwogICAgICAgICAgICAg
Zm91bmRUb1ggPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh0byA+PSBudW1DaGFyYWN0ZXJzKTsKICAgICAgICAgICAgIHRvIC09IG51
bUNoYXJhY3RlcnM7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmRGcm9tWCAmJiBmb3Vu
ZFRvWCkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmgKaW5kZXggYmY3NmYz
MTdlOTgxYjVkZjZjZGNhODU0YjA0NTlhOWVhZDBhZGI5YS4uNjRkNDBiZTcwZWRjOWZhODM2ZWVh
YTc5MDJkMWMwYTM5YWNlZjY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5oCkBAIC01OSw3ICs1OSw3
IEBAIHB1YmxpYzoKICAgICBGbG9hdFBvaW50IGFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYpOwogICAgIGZsb2F0IHRvdGFsV2lkdGgoKSB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0K
ICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7Ci0gICAgRmxvYXRSZWN0
IHNlbGVjdGlvblJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGludCBoZWlnaHQsIGludCBmcm9tLCBp
bnQgdG8pOworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAKIHByaXZhdGU6CiAgICAg
Y2xhc3MgSGFyZkJ1enpSdW4gewpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogICAgICAgICB2
b2lkIHNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGluZGV4LCB1aW50MTZfdCBnbHlwaElk
LCBmbG9hdCBhZHZhbmNlLCBmbG9hdCBvZmZzZXRYLCBmbG9hdCBvZmZzZXRZKTsKICAgICAgICAg
dm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KIAotICAgICAg
ICBpbnQgY2hhcmFjdGVySW5kZXhGb3JYUG9zaXRpb24oZmxvYXQgdGFyZ2V0WCk7CisgICAgICAg
IHVuc2lnbmVkIGNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGZsb2F0IHRhcmdldFgpOwogICAg
ICAgICBmbG9hdCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKIAogICAgICAg
ICBjb25zdCBGb250KiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7IH0KQEAgLTg4LDcg
Kzg4LDcgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBGb250KiBtX2Zv
bnREYXRhOwogICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0SW5kZXg7Ci0gICAgICAgIHNpemVfdCBt
X251bUNoYXJhY3RlcnM7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2hhcmFjdGVyczsKICAgICAg
ICAgdW5zaWduZWQgbV9udW1HbHlwaHM7CiAgICAgICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rp
b247CiAgICAgICAgIGhiX3NjcmlwdF90IG1fc2NyaXB0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CmluZGV4IGFlOTZhZDE3OTFhOTA3MWRlYzk3NjM2OThlYjA4ZjcwYzAxYzFmMjQuLjdkZjRlZmZm
MzJhNGI1MDQ4ZDA2MjRiMDE5MGM0Y2Q0ZWM1YzNhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0
aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRz
ID0gMCwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKICAgICAvLyBBZHZhbmNlIGFu
ZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KLSAgICB2b2lkIGFk
dmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDAsIEdseXBoSXRlcmF0aW9uU3R5bGUg
PSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9u
dHMgPSAwKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IG51
bGxwdHIsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNl
dDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSBudWxscHRyKTsKIAogICAgIC8vIENvbXB1
dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEgZ2l2ZW4geCBjb29yZGluYXRlLgogICAgIGlu
dCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5j
cHAKaW5kZXggYjViZmYyNzFmMjMxODc5NWUyZjExMTJmYjU4NGY2YjAyM2VjODRlMy4uZThkNzMz
YTQ0NGZjNTZlNzI2NjYxZDZjNWIyYmRkYTYwNjNlN2M1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKQEAgLTEyOCw3ICsxMjgs
NyBAQCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMgaGRjLCBHbHlwaCBn
bHlwaCkKIH0KIAogdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLAotICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKKyAgICB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQogewogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgYm9vbCBzaG91bGRVc2VG
b250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCAyMzk2
YTRkZWUzZGVlMTUwZTczNjlmN2UxNmE0MGQ1MDBmOWVjOWViLi42OWZjOWNkMjUwZmYwNjc2MmRj
YTM0NWJiYzBiNjlhZWI2ZGQwMTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgRm9udENhc2Nh
ZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGlu
dCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBVbmlzY3Jp
YmVDb250cm9sbGVyIGl0KHRoaXMsIHJ1bik7CiAgICAgaXQuYWR2YW5jZShmcm9tKTsKQEAgLTY2
LDcgKzY2LDcgQEAgdm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmUKICAgICBzZWxlY3Rpb25SZWN0LnNl
dFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRl
OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
aW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFz
aXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBo
YXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBpZiAoZm9yVGV4dEVtcGhh
c2lzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRlciB0
byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCkBAIC05MSw3ICs5MSw3IEBAIGZsb2F0
IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgaW50IGZyCiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQogCi12b2lkIEZv
bnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBG
b250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNv
bnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8s
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKaW5kZXggMjA5MzhiMWY3NDQ3N2FhZDYwYzdiMTA0ZGNmMjA5ZDdmYTRk
ZmQyNi4uNDVmZGQ3ZjMyYmNhZWRkMmM0Y2RkY2Y1OWNiYmZhYTllMzkzNjIwMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXlvdXRQb2ludCYgcGEKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExU
Uj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KICAgICBMYXlv
dXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KHgoKSArIHBhaW50T2Zmc2V0LngoKSwg
eSgpICsgcGFpbnRPZmZzZXQueSgpICsgcm9vdEJveC5zZWxlY3Rpb25Ub3AoKSwgMCwgcm9vdEJv
eC5zZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihtX3N0ciwgc3R5bGUsIEFsbG93VHJhaWxpbmdFeHBhbnNpb24pOwotICAg
IGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCAwLCAt
MSk7CisgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHNlbGVjdGlvblJl
Y3QpOwogICAgIGNvbnRleHQuZmlsbFJlY3Qoc25hcFJlY3RUb0RldmljZVBpeGVsc1dpdGhXcml0
aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLCBjKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGYzMmEwYjNiM2U1NmJmNTc5ZWEwNWQzOTE3MDYw
OWRmMjkwOWIwOWQuLmI4YTVhNTJmZWQ0ZjQzZmUyYTU4MGI4NzZkZjdmYjlkMDhlZjJmZjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTEzMCwyMSAr
MTMwLDI2IEBAIExheW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkgY29u
c3QKICAgICByZXR1cm4gcm9vdCgpLnNlbGVjdGlvbkhlaWdodCgpOwogfQogCi1ib29sIElubGlu
ZVRleHRCb3g6OmlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorYm9v
bCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBl
bmRQb3MpIGNvbnN0CiB7Ci0gICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFydFBvcyAtIG1fc3Rh
cnQsIDApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGlj
X2Nhc3Q8aW50PihtX2xlbikpOwotICAgIHJldHVybiAoc1BvcyA8IGVQb3MpOworICAgIGludCBz
UG9zID0gY2xhbXBlZE9mZnNldChzdGFydFBvcyk7CisgICAgaW50IGVQb3MgPSBjbGFtcGVkT2Zm
c2V0KGVuZFBvcyk7CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjA3ODYKKyAgICAvLyBXZSBzaG91bGQgb25seSBiZSBjaGVja2luZyBpZiBz
UG9zID49IGVQb3MgaGVyZSwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlCisgICAgLy8gaW5kaWNlcyB1
c2VkIHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzZWxlY3Rpb24gcmVjdC4gQWxsb3dpbmcgdXMg
cGFzdCB0aGlzIGd1YXJkCisgICAgLy8gb24gYW55IG90aGVyIGNvbmRpdGlvbiBjcmVhdGVzIHpl
cm8td2lkdGggc2VsZWN0aW9uIHJlY3RzLgorICAgIHJldHVybiBzUG9zIDwgZVBvcyB8fCAoc3Rh
cnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0YXJ0KCkgJiYgc3RhcnRQb3MgPD0gKHN0
YXJ0KCkgKyBsZW4oKSkpOwogfQogCiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
blN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkg
ewotICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQ
b3MsIGVuZFBvczsKICAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBv
cywgZW5kUG9zKTsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJy
ZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgotICAgICAgICBpbnQgbGFzdFNl
bGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKKyAg
ICAgICAgQVNTRVJUKHN0YXJ0KCkgKyBsZW4oKSA+PSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKSk7
CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlz
TGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAhPSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYmIHN0YXJ0
UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVuZFBvcyA8
PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0xNjUsOCArMTcwLDggQEAgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAgICAgaWYgKG1fdHJ1
bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uICYmIHJvb3QoKS5lbGxpcHNpc0JveCgpKSB7CiAgICAg
ICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpcyA9IHJvb3QoKS5lbGxpcHNpc0JveCgpOwogICAgICAg
ICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAgICAg
ICBpbnQgc2VsZWN0aW9uU3RhcnQ7Ci0gICAgICAgICAgICBpbnQgc2VsZWN0aW9uRW5kOworICAg
ICAgICAgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgICBzdGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0
aW9uRW5kKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgICAgICAgICAvLyBUaGUgZWxsaXBz
aXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgogICAg
ICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiBpcyBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRy
dW5jYXRpb24gYW5kIHRoZQpAQCAtMTkxLDEyICsxOTYsMTYgQEAgc3RhdGljIGNvbnN0IEZvbnRD
YXNjYWRlJiBmb250VG9Vc2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJU
ZXh0JgogICAgIHJldHVybiBzdHlsZS5mb250Q2FzY2FkZSgpOwogfQogCi1MYXlvdXRSZWN0IElu
bGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
IGNvbnN0CitMYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNp
Z25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0g
c3RkOjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWlu
KGVuZFBvcyAtIG1fc3RhcnQsIChpbnQpbV9sZW4pOwotICAgIAotICAgIGlmIChzUG9zID4gZVBv
cykKKyAgICB1bnNpZ25lZCBzUG9zID0gY2xhbXBlZE9mZnNldChzdGFydFBvcyk7CisgICAgdW5z
aWduZWQgZVBvcyA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zKTsKKworICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzg2CisgICAgLy8gV2Ugc2hv
dWxkIG9ubHkgYmUgY2hlY2tpbmcgaWYgc1BvcyA+PSBlUG9zIGhlcmUsIGJlY2F1c2UgdGhvc2Ug
YXJlIHRoZQorICAgIC8vIGluZGljZXMgdXNlZCB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgc2Vs
ZWN0aW9uIHJlY3QuIEFsbG93aW5nIHVzIHBhc3QgdGhpcyBndWFyZAorICAgIC8vIG9uIGFueSBv
dGhlciBjb25kaXRpb24gY3JlYXRlcyB6ZXJvLXdpZHRoIHNlbGVjdGlvbiByZWN0cy4KKyAgICBp
ZiAoc1BvcyA+PSBlUG9zICYmICEoc3RhcnRQb3MgPT0gZW5kUG9zICYmIHN0YXJ0UG9zID49IHN0
YXJ0KCkgJiYgc3RhcnRQb3MgPD0gKHN0YXJ0KCkgKyBsZW4oKSkpKQogICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCgpOwogCiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Ub3AgPSB0aGlzLT5zZWxl
Y3Rpb25Ub3AoKTsKQEAgLTIxMiw3ICsyMjEsNyBAQCBMYXlvdXRSZWN0IElubGluZVRleHRCb3g6
OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0CiAKICAg
ICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxvZ2lj
YWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbGVj
dGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3aGVu
IHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgotICAg
IGlmIChzUG9zIHx8IGVQb3MgIT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgaWYgKHNQ
b3MgfHwgZVBvcyAhPSBtX2xlbikKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
VGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0IHNu
YXBwZWRTZWxlY3Rpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCk7
CkBAIC01MDgsMTggKzUxNywxOCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgVGV4dFJ1
biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGFsdGVybmF0ZVN0cmluZ1Rv
UmVuZGVyKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogCi0gICAg
aW50IHNlbGVjdGlvblN0YXJ0ID0gMDsKLSAgICBpbnQgc2VsZWN0aW9uRW5kID0gMDsKKyAgICB1
bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kID0g
MDsKICAgICBpZiAoaGF2ZVNlbGVjdGlvbiAmJiAocGFpbnRTZWxlY3RlZFRleHRPbmx5IHx8IHBh
aW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkpCiAgICAgICAgIHN0ZDo6dGllKHNlbGVjdGlvblN0
YXJ0LCBzZWxlY3Rpb25FbmQpID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKIAogICAgIGlmIChtX3Ry
dW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewotICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHN0
ZDo6bWluPGludD4oc2VsZWN0aW9uU3RhcnQsIG1fdHJ1bmNhdGlvbik7Ci0gICAgICAgIHNlbGVj
dGlvbkVuZCA9IHN0ZDo6bWluPGludD4oc2VsZWN0aW9uRW5kLCBtX3RydW5jYXRpb24pOworICAg
ICAgICBzZWxlY3Rpb25TdGFydCA9IHN0ZDo6bWluKHNlbGVjdGlvblN0YXJ0LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV90cnVuY2F0aW9uKSk7CisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHN0ZDo6
bWluKHNlbGVjdGlvbkVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOwog
ICAgICAgICBsZW5ndGggPSBtX3RydW5jYXRpb247CiAgICAgfQogCi0gICAgaW50IGVtcGhhc2lz
TWFya09mZnNldCA9IDA7CisgICAgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKICAgICBi
b29sIGVtcGhhc2lzTWFya0Fib3ZlOwogICAgIGJvb2wgaGFzVGV4dEVtcGhhc2lzID0gZW1waGFz
aXNNYXJrRXhpc3RzQW5kSXNBYm92ZShsaW5lU3R5bGUsIGVtcGhhc2lzTWFya0Fib3ZlKTsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyayA9IGhhc1RleHRFbXBoYXNpcyA/IGxp
bmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkgOiBudWxsQXRvbTsKQEAgLTU4NywyMCAr
NTk2LDI1IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICAgICAgY29udGV4dC5jb25jYXRD
VE0ocm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogCi1zdGQ6OnBhaXI8
aW50LCBpbnQ+IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKK3Vuc2ln
bmVkIElubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjptYXgoc3RkOjptaW4oeCwgc3RhcnQoKSArIGxlbigpKSwgc3RhcnQoKSkg
LSBzdGFydCgpOworfQorCitzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGF0
ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1f
bGVuIH07CiAgICAgCi0gICAgaW50IHN0YXJ0OwotICAgIGludCBlbmQ7CisgICAgdW5zaWduZWQg
c3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOwogICAgIHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRF
bmQoc3RhcnQsIGVuZCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhcnQpCiAgICAgICAgIGVuZCA9IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpOwog
ICAgIGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5k
KQogICAgICAgICBzdGFydCA9IDA7Ci0gICAgcmV0dXJuIHsgc3RkOjptYXgoc3RhcnQgLSBtX3N0
YXJ0LCAwKSwgc3RkOjptaW48aW50PihlbmQgLSBtX3N0YXJ0LCBtX2xlbikgfTsKKyAgICByZXR1
cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChlbmQpIH07CiB9CiAKIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udENhc2NhZGUmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKQEAgLTYxMCw4ICs2MjQs
OCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBT
ZWUgaWYgd2UgaGF2ZSBhIHNlbGVjdGlvbiB0byBwYWludCBhdCBhbGwuCi0gICAgaW50IHNlbGVj
dGlvblN0YXJ0OwotICAgIGludCBzZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQgc2VsZWN0aW9u
U3RhcnQ7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kOwogICAgIHN0ZDo6dGllKHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQpID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKICAgICBpZiAoc2Vs
ZWN0aW9uU3RhcnQgPj0gc2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm47CkBAIC02MzQsNyAr
NjQ4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICAgICB1bnNpZ25lZCBsZW5ndGggPSBt
X3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IGxlbigpOwogCiAg
ICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmc7Ci0gICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2Vs
ZWN0aW9uRW5kID09IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAmJiBoYXNIeXBoZW4oKTsKKyAg
ICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gbGVuZ3RoICYmIGhhc0h5cGhl
bigpOwogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAgICAgICBoeXBoZW5hdGVkU3RyaW5nID0g
aHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUsIGxlbmd0aCk7CiAgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgaHlwaGVuYXRlZFN0cmluZywgT3B0aW9u
YWw8dW5zaWduZWQ+KGxlbmd0aCkpOwpAQCAtNjYwLDExICs2NzQsMTAgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit2b2lkIElubGluZVRleHRCb3g6OnBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZv
bnRDYXNjYWRlJiBmb250LCB1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKQogewot
ICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwotICAgIGludCBzZWxlY3Rpb25TdGFydCA9IHN0ZDo6
bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKLSAgICBpbnQgc2VsZWN0aW9uRW5kID0gc3RkOjpt
aW48aW50PihlbmRQb3MgLSBvZmZzZXQsIG1fbGVuKTsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25T
dGFydCA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3MpOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVu
ZCA9IGNsYW1wZWRPZmZzZXQoZW5kUG9zKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPj0gc2Vs
ZWN0aW9uRW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTc1Niw3ICs3NjksNyBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaQogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBt
ZWFzdXJlIHRleHQKICAgICBib29sIG1hcmtlclNwYW5zV2hvbGVCb3ggPSB0cnVlOwotICAgIGlm
IChtX3N0YXJ0IDw9IChpbnQpbWFya2VyLnN0YXJ0T2Zmc2V0KCkpCisgICAgaWYgKG1fc3RhcnQg
PD0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBm
YWxzZTsKICAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2VyLmVuZE9mZnNldCgpKSAvLyBlbmQg
cG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0CiAgICAgICAgIG1hcmtlclNwYW5z
V2hvbGVCb3ggPSBmYWxzZTsKQEAgLTc2NSwxMSArNzc4LDExIEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pCiAKICAgICBib29sIGlzRGljdGF0aW9uTWFya2VyID0gbWFya2VyLnR5cGUoKSA9PSBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOwogICAgIGlmICghbWFya2VyU3Bh
bnNXaG9sZUJveCB8fCBncmFtbWFyIHx8IGlzRGljdGF0aW9uTWFya2VyKSB7Ci0gICAgICAgIGlu
dCBzdGFydFBvc2l0aW9uID0gc3RkOjptYXg8aW50PihtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1f
c3RhcnQsIDApOwotICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KG1hcmtl
ci5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQobWFya2VyLnN0YXJ0T2Zmc2V0KCkpOworICAgICAgICB1
bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGNsYW1wZWRPZmZzZXQobWFya2VyLmVuZE9mZnNldCgpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikKLSAg
ICAgICAgICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihlbmRQb3NpdGlvbiwgbV90cnVu
Y2F0aW9uKTsKKyAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW4oZW5kUG9zaXRpb24s
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKIAogICAgICAgICAvLyBDYWxj
dWxhdGUgc3RhcnQgJiB3aWR0aAogICAgICAgICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS5zdHls
ZSgpLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9n
aWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CkBAIC04MTgsOCAr
ODMxLDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG8KICAgICBMYXlvdXRVbml0IGRlbHRhWSA9
IHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rp
b25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRv
cCgpOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoYm94T3JpZ2lu
LngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSwgMCwgdGhpcy0+c2VsZWN0aW9uSGVpZ2h0KCkp
OwogCi0gICAgaW50IHNQb3MgPSBzdGQ6Om1heDxpbnQ+KG1hcmtlci5zdGFydE9mZnNldCgpIC0g
bV9zdGFydCwgMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1pbjxpbnQ+KG1hcmtlci5lbmRPZmZz
ZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKKyAgICB1bnNpZ25lZCBzUG9zID0gY2xhbXBlZE9mZnNl
dChtYXJrZXIuc3RhcnRPZmZzZXQoKSk7CisgICAgdW5zaWduZWQgZVBvcyA9IGNsYW1wZWRPZmZz
ZXQobWFya2VyLmVuZE9mZnNldCgpKTsKICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUpOwogICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBzZWxl
Y3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKIApAQCAtOTg1LDE4ICs5OTgsMTggQEAgaW50IElubGlu
ZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IGxpbmVPZmZzZXQsIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMKICAgICByZXR1cm4gZm9udC5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1
Y3RUZXh0UnVuKGxpbmVTdHlsZSksIGxpbmVPZmZzZXQgLSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRl
UGFydGlhbEdseXBocyk7CiB9CiAKLWZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0KGludCBvZmZzZXQpIGNvbnN0CitmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9mZnNldCA+PSBtX3N0
YXJ0KTsKLSAgICBBU1NFUlQob2Zmc2V0IDw9IG1fc3RhcnQgKyBtX2xlbik7CisgICAgQVNTRVJU
KG9mZnNldCA8PSBtX3N0YXJ0ICsgbGVuKCkpOwogCiAgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAg
ICAgICAgIHJldHVybiBsb2dpY2FsTGVmdCgpOwogCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxp
bmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7Ci0gICAgaW50IGZyb20gPSAhaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7Ci0gICAgaW50IHRv
ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogb2Zmc2V0IC0gbV9zdGFydDsK
KyAgICB1bnNpZ25lZCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGNsYW1wZWRP
ZmZzZXQob2Zmc2V0KSA6IDA7CisgICAgdW5zaWduZWQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gbV9sZW4gOiBjbGFtcGVkT2Zmc2V0KG9mZnNldCk7CiAgICAgLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwogICAgIExheW91dFJlY3Qgc2VsZWN0
aW9uUmVjdCA9IExheW91dFJlY3QobG9naWNhbExlZnQoKSwgMCwgMCwgMCk7CiAgICAgVGV4dFJ1
biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAppbmRleCA2N2I2MzRiYTU3OGMzODBmNzA5YjIzMWNhNmIzMTg5
ODczNTY5NGJkLi43MjM2ZjYwMmFhNjYxMzYxYjM3NDdjYTA2MzE1OGQ0NTMyYmNjMGY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTQyLDExICs0Miw2IEBA
IGNsYXNzIElubGluZVRleHRCb3ggOiBwdWJsaWMgSW5saW5lQm94IHsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBJbmxpbmVUZXh0Qm94KFJlbmRlclRleHQmIHJlbmRlcmVyKQogICAgICAgICA6IElu
bGluZUJveChyZW5kZXJlcikKLSAgICAgICAgLCBtX3ByZXZUZXh0Qm94KG51bGxwdHIpCi0gICAg
ICAgICwgbV9uZXh0VGV4dEJveChudWxscHRyKQotICAgICAgICAsIG1fc3RhcnQoMCkKLSAgICAg
ICAgLCBtX2xlbigwKQotICAgICAgICAsIG1fdHJ1bmNhdGlvbihjTm9UcnVuY2F0aW9uKQogICAg
IHsKICAgICAgICAgc2V0QmVoYXZlc0xpa2VUZXh0KHRydWUpOwogICAgIH0KQEAgLTY5LDcgKzY0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhcnQodW5zaWduZWQgc3RhcnQpIHsgbV9zdGFy
dCA9IHN0YXJ0OyB9CiAgICAgdm9pZCBzZXRMZW4odW5zaWduZWQgbGVuKSB7IG1fbGVuID0gbGVu
OyB9CiAKLSAgICB2b2lkIG9mZnNldFJ1bihpbnQgZCkgeyBBU1NFUlQoIWlzRGlydHkoKSk7IG1f
c3RhcnQgKz0gZDsgfQorICAgIHZvaWQgb2Zmc2V0UnVuKGludCBkKSB7IEFTU0VSVCghaXNEaXJ0
eSgpKTsgQVNTRVJUKGQgPiAwIHx8IG1fc3RhcnQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1k
KSk7IG1fc3RhcnQgKz0gZDsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgdHJ1bmNhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdHJ1bmNhdGlvbjsgfQogCkBAIC0xMjAsOSArMTE1LDkgQEAgcHJpdmF0
ZToKIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9
CiAKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBv
cywgaW50IGVuZFBvcykgY29uc3Q7Ci0gICAgYm9vbCBpc1NlbGVjdGVkKGludCBzdGFydFBvcywg
aW50IGVuZFBvcykgY29uc3Q7Ci0gICAgc3RkOjpwYWlyPGludCwgaW50PiBzZWxlY3Rpb25TdGFy
dEVuZCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3Qo
dW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7CisgICAgYm9vbCBpc1Nl
bGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0OworICAgIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwpA
QCAtMTU1LDEyICsxNTAsMTMgQEAgcHJpdmF0ZToKIAogcHVibGljOgogICAgIHZpcnR1YWwgaW50
IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0
cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZz
ZXQpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBj
b25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250Q2FzY2FkZSYsIHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpOwog
ICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtlcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnRDYXNjYWRl
JiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21w
b3NpdGlvblVuZGVybGluZSYpOworICAgIHVuc2lnbmVkIGNsYW1wZWRPZmZzZXQodW5zaWduZWQp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZvbnRDYXNjYWRlJiwgUmVuZGVyQ29tYmluZVRleHQqLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBib3hS
ZWN0LApAQCAtMTczLDE1ICsxNjksMTUgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYmVoYXZlc0xp
a2VUZXh0KCkgY29uc3QgPSBkZWxldGU7CiAKLSAgICBJbmxpbmVUZXh0Qm94KiBtX3ByZXZUZXh0
Qm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QK
LSAgICBJbmxpbmVUZXh0Qm94KiBtX25leHRUZXh0Qm94OyAvLyBUaGUgbmV4dCBib3ggdGhhdCBh
bHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAorICAgIElubGluZVRleHRCb3gqIG1fcHJldlRleHRC
b3ggeyBudWxscHRyIH07IC8vIFRoZSBwcmV2aW91cyBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJl
bmRlck9iamVjdAorICAgIElubGluZVRleHRCb3gqIG1fbmV4dFRleHRCb3ggeyBudWxscHRyIH07
IC8vIFRoZSBuZXh0IGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CiAKLSAgICBp
bnQgbV9zdGFydDsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX2xlbjsKKyAgICB1bnNpZ25lZCBtX3N0
YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIHNob3J0IG1fbGVuIHsgMCB9OwogCiAgICAgLy8gV2hl
cmUgdG8gdHJ1bmNhdGUgd2hlbiB0ZXh0IG92ZXJmbG93IGlzIGFwcGxpZWQuIFdlIHVzZSBzcGVj
aWFsIGNvbnN0YW50cyB0bwogICAgIC8vIGRlbm90ZSBubyB0cnVuY2F0aW9uICh0aGUgd2hvbGUg
cnVuIHBhaW50cykgYW5kIGZ1bGwgdHJ1bmNhdGlvbiAobm90aGluZyBwYWludHMgYXQgYWxsKS4K
LSAgICB1bnNpZ25lZCBzaG9ydCBtX3RydW5jYXRpb247CisgICAgdW5zaWduZWQgc2hvcnQgbV90
cnVuY2F0aW9uIHsgY05vVHJ1bmNhdGlvbiB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggY2RlNjA3Y2Y1
YWNmMWFmZjk1ZmE2MGM4MjVmYWFlMGFmZmQ3OTE1Mi4uZDI2NGQyYTk3NjRhZDI1MzdiMzdhMzcz
MTg2ZmM5NjIxYjVhNTk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCkBAIC0zNDg5LDcgKzM0ODksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVIaXRUZXN0
UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgfQog
fQogCi1MYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlu
bGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlu
bGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkKIHsKICAgICAvLyBEbyB0aGUgbm9ybWFsIGNhbGN1bGF0aW9uIGluIG1vc3QgY2Fz
ZXMuCiAgICAgaWYgKGZpcnN0Q2hpbGQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKaW5kZXggMzE1MjIzNTU1MTE0YmEyOThlZjg5MmE1YzBjZmI1ZTc1Y2MzOGJlNS4uMzIz
ZDE3MGRmZWE1ZDA4NmQ3OTdmNWYxNDg1MGNiOWE2NjMzM2ZlNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQ3Niw3ICs0NzYsNyBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBwYWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7CiAKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBj
YXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7
CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgZmluYWw7CiAg
ICAgCiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFs
bCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlv
dXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAppbmRleCA4MWIwYWQ2Nzg4OGE1NzA1OGMxYmNhZjJkNzk5OGU3OGYwYzdmYzU3
Li5lYWU3MmJhMmMzNDVjZDliYjc5NWFiYmIwZTIwYjhkY2QyMDYyMWU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNDM4Myw3ICs0MzgzLDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKExvZ2ljYWxFeHRl
bnRDb21wdXRlZFZhbHUKICAgICBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbFRv
cFBvczsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKK0xheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwg
dW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkK
IHsKICAgICAvLyBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldHMgaW5zaWRlIGNvbnRhaW5lcnMg
ZWl0aGVyIGEpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbnMgYmVmb3JlL2FmdGVyCiAgICAgLy8gdGhv
c2UgY29udGFpbmVycyAodGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRv
IHRoZSBwb3NpdGlvbiBpbnNpZGUgYW4gZW1wdHkgYmxvY2suCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKaW5kZXggMDM4MzBjN2E4Mzc2M2Q1YzMxOWJiMjdmZDA2YWE0NzdiNTMxYzg3
Ni4uYzYwMTdkOGRmOTFhZDhiYzFhZGJhMjA0MThmZDA1NWE4ZGVhNDc0YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNDgxLDcgKzQ4MSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc1Vuc3BsaXR0YWJsZVNjcm9sbGluZ092ZXJmbG93KCkgY29uc3Q7CiAgICAgYm9vbCBp
c1Vuc3BsaXR0YWJsZUZvclBhZ2luYXRpb24oKSBjb25zdDsKIAotICAgIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxv
Y2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKSBvdmVycmlkZTsKIAogICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlv
biwgUmVuZGVyUmVnaW9uKiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSwgUGFpbnRQaGFzZSA9IFBhaW50UGhhc2VCbG9ja0JhY2tncm91
bmQpOwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Rm9yQ2hpbGRMYXll
cnMoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJSZWdpb24qIHJlZ2lvbiwgT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSB7IHJldHVybiBvdmVyZmxvd0Ns
aXBSZWN0KGxvY2F0aW9uLCByZWdpb24sIHJlbGV2YW5jeSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggZGJiNDgzZDY5ZjI2NjFkMzkwZGY1MWE1Zjhm
MTEwYTEwMDViNDcwNi4uYWRhYjY0ODVjYWRjYTIxYzZlNTQzODQ3ZGNiMTIyNDdiMDJlMTkyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTI0OSw3ICsy
NDksNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKGJv
b2wgZnVsbExheW91dCkKICAgICB9CiB9CiAKLUxheW91dFJlY3QgUmVuZGVySW5saW5lOjpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkLCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9F
bmRPZkxpbmUpCiB7CiAgICAgaWYgKGZpcnN0Q2hpbGQoKSkgewogICAgICAgICAvLyBUaGlzIGNv
bmRpdGlvbiBpcyBwb3NzaWJsZSBpZiB0aGUgUmVuZGVySW5saW5lIGlzIGF0IGFuIGVkaXRpbmcg
Ym91bmRhcnksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKaW5kZXggNWNl
YWZjMmQ4YTJmZmMzN2EzM2UxN2M0YjI2ZTJhZTk3OWY4NjM2Zi4uMDBiYzllYzFkNDA0OTI4MGFm
YTQwZTRmODA5ZDI3OWZjYTgwN2NhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuaApAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHdheXNDcmVh
dGVMaW5lQm94ZXMoKSB7IHNldFJlbmRlcklubGluZUFsd2F5c0NyZWF0ZXNMaW5lQm94ZXModHJ1
ZSk7IH0KICAgICB2b2lkIHVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlv
dXQpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgZmluYWw7CisgICAgTGF5b3V0UmVjdCBs
b2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0
aFRvRW5kT2ZMaW5lKSBmaW5hbDsKIAogICAgIGJvb2wgaGl0VGVzdEN1bGxlZElubGluZShjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNl
dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJl
YWsuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKaW5k
ZXggMWNkOTYzNGJhZTQwMGI4NThkZjZmZWZhYTMxNzU0NTZiMTE4YWY2Yy4uYjhjMjM1OGQxNTdk
ZGIyY2MyOGExMzY3MmI4Y2ExYzdkMDFiNTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpbmVCcmVhay5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFJlbmRlckxp
bmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCiAgICAgbV9p
bmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBT
ZWxlY3Rpb25Ob25lKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2Fy
ZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExh
eW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNh
cmV0T2Zmc2V0LCAhY2FyZXRPZmZzZXQpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5saW5lQm94LCBp
bmxpbmVCb3ggPT0gbV9pbmxpbmVCb3hXcmFwcGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCAxMWZkM2JkOTIxNzQ5NzYzNmQwY2E2MDExNDI5ODI1
OTQyMmIxMjM2Li45NzA3Y2QxNmU1ODM2YTc4MWZmZDY1MzUwMmYzMDgzZmIxMmZhMTVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBAIC02Niw3ICs2Niw3
IEBAIHByaXZhdGU6CiAgICAgaW50IGNhcmV0TWluT2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgYm9vbCBjYW5CZVNl
bGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRS
ZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGlu
ZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUpIG92ZXJyaWRlOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5l
LCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3Qgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDBlYjhhZDYxODRh
OTc2MzQyMzkzYzY3M2EzMmIzMDIyMjExMTIyNmMuLmFjMzEyMjYyNjA0YTJkM2UxNGExYmNlNWMz
YmRlN2UxZGRlZTU3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xMjA2LDcgKzEyMDYsNyBAQCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgUmVuZGVyT2Jq
ZWN0OjpzZWxlY3Rpb25Sb290KCkgY29uc3QKICAgICByZXR1cm4gdmlldygpOwogfQogCi12b2lk
IFJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNv
bnN0Cit2b2lkIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNwb3Ms
IHVuc2lnbmVkJiBlcG9zKSBjb25zdAogewogICAgIHNlbGVjdGlvblJvb3QoKS5zZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnMoc3BvcywgZXBvcyk7CiB9CkBAIC0xMzc3
LDcgKzEzNzcsNyBAQCBMYXlvdXRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbUFuY2VzdG9y
Q29udGFpbmVyKFJlbmRlckVsZW1lbnQmIGNvbnRhaW5lcikgYwogICAgIHJldHVybiBvZmZzZXQ7
CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
LCBpbnQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0xheW91dFJlY3QgUmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIGlmIChleHRyYVdpZHRoVG9FbmRPZkxp
bmUpCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGM2YzZjM2ZlZTVlMjY1MDhjMzE5NmI5MzBiYzQ2
M2M3NmE3YjYzYWMuLjQxMTZhNTBiMGZhMGQ3MjkwMThlOTcxZjU0NDQ1OWMwM2U4OGM0ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTc0OSw3ICs3NDksNyBA
QCBwdWJsaWM6CiAgICAgICogQHBhcmFtIGV4dHJhV2lkdGhUb0VuZE9mTGluZSBvcHRpb25hbCBv
dXQgYXJnIHRvIGdpdmUgZXh0cmEgd2lkdGggdG8gZW5kIG9mIGxpbmUgLQogICAgICAqIHVzZWZ1
bCBmb3IgY2hhcmFjdGVyIHJhbmdlIHJlY3QgY29tcHV0YXRpb25zCiAgICAgICovCi0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cik7CisgICAgdmly
dHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0
T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBudWxscHRyKTsKIAog
ICAgIC8vIFdoZW4gcGVyZm9ybWluZyBhIGdsb2JhbCBkb2N1bWVudCB0ZWFyLWRvd24sIHRoZSBy
ZW5kZXJlciBvZiB0aGUgZG9jdW1lbnQgaXMgY2xlYXJlZC4gIFdlIHVzZSB0aGlzCiAgICAgLy8g
YXMgYSBob29rIHRvIGRldGVjdCB0aGUgY2FzZSBvZiBkb2N1bWVudCBkZXN0cnVjdGlvbiBhbmQg
ZG9uJ3Qgd2FzdGUgdGltZSBkb2luZyB1bm5lY2Vzc2FyeSB3b3JrLgpAQCAtNzgyLDcgKzc4Miw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0
ciwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAogICAgIFNlbGVjdGlvblN1YnRyZWVS
b290JiBzZWxlY3Rpb25Sb290KCkgY29uc3Q7Ci0gICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChp
bnQmIHNwb3MsIGludCYgZXBvcykgY29uc3Q7CisgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZCh1
bnNpZ25lZCYgc3BvcywgdW5zaWduZWQmIGVwb3MpIGNvbnN0OwogICAgIAogICAgIHZvaWQgcmVt
b3ZlRnJvbVBhcmVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAppbmRleCBhYTJjMzRjYjZhYWMzZGM3OGQ2NzE0ZDYzYmE3NWIwYjdhNTRiODNiLi4w
YmZiNGJhNzkwNWIyNzAwOTUzZjFiNjllYmE0NDQzZWJjZDA4M2I0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTYxNiwxOCArNjE2LDE4IEBAIGJv
b2wgUmVuZGVyUmVwbGFjZWQ6OmlzU2VsZWN0ZWQoKSBjb25zdAogICAgIGlmIChzID09IFNlbGVj
dGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpbnQgc2VsZWN0aW9uU3Rh
cnQsIHNlbGVjdGlvbkVuZDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
RW5kOwogICAgIHNlbGVjdGlvblN0YXJ0RW5kKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQp
OwogICAgIGlmIChzID09IFNlbGVjdGlvblN0YXJ0KQogICAgICAgICByZXR1cm4gc2VsZWN0aW9u
U3RhcnQgPT0gMDsKICAgICAgICAgCi0gICAgaW50IGVuZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGRO
b2RlcygpID8gZWxlbWVudCgpLT5jb3VudENoaWxkTm9kZXMoKSA6IDE7CisgICAgdW5zaWduZWQg
ZW5kID0gZWxlbWVudCgpLT5oYXNDaGlsZE5vZGVzKCkgPyBlbGVtZW50KCktPmNvdW50Q2hpbGRO
b2RlcygpIDogMTsKICAgICBpZiAocyA9PSBTZWxlY3Rpb25FbmQpCiAgICAgICAgIHJldHVybiBz
ZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIGlmIChzID09IFNlbGVjdGlvbkJvdGgpCiAgICAgICAg
IHJldHVybiBzZWxlY3Rpb25TdGFydCA9PSAwICYmIHNlbGVjdGlvbkVuZCA9PSBlbmQ7CiAgICAg
ICAgIAotICAgIEFTU0VSVCgwKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRl
eCAwMjg4NmJiODBmYzM0ZWI0ZTQzZGQwYWNkM2Q5ZmY3YWUwMmExNzMzLi5kM2ZiZTdjODU5MzE3
OWE5OTUwNGRiNTAxZGZmMTYyNzA1Yzc3OTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCkBAIC00NDIsNyArNDQyLDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRl
eHQ6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBjb25zdCBSZW4K
ICAgICByZXR1cm4gbV9saW5lQm94ZXMucG9zaXRpb25Gb3JQb2ludCgqdGhpcywgcG9pbnQpOwog
fQogCi1MYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5s
aW5lQm94LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSkKK0xheW91dFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxp
bmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUpCiB7CiAgICAgaWYgKCFpbmxpbmVCb3gpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CkBAIC0xMzcyLDEzICsxMzcyLDEyIEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVj
dFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQogICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCgpOwotICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwot
ICAgIGlmICghY2IpCisgICAgaWYgKCFjb250YWluaW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIAogICAgIC8vIE5vdyBjYWxjdWxhdGUgc3RhcnRQb3MgYW5kIGVuZFBv
cyBmb3IgcGFpbnRpbmcgc2VsZWN0aW9uLgogICAgIC8vIFdlIGluY2x1ZGUgYSBzZWxlY3Rpb24g
d2hpbGUgZW5kUG9zID4gMAotICAgIGludCBzdGFydFBvcywgZW5kUG9zOworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9u
SW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFyZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3Rh
cnRQb3MgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggZDYzZTYw
ODljZGU0MDM3YzU1ZTVmMWM4YzYyMjgxZThhY2E2MmJiNC4uMWZjOGRjMzk5ZmMzNjIwMWQ3Y2U1
NWUwMjYwM2IyMjJhMDg2YzkyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5o
CkBAIC0xMTksNyArMTE5LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFm
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhdGUpIGZpbmFsOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVj
dEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIG92ZXJyaWRlOwotICAgIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBvdmVycmlkZTsKIAogICAgIExheW91dFJl
Y3QgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQsIFZl
Y3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggZDk0M2YzYTU4MWZmMGNiNWY2MTc1YmNk
OTgxNGY2NDA3NTg2MGVkZC4uZTU5ZjNkZTYxNjMxZGYzYzIzY2NlYTI2OWZlNTJiYzkyYTlkNzRj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmNwcApAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2Vs
ZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVjdDo6CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICB1bnNpZ25lZCBzdGFy
dCwgZW5kOwogICAgIHJlbmRlcmVyLnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOwogICAg
IGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSB7CiAgICAgICAgIGVu
ZCA9IHJlbmRlcmVyLnRleHRMZW5ndGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAppbmRleCBhOGRkNzE4ZDg4YjM5OWNhOWY4ZWI3NzBlMzIxMmE1MGIxNGFkOWM2Li4x
ZTdlMmVjYzBiYWMwMTY1ZDE3MGNhZTZjMmU0MmI5M2RmMWNmMWYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0xMTgsMTkgKzExOCw3IEBAIHByaXZhdGU6CiBS
ZW5kZXJWaWV3OjpSZW5kZXJWaWV3KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBz
dHlsZSkKICAgICA6IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCiAg
ICAgLCBtX2ZyYW1lVmlldygqZG9jdW1lbnQudmlldygpKQotICAgICwgbV9zZWxlY3Rpb25VbnNw
bGl0U3RhcnQobnVsbHB0cikKLSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdEVuZChudWxscHRyKQot
ICAgICwgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3MoLTEpCi0gICAgLCBtX3NlbGVjdGlvblVu
c3BsaXRFbmRQb3MoLTEpCiAgICAgLCBtX2xhenlSZXBhaW50VGltZXIoKnRoaXMsICZSZW5kZXJW
aWV3OjpsYXp5UmVwYWludFRpbWVyRmlyZWQpCi0gICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0KDAp
Ci0gICAgLCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZChmYWxzZSkKLSAgICAsIG1fbGF5b3V0
U3RhdGUobnVsbHB0cikKLSAgICAsIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQoMCkKLSAgICAs
IG1fcmVuZGVyUXVvdGVIZWFkKG51bGxwdHIpCi0gICAgLCBtX3JlbmRlckNvdW50ZXJDb3VudCgw
KQotICAgICwgbV9zZWxlY3Rpb25XYXNDYXJldChmYWxzZSkKLSAgICAsIG1faGFzU29mdHdhcmVG
aWx0ZXJzKGZhbHNlKQogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQogICAgICwgbV9zZWxl
Y3Rpb25SZWN0R2F0aGVyZXIoKnRoaXMpCiAjZW5kaWYKQEAgLTc3Miw3ICs3NjAsMTAgQEAgTGF5
b3V0UmVjdCBSZW5kZXJWaWV3OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKGNvbnN0IFNlbGVjdGlv
blN1YnRyZWVSb290JiByb290LAogICAgIFNlbGVjdGlvbk1hcCBzZWxlY3RlZE9iamVjdHM7CiAK
ICAgICBSZW5kZXJPYmplY3QqIG9zID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9v
dC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRy
OworICAgIGlmIChzZWxlY3Rpb25FbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9z
aXRpb24oc2VsZWN0aW9uRW5kLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3Mo
KS52YWx1ZSgpKTsKICAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7
CiAgICAgd2hpbGUgKG9zICYmIG9zICE9IHN0b3ApIHsKICAgICAgICAgaWYgKChvcy0+Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgfHwgb3MgPT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKSB8fCBvcyA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3Mt
PnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewpAQCAtODIxLDcgKzgxMiwxMCBA
QCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlv
blN1YnRyZWVSb290JiByb290KSBjb25zdAogewogICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBw
cm9jZXNzZWRCbG9ja3M7CiAKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQ
b3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSwgcm9vdC5zZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHJv
b3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJlbmRlck9iamVjdCogZW5k
ID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRW5kKQorICAgICAgICBlbmQgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25FbmRQb3MoKS52YWx1ZSgpKTsKICAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVy
YXRvcihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpKTsKICAgICBmb3IgKFJl
bmRlck9iamVjdCogbyA9IHNlbGVjdGlvbkl0ZXJhdG9yLmN1cnJlbnQoKTsgbyAmJiBvICE9IGVu
ZDsgbyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAoIW8tPmNhbkJl
U2VsZWN0aW9uTGVhZigpICYmIG8gIT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKSAmJiBvICE9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpKQpAQCAtODQw
LDcgKzgzNCw3IEBAIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFN1YnRyZWVTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QpIGNvbnN0CiAgICAgfQogfQogCi12b2lkIFJl
bmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3Ms
IFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9j
a1JlcGFpbnRNb2RlKQordm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0
KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwg
T3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBh
aW50TW9kZSkKIHsKICAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmpl
Y3RzIGFyZSBkZWZpbmVkLgogICAgIC8vIENoZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBjbGlj
a2luZyBhcm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgpAQCAtODc3
LDcgKzg3MSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIGludCBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlCiAgICAgc3BsaXRTZWxlY3Rpb25C
ZXR3ZWVuU3VidHJlZXMoc3RhcnQsIHN0YXJ0UG9zLCBlbmQsIGVuZFBvcywgYmxvY2tSZXBhaW50
TW9kZSk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJl
ZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0YXJ0UG9zLCBjb25zdCBSZW5kZXJP
YmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50
TW9kZSkKK3ZvaWQgUmVuZGVyVmlldzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoY29u
c3QgUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBjb25z
dCBSZW5kZXJPYmplY3QqIGVuZCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB2aXNp
YmxlIHNlbGVjdGlvbiBlbmQgcG9pbnRzIGZvciBlYWNoIG9mIHRoZSBzdWJ0cmVlcy4KICAgICBS
ZW5kZXJTdWJ0cmVlc01hcCByZW5kZXJTdWJ0cmVlc01hcDsKQEAgLTkwMiwxNCArODk2LDE2IEBA
IHZvaWQgUmVuZGVyVmlldzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBzdGFydCwgaW50IHN0CiAgICAgICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0
YSBzZWxlY3Rpb25EYXRhID0gcmVuZGVyU3VidHJlZXNNYXAuZ2V0KCZyb290KTsKICAgICAgICAg
ICAgIGlmIChzZWxlY3Rpb25EYXRhLnNlbGVjdGlvbkNsZWFyKCkpIHsKICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvblN0YXJ0KG5vZGUtPnJlbmRlcmVyKCkpOwotICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uU3RhcnRQb3Mobm9kZSA9PSBz
dGFydE5vZGUgPyBzdGFydFBvcyA6IDApOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEu
c2V0U2VsZWN0aW9uU3RhcnRQb3Mobm9kZSA9PSBzdGFydE5vZGUgPyBzdGFydFBvcyA6IE9wdGlv
bmFsPHVuc2lnbmVkPigwKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHNlbGVjdGlv
bkRhdGEuc2V0U2VsZWN0aW9uRW5kKG5vZGUtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgaWYg
KG5vZGUgPT0gZW5kTm9kZSkKICAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVj
dGlvbkVuZFBvcyhlbmRQb3MpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNl
bGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygp
ID8gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmRQb3Mg
PSBub2RlLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSA/IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgp
IDogbm9kZS0+Y291bnRDaGlsZE5vZGVzKCk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0
YS5zZXRTZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgcmVuZGVyU3VidHJlZXNNYXAuc2V0KCZyb290LCBzZWxlY3Rpb25EYXRhKTsKICAgICAg
ICAgfQpAQCAtOTYwLDcgKzk1NiwxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmNsZWFyU3VidHJlZVNl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2VsZWN0aQogICAgIC8v
IHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVu
IGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KIAogICAgIFJlbmRlck9iamVjdCogb3MgPSByb290LnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9
IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihyb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQo
KSwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8qIHNl
bGVjdGlvbkVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOworICAgIFJl
bmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVuZCkKKyAgICAg
ICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHJvb3Quc2VsZWN0
aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJh
dG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKICAgICB3aGlsZSAob3MgJiYgb3MgIT0gc3RvcCkg
ewogICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVjdGlvbihyb290LCAqb3MpKSB7
CkBAIC05OTgsNyArOTk3LDEwIEBAIHZvaWQgUmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0
aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290LCBTZWxlY3RpCiAgICAgfQogCiAg
ICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvblN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCksIHJvb3Qu
c2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvKiBzZWxlY3Rpb25E
YXRhRW5kID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCk7CisgICAgUmVuZGVy
T2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb25EYXRhRW5k
KQorICAgICAgICBzZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9u
RGF0YUVuZCwgcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7
CiAgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQp
OwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFy
dDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1
cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBpZiAo
Y3VycmVudFJlbmRlcmVyID09IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkg
fHwgY3VycmVudFJlbmRlcmVyID09IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgp
KQpAQCAtMTA4OSw3ICsxMDkxLDcgQEAgdm9pZCBSZW5kZXJWaWV3OjphcHBseVN1YnRyZWVTZWxl
Y3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QsIFNlbGVjdGkKICAgICAgICAg
c2VsZWN0ZWRCbG9ja0luZm8udmFsdWUtPnJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3
OjpnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3RhcnRSZW5kZXJlciwgaW50JiBzdGFydE9m
ZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIGludCYgZW5kT2Zmc2V0KSBjb25zdAor
dm9pZCBSZW5kZXJWaWV3OjpnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3RhcnRSZW5kZXJl
ciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVu
ZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgZW5kT2Zmc2V0KSBjb25zdAogewogICAgIHN0YXJ0
UmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydDsKICAgICBzdGFydE9mZnNldCA9IG1f
c2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zOwpAQCAtMTEwMCw3ICsxMTAyLDcgQEAgdm9pZCBSZW5k
ZXJWaWV3OjpnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3RhcnRSZW5kZXJlciwgaW50JiBz
dGFydE9mZnNldCwgUmUKIHZvaWQgUmVuZGVyVmlldzo6Y2xlYXJTZWxlY3Rpb24oKQogewogICAg
IGxheWVyKCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLSAgICBzZXRTZWxlY3Rpb24o
bnVsbHB0ciwgLTEsIG51bGxwdHIsIC0xLCBSZXBhaW50TmV3TWludXNPbGQpOworICAgIHNldFNl
bGVjdGlvbihudWxscHRyLCBOdWxsb3B0LCBudWxscHRyLCBOdWxsb3B0LCBSZXBhaW50TmV3TWlu
dXNPbGQpOwogfQogCiBib29sIFJlbmRlclZpZXc6OnByaW50aW5nKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IGM3YzkyODY0ZjAzNDVhNWVkYjJiNGMxMTEz
MzE0Mjc5MDUzMmQwYmYuLjUyMzk0MjZkZjAyN2M3ZGQ2NTZmN2ZkMDUzM2EwNzViMjhjZTQ1YmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtODUsOCArODUsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKICAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsg
UmVwYWludE5ld1hPUk9sZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9Owot
ICAgIHZvaWQgc2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBvcywg
UmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlID0gUmVw
YWludE5ld1hPUk9sZCk7Ci0gICAgdm9pZCBnZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiYgc3Rh
cnRSZW5kZXJlciwgaW50JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIs
IGludCYgZW5kT2Zmc2V0KSBjb25zdDsKKyAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmpl
Y3QqIHN0YXJ0LCBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5k
T2JqZWN0LCBPcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9
IFJlcGFpbnROZXdYT1JPbGQpOworICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCom
IHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZzZXQsIFJlbmRlck9i
amVjdComIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIGVuZE9mZnNldCkgY29uc3Q7
CiAgICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9u
VW5zcGxpdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQ7IH0K
ICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRFbmQoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvblVuc3BsaXRFbmQ7IH0KQEAgLTMwNyw3ICszMDcsNyBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3Qgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIHNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9i
amVjdCogc3RhcnRSZW5kZXJlciwgaW50IHN0YXJ0UG9zLCBjb25zdCBSZW5kZXJPYmplY3QqIGVu
ZFJlbmRlcmVyLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRN
b2RlKTsKKyAgICB2b2lkIHNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRl
ck9iamVjdCogc3RhcnRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBjb25z
dCBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBT
ZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKTsKICAgICB2b2lkIGNsZWFyU3Vi
dHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYsIFNlbGVjdGlvblJlcGFp
bnRNb2RlLCBPbGRTZWxlY3Rpb25EYXRhJikgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rp
b25Gb3JTdWJ0cmVlcyhSZW5kZXJTdWJ0cmVlc01hcCYsIFNlbGVjdGlvblJlcGFpbnRNb2RlKTsK
ICAgICB2b2lkIGFwcGx5U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9v
dCYsIFNlbGVjdGlvblJlcGFpbnRNb2RlLCBjb25zdCBPbGRTZWxlY3Rpb25EYXRhJik7CkBAIC0z
MTcsMTAgKzMxNywxMCBAQCBwcml2YXRlOgogcHJpdmF0ZToKICAgICBGcmFtZVZpZXcmIG1fZnJh
bWVWaWV3OwogCi0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblVuc3BsaXRTdGFydDsKLSAg
ICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdEVuZDsKLSAgICBpbnQgbV9zZWxlY3Rp
b25VbnNwbGl0U3RhcnRQb3M7Ci0gICAgaW50IG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKKyAg
ICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0IHsgbnVsbHB0ciB9OworICAg
IFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNwbGl0RW5kIHsgbnVsbHB0ciB9OworICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKKyAgICBPcHRpb25h
bDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwogCiAgICAgLy8gSW5jbHVkZSB0
aGlzIFJlbmRlclZpZXcuCiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwpAQCAt
MzI5LDE4ICszMjksMTEgQEAgcHJpdmF0ZToKIAogICAgIC8vIEZJWE1FOiBPbmx5IHVzZWQgYnkg
ZW1iZWRkZWQgV2ViVmlld3MgaW5zaWRlIEFwcEtpdCBOU1ZpZXdzLiAgRmluZCBhIHdheSB0byBy
ZW1vdmUuCiAgICAgc3RydWN0IExlZ2FjeVByaW50aW5nIHsKLSAgICAgICAgTGVnYWN5UHJpbnRp
bmcoKQotICAgICAgICAgICAgOiBtX2Jlc3RUcnVuY2F0ZWRBdCgwKQotICAgICAgICAgICAgLCBt
X3RydW5jYXRlZEF0KDApCi0gICAgICAgICAgICAsIG1fdHJ1bmNhdG9yV2lkdGgoMCkKLSAgICAg
ICAgICAgICwgbV9mb3JjZWRQYWdlQnJlYWsoZmFsc2UpCi0gICAgICAgIHsgfQotCi0gICAgICAg
IGludCBtX2Jlc3RUcnVuY2F0ZWRBdDsKLSAgICAgICAgaW50IG1fdHJ1bmNhdGVkQXQ7Ci0gICAg
ICAgIGludCBtX3RydW5jYXRvcldpZHRoOworICAgICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQg
eyAwIH07CisgICAgICAgIGludCBtX3RydW5jYXRlZEF0IHsgMCB9OworICAgICAgICBpbnQgbV90
cnVuY2F0b3JXaWR0aCB7IDAgfTsKICAgICAgICAgSW50UmVjdCBtX3ByaW50UmVjdDsKLSAgICAg
ICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVhazsKKyAgICAgICAgYm9vbCBtX2ZvcmNlZFBhZ2VCcmVh
ayB7IGZhbHNlIH07CiAgICAgfTsKICAgICBMZWdhY3lQcmludGluZyBtX2xlZ2FjeVByaW50aW5n
OwogICAgIC8vIEVuZCBkZXByZWNhdGVkIG1lbWJlcnMuCkBAIC0zNTQsMTcgKzM0NywxNyBAQCBw
cml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlUXVhbGl0eUNvbnRyb2xsZXI+IG1f
aW1hZ2VRdWFsaXR5Q29udHJvbGxlcjsKICAgICBMYXlvdXRVbml0IG1fcGFnZUxvZ2ljYWxIZWln
aHQ7Ci0gICAgYm9vbCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZDsKKyAgICBib29sIG1fcGFn
ZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkIHsgZmFsc2UgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5
b3V0U3RhdGU+IG1fbGF5b3V0U3RhdGU7Ci0gICAgdW5zaWduZWQgbV9sYXlvdXRTdGF0ZURpc2Fi
bGVDb3VudDsKKyAgICB1bnNpZ25lZCBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50IHsgMCB9Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckNvbXBvc2l0b3I+IG1fY29tcG9zaXRvcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd1RocmVhZENvbnRyb2xsZXI+IG1fZmxvd1RocmVhZENv
bnRyb2xsZXI7CiAKLSAgICBSZW5kZXJRdW90ZSogbV9yZW5kZXJRdW90ZUhlYWQ7Ci0gICAgdW5z
aWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQ7CisgICAgUmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVv
dGVIZWFkIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRlckNvdW50IHsg
MCB9OwogCi0gICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0OwotICAgIGJvb2wgbV9oYXNTb2Z0
d2FyZUZpbHRlcnM7CisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzU29mdHdhcmVGaWx0ZXJzIHsgZmFsc2UgfTsKICAgICBib29sIG1fdXNlc0Zp
cnN0TGluZVJ1bGVzIHsgZmFsc2UgfTsKICAgICBib29sIG1fdXNlc0ZpcnN0TGV0dGVyUnVsZXMg
eyBmYWxzZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uU3VidHJlZVJvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1
YnRyZWVSb290LmNwcAppbmRleCA5ZjY1ZTk0YjVlNDRiY2RlMGJlMDNmYmRkZGY5ODRhYTFhOTg0
OGNjLi4xODFlNmI1MjcxMzdiNDNlNWFjYzQ4NzAzMDc4OTNlMDAyMTQwYTY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKQEAgLTQy
LDE5ICs0MiwxNiBAQCBTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3Qo
KQogewogfQogCi1TZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QoUmVu
ZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJP
YmplY3QqIHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVuZFBvcykKLSAgICA6IG1fc2VsZWN0
aW9uU3VidHJlZURhdGEoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvblN0YXJ0UG9zLCBzZWxlY3Rp
b25FbmQsIHNlbGVjdGlvbkVuZFBvcykKLXsKLX0KLQogdm9pZCBTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAg
aWYgKG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uQ2xlYXIoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgcmFuZ2UgYmFzZWQgb24gdGhlIGNhY2hlZCBlbmQgcG9p
bnRzCi0gICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0KCktPm5vZGUoKSwgbV9z
ZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydFBvcygpKTsKLSAgICBQb3NpdGlvbiBl
bmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3NlbGVjdGlvblN1YnRy
ZWVEYXRhLnNlbGVjdGlvbkVuZCgpLT5ub2RlKCksIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2Vs
ZWN0aW9uRW5kUG9zKCkpOworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtX3NlbGVjdGlvblN1
YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0UG9zKCkudmFsdWUoKTsKKyAgICBhdXRvIHNlbGVjdGlv
bkVuZCA9IG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKTsK
KyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnQoKS0+bm9kZSgpLCBzZWxlY3Rp
b25TdGFydCk7CisgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBz
ZWxlY3Rpb25FbmQpOwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZFBv
c2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbigqcmFuZ2UpOwpAQCAtODIsMTAgKzc5LDEzIEBAIHZvaWQgU2VsZWN0aW9uU3Vi
dHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQog
ICAgIGlmICgmc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c2VsZWN0aW9u
Um9vdCgpICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gbmV3U3RhcnRQb3Mg
PSBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8gbmV3RW5kUG9z
ID0gZW5kUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKG5ld1N0YXJ0
UG9zID49IDAgJiYgbmV3RW5kUG9zID49IDApOwogICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEu
c2V0U2VsZWN0aW9uU3RhcnQoc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSk7
Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhzdGFydFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRh
LnNldFNlbGVjdGlvblN0YXJ0UG9zKG5ld1N0YXJ0UG9zKTsKICAgICBtX3NlbGVjdGlvblN1YnRy
ZWVEYXRhLnNldFNlbGVjdGlvbkVuZChlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIo
KSk7Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MoZW5kUG9z
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEu
c2V0U2VsZWN0aW9uRW5kUG9zKG5ld0VuZFBvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVl
Um9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgK
aW5kZXggZGQxOTE5NzhmZDY0Yjk5YjE2ZTQ4MTBmOTZiZGU2YWQwNDEzNGU5NS4uYTgyMTIxMWJj
M2E1OTUyMjg2ZjdiMjU0ZThmZDlkYjYwN2M4MDlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKQEAgLTQ1LDI4ICs0NSwyMCBAQCBwdWJs
aWM6CiAKICAgICBzdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YSB7CiAgICAgICAgIE9sZFNlbGVjdGlv
bkRhdGEoKQotICAgICAgICAgICAgOiBzZWxlY3Rpb25TdGFydFBvcygtMSkKLSAgICAgICAgICAg
ICwgc2VsZWN0aW9uRW5kUG9zKC0xKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBp
bnQgc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIGludCBzZWxlY3Rpb25FbmRQb3M7CisgICAg
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvczsKKyAgICAgICAgT3B0aW9u
YWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvczsKICAgICAgICAgU2VsZWN0ZWRPYmplY3RNYXAg
c2VsZWN0ZWRPYmplY3RzOwogICAgICAgICBTZWxlY3RlZEJsb2NrTWFwIHNlbGVjdGVkQmxvY2tz
OwogICAgIH07CiAKICAgICBjbGFzcyBTZWxlY3Rpb25TdWJ0cmVlRGF0YSB7CiAgICAgcHVibGlj
OgotICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSgpCi0gICAgICAgICAgICA6IG1fc2VsZWN0
aW9uU3RhcnQobnVsbHB0cikKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcygtMSkK
LSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmQobnVsbHB0cikKLSAgICAgICAgICAgICwgbV9z
ZWxlY3Rpb25FbmRQb3MoLTEpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBTZWxlY3Rp
b25TdWJ0cmVlRGF0YSgpID0gZGVmYXVsdDsKIAotICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0
YShSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uU3RhcnRQb3MsIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uRW5kLCBpbnQgc2VsZWN0aW9uRW5kUG9zKQorICAgICAgICBT
ZWxlY3Rpb25TdWJ0cmVlRGF0YShSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0LCBPcHRpb25h
bDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5k
LCBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKQogICAgICAgICAgICAgOiBtX3Nl
bGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgLCBtX3NlbGVjdGlvblN0
YXJ0UG9zKHNlbGVjdGlvblN0YXJ0UG9zKQogICAgICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZChz
ZWxlY3Rpb25FbmQpCkBAIC03NSw0NiArNjcsNDUgQEAgcHVibGljOgogICAgICAgICB9CiAKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vs
ZWN0aW9uU3RhcnQ7IH0KLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25TdGFydFBvczsgfQorICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4g
c2VsZWN0aW9uU3RhcnRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0UG9zOyB9
CiAgICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb25FbmQ7IH0KLSAgICAgICAgaW50IHNlbGVjdGlvbkVuZFBvcygpIGNvbnN0IHsgcmV0
dXJuIG1fc2VsZWN0aW9uRW5kUG9zOyB9CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxl
Y3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQogICAgICAg
ICBib29sIHNlbGVjdGlvbkNsZWFyKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuICFtX3NlbGVjdGlvblN0YXJ0Ci0gICAgICAgICAgICAmJiAobV9zZWxlY3Rpb25TdGFydFBv
cyA9PSAtMSkKKyAgICAgICAgICAgICYmICghbV9zZWxlY3Rpb25TdGFydFBvcykKICAgICAgICAg
ICAgICYmICFtX3NlbGVjdGlvbkVuZAotICAgICAgICAgICAgJiYgKG1fc2VsZWN0aW9uRW5kUG9z
ID09IC0xKTsKKyAgICAgICAgICAgICYmICghbV9zZWxlY3Rpb25FbmRQb3MpOwogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhpbnQmIHN0YXJ0UG9z
LCBpbnQmIGVuZFBvcykgY29uc3QKKyAgICAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0
aW9ucyh1bnNpZ25lZCYgc3RhcnRQb3MsIHVuc2lnbmVkJiBlbmRQb3MpIGNvbnN0CiAgICAgICAg
IHsKLSAgICAgICAgICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAg
ICAgIGVuZFBvcyA9IG1fc2VsZWN0aW9uRW5kUG9zOworICAgICAgICAgICAgc3RhcnRQb3MgPSBt
X3NlbGVjdGlvblN0YXJ0UG9zLnZhbHVlKCk7CisgICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVj
dGlvbkVuZFBvcy52YWx1ZSgpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhcnQoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCkgeyBtX3NlbGVjdGlvblN0YXJ0ID0g
c2VsZWN0aW9uU3RhcnQ7IH0KLSAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGFydFBvcyhpbnQg
c2VsZWN0aW9uU3RhcnRQb3MpIHsgbV9zZWxlY3Rpb25TdGFydFBvcyA9IHNlbGVjdGlvblN0YXJ0
UG9zOyB9CisgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhcnRQb3MoT3B0aW9uYWw8dW5zaWdu
ZWQ+IHNlbGVjdGlvblN0YXJ0UG9zKSB7IG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzZWxlY3Rpb25T
dGFydFBvczt9CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0aW9uRW5kKFJlbmRlck9iamVjdCogc2Vs
ZWN0aW9uRW5kKSB7IG1fc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9Ci0gICAgICAgIHZv
aWQgc2V0U2VsZWN0aW9uRW5kUG9zKGludCBzZWxlY3Rpb25FbmRQb3MpIHsgbV9zZWxlY3Rpb25F
bmRQb3MgPSBzZWxlY3Rpb25FbmRQb3M7IH0KKyAgICAgICAgdm9pZCBzZXRTZWxlY3Rpb25FbmRQ
b3MoT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcykgeyBtX3NlbGVjdGlvbkVuZFBv
cyA9IHNlbGVjdGlvbkVuZFBvczt9CiAgICAgICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0ID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIG1fc2VsZWN0aW9uU3RhcnRQb3MgPSAtMTsKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uU3Rh
cnRQb3MgPSBOdWxsb3B0OwogICAgICAgICAgICAgbV9zZWxlY3Rpb25FbmQgPSBudWxscHRyOwot
ICAgICAgICAgICAgbV9zZWxlY3Rpb25FbmRQb3MgPSAtMTsKKyAgICAgICAgICAgIG1fc2VsZWN0
aW9uRW5kUG9zID0gTnVsbG9wdDsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0YXJ0OwotICAgICAgICBpbnQgbV9zZWxlY3Rpb25T
dGFydFBvczsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvbkVuZDsKLSAgICAgICAg
aW50IG1fc2VsZWN0aW9uRW5kUG9zOworICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9u
U3RhcnQgeyBudWxscHRyIH07CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlv
blN0YXJ0UG9zOworICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uRW5kIHsgbnVsbHB0
ciB9OworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25FbmRQb3M7CiAgICAg
fTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTZWxlY3Rpb25TdWJ0cmVlUm9vdCosIFNlbGVjdGlv
blN1YnRyZWVEYXRhPiBSZW5kZXJTdWJ0cmVlc01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29u
c3QgU2VsZWN0aW9uU3VidHJlZVJvb3QqLCBzdGQ6OnVuaXF1ZV9wdHI8T2xkU2VsZWN0aW9uRGF0
YT4+IFN1YnRyZWVPbGRTZWxlY3Rpb25EYXRhTWFwOwogCiAgICAgU2VsZWN0aW9uU3VidHJlZVJv
b3QoKTsKLSAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdChSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0
YXJ0LCBpbnQgc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kLCBp
bnQgc2VsZWN0aW9uRW5kUG9zKTsKIAogICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rp
b25EYXRhKCkgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQogICAgIGNvbnN0IFNl
bGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdWJ0cmVlRGF0YTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRQYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5j
cHAKaW5kZXggOGQzNTk3ZjJjODRhNzBmNzY5MTViZDI5YzU4M2M3Njk1MWFhNzNhMC4uNmU1ZWNj
MjY3Y2I2Y2UwNmM0YTVkYzkyODRmZWZkMWY1ZTI5NWQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvVGV4dFBhaW50ZXIuY3BwCkBAIC04NCwxNyArODQsMTcgQEAgVGV4dFBhaW50ZXI6OlRl
eHRQYWludGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIH0KIAogdm9pZCBUZXh0UGFpbnRl
cjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLAotICAg
IGludCBlbXBoYXNpc01hcmtPZmZzZXQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkKKyAgICBmbG9hdCBlbXBoYXNpc01hcmtPZmZz
ZXQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1
bnNpZ25lZCBlbmRPZmZzZXQpCiB7CiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDwgZW5kT2Zmc2V0
KTsKICAgICBpZiAoZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKICAgICAgICAgbV9jb250ZXh0LmRy
YXdUZXh0KGZvbnQsIHRleHRSdW4sIHRleHRPcmlnaW4sIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwogICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LmRyYXdFbXBoYXNpc01hcmtzKGZvbnQsIHRl
eHRSdW4sIGVtcGhhc2lzTWFyaywgdGV4dE9yaWdpbiArIEludFNpemUoMCwgZW1waGFzaXNNYXJr
T2Zmc2V0KSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CisgICAgICAgIG1fY29udGV4dC5kcmF3
RW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIHRleHRPcmlnaW4gKyBG
bG9hdFNpemUoMCwgZW1waGFzaXNNYXJrT2Zmc2V0KSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7
CiB9CiAKIHZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvdywgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHRl
eHRSdW4sIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9y
aWdpbiwKLSAgICBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0
cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBib29sIHN0cm9rZWQp
CisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgQXRv
bWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwgYm9vbCBz
dHJva2VkKQogewogICAgIGlmICghc2hhZG93KSB7CiAgICAgICAgIGRyYXdUZXh0T3JFbXBoYXNp
c01hcmtzKGZvbnQsIHRleHRSdW4sIGVtcGhhc2lzTWFyaywgZW1waGFzaXNNYXJrT2Zmc2V0LCB0
ZXh0T3JpZ2luLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIFRleHRQYWludGVyOjpwYWludFRleHRXaXRoU2hhZG93cyhjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3csIGNvbnN0IEZvbnRDYXNjYQogICAgIH0KIH0KIAotdm9pZCBUZXh0UGFpbnRlcjo6cGFp
bnRUZXh0QW5kRW1waGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LAordm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0
QW5kRW1waGFzaXNNYXJrc0lmTmVlZGVkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEZs
b2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwKICAgICBjb25zdCBUZXh0UGFpbnRTdHls
ZSYgcGFpbnRTdHlsZSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93KQogewogICAgIC8vIEZJWE1F
OiBUcnVuY2F0ZSByaWdodC10by1sZWZ0IHRleHQgY29ycmVjdGx5LgpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zCiAgICAgICAgIG1fY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogICAgIAotdm9pZCBUZXh0
UGFpbnRlcjo6cGFpbnRUZXh0KGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGludCBsZW5ndGgsIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50
IHNlbGVjdGlvblN0YXJ0LCBpbnQgc2VsZWN0aW9uRW5kLAordm9pZCBUZXh0UGFpbnRlcjo6cGFp
bnRUZXh0KGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRmxv
YXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kLAogICAgIGJvb2wgcGFpbnRTZWxl
Y3RlZFRleHRPbmx5LCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkKIHsKICAgICBB
U1NFUlQobV9mb250KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmgKaW5kZXgg
ZTRiNWIxOGNjZjNjYTI2MTMzNDBlMGVhNGRkYWRiMWJmOTUwYmYxMi4uMmUxNjdmYjMzOGY3YWZl
ZDJhYmI0NmI3M2RiMGU5YmRkODJkMmQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RleHRQYWludGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQ
YWludGVyLmgKQEAgLTU0LDE4ICs1NCwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTZWxlY3Rp
b25QYWludFN0eWxlKGNvbnN0IFRleHRQYWludFN0eWxlJiBzZWxlY3Rpb25QYWludFN0eWxlKSB7
IG1fc2VsZWN0aW9uUGFpbnRTdHlsZSA9IHNlbGVjdGlvblBhaW50U3R5bGU7IH0KICAgICB2b2lk
IHNldElzSG9yaXpvbnRhbChib29sIGlzSG9yaXpvbnRhbCkgeyBtX3RleHRCb3hJc0hvcml6b250
YWwgPSBpc0hvcml6b250YWw7IH0KICAgICB2b2lkIHNldEZvbnQoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQpIHsgbV9mb250ID0gJmZvbnQ7IH0KLSAgICB2b2lkIGFkZEVtcGhhc2lzKGNvbnN0IEF0
b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5kZXJD
b21iaW5lVGV4dCopOworICAgIHZvaWQgYWRkRW1waGFzaXMoY29uc3QgQXRvbWljU3RyaW5nJiBl
bXBoYXNpc01hcmssIGZsb2F0IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQq
KTsKICAgICB2b2lkIGFkZFRleHRTaGFkb3coY29uc3QgU2hhZG93RGF0YSogdGV4dFNoYWRvdywg
Y29uc3QgU2hhZG93RGF0YSogc2VsZWN0aW9uU2hhZG93KTsKIAotICAgIHZvaWQgcGFpbnRUZXh0
KGNvbnN0IFRleHRSdW4mLCBpbnQgbGVuZ3RoLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgICAgIGludCBzZWxlY3Rpb25TdGFydCA9
IDAsIGludCBzZWxlY3Rpb25FbmQgPSAwLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IGZh
bHNlLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSA9IGZhbHNlKTsKKyAgICB2b2lk
IHBhaW50VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCisgICAgICAgIHVuc2ln
bmVkIHNlbGVjdGlvblN0YXJ0ID0gMCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kID0gMCwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHkgPSBmYWxzZSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFy
YXRlbHkgPSBmYWxzZSk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJp
bmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwKLSAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KTsK
KyAgICB2b2lkIGRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBo
YXNpc01hcmtPZmZzZXQsCisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpOwogICAgIHZvaWQgcGFpbnRU
ZXh0V2l0aFNoYWRvd3MoY29uc3QgU2hhZG93RGF0YSosIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwKLSAgICAgICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNldCwgYm9v
bCBzdHJva2VkKTsKLSAgICB2b2lkIHBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsCisgICAgICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCk7
CisgICAgdm9pZCBwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdp
biwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwKICAgICAgICAgY29u
c3QgVGV4dFBhaW50U3R5bGUmLCBjb25zdCBTaGFkb3dEYXRhKik7CiAKICAgICBHcmFwaGljc0Nv
bnRleHQmIG1fY29udGV4dDsKQEAgLTc2LDExICs3NiwxMSBAQCBwcml2YXRlOgogICAgIGNvbnN0
IFNoYWRvd0RhdGEqIG1fc2VsZWN0aW9uU2hhZG93IHsgbnVsbHB0ciB9OwogICAgIEF0b21pY1N0
cmluZyBtX2VtcGhhc2lzTWFyazsKICAgICBSZW5kZXJDb21iaW5lVGV4dCogbV9jb21iaW5lZFRl
eHQgeyBudWxscHRyIH07Ci0gICAgaW50IG1fZW1waGFzaXNNYXJrT2Zmc2V0IHsgMCB9OworICAg
IGZsb2F0IG1fZW1waGFzaXNNYXJrT2Zmc2V0IHsgMCB9OwogICAgIGJvb2wgbV90ZXh0Qm94SXNI
b3Jpem9udGFsIHsgdHJ1ZSB9OwogfTsKIAotaW5saW5lIHZvaWQgVGV4dFBhaW50ZXI6OmFkZEVt
cGhhc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBpbnQgZW1waGFzaXNNYXJr
T2Zmc2V0LCBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0KQoraW5saW5lIHZvaWQgVGV4
dFBhaW50ZXI6OmFkZEVtcGhhc2lzKGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBm
bG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIFJlbmRlckNvbWJpbmVUZXh0KiBjb21iaW5lZFRleHQp
CiB7CiAgICAgbV9lbXBoYXNpc01hcmsgPSBlbXBoYXNpc01hcms7CiAgICAgbV9lbXBoYXNpc01h
cmtPZmZzZXQgPSBlbXBoYXNpc01hcmtPZmZzZXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA5NzEzM2UxMGMwZDQz
NmUyOTI5Mjk2OTQyNmY1MTQyYjFlZmYyMjJmLi5jNmViYWYzZmQ0NDA4NTIwMzcyZGYzNjQ4ZDAy
MDM0MDkwOTY1MTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTExNiwxNyArMTE2LDE3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbmxpbmVUZXh0Qm94PiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkK
ICAgICByZXR1cm4gV1RGTW92ZShib3gpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclNWR0lubGlu
ZVRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogYm94LCBpbnQgY2FyZXRPZmZzZXQsIExh
eW91dFVuaXQqKQorTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqIGJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqKQogewog
ICAgIGlmICghaXM8SW5saW5lVGV4dEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAogICAgIGF1dG8mIHRleHRCb3ggPSBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqYm94
KTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0KSA8IHRleHRCb3gu
c3RhcnQoKSB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpID4gdGV4dEJveC5z
dGFydCgpICsgdGV4dEJveC5sZW4oKSkKKyAgICBpZiAoY2FyZXRPZmZzZXQgPCB0ZXh0Qm94LnN0
YXJ0KCkgfHwgY2FyZXRPZmZzZXQgPiB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRo
ZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJlY3QuCi0gICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0
Qm94LmxlbigpKSB7CisgICAgaWYgKGNhcmV0T2Zmc2V0IDwgdGV4dEJveC5zdGFydCgpICsgdGV4
dEJveC5sZW4oKSkgewogICAgICAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LmxvY2FsU2Vs
ZWN0aW9uUmVjdChjYXJldE9mZnNldCwgY2FyZXRPZmZzZXQgKyAxKTsKICAgICAgICAgTGF5b3V0
VW5pdCB4ID0gdGV4dEJveC5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJl
Y3QubWF4WCgpOwogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRX
aWR0aCwgcmVjdC5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5oCmluZGV4IDc0Njc3M2JkOTJkZWM5MThkOTdkMWYzMzQ0
ZmUzMWUwNDdjYzg1M2QuLjk5OThmZTFhZjY2NDljMzZjNDZhNjMxZGFlMDgyN2QxZjNmMWNhMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5oCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1NWR0lubGluZVRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlclJlZ2lv
biopIG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
aW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBv
dmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2ln
bmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKSBv
dmVycmlkZTsKICAgICBJbnRSZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gY3JlYXRlVGV4dEJveCgpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAppbmRleCBhNGY0MTlmZDZhOGY5YjRjZmQ4NThiZDMyY2ZkMGQ1M2E4YTQ4OTUwLi43
NTE1NWM4MjcyMzdmMGVmNDA3YTM4ZmE2ODBiMTEzNTA1ODUzMDFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTEwMCwxNCAr
MTAwLDE0IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21l
bnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVuCiAgICAgcmV0dXJuIGZyYWdtZW50LmNo
YXJhY3Rlck9mZnNldCAtIHN0YXJ0KCkgKyByZW5kZXJlcigpLnNjYWxlZEZvbnQoKS5vZmZzZXRG
b3JQb3NpdGlvbih0ZXh0UnVuLCBwb3NpdGlvbiAqIHNjYWxpbmdGYWN0b3IsIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZz
ZXQoaW50KSBjb25zdAorZmxvYXQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQo
dW5zaWduZWQpIGNvbnN0CiB7CiAgICAgLy8gU1ZHIGRvZXNuJ3QgdXNlIHRoZSBvZmZzZXQgPC0+
IHBvc2l0aW9uIHNlbGVjdGlvbiBzeXN0ZW0uIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiAwOwogfQogCi1GbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQg
c3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0CitGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRG
cmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXJ0UG9zaXRp
b24gPCBlbmRQb3NpdGlvbik7CiAgICAgQVNTRVJUKHN0eWxlKTsKQEAgLTEzNCwxMSArMTM0LDEw
IEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdt
ZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYKICAgICByZXR1cm4gc25hcHBlZFNlbGVjdGlvblJl
Y3Q7CiB9CiAKLUxheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0
KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pIGNvbnN0CitMYXlvdXRSZWN0IFNW
R0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvc2l0aW9u
LCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3QKIHsKLSAgICBpbnQgYm94U3RhcnQgPSBzdGFy
dCgpOwotICAgIHN0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heChzdGFydFBvc2l0aW9uIC0gYm94U3Rh
cnQsIDApOwotICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW4oZW5kUG9zaXRpb24gLSBib3hTdGFy
dCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAgIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVk
T2Zmc2V0KHN0YXJ0UG9zaXRpb24pOworICAgIGVuZFBvc2l0aW9uID0gY2xhbXBlZE9mZnNldChl
bmRQb3NpdGlvbik7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKQEAgLTE0Niw4ICsxNDUsOCBAQCBMYXlvdXRSZWN0
IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwg
aW50IGVuZFBvc2l0aQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwog
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0OwotICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRp
b24gPSAwOwotICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBm
cmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9zaXRp
b24gPSAwOwogCiAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRGcmFnbWVu
dHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6
ZTsgKytpKSB7CkBAIC0yMDMsMTIgKzIwMiwxMiBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbykKIAogICAgIGF1dG8m
IHN0eWxlID0gcGFyZW50UmVuZGVyZXIuc3R5bGUoKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9u
OwotICAgIGludCBlbmRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uOworICAg
IHVuc2lnbmVkIGVuZFBvc2l0aW9uOwogICAgIHN0ZDo6dGllKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAKLSAgICBpbnQgZnJhZ21lbnRTdGFydFBv
c2l0aW9uID0gMDsKLSAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWdu
ZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudEVuZFBv
c2l0aW9uID0gMDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAg
dW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBtX3RleHRGcmFnbWVudHMuc2l6ZSgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0RnJhZ21lbnRzU2l6ZTsgKytpKSB7CkBAIC00
MDcsMjEgKzQwNiwyNCBAQCBUZXh0UnVuIFNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBTVkdUZQogICAgIHJldHVybiBydW47
CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0
YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR0lubGluZVRleHRC
b3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVk
JiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3Np
dGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IG9mZnNldCA9IHN0YXRpY19j
YXN0PGludD4oZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0KSAtIHN0YXJ0KCk7Ci0gICAgaW50IGxl
bmd0aCA9IHN0YXRpY19jYXN0PGludD4oZnJhZ21lbnQubGVuZ3RoKTsKKyAgICBBU1NFUlQoZnJh
Z21lbnQuY2hhcmFjdGVyT2Zmc2V0ID49IHN0YXJ0KCkpOworICAgIHVuc2lnbmVkIG9mZnNldCA9
IGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCAtIHN0YXJ0KCk7CisgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gZnJhZ21lbnQubGVuZ3RoOwogCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gb2Zmc2V0ICsg
bGVuZ3RoIHx8IGVuZFBvc2l0aW9uIDw9IG9mZnNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPCBvZmZzZXQpCiAgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSAwOwotICAgIGVsc2UKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24g
Pj0gb2Zmc2V0KTsKICAgICAgICAgc3RhcnRQb3NpdGlvbiAtPSBvZmZzZXQ7CisgICAgfQogCiAg
ICAgaWYgKGVuZFBvc2l0aW9uID4gb2Zmc2V0ICsgbGVuZ3RoKQogICAgICAgICBlbmRQb3NpdGlv
biA9IGxlbmd0aDsKQEAgLTU0MCw3ICs1NDIsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBh
aW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFRleHREZQog
ICAgICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0UHRyLCAmcGF0aCk7CiB9CiAK
LXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQg
ZW5kUG9zaXRpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0
UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCBz
dGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikKIHsKICAgICBmbG9hdCBzY2FsaW5n
RmFjdG9yID0gcmVuZGVyZXIoKS5zY2FsaW5nRmFjdG9yKCk7CiAgICAgQVNTRVJUKHNjYWxpbmdG
YWN0b3IpOwpAQCAtNTkwLDggKzU5Miw4IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0CiAgICAg
QVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uU3R5bGUpOwogCi0gICAgaW50IHN0
YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBlbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQg
c3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSAwOwogICAgIGlm
IChoYXNTZWxlY3Rpb24pIHsKICAgICAgICAgc3RkOjp0aWUoc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pID0gc2VsZWN0aW9uU3RhcnRFbmQoKTsKICAgICAgICAgaGFzU2VsZWN0aW9uID0gbWFw
U3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhmcmFnbWVudCwgc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwpAQCAtNjE4LDcgKzYyMCw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVy
U3R5bGUqIHN0CiAgICAgICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQo
cGFyZW50KCktPnJlbmRlcmVyKCksIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsICpzdHlsZSk7CiAK
ICAgICAvLyBFdmVudHVhbGx5IGRyYXcgdGV4dCB1c2luZyByZWd1bGFyIHN0eWxlIGZyb20gdGhl
IGVuZCBwb3NpdGlvbiBvZiB0aGUgc2VsZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQg
Y2h1bmsgcGFydAotICAgIGlmIChlbmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4oZnJhZ21l
bnQubGVuZ3RoKSAmJiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgIGlmIChlbmRQb3NpdGlv
biA8IGZyYWdtZW50Lmxlbmd0aCAmJiAhcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogICAgICAgICBw
YWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBzdHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIGVu
ZFBvc2l0aW9uLCBmcmFnbWVudC5sZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCmluZGV4IGM4ZmQxNDg4OGI0NjIzNDI1MTNh
ZTk3MDk5Yjc3NjA5NjNiYjE4MjcuLjFlMzJhNDIyMjk0ZTU2MzljYjMyZmVhNTk5M2RmMGQ0MzI1
ZGU4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5oCkBAIC00MywxMyArNDMsMTMgQEAgcHVibGljOgogICAgIGludCBzZWxlY3Rpb25Ub3Ao
KSB7IHJldHVybiB0b3AoKTsgfQogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fbG9naWNhbEhlaWdodCkpOyB9CiAgICAgaW50IG9mZnNl
dEZvclBvc2l0aW9uKGZsb2F0IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBj
b25zdCBvdmVycmlkZTsKLSAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBj
b25zdCBvdmVycmlkZTsKKyAgICBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQo
UGFpbnRJbmZvJik7CiAgICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsK
LSAgICBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0
aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBp
bnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0
YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKICAgICBGbG9hdFJl
Y3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IG92ZXJyaWRlOwogCkBAIC02NCw3ICs2NCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0c05ld1RleHRDaHVuayhib29sIG5ld1RleHRD
aHVuaykgeyBtX3N0YXJ0c05ld1RleHRDaHVuayA9IG5ld1RleHRDaHVuazsgfQogCiAgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBmbG9h
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50Jiwg
aW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgaW50IGZyYWdtZW50RW5kUG9zaXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0
RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCBmcmFnbWVudEVuZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBwYWludERlY29yYXRpb24oR3JhcGhpY3NDb250ZXh0JiwgVGV4dERlY29yYXRpb24s
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYpOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0
eWxlKEdyYXBoaWNzQ29udGV4dCYsIFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgZGVjb3JhdGlvblJlbmRlcmVyKTsKLSAgICB2b2lk
IHBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxl
KiwgVGV4dFJ1biYsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBp
bnQgZW5kUG9zaXRpb24pOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pOwogICAg
IHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBi
b29sIGhhc1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwogCiAgICAgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCmluZGV4IGZmMzY2NzcxNzE1MzE1OGY2NzYyODc3YTk4
ODA4ODBiMmVjMGQ3ZWUuLjkzMzBhYWExYzcxMWRhZTUxNjgyYmNiMzkzNjE1M2IyYjE0ZmM5ZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKQEAg
LTEzNCwxMyArMTM0LDE1IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleGVjdXRlUXVlcnkoRGF0YSog
cXVlcnlEYXRhLCBQcm9jZXNzVGV4dEZyYWdtZW50Q2FsbGJhY2sgZnJhCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYg
ZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK2Jv
b2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgdW5z
aWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAg
ICAvLyBSZXVzZSB0aGUgc2FtZSBsb2dpYyB1c2VkIGZvciB0ZXh0IHNlbGVjdGlvbiAmIHBhaW50
aW5nLCB0byBtYXAgb3VyIHF1ZXJ5IHN0YXJ0L2xlbmd0aCBpbnRvIHN0YXJ0L2VuZFBvc2l0aW9u
cyBvZiB0aGUgY3VycmVudCB0ZXh0IGZyYWdtZW50LgorICAgIEFTU0VSVChzdGFydFBvc2l0aW9u
ID49IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyk7CisgICAgQVNTRVJUKGVuZFBvc2l0
aW9uID49IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyk7CiAgICAgc3RhcnRQb3NpdGlv
biAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7CiAgICAgZW5kUG9zaXRpb24gLT0g
cXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogCi0gICAgaWYgKHN0YXJ0UG9zaXRpb24g
Pj0gZW5kUG9zaXRpb24gfHwgc3RhcnRQb3NpdGlvbiA8IDAgfHwgZW5kUG9zaXRpb24gPCAwKQor
ICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMocXVl
cnlEYXRhLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBAIC0xNTEsNyArMTUzLDcgQEAg
Ym9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRp
bmF0ZXMoRGF0YSogcXVlcnlEYXRhLAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR1Rl
eHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEq
IHF1ZXJ5RGF0YSwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAor
dm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0
dXJlcyhEYXRhKiBxdWVyeURhdGEsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYg
ZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgU1ZHVGV4dExheW91dEF0dHJpYnV0ZXMqIGxheW91
dEF0dHJpYnV0ZXMgPSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+bGF5b3V0QXR0cmlidXRlcygp
OwogICAgIFZlY3RvcjxTVkdUZXh0TWV0cmljcz4mIHRleHRNZXRyaWNzVmFsdWVzID0gbGF5b3V0
QXR0cmlidXRlcy0+dGV4dE1ldHJpY3NWYWx1ZXMoKTsKQEAgLTE2Nyw3ICsxNjksNyBAQCB2b2lk
IFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVz
KERhdGEqIHF1ZXJ5RGF0YSwgaQogICAgIGJvb2wgYWx0ZXJTdGFydFBvc2l0aW9uID0gdHJ1ZTsK
ICAgICBib29sIGFsdGVyRW5kUG9zaXRpb24gPSB0cnVlOwogCi0gICAgaW50IGxhc3RQb3NpdGlv
bk9mZnNldCA9IC0xOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0UG9zaXRpb25PZmZzZXQ7
CiAgICAgZm9yICg7IHRleHRNZXRyaWNzT2Zmc2V0IDwgdGV4dE1ldHJpY3NTaXplICYmIHBvc2l0
aW9uT2Zmc2V0IDwgcG9zaXRpb25TaXplOyArK3RleHRNZXRyaWNzT2Zmc2V0KSB7CiAgICAgICAg
IFNWR1RleHRNZXRyaWNzJiBtZXRyaWNzID0gdGV4dE1ldHJpY3NWYWx1ZXNbdGV4dE1ldHJpY3NP
ZmZzZXRdOwogCkBAIC0xODIsMjEgKzE4NCwyMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5
U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IHBvc2l0aW9uIG1h
cHMgdG8gYSBjaGFyYWN0ZXIgaW4gdGhlIG1ldHJpY3MgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0byBt
b2RpZnkgaXQuCi0gICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4o
cG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbk9m
ZnNldCkKICAgICAgICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogCiAgICAgICAg
IC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRy
aWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoZW5kUG9z
aXRpb24gPT0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgIGlmIChl
bmRQb3NpdGlvbiA9PSBwb3NpdGlvbk9mZnNldCkKICAgICAgICAgICAgIGFsdGVyRW5kUG9zaXRp
b24gPSBmYWxzZTsKIAogICAgICAgICAvLyBEZXRlY3QgbGlnYXR1cmVzLgotICAgICAgICBpZiAo
bGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9u
T2Zmc2V0ID4gMSkgewotICAgICAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFy
dFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNf
Y2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CisgICAgICAgIGlmIChsYXN0UG9zaXRpb25PZmZzZXQg
JiYgbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKKyAg
ICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQ
b3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkg
eworICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQudmFs
dWUoKTsKICAgICAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRp
b24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+
KHBvc2l0aW9uT2Zmc2V0KSkgeworICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYg
ZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBlbmRQb3NpdGlvbiA8
IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwb3NpdGlv
bk9mZnNldDsKICAgICAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CkBAIC0yMTIsMTEgKzIxNCwxMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5
U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQog
ICAgIGlmICghYWx0ZXJTdGFydFBvc2l0aW9uICYmICFhbHRlckVuZFBvc2l0aW9uKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3Np
dGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgewotICAgICAgICBpZiAoYWx0ZXJTdGFy
dFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgc3RhcnRQ
b3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQotICAgICAgICAgICAg
c3RhcnRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldDsKKyAgICBpZiAobGFzdFBvc2l0aW9u
T2Zmc2V0ICYmIGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpIC0gcG9zaXRpb25PZmZzZXQgPiAx
KSB7CisgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxh
c3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNl
dCkKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUo
KTsKIAotICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxhc3RQ
b3NpdGlvbk9mZnNldCAmJiBlbmRQb3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25P
ZmZzZXQpKQorICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IGxh
c3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpICYmIGVuZFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQp
CiAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uT2Zmc2V0OwogICAgIH0KIH0KQEAg
LTI4NCw4ICsyODYsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJh
Y2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbgogewogICAgIFN1YlN0cmlu
Z0xlbmd0aERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdWJTdHJpbmdMZW5ndGhEYXRhKj4ocXVl
cnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsK
LSAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgZGF0YS0+bGVuZ3RoOworICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5zdGFydFBvc2l0aW9uOworICAgIHVuc2ln
bmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKICAgICBpZiAo
IW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBm
cmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTMxOSw4ICszMjEsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlv
bk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZQogewogICAg
IFN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdGFydFBv
c2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0
aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlv
biArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAg
IHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21l
bnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0zNjgsOCArMzcwLDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFy
YWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHQKIHsKICAgICBFbmRQ
b3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEVuZFBvc2l0aW9uT2ZD
aGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Cisg
ICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVk
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MTYs
OCArNDE4LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFj
ayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmEKIHsKICAgICBSb3RhdGlvbk9mQ2hh
cmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4o
cXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0g
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0g
c3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00NTQsNyArNDU2LDcgQEAgc3Ry
dWN0IEV4dGVudE9mQ2hhcmFjdGVyRGF0YSA6IFNWR1RleHRRdWVyeTo6RGF0YSB7CiAgICAgRmxv
YXRSZWN0IGV4dGVudDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJv
dW5kYXJpZXMoU1ZHVGV4dFF1ZXJ5OjpEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFn
bWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVudCkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoU1ZHVGV4dFF1ZXJ5OjpE
YXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24sIEZsb2F0UmVjdCYgZXh0ZW50KQogewogICAgIGZsb2F0IHNjYWxpbmdG
YWN0b3IgPSBxdWVyeURhdGEtPnRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpOwogICAgIEFT
U0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTQ4NCw4ICs0ODYsOCBAQCBib29sIFNWR1RleHRRdWVy
eTo6ZXh0ZW50T2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1Rl
eHRGcmFnbQogewogICAgIEV4dGVudE9mQ2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0
PEV4dGVudE9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3Np
dGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRp
b24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAg
ICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFw
U3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdt
ZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtNTE5LDggKzUyMSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpjaGFyYWN0ZXJOdW1iZXJB
dFBvc2l0aW9uQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUCiAKICAgICBGbG9h
dFJlY3QgZXh0ZW50OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmcmFnbWVudC5sZW5n
dGg7ICsraSkgewotICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nlc3NlZENo
YXJhY3RlcnMgKyBpOwotICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsg
MTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnByb2Nlc3NlZENoYXJh
Y3RlcnMgKyBpOworICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24g
KyAxOwogICAgICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRp
bmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQog
ICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oCmluZGV4IDcyMWIyZGY4ZTMzMjQ1ZGE4NjQzMzg1YmU2ZWUyYjFkMmIwOTM4
ZGYuLjM4NzMwYTM4ZDA2MWU4MjVjZDkzN2Q3ODE4NGI4ZDNiM2ZhMGZhYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaApAQCAtNTIsOCArNTIsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgZXhlY3V0ZVF1ZXJ5KERhdGEqLCBQcm9jZXNzVGV4dEZyYWdtZW50
Q2FsbGJhY2spIGNvbnN0OwogCiAgICAgdm9pZCBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KElu
bGluZUZsb3dCb3gqKTsKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50
Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3Np
dGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7Ci0gICAgdm9pZCBtb2RpZnlTdGFydEVuZFBv
c2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIGludCYgc3RhcnRQb3NpdGlvbiwgaW50
JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9G
cmFnbWVudENvb3JkaW5hdGVzKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1bnNpZ25l
ZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICB2b2lk
IG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiwgdW5zaWdu
ZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBudW1iZXJPZkNoYXJhY3RlcnNDYWxsYmFjayhEYXRhKiwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285870</attachid>
            <date>2016-08-11 17:10:18 -0700</date>
            <delta_ts>2016-08-11 18:24:25 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-160735-20160811170840.patch</filename>
            <type>text/plain</type>
            <size>146186</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGU1NDBlMTUxMGFmYzc4
MjQyNzM5MmM1NTczNDAwODQ1MDdiYTEyNy4uZGRiOGRkNjA4MjQ2YmNkMmEwNTc2NGE4ZDMwY2Y4
MTg4NGE5M2E5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NCBAQAorMjAxNi0wOC0xMSAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIE1pZ3JhdGUg
ZnJvbSBpbnRzIHRvIHVuc2lnbmVkcyB3aGVuIHJlZmVycmluZyB0byBpbmRpY2VzIGludG8gc3Ry
aW5ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
NzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAgIFRoZXJl
IGFyZSBhIGZldyBjYXNlcyB3aGVyZSB3ZSB1c2UgaW50cyB0byByZWZlciB0byBpbmRpY2VzIGlu
dG8gc3RyaW5nczoKKyAgICAgICAgLSBBIHNpbXBsZSBoaXN0b3JpY2FsIGFjY2lkZW50LiBUaGVz
ZSB3ZXJlIG1pZ3JhdGVkIHRvIHVuc2lnbmVkcyBkaXJlY3RseS4KKyAgICAgICAgLSBXaGVyZSB3
ZSB1c2UgLTEgYXMgYSBzZW50aW5hbCB2YWx1ZS4gVGhlc2Ugd2VyZSBtaWdyYXRlZCB0byBPcHRp
b25hbDx1bnNpZ25lZD4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IG1vZGlmaWVzIHJlbmRl
cmluZyBjb2RlIChyYXRoZXIgdGhhbiBET00gY29kZSkuIFRoZXJlIGFyZSBhIGZldworICAgICAg
ICBwbGFjZXMgaW4gRE9NIGNvZGUgKHN1Y2ggYXMgUG9zaXRpb24gYW5kIE5vZGU6Om1heENoYXJh
Y3Rlck9mZnNldCgpKSB3aGljaCBhbHNvCisgICAgICAgIGVycm9uZW91c2x5IHVzZSBpbnRzOyBo
b3dldmVyLCBJIGRpZG4ndCB3YW50IHRoaXMgY2hhbmdlIHRvIGJlIG9ic2VydmFibGUgZnJvbQor
ICAgICAgICBzY3JpcHQgYW5kIEkgd2FudGVkIHRvIGtlZXAgdGhpcyBwYXRjaCB0byBhIHJlYXNv
bmFibGUgc2l6ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBpcyBubyBi
ZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxpdHkpOgorICAg
ICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGb3JSYW5nZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdseXBoQnVmZmVyRm9yVGV4
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd1RleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlVW5kZXJsaW5lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpvZmZzZXRUb01pZGRsZU9mR2x5cGhBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmdseXBocyk6CisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhC
dWZmZXI6OmZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5T
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnNocmluayk6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6c3dhcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFy
a3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oOgorICAgICAgICAo
V2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpMYXRpbjFUZXh0SXRlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF0aW4xVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZU9uZUNoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpkcmF3R2x5cGhzVG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdHbHlwaHNTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRy
YXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRh
c2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2Fz
Y2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6
OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hh
cmZCdXp6U2hhcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6bG9jYWxTZWxl
Y3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om9m
ZnNldFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpJbmxpbmVUZXh0Qm94
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGluZUJyZWFrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpbmVCcmVhazo6
bG9jYWxDYXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxD
YXJldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlv
blJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnNldFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzcGxpdFNlbGVj
dGlvbkJldHdlZW5TdWJ0cmVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVh
clN1YnRyZWVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6YXBwbHlT
dWJ0cmVlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rp
b25TdWJ0cmVlUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6YWRqdXN0Rm9yVmlzaWJsZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6c2VsZWN0aW9uQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJl
ZURhdGE6OnNldFNlbGVjdGlvblN0YXJ0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2V0U2VsZWN0aW9uRW5kUG9zKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVl
RGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6Ok9sZFNlbGVjdGlvbkRhdGE6Ok9sZFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
UGFpbnRlcjo6ZHJhd1RleHRPckVtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRQ
YWludGVyOjpwYWludFRleHRBbmRFbXBoYXNpc01hcmtzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRQ
YWludGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UGFpbnRlcjo6YWRkRW1waGFzaXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBh
aW50VGV4dFdpdGhTaGFkb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6
OnBhaW50VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRR
dWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4
dFF1ZXJ5OjpzdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxi
YWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oOgorCiAyMDE2LTA4
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQWxpZ24gUmFu
Z2Uuc3Vycm91bmRDb250ZW50cygpIHdpdGggdGhlIGxhdGVzdCBET00gc3BlY2lmaWNhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCAzMzgzNGFkMDk2
ZTgxODIyNTE2ZTc4MTNiMmI4MGRjOWJiMjZlMmQ0Li42ZTExMDQ5MDE4NjhhODgzZmFjNDMyNzlm
YjYxYmVlODA2YmYxYTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcApAQCAtMjA4OCw4ICsyMDg4LDExIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFw
cGVhcmFuY2UoKQogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlmeSB0aGUgRnJhbWVT
ZWxlY3Rpb24gb2YgdGV4dCByZW1vdmFsLgogICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAm
JiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYgc2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVy
ID0gc3RhcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQ
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAm
JiBlbmRPZmZzZXQgPj0gMCk7CisgICAgICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRl
cmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMDk4LDcgKzIxMDEsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRDYXJldFZpc2liaWxp
dHkoQ2FyZXRWaXNpYmlsaXR5IHZpc2liaWxpdHkpCiAgICAgaWYgKGNhcmV0VmlzaWJpbGl0eSgp
ID09IHZpc2liaWxpdHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgdHJpZ2dlciBhIHN5bmNocm5vdXNseSBsYXlvdXQgaGVyZS4KKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IHRyaWdnZXIgYSBzeW5jaHJvbm91cyBsYXlvdXQgaGVyZS4KICAgICBpZiAo
bV9mcmFtZSkKICAgICAgICAgdXBkYXRlU2VsZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUo
Km1fZnJhbWUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRleCBkM2Ni
YzFhNjNiMTBiNzMwODNlNWUzMDg5Y2U5MmNiNTQwODQwNmMwLi41MjkwZGViZTQ0NGJiZDMxODNh
ZmYyOWZkMDM2NWQzNjgwMDQ4MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAKQEAgLTE0MSw4ICsxNDEsOCBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwogICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
cjsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyOwotICAgIGludCBzdGFydE9mZnNldDsK
LSAgICBpbnQgZW5kT2Zmc2V0OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsK
KyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwogfTsKIAogRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZv
cmNlQmxhY2tUZXh0KQpAQCAtMTc0LDcgKzE3NCwxMCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFj
awogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFNuYXBzaG90T3B0aW9ucyBvcHRpb25z
ID0gU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25Pbmx5IHwgKGZvcmNlQmxhY2tUZXh0ID8g
U25hcHNob3RPcHRpb25zRm9yY2VCbGFja1RleHQgOiBTbmFwc2hvdE9wdGlvbnNOb25lKTsKLSAg
ICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBS
ZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5k
T2Zmc2V0ID49IDApOworICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFy
dE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhp
bmcpOwogICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNl
IHdlIGZha2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25h
cHNob3RTZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxm
LgogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJl
Y3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5k
ZXggNDM4MGI1YzA4NTMyZTgyMWFjYWEzNGVmMmNkNzhiNTExNjZhNWJiOS4uMzg2Njk5MWYwODhk
YjE1OWQ1MGNkMzdiYTJhMzFjYmNiNDkxMGNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMjk0LDE0ICsyOTQsMTQgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6dXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9y
KSBjb25zdAogICAgIG1fcmVxdWlyZXNTaGFwaW5nID0gY29tcHV0ZVJlcXVpcmVzU2hhcGluZygp
OwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2x5cGhCdWZmZXJGb3JUZXh0UnVuKENvZGVQYXRo
IGNvZGVQYXRoVG9Vc2UsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmdseXBoQnVm
ZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCBjb2RlUGF0aFRvVXNlLCBjb25zdCBUZXh0UnVuJiBydW4s
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpIGNv
bnN0CiB7CiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKICAgICAgICAgcmV0dXJu
IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1
ZmZlcik7CiAgICAgcmV0dXJuIGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIpOwogfQogCi1mbG9hdCBGb250Q2FzY2FkZTo6ZHJhd1Rl
eHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25zdAorZmxvYXQgRm9udENhc2NhZGU6OmRy
YXdUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
LCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKSBjb25z
dAogewogICAgIC8vIERvbid0IGRyYXcgYW55dGhpbmcgd2hpbGUgd2UgYXJlIHVzaW5nIGN1c3Rv
bSBmb250cyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBsb2FkaW5nLAogICAgIC8vIGV4Y2Vw
dCBpZiB0aGUgJ2ZvcmNlJyBhcmd1bWVudCBpcyBzZXQgdG8gdHJ1ZSAoaW4gd2hpY2ggY2FzZSBp
dCB3aWxsIHVzZSBhIGZhbGxiYWNrCkBAIC0zMDksMTUgKzMwOSwxNSBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0CiAgICAgaWYgKGlzTG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYgY3VzdG9tRm9udE5v
dFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKKyAgICB1bnNp
Z25lZCBkZXN0aW5hdGlvbiA9IHRvLnZhbHVlT3IocnVuLmxlbmd0aCgpKTsKIAogICAgIENvZGVQ
YXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5n
IGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MAotICAgIGlmIChj
b2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1No
YXBpbmcoKSkgJiYgKGZyb20gfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSAhPSBydW4ubGVu
Z3RoKCkpKQorICAgIGlmIChjb2RlUGF0aFRvVXNlICE9IENvbXBsZXggJiYgKGVuYWJsZUtlcm5p
bmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgJiYgKGZyb20gfHwgZGVzdGluYXRpb24gIT0gcnVu
Lmxlbmd0aCgpKSkKICAgICAgICAgY29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBmbG9hdCBzdGFydFggPSBwb2ludC54KCkgKyBnbHlw
aEJ1ZmZlckZvclRleHRSdW4oY29kZVBhdGhUb1VzZSwgcnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZm
ZXIpOworICAgIGZsb2F0IHN0YXJ0WCA9IHBvaW50LngoKSArIGdseXBoQnVmZmVyRm9yVGV4dFJ1
bihjb2RlUGF0aFRvVXNlLCBydW4sIGZyb20sIGRlc3RpbmF0aW9uLCBnbHlwaEJ1ZmZlcik7CiAg
ICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gR2l2ZSB1
cC4KICAgICBpZiAoZ2x5cGhCdWZmZXIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTMyNywyMyArMzI3LDIyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjpkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gc3Rh
cnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNp
c01hcmtzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFs
PHVuc2lnbmVkPiB0bykgY29uc3QKIHsKICAgICBpZiAoaXNMb2FkaW5nQ3VzdG9tRm9udHMoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRvIDwgMCkKLSAgICAgICAgdG8gPSBydW4ubGVu
Z3RoKCk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5sZW5ndGgo
KSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICAv
LyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBy
dW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8x
MDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVLZXJuaW5n
KCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IGRl
c3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2UgPSBDb21w
bGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAgZHJhd0Vt
cGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20s
IHRvKTsKKyAgICAgICAgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KGNvbnRleHQsIHJ1
biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKICAgICBlbHNlCi0gICAgICAgIGRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoY29udGV4dCwgcnVuLCBtYXJrLCBwb2ludCwg
ZnJvbSwgdG8pOworICAgICAgICBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KGNvbnRl
eHQsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIGRlc3RpbmF0aW9uKTsKIH0KIAogZmxvYXQgRm9u
dENhc2NhZGU6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb250Kj4q
IGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CkBAIC00
OTEsMTkgKzQ5MCwxOSBAQCBib29sIEZvbnRDYXNjYWRlOjpmYXN0QXZlcmFnZUNoYXJXaWR0aElm
QXZhaWxhYmxlKGZsb2F0JiB3aWR0aCkgY29uc3QKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAot
dm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAordm9pZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCBPcHRp
b25hbDx1bnNpZ25lZD4gdG8pIGNvbnN0CiB7Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVu
Z3RoKCkgOiB0byk7CisgICAgdW5zaWduZWQgZGVzdGluYXRpb24gPSB0by52YWx1ZU9yKHJ1bi5s
ZW5ndGgoKSk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsK
ICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFy
dGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5v
cmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9tIHx8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPih0bykgIT0gcnVuLmxlbmd0aCgpKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBD
b21wbGV4ICYmIChlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpICYmIChmcm9t
IHx8IGRlc3RpbmF0aW9uICE9IHJ1bi5sZW5ndGgoKSkpCiAgICAgICAgIGNvZGVQYXRoVG9Vc2Ug
PSBDb21wbGV4OwogCiAgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCkKLSAgICAgICAg
cmV0dXJuIGFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KHJ1biwgc2VsZWN0aW9uUmVj
dCwgZnJvbSwgdG8pOworICAgICAgICByZXR1cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBs
ZVRleHQocnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiAKLSAgICByZXR1
cm4gYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwg
ZnJvbSwgdG8pOworICAgIHJldHVybiBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
cnVuLCBzZWxlY3Rpb25SZWN0LCBmcm9tLCBkZXN0aW5hdGlvbik7CiB9CiAKIGludCBGb250Q2Fz
Y2FkZTo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdApAQCAtMTEyMyw3ICsxMTIyLDcgQEAgYm9vbCBG
b250Q2FzY2FkZTo6aXNMb2FkaW5nQ3VzdG9tRm9udHMoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
bnRzICYmIG1fZm9udHMtPmlzTG9hZGluZ0N1c3RvbUZvbnRzKCk7CiB9CiAgICAgCi1HbHlwaFRv
UGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGlu
dCBpbmRleCkKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1
dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVy
JiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gSW4gZ2VuZXJhbCwgd2Ug
d2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRlc2NlbmRlcnMgb24g
Q0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5ncywKICAgICAvLyBz
byB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24gYSBjaGFyYWN0ZXIt
YnktY2hhcmFjdGVyIGJhc2lzKS4KQEAgLTEyMzgsNyArMTIzNyw3IEBAIGludCBGb250Q2FzY2Fk
ZTo6ZW1waGFzaXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKICAg
ICByZXR1cm4gbWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9h
dCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBG
b3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250Q2Fz
Y2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
Rm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0
IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xMjY4LDcgKzEyNjcsNyBAQCBmbG9hdCBGb250Q2FzY2Fk
ZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
aW50IGZybwogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzKTsKQEAgLTEyODcsOCArMTI4Niw4IEBAIHZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgp
IC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAgICAgZmxvYXQgbmV4
dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpOwog
ICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
MCkuaGVpZ2h0KCk7Ci0gICAgaW50IGxhc3RGcm9tID0gMDsKLSAgICBpbnQgbmV4dEdseXBoID0g
MTsKKyAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CisgICAgdW5zaWduZWQgbmV4dEdseXBoID0g
MTsKICAgICB3aGlsZSAobmV4dEdseXBoIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAg
IGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgp
OwogICAgICAgICBGbG9hdFNpemUgbmV4dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5l
eHRHbHlwaCk7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQCBpbmxpbmUgc3RhdGljIGZsb2F0IG9mZnNl
dFRvTWlkZGxlT2ZHbHlwaChjb25zdCBGb250KiBmb250RGF0YSwgR2x5cGggZ2x5cGgpCiAgICAg
cmV0dXJuIGZvbnREYXRhLT53aWR0aEZvckdseXBoKGdseXBoKSAvIDI7CiB9CiAKLWlubGluZSBz
dGF0aWMgZmxvYXQgb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHNpemVfdCBpKQoraW5saW5lIHN0YXRpYyBmbG9hdCBvZmZzZXRUb01p
ZGRsZU9mR2x5cGhBdEluZGV4KGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgaSkKIHsKICAgICByZXR1cm4gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKGdseXBoQnVmZmVyLmZv
bnRBdChpKSwgZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSk7CiB9CkBAIC0xMzQ0LDcgKzEzNDMsNyBA
QCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdseXBoQnVmZmVyJgogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludChwb2lu
dC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNldFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9u
dERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAKICAgICBHbHlwaEJ1ZmZlciBtYXJrQnVm
ZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSArIDEgPCBnbHlwaEJ1ZmZlci5zaXplKCk7
ICsraSkgewogICAgICAgICBmbG9hdCBtaWRkbGVPZk5leHRHbHlwaCA9IG9mZnNldFRvTWlkZGxl
T2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAxKTsKICAgICAgICAgZmxvYXQgYWR2YW5j
ZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpIC0gbWlkZGxlT2ZMYXN0R2x5cGgg
KyBtaWRkbGVPZk5leHRHbHlwaDsKICAgICAgICAgbWFya0J1ZmZlci5hZGQoZ2x5cGhCdWZmZXIu
Z2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5cGgsIG1hcmtGb250RGF0YSwgYWR2YW5j
ZSk7CkBAIC0xMzcxLDcgKzEzNzAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbgogICAgIHJl
dHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0
aGlzLCBydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmgKaW5kZXggYzZkMGMyNTk4ZWQxNjMxYmU2MTZlN2Q3OGJkMzI2NTBjNjZjYzFkYS4uOGJk
Y2NhODA3MjJlMjU5OWI4MTQ1MTZmMjg2YzBiNDE0MTZkODg2YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xMDUsNyArMTA1LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwogICAgIHZpcnR1YWwgfkds
eXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQogfTsKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5
cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBo
VW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBpbmRleCk7CiAKIGNsYXNzIFRleHRMYXlvdXREZWxldGVy
IHsKIHB1YmxpYzoKQEAgLTEzMyw5ICsxMzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUo
UmVmUHRyPEZvbnRTZWxlY3Rvcj4mJikgY29uc3Q7CiAKICAgICBlbnVtIEN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiB7IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSwgVXNlRmFsbGJhY2tJZkZvbnRO
b3RSZWFkeSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBp
bnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRG9Ob3RQYWludElmRm9udE5v
dFJlYWR5KSBjb25zdDsKLSAgICBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IE51bGxvcHQsIEN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7CisgICAgc3RhdGljIHZv
aWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0
byA9IE51bGxvcHQpIGNvbnN0OwogCiAgICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlv
bnNXaXRoUmVjdChjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwg
Y29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0ZW50cykgY29uc3Q7CiAKQEAgLTE0NSw3ICsxNDUsNyBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0g
MCk7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gTnVsbG9w
dCkgY29uc3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGVzY3JpcHRpb24udmFyaWFudENhcHMoKSA9PSBGb250VmFyaWFudENhcHM6OlNtYWxsOyB9CiAK
QEAgLTIxOCwxNSArMjE4LDE1IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0
RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CiAK
LSAgICBmbG9hdCBnbHlwaEJ1ZmZlckZvclRleHRSdW4oQ29kZVBhdGgsIGNvbnN0IFRleHRSdW4m
LCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OworICAgIGZsb2F0IGdseXBo
QnVmZmVyRm9yVGV4dFJ1bihDb2RlUGF0aCwgY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdGhlIGlu
aXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZl
ciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5j
ZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKICAgICB2
b2lkIGRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIEds
eXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2lt
cGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIE9wdGlvbmFsPEdseXBoRGF0YT4gZ2V0RW1waGFz
aXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogCkBAIC0yMzQsMTEg
KzIzNCwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIGNhbkV4cGFuZEFyb3VuZElkZW9n
cmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0
cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4
dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0OwotICAgIHZvaWQgZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZy
b20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMpIGNvbnN0
OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBGb250
Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0OwogICAgIGlu
dCBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBw
b3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3Qm
IHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0
U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3Q7CiAKICAgICBz
dGF0aWMgc3RkOjpwYWlyPHVuc2lnbmVkLCBib29sPiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
SW50ZXJuYWwoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBFeHBh
bnNpb25CZWhhdmlvcik7CiAgICAgc3RhdGljIHN0ZDo6cGFpcjx1bnNpZ25lZCwgYm9vbD4gZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudEludGVybmFsKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVGV4dERpcmVjdGlvbiwgRXhwYW5zaW9uQmVoYXZpb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKaW5kZXggYzgyYWYzOTA4NDRmNWQyN2Uy
ZTYwNDc5ZDliZDdlYjQ5MWQwNzlkYi4uNTYzNTQwYzBlNzQzOWUyNDQ4NjQxM2UwNmI5NDc4YjFj
NzhjY2Q5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5
cGhCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1
ZmZlci5oCkBAIC03Nyw3ICs3Nyw3IEBAIHR5cGVkZWYgRmxvYXRTaXplIEdseXBoQnVmZmVyQWR2
YW5jZTsKIGNsYXNzIEdseXBoQnVmZmVyIHsKIHB1YmxpYzoKICAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2ZvbnQuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udC5zaXplKCk7IH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CkBAIC05
MSwxMiArOTEsMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzKGludCBmcm9tKSB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9
Ci0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgeyByZXR1cm4gbV9h
ZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9Ci0gICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9Ci0g
ICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyhpbnQgZnJvbSkgY29uc3QgeyBy
ZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CisgICAgR2x5cGhCdWZmZXJHbHlwaCog
Z2x5cGhzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
KyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJu
IG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocyh1bnNpZ25lZCBmcm9tKSBjb25zdCB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBm
cm9tOyB9CisgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyh1bnNpZ25lZCBm
cm9tKSBjb25zdCB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KIAotICAgIGNv
bnN0IEZvbnQqIGZvbnRBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFtpbmRleF07
IH0KKyAgICBjb25zdCBGb250KiBmb250QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udFtpbmRleF07IH0KIAogICAgIHZvaWQgc2V0SW5pdGlhbEFkdmFuY2UoR2x5cGhCdWZm
ZXJBZHZhbmNlIGluaXRpYWxBZHZhbmNlKSB7IG1faW5pdGlhbEFkdmFuY2UgPSBpbml0aWFsQWR2
YW5jZTsgfQogICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSYgaW5pdGlhbEFkdmFuY2UoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxBZHZhbmNlOyB9CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TGVhZGluZ0V4cGFuc2lvbihmbG9hdCBsZWFkaW5nRXhwYW5zaW9u
KSB7IG1fbGVhZGluZ0V4cGFuc2lvbiA9IGxlYWRpbmdFeHBhbnNpb247IH0KICAgICBmbG9hdCBs
ZWFkaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9sZWFkaW5nRXhwYW5zaW9uOyB9CiAg
ICAgCi0gICAgR2x5cGggZ2x5cGhBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGggZ2x5cGhB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgVVNFKENBSVJPKQogICAgICAgICBy
ZXR1cm4gbV9nbHlwaHNbaW5kZXhdLmluZGV4OwpAQCAtMTEzLDEyICsxMTMsMTIgQEAgcHVibGlj
OgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdChpbnQg
aW5kZXgpIGNvbnN0CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkdmFuY2VzW2luZGV4XTsKICAg
ICB9CiAKLSAgICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdAorICAgIEZsb2F0
U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgUExBVEZPUk0o
V0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKQEAgLTE4MCw5ICsxODAsOSBA
QCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJldmVyc2UoaW50IGZyb20sIGlu
dCBsZW5ndGgpCisgICAgdm9pZCByZXZlcnNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0
aCkKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3Ro
IC0gMTsgaSA8IGVuZDsgKytpLCAtLWVuZCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJv
bSwgZW5kID0gZnJvbSArIGxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsraSwgLS1lbmQpCiAgICAgICAg
ICAgICBzd2FwKGksIGVuZCk7CiAgICAgfQogCkBAIC0xOTgsMTQgKzE5OCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fb2Zmc2V0c0luU3RyaW5nLnJlc2V0KG5ldyBWZWN0b3I8dW5zaWduZWQsIDIw
NDg+KCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIGNvbnZlcnRzIGZyb20gYW4gdW5z
aWduZWQgdG8gYW4gaW50Ci0gICAgaW50IG9mZnNldEluU3RyaW5nKGludCBpbmRleCkgY29uc3QK
KyAgICBpbnQgb2Zmc2V0SW5TdHJpbmcodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vZmZzZXRzSW5TdHJpbmcpOwogICAgICAgICByZXR1cm4gKCptX29mZnNl
dHNJblN0cmluZylbaW5kZXhdOwogICAgIH0KIAotICAgIHZvaWQgc2hyaW5rKGludCB0cnVuY2F0
aW9uUG9pbnQpCisgICAgdm9pZCBzaHJpbmsodW5zaWduZWQgdHJ1bmNhdGlvblBvaW50KQogICAg
IHsKICAgICAgICAgbV9mb250LnNocmluayh0cnVuY2F0aW9uUG9pbnQpOwogICAgICAgICBtX2ds
eXBocy5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKQEAgLTIxOCw3ICsyMTcsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgy
KQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEsIHVuc2lnbmVkIGluZGV4MikKICAgICB7
CiAgICAgICAgIGNvbnN0IEZvbnQqIGYgPSBtX2ZvbnRbaW5kZXgxXTsKICAgICAgICAgbV9mb250
W2luZGV4MV0gPSBtX2ZvbnRbaW5kZXgyXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGFmMTkxMjI3MDM0ZWFjMTYw
YmUzZmIyYTA2ZjZkNGRlM2JmZjI3ZWUuLmVkZjYwNTM4Yjg5MzBiZTBiODk3OTk5YTVlNDMxMGM3
NTBhNDc3MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiAgICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50Owog
fQogCi1mbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBm
b250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJv
bSwgaW50IHRvKQorZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
dW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjQ1LDcgKzY0NSw3IEBAIGZsb2F0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uCiAgICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwg
cG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udENhc2NhZGUmIGZvbnRDYXNjYWRlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgYnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udENhc2NhZGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
JiBidWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjU4LDcgKzY1OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3QgRm9udCYgZm9uCiAgICAgZm9u
dENhc2NhZGUuZHJhd0dseXBocygqdGhpcywgZm9udCwgYnVmZmVyLCBmcm9tLCBudW1HbHlwaHMs
IHBvaW50LCBmb250Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKS5mb250U21vb3RoaW5nKCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAzODkzNDA2
NjQ5MzQ4OTQ2NDBjMzM2ZGJiMjJlZTE4ZmE2YjJhNWFmLi5hNmU2ZmIwM2MyYmRiMDA3ZjFhNmI4
MDE2MDk3Y2RmNmIzODc4YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzgxLDkgKzM4MSw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7CiAgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIGZsb2F0IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGlu
dCB0byA9IC0xKTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiwgaW50IGZyb20gPSAwLCBpbnQgdG8gPSAtMSk7CisgICAgZmxvYXQgZHJhd1Rl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0KTsKKyAg
ICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBOdWxsb3B0
KTsKICAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCiAgICAgdm9p
ZCBhcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCmluZGV4
IGM0MDE4OWJmZTkzMzJhMGRlYjQwNjQzYzE0ZDFlMjgwNzdkYWQzODkuLjQzMWQ4ZmYyMGQ0N2U0
ZTU5ZmU5YjRhYjA0N2RhNDA5NmIwN2YwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5oCkBAIC0yOCwxOCArMjgsMTgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXRpbjFUZXh0SXRlcmF0b3IgewogcHVi
bGljOgotICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJl
bnRDaGFyYWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0ZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50
Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdENoYXJhY3RlcicuCi0gICAgTGF0aW4xVGV4dEl0ZXJhdG9yKGNvbnN0IExDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCAv
KmVuZENoYXJhY3RlciovKQorICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFy
dHMgYXQgJ2N1cnJlbnRJbmRleCcuIFRoZSBpdGVyYXRvciBvcGVyYXRlcyBvbiB0aGUgcmFuZ2Ug
W2N1cnJlbnRJbmRleCwgbGFzdEluZGV4XS4KKyAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdEluZGV4Jy4KKyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGN1cnJlbnRJbmRleCwgdW5zaWduZWQgbGFzdEluZGV4LCB1bnNpZ25l
ZCAvKmVuZENoYXJhY3RlciovKQogICAgICAgICA6IG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQot
ICAgICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICAgICAs
IG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFjdGVyKQorICAgICAgICAsIG1fY3VycmVudEluZGV4
KGN1cnJlbnRJbmRleCkKKyAgICAgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCiAgICAgewog
ICAgIH0KIAogICAgIGJvb2wgY29uc3VtZShVQ2hhcjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVkJiBj
bHVzdGVyTGVuZ3RoKQogICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudENoYXJhY3RlciA+PSBt
X2xhc3RDaGFyYWN0ZXIpCisgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA+PSBtX2xhc3RJbmRl
eCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjaGFyYWN0ZXIgPSAqbV9j
aGFyYWN0ZXJzOwpAQCAtNTAsMTYgKzUwLDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkdmFuY2Uo
dW5zaWduZWQgYWR2YW5jZUxlbmd0aCkKICAgICB7CiAgICAgICAgIG1fY2hhcmFjdGVycyArPSBh
ZHZhbmNlTGVuZ3RoOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0
aDsKKyAgICAgICAgbV9jdXJyZW50SW5kZXggKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAg
ICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rl
cjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dEluZGV4OyB9CiAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBMQ2hhciogbV9jaGFyYWN0ZXJz
OwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFzdENoYXJhY3RlcjsK
KyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCmluZGV4IDkxNTVl
NzExYThkYTgwZDRlYjNkY2Y1ZGE1YWMzMDVhMjhjYmVhNzkuLjY4MmQ5OGUyNTM1YzJkYjRiN2Fl
MTMwYjUzY2QxNjJkMGI2OWUxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcApAQCAtMjcsMTEgKzI3LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3Io
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENo
YXJhY3RlciwgaW50IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRv
cjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBjdXJyZW50SW5kZXgsIHVuc2lnbmVkIGxhc3RJbmRleCwgdW5zaWduZWQgZW5k
SW5kZXgpCiAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKLSAgICAsIG1fY3VycmVudENo
YXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQotICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFy
YWN0ZXIpCi0gICAgLCBtX2VuZENoYXJhY3RlcihlbmRDaGFyYWN0ZXIpCisgICAgLCBtX2N1cnJl
bnRJbmRleChjdXJyZW50SW5kZXgpCisgICAgLCBtX2xhc3RJbmRleChsYXN0SW5kZXgpCisgICAg
LCBtX2VuZEluZGV4KGVuZEluZGV4KQogewogfQogCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgU3Vy
cm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpjb25zdW1lU2xvd0Nhc2UoVUNoYXIzMiYgY2hh
cmFjdGVyLCB1bnNpZ25lCiAKICAgICAvLyBEbyB3ZSBoYXZlIGEgc3Vycm9nYXRlIHBhaXI/IElm
IHNvLCBkZXRlcm1pbmUgdGhlIGZ1bGwgVW5pY29kZSAoMzIgYml0KSBjb2RlIHBvaW50IGJlZm9y
ZSBnbHlwaCBsb29rdXAuCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW5vdGhlciBjaGFyYWN0
ZXIgYW5kIGl0J3MgYSBsb3cgc3Vycm9nYXRlLgotICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIg
KyAxID49IG1fZW5kQ2hhcmFjdGVyKQorICAgIGlmIChtX2N1cnJlbnRJbmRleCArIDEgPj0gbV9l
bmRJbmRleCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVUNoYXIgbG93ID0gbV9jaGFy
YWN0ZXJzWzFdOwpAQCAtNzQsNyArNzQsNyBAQCBVQ2hhcjMyIFN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvcjo6bm9ybWFsaXplVm9pY2luZ01hcmtzKCkKICAgICAvLyBBY2NvcmRpbmcgdG8g
aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVU5JREFUQS9VQ0QuaHRtbCNDYW5vbmljYWxf
Q29tYmluaW5nX0NsYXNzX1ZhbHVlcwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhpcmFnYW5h
S2F0YWthbmFWb2ljaW5nTWFya3NDb21iaW5pbmdDbGFzcyA9IDg7CiAKLSAgICBpZiAobV9jdXJy
ZW50Q2hhcmFjdGVyICsgMSA+PSBtX2VuZENoYXJhY3RlcikKKyAgICBpZiAobV9jdXJyZW50SW5k
ZXggKyAxID49IG1fZW5kSW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKHVfZ2V0
Q29tYmluaW5nQ2xhc3MobV9jaGFyYWN0ZXJzWzFdKSA9PSBoaXJhZ2FuYUthdGFrYW5hVm9pY2lu
Z01hcmtzQ29tYmluaW5nQ2xhc3MpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgK
aW5kZXggODVjOTY5NGM3NmEyMmNkZWFlZWIzYmE4NDFiMTBhMGE1MDMxNjgxMy4uNDcwZDE0YWYy
NWRjNGI0NjA1OTM3ZDQ1MjVhZjUyZjVhMTE2YTBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4
dEl0ZXJhdG9yLmgKQEAgLTI4LDEzICsyOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgLy8gVGhl
IHBhc3NlZCBpbiBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJhY3RlcicuIFRo
ZSBpdGVyYXRvciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0
Q2hhcmFjdGVyXS4KLSAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxl
bmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3Rl
cicuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50
IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVyKTsK
KyAgICAvLyBUaGUgcGFzc2VkIGluIFVDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50SW5k
ZXgnLiBUaGUgaXRlcmF0b3Igb3BlcmF0b2VzIG9uIHRoZSByYW5nZSBbY3VycmVudEluZGV4LCBs
YXN0SW5kZXhdLgorICAgIC8vICdlbmRJbmRleCcgZGVub3RlcyB0aGUgbWF4aW11bSBsZW5ndGgg
b2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xhc3RJbmRleCcuCisgICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgY3Vy
cmVudEluZGV4LCB1bnNpZ25lZCBsYXN0SW5kZXgsIHVuc2lnbmVkIGVuZEluZGV4KTsKIAogICAg
IGlubGluZSBib29sIGNvbnN1bWUoVUNoYXIzMiYgY2hhcmFjdGVyLCB1bnNpZ25lZCYgY2x1c3Rl
ckxlbmd0aCkKICAgICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPj0gbV9sYXN0
Q2hhcmFjdGVyKQorICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPj0gbV9sYXN0SW5kZXgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2hhcmFjdGVyID0gKm1fY2hhcmFj
dGVyczsKQEAgLTQ5LDEwICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlKHVuc2ln
bmVkIGFkdmFuY2VMZW5ndGgpCiAgICAgewogICAgICAgICBtX2NoYXJhY3RlcnMgKz0gYWR2YW5j
ZUxlbmd0aDsKLSAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5ndGg7Cisg
ICAgICAgIG1fY3VycmVudEluZGV4ICs9IGFkdmFuY2VMZW5ndGg7CiAgICAgfQogCi0gICAgaW50
IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0K
KyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRl
eDsgfQogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
YWN0ZXJzOyB9CiAKIHByaXZhdGU6CkBAIC02MCw5ICs2MCw5IEBAIHByaXZhdGU6CiAgICAgVUNo
YXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoKTsKIAogICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9sYXN0Q2hhcmFj
dGVyOwotICAgIGludCBtX2VuZENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX2xhc3RJbmRleDsKKyAgICB1bnNpZ25lZCBtX2VuZEluZGV4Owog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcAppbmRleCAwYjlhNzQwMmFmYjYxMzYwNjA1OGVkOTgzMTRhNmIxZGNiOTA1NmI0
Li4zNmZiYTBmOWQwNmY4Nzk3NmU1YWVkMGJhMDlhYTY2YTU5YTUwN2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtODEs
NyArODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTb2Z0QmFua0Vtb2ppKFVDaGFyMzIgY29k
ZXBvaW50KQogICAgIHJldHVybiBjb2RlcG9pbnQgPj0gMHhFMDAxICYmIGNvZGVwb2ludCA8PSAw
eEU1Mzc7CiB9CiAKLWlubGluZSBhdXRvIFdpZHRoSXRlcmF0b3I6OnNob3VsZEFwcGx5Rm9udFRy
YW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBpbnQgbGFzdEdseXBoQ291
bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitp
bmxpbmUgYXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFy
MzIgcHJldmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7CiAgICAgaWYg
KGdseXBoQnVmZmVyICYmIGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsg
MSkgJiYgaXNTb2Z0QmFua0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQ7CkBAIC05MCwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8g
V2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWYKICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0KIAot
aW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9u
dCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitpbmxpbmUgZmxvYXQg
V2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQs
IFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVk
QXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQogewogICAgIEFTU0VSVF9VTlVTRUQo
cHJldmlvdXNDaGFyYWN0ZXIsIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIs
IGxhc3RHbHlwaENvdW50LCBwcmV2aW91c0NoYXJhY3RlcikgIT0gV2lkdGhJdGVyYXRvcjo6VHJh
bnNmb3Jtc1R5cGU6Ok5vbmUpOwogCiAgICAgaWYgKCFnbHlwaEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBpbnQgZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsK
KyAgICB1bnNpZ25lZCBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOwogICAg
IGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJTaXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewog
ICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0xMDUsOSArMTA1LDEwIEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBs
eUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAKICAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXItPmFkdmFuY2VzKDApOwog
ICAgIGZsb2F0IHdpZHRoRGlmZmVyZW5jZSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IGxhc3RHbHlw
aENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkKICAgICAgICAgd2lkdGhE
aWZmZXJlbmNlIC09IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKKyAgICBBU1NFUlQobGFzdEdseXBo
Q291bnQgPD0gZ2x5cGhCdWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikKICAgICAgICAgZ2x5cGhC
dWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlw
aENvdW50KTsKIApAQCAtMTI1LDcgKzEyNiw3IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9y
OjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAg
ICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOwogCi0gICAgZm9yIChp
bnQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbGFzdEdseXBoQ291bnQ7IGkgPCBnbHlwaEJ1ZmZlclNpemU7ICsraSkK
ICAgICAgICAgd2lkdGhEaWZmZXJlbmNlICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBs
YXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKQEAgLTE4MSw3ICsxODIsNyBAQCBpbmxp
bmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYg
dGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSBtX2Zv
bnQtPnByaW1hcnlGb250KCk7CiAgICAgY29uc3QgRm9udCogbGFzdEZvbnREYXRhID0gJnByaW1h
cnlGb250OwotICAgIGludCBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhCdWZm
ZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWduZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZl
ciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAw
OwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIgPSAwOwpAQCAtMTkxLDcgKzE5Miw3IEBA
IGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJh
dG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgLy8gV2UgYXJlIGl0ZXJhdGluZyBpbiBzdHJp
bmcgb3JkZXIsIG5vdCBnbHlwaCBvcmRlci4gQ29tcGFyZSB0aGlzIHRvIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQogICAgIHdoaWxlICh0ZXh0SXRlcmF0
b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVk
IGFkdmFuY2VMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwotICAgICAgICBpbnQgY3VycmVudENoYXJh
Y3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIGludCBjdXJy
ZW50Q2hhcmFjdGVyID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpOwogICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNo
YXJhY3RlciwgcnRsKTsKICAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaERhdGEuZ2x5cGg7CiAg
ICAgICAgIGlmICghZ2x5cGgpIHsKQEAgLTM0OSwyMSArMzUwLDIxIEBAIGlubGluZSB1bnNpZ25l
ZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0
b3IsIEdseXBoCiAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5rKGxhc3RHbHlwaENvdW50
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjb25zdW1lZENoYXJhY3RlcnMgPSB0ZXh0SXRlcmF0
b3IuY3VycmVudENoYXJhY3RlcigpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIG1fY3VycmVu
dENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgdW5zaWdu
ZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpIC0gbV9j
dXJyZW50Q2hhcmFjdGVyOworICAgIG1fY3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5j
dXJyZW50SW5kZXgoKTsKICAgICBtX3J1bldpZHRoU29GYXIgKz0gd2lkdGhTaW5jZUxhc3RSb3Vu
ZGluZzsKICAgICBtX2ZpbmFsUm91bmRpbmdXaWR0aCA9IGxhc3RSb3VuZGluZ1dpZHRoOwogICAg
IHJldHVybiBjb25zdW1lZENoYXJhY3RlcnM7CiB9CiAKLXVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQordW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlw
aEJ1ZmZlcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKQog
ICAgICAgICBvZmZzZXQgPSBsZW5ndGg7CiAKLSAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID49
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKQorICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0
ZXIgPj0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChtX3J1bi5pczhCaXQo
KSkgewpAQCAtMzc3LDEwICszNzgsMTAgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZShpbnQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAKIGJvb2wgV2lkdGhJdGVy
YXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJiBnbHlw
aEJ1ZmZlcikKIHsKLSAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAgICB1
bnNpZ25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIGFkdmFuY2UobV9jdXJy
ZW50Q2hhcmFjdGVyICsgMSwgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCB3ID0gMDsKLSAgICBm
b3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQorICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKICAg
ICAgICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKICAgICB3aWR0aCA9
IHc7CiAgICAgcmV0dXJuIGdseXBoQnVmZmVyLnNpemUoKSA+IG9sZFNpemU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXggNjhmZTNm
M2Y1YmIzZjk3OTI4OTI3NTI1ODYwNjg2MWU1Y2U5Mjg2My4uYzQ1ZmRiOGMzNmEzZmUyZjNlZjg2
Yzg5NTllZjU1MTZhMzkwMTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNDIsNyArNDIsNyBAQCBzdHJ1Y3QgV2lkdGhJdGVy
YXRvciB7CiBwdWJsaWM6CiAgICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250Q2FzY2FkZSosIGNv
bnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOwogCi0gICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7Cisg
ICAgdW5zaWduZWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBib29s
IGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwogCiAgICAg
ZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IEFTU0VSVChtX2FjY291bnRGb3JH
bHlwaEJvdW5kcyk7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9CkBAIC03MCw4ICs3
MCw4IEBAIHByaXZhdGU6CiAgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0
SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciopOwogCiAgICAgZW51bSBjbGFzcyBUcmFuc2Zvcm1zVHlw
ZSB7IE5vbmUsIEZvcmNlZCwgTm90Rm9yY2VkIH07Ci0gICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxk
QXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIGludCBsYXN0R2x5cGhDb3Vu
dCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7Ci0gICAgZmxvYXQgYXBwbHlGb250
VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJvb2wgbHRyLCBpbnQmIGxhc3RHbHlwaENvdW50LCBj
b25zdCBGb250KiwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFj
dGVyc1RyZWF0ZWRBc1NwYWNlJik7CisgICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxkQXBwbHlGb250
VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBV
Q2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdDsKKyAgICBmbG9hdCBhcHBseUZvbnRUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyKiwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5cGhDb3VudCwg
Y29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJh
Y3RlcnNUcmVhdGVkQXNTcGFjZSYpOwogCiAgICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFs
bGJhY2tGb250cyB7IG51bGxwdHIgfTsKICAgICBib29sIG1fYWNjb3VudEZvckdseXBoQm91bmRz
IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IGU4OTVmMTc1OTY2Mjk0MDk5ZDliZjBhZGUyNmYxMjQ0
ODM5NzFiMzYuLjllMzA4MDE1ODUyODM5Y2Q0Mjg2YTZhYzQ1NDIwMDJjYjM4ZWM1YzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcApAQCAtNDcsNyArNDcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyB2
b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBpbnQgbnVtR2x5cGhzKQorc3RhdGljIHZvaWQg
ZHJhd0dseXBoc1RvQ29udGV4dChjYWlyb190KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIG51bUdseXBocykKIHsKICAgICBjYWly
b19tYXRyaXhfdCBvcmlnaW5hbFRyYW5zZm9ybTsKICAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zm
c2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CkBAIC02Niw3ICs2Niw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgR2x5cGhCdWZmZXJHCiAgICAgICAgIGNhaXJvX3NldF9tYXRyaXgoY29udGV4dCwgJm9y
aWdpbmFsVHJhbnNmb3JtKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEZvbnQmIGZvbnQsIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgaW50IG51bUdseXBocykK
K3N0YXRpYyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHbHlwaEJ1
ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIG51bUdseXBocykKIHsKICAgICBTaGFkb3dCbHVy
JiBzaGFkb3cgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnNoYWRvd0JsdXIo
KTsKIApAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3R2x5cGhzU2hhZG93KEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JgogfQogCiB2b2lk
IEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01v
ZGUpCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUpCiB7CiAgICAgaWYgKCFmb250LnBsYXRmb3Jt
RGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBHCiAgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29uc3Rf
Y2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKIAogICAg
IGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUds
eXBoczsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsr
KSB7CiAgICAgICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OwogICAgICAgICBnbHlwaHNbaV0ueSA9
IHBvaW50LnkoKTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9t
ICsgaSkud2lkdGgoKTsKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZh
bmNlKCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1faW5kZXg7CisgICAgdW5zaWduZWQg
bV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVuJiBtX3RleHRSdW47CiAgICAgY29uc3QgR2x5cGhC
dWZmZXImIG1fZ2x5cGhCdWZmZXI7CiAgICAgY29uc3QgRm9udCogbV9mb250RGF0YTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hh
cmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggMjE2ZDkxMWRlM2EwN2ZjN2Y0NGY5NWNiMGQ0NWFi
ODY0ZTZkZmM2Ny4uMDhiYWUzODA4NDg4NDU0YWQ3Mzg2NzJjM2UyODg0NWM4NGJmZDAzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCwgaW50LCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29u
c3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQsIHVuc2lnbmVkLCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IC8qIGZvclRleHRFbXBoYXNpcyAqLykgY29u
c3QKIHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoIXNo
YXBlci5zaGFwZSgmZ2x5cGhCdWZmZXIpKSB7CkBAIC01Miw3ICs1Miw3IEBAIGZsb2F0IEZvbnRD
YXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgaW50LCBpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdF
bXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiAvKiBjb250ZXh0ICov
LCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAq
LywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyog
dG8gKi8pIGNvbnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBs
ZXhUZXh0KEdyYXBoaWNzQ29udGV4dCYgLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyog
cnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQm
IC8qIHBvaW50ICovLCB1bnNpZ25lZCAvKiBmcm9tICovLCB1bnNpZ25lZCAvKiB0byAqLykgY29u
c3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtODUsNyArODUsNyBAQCBpbnQgRm9u
dENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBibwogICAgIHJldHVybiAwOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250
Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CiAgICAg
aWYgKHNoYXBlci5zaGFwZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCA3ZjU2NGIwNTJk
NWY1MTc0MDk4ZWMwZDQ1MGRmN2E5MmEyMjVjZTEyLi45YzFmMWRhZjdiOTY5MGFmN2Y0MzNiYWFm
YjQ4MjBiOTE5MmQ0MzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTcwLDExICs3MCwxMSBA
QCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4
dCgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9y
V2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRp
b25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90
IGNvdW50KQorc3RhdGljIGlubGluZSB2b2lkIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBo
UG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMsIENHQ29udGV4dFJlZiBj
b250ZXh0LCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBD
R0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRl
eHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKICAgICBwb3NpdGlvbnNbMF0gPSBDR1BvaW50WmVy
bzsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBDR1NpemUgYWR2YW5jZSA9
IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKGFkdmFuY2VzW2kgLSAxXSwgbWF0cml4KTsKICAg
ICAgICAgcG9zaXRpb25zW2ldLnggPSBwb3NpdGlvbnNbaSAtIDFdLnggKyBhZHZhbmNlLndpZHRo
OwogICAgICAgICBwb3NpdGlvbnNbaV0ueSA9IHBvc2l0aW9uc1tpIC0gMV0ueSArIGFkdmFuY2Uu
aGVpZ2h0OwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0
dGVycHJlc3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogI2VuZGlmCiB9
CiAKLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCBzaXplX3Qg
Y291bnQpCitzdGF0aWMgdm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5z
aWduZWQgY291bnQpCiB7CiAjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQogICAgIGlmICghY291bnQp
CkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotc3RhdGljIHZvaWQg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9u
dCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29u
c3QgQ0dTaXplKiBhZHZhbmNlcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgc2hvd0dseXBo
c1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwg
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXpl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCiB7CiAgICAgaWYgKCFjb3VudCkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2
YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHCiAgICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0
KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOwogCiAgICAgICAgIENHUG9pbnQgcG9z
aXRpb24gPSBGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmlj
cygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygp
LmZsb2F0QXNjZW50KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAg
ICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CiAgICAgICAgICAgICBwb3Np
dGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9zaXRp
b24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVpZ2h0
KSwgdHJhbnNmb3JtKTsKICAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0ud2lk
dGg7CkBAIC0yMjAsNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9k
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7CiB9CiAK
LXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9t
LCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0
Zm9ybURhdGEoKTsKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00MzQsNyArNDM0
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWR2YW5jZSgpIGZpbmFsOwogCiBwcml2YXRlOgotICAg
IGludCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgY29uc3QgVGV4dFJ1biYg
bV90ZXh0UnVuOwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBtX2dseXBoQnVmZmVyOwogICAgIGNv
bnN0IEZvbnQqIG1fZm9udERhdGE7CkBAIC00ODgsNyArNDg4LDcgQEAgRGFzaEFycmF5IEZvbnRD
YXNjYWRlOjpkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdAogICAgIEZsb2F0UG9pbnQgb3JpZ2luID0gRmxvYXRQb2ludCh0ZXh0T3JpZ2luLngo
KSArIGRlbHRhWCwgdGV4dE9yaWdpbi55KCkpOwogICAgIE1hY0dseXBoVG9QYXRoVHJhbnNsYXRv
ciB0cmFuc2xhdG9yKHJ1biwgZ2x5cGhCdWZmZXIsIG9yaWdpbik7CiAgICAgRGFzaEFycmF5IHJl
c3VsdDsKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IHRyYW5zbGF0b3IuY29udGFpbnNNb3JlUGF0
aHMoKTsgKytpbmRleCwgdHJhbnNsYXRvci5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgdHJhbnNsYXRvci5jb250YWluc01vcmVQYXRocygpOyArK2luZGV4LCB0cmFu
c2xhdG9yLmFkdmFuY2UoKSkgewogICAgICAgICBHbHlwaEl0ZXJhdGlvblN0YXRlIGluZm8gPSBH
bHlwaEl0ZXJhdGlvblN0YXRlKENHUG9pbnRNYWtlKDAsIDApLCBDR1BvaW50TWFrZSgwLCAwKSwg
bGluZUV4dGVudHMueSgpLCBsaW5lRXh0ZW50cy55KCkgKyBsaW5lRXh0ZW50cy5oZWlnaHQoKSwg
bGluZUV4dGVudHMueCgpICsgbGluZUV4dGVudHMud2lkdGgoKSwgbGluZUV4dGVudHMueCgpKTsK
ICAgICAgICAgY29uc3QgRm9udCogbG9jYWxGb250ID0gZ2x5cGhCdWZmZXIuZm9udEF0KGluZGV4
KTsKICAgICAgICAgaWYgKCFsb2NhbEZvbnQpIHsKQEAgLTUyNyw3ICs1MjcsNyBAQCBib29sIEZv
bnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0CiAgICAgcmV0dXJuIENU
Rm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udChhZG9wdENGKENURm9udENvcHlGb250RGVzY3Jp
cHRvcihmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSkpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKCp0aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAg
LTU0Miw3ICs1NDIsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZQogICAgIHNlbGVjdGlvblJl
Y3Quc2V0V2lkdGgoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChhZnRlcldpZHRoIC0gYmVmb3Jl
V2lkdGgpKTsKIH0KIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykg
Y29uc3QKK2Zsb2F0IEZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhU
ZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lz
KSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC01NjUsNyArNTY1LDcg
QEAgZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnIKICAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7CiB9
CiAKLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9h
dCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVu
LCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggMGJmMTRiZWY3OWJkM2FiMmZiNzNmNmM3
NTA4MDcyNmRhNDQxZTMxZC4uYTIyNDI5ODhjMDYwMzYzOGE5NjQzYmU5NzAyZjYzNmVhMzU2NDZl
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMTAwLDcg
KzEwMCw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkK
ICAgICBhcHBlbmRJdGVtKFNldE1pdGVyTGltaXQ6OmNyZWF0ZShtaXRlckxpbWl0KSk7CiB9CiAK
LXZvaWQgUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgc3RhcnRQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHN0YXJ0UG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCiB7
CiAgICAgRHJhd2luZ0l0ZW0mIG5ld0l0ZW0gPSBkb3duY2FzdDxEcmF3aW5nSXRlbT4oYXBwZW5k
SXRlbShEcmF3R2x5cGhzOjpjcmVhdGUoZm9udCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzLCBGbG9hdFBvaW50KCksIHRvRmxv
YXRTaXplKHN0YXJ0UG9pbnQpLCBzbW9vdGhpbmdNb2RlKSkpOwogICAgIHVwZGF0ZUl0ZW1FeHRl
bnQobmV3SXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBl
Yjk5YTNkZGEwMGQzMTcwY2ZjOGYwODZhNDAyOWNiYmNlMWNkM2E0Li41MmVhMTA2ZWRhODRlYWUw
ZmZlOWFjNWY3NDAwZjFlOTBjNTk1MDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwbHlGaWxsUGF0
dGVybigpOwogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
KTsKIAogICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CiAgICAgdm9pZCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovSGFyZkJ1enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCmluZGV4IDUyNTcwZWNlMzhlZTM4Yjc0MGQ4ZGY3
ZWM3YmEzYTRhMDUxNzcxZDMuLmJhOWU0MTFhNDQwYmY3OGVkYWM1NDM5ZjNkZTFjYjE3ZGY5ZmE2
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L0hhcmZCdXp6U2hhcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIYXJm
QnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OnNldEdseXBoQW5kUG9zaXRpb25zKHVuc2lnbmVkIGlu
ZGV4LCB1aW50MTZfdAogICAgIG1fb2Zmc2V0c1tpbmRleF0gPSBGbG9hdFBvaW50KG9mZnNldFgs
IG9mZnNldFkpOwogfQogCi1pbnQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0
ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRYKQordW5zaWduZWQgSGFyZkJ1enpTaGFw
ZXI6OkhhcmZCdXp6UnVuOjpjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9hdCB0YXJnZXRY
KQogewogICAgIEFTU0VSVCh0YXJnZXRYIDw9IG1fd2lkdGgpOwogICAgIGZsb2F0IGN1cnJlbnRY
ID0gMDsKQEAgLTE1Niw5ICsxNTYsOSBAQCBmbG9hdCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpS
dW46OnhQb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgcmV0dXJuIHBvc2l0
aW9uOwogfQogCi1zdGF0aWMgdm9pZCBub3JtYWxpemVDaGFyYWN0ZXJzKGNvbnN0IFRleHRSdW4m
IHJ1biwgVUNoYXIqIGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoKQorc3RhdGljIHZvaWQgbm9ybWFs
aXplQ2hhcmFjdGVycyhjb25zdCBUZXh0UnVuJiBydW4sIFVDaGFyKiBkZXN0aW5hdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIGludCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgcG9z
aXRpb24gPSAwOwogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICBjb25zdCBVQ2hhciogc291
cmNlOwogICAgIFN0cmluZyBzdHJpbmdGb3I4Qml0UnVuOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0
YXRpYyB2b2lkIG5vcm1hbGl6ZUNoYXJhY3RlcnMoY29uc3QgVGV4dFJ1biYgcnVuLCBVQ2hhciog
ZGVzdGluYXRpb24sIGludCBsZW5nCiAKICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHsK
ICAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0gICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQgbmV4dFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAg
ICAgIFUxNl9ORVhUKHNvdXJjZSwgbmV4dFBvc2l0aW9uLCBsZW5ndGgsIGNoYXJhY3Rlcik7CiAg
ICAgICAgIC8vIERvbid0IG5vcm1hbGl6ZSB0YWJzIGFzIHRoZXkgYXJlIG5vdCB0cmVhdGVkIGFz
IHNwYWNlcyBmb3Igd29yZC1lbmQuCiAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcikgJiYgY2hhcmFjdGVyICE9ICdcdCcpCkBAIC0yMDQsMTQgKzIwNCwxNCBA
QCBIYXJmQnV6elNoYXBlcjo6fkhhcmZCdXp6U2hhcGVyKCkKIHsKIH0KIAotc3RhdGljIHZvaWQg
bm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMoY29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIq
IGRlc3RpbmF0aW9uLCBpbnQgbGVuZ3RoLCBIYXJmQnV6elNoYXBlcjo6Tm9ybWFsaXplTW9kZSBu
b3JtYWxpemVNb2RlKQorc3RhdGljIHZvaWQgbm9ybWFsaXplU3BhY2VzQW5kTWlycm9yQ2hhcnMo
Y29uc3QgVUNoYXIqIHNvdXJjZSwgVUNoYXIqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBsZW5ndGgs
IEhhcmZCdXp6U2hhcGVyOjpOb3JtYWxpemVNb2RlIG5vcm1hbGl6ZU1vZGUpCiB7Ci0gICAgaW50
IHBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CiAgICAgYm9vbCBlcnJv
ciA9IGZhbHNlOwogICAgIC8vIEl0ZXJhdGUgY2hhcmFjdGVycyBpbiBzb3VyY2UgYW5kIG1pcnJv
ciBjaGFyYWN0ZXIgaWYgbmVlZGVkLgogICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewog
ICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKLSAgICAgICAgaW50IG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uOworICAgICAgICB1bnNpZ25lZCBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbjsKICAgICAg
ICAgVTE2X05FWFQoc291cmNlLCBuZXh0UG9zaXRpb24sIGxlbmd0aCwgY2hhcmFjdGVyKTsKICAg
ICAgICAgLy8gRG9uJ3Qgbm9ybWFsaXplIHRhYnMgYXMgdGhleSBhcmUgbm90IHRyZWF0ZWQgYXMg
c3BhY2VzIGZvciB3b3JkLWVuZAogICAgICAgICBpZiAoRm9udENhc2NhZGU6OnRyZWF0QXNTcGFj
ZShjaGFyYWN0ZXIpICYmIGNoYXJhY3RlciAhPSAnXHQnKQpAQCAtNDE3LDExICs0MTcsMTEgQEAg
Ym9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmIChVX0dFVF9HQ19NQVNLKGNoYXJhY3Rlcikg
JiBVX0dDX01fTUFTSykgewotICAgICAgICAgICAgICAgIGludCBtYXJrTGVuZ3RoID0gY2x1c3Rl
ckxlbmd0aDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBtYXJrTGVuZ3RoID0gY2x1c3Rlckxl
bmd0aDsKICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogbWFya0NoYXJhY3RlcnNFbmQgPSBp
dGVyYXRvci5jaGFyYWN0ZXJzKCkgKyBjbHVzdGVyTGVuZ3RoOwogICAgICAgICAgICAgICAgIHdo
aWxlIChtYXJrQ2hhcmFjdGVyc0VuZCA8IG5vcm1hbGl6ZWRCdWZmZXJFbmQpIHsKICAgICAgICAg
ICAgICAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgICAgICBp
bnQgbmV4dENoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG5leHRDaGFyYWN0ZXJMZW5ndGggPSAwOwogICAgICAgICAgICAgICAgICAgICBVMTZfTkVYVCht
YXJrQ2hhcmFjdGVyc0VuZCwgbmV4dENoYXJhY3Rlckxlbmd0aCwgbm9ybWFsaXplZEJ1ZmZlckVu
ZCAtIG1hcmtDaGFyYWN0ZXJzRW5kLCBuZXh0Q2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEoVV9HRVRfR0NfTUFTSyhuZXh0Q2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ2LDExICs0NDYsMTEgQEAgYm9vbCBI
YXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygpCiAgICAgICAgICAgICAgICAgbmV4
dFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7CiAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVyUG9z
aXRpb24gPSBpdGVyYXRvci5jaGFyYWN0ZXJzKCk7CiAgICAgICAgIH0KLSAgICAgICAgdW5zaWdu
ZWQgbnVtQ2hhcmFjdGVyc09mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIo
KSAtIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW47CisgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3Rl
cnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50SW5kZXgoKSAtIHN0YXJ0SW5kZXhPZkN1
cnJlbnRSdW47CiAgICAgICAgIGhiX3NjcmlwdF90IHNjcmlwdCA9IGhiX2ljdV9zY3JpcHRfdG9f
c2NyaXB0KGN1cnJlbnRTY3JpcHQpOwogICAgICAgICBtX2hhcmZCdXp6UnVucy5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxIYXJmQnV6elJ1bj4oY3VycmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZD
dXJyZW50UnVuLCBudW1DaGFyYWN0ZXJzT2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSwg
c2NyaXB0KSk7CiAgICAgICAgIGN1cnJlbnRGb250RGF0YSA9IG5leHRGb250RGF0YTsKLSAgICAg
ICAgc3RhcnRJbmRleE9mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsK
KyAgICAgICAgc3RhcnRJbmRleE9mQ3VycmVudFJ1biA9IGl0ZXJhdG9yLmN1cnJlbnRJbmRleCgp
OwogICAgIH0gd2hpbGUgKGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3Ro
KSk7CiAKICAgICByZXR1cm4gIW1faGFyZkJ1enpSdW5zLmlzRW1wdHkoKTsKQEAgLTY0MCw3ICs2
NDAsNyBAQCBpbnQgSGFyZkJ1enpTaGFwZXI6Om9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdl
dFgpCiAgICAgcmV0dXJuIGNoYXJhY3RlcnNTb0ZhcjsKIH0KIAotRmxvYXRSZWN0IEhhcmZCdXp6
U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0
LCBpbnQgZnJvbSwgaW50IHRvKQorRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxlY3Rpb25S
ZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bykKIHsKICAgICBmbG9hdCBjdXJyZW50WCA9IDA7CiAgICAgZmxvYXQgZnJvbVgg
PSAwOwpAQCAtNjUzLDE4ICs2NTMsMjIgQEAgRmxvYXRSZWN0IEhhcmZCdXp6U2hhcGVyOjpzZWxl
Y3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oYXJmQnV6elJ1bnMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKG1fcnVuLnJ0bCgpKQogICAgICAgICAgICAgY3VycmVudFggLT0gbV9oYXJmQnV6
elJ1bnNbaV0tPndpZHRoKCk7Ci0gICAgICAgIGludCBudW1DaGFyYWN0ZXJzID0gbV9oYXJmQnV6
elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKLSAgICAgICAgaWYgKCFmb3VuZEZyb21YICYmIGZy
b20gPj0gMCAmJiBmcm9tIDwgbnVtQ2hhcmFjdGVycykgeworICAgICAgICB1bnNpZ25lZCBudW1D
aGFyYWN0ZXJzID0gbV9oYXJmQnV6elJ1bnNbaV0tPm51bUNoYXJhY3RlcnMoKTsKKyAgICAgICAg
aWYgKCFmb3VuZEZyb21YICYmIGZyb20gPCBudW1DaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICBm
cm9tWCA9IG1faGFyZkJ1enpSdW5zW2ldLT54UG9zaXRpb25Gb3JPZmZzZXQoZnJvbSkgKyBjdXJy
ZW50WDsKICAgICAgICAgICAgIGZvdW5kRnJvbVggPSB0cnVlOwotICAgICAgICB9IGVsc2UKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChmcm9tID49IG51bUNoYXJhY3RlcnMp
OwogICAgICAgICAgICAgZnJvbSAtPSBudW1DaGFyYWN0ZXJzOworICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCFmb3VuZFRvWCAmJiB0byA+PSAwICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgeworICAg
ICAgICBpZiAoIWZvdW5kVG9YICYmIHRvIDwgbnVtQ2hhcmFjdGVycykgewogICAgICAgICAgICAg
dG9YID0gbV9oYXJmQnV6elJ1bnNbaV0tPnhQb3NpdGlvbkZvck9mZnNldCh0bykgKyBjdXJyZW50
WDsKICAgICAgICAgICAgIGZvdW5kVG9YID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodG8gPj0gbnVtQ2hhcmFjdGVycyk7CiAgICAg
ICAgICAgICB0byAtPSBudW1DaGFyYWN0ZXJzOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGZv
dW5kRnJvbVggJiYgZm91bmRUb1gpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBl
ci5oCmluZGV4IGJmNzZmMzE3ZTk4MWI1ZGY2Y2RjYTg1NGIwNDU5YTllYWQwYWRiOWEuLjY0ZDQw
YmU3MGVkYzlmYTgzNmVlYWE3OTAyZDFjMGEzOWFjZWY2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIu
aApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCBhZGp1c3RTdGFydFBv
aW50KGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICBmbG9hdCB0b3RhbFdpZHRoKCkgeyByZXR1cm4g
bV90b3RhbFdpZHRoOyB9CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGZsb2F0IHRhcmdldFgp
OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVp
Z2h0LCBpbnQgZnJvbSwgaW50IHRvKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdChjb25z
dCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwog
CiBwcml2YXRlOgogICAgIGNsYXNzIEhhcmZCdXp6UnVuIHsKQEAgLTcwLDcgKzcwLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgdm9pZCBzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwg
dWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zm
c2V0WSk7CiAgICAgICAgIHZvaWQgc2V0V2lkdGgoZmxvYXQgd2lkdGgpIHsgbV93aWR0aCA9IHdp
ZHRoOyB9CiAKLSAgICAgICAgaW50IGNoYXJhY3RlckluZGV4Rm9yWFBvc2l0aW9uKGZsb2F0IHRh
cmdldFgpOworICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRleEZvclhQb3NpdGlvbihmbG9h
dCB0YXJnZXRYKTsKICAgICAgICAgZmxvYXQgeFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCk7CiAKICAgICAgICAgY29uc3QgRm9udCogZm9udERhdGEoKSB7IHJldHVybiBtX2ZvbnRE
YXRhOyB9CkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgcHJpdmF0ZToKICAgICAgICAg
Y29uc3QgRm9udCogbV9mb250RGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9zdGFydEluZGV4Owot
ICAgICAgICBzaXplX3QgbV9udW1DaGFyYWN0ZXJzOworICAgICAgICB1bnNpZ25lZCBtX251bUNo
YXJhY3RlcnM7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzOwogICAgICAgICBUZXh0RGly
ZWN0aW9uIG1fZGlyZWN0aW9uOwogICAgICAgICBoYl9zY3JpcHRfdCBtX3NjcmlwdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuaAppbmRleCBhZTk2YWQxNzkxYTkwNzFkZWM5NzYzNjk4ZWIwOGY3MGMw
MWMxZjI0Li43ZGY0ZWZmZjMyYTRiNTA0OGQwNjI0YjAxOTBjNGNkNGVjNWMzYWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBt
YXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQq
PiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCiAg
ICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0
ZXIuCi0gICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSAwLCBHbHlw
aEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9u
dCo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CisgICAgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBH
bHlwaEJ1ZmZlciogPSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRp
YWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gbnVsbHB0cik7
CiAKICAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29v
cmRpbmF0ZS4KICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRl
UGFydGlhbEdseXBocyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGI1YmZmMjcxZjIzMTg3OTVlMmYxMTEyZmI1ODRmNmIw
MjNlYzg0ZTMuLmU4ZDczM2E0NDRmYzU2ZTcyNjY2MWQ2YzViMmJkZGE2MDYzZTdjNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
CkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5cGgo
SERDIGhkYywgR2x5cGggZ2x5cGgpCiB9CiAKIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUp
CisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKIHsKICAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogICAg
IGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3Ro
aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKaW5kZXggMjM5NmE0ZGVlM2RlZTE1MGU3MzY5ZjdlMTZhNDBkNTAwZjllYzllYi4uNjlm
YzljZDI1MGZmMDY3NjJkY2EzNDViYmMwYjY5YWViNmRkMDE1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApAQCAtNTAsNyArNTAsNyBA
QCBib29sIEZvbnRDYXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4
dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Q2FzY2FkZTo6
YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5
b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
CiB7CiAgICAgVW5pc2NyaWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwogICAgIGl0LmFkdmFu
Y2UoZnJvbSk7CkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNlbGVj
dGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlCiAgICAg
c2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwogfQogCi1m
bG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9u
dENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVm
ZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAg
aWYgKGZvclRleHRFbXBoYXNpcykgewogICAgICAgICAvLyBGSVhNRTogQWRkIGZvclRleHRFbXBo
YXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQgdXNlIGl0LgpAQCAtOTEs
NyArOTEsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21w
bGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcgogICAgIHJldHVybiBiZWZvcmVXaWR0
aDsKIH0KIAotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0
b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAg
IGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCmluZGV4IDIwOTM4YjFmNzQ0NzdhYWQ2MGM3
YjEwNGRjZjIwOWQ3ZmE0ZGZkMjYuLjQ1ZmRkN2YzMmJjYWVkZDJjNGNkZGNmNTljYmJmYWE5ZTM5
MzYyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMTM2
LDcgKzEzNiw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgLy8gRklYTUU6IFdoeSBp
cyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3Mg
YmVsb3cuCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdCh4KCkgKyBw
YWludE9mZnNldC54KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHJvb3RCb3guc2VsZWN0aW9u
VG9wKCksIDAsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4obV9zdHIsIHN0eWxlLCBBbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKTsKLSAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KHJ1biwgc2Vs
ZWN0aW9uUmVjdCwgMCwgLTEpOworICAgIGZvbnQuYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQo
cnVuLCBzZWxlY3Rpb25SZWN0KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHNXaXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKSwgYyk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmMzJhMGIzYjNlNTZi
ZjU3OWVhMDVkMzkxNzA2MDlkZjI5MDliMDlkLi5iOGE1YTUyZmVkNGY0M2ZlMmE1ODBiODc2ZGY3
ZmI5ZDA4ZWYyZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCkBAIC0xMzAsMjEgKzEzMCwyNiBAQCBMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVj
dGlvbkhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25IZWlnaHQoKTsK
IH0KIAotYm9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVu
ZFBvcykgY29uc3QKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFy
dFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3RkOjptYXgo
c3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAt
IG1fc3RhcnQsIHN0YXRpY19jYXN0PGludD4obV9sZW4pKTsKLSAgICByZXR1cm4gKHNQb3MgPCBl
UG9zKTsKKyAgICBpbnQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3RhcnRQb3MpOworICAgIGludCBl
UG9zID0gY2xhbXBlZE9mZnNldChlbmRQb3MpOworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNzg2CisgICAgLy8gV2Ugc2hvdWxkIG9ubHkg
YmUgY2hlY2tpbmcgaWYgc1BvcyA+PSBlUG9zIGhlcmUsIGJlY2F1c2UgdGhvc2UgYXJlIHRoZQor
ICAgIC8vIGluZGljZXMgdXNlZCB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgc2VsZWN0aW9uIHJl
Y3QuIEFsbG93aW5nIHVzIHBhc3QgdGhpcyBndWFyZAorICAgIC8vIG9uIGFueSBvdGhlciBjb25k
aXRpb24gY3JlYXRlcyB6ZXJvLXdpZHRoIHNlbGVjdGlvbiByZWN0cy4KKyAgICByZXR1cm4gc1Bv
cyA8IGVQb3MgfHwgKHN0YXJ0UG9zID09IGVuZFBvcyAmJiBzdGFydFBvcyA+PSBzdGFydCgpICYm
IHN0YXJ0UG9zIDw9IChzdGFydCgpICsgbGVuKCkpKTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUo
KTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbkJvdGgpIHsKLSAgICAgICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgIHJlbmRlcmVyKCkuc2VsZWN0aW9u
U3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBhZnRl
ciBhIGhhcmQgbGluZSBicmVhayBpcyBjb25zaWRlcmVkIHRvIGJlIHBhc3QgaXRzIGVuZC4KLSAg
ICAgICAgaW50IGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJyZWFr
KCkgPyAxIDogMCk7CisgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVuKCkgPj0gKGlzTGluZUJy
ZWFrKCkgPyAxIDogMCkpOworICAgICAgICB1bnNpZ25lZCBsYXN0U2VsZWN0YWJsZSA9IHN0YXJ0
KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwogCiAgICAgICAgIGJvb2wgc3Rh
cnQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgc3RhcnRQb3MgPj0g
bV9zdGFydCAmJiBzdGFydFBvcyA8IG1fc3RhcnQgKyBtX2xlbik7CiAgICAgICAgIGJvb2wgZW5k
ID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgJiYgZW5kUG9zID4gbV9z
dGFydCAmJiBlbmRQb3MgPD0gbGFzdFNlbGVjdGFibGUpOwpAQCAtMTY1LDggKzE3MCw4IEBAIFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUo
KQogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiAmJiByb290KCkuZWxsaXBz
aXNCb3goKSkgewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXMgPSByb290KCkuZWxsaXBz
aXNCb3goKTsKICAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZSkgewotICAgICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0OwotICAgICAgICAgICAgaW50IHNl
bGVjdGlvbkVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgICAg
ICAgICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kOwogICAgICAgICAgICAgc3RkOjp0aWUoc2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogICAgICAgICAg
ICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVkIGlm
IHRoZSBlbmQgb2YKICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0aGUKQEAgLTE5MSwxMiArMTk2LDE2IEBAIHN0
YXRpYyBjb25zdCBGb250Q2FzY2FkZSYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgY29uc3QgUmVuZGVyVGV4dCYKICAgICByZXR1cm4gc3R5bGUuZm9udENhc2NhZGUoKTsKIH0K
IAotTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0
UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsK
LSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7Ci0gICAgaW50
IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKLSAgICAKLSAg
ICBpZiAoc1BvcyA+IGVQb3MpCisgICAgdW5zaWduZWQgc1BvcyA9IGNsYW1wZWRPZmZzZXQoc3Rh
cnRQb3MpOworICAgIHVuc2lnbmVkIGVQb3MgPSBjbGFtcGVkT2Zmc2V0KGVuZFBvcyk7CisKKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDc4
NgorICAgIC8vIFdlIHNob3VsZCBvbmx5IGJlIGNoZWNraW5nIGlmIHNQb3MgPj0gZVBvcyBoZXJl
LCBiZWNhdXNlIHRob3NlIGFyZSB0aGUKKyAgICAvLyBpbmRpY2VzIHVzZWQgdG8gYWN0dWFsbHkg
Z2VuZXJhdGUgdGhlIHNlbGVjdGlvbiByZWN0LiBBbGxvd2luZyB1cyBwYXN0IHRoaXMgZ3VhcmQK
KyAgICAvLyBvbiBhbnkgb3RoZXIgY29uZGl0aW9uIGNyZWF0ZXMgemVyby13aWR0aCBzZWxlY3Rp
b24gcmVjdHMuCisgICAgaWYgKHNQb3MgPj0gZVBvcyAmJiAhKHN0YXJ0UG9zID09IGVuZFBvcyAm
JiBzdGFydFBvcyA+PSBzdGFydCgpICYmIHN0YXJ0UG9zIDw9IChzdGFydCgpICsgbGVuKCkpKSkK
ICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIExheW91dFVuaXQgc2VsZWN0aW9u
VG9wID0gdGhpcy0+c2VsZWN0aW9uVG9wKCk7CkBAIC0yMTIsNyArMjIxLDcgQEAgTGF5b3V0UmVj
dCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKSBjb25zdAogCiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChM
YXlvdXRQb2ludChsb2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25Ub3ApLCBMYXlvdXRTaXplKG1fbG9n
aWNhbFdpZHRoLCBzZWxlY3Rpb25IZWlnaHQpKTsKICAgICAvLyBBdm9pZCBjb21wdXRpbmcgdGhl
IGZvbnQgd2lkdGggd2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9w
dGltaXphdGlvbi4KLSAgICBpZiAoc1BvcyB8fCBlUG9zICE9IHN0YXRpY19jYXN0PGludD4obV9s
ZW4pKQorICAgIGlmIChzUG9zIHx8IGVQb3MgIT0gbV9sZW4pCiAgICAgICAgIGZvbnQuYWRqdXN0
U2VsZWN0aW9uUmVjdEZvclRleHQodGV4dFJ1biwgc2VsZWN0aW9uUmVjdCwgc1BvcywgZVBvcyk7
CiAgICAgSW50UmVjdCBzbmFwcGVkU2VsZWN0aW9uUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2Vs
ZWN0aW9uUmVjdCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBzbmFwcGVkU2VsZWN0
aW9uUmVjdC53aWR0aCgpOwpAQCAtNTA4LDE4ICs1MTcsMTggQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LAogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBh
bHRlcm5hdGVTdHJpbmdUb1JlbmRlcik7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5s
ZW5ndGgoKTsKIAotICAgIGludCBzZWxlY3Rpb25TdGFydCA9IDA7Ci0gICAgaW50IHNlbGVjdGlv
bkVuZCA9IDA7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSAwOworICAgIHVuc2lnbmVk
IHNlbGVjdGlvbkVuZCA9IDA7CiAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgKHBhaW50U2VsZWN0
ZWRUZXh0T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpKQogICAgICAgICBzdGQ6
OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7
CiAKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgc2Vs
ZWN0aW9uU3RhcnQgPSBzdGQ6Om1pbjxpbnQ+KHNlbGVjdGlvblN0YXJ0LCBtX3RydW5jYXRpb24p
OwotICAgICAgICBzZWxlY3Rpb25FbmQgPSBzdGQ6Om1pbjxpbnQ+KHNlbGVjdGlvbkVuZCwgbV90
cnVuY2F0aW9uKTsKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBzdGQ6Om1pbihzZWxlY3Rpb25T
dGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOworICAgICAgICBzZWxl
Y3Rpb25FbmQgPSBzdGQ6Om1pbihzZWxlY3Rpb25FbmQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3RydW5jYXRpb24pKTsKICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwogICAgIH0KIAot
ICAgIGludCBlbXBoYXNpc01hcmtPZmZzZXQgPSAwOworICAgIGZsb2F0IGVtcGhhc2lzTWFya09m
ZnNldCA9IDA7CiAgICAgYm9vbCBlbXBoYXNpc01hcmtBYm92ZTsKICAgICBib29sIGhhc1RleHRF
bXBoYXNpcyA9IGVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUobGluZVN0eWxlLCBlbXBoYXNp
c01hcmtBYm92ZSk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmsgPSBoYXNU
ZXh0RW1waGFzaXMgPyBsaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpIDogbnVsbEF0
b207CkBAIC01ODcsMjAgKzU5NiwyNSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgICAg
IGNvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsK
IH0KIAotc3RkOjpwYWlyPGludCwgaW50PiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVu
ZCgpIGNvbnN0Cit1bnNpZ25lZCBJbmxpbmVUZXh0Qm94OjpjbGFtcGVkT2Zmc2V0KHVuc2lnbmVk
IHgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0ZDo6bWluKHgsIHN0YXJ0KCkgKyBs
ZW4oKSksIHN0YXJ0KCkpIC0gc3RhcnQoKTsKK30KKworc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4gSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdAogewogICAgIGF1
dG8gc2VsZWN0aW9uU3RhdGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7CiAgICAgaWYg
KHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKQogICAgICAg
ICByZXR1cm4geyAwLCBtX2xlbiB9OwogICAgIAotICAgIGludCBzdGFydDsKLSAgICBpbnQgZW5k
OworICAgIHVuc2lnbmVkIHN0YXJ0OworICAgIHVuc2lnbmVkIGVuZDsKICAgICByZW5kZXJlcigp
LnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigp
LnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbkVuZCkKICAgICAgICAgc3RhcnQgPSAwOwotICAgIHJldHVybiB7IHN0ZDo6
bWF4KHN0YXJ0IC0gbV9zdGFydCwgMCksIHN0ZDo6bWluPGludD4oZW5kIC0gbV9zdGFydCwgbV9s
ZW4pIH07CisgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChzdGFydCksIGNsYW1wZWRPZmZzZXQo
ZW5kKSB9OwogfQogCiB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBDb2xvciB0ZXh0Q29sb3Ip
CkBAIC02MTAsOCArNjI0LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBzZWxlY3Rpb24gdG8gcGFpbnQgYXQgYWxs
LgotICAgIGludCBzZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgc2VsZWN0aW9uRW5kOworICAgIHVu
c2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkVuZDsKICAgICBz
dGQ6OnRpZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKSA9IHNlbGVjdGlvblN0YXJ0RW5k
KCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID49IHNlbGVjdGlvbkVuZCkKICAgICAgICAgcmV0
dXJuOwpAQCAtNjM0LDcgKzY0OCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rp
b24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRp
b24gOiBsZW4oKTsKIAogICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nOwotICAgIGJvb2wgcmVz
cGVjdEh5cGhlbiA9IHNlbGVjdGlvbkVuZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkgJiYg
aGFzSHlwaGVuKCk7CisgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2VsZWN0aW9uRW5kID09IGxl
bmd0aCAmJiBoYXNIeXBoZW4oKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgaHlw
aGVuYXRlZFN0cmluZyA9IGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKHN0eWxlLCBsZW5ndGgp
OwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGh5cGhlbmF0
ZWRTdHJpbmcsIE9wdGlvbmFsPHVuc2lnbmVkPihsZW5ndGgpKTsKQEAgLTY2MCwxMSArNjc0LDEw
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAjZW5kaWYKIH0KIAotdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBj
b25zdCBGb250Q2FzY2FkZSYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2ln
bmVkIGVuZFBvcykKIHsKLSAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKLSAgICBpbnQgc2VsZWN0
aW9uU3RhcnQgPSBzdGQ6Om1heChzdGFydFBvcyAtIG9mZnNldCwgMCk7Ci0gICAgaW50IHNlbGVj
dGlvbkVuZCA9IHN0ZDo6bWluPGludD4oZW5kUG9zIC0gb2Zmc2V0LCBtX2xlbik7CisgICAgdW5z
aWduZWQgc2VsZWN0aW9uU3RhcnQgPSBjbGFtcGVkT2Zmc2V0KHN0YXJ0UG9zKTsKKyAgICB1bnNp
Z25lZCBzZWxlY3Rpb25FbmQgPSBjbGFtcGVkT2Zmc2V0KGVuZFBvcyk7CiAgICAgaWYgKHNlbGVj
dGlvblN0YXJ0ID49IHNlbGVjdGlvbkVuZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC03NTYsNyAr
NzY5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2kKIAogICAgIC8vIERldGVybWluZSB3aGV0
aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9vbCBtYXJrZXJTcGFuc1dob2xlQm94
ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydCA8PSAoaW50KW1hcmtlci5zdGFydE9mZnNldCgpKQor
ICAgIGlmIChtX3N0YXJ0IDw9IG1hcmtlci5zdGFydE9mZnNldCgpKQogICAgICAgICBtYXJrZXJT
cGFuc1dob2xlQm94ID0gZmFsc2U7CiAgICAgaWYgKChlbmQoKSArIDEpICE9IG1hcmtlci5lbmRP
ZmZzZXQoKSkgLy8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAogICAg
ICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CkBAIC03NjUsMTEgKzc3OCwxMSBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaQogCiAgICAgYm9vbCBpc0RpY3RhdGlvbk1hcmtlciA9IG1h
cmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKICAg
ICBpZiAoIW1hcmtlclNwYW5zV2hvbGVCb3ggfHwgZ3JhbW1hciB8fCBpc0RpY3RhdGlvbk1hcmtl
cikgewotICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLnN0
YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3Rk
OjptaW48aW50PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KG1hcmtlci5zdGFydE9mZnNl
dCgpKTsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBjbGFtcGVkT2Zmc2V0KG1hcmtl
ci5lbmRPZmZzZXQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNO
b1RydW5jYXRpb24pCi0gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4oZW5k
UG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7CisgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6
bWluKGVuZFBvc2l0aW9uLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90cnVuY2F0aW9uKSk7CiAK
ICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0ICYgd2lkdGgKICAgICAgICAgaW50IGRlbHRhWSA9
IHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rp
b25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20oKSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRv
cCgpOwpAQCAtODE4LDggKzgzMSw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0
Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiAgICAgTGF5
b3V0VW5pdCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9w
KCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlv
dXRSZWN0KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVksIDAsIHRoaXMtPnNl
bGVjdGlvbkhlaWdodCgpKTsKIAotICAgIGludCBzUG9zID0gc3RkOjptYXg8aW50PihtYXJrZXIu
c3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9zID0gc3RkOjptaW48aW50
PihtYXJrZXIuZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCBtX2xlbik7CisgICAgdW5zaWduZWQgc1Bv
cyA9IGNsYW1wZWRPZmZzZXQobWFya2VyLnN0YXJ0T2Zmc2V0KCkpOworICAgIHVuc2lnbmVkIGVQ
b3MgPSBjbGFtcGVkT2Zmc2V0KG1hcmtlci5lbmRPZmZzZXQoKSk7CiAgICAgVGV4dFJ1biBydW4g
PSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlKTsKICAgICBmb250LmFkanVzdFNlbGVjdGlvblJlY3RG
b3JUZXh0KHJ1biwgc2VsZWN0aW9uUmVjdCwgc1BvcywgZVBvcyk7CiAKQEAgLTk4NSwxOCArOTk4
LDE4IEBAIGludCBJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCBsaW5lT2Zm
c2V0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzCiAgICAgcmV0dXJuIGZvbnQub2Zmc2V0Rm9y
UG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUpLCBsaW5lT2Zmc2V0IC0gbG9naWNh
bExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1mbG9hdCBJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAorZmxvYXQgSW5saW5lVGV4dEJv
eDo6cG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VS
VChvZmZzZXQgPj0gbV9zdGFydCk7Ci0gICAgQVNTRVJUKG9mZnNldCA8PSBtX3N0YXJ0ICsgbV9s
ZW4pOworICAgIEFTU0VSVChvZmZzZXQgPD0gbV9zdGFydCArIGxlbigpKTsKIAogICAgIGlmIChp
c0xpbmVCcmVhaygpKQogICAgICAgICByZXR1cm4gbG9naWNhbExlZnQoKTsKIAogICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwotICAg
IGludCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQg
OiAwOwotICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9m
ZnNldCAtIG1fc3RhcnQ7CisgICAgdW5zaWduZWQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBjbGFtcGVkT2Zmc2V0KG9mZnNldCkgOiAwOworICAgIHVuc2lnbmVkIHRvID0gIWlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogY2xhbXBlZE9mZnNldChvZmZzZXQpOwog
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAgICBM
YXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KGxvZ2ljYWxMZWZ0KCksIDAsIDAs
IDApOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggNjdiNjM0YmE1NzhjMzgw
ZjcwOWIyMzFjYTZiMzE4OTg3MzU2OTRiZC4uNzIzNmY2MDJhYTY2MTM2MWIzNzQ3Y2EwNjMxNThk
NDUzMmJjYzBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBA
IC00MiwxMSArNDIsNiBAQCBjbGFzcyBJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZUJveCB7
CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW5saW5lVGV4dEJveChSZW5kZXJUZXh0JiByZW5kZXJl
cikKICAgICAgICAgOiBJbmxpbmVCb3gocmVuZGVyZXIpCi0gICAgICAgICwgbV9wcmV2VGV4dEJv
eChudWxscHRyKQotICAgICAgICAsIG1fbmV4dFRleHRCb3gobnVsbHB0cikKLSAgICAgICAgLCBt
X3N0YXJ0KDApCi0gICAgICAgICwgbV9sZW4oMCkKLSAgICAgICAgLCBtX3RydW5jYXRpb24oY05v
VHJ1bmNhdGlvbikKICAgICB7CiAgICAgICAgIHNldEJlaGF2ZXNMaWtlVGV4dCh0cnVlKTsKICAg
ICB9CkBAIC02OSw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXJ0KHVuc2lnbmVk
IHN0YXJ0KSB7IG1fc3RhcnQgPSBzdGFydDsgfQogICAgIHZvaWQgc2V0TGVuKHVuc2lnbmVkIGxl
bikgeyBtX2xlbiA9IGxlbjsgfQogCi0gICAgdm9pZCBvZmZzZXRSdW4oaW50IGQpIHsgQVNTRVJU
KCFpc0RpcnR5KCkpOyBtX3N0YXJ0ICs9IGQ7IH0KKyAgICB2b2lkIG9mZnNldFJ1bihpbnQgZCkg
eyBBU1NFUlQoIWlzRGlydHkoKSk7IEFTU0VSVChkID4gMCB8fCBtX3N0YXJ0ID49IHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtZCkpOyBtX3N0YXJ0ICs9IGQ7IH0KIAogICAgIHVuc2lnbmVkIHNob3J0
IHRydW5jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3RydW5jYXRpb247IH0KIApAQCAtMTIwLDkg
KzExNSw5IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5k
YXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRo
KCksIGhlaWdodCgpKTsgfQogCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9u
UmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0OwotICAgIGJvb2wgaXNTZWxlY3Rl
ZChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0OwotICAgIHN0ZDo6cGFpcjxpbnQsIGlu
dD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0
OworICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFy
dEVuZCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90
dG9tKSBvdmVycmlkZTsKQEAgLTE1NSwxMiArMTUwLDEzIEBAIHByaXZhdGU6CiAKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZv
ck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9y
T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBh
aW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYsIGlu
dCBzdGFydFBvcywgaW50IGVuZFBvcyk7CisgICAgdm9pZCBwYWludENvbXBvc2l0aW9uQmFja2dy
b3VuZChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udENhc2NhZGUmLCB1bnNpZ25lZCBzdGFydFBvcywgdW5z
aWduZWQgZW5kUG9zKTsKICAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250Q2FzY2FkZSYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBv
c2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICB1bnNpZ25lZCBjbGFtcGVk
T2Zmc2V0KHVuc2lnbmVkKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHBhaW50RGVjb3Jh
dGlvbihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGb250Q2FzY2FkZSYsIFJlbmRlckNvbWJpbmVU
ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0
IEZsb2F0UmVjdCYgYm94UmVjdCwKQEAgLTE3MywxNSArMTY5LDE1IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGJlaGF2ZXNMaWtlVGV4dCgpIGNvbnN0ID0gZGVsZXRlOwogCi0gICAgSW5saW5lVGV4
dEJveCogbV9wcmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBv
dXIgUmVuZGVyT2JqZWN0Ci0gICAgSW5saW5lVGV4dEJveCogbV9uZXh0VGV4dEJveDsgLy8gVGhl
IG5leHQgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKKyAgICBJbmxpbmVUZXh0
Qm94KiBtX3ByZXZUZXh0Qm94IHsgbnVsbHB0ciB9OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQg
YWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKKyAgICBJbmxpbmVUZXh0Qm94KiBtX25leHRUZXh0
Qm94IHsgbnVsbHB0ciB9OyAvLyBUaGUgbmV4dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRl
ck9iamVjdAogCi0gICAgaW50IG1fc3RhcnQ7Ci0gICAgdW5zaWduZWQgc2hvcnQgbV9sZW47Cisg
ICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBzaG9ydCBtX2xlbiB7IDAg
fTsKIAogICAgIC8vIFdoZXJlIHRvIHRydW5jYXRlIHdoZW4gdGV4dCBvdmVyZmxvdyBpcyBhcHBs
aWVkLiBXZSB1c2Ugc3BlY2lhbCBjb25zdGFudHMgdG8KICAgICAvLyBkZW5vdGUgbm8gdHJ1bmNh
dGlvbiAodGhlIHdob2xlIHJ1biBwYWludHMpIGFuZCBmdWxsIHRydW5jYXRpb24gKG5vdGhpbmcg
cGFpbnRzIGF0IGFsbCkuCi0gICAgdW5zaWduZWQgc2hvcnQgbV90cnVuY2F0aW9uOworICAgIHVu
c2lnbmVkIHNob3J0IG1fdHJ1bmNhdGlvbiB7IGNOb1RydW5jYXRpb24gfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IGNkZTYwN2NmNWFjZjFhZmY5NWZhNjBjODI1ZmFhZTBhZmZkNzkxNTIuLmQyNjRkMmE5
NzY0YWQyNTM3YjM3YTM3MzE4NmZjOTYyMWI1YTU5NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMzQ4OSw3ICszNDg5LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvaW50JgogICAgIH0KIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxh
dGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IDMxNTIyMzU1NTExNGJhMjk4ZWY4OTJhNWMwY2Zi
NWU3NWNjMzhiZTUuLjMyM2QxNzBkZmVhNWQwODZkNzk3ZjVmMTQ4NTBjYjlhNjYzMzNmZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC00NzYsNyArNDc2LDcgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSA9IDApIGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGlu
ZSA9IDApIGZpbmFsOwogICAgIAogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1
YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwog
ICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRXaXRoSW5saW5lQ2hp
bGRyZW4oY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJSZWdpb24qKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggODFiMGFkNjc4ODhhNTcwNThjMWJjYWYy
ZDc5OThlNzhmMGM3ZmM1Ny4uZWFlNzJiYTJjMzQ1Y2Q5YmI3OTVhYmJiMGUyMGI4ZGNkMjA2MjFl
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQzODMsNyArNDM4
Myw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBs
YWNlZChMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1CiAgICAgY29tcHV0ZWRWYWx1ZXMubV9wb3Np
dGlvbiA9IGxvZ2ljYWxUb3BQb3M7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94Ojpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXRzIGlu
c2lkZSBjb250YWluZXJzIGVpdGhlciBhKSByZWZlciB0byB0aGUgcG9zaXRpb25zIGJlZm9yZS9h
ZnRlcgogICAgIC8vIHRob3NlIGNvbnRhaW5lcnMgKHRhYmxlcyBhbmQgc2VsZWN0IGVsZW1lbnRz
KSBvciBiKSByZWZlciB0byB0aGUgcG9zaXRpb24gaW5zaWRlIGFuIGVtcHR5IGJsb2NrLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDAzODMwYzdhODM3NjNkNWMzMTliYjI3
ZmQwNmFhNDc3YjUzMWM4NzYuLmM2MDE3ZDhkZjkxYWQ4YmMxYWRiYTIwNDE4ZmQwNTVhOGRlYTQ3
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTQ4MSw3ICs0ODEsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNVbnNwbGl0dGFibGVTY3JvbGxpbmdPdmVyZmxvdygpIGNv
bnN0OwogICAgIGJvb2wgaXNVbnNwbGl0dGFibGVGb3JQYWdpbmF0aW9uKCkgY29uc3Q7CiAKLSAg
ICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwg
TGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7Cisg
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9m
ZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlclJlZ2lvbiosIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFBhaW50UGhhc2UgPSBQYWludFBo
YXNlQmxvY2tCYWNrZ3JvdW5kKTsKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgb3ZlcmZsb3dDbGlw
UmVjdEZvckNoaWxkTGF5ZXJzKGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyUmVn
aW9uKiByZWdpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgeyBy
ZXR1cm4gb3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgcmVnaW9uLCByZWxldmFuY3kpOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGRiYjQ4M2Q2OWYy
NjYxZDM5MGRmNTFhNWY4ZjExMGExMDA1YjQ3MDYuLmFkYWI2NDg1Y2FkY2EyMWM2ZTU0Mzg0N2Rj
YjEyMjQ3YjAyZTE5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQpCiAgICAgfQogfQogCi1MYXlvdXRSZWN0IFJl
bmRlcklubGluZTo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQorTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCwgTGF5b3V0VW5p
dCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIGlmIChmaXJzdENoaWxkKCkpIHsKICAg
ICAgICAgLy8gVGhpcyBjb25kaXRpb24gaXMgcG9zc2libGUgaWYgdGhlIFJlbmRlcklubGluZSBp
cyBhdCBhbiBlZGl0aW5nIGJvdW5kYXJ5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5oCmluZGV4IDVjZWFmYzJkOGEyZmZjMzdhMzNlMTdjNGIyNmUyYWU5NzlmODYzNmYuLjAw
YmM5ZWMxZDQwNDkyODBhZmE0MGU0ZjgwOWQyNzlmY2E4MDdjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0QWx3YXlzQ3JlYXRlTGluZUJveGVzKCkgeyBzZXRSZW5kZXJJbmxpbmVBbHdheXNDcmVh
dGVzTGluZUJveGVzKHRydWUpOyB9CiAgICAgdm9pZCB1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94
ZXMoYm9vbCBmdWxsTGF5b3V0KTsKIAotICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5s
aW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIGZpbmFsOwor
ICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQsIExheW91
dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgZmluYWw7CiAKICAgICBib29sIGhpdFRlc3RD
dWxsZWRJbmxpbmUoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQnJlYWsuY3BwCmluZGV4IDFjZDk2MzRiYWU0MDBiODU4ZGY2ZmVmYWEzMTc1NDU2YjExOGFm
NmMuLmI4YzIzNThkMTU3ZGRiMmNjMjhhMTM2NzJiOGNhMWM3ZDAxYjU4NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCkBAIC0xNjYsNyArMTY2LDcg
QEAgdm9pZCBSZW5kZXJMaW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRl
IHN0YXRlKQogICAgIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hp
bGRyZW4oc3RhdGUgIT0gU2VsZWN0aW9uTm9uZSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGlu
ZUJyZWFrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zm
c2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRl
ckxpbmVCcmVhazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIHVuc2lnbmVk
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChjYXJldE9mZnNldCwgIWNhcmV0T2Zmc2V0KTsKICAgICBBU1NFUlRfVU5V
U0VEKGlubGluZUJveCwgaW5saW5lQm94ID09IG1faW5saW5lQm94V3JhcHBlcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKaW5kZXggMTFmZDNiZDkyMTc0OTc2
MzZkMGNhNjAxMTQyOTgyNTk0MjJiMTIzNi4uOTcwN2NkMTZlNTgzNmE3ODFmZmQ2NTM1MDJmMzA4
M2ZiMTJmYTE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
aApAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIGludCBjYXJldE1pbk9mZnNldCgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVu
aXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0
YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlkZTsKIAogICAgIExheW91dFVuaXQgbGluZUhlaWdo
dChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNv
bnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApp
bmRleCAwZWI4YWQ2MTg0YTk3NjM0MjM5M2M2NzNhMzJiMzAyMjIxMTEyMjZjLi5hYzMxMjI2MjYw
NGEyZDNlMTRhMWJjZTVjM2JkZTdlMWRkZWU1N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgU2VsZWN0aW9uU3VidHJl
ZVJvb3QmIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9vdCgpIGNvbnN0CiAgICAgcmV0dXJuIHZp
ZXcoKTsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Bv
cywgaW50JiBlcG9zKSBjb25zdAordm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5k
KHVuc2lnbmVkJiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3QKIHsKICAgICBzZWxlY3Rpb25S
b290KCkuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25zKHNwb3MsIGVw
b3MpOwogfQpAQCAtMTM3Nyw3ICsxMzc3LDcgQEAgTGF5b3V0U2l6ZSBSZW5kZXJPYmplY3Q6Om9m
ZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJFbGVtZW50JiBjb250YWluZXIpIGMKICAg
ICByZXR1cm4gb2Zmc2V0OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJl
dFJlY3QoSW5saW5lQm94KiwgaW50LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUp
CitMYXlvdXRSZWN0IFJlbmRlck9iamVjdDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5z
aWduZWQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKIHsKICAgICBpZiAoZXh0
cmFXaWR0aFRvRW5kT2ZMaW5lKQogICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBjNmM2YzNmZWU1ZTI2
NTA4YzMxOTZiOTMwYmM0NjNjNzZhN2I2M2FjLi40MTE2YTUwYjBmYTBkNzI5MDE4ZTk3MWY1NDQ0
NTljMDNlODhjNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBA
IC03NDksNyArNzQ5LDcgQEAgcHVibGljOgogICAgICAqIEBwYXJhbSBleHRyYVdpZHRoVG9FbmRP
ZkxpbmUgb3B0aW9uYWwgb3V0IGFyZyB0byBnaXZlIGV4dHJhIHdpZHRoIHRvIGVuZCBvZiBsaW5l
IC0KICAgICAgKiB1c2VmdWwgZm9yIGNoYXJhY3RlciByYW5nZSByZWN0IGNvbXB1dGF0aW9ucwog
ICAgICAqLwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
LCBpbnQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51
bGxwdHIpOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gq
LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0gbnVsbHB0cik7CiAKICAgICAvLyBXaGVuIHBlcmZvcm1pbmcgYSBnbG9iYWwgZG9jdW1lbnQg
dGVhci1kb3duLCB0aGUgcmVuZGVyZXIgb2YgdGhlIGRvY3VtZW50IGlzIGNsZWFyZWQuICBXZSB1
c2UgdGhpcwogICAgIC8vIGFzIGEgaG9vayB0byBkZXRlY3QgdGhlIGNhc2Ugb2YgZG9jdW1lbnQg
ZGVzdHJ1Y3Rpb24gYW5kIGRvbid0IHdhc3RlIHRpbWUgZG9pbmcgdW5uZWNlc3Nhcnkgd29yay4K
QEAgLTc4Miw3ICs3ODIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdl
ZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAKICAgICBT
ZWxlY3Rpb25TdWJ0cmVlUm9vdCYgc2VsZWN0aW9uUm9vdCgpIGNvbnN0OwotICAgIHZvaWQgc2Vs
ZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBpbnQmIGVwb3MpIGNvbnN0OworICAgIHZvaWQgc2Vs
ZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNwb3MsIHVuc2lnbmVkJiBlcG9zKSBjb25zdDsKICAg
ICAKICAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYWEyYzM0Y2I2YWFjM2RjNzhkNjcxNGQ2M2Jh
NzViMGI3YTU0YjgzYi4uMGJmYjRiYTc5MDViMjcwMDk1M2YxYjY5ZWJhNDQ0M2ViY2QwODNiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC02MTYs
MTggKzYxNiwxOCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKCkgY29uc3QKICAg
ICBpZiAocyA9PSBTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aW50IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7CisgICAgdW5zaWduZWQgc2VsZWN0aW9u
U3RhcnQsIHNlbGVjdGlvbkVuZDsKICAgICBzZWxlY3Rpb25TdGFydEVuZChzZWxlY3Rpb25TdGFy
dCwgc2VsZWN0aW9uRW5kKTsKICAgICBpZiAocyA9PSBTZWxlY3Rpb25TdGFydCkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7CiAgICAgICAgIAotICAgIGludCBlbmQgPSBlbGVt
ZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAx
OworICAgIHVuc2lnbmVkIGVuZCA9IGVsZW1lbnQoKS0+aGFzQ2hpbGROb2RlcygpID8gZWxlbWVu
dCgpLT5jb3VudENoaWxkTm9kZXMoKSA6IDE7CiAgICAgaWYgKHMgPT0gU2VsZWN0aW9uRW5kKQog
ICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBpZiAocyA9PSBTZWxlY3Rp
b25Cb3RoKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxlY3Rpb25F
bmQgPT0gZW5kOwogICAgICAgICAKLSAgICBBU1NFUlQoMCk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAKaW5kZXggMDI4ODZiYjgwZmMzNGViNGU0M2RkMGFjZDNkOWZmN2FlMDJhMTcz
My4uZDNmYmU3Yzg1OTMxNzlhOTk1MDRkYjUwMWRmZjE2MjcwNWM3NzkzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtNDQyLDcgKzQ0Miw3IEBAIFZpc2libGVQ
b3NpdGlvbiBSZW5kZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBw
b2ludCwgY29uc3QgUmVuCiAgICAgcmV0dXJuIG1fbGluZUJveGVzLnBvc2l0aW9uRm9yUG9pbnQo
KnRoaXMsIHBvaW50KTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRy
YVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0
KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIGlmICghaW5saW5lQm94KQogICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOwpAQCAtMTM3MiwxMyArMTM3MiwxMiBAQCBMYXlvdXRSZWN0IFJl
bmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJM
YXllck1vZGVsTwogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkK
ICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICBSZW5kZXJCbG9jayogY2IgPSBjb250
YWluaW5nQmxvY2soKTsKLSAgICBpZiAoIWNiKQorICAgIGlmICghY29udGFpbmluZ0Jsb2NrKCkp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0
YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNs
dWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICBpbnQgc3RhcnRQb3MsIGVuZFBv
czsKKyAgICB1bnNpZ25lZCBzdGFydFBvcywgZW5kUG9zOwogICAgIGlmIChzZWxlY3Rpb25TdGF0
ZSgpID09IFNlbGVjdGlvbkluc2lkZSkgewogICAgICAgICAvLyBXZSBhcmUgZnVsbHkgc2VsZWN0
ZWQuCiAgICAgICAgIHN0YXJ0UG9zID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCmluZGV4IGQ2M2U2MDg5Y2RlNDAzN2M1NWU1ZjFjOGM2MjI4MWU4YWNhNjJiYjQuLjFmYzhk
YzM5OWZjMzYyMDFkN2NlNTVlMDI2MDNiMjIyYTA4NmM5MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuaApAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGNh
bkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBmaW5hbDsKICAgICBMYXlvdXRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBvdmVy
cmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7
CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJl
dE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7
CiAKICAgICBMYXlvdXRSZWN0IGNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zp
c2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCmluZGV4IGQ5NDNmM2E1
ODFmZjBjYjVmNjE3NWJjZDk4MTRmNjQwNzU4NjBlZGQuLmU1OWYzZGU2MTYzMWRmM2MyM2NjZWEy
NjlmZTUyYmM5MmE5ZDc0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIFJlbmRlclRleHRM
aW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJP
YmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHN0YXJ0LCBlbmQ7Cisg
ICAgdW5zaWduZWQgc3RhcnQsIGVuZDsKICAgICByZW5kZXJlci5zZWxlY3Rpb25TdGFydEVuZChz
dGFydCwgZW5kKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFy
dCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggYThkZDcxOGQ4OGIzOTljYTlmOGViNzcwZTMy
MTJhNTBiMTRhZDljNi4uMWU3ZTJlY2MwYmFjMDE2NWQxNzBjYWU2YzJlNDJiOTNkZjFjZjFmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAtMTE4LDE5ICsxMTgs
NyBAQCBwcml2YXRlOgogUmVuZGVyVmlldzo6UmVuZGVyVmlldyhEb2N1bWVudCYgZG9jdW1lbnQs
IFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQsIFdU
Rk1vdmUoc3R5bGUpKQogICAgICwgbV9mcmFtZVZpZXcoKmRvY3VtZW50LnZpZXcoKSkKLSAgICAs
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KG51bGxwdHIpCi0gICAgLCBtX3NlbGVjdGlvblVuc3Bs
aXRFbmQobnVsbHB0cikKLSAgICAsIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zKC0xKQotICAg
ICwgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zKC0xKQogICAgICwgbV9sYXp5UmVwYWludFRpbWVy
KCp0aGlzLCAmUmVuZGVyVmlldzo6bGF6eVJlcGFpbnRUaW1lckZpcmVkKQotICAgICwgbV9wYWdl
TG9naWNhbEhlaWdodCgwKQotICAgICwgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQoZmFsc2Up
Ci0gICAgLCBtX2xheW91dFN0YXRlKG51bGxwdHIpCi0gICAgLCBtX2xheW91dFN0YXRlRGlzYWJs
ZUNvdW50KDApCi0gICAgLCBtX3JlbmRlclF1b3RlSGVhZChudWxscHRyKQotICAgICwgbV9yZW5k
ZXJDb3VudGVyQ291bnQoMCkKLSAgICAsIG1fc2VsZWN0aW9uV2FzQ2FyZXQoZmFsc2UpCi0gICAg
LCBtX2hhc1NvZnR3YXJlRmlsdGVycyhmYWxzZSkKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKICAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKCp0aGlzKQogI2VuZGlmCkBAIC03NzIs
NyArNzYwLDEwIEBAIExheW91dFJlY3QgUmVuZGVyVmlldzo6c3VidHJlZVNlbGVjdGlvbkJvdW5k
cyhjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwKICAgICBTZWxlY3Rpb25NYXAgc2Vs
ZWN0ZWRPYmplY3RzOwogCiAgICAgUmVuZGVyT2JqZWN0KiBvcyA9IHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gcmVuZGVyZXJB
ZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpLCByb290LnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAgYXV0byogc2VsZWN0aW9uRW5k
ID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBzdG9wID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRW5kKQorICAgICAgICBzdG9wID0g
cmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkVuZCwgcm9vdC5zZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7CiAgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0
aW9uSXRlcmF0b3Iob3MpOwogICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7CiAgICAgICAg
IGlmICgob3MtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgb3MgPT0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uRW5kKCkpICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKQEAg
LTgyMSw3ICs4MTIsMTAgQEAgdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJlZVNlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QKIHsKICAgICBIYXNoU2V0
PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwogCi0gICAgUmVuZGVyT2JqZWN0KiBlbmQg
PSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5k
KCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvKiBz
ZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkVuZCkKKyAgICAg
ICAgZW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkVuZCwgcm9vdC5zZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7CiAgICAgU2VsZWN0aW9uSXRlcmF0
b3Igc2VsZWN0aW9uSXRlcmF0b3Iocm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQo
KSk7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIG8gPSBzZWxlY3Rpb25JdGVyYXRvci5jdXJyZW50
KCk7IG8gJiYgbyAhPSBlbmQ7IG8gPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKICAgICAg
ICAgaWYgKCFvLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAmJiBvICE9IHJvb3Quc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvblN0YXJ0KCkgJiYgbyAhPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25FbmQoKSkKQEAgLTg0MCw3ICs4MzQsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0
cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290KSBjb25zdAogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFy
dCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3ZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0
aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVu
ZGVyT2JqZWN0KiBlbmQsIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRQb3MsIFNlbGVjdGlvblJlcGFp
bnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCiB7CiAgICAgLy8gTWFrZSBzdXJlIGJvdGggb3VyIHN0
YXJ0IGFuZCBlbmQgb2JqZWN0cyBhcmUgZGVmaW5lZC4KICAgICAvLyBDaGVjayB3d3cubXNuYmMu
Y29tIGFuZCB0cnkgY2xpY2tpbmcgYXJvdW5kIHRvIGZpbmQgdGhlIGNhc2Ugd2hlcmUgdGhpcyBo
YXBwZW5lZC4KQEAgLTg3Nyw3ICs4NzEsNyBAQCB2b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqIHN0YXJ0LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZQogICAg
IHNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKHN0YXJ0LCBzdGFydFBvcywgZW5kLCBlbmRQ
b3MsIGJsb2NrUmVwYWludE1vZGUpOwogfQogCi12b2lkIFJlbmRlclZpZXc6OnNwbGl0U2VsZWN0
aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdGFydFBv
cywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmQsIGludCBlbmRQb3MsIFNlbGVjdGlvblJlcGFpbnRN
b2RlIGJsb2NrUmVwYWludE1vZGUpCit2b2lkIFJlbmRlclZpZXc6OnNwbGl0U2VsZWN0aW9uQmV0
d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQsIE9wdGlvbmFsPHVuc2lnbmVk
PiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmQsIE9wdGlvbmFsPHVuc2lnbmVkPiBl
bmRQb3MsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCiB7CiAgICAgLy8g
Q29tcHV0ZSB0aGUgdmlzaWJsZSBzZWxlY3Rpb24gZW5kIHBvaW50cyBmb3IgZWFjaCBvZiB0aGUg
c3VidHJlZXMuCiAgICAgUmVuZGVyU3VidHJlZXNNYXAgcmVuZGVyU3VidHJlZXNNYXA7CkBAIC05
MDIsMTQgKzg5NiwxNiBAQCB2b2lkIFJlbmRlclZpZXc6OnNwbGl0U2VsZWN0aW9uQmV0d2VlblN1
YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnQsIGludCBzdAogICAgICAgICAgICAgU2Vs
ZWN0aW9uU3VidHJlZURhdGEgc2VsZWN0aW9uRGF0YSA9IHJlbmRlclN1YnRyZWVzTWFwLmdldCgm
cm9vdCk7CiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25DbGVhcigpKSB7
CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydChub2RlLT5y
ZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvblN0
YXJ0UG9zKG5vZGUgPT0gc3RhcnROb2RlID8gc3RhcnRQb3MgOiAwKTsKKyAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvblN0YXJ0UG9zKG5vZGUgPT0gc3RhcnROb2RlID8g
c3RhcnRQb3MgOiBPcHRpb25hbDx1bnNpZ25lZD4oMCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVuZChub2RlLT5yZW5kZXJlcigpKTsK
ICAgICAgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCiAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MoZW5kUG9zKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhub2RlLT5vZmZz
ZXRJbkNoYXJhY3RlcnMoKSA/IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpIDogbm9kZS0+Y291
bnRDaGlsZE5vZGVzKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgbmV3RW5kUG9zID0gbm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhD
aGFyYWN0ZXJPZmZzZXQoKSA6IG5vZGUtPmNvdW50Q2hpbGROb2RlcygpOworICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kUG9zKG5ld0VuZFBvcyk7CisgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIHJlbmRlclN1YnRyZWVzTWFwLnNldCgmcm9vdCwgc2VsZWN0
aW9uRGF0YSk7CiAgICAgICAgIH0KQEAgLTk2MCw3ICs5NTYsMTAgQEAgdm9pZCBSZW5kZXJWaWV3
OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3Qs
IFNlbGVjdGkKICAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRo
ZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCiAKICAgICBSZW5kZXJPYmpl
Y3QqIG9zID0gcm9vdC5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBSZW5k
ZXJPYmplY3QqIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24ocm9vdC5zZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCksIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygp
KTsKKyAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25FbmQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChzZWxl
Y3Rpb25FbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9u
RW5kLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKICAg
ICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7CiAgICAgd2hpbGUgKG9z
ICYmIG9zICE9IHN0b3ApIHsKICAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rp
b24ocm9vdCwgKm9zKSkgewpAQCAtOTk4LDcgKzk5NywxMCBAQCB2b2lkIFJlbmRlclZpZXc6OmFw
cGx5U3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgU2Vs
ZWN0aQogICAgIH0KIAogICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQgPSByb290LnNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVj
dGlvbkVuZCgpLCByb290LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSk7CisgICAg
YXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVu
ZCgpOworICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBpZiAo
c2VsZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBv
c2l0aW9uKHNlbGVjdGlvbkRhdGFFbmQsIHJvb3Quc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVu
ZFBvcygpLnZhbHVlKCkpOwogICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9y
KHNlbGVjdGlvblN0YXJ0KTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRlcmVy
ID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0g
c2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkp
IHsKICAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEoKS5z
ZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9PSByb290LnNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25FbmQoKSkKQEAgLTEwODksNyArMTA5MSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6
YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290JiByb290LCBT
ZWxlY3RpCiAgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7CiB9CiAK
LXZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVy
ZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBpbnQmIGVu
ZE9mZnNldCkgY29uc3QKK3ZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVj
dComIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZzZXQsIFJlbmRl
ck9iamVjdComIGVuZFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIGVuZE9mZnNldCkgY29u
c3QKIHsKICAgICBzdGFydFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQ7CiAgICAg
c3RhcnRPZmZzZXQgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvczsKQEAgLTExMDAsNyArMTEw
Miw3IEBAIHZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0
UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlCiB2b2lkIFJlbmRlclZpZXc6OmNsZWFyU2Vs
ZWN0aW9uKCkKIHsKICAgICBsYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0g
ICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIC0xLCBudWxscHRyLCAtMSwgUmVwYWludE5ld01pbnVz
T2xkKTsKKyAgICBzZXRTZWxlY3Rpb24obnVsbHB0ciwgTnVsbG9wdCwgbnVsbHB0ciwgTnVsbG9w
dCwgUmVwYWludE5ld01pbnVzT2xkKTsKIH0KIAogYm9vbCBSZW5kZXJWaWV3OjpwcmludGluZygp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCBjN2M5Mjg2NGYw
MzQ1YTVlZGIyYjRjMTExMzMxNDI3OTA1MzJkMGJmLi41MjM5NDI2ZGYwMjdjN2RkNjU2ZjdmZDA1
MzNhMDc1YjI4Y2U0NWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKQEAg
LTg1LDggKzg1LDggQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOwogCiAgICAgZW51bSBTZWxlY3Rp
b25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09sZCwgUmVw
YWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0
LCBpbnQgc3RhcnRQb3MsIFJlbmRlck9iamVjdCogZW5kLCBpbnQgZW5kUG9zLCBTZWxlY3Rpb25S
ZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJl
bmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIGludCYgc3RhcnRPZmZzZXQsIFJlbmRlck9iamVj
dComIGVuZFJlbmRlcmVyLCBpbnQmIGVuZE9mZnNldCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWxl
Y3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBS
ZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0
aW9uUmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKKyAgICB2b2lkIGdldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBPcHRpb25hbDx1bnNpZ25lZD4mIHN0YXJ0
T2Zmc2V0LCBSZW5kZXJPYmplY3QqJiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5zaWduZWQ+JiBl
bmRPZmZzZXQpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAgICBSZW5kZXJP
YmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
VW5zcGxpdFN0YXJ0OyB9CiAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0RW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOyB9CkBAIC0zMDcsNyArMzA3LDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVl
cyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIGludCBzdGFydFBvcywgY29uc3Qg
UmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgaW50IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1v
ZGUgYmxvY2tSZXBhaW50TW9kZSk7CisgICAgdm9pZCBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0
cmVlcyhjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIE9wdGlvbmFsPHVuc2lnbmVk
PiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwgT3B0aW9uYWw8dW5z
aWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CiAg
ICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3Qm
LCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0YSYpIGNvbnN0OwogICAgIHZv
aWQgdXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMoUmVuZGVyU3VidHJlZXNNYXAmLCBTZWxlY3Rp
b25SZXBhaW50TW9kZSk7CiAgICAgdm9pZCBhcHBseVN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0
aW9uRGF0YSYpOwpAQCAtMzE3LDEwICszMTcsMTAgQEAgcHJpdmF0ZToKIHByaXZhdGU6CiAgICAg
RnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKIAotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25V
bnNwbGl0U3RhcnQ7Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblVuc3BsaXRFbmQ7Ci0g
ICAgaW50IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zOwotICAgIGludCBtX3NlbGVjdGlvblVu
c3BsaXRFbmRQb3M7CisgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblVuc3BsaXRTdGFydCB7
IG51bGxwdHIgfTsKKyAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdEVuZCB7IG51
bGxwdHIgfTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQ
b3M7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKIAog
ICAgIC8vIEluY2x1ZGUgdGhpcyBSZW5kZXJWaWV3LgogICAgIHVpbnQ2NF90IG1fcmVuZGVyZXJD
b3VudCB7IDEgfTsKQEAgLTMyOSwxOCArMzI5LDExIEBAIHByaXZhdGU6CiAKICAgICAvLyBGSVhN
RTogT25seSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4g
IEZpbmQgYSB3YXkgdG8gcmVtb3ZlLgogICAgIHN0cnVjdCBMZWdhY3lQcmludGluZyB7Ci0gICAg
ICAgIExlZ2FjeVByaW50aW5nKCkKLSAgICAgICAgICAgIDogbV9iZXN0VHJ1bmNhdGVkQXQoMCkK
LSAgICAgICAgICAgICwgbV90cnVuY2F0ZWRBdCgwKQotICAgICAgICAgICAgLCBtX3RydW5jYXRv
cldpZHRoKDApCi0gICAgICAgICAgICAsIG1fZm9yY2VkUGFnZUJyZWFrKGZhbHNlKQotICAgICAg
ICB7IH0KLQotICAgICAgICBpbnQgbV9iZXN0VHJ1bmNhdGVkQXQ7Ci0gICAgICAgIGludCBtX3Ry
dW5jYXRlZEF0OwotICAgICAgICBpbnQgbV90cnVuY2F0b3JXaWR0aDsKKyAgICAgICAgaW50IG1f
YmVzdFRydW5jYXRlZEF0IHsgMCB9OworICAgICAgICBpbnQgbV90cnVuY2F0ZWRBdCB7IDAgfTsK
KyAgICAgICAgaW50IG1fdHJ1bmNhdG9yV2lkdGggeyAwIH07CiAgICAgICAgIEludFJlY3QgbV9w
cmludFJlY3Q7Ci0gICAgICAgIGJvb2wgbV9mb3JjZWRQYWdlQnJlYWs7CisgICAgICAgIGJvb2wg
bV9mb3JjZWRQYWdlQnJlYWsgeyBmYWxzZSB9OwogICAgIH07CiAgICAgTGVnYWN5UHJpbnRpbmcg
bV9sZWdhY3lQcmludGluZzsKICAgICAvLyBFbmQgZGVwcmVjYXRlZCBtZW1iZXJzLgpAQCAtMzU0
LDE3ICszNDcsMTcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVF1YWxp
dHlDb250cm9sbGVyPiBtX2ltYWdlUXVhbGl0eUNvbnRyb2xsZXI7CiAgICAgTGF5b3V0VW5pdCBt
X3BhZ2VMb2dpY2FsSGVpZ2h0OwotICAgIGJvb2wgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQ7
CisgICAgYm9vbCBtX3BhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCB7IGZhbHNlIH07CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPExheW91dFN0YXRlPiBtX2xheW91dFN0YXRlOwotICAgIHVuc2lnbmVkIG1f
bGF5b3V0U3RhdGVEaXNhYmxlQ291bnQ7CisgICAgdW5zaWduZWQgbV9sYXlvdXRTdGF0ZURpc2Fi
bGVDb3VudCB7IDAgfTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJDb21wb3NpdG9y
PiBtX2NvbXBvc2l0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dUaHJlYWRDb250cm9sbGVy
PiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogCi0gICAgUmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVv
dGVIZWFkOwotICAgIHVuc2lnbmVkIG1fcmVuZGVyQ291bnRlckNvdW50OworICAgIFJlbmRlclF1
b3RlKiBtX3JlbmRlclF1b3RlSGVhZCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX3JlbmRl
ckNvdW50ZXJDb3VudCB7IDAgfTsKIAotICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldDsKLSAg
ICBib29sIG1faGFzU29mdHdhcmVGaWx0ZXJzOworICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJl
dCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc1NvZnR3YXJlRmlsdGVycyB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNG
aXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKaW5kZXggOWY2NWU5NGI1ZTQ0YmNkZTBiZTAz
ZmJkZGRmOTg0YWExYTk4NDhjYy4uMTgxZTZiNTI3MTM3YjQzZTVhY2M0ODcwMzA3ODkzZTAwMjE0
MGE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRy
ZWVSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJl
ZVJvb3QuY3BwCkBAIC00MiwxOSArNDIsMTYgQEAgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVj
dGlvblN1YnRyZWVSb290KCkKIHsKIH0KIAotU2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlv
blN1YnRyZWVSb290KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIGludCBzZWxlY3Rpb25T
dGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIGludCBzZWxlY3Rpb25FbmRQb3Mp
Ci0gICAgOiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25T
dGFydFBvcywgc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmRQb3MpCi17Ci19Ci0KIHZvaWQgU2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRv
Y3VtZW50KQogewogICAgIGlmIChtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkNsZWFy
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIHJhbmdlIGJhc2VkIG9uIHRo
ZSBjYWNoZWQgZW5kIHBvaW50cwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFy
dCgpLT5ub2RlKCksIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnRQb3MoKSk7
Ci0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
bV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBtX3NlbGVjdGlv
blN1YnRyZWVEYXRhLnNlbGVjdGlvbkVuZFBvcygpKTsKKyAgICBhdXRvIHNlbGVjdGlvblN0YXJ0
ID0gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25TdGFydFBvcygpLnZhbHVlKCk7Cisg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkVu
ZFBvcygpLnZhbHVlKCk7CisgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0KCkt
Pm5vZGUoKSwgc2VsZWN0aW9uU3RhcnQpOworICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9u
RW5kKCktPm5vZGUoKSwgc2VsZWN0aW9uRW5kKTsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBzdGFydFBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpLCBlbmRQb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKnJhbmdlKTsKQEAgLTgyLDEwICs3OSwxMyBAQCB2
b2lkIFNlbGVjdGlvblN1YnRyZWVSb290OjphZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKERvY3Vt
ZW50JiBkb2N1bWVudCkKICAgICBpZiAoJnN0YXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCktPnNlbGVjdGlvblJvb3QoKSAhPSB0aGlzKQogICAgICAgICByZXR1cm47CiAKKyAgICBh
dXRvIG5ld1N0YXJ0UG9zID0gc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAg
ICBhdXRvIG5ld0VuZFBvcyA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAg
IEFTU0VSVChuZXdTdGFydFBvcyA+PSAwICYmIG5ld0VuZFBvcyA+PSAwKTsKICAgICBtX3NlbGVj
dGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvblN0YXJ0KHN0YXJ0UG9zLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0aW9u
U3RhcnRQb3Moc3RhcnRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgbV9zZWxl
Y3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBvcyhuZXdTdGFydFBvcyk7CiAgICAg
bV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmQoZW5kUG9zLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCkpOwotICAgIG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2V0U2VsZWN0
aW9uRW5kUG9zKGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICBtX3NlbGVj
dGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhuZXdFbmRQb3MpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2VsZWN0aW9uU3VidHJlZVJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rp
b25TdWJ0cmVlUm9vdC5oCmluZGV4IGRkMTkxOTc4ZmQ2NGI5OWIxNmU0ODEwZjk2YmRlNmFkMDQx
MzRlOTUuLmE4MjEyMTFiYzNhNTk1MjI4NmY3YjI1NGU4ZmQ5ZGI2MDdjODA5ZjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCkBAIC00NSwy
OCArNDUsMjAgQEAgcHVibGljOgogCiAgICAgc3RydWN0IE9sZFNlbGVjdGlvbkRhdGEgewogICAg
ICAgICBPbGRTZWxlY3Rpb25EYXRhKCkKLSAgICAgICAgICAgIDogc2VsZWN0aW9uU3RhcnRQb3Mo
LTEpCi0gICAgICAgICAgICAsIHNlbGVjdGlvbkVuZFBvcygtMSkKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBpbnQgc2VsZWN0
aW9uRW5kUG9zOworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3M7
CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7CiAgICAgICAgIFNl
bGVjdGVkT2JqZWN0TWFwIHNlbGVjdGVkT2JqZWN0czsKICAgICAgICAgU2VsZWN0ZWRCbG9ja01h
cCBzZWxlY3RlZEJsb2NrczsKICAgICB9OwogCiAgICAgY2xhc3MgU2VsZWN0aW9uU3VidHJlZURh
dGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKQotICAgICAg
ICAgICAgOiBtX3NlbGVjdGlvblN0YXJ0KG51bGxwdHIpCi0gICAgICAgICAgICAsIG1fc2VsZWN0
aW9uU3RhcnRQb3MoLTEpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kKG51bGxwdHIpCi0g
ICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kUG9zKC0xKQotICAgICAgICB7Ci0gICAgICAgIH0K
KyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7CiAKLSAgICAgICAgU2Vs
ZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVj
dGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVu
ZFBvcykKKyAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rp
b25TdGFydCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmpl
Y3QqIHNlbGVjdGlvbkVuZCwgT3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcykKICAg
ICAgICAgICAgIDogbV9zZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkKICAgICAgICAgICAg
ICwgbV9zZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykKICAgICAgICAgICAgICwg
bV9zZWxlY3Rpb25FbmQoc2VsZWN0aW9uRW5kKQpAQCAtNzUsNDYgKzY3LDQ1IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIGludCBzZWxlY3Rpb25TdGFy
dFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0KKyAgICAgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdGFydFBvczsgfQogICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9Ci0gICAgICAgIGludCBzZWxlY3Rpb25FbmRQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQorICAgICAgICBPcHRpb25h
bDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25F
bmRQb3M7IH0KICAgICAgICAgYm9vbCBzZWxlY3Rpb25DbGVhcigpIGNvbnN0CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiAhbV9zZWxlY3Rpb25TdGFydAotICAgICAgICAgICAgJiYgKG1f
c2VsZWN0aW9uU3RhcnRQb3MgPT0gLTEpCisgICAgICAgICAgICAmJiAoIW1fc2VsZWN0aW9uU3Rh
cnRQb3MpCiAgICAgICAgICAgICAmJiAhbV9zZWxlY3Rpb25FbmQKLSAgICAgICAgICAgICYmICht
X3NlbGVjdGlvbkVuZFBvcyA9PSAtMSk7CisgICAgICAgICAgICAmJiAoIW1fc2VsZWN0aW9uRW5k
UG9zKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlv
bnMoaW50JiBzdGFydFBvcywgaW50JiBlbmRQb3MpIGNvbnN0CisgICAgICAgIHZvaWQgc2VsZWN0
aW9uU3RhcnRFbmRQb3NpdGlvbnModW5zaWduZWQmIHN0YXJ0UG9zLCB1bnNpZ25lZCYgZW5kUG9z
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBzdGFydFBvcyA9IG1fc2VsZWN0aW9uU3Rh
cnRQb3M7Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvczsKKyAgICAgICAg
ICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgpOworICAgICAgICAgICAg
ZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3MudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXJ0KFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQpIHsgbV9z
ZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhcnRQb3MoaW50IHNlbGVjdGlvblN0YXJ0UG9zKSB7IG1fc2VsZWN0aW9uU3RhcnRQb3Mg
PSBzZWxlY3Rpb25TdGFydFBvczsgfQorICAgICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXJ0UG9z
KE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcykgeyBtX3NlbGVjdGlvblN0YXJ0
UG9zID0gc2VsZWN0aW9uU3RhcnRQb3M7fQogICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZChS
ZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCkgeyBtX3NlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVu
ZDsgfQotICAgICAgICB2b2lkIHNldFNlbGVjdGlvbkVuZFBvcyhpbnQgc2VsZWN0aW9uRW5kUG9z
KSB7IG1fc2VsZWN0aW9uRW5kUG9zID0gc2VsZWN0aW9uRW5kUG9zOyB9CisgICAgICAgIHZvaWQg
c2V0U2VsZWN0aW9uRW5kUG9zKE9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MpIHsg
bV9zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25FbmRQb3M7fQogICAgICAgICB2b2lkIGNsZWFy
U2VsZWN0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFydCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gLTE7CisgICAgICAgICAg
ICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gTnVsbG9wdDsKICAgICAgICAgICAgIG1fc2VsZWN0aW9u
RW5kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uRW5kUG9zID0gLTE7CisgICAg
ICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IE51bGxvcHQ7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25TdGFydDsKLSAgICAgICAg
aW50IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rp
b25FbmQ7Ci0gICAgICAgIGludCBtX3NlbGVjdGlvbkVuZFBvczsKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBtX3NlbGVjdGlvblN0YXJ0IHsgbnVsbHB0ciB9OworICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gbV9zZWxlY3Rpb25TdGFydFBvczsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVj
dGlvbkVuZCB7IG51bGxwdHIgfTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0
aW9uRW5kUG9zOwogICAgIH07CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U2VsZWN0aW9uU3VidHJl
ZVJvb3QqLCBTZWxlY3Rpb25TdWJ0cmVlRGF0YT4gUmVuZGVyU3VidHJlZXNNYXA7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFNlbGVjdGlvblN1YnRyZWVSb290Kiwgc3RkOjp1bmlxdWVfcHRy
PE9sZFNlbGVjdGlvbkRhdGE+PiBTdWJ0cmVlT2xkU2VsZWN0aW9uRGF0YU1hcDsKIAogICAgIFNl
bGVjdGlvblN1YnRyZWVSb290KCk7Ci0gICAgU2VsZWN0aW9uU3VidHJlZVJvb3QoUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3Qq
IHNlbGVjdGlvbkVuZCwgaW50IHNlbGVjdGlvbkVuZFBvcyk7CiAKICAgICBTZWxlY3Rpb25TdWJ0
cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7
IH0KICAgICBjb25zdCBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IDhkMzU5N2YyYzg0YTcwZjc2OTE1YmQyOWM1ODNjNzY5
NTFhYTczYTAuLjZlNWVjYzI2N2NiNmNlMDZjNGE1ZGM5Mjg0ZmVmZDFmNWUyOTVkMGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAtODQsMTcgKzg0LDE3IEBA
IFRleHRQYWludGVyOjpUZXh0UGFpbnRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB9CiAK
IHZvaWQgVGV4dFBhaW50ZXI6OmRyYXdUZXh0T3JFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIGVt
cGhhc2lzTWFyaywKLSAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCisgICAgZmxvYXQg
ZW1waGFzaXNNYXJrT2Zmc2V0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogewogICAgIEFTU0VSVChzdGFydE9m
ZnNldCA8IGVuZE9mZnNldCk7CiAgICAgaWYgKGVtcGhhc2lzTWFyay5pc0VtcHR5KCkpCiAgICAg
ICAgIG1fY29udGV4dC5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luLCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKICAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC5kcmF3RW1waGFz
aXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIHRleHRPcmlnaW4gKyBJbnRTaXpl
KDAsIGVtcGhhc2lzTWFya09mZnNldCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOworICAgICAg
ICBtX2NvbnRleHQuZHJhd0VtcGhhc2lzTWFya3MoZm9udCwgdGV4dFJ1biwgZW1waGFzaXNNYXJr
LCB0ZXh0T3JpZ2luICsgRmxvYXRTaXplKDAsIGVtcGhhc2lzTWFya09mZnNldCksIHN0YXJ0T2Zm
c2V0LCBlbmRPZmZzZXQpOwogfQogCiB2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRXaXRoU2hh
ZG93cyhjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZs
b2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0
LCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFya09mZnNl
dCwgYm9vbCBzdHJva2VkKQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRP
ZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01h
cmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCkKIHsKICAgICBpZiAoIXNoYWRvdykgewogICAgICAgICBk
cmF3VGV4dE9yRW1waGFzaXNNYXJrcyhmb250LCB0ZXh0UnVuLCBlbXBoYXNpc01hcmssIGVtcGhh
c2lzTWFya09mZnNldCwgdGV4dE9yaWdpbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC0x
MjAsNyArMTIwLDcgQEAgdm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29u
c3QgU2hhZG93RGF0YSogc2hhZG93LCBjb25zdCBGb250Q2FzY2EKICAgICB9CiB9CiAKLXZvaWQg
VGV4dFBhaW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25zdCBUZXh0
UnVuJiB0ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQm
IHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwKK3ZvaWQgVGV4dFBh
aW50ZXI6OnBhaW50VGV4dEFuZEVtcGhhc2lzTWFya3NJZk5lZWRlZChjb25zdCBUZXh0UnVuJiB0
ZXh0UnVuLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRP
cmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsCiAgICAgY29u
c3QgVGV4dFBhaW50U3R5bGUmIHBhaW50U3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykK
IHsKICAgICAvLyBGSVhNRTogVHJ1bmNhdGUgcmlnaHQtdG8tbGVmdCB0ZXh0IGNvcnJlY3RseS4K
QEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRBbmRFbXBoYXNp
c01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgY29ucwogICAgICAgICBtX2Nv
bnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKGJveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKIH0K
ICAgICAKLXZvaWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVu
LCBpbnQgbGVuZ3RoLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQm
IHRleHRPcmlnaW4sIGludCBzZWxlY3Rpb25TdGFydCwgaW50IHNlbGVjdGlvbkVuZCwKK3ZvaWQg
VGV4dFBhaW50ZXI6OnBhaW50VGV4dChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9y
aWdpbiwgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQsIHVuc2lnbmVkIHNlbGVjdGlvbkVuZCwKICAg
ICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFy
YXRlbHkpCiB7CiAgICAgQVNTRVJUKG1fZm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0
UGFpbnRlci5oCmluZGV4IGU0YjViMThjY2YzY2EyNjEzMzQwZTBlYTRkZGFkYjFiZjk1MGJmMTIu
LjJlMTY3ZmIzMzhmN2FmZWQyYWJiNDZiNzNkYjBlOWJkZDgyZDJkNzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCkBAIC01NCwxOCArNTQsMTggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U2VsZWN0aW9uUGFpbnRTdHlsZShjb25zdCBUZXh0UGFpbnRTdHlsZSYgc2VsZWN0
aW9uUGFpbnRTdHlsZSkgeyBtX3NlbGVjdGlvblBhaW50U3R5bGUgPSBzZWxlY3Rpb25QYWludFN0
eWxlOyB9CiAgICAgdm9pZCBzZXRJc0hvcml6b250YWwoYm9vbCBpc0hvcml6b250YWwpIHsgbV90
ZXh0Qm94SXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsOyB9CiAgICAgdm9pZCBzZXRGb250KGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250KSB7IG1fZm9udCA9ICZmb250OyB9Ci0gICAgdm9pZCBhZGRF
bXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgaW50IGVtcGhhc2lzTWFy
a09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqKTsKKyAgICB2b2lkIGFkZEVtcGhhc2lzKGNvbnN0
IEF0b21pY1N0cmluZyYgZW1waGFzaXNNYXJrLCBmbG9hdCBlbXBoYXNpc01hcmtPZmZzZXQsIFJl
bmRlckNvbWJpbmVUZXh0Kik7CiAgICAgdm9pZCBhZGRUZXh0U2hhZG93KGNvbnN0IFNoYWRvd0Rh
dGEqIHRleHRTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIHNlbGVjdGlvblNoYWRvdyk7CiAKLSAg
ICB2b2lkIHBhaW50VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGxlbmd0aCwgY29uc3QgRmxvYXRS
ZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLAotICAgICAgICBpbnQg
c2VsZWN0aW9uU3RhcnQgPSAwLCBpbnQgc2VsZWN0aW9uRW5kID0gMCwgYm9vbCBwYWludFNlbGVj
dGVkVGV4dE9ubHkgPSBmYWxzZSwgYm9vbCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkgPSBm
YWxzZSk7CisgICAgdm9pZCBwYWludFRleHQoY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2lu
LAorICAgICAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCA9IDAsIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZCA9IDAsIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gZmFsc2UsIGJvb2wgcGFpbnRT
ZWxlY3RlZFRleHRTZXBhcmF0ZWx5ID0gZmFsc2UpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZHJh
d1RleHRPckVtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNpc01hcmtPZmZzZXQs
Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGludCBzdGFydE9mZnNldCwg
aW50IGVuZE9mZnNldCk7CisgICAgdm9pZCBkcmF3VGV4dE9yRW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lz
TWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LAorICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KTsK
ICAgICB2b2lkIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnN0IFNoYWRvd0RhdGEqLCBjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNv
bnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50
IGVuZE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBlbXBoYXNpc01hcmssIGludCBlbXBoYXNp
c01hcmtPZmZzZXQsIGJvb2wgc3Ryb2tlZCk7Ci0gICAgdm9pZCBwYWludFRleHRBbmRFbXBoYXNp
c01hcmtzSWZOZWVkZWQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwg
Y29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0LAorICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBj
b25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0
LCBib29sIHN0cm9rZWQpOworICAgIHZvaWQgcGFpbnRUZXh0QW5kRW1waGFzaXNNYXJrc0lmTmVl
ZGVkKGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQsCiAgICAgICAgIGNvbnN0IFRleHRQYWludFN0eWxlJiwgY29uc3QgU2hhZG93RGF0YSopOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0JiBtX2NvbnRleHQ7CkBAIC03NiwxMSArNzYsMTEgQEAgcHJp
dmF0ZToKICAgICBjb25zdCBTaGFkb3dEYXRhKiBtX3NlbGVjdGlvblNoYWRvdyB7IG51bGxwdHIg
fTsKICAgICBBdG9taWNTdHJpbmcgbV9lbXBoYXNpc01hcms7CiAgICAgUmVuZGVyQ29tYmluZVRl
eHQqIG1fY29tYmluZWRUZXh0IHsgbnVsbHB0ciB9OwotICAgIGludCBtX2VtcGhhc2lzTWFya09m
ZnNldCB7IDAgfTsKKyAgICBmbG9hdCBtX2VtcGhhc2lzTWFya09mZnNldCB7IDAgfTsKICAgICBi
b29sIG1fdGV4dEJveElzSG9yaXpvbnRhbCB7IHRydWUgfTsKIH07CiAKLWlubGluZSB2b2lkIFRl
eHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcmIGVtcGhhc2lzTWFyaywg
aW50IGVtcGhhc2lzTWFya09mZnNldCwgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCkK
K2lubGluZSB2b2lkIFRleHRQYWludGVyOjphZGRFbXBoYXNpcyhjb25zdCBBdG9taWNTdHJpbmcm
IGVtcGhhc2lzTWFyaywgZmxvYXQgZW1waGFzaXNNYXJrT2Zmc2V0LCBSZW5kZXJDb21iaW5lVGV4
dCogY29tYmluZWRUZXh0KQogewogICAgIG1fZW1waGFzaXNNYXJrID0gZW1waGFzaXNNYXJrOwog
ICAgIG1fZW1waGFzaXNNYXJrT2Zmc2V0ID0gZW1waGFzaXNNYXJrT2Zmc2V0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKaW5k
ZXggOTcxMzNlMTBjMGQ0MzZlMjkyOTI5Njk0MjZmNTE0MmIxZWZmMjIyZi4uYzZlYmFmM2ZkNDQw
ODUyMDM3MmRmMzY0OGQwMjAzNDA5MDk2NTExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCkBAIC0xMTYsMTcgKzExNiwx
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEJveD4gUmVuZGVyU1ZHSW5saW5lVGV4dDo6
Y3JlYXRlVGV4dEJveCgpCiAgICAgcmV0dXJuIFdURk1vdmUoYm94KTsKIH0KIAotTGF5b3V0UmVj
dCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGJveCwgaW50
IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKK0xheW91dFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4
dDo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBib3gsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBM
YXlvdXRVbml0KikKIHsKICAgICBpZiAoIWlzPElubGluZVRleHRCb3g+KGJveCkpCiAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5s
aW5lVGV4dEJveD4oKmJveCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9m
ZnNldCkgPCB0ZXh0Qm94LnN0YXJ0KCkgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zm
c2V0KSA+IHRleHRCb3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpCisgICAgaWYgKGNhcmV0T2Zm
c2V0IDwgdGV4dEJveC5zdGFydCgpIHx8IGNhcmV0T2Zmc2V0ID4gdGV4dEJveC5zdGFydCgpICsg
dGV4dEJveC5sZW4oKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIC8vIFVz
ZSB0aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJtaW5lIHRoZSBjYXJldCBy
ZWN0LgotICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpIDwgdGV4dEJv
eC5zdGFydCgpICsgdGV4dEJveC5sZW4oKSkgeworICAgIGlmIChjYXJldE9mZnNldCA8IHRleHRC
b3guc3RhcnQoKSArIHRleHRCb3gubGVuKCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCByZWN0ID0g
dGV4dEJveC5sb2NhbFNlbGVjdGlvblJlY3QoY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0ICsgMSk7
CiAgICAgICAgIExheW91dFVuaXQgeCA9IHRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcmVjdC54KCkgOiByZWN0Lm1heFgoKTsKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeCwg
cmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuaAppbmRleCA3NDY3NzNiZDky
ZGVjOTE4ZDk3ZDFmMzM0NGZlMzFlMDQ3Y2M4NTNkLi45OTk4ZmUxYWY2NjQ5YzM2YzQ2YTYzMWRh
ZTA4MjdkMWYzZjFjYTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0lubGluZVRleHQuaApAQCAtNjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNTVkdJbmxpbmVUZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBj
b25zdCBSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKLSAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRS
ZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJ
bmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lID0gMCkgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRCb3g+IGNyZWF0
ZVRleHRCb3goKSBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYTRmNDE5ZmQ2YThmOWI0Y2ZkODU4YmQzMmNm
ZDBkNTNhOGE0ODk1MC4uNzUxNTVjODI3MjM3ZjBlZjQwN2EzOGZhNjgwYjExMzUwNTg1MzAxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCkBAIC0xMDAsMTQgKzEwMCwxNCBAQCBpbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9y
UG9zaXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbgogICAgIHJl
dHVybiBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpICsgcmVuZGVyZXIoKS5zY2Fs
ZWRGb250KCkub2Zmc2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9zaXRpb24gKiBzY2FsaW5nRmFj
dG9yLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLWZsb2F0IFNWR0lubGluZVRleHRCb3g6
OnBvc2l0aW9uRm9yT2Zmc2V0KGludCkgY29uc3QKK2Zsb2F0IFNWR0lubGluZVRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkKSBjb25zdAogewogICAgIC8vIFNWRyBkb2Vzbid0IHVz
ZSB0aGUgb2Zmc2V0IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KIAotRmxvYXRSZWN0IFNWR0lubGluZVRl
eHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVj
dGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwg
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24sIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBA
IC0xMzQsMTEgKzEzNCwxMCBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmCiAgICAgcmV0dXJuIHNu
YXBwZWRTZWxlY3Rpb25SZWN0OwogfQogCi1MYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6Omxv
Y2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKSBjb25z
dAorTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaW50
IGJveFN0YXJ0ID0gc3RhcnQoKTsKLSAgICBzdGFydFBvc2l0aW9uID0gc3RkOjptYXgoc3RhcnRQ
b3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsKLSAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBv
c2l0aW9uIC0gYm94U3RhcnQsIHN0YXRpY19jYXN0PGludD4obGVuKCkpKTsKKyAgICBzdGFydFBv
c2l0aW9uID0gY2xhbXBlZE9mZnNldChzdGFydFBvc2l0aW9uKTsKKyAgICBlbmRQb3NpdGlvbiA9
IGNsYW1wZWRPZmZzZXQoZW5kUG9zaXRpb24pOwogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVu
ZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0xNDYsOCArMTQ1
LDggQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50
IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGkKIAogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFn
bWVudFRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBpbnQgZnJh
Z21lbnRTdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7
CisgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBm
cmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXpl
ID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtMjAzLDEyICsyMDIsMTIgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludElu
Zm8pCiAKICAgICBhdXRvJiBzdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CiAKLSAgICBp
bnQgc3RhcnRQb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb247CisgICAgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbjsKICAgICBzdGQ6OnRpZShzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikgPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogCi0gICAgaW50
IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24g
PSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWdu
ZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50
VHJhbnNmb3JtOwogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNTaXplID0gbV90ZXh0RnJhZ21l
bnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZyYWdtZW50c1Np
emU7ICsraSkgewpAQCAtNDA3LDIxICs0MDYsMjQgQEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94
Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgU1ZHVGUK
ICAgICByZXR1cm4gcnVuOwogfQogCi1ib29sIFNWR0lubGluZVRleHRCb3g6Om1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBm
cmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAorYm9v
bCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKHN0YXJ0UG9z
aXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBv
ZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCkgLSBzdGFy
dCgpOwotICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCk7
CisgICAgQVNTRVJUKGZyYWdtZW50LmNoYXJhY3Rlck9mZnNldCA+PSBzdGFydCgpKTsKKyAgICB1
bnNpZ25lZCBvZmZzZXQgPSBmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpOworICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGZyYWdtZW50Lmxlbmd0aDsKIAogICAgIGlmIChzdGFydFBvc2l0
aW9uID49IG9mZnNldCArIGxlbmd0aCB8fCBlbmRQb3NpdGlvbiA8PSBvZmZzZXQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uIDwgb2Zmc2V0KQogICAgICAg
ICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VChzdGFydFBvc2l0aW9uID49IG9mZnNldCk7CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gLT0gb2Zm
c2V0OworICAgIH0KIAogICAgIGlmIChlbmRQb3NpdGlvbiA+IG9mZnNldCArIGxlbmd0aCkKICAg
ICAgICAgZW5kUG9zaXRpb24gPSBsZW5ndGg7CkBAIC01NDAsNyArNTQyLDcgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBUZXh0RGUKICAgICAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dFB0
ciwgJnBhdGgpOwogfQogCi12b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFk
b3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3Rh
cnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgVGV4dFJ1biYgdGV4dFJ1biwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFn
bWVudCwgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pCiB7CiAg
ICAgZmxvYXQgc2NhbGluZ0ZhY3RvciA9IHJlbmRlcmVyKCkuc2NhbGluZ0ZhY3RvcigpOwogICAg
IEFTU0VSVChzY2FsaW5nRmFjdG9yKTsKQEAgLTU5MCw4ICs1OTIsOCBAQCB2b2lkIFNWR0lubGlu
ZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0eWxlKiBzdAogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxl
KTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSAw
OworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uID0gMDsKICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7CiAgICAgICAgIHN0ZDo6dGllKHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSA9IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgICAgIGhh
c1NlbGVjdGlvbiA9IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMo
ZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKQEAgLTYxOCw3ICs2MjAsNyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50U3R5bGVDaGFuZ2VkKHBhcmVudCgpLT5yZW5kZXJlcigpLCBTdHlsZURpZmZlcmVuY2VSZXBh
aW50LCAqc3R5bGUpOwogCiAgICAgLy8gRXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcgcmVndWxh
ciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5k
IG9mIHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBpZiAoZW5kUG9zaXRpb24gPCBzdGF0aWNf
Y2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCkgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKKyAg
ICBpZiAoZW5kUG9zaXRpb24gPCBmcmFnbWVudC5sZW5ndGggJiYgIXBhaW50U2VsZWN0ZWRUZXh0
T25seSkKICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRS
dW4sIGZyYWdtZW50LCBlbmRQb3NpdGlvbiwgZnJhZ21lbnQubGVuZ3RoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAppbmRleCBjOGZk
MTQ4ODhiNDYyMzQyNTEzYWU5NzA5OWI3NzYwOTYzYmIxODI3Li4xZTMyYTQyMjI5NGU1NjM5Y2Iz
MmZlYTU5OTNkZjBkNDMyNWRlODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtNDMsMTMgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBp
bnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICBpbnQgc2VsZWN0aW9uSGVp
Z2h0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihtX2xvZ2ljYWxIZWlnaHQpKTsg
fQogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzID0gdHJ1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZz
ZXQoaW50IG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQgcG9zaXRpb25Gb3JPZmZz
ZXQodW5zaWduZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgcGFpbnRTZWxl
Y3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYpOwogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkgb3ZlcnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0
YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgTGF5b3V0
UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQg
ZW5kUG9zaXRpb24pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0
aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYg
c3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAgYm9vbCBtYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0
OwogCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZTsK
IApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGFydHNOZXdUZXh0Q2h1
bmsoYm9vbCBuZXdUZXh0Q2h1bmspIHsgbV9zdGFydHNOZXdUZXh0Q2h1bmsgPSBuZXdUZXh0Q2h1
bms7IH0KIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNv
bnN0OwotICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNW
R1RleHRGcmFnbWVudCYsIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24sIGludCBmcmFnbWVudEVu
ZFBvc2l0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVk
IGZyYWdtZW50U3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgY29u
c3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGlzU1ZHSW5saW5l
VGV4dEJveCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KQEAgLTc5LDcgKzc5LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBoaWNzQ29udGV4dCYs
IFRleHREZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKTsKICAgICB2b2lkIHBhaW50
RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQmLCBUZXh0RGVjb3JhdGlvbiwgY29u
c3QgU1ZHVGV4dEZyYWdtZW50JiwgUmVuZGVyQm94TW9kZWxPYmplY3QmIGRlY29yYXRpb25SZW5k
ZXJlcik7Ci0gICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQg
c3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgVGV4dFJ1biYsIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVu
ZFBvc2l0aW9uKTsKICAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRP
bmx5KTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAppbmRleCBmZjM2Njc3MTcx
NTMxNThmNjc2Mjg3N2E5ODgwODgwYjJlYzBkN2VlLi45MzMwYWFhMWM3MTFkYWU1MTY4MmJjYjM5
MzYxNTNiMmIxNGZjOWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuY3BwCkBAIC0xMzQsMTMgKzEzNCwxNSBAQCBib29sIFNWR1RleHRRdWVyeTo6ZXhl
Y3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5RGF0YSwgUHJvY2Vzc1RleHRGcmFnbWVudENhbGxiYWNrIGZy
YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5k
UG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9z
aXRpb24pIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRv
RnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmFnbWVu
dCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRp
b24pIGNvbnN0CiB7CiAgICAgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWMgdXNlZCBmb3IgdGV4dCBz
ZWxlY3Rpb24gJiBwYWludGluZywgdG8gbWFwIG91ciBxdWVyeSBzdGFydC9sZW5ndGggaW50byBz
dGFydC9lbmRQb3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4dCBmcmFnbWVudC4KKyAgICBBU1NF
UlQoc3RhcnRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMpOworICAg
IEFTU0VSVChlbmRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnMpOwog
ICAgIHN0YXJ0UG9zaXRpb24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzOwogICAg
IGVuZFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsKIAotICAgIGlm
IChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uIHx8IHN0YXJ0UG9zaXRpb24gPCAwIHx8IGVu
ZFBvc2l0aW9uIDwgMCkKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0
aW5nTGlnYXR1cmVzKHF1ZXJ5RGF0YSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwpAQCAt
MTUxLDcgKzE1Myw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGlu
Z0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQ
b3NpdGlvbikgY29uc3QKK3ZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9u
c1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCB1bnNpZ25lZCYgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIFNWR1RleHRMYXlvdXRB
dHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzID0gcXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPmxh
eW91dEF0dHJpYnV0ZXMoKTsKICAgICBWZWN0b3I8U1ZHVGV4dE1ldHJpY3M+JiB0ZXh0TWV0cmlj
c1ZhbHVlcyA9IGxheW91dEF0dHJpYnV0ZXMtPnRleHRNZXRyaWNzVmFsdWVzKCk7CkBAIC0xNjcs
NyArMTY5LDcgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVz
cGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICBib29sIGFsdGVyU3RhcnRQ
b3NpdGlvbiA9IHRydWU7CiAgICAgYm9vbCBhbHRlckVuZFBvc2l0aW9uID0gdHJ1ZTsKIAotICAg
IGludCBsYXN0UG9zaXRpb25PZmZzZXQgPSAtMTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGFz
dFBvc2l0aW9uT2Zmc2V0OwogICAgIGZvciAoOyB0ZXh0TWV0cmljc09mZnNldCA8IHRleHRNZXRy
aWNzU2l6ZSAmJiBwb3NpdGlvbk9mZnNldCA8IHBvc2l0aW9uU2l6ZTsgKyt0ZXh0TWV0cmljc09m
ZnNldCkgewogICAgICAgICBTVkdUZXh0TWV0cmljcyYgbWV0cmljcyA9IHRleHRNZXRyaWNzVmFs
dWVzW3RleHRNZXRyaWNzT2Zmc2V0XTsKIApAQCAtMTgyLDIxICsxODQsMjEgQEAgdm9pZCBTVkdU
ZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRh
KiBxdWVyeURhdGEsIGkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHRoZSBz
dGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdl
IGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBz
dGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKHN0YXJ0UG9zaXRp
b24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBm
YWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0byBhIGNoYXJh
Y3RlciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBpdC4KLSAg
ICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQp
KQorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAg
ICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAKICAgICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJl
cy4KLSAgICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25P
ZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0
UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBv
c2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKLSAgICAgICAgICAg
ICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uT2Zmc2V0OworICAgICAgICBpZiAobGFz
dFBvc2l0aW9uT2Zmc2V0ICYmIGxhc3RQb3NpdGlvbk9mZnNldC52YWx1ZSgpIC0gcG9zaXRpb25P
ZmZzZXQgPiAxKSB7CisgICAgICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0
UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBzdGFydFBvc2l0aW9uIDwg
cG9zaXRpb25PZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBv
c2l0aW9uT2Zmc2V0LnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgYWx0ZXJTdGFydFBvc2l0aW9u
ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0
aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwg
c3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhbHRl
ckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0LnZhbHVlKCkg
JiYgZW5kUG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewogICAgICAgICAgICAgICAgIGVuZFBv
c2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlv
biA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjEyLDExICsyMTQsMTEgQEAgdm9pZCBTVkdU
ZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRh
KiBxdWVyeURhdGEsIGkKICAgICBpZiAoIWFsdGVyU3RhcnRQb3NpdGlvbiAmJiAhYWx0ZXJFbmRQ
b3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAh
PSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAg
ICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9u
T2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0
KSkKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CisgICAg
aWYgKGxhc3RQb3NpdGlvbk9mZnNldCAmJiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAtIHBv
c2l0aW9uT2Zmc2V0ID4gMSkgeworICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0
YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBzdGFydFBvc2l0aW9u
IDwgcG9zaXRpb25PZmZzZXQpCisgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbGFzdFBvc2l0
aW9uT2Zmc2V0LnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5k
UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2Fz
dDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYg
ZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQudmFsdWUoKSAmJiBlbmRQb3NpdGlvbiA8
IHBvc2l0aW9uT2Zmc2V0KQogICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwb3NpdGlvbk9mZnNl
dDsKICAgICB9CiB9CkBAIC0yODQsOCArMjg2LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN1YlN0
cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW4K
IHsKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3ViU3RyaW5n
TGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEt
PnN0YXJ0UG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRh
dGEtPmxlbmd0aDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3Np
dGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBkYXRhLT5s
ZW5ndGg7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMTksOCArMzIxLDggQEAgYm9vbCBTVkdUZXh0UXVl
cnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29u
c3QgU1ZHVGUKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAg
ICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRh
LT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAx
OwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhx
dWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMzY4LDggKzM3MCw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpl
bmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdU
ZXh0CiB7CiAgICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2Fz
dDxFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlv
bjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlm
ICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEs
IGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtNDE2LDggKzQxOCw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhCiB7CiAg
ICAgUm90YXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSb3RhdGlvbk9m
Q2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRh
dGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwor
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25l
ZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDU0
LDcgKzQ1Niw3IEBAIHN0cnVjdCBFeHRlbnRPZkNoYXJhY3RlckRhdGEgOiBTVkdUZXh0UXVlcnk6
OkRhdGEgewogICAgIEZsb2F0UmVjdCBleHRlbnQ7CiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQg
Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBj
b25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgRmxvYXRS
ZWN0JiBleHRlbnQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVz
KFNWR1RleHRRdWVyeTo6RGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZy
YWdtZW50LCB1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCBGbG9hdFJlY3QmIGV4dGVudCkKIHsKICAg
ICBmbG9hdCBzY2FsaW5nRmFjdG9yID0gcXVlcnlEYXRhLT50ZXh0UmVuZGVyZXItPnNjYWxpbmdG
YWN0b3IoKTsKICAgICBBU1NFUlQoc2NhbGluZ0ZhY3Rvcik7CkBAIC00ODQsOCArNDg2LDggQEAg
Ym9vbCBTVkdUZXh0UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlE
YXRhLCBjb25zdCBTVkdUZXh0RnJhZ20KIHsKICAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEqIGRh
dGEgPSBzdGF0aWNfY2FzdDxFeHRlbnRPZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCi0g
ICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRp
b24gPSBzdGFydFBvc2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsg
MTsKICAgICBpZiAoIW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMo
cXVlcnlEYXRhLCBmcmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxOSw4ICs1MjEsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6
Y2hhcmFjdGVyTnVtYmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3Qg
U1ZHVAogCiAgICAgRmxvYXRSZWN0IGV4dGVudDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZnJhZ21lbnQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBk
YXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0g
c3RhcnRQb3NpdGlvbiArIDE7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRh
LT5wcm9jZXNzZWRDaGFyYWN0ZXJzICsgaTsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24g
PSBzdGFydFBvc2l0aW9uICsgMTsKICAgICAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAppbmRleCA3MjFiMmRmOGUzMzI0NWRhODY0MzM4
NWJlNmVlMmIxZDJiMDkzOGRmLi4zODczMGEzOGQwNjFlODI1Y2Q5MzdkNzgxODRiOGQzYjNmYTBm
YWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVy
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKQEAg
LTUyLDggKzUyLDggQEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVRdWVyeShEYXRhKiwgUHJv
Y2Vzc1RleHRGcmFnbWVudENhbGxiYWNrKSBjb25zdDsKIAogICAgIHZvaWQgY29sbGVjdFRleHRC
b3hlc0luRmxvd0JveChJbmxpbmVGbG93Qm94Kik7Ci0gICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0
aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQm
LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OwotICAgIHZvaWQg
bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqLCBpbnQmIHN0
YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgbWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHVGV4dEZy
YWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikg
Y29uc3Q7CisgICAgdm9pZCBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVy
ZXMoRGF0YSosIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24p
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgbnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2so
RGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>