<?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>54622</bug_id>
          
          <creation_ts>2011-02-17 00:56:46 -0800</creation_ts>
          <short_desc>Rename Position::node() to Position::deprecatedNode()</short_desc>
          <delta_ts>2011-02-21 01:29:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352657</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 00:56:46 -0800</bug_when>
    <thetext>I changed my mind.  I used to think that this will unnecessarily pollute svn blame.  However, I realized that it&apos;s extremely hard to recognize all call sites of Position::node() in the presence of RenderObject::node()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352662</commentid>
    <comment_count>1</comment_count>
      <attachid>82765</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 01:05:55 -0800</bug_when>
    <thetext>Created attachment 82765
r? to see build errors on non-Mac ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352667</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-17 01:09:26 -0800</bug_when>
    <thetext>Attachment 82765 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Last 3072 characters of output:
he left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/editing/ReplaceSelectionCommand.cpp:796:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/editing/CompositeEditCommand.cpp:732:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/editing/DeleteSelectionCommand.cpp:510:  Declaration has space between type name and * in Text *text  [whitespace/declaration] [3]
Source/WebCore/editing/DeleteSelectionCommand.cpp:523:  Declaration has space between type name and * in Node *n  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:390:  Declaration has space between type name and * in RenderText *textRenderer  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:411:  Declaration has space between type name and * in Node *fromRootEditableElement  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:439:  Declaration has space between type name and * in Node *fromRootEditableElement  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:767:  Declaration has space between type name and * in RenderObject *renderer  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:803:  Declaration has space between type name and * in RenderObject *renderer  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:863:  Declaration has space between type name and * in RenderObject *renderer  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:867:  Declaration has space between type name and * in RenderObject *posRenderer  [whitespace/declaration] [3]
Source/WebCore/dom/Position.cpp:931:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/dom/Position.cpp:932:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/dom/Position.cpp:936:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/dom/Position.cpp:937:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/editing/ApplyStyleCommand.cpp:673:  Declaration has space between type name and * in Node *startNode  [whitespace/declaration] [3]
Source/WebCore/editing/htmlediting.cpp:886:  Declaration has space between type name and * in Node *node  [whitespace/declaration] [3]
Source/WebCore/editing/InsertTextCommand.cpp:171:  Declaration has space between type name and * in Text *textNode  [whitespace/declaration] [3]
Source/WebCore/editing/InsertTextCommand.cpp:212:  Declaration has space between type name and * in Node *node  [whitespace/declaration] [3]
Total errors found: 31 in 44 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>352675</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-17 01:26:27 -0800</bug_when>
    <thetext>Attachment 82765 did not build on chromium:
Build output: http://queues.webkit.org/results/7926605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352697</commentid>
    <comment_count>4</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-17 02:24:46 -0800</bug_when>
    <thetext>Attachment 82765 did not build on gtk:
Build output: http://queues.webkit.org/results/7917765</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352708</commentid>
    <comment_count>5</comment_count>
      <attachid>82774</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 02:55:57 -0800</bug_when>
    <thetext>Created attachment 82774
second attempt; r? to see build errors on non-Mac ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352712</commentid>
    <comment_count>6</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-17 03:02:47 -0800</bug_when>
    <thetext>Attachment 82774 did not build on gtk:
Build output: http://queues.webkit.org/results/7920690</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352723</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-17 03:17:15 -0800</bug_when>
    <thetext>Attachment 82774 did not build on chromium:
Build output: http://queues.webkit.org/results/7917783</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352727</commentid>
    <comment_count>8</comment_count>
      <attachid>82779</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 03:24:22 -0800</bug_when>
    <thetext>Created attachment 82779
3rd attempt; r? to see build errors on non-Mac ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352729</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-17 03:37:23 -0800</bug_when>
    <thetext>Attachment 82765 did not build on chromium:
Build output: http://queues.webkit.org/results/7927591</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352731</commentid>
    <comment_count>10</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-17 03:42:19 -0800</bug_when>
    <thetext>Attachment 82779 did not build on gtk:
Build output: http://queues.webkit.org/results/7920700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352738</commentid>
    <comment_count>11</comment_count>
      <attachid>82781</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-17 03:48:49 -0800</bug_when>
    <thetext>Created attachment 82781
4th attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354353</commentid>
    <comment_count>12</comment_count>
      <attachid>82781</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-20 17:54:49 -0800</bug_when>
    <thetext>Comment on attachment 82781
4th attempt

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354455</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-02-21 01:29:16 -0800</bug_when>
    <thetext>Committed r79196: &lt;http://trac.webkit.org/changeset/79196&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82765</attachid>
            <date>2011-02-17 01:05:55 -0800</date>
            <delta_ts>2011-02-17 02:55:51 -0800</delta_ts>
            <desc>r? to see build errors on non-Mac ports</desc>
            <filename>bug-54622-20110217180553.patch</filename>
            <type>text/plain</type>
            <size>203287</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4Nzk4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRl
cHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLiBBbGwgY2FsbHMgdG8gbm9k
ZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVkTm9kZSgpIGV4Y2VwdCB3aGVu
CisgICAgICAgIGNhbGxzIHdlcmUgb2YgdGhlIGZvcm0gbm9kZSgpLT5kb2N1bWVudCgpIGFuZCBu
b2RlKCktPmluRG9jdW1lbnQoKSBpbiB3aGljaCBjYXNlIHRoZXkgd2VyZQorICAgICAgICByZXBs
YWNlZCBieSBhbmNob3JOb2RlKCktPmRvY3VtZW50KCkgYW5kIGFuY2hvck5vZGUoKS0+aW5Eb2N1
bWVudCgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCBQ
b3NpdGlvbjo6Y29udGFpbmVyTm9kZS4KKworICAgICAgICBUaGUgcmVzdCBhYmJyZXZpYXRlZCBm
b3Igc2ltcGxpY2l0eS4gUGxlYXNlIHNlZSBzdm4gbG9nLgorCiAyMDExLTAyLTE2ICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNzg3OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTIx
NSw2ICsxMjE1LDcgQEAgX19aTks3V2ViQ29yZThEb2N1bWVudDZkb21haW5FdgogX19aTks3V2Vi
Q29yZThJbnRQb2ludGN2N0NHUG9pbnRFdgogX19aTks3V2ViQ29yZThJbnRQb2ludGN2OF9OU1Bv
aW50RXYKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24xMGRvd25zdHJlYW1FTlNfMjdFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGVFCitfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMTNjb250YWluZXJOb2Rl
RXYKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNHBhcmVudEFuY2hvcmVkRXF1aXZhbGVudEV2CiBf
X1pOSzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlFQWZm
aW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjI2dHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRp
b25FTlNfOUVBZmZpbml0eUViCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcg
KzU3OCw3IEBAIFZpc2libGVQb3NpdGlvbiBBWE9iamVjdENhY2hlOjp2aXNpYmxlUG8KICAgICBp
ZiAoZGVlcFBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
ICAgIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZWVwUG9zLm5vZGUoKS0+cmVuZGVy
ZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVlcFBvcy5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKICAgICAKQEAgLTU4Niw3ICs1ODYsNyBAQCBWaXNpYmxlUG9zaXRpb24g
QVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAgICAgaWYgKCFjYWNoZS0+aXNJRGluVXNlKHRleHRN
YXJrZXJEYXRhLmF4SUQpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAg
Ci0gICAgaWYgKGRlZXBQb3Mubm9kZSgpICE9IHRleHRNYXJrZXJEYXRhLm5vZGUgfHwgZGVlcFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpICE9IHRleHRNYXJrZXJEYXRhLm9mZnNldCkKKyAg
ICBpZiAoZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgpICE9IHRleHRNYXJrZXJEYXRhLm5vZGUgfHwg
ZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpICE9IHRleHRNYXJrZXJEYXRhLm9mZnNl
dCkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIHJldHVybiB2
aXNpYmxlUG9zOwpAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1h
cmtlckRhdGFGb3JWaXMKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFBvc2l0aW9uIGRlZXBQ
b3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogZG9tTm9kZSA9IGRl
ZXBQb3Mubm9kZSgpOworICAgIE5vZGUqIGRvbU5vZGUgPSBkZWVwUG9zLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIGlmICghZG9tTm9kZSkKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
Miw5ICsyMjIsOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHVwZGF0ZUFYTGluZVN0YXJ0CiAg
ICAgICAgIGlmICh0ZW1wUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgcCA9IHRlbXBQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAoIXAu
bm9kZSgpKQorICAgICAgICBpZiAoIXAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICByZW5kZXJlciA9IHAubm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICBy
ZW5kZXJlciA9IHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFy
ZW5kZXJlciB8fCAocmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBJbmxpbmVCb3gqIGJv
eDsKQEAgLTMxOCw3ICszMTgsNyBAQCBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0CiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxlUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
ciA9IHJlbmRlcmVyOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgp
OwogCkBAIC0zNDEsNyArMzQxLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5
bGVSYW5nZQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZE9mU3R5bGVSYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIg
PSByZW5kZXJlcjsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
IApAQCAtNjQ5LDcgKzY0OSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlP
YmplY3QKICAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBSZW5kZXJPYmplY3QqIG9iaiA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBvYmogPSB2aXNpYmxlUG9zLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIW9iaikK
ICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
Nzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgyLDEzICsyNDgyLDEzIEBAIGludCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclYKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCiAgICAgUG9zaXRpb24gaW5kZXhQb3NpdGlvbiA9IHBvcy5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIGlmICghaW5kZXhQb3NpdGlvbi5ub2RlKCkgfHwgaW5kZXhQb3NpdGlvbi5ub2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBub2RlKQorICAgIGlmICghaW5kZXhQb3NpdGlvbi5hbmNo
b3JOb2RlKCkgfHwgaW5kZXhQb3NpdGlvbi5hbmNob3JOb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSAhPSBub2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShtX3JlbmRl
cmVyLT5kb2N1bWVudCgpKTsKICAgICByYW5nZS0+c2V0U3RhcnQobm9kZSwgMCwgZWMpOwotICAg
IHJhbmdlLT5zZXRFbmQoaW5kZXhQb3NpdGlvbi5ub2RlKCksIGluZGV4UG9zaXRpb24uZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHJhbmdlLT5zZXRFbmQoaW5kZXhQb3NpdGlv
bi5hbmNob3JOb2RlKCksIGluZGV4UG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwg
ZWMpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKTsK
IH0KIApAQCAtMjYyMSw3ICsyNjIxLDcgQEAgaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmluZGV4KGNvbgogICAgIGlmICghaXNUZXh0Q29udHJvbCgpKQogICAgICAgICByZXR1cm4gLTE7
CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
OworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIFBhc3NS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiAKIAogUG9zaXRpb24gUG9zaXRpb246
OnByZXZpb3VzKFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0CiB7Ci0gICAgTm9kZSog
biA9IG5vZGUoKTsKKyAgICBOb2RlKiBuID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW4p
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAKQEAgLTI2OSw3ICsyNjksNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlCiB7CiAgICAgQVNTRVJUKG1vdmVUeXBl
ICE9IEJhY2t3YXJkRGVsZXRpb24pOwogCi0gICAgTm9kZSogbiA9IG5vZGUoKTsKKyAgICBOb2Rl
KiBuID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICAKQEAgLTMyMyw3ICszMjMsNyBAQCBib29sIFBvc2l0aW9uOjphdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOCiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICByZXR1cm4gbV9vZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSgpKTsKKyAg
ICByZXR1cm4gbV9vZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUo
KSk7CiB9CiAKIC8vIEEgcG9zaXRpb24gaXMgY29uc2lkZXJlZCBhdCBlZGl0aW5nIGJvdW5kYXJ5
IGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6CkBAIC0zMzYsMTUgKzMzNiwxNSBAQCBi
b29sIFBvc2l0aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOCiBib29sIFBvc2l0aW9uOjph
dEVkaXRpbmdCb3VuZGFyeSgpIGNvbnN0CiB7CiAgICAgUG9zaXRpb24gbmV4dFBvc2l0aW9uID0g
ZG93bnN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0Rmlyc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0
UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdEZpcnN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4
dFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBQb3NpdGlvbiBwcmV2UG9zaXRpb24gPSB1cHN0
cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgaWYgKGF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlv
bi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgCi0gICAgcmV0dXJuIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAh
bmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQotICAgICAgICAmJiBwcmV2
UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7CisgICAgcmV0dXJuIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhbmV4dFBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkKKyAgICAgICAgJiYg
cHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogTm9kZSogUG9zaXRpb246OnBhcmVudEVkaXRp
bmdCb3VuZGFyeSgpIGNvbnN0CkBAIC0zNjgsMjYgKzM2OCwyNiBAQCBib29sIFBvc2l0aW9uOjph
dFN0YXJ0T2ZUcmVlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIHJldHVybiAhbm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgbV9vZmZzZXQgPD0g
MDsKKyAgICByZXR1cm4gIWRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNl
dCA8PSAwOwogfQogCiBib29sIFBvc2l0aW9uOjphdEVuZE9mVHJlZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIW5vZGUoKS0+
cGFyZW50Tm9kZSgpICYmIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUoKSk7
CisgICAgcmV0dXJuICFkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgbV9vZmZzZXQg
Pj0gbGFzdE9mZnNldEZvckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIGludCBQb3Np
dGlvbjo6cmVuZGVyZWRPZmZzZXQoKSBjb25zdAogewotICAgIGlmICghbm9kZSgpLT5pc1RleHRO
b2RlKCkpCisgICAgaWYgKCFkZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpCiAgICAgICAg
IHJldHVybiBtX29mZnNldDsKICAgIAotICAgIGlmICghbm9kZSgpLT5yZW5kZXJlcigpKQorICAg
IGlmICghZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0OwogICAgICAgICAgICAgICAgICAgICAKICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBSZW5k
ZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQobm9kZSgpLT5yZW5kZXJlcigpKTsK
KyAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQoZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSB0ZXh0UmVu
ZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewog
ICAgICAgICBpbnQgc3RhcnQgPSBib3gtPnN0YXJ0KCk7CiAgICAgICAgIGludCBlbmQgPSBib3gt
PnN0YXJ0KCkgKyBib3gtPmxlbigpOwpAQCAtNDA4LDcgKzQwOCw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjpwcmV2aW91c0NoYXJhY3RlclBvc2kKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCi0gICAgTm9kZSAqZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQgPSBu
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBOb2RlICpmcm9tUm9vdEVkaXRhYmxl
RWxlbWVudCA9IGRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAogICAg
IGJvb2wgYXRTdGFydE9mTGluZSA9IGlzU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKCp0aGlz
LCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQgPSBpc0NhbmRpZGF0ZSgpOwpAQCAtNDE3
LDcgKzQxNyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91c0NoYXJhY3RlclBvc2kKICAg
ICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRTdGFydE9mVHJlZSgpKSB7CiAgICAgICAgIGN1cnJlbnRQ
b3MgPSBjdXJyZW50UG9zLnByZXZpb3VzKCk7CiAKLSAgICAgICAgaWYgKGN1cnJlbnRQb3Mubm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCisg
ICAgICAgIGlmIChjdXJyZW50UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKIAogICAgICAgICBpZiAoYXRTdGFydE9mTGluZSB8fCAhcmVuZGVyZWQpIHsKQEAgLTQzNiw3
ICs0MzYsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dENoYXJhY3RlclBvc2l0aW9uCiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAotICAgIE5vZGUgKmZy
b21Sb290RWRpdGFibGVFbGVtZW50ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7Cisg
ICAgTm9kZSAqZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQgPSBkZXByZWNhdGVkTm9kZSgpLT5yb290
RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICBib29sIGF0RW5kT2ZMaW5lID0gaXNFbmRPZkxpbmUo
VmlzaWJsZVBvc2l0aW9uKCp0aGlzLCBhZmZpbml0eSkpOwogICAgIGJvb2wgcmVuZGVyZWQgPSBp
c0NhbmRpZGF0ZSgpOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0
Q2hhcmFjdGVyUG9zaXRpb24KICAgICB3aGlsZSAoIWN1cnJlbnRQb3MuYXRFbmRPZlRyZWUoKSkg
ewogICAgICAgICBjdXJyZW50UG9zID0gY3VycmVudFBvcy5uZXh0KCk7CiAKLSAgICAgICAgaWYg
KGN1cnJlbnRQb3Mubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0
YWJsZUVsZW1lbnQpCisgICAgICAgIGlmIChjdXJyZW50UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKIAogICAgICAgICBpZiAoYXRFbmRPZkxpbmUgfHwgIXJlbmRlcmVk
KSB7CkBAIC01MDcsNyArNTA3LDcgQEAgc3RhdGljIGJvb2wgaXNTdHJlYW1lcihjb25zdCBQb3Np
dGlvbkl0ZQogLy8gaW4gYm91bmRhcnksIHdoZXJlIGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKGJvdW5kYXJ5KSBpcyB0cnVlLgogUG9zaXRpb24gUG9zaXRpb246OnVwc3Ry
ZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogewotICAgIE5vZGUq
IHN0YXJ0Tm9kZSA9IG5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBkZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAg
ICAKQEAgLTYyOCw3ICs2MjgsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oRWRpdGlu
Z0JvdW5kCiAvLyBpbiBib3VuZGFyeSBhZnRlciB0aGUgbGFzdCBjYW5kaWRhdGUsIHdoZXJlIGVu
ZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKGJvdW5kYXJ5KS4KIFBvc2l0aW9u
IFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBj
b25zdAogewotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5v
ZGUgPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKIApAQCAtNzY0LDcgKzc2NCw3IEBAIGJvb2wgUG9zaXRpb246OmlzQ2Fu
ZGlkYXRlKCkgY29uc3QKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUoKS0+cmVuZGVyZXIo
KTsKKyAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBA
IC03NzIsMTMgKzc3MiwxMyBAQCBib29sIFBvc2l0aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQotICAgICAg
ICByZXR1cm4gIW1fb2Zmc2V0ICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCktPnBhcmVu
dE5vZGUoKSk7CisgICAgICAgIHJldHVybiAhbV9vZmZzZXQgJiYgIW5vZGVJc1VzZXJTZWxlY3RO
b25lKGRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSk7CiAKICAgICBpZiAocmVuZGVyZXIt
PmlzVGV4dCgpKQotICAgICAgICByZXR1cm4gIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkg
JiYgaW5SZW5kZXJlZFRleHQoKTsKKyAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9u
ZShkZXByZWNhdGVkTm9kZSgpKSAmJiBpblJlbmRlcmVkVGV4dCgpOwogCi0gICAgaWYgKGlzVGFi
bGVFbGVtZW50KG5vZGUoKSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUoKSkpCi0gICAg
ICAgIHJldHVybiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCktPnBh
cmVudE5vZGUoKSk7CisgICAgaWYgKGlzVGFibGVFbGVtZW50KGRlcHJlY2F0ZWROb2RlKCkpIHx8
IGVkaXRpbmdJZ25vcmVzQ29udGVudChkZXByZWNhdGVkTm9kZSgpKSkKKyAgICAgICAgcmV0dXJu
IChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIHx8IGF0TGFzdEVkaXRpbmdQb3NpdGlv
bkZvck5vZGUoKSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCktPnBh
cmVudE5vZGUoKSk7CiAKICAgICBpZiAobV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODYsMjEgKzc4NiwyMSBAQCBib29sIFBvc2l0
aW9uOjppc0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygp
KSB7CiAgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbV9h
bmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAgICAgICAgICBpZiAoIVBvc2l0
aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJl
cikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2Rl
KCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRpb246
Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiAh
UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRp
b246Om5vZGVJc1VzZXJTZWxlY3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0Jv
dW5kYXJ5KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG1fYW5jaG9y
Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3RO
b25lKG5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKKyAgICAgICAgcmV0dXJuIG1fYW5j
aG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxl
Y3ROb25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUG9zaXRpb246OmluUmVuZGVyZWRUZXh0KCkgY29uc3QK
IHsKLSAgICBpZiAoaXNOdWxsKCkgfHwgIW5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgIGlmIChp
c051bGwoKSB8fCAhZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlKCkt
PnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIApAQCAtODMzLDEwICs4MzMsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGNhcmV0TWF4UmVu
ZGVyZWRPZmZzZXQoYwogCiBib29sIFBvc2l0aW9uOjppc1JlbmRlcmVkQ2hhcmFjdGVyKCkgY29u
c3QKIHsKLSAgICBpZiAoaXNOdWxsKCkgfHwgIW5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgIGlm
IChpc051bGwoKSB8fCAhZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
KCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIApAQCAtODYwLDExICs4NjAsMTEgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0lu
RGlmZmVyZW50UG9zaXRpbwogICAgIGlmIChpc051bGwoKSB8fCBwb3MuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlKCkt
PnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IGRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIFJlbmRlck9iamVjdCAqcG9zUmVuZGVyZXIgPSBwb3Mubm9kZSgpLT5yZW5k
ZXJlcigpOworICAgIFJlbmRlck9iamVjdCAqcG9zUmVuZGVyZXIgPSBwb3MuZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXBvc1JlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTg3MiwzMiArODcyLDMyIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRp
ZmZlcmVudFBvc2l0aW8KICAgICAgICAgcG9zUmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG5vZGUo
KSA9PSBwb3Mubm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcp
KQorICAgIGlmIChkZXByZWNhdGVkTm9kZSgpID09IHBvcy5kZXByZWNhdGVkTm9kZSgpKSB7Cisg
ICAgICAgIGlmIChkZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAobV9vZmZzZXQgPT0gcG9zLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAKLSAgICAgICAgaWYgKCFub2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcG9zLm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmICghZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgp
ICYmICFwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBp
ZiAobV9vZmZzZXQgIT0gcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUo
KS0+aGFzVGFnTmFtZShiclRhZykgJiYgcG9zLmlzQ2FuZGlkYXRlKCkpCisgICAgaWYgKGRlcHJl
Y2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIHBvcy5pc0NhbmRpZGF0ZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICBpZiAocG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykgJiYgaXNDYW5kaWRhdGUoKSkKKyAgICBpZiAocG9zLmRlcHJlY2F0
ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAotICAgIGlmIChub2RlKCktPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KCkpCisgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSAhPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChub2RlKCktPmlzVGV4dE5vZGUoKSAmJiAh
aW5SZW5kZXJlZFRleHQoKSkKKyAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgp
ICYmICFpblJlbmRlcmVkVGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
cG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3MuaW5SZW5kZXJlZFRleHQoKSkKKyAgICBp
ZiAocG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcG9zLmluUmVuZGVyZWRU
ZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGludCB0aGlzUmVuZGVyZWRPZmZz
ZXQgPSByZW5kZXJlZE9mZnNldCgpOwpAQCAtOTE2LDggKzkxNiw4IEBAIGJvb2wgUG9zaXRpb246
OnJlbmRlcnNJbkRpZmZlcmVudFBvc2l0aW8KICAgICBMT0coRWRpdGluZywgInRoaXNSZW5kZXJl
ZE9mZnNldDogICAgICAgICAlZFxuIiwgdGhpc1JlbmRlcmVkT2Zmc2V0KTsKICAgICBMT0coRWRp
dGluZywgInBvc1JlbmRlcmVyOiAgICAgICAgICAgICVwIFslcF1cbiIsIHBvc1JlbmRlcmVyLCBi
Mik7CiAgICAgTE9HKEVkaXRpbmcsICJwb3NSZW5kZXJlZE9mZnNldDogICAgICAlZFxuIiwgcG9z
UmVuZGVyZWRPZmZzZXQpOwotICAgIExPRyhFZGl0aW5nLCAibm9kZSBtaW4vbWF4OiAgICAgICAg
ICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KG5vZGUoKSksIGNhcmV0TWF4UmVuZGVyZWRPZmZz
ZXQobm9kZSgpKSk7Ci0gICAgTE9HKEVkaXRpbmcsICJwb3Mgbm9kZSBtaW4vbWF4OiAgICAgICAl
ZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUoKSksIGNhcmV0TWF4UmVuZGVyZWRPZmZz
ZXQocG9zLm5vZGUoKSkpOworICAgIExPRyhFZGl0aW5nLCAibm9kZSBtaW4vbWF4OiAgICAgICAg
ICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KGRlcHJlY2F0ZWROb2RlKCkpLCBjYXJldE1heFJl
bmRlcmVkT2Zmc2V0KGRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBMT0coRWRpdGluZywgInBvcyBu
b2RlIG1pbi9tYXg6ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChwb3MuZGVwcmVjYXRl
ZE5vZGUoKSksIGNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKTsK
ICAgICBMT0coRWRpdGluZywgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCiAgICAgaWYgKCFiMSB8fCAh
YjIpIHsKQEAgLTkyOCwxMyArOTI4LDEzIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZl
cmVudFBvc2l0aW8KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKG5leHRS
ZW5kZXJlZEVkaXRhYmxlKG5vZGUoKSkgPT0gcG9zLm5vZGUoKSAmJiAKLSAgICAgICAgdGhpc1Jl
bmRlcmVkT2Zmc2V0ID09IChpbnQpY2FyZXRNYXhSZW5kZXJlZE9mZnNldChub2RlKCkpICYmIHBv
c1JlbmRlcmVkT2Zmc2V0ID09IDApIHsKKyAgICBpZiAobmV4dFJlbmRlcmVkRWRpdGFibGUoZGVw
cmVjYXRlZE5vZGUoKSkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkgJiYgCisgICAgICAgIHRoaXNS
ZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoZGVwcmVjYXRlZE5v
ZGUoKSkgJiYgcG9zUmVuZGVyZWRPZmZzZXQgPT0gMCkgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9
PSBwb3Mubm9kZSgpICYmIAotICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gMCAmJiBwb3NS
ZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLm5vZGUoKSkp
IHsKKyAgICBpZiAocHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09
IHBvcy5kZXByZWNhdGVkTm9kZSgpICYmIAorICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0g
MCAmJiBwb3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9z
LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTk0OCwxMiArOTQ4LDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBv
c2kKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogICAgIAot
ICAgIGlmICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHVw
c3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVy
UG9zaXRpb24oYWZmaW5pdHkpOwotICAgIGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYubm9kZSgp
LT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkpICYmIHByZXYubm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRl
eHQgKj4ocHJldi5ub2RlKCkpLT5kYXRhKCk7CisgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgcHJl
di5kZXByZWNhdGVkTm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChkZXBy
ZWNhdGVkTm9kZSgpKSAmJiBwcmV2LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewor
ICAgICAgICBTdHJpbmcgc3RyaW5nID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihwcmV2LmRlcHJlY2F0
ZWROb2RlKCkpLT5kYXRhKCk7CiAgICAgICAgIFVDaGFyIGMgPSBzdHJpbmdbcHJldi5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpXTsKICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVX
aGl0ZXNwYWNlID8gKGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDog
aXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICBpZiAoaXNFZGl0YWJsZVBv
c2l0aW9uKHByZXYpKQpAQCAtMTA0NSwxMSArMTA0NSwxMSBAQCBzdGF0aWMgUG9zaXRpb24gdXBz
dHJlYW1JZ25vcmluZ0VkaXRpbmdCCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoRUFmZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElu
bGluZUJveComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKICAgICBjYXJl
dE9mZnNldCA9IG1fb2Zmc2V0OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlKCkt
PnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCk7CiAKICAgICBpZiAoIXJlbmRlcmVyLT5pc1RleHQoKSkgewogICAgICAg
ICBpbmxpbmVCb3ggPSAwOwotICAgICAgICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhu
b2RlKCkpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnlt
b3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkgeworICAgICAgICBpZiAoY2FuSGF2
ZUNoaWxkcmVuRm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKSAmJiByZW5kZXJlci0+aXNCbG9j
a0Zsb3coKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChy
ZW5kZXJlcikpIHsKICAgICAgICAgICAgIC8vIFRyeSBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9z
aXRpb24gd2l0aCBwb3NzaWJseSBvcHBvc2l0ZSBlZGl0YWJpbGl0eS4gVGhpcyBoZWxwcyBpbiBj
YXNlIHx0aGlzfCBpcyBpbgogICAgICAgICAgICAgLy8gYW4gZWRpdGFibGUgYmxvY2sgYnV0IHN1
cnJvdW5kZWQgYnkgbm9uLWVkaXRhYmxlIHBvc2l0aW9ucy4gSXQgYWN0cyB0byBuZWdhdGUgdGhl
IGxvZ2ljIGF0IHRoZSBiZWdpbm5pbmcKICAgICAgICAgICAgIC8vIG9mIFJlbmRlck9iamVjdDo6
Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKCkuCkBAIC0xMjExLDcgKzEyMTEsNyBAQCB2b2lkIFBvc2l0
aW9uOjpkZWJ1Z1Bvc2l0aW9uKGNvbnN0IGNoYXIqCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxcbiIsIG1zZyk7CiAgICAgZWxz
ZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRc
biIsIG1zZywgbm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIG5vZGUoKSwgbV9vZmZz
ZXQpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQg
JWRcbiIsIG1zZywgZGVwcmVjYXRlZE5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBk
ZXByZWNhdGVkTm9kZSgpLCBtX29mZnNldCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xMjI3
LDcgKzEyMjcsNyBAQCB2b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBiCiAg
ICAgICAgIHJlc3VsdCArPSAib2Zmc2V0ICI7CiAgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51
bWJlcihtX29mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7Ci0gICAgICAgIG5vZGUo
KS0+Zm9ybWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKKyAgICAgICAgZGVwcmVjYXRlZE5v
ZGUoKS0+Zm9ybWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKICAgICAgICAgcmVzdWx0ICs9
IHM7CiAgICAgfQogICAgICAgICAgIApAQCAtMTI1NCw4ICsxMjU0LDggQEAgdm9pZCBQb3NpdGlv
bjo6c2hvd0FuY2hvclR5cGVBbmRPZmZzZXQoKQogCiB2b2lkIFBvc2l0aW9uOjpzaG93VHJlZUZv
clRoaXMoKSBjb25zdAogewotICAgIGlmIChub2RlKCkpIHsKLSAgICAgICAgbm9kZSgpLT5zaG93
VHJlZUZvclRoaXMoKTsKKyAgICBpZiAoYW5jaG9yTm9kZSgpKSB7CisgICAgICAgIGFuY2hvck5v
ZGUoKS0+c2hvd1RyZWVGb3JUaGlzKCk7CiAgICAgICAgIHNob3dBbmNob3JUeXBlQW5kT2Zmc2V0
KCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDc4Nzk1KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3
ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIGJlIG1vdmVk
IG9mZiBvZiBub2RlKCksIG5vZGUoKSBpcyBub3QgYWx3YXlzIHRoZSBjb250YWluZXIgZm9yIHRo
aXMgcG9zaXRpb24uCiAgICAgLy8gRm9yIG5vZGVzIHdoaWNoIGVkaXRpbmdJZ25vcmVzQ29udGVu
dChub2RlKCkpIHJldHVybnMgdHJ1ZSwgcG9zaXRpb25zIGxpa2UgW2lnbm9yZWROb2RlLCAwXQog
ICAgIC8vIHdpbGwgYmUgdHJlYXRlZCBhcyBiZWZvcmUgaWdub3JlZE5vZGUgKHRodXMgbm9kZSgp
IGlzIHJlYWxseSBhZnRlciB0aGUgcG9zaXRpb24sIG5vdCBjb250YWluaW5nIGl0KS4KLSAgICBO
b2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOyB9CisgICAgTm9k
ZSogZGVwcmVjYXRlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvck5vZGUuZ2V0KCk7IH0K
IAogICAgIC8vIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciBwb3NpdGlvbnMsIHVubGVzcwogICAgIC8vIHRoZSBwb3NpdGlvbiBpcyBhIGxlZ2Fj
eSBlZGl0aW5nIHBvc2l0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJs
b2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCwxMSArMTM0LDExIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
Ojpmb3JtYXRTZWwKICAgICAgICAgLy8gaW5kZW50SW50b0Jsb2NrcXVvdGUgY291bGQgbW92ZSBt
b3JlIHRoYW4gb25lIHBhcmFncmFwaCBpZiB0aGUgcGFyYWdyYXBoCiAgICAgICAgIC8vIGlzIGlu
IGEgbGlzdCBpdGVtIG9yIGEgdGFibGUuIEFzIGEgcmVzdWx0LCBlbmRBZnRlclNlbGVjdGlvbiBj
b3VsZCByZWZlciB0byBhIHBvc2l0aW9uCiAgICAgICAgIC8vIG5vIGxvbmdlciBpbiB0aGUgZG9j
dW1lbnQuCi0gICAgICAgIGlmIChlbmRBZnRlclNlbGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5k
QWZ0ZXJTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAg
ICAgICAgaWYgKGVuZEFmdGVyU2VsZWN0aW9uLmlzTm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVj
dGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBtb3Zl
UGFyYWdyYXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVp
dmFsZW50KCkubm9kZSgpCisgICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBt
b3ZlUGFyYWdyYXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKQogICAgICAgICAvLyBJZiBzb21laG93IHdlIGRp
ZCwgcmV0dXJuIHRvIHByZXZlbnQgY3Jhc2hlcy4KLSAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFn
cmFwaC5pc05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5p
c05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9y
Tm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xODIsOCArMTgyLDggQEAgdm9p
ZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIFJlbmRlclN0eWxlKiBz
dGFydFN0eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KTsKICAgICBi
b29sIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7CiAgICAgaWYgKHN0YXJ0U3R5bGUp
IHsKLSAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKTsKLSAgICAgICAg
Ym9vbCBpc1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgc3RhcnQubm9kZSgp
ID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm5vZGUoKTsKKyAgICAgICAgaXNTdGFydEFuZEVuZE9u
U2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5k
ZXByZWNhdGVkTm9kZSgpID09IGVuZC5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBib29sIGlz
U3RhcnRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xv
c2luZ1RleHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9k
ZSgpID09IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAg
Ly8gQXZvaWQgb2J0YW5pbmluZyB0aGUgc3RhcnQgb2YgbmV4dCBwYXJhZ3JhcGggZm9yIHN0YXJ0
CiAgICAgICAgIGlmIChzdGFydFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBpc05ld0xpbmVB
dFBvc2l0aW9uKHN0YXJ0KSAmJiAhaXNOZXdMaW5lQXRQb3NpdGlvbihzdGFydC5wcmV2aW91cygp
KSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+IDApCkBAIC0xOTIsMTUgKzE5Miwx
NSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAgIC8v
IElmIHN0YXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAgICAg
ICBpZiAoIXN0YXJ0U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpID4gMCkgewogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0
YXRpY19jYXN0PFRleHQqPihzdGFydC5ub2RlKCkpLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAg
ICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICAgICAg
c3BsaXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSks
IHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNh
bWVOb2RlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA+PSBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5k
Lm5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnRPZmZzZXQsIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgICAgIGVuZCA9IFBv
c2l0aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
LSBzdGFydE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9mTGFzdFBhcmFncmFwaE9u
U2FtZU5vZGUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9lbmRPZkxhc3RQYXJhZ3JhcGgu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAg
IG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24obV9lbmRPZkxhc3RQYXJhZ3JhcGgubm9k
ZSgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0
T2Zmc2V0LAorICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24o
bV9lbmRPZkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUoKSwgbV9lbmRPZkxhc3RQYXJhZ3Jh
cGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTIwOCwxMyArMjA4LDEzIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kOjpyYW5nZUZvclAKIAogICAgIFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0
eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShlbmQpOwogICAgIGlmIChlbmRTdHlsZSkgewotICAgICAg
ICBib29sIGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxl
T2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5kLm5vZGUoKSA9
PSBtX2VuZE9mTGFzdFBhcmFncmFwaC5ub2RlKCk7CisgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRP
Zkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2Rl
KG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBlbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9m
TGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0
IHRoZSBlbmQgb2YgbGluZSBpZiB3ZSdyZSBhdCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAg
aWYgKGVuZFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBzdGFydCA9PSBlbmQKICAgICAgICAg
ICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCkt
Pm1heENoYXJhY3Rlck9mZnNldCgpKSB7CiAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5k
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpc05ld0xpbmVBdFBv
c2l0aW9uKGVuZC5wcmV2aW91cygpKSAmJiBpc05ld0xpbmVBdFBvc2l0aW9uKGVuZCkpCi0gICAg
ICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kT2Zmc2V0ICsgMSwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgICAgICAgICAgZW5kID0g
UG9zaXRpb24oZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZE9mZnNldCArIDEsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZM
YXN0UGFyYWdyYXBoT25TYW1lTm9kZSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0g
bV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAg
ICAgICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBlbmQ7CiAgICAgICAgIH0KQEAgLTIyMiwxNyAr
MjIyLDE3IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclAKICAgICAg
ICAgLy8gSWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAg
ICAgICBpZiAoIWVuZFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkKICAgICAgICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7Ci0gICAgICAg
ICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGlj
X2Nhc3Q8VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkKLSAgICAg
ICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2aW91
c1NpYmxpbmcoKSk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUo
ZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgICAgIGlm
IChpc0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUpIHsKICAgICAgICAgICAgICAg
ICBpZiAobV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gZW5k
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFz
dFBhcmFncmFwaCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFzdFBv
c2l0aW9uSW5Ob2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFn
cmFwaCA9IFBvc2l0aW9uKGVuZC5ub2RlKCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpIC0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLAorICAgICAgICAg
ICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKGVuZC5kZXByZWNhdGVk
Tm9kZSgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVu
ZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShl
bmQubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9z
aXRpb25Jbk5vZGUoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcg
QEAgU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKENTU1N0eWxlRGVjbGFyYQogCiB2b2lkIFN0eWxl
Q2hhbmdlOjppbml0KFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIGNvbnN0
IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwb3NpdGlv
bi5ub2RlKCkgPyBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCkgOiAwOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHBvc2l0aW9uLmFuY2hvck5vZGUoKSA/IHBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKSA6IDA7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU3R5bGVDaGFu
Z2U6OmluaXQoUGFzc1JlZlB0cjxDU1NTdHkKICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9j
dW1lbnQsIG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+dXNlRml4ZWRGb250RGVm
YXVsdFNpemUoKSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFjZSBzdHlsZSBpbiBh
IHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNlLgotICAgIGlmIChp
c1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5ub2RlKCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0
aW9uLm5vZGUoKSkpKQorICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpKSB8fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkp
CiAgICAgICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNw
YWNlKTsKIAogICAgIC8vIElmIHVuaWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHls
ZSBhbmQgZGlyZWN0aW9uIGlzIG5vdCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHls
ZS4KQEAgLTU4MSw3ICs1ODEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2Nr
U3R5bGUoCiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50cyB1
c2luZyB0aGVpciBpbmRpY2VzIGluIHRoZSBkb2N1bWVudCwgc2luY2UKICAgICAvLyBhZGRCbG9j
a1N0eWxlSWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVtb3ZlIHRoZXNl
IGVuZHBvaW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20g
dGhlIHN0YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBOb2RlKiBzY29wZSA9
IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwor
ICAgIE5vZGUqIHNjb3BlID0gaGlnaGVzdEFuY2VzdG9yKHZpc2libGVTdGFydC5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZp
c2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsK
ICAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CkBAIC01OTMsNyArNTkz
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKAogICAgIHdoaWxl
IChwYXJhZ3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBwYXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRF
bmQpIHsKICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUtPnN0eWxlKCksIHBh
cmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICBpZiAoc3R5bGVDaGFuZ2Uu
Y3NzU3R5bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBibG9jayA9IGVuY2xvc2lu
Z0Jsb2NrKHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7
CiAgICAgICAgICAgICBpZiAoIW1fcmVtb3ZlT25seSkgewogICAgICAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuZXdCbG9jayA9IG1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vz
c2FyeShwYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgICAgICAgICBp
ZiAobmV3QmxvY2spCkBAIC02MzYsMTMgKzYzNiwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9uCiAgICAgfQogCiAgICAgLy8gSm9pbiB1cCBhbnkgYWRqYWNlbnQg
dGV4dCBub2Rlcy4KLSAgICBpZiAoc3RhcnQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAg
ICAgam9pbkNoaWxkVGV4dE5vZGVzKHN0YXJ0Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwg
ZW5kKTsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGpvaW5DaGlsZFRleHROb2RlcyhzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnRO
b2RlKCksIHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAg
ICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKICAgICB9Ci0gICAgaWYgKGVuZC5ub2RlKCktPmlz
VGV4dE5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmQubm9kZSgpLT5w
YXJlbnROb2RlKCkpIHsKLSAgICAgICAgam9pbkNoaWxkVGV4dE5vZGVzKGVuZC5ub2RlKCktPnBh
cmVudE5vZGUoKSwgc3RhcnQsIGVuZCk7CisgICAgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5p
c1RleHROb2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVu
ZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgam9pbkNoaWxkVGV4
dE5vZGVzKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0LCBlbmQpOwog
ICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRp
b24oKTsKICAgICB9CkBAIC02NjQsMTMgKzY2NCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseVJlbGF0aXZlRm9uCiAgICAgLy8gSWYgdGhlIGVuZCBub2RlIGlzIGJlZm9yZSB0aGUg
c3RhcnQgbm9kZSAoY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBlbmQgbm9kZSBpcwogICAgIC8vIGFu
IGFuY2VzdG9yIG9mIHRoZSBzdGFydCBub2RlKSwgd2UgZ2F0aGVyIG5vZGVzIHVwIHRvIHRoZSBu
ZXh0IHNpYmxpbmcgb2YgdGhlIGVuZCBub2RlCiAgICAgTm9kZSAqYmV5b25kRW5kOwotICAgIGlm
IChzdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5ub2RlKCkpKQotICAgICAgICBiZXlv
bmRFbmQgPSBlbmQubm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgaWYgKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5kZXByZWNhdGVkTm9kZSgpKSkK
KyAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNp
YmxpbmcoKTsKICAgICBlbHNlCi0gICAgICAgIGJleW9uZEVuZCA9IGVuZC5ub2RlKCktPnRyYXZl
cnNlTmV4dE5vZGUoKTsKKyAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAKICAgICBzdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7
IC8vIE1vdmUgdXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50IHNwYW5z
LgotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlICpzdGFydE5v
ZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5v
ZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0
KHN0YXJ0Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiByYW5nZSBkb2VzIG5vdCBp
bmNsdWRlIGl0cyBjaGFyYWN0ZXJzLgogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKIApAQCAtODc0LDI1ICs4NzQsMjUgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIHNwbGl0IHRoZSBzdGFydCBub2RlIGFu
ZCBjb250YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMgaW5zaWRlIG9mIGl0
CiAgICAgYm9vbCBzcGxpdFN0YXJ0ID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKHN0
YXJ0KTsKICAgICBpZiAoc3BsaXRTdGFydCkgewotICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0
RWxlbWVudChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQor
ICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChzdGFydC5kZXByZWNhdGVkTm9kZSgp
LT5wYXJlbnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgpKSkKICAgICAgICAgICAgIHNwbGl0VGV4
dEVsZW1lbnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBz
cGxpdFRleHRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRp
b24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgc3RhcnREdW1teVNw
YW5BbmNlc3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5ub2RlKCkpOworICAg
ICAgICBzdGFydER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIH0KIAogICAgIC8vIHNwbGl0IHRoZSBlbmQgbm9k
ZSBhbmQgY29udGFpbmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbnNpZGUgb2Yg
aXQKICAgICBib29sIHNwbGl0RW5kID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGVu
ZCk7CiAgICAgaWYgKHNwbGl0RW5kKSB7Ci0gICAgICAgIGlmIChzaG91bGRTcGxpdFRleHRFbGVt
ZW50KGVuZC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQorICAgICAg
ICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50
RWxlbWVudCgpLCBzdHlsZS0+c3R5bGUoKSkpCiAgICAgICAgICAgICBzcGxpdFRleHRFbGVtZW50
QXRFbmQoc3RhcnQsIGVuZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNwbGl0VGV4dEF0
RW5kKHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAg
ICAgZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBk
dW1teVNwYW5BbmNlc3RvckZvck5vZGUoZW5kLm5vZGUoKSk7CisgICAgICAgIGVuZER1bW15U3Bh
bkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGVuZC5kZXByZWNhdGVkTm9kZSgp
KTsKICAgICB9CiAKICAgICAvLyBSZW1vdmUgc3R5bGUgZnJvbSB0aGUgc2VsZWN0aW9uLgpAQCAt
OTA5LDEwICs5MDksMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZQogICAgICAgICBzdHlsZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKIAogICAgICAg
ICAvLyBMZWF2ZSBhbG9uZSBhbiBhbmNlc3RvciB0aGF0IHByb3ZpZGVzIHRoZSBkZXNpcmVkIHNp
bmdsZSBsZXZlbCBlbWJlZGRpbmcsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgSFRNTEVsZW1l
bnQqIHN0YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGko
c3RhcnQubm9kZSgpLCB0cnVlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgSFRNTEVsZW1lbnQq
IGVuZFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKGVuZC5u
b2RlKCksIGZhbHNlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgcmVtb3ZlRW1iZWRkaW5nVXBU
b0VuY2xvc2luZ0Jsb2NrKHN0YXJ0Lm5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3IpOwotICAg
ICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSwgZW5kVW5z
cGxpdEFuY2VzdG9yKTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIHN0YXJ0VW5zcGxpdEFuY2VzdG9y
ID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwg
dHJ1ZSwgdGV4dERpcmVjdGlvbik7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbmRVbnNwbGl0QW5j
ZXN0b3IgPSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShlbmQuZGVwcmVjYXRlZE5vZGUo
KSwgZmFsc2UsIHRleHREaXJlY3Rpb24pOworICAgICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5j
bG9zaW5nQmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3Ip
OworICAgICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLmRlcHJlY2F0
ZWROb2RlKCksIGVuZFVuc3BsaXRBbmNlc3Rvcik7CiAKICAgICAgICAgLy8gQXZvaWQgcmVtb3Zp
bmcgdGhlIGRpciBhdHRyaWJ1dGUgYW5kIHRoZSB1bmljb2RlLWJpZGkgYW5kIGRpcmVjdGlvbiBw
cm9wZXJ0aWVzIGZyb20gdGhlIHVuc3BsaXQgYW5jZXN0b3JzLgogICAgICAgICBQb3NpdGlvbiBl
bWJlZGRpbmdSZW1vdmVTdGFydCA9IHJlbW92ZVN0YXJ0OwpAQCAtOTU5LDggKzk1OSw4IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9BcHBseSA9IHN0eWxlLT5pc0VtcHR5KCkgPyBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkgOiBzdHlsZS0+c3R5bGUoKTsKICAg
ICBpZiAodW5pY29kZUJpZGkpIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNv
ZGUtYmlkaSBhbmQgZGlyZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBh
bHJlYWR5IGhhdmUgdGhlbS4KLSAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGln
aGVzdEVtYmVkZGluZ0FuY2VzdG9yKHN0YXJ0Lm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQu
bm9kZSgpKSk7Ci0gICAgICAgIE5vZGUqIGVtYmVkZGluZ0VuZE5vZGUgPSBoaWdoZXN0RW1iZWRk
aW5nQW5jZXN0b3IoZW5kLm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSkpOworICAg
ICAgICBOb2RlKiBlbWJlZGRpbmdTdGFydE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0b3Io
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSkpOworICAgICAgICBOb2RlKiBlbWJlZGRpbmdFbmROb2RlID0gaGlnaGVzdEVtYmVkZGlu
Z0FuY2VzdG9yKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmNsb3NpbmdCbG9jayhlbmQuZGVwcmVj
YXRlZE5vZGUoKSkpOwogCiAgICAgICAgIGlmIChlbWJlZGRpbmdTdGFydE5vZGUgfHwgZW1iZWRk
aW5nRW5kTm9kZSkgewogICAgICAgICAgICAgUG9zaXRpb24gZW1iZWRkaW5nQXBwbHlTdGFydCA9
IGVtYmVkZGluZ1N0YXJ0Tm9kZSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoZW1iZWRkaW5n
U3RhcnROb2RlKSA6IHN0YXJ0OwpAQCAtOTg3LDIyICs5ODcsMjIgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhS
YW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9k
ZSogc3RhcnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCk7CiAKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldChzdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKHN0YXJ0LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CiAgICAgICAgIGlmICghc3RhcnROb2RlIHx8IGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKTsKLSAg
ICBpZiAoZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoZW5k
Lm5vZGUoKSkpCi0gICAgICAgIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCk7
CisgICAgaWYgKGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0
KGVuZC5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBlbmQuZGVwcmVj
YXRlZE5vZGUoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogCiAgICAgLy8gRklYTUU6IENhbGxl
cnMgc2hvdWxkIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24gb24gYSBSYW5nZSB0aGF0IGluY2x1ZGVz
IHRoZSBicgogICAgIC8vIGlmIHRoZXkgd2FudCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBlbXB0eSBs
aW5lLgotICAgIGlmIChzdGFydCA9PSBlbmQgJiYgc3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSkKLSAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5ub2RlKCktPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKKyAgICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpKQorICAgICAgICBwYXN0RW5kTm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsKIAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hl
c3QgZnVsbHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxs
eSBzZWxlY3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxh
cmdlIG9uIDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVk
ZSB0aGUgZm9udCBlbGVtZW50IGluIG91ciBydW4KQEAgLTE0NzgsOCArMTQ3OCw4IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKIHsKICAgICBBU1NFUlQoc3RhcnQu
aXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChlbmQuaXNOb3ROdWxsKCkpOwotICAgIEFTU0VSVChz
dGFydC5ub2RlKCktPmluRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVuZC5ub2RlKCktPmluRG9j
dW1lbnQoKSk7CisgICAgQVNTRVJUKHN0YXJ0LmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsK
KyAgICBBU1NFUlQoZW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQo
Y29tcGFyZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdGV4dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHkgPSBzdHlsZSA/IHN0eWxlLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpIDog
MDsKQEAgLTE0OTcsMTggKzE0OTcsMTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3Zl
SW5saW5lU3R5bAogICAgICAgICAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSA9PSBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQo
KSkKICAgICAgICAgcHVzaERvd25TdGFydCA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KHB1c2hEb3duU3RhcnQpOwogICAgIFBvc2l0aW9uIHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFt
KCk7Ci0gICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hE
b3duU3RhcnQubm9kZSgpKTsKLSAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHls
ZS5nZXQoKSwgcHVzaERvd25FbmQubm9kZSgpKTsKKyAgICBwdXNoRG93bklubGluZVN0eWxlQXJv
dW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25TdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25FbmQu
ZGVwcmVjYXRlZE5vZGUoKSk7CiAKICAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJsZXMgc3RvcmUg
dGhlIHBvc2l0aW9ucyB1c2VkIHRvIHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBhZnRlciBzdHls
ZSByZW1vdmFsCiAgICAgLy8gdGFrZXMgcGxhY2UuIFRoaXMgd2lsbCBoZWxwIGNhbGxlcnMgdG8g
cmVjb2duaXplIHdoZW4gZWl0aGVyIHRoZSBzdGFydCBub2RlIG9yIHRoZSBlbmQgbm9kZQogICAg
IC8vIGFyZSByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0aGUgd29yayBvZiB0aGlz
IGZ1bmN0aW9uLgotICAgIC8vIElmIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIGhhcyBw
cnVuZWQgc3RhcnQubm9kZSgpIG9yIGVuZC5ub2RlKCksCisgICAgLy8gSWYgcHVzaERvd25Jbmxp
bmVTdHlsZUFyb3VuZE5vZGUgaGFzIHBydW5lZCBzdGFydC5kZXByZWNhdGVkTm9kZSgpIG9yIGVu
ZC5kZXByZWNhdGVkTm9kZSgpLAogICAgIC8vIHVzZSBwdXNoRG93blN0YXJ0IG9yIHB1c2hEb3du
RW5kIGluc3RlYWQsIHdoaWNoIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIHdvbid0IHBy
dW5lLgogICAgIFBvc2l0aW9uIHMgPSBzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigp
ID8gcHVzaERvd25TdGFydCA6IHN0YXJ0OwogICAgIFBvc2l0aW9uIGUgPSBlbmQuaXNOdWxsKCkg
fHwgZW5kLmlzT3JwaGFuKCkgPyBwdXNoRG93bkVuZCA6IGVuZDsKIAotICAgIE5vZGUqIG5vZGUg
PSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYg
bm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpIHsKQEAgLTE1MjQsMTMgKzE1MjQs
MTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogCiAgICAgICAg
ICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLmdldCgpLCBlbGVtLmdldCgp
LCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIGlm
ICghZWxlbS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09
IGVsZW0pIHsKKyAgICAgICAgICAgICAgICBpZiAocy5kZXByZWNhdGVkTm9kZSgpID09IGVsZW0p
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxs
eSBzZWxlY3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBzdGFydAogICAgICAgICAgICAgICAgICAgICAv
LyBvZiB0aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZz
ZXQgdG8gMC4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHMuYW5jaG9yVHlwZSgpID09IFBv
c2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIHx8IHMub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkgPD0gMCk7CiAgICAgICAgICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobmV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChlLm5vZGUoKSA9PSBlbGVtKSB7CisgICAgICAgICAgICAgICAgaWYgKGUuZGVwcmVjYXRlZE5v
ZGUoKSA9PSBlbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBo
YXZlIGJlZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBpcyBhdCB0aGUgZW5kCiAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0IGlzIGNsZWFyIHdlIGNhbiBzZXQgdGhl
IG5ldyBlIG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWF4IHJhbmdlIG9m
ZnNldCBvZiBwcmV2LgpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlSW5saW5lU3R5bAogICAgICAgICAgICAgICAgICAgICBhcHBseUlubGluZVN0eWxl
VG9QdXNoRG93bihjaGlsZE5vZGUuZ2V0KCksIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSkKKyAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CiAgICAgfQpAQCAtMTU4Myw5ICsxNTgzLDkg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydAogICAgIGVsc2UKICAg
ICAgICAgbmV3RW5kID0gZW5kOwogCi0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQq
PihzdGFydC5ub2RlKCkpOworICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7Ci0gICAgdXBkYXRlU3RhcnRFbmQoZmlyc3RQb3NpdGlvbklu
Tm9kZShzdGFydC5ub2RlKCkpLCBuZXdFbmQpOworICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9z
aXRpb25Jbk5vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSksIG5ld0VuZCk7CiB9CiAKIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QgUG9zaXRpb24mIGVuZCkKQEAgLTE1OTMsNyArMTU5Myw3IEBAIHZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGMKICAgICBBU1NFUlQoZW5kLmFuY2hvclR5cGUoKSA9
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKIAogICAgIGJvb2wgc2hvdWxk
VXBkYXRlU3RhcnQgPSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5v
ZGUoKTsKLSAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQubm9kZSgpKTsK
KyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsKQEAgLTE2
MTIsOSArMTYxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQK
ICAgICBlbHNlCiAgICAgICAgIG5ld0VuZCA9IGVuZDsKIAotICAgIFRleHQqIHRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0Kj4oc3RhcnQubm9kZSgpKTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAg
ICB1cGRhdGVTdGFydEVuZChQb3NpdGlvbihzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3Rh
cnQubm9kZSgpLT5ub2RlSW5kZXgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciksIG5ld0VuZCk7CisgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5ub2RlSW5kZXgo
KSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5ld0VuZCk7CiB9CiAKIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCkBAIC0xNjIyLDcgKzE2MjIsNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgQVNTRVJUKGVuZC5hbmNo
b3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAKICAgICBi
b29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5j
b250YWluZXJOb2RlKCk7Ci0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQu
bm9kZSgpKTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZC5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwgZW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0
LT5wYXJlbnROb2RlKCktPnByZXZpb3VzU2libGluZygpLT5sYXN0Q2hpbGQoKTsKQEAgLTE3MTMs
OSArMTcxMyw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHIKICAg
ICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIGVsZW1lbnQpOwog
CiAgICAgICAgIGludCBzdGFydE9mZnNldEFkanVzdG1lbnQgPSBzdGFydENoaWxkLT5ub2RlSW5k
ZXgoKTsKLSAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydE5vZGUgPT0gZW5k
Lm5vZGUoKSA/IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA6IDA7CisgICAgICAgIGludCBlbmRPZmZz
ZXRBZGp1c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnRP
ZmZzZXRBZGp1c3RtZW50IDogMDsKICAgICAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3Rh
cnROb2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IpLAotICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihlbmQubm9kZSgpLCBl
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKTsgCisgICAgICAgICAgICAgICAgICAgICAg
IFBvc2l0aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSArIGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpKTsgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTczMSwxMSArMTcz
MSwxMSBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAgICAgICAg
IGlmIChlbmRPZmZzZXQgPCBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIHBhcmVudExhc3RPZmZzZXQgPSBlbmQu
bm9kZSgpLT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZXMoKS0+bGVuZ3RoKCkgLSAxOwotICAgICAg
ICBpZiAoZW5kLm5vZGUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdW5zaWduZWQgcGFyZW50
TGFzdE9mZnNldCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCktPmNoaWxkTm9k
ZXMoKS0+bGVuZ3RoKCkgLSAxOworICAgICAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCktPm5l
eHRTaWJsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZW5kTm9k
ZSA9IGVuZC5ub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgZW5kTm9kZSA9IGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGVuZE9mZnNldCA9IHBhcmVudExh
c3RPZmZzZXQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgIAogICAgIC8vIEZpbmQgdGhlIHRvcC1tb3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQu
CiAgICAgRWxlbWVudCogdG9wQmxvY2txdW90ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2Rl
KiBub2RlID0gcG9zLm5vZGUoKS0+cGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CisgICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0
ZWROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkg
ewogICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKICAgICAgICAgICAgIHRvcEJs
b2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQpAQCAtMTAzLDEx
ICsxMDMsMTEgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgcG9zID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlv
biBzbyB3ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKLSAgICB3
aGlsZSAoaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwg
bmVhcmVzdE1haWxCbG9ja3F1b3RlKHBvcy5ub2RlKCkpKSkKKyAgICB3aGlsZSAoaXNGaXJzdFZp
c2libGVQb3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9j
a3F1b3RlKHBvcy5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91
cygpOwogICAgIAogICAgIC8vIHN0YXJ0Tm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5l
ZWQgdG8gbW92ZSB0byB0aGUgbmV3IGJsb2NrcXVvdGUuCi0gICAgTm9kZSogc3RhcnROb2RlID0g
cG9zLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAgICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0
IG5vZGUuCiAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24g
Nzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGVBdCgKICAgICAvLyBGb3IgZWRpdGluZyBwb3NpdGlvbnMgbGlrZSBb
dGFibGUsIDBdLCBpbnNlcnQgYmVmb3JlIHRoZSB0YWJsZSwKICAgICAvLyBsaWtld2lzZSBmb3Ig
cmVwbGFjZWQgZWxlbWVudHMsIGJycywgZXRjLgogICAgIFBvc2l0aW9uIHAgPSBlZGl0aW5nUG9z
aXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogcmVmQ2hpbGQgPSBw
Lm5vZGUoKTsKKyAgICBOb2RlKiByZWZDaGlsZCA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBp
bnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIAogICAgIGlmIChj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHJlZkNoaWxkKSkgewpAQCAtMzQyLDE4ICszNDIsMTgg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbgogCiBQb3NpdGlvbiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlv
biYgcG9zKQogewotICAgIGlmICghaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpCisgICAg
aWYgKCFpc1RhYlNwYW5UZXh0Tm9kZShwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJl
dHVybiBwb3M7CiAgICAgCi0gICAgTm9kZSogdGFiU3BhbiA9IHRhYlNwYW5Ob2RlKHBvcy5ub2Rl
KCkpOworICAgIE5vZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3MuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgCi0gICAgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0
TWluT2Zmc2V0KHBvcy5ub2RlKCkpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJl
dHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKICAgICAgICAgCi0gICAg
aWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHBvcy5u
b2RlKCkpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1h
eE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbklu
UGFyZW50QWZ0ZXJOb2RlKHRhYlNwYW4pOwogCi0gICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50KHN0YXRpY19jYXN0PFRleHQgKj4ocG9zLm5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGlj
X2Nhc3Q8VGV4dCAqPihwb3MuZGVwcmVjYXRlZE5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUodGFiU3Bh
bik7CiB9CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZWJhbGFuY2VXaGl0CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXNw
YWNlQXRQb3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBu
b2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7
ICAgIApAQCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJl
cGFyZVdoaXRlcwogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3ModmlzaWJs
ZVBvcy5wcmV2aW91cygpKTsKICAgICBQb3NpdGlvbiBwcmV2aW91cyhwcmV2aW91c1Zpc2libGVQ
b3MuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCi0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNw
YWNlKHByZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwcmV2aW91cy5ub2Rl
KCktPmlzVGV4dE5vZGUoKSAmJiAhcHJldmlvdXMubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkK
LSAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLm5v
ZGUoKSksIHByZXZpb3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5n
U3BhY2VTdHJpbmcoKSk7Ci0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQ
b3MuY2hhcmFjdGVyQWZ0ZXIoKSkgJiYgcG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkgJiYg
IXBvc2l0aW9uLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0
SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5ub2RlKCkpLCBwb3NpdGlvbi5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAg
IGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVy
QWZ0ZXIoKSkgJiYgcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFw
cmV2aW91cy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKKyAgICAgICAgcmVw
bGFjZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLmRlcHJlY2F0ZWROb2Rl
KCkpLCBwcmV2aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1Nw
YWNlU3RyaW5nKCkpOworICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9z
LmNoYXJhY3RlckFmdGVyKCkpICYmIHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiAhcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisg
ICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmViYWxhbmNlV2hpdGVzcGFjZSgpCkBAIC02MDAsMTUgKzYwMCwxNSBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUq
IG5leHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQubm9kZSgpOyBub2RlOyBub2RlID0g
bmV4dCkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5v
ZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CiAgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwotICAgICAgICAgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpIDogMDsKLSAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVuZC5u
b2RlKCkgPyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGludD4o
dGV4dE5vZGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG5vZGUg
PT0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkgOiAwOworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IG5vZGUgPT0gZW5kLmRlcHJlY2F0
ZWROb2RlKCkgPyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGlu
dD4odGV4dE5vZGUtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0KHRleHROb2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICAgICAgfQotICAgICAg
ICBpZiAobm9kZSA9PSBlbmQubm9kZSgpKQorICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVj
YXRlZE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTYzOCw3ICs2Mzgs
NyBAQCBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2NrRmxvdyB8fCBpc0lubGluZUZs
b3cgd2hlbiBkZWxldGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0LgotICAgIEFTU0VSVChwb3Mu
bm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQocG9zLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQmxvY2tQ
bGFjZWhvbGRlckVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUF0KHBsYWNlaG9s
ZGVyLCBwb3MpOwpAQCAtNzE0LDI1ICs3MTQsMjUgQEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6bQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFBlcmZvcm0gc29t
ZSBjaGVja3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3JrIGluIHRoaXMgZnVuY3Rp
b24uCi0gICAgaWYgKGlzQmxvY2sodXBzdHJlYW1TdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKGlz
QmxvY2sodXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAvLyBJZiB0
aGUgYmxvY2sgaXMgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgYWx3YXlzIG1vdmUgY29udGVu
dCB0byBhIG5ldyBibG9jaywKICAgICAgICAgLy8gc2luY2UgaXQgaXMgaWxsZWdhbCB0byBtb2Rp
ZnkgYXR0cmlidXRlcyBvbiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGZvciBlZGl0aW5nLgot
ICAgICAgICBpZiAodXBzdHJlYW1TdGFydC5ub2RlKCkgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRp
b24odXBzdHJlYW1TdGFydCkpIHsKKyAgICAgICAgaWYgKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSA9PSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbih1cHN0cmVhbVN0YXJ0KSkgewogICAg
ICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIGlzIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgYW5k
IGl0IGNvbnRhaW5zIG5vIHZpc2libGUgY29udGVudCwgY3JlYXRlIGEgbmV3CiAgICAgICAgICAg
ICAvLyBibG9jayBidXQgZG9uJ3QgdHJ5IGFuZCBtb3ZlIGNvbnRlbnQgaW50byBpdCwgc2luY2Ug
dGhlcmUncyBub3RoaW5nIGZvciBtb3ZlUGFyYWdyYXBocyB0byBtb3ZlLgotICAgICAgICAgICAg
aWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWln
aHQodXBzdHJlYW1TdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgaWYgKCFQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodXBz
dHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRBdCh1cHN0cmVhbVN0YXJ0
KTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkpIHsKLSAg
ICAgICAgICAgIGlmICghdXBzdHJlYW1FbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZih1cHN0cmVh
bVN0YXJ0Lm5vZGUoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXVwc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyYWdyYXBoIGVuZCBpcyBhIGRlc2Nl
bmRhbnQgb2YgcGFyYWdyYXBoIHN0YXJ0LCB0aGVuIHdlIG5lZWQgdG8gcnVuCiAgICAgICAgICAg
ICAgICAgLy8gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbi4gSWYgbm90LCB3ZSBjYW4gYmFpbCBo
ZXJlLgogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGVuY2xvc2luZ0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkgIT0g
dXBzdHJlYW1TdGFydC5ub2RlKCkpIHsKKyAgICAgICAgZWxzZSBpZiAoZW5jbG9zaW5nQmxvY2so
dXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgIT0gdXBzdHJlYW1TdGFydC5kZXByZWNhdGVk
Tm9kZSgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgdmlzaWJsZUVuZC4gIEl0IG11c3QgYmUgYW4g
YW5jZXN0b3Igb2YgdGhlIHBhcmFncmFwaCBzdGFydC4KICAgICAgICAgICAgIC8vIFdlIGNhbiBi
YWlsIGFzIHdlIGhhdmUgYSBmdWxsIGJsb2NrIHRvIHdvcmsgd2l0aC4KLSAgICAgICAgICAgIEFT
U0VSVCh1cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQmxvY2so
dXBzdHJlYW1FbmQubm9kZSgpKSkpOworICAgICAgICAgICAgQVNTRVJUKHVwc3RyZWFtU3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQmxvY2sodXBzdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKSkpKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKGlzRW5kT2ZEb2N1bWVudCh2aXNpYmxlRW5kKSkgewpAQCAtNzQz
LDcgKzc0Myw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om0KIAog
ICAgIFJlZlB0cjxOb2RlPiBuZXdCbG9jayA9IGluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVt
ZW50QXQodXBzdHJlYW1TdGFydCk7CiAKLSAgICBib29sIGVuZFdhc0JyID0gdmlzaWJsZVBhcmFn
cmFwaEVuZC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZyk7CisgICAg
Ym9vbCBlbmRXYXNCciA9IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKTsKIAogICAgIG1vdmVQYXJhZ3JhcGhzKHZp
c2libGVQYXJhZ3JhcGhTdGFydCwgdmlzaWJsZVBhcmFncmFwaEVuZCwgVmlzaWJsZVBvc2l0aW9u
KGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3QmxvY2suZ2V0KCkpKSk7CiAKQEAgLTc3OCwxNCArNzc4
LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXAKICAgICBhcHBl
bmROb2RlKHRvcE5vZGUsIGJsb2NrRWxlbWVudCk7CiAgICAgUmVmUHRyPE5vZGU+IGxhc3ROb2Rl
ID0gdG9wTm9kZTsKIAotICAgIGlmIChzdGFydC5ub2RlKCkgIT0gb3V0ZXJOb2RlKSB7CisgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gb3V0ZXJOb2RlKSB7CiAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBhbmNlc3RvcnM7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQg
ZWFjaCBub2RlIGZyb20gaW5uZXJOb2RlIHRvIG91dGVyTm9kZSAoZXhjbHVkZWQpIGluIGEgbGlz
dC4KLSAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQubm9kZSgpOyBuICYmIG4gIT0gb3V0ZXJO
b2RlOyBuID0gbi0+cGFyZW50Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC5k
ZXByZWNhdGVkTm9kZSgpOyBuICYmIG4gIT0gb3V0ZXJOb2RlOyBuID0gbi0+cGFyZW50Tm9kZSgp
KQogICAgICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChuKTsKIAotICAgICAgICAvLyBDbG9uZSBl
dmVyeSBub2RlIGJldHdlZW4gc3RhcnQubm9kZSgpIGFuZCBvdXRlckJsb2NrLgorICAgICAgICAv
LyBDbG9uZSBldmVyeSBub2RlIGJldHdlZW4gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSBhbmQgb3V0
ZXJCbG9jay4KIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaSAh
PSAwOyAtLWkpIHsKICAgICAgICAgICAgIE5vZGUqIGl0ZW0gPSBhbmNlc3RvcnNbaSAtIDFdLmdl
dCgpOwpAQCAtNzk2LDI1ICs3OTYsMjUgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xv
bmVQYXJhZ3JhcAogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUgY2FzZSBvZiBwYXJhZ3JhcGhz
IHdpdGggbW9yZSB0aGFuIG9uZSBub2RlLAotICAgIC8vIGNsb25pbmcgYWxsIHRoZSBzaWJsaW5n
cyB1bnRpbCBlbmQubm9kZSgpIGlzIHJlYWNoZWQuCisgICAgLy8gY2xvbmluZyBhbGwgdGhlIHNp
YmxpbmdzIHVudGlsIGVuZC5kZXByZWNhdGVkTm9kZSgpIGlzIHJlYWNoZWQuCiAgICAgCi0gICAg
aWYgKHN0YXJ0Lm5vZGUoKSAhPSBlbmQubm9kZSgpICYmICFzdGFydC5ub2RlKCktPmlzRGVzY2Vu
ZGFudE9mKGVuZC5ub2RlKCkpKSB7CisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0g
ZW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgIXN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2Vu
ZGFudE9mKGVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAvLyBJZiBlbmQgaXMgbm90
IGEgZGVzY2VuZGFudCBvZiBvdXRlck5vZGUgd2UgbmVlZCB0bwogICAgICAgICAvLyBmaW5kIHRo
ZSBmaXJzdCBjb21tb24gYW5jZXN0b3IgYW5kIGFkanVzdCB0aGUgaW5zZXJ0aW9uCiAgICAgICAg
IC8vIHBvaW50IGFjY29yZGluZ2x5LgotICAgICAgICB3aGlsZSAoIWVuZC5ub2RlKCktPmlzRGVz
Y2VuZGFudE9mKG91dGVyTm9kZSkpIHsKKyAgICAgICAgd2hpbGUgKCFlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNEZXNjZW5kYW50T2Yob3V0ZXJOb2RlKSkgewogICAgICAgICAgICAgb3V0ZXJOb2Rl
ID0gb3V0ZXJOb2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICB0b3BOb2RlID0gdG9wTm9k
ZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChOb2RlKiBuID0gc3Rh
cnQubm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9kZSk7IG47IG4gPSBuLT50cmF2
ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChuLT5wYXJlbnRO
b2RlKCkgIT0gc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCkpCisgICAgICAgIGZvciAoTm9kZSog
biA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcob3V0ZXJOb2Rl
KTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcob3V0ZXJOb2RlKSkgeworICAgICAgICAg
ICAgaWYgKG4tPnBhcmVudE5vZGUoKSAhPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnRO
b2RlKCkpCiAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSB0b3BOb2RlLT5sYXN0Q2hpbGQoKTsK
IAogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGNsb25lZE5vZGUgPSBuLT5jbG9uZU5vZGUodHJ1
ZSk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoY2xvbmVkTm9kZSwgbGFzdE5vZGUpOwog
ICAgICAgICAgICAgbGFzdE5vZGUgPSBjbG9uZWROb2RlLnJlbGVhc2UoKTsKLSAgICAgICAgICAg
IGlmIChuID09IGVuZC5ub2RlKCkgfHwgZW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YobikpCisg
ICAgICAgICAgICBpZiAobiA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSB8fCBlbmQuZGVwcmVjYXRl
ZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YobikpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CkBAIC04MzMsNyArODMzLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6Y2xlYW51cEFmdGVyRAogICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgoY2FyZXRBZnRlckRl
bGV0ZSkgJiYgaXNFbmRPZlBhcmFncmFwaChjYXJldEFmdGVyRGVsZXRlKSkgewogICAgICAgICAv
LyBOb3RlOiBXZSB3YW50IHRoZSByaWdodG1vc3QgY2FuZGlkYXRlLgogICAgICAgICBQb3NpdGlv
biBwb3NpdGlvbiA9IGNhcmV0QWZ0ZXJEZWxldGUuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFt
KCk7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBOb3JtYWxseSBk
ZWxldGlvbiB3aWxsIGxlYXZlIGEgYnIgYXMgYSBwbGFjZWhvbGRlci4KICAgICAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5j
ZXN0b3JzKG5vZGUpOwpAQCAtODk1LDcgKzg5NSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6Om1vdmVQYXJhZ3JhcGgKICAgICBiZWZvcmVQYXJhZ3JhcGggPSBWaXNpYmxlUG9zaXRpb24o
YmVmb3JlUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwogICAgIGFmdGVyUGFyYWdyYXBoID0g
VmlzaWJsZVBvc2l0aW9uKGFmdGVyUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAg
aWYgKGJlZm9yZVBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhaXNUYWJsZUVsZW1lbnQoYmVmb3Jl
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKQorICAgIGlmIChiZWZvcmVQYXJhZ3Jh
cGguaXNOb3ROdWxsKCkgJiYgIWlzVGFibGVFbGVtZW50KGJlZm9yZVBhcmFncmFwaC5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICYmICgoIWlzRW5kT2ZQYXJhZ3Jh
cGgoYmVmb3JlUGFyYWdyYXBoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKGJlZm9yZVBhcmFncmFw
aCkpIHx8IGJlZm9yZVBhcmFncmFwaCA9PSBhZnRlclBhcmFncmFwaCkpIHsKICAgICAgICAgLy8g
RklYTUU6IFRyaW0gdGV4dCBiZXR3ZWVuIGJlZm9yZVBhcmFncmFwaCBhbmQgYWZ0ZXJQYXJhZ3Jh
cGggaWYgdGhleSBhcmVuJ3QgZXF1YWwuCiAgICAgICAgIGluc2VydE5vZGVBdChjcmVhdGVCcmVh
a0VsZW1lbnQoZG9jdW1lbnQoKSksIGJlZm9yZVBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsK
QEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBoCiAgICAgLy8gc3RhcnQgYW5kIGVuZCBjYW4ndCBiZSB1c2VkIGRpcmVjdGx5IHRvIGNyZWF0
ZSBhIFJhbmdlOyB0aGV5IGFyZSAiZWRpdGluZyBwb3NpdGlvbnMiCiAgICAgUG9zaXRpb24gc3Rh
cnRSYW5nZUNvbXBsaWFudCA9IHN0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAg
IFBvc2l0aW9uIGVuZFJhbmdlQ29tcGxpYW50ID0gZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHN0YXJ0UmFuZ2VDb21wbGlhbnQubm9kZSgpLCBzdGFydFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIGVuZFJhbmdlQ29tcGxpYW50Lm5vZGUoKSwgZW5kUmFuZ2VDb21w
bGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5kZXByZWNh
dGVkTm9kZSgpLCBzdGFydFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCks
IGVuZFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWROb2RlKCksIGVuZFJhbmdlQ29tcGxpYW50LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gaW5l
ZmZpY2llbnQgd2F5IHRvIHByZXNlcnZlIHN0eWxlIG9uIG5vZGVzIGluIHRoZSBwYXJhZ3JhcGgg
dG8gbW92ZS4gSXQKICAgICAvLyBzaG91bGRuJ3QgbWF0dGVyIHRob3VnaCwgc2luY2UgbW92ZWQg
cGFyYWdyYXBocyB3aWxsIHVzdWFsbHkgYmUgcXVpdGUgc21hbGwuCkBAIC05ODAsMTAgKzk4MCwx
MCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmNsZWFyTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihl
bmRpbmdTZWxlY3Rpb24oKSk7CiAgICAgZGVsZXRlU2VsZWN0aW9uKGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlKTsKIAotICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKS0+aW5Eb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSk7CiAKICAgICBjbGVhbnVwQWZ0ZXJEZWxl
dGlvbigpOwotICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
aW5Eb2N1bWVudCgpKTsKKyAgICBBU1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5h
bmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSk7CiAKICAgICAvLyBBZGQgYSBiciBpZiBwcnVuaW5n
IGFuIGVtcHR5IGJsb2NrIGxldmVsIGVsZW1lbnQgY2F1c2VkIGEgY29sbGFwc2UuIEZvciBleGFt
cGxlOgogICAgIC8vIGZvb14KQEAgLTExMzEsMTUgKzExMzEsMTUgQEAgYm9vbCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcAogICAgIAogICAgIFBvc2l0aW9uIGNhcmV0UG9zKGNh
cmV0LmRlZXBFcXVpdmFsZW50KCkpOwogICAgIC8vIEEgbGluZSBicmVhayBpcyBlaXRoZXIgYSBi
ciBvciBhIHByZXNlcnZlZCBuZXdsaW5lLgotICAgIEFTU0VSVChjYXJldFBvcy5ub2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpIHx8IChjYXJldFBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiBjYXJl
dFBvcy5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSk7Cisg
ICAgQVNTRVJUKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpIHx8
IChjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYgY2FyZXRQb3MuZGVw
cmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpKTsK
ICAgICAKLSAgICBpZiAoY2FyZXRQb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAg
ICAgICBQb3NpdGlvbiBiZWZvcmVCUihwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShjYXJldFBv
cy5ub2RlKCkpKTsKLSAgICAgICAgcmVtb3ZlTm9kZShjYXJldFBvcy5ub2RlKCkpOwotICAgICAg
ICBwcnVuZShiZWZvcmVCUi5ub2RlKCkpOworICAgIGlmIChjYXJldFBvcy5kZXByZWNhdGVkTm9k
ZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgeworICAgICAgICBQb3NpdGlvbiBiZWZvcmVCUihwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZShjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKSk7CisgICAg
ICAgIHJlbW92ZU5vZGUoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgIHBydW5l
KGJlZm9yZUJSLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VS
VChjYXJldFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IDApOwotICAgICAgICBUZXh0
KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihjYXJldFBvcy5ub2RlKCkpOworICAgICAg
ICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihjYXJldFBvcy5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IHRleHROb2RlLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgIC8vIFRoZSBwcmVzZXJ2ZWQgbmV3bGluZSBtdXN0IGJlIHRo
ZSBmaXJzdCB0aGluZyBpbiB0aGUgbm9kZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZSBwcmV2aW91cwog
ICAgICAgICAvLyBwYXJhZ3JhcGggd291bGQgYmUgcXVvdGVkLCBhbmQgd2UgdmVyaWZpZWQgdGhh
dCBpdCB3YXNuJ3QgYWJvdmUuCkBAIC0xMTc1LDcgKzExNzUsNyBAQCBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25BCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09IGxhc3RJ
bkFuY2hvcikgewogICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGFuY2hvcnMgYXJlIHB1c2hlZCBk
b3duIGJlZm9yZSBhdm9pZGluZyB0aGVtIHNvIHRoYXQgd2UgZG9uJ3QKICAgICAgICAgICAgIC8v
IGFsc28gYXZvaWQgc3RydWN0dXJhbCBlbGVtZW50cyBsaWtlIGxpc3RzIGFuZCBibG9ja3MgKDUx
NDIwMTIpLgotICAgICAgICAgICAgaWYgKG9yaWdpbmFsLm5vZGUoKSAhPSBlbmNsb3NpbmdBbmNo
b3IgJiYgb3JpZ2luYWwubm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yKSB7
CisgICAgICAgICAgICBpZiAob3JpZ2luYWwuZGVwcmVjYXRlZE5vZGUoKSAhPSBlbmNsb3NpbmdB
bmNob3IgJiYgb3JpZ2luYWwuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVuY2xv
c2luZ0FuY2hvcikgewogICAgICAgICAgICAgICAgIHB1c2hBbmNob3JFbGVtZW50RG93bihlbmNs
b3NpbmdBbmNob3IpOwogICAgICAgICAgICAgICAgIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2lu
Z0FuY2hvckVsZW1lbnQob3JpZ2luYWwpOwogICAgICAgICAgICAgICAgIGlmICghZW5jbG9zaW5n
QW5jaG9yKQpAQCAtMTE4NCw3ICsxMTg0LDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnBvc2l0aW9uQQogICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG91dHNpZGUgYW4gYW5j
aG9yIGlmIGRvaW5nIHNvIHdvdWxkIHNraXAgb3ZlciBhIGxpbmUgYnJlYWsuICBJdCB3b3VsZAog
ICAgICAgICAgICAgLy8gcHJvYmFibHkgYmUgc2FmZSB0byBtb3ZlIHRoZSBsaW5lIGJyZWFrIHNv
IHRoYXQgd2UgY291bGQgc3RpbGwgYXZvaWQgdGhlIGFuY2hvciBoZXJlLgogICAgICAgICAgICAg
UG9zaXRpb24gZG93bnN0cmVhbSh2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVh
bSgpKTsKLSAgICAgICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbih2
aXNpYmxlUG9zKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5n
QW5jaG9yKSkKKyAgICAgICAgICAgIGlmIChsaW5lQnJlYWtFeGlzdHNBdFZpc2libGVQb3NpdGlv
bih2aXNpYmxlUG9zKSAmJiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKGVuY2xvc2luZ0FuY2hvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJO
b2RlKGVuY2xvc2luZ0FuY2hvcik7CkBAIC0xMTk0LDcgKzExOTQsNyBAQCBQb3NpdGlvbiBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25BCiAgICAgICAgIGlmICh2aXNpYmxlUG9zID09IGZp
cnN0SW5BbmNob3IpIHsKICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBhbmNob3JzIGFyZSBwdXNo
ZWQgZG93biBiZWZvcmUgYXZvaWRpbmcgdGhlbSBzbyB0aGF0IHdlIGRvbid0CiAgICAgICAgICAg
ICAvLyBhbHNvIGF2b2lkIHN0cnVjdHVyYWwgZWxlbWVudHMgbGlrZSBsaXN0cyBhbmQgYmxvY2tz
ICg1MTQyMDEyKS4KLSAgICAgICAgICAgIGlmIChvcmlnaW5hbC5ub2RlKCkgIT0gZW5jbG9zaW5n
QW5jaG9yICYmIG9yaWdpbmFsLm5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVuY2xvc2luZ0FuY2hv
cikgeworICAgICAgICAgICAgaWYgKG9yaWdpbmFsLmRlcHJlY2F0ZWROb2RlKCkgIT0gZW5jbG9z
aW5nQW5jaG9yICYmIG9yaWdpbmFsLmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBl
bmNsb3NpbmdBbmNob3IpIHsKICAgICAgICAgICAgICAgICBwdXNoQW5jaG9yRWxlbWVudERvd24o
ZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgICAgICAgICBlbmNsb3NpbmdBbmNob3IgPSBlbmNs
b3NpbmdBbmNob3JFbGVtZW50KG9yaWdpbmFsKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2
aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkMKIH0KIAogRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgYm9vbCByZXBs
YWNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cykKLSAgICA6IENvbXBvc2l0ZUVkaXRD
b21tYW5kKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKSksIAorICAgIDogQ29t
cG9zaXRlRWRpdENvbW1hbmQoc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpKSwgCiAgICAgICBtX2hhc1NlbGVjdGlvblRvRGVsZXRlKHRydWUpLCAKICAgICAgIG1fc21h
cnREZWxldGUoc21hcnREZWxldGUpLCAKICAgICAgIG1fbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSht
ZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKSwKQEAgLTExMCwxMCArMTEwLDEwIEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6aW5pdGlhbGl6ZVMKICAKICAgICAvLyBGb3IgSFJzLCB3ZSdsbCBn
ZXQgYSBwb3NpdGlvbiBhdCAoSFIsMSkgd2hlbiBoaXR0aW5nIGRlbGV0ZSBmcm9tIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHByZXZpb3VzIGxpbmUsIG9yIChIUiwwKSB3aGVuIGZvcndhcmQgZGVsZXRp
bmcsCiAgICAgLy8gYnV0IGluIHRoZXNlIGNhc2VzLCB3ZSB3YW50IHRvIGRlbGV0ZSBpdCwgc28g
bWFudWFsbHkgZXhwYW5kIHRoZSBzZWxlY3Rpb24KLSAgICBpZiAoc3RhcnQubm9kZSgpLT5oYXNU
YWdOYW1lKGhyVGFnKSkKLSAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnQu
bm9kZSgpKTsKLSAgICBlbHNlIGlmIChlbmQubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSkKLSAg
ICAgICAgZW5kID0gcG9zaXRpb25BZnRlck5vZGUoZW5kLm5vZGUoKSk7CisgICAgaWYgKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoaHJUYWcpKQorICAgICAgICBzdGFydCA9IHBv
c2l0aW9uQmVmb3JlTm9kZShzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBlbHNlIGlmIChl
bmQuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpCisgICAgICAgIGVuZCA9IHBv
c2l0aW9uQWZ0ZXJOb2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBvbmx5IHVzZWQgc28gdGhhdCBtb3ZlUGFyYWdyYXBocyBjYW4gYXZvaWQgdGhl
IGJ1Z3MgaW4gc3BlY2lhbCBlbGVtZW50IGV4cGFuc2lvbi4KICAgICBpZiAoIW1fZXhwYW5kRm9y
U3BlY2lhbEVsZW1lbnRzKQpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6c2F2ZVR5cGluZ1MKICAgICAvLyB0eXBpbmcgc3R5bGUgYXQgdGhlIHN0YXJ0IG9m
IHRoZSBzZWxlY3Rpb24sIG5vciBpcyB0aGVyZSBhIHJlYXNvbiB0byAKICAgICAvLyBjb21wdXRl
IHRoZSBzdHlsZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiBhZnRlciBkZWxldGlvbiAo
c2VlIHRoZSAKICAgICAvLyBlYXJseSByZXR1cm4gaW4gY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRl
ckRlbGV0ZSkuCi0gICAgaWYgKG1fdXBzdHJlYW1TdGFydC5ub2RlKCkgPT0gbV9kb3duc3RyZWFt
RW5kLm5vZGUoKSAmJiBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAg
aWYgKG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpICYmIG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZpZ3VyZSBvdXQgdGhlIHR5cGlu
ZyBzdHlsZSBpbiBlZmZlY3QgYmVmb3JlIHRoZSBkZWxldGUgaXMgZG9uZS4KQEAgLTI4NCw3ICsy
ODQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiAKICAgICAv
LyBJZiB3ZSdyZSBkZWxldGluZyBpbnRvIGEgTWFpbCBibG9ja3F1b3RlLCBzYXZlIHRoZSBzdHls
ZSBhdCBlbmQoKSBpbnN0ZWFkIG9mIHN0YXJ0KCkKICAgICAvLyBXZSdsbCB1c2UgdGhpcyBsYXRl
ciBpbiBjb21wdXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSBpZiB3ZSBlbmQgdXAgb3V0c2lkZSBv
ZiBhIE1haWwgYmxvY2txdW90ZQotICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxl
Y3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKSkpCisgICAgaWYgKG5lYXJlc3RNYWlsQmxvY2tx
dW90ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAg
ICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKG1f
c2VsZWN0aW9uVG9EZWxldGUuZW5kKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9kZWxldGVJbnRv
QmxvY2txdW90ZVN0eWxlID0gMDsKQEAgLTI5MywxMSArMjkzLDExIEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwt
Y2FzZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkg
aXRzZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1f
dXBzdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOwotICAgIGJvb2wgZG93bnN0
cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShiclRh
Zyk7Ci0gICAgYm9vbCBpc0JST25MaW5lQnlJdHNlbGYgPSB1cHN0cmVhbVN0YXJ0SXNCUiAmJiBk
b3duc3RyZWFtU3RhcnRJc0JSICYmIG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSA9PSBtX3Vwc3Ry
ZWFtRW5kLm5vZGUoKTsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV91cHN0cmVhbVN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOworICAgIGJvb2wgZG93bnN0
cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpOworICAgIGJvb2wgaXNCUk9uTGluZUJ5SXRzZWxmID0gdXBzdHJlYW1TdGFy
dElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAmJiBtX2Rvd25zdHJlYW1TdGFydC5kZXByZWNh
dGVkTm9kZSgpID09IG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoaXNC
Uk9uTGluZUJ5SXRzZWxmKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQu
bm9kZSgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00MTYsNyArNDE2LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0Rgogdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIHsKICAgICBpbnQgc3RhcnRP
ZmZzZXQgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0
Tm9kZSA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIAogICAgIC8vIE5l
dmVyIHJlbW92ZSB0aGUgc3RhcnQgYmxvY2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2gg
Y2FzZSB3ZSB3b24ndCBtZXJnZSBjb250ZW50IGluLgogICAgIGlmIChzdGFydE5vZGUgPT0gbV9z
dGFydEJsb2NrICYmIHN0YXJ0T2Zmc2V0ID09IDAgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGlu
ZyhzdGFydE5vZGUpICYmICFzdGFydE5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKSB7CkBAIC00
MzksNyArNDM5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgog
ICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhcnROb2Rl
ID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKKyAgICBpZiAoc3RhcnROb2RlID09IG1fZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHN0YXJ0T2Zmc2V0ID4gMCkgewogICAgICAg
ICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
aW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCkBAIC00NTYsNyArNDU2LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAgICAg
cmVtb3ZlTm9kZShzdGFydE5vZGUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgYm9vbCBz
dGFydE5vZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlID0gbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+
aXNEZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLm5vZGUoKSk7CisgICAgICAgIGJvb2wgc3Rh
cnROb2RlV2FzRGVzY2VuZGFudE9mRW5kTm9kZSA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7
CiAgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gdG8gZGVsZXRlIHNwYW5zIG1vcmUgdGhhbiBvbmUg
bm9kZS4KICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUoc3RhcnROb2RlKTsKICAgICAgICAgCkBA
IC00NjksMjEgKzQ2OSwyMSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdl
bmVyCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5v
ZGUtPmNoaWxkTm9kZShzdGFydE9mZnNldCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQubm9kZSgpICYmIHN0YXJ0Tm9kZS0+aXNU
ZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KG1fdXBzdHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUgPT0g
bV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpICYmIHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgp
KSB7CisgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fdXBzdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUo
dGV4dCwgMCwgbV91cHN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gaGFuZGxlIGRlbGV0aW5nIGFsbCBub2RlcyB0aGF0
IGFyZSBjb21wbGV0ZWx5IHNlbGVjdGVkCi0gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0g
bV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgeworICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9
IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoY29t
cGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5nZXQoKSksIG1f
ZG93bnN0cmVhbUVuZCkgPj0gMCkgewogICAgICAgICAgICAgICAgIC8vIHRyYXZlcnNlTmV4dFNp
YmxpbmcganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlvbiwgc28gc3RvcCBkZWxldGluZwog
ICAgICAgICAgICAgICAgIG5vZGUgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbV9kb3du
c3RyZWFtRW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihub2RlLmdldCgpKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0
Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgICAgICAvLyBp
ZiB3ZSBqdXN0IHJlbW92ZWQgYSBub2RlIGZyb20gdGhlIGVuZCBjb250YWluZXIsIHVwZGF0ZSBl
bmQgcG9zaXRpb24gc28gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgd2lsbCB3
b3JrCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX2Rvd25zdHJl
YW1FbmQubm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5vZGUoKSA9
PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+bm9kZUluZGV4KCkgPCAodW5zaWduZWQpbV9k
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAg
ICAgICBtX2Rvd25zdHJlYW1FbmQubW92ZVRvT2Zmc2V0KG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpIC0gMSk7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0
Tm9kZS5nZXQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
biA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0
cmVhbUVuZC5ub2RlKCkgPT0gbiAmJiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChuKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtNTAwLDMzICs1MDAsMzMgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5vZGUoKSAhPSBz
dGFydE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpICYmIG1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmluRG9jdW1lbnQo
KSAmJiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1p
bk9mZnNldChtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewotICAgICAgICAgICAgaWYgKG1fZG93
bnN0cmVhbUVuZC5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGls
ZHJlbkZvckVkaXRpbmcobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG1f
ZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVh
bVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSAmJiBtX2Rvd25zdHJlYW1FbmQuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkgJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2Fy
ZXRNaW5PZmZzZXQobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAg
ICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAm
JiAhY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5v
ZGUoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBpdHNlbGYgaXMgZnVsbHkgc2Vs
ZWN0ZWQsIG5vdCBqdXN0IGl0cyBjb250ZW50cy4gIERlbGV0ZSBpdC4KLSAgICAgICAgICAgICAg
ICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpOworICAgICAgICAgICAgICAgIHJl
bW92ZU5vZGUobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0
ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCi0gICAgICAgICAgICAgICAgICAgIFRl
eHQgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpOwor
ICAgICAgICAgICAgICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICht
X2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAvLyBSZW1vdmUgY2hpbGRyZW4gb2YgbV9kb3duc3RyZWFtRW5kLm5vZGUo
KSB0aGF0IGNvbWUgYWZ0ZXIgbV91cHN0cmVhbVN0YXJ0LgotICAgICAgICAgICAgICAgIC8vIERv
bid0IHRyeSB0byByZW1vdmUgY2hpbGRyZW4gaWYgbV91cHN0cmVhbVN0YXJ0IHdhcyBpbnNpZGUg
bV9kb3duc3RyZWFtRW5kLm5vZGUoKQorICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjaGlsZHJl
biBvZiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91
cHN0cmVhbVN0YXJ0LgorICAgICAgICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hp
bGRyZW4gaWYgbV91cHN0cmVhbVN0YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkKICAgICAgICAgICAgICAgICAvLyBhbmQgbV91cHN0cmVhbVN0YXJ0IGhhcyBi
ZWVuIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIGJlY2F1c2UgdGhlbiB3ZSBkb24ndCAKICAg
ICAgICAgICAgICAgICAvLyBrbm93IGhvdyBtYW55IGNoaWxkcmVuIHRvIHJlbW92ZS4KICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogTWFrZSBtX3Vwc3RyZWFtU3RhcnQgYSBwb3NpdGlvbiB3ZSB1
cGRhdGUgYXMgd2UgcmVtb3ZlIGNvbnRlbnQsIHRoZW4gd2UgY2FuCiAgICAgICAgICAgICAgICAg
Ly8gYWx3YXlzIGtub3cgd2hpY2ggY2hpbGRyZW4gdG8gcmVtb3ZlLgotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoIShzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3Ry
ZWFtU3RhcnQubm9kZSgpLT5pbkRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghKHN0YXJ0Tm9kZVdhc0Rlc2NlbmRhbnRPZkVuZE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFy
dC5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50
IG9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQubm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSAqbiA9IG1fdXBzdHJlYW1TdGFydC5ub2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0gbV9kb3duc3Ry
ZWFtRW5kLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdXBzdHJlYW1TdGFydC5k
ZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKm4gPSBtX3Vwc3RyZWFt
U3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChu
ICYmIG4tPnBhcmVudE5vZGUoKSAhPSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gbi0+bm9kZUluZGV4KCkgKyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQubm9kZSgp
LCBvZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpLCBvZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9kb3duc3RyZWFtRW5kLm1vdmVUb09m
ZnNldChvZmZzZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUzOCwx
MyArNTM4LDEzIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXMKIHsK
ICAgICB1cGRhdGVMYXlvdXQoKTsKICAgICAvLyBGSVhNRTogaXNSZW5kZXJlZENoYXJhY3RlciBz
aG91bGQgYmUgcmVtb3ZlZCwgYW5kIHdlIHNob3VsZCB1c2UgVmlzaWJsZVBvc2l0aW9uOjpjaGFy
YWN0ZXJBZnRlciBhbmQgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJCZWZvcmUKLSAgICBpZiAo
bV9sZWFkaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiAhbV9sZWFkaW5nV2hpdGVzcGFjZS5p
c1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgbV9sZWFkaW5nV2hpdGVzcGFjZS5ub2RlKCktPmlzVGV4
dE5vZGUoKSkgewotICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPiht
X2xlYWRpbmdXaGl0ZXNwYWNlLm5vZGUoKSk7CisgICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2Uu
aXNOb3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3Rlcigp
ICYmIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7
CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1do
aXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJl
bmRlcmVyKCkgfHwgdGV4dE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVT
cGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIG1fbGVhZGluZ1do
aXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0
cmluZygpKTsKICAgICB9Ci0gICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgp
ICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgbV90cmFp
bGluZ1doaXRlc3BhY2Uubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4
dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV90cmFpbGluZ1doaXRlc3BhY2Uubm9kZSgpKTsK
KyAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJhaWxpbmdX
aGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBtX3RyYWlsaW5nV2hpdGVzcGFjZS5k
ZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUg
PSBzdGF0aWNfY2FzdDxUZXh0Kj4obV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHx0ZXh0Tm9kZS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNl
VGV4dEluTm9kZSh0ZXh0Tm9kZSwgbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CkBAIC01Njks
NyArNTY5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAg
IEFTU0VSVCghbV9wcnVuZVN0YXJ0QmxvY2tJZk5lY2Vzc2FyeSk7CiAKICAgICAvLyBGSVhNRTog
RGVsZXRpb24gc2hvdWxkIGFkanVzdCBzZWxlY3Rpb24gZW5kcG9pbnRzIGFzIGl0IHJlbW92ZXMg
bm9kZXMgc28gdGhhdCB3ZSBuZXZlciBnZXQgaW50byB0aGlzIHN0YXRlICg0MDk5ODM5KS4KLSAg
ICBpZiAoIW1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV91cHN0cmVh
bVN0YXJ0Lm5vZGUoKS0+aW5Eb2N1bWVudCgpKQorICAgIGlmICghbV9kb3duc3RyZWFtRW5kLmFu
Y2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgp
LT5pbkRvY3VtZW50KCkpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICAvLyBGSVhN
RTogVGhlIGRlbGV0aW9uIGFsZ29yaXRobSBzaG91bGRuJ3QgbGV0IHRoaXMgaGFwcGVuLgpAQCAt
NTg1LDE0ICs1ODUsMTQgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFn
cgogICAgIAogICAgIC8vIG1fZG93bnN0cmVhbUVuZCdzIGJsb2NrIGhhcyBiZWVuIGVtcHRpZWQg
b3V0IGJ5IGRlbGV0aW9uLiAgVGhlcmUgaXMgbm8gY29udGVudCBpbnNpZGUgb2YgaXQgdG8KICAg
ICAvLyBtb3ZlLCBzbyBqdXN0IHJlbW92ZSBpdC4KLSAgICBFbGVtZW50KiBlbmRCbG9jayA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQubm9kZSgp
KSk7Ci0gICAgaWYgKCFzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpIHx8ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKSkpIHsKLSAgICAgICAgcmVtb3ZlTm9kZShlbmNsb3NpbmdCbG9jayht
X2Rvd25zdHJlYW1FbmQubm9kZSgpKSk7CisgICAgRWxlbWVudCogZW5kQmxvY2sgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCkpKTsKKyAgICBpZiAoIXN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpIHx8ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgIHJl
bW92ZU5vZGUoZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICAvLyBXZSBuZWVkIHRvIG1lcmdl
IGludG8gbV91cHN0cmVhbVN0YXJ0J3MgYmxvY2ssIGJ1dCBpdCdzIGJlZW4gZW1wdGllZCBvdXQg
YW5kIGNvbGxhcHNlZCBieSBkZWxldGlvbi4KLSAgICBpZiAoIW1lcmdlRGVzdGluYXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5ub2RlKCkgfHwgIW1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoKSkgfHwgbV9zdGFydHNBdEVtcHR5TGluZSkgeworICAgIGlmICgh
bWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfHwgIW1l
cmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpKSB8fCBtX3N0YXJ0c0F0RW1wdHlMaW5lKSB7CiAgICAgICAgIGluc2VydE5v
ZGVBdChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCksIG1fdXBzdHJlYW1TdGFy
dCk7CiAgICAgICAgIG1lcmdlRGVzdGluYXRpb24gPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVh
bVN0YXJ0KTsKICAgICB9CkBAIC02MDgsOCArNjA4LDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjptZXJnZVBhcmFncgogICAgIC8vIFRoZSBydWxlIGZvciBtZXJnaW5nIGludG8gYW4g
ZW1wdHkgYmxvY2sgaXM6IG9ubHkgZG8gc28gaWYgaXRzIGZhcnRoZXIgdG8gdGhlIHJpZ2h0Lgog
ICAgIC8vIEZJWE1FOiBDb25zaWRlciBSVEwuCiAgICAgaWYgKCFtX3N0YXJ0c0F0RW1wdHlMaW5l
ICYmIGlzU3RhcnRPZlBhcmFncmFwaChtZXJnZURlc3RpbmF0aW9uKSAmJiBzdGFydE9mUGFyYWdy
YXBoVG9Nb3ZlLmFic29sdXRlQ2FyZXRCb3VuZHMoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmFi
c29sdXRlQ2FyZXRCb3VuZHMoKS54KCkpIHsKLSAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkg
ewotICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdlRGVzdGluYXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG1l
cmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKS0+aGFzVGFnTmFtZShiclRhZykpIHsKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVu
ZUFuY2VzdG9ycyhtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IHN0YXJ0
T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNjE4LDcgKzYxOCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6bWVyZ2VQYXJhZ3IKICAgICAvLyBCbG9jayBpbWFnZXMsIHRhYmxlcyBhbmQgaG9yaXpvbnRh
bCBydWxlcyBjYW5ub3QgYmUgbWFkZSBpbmxpbmUgd2l0aCBjb250ZW50IGF0IG1lcmdlRGVzdGlu
YXRpb24uICBJZiB0aGVyZSBpcyAKICAgICAvLyBhbnkgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVy
Z2VEZXN0aW5hdGlvbikpLCBkb24ndCBtZXJnZSwganVzdCBtb3ZlIHRoZSBjYXJldCB0byBqdXN0
IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdlIGRlbGV0ZWQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQzOQotICAgIGlmIChpc1JlbmRlcmVkQXNO
b25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pKSB7
CisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSAmJiAhaXNTdGFy
dE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pKSB7CiAgICAgICAgIG1fZW5kaW5nUG9zaXRp
b24gPSBtX3Vwc3RyZWFtU3RhcnQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NjYsNyAr
NjY2LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aQogICAgIGlm
IChtX2VuZFRhYmxlUm93ICYmIG1fZW5kVGFibGVSb3ctPmluRG9jdW1lbnQoKSAmJiBtX2VuZFRh
YmxlUm93ICE9IG1fc3RhcnRUYWJsZVJvdykKICAgICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eSht
X2VuZFRhYmxlUm93LmdldCgpKSkgewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIG1fZW5k
VGFibGVSb3cgaWYgaXQncyB3aGVyZSB3ZSdyZSBwdXR0aW5nIHRoZSBlbmRpbmcgc2VsZWN0aW9u
LgotICAgICAgICAgICAgaWYgKCFtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKS0+aXNEZXNjZW5kYW50
T2YobV9lbmRUYWJsZVJvdy5nZXQoKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9lbmRpbmdQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2VuZFRhYmxlUm93LmdldCgp
KSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcm9iYWJseSBzaG91bGRuJ3QgcmVt
b3ZlIG1fZW5kVGFibGVSb3cgdW5sZXNzIGl0J3MgZnVsbHkgc2VsZWN0ZWQsIGV2ZW4gaWYgaXQg
aXMgZW1wdHkuCiAgICAgICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCB0byBzdGFydCBhZGp1c3Rp
bmcgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgZHVyaW5nIGRlbGV0aW9uIHRvIGtub3cgd2hldGhl
ciBvciBub3QgbV9lbmRUYWJsZVJvdwogICAgICAgICAgICAgICAgIC8vIHdhcyBmdWxseSBzZWxl
Y3RlZCBoZXJlLgpAQCAtNjg3LDcgKzY4Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6Y2FsY3VsYXRlVHkKICAgICAvLyBoYXMgY29tcGxldGVkLgogICAgIAogICAgIC8vIElmIHdl
IGRlbGV0ZWQgaW50byBhIGJsb2NrcXVvdGUsIGJ1dCBhcmUgbm93IG5vIGxvbmdlciBpbiBhIGJs
b2NrcXVvdGUsIHVzZSB0aGUgYWx0ZXJuYXRlIHR5cGluZyBzdHlsZQotICAgIGlmIChtX2RlbGV0
ZUludG9CbG9ja3F1b3RlU3R5bGUgJiYgIW5lYXJlc3RNYWlsQmxvY2txdW90ZShtX2VuZGluZ1Bv
c2l0aW9uLm5vZGUoKSkpCisgICAgaWYgKG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAh
bmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkp
CiAgICAgICAgIG1fdHlwaW5nU3R5bGUgPSBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAg
ICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlID0gMDsKIApAQCAtNzQyLDcgKzc0Miw3IEBA
IHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBJZiB0aGUg
ZGVsZXRpb24gaXMgb2NjdXJyaW5nIGluIGEgdGV4dCBmaWVsZCwgYW5kIHdlJ3JlIG5vdCBkZWxl
dGluZyB0byByZXBsYWNlIHRoZSBzZWxlY3Rpb24sIHRoZW4gbGV0IHRoZSBmcmFtZSBjYWxsIGFj
cm9zcyB0aGUgYnJpZGdlIHRvIG5vdGlmeSB0aGUgZm9ybSBkZWxlZ2F0ZS4gCiAgICAgaWYgKCFt
X3JlcGxhY2UpIHsKLSAgICAgICAgTm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25Ub0RlbGV0
ZS5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25U
b0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIE5vZGUqIGFuY2VzdG9y
Tm9kZSA9IHN0YXJ0Tm9kZSA/IHN0YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwog
ICAgICAgICBpZiAoYW5jZXN0b3JOb2RlICYmIGFuY2VzdG9yTm9kZS0+aGFzVGFnTmFtZShpbnB1
dFRhZykKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
YW5jZXN0b3JOb2RlKS0+aXNUZXh0RmllbGQoKQpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGFuZCBlbmRzIGluc2lk
ZSBpdCAod2UgZG8gbmVlZCBwbGFjZWhvbGRlcnMgdG8gaG9sZCBvcGVuIGVtcHR5IGNlbGxzLCBi
dXQgdGhhdCdzCiAgICAgICAgIC8vIGhhbmRsZWQgZWxzZXdoZXJlKS4KICAgICAgICAgaWYgKE5v
ZGUqIHRhYmxlID0gaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShtX3NlbGVjdGlvblRvRGVsZXRl
LnZpc2libGVTdGFydCgpKSkKLSAgICAgICAgICAgIGlmIChtX3NlbGVjdGlvblRvRGVsZXRlLmVu
ZCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQorICAgICAgICAgICAgaWYgKG1fc2Vs
ZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFi
bGUpKQogICAgICAgICAgICAgICAgIG1fbmVlZFBsYWNlaG9sZGVyID0gZmFsc2U7CiAgICAgfQog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJl
dmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgRWRpdGluZ1N0eWxlOjpFZGl0aW5n
U3R5bGUoY29uc3QgUG9zaXRpbwogICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6
ZShmYWxzZSkKICAgICAsIG1fZm9udFNpemVEZWx0YShOb0ZvbnREZWx0YSkKIHsKLSAgICBpbml0
KHBvc2l0aW9uLm5vZGUoKSwgT25seUluaGVyaXRhYmxlUHJvcGVydGllcyk7CisgICAgaW5pdChw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCBPbmx5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKIH0K
IAogRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0Fw
cGx5QXQoY29ucwogUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUluY2x1ZGlu
Z1R5cGluZ1N0eWxlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbik7
Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBwb3NpdGlvbi5ub2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5k
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAgICBpZiAo
dHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIGVkaXRpbmdTdHls
ZS0+c3R5bGUoKS0+bWVyZ2UoY29weUVkaXRpbmdQcm9wZXJ0aWVzKHR5cGluZ1N0eWxlLT5zdHls
ZSgpKS5nZXQoKSk7CiAgICAgcmV0dXJuIGVkaXRpbmdTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgVmlzaWJsZVNl
bGVjdGlvbiBFZGl0b3I6OnNlbGVjdGlvbkZvckNvbQogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMg
YSB0ZXh0IGNvbnRyb2wsIGFuZCB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBp
dHMgc2hhZG93IHRyZWUsCiAgICAgLy8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBmb3Ig
dGhhdCB0ZXh0IGNvbnRyb2wuCiAgICAgTm9kZSogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLT50
b05vZGUoKTsKLSAgICBOb2RlKiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgaWYgKHRhcmdldCAmJiAoIXNlbGVjdGlvblN0YXJ0IHx8IHRhcmdl
dC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgIT0gc2VsZWN0aW9uU3RhcnQtPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgICAgICBpZiAodGFy
Z2V0LT5oYXNUYWdOYW1lKGlucHV0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4odGFyZ2V0KS0+aXNUZXh0RmllbGQoKSkKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIEVkaXRv
cjo6Y2FuRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydChzdGFydENvbnRhaW5lciwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSwgRE9XTlNUUkVBTSk7
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzb21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFy
dCBvZiBlZGl0YWJsZSByb290cywgbGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBs
aXN0IGl0ZW0uCi0gICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFp
bmVyLT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgICAgIGlmIChwcmV2aW91cy5pc051bGwo
KSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3
NSw3ICs1NzUsNyBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiB2
b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIGVuZGluZ1NlbGVjdGlvbikKIHsKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0
YXJ0KCkubm9kZSgpOworICAgICAgICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9kZS0+
cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAgICB9
CkBAIC02MTMsNyArNjEzLDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZv
clNlbAogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250ID0gMDsKIAogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICBOb2RlKiBzdGFydE5vZGUgPSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKS5ub2Rl
KCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gcmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlKSB7CiAgICAgICAgIE5vZGUqIHBh
c3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJl
bG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmls
LCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKQEAgLTY0OCw3ICs2NDgsNyBAQCBXcml0aW5n
RGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvCiAKICAgICBQb3NpdGlvbiBwb3NpdGlv
biA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0o
KTsKIAotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9
IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBXcml0aW5n
RGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvCiAgICAgICAgICAgICBoYXNOZXN0ZWRP
ck11bHRpcGxlRW1iZWRkaW5ncyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGlv
bjsKICAgICAgICAgfQotICAgICAgICBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBu
b2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2Vs
ZWN0aW9uIGlzIGVpdGhlciBhIGNhcmV0IHdpdGggbm8gdHlwaW5nIGF0dHJpYnV0ZXMgb3IgYSBy
YW5nZSBpbiB3aGljaCBubyBlbWJlZGRpbmcgaXMgYWRkZWQsIHNvIGp1c3QgdXNlIHRoZSBzdGFy
dCBwb3NpdGlvbgpAQCAtNzE5LDcgKzcxOSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0
ZXh0RGlyZWN0aW9uRm8KICAgICAgICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGluZ0RpcmVjdGlv
bjsKIAogICAgICAgICAvLyBJbiB0aGUgcmFuZ2UgY2FzZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGVt
YmVkZGluZyBlbGVtZW50IHBlcnNpc3RzIHVudGlsIHRoZSBlbmQgb2YgdGhlIHJhbmdlLgotICAg
ICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiAhZW5kLm5vZGUoKS0+
aXNEZXNjZW5kYW50T2Yobm9kZSkpCisgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNSYW5nZSgpICYmICFlbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkp
CiAgICAgICAgICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAg
Zm91bmREaXJlY3Rpb24gPSBkaXJlY3Rpb25WYWx1ZSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRUb1Jp
Z2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKQEAgLTcz
NSwxMiArNzM1LDEyIEBAIGJvb2wgRWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAog
ICAgIE5vZGUqIHN0YXJ0Tm9kZTsKICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFu
Z2UoKSkgewotICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkubm9kZSgpOwotICAgICAgICBOb2RlKiBlbmROb2Rl
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkubm9k
ZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkuc3RhcnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgTm9kZSog
ZW5kTm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVh
bSgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5v
ZGUpICE9IGVuY2xvc2luZ0Jsb2NrKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0gZWxzZQotICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAg
ICAgIHN0YXJ0Tm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxl
U3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5k
ZXJlciAmJiAhcmVuZGVyZXItPmlzUmVuZGVyQmxvY2soKSkKQEAgLTEwMDMsMTggKzEwMDMsMTgg
QEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NTdAogICAgICAgICAgICAg
cmV0dXJuIEZhbHNlVHJpU3RhdGU7CiAgICAgICAgIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKHN0
eWxlLCBzZWxlY3Rpb25TdHlsZS5nZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChO
b2RlKiBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IGNvbXB1dGVkU3R5bGUobm9k
ZSk7CiAgICAgICAgICAgICBpZiAobm9kZVN0eWxlKSB7CiAgICAgICAgICAgICAgICAgVHJpU3Rh
dGUgbm9kZVN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKHN0eWxlLCBub2RlU3R5bGUuZ2V0KCksICFu
b2RlLT5pc1RleHROb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZSA9
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IG5vZGVTdGF0ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlm
IChzdGF0ZSAhPSBub2RlU3RhdGUgJiYgbm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gTWl4ZWRUcmlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5v
ZGUgPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmVuZCgpLm5vZGUoKSkKKyAgICAgICAgICAgIGlm
IChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIxOCw3ICsxMjE4
LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleAogICAgIC8vIHRo
YXQgaXMgY29udGFpbmVkIGluIHRoZSBldmVudCB0YXJnZXQuCiAgICAgc2VsZWN0aW9uID0gc2Vs
ZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmIChzZWxlY3Rpb24uaXND
b250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBpZiAoTm9kZSogc2VsZWN0aW9uU3RhcnQgPSBz
ZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsKKyAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGlvblN0
YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAg
UmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHNlbGVjdGlvblN0YXJ0LT5kb2N1bWVudCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHRleHQKQEAgLTEyODEsNyAr
MTI4MSw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJ
VElORwogICAgICAgICByZW1vdmVTcGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9C
ZUVkaXRlZCh0cnVlKTsKICNlbmRpZgotICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpKSkKKyAgICAgICAgaWYgKGlz
Tm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpKQogICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVNlbGVjdGlvbihzZWxl
Y3Rpb24uZ2V0KCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUpOwpAQCAtMTI5OSw3
ICsxMjk5LDcgQEAgdm9pZCBFZGl0b3I6OmNvcHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
dGFydCgpLm5vZGUoKSkpCisgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUt
PnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBQYXN0ZWJv
YXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHQoKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7CkBAIC0xNzI0LDkgKzE3MjQsOSBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgU3RyaW5nCiAgICAgICAgIC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBv
c2l0aW9uIG5vdy4KICAgICAgICAgUG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5iYXNlKCkuZG93bnN0cmVhbSgpOwogICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+ZXh0ZW50KCk7Ci0gICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5u
b2RlKCk7CisgICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgICAgICB1bnNpZ25lZCBiYXNlT2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwotICAgICAgICBOb2RlKiBleHRlbnROb2RlID0gZXh0ZW50Lm5vZGUoKTsKKyAgICAgICAg
Tm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNp
Z25lZCBleHRlbnRPZmZzZXQgPSBleHRlbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKIAog
ICAgICAgICBpZiAoYmFzZU5vZGUgJiYgYmFzZU5vZGUgPT0gZXh0ZW50Tm9kZSAmJiBiYXNlTm9k
ZS0+aXNUZXh0Tm9kZSgpICYmIGJhc2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9m
ZnNldCkgewpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhibwogICAgIFJlZlB0cjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZShyYW5n
ZU9mQ29udGVudHMoZnJhbWUoKS0+ZG9jdW1lbnQoKSkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0
aFNlbGVjdGlvbiA9IGZhbHNlOwotICAgIGlmIChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsK
KyAgICBpZiAoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICBz
dGFydGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7CiAgICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVj
dGlvbikgewogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKSk7CkBAIC0xODE2LDcgKzE4MTYsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAg
ICBQb3NpdGlvbiByYW5nZUNvbXBsaWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7Ci0gICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJh
bmdlQ29tcGxpYW50UG9zaXRpb24ubm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+
c2V0U3RhcnQocmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNv
bXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKICAgICAgICAg
c3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsgLy8gd29uJ3QgbmVlZCB0byB3cmFwCiAgICAg
fQogICAgIApAQCAtMjIyMSw3ICsyMjIxLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2lu
Z0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9j
dXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9y
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSk7CisgICAgcmV0dXJuIGlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3IobV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVj
YXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKQpAQCAtMjg1MiwxMCArMjg1MiwxMCBAQCBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRp
b25TZWxlY3Rpb24odW5zCiAgICAgaWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0
YXJ0KCk7Ci0gICAgaWYgKHN0YXJ0Lm5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBp
ZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5l
bmQoKTsKLSAgICBpZiAoZW5kLm5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBpZiAo
ZW5kLmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSkgPCBtX2NvbXBvc2l0aW9uU3RhcnQpCkBAIC0zMTExLDcgKzMxMTEs
NyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CiAgICAgc3RhcnRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQo
RE9XTlNUUkVBTSwgc3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQpOwogCi0gICAgUmVu
ZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChzdGFydFJlbmRlcmVyKTsKICAg
ICBJbnRSZWN0IHN0YXJ0Q2FyZXRSZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qo
c3RhcnRJbmxpbmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUp
OwogICAgIGlmIChzdGFydENhcmV0UmVjdCAhPSBJbnRSZWN0KCkpCkBAIC0zMTI0LDcgKzMxMjQs
NyBAQCBJbnRSZWN0IEVkaXRvcjo6Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CiAgICAgZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQ
U1RSRUFNLCBlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKIAotICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVu
ZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgQVNTRVJUKGVuZFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IGVuZENhcmV0
UmVjdCA9IGVuZFJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0
T2Zmc2V0KTsKICAgICBpZiAoZW5kQ2FyZXRSZWN0ICE9IEludFJlY3QoKSkKQEAgLTMyODQsMTIg
KzMyODQsMTIgQEAgUmVuZGVyU3R5bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdAogICAg
IFBvc2l0aW9uIHBvc2l0aW9uID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRp
ZGF0ZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKSkKKyAg
ICBpZiAoIXBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+dHlwaW5nU3R5bGUoKTsKICAgICBpZiAoIXR5cGluZ1N0eWxlIHx8ICF0eXBpbmdTdHlsZS0+
c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5
bGUoKTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCktPnN0eWxlKCk7CiAKICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAKQEAgLTMzMDEs
NyArMzMwMSw3IEBAIFJlbmRlclN0eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKICAg
ICBzdHlsZUVsZW1lbnQtPmFwcGVuZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVk
aXRpbmdUZXh0Tm9kZSgiIiksIGVjKTsKICAgICBBU1NFUlQoIWVjKTsKIAotICAgIHBvc2l0aW9u
Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAg
ICBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0
eWxlRWxlbWVudCwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogCiAgICAgbm9kZVRvUmVtb3ZlID0g
c3R5bGVFbGVtZW50LmdldCgpOwpAQCAtMzUzNyw3ICszNTM3LDcgQEAgdm9pZCBFZGl0b3I6OnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oYwogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVj
ayBzcGVsbGluZyBlbHNld2hlcmUsIHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8g
SWYgdGhpcyBpcyBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUg
b3BlcmF0aW9uLAogICAgICAgICAvLyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0
aGUgZG9jdW1lbnQuCi0gICAgICAgIGlmIChzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciAm
JiBjbG9zZVR5cGluZyAmJiBvbGRTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRT
ZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5p
bkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFy
ICYmIGNsb3NlVHlwaW5nICYmIG9sZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9s
ZFNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0
KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBvbGRTdGFydChvbGRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRBZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFy
dE9mV29yZChvbGRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3Rh
cnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50
V29yZHMgIT0gbmV3QWRqYWNlbnRXb3JkcykgewpAQCAtMzU3Niw3ICszNTc2LDcgQEAgc3RhdGlj
IE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5vZGUqIG5vZAogICAgICAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKS0+aXNUZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgaWYg
KG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgICAgIG5vZGUgPSB0
b1JlbmRlclRleHRDb250cm9sKG5vZGUtPnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJ
bmRleCgxKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSB0b1Jl
bmRlclRleHRDb250cm9sKG5vZGUtPnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eCgxKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxk
KCk7CiAgICAgICAgIGVsc2UKQEAgLTM1ODgsNyArMzU4OCw3IEBAIHN0YXRpYyBOb2RlKiBmaW5k
Rmlyc3RNYXJrYWJsZShOb2RlKiBub2QKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFz
U3BlbGxpbmdNYXJrZXJGb3IoaW50IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
Lm5vZGUoKSk7CisgICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1h
dEJsb2NrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
b3JtYXRCbG9ja0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCAr
NjAsOCBAQCB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uCiAKIHZvaWQg
Rm9ybWF0QmxvY2tDb21tYW5kOjpmb3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQsIGNvbnN0IFBvc2l0aW9uJiBlbmRPZlNlbGVjdGlvbiwgUmVmUHRy
PEVsZW1lbnQ+JiBibG9ja05vZGUpCiB7Ci0gICAgTm9kZSogbm9kZVRvU3BsaXRUbyA9IGVuY2xv
c2luZ0Jsb2NrVG9TcGxpdFRyZWVUbyhzdGFydC5ub2RlKCkpOwotICAgIFJlZlB0cjxOb2RlPiBv
dXRlckJsb2NrID0gKHN0YXJ0Lm5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0Lm5vZGUo
KSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2RlKCksIG5vZGVUb1NwbGl0VG8pOworICAgIE5v
ZGUqIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSk7CisgICAgUmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkg
OiBzcGxpdFRyZWVUb05vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgbm9kZVRvU3BsaXRUbyk7
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGVBZnRlckluc2VydGlvblBvc2l0aW9uID0gb3V0ZXJCbG9j
azsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHN0YXJ0LCBlbmRPZlNlbGVjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
ZGVudE91dGRlbnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6SW5kZW50T3V0ZGVudENvbW1h
CiBib29sIEluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0
IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICAvLyBJZiBvdXIg
c2VsZWN0aW9uIGlzIG5vdCBpbnNpZGUgYSBsaXN0LCBiYWlsIG91dC4KLSAgICBOb2RlKiBsYXN0
Tm9kZUluU2VsZWN0ZWRQYXJhZ3JhcGggPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogbGFzdE5v
ZGVJblNlbGVjdGVkUGFyYWdyYXBoID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBSZWZQ
dHI8RWxlbWVudD4gbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxhc3ROb2RlSW5TZWxlY3RlZFBh
cmFncmFwaCk7CiAgICAgaWYgKCFsaXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
OTQsMTUgKzk0LDE1IEBAIHZvaWQgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG8K
ICAgICBOb2RlKiBub2RlVG9TcGxpdFRvOwogICAgIGlmIChlbmNsb3NpbmdDZWxsKQogICAgICAg
ICBub2RlVG9TcGxpdFRvID0gZW5jbG9zaW5nQ2VsbDsKLSAgICBlbHNlIGlmIChlbmNsb3NpbmdM
aXN0KHN0YXJ0Lm5vZGUoKSkpCi0gICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9j
ayhzdGFydC5ub2RlKCkpOworICAgIGVsc2UgaWYgKGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVwcmVj
YXRlZE5vZGUoKSkpCisgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9jayhzdGFy
dC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBlbHNlCiAgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBl
ZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihzdGFydCk7CiAKICAgICBpZiAoIW5vZGVUb1NwbGl0VG8p
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0
Lm5vZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9k
ZShzdGFydC5ub2RlKCksIG5vZGVUb1NwbGl0VG8pOworICAgIFJlZlB0cjxOb2RlPiBvdXRlckJs
b2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5k
ZXByZWNhdGVkTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCks
IG5vZGVUb1NwbGl0VG8pOwogCiAgICAgaWYgKCF0YXJnZXRCbG9ja3F1b3RlKSB7CiAgICAgICAg
IC8vIENyZWF0ZSBhIG5ldyBibG9ja3F1b3RlIGFuZCBpbnNlcnQgaXQgYXMgYSBjaGlsZCBvZiB0
aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50LiBXZSBhY2NvbXBsaXNoCkBAIC0xNjYsMTMgKzE2Niwx
MyBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyCiAKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBOb2RlKiBlbmNsb3NpbmdCbG9ja0Zsb3cgPSBlbmNsb3NpbmdC
bG9jayh2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7Cisg
ICAgTm9kZSogZW5jbG9zaW5nQmxvY2tGbG93ID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0
T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBSZWZQ
dHI8Tm9kZT4gc3BsaXRCbG9ja3F1b3RlTm9kZSA9IGVuY2xvc2luZ05vZGU7CiAgICAgaWYgKGVu
Y2xvc2luZ0Jsb2NrRmxvdyAhPSBlbmNsb3NpbmdOb2RlKQogICAgICAgICBzcGxpdEJsb2NrcXVv
dGVOb2RlID0gc3BsaXRUcmVlVG9Ob2RlKGVuY2xvc2luZ0Jsb2NrRmxvdywgZW5jbG9zaW5nTm9k
ZSwgdHJ1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3Rl
IGF0IHdoZXJlIHdlIHN0YXJ0IG91dGRlbnRpbmcuCi0gICAgICAgIHNwbGl0RWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5nTm9kZSksIHZpc2libGVTdGFydE9mUGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19j
YXN0PEVsZW1lbnQqPihlbmNsb3NpbmdOb2RlKSwgdmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICB9CiAgICAgUmVmUHRyPE5vZGU+
IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGluc2Vy
dE5vZGVCZWZvcmUocGxhY2Vob2xkZXIsIHNwbGl0QmxvY2txdW90ZU5vZGUpOwpAQCAtMjA1LDEw
ICsyMDUsMTAgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFJlZ2lvbgogICAg
ICAgICAvLyBvdXRkZW50UGFyYWdyYXBoIGNvdWxkIG1vdmUgbW9yZSB0aGFuIG9uZSBwYXJhZ3Jh
cGggaWYgdGhlIHBhcmFncmFwaAogICAgICAgICAvLyBpcyBpbiBhIGxpc3QgaXRlbS4gQXMgYSBy
ZXN1bHQsIGVuZEFmdGVyU2VsZWN0aW9uIGFuZCBlbmRPZk5leHRQYXJhZ3JhcGgKICAgICAgICAg
Ly8gY291bGQgcmVmZXIgdG8gcG9zaXRpb25zIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQuCi0g
ICAgICAgIGlmIChlbmRBZnRlclNlbGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJTZWxl
Y3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYg
KGVuZEFmdGVyU2VsZWN0aW9uLmlzTm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVjdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51
bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRv
Y3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAm
JiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRv
Y3VtZW50KCkpIHsKICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZGluZ1Nl
bGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQ
YXJhZ3JhcGgoZW5kT2ZDdXJyZW50UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNw
cAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVC
cmVha0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTEgQEAgdm9pZCBJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjppbnNlcnROb2RlQQogICAgIC8vIEluc2VydCB0aGUgQlIg
YWZ0ZXIgdGhlIGNhcmV0IHBvc2l0aW9uLiBJbiB0aGUgY2FzZSB0aGUKICAgICAvLyBwb3NpdGlv
biBpcyBhIGJsb2NrLCBkbyBhbiBhcHBlbmQuIFdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0CiAgICAg
Ly8gdGhlIEJSICphZnRlciogdGhlIGJsb2NrLgotICAgIEVsZW1lbnQqIGNiID0gcG9zLm5vZGUo
KS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwotICAgIGlmIChjYiA9PSBwb3Mubm9kZSgp
KQorICAgIEVsZW1lbnQqIGNiID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoKTsKKyAgICBpZiAoY2IgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAg
ICAgIGFwcGVuZE5vZGUobm9kZSwgY2IpOwogICAgIGVsc2UKLSAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKG5vZGUsIHBvcy5ub2RlKCkpOworICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgcG9z
LmRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6Omlu
c2VydE5vZGVCZWZvcmVQb3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zKQpA
QCAtNjksMTEgKzY5LDExIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9k
ZUIKICAgICAvLyBJbnNlcnQgdGhlIEJSIGFmdGVyIHRoZSBjYXJldCBwb3NpdGlvbi4gSW4gdGhl
IGNhc2UgdGhlCiAgICAgLy8gcG9zaXRpb24gaXMgYSBibG9jaywgZG8gYW4gYXBwZW5kLiBXZSBk
b24ndCB3YW50IHRvIGluc2VydAogICAgIC8vIHRoZSBCUiAqYmVmb3JlKiB0aGUgYmxvY2suCi0g
ICAgRWxlbWVudCogY2IgPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7
Ci0gICAgaWYgKGNiID09IHBvcy5ub2RlKCkpCisgICAgRWxlbWVudCogY2IgPSBwb3MuZGVwcmVj
YXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgIGlmIChjYiA9PSBw
b3MuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgYXBwZW5kTm9kZShub2RlLCBjYik7CiAgICAg
ZWxzZQotICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGUsIHBvcy5ub2RlKCkpOworICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKG5vZGUsIHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogLy8g
V2hldGhlciB3ZSBzaG91bGQgaW5zZXJ0IGEgYnJlYWsgZWxlbWVudCBvciBhICdcbicuCkBAIC04
Myw3ICs4Myw3IEBAIGJvb2wgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6c2hvdWxkVXNlQnIKICAg
ICAvLyB0aGUgaW5wdXQgZWxlbWVudCwgYW5kIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNr
IHRoZSBpbnB1dCBlbGVtZW50J3MKICAgICAvLyBwYXJlbnQncyByZW5kZXJlci4KICAgICBQb3Np
dGlvbiBwKGluc2VydGlvblBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgcmV0
dXJuIHAubm9kZSgpLT5yZW5kZXJlcigpICYmICFwLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+cHJlc2VydmVOZXdsaW5lKCk7CisgICAgcmV0dXJuIHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiAhcC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVz
ZXJ2ZU5ld2xpbmUoKTsKIH0KIAogdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5
KCkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1lcmdlIHRleHQgbm9kZXMgd2hlbiBpbnNlcnRp
bmcganVzdCBhZnRlciBvciBiZWZvcmUgdGV4dC4KICAgICAKICAgICBpZiAoaXNFbmRPZlBhcmFn
cmFwaChjYXJldCkgJiYgIWxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkg
ewotICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVhayA9ICFwb3Mubm9kZSgpLT5oYXNUYWdO
YW1lKGhyVGFnKSAmJiAhcG9zLm5vZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7CisgICAgICAg
IGJvb2wgbmVlZEV4dHJhTGluZUJyZWFrID0gIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGhyVGFnKSAmJiAhcG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUodGFibGVUYWcp
OwogICAgICAgICAKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9z
KTsKICAgICAgICAgCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21t
YW5kOjpkb0FwcGx5KCkKICAgICAgICAgCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRpbmdQ
b3NpdGlvbihwb3NpdGlvbkJlZm9yZU5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7CiAgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7Ci0g
ICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9m
ZnNldChwb3Mubm9kZSgpKSkgeworICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkgPD0gY2FyZXRNaW5PZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAg
ICAgIGluc2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIAogICAg
ICAgICAvLyBJbnNlcnQgYW4gZXh0cmEgYnIgb3IgJ1xuJyBpZiB0aGUganVzdCBpbnNlcnRlZCBv
bmUgY29sbGFwc2VkLgpAQCAtMTMzLDEyICsxMzMsMTIgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24ocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dO
U1RSRUFNKSk7CiAgICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFmdGVyIGFsbCBvZiB0aGUgcmVu
ZGVyZWQgdGV4dCBpbiBhIHRleHQgbm9kZSwgb3IgaW50byBhIG5vbi10ZXh0IG5vZGUsCiAgICAg
Ly8gYSBzaW1wbGUgaW5zZXJ0aW9uIGlzIHN1ZmZpY2llbnQuCi0gICAgfSBlbHNlIGlmIChwb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSB8
fCAhcG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUo
KSkgfHwgIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaW5z
ZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAgICAgICAgc2V0RW5kaW5nU2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlVG9J
bnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7Ci0gICAgfSBlbHNlIGlmIChwb3Mubm9kZSgpLT5p
c1RleHROb2RlKCkpIHsKKyAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgLy8gU3BsaXQgYSB0ZXh0IG5vZGUKLSAgICAgICAgVGV4dCog
dGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLm5vZGUoKSk7CisgICAgICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkpOwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgdGV4dE5vZGUpOwog
ICAgICAgICBQb3NpdGlvbiBlbmRpbmdQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4
dE5vZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwxMiBAQCBib29sIElu
c2VydExpc3RDb21tYW5kOjpzZWxlY3Rpb25IYXNMaXN0CiB7CiAgICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogCi0gICAgaWYgKCFlbmNsb3NpbmdM
aXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkKKyAgICBpZiAoIWVuY2xvc2luZ0xp
c3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCk7CiAgICAgd2hpbGUgKHN0YXJ0LmlzTm90TnVsbCgpICYmIHN0YXJ0ICE9IGVuZCkgewot
ICAgICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKS5ub2RlKCkpOworICAgICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xp
c3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaWYg
KCFsaXN0Tm9kZSB8fCAhbGlzdE5vZGUtPmhhc1RhZ05hbWUobGlzdFRhZykpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgoc3Rh
cnQpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICAgICAgICAgIC8vIGluZmluaXRlIGxvb3AgYW5kIGJlY2F1c2UgdGhlcmUgaXMg
bm8gbW9yZSB3b3JrIHRvIGJlIGRvbmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUUoPHJkYXI6
Ly9wcm9ibGVtLzU5ODM5NzQ+KTogVGhlIGVuZGluZ1NlbGVjdGlvbigpIG1heSBiZSBpbmNvcnJl
Y3QgaGVyZS4gIENvbXB1dGUgCiAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBsb2NhdGlvbiBv
ZiBlbmRPZlNlbGVjdGlvbiBhbmQgdXNlIGl0IGFzIHRoZSBlbmQgb2YgdGhlIG5ldyBzZWxlY3Rp
b24uCi0gICAgICAgICAgICAgICAgaWYgKCFzdGFydE9mTGFzdFBhcmFncmFwaC5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGlmICghc3RhcnRP
Zkxhc3RQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIHNldEVuZGlu
Z1NlbGVjdGlvbihzdGFydE9mQ3VycmVudFBhcmFncmFwaCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBA
QCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlCiAgICAgLy8gRklYTUU6
IFRoaXMgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxlY3Rpb24gdGhh
dCBzdGFydHMganVzdCBiZWZvcmUgYQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGluc2lkZSB0aGUg
Zmlyc3QgY2VsbCwgc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3VsZCBwcm9iYWJs
eQogICAgIC8vIGJlIHJlbmFtZWQgYW5kIGRlcGxveWVkIGluc2lkZSBzZXRFbmRpbmdTZWxlY3Rp
b24oKS4KLSAgICBOb2RlKiBzZWxlY3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KS5ub2RlKCk7CisgICAgTm9kZSogc2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2RlKiBsaXN0Q2hpbGROb2RlID0gZW5jbG9z
aW5nTGlzdENoaWxkKHNlbGVjdGlvbk5vZGUpOwogICAgIGJvb2wgc3dpdGNoTGlzdFR5cGUgPSBm
YWxzZTsKICAgICBpZiAobGlzdENoaWxkTm9kZSkgewpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQg
SW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGUKICAgICAgICAgICAgIFJlZlB0cjxI
VE1MRWxlbWVudD4gbmV3TGlzdCA9IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RU
YWcpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShuZXdMaXN0LCBsaXN0Tm9kZSk7CiAK
LSAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGRJbkxpc3QgPSBlbmNsb3NpbmdMaXN0Q2hpbGQo
VmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpKS5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKSwgbGlzdE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgTm9kZSog
Zmlyc3RDaGlsZEluTGlzdCA9IGVuY2xvc2luZ0xpc3RDaGlsZChWaXNpYmxlUG9zaXRpb24oZmly
c3RQb3NpdGlvbkluTm9kZShsaXN0Tm9kZS5nZXQoKSkpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKSwgbGlzdE5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9j
ayA9IGZpcnN0Q2hpbGRJbkxpc3QtPmlzQmxvY2tGbG93KCkgPyBmaXJzdENoaWxkSW5MaXN0IDog
bGlzdE5vZGUuZ2V0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1vdmVQYXJhZ3JhcGhX
aXRoQ2xvbmVzKGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpLCBsYXN0UG9zaXRp
b25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpLCBuZXdMaXN0LmdldCgpLCBvdXRlckJsb2NrKTsKQEAg
LTI2NSw5ICsyNjUsOSBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3Jh
CiAgICAgICAgIC8vIEEgcGFyYWdyYXBoIGlzIHZpc3VhbGx5IGEgbGlzdCBpdGVtIG1pbnVzIGEg
bGlzdCBtYXJrZXIuICBUaGUgcGFyYWdyYXBoIHdpbGwgYmUgbW92ZWQuCiAgICAgICAgIHN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChvcmlnaW5hbFN0YXJ0KTsKICAgICAgICAgZW5kID0gZW5kT2ZQ
YXJhZ3JhcGgoc3RhcnQpOwotICAgICAgICBuZXh0TGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENo
aWxkKGVuZC5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCksIGxpc3ROb2RlKTsKKyAgICAg
ICAgbmV4dExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgpLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSwgbGlzdE5vZGUpOwogICAgICAgICBBU1NFUlQobmV4
dExpc3RDaGlsZCAhPSBsaXN0Q2hpbGROb2RlKTsKLSAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQg
PSBlbmNsb3NpbmdMaXN0Q2hpbGQoc3RhcnQucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKSwgbGlzdE5vZGUpOworICAgICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IGVuY2xvc2luZ0xp
c3RDaGlsZChzdGFydC5wcmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KSwgbGlzdE5vZGUpOwogICAgICAgICBBU1NFUlQocHJldmlvdXNMaXN0Q2hpbGQgIT0gbGlzdENo
aWxkTm9kZSk7CiAgICAgfQogICAgIC8vIFdoZW4gcmVtb3ZpbmcgYSBsaXN0LCB3ZSBtdXN0IGFs
d2F5cyBjcmVhdGUgYSBwbGFjZWhvbGRlciB0byBhY3QgYXMgYSBwb2ludCBvZiBpbnNlcnRpb24K
QEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJh
Z3JhCiAKIHN0YXRpYyBFbGVtZW50KiBhZGphY2VudEVuY2xvc2luZ0xpc3QoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiBwb3MsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYWRqYWNlbnRQb3MsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcpCiB7Ci0gICAgRWxlbWVudCogbGlzdE5vZGUgPSBvdXRl
cm1vc3RFbmNsb3NpbmdMaXN0KGFkamFjZW50UG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsK
KyAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QoYWRqYWNlbnRQ
b3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIGlmICghbGlzdE5v
ZGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzE3LDkgKzMxNyw5IEBAIHN0YXRpYyBFbGVtZW50
KiBhZGphY2VudEVuY2xvc2luZ0xpc3QoY28KICAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xv
c2luZ1RhYmxlQ2VsbChhZGphY2VudFBvcy5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIGlmICgh
bGlzdE5vZGUtPmhhc1RhZ05hbWUobGlzdFRhZykKLSAgICAgICAgfHwgbGlzdE5vZGUtPmNvbnRh
aW5zKHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkKKyAgICAgICAgfHwgbGlzdE5vZGUtPmNv
bnRhaW5zKHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHx8
IHByZXZpb3VzQ2VsbCAhPSBjdXJyZW50Q2VsbAotICAgICAgICB8fCBlbmNsb3NpbmdMaXN0KGxp
c3ROb2RlKSAhPSBlbmNsb3NpbmdMaXN0KHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisg
ICAgICAgIHx8IGVuY2xvc2luZ0xpc3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIGxpc3ROb2RlOwpAQCAtMzUxLDcgKzM1MSw3IEBAIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IEluc2VydExpc3RDb21tYW4KICAgICAgICAgbGlzdEVsZW1lbnQgPSBjcmVhdGVIVE1M
RWxlbWVudChkb2N1bWVudCgpLCBsaXN0VGFnKTsKICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRl
bUVsZW1lbnQsIGxpc3RFbGVtZW50KTsKIAotICAgICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIGlz
QmxvY2soc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpKSB7CisgICAgICAgIGlmIChzdGFy
dCA9PSBlbmQgJiYgaXNCbG9jayhzdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCkpKSB7CiAgICAgICAgICAgICAvLyBJbnNlcnRpbmcgdGhlIGxpc3QgaW50byBhbiBlbXB0eSBw
YXJhZ3JhcGggdGhhdCBpc24ndCBoZWxkIG9wZW4gCiAgICAgICAgICAgICAvLyBieSBhIGJyIG9y
IGEgJ1xuJywgd2lsbCBpbnZhbGlkYXRlIHN0YXJ0IGFuZCBlbmQuICBJbnNlcnQgCiAgICAgICAg
ICAgICAvLyBhIHBsYWNlaG9sZGVyIGFuZCB0aGVuIHJlY29tcHV0ZSBzdGFydCBhbmQgZW5kLgpA
QCAtMzY3LDcgKzM2Nyw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21t
YW4KICAgICAgICAgLy8gY2xlYW4gbWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNo
ZWQgZG93biBhcyBmYXIgYXMgcG9zc2libGUuCiAgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBv
cyhzdGFydC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkpOwogICAgICAgICAvLyBBbHNvIGF2
b2lkIHRoZSBjb250YWluaW5nIGxpc3QgaXRlbS4KLSAgICAgICAgTm9kZSogbGlzdENoaWxkID0g
ZW5jbG9zaW5nTGlzdENoaWxkKGluc2VydGlvblBvcy5ub2RlKCkpOworICAgICAgICBOb2RlKiBs
aXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICBpZiAobGlzdENoaWxkICYmIGxpc3RDaGlsZC0+aGFzVGFnTmFtZShsaVRh
ZykpCiAgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZShsaXN0Q2hpbGQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsKHN0
YXJ0QmxvY2spCiAgICAgICAgICAgICB8fCBzdGFydEJsb2NrLT5oYXNUYWdOYW1lKGZvcm1UYWcp
CiAgICAgICAgICAgICAvLyBGSVhNRTogSWYgdGhlIG5vZGUgaXMgaGlkZGVuLCB3ZSBkb24ndCBo
YXZlIGEgY2Fub25pY2FsIHBvc2l0aW9uIHNvIHdlIHdpbGwgZG8gdGhlIHdyb25nIHRoaW5nIGZv
ciB0YWJsZXMgYW5kIDxocj4uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDM0MgotICAgICAgICAgICAgfHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25p
Y2FsUG9zLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBjYW5vbmljYWxQb3Mubm9kZSgpLT5yZW5kZXJl
cigpLT5pc1RhYmxlKCkpCi0gICAgICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAm
JiBjYW5vbmljYWxQb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSkpIHsKKyAgICAgICAgICAg
IHx8ICghY2Fub25pY2FsUG9zLmlzTnVsbCgpICYmIGNhbm9uaWNhbFBvcy5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpICYmIGNhbm9uaWNhbFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLT5pc1RhYmxlKCkpCisgICAgICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAm
JiBjYW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpKSB7CiAg
ICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjM3
LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAv
LyBSZWNyZWF0ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCiAgICAg
ICAgIAogICAgICAgICBWZWN0b3I8RWxlbWVudCo+IGFuY2VzdG9yczsKLSAgICAgICAgZ2V0QW5j
ZXN0b3JzSW5zaWRlQmxvY2soaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLCBzdGFydEJsb2NrLCBh
bmNlc3RvcnMpOyAgICAgIAorICAgICAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNlcnRp
b25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOyAgICAg
IAogICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gY2xvbmVIaWVyYXJjaHlVbmRlck5l
d0Jsb2NrKGFuY2VzdG9ycywgYmxvY2tUb0luc2VydCk7CiAgICAgICAgIAogICAgICAgICBhcHBl
bmRCbG9ja1BsYWNlaG9sZGVyKHBhcmVudCk7CkBAIC0yNTQsMTEgKzI1NCwxMSBAQCB2b2lkIElu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgICAgIE5vZGUgKnJlZk5vZGU7
CiAgICAgICAgIGlmIChpc0ZpcnN0SW5CbG9jayAmJiAhbmVzdE5ld0Jsb2NrKQogICAgICAgICAg
ICAgcmVmTm9kZSA9IHN0YXJ0QmxvY2s7Ci0gICAgICAgIGVsc2UgaWYgKGluc2VydGlvblBvc2l0
aW9uLm5vZGUoKSA9PSBzdGFydEJsb2NrICYmIG5lc3ROZXdCbG9jaykgeworICAgICAgICBlbHNl
IGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpID09IHN0YXJ0QmxvY2sgJiYg
bmVzdE5ld0Jsb2NrKSB7CiAgICAgICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9jay0+Y2hpbGRO
b2RlKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgQVNTRVJUKHJlZk5vZGUpOyAvLyBtdXN0IGJlIHRydWUgb3Igd2UnZCBiZSBpbiB0aGUg
ZW5kIG9mIGJsb2NrIGNhc2UKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZWZOb2RlID0g
aW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpOworICAgICAgICAgICAgcmVmTm9kZSA9IGluc2VydGlv
blBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAgLy8gZmluZCBlbmRpbmcgc2Vs
ZWN0aW9uIHBvc2l0aW9uIGVhc2lseSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBwYXJhZ3JhcGgKICAg
ICAgICAgaW5zZXJ0aW9uUG9zaXRpb24gPSBpbnNlcnRpb25Qb3NpdGlvbi5kb3duc3RyZWFtKCk7
CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
OjpkbwogICAgICAgICAvLyBSZWNyZWF0ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gdGhlIG5ldyBw
YXJhZ3JhcGguCiAKICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBhbmNlc3RvcnM7Ci0gICAgICAg
IGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJv
dW5kYXJ5KGluc2VydGlvblBvc2l0aW9uKS5ub2RlKCksIHN0YXJ0QmxvY2ssIGFuY2VzdG9ycyk7
CisgICAgICAgIGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFs
RWxlbWVudEJvdW5kYXJ5KGluc2VydGlvblBvc2l0aW9uKS5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dEJsb2NrLCBhbmNlc3RvcnMpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhv
bGRlcihjbG9uZUhpZXJhcmNoeVVuZGVyTmV3QmxvY2soYW5jZXN0b3JzLCBibG9ja1RvSW5zZXJ0
KSk7CiAgICAgICAgIApAQCAtMzAxLDIyICszMDEsMjIgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kOjpkbwogCiAgICAgLy8gQnVpbGQgdXAgbGlzdCBvZiBhbmNlc3RvcnMg
aW4gYmV0d2VlbiB0aGUgc3RhcnQgbm9kZSBhbmQgdGhlIHN0YXJ0IGJsb2NrLgogICAgIFZlY3Rv
cjxFbGVtZW50Kj4gYW5jZXN0b3JzOwotICAgIGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKGluc2Vy
dGlvblBvc2l0aW9uLm5vZGUoKSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKKyAgICBnZXRBbmNl
c3RvcnNJbnNpZGVCbG9jayhpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dEJsb2NrLCBhbmNlc3RvcnMpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBjYXVzZSBh
IHJlbmRlcmVkIHNwYWNlIHRvIGJlY29tZSB1bnJlbmRlcmVkLgogICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRoZSBhZmZpbml0eSBmb3IgcG9zLCBidXQgcG9zLmRvd25zdHJlYW0oKSBkb2VzIG5vdCBn
aXZlIGl0CiAgICAgUG9zaXRpb24gbGVhZGluZ1doaXRlc3BhY2UgPSBpbnNlcnRpb25Qb3NpdGlv
bi5sZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIC8v
IEZJWE1FOiBsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uIGlzIHJldHVybmluZyB0aGUgcG9zaXRp
b24gYmVmb3JlIHByZXNlcnZlZCBuZXdsaW5lcyBmb3IgcG9zaXRpb25zCiAgICAgLy8gYWZ0ZXIg
dGhlIHByZXNlcnZlZCBuZXdsaW5lLCBjYXVzaW5nIHRoZSBuZXdsaW5lIHRvIGJlIHR1cm5lZCBp
bnRvIGEgbmJzcC4KLSAgICBpZiAobGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgbGVh
ZGluZ1doaXRlc3BhY2Uubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4
dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obGVhZGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKKyAg
ICBpZiAobGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgbGVhZGluZ1doaXRlc3BhY2Uu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHROb2Rl
ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkp
OwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VU
ZXh0SW5Ob2RlKHRleHROb2RlLCBsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICAv
LyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KLSAgICBpZiAo
aW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCog
dGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpKTsK
KyAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgp
KSB7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlv
blBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0gKHVuc2ln
bmVkKWluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gdGV4dE5v
ZGUtPmxlbmd0aCgpOwogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA+IDAgJiYgIWF0RW5kKSB7CiAgICAgICAgICAgICBzcGxpdFRleHROb2Rl
KHRleHROb2RlLCBpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
QEAgLTM0NCw4ICszNDQsOCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6
OmRvCiAgICAgICAgIGFwcGVuZE5vZGUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLmdl
dCgpLCBibG9ja1RvSW5zZXJ0LmdldCgpKTsKICAgICAgICAgCiAgICAgLy8gTW92ZSB0aGUgc3Rh
cnQgbm9kZSBhbmQgdGhlIHNpYmxpbmdzIG9mIHRoZSBzdGFydCBub2RlLgotICAgIGlmIChpbnNl
cnRpb25Qb3NpdGlvbi5ub2RlKCkgIT0gc3RhcnRCbG9jaykgewotICAgICAgICBOb2RlKiBuID0g
aW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpOworICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpICE9IHN0YXJ0QmxvY2spIHsKKyAgICAgICAgTm9kZSogbiA9IGluc2VydGlv
blBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlv
bi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKQogICAgICAg
ICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAKQEAgLTM4MiwxMCArMzgyLDEwIEBAIHZvaWQg
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIGluc2VydGlv
blBvc2l0aW9uLm1vdmVUb09mZnNldCgwKTsKICAgICAgICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlv
bi5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkpIHsKICAgICAgICAgICAgIC8vIENsZWFyIG91dCBhbGwg
d2hpdGVzcGFjZSBhbmQgaW5zZXJ0IG9uZSBub24tYnJlYWtpbmcgc3BhY2UKLSAgICAgICAgICAg
IEFTU0VSVCghaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLT5yZW5kZXJlcigpIHx8IGluc2VydGlv
blBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNl
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpIHx8IGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIGRl
bGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShpbnNlcnRpb25Qb3NpdGlvbik7Ci0gICAg
ICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkpCi0gICAg
ICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRp
b25Qb3NpdGlvbi5ub2RlKCkpLCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAg
ICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUo
KSkKKyAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+
KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpLCAwLCBub25CcmVha2luZ1NwYWNl
U3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTgsMTMgKzU4LDEzIEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjpwcmVwYXJlRm9yVGUK
ICAgICBQb3NpdGlvbiBwb3MgPSBwOwogICAgIC8vIFByZXBhcmUgZm9yIHRleHQgaW5wdXQgYnkg
bG9va2luZyBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgIC8vIEl0IG1heSBiZSBuZWNl
c3NhcnkgdG8gaW5zZXJ0IGEgdGV4dCBub2RlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4KLSAgICBp
ZiAoIXBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgIGlmICghcG9zLmRlcHJlY2F0ZWRO
b2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUgPSBk
b2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpOwogICAgICAgICBpbnNlcnROb2Rl
QXQodGV4dE5vZGUuZ2V0KCksIHBvcyk7CiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5O
b2RlKHRleHROb2RlLmdldCgpKTsKICAgICB9CiAKLSAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUo
cG9zLm5vZGUoKSkpIHsKKyAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLmRlcHJlY2F0ZWRO
b2RlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNy
ZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIik7CiAgICAgICAgIGluc2VydE5vZGVBdFRhYlNwYW5Qb3Np
dGlvbih0ZXh0Tm9kZS5nZXQoKSwgcG9zKTsKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25J
bk5vZGUodGV4dE5vZGUuZ2V0KCkpOwpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgSW5zZXJ0VGV4
dENvbW1hbmQ6OmlucHV0KGNvbnN0IFN0cmkKICAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSBm
b3IgdGhlIG5vZGUgdGhhdCBjb250YWlucyBzdGFydFBvc2l0aW9uIHRvIGNvbnRhaW4gb25seSB1
bnJlbmRlcmVkIHdoaXRlc3BhY2UsCiAgICAgLy8gYW5kIHNvIGRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0IGNvdWxkIHJlbW92ZSBpdC4gIFNhdmUgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgbm9kZSBp
biBjYXNlIHRoYXQgaGFwcGVucy4KLSAgICBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVN0YXJ0Tm9k
ZShwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShzdGFydFBvc2l0aW9uLm5vZGUoKSkpOworICAg
IFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlU3RhcnROb2RlKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpOwogICAgIGRlbGV0ZUluc2lnbmlm
aWNhbnRUZXh0KHN0YXJ0UG9zaXRpb24udXBzdHJlYW0oKSwgc3RhcnRQb3NpdGlvbi5kb3duc3Ry
ZWFtKCkpOwotICAgIGlmICghc3RhcnRQb3NpdGlvbi5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAg
ICBpZiAoIXN0YXJ0UG9zaXRpb24uYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAg
IHN0YXJ0UG9zaXRpb24gPSBwb3NpdGlvbkJlZm9yZVN0YXJ0Tm9kZTsKICAgICBpZiAoIXN0YXJ0
UG9zaXRpb24uaXNDYW5kaWRhdGUoKSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24uZG93bnN0cmVhbSgpOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgSW5zZXJ0VGV4dENv
bW1hbmQ6OmlucHV0KGNvbnN0IFN0cmkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXBhcmVG
b3JUZXh0SW5zZXJ0aW9uKHN0YXJ0UG9zaXRpb24pOwogICAgICAgICBpZiAocGxhY2Vob2xkZXIu
aXNOb3ROdWxsKCkpCiAgICAgICAgICAgICByZW1vdmVQbGFjZWhvbGRlckF0KHBsYWNlaG9sZGVy
KTsKLSAgICAgICAgVGV4dCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHN0YXJ0UG9z
aXRpb24ubm9kZSgpKTsKKyAgICAgICAgVGV4dCAqdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0
ICo+KHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGludCBvZmZzZXQg
PSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAgICAgaW5z
ZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBvZmZzZXQsIHRleHQpOwpAQCAtMjA5LDcgKzIwOSw3
IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoY28KIHsKICAgICBQb3Np
dGlvbiBpbnNlcnRQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5kZWVwRXF1
aXZhbGVudCgpOwogICAgICAgICAKLSAgICBOb2RlICpub2RlID0gaW5zZXJ0UG9zLm5vZGUoKTsK
KyAgICBOb2RlICpub2RlID0gaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgdW5zaWdu
ZWQgaW50IG9mZnNldCA9IGluc2VydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCiAg
ICAgLy8ga2VlcCB0YWJzIGNvYWxlc2NlZCBpbiB0YWIgc3BhbgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkocmV2aXNp
b24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEyICs1MiwxMiBAQCBzdGF0aWMgYm9vbCBn
ZXRTdGFydEVuZExpc3RDaGlsZHJlbihjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIHN0YXJ0IG11c3QgYmUgaW4gYSBsaXN0IGNoaWxkCi0gICAgTm9kZSogc3RhcnRMaXN0Q2hp
bGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKKyAgICBO
b2RlKiBzdGFydExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb24uc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIXN0YXJ0TGlzdENoaWxkKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIC8vIGVuZCBtdXN0IGJlIGluIGEgbGlzdCBjaGls
ZAotICAgIE5vZGUqIGVuZExpc3RDaGlsZCA9IHNlbGVjdGlvbi5pc1JhbmdlKCkgPyBlbmNsb3Np
bmdMaXN0Q2hpbGQoc2VsZWN0aW9uLmVuZCgpLm5vZGUoKSkgOiBzdGFydExpc3RDaGlsZDsKKyAg
ICBOb2RlKiBlbmRMaXN0Q2hpbGQgPSBzZWxlY3Rpb24uaXNSYW5nZSgpID8gZW5jbG9zaW5nTGlz
dENoaWxkKHNlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKSA6IHN0YXJ0TGlzdENoaWxk
OwogICAgIGlmICghZW5kTGlzdENoaWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6TW92ZVNlbGVjdGlvbkNvbW1hbmQo
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uLCBib29sIHNtYXJ0SW5zZXJ0LCBib29sIHNtYXJ0RGVsZXRlKSAKLSAgICA6IENvbXBv
c2l0ZUVkaXRDb21tYW5kKHBvc2l0aW9uLm5vZGUoKS0+ZG9jdW1lbnQoKSksIG1fZnJhZ21lbnQo
ZnJhZ21lbnQpLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKSwgbV9zbWFydEluc2VydChzbWFydEluc2Vy
dCksIG1fc21hcnREZWxldGUoc21hcnREZWxldGUpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChwb3NpdGlvbi5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkpLCBtX2ZyYWdtZW50KGZyYWdtZW50
KSwgbV9wb3NpdGlvbihwb3NpdGlvbiksIG1fc21hcnRJbnNlcnQoc21hcnRJbnNlcnQpLCBtX3Nt
YXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKQogewogICAgIEFTU0VSVChtX2ZyYWdtZW50KTsKIH0KQEAg
LTYyLDcgKzYyLDcgQEAgdm9pZCBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
Ly8gc2V0IHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgZW5kaW5nIHBvaW50IGFmdGVyIHRoZSBkZWxl
dGlvbi4KICAgICAvLyBGaXhlczogPHJkYXI6Ly9wcm9ibGVtLzM5MTA0MjU+IFJFR1JFU1NJT04g
KE1haWwpOiBDcmFzaCBpbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDsgCiAgICAgLy8gICAgICAg
IHNlbGVjdGlvbiBpcyBlbXB0eSwgbGVhZGluZyB0byBudWxsIGRlcmVmCi0gICAgaWYgKCFwb3Mu
bm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgaWYgKCFwb3MuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkpCiAgICAgICAgIHBvcyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CiAKICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigp
LmFmZmluaXR5KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTAsMTUgKzExMCwxNSBAQCBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3Bh
Y2VTCiBzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0
aW9uIHBvcykKIHsKICAgICAvLyBJZiB3ZSdyZSBhbHJlYWR5IG9uIGEgYnJlYWssIGl0J3MgcHJv
YmFibHkgYSBwbGFjZWhvbGRlciBhbmQgd2Ugc2hvdWxkbid0IGNoYW5nZSBvdXIgcG9zaXRpb24u
Ci0gICAgaWYgKHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgIGlmIChwb3MuZGVw
cmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJldHVybiBwb3M7CiAK
ICAgICAvLyBXZSBhbHNvIHN0b3Agd2hlbiBjaGFuZ2luZyBibG9jayBmbG93IGVsZW1lbnRzIGJl
Y2F1c2UgZXZlbiB0aG91Z2ggdGhlIHZpc3VhbCBwb3NpdGlvbiBpcyB0aGUKICAgICAvLyBzYW1l
LiAgRS5nLiwKICAgICAvLyAgIDxkaXY+Zm9vXjwvZGl2Pl4KICAgICAvLyBUaGUgdHdvIHBvc2l0
aW9ucyBhYm92ZSBhcmUgdGhlIHNhbWUgdmlzdWFsIHBvc2l0aW9uLCBidXQgd2Ugd2FudCB0byBz
dGF5IGluIHRoZSBzYW1lIGJsb2NrLgotICAgIE5vZGUqIHN0b3BOb2RlID0gcG9zLm5vZGUoKS0+
ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwotICAgIHdoaWxlIChzdG9wTm9kZSAhPSBwb3Mu
bm9kZSgpICYmIFZpc2libGVQb3NpdGlvbihwb3MpID09IFZpc2libGVQb3NpdGlvbihwb3MubmV4
dCgpKSkKKyAgICBOb2RlKiBzdG9wTm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgd2hpbGUgKHN0b3BOb2RlICE9IHBvcy5kZXByZWNh
dGVkTm9kZSgpICYmIFZpc2libGVQb3NpdGlvbihwb3MpID09IFZpc2libGVQb3NpdGlvbihwb3Mu
bmV4dCgpKSkKICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsKICAgICByZXR1cm4gcG9zOwogfQpA
QCAtMTUyLDcgKzE1Miw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21l
bnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5vZGUqIHN0eWxlTm9kZSA9IHNlbGVj
dGlvbi5iYXNlKCkubm9kZSgpOworICAgIE5vZGUqIHN0eWxlTm9kZSA9IHNlbGVjdGlvbi5iYXNl
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBSZWZQdHI8U3R5bGVkRWxlbWVudD4gaG9sZGVyID0g
aW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVuZGVyaW5nKHN0eWxlTm9kZSk7CiAgICAgCiAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50
c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zNTcsNyArMzU3
LDcgQEAgc3RhdGljIGJvb2wgaGFzTWF0Y2hpbmdRdW90ZUxldmVsKFZpc2libAogewogICAgIFBv
c2l0aW9uIGV4aXN0aW5nID0gZW5kT2ZFeGlzdGluZ0NvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsK
ICAgICBQb3NpdGlvbiBpbnNlcnRlZCA9IGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFs
ZW50KCk7Ci0gICAgYm9vbCBpc0luc2lkZU1haWxCbG9ja3F1b3RlID0gbmVhcmVzdE1haWxCbG9j
a3F1b3RlKGluc2VydGVkLm5vZGUoKSk7CisgICAgYm9vbCBpc0luc2lkZU1haWxCbG9ja3F1b3Rl
ID0gbmVhcmVzdE1haWxCbG9ja3F1b3RlKGluc2VydGVkLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IHJldHVybiBpc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIChudW1FbmNsb3NpbmdNYWlsQmxvY2tx
dW90ZXMoZXhpc3RpbmcpID09IG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhpbnNlcnRlZCkp
OwogfQogCkBAIC0zODIsNyArMzgyLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
c2hvdWxkTWVyZwogICAgIHJldHVybiAhc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBo
ICYmIAogICAgICAgICAgICAhZnJhZ21lbnRIYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0ICYm
CiAgICAgICAgICAgIGlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSAm
JiAKLSAgICAgICAgICAgIXN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5u
b2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmCisgICAgICAgICAgICFzdGFydE9mSW5zZXJ0ZWRD
b250ZW50LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykgJiYKICAgICAgICAgICAgc2hvdWxkTWVyZ2Uoc3RhcnRPZkluc2VydGVkQ29udGVudCwgcHJl
dik7CiB9CiAKQEAgLTM5NSw3ICszOTUsNyBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpzaG91bGRNZXJnCiAKICAgICByZXR1cm4gIXNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
ICYmCiAgICAgICAgICAgIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYm
IAotICAgICAgICAgICAhZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPmhhc1RhZ05hbWUoYnJUYWcpICYmCisgICAgICAgICAgICFlbmRPZkluc2VydGVkQ29udGVu
dC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYm
CiAgICAgICAgICAgIHNob3VsZE1lcmdlKGVuZE9mSW5zZXJ0ZWRDb250ZW50LCBuZXh0KTsKIH0K
IApAQCAtNDUzLDggKzQ1Myw4IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3Vs
ZE1lcmcKICAgICBpZiAoc291cmNlLmlzTnVsbCgpIHx8IGRlc3RpbmF0aW9uLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIE5vZGUqIHNvdXJjZU5vZGUgPSBz
b3VyY2UuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7Ci0gICAgTm9kZSogZGVzdGluYXRpb25Ob2Rl
ID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgTm9kZSogc291cmNl
Tm9kZSA9IHNvdXJjZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9k
ZSogZGVzdGluYXRpb25Ob2RlID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpOwogICAgIE5vZGUqIHNvdXJjZUJsb2NrID0gZW5jbG9zaW5nQmxvY2soc291cmNl
Tm9kZSk7CiAgICAgTm9kZSogZGVzdGluYXRpb25CbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGRlc3Rp
bmF0aW9uTm9kZSk7CiAgICAgcmV0dXJuICFlbmNsb3NpbmdOb2RlT2ZUeXBlKHNvdXJjZS5kZWVw
RXF1aXZhbGVudCgpLCAmaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUpICYmCkBAIC03NDAsNyAr
NzQwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZgogICAgIC8v
IFRvIGF2b2lkIHRoaXMsIHdlIGFkZCBhIHBsYWNlaG9sZGVyIG5vZGUgYmVmb3JlIHRoZSBzdGFy
dCBvZiB0aGUgcGFyYWdyYXBoLgogICAgIGlmIChlbmRPZlBhcmFncmFwaChzdGFydE9mUGFyYWdy
YXBoVG9Nb3ZlKSA9PSBkZXN0aW5hdGlvbikgewogICAgICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vo
b2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGluc2VydE5v
ZGVCZWZvcmUocGxhY2Vob2xkZXIsIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCkpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVyLCBzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgICAgIGRlc3RpbmF0aW9uID0gVmlzaWJsZVBvc2l0aW9uKHBvc2l0aW9uQmVmb3JlTm9kZShw
bGFjZWhvbGRlci5nZXQoKSkpOwogICAgIH0KIApAQCAtNzUxLDkgKzc1MSw5IEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlRW5kSWYKICAgICAvLyBvbmx5IGV2ZXIgdXNlZCB0
byBjcmVhdGUgcG9zaXRpb25zIHdoZXJlIGluc2VydGVkIGNvbnRlbnQgc3RhcnRzL2VuZHMuICBB
bHNvLCB3ZSBzb21ldGltZXMgaW5zZXJ0IGNvbnRlbnQKICAgICAvLyBkaXJlY3RseSBpbnRvIHRl
eHQgbm9kZXMgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQsIGluIHdoaWNoIGNhc2UgdHJhY2tpbmcg
aW5zZXJ0ZWQgbm9kZXMgaXMgaW5hZGVxdWF0ZS4KICAgICBpZiAobWVyZ2VGb3J3YXJkKSB7Ci0g
ICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGRlc3RpbmF0aW9uLnByZXZpb3VzKCkuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGRlc3RpbmF0
aW9uLnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAg
ICBpZiAoIW1fZmlyc3ROb2RlSW5zZXJ0ZWQtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1f
Zmlyc3ROb2RlSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgICAgIC8vIElmIHdlIG1lcmdlZCB0ZXh0IG5vZGVzLCBtX2xhc3RMZWFm
SW5zZXJ0ZWQgY291bGQgYmUgbnVsbC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwKICAgICAgICAgLy8g
d2UgdXNlIG1fZmlyc3ROb2RlSW5zZXJ0ZWQuCiAgICAgICAgIGlmICghbV9sYXN0TGVhZkluc2Vy
dGVkKQpAQCAtNzgwLDggKzc4MCw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0
aW9uKCk7CiAgICAgQVNTRVJUKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKTsKLSAgICBBU1NF
UlQoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc05vbk9y
cGhhbmVkQ2FyZXRPclJhbmdlKCkgfHwgIXNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSkKKyAgICBB
U1NFUlQoc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgaWYgKCFzZWxl
Y3Rpb24uaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpIHx8ICFzZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgYm9vbCBzZWxlY3Rp
b25Jc1BsYWluVGV4dCA9ICFzZWxlY3Rpb24uaXNDb250ZW50UmljaGx5RWRpdGFibGUoKTsKQEAg
LTc5Myw4ICs3OTMsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFdlIGNhbiBza2lwIG1hdGNoaW5nIHRoZSBz
dHlsZSBpZiB0aGUgc2VsZWN0aW9uIGlzIHBsYWluIHRleHQuCi0gICAgaWYgKChzZWxlY3Rpb24u
c3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9XUklURV9QTEFJTlRFWFRf
T05MWSkgJiYKLSAgICAgICAgKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCktPnJlbmRlcmVyKCkgJiYg
c2VsZWN0aW9uLmVuZCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgp
ID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFkpKQorICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzZWxlY3Rpb24uc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9X
UklURV9QTEFJTlRFWFRfT05MWSkgJiYKKyAgICAgICAgKHNlbGVjdGlvbi5lbmQoKS5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIHNlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9XUklURV9QTEFJTlRF
WFRfT05MWSkpCiAgICAgICAgIG1fbWF0Y2hTdHlsZSA9IGZhbHNlOwogICAgIAogICAgIGlmICht
X21hdGNoU3R5bGUpCkBAIC04MDYsMTAgKzgwNiwxMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBib29sIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
ID0gaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlRW5kKTsKICAgICBib29sIHNlbGVjdGlvblN0YXJ0
V2FzU3RhcnRPZlBhcmFncmFwaCA9IGlzU3RhcnRPZlBhcmFncmFwaCh2aXNpYmxlU3RhcnQpOwog
ICAgIAotICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayh2aXNpYmxlU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3Np
bmdCbG9jayh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICAKICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3MgPSBzZWxlY3Rpb24uc3RhcnQoKTsKLSAg
ICBib29sIHN0YXJ0SXNJbnNpZGVNYWlsQmxvY2txdW90ZSA9IG5lYXJlc3RNYWlsQmxvY2txdW90
ZShpbnNlcnRpb25Qb3Mubm9kZSgpKTsKKyAgICBib29sIHN0YXJ0SXNJbnNpZGVNYWlsQmxvY2tx
dW90ZSA9IG5lYXJlc3RNYWlsQmxvY2txdW90ZShpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgCiAgICAgaWYgKChzZWxlY3Rpb25TdGFydFdhc1N0YXJ0T2ZQYXJhZ3JhcGggJiYg
c2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggJiYgIXN0YXJ0SXNJbnNpZGVNYWlsQmxvY2tx
dW90ZSkgfHwKICAgICAgICAgc3RhcnRCbG9jayA9PSBjdXJyZW50Um9vdCB8fCBpc0xpc3RJdGVt
KHN0YXJ0QmxvY2spIHx8IHNlbGVjdGlvbklzUGxhaW5UZXh0KQpAQCAtODYyLDcgKzg2Miw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChzdGFydElz
SW5zaWRlTWFpbEJsb2NrcXVvdGUgJiYgbV9wcmV2ZW50TmVzdGluZyAmJiAhKGVuY2xvc2luZ05v
ZGVPZlR5cGUoaW5zZXJ0aW9uUG9zLCAmaXNUYWJsZVN0cnVjdHVyZU5vZGUpKSkgeyAKICAgICAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6Y3JlYXRl
KGRvY3VtZW50KCkpKTsgCiAgICAgICAgIC8vIFRoaXMgd2lsbCBsZWF2ZSBhIGJyIGJldHdlZW4g
dGhlIHNwbGl0LiAKLSAgICAgICAgTm9kZSogYnIgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgp
Lm5vZGUoKTsgCisgICAgICAgIE5vZGUqIGJyID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpOyAKICAgICAgICAgQVNTRVJUKGJyLT5oYXNUYWdOYW1lKGJyVGFnKSk7
IAogICAgICAgICAvLyBJbnNlcnQgY29udGVudCBiZXR3ZWVuIHRoZSB0d28gYmxvY2txdW90ZXMs
IGJ1dCByZW1vdmUgdGhlIGJyIChzaW5jZSBpdCB3YXMganVzdCBhIHBsYWNlaG9sZGVyKS4gCiAg
ICAgICAgIGluc2VydGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGJyKTsKQEAg
LTg3MywxOCArODczLDE4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHko
KQogICAgIHByZXBhcmVXaGl0ZXNwYWNlQXRQb3NpdGlvbkZvclNwbGl0KGluc2VydGlvblBvcyk7
CiAKICAgICAvLyBJZiB0aGUgZG93bnN0cmVhbSBub2RlIGhhcyBiZWVuIHJlbW92ZWQgdGhlcmUn
cyBubyBwb2ludCBpbiBjb250aW51aW5nLgotICAgIGlmICghaW5zZXJ0aW9uUG9zLmRvd25zdHJl
YW0oKS5ub2RlKCkpCisgICAgaWYgKCFpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLmRlcHJlY2F0
ZWROb2RlKCkpCiAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gTk9URTogVGhpcyB3b3VsZCBi
ZSBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YgZG93bnN0cmVhbSgpIGlmIGRvd25zdHJlYW0oKSB3ZXJl
IGNoYW5nZWQgdG8gbWVhbiB0aGUgbGFzdCBwb3NpdGlvbiBhZnRlciAKICAgICAvLyBwIHRoYXQg
bWFwcyB0byB0aGUgc2FtZSB2aXNpYmxlIHBvc2l0aW9uIGFzIHAgKHNpbmNlIGluIHRoZSBjYXNl
IHdoZXJlIGEgYnIgaXMgYXQgdGhlIGVuZCBvZiBhIGJsb2NrIGFuZCBjb2xsYXBzZWQgCiAgICAg
Ly8gYXdheSwgdGhlcmUgYXJlIHBvc2l0aW9ucyBhZnRlciB0aGUgYnIgd2hpY2ggbWFwIHRvIHRo
ZSBzYW1lIHZpc2libGUgcG9zaXRpb24gYXMgW2JyLCAwXSkuICAKLSAgICBOb2RlKiBlbmRCUiA9
IGluc2VydGlvblBvcy5kb3duc3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSA/IGlu
c2VydGlvblBvcy5kb3duc3RyZWFtKCkubm9kZSgpIDogMDsKKyAgICBOb2RlKiBlbmRCUiA9IGlu
c2VydGlvblBvcy5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkgOiAwOwogICAg
IFZpc2libGVQb3NpdGlvbiBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSOwogICAgIGlmIChlbmRC
UikKICAgICAgICAgb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRCUiA9IFZpc2libGVQb3NpdGlvbihl
bmRCUiwgMCwgRE9XTlNUUkVBTSkucHJldmlvdXMoKTsKICAgICAKLSAgICBzdGFydEJsb2NrID0g
ZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLm5vZGUoKSk7CisgICAgc3RhcnRCbG9jayA9IGVu
Y2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAKICAgICAv
LyBBZGp1c3QgaW5zZXJ0aW9uUG9zIHRvIHByZXZlbnQgbmVzdGluZy4KICAgICAvLyBJZiB0aGUg
c3RhcnQgd2FzIGluIGEgTWFpbCBibG9ja3F1b3RlLCB3ZSB3aWxsIGhhdmUgYWxyZWFkeSBoYW5k
bGVkIGFkanVzdGluZyBpbnNlcnRpb25Qb3MgYWJvdmUuCkBAIC05MzksNyArOTM5LDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgCiAgICAgZnJhZ21lbnQu
cmVtb3ZlTm9kZShyZWZOb2RlKTsKIAotICAgIE5vZGUqIGJsb2NrU3RhcnQgPSBlbmNsb3NpbmdC
bG9jayhpbnNlcnRpb25Qb3Mubm9kZSgpKTsKKyAgICBOb2RlKiBibG9ja1N0YXJ0ID0gZW5jbG9z
aW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICgoaXNMaXN0
RWxlbWVudChyZWZOb2RlLmdldCgpKSB8fCAoaXNTdHlsZVNwYW4ocmVmTm9kZS5nZXQoKSkgJiYg
aXNMaXN0RWxlbWVudChyZWZOb2RlLT5maXJzdENoaWxkKCkpKSkKICAgICAgICAgJiYgYmxvY2tT
dGFydC0+cmVuZGVyZXIoKS0+aXNMaXN0SXRlbSgpKQogICAgICAgICByZWZOb2RlID0gaW5zZXJ0
QXNMaXN0SXRlbXMocmVmTm9kZSwgYmxvY2tTdGFydCwgaW5zZXJ0aW9uUG9zKTsKQEAgLTk4Myw3
ICs5ODMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAK
ICAgICAvLyBXZSBpbnNlcnRlZCBiZWZvcmUgdGhlIHN0YXJ0QmxvY2sgdG8gcHJldmVudCBuZXN0
aW5nLCBhbmQgdGhlIGNvbnRlbnQgYmVmb3JlIHRoZSBzdGFydEJsb2NrIHdhc24ndCBpbiBpdHMg
b3duIGJsb2NrIGFuZAogICAgIC8vIGRpZG4ndCBoYXZlIGEgYnIgYWZ0ZXIgaXQsIHNvIHRoZSBp
bnNlcnRlZCBjb250ZW50IGVuZGVkIHVwIGluIHRoZSBzYW1lIHBhcmFncmFwaC4KLSAgICBpZiAo
c3RhcnRCbG9jayAmJiBpbnNlcnRpb25Qb3Mubm9kZSgpID09IHN0YXJ0QmxvY2stPnBhcmVudE5v
ZGUoKSAmJiAodW5zaWduZWQpaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
PCBzdGFydEJsb2NrLT5ub2RlSW5kZXgoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJ
bnNlcnRlZENvbnRlbnQpKQorICAgIGlmIChzdGFydEJsb2NrICYmIGluc2VydGlvblBvcy5kZXBy
ZWNhdGVkTm9kZSgpID09IHN0YXJ0QmxvY2stPnBhcmVudE5vZGUoKSAmJiAodW5zaWduZWQpaW5z
ZXJ0aW9uUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPCBzdGFydEJsb2NrLT5ub2RlSW5k
ZXgoKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpKQogICAg
ICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBz
dGFydE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkpOwogICAgIAogICAgIFBvc2l0
aW9uIGxhc3RQb3NpdGlvblRvU2VsZWN0OwpAQCAtMTAwMyw3ICsxMDAzLDcgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGFu
ZGxlIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gbWVyZ2UgdGhlIGVuZAogICAgICAgICAvLyBi
dXQgb3VyIGRlc3RpbmF0aW9uIG5vZGUgaXMgaW5zaWRlIGFuIGlubGluZSB0aGF0IGlzIHRoZSBs
YXN0IGluIHRoZSBibG9jay4KICAgICAgICAgLy8gV2UgaW5zZXJ0IGEgcGxhY2Vob2xkZXIgYmVm
b3JlIHRoZSBuZXdseSBpbnNlcnRlZCBjb250ZW50IHRvIGF2b2lkIGJlaW5nIG1lcmdlZCBpbnRv
IHRoZSBpbmxpbmUuCi0gICAgICAgIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9u
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBOb2RlKiBkZXN0aW5hdGlvbk5vZGUg
PSBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IGlmIChtX3Nob3VsZE1lcmdlRW5kICYmIGRlc3RpbmF0aW9uTm9kZSAhPSBlbmNsb3NpbmdJbmxp
bmUoZGVzdGluYXRpb25Ob2RlKSAmJiBlbmNsb3NpbmdJbmxpbmUoZGVzdGluYXRpb25Ob2RlKS0+
bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtF
bGVtZW50KGRvY3VtZW50KCkpLCByZWZOb2RlLmdldCgpKTsKICAgICAgICAgCkBAIC0xMDE4LDE2
ICsxMDE4LDE2IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaChlbmRPZkluc2VydGVkQ29udGVudCkgPT0gc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSkgewogICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFr
RWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwgZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2
YWxlbnQoKSk7CiAgICAgICAgICAgICAvLyBNdXRhdGlvbiBldmVudHMgKGJ1ZyAyMjYzNCkgdHJp
Z2dlcmVkIGJ5IGluc2VydGluZyB0aGUgPGJyPiBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNvbnRl
bnQgd2UncmUgYWJvdXQgdG8gbW92ZQotICAgICAgICAgICAgaWYgKCFzdGFydE9mUGFyYWdyYXBo
VG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgICAgICAg
ICBpZiAoIXN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2Rl
KCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBGSVhNRTogTWFpbnRhaW4gcG9zaXRpb25zIGZvciB0aGUgc3RhcnQgYW5kIGVu
ZCBvZiBpbnNlcnRlZCBjb250ZW50IGluc3RlYWQgb2Yga2VlcGluZyBub2Rlcy4gIFRoZSBub2Rl
cyBhcmUKICAgICAgICAgLy8gb25seSBldmVyIHVzZWQgdG8gY3JlYXRlIHBvc2l0aW9ucyB3aGVy
ZSBpbnNlcnRlZCBjb250ZW50IHN0YXJ0cy9lbmRzLgogICAgICAgICBtb3ZlUGFyYWdyYXBoKHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUpLCBkZXN0aW5hdGlvbik7Ci0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBlbmRpbmdT
ZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5u
b2RlKCk7CisgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICBpZiAoIW1fbGFzdExlYWZJbnNlcnRlZC0+aW5Eb2N1bWVudCgpKQotICAg
ICAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVu
ZCgpLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKS5ub2RlKCk7CisgICAgICAgICAgICBtX2xh
c3RMZWFmSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkuZGVlcEVxdWl2
YWxlbnQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgfQogICAgICAgICAgICAg
CiAgICAgZW5kT2ZJbnNlcnRlZENvbnRlbnQgPSBwb3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRl
bnQoKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICBpZiAoc2VsZWN0aW9uRW5kV2FzRW5kT2ZQYXJhZ3JhcGggfHwg
IWlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpIHx8IG5leHQuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgIGlmICghaXNTdGFydE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250
ZW50KSkgewogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZkluc2VydGVk
Q29udGVudCk7Ci0gICAgICAgICAgICAgICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xvc2lu
Z0Jsb2NrKGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBlbmNsb3NpbmdOb2RlID0gZW5jbG9zaW5nQmxvY2soZW5kT2ZJ
bnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNMaXN0SXRlbShlbmNsb3NpbmdOb2RlKSkgewogICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdEl0ZW0gPSBjcmVhdGVMaXN0SXRlbUVsZW1lbnQo
ZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdMaXN0
SXRlbSwgZW5jbG9zaW5nTm9kZSk7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogICAgICAgICAgICAgICAgIC8vIFNlbGVjdCB1
cCB0byB0aGUgcGFyYWdyYXBoIHNlcGFyYXRvciB0aGF0IHdhcyBhZGRlZC4KICAgICAgICAgICAg
ICAgICBsYXN0UG9zaXRpb25Ub1NlbGVjdCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTm9kZXNJbnNlcnRl
ZChsYXN0UG9zaXRpb25Ub1NlbGVjdC5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVwZGF0ZU5v
ZGVzSW5zZXJ0ZWQobGFzdFBvc2l0aW9uVG9TZWxlY3QuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBTZWxlY3QgdXAgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBwYXJhZ3JhcGguCkBAIC0xMDc5LDcgKzEwNzksNyBA
QCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKG5l
ZWRzVHJhaWxpbmdTcGFjZSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IG1fbGFzdExlYWZJbnNlcnRlZC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGJvb2wgY29sbGFw
c2VXaGl0ZVNwYWNlID0gIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5jb2xsYXBzZVdo
aXRlU3BhY2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBwb3NpdGlvbkF0RW5kT2ZJ
bnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkubm9kZSgpOworICAg
ICAgICAgICAgTm9kZSogZW5kTm9kZSA9IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgp
LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAg
ICAgaWYgKGVuZE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIFRleHQqIHRl
eHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kTm9kZSk7CiAgICAgICAgICAgICAgICAgaW5zZXJ0
VGV4dEludG9Ob2RlKHRleHQsIHRleHQtPmxlbmd0aCgpLCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBu
b25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChuZWVkc0xl
YWRpbmdTcGFjZSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fbGFz
dExlYWZJbnNlcnRlZC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0
ZVNwYWNlID0gIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKTsKLSAgICAgICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHBvc2l0aW9uQXRTdGFydE9mSW5z
ZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkubm9kZSgpOworICAg
ICAgICAgICAgTm9kZSogc3RhcnROb2RlID0gcG9zaXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRl
bnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAg
ICAgICAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAg
VGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFydE5vZGUpOwogICAgICAgICAgICAg
ICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCAwLCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25C
cmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwpAQCAtMTIxMiw5ICsxMjEyLDkgQEAgTm9kZSog
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTAogICAgIC8vIGxpc3QgaXRlbXMgYW5k
IGluc2VydCB0aGVzZSBub2RlcyBiZXR3ZWVuIHRoZW0uCiAgICAgaWYgKGlzTWlkZGxlKSB7CiAg
ICAgICAgIGludCB0ZXh0Tm9kZU9mZnNldCA9IGluc2VydFBvcy5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKTsKLSAgICAgICAgaWYgKGluc2VydFBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiB0ZXh0
Tm9kZU9mZnNldCA+IDApCi0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRl
eHQqPihpbnNlcnRQb3Mubm9kZSgpKSwgdGV4dE5vZGVPZmZzZXQpOwotICAgICAgICBzcGxpdFRy
ZWVUb05vZGUoaW5zZXJ0UG9zLm5vZGUoKSwgbGFzdE5vZGUsIHRydWUpOworICAgICAgICBpZiAo
aW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiB0ZXh0Tm9kZU9mZnNl
dCA+IDApCisgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihpbnNl
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKSksIHRleHROb2RlT2Zmc2V0KTsKKyAgICAgICAgc3BsaXRU
cmVlVG9Ob2RlKGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpLCBsYXN0Tm9kZSwgdHJ1ZSk7CiAg
ICAgfQogCiAgICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBsaXN0SXRlbSA9IGxpc3RFbGVtZW50LT5m
aXJzdENoaWxkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUw
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24oYwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgTm9kZSogYmFzZU5vZGUgPSBzLmJhc2UoKS5ub2RlKCk7Cisg
ICAgTm9kZSogYmFzZU5vZGUgPSBzLmJhc2UoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IDA7CiAgICAgaWYgKGJhc2VOb2RlKQogICAgICAgICBkb2N1bWVudCA9
IGJhc2VOb2RlLT5kb2N1bWVudCgpOwpAQCAtMjA0LDE3ICsyMDQsMTcgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpzZXRTZWxlY3Rpb24oYwogCiBzdGF0aWMgYm9vbCByZW1vdmluZ05vZGVS
ZW1vdmVzUG9zaXRpb24oTm9kZSogbm9kZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewot
ICAgIGlmICghcG9zaXRpb24ubm9kZSgpKQorICAgIGlmICghcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHBvc2l0aW9uLm5vZGUoKSA9
PSBub2RlKQorICAgIGlmIChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpID09IG5vZGUpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLm5v
ZGUoKSkgfHwgZWxlbWVudC0+Y29udGFpbnMocG9zaXRpb24ubm9kZSgpLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKSk7CisgICAgcmV0dXJuIGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKIH0KIAogdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpu
b2RlV2lsbEJlUmVtb3ZlZChOb2RlICpub2RlKQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6cmVzcG9uZFRvTm9kZU0KICAgICB9CiAKICAgICBpZiAoY2xlYXJS
ZW5kZXJUcmVlU2VsZWN0aW9uKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQg
PSBtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgUmVmUHRy
PERvY3VtZW50PiBkb2N1bWVudCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5k
b2N1bWVudCgpOwogICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwogICAg
ICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRvUmVuZGVyVmlldyhkb2N1bWVudC0+cmVuZGVy
ZXIoKSkpCiAgICAgICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOwpAQCAtMzc1LDcgKzM3
NSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6d2lsbEJlTW9kaWZpZWQKIAogVGV4dERp
cmVjdGlvbiBTZWxlY3Rpb25Db250cm9sbGVyOjpkaXJlY3Rpb25PZkVuY2xvc2luZ0Jsb2NrKCkK
IHsKLSAgICBOb2RlKiBlbmNsb3NpbmdCbG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhtX3NlbGVj
dGlvbi5leHRlbnQoKS5ub2RlKCkpOworICAgIE5vZGUqIGVuY2xvc2luZ0Jsb2NrTm9kZSA9IGVu
Y2xvc2luZ0Jsb2NrKG1fc2VsZWN0aW9uLmV4dGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IGlmICghZW5jbG9zaW5nQmxvY2tOb2RlKQogICAgICAgICByZXR1cm4gTFRSOwogICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBlbmNsb3NpbmdCbG9ja05vZGUtPnJlbmRlcmVyKCk7CkBAIC05
MjEsNyArOTIxLDcgQEAgaW50IFNlbGVjdGlvbkNvbnRyb2xsZXI6OnhQb3NGb3JWZXJ0aWNhbAog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBwb3Mubm9kZSgpLT5k
b2N1bWVudCgpLT5mcmFtZSgpOworICAgIEZyYW1lKiBmcmFtZSA9IHBvcy5hbmNob3JOb2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIHg7
CiAgICAgICAgIApAQCAtOTk4LDE5ICs5OTgsMTkgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVy
OjpzZXRDYXJldFJlY3ROZQogCiB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0
UmVjdCgpCiB7Ci0gICAgaWYgKGlzTm9uZSgpIHx8ICFtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUo
KS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCktPmluRG9jdW1lbnQo
KSkgeworICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rpb24uc3RhcnQoKS5hbmNob3JOb2Rl
KCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkuYW5jaG9yTm9kZSgpLT5pbkRv
Y3VtZW50KCkpIHsKICAgICAgICAgbV9jYXJldFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQo
KS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9y
Tm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAgICAgCiAgICAgbV9j
YXJldFJlY3QgPSBJbnRSZWN0KCk7CiAgICAgICAgIAogICAgIGlmIChpc0NhcmV0KCkpIHsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX3NlbGVjdGlvbi5zdGFydCgpLCBtX3NlbGVjdGlv
bi5hZmZpbml0eSgpKTsKICAgICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSkgewotICAgICAgICAg
ICAgQVNTRVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZpcnN0IGNvbXB1dGUgYSBy
ZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlciBhdCB0aGUgc2VsZWN0aW9uIHN0YXJ0CiAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyOwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAgdm9pZCBT
ZWxlY3Rpb25Db250cm9sbGVyOjp1cGRhdGVDYXJldFJlYwogCiBSZW5kZXJPYmplY3QqIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVuZGVyZXIoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUg
PSBtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTExNTEsNyArMTE1MSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
aW52YWxpZGF0ZUNhcmUKICAgICBpZiAoIWlzQ2FyZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRG9jdW1lbnQqIGQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKTsK
KyAgICBEb2N1bWVudCogZCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5kb2N1
bWVudCgpOwogCiAgICAgLy8gcmVjb21wdXRlQ2FyZXRSZWN0IHdpbGwgYWx3YXlzIHJldHVybiBm
YWxzZSBmb3IgdGhlIGRyYWcgY2FyZXQsCiAgICAgLy8gYmVjYXVzZSBpdHMgbV9mcmFtZSBpcyBh
bHdheXMgMC4KQEAgLTEyMjksOSArMTIyOSw5IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
ZGVidWdSZW5kZXJlcigKICAgICAgICAgaW50IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwog
ICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwotICAg
ICAgICAgICAgaWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSkKKyAg
ICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVk
Tm9kZSgpKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHItPm5vZGUoKSA9
PSBtX3NlbGVjdGlvbi5lbmQoKS5ub2RlKCkpCisgICAgICAgICAgICBlbHNlIGlmIChyLT5ub2Rl
KCkgPT0gbV9zZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAg
ICBvZmZzZXQgPSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaW50IHBvczsKQEAgLTE0MjksNyArMTQyOSw3
IEBAIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0ZWRSYW4KIAogYm9vbCBTZWxl
Y3Rpb25Db250cm9sbGVyOjppc0luUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSog
c3RhcnROb2RlID0gc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTE1NzUsOCArMTU3NSw4IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6
dXBkYXRlQXBwZWFyYW4KICAgICAvLyBXZSBjYW4gZ2V0IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUg
c2VsZWN0aW9uIGVuZHBvaW50cyBtYXAgdG8gdGhlIHNhbWUgVmlzaWJsZVBvc2l0aW9uIHdoZW4g
YSBzZWxlY3Rpb24gaXMgZGVsZXRlZAogICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgeWV0IG5vdGlm
eSB0aGUgU2VsZWN0aW9uQ29udHJvbGxlciBvZiB0ZXh0IHJlbW92YWwuCiAgICAgaWYgKHN0YXJ0
UG9zLmlzTm90TnVsbCgpICYmIGVuZFBvcy5pc05vdE51bGwoKSAmJiBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCkgIT0gc2VsZWN0aW9uLnZpc2libGVFbmQoKSkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5ub2RlKCktPnJlbmRlcmVyKCk7Ci0gICAgICAg
IFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSBlbmRQb3Mubm9kZSgpLT5yZW5kZXJlcigpOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIgPSBzdGFydFBvcy5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0g
ZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgIHZpZXctPnNldFNl
bGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBlbmRSZW5kZXJlciwgZW5kUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgIH0K
IH0KQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRE
cmFnQ2FyZXQKICNpZiBFTkFCTEUoVEVYVF9DQVJFVCkKICAgICBTZWxlY3Rpb25Db250cm9sbGVy
KiBkcmFnQ2FyZXRDb250cm9sbGVyID0gbV9mcmFtZS0+cGFnZSgpLT5kcmFnQ2FyZXRDb250cm9s
bGVyKCk7CiAgICAgQVNTRVJUKGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLmlzQ2Fy
ZXQoKSk7Ci0gICAgaWYgKGRyYWdDYXJldENvbnRyb2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCku
bm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpID09IG1fZnJhbWUpCisgICAgaWYgKGRyYWdDYXJl
dENvbnRyb2xsZXItPnNlbGVjdGlvbigpLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpID09IG1fZnJhbWUpCiAgICAgICAgIGRyYWdDYXJldENvbnRyb2xsZXItPnBhaW50
Q2FyZXQocCwgdHgsIHR5LCBjbGlwUmVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwKTsK
QEAgLTE3NTEsNyArMTc1MSw3IEBAIEhUTUxGb3JtRWxlbWVudCogU2VsZWN0aW9uQ29udHJvbGxl
cjo6Y3UKICAgICAvLyBTdGFydCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCBy
ZXNwb25kZXIpIG5vZGUsIG9yIHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCiAgICAgTm9kZSogc3Rh
cnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwogICAgIGlmICghc3RhcnQp
Ci0gICAgICAgIHN0YXJ0ID0gdGhpcy0+c3RhcnQoKS5ub2RlKCk7CisgICAgICAgIHN0YXJ0ID0g
dGhpcy0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgLy8gVHJ5IHdhbGtpbmcgdXAg
dGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50LgogICAgIE5vZGUqIG5vZGU7CkBA
IC0xNzgyLDEyICsxNzgyLDEyIEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cmV2ZWFsU2Vs
ZWN0aW8KICAgICB9CiAKICAgICBQb3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7Ci0gICAg
QVNTRVJUKHN0YXJ0Lm5vZGUoKSk7Ci0gICAgaWYgKHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2Rl
KCktPnJlbmRlcmVyKCkpIHsKKyAgICBBU1NFUlQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+
cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIG9ubHkgaGFuZGxlcyBz
Y3JvbGxpbmcgdGhlIHN0YXJ0Q29udGFpbmVyJ3MgbGF5ZXIsIGJ1dAogICAgICAgICAvLyB0aGUg
c2VsZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUgdGhhbiBqdXN0IHRoYXQuCiAgICAg
ICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDc5OTg5OT4uCi0gICAgICAgIGlmIChSZW5kZXJM
YXllciogbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
IHsKKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAgIGxheWVyLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGZhbHNlLCBhbGlnbm1lbnQsIGFsaWdubWVudCk7CiAg
ICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzg3
OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNl
dFNlbGVjdGlvbkNvbW1hbmQ6OlNldFNlbGVjdGlvbkNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBTZWxlY3Rpb25Db250cm9sbGVyOjpTZXRTZWxlY3Rpb25PcHRpb25z
IG9wdGlvbnMpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFuZChzZWxlY3Rpb24uYmFzZSgpLm5vZGUo
KS0+ZG9jdW1lbnQoKSkKKyAgICA6IFNpbXBsZUVkaXRDb21tYW5kKHNlbGVjdGlvbi5iYXNlKCku
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpKQogICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCiAgICAg
LCBtX3NlbGVjdGlvblRvU2V0KHNlbGVjdGlvbikKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQ2LDcgKzIzNDYs
NyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvCiAgICAgICAgICAg
ICAgICAgICAgIFBvc2l0aW9uIHJ1bkVuZCA9IFZpc2libGVQb3NpdGlvbihydW5TdGFydCkubmV4
dCgpLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChydW5FbmQuaXNO
b3ROdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLm5v
ZGUoKSwgcnVuRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+c2V0RW5kKHJ1bkVuZC5kZXByZWNhdGVkTm9kZSgp
LCBydW5FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0VGV4dChEb2N1bWVudCoKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rp
b24gPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwogICAgIGJvb2wgY2hhbmdlU2Vs
ZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbiAhPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb247CiAgICAg
U3RyaW5nIG5ld1RleHQgPSB0ZXh0OwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbkZv
ckluc2VydGlvbi5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBzZWxlY3Rp
b25Gb3JJbnNlcnRpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIAogICAgIGlmIChz
dGFydE5vZGUgJiYgc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkgJiYgY29tcG9zaXRp
b25UeXBlICE9IFRleHRDb21wb3NpdGlvblVwZGF0ZSkgewogICAgICAgICAvLyBTZW5kIEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50LiBUaGUgZXZlbnQgaGFuZGxlciB3aWxsIHVwZGF0ZSB0ZXh0IGlm
IG5lY2Vzc2FyeS4KQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoVGV4CiAKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgICAgIC8vIElmIHdlIGhhdmUg
YSBjYXJldCBzZWxlY3Rpb24gb24gYW4gZW1wdHkgY2VsbCwgd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgotICAgICAgICBpZiAoaXNFbXB0eVRhYmxlQ2VsbCh2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCkpKQorICAgICAgICBpZiAoaXNFbXB0eVRhYmxlQ2VsbCh2aXNpYmxlU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAvLyBJZiB0aGUgY2FyZXQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBo
IGFmdGVyIGEgdGFibGUsIG1vdmUgY29udGVudCBpbnRvIHRoZSBsYXN0IHRhYmxlIGNlbGwuCkBA
IC01MDIsNyArNTAyLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRl
eAogCiAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpOwog
Ci0gICAgICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFudWxhcml0eSAmJiBzZWxl
Y3Rpb25Ub0RlbGV0ZS5lbmQoKS5ub2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5u
b2RlKCkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
IDEpIHsKKyAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5ICYm
IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJlY2F0ZWROb2RlKCkgPT0gc2VsZWN0aW9uVG9E
ZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpICYmIHNlbGVjdGlvblRvRGVsZXRlLmVuZCgp
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAxKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgbXVsdGlwbGUgVW5pY29kZSBjb2RlIHBvaW50cyB0byBiZSBkZWxldGVkLCBhZGp1c3QgdGhl
IHJhbmdlIHRvIG1hdGNoIHBsYXRmb3JtIGNvbnZlbnRpb25zLgogICAgICAgICAgICAgc2VsZWN0
aW9uVG9EZWxldGUuc2V0V2l0aG91dFZhbGlkYXRpb24oc2VsZWN0aW9uVG9EZWxldGUuZW5kKCks
IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLnByZXZpb3VzKEJhY2t3YXJkRGVsZXRpb24pKTsKICAg
ICAgICAgfQpAQCAtNTcwLDggKzU3MCw4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERl
bGV0ZUtleVByZXMKICAgICAgICAgaWYgKHZpc2libGVFbmQgPT0gZW5kT2ZQYXJhZ3JhcGgodmlz
aWJsZUVuZCkpCiAgICAgICAgICAgICBkb3duc3RyZWFtRW5kID0gdmlzaWJsZUVuZC5uZXh0KHRy
dWUpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwogICAgICAgICAvLyBXaGVuIGRlbGV0
aW5nIHRhYmxlczogU2VsZWN0IHRoZSB0YWJsZSBmaXJzdCwgdGhlbiBwZXJmb3JtIHRoZSBkZWxl
dGlvbgotICAgICAgICBpZiAoZG93bnN0cmVhbUVuZC5ub2RlKCkgJiYgZG93bnN0cmVhbUVuZC5u
b2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbUVuZC5ub2RlKCktPnJlbmRlcmVyKCktPmlz
VGFibGUoKSAmJiAhZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSB7Ci0g
ICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxl
Y3Rpb24oKS5lbmQoKSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGRvd25zdHJlYW1F
bmQubm9kZSgpKSwgRE9XTlNUUkVBTSkpOworICAgICAgICBpZiAoZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkTm9kZSgpICYmIGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIo
KSAmJiBkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUo
KSAmJiAhZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSB7CisgICAgICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24o
KS5lbmQoKSwgbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGRvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSksIERPV05TVFJFQU0pKTsKICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9P
cGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtNTg4LDE1ICs1ODgsMTUgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVs
ZXRlS2V5UHJlcwogICAgICAgICAgICAgLy8gV2UgY2FuJ3QgbGV0IHRoZSBWaXNpYmxlU2VsZWN0
aW9uIGNsYXNzJ3MgdmFsaWRhdGlvbiBraWNrIGluIG9yIGl0J2xsIGFkanVzdCBmb3IgdXMgYmFz
ZWQgb24KICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkb2N1bWVudCBh
bmQgd2UnbGwgZ2V0IHRoZSB3cm9uZyByZXN1bHQuCiAgICAgICAgICAgICBQb3NpdGlvbiBleHRl
bnQgPSBzdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpOwotICAgICAgICAgICAgaWYgKGV4dGVudC5u
b2RlKCkgIT0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgpKQorICAgICAgICAgICAgaWYg
KGV4dGVudC5kZXByZWNhdGVkTm9kZSgpICE9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJl
Y2F0ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgZXh0ZW50ID0gc2VsZWN0aW9uVG9EZWxldGUu
ZXh0ZW50KCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpbnQgZXh0cmFD
aGFyYWN0ZXJzOwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgp
Lm5vZGUoKSA9PSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA9PSBzZWxl
Y3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAg
ICBleHRyYUNoYXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpIC0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZXh0
cmFDaGFyYWN0ZXJzID0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBleHRlbnQgPSBQb3NpdGlvbihleHRlbnQubm9kZSgp
LCBleHRlbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGV4dHJhQ2hhcmFjdGVycywgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgICAgICAgICAgZXh0ZW50
ID0gUG9zaXRpb24oZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCksIGV4dGVudC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpICsgZXh0cmFDaGFyYWN0ZXJzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlbGVjdGlvbkFmdGVyVW5k
by5zZXRXaXRob3V0VmFsaWRhdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGV4dGVu
dCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cHJldmlvdQogUG9zaXRpb24gVmlzaWJsZVBvc2l0
aW9uOjpsZWZ0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgpIGNvbnN0CiB7CiAgICAgUG9zaXRp
b24gcCA9IG1fZGVlcFBvc2l0aW9uOwotICAgIGlmICghcC5ub2RlKCkpCisgICAgaWYgKCFwLmRl
cHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRp
b24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7CkBAIC0yNDIsNyArMjQyLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdChibwogUG9zaXRpb24gVmlzaWJs
ZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25zdAogewogICAg
IFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgpKQorICAgIGlm
ICghcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAg
IFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAtMzg0LDcgKzM4
NCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWQKICAgICBOb2Rl
KiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQoKSk7CiAg
ICAgCiAgICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29tZXdoZXJl
IGluc2lkZSB0aGUgZWRpdGFibGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlvbgotICAg
IGlmIChoaWdoZXN0Um9vdCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3MuZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAgICAgCiAgICAgLy8gUmV0
dXJuIHBvcyBpdHNlbGYgaWYgdGhlIHR3byBhcmUgZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxl
IHJlZ2lvbiwgb3IgYm90aCBhcmUgbm9uLWVkaXRhYmxlCkBAIC00MTAsNyArNDEwLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9ub3JFZAogICAgIE5vZGUqIGhpZ2hlc3RS
b290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChkZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICAv
LyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgcG9zIGlzIG5vdCBzb21ld2hlcmUgaW5zaWRlIHRo
ZSBlZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlzIHBvc2l0aW9uCi0gICAgaWYgKGhpZ2hl
c3RSb290ICYmICFwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhp
Z2hlc3RSb290KSkKKyAgICBpZiAoaGlnaGVzdFJvb3QgJiYgIXBvcy5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxm
IGlmIHRoZSB0d28gYXJlIGZyb20gdGhlIHZlcnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJv
dGggYXJlIG5vbi1lZGl0YWJsZQpAQCAtNDUxLDcgKzQ1MSw3IEBAIFBvc2l0aW9uIFZpc2libGVQ
b3NpdGlvbjo6Y2Fub25pY2FsUG9zaXQKICAgICAvLyBUbyBmaXggdGhpcywgd2UgbmVlZCB0byBl
aXRoZXIgYSkgYWRkIGNvZGUgdG8gYWxsIHBhaW50Q2FyZXRzIHRvIHBhc3MgdGhlIHJlc3BvbnNp
YmlsaXR5IG9mZiB0bwogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSByZW5kZXJlciBmb3IgVmlzaWJs
ZVBvc2l0aW9uJ3MgbGlrZSB0aGVzZSwgb3IgYikgY2Fub25pY2FsaXplIHRvIHRoZSByaWdodG1v
c3QgY2FuZGlkYXRlCiAgICAgLy8gdW5sZXNzIHRoZSBhZmZpbml0eSBpcyB1cHN0cmVhbS4KLSAg
ICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7CiAKQEAgLTQ2OSw4ICs0NjksOCBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNh
bm9uaWNhbFBvc2l0CiAgICAgLy8gYmxvY2tzIG9yIGVudGVyIG5ldyBvbmVzKSwgd2Ugc2VhcmNo
IGZvcndhcmQgYW5kIGJhY2t3YXJkIHVudGlsIHdlIGZpbmQgb25lLgogICAgIFBvc2l0aW9uIG5l
eHQgPSBjYW5vbmljYWxpemVDYW5kaWRhdGUobmV4dENhbmRpZGF0ZShwb3NpdGlvbikpOwogICAg
IFBvc2l0aW9uIHByZXYgPSBjYW5vbmljYWxpemVDYW5kaWRhdGUocHJldmlvdXNDYW5kaWRhdGUo
cG9zaXRpb24pKTsKLSAgICBOb2RlKiBuZXh0Tm9kZSA9IG5leHQubm9kZSgpOwotICAgIE5vZGUq
IHByZXZOb2RlID0gcHJldi5ub2RlKCk7CisgICAgTm9kZSogbmV4dE5vZGUgPSBuZXh0LmRlcHJl
Y2F0ZWROb2RlKCk7CisgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2LmRlcHJlY2F0ZWROb2RlKCk7
CiAKICAgICAvLyBUaGUgbmV3IHBvc2l0aW9uIG11c3QgYmUgaW4gdGhlIHNhbWUgZWRpdGFibGUg
ZWxlbWVudC4gRW5mb3JjZSB0aGF0IGZpcnN0LgogICAgIC8vIFVubGVzcyB0aGUgZGVzY2VudCBp
cyBmcm9tIGEgbm9uLWVkaXRhYmxlIGh0bWwgZWxlbWVudCB0byBhbiBlZGl0YWJsZSBib2R5LgpA
QCAtNDgxLDcgKzQ4MSw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9z
aXQKICAgICAgICAgCiAgICAgLy8gSWYgdGhlIGh0bWwgZWxlbWVudCBpcyBlZGl0YWJsZSwgZGVz
Y2VuZGluZyBpbnRvIGl0cyBib2R5IHdpbGwgbG9vayBsaWtlIGEgZGVzY2VudCAKICAgICAvLyBm
cm9tIG5vbi1lZGl0YWJsZSB0byBlZGl0YWJsZSBjb250ZW50IHNpbmNlIHJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSBhbHdheXMgc3RvcHMgYXQgdGhlIGJvZHkuCi0gICAgaWYgKChlZGl0aW5nUm9vdCAm
JiBlZGl0aW5nUm9vdC0+aGFzVGFnTmFtZShodG1sVGFnKSkgfHwgcG9zaXRpb24ubm9kZSgpLT5p
c0RvY3VtZW50Tm9kZSgpKQorICAgIGlmICgoZWRpdGluZ1Jvb3QgJiYgZWRpdGluZ1Jvb3QtPmhh
c1RhZ05hbWUoaHRtbFRhZykpIHx8IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzRG9jdW1l
bnROb2RlKCkpCiAgICAgICAgIHJldHVybiBuZXh0LmlzTm90TnVsbCgpID8gbmV4dCA6IHByZXY7
CiAgICAgICAgIAogICAgIGJvb2wgcHJldklzSW5TYW1lRWRpdGFibGVFbGVtZW50ID0gcHJldk5v
ZGUgJiYgZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocHJldikgPT0gZWRpdGluZ1Jvb3Q7CkBAIC01
MTAsMTAgKzUxMCwxMCBAQCBVQ2hhcjMyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIo
CiAgICAgLy8gV2UgY2Fub25pY2FsaXplIHRvIHRoZSBmaXJzdCBvZiB0d28gZXF1aXZhbGVudCBj
YW5kaWRhdGVzLCBidXQgdGhlIHNlY29uZCBvZiB0aGUgdHdvIGNhbmRpZGF0ZXMKICAgICAvLyBp
cyB0aGUgb25lIHRoYXQgd2lsbCBiZSBpbnNpZGUgdGhlIHRleHQgbm9kZSBjb250YWluaW5nIHRo
ZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhpcyB2aXNpYmxlIHBvc2l0aW9uLgogICAgIFBvc2l0aW9uIHBv
cyA9IG1fZGVlcFBvc2l0aW9uLmRvd25zdHJlYW0oKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5v
ZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5ub2RlKCkpOworICAgIFRleHQqIHRl
eHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgaWYgKG9mZnNldCA+PSBsZW5n
dGgpCkBAIC01MjcsNyArNTI3LDcgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3Rl
ckFmdGVyKAogCiBJbnRSZWN0IFZpc2libGVQb3NpdGlvbjo6bG9jYWxDYXJldFJlY3QoUmVuZGVy
T2JqZWN0KiYgcmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0
aW9uLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gbV9kZWVwUG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgcmVuZGVyZXIgPSAwOwogICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgVmlzaWJsZVBvc2l0aW9u
OjpkZWJ1Z1Bvc2l0aW9uKGNvbnMKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiUG9zaXRpb24gWyVzXTogbnVsbFxuIiwgbXNnKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiAlcywgIiwgbXNnLCBtX2RlZXBQb3Np
dGlvbi5ub2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiUG9zaXRpb24gWyVzXTogJXMsICIsIG1zZywgbV9kZWVwUG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgbV9kZWVwUG9z
aXRpb24uc2hvd0FuY2hvclR5cGVBbmRPZmZzZXQoKTsKICAgICB9CiB9CkBAIC02MDEsNyArNjAx
LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libAogICAgIAogICAg
IFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwogICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLm5vZGUoKS0+ZG9j
dW1lbnQoKSwgcy5ub2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZS5ub2RlKCks
IGUuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUo
cy5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHMuZGVwcmVjYXRlZE5vZGUoKSwgcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlLmRlcHJlY2F0ZWROb2RlKCksIGUuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSk7CiB9CiAKIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihj
b25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQpAQCAtNjIyLDcgKzYyMiw3IEBAIGJv
b2wgc2V0U3RhcnQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3MKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29kZSA9IDA7Ci0gICAgci0+c2V0
U3RhcnQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CisgICAg
ci0+c2V0U3RhcnQocC5kZXByZWNhdGVkTm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTYzMiw3ICs2MzIsNyBA
QCBib29sIHNldEVuZChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvc2l0CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUgPSAwOwotICAgIHIt
PnNldEVuZChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKKyAg
ICByLT5zZXRFbmQocC5kZXByZWNhdGVkTm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOwogICAgIHJldHVybiBjb2RlID09IDA7CiB9CiAKQEAgLTY0MSw3ICs2NDEsNyBA
QCBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0CiAgICAgaWYgKHZpc2li
bGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4g
dmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCk7CisgICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKIH0KIAogYm9v
bCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlz
aWJsZVBvc2l0aW9uLCBjb25zdCBOb2RlICpub2RlKQpAQCAtNjQ5LDExICs2NDksMTEgQEAgYm9v
bCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IAogICAgIGlmICh2aXNpYmxlUG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZp
c2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9k
ZSkpCisgICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXMgPSB2aXNpYmxlUG9zaXRpb24ucHJl
dmlvdXMoKTsKLSAgICByZXR1cm4gcHJldmlvdXMuaXNOdWxsKCkgfHwgIXByZXZpb3VzLmRlZXBF
cXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKTsKKyAgICByZXR1cm4gcHJl
dmlvdXMuaXNOdWxsKCkgfHwgIXByZXZpb3VzLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7CiB9CiAKIGJvb2wgaXNMYXN0VmlzaWJsZVBvc2l0
aW9uSW5Ob2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBjb25zdCBO
b2RlICpub2RlKQpAQCAtNjYxLDExICs2NjEsMTEgQEAgYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRp
b25Jbk5vZGUoY29uc3QgVgogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCisgICAgaWYgKCF2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRP
Zihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIAogICAgIFZp
c2libGVQb3NpdGlvbiBuZXh0ID0gdmlzaWJsZVBvc2l0aW9uLm5leHQoKTsKLSAgICByZXR1cm4g
bmV4dC5pc051bGwoKSB8fCAhbmV4dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2Yobm9kZSk7CisgICAgcmV0dXJuIG5leHQuaXNOdWxsKCkgfHwgIW5leHQuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKTsKIH0KIAogfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJs
ZVBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
UG9zaXRpb24uaAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICBVQ2hhcjMyIGNoYXJhY3RlckFmdGVyKCkgY29uc3Q7CiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXJCZWZvcmUoKSBjb25zdCB7IHJldHVybiBwcmV2aW91cygpLmNoYXJhY3RlckFmdGVyKCk7IH0K
IAotICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rl
ZXBQb3NpdGlvbi5pc05vdE51bGwoKSA/IG1fZGVlcFBvc2l0aW9uLm5vZGUoKS0+cm9vdEVkaXRh
YmxlRWxlbWVudCgpIDogMDsgfQorICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2RlZXBQb3NpdGlvbi5pc05vdE51bGwoKSA/IG1fZGVlcFBvc2l0aW9u
LmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7IH0KICAgICAKICAg
ICB2b2lkIGdldElubGluZUJveEFuZE9mZnNldChJbmxpbmVCb3gqJiBpbmxpbmVCb3gsIGludCYg
Y2FyZXRPZmZzZXQpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsx
MjIsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzCiAgICAgICAg
IHJldHVybiAwOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5wYXJlbnRBbmNob3JlZEVx
dWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRvY3VtZW50
KCksIHN0YXJ0LCBlbmQpOworICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IFZp
c2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKQEAgLTEzNCw3ICsxMzQs
NyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vCiAgICAgLy8gaW4g
dGhlIGNvdXJzZSBvZiBydW5uaW5nIGVkaXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00u
CiAgICAgLy8gRmFpbGluZyB0byBjYWxsIHRoaXMgY2FuIHJlc3VsdCBpbiBlcXVpdmFsZW50WFhY
UG9zaXRpb24gY2FsbHMgcmV0dXJuaW5nCiAgICAgLy8gaW5jb3JyZWN0IHJlc3VsdHMuCi0gICAg
bV9zdGFydC5ub2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIG1fc3RhcnQu
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgIC8vIENoZWNr
IGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBjYW4gY2xlYXIgdGhlIHNlbGVjdGlvbi4K
ICAgICBpZiAoaXNOb25lKCkpCkBAIC0xNzgsNyArMTc4LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4g
VmlzaWJsZVNlbGVjdGlvbjo6dG9ObwogCiAgICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJlIHN1
cHBvc2VkIHRvIGFsd2F5cyBiZSB2YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NFUlQK
ICAgICAvLyBpZiBhIHZhbGlkIHJhbmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBpcyBm
aW5lIGZvciB0aGlzIGNhbGxzaXRlLgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMubm9kZSgp
LT5kb2N1bWVudCgpLCBzLCBlKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKSwgcywgZSk7CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhw
YW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCkBAIC0xOTIs
NyArMTkyLDcgQEAgYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bAogCiBz
dGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBw
b3MpCiB7Ci0gICAgTm9kZSogbiA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbiA9IHBvcy5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRG9jdW1l
bnQqIGQgPSBuLT5kb2N1bWVudCgpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UKIAogICAgIFBvc2l0aW9uIHN0YXJ0KHBvcy5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250
ZW50cyhib3VuZGFyeSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2Rl
KCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5n
ZS0+c2V0U3RhcnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgZWMpOwogCiAgICAgQVNTRVJUKCFlYyk7CiAgICAgaWYgKGVjKQpAQCAtMjk2
LDcgKzI5Niw3IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0U3RhcnRBbmRFbmRGcm8KICAg
ICAgICAgICAgIFZpc2libGVQb3NpdGlvbiB3b3JkRW5kKGVuZE9mV29yZChvcmlnaW5hbEVuZCwg
c2lkZSkpOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCh3b3JkRW5kKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgob3JpZ2luYWxFbmQpICYm
ICFpc0VtcHR5VGFibGVDZWxsKG1fc3RhcnQubm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKGlz
RW5kT2ZQYXJhZ3JhcGgob3JpZ2luYWxFbmQpICYmICFpc0VtcHR5VGFibGVDZWxsKG1fc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIHBhcmFn
cmFwaCBicmVhayAodGhlIHNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHBhcmFncmFwaCB0byB0aGUg
c3RhcnQgb2YgCiAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgb25lKSB0byBtYXRjaCBUZXh0
RWRpdC4KICAgICAgICAgICAgICAgICBlbmQgPSB3b3JkRW5kLm5leHQoKTsKQEAgLTQ1Nyw3ICs0
NTcsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlvblRvCiAgICAgTm9k
ZSogc3RhcnRSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChtX3N0YXJ0KTsKICAgICBOb2RlKiBl
bmRSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChtX2VuZCk7CiAgICAgCi0gICAgTm9kZSogYmFz
ZUVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fYmFzZS5ub2RlKCkp
OworICAgIE5vZGUqIGJhc2VFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3Rv
cihtX2Jhc2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgLy8gVGhlIGJhc2UsIHN0YXJ0
IGFuZCBlbmQgYXJlIGFsbCBpbiB0aGUgc2FtZSByZWdpb24uICBObyBhZGp1c3RtZW50IG5lY2Vz
c2FyeS4KICAgICBpZiAoYmFzZVJvb3QgPT0gc3RhcnRSb290ICYmIGJhc2VSb290ID09IGVuZFJv
b3QpCkBAIC00OTIsMTcgKzQ5MiwxNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNl
bGVjdGlvblRvCiAgICAgCiAgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gZW5kcyBpbiBlZGl0YWJs
ZSBjb250ZW50IG9yIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSBhIGRpZmZlcmVudCBlZGl0
YWJsZSBhbmNlc3RvciwgCiAgICAgICAgIC8vIG1vdmUgYmFja3dhcmQgdW50aWwgbm9uLWVkaXRh
YmxlIGNvbnRlbnQgaW5zaWRlIHRoZSBzYW1lIGxvd2VzdCBlZGl0YWJsZSBhbmNlc3RvciBpcyBy
ZWFjaGVkLgotICAgICAgICBOb2RlKiBlbmRFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFi
bGVBbmNlc3RvcihtX2VuZC5ub2RlKCkpOworICAgICAgICBOb2RlKiBlbmRFZGl0YWJsZUFuY2Vz
dG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX2VuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICAgICAgaWYgKGVuZFJvb3QgfHwgZW5kRWRpdGFibGVBbmNlc3RvciAhPSBiYXNlRWRpdGFibGVB
bmNlc3RvcikgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBQb3NpdGlvbiBwID0gcHJldmlv
dXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fZW5kKTsKICAgICAgICAgICAgIE5vZGUqIHNo
YWRvd0FuY2VzdG9yID0gZW5kUm9vdCA/IGVuZFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDog
MDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIGVuZFJvb3QgJiYgKHNoYWRvd0FuY2Vz
dG9yICE9IGVuZFJvb3QpKQogICAgICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwotICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3RO
dWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAubm9kZSgpKSA9PSBiYXNlRWRpdGFi
bGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApKSkgeworICAgICAgICAgICAgd2hp
bGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAuZGVwcmVjYXRl
ZE5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihw
KSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRp
b24ocCk7CiAgICAgICAgICAgICAgICAgc2hhZG93QW5jZXN0b3IgPSByb290ID8gcm9vdC0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkgOiAwOwotICAgICAgICAgICAgICAgIHAgPSBpc0F0b21pY05vZGUo
cC5ub2RlKCkpID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlv
dXNWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOworICAgICAgICAgICAgICAgIHAgPSBpc0F0
b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2Rl
KHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
cCk7CiAgICAgICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2VzdG9yICE9
IHJvb3QpKQogICAgICAgICAgICAgICAgICAgICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAgICAgICAgIH0KQEAgLTUyMiwxNiArNTIyLDE2
IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG8KIAogICAgICAgICAv
LyBUaGUgc2VsZWN0aW9uIHN0YXJ0cyBpbiBlZGl0YWJsZSBjb250ZW50IG9yIG5vbi1lZGl0YWJs
ZSBjb250ZW50IGluc2lkZSBhIGRpZmZlcmVudCBlZGl0YWJsZSBhbmNlc3RvciwgCiAgICAgICAg
IC8vIG1vdmUgZm9yd2FyZCB1bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgdGhlIHNh
bWUgbG93ZXN0IGVkaXRhYmxlIGFuY2VzdG9yIGlzIHJlYWNoZWQuCi0gICAgICAgIE5vZGUqIHN0
YXJ0RWRpdGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9zdGFydC5ub2Rl
KCkpOyAgICAgIAorICAgICAgICBOb2RlKiBzdGFydEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RF
ZGl0YWJsZUFuY2VzdG9yKG1fc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7ICAgICAgCiAgICAgICAg
IGlmIChzdGFydFJvb3QgfHwgc3RhcnRFZGl0YWJsZUFuY2VzdG9yICE9IGJhc2VFZGl0YWJsZUFu
Y2VzdG9yKSB7CiAgICAgICAgICAgICBQb3NpdGlvbiBwID0gbmV4dFZpc3VhbGx5RGlzdGluY3RD
YW5kaWRhdGUobV9zdGFydCk7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHN0
YXJ0Um9vdCA/IHN0YXJ0Um9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICAg
ICAgaWYgKHAuaXNOdWxsKCkgJiYgc3RhcnRSb290ICYmIChzaGFkb3dBbmNlc3RvciAhPSBzdGFy
dFJvb3QpKQogICAgICAgICAgICAgICAgIHAgPSBwb3NpdGlvbkJlZm9yZU5vZGUoc2hhZG93QW5j
ZXN0b3IpOwotICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYgIShsb3dlc3RFZGl0
YWJsZUFuY2VzdG9yKHAubm9kZSgpKSA9PSBiYXNlRWRpdGFibGVBbmNlc3RvciAmJiAhaXNFZGl0
YWJsZVBvc2l0aW9uKHApKSkgeworICAgICAgICAgICAgd2hpbGUgKHAuaXNOb3ROdWxsKCkgJiYg
IShsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKHAuZGVwcmVjYXRlZE5vZGUoKSkgPT0gYmFzZUVkaXRh
YmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiByb290ID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocCk7CiAgICAgICAgICAgICAg
ICAgc2hhZG93QW5jZXN0b3IgPSByb290ID8gcm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAw
OwotICAgICAgICAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9zaXRpb25J
blBhcmVudEFmdGVyTm9kZShwLm5vZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0
ZShwKTsKKyAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUo
KSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBuZXh0
VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAgICAgICAgICAgICBpZiAocC5pc051
bGwoKSAmJiAoc2hhZG93QW5jZXN0b3IgIT0gcm9vdCkpCiAgICAgICAgICAgICAgICAgICAgIHAg
PSBwb3NpdGlvbkJlZm9yZU5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAgICAgICAgfQpAQCAt
NTUxLDcgKzU1MSw3IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG8K
ICAgICB9CiAgICAgCiAgICAgLy8gQ29ycmVjdCB0aGUgZXh0ZW50IGlmIG5lY2Vzc2FyeS4KLSAg
ICBpZiAoYmFzZUVkaXRhYmxlQW5jZXN0b3IgIT0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX2V4
dGVudC5ub2RlKCkpKQorICAgIGlmIChiYXNlRWRpdGFibGVBbmNlc3RvciAhPSBsb3dlc3RFZGl0
YWJsZUFuY2VzdG9yKG1fZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBtX2V4dGVu
dCA9IG1fYmFzZUlzRmlyc3QgPyBtX2VuZCA6IG1fc3RhcnQ7CiB9CiAKQEAgLTU3Miw3ICs1NzIs
NyBAQCBFbGVtZW50KiBWaXNpYmxlU2VsZWN0aW9uOjpyb290RWRpdGFibGVFCiAKIE5vZGUqIFZp
c2libGVTZWxlY3Rpb246OnNoYWRvd1RyZWVSb290Tm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHN0YXJ0KCkubm9kZSgpID8gc3RhcnQoKS5ub2RlKCktPnNoYWRvd1RyZWVSb290Tm9kZSgpIDog
MDsKKyAgICByZXR1cm4gc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5zaGFkb3dUcmVlUm9vdE5vZGUoKSA6IDA7CiB9CiAKICNpZm5kZWYgTkRFQlVH
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzg3
OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsOSArOTUsOSBAQCBib29sIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoY29u
c3QgTm9kCiAvLyBjb3VsZCBiZSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gT25seSB3b3JrcyBmb3Ig
bm9uLW51bGwgdmFsdWVzLgogaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3QgUG9zaXRpb24mIGEs
IGNvbnN0IFBvc2l0aW9uJiBiKQogewotICAgIE5vZGUqIG5vZGVBID0gYS5ub2RlKCk7CisgICAg
Tm9kZSogbm9kZUEgPSBhLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgQVNTRVJUKG5vZGVBKTsKLSAg
ICBOb2RlKiBub2RlQiA9IGIubm9kZSgpOworICAgIE5vZGUqIG5vZGVCID0gYi5kZXByZWNhdGVk
Tm9kZSgpOwogICAgIEFTU0VSVChub2RlQik7CiAgICAgaW50IG9mZnNldEEgPSBhLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgaW50IG9mZnNldEIgPSBiLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCk7CkBAIC0xMzQsNyArMTM0LDcgQEAgaW50IGNvbXBhcmVQb3NpdGlvbnMoY29uc3Qg
VmlzaWJsZVBvc2l0aQogCiBOb2RlKiBoaWdoZXN0RWRpdGFibGVSb290KGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgIE5v
ZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIApAQCAtMTczLDcgKzE3Myw3IEBAIE5vZGUqIGxvd2Vz
dEVkaXRhYmxlQW5jZXN0b3IoTm9kZSogbm9kZSkKIAogYm9vbCBpc0VkaXRhYmxlUG9zaXRpb24o
Y29uc3QgUG9zaXRpb24mIHApCiB7Ci0gICAgTm9kZSogbm9kZSA9IHAubm9kZSgpOworICAgIE5v
ZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTg1LDE0ICsxODUsMTQgQEAgYm9vbCBpc0VkaXRh
YmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIAogCiBib29sIGlzQXRVbnNwbGl0dGFibGVFbGVt
ZW50KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7Ci0gICAgTm9kZSogbm9kZSA9IHBvcy5ub2RlKCk7
CisgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIHJldHVybiAobm9k
ZSA9PSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwb3MpIHx8IG5vZGUgPT0gZW5jbG9zaW5nTm9k
ZU9mVHlwZShwb3MsICZpc1RhYmxlQ2VsbCkpOwogfQogICAgIAogICAgIAogYm9vbCBpc1JpY2hs
eUVkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCiB7Ci0gICAgTm9kZSogbm9kZSA9
IHAubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMjA0LDcgKzIwNCw3
IEBAIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2kKIAogRWxlbWVudCog
ZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHApCiB7Ci0gICAgTm9kZSog
bm9kZSA9IHAubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkBAIC0yODIsMTQgKzI4
MiwxNCBAQCBWaXNpYmxlUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uQWZ0CiAKICAgICBQ
b3NpdGlvbiBwID0gcG9zaXRpb247CiAgICAgCi0gICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9y
ID0gcC5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQotICAgICAgICBpZiAoc2hhZG93QW5j
ZXN0b3IgIT0gcC5ub2RlKCkpCisgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5kZXBy
ZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKKyAgICAgICAgaWYgKHNoYWRvd0Fu
Y2VzdG9yICE9IHAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgIAotICAgIHdoaWxlIChw
Lm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihoaWdoZXN0Um9vdCkpCi0gICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8g
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLm5vZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5j
dENhbmRpZGF0ZShwKTsKKyAgICB3aGlsZSAocC5kZXByZWNhdGVkTm9kZSgpICYmICFpc0VkaXRh
YmxlUG9zaXRpb24ocCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdo
ZXN0Um9vdCkpCisgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA/
IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA6IG5leHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwogICAgIAotICAgIGlmIChwLm5vZGUoKSAmJiBwLm5v
ZGUoKSAhPSBoaWdoZXN0Um9vdCAmJiAhcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RS
b290KSkKKyAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpICYmIHAuZGVwcmVjYXRlZE5vZGUoKSAh
PSBoaWdoZXN0Um9vdCAmJiAhcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdo
ZXN0Um9vdCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHApOwpAQCAtMzAzLDE0ICszMDMsMTQgQEAgVmlzaWJsZVBv
c2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmbwogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0
aW9uOwogICAgIAotICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKSkKLSAgICAgICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgp
KQorICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHAuZGVwcmVjYXRlZE5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCkpCisgICAgICAgIGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLmRlcHJl
Y2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBwID0gZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgCi0gICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0Vk
aXRhYmxlUG9zaXRpb24ocCkgJiYgcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290
KSkKLSAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50
QmVmb3JlTm9kZShwLm5vZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUo
cCk7CisgICAgd2hpbGUgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9u
KHApICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQor
ICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOwogICAgIAotICAgIGlmIChwLm5vZGUoKSAmJiBwLm5vZGUoKSAh
PSBoaWdoZXN0Um9vdCAmJiAhcC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkK
KyAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpICYmIHAuZGVwcmVjYXRlZE5vZGUoKSAhPSBoaWdo
ZXN0Um9vdCAmJiAhcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9v
dCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKHApOwpAQCAtNDIxLDkgKzQyMSw5IEBAIGJvb2wgaXNTcGVjaWFsRWxl
bWVudChjb25zdCBOb2RlICpuKQogCiBzdGF0aWMgTm9kZSogZmlyc3RJblNwZWNpYWxFbGVtZW50
KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgYmVnaW5zIGF0IHBv
cy5ub2RlKCksIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgY29udGFpbiBwb3MgKHN1cHBvc2Ug
cG9zIHdhcyBbaW1nLCAwXSkuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjc3MDI+LgotICAgIE5v
ZGUqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBwb3Mubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCk7Ci0gICAgZm9yIChOb2RlKiBuID0gcG9zLm5vZGUoKTsgbiAmJiBuLT5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVudE5vZGUoKSkKKyAg
ICAvLyBGSVhNRTogVGhpcyBiZWdpbnMgYXQgcG9zLmRlcHJlY2F0ZWROb2RlKCksIHdoaWNoIGRv
ZXNuJ3QgbmVjZXNzYXJpbHkgY29udGFpbiBwb3MgKHN1cHBvc2UgcG9zIHdhcyBbaW1nLCAwXSku
ICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjc3MDI+LgorICAgIE5vZGUqIHJvb3RFZGl0YWJsZUVs
ZW1lbnQgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAg
IGZvciAoTm9kZSogbiA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOyBuICYmIG4tPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFyZW50Tm9kZSgpKQog
ICAgICAgICBpZiAoaXNTcGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHZQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKTsKICAgICAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBmaXJzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCAw
LCBET1dOU1RSRUFNKTsKQEAgLTQzNyw5ICs0MzcsOSBAQCBzdGF0aWMgTm9kZSogZmlyc3RJblNw
ZWNpYWxFbGVtZW50KGNvbnN0CiAKIHN0YXRpYyBOb2RlKiBsYXN0SW5TcGVjaWFsRWxlbWVudChj
b25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGJlZ2lucyBhdCBwb3Mu
bm9kZSgpLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbnRhaW4gcG9zIChzdXBwb3NlIHBv
cyB3YXMgW2ltZywgMF0pLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS81MDI3NzAyPi4KLSAgICBOb2Rl
KiByb290RWRpdGFibGVFbGVtZW50ID0gcG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwotICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4gJiYgbi0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5wYXJlbnROb2RlKCkpCisgICAg
Ly8gRklYTUU6IFRoaXMgYmVnaW5zIGF0IHBvcy5kZXByZWNhdGVkTm9kZSgpLCB3aGljaCBkb2Vz
bid0IG5lY2Vzc2FyaWx5IGNvbnRhaW4gcG9zIChzdXBwb3NlIHBvcyB3YXMgW2ltZywgMF0pLiAg
U2VlIDxyZGFyOi8vcHJvYmxlbS81MDI3NzAyPi4KKyAgICBOb2RlKiByb290RWRpdGFibGVFbGVt
ZW50ID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICBm
b3IgKE5vZGUqIG4gPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsgbiAmJiBuLT5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAg
ICAgICAgaWYgKGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAgICAgICAgIFZpc2libGVQb3Np
dGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNUUkVBTSk7CiAgICAgICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gbGFzdEluRWxlbWVudCA9IFZpc2libGVQb3NpdGlvbihuLCBuLT5j
aGlsZE5vZGVDb3VudCgpLCBET1dOU1RSRUFNKTsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBQb3NpdGlv
biBwb3NpdGlvbkJlZm9yZUNvbnRhaW5pbmdTcGVjaWFsCiAgICAgaWYgKCFuKQogICAgICAgICBy
ZXR1cm4gcG9zOwogICAgIFBvc2l0aW9uIHJlc3VsdCA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKG4pOwotICAgIGlmIChyZXN1bHQuaXNOdWxsKCkgfHwgcmVzdWx0Lm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpICE9IHBvcy5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAg
ICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3VsdC5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRp
dGFibGVFbGVtZW50KCkgIT0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIHBvczsKICAgICBpZiAoY29udGFpbmluZ1NwZWNpYWxFbGVt
ZW50KQogICAgICAgICAqY29udGFpbmluZ1NwZWNpYWxFbGVtZW50ID0gbjsKQEAgLTQ4MCw3ICs0
ODAsNyBAQCBQb3NpdGlvbiBwb3NpdGlvbkFmdGVyQ29udGFpbmluZ1NwZWNpYWxFCiAgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm4gcG9zOwogICAgIFBvc2l0aW9uIHJlc3VsdCA9IHBvc2l0aW9u
SW5QYXJlbnRBZnRlck5vZGUobik7Ci0gICAgaWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1bHQu
bm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpKQorICAgIGlmIChyZXN1bHQuaXNOdWxsKCkgfHwgcmVzdWx0LmRlcHJlY2F0ZWRO
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gcG9zOwogICAgIGlmIChjb250YWlu
aW5nU3BlY2lhbEVsZW1lbnQpCiAgICAgICAgICpjb250YWluaW5nU3BlY2lhbEVsZW1lbnQgPSBu
OwpAQCAtNDk5LDggKzQ5OSw4IEBAIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdT
cGVjaWEKIE5vZGUqIGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgUG9zaXRpb24gdXBzdHJlYW0odmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKSk7Ci0gICAgaWYgKHVwc3RyZWFtLm5v
ZGUoKSAmJiB1cHN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5y
ZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgdXBzdHJlYW0uYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZSgpKQotICAgICAgICByZXR1cm4gdXBzdHJlYW0ubm9kZSgpOworICAgIGlmICh1cHN0cmVh
bS5kZXByZWNhdGVkTm9kZSgpICYmIHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCkgJiYgdXBzdHJlYW0uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYm
IHVwc3RyZWFtLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkBAIC01
MDgsOCArNTA4LDggQEAgTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBWaQog
Tm9kZSogaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Ci0gICAgaWYgKGRvd25zdHJlYW0ubm9k
ZSgpICYmIGRvd25zdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW0ubm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbS5hdEZpcnN0RWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSgpKQotICAgICAgICByZXR1cm4gZG93bnN0cmVhbS5ub2RlKCk7CisgICAgaWYg
KGRvd25zdHJlYW0uZGVwcmVjYXRlZE5vZGUoKSAmJiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
LT5pc1RhYmxlKCkgJiYgZG93bnN0cmVhbS5hdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgp
KQorICAgICAgICByZXR1cm4gZG93bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpOwogICAgIAogICAg
IHJldHVybiAwOwogfQpAQCAtNTkxLDcgKzU5MSw3IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVXaXRo
VGFnKGNvbnN0IFBvc2l0aW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIE5vZGUq
IHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwotICAgIGZvciAoTm9kZSogbiA9IHAubm9k
ZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gcC5kZXBy
ZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChyb290
ICYmICFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKHRhZ05hbWUpKQpAQCAtNjA5LDcgKzYwOSw3IEBAIE5vZGUq
IGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24KICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIAogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwotICAgIGZv
ciAoTm9kZSogbiA9IHAubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgIC8vIERvbid0IHJldHVybiBhIG5vbi1lZGl0YWJsZSBub2RlIGlmIHRoZSBpbnB1
dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUsIHNpbmNlCiAgICAgICAgIC8vIHRoZSBjYWxsZXJzIGZy
b20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gcGVyZm9ybSBlZGl0aW5nIGluc2lkZSB0
aGUgcmV0dXJuZWQgbm9kZS4KICAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgb25seVJldHVybkVkaXRhYmxlTm9kZXMpCkBAIC02MjcsNyArNjI3LDcgQEAgTm9k
ZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUAogewogICAgIE5vZGUqIGhpZ2hl
c3QgPSAwOwogICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwotICAgIGZv
ciAoTm9kZSogbiA9IHAubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgIGlmICgoKm5vZGVJc09mVHlwZSkobikpCiAgICAgICAgICAgICBoaWdoZXN0ID0g
bjsKICAgICAgICAgaWYgKG4gPT0gcm9vdCkKQEAgLTY0Nyw3ICs2NDcsNyBAQCBOb2RlKiBlbmNs
b3NpbmdBbmNob3JFbGVtZW50KGNvbnN0IFBvc2l0CiAgICAgaWYgKHAuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIAotICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2Rl
KiBub2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIHdoaWxlIChub2RlICYmICEobm9kZS0+
aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUtPmlzTGluaygpKSkKICAgICAgICAgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gbm9kZTsKQEAgLTcxNyw3ICs3MTcsNyBAQCBzdGF0
aWMgTm9kZSogYXBwZW5kZWRTdWJsaXN0KE5vZGUqIGxpc3RJCiBOb2RlKiBlbmNsb3NpbmdFbXB0
eUxpc3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKIHsKICAgICAvLyBD
aGVjayB0aGF0IHBvc2l0aW9uIGlzIG9uIGEgbGluZSBieSBpdHNlbGYgaW5zaWRlIGEgbGlzdCBp
dGVtCi0gICAgTm9kZSogbGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZCh2aXNpYmxl
UG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBOb2RlKiBsaXN0Q2hpbGROb2RlID0g
ZW5jbG9zaW5nTGlzdENoaWxkKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICBpZiAoIWxpc3RDaGlsZE5vZGUgfHwgIWlzU3RhcnRPZlBhcmFncmFwaCh2
aXNpYmxlUG9zKSB8fCAhaXNFbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTg4Myw3ICs4ODMsNyBAQCBib29sIGlzTm9kZUluVGV4dEZvcm1Db250cm9s
KE5vZGUqIG5vZGUpCiAgICAgCiBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVRhYlNwYW4oY29uc3Qg
UG9zaXRpb24mIHBvcykKIHsKLSAgICBOb2RlICpub2RlID0gcG9zLm5vZGUoKTsKKyAgICBOb2Rl
ICpub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGlzVGFiU3BhblRleHROb2Rl
KG5vZGUpKQogICAgICAgICBub2RlID0gdGFiU3Bhbk5vZGUobm9kZSk7CiAgICAgZWxzZSBpZiAo
IWlzVGFiU3Bhbk5vZGUobm9kZSkpCkBAIC05NDQsNyArOTQ0LDcgQEAgTm9kZSAqbmVhcmVzdE1h
aWxCbG9ja3F1b3RlKGNvbnN0IE5vZGUgKgogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2Nr
cXVvdGVzKGNvbnN0IFBvc2l0aW9uJiBwKQogewogICAgIHVuc2lnbmVkIG51bSA9IDA7Ci0gICAg
Zm9yIChOb2RlKiBuID0gcC5ub2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpCisgICAgZm9y
IChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQog
ICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShuKSkKICAgICAgICAgICAgIG51bSsrOwogICAg
IApAQCAtMTAxNSw3ICsxMDE1LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJh
Z3JhcGhJdAogICAgIC8vIHRoYXQgd2UnbGwgd2FudCBtb2RpZnkgaXMgdGhlIGxhc3Qgb25lIGlu
c2lkZSB0aGUgdGFibGUsIG5vdCB0aGUgdGFibGUgaXRzZWxmCiAgICAgLy8gKGEgdGFibGUgaXMg
aXRzZWxmIGEgcGFyYWdyYXBoKS4KICAgICBpZiAoTm9kZSogdGFibGUgPSBpc0ZpcnN0UG9zaXRp
b25BZnRlclRhYmxlKGVuZE9mU2VsZWN0aW9uKSkKLSAgICAgICAgaWYgKHN0YXJ0T2ZTZWxlY3Rp
b24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKKyAgICAg
ICAgaWYgKHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZih0YWJsZSkpCiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZWxlY3Rpb24sIGVuZE9mU2VsZWN0aW9uLnByZXZpb3VzKHRy
dWUpKTsKICAgICAKICAgICAvLyBJZiB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiB0byBtb2Rp
ZnkgaXMganVzdCBiZWZvcmUgYSB0YWJsZSwKQEAgLTEwMjMsNyArMTAyMyw3IEBAIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKICAgICAvLyB3ZSdsbCB3YW50IHRvIG1v
ZGlmeSBpcyB0aGUgZmlyc3Qgb25lIGluc2lkZSB0aGUgdGFibGUsIG5vdCB0aGUgcGFyYWdyYXBo
CiAgICAgLy8gY29udGFpbmluZyB0aGUgdGFibGUgaXRzZWxmLgogICAgIGlmIChOb2RlKiB0YWJs
ZSA9IGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFibGUoc3RhcnRPZlNlbGVjdGlvbikpCi0gICAgICAg
IGlmIChlbmRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50
T2YodGFibGUpKQorICAgICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZih0YWJsZSkpCiAgICAgICAgICAgICBuZXdT
ZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZWxlY3Rpb24ubmV4dCh0cnVlKSwg
ZW5kT2ZTZWxlY3Rpb24pOwogICAgIAogICAgIHJldHVybiBuZXdTZWxlY3Rpb247CkBAIC0xMDM1
LDcgKzEwMzUsNyBAQCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsCiAg
ICAgaWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
UG9zaXRpb24gcCh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUocC5ub2RlKCktPmRvY3VtZW50KCksIGZpcnN0
UG9zaXRpb25Jbk5vZGUocC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpKSwKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShwLmFuY2hvck5vZGUoKS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIHJldHVybiBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKIH0KQEAgLTExMTQs
OCArMTExNCw4IEBAIFZpc2libGVTZWxlY3Rpb24gYXZvaWRJbnRlcnNlY3Rpb25XaXRoTm8KICAg
ICAgICAgcmV0dXJuIFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gdXBkYXRlZFNlbGVjdGlvbihzZWxlY3Rpb24pOwotICAgIE5vZGUqIGJhc2UgPSBz
ZWxlY3Rpb24uYmFzZSgpLm5vZGUoKTsKLSAgICBOb2RlKiBleHRlbnQgPSBzZWxlY3Rpb24uZXh0
ZW50KCkubm9kZSgpOworICAgIE5vZGUqIGJhc2UgPSBzZWxlY3Rpb24uYmFzZSgpLmRlcHJlY2F0
ZWROb2RlKCk7CisgICAgTm9kZSogZXh0ZW50ID0gc2VsZWN0aW9uLmV4dGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgQVNTRVJUKGJhc2UpOwogICAgIEFTU0VSVChleHRlbnQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM3LDggKzQzNyw4
IEBAIHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUKIHN0YXRpYyBib29s
IG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCiB7
CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2Lm5leHQoKTsKLSAgICBOb2RlKiB1cHN0cmVh
bU5vZGUgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKS5ub2RlKCk7Ci0gICAgTm9k
ZSogZG93bnN0cmVhbU5vZGUgPSB2LmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLm5vZGUo
KTsKKyAgICBOb2RlKiB1cHN0cmVhbU5vZGUgPSBuZXh0LmRlZXBFcXVpdmFsZW50KCkudXBzdHJl
YW0oKS5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIGRvd25zdHJlYW1Ob2RlID0gdi5kZWVw
RXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIC8vIEFkZCBh
biBpbnRlcmNoYW5nZSBuZXdsaW5lIGlmIGEgcGFyYWdyYXBoIGJyZWFrIGlzIHNlbGVjdGVkIGFu
ZCBhIGJyIHdvbid0IGFscmVhZHkgYmUgYWRkZWQgdG8gdGhlIG1hcmt1cCB0byByZXByZXNlbnQg
aXQuCiAgICAgcmV0dXJuIGlzRW5kT2ZQYXJhZ3JhcGgodikgJiYgaXNTdGFydE9mUGFyYWdyYXBo
KG5leHQpICYmICEodXBzdHJlYW1Ob2RlLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiB1cHN0cmVhbU5v
ZGUgPT0gZG93bnN0cmVhbU5vZGUpOwogfQpAQCAtNTcxLDcgKzU3MSw3IEBAIFN0cmluZyBjcmVh
dGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCAKICAgICAgICAgfQogCiAgICAgICAgIGFjY3Vt
dWxhdG9yLmFwcGVuZFN0cmluZyhpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcpOwotICAgICAgICBz
dGFydE5vZGUgPSB2aXNpYmxlU3RhcnQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwor
ICAgICAgICBzdGFydE5vZGUgPSB2aXNpYmxlU3RhcnQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgICAgICBpZiAocGFzdEVuZCAmJiBSYW5nZTo6Y29tcGFy
ZUJvdW5kYXJ5UG9pbnRzKHN0YXJ0Tm9kZSwgMCwgcGFzdEVuZCwgMCkgPj0gMCkgewogICAgICAg
ICAgICAgaWYgKGRlbGV0ZUJ1dHRvbikKQEAgLTc2NCw3ICs3NjQsNyBAQCBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAKICAgICBOb2RlKiBzdHlsZU5vZGUgPSBjb250
ZXh0LT5maXJzdE5vZGUoKTsKICAgICBpZiAoIXN0eWxlTm9kZSkgewotICAgICAgICBzdHlsZU5v
ZGUgPSBjb250ZXh0LT5zdGFydFBvc2l0aW9uKCkubm9kZSgpOworICAgICAgICBzdHlsZU5vZGUg
PSBjb250ZXh0LT5zdGFydFBvc2l0aW9uKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYg
KCFzdHlsZU5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjgsNyArNjgsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoCiAg
ICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckJlZm9yZSgp
KSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGZvcndhcmRzU2NhblJhbmdlKGQtPmNyZWF0ZVJh
bmdlKCkpOwogICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoYm91bmRhcnks
IGVjKTsKLSAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KGVuZC5ub2RlKCksIGVu
ZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgICAgIGZvcndhcmRzU2NhblJh
bmdlLT5zZXRTdGFydChlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCksIGVjKTsKICAgICAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9y
d2FyZHNTY2FuUmFuZ2UuZ2V0KCkpOwogICAgICAgICB3aGlsZSAoIWZvcndhcmRzSXRlcmF0b3Iu
YXRFbmQoKSkgewogICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBmb3J3YXJk
c0l0ZXJhdG9yLmNoYXJhY3RlcnMoKTsKQEAgLTgyLDggKzgyLDggQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogICAgICAgICB9CiAgICAgfQogCi0gICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoZW5kLm5vZGUoKSwgZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMp
OworICAgIHNlYXJjaFJhbmdlLT5zZXRFbmQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgCiAgICAgQVNTRVJUKCFlYyk7CiAgICAg
aWYgKGVjKQpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3Vz
Qm91bmRhcnkoCiAKICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJj
aFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbmRzQXRFZGl0aW5nQm91bmRhcnkpOwogICAgIHVu
c2lnbmVkIG5leHQgPSAwOwotICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9k
ZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVy
KCktPnN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKKyAgICBib29sIGluVGV4dFNl
Y3VyaXR5TW9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgYm9vbCBuZWVkTW9yZUNvbnRl
eHQgPSBmYWxzZTsKICAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKICAgICAgICAgLy8gaXRlcmF0
ZSB0byBnZXQgY2h1bmtzIHVudGlsIHRoZSBzZWFyY2hGdW5jdGlvbiByZXR1cm5zIGEgbm9uLXpl
cm8gdmFsdWUuCkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0
Qm91bmRhcnkoY29ucwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChyZXF1aXJl
c0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFyYWN0ZXJBZnRlcigpKSkgewogICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGJhY2t3YXJkc1NjYW5SYW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKLSAgICAg
ICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRFbmQoc3RhcnQubm9kZSgpLCBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgICAgIGJhY2t3YXJkc1NjYW5SYW5nZS0+c2V0
RW5kKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGVjKTsKICAgICAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2Fy
ZHNJdGVyYXRvcihiYWNrd2FyZHNTY2FuUmFuZ2UuZ2V0KCkpOwogICAgICAgICB3aGlsZSAoIWJh
Y2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzID0gYmFja3dhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAtMTYxLDEwICsxNjEs
MTAgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0Qm91bmRhcnkoY29ucwogICAgIH0KIAog
ICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnksIGVjKTsKLSAgICBz
ZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKICAgICBUZXh0
SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsKLSAg
ICBib29sIGluVGV4dFNlY3VyaXR5TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCkt
PnJlbmRlcmVyKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2Vj
dXJpdHkoKSAhPSBUU05PTkU7CisgICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5k
ZXByZWNhdGVkTm9kZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYg
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5
KCkgIT0gVFNOT05FOwogICAgIGJvb2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAgd2hp
bGUgKCFpdC5hdEVuZCgpKSB7CiAgICAgICAgIC8vIEtlZXAgYXNraW5nIHRoZSBpdGVyYXRvciBm
b3IgY2h1bmtzIHVudGlsIHRoZSBzZWFyY2ggZnVuY3Rpb24KQEAgLTMxNiw3ICszMTYsNyBAQCBW
aXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWCiBzdGF0aWMgUm9vdElubGlu
ZUJveCAqcm9vdEJveEZvckxpbmUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewogICAgIFBv
c2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbm9kZSA9IHAubm9kZSgp
OworICAgIE5vZGUgKm5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gMDsKIApAQCAtMzUxLDcgKzM1MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gc3RhcnRQb3NpdGlvbkZvckwKICAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQb3Np
dGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxvY2tzIHdpdGhvdXQKICAgICAgICAgLy8gUm9vdElubGlu
ZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRhYmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tzLgog
ICAgICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAocC5u
b2RlKCktPnJlbmRlcmVyKCkgJiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2so
KSAmJiBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gMCkKKyAgICAgICAgaWYgKHAuZGVw
cmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCktPmlzUmVuZGVyQmxvY2soKSAmJiBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gMCkK
ICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUo
Yyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC00MDQs
NyArNDA0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbkZvckxpbgogICAg
ICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mg
d2l0aG91dAogICAgICAgICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUg
YmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCiAgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBF
cXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUo
KS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA9PSAwKQorICAgICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYm
IHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICB9CkBAIC01MDEsNyArNTAxLDcgQEAg
c3RhdGljIE5vZGUqIGVuY2xvc2luZ05vZGVXaXRoTm9uSW5saW5lUgogVmlzaWJsZVBvc2l0aW9u
IHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0
aW9uLCBpbnQgeCkKIHsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgTm9kZSAqbm9kZSA9IHAubm9kZSgpOworICAgIE5vZGUgKm5vZGUgPSBw
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFi
bGVSb290KHApOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bigpOwpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhTYW1lRWRp
dGFiaWxpdHkKIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQgeCkKIHsKICAgICBQb3NpdGlvbiBwID0gdmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbm9kZSA9IHAubm9kZSgp
OworICAgIE5vZGUgKm5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgTm9kZSogaGlnaGVz
dFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNzQwLDcgKzc0MCw3IEBAIFZpc2libGVQb3Np
dGlvbiBuZXh0U2VudGVuY2VQb3NpdGlvbihjb24KIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFy
YWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdS
dWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSAqc3Rh
cnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTgwMiw3ICs4MDIsNyBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
Tm9kZSogc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXBy
ZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VP
ckhSKHN0YXJ0Tm9kZSkpCiAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoc3RhcnROb2RlKTsKQEAgLTkxMCw3ICs5MTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4
dFBhcmFncmFwaFBvc2l0aW9uKGNvCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkJsb2NrKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmYykKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVu
dCgpOwotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHAubm9kZSgpOworICAgIE5vZGUgKnN0YXJ0Tm9k
ZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQ
b3NpdGlvbkluTm9kZShzdGFydE5vZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSksIERP
V05TVFJFQU0pOwpAQCAtOTIwLDcgKzkyMCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkJsb2Nr
KGNvbnN0IFZpc2libGUKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwog
Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSAqc3RhcnROb2RlID0g
cC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7CiAKQEAgLTk1Niw3ICs5NTYsNyBAQCBWaXNpYmxlUG9zaXRpb24g
c3RhcnRPZkRvY3VtZW50KGNvbnN0IE5vCiAKIFZpc2libGVQb3NpdGlvbiBzdGFydE9mRG9jdW1l
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIHJldHVybiBzdGFydE9mRG9jdW1l
bnQoYy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXJ0T2ZEb2N1bWVu
dChjLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIFZpc2libGVQb3Np
dGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUqIG5vZGUpCkBAIC05NzAsMTcgKzk3MCwxNyBA
QCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChjb25zdCBOb2RlCiAKIFZpc2libGVQb3Np
dGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsKLSAgICByZXR1
cm4gZW5kT2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICByZXR1cm4g
ZW5kT2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAK
IGJvb2wgaW5TYW1lRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZhLCBjb25zdCBWaXNp
YmxlUG9zaXRpb24gJmIpCiB7CiAgICAgUG9zaXRpb24gYXAgPSBhLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgTm9kZSAqYW4gPSBhcC5ub2RlKCk7CisgICAgTm9kZSAqYW4gPSBhcC5kZXByZWNhdGVk
Tm9kZSgpOwogICAgIGlmICghYW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlv
biBicCA9IGIuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpibiA9IGJwLm5vZGUoKTsKKyAg
ICBOb2RlICpibiA9IGJwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGFuID09IGJuKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTEwOCw3ICsxMTA4LDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdAogICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBv
c2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAogICAgICAgICAvLyBSb290SW5s
aW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3Mu
CiAgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChw
Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9j
aygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCisgICAgICAgIGlmIChwLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
LT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICAg
ICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUoYyk7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0xMTQ2LDcgKzEx
NDYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxFbmRQb3NpdGlvCiAgICAgICAg
IC8vIFRoZXJlIGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRo
b3V0CiAgICAgICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9j
a3MgYW5kIGJvcmRlcmVkIGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5y
ZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSkKKyAgICAgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIE5TV3Jp
dGluZ0RpcmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGkKICAgICBOU1dyaXRpbmdEaXJlY3Rp
b24gcmVzdWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CiAKICAgICBQb3NpdGlv
biBwb3MgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCku
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKyAgICBOb2Rl
KiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rp
b25Db250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFj
Y2Vzc2liCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAog
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0
aW9uLnN0YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkp
Ci0gICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9z
ZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2Vs
ZWN0ZWRUZXh0Q2hhbmdlZCwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC0+YXhPYmplY3RDYWNo
ZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBmYWxz
ZSk7CiAKICAgICAvLyBpZiB6b29tIGZlYXR1cmUgaXMgZW5hYmxlZCwgaW5zZXJ0aW9uIHBvaW50
IGNoYW5nZXMgc2hvdWxkIHVwZGF0ZSB0aGUgem9vbQogICAgIGlmICghVUFab29tRW5hYmxlZCgp
IHx8ICFtX3NlbGVjdGlvbi5pc0NhcmV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxl
Y3Rpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2Vs
ZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIE5vZGUqIERPTVNl
bGVjdGlvbjo6YW5jaG9yTm9kZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChO
b2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKG1fZnJhbWUpKQog
ICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZy
ZWUoKTsKLSAgICByZXR1cm4gYW5jaG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2Rl
KCk7CisgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuZGVwcmVj
YXRlZE5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QK
QEAgLTExOSw3ICsxMTksNyBAQCBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVj
dGlvblNoYWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0
b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICByZXR1cm4gZm9jdXNQb3Np
dGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gZm9jdXNQb3NpdGlv
bih2aXNpYmxlU2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CiB9CiAKIGludCBET01TZWxl
Y3Rpb246OmZvY3VzT2Zmc2V0KCkgY29uc3QKQEAgLTEzNyw3ICsxMzcsNyBAQCBOb2RlKiBET01T
ZWxlY3Rpb246OmJhc2VOb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKE5v
ZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFtZSkpCiAg
ICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJl
ZSgpOwotICAgIHJldHVybiBiYXNlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7
CisgICAgcmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWRO
b2RlKCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246OmJhc2VPZmZzZXQoKSBjb25zdApAQCAtMTU1
LDcgKzE1NSw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNo
YWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBh
cmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24o
dmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7CisgICAgcmV0dXJuIGV4dGVudFBvc2l0aW9uKHZp
c2libGVTZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlv
bjo6ZXh0ZW50T2Zmc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNyArNzU0LDcgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgICAgICBkb1N5c3RlbURyYWcoZHJh
Z0ltYWdlLCBkcmFnTG9jLCBtb3VzZURyYWdnZWRQb2ludCwgY2xpcGJvYXJkLCBzcmMsIHRydWUp
OwogICAgIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCAmJiAobV9kcmFnU291cmNlQWN0aW9uICYgRHJh
Z1NvdXJjZUFjdGlvblNlbGVjdGlvbikpIHsKICAgICAgICAgaWYgKCFjbGlwYm9hcmQtPmhhc0Rh
dGEoKSkgewotICAgICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKHNyYy0+c2Vs
ZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpKSkKKyAgICAgICAgICAgIGlmIChpc05vZGVJblRleHRG
b3JtQ29udHJvbChzcmMtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQog
ICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+d3JpdGVQbGFpblRleHQoc3JjLT5lZGl0b3IoKS0+
c2VsZWN0ZWRUZXh0KCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9z
ZXN0V29yZE9yTGkKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CiAgICAg
ICAgIEVsZW1lbnQqIFVSTEVsZW1lbnQgPSByZXN1bHQuaGl0VGVzdFJlc3VsdCgpLlVSTEVsZW1l
bnQoKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCkt
PnBvc2l0aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAgICAgICBpZiAocG9z
LmlzTm90TnVsbCgpICYmIHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50
T2YoVVJMRWxlbWVudCkpCisgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkgJiYgcG9zLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoVVJMRWxlbWVudCkp
CiAgICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25G
cm9tQ29udGVudHNPZk5vZGUoVVJMRWxlbWVudCk7CiAgICAgCiAgICAgICAgIFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwpAQCAtMzQ3LDcgKzM0Nyw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQKIAogc3RhdGljIGlu
dCB0ZXh0RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KQogewotICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzdGFydC5ub2Rl
KCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQp
OwogICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1
ZSk7CiB9CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlU2Vs
ZWN0aW9uRm9yTW91CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTcGVjaWFsIGNhc2UgdG8gbGlt
aXQgc2VsZWN0aW9uIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIGZvciBTVkcgdGV4dC4KICAgICAv
LyBGSVhNRTogSXNuJ3QgdGhlcmUgYSBiZXR0ZXIgbm9uLVNWRy1zcGVjaWZpYyB3YXkgdG8gZG8g
dGhpcz8KLSAgICBpZiAoTm9kZSogc2VsZWN0aW9uQmFzZU5vZGUgPSBuZXdTZWxlY3Rpb24uYmFz
ZSgpLm5vZGUoKSkKKyAgICBpZiAoTm9kZSogc2VsZWN0aW9uQmFzZU5vZGUgPSBuZXdTZWxlY3Rp
b24uYmFzZSgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHNl
bGVjdGlvbkJhc2VSZW5kZXJlciA9IHNlbGVjdGlvbkJhc2VOb2RlLT5yZW5kZXJlcigpKQogICAg
ICAgICAgICAgaWYgKHNlbGVjdGlvbkJhc2VSZW5kZXJlci0+aXNTVkdUZXh0KCkpCiAgICAgICAg
ICAgICAgICAgaWYgKHRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpICE9
IHNlbGVjdGlvbkJhc2VSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCkpCkBAIC0yMTI3LDcgKzIx
MjcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGCiAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxlciA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpOwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uQ29udHJvbGxlci0+c2VsZWN0aW9u
KCkuc3RhcnQoKTsKIAotICAgIGlmIChzdGFydC5ub2RlKCkgJiYgKHNlbGVjdGlvbkNvbnRyb2xs
ZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb25Db250cm9sbGVyLT5pc1Jhbmdl
KCkpKSB7CisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbkNvbnRy
b2xsZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb25Db250cm9sbGVyLT5pc1Jh
bmdlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0aW9uQ29u
dHJvbGxlci0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgSW50UmVjdCBmaXJzdFJlY3Qg
PSBtX2ZyYW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uLmdldCgpKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
Nzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5j
ZUZvY3VzSW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gZm9jdXNlZE9yTWFpbkZyYW1l
KCktPnNldHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAKICAgICBpZiAoY2FyZXRC
cm93c2luZyAmJiAhY3VycmVudE5vZGUpCi0gICAgICAgIGN1cnJlbnROb2RlID0gZnJhbWUtPnNl
bGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAgY3VycmVudE5vZGUgPSBmcmFtZS0+
c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGRvY3VtZW50LT51
cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtMzI1LDcgKzMyNSw3
IEBAIHN0YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2Fy
ZXRCcm93c2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnRO
b2RlID0gcy0+c2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc2VsZWN0aW9u
U3RhcnROb2RlID0gcy0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAg
IGlmIChzZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3Rh
cnROb2RlLT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnRO
b2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBuZXdGb2N1c2VkTm9kZSkKICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUxLDEwICsyNjUxLDEwIEBAIFZpc2li
bGVQb3NpdGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAgIC8vIElmIGl0
IGNhbiBiZSBmb3VuZCwgd2UgcHJlZmVyIGEgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbiB0
aGF0IGlzIGVkaXRhYmxlLiAKICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uKG5vZGUsIG9m
ZnNldCk7CiAgICAgICAgICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBwb3NpdGlvbi5kb3duc3Ry
ZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUu
bm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5k
ZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgICAgICBj
YW5kaWRhdGUgPSBwb3NpdGlvbi51cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0g
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwg
YWZmaW5pdHkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9k
ZSwgb2Zmc2V0LCBhZmZpbml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5
LDcgKzI0OSw3IEBAIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSogbm9kZSwgaW50IHMKICAg
ICAvLyBzdGFydFBvc2l0aW9uIGFuZCBlbmRQb3NpdGlvbiBjYW4gYmUgbnVsbCBwb3NpdGlvbiBm
b3IgZXhhbXBsZSB3aGVuCiAgICAgLy8gIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmUiIHN0eWxl
IGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQuCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxs
KCkgJiYgZW5kUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXJ0UG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5v
ZGUgJiYgZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpID09IG5vZGUpOworICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUgJiYg
ZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNl
c3Rvck5vZGUoKSA9PSBub2RlKTsKICAgICB9CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIApA
QCAtMzM4LDEzICszMzgsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2
aXNpYgogaW50IFJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHBvcykgY29uc3QKIHsKICAgICBQb3NpdGlvbiBpbmRleFBvc2l0
aW9uID0gcG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFpc1NlbGVjdGFibGVFbGVtZW50
KGluZGV4UG9zaXRpb24ubm9kZSgpKSkKKyAgICBpZiAoIWlzU2VsZWN0YWJsZUVsZW1lbnQoaW5k
ZXhQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG1faW5uZXJUZXh0LmdldCgpLCAw
LCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7Ci0gICAgcmFuZ2UtPnNldEVuZChpbmRleFBvc2l0aW9u
Lm5vZGUoKSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7Cisg
ICAgcmFuZ2UtPnNldEVuZChpbmRleFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCksIGluZGV4UG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwog
ICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTcsMTMgKzcxNywxMyBAQCBzdGF0aWMgdm9pZCB3
cml0ZVNlbGVjdGlvbihUZXh0U3RyZWFtJiB0CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc0NhcmV0KCkpIHsKLSAgICAgICAgdHMgPDwgImNhcmV0OiBwb3NpdGlvbiAiIDw8IHNlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQ
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOworICAgICAgICB0cyA8PCAiY2FyZXQ6
IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pCiAg
ICAgICAgICAgICB0cyA8PCAiICh1cHN0cmVhbSBhZmZpbml0eSkiOwogICAgICAgICB0cyA8PCAi
XG4iOwogICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgdHMgPDwg
InNlbGVjdGlvbiBzdGFydDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpIDw8ICIgb2YgIiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9uLnN0
YXJ0KCkubm9kZSgpKSA8PCAiXG4iCi0gICAgICAgICAgIDw8ICJzZWxlY3Rpb24gZW5kOiAgIHBv
c2l0aW9uICIgPDwgc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwg
IiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCkubm9kZSgpKSA8PCAiXG4iOwor
ICAgICAgICB0cyA8PCAic2VsZWN0aW9uIHN0YXJ0OiBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5z
dGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlv
bihzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSA8PCAiXG4iCisgICAgICAgICAg
IDw8ICJzZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLmVuZCgpLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24u
ZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkgPDwgIlxuIjsKIH0KIAogU3RyaW5nIGV4dGVybmFsUmVw
cmVzZW50YXRpb24oRnJhbWUqIGZyYW1lLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4Nzk4KQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDItMTcg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9z
aXRpb246OmRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0NjIyCisgICAgICAgIAorICAgICAgICBEb25lIHRoZSByZW5hbWUu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
c21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6IFNpbmNlIG5ld1N0YXJ0IGFuZCBu
ZXdFbmQgYXJlIHBhcmVudC1hbmNob3JlZCwKKyAgICAgICAgdXNlIGNvbnRhaW5lck5vZGUoKSBh
bmQgb2Zmc2V0SW5Db250YWluZXJOb2RlKCkgaW5zdGVhZCBvZiBkZXByZWNhdGVkIG1lbWJlciBm
dW5jdGlvbnMuCisKIDIwMTEtMDItMTYgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODA1LDggKzgw
NSw4IEBAIC0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3MKIAogICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVh
dGVSYW5nZSgpOwogICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChu
ZXdTdGFydC5ub2RlKCksIG5ld1N0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGV4Y2Vw
dGlvbik7Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5ub2RlKCksIG5ld1N0YXJ0LmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGV4Y2VwdGlvbik7CisgICAgcmFuZ2UtPnNldFN0YXJ0KG5l
d1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGV4Y2VwdGlvbik7CisgICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5jb250YWluZXJOb2RlKCks
IG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwogICAgIHJldHVy
biBraXQocmFuZ2UuZ2V0KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82774</attachid>
            <date>2011-02-17 02:55:57 -0800</date>
            <delta_ts>2011-02-17 03:24:16 -0800</delta_ts>
            <desc>second attempt; r? to see build errors on non-Mac ports</desc>
            <filename>bug-54622-20110217195554.patch</filename>
            <type>text/plain</type>
            <size>205662</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRl
cHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLiBBbGwgY2FsbHMgdG8gbm9k
ZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVkTm9kZSgpIGV4Y2VwdCB3aGVu
CisgICAgICAgIGNhbGxzIHdlcmUgb2YgdGhlIGZvcm0gbm9kZSgpLT5kb2N1bWVudCgpIGFuZCBu
b2RlKCktPmluRG9jdW1lbnQoKSBpbiB3aGljaCBjYXNlIHRoZXkgd2VyZQorICAgICAgICByZXBs
YWNlZCBieSBhbmNob3JOb2RlKCktPmRvY3VtZW50KCkgYW5kIGFuY2hvck5vZGUoKS0+aW5Eb2N1
bWVudCgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCBQ
b3NpdGlvbjo6Y29udGFpbmVyTm9kZS4KKworICAgICAgICBUaGUgcmVzdCBhYmJyZXZpYXRlZCBm
b3Igc2ltcGxpY2l0eS4gUGxlYXNlIHNlZSBzdm4gbG9nLgorCisKIDIwMTEtMDItMTcgIEJlbmph
bWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Unlvc3VrZSBOaXdhLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc4Nzk1KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyMTUs
NiArMTIxNSw3IEBAIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQ2ZG9tYWluRXYKIF9fWk5LN1dlYkNv
cmU4SW50UG9pbnRjdjdDR1BvaW50RXYKIF9fWk5LN1dlYkNvcmU4SW50UG9pbnRjdjhfTlNQb2lu
dEV2CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMTBkb3duc3RyZWFtRU5TXzI3RWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlRQorX19aTks3V2ViQ29yZThQb3NpdGlvbjEzY29udGFpbmVyTm9kZUV2
CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjRwYXJlbnRBbmNob3JlZEVxdWl2YWxlbnRFdgogX19a
Tks3V2ViQ29yZThQb3NpdGlvbjI1bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmlu
aXR5RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
RU5TXzlFQWZmaW5pdHlFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1
NzgsNyBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAgICAgaWYg
KGRlZXBQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAg
ICAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVlcFBvcy5ub2RlKCktPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlZXBQb3MuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiAgICAgCkBAIC01ODYsNyArNTg2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFY
T2JqZWN0Q2FjaGU6OnZpc2libGVQbwogICAgIGlmICghY2FjaGUtPmlzSURpblVzZSh0ZXh0TWFy
a2VyRGF0YS5heElEKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAot
ICAgIGlmIChkZWVwUG9zLm5vZGUoKSAhPSB0ZXh0TWFya2VyRGF0YS5ub2RlIHx8IGRlZXBQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAhPSB0ZXh0TWFya2VyRGF0YS5vZmZzZXQpCisgICAg
aWYgKGRlZXBQb3MuZGVwcmVjYXRlZE5vZGUoKSAhPSB0ZXh0TWFya2VyRGF0YS5ub2RlIHx8IGRl
ZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAhPSB0ZXh0TWFya2VyRGF0YS5vZmZzZXQp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICByZXR1cm4gdmlz
aWJsZVBvczsKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yVmlzCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBQb3NpdGlvbiBkZWVwUG9z
ID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUqIGRvbU5vZGUgPSBkZWVw
UG9zLm5vZGUoKTsKKyAgICBOb2RlKiBkb21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgp
OwogICAgIEFTU0VSVChkb21Ob2RlKTsKICAgICBpZiAoIWRvbU5vZGUpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIs
OSArMjIyLDkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB1cGRhdGVBWExpbmVTdGFydAogICAg
ICAgICBpZiAodGVtcFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIHAgPSB0ZW1wUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgaWYgKCFwLm5v
ZGUoKSkKKyAgICAgICAgaWYgKCFwLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgcmVuZGVyZXIgPSBwLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgcmVu
ZGVyZXIgPSBwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVu
ZGVyZXIgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSW5saW5lQm94KiBib3g7
CkBAIC0zMTgsNyArMzE4LDcgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9i
amVjdAogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIg
PSByZW5kZXJlcjsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
IApAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxl
UmFuZ2UKIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0g
cmVuZGVyZXI7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAK
QEAgLTY0OSw3ICs2NDksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgUmVuZGVyT2JqZWN0KiBvYmogPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogb2JqID0gdmlzaWJsZVBvcy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmopCiAg
ICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4
Nzk1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4MiwxMyArMjQ4MiwxMyBAQCBpbnQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWCiAgICAgICAgIHJldHVybiAwOwogICAg
IAogICAgIFBvc2l0aW9uIGluZGV4UG9zaXRpb24gPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAg
ICBpZiAoIWluZGV4UG9zaXRpb24ubm9kZSgpIHx8IGluZGV4UG9zaXRpb24ubm9kZSgpLT5yb290
RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZSkKKyAgICBpZiAoIWluZGV4UG9zaXRpb24uYW5jaG9y
Tm9kZSgpIHx8IGluZGV4UG9zaXRpb24uYW5jaG9yTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkgIT0gbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9yZW5kZXJl
ci0+ZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG5vZGUsIDAsIGVjKTsKLSAgICBy
YW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24ubm9kZSgpLCBpbmRleFBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24u
YW5jaG9yTm9kZSgpLCBpbmRleFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVj
KTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CiB9
CiAKQEAgLTI2MjEsNyArMjYyMSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
bmRleChjb24KICAgICBpZiAoIWlzVGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIAotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsK
KyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjEsNyArMTIyMSw3IEBAIHN0YXRpYyBnaW50IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2MKICAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUqIGZv
Y3VzZWROb2RlID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCkuZW5kKCkubm9kZSgpOworICAgIE5v
ZGUqIGZvY3VzZWROb2RlID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCkuZW5kKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICBpZiAoIWZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm4gMDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBQ
YXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gCiAKIFBvc2l0aW9uIFBvc2l0
aW9uOjpwcmV2aW91cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogewotICAgIE5v
ZGUqIG4gPSBub2RlKCk7CisgICAgTm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCkBAIC0yNjksNyArMjY5LDcgQEAgUG9z
aXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZQogewogICAgIEFTU0VSVChtb3Zl
VHlwZSAhPSBCYWNrd2FyZERlbGV0aW9uKTsKIAotICAgIE5vZGUqIG4gPSBub2RlKCk7CisgICAg
Tm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgCkBAIC0zMjMsNyArMzIzLDcgQEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTgogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUoKSk7
CisgICAgcmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGRlcHJlY2F0ZWRO
b2RlKCkpOwogfQogCiAvLyBBIHBvc2l0aW9uIGlzIGNvbnNpZGVyZWQgYXQgZWRpdGluZyBib3Vu
ZGFyeSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgpAQCAtMzM2LDE1ICszMzYsMTUg
QEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTgogYm9vbCBQb3NpdGlv
bjo6YXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdAogewogICAgIFBvc2l0aW9uIG5leHRQb3NpdGlv
biA9IGRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdEZpcnN0
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAh
bmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoYXRGaXJz
dEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
IW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgUG9zaXRpb24gcHJldlBvc2l0aW9uID0g
dXBzdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9z
aXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgIW5leHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkKLSAgICAgICAgJiYg
cHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5l
eHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpCisgICAgICAg
ICYmIHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRF
ZGl0aW5nQm91bmRhcnkoKSBjb25zdApAQCAtMzY4LDI2ICszNjgsMjYgQEAgYm9vbCBQb3NpdGlv
bjo6YXRTdGFydE9mVHJlZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIW5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zmc2V0
IDw9IDA7CisgICAgcmV0dXJuICFkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgbV9v
ZmZzZXQgPD0gMDsKIH0KIAogYm9vbCBQb3NpdGlvbjo6YXRFbmRPZlRyZWUoKSBjb25zdAogewog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFub2Rl
KCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2Rl
KCkpOworICAgIHJldHVybiAhZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zm
c2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiBpbnQg
UG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBpZiAoIW5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKQorICAgIGlmICghZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAg
ICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAKLSAgICBpZiAoIW5vZGUoKS0+cmVuZGVyZXIoKSkK
KyAgICBpZiAoIWRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgaW50IHJlc3VsdCA9IDA7Ci0gICAg
UmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KG5vZGUoKS0+cmVuZGVyZXIo
KSk7CisgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KGRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCkpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4
dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkp
IHsKICAgICAgICAgaW50IHN0YXJ0ID0gYm94LT5zdGFydCgpOwogICAgICAgICBpbnQgZW5kID0g
Ym94LT5zdGFydCgpICsgYm94LT5sZW4oKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIAotICAgIE5vZGUgKmZyb21Sb290RWRpdGFibGVFbGVtZW50
ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogZnJvbVJvb3RFZGl0
YWJsZUVsZW1lbnQgPSBkZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAK
ICAgICBib29sIGF0U3RhcnRPZkxpbmUgPSBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbigq
dGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVkID0gaXNDYW5kaWRhdGUoKTsKQEAg
LTQxNyw3ICs0MTcsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3Np
CiAgICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0U3RhcnRPZlRyZWUoKSkgewogICAgICAgICBjdXJy
ZW50UG9zID0gY3VycmVudFBvcy5wcmV2aW91cygpOwogCi0gICAgICAgIGlmIChjdXJyZW50UG9z
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVtZW50
KQorICAgICAgICBpZiAoY3VycmVudFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAKICAgICAgICAgaWYgKGF0U3RhcnRPZkxpbmUgfHwgIXJlbmRlcmVkKSB7CkBAIC00
MzYsNyArNDM2LDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbgog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKLSAgICBOb2Rl
ICpmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIE5vZGUqIGZyb21Sb290RWRpdGFibGVFbGVtZW50ID0gZGVwcmVjYXRlZE5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAgICAgYm9vbCBhdEVuZE9mTGluZSA9IGlzRW5kT2ZM
aW5lKFZpc2libGVQb3NpdGlvbigqdGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVk
ID0gaXNDYW5kaWRhdGUoKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6
bmV4dENoYXJhY3RlclBvc2l0aW9uCiAgICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0RW5kT2ZUcmVl
KCkpIHsKICAgICAgICAgY3VycmVudFBvcyA9IGN1cnJlbnRQb3MubmV4dCgpOwogCi0gICAgICAg
IGlmIChjdXJyZW50UG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290
RWRpdGFibGVFbGVtZW50KQorICAgICAgICBpZiAoY3VycmVudFBvcy5kZXByZWNhdGVkTm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAgICAgaWYgKGF0RW5kT2ZMaW5lIHx8ICFyZW5k
ZXJlZCkgewpAQCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3Qg
UG9zaXRpb25JdGUKIC8vIGluIGJvdW5kYXJ5LCB3aGVyZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlE
aXN0aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkgaXMgdHJ1ZS4KIFBvc2l0aW9uIFBvc2l0aW9uOjp1
cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKIHsKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAgICAgCkBAIC02MjgsNyArNjI4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVk
aXRpbmdCb3VuZAogLy8gaW4gYm91bmRhcnkgYWZ0ZXIgdGhlIGxhc3QgY2FuZGlkYXRlLCB3aGVy
ZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkuCiBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKIHsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CisgICAgTm9kZSogc3Rh
cnROb2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7CiAKQEAgLTc2NCw3ICs3NjQsNyBAQCBib29sIFBvc2l0aW9uOjpp
c0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlKCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IApAQCAtNzcyLDEzICs3NzIsMTMgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25z
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKLSAg
ICAgICAgcmV0dXJuICFtX29mZnNldCAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5w
YXJlbnROb2RlKCkpOworICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKHJlbmRl
cmVyLT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2Rl
KCkpICYmIGluUmVuZGVyZWRUZXh0KCk7CisgICAgICAgIHJldHVybiAhbm9kZUlzVXNlclNlbGVj
dE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgaW5SZW5kZXJlZFRleHQoKTsKIAotICAgIGlmIChp
c1RhYmxlRWxlbWVudChub2RlKCkpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKCkpKQot
ICAgICAgICByZXR1cm4gKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgfHwgYXRMYXN0
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgp
LT5wYXJlbnROb2RlKCkpOworICAgIGlmIChpc1RhYmxlRWxlbWVudChkZXByZWNhdGVkTm9kZSgp
KSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJl
dHVybiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgp
LT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1s
VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzg2LDIxICs3ODYsMjEgQEAgYm9vbCBQ
b3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zs
b3coKSkgewogICAgICAgICBpZiAodG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmhlaWdodCgpIHx8
IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVu
ZGVyZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0
aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkg
JiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBv
c2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRp
bmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShub2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgIHJldHVybiBt
X2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFBvc2l0aW9uOjppblJlbmRlcmVkVGV4dCgpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzTnVsbCgpIHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICBp
ZiAoaXNOdWxsKCkgfHwgIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9k
ZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKQEAgLTgzMywxMCArODMzLDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KGMKIAogYm9vbCBQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3Rlcigp
IGNvbnN0CiB7Ci0gICAgaWYgKGlzTnVsbCgpIHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAg
ICBpZiAoaXNOdWxsKCkgfHwgIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKQEAgLTg2MCwxMSArODYwLDExIEBAIGJvb2wgUG9zaXRpb246OnJlbmRl
cnNJbkRpZmZlcmVudFBvc2l0aW8KICAgICBpZiAoaXNOdWxsKCkgfHwgcG9zLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9k
ZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QgKnBvc1JlbmRlcmVyID0gcG9zLm5vZGUoKS0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHBvc1JlbmRlcmVyID0gcG9zLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFwb3NSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC04NzIsMzIgKzg3MiwzMiBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJz
SW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHBvc1JlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChu
b2RlKCkgPT0gcG9zLm5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSkKKyAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKSA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKSkg
eworICAgICAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fb2Zmc2V0ID09IHBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCi0gICAgICAgIGlmICghbm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5ub2RlKCkt
PmlzVGV4dE5vZGUoKSkgeworICAgICAgICBpZiAoIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiAhcG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAg
ICAgaWYgKG1fb2Zmc2V0ICE9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChu
b2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIHBvcy5pc0NhbmRpZGF0ZSgpKQorICAgIGlmIChk
ZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3MuaXNDYW5kaWRhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHBvcy5ub2Rl
KCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCisgICAgaWYgKHBvcy5kZXBy
ZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBpc0NhbmRpZGF0ZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICBpZiAobm9kZSgpLT5lbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpKQorICAgIGlmIChkZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCkgIT0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobm9kZSgpLT5pc1RleHROb2RlKCkg
JiYgIWluUmVuZGVyZWRUZXh0KCkpCisgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiAhaW5SZW5kZXJlZFRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKHBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcG9zLmluUmVuZGVyZWRUZXh0KCkpCisg
ICAgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5pblJlbmRl
cmVkVGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgdGhpc1JlbmRlcmVk
T2Zmc2V0ID0gcmVuZGVyZWRPZmZzZXQoKTsKQEAgLTkxNiw4ICs5MTYsOCBAQCBib29sIFBvc2l0
aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgTE9HKEVkaXRpbmcsICJ0aGlzUmVu
ZGVyZWRPZmZzZXQ6ICAgICAgICAgJWRcbiIsIHRoaXNSZW5kZXJlZE9mZnNldCk7CiAgICAgTE9H
KEVkaXRpbmcsICJwb3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBwb3NSZW5kZXJl
ciwgYjIpOwogICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIs
IHBvc1JlbmRlcmVkT2Zmc2V0KTsKLSAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAg
ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChub2RlKCkpLCBjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KG5vZGUoKSkpOwotICAgIExPRyhFZGl0aW5nLCAicG9zIG5vZGUgbWluL21heDogICAg
ICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KHBvcy5ub2RlKCkpLCBjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KHBvcy5ub2RlKCkpKTsKKyAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAg
ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChkZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRN
YXhSZW5kZXJlZE9mZnNldChkZXByZWNhdGVkTm9kZSgpKSk7CisgICAgTE9HKEVkaXRpbmcsICJw
b3Mgbm9kZSBtaW4vbWF4OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLmRlcHJl
Y2F0ZWROb2RlKCkpLCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KHBvcy5kZXByZWNhdGVkTm9kZSgp
KSk7CiAgICAgTE9HKEVkaXRpbmcsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAogICAgIGlmICghYjEg
fHwgIWIyKSB7CkBAIC05MjgsMTMgKzkyOCwxMyBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5E
aWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChu
ZXh0UmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRo
aXNSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQobm9kZSgpKSAm
JiBwb3NSZW5kZXJlZE9mZnNldCA9PSAwKSB7CisgICAgaWYgKG5leHRSZW5kZXJlZEVkaXRhYmxl
KGRlcHJlY2F0ZWROb2RlKCkpID09IHBvcy5kZXByZWNhdGVkTm9kZSgpCisgICAgICAgICYmIHRo
aXNSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoZGVwcmVjYXRl
ZE5vZGUoKSkgJiYgIXBvc1JlbmRlcmVkT2Zmc2V0KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09
IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRoaXNSZW5kZXJlZE9mZnNldCA9PSAwICYmIHBvc1Jl
bmRlcmVkT2Zmc2V0ID09IChpbnQpY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3Mubm9kZSgpKSkg
eworICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0g
cG9zLmRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgJiYgIXRoaXNSZW5kZXJlZE9mZnNldCAmJiBw
b3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLmRlcHJl
Y2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0OCwx
MiArOTQ4LDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2kKICAg
ICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogICAgIAotICAgIGlm
ICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHVwc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRp
b24oYWZmaW5pdHkpOwotICAgIGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYubm9kZSgpLT5pblNh
bWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkpICYmIHByZXYubm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRleHQgKj4o
cHJldi5ub2RlKCkpLT5kYXRhKCk7CisgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgcHJldi5kZXBy
ZWNhdGVkTm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChkZXByZWNhdGVk
Tm9kZSgpKSAmJiBwcmV2LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICBTdHJpbmcgc3RyaW5nID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihwcmV2LmRlcHJlY2F0ZWROb2Rl
KCkpLT5kYXRhKCk7CiAgICAgICAgIFVDaGFyIGMgPSBzdHJpbmdbcHJldi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpXTsKICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNw
YWNlID8gKGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogaXNDb2xs
YXBzaWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9u
KHByZXYpKQpAQCAtMTA0NSwxMSArMTA0NSwxMSBAQCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1J
Z25vcmluZ0VkaXRpbmdCCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJv
eComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKICAgICBjYXJldE9mZnNl
dCA9IG1fb2Zmc2V0OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlKCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CiAKICAgICBpZiAoIXJlbmRlcmVyLT5pc1RleHQoKSkgewogICAgICAgICBpbmxp
bmVCb3ggPSAwOwotICAgICAgICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKCkp
ICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVz
Y2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkgeworICAgICAgICBpZiAoY2FuSGF2ZUNoaWxk
cmVuRm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3co
KSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJl
cikpIHsKICAgICAgICAgICAgIC8vIFRyeSBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24g
d2l0aCBwb3NzaWJseSBvcHBvc2l0ZSBlZGl0YWJpbGl0eS4gVGhpcyBoZWxwcyBpbiBjYXNlIHx0
aGlzfCBpcyBpbgogICAgICAgICAgICAgLy8gYW4gZWRpdGFibGUgYmxvY2sgYnV0IHN1cnJvdW5k
ZWQgYnkgbm9uLWVkaXRhYmxlIHBvc2l0aW9ucy4gSXQgYWN0cyB0byBuZWdhdGUgdGhlIGxvZ2lj
IGF0IHRoZSBiZWdpbm5pbmcKICAgICAgICAgICAgIC8vIG9mIFJlbmRlck9iamVjdDo6Y3JlYXRl
VmlzaWJsZVBvc2l0aW9uKCkuCkBAIC0xMjExLDcgKzEyMTEsNyBAQCB2b2lkIFBvc2l0aW9uOjpk
ZWJ1Z1Bvc2l0aW9uKGNvbnN0IGNoYXIqCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxcbiIsIG1zZyk7CiAgICAgZWxzZQotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRcbiIsIG1z
Zywgbm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIG5vZGUoKSwgbV9vZmZzZXQpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRcbiIs
IG1zZywgZGVwcmVjYXRlZE5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBkZXByZWNh
dGVkTm9kZSgpLCBtX29mZnNldCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xMjI3LDcgKzEy
MjcsNyBAQCB2b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBiCiAgICAgICAg
IHJlc3VsdCArPSAib2Zmc2V0ICI7CiAgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlciht
X29mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7Ci0gICAgICAgIG5vZGUoKS0+Zm9y
bWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKKyAgICAgICAgZGVwcmVjYXRlZE5vZGUoKS0+
Zm9ybWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CiAg
ICAgfQogICAgICAgICAgIApAQCAtMTI1NCw4ICsxMjU0LDggQEAgdm9pZCBQb3NpdGlvbjo6c2hv
d0FuY2hvclR5cGVBbmRPZmZzZXQoKQogCiB2b2lkIFBvc2l0aW9uOjpzaG93VHJlZUZvclRoaXMo
KSBjb25zdAogewotICAgIGlmIChub2RlKCkpIHsKLSAgICAgICAgbm9kZSgpLT5zaG93VHJlZUZv
clRoaXMoKTsKKyAgICBpZiAoYW5jaG9yTm9kZSgpKSB7CisgICAgICAgIGFuY2hvck5vZGUoKS0+
c2hvd1RyZWVGb3JUaGlzKCk7CiAgICAgICAgIHNob3dBbmNob3JUeXBlQW5kT2Zmc2V0KCk7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIGJlIG1vdmVkIG9mZiBv
ZiBub2RlKCksIG5vZGUoKSBpcyBub3QgYWx3YXlzIHRoZSBjb250YWluZXIgZm9yIHRoaXMgcG9z
aXRpb24uCiAgICAgLy8gRm9yIG5vZGVzIHdoaWNoIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2Rl
KCkpIHJldHVybnMgdHJ1ZSwgcG9zaXRpb25zIGxpa2UgW2lnbm9yZWROb2RlLCAwXQogICAgIC8v
IHdpbGwgYmUgdHJlYXRlZCBhcyBiZWZvcmUgaWdub3JlZE5vZGUgKHRodXMgbm9kZSgpIGlzIHJl
YWxseSBhZnRlciB0aGUgcG9zaXRpb24sIG5vdCBjb250YWluaW5nIGl0KS4KLSAgICBOb2RlKiBu
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOyB9CisgICAgTm9kZSogZGVw
cmVjYXRlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvck5vZGUuZ2V0KCk7IH0KIAogICAg
IC8vIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciBwb3NpdGlvbnMsIHVubGVzcwogICAgIC8vIHRoZSBwb3NpdGlvbiBpcyBhIGxlZ2FjeSBlZGl0
aW5nIHBvc2l0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCwxMSArMTM0LDExIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpmb3Jt
YXRTZWwKICAgICAgICAgLy8gaW5kZW50SW50b0Jsb2NrcXVvdGUgY291bGQgbW92ZSBtb3JlIHRo
YW4gb25lIHBhcmFncmFwaCBpZiB0aGUgcGFyYWdyYXBoCiAgICAgICAgIC8vIGlzIGluIGEgbGlz
dCBpdGVtIG9yIGEgdGFibGUuIEFzIGEgcmVzdWx0LCBlbmRBZnRlclNlbGVjdGlvbiBjb3VsZCBy
ZWZlciB0byBhIHBvc2l0aW9uCiAgICAgICAgIC8vIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQu
Ci0gICAgICAgIGlmIChlbmRBZnRlclNlbGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJT
ZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAg
aWYgKGVuZEFmdGVyU2VsZWN0aW9uLmlzTm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVjdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBtb3ZlUGFyYWdy
YXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpCisgICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBtb3ZlUGFy
YWdyYXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKQogICAgICAgICAvLyBJZiBzb21laG93IHdlIGRpZCwgcmV0
dXJuIHRvIHByZXZlbnQgY3Jhc2hlcy4KLSAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5p
c05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51
bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgp
LT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xODIsOCArMTgyLDggQEAgdm9pZCBBcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KTsKICAgICBib29sIGlz
U3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7CiAgICAgaWYgKHN0YXJ0U3R5bGUpIHsKLSAg
ICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4
dE5vZGUoZW5kKSAmJiBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKTsKLSAgICAgICAgYm9vbCBp
c1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgc3RhcnQubm9kZSgpID09IG1f
ZW5kT2ZMYXN0UGFyYWdyYXBoLm5vZGUoKTsKKyAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5v
ZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5kZXByZWNh
dGVkTm9kZSgpID09IGVuZC5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBib29sIGlzU3RhcnRB
bmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1Rl
eHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpID09
IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAgLy8gQXZv
aWQgb2J0YW5pbmluZyB0aGUgc3RhcnQgb2YgbmV4dCBwYXJhZ3JhcGggZm9yIHN0YXJ0CiAgICAg
ICAgIGlmIChzdGFydFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBpc05ld0xpbmVBdFBvc2l0
aW9uKHN0YXJ0KSAmJiAhaXNOZXdMaW5lQXRQb3NpdGlvbihzdGFydC5wcmV2aW91cygpKSAmJiBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+IDApCkBAIC0xOTIsMTUgKzE5MiwxNSBAQCB2
b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAgIC8vIElmIHN0
YXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAgICAgICBpZiAo
IXN0YXJ0U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldEluQ29udGFp
bmVyTm9kZSgpID4gMCkgewogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19j
YXN0PFRleHQqPihzdGFydC5ub2RlKCkpLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBzdGFy
dCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICAgICAgc3BsaXRU
ZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSksIHN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2Rl
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+
PSBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUo
KSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgICAgIGVuZCA9IFBvc2l0aW9u
KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5v
ZGUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIG1fZW5k
T2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24obV9lbmRPZkxhc3RQYXJhZ3JhcGgubm9kZSgpLCBt
X2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0T2Zmc2V0
LAorICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24obV9lbmRP
Zkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUoKSwgbV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIwOCwxMyArMjA4LDEzIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
OjpyYW5nZUZvclAKIAogICAgIFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZF
bmNsb3NpbmdUZXh0Tm9kZShlbmQpOwogICAgIGlmIChlbmRTdHlsZSkgewotICAgICAgICBib29s
IGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5kLm5vZGUoKSA9PSBtX2Vu
ZE9mTGFzdFBhcmFncmFwaC5ub2RlKCk7CisgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQ
YXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5k
T2ZMYXN0UGFyYWdyYXBoKSAmJiBlbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBh
cmFncmFwaC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBl
bmQgb2YgbGluZSBpZiB3ZSdyZSBhdCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVu
ZFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBzdGFydCA9PSBlbmQKICAgICAgICAgICAgICYm
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENo
YXJhY3Rlck9mZnNldCgpKSB7CiAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpc05ld0xpbmVBdFBvc2l0aW9u
KGVuZC5wcmV2aW91cygpKSAmJiBpc05ld0xpbmVBdFBvc2l0aW9uKGVuZCkpCi0gICAgICAgICAg
ICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kT2Zmc2V0ICsgMSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRp
b24oZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZE9mZnNldCArIDEsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0UGFy
YWdyYXBoT25TYW1lTm9kZSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gbV9lbmRP
Zkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAg
bV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBlbmQ7CiAgICAgICAgIH0KQEAgLTIyMiwxNyArMjIyLDE3
IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgLy8g
SWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAgICAgICBp
ZiAoIWVuZFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkKICAgICAgICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVu
ZC5jb250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7Ci0gICAgICAgICAgICBz
cGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8
VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkKLSAgICAgICAgICAg
ICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kLmRl
cHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgICAgIGlmIChpc0Vu
ZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gZW5kLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFn
cmFwaCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFzdFBvc2l0aW9u
SW5Ob2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9
IFBvc2l0aW9uKGVuZC5ub2RlKCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIC0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLAorICAgICAgICAgICAgICAg
ICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgp
LCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQubm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25J
bk5vZGUoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgU3R5
bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKENTU1N0eWxlRGVjbGFyYQogCiB2b2lkIFN0eWxlQ2hhbmdl
Ojppbml0KFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwb3NpdGlvbi5ub2Rl
KCkgPyBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCkgOiAwOworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHBvc2l0aW9uLmFuY2hvck5vZGUoKSA/IHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+ZG9j
dW1lbnQoKSA6IDA7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU3R5bGVDaGFuZ2U6Omlu
aXQoUGFzc1JlZlB0cjxDU1NTdHkKICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9jdW1lbnQs
IG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+dXNlRml4ZWRGb250RGVmYXVsdFNp
emUoKSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFjZSBzdHlsZSBpbiBhIHRhYiBz
cGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNlLgotICAgIGlmIChpc1RhYlNw
YW5UZXh0Tm9kZShwb3NpdGlvbi5ub2RlKCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0aW9uLm5v
ZGUoKSkpKQorICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpKSB8fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAg
ICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsK
IAogICAgIC8vIElmIHVuaWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHlsZSBhbmQg
ZGlyZWN0aW9uIGlzIG5vdCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHlsZS4KQEAg
LTU4MSw3ICs1ODEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
CiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50cyB1c2luZyB0
aGVpciBpbmRpY2VzIGluIHRoZSBkb2N1bWVudCwgc2luY2UKICAgICAvLyBhZGRCbG9ja1N0eWxl
SWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVtb3ZlIHRoZXNlIGVuZHBv
aW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0
YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBOb2RlKiBzY29wZSA9IGhpZ2hl
c3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5v
ZGUqIHNjb3BlID0gaGlnaGVzdEFuY2VzdG9yKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVT
dGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBS
ZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBv
c2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CkBAIC01OTMsNyArNTkzLDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKAogICAgIHdoaWxlIChwYXJh
Z3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBwYXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsK
ICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUtPnN0eWxlKCksIHBhcmFncmFw
aFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5
bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBibG9jayA9IGVuY2xvc2luZ0Jsb2Nr
KHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
ICAgICAgICBpZiAoIW1fcmVtb3ZlT25seSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBuZXdCbG9jayA9IG1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShw
YXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgICAgICAgICBpZiAobmV3
QmxvY2spCkBAIC02MzYsMTMgKzYzNiwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9uCiAgICAgfQogCiAgICAgLy8gSm9pbiB1cCBhbnkgYWRqYWNlbnQgdGV4dCBu
b2Rlcy4KLSAgICBpZiAoc3RhcnQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgam9p
bkNoaWxkVGV4dE5vZGVzKHN0YXJ0Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsK
KyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAg
IGpvaW5DaGlsZFRleHROb2RlcyhzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCks
IHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAg
ZW5kID0gZW5kUG9zaXRpb24oKTsKICAgICB9Ci0gICAgaWYgKGVuZC5ub2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiBzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmQubm9kZSgpLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgam9pbkNoaWxkVGV4dE5vZGVzKGVuZC5ub2RlKCktPnBhcmVudE5v
ZGUoKSwgc3RhcnQsIGVuZCk7CisgICAgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHRO
b2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgam9pbkNoaWxkVGV4dE5vZGVz
KGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0LCBlbmQpOwogICAgICAg
ICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsK
ICAgICB9CkBAIC02NjQsMTMgKzY2NCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9uCiAgICAgLy8gSWYgdGhlIGVuZCBub2RlIGlzIGJlZm9yZSB0aGUgc3RhcnQg
bm9kZSAoY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBlbmQgbm9kZSBpcwogICAgIC8vIGFuIGFuY2Vz
dG9yIG9mIHRoZSBzdGFydCBub2RlKSwgd2UgZ2F0aGVyIG5vZGVzIHVwIHRvIHRoZSBuZXh0IHNp
Ymxpbmcgb2YgdGhlIGVuZCBub2RlCiAgICAgTm9kZSAqYmV5b25kRW5kOwotICAgIGlmIChzdGFy
dC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5ub2RlKCkpKQotICAgICAgICBiZXlvbmRFbmQg
PSBlbmQubm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgaWYgKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICAg
ICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKICAgICBlbHNlCi0gICAgICAgIGJleW9uZEVuZCA9IGVuZC5ub2RlKCktPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZl
cnNlTmV4dE5vZGUoKTsKICAgICAKICAgICBzdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7IC8vIE1v
dmUgdXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50IHNwYW5zLgotICAg
IE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBz
dGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0
Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiByYW5nZSBkb2VzIG5vdCBpbmNsdWRl
IGl0cyBjaGFyYWN0ZXJzLgogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKIApAQCAtODc0LDI1ICs4NzQsMjUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIHNwbGl0IHRoZSBzdGFydCBub2RlIGFuZCBjb250
YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMgaW5zaWRlIG9mIGl0CiAgICAg
Ym9vbCBzcGxpdFN0YXJ0ID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKHN0YXJ0KTsK
ICAgICBpZiAoc3BsaXRTdGFydCkgewotICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVu
dChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQorICAgICAg
ICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJl
bnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgpKSkKICAgICAgICAgICAgIHNwbGl0VGV4dEVsZW1l
bnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzcGxpdFRl
eHRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgc3RhcnREdW1teVNwYW5BbmNl
c3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICBz
dGFydER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIH0KIAogICAgIC8vIHNwbGl0IHRoZSBlbmQgbm9kZSBhbmQg
Y29udGFpbmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbnNpZGUgb2YgaXQKICAg
ICBib29sIHNwbGl0RW5kID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGVuZCk7CiAg
ICAgaWYgKHNwbGl0RW5kKSB7Ci0gICAgICAgIGlmIChzaG91bGRTcGxpdFRleHRFbGVtZW50KGVu
ZC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQorICAgICAgICBpZiAo
c2hvdWxkU3BsaXRUZXh0RWxlbWVudChlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50RWxlbWVu
dCgpLCBzdHlsZS0+c3R5bGUoKSkpCiAgICAgICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQo
c3RhcnQsIGVuZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNwbGl0VGV4dEF0RW5kKHN0
YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5k
ID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNw
YW5BbmNlc3RvckZvck5vZGUoZW5kLm5vZGUoKSk7CisgICAgICAgIGVuZER1bW15U3BhbkFuY2Vz
dG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICB9CiAKICAgICAvLyBSZW1vdmUgc3R5bGUgZnJvbSB0aGUgc2VsZWN0aW9uLgpAQCAtOTA5LDEw
ICs5MDksMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAg
ICAgICBzdHlsZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBM
ZWF2ZSBhbG9uZSBhbiBhbmNlc3RvciB0aGF0IHByb3ZpZGVzIHRoZSBkZXNpcmVkIHNpbmdsZSBs
ZXZlbCBlbWJlZGRpbmcsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgSFRNTEVsZW1lbnQqIHN0
YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoc3RhcnQu
bm9kZSgpLCB0cnVlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGVuZFVu
c3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKGVuZC5ub2RlKCks
IGZhbHNlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgcmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xv
c2luZ0Jsb2NrKHN0YXJ0Lm5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3IpOwotICAgICAgICBy
ZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSwgZW5kVW5zcGxpdEFu
Y2VzdG9yKTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIHN0YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3Bs
aXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgdHJ1ZSwg
dGV4dERpcmVjdGlvbik7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbmRVbnNwbGl0QW5jZXN0b3Ig
PSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZmFs
c2UsIHRleHREaXJlY3Rpb24pOworICAgICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5n
QmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3IpOworICAg
ICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLmRlcHJlY2F0ZWROb2Rl
KCksIGVuZFVuc3BsaXRBbmNlc3Rvcik7CiAKICAgICAgICAgLy8gQXZvaWQgcmVtb3ZpbmcgdGhl
IGRpciBhdHRyaWJ1dGUgYW5kIHRoZSB1bmljb2RlLWJpZGkgYW5kIGRpcmVjdGlvbiBwcm9wZXJ0
aWVzIGZyb20gdGhlIHVuc3BsaXQgYW5jZXN0b3JzLgogICAgICAgICBQb3NpdGlvbiBlbWJlZGRp
bmdSZW1vdmVTdGFydCA9IHJlbW92ZVN0YXJ0OwpAQCAtOTU5LDggKzk1OSw4IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9BcHBseSA9IHN0eWxlLT5pc0VtcHR5KCkgPyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkgOiBzdHlsZS0+c3R5bGUoKTsKICAgICBpZiAo
dW5pY29kZUJpZGkpIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNvZGUtYmlk
aSBhbmQgZGlyZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBhbHJlYWR5
IGhhdmUgdGhlbS4KLSAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVt
YmVkZGluZ0FuY2VzdG9yKHN0YXJ0Lm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQubm9kZSgp
KSk7Ci0gICAgICAgIE5vZGUqIGVtYmVkZGluZ0VuZE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5j
ZXN0b3IoZW5kLm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSkpOworICAgICAgICBO
b2RlKiBlbWJlZGRpbmdTdGFydE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0b3Ioc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkp
OworICAgICAgICBOb2RlKiBlbWJlZGRpbmdFbmROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2Vz
dG9yKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmNsb3NpbmdCbG9jayhlbmQuZGVwcmVjYXRlZE5v
ZGUoKSkpOwogCiAgICAgICAgIGlmIChlbWJlZGRpbmdTdGFydE5vZGUgfHwgZW1iZWRkaW5nRW5k
Tm9kZSkgewogICAgICAgICAgICAgUG9zaXRpb24gZW1iZWRkaW5nQXBwbHlTdGFydCA9IGVtYmVk
ZGluZ1N0YXJ0Tm9kZSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoZW1iZWRkaW5nU3RhcnRO
b2RlKSA6IHN0YXJ0OwpAQCAtOTg3LDIyICs5ODcsMjIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFu
ZEFwcGx5SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogc3Rh
cnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCk7CiAKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSBjYXJldE1heE9mZnNldChzdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CiAgICAgICAgIGlmICghc3RhcnROb2RlIHx8IGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKTsKLSAgICBpZiAo
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoZW5kLm5vZGUo
KSkpCi0gICAgICAgIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
aWYgKGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogCiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hv
dWxkIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24gb24gYSBSYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBi
cgogICAgIC8vIGlmIHRoZXkgd2FudCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBlbXB0eSBsaW5lLgot
ICAgIGlmIChzdGFydCA9PSBlbmQgJiYgc3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkK
LSAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5ub2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsK
KyAgICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpKQorICAgICAgICBwYXN0RW5kTm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKIAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgZnVs
bHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxseSBzZWxl
Y3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxhcmdlIG9u
IDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUg
Zm9udCBlbGVtZW50IGluIG91ciBydW4KQEAgLTE0NzgsOCArMTQ3OCw4IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3RO
dWxsKCkpOwogICAgIEFTU0VSVChlbmQuaXNOb3ROdWxsKCkpOwotICAgIEFTU0VSVChzdGFydC5u
b2RlKCktPmluRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVuZC5ub2RlKCktPmluRG9jdW1lbnQo
KSk7CisgICAgQVNTRVJUKHN0YXJ0LmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoZW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoY29tcGFy
ZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4
dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHkgPSBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpIDogMDsKQEAg
LTE0OTcsMTggKzE0OTcsMTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5l
U3R5bAogICAgICAgICAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA9PSBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKICAg
ICAgICAgcHVzaERvd25TdGFydCA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHB1c2hE
b3duU3RhcnQpOwogICAgIFBvc2l0aW9uIHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFtKCk7Ci0g
ICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hEb3duU3Rh
cnQubm9kZSgpKTsKLSAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQo
KSwgcHVzaERvd25FbmQubm9kZSgpKTsKKyAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9k
ZShzdHlsZS5nZXQoKSwgcHVzaERvd25TdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBwdXNo
RG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25FbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CiAKICAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJsZXMgc3RvcmUgdGhlIHBv
c2l0aW9ucyB1c2VkIHRvIHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBhZnRlciBzdHlsZSByZW1v
dmFsCiAgICAgLy8gdGFrZXMgcGxhY2UuIFRoaXMgd2lsbCBoZWxwIGNhbGxlcnMgdG8gcmVjb2du
aXplIHdoZW4gZWl0aGVyIHRoZSBzdGFydCBub2RlIG9yIHRoZSBlbmQgbm9kZQogICAgIC8vIGFy
ZSByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0aGUgd29yayBvZiB0aGlzIGZ1bmN0
aW9uLgotICAgIC8vIElmIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIGhhcyBwcnVuZWQg
c3RhcnQubm9kZSgpIG9yIGVuZC5ub2RlKCksCisgICAgLy8gSWYgcHVzaERvd25JbmxpbmVTdHls
ZUFyb3VuZE5vZGUgaGFzIHBydW5lZCBzdGFydC5kZXByZWNhdGVkTm9kZSgpIG9yIGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLAogICAgIC8vIHVzZSBwdXNoRG93blN0YXJ0IG9yIHB1c2hEb3duRW5kIGlu
c3RlYWQsIHdoaWNoIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIHdvbid0IHBydW5lLgog
ICAgIFBvc2l0aW9uIHMgPSBzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpID8gcHVz
aERvd25TdGFydCA6IHN0YXJ0OwogICAgIFBvc2l0aW9uIGUgPSBlbmQuaXNOdWxsKCkgfHwgZW5k
LmlzT3JwaGFuKCkgPyBwdXNoRG93bkVuZCA6IGVuZDsKIAotICAgIE5vZGUqIG5vZGUgPSBzdGFy
dC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAg
d2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZUZ1
bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpIHsKQEAgLTE1MjQsMTMgKzE1MjQsMTMgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogCiAgICAgICAgICAgICBy
ZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLmdldCgpLCBlbGVtLmdldCgpLCBSZW1v
dmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIGlmICghZWxl
bS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09IGVsZW0p
IHsKKyAgICAgICAgICAgICAgICBpZiAocy5kZXByZWNhdGVkTm9kZSgpID09IGVsZW0pIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxl
Y3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBzdGFydAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8g
MC4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHMuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9u
OjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIHx8IHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPD0g
MCk7CiAgICAgICAgICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bmV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlLm5v
ZGUoKSA9PSBlbGVtKSB7CisgICAgICAgICAgICAgICAgaWYgKGUuZGVwcmVjYXRlZE5vZGUoKSA9
PSBlbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBoYXZlIGJl
ZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBpcyBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAg
ICAgIC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0IGlzIGNsZWFyIHdlIGNhbiBzZXQgdGhlIG5ldyBl
IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWF4IHJhbmdlIG9mZnNldCBv
ZiBwcmV2LgpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bAogICAgICAgICAgICAgICAgICAgICBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihjaGlsZE5vZGUuZ2V0KCksIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSkKKyAgICAgICAg
aWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CiAgICAgfQpAQCAtMTU4Myw5ICsxNTgzLDkgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydAogICAgIGVsc2UKICAgICAgICAg
bmV3RW5kID0gZW5kOwogCi0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFy
dC5ub2RlKCkpOworICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSk7Ci0gICAgdXBkYXRlU3RhcnRFbmQoZmlyc3RQb3NpdGlvbkluTm9kZShz
dGFydC5ub2RlKCkpLCBuZXdFbmQpOworICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25J
bk5vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSksIG5ld0VuZCk7CiB9CiAKIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCkKQEAgLTE1OTMsNyArMTU5Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnNwbGl0VGV4dEF0RW5kKGMKICAgICBBU1NFUlQoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRl
U3RhcnQgPSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKTsK
LSAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQubm9kZSgpKTsKKyAgICBU
ZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogCiAg
ICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsKQEAgLTE2MTIsOSAr
MTYxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQKICAgICBl
bHNlCiAgICAgICAgIG5ld0VuZCA9IGVuZDsKIAotICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oc3RhcnQubm9kZSgpKTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5n
RWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICB1cGRh
dGVTdGFydEVuZChQb3NpdGlvbihzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQubm9k
ZSgpLT5ub2RlSW5kZXgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5l
d0VuZCk7CisgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+cGFyZW50Tm9kZSgpLCBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5ub2RlSW5kZXgoKSwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5ld0VuZCk7CiB9CiAKIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCkBAIC0xNjIyLDcgKzE2MjIsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgQVNTRVJUKGVuZC5hbmNob3JUeXBl
KCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZVN0YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgp
KTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwgZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wYXJl
bnROb2RlKCktPnByZXZpb3VzU2libGluZygpLT5sYXN0Q2hpbGQoKTsKQEAgLTE3MTMsOSArMTcx
Myw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHIKICAgICAgICAg
bWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIGVsZW1lbnQpOwogCiAgICAg
ICAgIGludCBzdGFydE9mZnNldEFkanVzdG1lbnQgPSBzdGFydENoaWxkLT5ub2RlSW5kZXgoKTsK
LSAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydE5vZGUgPT0gZW5kLm5vZGUo
KSA/IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA6IDA7CisgICAgICAgIGludCBlbmRPZmZzZXRBZGp1
c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnRPZmZzZXRB
ZGp1c3RtZW50IDogMDsKICAgICAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2Rl
LCBzdGFydE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLAotICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKTsgCisgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0
aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAr
IGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
KTsgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTczMSwxMSArMTczMSwxMSBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAgICAgICAgIGlmIChl
bmRPZmZzZXQgPCBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIHBhcmVudExhc3RPZmZzZXQgPSBlbmQubm9kZSgp
LT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZXMoKS0+bGVuZ3RoKCkgLSAxOwotICAgICAgICBpZiAo
ZW5kLm5vZGUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdW5zaWduZWQgcGFyZW50TGFzdE9m
ZnNldCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZXMoKS0+
bGVuZ3RoKCkgLSAxOworICAgICAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCktPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZW5kTm9kZSA9IGVu
ZC5ub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgZW5kTm9kZSA9IGVuZC5kZXByZWNhdGVk
Tm9kZSgpLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGVuZE9mZnNldCA9IHBhcmVudExhc3RPZmZz
ZXQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAog
ICAgIC8vIEZpbmQgdGhlIHRvcC1tb3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQuCiAgICAg
RWxlbWVudCogdG9wQmxvY2txdW90ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2RlKiBub2Rl
ID0gcG9zLm5vZGUoKS0+cGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2Rl
KCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKICAgICAgICAgICAgIHRvcEJsb2NrcXVv
dGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQpAQCAtMTAzLDExICsxMDMs
MTEgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9z
ID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3
ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKLSAgICB3aGlsZSAo
aXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVz
dE1haWxCbG9ja3F1b3RlKHBvcy5ub2RlKCkpKSkKKyAgICB3aGlsZSAoaXNGaXJzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KHBvcy5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwog
ICAgIAogICAgIC8vIHN0YXJ0Tm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5lZWQgdG8g
bW92ZSB0byB0aGUgbmV3IGJsb2NrcXVvdGUuCi0gICAgTm9kZSogc3RhcnROb2RlID0gcG9zLm5v
ZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAg
ICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUu
CiAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydE5vZGVBdCgKICAgICAvLyBGb3IgZWRpdGluZyBwb3NpdGlvbnMgbGlrZSBbdGFibGUs
IDBdLCBpbnNlcnQgYmVmb3JlIHRoZSB0YWJsZSwKICAgICAvLyBsaWtld2lzZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMsIGJycywgZXRjLgogICAgIFBvc2l0aW9uIHAgPSBlZGl0aW5nUG9zaXRpb24u
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogcmVmQ2hpbGQgPSBwLm5vZGUo
KTsKKyAgICBOb2RlKiByZWZDaGlsZCA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpbnQgb2Zm
c2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIAogICAgIGlmIChjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKHJlZkNoaWxkKSkgewpAQCAtMzQyLDE4ICszNDIsMTggQEAgdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbgogCiBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9z
KQogewotICAgIGlmICghaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpCisgICAgaWYgKCFp
c1RhYlNwYW5UZXh0Tm9kZShwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBw
b3M7CiAgICAgCi0gICAgTm9kZSogdGFiU3BhbiA9IHRhYlNwYW5Ob2RlKHBvcy5ub2RlKCkpOwor
ICAgIE5vZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgCi0gICAgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0TWluT2Zm
c2V0KHBvcy5ub2RlKCkpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8
PSBjYXJldE1pbk9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBw
b3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKICAgICAgICAgCi0gICAgaWYgKHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHBvcy5ub2RlKCkp
KQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNl
dChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QWZ0ZXJOb2RlKHRhYlNwYW4pOwogCi0gICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
KHN0YXRpY19jYXN0PFRleHQgKj4ocG9zLm5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8
VGV4dCAqPihwb3MuZGVwcmVjYXRlZE5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUodGFiU3Bhbik7CiB9
CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFu
Y2VXaGl0CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXNwYWNlQXRQ
b3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0g
cG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7ICAgIApA
QCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdo
aXRlcwogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3ModmlzaWJsZVBvcy5w
cmV2aW91cygpKTsKICAgICBQb3NpdGlvbiBwcmV2aW91cyhwcmV2aW91c1Zpc2libGVQb3MuZGVl
cEVxdWl2YWxlbnQoKSk7CiAgICAgCi0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHBy
ZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwcmV2aW91cy5ub2RlKCktPmlz
VGV4dE5vZGUoKSAmJiAhcHJldmlvdXMubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAg
ICAgcmVwbGFjZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLm5vZGUoKSks
IHByZXZpb3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VT
dHJpbmcoKSk7Ci0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQb3MuY2hh
cmFjdGVyQWZ0ZXIoKSkgJiYgcG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvc2l0
aW9uLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
KHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5ub2RlKCkpLCBwb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgIGlmIChp
c0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIo
KSkgJiYgcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKKyAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpLCBw
cmV2aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkpOworICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9zLmNoYXJh
Y3RlckFmdGVyKCkpICYmIHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAm
JiAhcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtp
bmdTcGFjZVN0cmluZygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxh
bmNlV2hpdGVzcGFjZSgpCkBAIC02MDAsMTUgKzYwMCwxNSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5leHQ7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQubm9kZSgpOyBub2RlOyBub2RlID0gbmV4dCkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5v
ZGUgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwotICAgICAgICAgICAgaW50IHN0YXJ0T2Zm
c2V0ID0gbm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIDogMDsKLSAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVuZC5ub2RlKCkg
PyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGludD4odGV4dE5v
ZGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG5vZGUgPT0gc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiAw
OworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2Rl
KCkgPyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGludD4odGV4
dE5vZGUtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHRl
eHROb2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBpZiAo
bm9kZSA9PSBlbmQubm9kZSgpKQorICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTYzOCw3ICs2MzgsNyBAQCBQ
YXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2NrRmxvdyB8fCBpc0lubGluZUZsb3cgd2hl
biBkZWxldGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0LgotICAgIEFTU0VSVChwb3Mubm9kZSgp
LT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQocG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQmxvY2tQbGFjZWhv
bGRlckVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUF0KHBsYWNlaG9sZGVyLCBw
b3MpOwpAQCAtNzE0LDI4ICs3MTQsMjYgQEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFBlcmZvcm0gc29tZSBjaGVj
a3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3JrIGluIHRoaXMgZnVuY3Rpb24uCi0g
ICAgaWYgKGlzQmxvY2sodXBzdHJlYW1TdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKGlzQmxvY2so
dXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAvLyBJZiB0aGUgYmxv
Y2sgaXMgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgYWx3YXlzIG1vdmUgY29udGVudCB0byBh
IG5ldyBibG9jaywKICAgICAgICAgLy8gc2luY2UgaXQgaXMgaWxsZWdhbCB0byBtb2RpZnkgYXR0
cmlidXRlcyBvbiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGZvciBlZGl0aW5nLgotICAgICAg
ICBpZiAodXBzdHJlYW1TdGFydC5ub2RlKCkgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24odXBz
dHJlYW1TdGFydCkpIHsKKyAgICAgICAgaWYgKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSA9PSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbih1cHN0cmVhbVN0YXJ0KSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlIGJsb2NrIGlzIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgYW5kIGl0IGNv
bnRhaW5zIG5vIHZpc2libGUgY29udGVudCwgY3JlYXRlIGEgbmV3CiAgICAgICAgICAgICAvLyBi
bG9jayBidXQgZG9uJ3QgdHJ5IGFuZCBtb3ZlIGNvbnRlbnQgaW50byBpdCwgc2luY2UgdGhlcmUn
cyBub3RoaW5nIGZvciBtb3ZlUGFyYWdyYXBocyB0byBtb3ZlLgotICAgICAgICAgICAgaWYgKCFQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodXBz
dHJlYW1TdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgaWYgKCFQb3NpdGlv
bjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodXBzdHJlYW1T
dGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRBdCh1cHN0cmVhbVN0YXJ0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkpIHsKLSAgICAgICAg
ICAgIGlmICghdXBzdHJlYW1FbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZih1cHN0cmVhbVN0YXJ0
Lm5vZGUoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXVwc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCktPmlzRGVzY2VuZGFudE9mKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyYWdyYXBoIGVuZCBpcyBhIGRlc2NlbmRhbnQg
b2YgcGFyYWdyYXBoIHN0YXJ0LCB0aGVuIHdlIG5lZWQgdG8gcnVuCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbi4gSWYgbm90LCB3ZSBjYW4gYmFpbCBoZXJlLgog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGVuY2xvc2luZ0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkgIT0gdXBzdHJl
YW1TdGFydC5ub2RlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChlbmNsb3NpbmdCbG9jayh1cHN0
cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSAhPSB1cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSB2aXNpYmxlRW5kLiAgSXQgbXVzdCBiZSBhbiBhbmNl
c3RvciBvZiB0aGUgcGFyYWdyYXBoIHN0YXJ0LgogICAgICAgICAgICAgLy8gV2UgY2FuIGJhaWwg
YXMgd2UgaGF2ZSBhIGZ1bGwgYmxvY2sgdG8gd29yayB3aXRoLgotICAgICAgICAgICAgQVNTRVJU
KHVwc3RyZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdCbG9jayh1cHN0
cmVhbUVuZC5ub2RlKCkpKSk7CisgICAgICAgICAgICBBU1NFUlQodXBzdHJlYW1TdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdCbG9jayh1cHN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkpOwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoaXNFbmRPZkRvY3VtZW50KHZpc2libGVFbmQpKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNFbmRPZkRvY3VtZW50KHZpc2libGVFbmQpKSB7CiAgICAgICAgICAgICAvLyBB
dCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gV2UgY2FuIGJhaWwgaGVyZSBhcyB3ZWxsLgogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTc0Myw3ICs3NDEsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV3
QmxvY2sgPSBpbnNlcnROZXdEZWZhdWx0UGFyYWdyYXBoRWxlbWVudEF0KHVwc3RyZWFtU3RhcnQp
OwogCi0gICAgYm9vbCBlbmRXYXNCciA9IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOworICAgIGJvb2wgZW5kV2FzQnIgPSB2aXNp
YmxlUGFyYWdyYXBoRW5kLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFn
TmFtZShiclRhZyk7CiAKICAgICBtb3ZlUGFyYWdyYXBocyh2aXNpYmxlUGFyYWdyYXBoU3RhcnQs
IHZpc2libGVQYXJhZ3JhcGhFbmQsIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2Rl
KG5ld0Jsb2NrLmdldCgpKSkpOwogCkBAIC03NzgsMTQgKzc3NiwxNCBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwCiAgICAgYXBwZW5kTm9kZSh0b3BOb2RlLCBibG9j
a0VsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBsYXN0Tm9kZSA9IHRvcE5vZGU7CiAKLSAgICBp
ZiAoc3RhcnQubm9kZSgpICE9IG91dGVyTm9kZSkgeworICAgIGlmIChzdGFydC5kZXByZWNhdGVk
Tm9kZSgpICE9IG91dGVyTm9kZSkgewogICAgICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gYW5j
ZXN0b3JzOwogICAgICAgICAKICAgICAgICAgLy8gSW5zZXJ0IGVhY2ggbm9kZSBmcm9tIGlubmVy
Tm9kZSB0byBvdXRlck5vZGUgKGV4Y2x1ZGVkKSBpbiBhIGxpc3QuCi0gICAgICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0Lm5vZGUoKTsgbiAmJiBuICE9IG91dGVyTm9kZTsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbiAm
JiBuICE9IG91dGVyTm9kZTsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGFuY2Vz
dG9ycy5hcHBlbmQobik7CiAKLSAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBiZXR3ZWVuIHN0
YXJ0Lm5vZGUoKSBhbmQgb3V0ZXJCbG9jay4KKyAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBi
ZXR3ZWVuIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgYW5kIG91dGVyQmxvY2suCiAKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGFuY2VzdG9ycy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7CiAgICAgICAg
ICAgICBOb2RlKiBpdGVtID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKQEAgLTc5NiwyNSArNzk0
LDI1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXAKICAgICB9CiAK
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgcGFyYWdyYXBocyB3aXRoIG1vcmUgdGhhbiBvbmUg
bm9kZSwKLSAgICAvLyBjbG9uaW5nIGFsbCB0aGUgc2libGluZ3MgdW50aWwgZW5kLm5vZGUoKSBp
cyByZWFjaGVkLgorICAgIC8vIGNsb25pbmcgYWxsIHRoZSBzaWJsaW5ncyB1bnRpbCBlbmQuZGVw
cmVjYXRlZE5vZGUoKSBpcyByZWFjaGVkLgogICAgIAotICAgIGlmIChzdGFydC5ub2RlKCkgIT0g
ZW5kLm5vZGUoKSAmJiAhc3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQubm9kZSgpKSkg
eworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICE9IGVuZC5kZXByZWNhdGVkTm9kZSgp
ICYmICFzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKICAgICAgICAgLy8gSWYgZW5kIGlzIG5vdCBhIGRlc2NlbmRhbnQgb2Ygb3V0
ZXJOb2RlIHdlIG5lZWQgdG8KICAgICAgICAgLy8gZmluZCB0aGUgZmlyc3QgY29tbW9uIGFuY2Vz
dG9yIGFuZCBhZGp1c3QgdGhlIGluc2VydGlvbgogICAgICAgICAvLyBwb2ludCBhY2NvcmRpbmds
eS4KLSAgICAgICAgd2hpbGUgKCFlbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihvdXRlck5vZGUp
KSB7CisgICAgICAgIHdoaWxlICghZW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KG91dGVyTm9kZSkpIHsKICAgICAgICAgICAgIG91dGVyTm9kZSA9IG91dGVyTm9kZS0+cGFyZW50
Tm9kZSgpOwogICAgICAgICAgICAgdG9wTm9kZSA9IHRvcE5vZGUtPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0Lm5vZGUoKS0+dHJhdmVyc2VO
ZXh0U2libGluZyhvdXRlck5vZGUpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRl
ck5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAobi0+cGFyZW50Tm9kZSgpICE9IHN0YXJ0Lm5vZGUo
KS0+cGFyZW50Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9kZSk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKG91dGVyTm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChuLT5wYXJlbnROb2Rl
KCkgIT0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKQogICAgICAgICAgICAg
ICAgIGxhc3ROb2RlID0gdG9wTm9kZS0+bGFzdENoaWxkKCk7CiAKICAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBjbG9uZWROb2RlID0gbi0+Y2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKGNsb25lZE5vZGUsIGxhc3ROb2RlKTsKICAgICAgICAgICAgIGxhc3ROb2Rl
ID0gY2xvbmVkTm9kZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobiA9PSBlbmQubm9kZSgp
IHx8IGVuZC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG4pKQorICAgICAgICAgICAgaWYgKG4gPT0g
ZW5kLmRlcHJlY2F0ZWROb2RlKCkgfHwgZW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKG4pKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtODMz
LDcgKzgzMSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckQKICAg
ICBpZiAoaXNTdGFydE9mUGFyYWdyYXBoKGNhcmV0QWZ0ZXJEZWxldGUpICYmIGlzRW5kT2ZQYXJh
Z3JhcGgoY2FyZXRBZnRlckRlbGV0ZSkpIHsKICAgICAgICAgLy8gTm90ZTogV2Ugd2FudCB0aGUg
cmlnaHRtb3N0IGNhbmRpZGF0ZS4KICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBjYXJldEFm
dGVyRGVsZXRlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwotICAgICAgICBOb2RlKiBu
b2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKTsKICAgICAgICAgLy8gTm9ybWFsbHkgZGVsZXRpb24gd2lsbCBsZWF2ZSBh
IGJyIGFzIGEgcGxhY2Vob2xkZXIuCiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJyVGFn
KSkKICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKQEAgLTg5
NSw3ICs4OTMsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAg
ICAgYmVmb3JlUGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9uKGJlZm9yZVBhcmFncmFwaC5kZWVw
RXF1aXZhbGVudCgpKTsKICAgICBhZnRlclBhcmFncmFwaCA9IFZpc2libGVQb3NpdGlvbihhZnRl
clBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIGlmIChiZWZvcmVQYXJhZ3JhcGgu
aXNOb3ROdWxsKCkgJiYgIWlzVGFibGVFbGVtZW50KGJlZm9yZVBhcmFncmFwaC5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKSkKKyAgICBpZiAoYmVmb3JlUGFyYWdyYXBoLmlzTm90TnVsbCgpICYmICFp
c1RhYmxlRWxlbWVudChiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpKQogICAgICAgICAmJiAoKCFpc0VuZE9mUGFyYWdyYXBoKGJlZm9yZVBhcmFncmFwaCkg
JiYgIWlzU3RhcnRPZlBhcmFncmFwaChiZWZvcmVQYXJhZ3JhcGgpKSB8fCBiZWZvcmVQYXJhZ3Jh
cGggPT0gYWZ0ZXJQYXJhZ3JhcGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcmltIHRleHQgYmV0
d2VlbiBiZWZvcmVQYXJhZ3JhcGggYW5kIGFmdGVyUGFyYWdyYXBoIGlmIHRoZXkgYXJlbid0IGVx
dWFsLgogICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkp
LCBiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC05NTUsNyArOTUzLDcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8vIHN0YXJ0IGFu
ZCBlbmQgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSB0byBjcmVhdGUgYSBSYW5nZTsgdGhleSBhcmUg
ImVkaXRpbmcgcG9zaXRpb25zIgogICAgIFBvc2l0aW9uIHN0YXJ0UmFuZ2VDb21wbGlhbnQgPSBz
dGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmRSYW5nZUNv
bXBsaWFudCA9IGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydFJhbmdlQ29tcGxpYW50
Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
bmRSYW5nZUNvbXBsaWFudC5ub2RlKCksIGVuZFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5n
ZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5k
ZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGluZWZmaWNpZW50IHdheSB0byBwcmVz
ZXJ2ZSBzdHlsZSBvbiBub2RlcyBpbiB0aGUgcGFyYWdyYXBoIHRvIG1vdmUuIEl0CiAgICAgLy8g
c2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNlIG1vdmVkIHBhcmFncmFwaHMgd2lsbCB1c3Vh
bGx5IGJlIHF1aXRlIHNtYWxsLgpAQCAtOTgwLDEwICs5NzgsMTAgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwog
ICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICBB
U1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSk7
CisgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5p
bkRvY3VtZW50KCkpOwogCiAgICAgY2xlYW51cEFmdGVyRGVsZXRpb24oKTsKLSAgICBBU1NFUlQo
ZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkpOwogCiAgICAgLy8gQWRkIGEgYnIgaWYgcHJ1bmluZyBhbiBlbXB0eSBibG9jayBsZXZl
bCBlbGVtZW50IGNhdXNlZCBhIGNvbGxhcHNlLiBGb3IgZXhhbXBsZToKICAgICAvLyBmb29eCkBA
IC0xMTMxLDE1ICsxMTI5LDE1IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0
T2ZFbXAKICAgICAKICAgICBQb3NpdGlvbiBjYXJldFBvcyhjYXJldC5kZWVwRXF1aXZhbGVudCgp
KTsKICAgICAvLyBBIGxpbmUgYnJlYWsgaXMgZWl0aGVyIGEgYnIgb3IgYSBwcmVzZXJ2ZWQgbmV3
bGluZS4KLSAgICBBU1NFUlQoY2FyZXRQb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAo
Y2FyZXRQb3Mubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgY2FyZXRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkpOworICAgIEFTU0VSVChjYXJldFBvcy5k
ZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAoY2FyZXRQb3MuZGVwcmVjYXRl
ZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSk7CiAgICAgCi0gICAgaWYgKGNhcmV0
UG9zLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3Jl
QlIocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoY2FyZXRQb3Mubm9kZSgpKSk7Ci0gICAgICAg
IHJlbW92ZU5vZGUoY2FyZXRQb3Mubm9kZSgpKTsKLSAgICAgICAgcHJ1bmUoYmVmb3JlQlIubm9k
ZSgpKTsKKyAgICBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykpIHsKKyAgICAgICAgUG9zaXRpb24gYmVmb3JlQlIocG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSkpOworICAgICAgICByZW1vdmVOb2RlKGNhcmV0
UG9zLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBwcnVuZShiZWZvcmVCUi5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA9PSAwKTsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4oY2FyZXRQb3Mubm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxUZXh0Kj4oY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhl
IG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gcGFyYWdyYXBo
IHdvdWxkIGJlIHF1b3RlZCwgYW5kIHdlIHZlcmlmaWVkIHRoYXQgaXQgd2Fzbid0IGFib3ZlLgpA
QCAtMTE3NSw3ICsxMTczLDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0
aW9uQQogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBsYXN0SW5BbmNob3IpIHsKICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSBhbmNob3JzIGFyZSBwdXNoZWQgZG93biBiZWZvcmUgYXZvaWRpbmcg
dGhlbSBzbyB0aGF0IHdlIGRvbid0CiAgICAgICAgICAgICAvLyBhbHNvIGF2b2lkIHN0cnVjdHVy
YWwgZWxlbWVudHMgbGlrZSBsaXN0cyBhbmQgYmxvY2tzICg1MTQyMDEyKS4KLSAgICAgICAgICAg
IGlmIChvcmlnaW5hbC5ub2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yICYmIG9yaWdpbmFsLm5vZGUo
KS0+cGFyZW50Tm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvcikgeworICAgICAgICAgICAgaWYgKG9y
aWdpbmFsLmRlcHJlY2F0ZWROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yICYmIG9yaWdpbmFsLmRl
cHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IpIHsKICAgICAg
ICAgICAgICAgICBwdXNoQW5jaG9yRWxlbWVudERvd24oZW5jbG9zaW5nQW5jaG9yKTsKICAgICAg
ICAgICAgICAgICBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG9yaWdp
bmFsKTsKICAgICAgICAgICAgICAgICBpZiAoIWVuY2xvc2luZ0FuY2hvcikKQEAgLTExODQsNyAr
MTE4Miw3IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkEKICAgICAg
ICAgICAgIC8vIERvbid0IGluc2VydCBvdXRzaWRlIGFuIGFuY2hvciBpZiBkb2luZyBzbyB3b3Vs
ZCBza2lwIG92ZXIgYSBsaW5lIGJyZWFrLiAgSXQgd291bGQKICAgICAgICAgICAgIC8vIHByb2Jh
Ymx5IGJlIHNhZmUgdG8gbW92ZSB0aGUgbGluZSBicmVhayBzbyB0aGF0IHdlIGNvdWxkIHN0aWxs
IGF2b2lkIHRoZSBhbmNob3IgaGVyZS4KICAgICAgICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW0o
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Ci0gICAgICAgICAgICBp
ZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0
cmVhbS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCisgICAgICAgICAg
ICBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93
bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdBbmNob3Ip
KQogICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbDsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3Ip
OwpAQCAtMTE5NCw3ICsxMTkyLDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBv
c2l0aW9uQQogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBmaXJzdEluQW5jaG9yKSB7CiAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgYW5jaG9ycyBhcmUgcHVzaGVkIGRvd24gYmVmb3JlIGF2b2lk
aW5nIHRoZW0gc28gdGhhdCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gYWxzbyBhdm9pZCBzdHJ1
Y3R1cmFsIGVsZW1lbnRzIGxpa2UgbGlzdHMgYW5kIGJsb2NrcyAoNTE0MjAxMikuCi0gICAgICAg
ICAgICBpZiAob3JpZ2luYWwubm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5hbC5u
b2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IpIHsKKyAgICAgICAgICAgIGlm
IChvcmlnaW5hbC5kZXByZWNhdGVkTm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5h
bC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yKSB7CiAg
ICAgICAgICAgICAgICAgcHVzaEFuY2hvckVsZW1lbnREb3duKGVuY2xvc2luZ0FuY2hvcik7CiAg
ICAgICAgICAgICAgICAgZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChv
cmlnaW5hbCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxl
Y3Rpb25DCiB9CiAKIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIHNtYXJ0RGVsZXRlLCBi
b29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSwgYm9vbCBleHBhbmRGb3JT
cGVjaWFsRWxlbWVudHMpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChzZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCktPmRvY3VtZW50KCkpLCAKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHNl
bGVjdGlvbi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSksIAogICAgICAgbV9oYXNT
ZWxlY3Rpb25Ub0RlbGV0ZSh0cnVlKSwgCiAgICAgICBtX3NtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRl
KSwgCiAgICAgICBtX21lcmdlQmxvY2tzQWZ0ZXJEZWxldGUobWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSksCkBAIC0xMTAsMTAgKzExMCwxMCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omlu
aXRpYWxpemVTCiAgCiAgICAgLy8gRm9yIEhScywgd2UnbGwgZ2V0IGEgcG9zaXRpb24gYXQgKEhS
LDEpIHdoZW4gaGl0dGluZyBkZWxldGUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91
cyBsaW5lLCBvciAoSFIsMCkgd2hlbiBmb3J3YXJkIGRlbGV0aW5nLAogICAgIC8vIGJ1dCBpbiB0
aGVzZSBjYXNlcywgd2Ugd2FudCB0byBkZWxldGUgaXQsIHNvIG1hbnVhbGx5IGV4cGFuZCB0aGUg
c2VsZWN0aW9uCi0gICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpCi0gICAg
ICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Lm5vZGUoKSk7Ci0gICAgZWxzZSBp
ZiAoZW5kLm5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpCi0gICAgICAgIGVuZCA9IHBvc2l0aW9u
QWZ0ZXJOb2RlKGVuZC5ub2RlKCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5o
YXNUYWdOYW1lKGhyVGFnKSkKKyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgZWxzZSBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoaHJUYWcpKQorICAgICAgICBlbmQgPSBwb3NpdGlvbkFmdGVyTm9kZShlbmQu
ZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSB1c2Vk
IHNvIHRoYXQgbW92ZVBhcmFncmFwaHMgY2FuIGF2b2lkIHRoZSBidWdzIGluIHNwZWNpYWwgZWxl
bWVudCBleHBhbnNpb24uCiAgICAgaWYgKCFtX2V4cGFuZEZvclNwZWNpYWxFbGVtZW50cykKQEAg
LTI3NSw3ICsyNzUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdT
CiAgICAgLy8gdHlwaW5nIHN0eWxlIGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBub3Ig
aXMgdGhlcmUgYSByZWFzb24gdG8gCiAgICAgLy8gY29tcHV0ZSB0aGUgc3R5bGUgYXQgdGhlIHN0
YXJ0IG9mIHRoZSBzZWxlY3Rpb24gYWZ0ZXIgZGVsZXRpb24gKHNlZSB0aGUgCiAgICAgLy8gZWFy
bHkgcmV0dXJuIGluIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpLgotICAgIGlmICht
X3Vwc3RyZWFtU3RhcnQubm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgJiYgbV91cHN0
cmVhbVN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBt
X3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGaWd1cmUgb3V0IHRoZSB0eXBpbmcgc3R5bGUgaW4gZWZmZWN0IGJl
Zm9yZSB0aGUgZGVsZXRlIGlzIGRvbmUuCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwogCiAgICAgLy8gSWYgd2UncmUgZGVsZXRpbmcg
aW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkgaW5zdGVhZCBv
ZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0ZVR5cGluZ1N0
eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJsb2NrcXVvdGUK
LSAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KS5ub2RlKCkpKQorICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBtX2RlbGV0ZUludG9CbG9j
a3F1b3RlU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRlLmVu
ZCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7
CkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVU
eXBpbmdTCiBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNpYWxDYXNlQlJE
ZWxldGUoKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjaWFsLWNhc2Ugd2hlcmUgdGhlIHNlbGVj
dGlvbiBjb250YWlucyBvbmx5IGEgQlIgb24gYSBsaW5lIGJ5IGl0c2VsZiBhZnRlciBhbm90aGVy
IEJSLgotICAgIGJvb2wgdXBzdHJlYW1TdGFydElzQlIgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKTsKLSAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rv
d25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOwotICAgIGJvb2wgaXNCUk9u
TGluZUJ5SXRzZWxmID0gdXBzdHJlYW1TdGFydElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAm
JiBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkgPT0gbV91cHN0cmVhbUVuZC5ub2RlKCk7CisgICAg
Ym9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rv
d25zdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKTsKKyAgICBi
b29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1T
dGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX3Vwc3Ry
ZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGlzQlJPbkxpbmVCeUl0c2VsZikgewot
ICAgICAgICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSk7CisgICAgICAgIHJl
bW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6ZGVsZXRlVGV4dEYKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlR2VuZXJhbERlbGV0ZSgpCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV91cHN0cmVhbVN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gbV91
cHN0cmVhbVN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAKICAgICAvLyBOZXZlciByZW1vdmUgdGhlIHN0YXJ0
IGJsb2NrIHVubGVzcyBpdCdzIGEgdGFibGUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJ3QgbWVyZ2Ug
Y29udGVudCBpbi4KICAgICBpZiAoc3RhcnROb2RlID09IG1fc3RhcnRCbG9jayAmJiBzdGFydE9m
ZnNldCA9PSAwICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoc3RhcnROb2RlKSAmJiAhc3Rh
cnROb2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgewpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQu
bm9kZSgpKSB7CisgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSkgewogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkgLSBzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUt
PmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQg
bmVlZHMgdG8gYmUgdHJpbW1lZApAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIHJlbW92ZU5vZGUoc3RhcnROb2Rl
KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2wgc3RhcnROb2RlV2FzRGVzY2VuZGFu
dE9mRW5kTm9kZSA9IG1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpOworICAgICAgICBib29sIHN0YXJ0Tm9kZVdhc0Rlc2NlbmRhbnRP
ZkVuZE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAvLyBUaGUgc2Vs
ZWN0aW9uIHRvIGRlbGV0ZSBzcGFucyBtb3JlIHRoYW4gb25lIG5vZGUuCiAgICAgICAgIFJlZlB0
cjxOb2RlPiBub2RlKHN0YXJ0Tm9kZSk7CiAgICAgICAgIApAQCAtNDY5LDIxICs0NjksMjEgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5jaGlsZE5vZGUoc3RhcnRP
ZmZzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBt
X3Vwc3RyZWFtRW5kLm5vZGUoKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3Vwc3RyZWFtRW5kLm5vZGUo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgVGV4
dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fdXBzdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9kZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZWxl
Y3RlZAotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IG1fZG93bnN0cmVhbUVuZC5ub2Rl
KCkpIHsKKyAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBtX2Rvd25zdHJlYW1FbmQpID49IDAp
IHsKICAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZU5leHRTaWJsaW5nIGp1c3QgYmxldyBwYXN0
IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2Rl
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkp
IHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCByZW1vdmVkIGEg
bm9kZSBmcm9tIHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9uIHNvIHRoZQog
ICAgICAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm5vZGVJbmRleCgpIDwgKHVuc2lnbmVkKW1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9kb3duc3RyZWFtRW5k
Lm1vdmVUb09mZnNldChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAt
IDEpOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlR2VuZXIKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5sYXN0RGVzY2Vu
ZGFudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubm9kZSgpID09IG4g
JiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhP
ZmZzZXQobikpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCkgPT0gbiAmJiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+PSBjYXJldE1heE9mZnNldChuKSkgewogICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2Rl
KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAg
ICAgICB9IGVsc2UKQEAgLTUwMCwzMyArNTAwLDMzIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3Ry
ZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSAm
JiBtX2Rvd25zdHJlYW1FbmQubm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQobV9kb3duc3RyZWFt
RW5kLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuYXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpKSB7CisgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSAhPSBzdGFydE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgJiYg
bV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWluT2Zmc2V0KG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVh
bUVuZC5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBpdHMg
Y29udGVudHMuICBEZWxldGUgaXQuCi0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25z
dHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMg
dG8gYmUgdHJpbW1lZAotICAgICAgICAgICAgICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nh
c3Q8VGV4dCAqPihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
VGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBSZW1v
dmUgY2hpbGRyZW4gb2YgbV9kb3duc3RyZWFtRW5kLm5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91
cHN0cmVhbVN0YXJ0LgotICAgICAgICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hp
bGRyZW4gaWYgbV91cHN0cmVhbVN0YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLm5vZGUo
KQorICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBvZiBtX2Rvd25zdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91cHN0cmVhbVN0YXJ0LgorICAgICAg
ICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hpbGRyZW4gaWYgbV91cHN0cmVhbVN0
YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkKICAgICAgICAg
ICAgICAgICAvLyBhbmQgbV91cHN0cmVhbVN0YXJ0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUg
ZG9jdW1lbnQsIGJlY2F1c2UgdGhlbiB3ZSBkb24ndCAKICAgICAgICAgICAgICAgICAvLyBrbm93
IGhvdyBtYW55IGNoaWxkcmVuIHRvIHJlbW92ZS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
TWFrZSBtX3Vwc3RyZWFtU3RhcnQgYSBwb3NpdGlvbiB3ZSB1cGRhdGUgYXMgd2UgcmVtb3ZlIGNv
bnRlbnQsIHRoZW4gd2UgY2FuCiAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGtub3cgd2hpY2gg
Y2hpbGRyZW4gdG8gcmVtb3ZlLgotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShzdGFydE5v
ZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pbkRv
Y3VtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKHN0YXJ0Tm9kZVdhc0Rl
c2NlbmRhbnRPZkVuZE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5hbmNob3JOb2RlKCktPmluRG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZiht
X2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAq
biA9IG1fdXBzdHJlYW1TdGFydC5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0gbV9kb3duc3RyZWFtRW5kLm5vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmIG4tPnBhcmVudE5vZGUoKSAh
PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbi0+bm9kZUluZGV4KCkg
KyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNo
aWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQubm9kZSgpLCBvZmZzZXQsIG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlQ2hpbGRyZW5JblJhbmdlKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLCBvZmZz
ZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9kb3duc3RyZWFtRW5kLm1vdmVUb09mZnNldChvZmZzZXQpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUzOCwxMyArNTM4LDEzIEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXMKIHsKICAgICB1cGRhdGVMYXlvdXQoKTsK
ICAgICAvLyBGSVhNRTogaXNSZW5kZXJlZENoYXJhY3RlciBzaG91bGQgYmUgcmVtb3ZlZCwgYW5k
IHdlIHNob3VsZCB1c2UgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlciBhbmQgVmlzaWJs
ZVBvc2l0aW9uOjpjaGFyYWN0ZXJCZWZvcmUKLSAgICBpZiAobV9sZWFkaW5nV2hpdGVzcGFjZS5p
c05vdE51bGwoKSAmJiAhbV9sZWFkaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkg
JiYgbV9sZWFkaW5nV2hpdGVzcGFjZS5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBU
ZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX2xlYWRpbmdXaGl0ZXNwYWNlLm5v
ZGUoKSk7CisgICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVh
ZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIG1fbGVhZGluZ1doaXRlc3Bh
Y2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5v
ZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVw
bGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9Ci0gICAg
aWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVz
cGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgbV90cmFpbGluZ1doaXRlc3BhY2Uubm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obV90cmFpbGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKKyAgICBpZiAobV90cmFpbGluZ1do
aXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRD
aGFyYWN0ZXIoKSAmJiBtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4o
bV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCgh
dGV4dE5vZGUtPnJlbmRlcmVyKCkgfHx0ZXh0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29s
bGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwg
bV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAgIEFTU0VSVCghbV9wcnVuZVN0YXJ0
QmxvY2tJZk5lY2Vzc2FyeSk7CiAKICAgICAvLyBGSVhNRTogRGVsZXRpb24gc2hvdWxkIGFkanVz
dCBzZWxlY3Rpb24gZW5kcG9pbnRzIGFzIGl0IHJlbW92ZXMgbm9kZXMgc28gdGhhdCB3ZSBuZXZl
ciBnZXQgaW50byB0aGlzIHN0YXRlICg0MDk5ODM5KS4KLSAgICBpZiAoIW1fZG93bnN0cmVhbUVu
ZC5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aW5Eb2N1
bWVudCgpKQorICAgIGlmICghbV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVu
dCgpIHx8ICFtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAKICAgICAvLyBGSVhNRTogVGhlIGRlbGV0aW9uIGFsZ29y
aXRobSBzaG91bGRuJ3QgbGV0IHRoaXMgaGFwcGVuLgpAQCAtNTg1LDE0ICs1ODUsMTQgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAgIAogICAgIC8vIG1fZG93
bnN0cmVhbUVuZCdzIGJsb2NrIGhhcyBiZWVuIGVtcHRpZWQgb3V0IGJ5IGRlbGV0aW9uLiAgVGhl
cmUgaXMgbm8gY29udGVudCBpbnNpZGUgb2YgaXQgdG8KICAgICAvLyBtb3ZlLCBzbyBqdXN0IHJl
bW92ZSBpdC4KLSAgICBFbGVtZW50KiBlbmRCbG9jayA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihl
bmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSk7Ci0gICAgaWYgKCFzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpIHx8ICFlbmRCbG9jay0+Y29u
dGFpbnMoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpIHsK
LSAgICAgICAgcmVtb3ZlTm9kZShlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQubm9kZSgp
KSk7CisgICAgRWxlbWVudCogZW5kQmxvY2sgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9z
aW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBpZiAoIXN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpIHx8
ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgIHJlbW92ZU5vZGUoZW5jbG9zaW5nQmxv
Y2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICAvLyBXZSBuZWVkIHRvIG1lcmdlIGludG8gbV91cHN0cmVhbVN0YXJ0
J3MgYmxvY2ssIGJ1dCBpdCdzIGJlZW4gZW1wdGllZCBvdXQgYW5kIGNvbGxhcHNlZCBieSBkZWxl
dGlvbi4KLSAgICBpZiAoIW1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkg
fHwgIW1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFu
dE9mKG1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSkg
fHwgbV9zdGFydHNBdEVtcHR5TGluZSkgeworICAgIGlmICghbWVyZ2VEZXN0aW5hdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfHwgIW1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpKSB8fCBtX3N0
YXJ0c0F0RW1wdHlMaW5lKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChjcmVhdGVCcmVha0VsZW1l
bnQoZG9jdW1lbnQoKSkuZ2V0KCksIG1fdXBzdHJlYW1TdGFydCk7CiAgICAgICAgIG1lcmdlRGVz
dGluYXRpb24gPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0KTsKICAgICB9CkBAIC02
MDgsOCArNjA4LDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgog
ICAgIC8vIFRoZSBydWxlIGZvciBtZXJnaW5nIGludG8gYW4gZW1wdHkgYmxvY2sgaXM6IG9ubHkg
ZG8gc28gaWYgaXRzIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBSVEwuCiAgICAgaWYgKCFtX3N0YXJ0c0F0RW1wdHlMaW5lICYmIGlzU3RhcnRPZlBhcmFncmFw
aChtZXJnZURlc3RpbmF0aW9uKSAmJiBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKS54
KCkpIHsKLSAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3du
c3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICAgICAgcmVtb3Zl
Tm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5k
b3duc3RyZWFtKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykpIHsKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhtZXJnZURlc3Rp
bmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAgICAv
LyBCbG9jayBpbWFnZXMsIHRhYmxlcyBhbmQgaG9yaXpvbnRhbCBydWxlcyBjYW5ub3QgYmUgbWFk
ZSBpbmxpbmUgd2l0aCBjb250ZW50IGF0IG1lcmdlRGVzdGluYXRpb24uICBJZiB0aGVyZSBpcyAK
ICAgICAvLyBhbnkgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikpLCBkb24n
dCBtZXJnZSwganVzdCBtb3ZlIHRoZSBjYXJldCB0byBqdXN0IGJlZm9yZSB0aGUgc2VsZWN0aW9u
IHdlIGRlbGV0ZWQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNTQzOQotICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JI
UihzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSAmJiAhaXNT
dGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pKSB7CisgICAgaWYgKGlzUmVuZGVyZWRB
c05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVz
dGluYXRpb24pKSB7CiAgICAgICAgIG1fZW5kaW5nUG9zaXRpb24gPSBtX3Vwc3RyZWFtU3RhcnQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aQogICAgIGlmIChtX2VuZFRhYmxlUm93ICYmIG1f
ZW5kVGFibGVSb3ctPmluRG9jdW1lbnQoKSAmJiBtX2VuZFRhYmxlUm93ICE9IG1fc3RhcnRUYWJs
ZVJvdykKICAgICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eShtX2VuZFRhYmxlUm93LmdldCgpKSkg
ewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIG1fZW5kVGFibGVSb3cgaWYgaXQncyB3aGVy
ZSB3ZSdyZSBwdXR0aW5nIHRoZSBlbmRpbmcgc2VsZWN0aW9uLgotICAgICAgICAgICAgaWYgKCFt
X2VuZGluZ1Bvc2l0aW9uLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9lbmRUYWJsZVJvdy5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGlmICghbV9lbmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZihtX2VuZFRhYmxlUm93LmdldCgpKSkgewogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBwcm9iYWJseSBzaG91bGRuJ3QgcmVtb3ZlIG1fZW5kVGFibGVSb3cgdW5s
ZXNzIGl0J3MgZnVsbHkgc2VsZWN0ZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCiAgICAgICAgICAg
ICAgICAgLy8gV2UnbGwgbmVlZCB0byBzdGFydCBhZGp1c3RpbmcgdGhlIHNlbGVjdGlvbiBlbmRw
b2ludHMgZHVyaW5nIGRlbGV0aW9uIHRvIGtub3cgd2hldGhlciBvciBub3QgbV9lbmRUYWJsZVJv
dwogICAgICAgICAgICAgICAgIC8vIHdhcyBmdWxseSBzZWxlY3RlZCBoZXJlLgpAQCAtNjg3LDcg
KzY4Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICAv
LyBoYXMgY29tcGxldGVkLgogICAgIAogICAgIC8vIElmIHdlIGRlbGV0ZWQgaW50byBhIGJsb2Nr
cXVvdGUsIGJ1dCBhcmUgbm93IG5vIGxvbmdlciBpbiBhIGJsb2NrcXVvdGUsIHVzZSB0aGUgYWx0
ZXJuYXRlIHR5cGluZyBzdHlsZQotICAgIGlmIChtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUg
JiYgIW5lYXJlc3RNYWlsQmxvY2txdW90ZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSkpCisgICAg
aWYgKG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIG1fdHlwaW5nU3R5
bGUgPSBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgbV9kZWxldGVJbnRvQmxvY2tx
dW90ZVN0eWxlID0gMDsKIApAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBJZiB0aGUgZGVsZXRpb24gaXMgb2NjdXJyaW5n
IGluIGEgdGV4dCBmaWVsZCwgYW5kIHdlJ3JlIG5vdCBkZWxldGluZyB0byByZXBsYWNlIHRoZSBz
ZWxlY3Rpb24sIHRoZW4gbGV0IHRoZSBmcmFtZSBjYWxsIGFjcm9zcyB0aGUgYnJpZGdlIHRvIG5v
dGlmeSB0aGUgZm9ybSBkZWxlZ2F0ZS4gCiAgICAgaWYgKCFtX3JlcGxhY2UpIHsKLSAgICAgICAg
Tm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgICAgIE5vZGUqIGFuY2VzdG9yTm9kZSA9IHN0YXJ0Tm9kZSA/IHN0
YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICBpZiAoYW5jZXN0b3JO
b2RlICYmIGFuY2VzdG9yTm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykKICAgICAgICAgICAgICAg
ICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oYW5jZXN0b3JOb2RlKS0+aXNUZXh0
RmllbGQoKQpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIC8vIGFuZCBlbmRzIGluc2lkZSBpdCAod2UgZG8gbmVlZCBwbGFj
ZWhvbGRlcnMgdG8gaG9sZCBvcGVuIGVtcHR5IGNlbGxzLCBidXQgdGhhdCdzCiAgICAgICAgIC8v
IGhhbmRsZWQgZWxzZXdoZXJlKS4KICAgICAgICAgaWYgKE5vZGUqIHRhYmxlID0gaXNMYXN0UG9z
aXRpb25CZWZvcmVUYWJsZShtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVTdGFydCgpKSkKLSAg
ICAgICAgICAgIGlmIChtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2YodGFibGUpKQorICAgICAgICAgICAgaWYgKG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAgICAgICAgICAgICAg
IG1fbmVlZFBsYWNlaG9sZGVyID0gZmFsc2U7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsNyArMTAxLDcgQEAgRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgUG9zaXRpbwog
ICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKICAgICAsIG1fZm9u
dFNpemVEZWx0YShOb0ZvbnREZWx0YSkKIHsKLSAgICBpbml0KHBvc2l0aW9uLm5vZGUoKSwgT25s
eUluaGVyaXRhYmxlUHJvcGVydGllcyk7CisgICAgaW5pdChwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLCBPbmx5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0
aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29ucwogUGFzc1JlZlB0
cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbik7Ci0gICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gdHlwaW5nU3R5bGUgPSBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkt
PnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5n
U3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bWVyZ2UoY29w
eUVkaXRpbmdQcm9wZXJ0aWVzKHR5cGluZ1N0eWxlLT5zdHlsZSgpKS5nZXQoKSk7CiAgICAgcmV0
dXJuIGVkaXRpbmdTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVj
dGlvbkZvckNvbQogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0
aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCiAgICAg
Ly8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBmb3IgdGhhdCB0ZXh0IGNvbnRyb2wuCiAg
ICAgTm9kZSogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBOb2RlKiBz
ZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzZWxl
Y3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KHRhcmdldCAmJiAoIXNlbGVjdGlvblN0YXJ0IHx8IHRhcmdldC0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkgIT0gc2VsZWN0aW9uU3RhcnQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpKSkgewogICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgICAgICBpZiAodGFyZ2V0LT5oYXNUYWdOYW1lKGlucHV0
VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4odGFyZ2V0KS0+aXNUZXh0Rmll
bGQoKSkKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFu
Z2UqIHJhbmdlCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBz
b21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywg
bGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlm
IChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFpbmVyLT5yb290RWRpdGFibGVFbGVt
ZW50KCkpCisgICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBzdGFy
dENvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEVk
aXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikK
IHsKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAg
ICAgICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOworICAgICAg
ICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RD
YWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAgICB9CkBAIC02MTMsNyArNjEzLDcgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250ID0gMDsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBOb2RlKiBzdGFydE5vZGUg
PSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKS5ub2RlKCk7CisgICAgTm9kZSogc3RhcnRO
b2RlID0gcmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoc3RhcnROb2RlKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExh
c3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVh
bGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBs
ZWFzdCBvbmUKQEAgLTY0OCw3ICs2NDgsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4
dERpcmVjdGlvbkZvCiAKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKTsKIAotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJl
Y3Rpb247CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4
dERpcmVjdGlvbkZvCiAgICAgICAgICAgICBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncyA9
IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGlvbjsKICAgICAgICAgfQotICAgICAg
ICBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBub2RlID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGVpdGhlciBhIGNh
cmV0IHdpdGggbm8gdHlwaW5nIGF0dHJpYnV0ZXMgb3IgYSByYW5nZSBpbiB3aGljaCBubyBlbWJl
ZGRpbmcgaXMgYWRkZWQsIHNvIGp1c3QgdXNlIHRoZSBzdGFydCBwb3NpdGlvbgpAQCAtNzE5LDcg
KzcxOSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm8KICAgICAg
ICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKIAogICAgICAgICAvLyBJbiB0
aGUgcmFuZ2UgY2FzZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGVtYmVkZGluZyBlbGVtZW50IHBlcnNp
c3RzIHVudGlsIHRoZSBlbmQgb2YgdGhlIHJhbmdlLgotICAgICAgICBpZiAobV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiAhZW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkp
CisgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpICYmICFlbmQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4g
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAgZm91bmREaXJlY3Rpb24gPSBkaXJl
Y3Rpb25WYWx1ZSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6
IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKQEAgLTczNSwxMiArNzM1LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsK
ICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFy
dE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3Ry
ZWFtKCkubm9kZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkubm9kZSgpOworICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Jsb2Nr
KGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAgICAg
ICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3Rh
cnROb2RlLT5yZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5kZXJlciAmJiAhcmVuZGVyZXItPmlz
UmVuZGVyQmxvY2soKSkKQEAgLTEwMDMsMTggKzEwMDMsMTggQEAgVHJpU3RhdGUgRWRpdG9yOjpz
ZWxlY3Rpb25IYXNTdHlsZShDU1NTdAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7
CiAgICAgICAgIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKHN0eWxlLCBzZWxlY3Rpb25TdHlsZS5n
ZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IG5vZGVTdHlsZSA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CiAgICAgICAgICAgICBpZiAo
bm9kZVN0eWxlKSB7CiAgICAgICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3Rh
dGVPZlN0eWxlKHN0eWxlLCBub2RlU3R5bGUuZ2V0KCksICFub2RlLT5pc1RleHROb2RlKCkpOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
Lm5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IG5vZGVTdGF0ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSAhPSBub2RlU3RhdGUg
JiYgbm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gTWl4
ZWRUcmlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPmVuZCgpLm5vZGUoKSkKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgYm9vbCBFZGl0b3I6Omlu
c2VydFRleHRXaXRob3V0U2VuZGluZ1RleAogICAgIC8vIHRoYXQgaXMgY29udGFpbmVkIGluIHRo
ZSBldmVudCB0YXJnZXQuCiAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmln
Z2VyaW5nRXZlbnQpOwogICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewot
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCkpIHsKKyAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1
bWVudCA9IHNlbGVjdGlvblN0YXJ0LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBJbnNlcnQgdGhlIHRleHQKQEAgLTEyODEsNyArMTI4MSw3IEBAIHZvaWQgRWRpdG9y
OjpjdXQoKQogI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwogICAgICAgICByZW1vdmVT
cGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0cnVlKTsKICNlbmRp
ZgotICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnN0YXJ0KCkubm9kZSgpKSkKKyAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9s
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAg
ICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQoc2Vs
ZWN0ZWRUZXh0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT53cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCksIGNhblNtYXJ0
Q29weU9yRGVsZXRlKCksIG1fZnJhbWUpOwpAQCAtMTI5OSw3ICsxMjk5LDcgQEAgdm9pZCBFZGl0
b3I6OmNvcHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlzTm9kZUluVGV4
dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSkpCisgICAg
aWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CkBAIC0xNzI0LDkgKzE3
MjQsOSBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAgICAg
IC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KICAgICAgICAg
UG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5iYXNlKCkuZG93bnN0cmVhbSgp
OwogICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50
KCk7Ci0gICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5ub2RlKCk7CisgICAgICAgIE5vZGUq
IGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNl
T2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgICAgICBOb2RlKiBl
eHRlbnROb2RlID0gZXh0ZW50Lm5vZGUoKTsKKyAgICAgICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4
dGVudC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBleHRlbnRPZmZzZXQgPSBl
eHRlbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKIAogICAgICAgICBpZiAoYmFzZU5vZGUg
JiYgYmFzZU5vZGUgPT0gZXh0ZW50Tm9kZSAmJiBiYXNlTm9kZS0+aXNUZXh0Tm9kZSgpICYmIGJh
c2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9mZnNldCkgewpAQCAtMTc5Miw3ICsx
NzkyLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgIFJl
ZlB0cjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZnJhbWUoKS0+
ZG9jdW1lbnQoKSkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwot
ICAgIGlmIChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsKKyAgICBpZiAoc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9
IHRydWU7CiAgICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVjdGlvbikgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CkBAIC0xODE2
LDcgKzE4MTYsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBQb3NpdGlvbiByYW5nZUNvbXBs
aWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJhbmdlQ29tcGxpYW50UG9zaXRpb24u
bm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCks
IGVjKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQocmFuZ2VDb21wbGlh
bnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24g
PSBmYWxzZTsgLy8gd29uJ3QgbmVlZCB0byB3cmFwCiAgICAgfQogICAgIApAQCAtMjIyMSw3ICsy
MjIxLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29s
IEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewot
ICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zdGFydCgpLm5vZGUoKSk7CisgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjg1MiwxMCAr
Mjg1MiwxMCBAQCBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zCiAgICAg
aWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBvc2l0
aW9uIHN0YXJ0ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCk7Ci0gICAgaWYgKHN0YXJ0
Lm5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBv
c2l0aW9uIGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKTsKLSAgICBpZiAoZW5kLm5v
ZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCkg
IT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkgPCBt
X2NvbXBvc2l0aW9uU3RhcnQpCkBAIC0zMTExLDcgKzMxMTEsNyBAQCBJbnRSZWN0IEVkaXRvcjo6
Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAg
c3RhcnRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxp
bmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRl
cmVyID0gc3RhcnRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpOwogICAgIEFTU0VSVChzdGFydFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRS
ZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gsIHN0YXJ0
Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogICAgIGlmIChzdGFydENhcmV0
UmVjdCAhPSBJbnRSZWN0KCkpCkBAIC0zMTI0LDcgKzMxMjQsNyBAQCBJbnRSZWN0IEVkaXRvcjo6
Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAg
ZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQU1RSRUFNLCBlbmRJbmxpbmVCb3gs
IGVuZENhcmV0T2Zmc2V0KTsKIAotICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSBlbmRQ
b3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJl
ciA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJU
KGVuZFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5s
b2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKICAgICBpZiAoZW5k
Q2FyZXRSZWN0ICE9IEludFJlY3QoKSkKQEAgLTMyODQsMTIgKzMyODQsMTIgQEAgUmVuZGVyU3R5
bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdAogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKSkKKyAgICBpZiAoIXBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAg
ICBpZiAoIXR5cGluZ1N0eWxlIHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKLSAgICAgICAgcmV0
dXJuIHBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAKQEAgLTMzMDEsNyArMzMwMSw3IEBAIFJlbmRlclN0
eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKICAgICBzdHlsZUVsZW1lbnQtPmFwcGVu
ZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIGVj
KTsKICAgICBBU1NFUlQoIWVjKTsKIAotICAgIHBvc2l0aW9uLm5vZGUoKS0+cGFyZW50Tm9kZSgp
LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICBwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwogICAg
IEFTU0VSVCghZWMpOwogCiAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOwpA
QCAtMzUzNyw3ICszNTM3LDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oYwogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUs
IHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBp
biBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLAogICAgICAgICAv
LyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAg
IGlmIChzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciAmJiBjbG9zZVR5cGluZyAmJiBvbGRT
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyICYmIGNsb3NlVHlwaW5nICYmIG9s
ZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLmRl
cHJlY2F0ZWROb2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5pbkRv
Y3VtZW50KCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChvbGRTZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRB
ZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChvbGRTdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpOwogICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50V29yZHMgIT0gbmV3QWRqYWNlbnRX
b3JkcykgewpAQCAtMzU3Niw3ICszNTc2LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmth
YmxlKE5vZGUqIG5vZAogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlz
VGV4dENvbnRyb2woKSkKLSAgICAgICAgICAgIG5vZGUgPSB0b1JlbmRlclRleHRDb250cm9sKG5v
ZGUtPnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUt
PnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmZpcnN0Q2hpbGQoKSkK
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgICAgIGVsc2UKQEAg
LTM1ODgsNyArMzU4OCw3IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBu
b2QKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50
IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1h
cmthYmxlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSk7CisgICAgTm9kZSog
bm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCB2b2lkIEZvcm1hdEJs
b2NrQ29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uCiAKIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpm
b3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIGNv
bnN0IFBvc2l0aW9uJiBlbmRPZlNlbGVjdGlvbiwgUmVmUHRyPEVsZW1lbnQ+JiBibG9ja05vZGUp
CiB7Ci0gICAgTm9kZSogbm9kZVRvU3BsaXRUbyA9IGVuY2xvc2luZ0Jsb2NrVG9TcGxpdFRyZWVU
byhzdGFydC5ub2RlKCkpOwotICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5v
ZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShz
dGFydC5ub2RlKCksIG5vZGVUb1NwbGl0VG8pOworICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBl
bmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAg
UmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBub2Rl
VG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSwgbm9kZVRvU3BsaXRUbyk7CiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGVBZnRlckluc2VydGlvblBvc2l0aW9uID0gb3V0ZXJCbG9jazsKIAogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmRPZlNlbGVjdGlv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21t
YW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVu
dE91dGRlbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6SW5kZW50T3V0ZGVudENvbW1hCiBib29sIEluZGVudE91dGRlbnRD
b21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICAvLyBJZiBvdXIgc2VsZWN0aW9uIGlzIG5vdCBpbnNp
ZGUgYSBsaXN0LCBiYWlsIG91dC4KLSAgICBOb2RlKiBsYXN0Tm9kZUluU2VsZWN0ZWRQYXJhZ3Jh
cGggPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogbGFzdE5vZGVJblNlbGVjdGVkUGFyYWdyYXBo
ID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbGlzdE5vZGUg
PSBlbmNsb3NpbmdMaXN0KGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCk7CiAgICAgaWYgKCFs
aXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQsMTUgKzk0LDE1IEBAIHZvaWQg
SW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG8KICAgICBOb2RlKiBub2RlVG9TcGxp
dFRvOwogICAgIGlmIChlbmNsb3NpbmdDZWxsKQogICAgICAgICBub2RlVG9TcGxpdFRvID0gZW5j
bG9zaW5nQ2VsbDsKLSAgICBlbHNlIGlmIChlbmNsb3NpbmdMaXN0KHN0YXJ0Lm5vZGUoKSkpCi0g
ICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9jayhzdGFydC5ub2RlKCkpOworICAg
IGVsc2UgaWYgKGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAg
IG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9jayhzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBlbHNlCiAgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlv
bihzdGFydCk7CiAKICAgICBpZiAoIW5vZGVUb1NwbGl0VG8pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5vZGUoKSA9PSBub2RlVG9TcGxp
dFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2RlKCksIG5vZGVU
b1NwbGl0VG8pOworICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3Bs
aXRUcmVlVG9Ob2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIG5vZGVUb1NwbGl0VG8pOwogCiAg
ICAgaWYgKCF0YXJnZXRCbG9ja3F1b3RlKSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibG9j
a3F1b3RlIGFuZCBpbnNlcnQgaXQgYXMgYSBjaGlsZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVt
ZW50LiBXZSBhY2NvbXBsaXNoCkBAIC0xNjYsMTMgKzE2NiwxMyBAQCB2b2lkIEluZGVudE91dGRl
bnRDb21tYW5kOjpvdXRkZW50UGFyYWdyCiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBO
b2RlKiBlbmNsb3NpbmdCbG9ja0Zsb3cgPSBlbmNsb3NpbmdCbG9jayh2aXNpYmxlU3RhcnRPZlBh
cmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSogZW5jbG9zaW5nQmxv
Y2tGbG93ID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBSZWZQdHI8Tm9kZT4gc3BsaXRCbG9ja3F1
b3RlTm9kZSA9IGVuY2xvc2luZ05vZGU7CiAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrRmxvdyAhPSBl
bmNsb3NpbmdOb2RlKQogICAgICAgICBzcGxpdEJsb2NrcXVvdGVOb2RlID0gc3BsaXRUcmVlVG9O
b2RlKGVuY2xvc2luZ0Jsb2NrRmxvdywgZW5jbG9zaW5nTm9kZSwgdHJ1ZSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJlIHdlIHN0YXJ0IG91
dGRlbnRpbmcuCi0gICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5j
bG9zaW5nTm9kZSksIHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbmNsb3Np
bmdOb2RlKSwgdmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICB9CiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRl
QnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVCZWZvcmUocGxhY2Vob2xk
ZXIsIHNwbGl0QmxvY2txdW90ZU5vZGUpOwpAQCAtMjA1LDEwICsyMDUsMTAgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFJlZ2lvbgogICAgICAgICAvLyBvdXRkZW50UGFyYWdy
YXBoIGNvdWxkIG1vdmUgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGggaWYgdGhlIHBhcmFncmFwaAog
ICAgICAgICAvLyBpcyBpbiBhIGxpc3QgaXRlbS4gQXMgYSByZXN1bHQsIGVuZEFmdGVyU2VsZWN0
aW9uIGFuZCBlbmRPZk5leHRQYXJhZ3JhcGgKICAgICAgICAgLy8gY291bGQgcmVmZXIgdG8gcG9z
aXRpb25zIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIGlmIChlbmRBZnRlclNl
bGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKGVuZEFmdGVyU2VsZWN0aW9uLmlz
Tm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAg
ICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFy
YWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAg
aWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwogICAg
ICAgICAgICAgZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZDdXJyZW50
UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTEgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
OjppbnNlcnROb2RlQQogICAgIC8vIEluc2VydCB0aGUgQlIgYWZ0ZXIgdGhlIGNhcmV0IHBvc2l0
aW9uLiBJbiB0aGUgY2FzZSB0aGUKICAgICAvLyBwb3NpdGlvbiBpcyBhIGJsb2NrLCBkbyBhbiBh
cHBlbmQuIFdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0CiAgICAgLy8gdGhlIEJSICphZnRlciogdGhl
IGJsb2NrLgotICAgIEVsZW1lbnQqIGNiID0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwotICAgIGlmIChjYiA9PSBwb3Mubm9kZSgpKQorICAgIEVsZW1lbnQqIGNiID0g
cG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICBp
ZiAoY2IgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIGFwcGVuZE5vZGUobm9kZSwg
Y2IpOwogICAgIGVsc2UKLSAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHBvcy5ub2RlKCkp
OworICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgcG9zLmRlcHJlY2F0ZWROb2RlKCkpOwog
fQogCiB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmVQb3NpdGlv
bihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zKQpAQCAtNjksMTEgKzY5LDExIEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9kZUIKICAgICAvLyBJbnNlcnQgdGhl
IEJSIGFmdGVyIHRoZSBjYXJldCBwb3NpdGlvbi4gSW4gdGhlIGNhc2UgdGhlCiAgICAgLy8gcG9z
aXRpb24gaXMgYSBibG9jaywgZG8gYW4gYXBwZW5kLiBXZSBkb24ndCB3YW50IHRvIGluc2VydAog
ICAgIC8vIHRoZSBCUiAqYmVmb3JlKiB0aGUgYmxvY2suCi0gICAgRWxlbWVudCogY2IgPSBwb3Mu
bm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Ci0gICAgaWYgKGNiID09IHBvcy5u
b2RlKCkpCisgICAgRWxlbWVudCogY2IgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOworICAgIGlmIChjYiA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKSkK
ICAgICAgICAgYXBwZW5kTm9kZShub2RlLCBjYik7CiAgICAgZWxzZQotICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKG5vZGUsIHBvcy5ub2RlKCkpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5v
ZGUsIHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogLy8gV2hldGhlciB3ZSBzaG91bGQgaW5z
ZXJ0IGEgYnJlYWsgZWxlbWVudCBvciBhICdcbicuCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZDo6c2hvdWxkVXNlQnIKICAgICAvLyB0aGUgaW5wdXQgZWxlbWVu
dCwgYW5kIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCBlbGVtZW50J3MK
ICAgICAvLyBwYXJlbnQncyByZW5kZXJlci4KICAgICBQb3NpdGlvbiBwKGluc2VydGlvblBvcy5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgcmV0dXJuIHAubm9kZSgpLT5yZW5kZXJl
cigpICYmICFwLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7
CisgICAgcmV0dXJuIHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiAhcC5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAog
dm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIG1lcmdlIHRleHQgbm9kZXMgd2hlbiBpbnNlcnRpbmcganVzdCBhZnRlciBvciBiZWZv
cmUgdGV4dC4KICAgICAKICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVC
cmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkgewotICAgICAgICBib29sIG5lZWRF
eHRyYUxpbmVCcmVhayA9ICFwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLm5v
ZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7CisgICAgICAgIGJvb2wgbmVlZEV4dHJhTGluZUJy
ZWFrID0gIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLmRl
cHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUodGFibGVUYWcpOwogICAgICAgICAKICAgICAgICAg
aW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAgICAgICAgCkBAIC0xMjMs
NyArMTIzLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRpbmdQb3NpdGlvbihwb3NpdGlvbkJlZm9y
ZU5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7Ci0gICAgfSBlbHNlIGlmIChwb3MuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgpKSkgewor
ICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0gY2FyZXRNaW5P
ZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChub2Rl
VG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgYW4gZXh0
cmEgYnIgb3IgJ1xuJyBpZiB0aGUganVzdCBpbnNlcnRlZCBvbmUgY29sbGFwc2VkLgpAQCAtMTMz
LDEyICsxMzMsMTIgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CiAgICAgLy8gSWYg
d2UncmUgaW5zZXJ0aW5nIGFmdGVyIGFsbCBvZiB0aGUgcmVuZGVyZWQgdGV4dCBpbiBhIHRleHQg
bm9kZSwgb3IgaW50byBhIG5vbi10ZXh0IG5vZGUsCiAgICAgLy8gYSBzaW1wbGUgaW5zZXJ0aW9u
IGlzIHN1ZmZpY2llbnQuCi0gICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSB8fCAhcG9zLm5vZGUoKS0+aXNUZXh0
Tm9kZSgpKSB7CisgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSBjYXJldE1heE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkgfHwgIXBvcy5kZXByZWNhdGVk
Tm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2Vy
dC5nZXQoKSwgcG9zKTsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24ocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RS
RUFNKSk7Ci0gICAgfSBlbHNlIGlmIChwb3Mubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKKyAgICB9
IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAg
Ly8gU3BsaXQgYSB0ZXh0IG5vZGUKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4ocG9zLm5vZGUoKSk7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0
ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKG5vZGVUb0luc2VydCwgdGV4dE5vZGUpOwogICAgICAgICBQb3NpdGlvbiBlbmRp
bmdQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDEyICs4NCwxMiBAQCBib29sIEluc2VydExpc3RDb21tYW5kOjpzZWxl
Y3Rpb25IYXNMaXN0CiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwogCi0gICAgaWYgKCFlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKSkKKyAgICBpZiAoIWVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAgICAgd2hpbGUgKHN0
YXJ0LmlzTm90TnVsbCgpICYmIHN0YXJ0ICE9IGVuZCkgewotICAgICAgICBFbGVtZW50KiBsaXN0
Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAg
ICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaWYgKCFsaXN0Tm9kZSB8fCAhbGlzdE5v
ZGUtPmhhc1RhZ05hbWUobGlzdFRhZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgoc3RhcnQpOwpAQCAtMTQzLDcgKzE0Myw3
IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIC8v
IGluZmluaXRlIGxvb3AgYW5kIGJlY2F1c2UgdGhlcmUgaXMgbm8gbW9yZSB3b3JrIHRvIGJlIGRv
bmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUUoPHJkYXI6Ly9wcm9ibGVtLzU5ODM5NzQ+KTog
VGhlIGVuZGluZ1NlbGVjdGlvbigpIG1heSBiZSBpbmNvcnJlY3QgaGVyZS4gIENvbXB1dGUgCiAg
ICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBsb2NhdGlvbiBvZiBlbmRPZlNlbGVjdGlvbiBhbmQg
dXNlIGl0IGFzIHRoZSBlbmQgb2YgdGhlIG5ldyBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAg
aWYgKCFzdGFydE9mTGFzdFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKQorICAgICAgICAgICAgICAgIGlmICghc3RhcnRPZkxhc3RQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjpkb0FwcGx5Rm9yU2luZ2xlCiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBwcm9kdWNlIHVu
ZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxlY3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUg
YQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGluc2lkZSB0aGUgZmlyc3QgY2VsbCwgc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3VsZCBwcm9iYWJseQogICAgIC8vIGJlIHJlbmFtZWQg
YW5kIGRlcGxveWVkIGluc2lkZSBzZXRFbmRpbmdTZWxlY3Rpb24oKS4KLSAgICBOb2RlKiBzZWxl
Y3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSog
c2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBOb2RlKiBsaXN0Q2hpbGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlv
bk5vZGUpOwogICAgIGJvb2wgc3dpdGNoTGlzdFR5cGUgPSBmYWxzZTsKICAgICBpZiAobGlzdENo
aWxkTm9kZSkgewpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRv
QXBwbHlGb3JTaW5nbGUKICAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV3TGlzdCA9
IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RUYWcpOwogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUJlZm9yZShuZXdMaXN0LCBsaXN0Tm9kZSk7CiAKLSAgICAgICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGRJbkxpc3QgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoVmlzaWJsZVBvc2l0aW9uKGZpcnN0
UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwg
bGlzdE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgTm9kZSogZmlyc3RDaGlsZEluTGlzdCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0
Tm9kZS5nZXQoKSkpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSwgbGlzdE5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGZpcnN0Q2hpbGRJbkxpc3Qt
PmlzQmxvY2tGbG93KCkgPyBmaXJzdENoaWxkSW5MaXN0IDogbGlzdE5vZGUuZ2V0KCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKGZpcnN0UG9zaXRp
b25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0
KCkpLCBuZXdMaXN0LmdldCgpLCBvdXRlckJsb2NrKTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhCiAgICAgICAgIC8vIEEgcGFyYWdy
YXBoIGlzIHZpc3VhbGx5IGEgbGlzdCBpdGVtIG1pbnVzIGEgbGlzdCBtYXJrZXIuICBUaGUgcGFy
YWdyYXBoIHdpbGwgYmUgbW92ZWQuCiAgICAgICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChv
cmlnaW5hbFN0YXJ0KTsKICAgICAgICAgZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQpOwotICAg
ICAgICBuZXh0TGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGVuZC5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCksIGxpc3ROb2RlKTsKKyAgICAgICAgbmV4dExpc3RDaGlsZCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSwgbGlzdE5vZGUpOwogICAgICAgICBBU1NFUlQobmV4dExpc3RDaGlsZCAhPSBsaXN0Q2hp
bGROb2RlKTsKLSAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQo
c3RhcnQucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwgbGlzdE5vZGUpOworICAg
ICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChzdGFydC5wcmV2aW91
cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSwgbGlzdE5vZGUpOwogICAgICAg
ICBBU1NFUlQocHJldmlvdXNMaXN0Q2hpbGQgIT0gbGlzdENoaWxkTm9kZSk7CiAgICAgfQogICAg
IC8vIFdoZW4gcmVtb3ZpbmcgYSBsaXN0LCB3ZSBtdXN0IGFsd2F5cyBjcmVhdGUgYSBwbGFjZWhv
bGRlciB0byBhY3QgYXMgYSBwb2ludCBvZiBpbnNlcnRpb24KQEAgLTMwOCw3ICszMDgsNyBAQCB2
b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhCiAKIHN0YXRpYyBFbGVtZW50
KiBhZGphY2VudEVuY2xvc2luZ0xpc3QoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgYWRqYWNlbnRQb3MsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RU
YWcpCiB7Ci0gICAgRWxlbWVudCogbGlzdE5vZGUgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KGFk
amFjZW50UG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9k
ZSA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QoYWRqYWNlbnRQb3MuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIGlmICghbGlzdE5vZGUpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMzE3LDkgKzMxNyw5IEBAIHN0YXRpYyBFbGVtZW50KiBhZGphY2VudEVuY2xvc2luZ0xp
c3QoY28KICAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xvc2luZ1RhYmxlQ2VsbChhZGphY2Vu
dFBvcy5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIGlmICghbGlzdE5vZGUtPmhhc1RhZ05hbWUo
bGlzdFRhZykKLSAgICAgICAgfHwgbGlzdE5vZGUtPmNvbnRhaW5zKHBvcy5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSkKKyAgICAgICAgfHwgbGlzdE5vZGUtPmNvbnRhaW5zKHBvcy5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHx8IHByZXZpb3VzQ2VsbCAhPSBjdXJy
ZW50Q2VsbAotICAgICAgICB8fCBlbmNsb3NpbmdMaXN0KGxpc3ROb2RlKSAhPSBlbmNsb3NpbmdM
aXN0KHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisgICAgICAgIHx8IGVuY2xvc2luZ0xp
c3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxpc3ROb2RlOwpA
QCAtMzUxLDcgKzM1MSw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21t
YW4KICAgICAgICAgbGlzdEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBs
aXN0VGFnKTsKICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQsIGxpc3RFbGVtZW50
KTsKIAotICAgICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIGlzQmxvY2soc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKS5ub2RlKCkpKSB7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQgJiYgaXNCbG9jayhz
dGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICAv
LyBJbnNlcnRpbmcgdGhlIGxpc3QgaW50byBhbiBlbXB0eSBwYXJhZ3JhcGggdGhhdCBpc24ndCBo
ZWxkIG9wZW4gCiAgICAgICAgICAgICAvLyBieSBhIGJyIG9yIGEgJ1xuJywgd2lsbCBpbnZhbGlk
YXRlIHN0YXJ0IGFuZCBlbmQuICBJbnNlcnQgCiAgICAgICAgICAgICAvLyBhIHBsYWNlaG9sZGVy
IGFuZCB0aGVuIHJlY29tcHV0ZSBzdGFydCBhbmQgZW5kLgpAQCAtMzY3LDcgKzM2Nyw3IEBAIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW4KICAgICAgICAgLy8gY2xlYW4g
bWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBmYXIgYXMgcG9z
c2libGUuCiAgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyhzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLnVwc3RyZWFtKCkpOwogICAgICAgICAvLyBBbHNvIGF2b2lkIHRoZSBjb250YWluaW5nIGxp
c3QgaXRlbS4KLSAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGlu
c2VydGlvblBvcy5ub2RlKCkpOworICAgICAgICBOb2RlKiBsaXN0Q2hpbGQgPSBlbmNsb3NpbmdM
aXN0Q2hpbGQoaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBpZiAobGlz
dENoaWxkICYmIGxpc3RDaGlsZC0+aGFzVGFnTmFtZShsaVRhZykpCiAgICAgICAgICAgICBpbnNl
cnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShsaXN0Q2hpbGQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6ZG8KICAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsKHN0YXJ0QmxvY2spCiAgICAgICAgICAg
ICB8fCBzdGFydEJsb2NrLT5oYXNUYWdOYW1lKGZvcm1UYWcpCiAgICAgICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIG5vZGUgaXMgaGlkZGVuLCB3ZSBkb24ndCBoYXZlIGEgY2Fub25pY2FsIHBvc2l0
aW9uIHNvIHdlIHdpbGwgZG8gdGhlIHdyb25nIHRoaW5nIGZvciB0YWJsZXMgYW5kIDxocj4uIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM0MgotICAgICAgICAgICAg
fHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25pY2FsUG9zLm5vZGUoKS0+cmVuZGVy
ZXIoKSAmJiBjYW5vbmljYWxQb3Mubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkpCi0gICAg
ICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKGhyVGFnKSkpIHsKKyAgICAgICAgICAgIHx8ICghY2Fub25pY2FsUG9zLmlz
TnVsbCgpICYmIGNhbm9uaWNhbFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIGNh
bm9uaWNhbFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkpCisgICAg
ICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVj
YXRlZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpKSB7CiAgICAgICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAvLyBSZWNyZWF0ZSB0aGUgc2FtZSBz
dHJ1Y3R1cmUgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCiAgICAgICAgIAogICAgICAgICBWZWN0b3I8
RWxlbWVudCo+IGFuY2VzdG9yczsKLSAgICAgICAgZ2V0QW5jZXN0b3JzSW5zaWRlQmxvY2soaW5z
ZXJ0aW9uUG9zaXRpb24ubm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOyAgICAgIAorICAg
ICAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOyAgICAgIAogICAgICAgICBSZWZQdHI8RWxl
bWVudD4gcGFyZW50ID0gY2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrKGFuY2VzdG9ycywgYmxv
Y2tUb0luc2VydCk7CiAgICAgICAgIAogICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKHBh
cmVudCk7CkBAIC0yNTQsMTEgKzI1NCwxMSBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvCiAgICAgICAgIE5vZGUgKnJlZk5vZGU7CiAgICAgICAgIGlmIChpc0ZpcnN0
SW5CbG9jayAmJiAhbmVzdE5ld0Jsb2NrKQogICAgICAgICAgICAgcmVmTm9kZSA9IHN0YXJ0Qmxv
Y2s7Ci0gICAgICAgIGVsc2UgaWYgKGluc2VydGlvblBvc2l0aW9uLm5vZGUoKSA9PSBzdGFydEJs
b2NrICYmIG5lc3ROZXdCbG9jaykgeworICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpID09IHN0YXJ0QmxvY2sgJiYgbmVzdE5ld0Jsb2NrKSB7CiAgICAg
ICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9jay0+Y2hpbGROb2RlKGluc2VydGlvblBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNTRVJUKHJlZk5vZGUp
OyAvLyBtdXN0IGJlIHRydWUgb3Igd2UnZCBiZSBpbiB0aGUgZW5kIG9mIGJsb2NrIGNhc2UKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZWZOb2RlID0gaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpOworICAgICAgICAgICAgcmVmTm9kZSA9IGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAKICAgICAgICAgLy8gZmluZCBlbmRpbmcgc2VsZWN0aW9uIHBvc2l0aW9uIGVhc2ls
eSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBwYXJhZ3JhcGgKICAgICAgICAgaW5zZXJ0aW9uUG9zaXRp
b24gPSBpbnNlcnRpb25Qb3NpdGlvbi5kb3duc3RyZWFtKCk7CkBAIC0yNjgsNyArMjY4LDcgQEAg
dm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAvLyBSZWNy
ZWF0ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCiAKICAgICAgICAg
VmVjdG9yPEVsZW1lbnQqPiBhbmNlc3RvcnM7Ci0gICAgICAgIGdldEFuY2VzdG9yc0luc2lkZUJs
b2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGluc2VydGlvblBvc2l0
aW9uKS5ub2RlKCksIHN0YXJ0QmxvY2ssIGFuY2VzdG9ycyk7CisgICAgICAgIGdldEFuY2VzdG9y
c0luc2lkZUJsb2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGluc2Vy
dGlvblBvc2l0aW9uKS5kZXByZWNhdGVkTm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOwog
ICAgICAgICAKICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihjbG9uZUhpZXJhcmNoeVVu
ZGVyTmV3QmxvY2soYW5jZXN0b3JzLCBibG9ja1RvSW5zZXJ0KSk7CiAgICAgICAgIApAQCAtMzAx
LDIyICszMDEsMjIgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwog
CiAgICAgLy8gQnVpbGQgdXAgbGlzdCBvZiBhbmNlc3RvcnMgaW4gYmV0d2VlbiB0aGUgc3RhcnQg
bm9kZSBhbmQgdGhlIHN0YXJ0IGJsb2NrLgogICAgIFZlY3RvcjxFbGVtZW50Kj4gYW5jZXN0b3Jz
OwotICAgIGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKGluc2VydGlvblBvc2l0aW9uLm5vZGUoKSwg
c3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKKyAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNl
cnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOwog
CiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBjYXVzZSBhIHJlbmRlcmVkIHNwYWNlIHRvIGJl
Y29tZSB1bnJlbmRlcmVkLgogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRoZSBhZmZpbml0eSBmb3Ig
cG9zLCBidXQgcG9zLmRvd25zdHJlYW0oKSBkb2VzIG5vdCBnaXZlIGl0CiAgICAgUG9zaXRpb24g
bGVhZGluZ1doaXRlc3BhY2UgPSBpbnNlcnRpb25Qb3NpdGlvbi5sZWFkaW5nV2hpdGVzcGFjZVBv
c2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIC8vIEZJWE1FOiBsZWFkaW5nV2hpdGVz
cGFjZVBvc2l0aW9uIGlzIHJldHVybmluZyB0aGUgcG9zaXRpb24gYmVmb3JlIHByZXNlcnZlZCBu
ZXdsaW5lcyBmb3IgcG9zaXRpb25zCiAgICAgLy8gYWZ0ZXIgdGhlIHByZXNlcnZlZCBuZXdsaW5l
LCBjYXVzaW5nIHRoZSBuZXdsaW5lIHRvIGJlIHR1cm5lZCBpbnRvIGEgbmJzcC4KLSAgICBpZiAo
bGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgbGVhZGluZ1doaXRlc3BhY2Uubm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obGVhZGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKKyAgICBpZiAobGVhZGluZ1doaXRlc3Bh
Y2UuaXNOb3ROdWxsKCkgJiYgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRl
eHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xs
YXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRleHROb2RlLCBs
ZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2lu
Z1NwYWNlU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4g
dGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KLSAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpKTsKKyAgICBpZiAoaW5zZXJ0aW9uUG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRl
eHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0gKHVuc2lnbmVkKWluc2VydGlvblBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgICAg
ICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDAgJiYg
IWF0RW5kKSB7CiAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBpbnNlcnRpb25Q
b3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKQEAgLTM0NCw4ICszNDQsOCBAQCB2
b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgICAgIGFwcGVuZE5v
ZGUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBibG9ja1RvSW5zZXJ0Lmdl
dCgpKTsKICAgICAgICAgCiAgICAgLy8gTW92ZSB0aGUgc3RhcnQgbm9kZSBhbmQgdGhlIHNpYmxp
bmdzIG9mIHRoZSBzdGFydCBub2RlLgotICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCkg
IT0gc3RhcnRCbG9jaykgewotICAgICAgICBOb2RlKiBuID0gaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpOworICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpICE9IHN0YXJ0
QmxvY2spIHsKKyAgICAgICAgTm9kZSogbiA9IGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKQogICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7CiAKQEAgLTM4MiwxMCArMzgyLDEwIEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIGluc2VydGlvblBvc2l0aW9uLm1vdmVUb09mZnNl
dCgwKTsKICAgICAgICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlvbi5pc1JlbmRlcmVkQ2hhcmFjdGVy
KCkpIHsKICAgICAgICAgICAgIC8vIENsZWFyIG91dCBhbGwgd2hpdGVzcGFjZSBhbmQgaW5zZXJ0
IG9uZSBub24tYnJlYWtpbmcgc3BhY2UKLSAgICAgICAgICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9z
aXRpb24ubm9kZSgpLT5yZW5kZXJlcigpIHx8IGluc2VydGlvblBvc2l0aW9uLm5vZGUoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpIHx8IGlu
c2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0
RG93bnN0cmVhbShpbnNlcnRpb25Qb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAoaW5zZXJ0aW9u
UG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0VGV4
dEludG9Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCkpLCAw
LCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKGluc2VydGlvblBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgICAgICBp
bnNlcnRUZXh0SW50b05vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRl
cHJlY2F0ZWROb2RlKCkpLCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTMgKzU4LDEzIEBAIFBvc2l0
aW9uIEluc2VydFRleHRDb21tYW5kOjpwcmVwYXJlRm9yVGUKICAgICBQb3NpdGlvbiBwb3MgPSBw
OwogICAgIC8vIFByZXBhcmUgZm9yIHRleHQgaW5wdXQgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lm
aWVkIHBvc2l0aW9uLgogICAgIC8vIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gaW5zZXJ0IGEgdGV4
dCBub2RlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4KLSAgICBpZiAoIXBvcy5ub2RlKCktPmlzVGV4
dE5vZGUoKSkgeworICAgIGlmICghcG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0
aW5nVGV4dE5vZGUoIiIpOwogICAgICAgICBpbnNlcnROb2RlQXQodGV4dE5vZGUuZ2V0KCksIHBv
cyk7CiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHROb2RlLmdldCgpKTsK
ICAgICB9CiAKLSAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpIHsKKyAgICBp
ZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFJl
ZlB0cjxOb2RlPiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgi
Iik7CiAgICAgICAgIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwg
cG9zKTsKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkp
OwpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0
IFN0cmkKICAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIG5vZGUgdGhhdCBjb250
YWlucyBzdGFydFBvc2l0aW9uIHRvIGNvbnRhaW4gb25seSB1bnJlbmRlcmVkIHdoaXRlc3BhY2Us
CiAgICAgLy8gYW5kIHNvIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0IGNvdWxkIHJlbW92ZSBpdC4g
IFNhdmUgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgbm9kZSBpbiBjYXNlIHRoYXQgaGFwcGVucy4K
LSAgICBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVN0YXJ0Tm9kZShwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShzdGFydFBvc2l0aW9uLm5vZGUoKSkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uQmVm
b3JlU3RhcnROb2RlKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHN0YXJ0UG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSkpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHN0YXJ0UG9zaXRp
b24udXBzdHJlYW0oKSwgc3RhcnRQb3NpdGlvbi5kb3duc3RyZWFtKCkpOwotICAgIGlmICghc3Rh
cnRQb3NpdGlvbi5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwb3Np
dGlvbkJlZm9yZVN0YXJ0Tm9kZTsKICAgICBpZiAoIXN0YXJ0UG9zaXRpb24uaXNDYW5kaWRhdGUo
KSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZG93bnN0cmVhbSgpOwpA
QCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0IFN0
cmkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXBhcmVGb3JUZXh0SW5zZXJ0aW9uKHN0YXJ0
UG9zaXRpb24pOwogICAgICAgICBpZiAocGxhY2Vob2xkZXIuaXNOb3ROdWxsKCkpCiAgICAgICAg
ICAgICByZW1vdmVQbGFjZWhvbGRlckF0KHBsYWNlaG9sZGVyKTsKLSAgICAgICAgVGV4dCAqdGV4
dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHN0YXJ0UG9zaXRpb24ubm9kZSgpKTsKKyAgICAg
ICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnRQb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0UG9zaXRpb24uZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKTsKIAogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5v
ZGUsIG9mZnNldCwgdGV4dCk7CkBAIC0yMDksNyArMjA5LDcgQEAgUG9zaXRpb24gSW5zZXJ0VGV4
dENvbW1hbmQ6Omluc2VydFRhYihjbwogewogICAgIFBvc2l0aW9uIGluc2VydFBvcyA9IFZpc2li
bGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIAot
ICAgIE5vZGUgKm5vZGUgPSBpbnNlcnRQb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBpbnNl
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW5zZXJ0
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAvLyBrZWVwIHRhYnMgY29hbGVz
Y2VkIGluIHRhYiBzcGFuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTIgKzUyLDEyIEBAIHN0YXRpYyBib29sIGdldFN0YXJ0RW5kTGlzdENoaWxkcmVu
KGNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gc3RhcnQgbXVzdCBiZSBpbiBh
IGxpc3QgY2hpbGQKLSAgICBOb2RlKiBzdGFydExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGls
ZChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOworICAgIE5vZGUqIHN0YXJ0TGlzdENoaWxkID0g
ZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghc3RhcnRMaXN0Q2hpbGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CiAgICAgLy8gZW5kIG11c3QgYmUgaW4gYSBsaXN0IGNoaWxkCi0gICAgTm9kZSogZW5kTGlzdENo
aWxkID0gc2VsZWN0aW9uLmlzUmFuZ2UoKSA/IGVuY2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb24u
ZW5kKCkubm9kZSgpKSA6IHN0YXJ0TGlzdENoaWxkOworICAgIE5vZGUqIGVuZExpc3RDaGlsZCA9
IHNlbGVjdGlvbi5pc1JhbmdlKCkgPyBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uLmVuZCgp
LmRlcHJlY2F0ZWROb2RlKCkpIDogc3RhcnRMaXN0Q2hpbGQ7CiAgICAgaWYgKCFlbmRMaXN0Q2hp
bGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE1vdmVTZWxl
Y3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50LCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgc21hcnRJbnNl
cnQsIGJvb2wgc21hcnREZWxldGUpIAotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocG9zaXRp
b24ubm9kZSgpLT5kb2N1bWVudCgpKSwgbV9mcmFnbWVudChmcmFnbWVudCksIG1fcG9zaXRpb24o
cG9zaXRpb24pLCBtX3NtYXJ0SW5zZXJ0KHNtYXJ0SW5zZXJ0KSwgbV9zbWFydERlbGV0ZShzbWFy
dERlbGV0ZSkKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKSksIG1fZnJhZ21lbnQoZnJhZ21lbnQpLCBtX3Bvc2l0aW9uKHBvc2l0aW9u
KSwgbV9zbWFydEluc2VydChzbWFydEluc2VydCksIG1fc21hcnREZWxldGUoc21hcnREZWxldGUp
CiB7CiAgICAgQVNTRVJUKG1fZnJhZ21lbnQpOwogfQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIE1v
dmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBzZXQgdGhlIGRlc3RpbmF0aW9u
IHRvIHRoZSBlbmRpbmcgcG9pbnQgYWZ0ZXIgdGhlIGRlbGV0aW9uLgogICAgIC8vIEZpeGVzOiA8
cmRhcjovL3Byb2JsZW0vMzkxMDQyNT4gUkVHUkVTU0lPTiAoTWFpbCk6IENyYXNoIGluIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOyAKICAgICAvLyAgICAgICAgc2VsZWN0aW9uIGlzIGVtcHR5LCBs
ZWFkaW5nIHRvIG51bGwgZGVyZWYKLSAgICBpZiAoIXBvcy5ub2RlKCktPmluRG9jdW1lbnQoKSkK
KyAgICBpZiAoIXBvcy5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgcG9zID0g
ZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxNSArMTEwLDE1IEBAIHN0
YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVMKIHN0YXRpYyBQb3NpdGlvbiBw
b3NpdGlvbkF2b2lkaW5nUHJlY2VkaW5nTm9kZXMoUG9zaXRpb24gcG9zKQogewogICAgIC8vIElm
IHdlJ3JlIGFscmVhZHkgb24gYSBicmVhaywgaXQncyBwcm9iYWJseSBhIHBsYWNlaG9sZGVyIGFu
ZCB3ZSBzaG91bGRuJ3QgY2hhbmdlIG91ciBwb3NpdGlvbi4KLSAgICBpZiAocG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGJyVGFnKSkKICAgICAgICAgcmV0dXJuIHBvczsKIAogICAgIC8vIFdlIGFsc28gc3RvcCB3
aGVuIGNoYW5naW5nIGJsb2NrIGZsb3cgZWxlbWVudHMgYmVjYXVzZSBldmVuIHRob3VnaCB0aGUg
dmlzdWFsIHBvc2l0aW9uIGlzIHRoZQogICAgIC8vIHNhbWUuICBFLmcuLAogICAgIC8vICAgPGRp
dj5mb29ePC9kaXY+XgogICAgIC8vIFRoZSB0d28gcG9zaXRpb25zIGFib3ZlIGFyZSB0aGUgc2Ft
ZSB2aXN1YWwgcG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRvIHN0YXkgaW4gdGhlIHNhbWUgYmxvY2su
Ci0gICAgTm9kZSogc3RvcE5vZGUgPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCk7Ci0gICAgd2hpbGUgKHN0b3BOb2RlICE9IHBvcy5ub2RlKCkgJiYgVmlzaWJsZVBvc2l0
aW9uKHBvcykgPT0gVmlzaWJsZVBvc2l0aW9uKHBvcy5uZXh0KCkpKQorICAgIE5vZGUqIHN0b3BO
b2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsK
KyAgICB3aGlsZSAoc3RvcE5vZGUgIT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkgJiYgVmlzaWJsZVBv
c2l0aW9uKHBvcykgPT0gVmlzaWJsZVBvc2l0aW9uKHBvcy5uZXh0KCkpKQogICAgICAgICBwb3Mg
PSBwb3MubmV4dCgpOwogICAgIHJldHVybiBwb3M7CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgUmVw
bGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTm9kZSogc3R5bGVOb2RlID0gc2VsZWN0aW9uLmJhc2UoKS5ub2RlKCk7Cisg
ICAgTm9kZSogc3R5bGVOb2RlID0gc2VsZWN0aW9uLmJhc2UoKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBob2xkZXIgPSBpbnNlcnRGcmFnbWVudEZvclRlc3RS
ZW5kZXJpbmcoc3R5bGVOb2RlKTsKICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlz
aWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgYm9vbCBoYXNN
YXRjaGluZ1F1b3RlTGV2ZWwoVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gZXhpc3RpbmcgPSBlbmRP
ZkV4aXN0aW5nQ29udGVudC5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGluc2VydGVk
ID0gZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBib29sIGlzSW5z
aWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0ZWQubm9kZSgp
KTsKKyAgICBib29sIGlzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVv
dGUoaW5zZXJ0ZWQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgcmV0dXJuIGlzSW5zaWRlTWFpbEJs
b2NrcXVvdGUgJiYgKG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhleGlzdGluZykgPT0gbnVt
RW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGluc2VydGVkKSk7CiB9CiAKQEAgLTM3OSwxMSArMzc5
LDExIEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmcKICAgICBpZiAo
aXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpICYmIHNlbGVjdGlvblN0
YXJ0V2FzSW5zaWRlTWFpbEJsb2NrcXVvdGUgJiYgaGFzTWF0Y2hpbmdRdW90ZUxldmVsKHByZXYs
IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gIXNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBhcmFncmFwaCAmJiAKLSAg
ICAgICAgICAgIWZyYWdtZW50SGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCAmJgotICAgICAg
ICAgICBpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkgJiYgCi0gICAg
ICAgICAgICFzdGFydE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5o
YXNUYWdOYW1lKGJyVGFnKSAmJgotICAgICAgICAgICBzaG91bGRNZXJnZShzdGFydE9mSW5zZXJ0
ZWRDb250ZW50LCBwcmV2KTsKKyAgICByZXR1cm4gIXNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBh
cmFncmFwaAorICAgICAgICAmJiAhZnJhZ21lbnRIYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0
CisgICAgICAgICYmIGlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KQor
ICAgICAgICAmJiAhc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpCisgICAgICAgICYmIHNob3VsZE1lcmdlKHN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQsIHByZXYpOwogfQogCiBib29sIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpzaG91bGRNZXJnZUVuZChib29sIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
KQpAQCAtMzkzLDEwICszOTMsMTAgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hv
dWxkTWVyZwogICAgIGlmIChuZXh0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gIXNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmCi0gICAgICAgICAg
IGlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYmIAotICAgICAgICAgICAh
ZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmhhc1RhZ05hbWUo
YnJUYWcpICYmCi0gICAgICAgICAgIHNob3VsZE1lcmdlKGVuZE9mSW5zZXJ0ZWRDb250ZW50LCBu
ZXh0KTsKKyAgICByZXR1cm4gIXNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoCisgICAgICAg
ICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpCisgICAgICAgICYmICFl
bmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpCisgICAgICAgICYmIHNob3VsZE1lcmdlKGVuZE9mSW5zZXJ0ZWRDb250
ZW50LCBuZXh0KTsKIH0KIAogc3RhdGljIGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUo
Y29uc3QgTm9kZSogbm9kZSkKQEAgLTQ1Myw4ICs0NTMsOCBAQCBib29sIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpzaG91bGRNZXJnCiAgICAgaWYgKHNvdXJjZS5pc051bGwoKSB8fCBkZXN0aW5h
dGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBOb2Rl
KiBzb3VyY2VOb2RlID0gc291cmNlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwotICAgIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwor
ICAgIE5vZGUqIHNvdXJjZU5vZGUgPSBzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpOworICAgIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2RlKiBzb3VyY2VCbG9jayA9IGVuY2xv
c2luZ0Jsb2NrKHNvdXJjZU5vZGUpOwogICAgIE5vZGUqIGRlc3RpbmF0aW9uQmxvY2sgPSBlbmNs
b3NpbmdCbG9jayhkZXN0aW5hdGlvbk5vZGUpOwogICAgIHJldHVybiAhZW5jbG9zaW5nTm9kZU9m
VHlwZShzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKSwgJmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2Rl
KSAmJgpAQCAtNzQwLDcgKzc0MCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlRW5kSWYKICAgICAvLyBUbyBhdm9pZCB0aGlzLCB3ZSBhZGQgYSBwbGFjZWhvbGRlciBub2Rl
IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaC4KICAgICBpZiAoZW5kT2ZQYXJhZ3Jh
cGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSkgPT0gZGVzdGluYXRpb24pIHsKICAgICAgICAgUmVm
UHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwot
ICAgICAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVyLCBzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShw
bGFjZWhvbGRlciwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgICAgICBkZXN0aW5hdGlvbiA9IFZpc2libGVQb3NpdGlvbihwb3Np
dGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIuZ2V0KCkpKTsKICAgICB9CiAKQEAgLTc1MSw5ICs3
NTEsOSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZUVuZElmCiAgICAgLy8g
b25seSBldmVyIHVzZWQgdG8gY3JlYXRlIHBvc2l0aW9ucyB3aGVyZSBpbnNlcnRlZCBjb250ZW50
IHN0YXJ0cy9lbmRzLiAgQWxzbywgd2Ugc29tZXRpbWVzIGluc2VydCBjb250ZW50CiAgICAgLy8g
ZGlyZWN0bHkgaW50byB0ZXh0IG5vZGVzIGFscmVhZHkgaW4gdGhlIGRvY3VtZW50LCBpbiB3aGlj
aCBjYXNlIHRyYWNraW5nIGluc2VydGVkIG5vZGVzIGlzIGluYWRlcXVhdGUuCiAgICAgaWYgKG1l
cmdlRm9yd2FyZCkgewotICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBkZXN0aW5hdGlvbi5w
cmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBtX2xhc3RMZWFmSW5z
ZXJ0ZWQgPSBkZXN0aW5hdGlvbi5wcmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICAgICAgaWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5pbkRvY3VtZW50KCkp
Ci0gICAgICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBJZiB3ZSBtZXJnZWQgdGV4dCBu
b2RlcywgbV9sYXN0TGVhZkluc2VydGVkIGNvdWxkIGJlIG51bGwuIElmIHRoaXMgaXMgdGhlIGNh
c2UsCiAgICAgICAgIC8vIHdlIHVzZSBtX2ZpcnN0Tm9kZUluc2VydGVkLgogICAgICAgICBpZiAo
IW1fbGFzdExlYWZJbnNlcnRlZCkKQEAgLTc4MCw4ICs3ODAsOCBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
biA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgIEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFu
Z2UoKSk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSk7Ci0gICAgaWYgKCFz
ZWxlY3Rpb24uaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpIHx8ICFzZWxlY3Rpb24uc3RhcnQo
KS5ub2RlKCkpCisgICAgQVNTRVJUKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkp
OworICAgIGlmICghc2VsZWN0aW9uLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSB8fCAhc2Vs
ZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGJvb2wgc2VsZWN0aW9uSXNQbGFpblRleHQgPSAhc2VsZWN0aW9uLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCk7CkBAIC03OTMsOCArNzkzLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBXZSBjYW4gc2tp
cCBtYXRjaGluZyB0aGUgc3R5bGUgaWYgdGhlIHNlbGVjdGlvbiBpcyBwbGFpbiB0ZXh0LgotICAg
IGlmICgoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5yZW5kZXJlcigpICYmIHNlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJFQURf
V1JJVEVfUExBSU5URVhUX09OTFkpICYmCi0gICAgICAgIChzZWxlY3Rpb24uZW5kKCkubm9kZSgp
LT5yZW5kZXJlcigpICYmIHNlbGVjdGlvbi5lbmQoKS5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZKSkKKyAgICBpZiAo
KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc2VsZWN0
aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1v
ZGlmeSgpID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFkpCisgICAgICAgICYmIChzZWxlY3Rp
b24uZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzZWxlY3Rpb24uZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJF
QURfV1JJVEVfUExBSU5URVhUX09OTFkpKQogICAgICAgICBtX21hdGNoU3R5bGUgPSBmYWxzZTsK
ICAgICAKICAgICBpZiAobV9tYXRjaFN0eWxlKQpAQCAtODA2LDEwICs4MDYsMTAgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgYm9vbCBzZWxlY3Rpb25FbmRX
YXNFbmRPZlBhcmFncmFwaCA9IGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCk7CiAgICAgYm9v
bCBzZWxlY3Rpb25TdGFydFdhc1N0YXJ0T2ZQYXJhZ3JhcGggPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
dmlzaWJsZVN0YXJ0KTsKICAgICAKLSAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxv
Y2sodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBOb2RlKiBzdGFy
dEJsb2NrID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0
aW9uLnN0YXJ0KCk7Ci0gICAgYm9vbCBzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFy
ZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0aW9uUG9zLm5vZGUoKSk7CisgICAgYm9vbCBzdGFydElz
SW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0aW9uUG9z
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIAogICAgIGlmICgoc2VsZWN0aW9uU3RhcnRXYXNTdGFy
dE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmICFzdGFydElz
SW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAgIHN0YXJ0QmxvY2sgPT0gY3VycmVudFJv
b3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rpb25Jc1BsYWluVGV4dCkKQEAg
LTg2Miw3ICs4NjIsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICBpZiAoc3RhcnRJc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIG1fcHJldmVudE5lc3Rpbmcg
JiYgIShlbmNsb3NpbmdOb2RlT2ZUeXBlKGluc2VydGlvblBvcywgJmlzVGFibGVTdHJ1Y3R1cmVO
b2RlKSkpIHsgCiAgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2txdW90
ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7IAogICAgICAgICAvLyBUaGlzIHdpbGwgbGVh
dmUgYSBiciBiZXR3ZWVuIHRoZSBzcGxpdC4gCi0gICAgICAgIE5vZGUqIGJyID0gZW5kaW5nU2Vs
ZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7IAorICAgICAgICBOb2RlKiBiciA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsgCiAgICAgICAgIEFTU0VSVChici0+aGFz
VGFnTmFtZShiclRhZykpOyAKICAgICAgICAgLy8gSW5zZXJ0IGNvbnRlbnQgYmV0d2VlbiB0aGUg
dHdvIGJsb2NrcXVvdGVzLCBidXQgcmVtb3ZlIHRoZSBiciAoc2luY2UgaXQgd2FzIGp1c3QgYSBw
bGFjZWhvbGRlcikuIAogICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShicik7CkBAIC04NzMsMTggKzg3MywxOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxp
dChpbnNlcnRpb25Qb3MpOwogCiAgICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gbm9kZSBoYXMgYmVl
biByZW1vdmVkIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZy4KLSAgICBpZiAoIWluc2Vy
dGlvblBvcy5kb3duc3RyZWFtKCkubm9kZSgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9zLmRvd25z
dHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIE5P
VEU6IFRoaXMgd291bGQgYmUgYW4gaW5jb3JyZWN0IHVzYWdlIG9mIGRvd25zdHJlYW0oKSBpZiBk
b3duc3RyZWFtKCkgd2VyZSBjaGFuZ2VkIHRvIG1lYW4gdGhlIGxhc3QgcG9zaXRpb24gYWZ0ZXIg
CiAgICAgLy8gcCB0aGF0IG1hcHMgdG8gdGhlIHNhbWUgdmlzaWJsZSBwb3NpdGlvbiBhcyBwIChz
aW5jZSBpbiB0aGUgY2FzZSB3aGVyZSBhIGJyIGlzIGF0IHRoZSBlbmQgb2YgYSBibG9jayBhbmQg
Y29sbGFwc2VkIAogICAgIC8vIGF3YXksIHRoZXJlIGFyZSBwb3NpdGlvbnMgYWZ0ZXIgdGhlIGJy
IHdoaWNoIG1hcCB0byB0aGUgc2FtZSB2aXNpYmxlIHBvc2l0aW9uIGFzIFticiwgMF0pLiAgCi0g
ICAgTm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFn
TmFtZShiclRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKSA6IDA7CisgICAg
Tm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5kZXByZWNhdGVk
Tm9kZSgpIDogMDsKICAgICBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRC
UjsKICAgICBpZiAoZW5kQlIpCiAgICAgICAgIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIgPSBW
aXNpYmxlUG9zaXRpb24oZW5kQlIsIDAsIERPV05TVFJFQU0pLnByZXZpb3VzKCk7CiAgICAgCi0g
ICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5ub2RlKCkpOworICAg
IHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgCiAgICAgLy8gQWRqdXN0IGluc2VydGlvblBvcyB0byBwcmV2ZW50IG5lc3Rpbmcu
CiAgICAgLy8gSWYgdGhlIHN0YXJ0IHdhcyBpbiBhIE1haWwgYmxvY2txdW90ZSwgd2Ugd2lsbCBo
YXZlIGFscmVhZHkgaGFuZGxlZCBhZGp1c3RpbmcgaW5zZXJ0aW9uUG9zIGFib3ZlLgpAQCAtOTM5
LDcgKzkzOSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IAogICAgIGZyYWdtZW50LnJlbW92ZU5vZGUocmVmTm9kZSk7CiAKLSAgICBOb2RlKiBibG9ja1N0
YXJ0ID0gZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLm5vZGUoKSk7CisgICAgTm9kZSogYmxv
Y2tTdGFydCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBpZiAoKGlzTGlzdEVsZW1lbnQocmVmTm9kZS5nZXQoKSkgfHwgKGlzU3R5bGVTcGFuKHJl
Zk5vZGUuZ2V0KCkpICYmIGlzTGlzdEVsZW1lbnQocmVmTm9kZS0+Zmlyc3RDaGlsZCgpKSkpCiAg
ICAgICAgICYmIGJsb2NrU3RhcnQtPnJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkKICAgICAgICAg
cmVmTm9kZSA9IGluc2VydEFzTGlzdEl0ZW1zKHJlZk5vZGUsIGJsb2NrU3RhcnQsIGluc2VydGlv
blBvcyk7CkBAIC05ODMsNyArOTgzLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gV2UgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBzdGFydEJsb2Nr
IHRvIHByZXZlbnQgbmVzdGluZywgYW5kIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgc3RhcnRCbG9j
ayB3YXNuJ3QgaW4gaXRzIG93biBibG9jayBhbmQKICAgICAvLyBkaWRuJ3QgaGF2ZSBhIGJyIGFm
dGVyIGl0LCBzbyB0aGUgaW5zZXJ0ZWQgY29udGVudCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwYXJh
Z3JhcGguCi0gICAgaWYgKHN0YXJ0QmxvY2sgJiYgaW5zZXJ0aW9uUG9zLm5vZGUoKSA9PSBzdGFy
dEJsb2NrLT5wYXJlbnROb2RlKCkgJiYgKHVuc2lnbmVkKWluc2VydGlvblBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIDwgc3RhcnRCbG9jay0+bm9kZUluZGV4KCkgJiYgIWlzU3RhcnRPZlBh
cmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSkKKyAgICBpZiAoc3RhcnRCbG9jayAmJiBp
bnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSA9PSBzdGFydEJsb2NrLT5wYXJlbnROb2RlKCkg
JiYgKHVuc2lnbmVkKWluc2VydGlvblBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDwgc3Rh
cnRCbG9jay0+bm9kZUluZGV4KCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0
ZWRDb250ZW50KSkKICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKS5nZXQoKSwgc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpKTsK
ICAgICAKICAgICBQb3NpdGlvbiBsYXN0UG9zaXRpb25Ub1NlbGVjdDsKQEAgLTEwMDMsNyArMTAw
Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAv
LyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1lcmdlIHRoZSBl
bmQKICAgICAgICAgLy8gYnV0IG91ciBkZXN0aW5hdGlvbiBub2RlIGlzIGluc2lkZSBhbiBpbmxp
bmUgdGhhdCBpcyB0aGUgbGFzdCBpbiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFdlIGluc2VydCBh
IHBsYWNlaG9sZGVyIGJlZm9yZSB0aGUgbmV3bHkgaW5zZXJ0ZWQgY29udGVudCB0byBhdm9pZCBi
ZWluZyBtZXJnZWQgaW50byB0aGUgaW5saW5lLgotICAgICAgICBOb2RlKiBkZXN0aW5hdGlvbk5v
ZGUgPSBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSog
ZGVzdGluYXRpb25Ob2RlID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpOwogICAgICAgICBpZiAobV9zaG91bGRNZXJnZUVuZCAmJiBkZXN0aW5hdGlvbk5vZGUg
IT0gZW5jbG9zaW5nSW5saW5lKGRlc3RpbmF0aW9uTm9kZSkgJiYgZW5jbG9zaW5nSW5saW5lKGRl
c3RpbmF0aW9uTm9kZSktPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgcmVmTm9kZS5nZXQoKSk7CiAgICAg
ICAgIApAQCAtMTAxOCwxNiArMTAxOCwxNiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENv
bnRlbnQpID09IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUpIHsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBdChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCksIGVuZE9mSW5zZXJ0ZWRD
b250ZW50LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRz
IChidWcgMjI2MzQpIHRyaWdnZXJlZCBieSBpbnNlcnRpbmcgdGhlIDxicj4gbWlnaHQgaGF2ZSBy
ZW1vdmVkIHRoZSBjb250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKLSAgICAgICAgICAgIGlmICgh
c3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVu
dCgpKQorICAgICAgICAgICAgaWYgKCFzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFs
ZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IE1haW50YWluIHBvc2l0aW9ucyBmb3Ig
dGhlIHN0YXJ0IGFuZCBlbmQgb2YgaW5zZXJ0ZWQgY29udGVudCBpbnN0ZWFkIG9mIGtlZXBpbmcg
bm9kZXMuICBUaGUgbm9kZXMgYXJlCiAgICAgICAgIC8vIG9ubHkgZXZlciB1c2VkIHRvIGNyZWF0
ZSBwb3NpdGlvbnMgd2hlcmUgaW5zZXJ0ZWQgY29udGVudCBzdGFydHMvZW5kcy4KICAgICAgICAg
bW92ZVBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBlbmRPZlBhcmFncmFwaChzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlKSwgZGVzdGluYXRpb24pOwotICAgICAgICBtX2ZpcnN0Tm9kZUlu
c2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCkubm9kZSgpOworICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKCFtX2xhc3RMZWFmSW5zZXJ0ZWQtPmlu
RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVFbmQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkubm9kZSgpOwor
ICAgICAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJs
ZUVuZCgpLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAg
IH0KICAgICAgICAgICAgIAogICAgIGVuZE9mSW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdEVu
ZE9mSW5zZXJ0ZWRDb250ZW50KCk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKHNlbGVjdGlvbkVuZFdhc0Vu
ZE9mUGFyYWdyYXBoIHx8ICFpc0VuZE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250ZW50KSB8
fCBuZXh0LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChl
bmRPZkluc2VydGVkQ29udGVudCkpIHsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oZW5kT2ZJbnNlcnRlZENvbnRlbnQpOwotICAgICAgICAgICAgICAgIE5vZGUqIGVuY2xvc2lu
Z05vZGUgPSBlbmNsb3NpbmdCbG9jayhlbmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xv
c2luZ0Jsb2NrKGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGlzdEl0ZW0oZW5jbG9zaW5nTm9kZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3RJdGVtID0gY3JlYXRl
TGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlQWZ0ZXIobmV3TGlzdEl0ZW0sIGVuY2xvc2luZ05vZGUpOwpAQCAtMTA1MSw3ICsxMDUxLDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAgICAgICAg
ICAgICAvLyBTZWxlY3QgdXAgdG8gdGhlIHBhcmFncmFwaCBzZXBhcmF0b3IgdGhhdCB3YXMgYWRk
ZWQuCiAgICAgICAgICAgICAgICAgbGFzdFBvc2l0aW9uVG9TZWxlY3QgPSBlbmRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIHVw
ZGF0ZU5vZGVzSW5zZXJ0ZWQobGFzdFBvc2l0aW9uVG9TZWxlY3Qubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVOb2Rlc0luc2VydGVkKGxhc3RQb3NpdGlvblRvU2VsZWN0LmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gU2VsZWN0IHVwIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFyYWdyYXBoLgpAQCAt
MTA3OSw3ICsxMDc5LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgICAgIGlmIChuZWVkc1RyYWlsaW5nU3BhY2UpIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCk7CiAgICAgICAg
ICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5
bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBOb2RlKiBlbmROb2RlID0g
cG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVh
bSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBwb3NpdGlvbkF0RW5kT2ZJ
bnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChlbmROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAg
ICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZE5vZGUpOwogICAgICAg
ICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgY29sbGFw
c2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKQEAgLTEwOTQs
NyArMTA5NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBi
b29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3Np
dGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVh
bSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHBvc2l0aW9uQXRTdGFy
dE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewog
ICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnROb2Rl
KTsKICAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgY29sbGFwc2VX
aGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKQEAgLTEyMTIsOSAr
MTIxMiw5IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0wKICAgICAv
LyBsaXN0IGl0ZW1zIGFuZCBpbnNlcnQgdGhlc2Ugbm9kZXMgYmV0d2VlbiB0aGVtLgogICAgIGlm
IChpc01pZGRsZSkgewogICAgICAgICBpbnQgdGV4dE5vZGVPZmZzZXQgPSBpbnNlcnRQb3Mub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgIGlmIChpbnNlcnRQb3Mubm9kZSgpLT5pc1Rl
eHROb2RlKCkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQotICAgICAgICAgICAgc3BsaXRUZXh0Tm9k
ZShzdGF0aWNfY2FzdDxUZXh0Kj4oaW5zZXJ0UG9zLm5vZGUoKSksIHRleHROb2RlT2Zmc2V0KTsK
LSAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5ub2RlKCksIGxhc3ROb2RlLCB0cnVl
KTsKKyAgICAgICAgaWYgKGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkg
JiYgdGV4dE5vZGVPZmZzZXQgPiAwKQorICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNf
Y2FzdDxUZXh0Kj4oaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7
CisgICAgICAgIHNwbGl0VHJlZVRvTm9kZShpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgbGFz
dE5vZGUsIHRydWUpOwogICAgIH0KIAogICAgIHdoaWxlIChSZWZQdHI8Tm9kZT4gbGlzdEl0ZW0g
PSBsaXN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0
aW9uKGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5vZGUqIGJhc2VOb2RlID0gcy5i
YXNlKCkubm9kZSgpOworICAgIE5vZGUqIGJhc2VOb2RlID0gcy5iYXNlKCkuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAwOwogICAgIGlmIChiYXNlTm9kZSkKICAg
ICAgICAgZG9jdW1lbnQgPSBiYXNlTm9kZS0+ZG9jdW1lbnQoKTsKQEAgLTIwNCwxNyArMjA0LDE3
IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKIAogc3RhdGljIGJv
b2wgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKIHsKLSAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKSkKKyAgICBpZiAoIXBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChw
b3NpdGlvbi5ub2RlKCkgPT0gbm9kZSkKKyAgICBpZiAocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5jb250
YWlucyhwb3NpdGlvbi5ub2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLm5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOworICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CiB9CiAKIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSAqbm9kZSkKQEAgLTI2Miw3ICsy
NjIsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb05vZGVNCiAgICAgfQog
CiAgICAgaWYgKGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewotICAgICAgICBSZWZQdHI8RG9j
dW1lbnQ+IGRvY3VtZW50ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50KCk7
CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX3NlbGVjdGlvbi5zdGFydCgp
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXco
ZG9jdW1lbnQtPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24o
KTsKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OndpbGxCZU1v
ZGlmaWVkCiAKIFRleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpCiB7Ci0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9z
aW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkubm9kZSgpKTsKKyAgICBOb2RlKiBlbmNsb3Np
bmdCbG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhtX3NlbGVjdGlvbi5leHRlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICBpZiAoIWVuY2xvc2luZ0Jsb2NrTm9kZSkKICAgICAgICAgcmV0dXJu
IExUUjsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZW5jbG9zaW5nQmxvY2tOb2RlLT5y
ZW5kZXJlcigpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIGludCBTZWxlY3Rpb25Db250cm9sbGVyOjp4
UG9zRm9yVmVydGljYWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1l
ID0gcG9zLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBw
b3MuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiB4OwogICAgICAgICAKQEAgLTk5OCwxOSArOTk4LDE5IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRSZWN0TmUKIAogdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjp1cGRhdGVDYXJldFJlY3QoKQogewotICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rp
b24uc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkubm9k
ZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICBpZiAoaXNOb25lKCkgfHwgIW1fc2VsZWN0aW9uLnN0
YXJ0KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmFu
Y2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIG1fY2FyZXRSZWN0ID0gSW50UmVj
dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zZWxlY3Rpb24uc3RhcnQoKS5u
b2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX3NlbGVjdGlv
bi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogICAgIAogICAgIG1fY2FyZXRSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICAKICAgICBpZiAo
aXNDYXJldCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uc3Rh
cnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxs
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJl
bmRlcmVyKCkpOworICAgICAgICAgICAgQVNTRVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBG
aXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0byB0aGUgcmVuZGVyZXIgYXQgdGhlIHNlbGVjdGlv
biBzdGFydAogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcjsKQEAgLTEwNDQsNyAr
MTA0NCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6dXBkYXRlQ2FyZXRSZWMKIAogUmVu
ZGVyT2JqZWN0KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRlcmVyKCkgY29uc3QKIHsK
LSAgICBOb2RlKiBub2RlID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTUxLDcgKzExNTEsNyBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmludmFsaWRhdGVDYXJlCiAgICAgaWYgKCFpc0NhcmV0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmFu
Y2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKIAogICAgIC8vIHJlY29tcHV0ZUNhcmV0UmVjdCB3aWxs
IGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIHRoZSBkcmFnIGNhcmV0LAogICAgIC8vIGJlY2F1c2Ug
aXRzIG1fZnJhbWUgaXMgYWx3YXlzIDAuCkBAIC0xMjI5LDkgKzEyMjksOSBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoCiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0g
dGV4dC5sZW5ndGgoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCkpCisgICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpKQorICAgICAgICAgICAg
ZWxzZSBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWROb2RlKCkp
CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBwb3M7CkBA
IC0xNDI5LDcgKzE0MjksNyBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVk
UmFuCiAKIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmllbGQoKSBjb25z
dAogewotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0KCkubm9kZSgpOworICAgIE5vZGUqIHN0
YXJ0Tm9kZSA9IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNTc1LDggKzE1NzUsOCBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFuCiAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEg
c3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2li
bGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKICAgICAvLyBiZWNhdXNlIHdl
IGRvbid0IHlldCBub3RpZnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFs
LgogICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYg
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKLSAg
ICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLm5vZGUo
KS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3Rh
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAg
ICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKICAgICB9CiB9CkBAIC0xNjc3LDcgKzE2NzcsNyBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlciA9IG1fZnJhbWUtPnBhZ2UoKS0+
ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwogICAgIEFTU0VSVChkcmFnQ2FyZXRDb250cm9sbGVyLT5z
ZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwotICAgIGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQor
ICAgIGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICAgICBkcmFnQ2FyZXRD
b250cm9sbGVyLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJlY3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocCk7CkBAIC0xNzUxLDcgKzE3NTEsNyBAQCBIVE1MRm9ybUVsZW1lbnQqIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmN1CiAgICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhl
IGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlz
LgogICAgIE5vZGUqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkubm9kZSgpOwor
ICAgICAgICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIC8v
IFRyeSB3YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KICAg
ICBOb2RlKiBub2RlOwpAQCAtMTc4MiwxMiArMTc4MiwxMiBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnJldmVhbFNlbGVjdGlvCiAgICAgfQogCiAgICAgUG9zaXRpb24gc3RhcnQgPSB0aGlz
LT5zdGFydCgpOwotICAgIEFTU0VSVChzdGFydC5ub2RlKCkpOwotICAgIGlmIChzdGFydC5ub2Rl
KCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpKSB7CisgICAgQVNTRVJUKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBvbmx5IGhhbmRsZXMgc2Nyb2xsaW5nIHRoZSBzdGFydENvbnRhaW5lcidzIGxheWVyLCBidXQK
ICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiByZWN0IGNvdWxkIGludGVyc2VjdCBtb3JlIHRoYW4g
anVzdCB0aGF0LgogICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ3OTk4OTk+LgotICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50
LCBhbGlnbm1lbnQpOwogICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQotICAgIDogU2ltcGxlRWRpdENvbW1hbmQoc2VsZWN0
aW9uLmJhc2UoKS5ub2RlKCktPmRvY3VtZW50KCkpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChz
ZWxlY3Rpb24uYmFzZSgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSkKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogICAgICwgbV9zZWxlY3Rpb25Ub1NldChzZWxlY3Rpb24pCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM0Niw3ICsyMzQ2LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZybwogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRp
b24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+
c2V0RW5kKHJ1bkVuZC5ub2RlKCksIHJ1bkVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
Yyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZChydW5FbmQu
ZGVwcmVjYXRlZE5vZGUoKSwgcnVuRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAg
ICBib29sIGNoYW5nZVNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24gIT0gc2VsZWN0aW9uRm9y
SW5zZXJ0aW9uOwogICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dDsKLSAgICBOb2RlKiBzdGFydE5v
ZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc3Rh
cnROb2RlID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpICYmIGNvbXBvc2l0aW9uVHlwZSAhPSBUZXh0Q29tcG9zaXRpb25VcGRhdGUpIHsKICAgICAg
ICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50IGhhbmRsZXIgd2ls
bCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleAogCiAgICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlU3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgY2FyZXQgc2VsZWN0aW9uIG9uIGFuIGVtcHR5IGNlbGwsIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICAgICAgaWYgKGlzRW1wdHlUYWJsZUNlbGwodmlzaWJsZVN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkKKyAgICAgICAgaWYgKGlzRW1wdHlUYWJsZUNl
bGwodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFy
dCBvZiBhIHBhcmFncmFwaCBhZnRlciBhIHRhYmxlLCBtb3ZlIGNvbnRlbnQgaW50byB0aGUgbGFz
dCB0YWJsZSBjZWxsLgpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChUZXgKIAogICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IHNlbGVjdGlv
bi5zZWxlY3Rpb24oKTsKIAotICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgpID09IHNlbGVjdGlvblRv
RGVsZXRlLnN0YXJ0KCkubm9kZSgpICYmIHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPiAxKSB7CisgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSAmJiBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgp
ID09IHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBzZWxlY3Rp
b25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc2VsZWN0aW9uVG9E
ZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIFVuaWNvZGUgY29kZSBwb2ludHMgdG8gYmUgZGVs
ZXRlZCwgYWRqdXN0IHRoZSByYW5nZSB0byBtYXRjaCBwbGF0Zm9ybSBjb252ZW50aW9ucy4KICAg
ICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlLnNldFdpdGhvdXRWYWxpZGF0aW9uKHNlbGVjdGlv
blRvRGVsZXRlLmVuZCgpLCBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5wcmV2aW91cyhCYWNrd2Fy
ZERlbGV0aW9uKSk7CiAgICAgICAgIH0KQEAgLTU3MCw4ICs1NzAsOCBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgIGlmICh2aXNpYmxlRW5kID09IGVu
ZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpKQogICAgICAgICAgICAgZG93bnN0cmVhbUVuZCA9IHZp
c2libGVFbmQubmV4dCh0cnVlKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKICAgICAg
ICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNlbGVjdCB0aGUgdGFibGUgZmlyc3QsIHRoZW4g
cGVyZm9ybSB0aGUgZGVsZXRpb24KLSAgICAgICAgaWYgKGRvd25zdHJlYW1FbmQubm9kZSgpICYm
IGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW1FbmQubm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkgewotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShkb3duc3RyZWFtRW5kLm5vZGUoKSksIERPV05TVFJFQU0pKTsKKyAgICAgICAgaWYgKGRv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSkgeworICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShk
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAg
ICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU4OCwxNSArNTg4LDE1IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICAgICAgICAgIC8vIFdlIGNhbid0IGxldCB0
aGUgVmlzaWJsZVNlbGVjdGlvbiBjbGFzcydzIHZhbGlkYXRpb24ga2ljayBpbiBvciBpdCdsbCBh
ZGp1c3QgZm9yIHVzIGJhc2VkIG9uCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBzdGF0ZSBv
ZiB0aGUgZG9jdW1lbnQgYW5kIHdlJ2xsIGdldCB0aGUgd3JvbmcgcmVzdWx0LgogICAgICAgICAg
ICAgUG9zaXRpb24gZXh0ZW50ID0gc3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKLSAgICAgICAg
ICAgIGlmIChleHRlbnQubm9kZSgpICE9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKSkK
KyAgICAgICAgICAgIGlmIChleHRlbnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBzZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgIGV4dGVudCA9IHNl
bGVjdGlvblRvRGVsZXRlLmV4dGVudCgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaW50IGV4dHJhQ2hhcmFjdGVyczsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuc3RhcnQoKS5ub2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgp
KQorICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0
ZWROb2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFDaGFyYWN0ZXJzID0gc2VsZWN0aW9uVG9EZWxldGUuZW5k
KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCku
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhQ2hhcmFjdGVycyA9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgZXh0ZW50ID0gUG9zaXRp
b24oZXh0ZW50Lm5vZGUoKSwgZXh0ZW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBleHRy
YUNoYXJhY3RlcnMsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAg
ICAgICAgICAgIGV4dGVudCA9IFBvc2l0aW9uKGV4dGVudC5kZXByZWNhdGVkTm9kZSgpLCBleHRl
bnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGV4dHJhQ2hhcmFjdGVycywgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
ZWxlY3Rpb25BZnRlclVuZG8uc2V0V2l0aG91dFZhbGlkYXRpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KS5zdGFydCgpLCBleHRlbnQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcg
KzEwNiw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3UKIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25z
dAogewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgp
KQorICAgIGlmICghcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAt
MjQyLDcgKzI0Miw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm8K
IFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFw
Lm5vZGUoKSkKKyAgICBpZiAoIXAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0o
KTsKQEAgLTM4NCw3ICszODQsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpo
b25vckVkCiAgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGRlZXBF
cXVpdmFsZW50KCkpOwogICAgIAogICAgIC8vIFJldHVybiBlbXB0eSBwb3NpdGlvbiBpZiBwb3Mg
aXMgbm90IHNvbWV3aGVyZSBpbnNpZGUgdGhlIGVkaXRhYmxlIHJlZ2lvbiBjb250YWluaW5nIHRo
aXMgcG9zaXRpb24KLSAgICBpZiAoaGlnaGVzdFJvb3QgJiYgIXBvcy5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgIGlmIChoaWdoZXN0Um9v
dCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAg
ICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlmIHRoZSB0d28gYXJlIGZyb20gdGhlIHZl
cnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGggYXJlIG5vbi1lZGl0YWJsZQpAQCAtNDEw
LDcgKzQxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWQKICAg
ICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQo
KSk7CiAgICAgCiAgICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29t
ZXdoZXJlIGluc2lkZSB0aGUgZWRpdGFibGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlv
bgotICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5p
c0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3Mu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBS
ZXR1cm4gcG9zIGl0c2VsZiBpZiB0aGUgdHdvIGFyZSBmcm9tIHRoZSB2ZXJ5IHNhbWUgZWRpdGFi
bGUgcmVnaW9uLCBvciBib3RoIGFyZSBub24tZWRpdGFibGUKQEAgLTQ1MSw3ICs0NTEsNyBAQCBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0CiAgICAgLy8gVG8gZml4IHRo
aXMsIHdlIG5lZWQgdG8gZWl0aGVyIGEpIGFkZCBjb2RlIHRvIGFsbCBwYWludENhcmV0cyB0byBw
YXNzIHRoZSByZXNwb25zaWJpbGl0eSBvZmYgdG8KICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgcmVu
ZGVyZXIgZm9yIFZpc2libGVQb3NpdGlvbidzIGxpa2UgdGhlc2UsIG9yIGIpIGNhbm9uaWNhbGl6
ZSB0byB0aGUgcmlnaHRtb3N0IGNhbmRpZGF0ZQogICAgIC8vIHVubGVzcyB0aGUgYWZmaW5pdHkg
aXMgdXBzdHJlYW0uCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5vZGUoKTsKKyAgICBOb2Rl
KiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBQb3NpdGlvbigpOwogCkBAIC00NjksOCArNDY5LDggQEAgUG9zaXRpb24gVmlz
aWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAogICAgIC8vIGJsb2NrcyBvciBlbnRlciBuZXcg
b25lcyksIHdlIHNlYXJjaCBmb3J3YXJkIGFuZCBiYWNrd2FyZCB1bnRpbCB3ZSBmaW5kIG9uZS4K
ICAgICBQb3NpdGlvbiBuZXh0ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKG5leHRDYW5kaWRhdGUo
cG9zaXRpb24pKTsKICAgICBQb3NpdGlvbiBwcmV2ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKHBy
ZXZpb3VzQ2FuZGlkYXRlKHBvc2l0aW9uKSk7Ci0gICAgTm9kZSogbmV4dE5vZGUgPSBuZXh0Lm5v
ZGUoKTsKLSAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXYubm9kZSgpOworICAgIE5vZGUqIG5leHRO
b2RlID0gbmV4dC5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIHByZXZOb2RlID0gcHJldi5k
ZXByZWNhdGVkTm9kZSgpOwogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGluIHRo
ZSBzYW1lIGVkaXRhYmxlIGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBVbmxl
c3MgdGhlIGRlc2NlbnQgaXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8gYW4g
ZWRpdGFibGUgYm9keS4KQEAgLTQ4MSw3ICs0ODEsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OmNhbm9uaWNhbFBvc2l0CiAgICAgICAgIAogICAgIC8vIElmIHRoZSBodG1sIGVsZW1lbnQg
aXMgZWRpdGFibGUsIGRlc2NlbmRpbmcgaW50byBpdHMgYm9keSB3aWxsIGxvb2sgbGlrZSBhIGRl
c2NlbnQgCiAgICAgLy8gZnJvbSBub24tZWRpdGFibGUgdG8gZWRpdGFibGUgY29udGVudCBzaW5j
ZSByb290RWRpdGFibGVFbGVtZW50KCkgYWx3YXlzIHN0b3BzIGF0IHRoZSBib2R5LgotICAgIGlm
ICgoZWRpdGluZ1Jvb3QgJiYgZWRpdGluZ1Jvb3QtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHx8IHBv
c2l0aW9uLm5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICBpZiAoKGVkaXRpbmdSb290ICYm
IGVkaXRpbmdSb290LT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB8fCBwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gbmV4dC5pc05vdE51bGwo
KSA/IG5leHQgOiBwcmV2OwogICAgICAgICAKICAgICBib29sIHByZXZJc0luU2FtZUVkaXRhYmxl
RWxlbWVudCA9IHByZXZOb2RlICYmIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHByZXYpID09IGVk
aXRpbmdSb290OwpAQCAtNTEwLDEwICs1MTAsMTAgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246
OmNoYXJhY3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2Yg
dHdvIGVxdWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5k
aWRhdGVzCiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5v
ZGUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4K
ICAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgTm9k
ZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgp
KTsKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3MuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgIGlm
IChvZmZzZXQgPj0gbGVuZ3RoKQpAQCAtNTI3LDcgKzUyNyw3IEBAIFVDaGFyMzIgVmlzaWJsZVBv
c2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigKIAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmxvY2Fs
Q2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIHJlbmRlcmVy
ID0gMDsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lk
IFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3NpdGlvbihjb25zCiAgICAgaWYgKGlzTnVsbCgpKQog
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxcbiIsIG1zZyk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9zaXRpb24gWyVzXTogJXMsICIs
IG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzLCAiLCBtc2csIG1fZGVl
cFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgIG1fZGVlcFBvc2l0aW9uLnNob3dBbmNob3JUeXBlQW5kT2Zmc2V0KCk7CiAgICAgfQog
fQpAQCAtNjAxLDcgKzYwMSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBW
aXNpYmwKICAgICAKICAgICBQb3NpdGlvbiBzID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlID0gZW5kLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCksIGUubm9kZSgpLCBlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHMuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzLmRlcHJlY2F0ZWRO
b2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZS5kZXByZWNhdGVkTm9kZSgpLCBl
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRW
aXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKQEAgLTYy
Miw3ICs2MjIsNyBAQCBib29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUg
PSAwOwotICAgIHItPnNldFN0YXJ0KHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOworICAgIHItPnNldFN0YXJ0KHAuZGVwcmVjYXRlZE5vZGUoKSwgcC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBA
IC02MzIsNyArNjMyLDcgQEAgYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3Np
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBj
b2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgY29kZSk7CisgICAgci0+c2V0RW5kKHAuZGVwcmVjYXRlZE5vZGUoKSwgcC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBA
IC02NDEsNyArNjQxLDcgQEAgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25z
dAogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBOVUxM
OwogCi0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCk7CiB9CiAKIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKQEAgLTY0OSwx
MSArNjQ5LDExIEBAIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCAKICAg
ICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKG5vZGUpKQorICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gdmlz
aWJsZVBvc2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8
ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7
CisgICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQogCiBib29sIGlz
TGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQ
b3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKQEAgLTY2MSwxMSArNjYxLDExIEBAIGJvb2wgaXNM
YXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFYKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCF2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQor
ICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHZpc2libGVQb3NpdGlvbi5uZXh0
KCk7Ci0gICAgcmV0dXJuIG5leHQuaXNOdWxsKCkgfHwgIW5leHQuZGVlcEVxdWl2YWxlbnQoKS5u
b2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOworICAgIHJldHVybiBuZXh0LmlzTnVsbCgpIHx8
ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
bm9kZSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBwdWJsaWM6CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXJBZnRlcigpIGNvbnN0OwogICAg
IFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gcHJldmlvdXMoKS5jaGFy
YWN0ZXJBZnRlcigpOyB9CiAKLSAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5u
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7IH0KKyAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkg
OiAwOyB9CiAgICAgCiAgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYg
aW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gNzg3OTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlv
bjo6ZmlycwogICAgICAgICByZXR1cm4gMDsKICAgICBQb3NpdGlvbiBzdGFydCA9IG1fc3RhcnQu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQu
bm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogfQogCiBQYXNz
UmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0
CkBAIC0xMzQsNyArMTM0LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6
dG9ObwogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNo
IG1vZGlmeSB0aGUgRE9NLgogICAgIC8vIEZhaWxpbmcgdG8gY2FsbCB0aGlzIGNhbiByZXN1bHQg
aW4gZXF1aXZhbGVudFhYWFBvc2l0aW9uIGNhbGxzIHJldHVybmluZwogICAgIC8vIGluY29ycmVj
dCByZXN1bHRzLgotICAgIG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKKyAgICBtX3N0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7
CiAKICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFy
IHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZSgpKQpAQCAtMTc4LDcgKzE3OCw3IEBAIFBh
c3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm8KIAogICAgIC8vIFZpc2libGVT
ZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVj
dG9yIHdpbGwgQVNTRVJUCiAgICAgLy8gaWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3Jl
YXRlZCwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUocy5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHMsIGUpOwogfQogCiBib29sIFZpc2li
bGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWwKIAogc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShj
b25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIE5vZGUqIG4gPSBwb3Mubm9kZSgpOworICAgIE5v
ZGUqIG4gPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVy
biAwOwogICAgIERvY3VtZW50KiBkID0gbi0+ZG9jdW1lbnQoKTsKQEAgLTIwOCw3ICsyMDgsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlCiAKICAgICBQb3NpdGlv
biBzdGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIHNlYXJjaFJhbmdl
LT5zZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7
CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAg
IGlmIChlYykKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldFN0
YXJ0QW5kRW5kRnJvCiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEVuZChlbmRPZldv
cmQob3JpZ2luYWxFbmQsIHNpZGUpKTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQo
d29yZEVuZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBo
KG9yaWdpbmFsRW5kKSAmJiAhaXNFbXB0eVRhYmxlQ2VsbChtX3N0YXJ0Lm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKG9yaWdpbmFsRW5kKSAmJiAhaXNFbXB0eVRh
YmxlQ2VsbChtX3N0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8g
U2VsZWN0IHRoZSBwYXJhZ3JhcGggYnJlYWsgKHRoZSBzcGFjZSBmcm9tIHRoZSBlbmQgb2YgYSBw
YXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIAogICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IG9u
ZSkgdG8gbWF0Y2ggVGV4dEVkaXQuCiAgICAgICAgICAgICAgICAgZW5kID0gd29yZEVuZC5uZXh0
KCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxl
Y3Rpb25UbwogICAgIE5vZGUqIHN0YXJ0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zdGFy
dCk7CiAgICAgTm9kZSogZW5kUm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9lbmQpOwogICAg
IAotICAgIE5vZGUqIGJhc2VFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3Rv
cihtX2Jhc2Uubm9kZSgpKTsKKyAgICBOb2RlKiBiYXNlRWRpdGFibGVBbmNlc3RvciA9IGxvd2Vz
dEVkaXRhYmxlQW5jZXN0b3IobV9iYXNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIAogICAgIC8v
IFRoZSBiYXNlLCBzdGFydCBhbmQgZW5kIGFyZSBhbGwgaW4gdGhlIHNhbWUgcmVnaW9uLiAgTm8g
YWRqdXN0bWVudCBuZWNlc3NhcnkuCiAgICAgaWYgKGJhc2VSb290ID09IHN0YXJ0Um9vdCAmJiBi
YXNlUm9vdCA9PSBlbmRSb290KQpAQCAtNDkyLDE3ICs0OTIsMTcgQEAgdm9pZCBWaXNpYmxlU2Vs
ZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25UbwogICAgIAogICAgICAgICAvLyBUaGUgc2VsZWN0aW9u
IGVuZHMgaW4gZWRpdGFibGUgY29udGVudCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUg
YSBkaWZmZXJlbnQgZWRpdGFibGUgYW5jZXN0b3IsIAogICAgICAgICAvLyBtb3ZlIGJhY2t3YXJk
IHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSB0aGUgc2FtZSBsb3dlc3QgZWRpdGFi
bGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KLSAgICAgICAgTm9kZSogZW5kRWRpdGFibGVBbmNlc3Rv
ciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQubm9kZSgpKTsKKyAgICAgICAgTm9kZSog
ZW5kRWRpdGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CiAgICAgICAgIGlmIChlbmRSb290IHx8IGVuZEVkaXRhYmxlQW5jZXN0b3Ig
IT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUG9z
aXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2VuZCk7CiAgICAg
ICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVuZFJvb3QgPyBlbmRSb290LT5zaGFkb3dB
bmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICBpZiAocC5pc051bGwoKSAmJiBlbmRSb290
ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkKICAgICAgICAgICAgICAgICBwID0gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAg
IHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLm5vZGUo
KSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsK
KyAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNl
c3RvcihwLmRlcHJlY2F0ZWROb2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0Vk
aXRhYmxlUG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRh
YmxlUm9vdEZvclBvc2l0aW9uKHApOwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0g
cm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBw
ID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHAu
bm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKKyAgICAgICAg
ICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIChz
aGFkb3dBbmNlc3RvciAhPSByb290KSkKICAgICAgICAgICAgICAgICAgICAgcCA9IGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAgICAgICB9CkBA
IC01MjIsMTYgKzUyMiwxNiBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlv
blRvCiAKICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUgY29udGVu
dCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgYSBkaWZmZXJlbnQgZWRpdGFibGUgYW5j
ZXN0b3IsIAogICAgICAgICAvLyBtb3ZlIGZvcndhcmQgdW50aWwgbm9uLWVkaXRhYmxlIGNvbnRl
bnQgaW5zaWRlIHRoZSBzYW1lIGxvd2VzdCBlZGl0YWJsZSBhbmNlc3RvciBpcyByZWFjaGVkLgot
ICAgICAgICBOb2RlKiBzdGFydEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2Vz
dG9yKG1fc3RhcnQubm9kZSgpKTsgICAgICAKKyAgICAgICAgTm9kZSogc3RhcnRFZGl0YWJsZUFu
Y2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX3N0YXJ0LmRlcHJlY2F0ZWROb2RlKCkp
OyAgICAgIAogICAgICAgICBpZiAoc3RhcnRSb290IHx8IHN0YXJ0RWRpdGFibGVBbmNlc3RvciAh
PSBiYXNlRWRpdGFibGVBbmNlc3RvcikgewogICAgICAgICAgICAgUG9zaXRpb24gcCA9IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fc3RhcnQpOwogICAgICAgICAgICAgTm9kZSogc2hh
ZG93QW5jZXN0b3IgPSBzdGFydFJvb3QgPyBzdGFydFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
IDogMDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIHN0YXJ0Um9vdCAmJiAoc2hhZG93
QW5jZXN0b3IgIT0gc3RhcnRSb290KSkKICAgICAgICAgICAgICAgICBwID0gcG9zaXRpb25CZWZv
cmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgp
ICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLm5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5j
ZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChw
LmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLmRlcHJlY2F0ZWROb2Rl
KCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHAp
OwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9k
ZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUocCk7CisgICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShw
LmRlcHJlY2F0ZWROb2RlKCkpID8gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLmRlcHJlY2F0
ZWROb2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2VzdG9yICE9IHJvb3QpKQogICAgICAg
ICAgICAgICAgICAgICBwID0gcG9zaXRpb25CZWZvcmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAg
ICAgICAgICAgIH0KQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFk
anVzdFNlbGVjdGlvblRvCiAgICAgfQogICAgIAogICAgIC8vIENvcnJlY3QgdGhlIGV4dGVudCBp
ZiBuZWNlc3NhcnkuCi0gICAgaWYgKGJhc2VFZGl0YWJsZUFuY2VzdG9yICE9IGxvd2VzdEVkaXRh
YmxlQW5jZXN0b3IobV9leHRlbnQubm9kZSgpKSkKKyAgICBpZiAoYmFzZUVkaXRhYmxlQW5jZXN0
b3IgIT0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX2V4dGVudC5kZXByZWNhdGVkTm9kZSgpKSkK
ICAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2VJc0ZpcnN0ID8gbV9lbmQgOiBtX3N0YXJ0OwogfQog
CkBAIC01NzIsNyArNTcyLDcgQEAgRWxlbWVudCogVmlzaWJsZVNlbGVjdGlvbjo6cm9vdEVkaXRh
YmxlRQogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpzaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25z
dAogewotICAgIHJldHVybiBzdGFydCgpLm5vZGUoKSA/IHN0YXJ0KCkubm9kZSgpLT5zaGFkb3dU
cmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93VHJlZVJvb3ROb2RlKCkgOiAwOwogfQog
CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBjYW5IYXZlQ2hpbGRy
ZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZAogLy8gY291bGQgYmUgaW5zaWRlIGEgc2hhZG93IHRyZWUu
IE9ubHkgd29ya3MgZm9yIG5vbi1udWxsIHZhbHVlcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNv
bnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICBOb2RlKiBub2RlQSA9
IGEubm9kZSgpOworICAgIE5vZGUqIG5vZGVBID0gYS5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFT
U0VSVChub2RlQSk7Ci0gICAgTm9kZSogbm9kZUIgPSBiLm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
QiA9IGIuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBBU1NFUlQobm9kZUIpOwogICAgIGludCBvZmZz
ZXRBID0gYS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIGludCBvZmZzZXRCID0gYi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIGludCBjb21wYXJl
UG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGkKIAogTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9v
dChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9u
Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKQEAgLTE3Myw3ICsxNzMs
NyBAQCBOb2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAKIGJvb2wgaXNF
ZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewotICAgIE5vZGUqIG5vZGUgPSBw
Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTE4NSwxNCArMTg1LDE0
IEBAIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiAKIAogYm9vbCBpc0F0
VW5zcGxpdHRhYmxlRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIE5vZGUqIG5v
ZGUgPSBwb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICByZXR1cm4gKG5vZGUgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocG9zKSB8fCBub2Rl
ID09IGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCAmaXNUYWJsZUNlbGwpKTsKIH0KICAgICAKICAg
ICAKIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewot
ICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVk
Tm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
QEAgLTIwNCw3ICsyMDQsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQ
b3NpCiAKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
KQogewotICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IApAQCAtMjgyLDE0ICsyODIsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3Np
dGlvbkFmdAogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAotICAgIGlmIChOb2Rl
KiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKLSAgICAg
ICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQorICAgIGlmIChOb2RlKiBzaGFkb3dB
bmNlc3RvciA9IHAuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCisgICAg
ICAgIGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAg
ICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAg
ICAKLSAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLm5v
ZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQotICAgICAgICBwID0gaXNBdG9taWNO
b2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkpIDogbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CisgICAgd2hpbGUgKHAuZGVwcmVjYXRlZE5v
ZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVw
cmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHAuZGVwcmVjYXRlZE5v
ZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAKLSAgICBpZiAo
cC5ub2RlKCkgJiYgcC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiBwLmRl
cHJlY2F0ZWROb2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CiAgICAgCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwKTsKQEAgLTMwMywxNCArMzAz
LDE0IEBAIFZpc2libGVQb3NpdGlvbiBsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm8KIAogICAgIFBv
c2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAKLSAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3Ig
PSBwLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCi0gICAgICAgIGlmIChzaGFkb3dBbmNl
c3RvciAhPSBwLm5vZGUoKSkKKyAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLmRlcHJl
Y2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQorICAgICAgICBpZiAoc2hhZG93QW5j
ZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgcCA9IGZpcnN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgIAotICAgIHdoaWxlIChw
Lm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihoaWdoZXN0Um9vdCkpCi0gICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8g
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOworICAgIHdoaWxlIChwLmRlcHJlY2F0ZWROb2RlKCkgJiYgIWlz
RWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KGhpZ2hlc3RSb290KSkKKyAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLmRlcHJlY2F0ZWROb2Rl
KCkpID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA6IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAKLSAgICBpZiAocC5ub2Rl
KCkgJiYgcC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiBwLmRlcHJlY2F0
ZWROb2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5k
YW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAg
ICAgCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwKTsKQEAgLTQyMSw5ICs0MjEsOSBAQCBi
b29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSAqbikKIAogc3RhdGljIE5vZGUqIGZpcnN0
SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIC8vIEZJWE1FOiBU
aGlzIGJlZ2lucyBhdCBwb3Mubm9kZSgpLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbnRh
aW4gcG9zIChzdXBwb3NlIHBvcyB3YXMgW2ltZywgMF0pLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS81
MDI3NzAyPi4KLSAgICBOb2RlKiByb290RWRpdGFibGVFbGVtZW50ID0gcG9zLm5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCisgICAgLy8gRklYTUU6IFRoaXMgYmVnaW5zIGF0IHBvcy5kZXByZWNhdGVk
Tm9kZSgpLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbnRhaW4gcG9zIChzdXBwb3NlIHBv
cyB3YXMgW2ltZywgMF0pLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS81MDI3NzAyPi4KKyAgICBOb2Rl
KiByb290RWRpdGFibGVFbGVtZW50ID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBmb3IgKE5vZGUqIG4gPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsgbiAm
JiBuLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4t
PnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYgKGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNU
UkVBTSk7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkVsZW1lbnQgPSBWaXNp
YmxlUG9zaXRpb24obiwgMCwgRE9XTlNUUkVBTSk7CkBAIC00MzcsOSArNDM3LDkgQEAgc3RhdGlj
IE5vZGUqIGZpcnN0SW5TcGVjaWFsRWxlbWVudChjb25zdAogCiBzdGF0aWMgTm9kZSogbGFzdElu
U3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBiZWdpbnMgYXQgcG9zLm5vZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWlu
IHBvcyAoc3VwcG9zZSBwb3Mgd2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAy
NzcwMj4uCi0gICAgTm9kZSogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4t
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFy
ZW50Tm9kZSgpKQorICAgIC8vIEZJWE1FOiBUaGlzIGJlZ2lucyBhdCBwb3MuZGVwcmVjYXRlZE5v
ZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWluIHBvcyAoc3VwcG9zZSBwb3Mg
d2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAyNzcwMj4uCisgICAgTm9kZSog
cm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgZm9yIChOb2RlKiBuID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJF
QU0pOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNpYmxl
UG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CkBAIC00NjIsNyAr
NDYyLDcgQEAgUG9zaXRpb24gcG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lhbAogICAgIGlm
ICghbikKICAgICAgICAgcmV0dXJuIHBvczsKICAgICBQb3NpdGlvbiByZXN1bHQgPSBwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZShuKTsKLSAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3Vs
dC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpCisgICAgaWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1bHQuZGVwcmVjYXRl
ZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5y
b290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgaWYgKGNvbnRh
aW5pbmdTcGVjaWFsRWxlbWVudCkKICAgICAgICAgKmNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9
IG47CkBAIC00ODAsNyArNDgwLDcgQEAgUG9zaXRpb24gcG9zaXRpb25BZnRlckNvbnRhaW5pbmdT
cGVjaWFsRQogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIHBvczsKICAgICBQb3NpdGlvbiBy
ZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG4pOwotICAgIGlmIChyZXN1bHQuaXNO
dWxsKCkgfHwgcmVzdWx0Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHBvcy5ub2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJl
c3VsdC5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHBvczsK
ICAgICBpZiAoY29udGFpbmluZ1NwZWNpYWxFbGVtZW50KQogICAgICAgICAqY29udGFpbmluZ1Nw
ZWNpYWxFbGVtZW50ID0gbjsKQEAgLTQ5OSw4ICs0OTksOCBAQCBQb3NpdGlvbiBwb3NpdGlvbk91
dHNpZGVDb250YWluaW5nU3BlY2lhCiBOb2RlKiBpc0ZpcnN0UG9zaXRpb25BZnRlclRhYmxlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIFBvc2l0aW9uIHVw
c3RyZWFtKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkpOwotICAg
IGlmICh1cHN0cmVhbS5ub2RlKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpICYmIHVw
c3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3RyZWFtLmF0TGFzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHVwc3RyZWFtLm5vZGUoKTsK
KyAgICBpZiAodXBzdHJlYW0uZGVwcmVjYXRlZE5vZGUoKSAmJiB1cHN0cmVhbS5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpICYmIHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkp
CisgICAgICAgIHJldHVybiB1cHN0cmVhbS5kZXByZWNhdGVkTm9kZSgpOwogICAgIAogICAgIHJl
dHVybiAwOwogfQpAQCAtNTA4LDggKzUwOCw4IEBAIE5vZGUqIGlzRmlyc3RQb3NpdGlvbkFmdGVy
VGFibGUoY29uc3QgVmkKIE5vZGUqIGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFibGUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgUG9zaXRpb24gZG93bnN0cmVh
bSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgIGlm
IChkb3duc3RyZWFtLm5vZGUoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBk
b3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRvd25zdHJlYW0uYXRG
aXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGRvd25zdHJlYW0u
bm9kZSgpOworICAgIGlmIChkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCkgJiYgZG93bnN0cmVh
bS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW0uZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRvd25zdHJlYW0uYXRGaXJzdEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGRvd25zdHJlYW0uZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTU5MSw3ICs1OTEsNyBAQCBOb2RlKiBl
bmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKLSAgICBmb3Ig
KE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAo
Tm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewog
ICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh0YWdOYW1lKSkKQEAgLTYwOSw3
ICs2MDksNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uCiAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUg
bm9kZSBpZiB0aGUgaW5wdXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAgICAv
LyB0aGUgY2FsbGVycyBmcm9tIGVkaXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZvcm0g
ZWRpdGluZyBpbnNpZGUgdGhlIHJldHVybmVkIG5vZGUuCiAgICAgICAgIGlmIChyb290ICYmICFu
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9ubHlSZXR1cm5FZGl0YWJsZU5vZGVzKQpAQCAtNjI3
LDcgKzYyNyw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFAKIHsK
ICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoKCpub2RlSXNPZlR5cGUpKG4pKQogICAgICAg
ICAgICAgaGlnaGVzdCA9IG47CiAgICAgICAgIGlmIChuID09IHJvb3QpCkBAIC02NDcsNyArNjQ3
LDcgQEAgTm9kZSogZW5jbG9zaW5nQW5jaG9yRWxlbWVudChjb25zdCBQb3NpdAogICAgIGlmIChw
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBOb2RlKiBub2RlID0gcC5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB3aGlsZSAo
bm9kZSAmJiAhKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlLT5pc0xpbmsoKSkpCiAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIG5vZGU7CkBAIC03MTcs
NyArNzE3LDcgQEAgc3RhdGljIE5vZGUqIGFwcGVuZGVkU3VibGlzdChOb2RlKiBsaXN0SQogTm9k
ZSogZW5jbG9zaW5nRW1wdHlMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwb3NpdGlvbiBpcyBvbiBhIGxpbmUgYnkgaXRzZWxm
IGluc2lkZSBhIGxpc3QgaXRlbQotICAgIE5vZGUqIGxpc3RDaGlsZE5vZGUgPSBlbmNsb3NpbmdM
aXN0Q2hpbGQodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSog
bGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZCh2aXNpYmxlUG9zLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFsaXN0Q2hpbGROb2RlIHx8ICFpc1N0
YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgfHwgIWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBv
cykpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC04ODMsNyArODgzLDcgQEAgYm9vbCBpc05vZGVJ
blRleHRGb3JtQ29udHJvbChOb2RlKiBub2RlKQogICAgIAogUG9zaXRpb24gcG9zaXRpb25CZWZv
cmVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7Ci0gICAgTm9kZSAqbm9kZSA9IHBvcy5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChp
c1RhYlNwYW5UZXh0Tm9kZShub2RlKSkKICAgICAgICAgbm9kZSA9IHRhYlNwYW5Ob2RlKG5vZGUp
OwogICAgIGVsc2UgaWYgKCFpc1RhYlNwYW5Ob2RlKG5vZGUpKQpAQCAtOTQ0LDcgKzk0NCw3IEBA
IE5vZGUgKm5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlICoKIHVuc2lnbmVkIG51bUVu
Y2xvc2luZ01haWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYgcCkKIHsKICAgICB1bnNpZ25l
ZCBudW0gPSAwOwotICAgIGZvciAoTm9kZSogbiA9IHAubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKQorICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYgKGlzTWFpbEJsb2NrcXVvdGUobikpCiAgICAgICAg
ICAgICBudW0rKzsKICAgICAKQEAgLTEwMTUsNyArMTAxNSw3IEBAIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKICAgICAvLyB0aGF0IHdlJ2xsIHdhbnQgbW9kaWZ5IGlz
IHRoZSBsYXN0IG9uZSBpbnNpZGUgdGhlIHRhYmxlLCBub3QgdGhlIHRhYmxlIGl0c2VsZgogICAg
IC8vIChhIHRhYmxlIGlzIGl0c2VsZiBhIHBhcmFncmFwaCkuCiAgICAgaWYgKE5vZGUqIHRhYmxl
ID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShlbmRPZlNlbGVjdGlvbikpCi0gICAgICAgIGlm
IChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
Zih0YWJsZSkpCisgICAgICAgIGlmIChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAgICAgICAgICAgbmV3
U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNlbGVj
dGlvbi5wcmV2aW91cyh0cnVlKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mIHRoZSBz
ZWxlY3Rpb24gdG8gbW9kaWZ5IGlzIGp1c3QgYmVmb3JlIGEgdGFibGUsCkBAIC0xMDIzLDcgKzEw
MjMsNyBAQCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0CiAgICAgLy8g
d2UnbGwgd2FudCB0byBtb2RpZnkgaXMgdGhlIGZpcnN0IG9uZSBpbnNpZGUgdGhlIHRhYmxlLCBu
b3QgdGhlIHBhcmFncmFwaAogICAgIC8vIGNvbnRhaW5pbmcgdGhlIHRhYmxlIGl0c2VsZi4KICAg
ICBpZiAoTm9kZSogdGFibGUgPSBpc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKHN0YXJ0T2ZTZWxl
Y3Rpb24pKQotICAgICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKKyAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQog
ICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0
aW9uLm5leHQodHJ1ZSksIGVuZE9mU2VsZWN0aW9uKTsKICAgICAKICAgICByZXR1cm4gbmV3U2Vs
ZWN0aW9uOwpAQCAtMTAzNSw3ICsxMDM1LDcgQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFZpc2libAogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHAubm9kZSgpLT5k
b2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHAuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSksCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpj
cmVhdGUocC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUocC5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1
ZSk7CiB9CkBAIC0xMTE0LDggKzExMTQsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJz
ZWN0aW9uV2l0aE5vCiAgICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbik7
CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHVwZGF0ZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAg
ICBOb2RlKiBiYXNlID0gc2VsZWN0aW9uLmJhc2UoKS5ub2RlKCk7Ci0gICAgTm9kZSogZXh0ZW50
ID0gc2VsZWN0aW9uLmV4dGVudCgpLm5vZGUoKTsKKyAgICBOb2RlKiBiYXNlID0gc2VsZWN0aW9u
LmJhc2UoKS5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIGV4dGVudCA9IHNlbGVjdGlvbi5l
eHRlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChiYXNlKTsKICAgICBBU1NFUlQo
ZXh0ZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNzg3
OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzNyw4ICs0MzcsOCBAQCBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9O
b25lCiBzdGF0aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2KQogewogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdi5uZXh0KCk7Ci0g
ICAgTm9kZSogdXBzdHJlYW1Ob2RlID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCku
bm9kZSgpOwotICAgIE5vZGUqIGRvd25zdHJlYW1Ob2RlID0gdi5kZWVwRXF1aXZhbGVudCgpLmRv
d25zdHJlYW0oKS5ub2RlKCk7CisgICAgTm9kZSogdXBzdHJlYW1Ob2RlID0gbmV4dC5kZWVwRXF1
aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBkb3duc3Ry
ZWFtTm9kZSA9IHYuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICAvLyBBZGQgYW4gaW50ZXJjaGFuZ2UgbmV3bGluZSBpZiBhIHBhcmFncmFwaCBicmVh
ayBpcyBzZWxlY3RlZCBhbmQgYSBiciB3b24ndCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBtYXJr
dXAgdG8gcmVwcmVzZW50IGl0LgogICAgIHJldHVybiBpc0VuZE9mUGFyYWdyYXBoKHYpICYmIGlz
U3RhcnRPZlBhcmFncmFwaChuZXh0KSAmJiAhKHVwc3RyZWFtTm9kZS0+aGFzVGFnTmFtZShiclRh
ZykgJiYgdXBzdHJlYW1Ob2RlID09IGRvd25zdHJlYW1Ob2RlKTsKIH0KQEAgLTU3MSw3ICs1NzEs
NyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAgIH0K
IAogICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmRTdHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3Ry
aW5nKTsKLSAgICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAgaWYgKHBhc3RFbmQg
JiYgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGFydE5vZGUsIDAsIHBhc3RFbmQsIDAp
ID49IDApIHsKICAgICAgICAgICAgIGlmIChkZWxldGVCdXR0b24pCkBAIC03NjQsNyArNzY0LDcg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogCiAgICAgTm9kZSog
c3R5bGVOb2RlID0gY29udGV4dC0+Zmlyc3ROb2RlKCk7CiAgICAgaWYgKCFzdHlsZU5vZGUpIHsK
LSAgICAgICAgc3R5bGVOb2RlID0gY29udGV4dC0+c3RhcnRQb3NpdGlvbigpLm5vZGUoKTsKKyAg
ICAgICAgc3R5bGVOb2RlID0gY29udGV4dC0+c3RhcnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmICghc3R5bGVOb2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lv
biA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0JvdW5kYXJ5KAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5j
aGFyYWN0ZXJCZWZvcmUoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBmb3J3YXJkc1NjYW5S
YW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKICAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVu
ZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFy
dChlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgICAg
ICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgICAgIFRleHRJdGVyYXRvciBmb3J3
YXJkc0l0ZXJhdG9yKGZvcndhcmRzU2NhblJhbmdlLmdldCgpKTsKICAgICAgICAgd2hpbGUgKCFm
b3J3YXJkc0l0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzID0gZm9yd2FyZHNJdGVyYXRvci5jaGFyYWN0ZXJzKCk7CkBAIC04Miw4ICs4Miw4IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgKICAgICAgICAgfQogICAg
IH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0LmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5u
b2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFu
Z2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5kZXByZWNhdGVk
Tm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgIAogICAgIEFT
U0VSVCghZWMpOwogICAgIGlmIChlYykKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogCiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0Jv
dW5kYXJ5KTsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsKLSAgICBib29sIGluVGV4dFNlY3VyaXR5
TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQu
bm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7Cisg
ICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIGJv
b2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAgd2hpbGUgKCFpdC5hdEVuZCgpKSB7CiAg
ICAgICAgIC8vIGl0ZXJhdGUgdG8gZ2V0IGNodW5rcyB1bnRpbCB0aGUgc2VhcmNoRnVuY3Rpb24g
cmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLgpAQCAtMTQ2LDcgKzE0Niw3IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnMKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIo
KSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWNrd2FyZHNTY2FuUmFuZ2UoZC0+Y3JlYXRl
UmFuZ2UoKSk7Ci0gICAgICAgIGJhY2t3YXJkc1NjYW5SYW5nZS0+c2V0RW5kKHN0YXJ0Lm5vZGUo
KSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgICAgICBiYWNrd2Fy
ZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoYmFja3dhcmRzU2NhblJhbmdlLmdldCgpKTsKICAg
ICAgICAgd2hpbGUgKCFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGJhY2t3YXJkc0l0ZXJhdG9yLmNoYXJhY3RlcnMoKTsK
QEAgLTE2MSwxMCArMTYxLDEwIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5
KGNvbnMKICAgICB9CiAKICAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5k
YXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBlYyk7CiAgICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0
b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgdW5zaWdu
ZWQgbmV4dCA9IDA7Ci0gICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5ub2RlKCkg
JiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOworICAgIGJvb2wgaW5UZXh0U2VjdXJp
dHlNb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9
IGZhbHNlOwogICAgIHdoaWxlICghaXQuYXRFbmQoKSkgewogICAgICAgICAvLyBLZWVwIGFza2lu
ZyB0aGUgaXRlcmF0b3IgZm9yIGNodW5rcyB1bnRpbCB0aGUgc2VhcmNoIGZ1bmN0aW9uCkBAIC0z
MTYsNyArMzE2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkUG9zaXRpb24oY29uc3QgVgog
c3RhdGljIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3hGb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmYykKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUg
Km5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM1MSw3ICszNTEsNyBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAgICAgICAgIC8vIFRoZXJl
IGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CiAgICAg
ICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJv
cmRlcmVkIGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsK
LSAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigp
LT5pc1JlbmRlckJsb2NrKCkgJiYgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IDApCisg
ICAgICAgIGlmIChwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgcC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3Np
dGlvbkluVGFibGUoYyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CkBAIC00MDQsNyArNDA0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
bkZvckxpbgogICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQg
MCBpbiBibG9ja3Mgd2l0aG91dAogICAgICAgICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1w
dHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCiAgICAgICAgIFBvc2l0aW9u
IHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIo
KSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA9PSAwKQorICAgICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5y
ZW5kZXJlcigpICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9j
aygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4g
YzsKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIH0KQEAgLTUwMSw3ICs1
MDEsNyBAQCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTm9kZVdpdGhOb25JbmxpbmVSCiBWaXNpYmxl
UG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNp
YmxlUG9zaXRpb24sIGludCB4KQogewogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpub2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hl
c3RFZGl0YWJsZVJvb3QocCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CkBAIC02MTAsNyArNjEwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0
aFNhbWVFZGl0YWJpbGl0eQogVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGludCB4KQogewogICAgIFBvc2l0aW9u
IHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpub2RlID0g
cC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2Rl
KiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC03NDAsNyArNzQwLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNvbgogVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCiB7CiAgICAgUG9zaXRpb24gcCA9IGMu
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9k
ZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtODAyLDcgKzgwMiw3IEBA
IFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQo
KTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUg
PSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFi
bGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKICAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShzdGFydE5vZGUpOwpAQCAtOTEwLDcgKzkxMCw3IEBAIFZpc2libGVQb3Np
dGlvbiBuZXh0UGFyYWdyYXBoUG9zaXRpb24oY28KIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQmxv
Y2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBF
cXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSog
c3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihmaXJzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpKSwgRE9XTlNUUkVBTSk7CkBAIC05MjAsNyArOTIwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mQmxvY2soY29uc3QgVmlzaWJsZQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFs
ZW50KCk7CiAKLSAgICBOb2RlICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFy
dE5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIApAQCAtOTU2LDcgKzk1Niw3IEBAIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3QgTm8KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgcmV0dXJuIHN0YXJ0
T2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICByZXR1cm4gc3RhcnRP
ZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgTm9kZSogbm9kZSkKQEAgLTk3MCwxNyAr
OTcwLDE3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUKIAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewot
ICAgIHJldHVybiBlbmRPZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAg
IHJldHVybiBlbmRPZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
KTsKIH0KIAogYm9vbCBpblNhbWVEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmYikKIHsKICAgICBQb3NpdGlvbiBhcCA9IGEuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBOb2RlICphbiA9IGFwLm5vZGUoKTsKKyAgICBOb2RlKiBhbiA9IGFwLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFhbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IFBvc2l0aW9uIGJwID0gYi5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUgKmJuID0gYnAubm9k
ZSgpOworICAgIE5vZGUqIGJuID0gYnAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoYW4gPT0g
Ym4pCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMTA4LDcgKzExMDgsNyBAQCBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydFBvc2l0CiAgICAgICAgIC8vIFRoZXJlIGFyZSBW
aXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CiAgICAgICAgIC8v
IFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVk
IGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAg
ICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1Jl
bmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKKyAgICAgICAgaWYg
KHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJs
ZShjKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTEx
NDYsNyArMTE0Niw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW8K
ICAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxv
Y2tzIHdpdGhvdXQKICAgICAgICAgLy8gUm9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRh
YmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tzLgogICAgICAgICBQb3NpdGlvbiBwID0gYy5k
ZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5u
b2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKQorICAgICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYm
IHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmICFwLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRyb2xsZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
aHJvbWl1bS9TZWxlY3Rpb25Db250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIK
ICAgICAvLyBGSVhNRTogU3VwcG9ydCBlZGl0YWJsZSB0ZXh0IGluIGNocm9taXVtLgogICAgIGlm
IChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0aW9uLnN0
YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
ZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRD
aGFuZ2VkLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3RO
b3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlz
aW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgTlNXcml0aW5nRGlyZWN0aW9uIEVkaXRv
cjo6YmFzZVdyaXRpbmdEaQogICAgIE5TV3JpdGluZ0RpcmVjdGlvbiByZXN1bHQgPSBOU1dyaXRp
bmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKIAogICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJv
bGxlck1hYy5tbQkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51
bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkKLSAgICAgICAgZG9jdW1lbnQt
PmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBm
YWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9i
amVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKIAogICAgIC8vIGlmIHpv
b20gZmVhdHVyZSBpcyBlbmFibGVkLCBpbnNlcnRpb24gcG9pbnQgY2hhbmdlcyBzaG91bGQgdXBk
YXRlIHRoZSB6b29tCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2VsZWN0aW9uLmlz
Q2FyZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjphbmNob3JOb2Rl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9y
ID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBzaGFk
b3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgIHJldHVybiBh
bmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gYW5j
aG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwogfQogCiBp
bnQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQoKSBjb25zdApAQCAtMTE5LDcgKzExOSw3IEBA
IE5vZGUqIERPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3Io
bV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJh
bnRlZWRIb3N0RnJlZSgpOwotICAgIHJldHVybiBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rp
b24oKSkubm9kZSgpOworICAgIHJldHVybiBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24o
KSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQo
KSBjb25zdApAQCAtMTM3LDcgKzEzNyw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5vZGUo
KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3Ig
PSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIHNoYWRv
d0FuY2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0gICAgcmV0dXJuIGJh
c2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gYmFzZVBv
c2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERP
TVNlbGVjdGlvbjo6YmFzZU9mZnNldCgpIGNvbnN0CkBAIC0xNTUsNyArMTU1LDcgQEAgTm9kZSog
RE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
aWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFt
ZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRI
b3N0RnJlZSgpOwotICAgIHJldHVybiBleHRlbnRQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkp
Lm5vZGUoKTsKKyAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5k
ZXByZWNhdGVkTm9kZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1NCw3ICs3NTQsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERy
YWcoRnJhbWUqIHNyCiAgICAgICAgIGRvU3lzdGVtRHJhZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIG1v
dXNlRHJhZ2dlZFBvaW50LCBjbGlwYm9hcmQsIHNyYywgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChp
c1NlbGVjdGVkICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0
aW9uKSkgewogICAgICAgICBpZiAoIWNsaXBib2FyZC0+aGFzRGF0YSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2woc3JjLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCkpKQorICAgICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKHNyYy0+c2Vs
ZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgY2xp
cGJvYXJkLT53cml0ZVBsYWluVGV4dChzcmMtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlID0gc3JjLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyAr
Mjg1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkT3JMaQogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKICAgICAgICAgRWxlbWVudCogVVJMRWxl
bWVudCA9IHJlc3VsdC5oaXRUZXN0UmVzdWx0KCkuVVJMRWxlbWVudCgpOwogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChy
ZXN1bHQubG9jYWxQb2ludCgpKSk7Ci0gICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkgJiYgcG9z
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihVUkxFbGVtZW50KSkKKyAg
ICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSAmJiBwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihVUkxFbGVtZW50KSkKICAgICAgICAgICAgIG5ld1Nl
bGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShV
UkxFbGVtZW50KTsKICAgICAKICAgICAgICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0g
Q2hhcmFjdGVyR3JhbnVsYXJpdHk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogCiBzdGF0aWMgaW50IHRleHREaXN0YW5jZShjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCk7CisgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CiAgICAgIHJldHVybiBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKIH0KIApAQCAtNjI2LDcg
KzYyNiw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3UKICNpZiBF
TkFCTEUoU1ZHKQogICAgIC8vIFNwZWNpYWwgY2FzZSB0byBsaW1pdCBzZWxlY3Rpb24gdG8gdGhl
IGNvbnRhaW5pbmcgYmxvY2sgZm9yIFNWRyB0ZXh0LgogICAgIC8vIEZJWE1FOiBJc24ndCB0aGVy
ZSBhIGJldHRlciBub24tU1ZHLXNwZWNpZmljIHdheSB0byBkbyB0aGlzPwotICAgIGlmIChOb2Rl
KiBzZWxlY3Rpb25CYXNlTm9kZSA9IG5ld1NlbGVjdGlvbi5iYXNlKCkubm9kZSgpKQorICAgIGlm
IChOb2RlKiBzZWxlY3Rpb25CYXNlTm9kZSA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZGVwcmVjYXRl
ZE5vZGUoKSkKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogc2VsZWN0aW9uQmFzZVJlbmRlcmVy
ID0gc2VsZWN0aW9uQmFzZU5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAoc2VsZWN0
aW9uQmFzZVJlbmRlcmVyLT5pc1NWR1RleHQoKSkKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkgIT0gc2VsZWN0aW9uQmFzZVJlbmRl
cmVyLT5jb250YWluaW5nQmxvY2soKSkKQEAgLTIxMjcsNyArMjEyNyw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEYKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBz
ZWxlY3Rpb25Db250cm9sbGVyID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb25Db250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpOwogCi0gICAg
aWYgKHN0YXJ0Lm5vZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpIHx8IHNlbGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKKyAgICBpZiAoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpIHx8IHNlbGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVyLT50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVkaXRvcigp
LT5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcg
KzIwMSw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3UKICAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+c2V0dGluZ3MoKS0+Y2Fy
ZXRCcm93c2luZ0VuYWJsZWQoKTsKIAogICAgIGlmIChjYXJldEJyb3dzaW5nICYmICFjdXJyZW50
Tm9kZSkKLSAgICAgICAgY3VycmVudE5vZGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCku
bm9kZSgpOworICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0zMjUsNyArMzI1LDcgQEAgc3RhdGljIHZvaWQgY2xl
YXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgIGlmIChjYXJldEJyb3dzaW5nKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBOb2RlKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBzLT5zZWxlY3Rpb24o
KS5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBzLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0
Tm9kZSA9PSBuZXdGb2N1c2VkTm9kZSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPmlzRGVzY2VuZGFu
dE9mKG5ld0ZvY3VzZWROb2RlKSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpID09IG5ld0ZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4
Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2NTEsMTAgKzI2NTEsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9i
amVjdDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJlIGZvdW5kLCB3ZSBw
cmVmZXIgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMgZWRpdGFibGUuIAog
ICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihjYW5kaWRhdGUsIGFmZmluaXR5KTsKICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHBvc2l0aW9u
LnVwc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBz
ZXRTZWxlY3Rpb25SYW5nZShOb2RlKiBub2RlLCBpbnQgcwogICAgIC8vIHN0YXJ0UG9zaXRpb24g
YW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBvc2l0aW9uIGZvciBleGFtcGxlIHdoZW4KICAg
ICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSIgc3R5bGUgYXR0cmlidXRlIGlzIHNwZWNp
ZmllZC4KICAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBlbmRQb3NpdGlvbi5p
c05vdE51bGwoKSkgewotICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSAmJiBlbmRQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSk7Cisg
ICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSAmJiBlbmRQb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUp
OwogICAgIH0KICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxl
Y3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCkBAIC0zMzgsMTMgKzMzOCwxMyBA
QCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2w6OnZpc2liCiBpbnQgUmVuZGVyVGV4
dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zKSBjb25zdAogewogICAgIFBvc2l0aW9uIGluZGV4UG9zaXRpb24gPSBwb3MuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAoIWlzU2VsZWN0YWJsZUVsZW1lbnQoaW5kZXhQb3NpdGlvbi5ub2Rl
KCkpKQorICAgIGlmICghaXNTZWxlY3RhYmxlRWxlbWVudChpbmRleFBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAg
ICByYW5nZS0+c2V0U3RhcnQobV9pbm5lclRleHQuZ2V0KCksIDAsIGVjKTsKICAgICBBU1NFUlQo
IWVjKTsKLSAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24ubm9kZSgpLCBpbmRleFBvc2l0
aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGlu
ZGV4UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxNywxMyArNzE3LDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKFRleHRT
dHJlYW0mIHQKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkgewotICAg
ICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKSk7CisgICAgICAgIHRzIDw8ICJjYXJldDogcG9zaXRpb24gIiA8PCBzZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw8ICIgb2YgIiA8PCBub2Rl
UG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlm
IChzZWxlY3Rpb24uYWZmaW5pdHkoKSA9PSBVUFNUUkVBTSkKICAgICAgICAgICAgIHRzIDw8ICIg
KHVwc3RyZWFtIGFmZmluaXR5KSI7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICB0cyA8PCAic2VsZWN0aW9uIHN0YXJ0OiBw
b3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
PDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIDw8ICJc
biIKLSAgICAgICAgICAgPDwgInNlbGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rp
b24uZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0
aW9uKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCkpIDw8ICJcbiI7CisgICAgICAgIHRzIDw8ICJzZWxl
Y3Rpb24gc3RhcnQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpIDw8ICJcbiIKKyAgICAgICAgICAgPDwgInNlbGVjdGlvbiBlbmQ6
ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9k
ZSgpKSA8PCAiXG4iOwogfQogCiBTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihGcmFtZSog
ZnJhbWUsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gNzg3OTgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW5hbWUgUG9zaXRpb246Om5vZGUoKSB0byBQb3NpdGlvbjo6ZGVwcmVjYXRlZE5v
ZGUoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2
MjIKKyAgICAgICAgCisgICAgICAgIERvbmUgdGhlIHJlbmFtZS4KKworICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zbWFydERlbGV0ZVJhbmdlRm9y
UHJvcG9zZWRSYW5nZTpdKTogU2luY2UgbmV3U3RhcnQgYW5kIG5ld0VuZCBhcmUgcGFyZW50LWFu
Y2hvcmVkLAorICAgICAgICB1c2UgY29udGFpbmVyTm9kZSgpIGFuZCBvZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSBpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgbWVtYmVyIGZ1bmN0aW9ucy4KKwogMjAxMS0w
Mi0xNiAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MDUsOCArODA1LDggQEAgLSAoRE9NUmFuZ2Ug
Kilfc21hcnREZWxldGVSYW5nZUZvclByb3BvcwogCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZVJhbmdlKCk7CiAgICAgaW50
IGV4Y2VwdGlvbiA9IDA7Ci0gICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0Lm5vZGUoKSwgbmV3
U3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZXhjZXB0aW9uKTsKLSAgICByYW5nZS0+
c2V0RW5kKG5ld1N0YXJ0Lm5vZGUoKSwgbmV3U3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgZXhjZXB0aW9uKTsKKyAgICByYW5nZS0+c2V0U3RhcnQobmV3U3RhcnQuY29udGFpbmVyTm9k
ZSgpLCBuZXdTdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKKyAgICBy
YW5nZS0+c2V0RW5kKG5ld1N0YXJ0LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCksIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7
CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82779</attachid>
            <date>2011-02-17 03:24:22 -0800</date>
            <delta_ts>2011-02-17 03:48:42 -0800</delta_ts>
            <desc>3rd attempt; r? to see build errors on non-Mac ports</desc>
            <filename>bug-54622-20110217202419.patch</filename>
            <type>text/plain</type>
            <size>210290</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRl
cHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLiBBbGwgY2FsbHMgdG8gbm9k
ZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVkTm9kZSgpIGV4Y2VwdCB3aGVu
CisgICAgICAgIGNhbGxzIHdlcmUgb2YgdGhlIGZvcm0gbm9kZSgpLT5kb2N1bWVudCgpIGFuZCBu
b2RlKCktPmluRG9jdW1lbnQoKSBpbiB3aGljaCBjYXNlIHRoZXkgd2VyZQorICAgICAgICByZXBs
YWNlZCBieSBhbmNob3JOb2RlKCktPmRvY3VtZW50KCkgYW5kIGFuY2hvck5vZGUoKS0+aW5Eb2N1
bWVudCgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCBQ
b3NpdGlvbjo6Y29udGFpbmVyTm9kZS4KKworICAgICAgICBUaGUgcmVzdCBhYmJyZXZpYXRlZCBm
b3Igc2ltcGxpY2l0eS4gUGxlYXNlIHNlZSBzdm4gbG9nLgorCisKIDIwMTEtMDItMTcgIEJlbmph
bWluIEthbG1hbiAgPGthbG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Unlvc3VrZSBOaXdhLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc4Nzk1KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEyMTUs
NiArMTIxNSw3IEBAIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQ2ZG9tYWluRXYKIF9fWk5LN1dlYkNv
cmU4SW50UG9pbnRjdjdDR1BvaW50RXYKIF9fWk5LN1dlYkNvcmU4SW50UG9pbnRjdjhfTlNQb2lu
dEV2CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMTBkb3duc3RyZWFtRU5TXzI3RWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlRQorX19aTks3V2ViQ29yZThQb3NpdGlvbjEzY29udGFpbmVyTm9kZUV2
CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjRwYXJlbnRBbmNob3JlZEVxdWl2YWxlbnRFdgogX19a
Tks3V2ViQ29yZThQb3NpdGlvbjI1bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmlu
aXR5RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9u
RU5TXzlFQWZmaW5pdHlFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw3ICs1
NzgsNyBAQCBWaXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAgICAgaWYg
KGRlZXBQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAg
ICAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVlcFBvcy5ub2RlKCktPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlZXBQb3MuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiAgICAgCkBAIC01ODYsNyArNTg2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFY
T2JqZWN0Q2FjaGU6OnZpc2libGVQbwogICAgIGlmICghY2FjaGUtPmlzSURpblVzZSh0ZXh0TWFy
a2VyRGF0YS5heElEKSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIAot
ICAgIGlmIChkZWVwUG9zLm5vZGUoKSAhPSB0ZXh0TWFya2VyRGF0YS5ub2RlIHx8IGRlZXBQb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAhPSB0ZXh0TWFya2VyRGF0YS5vZmZzZXQpCisgICAg
aWYgKGRlZXBQb3MuZGVwcmVjYXRlZE5vZGUoKSAhPSB0ZXh0TWFya2VyRGF0YS5ub2RlIHx8IGRl
ZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAhPSB0ZXh0TWFya2VyRGF0YS5vZmZzZXQp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICByZXR1cm4gdmlz
aWJsZVBvczsKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yVmlzCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBQb3NpdGlvbiBkZWVwUG9z
ID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUqIGRvbU5vZGUgPSBkZWVw
UG9zLm5vZGUoKTsKKyAgICBOb2RlKiBkb21Ob2RlID0gZGVlcFBvcy5kZXByZWNhdGVkTm9kZSgp
OwogICAgIEFTU0VSVChkb21Ob2RlKTsKICAgICBpZiAoIWRvbU5vZGUpCiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIs
OSArMjIyLDkgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiB1cGRhdGVBWExpbmVTdGFydAogICAg
ICAgICBpZiAodGVtcFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIHAgPSB0ZW1wUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgaWYgKCFwLm5v
ZGUoKSkKKyAgICAgICAgaWYgKCFwLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgcmVuZGVyZXIgPSBwLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgcmVu
ZGVyZXIgPSBwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghcmVu
ZGVyZXIgfHwgKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSW5saW5lQm94KiBib3g7
CkBAIC0zMTgsNyArMzE4LDcgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9i
amVjdAogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJhbmdlKGNvbnN0IFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIg
PSByZW5kZXJlcjsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
IApAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlN0eWxl
UmFuZ2UKIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRPZlN0eWxlUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zKQogewotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0g
cmVuZGVyZXI7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAK
QEAgLTY0OSw3ICs2NDksNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0CiAgICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgUmVuZGVyT2JqZWN0KiBvYmogPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogb2JqID0gdmlzaWJsZVBvcy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFvYmopCiAg
ICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4
Nzk1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4MiwxMyArMjQ4MiwxMyBAQCBpbnQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWCiAgICAgICAgIHJldHVybiAwOwogICAg
IAogICAgIFBvc2l0aW9uIGluZGV4UG9zaXRpb24gPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAg
ICBpZiAoIWluZGV4UG9zaXRpb24ubm9kZSgpIHx8IGluZGV4UG9zaXRpb24ubm9kZSgpLT5yb290
RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZSkKKyAgICBpZiAoIWluZGV4UG9zaXRpb24uYW5jaG9y
Tm9kZSgpIHx8IGluZGV4UG9zaXRpb24uYW5jaG9yTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50
KCkgIT0gbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUobV9yZW5kZXJl
ci0+ZG9jdW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG5vZGUsIDAsIGVjKTsKLSAgICBy
YW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24ubm9kZSgpLCBpbmRleFBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24u
YW5jaG9yTm9kZSgpLCBpbmRleFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVj
KTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSk7CiB9
CiAKQEAgLTI2MjEsNyArMjYyMSw3IEBAIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
bmRleChjb24KICAgICBpZiAoIWlzVGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIC0xOwog
ICAgIAotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsK
KyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjEsNyArMTIyMSw3IEBAIHN0YXRpYyBnaW50IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2MKICAgICBpZiAoIWNvcmVPYmplY3QtPmlzQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIE5vZGUqIGZv
Y3VzZWROb2RlID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCkuZW5kKCkubm9kZSgpOworICAgIE5v
ZGUqIGZvY3VzZWROb2RlID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCkuZW5kKCkuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICBpZiAoIWZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm4gMDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw3ICsyMzAsNyBAQCBQ
YXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gCiAKIFBvc2l0aW9uIFBvc2l0
aW9uOjpwcmV2aW91cyhQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBjb25zdAogewotICAgIE5v
ZGUqIG4gPSBub2RlKCk7CisgICAgTm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgCkBAIC0yNjksNyArMjY5LDcgQEAgUG9z
aXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRpb25Nb3ZlVHlwZQogewogICAgIEFTU0VSVChtb3Zl
VHlwZSAhPSBCYWNrd2FyZERlbGV0aW9uKTsKIAotICAgIE5vZGUqIG4gPSBub2RlKCk7CisgICAg
Tm9kZSogbiA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgCkBAIC0zMjMsNyArMzIzLDcgQEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTgogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUoKSk7
CisgICAgcmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGRlcHJlY2F0ZWRO
b2RlKCkpOwogfQogCiAvLyBBIHBvc2l0aW9uIGlzIGNvbnNpZGVyZWQgYXQgZWRpdGluZyBib3Vu
ZGFyeSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgpAQCAtMzM2LDE1ICszMzYsMTUg
QEAgYm9vbCBQb3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTgogYm9vbCBQb3NpdGlv
bjo6YXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdAogewogICAgIFBvc2l0aW9uIG5leHRQb3NpdGlv
biA9IGRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdEZpcnN0
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAh
bmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoYXRGaXJz
dEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
IW5leHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgUG9zaXRpb24gcHJldlBvc2l0aW9uID0g
dXBzdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwotICAgIGlmIChhdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9z
aXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgIGlmIChhdExhc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIAotICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgIW5leHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkKLSAgICAgICAgJiYg
cHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFwcmV2UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIHJldHVybiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5l
eHRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpCisgICAgICAg
ICYmIHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIE5vZGUqIFBvc2l0aW9uOjpwYXJlbnRF
ZGl0aW5nQm91bmRhcnkoKSBjb25zdApAQCAtMzY4LDI2ICszNjgsMjYgQEAgYm9vbCBQb3NpdGlv
bjo6YXRTdGFydE9mVHJlZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gIW5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zmc2V0
IDw9IDA7CisgICAgcmV0dXJuICFkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgJiYgbV9v
ZmZzZXQgPD0gMDsKIH0KIAogYm9vbCBQb3NpdGlvbjo6YXRFbmRPZlRyZWUoKSBjb25zdAogewog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFub2Rl
KCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2Rl
KCkpOworICAgIHJldHVybiAhZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zm
c2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKGRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiBpbnQg
UG9zaXRpb246OnJlbmRlcmVkT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBpZiAoIW5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKQorICAgIGlmICghZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAg
ICAgICByZXR1cm4gbV9vZmZzZXQ7CiAgICAKLSAgICBpZiAoIW5vZGUoKS0+cmVuZGVyZXIoKSkK
KyAgICBpZiAoIWRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBt
X29mZnNldDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgaW50IHJlc3VsdCA9IDA7Ci0gICAg
UmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KG5vZGUoKS0+cmVuZGVyZXIo
KSk7CisgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KGRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCkpOwogICAgIGZvciAoSW5saW5lVGV4dEJveCAqYm94ID0gdGV4
dFJlbmRlcmVyLT5maXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkp
IHsKICAgICAgICAgaW50IHN0YXJ0ID0gYm94LT5zdGFydCgpOwogICAgICAgICBpbnQgZW5kID0g
Ym94LT5zdGFydCgpICsgYm94LT5sZW4oKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3NpCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIAotICAgIE5vZGUgKmZyb21Sb290RWRpdGFibGVFbGVtZW50
ID0gbm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogZnJvbVJvb3RFZGl0
YWJsZUVsZW1lbnQgPSBkZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAK
ICAgICBib29sIGF0U3RhcnRPZkxpbmUgPSBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbigq
dGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVkID0gaXNDYW5kaWRhdGUoKTsKQEAg
LTQxNyw3ICs0MTcsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6cHJldmlvdXNDaGFyYWN0ZXJQb3Np
CiAgICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0U3RhcnRPZlRyZWUoKSkgewogICAgICAgICBjdXJy
ZW50UG9zID0gY3VycmVudFBvcy5wcmV2aW91cygpOwogCi0gICAgICAgIGlmIChjdXJyZW50UG9z
Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVtZW50
KQorICAgICAgICBpZiAoY3VycmVudFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAKICAgICAgICAgaWYgKGF0U3RhcnRPZkxpbmUgfHwgIXJlbmRlcmVkKSB7CkBAIC00
MzYsNyArNDM2LDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHRDaGFyYWN0ZXJQb3NpdGlvbgog
ICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKLSAgICBOb2Rl
ICpmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OworICAgIE5vZGUqIGZyb21Sb290RWRpdGFibGVFbGVtZW50ID0gZGVwcmVjYXRlZE5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAgICAgYm9vbCBhdEVuZE9mTGluZSA9IGlzRW5kT2ZM
aW5lKFZpc2libGVQb3NpdGlvbigqdGhpcywgYWZmaW5pdHkpKTsKICAgICBib29sIHJlbmRlcmVk
ID0gaXNDYW5kaWRhdGUoKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6
bmV4dENoYXJhY3RlclBvc2l0aW9uCiAgICAgd2hpbGUgKCFjdXJyZW50UG9zLmF0RW5kT2ZUcmVl
KCkpIHsKICAgICAgICAgY3VycmVudFBvcyA9IGN1cnJlbnRQb3MubmV4dCgpOwogCi0gICAgICAg
IGlmIChjdXJyZW50UG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290
RWRpdGFibGVFbGVtZW50KQorICAgICAgICBpZiAoY3VycmVudFBvcy5kZXByZWNhdGVkTm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICAgICAgaWYgKGF0RW5kT2ZMaW5lIHx8ICFyZW5k
ZXJlZCkgewpAQCAtNTA3LDcgKzUwNyw3IEBAIHN0YXRpYyBib29sIGlzU3RyZWFtZXIoY29uc3Qg
UG9zaXRpb25JdGUKIC8vIGluIGJvdW5kYXJ5LCB3aGVyZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlE
aXN0aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkgaXMgdHJ1ZS4KIFBvc2l0aW9uIFBvc2l0aW9uOjp1
cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKIHsKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAgICAgCkBAIC02MjgsNyArNjI4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVk
aXRpbmdCb3VuZAogLy8gaW4gYm91bmRhcnkgYWZ0ZXIgdGhlIGxhc3QgY2FuZGlkYXRlLCB3aGVy
ZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkuCiBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkgY29uc3QKIHsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CisgICAgTm9kZSogc3Rh
cnROb2RlID0gZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7CiAKQEAgLTc2NCw3ICs3NjQsNyBAQCBib29sIFBvc2l0aW9uOjpp
c0NhbmRpZGF0ZSgpIGNvbnN0CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBub2RlKCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IApAQCAtNzcyLDEzICs3NzIsMTMgQEAgYm9vbCBQb3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25z
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocmVuZGVyZXItPmlzQlIoKSkKLSAg
ICAgICAgcmV0dXJuICFtX29mZnNldCAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpLT5w
YXJlbnROb2RlKCkpOworICAgICAgICByZXR1cm4gIW1fb2Zmc2V0ICYmICFub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKHJlbmRl
cmVyLT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2Rl
KCkpICYmIGluUmVuZGVyZWRUZXh0KCk7CisgICAgICAgIHJldHVybiAhbm9kZUlzVXNlclNlbGVj
dE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgaW5SZW5kZXJlZFRleHQoKTsKIAotICAgIGlmIChp
c1RhYmxlRWxlbWVudChub2RlKCkpIHx8IGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKCkpKQot
ICAgICAgICByZXR1cm4gKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgfHwgYXRMYXN0
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgp
LT5wYXJlbnROb2RlKCkpOworICAgIGlmIChpc1RhYmxlRWxlbWVudChkZXByZWNhdGVkTm9kZSgp
KSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQoZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHJl
dHVybiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSB8fCBhdExhc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgp
LT5wYXJlbnROb2RlKCkpOwogCiAgICAgaWYgKG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1s
VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzg2LDIxICs3ODYsMjEgQEAgYm9vbCBQ
b3NpdGlvbjo6aXNDYW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zs
b3coKSkgewogICAgICAgICBpZiAodG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmhlaWdodCgpIHx8
IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgewogICAgICAgICAgICAgaWYgKCFQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVu
ZGVyZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0
aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkg
JiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBv
c2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRp
bmdCb3VuZGFyeSgpOwogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBtX2Fu
Y2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2Vs
ZWN0Tm9uZShub2RlKCkpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgIHJldHVybiBt
X2FuY2hvck5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2Vy
U2VsZWN0Tm9uZShkZXByZWNhdGVkTm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFBvc2l0aW9uOjppblJlbmRlcmVkVGV4dCgpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzTnVsbCgpIHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICBp
ZiAoaXNOdWxsKCkgfHwgIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9k
ZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKQEAgLTgzMywxMCArODMzLDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBjYXJldE1h
eFJlbmRlcmVkT2Zmc2V0KGMKIAogYm9vbCBQb3NpdGlvbjo6aXNSZW5kZXJlZENoYXJhY3Rlcigp
IGNvbnN0CiB7Ci0gICAgaWYgKGlzTnVsbCgpIHx8ICFub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAg
ICBpZiAoaXNOdWxsKCkgfHwgIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKQEAgLTg2MCwxMSArODYwLDExIEBAIGJvb2wgUG9zaXRpb246OnJlbmRl
cnNJbkRpZmZlcmVudFBvc2l0aW8KICAgICBpZiAoaXNOdWxsKCkgfHwgcG9zLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9k
ZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICBSZW5kZXJPYmplY3QgKnBvc1JlbmRlcmVyID0gcG9zLm5vZGUoKS0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHBvc1JlbmRlcmVyID0gcG9zLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFwb3NSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC04NzIsMzIgKzg3MiwzMiBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJz
SW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHBvc1JlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChu
b2RlKCkgPT0gcG9zLm5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSkKKyAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKSA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKSkg
eworICAgICAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fb2Zmc2V0ID09IHBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCi0gICAgICAgIGlmICghbm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5ub2RlKCkt
PmlzVGV4dE5vZGUoKSkgeworICAgICAgICBpZiAoIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiAhcG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAg
ICAgaWYgKG1fb2Zmc2V0ICE9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChu
b2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIHBvcy5pc0NhbmRpZGF0ZSgpKQorICAgIGlmIChk
ZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3MuaXNDYW5kaWRhdGUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHBvcy5ub2Rl
KCktPmhhc1RhZ05hbWUoYnJUYWcpICYmIGlzQ2FuZGlkYXRlKCkpCisgICAgaWYgKHBvcy5kZXBy
ZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBpc0NhbmRpZGF0ZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICBpZiAobm9kZSgpLT5lbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpKQorICAgIGlmIChkZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCkgIT0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobm9kZSgpLT5pc1RleHROb2RlKCkg
JiYgIWluUmVuZGVyZWRUZXh0KCkpCisgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiAhaW5SZW5kZXJlZFRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKHBvcy5ub2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcG9zLmluUmVuZGVyZWRUZXh0KCkpCisg
ICAgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5pblJlbmRl
cmVkVGV4dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpbnQgdGhpc1JlbmRlcmVk
T2Zmc2V0ID0gcmVuZGVyZWRPZmZzZXQoKTsKQEAgLTkxNiw4ICs5MTYsOCBAQCBib29sIFBvc2l0
aW9uOjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgTE9HKEVkaXRpbmcsICJ0aGlzUmVu
ZGVyZWRPZmZzZXQ6ICAgICAgICAgJWRcbiIsIHRoaXNSZW5kZXJlZE9mZnNldCk7CiAgICAgTE9H
KEVkaXRpbmcsICJwb3NSZW5kZXJlcjogICAgICAgICAgICAlcCBbJXBdXG4iLCBwb3NSZW5kZXJl
ciwgYjIpOwogICAgIExPRyhFZGl0aW5nLCAicG9zUmVuZGVyZWRPZmZzZXQ6ICAgICAgJWRcbiIs
IHBvc1JlbmRlcmVkT2Zmc2V0KTsKLSAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAg
ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChub2RlKCkpLCBjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KG5vZGUoKSkpOwotICAgIExPRyhFZGl0aW5nLCAicG9zIG5vZGUgbWluL21heDogICAg
ICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KHBvcy5ub2RlKCkpLCBjYXJldE1heFJlbmRlcmVk
T2Zmc2V0KHBvcy5ub2RlKCkpKTsKKyAgICBMT0coRWRpdGluZywgIm5vZGUgbWluL21heDogICAg
ICAgICAgICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChkZXByZWNhdGVkTm9kZSgpKSwgY2FyZXRN
YXhSZW5kZXJlZE9mZnNldChkZXByZWNhdGVkTm9kZSgpKSk7CisgICAgTE9HKEVkaXRpbmcsICJw
b3Mgbm9kZSBtaW4vbWF4OiAgICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQocG9zLmRlcHJl
Y2F0ZWROb2RlKCkpLCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KHBvcy5kZXByZWNhdGVkTm9kZSgp
KSk7CiAgICAgTE9HKEVkaXRpbmcsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAogICAgIGlmICghYjEg
fHwgIWIyKSB7CkBAIC05MjgsMTMgKzkyOCwxMyBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJzSW5E
aWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChu
ZXh0UmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRo
aXNSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQobm9kZSgpKSAm
JiBwb3NSZW5kZXJlZE9mZnNldCA9PSAwKSB7CisgICAgaWYgKG5leHRSZW5kZXJlZEVkaXRhYmxl
KGRlcHJlY2F0ZWROb2RlKCkpID09IHBvcy5kZXByZWNhdGVkTm9kZSgpCisgICAgICAgICYmIHRo
aXNSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoZGVwcmVjYXRl
ZE5vZGUoKSkgJiYgIXBvc1JlbmRlcmVkT2Zmc2V0KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHByZXZpb3VzUmVuZGVyZWRFZGl0YWJsZShub2RlKCkpID09
IHBvcy5ub2RlKCkgJiYgCi0gICAgICAgIHRoaXNSZW5kZXJlZE9mZnNldCA9PSAwICYmIHBvc1Jl
bmRlcmVkT2Zmc2V0ID09IChpbnQpY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3Mubm9kZSgpKSkg
eworICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoZGVwcmVjYXRlZE5vZGUoKSkgPT0g
cG9zLmRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgJiYgIXRoaXNSZW5kZXJlZE9mZnNldCAmJiBw
b3NSZW5kZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLmRlcHJl
Y2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTk0OCwx
MiArOTQ4LDEyIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2kKICAg
ICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogICAgIAotICAgIGlm
ICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHVwc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRp
b24oYWZmaW5pdHkpOwotICAgIGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYubm9kZSgpLT5pblNh
bWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChub2RlKCkpICYmIHByZXYubm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRleHQgKj4o
cHJldi5ub2RlKCkpLT5kYXRhKCk7CisgICAgaWYgKHByZXYgIT0gKnRoaXMgJiYgcHJldi5kZXBy
ZWNhdGVkTm9kZSgpLT5pblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChkZXByZWNhdGVk
Tm9kZSgpKSAmJiBwcmV2LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICBTdHJpbmcgc3RyaW5nID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihwcmV2LmRlcHJlY2F0ZWROb2Rl
KCkpLT5kYXRhKCk7CiAgICAgICAgIFVDaGFyIGMgPSBzdHJpbmdbcHJldi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpXTsKICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNw
YWNlID8gKGlzU3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogaXNDb2xs
YXBzaWJsZVdoaXRlc3BhY2UoYykpCiAgICAgICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9u
KHByZXYpKQpAQCAtMTA0NSwxMSArMTA0NSwxMSBAQCBzdGF0aWMgUG9zaXRpb24gdXBzdHJlYW1J
Z25vcmluZ0VkaXRpbmdCCiB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFm
ZmluaXR5IGFmZmluaXR5LCBUZXh0RGlyZWN0aW9uIHByaW1hcnlEaXJlY3Rpb24sIElubGluZUJv
eComIGlubGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKIHsKICAgICBjYXJldE9mZnNl
dCA9IG1fb2Zmc2V0OwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlKCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCk7CiAKICAgICBpZiAoIXJlbmRlcmVyLT5pc1RleHQoKSkgewogICAgICAgICBpbmxp
bmVCb3ggPSAwOwotICAgICAgICBpZiAoY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhub2RlKCkp
ICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmIGhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVz
Y2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkgeworICAgICAgICBpZiAoY2FuSGF2ZUNoaWxk
cmVuRm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKSAmJiByZW5kZXJlci0+aXNCbG9ja0Zsb3co
KSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJl
cikpIHsKICAgICAgICAgICAgIC8vIFRyeSBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24g
d2l0aCBwb3NzaWJseSBvcHBvc2l0ZSBlZGl0YWJpbGl0eS4gVGhpcyBoZWxwcyBpbiBjYXNlIHx0
aGlzfCBpcyBpbgogICAgICAgICAgICAgLy8gYW4gZWRpdGFibGUgYmxvY2sgYnV0IHN1cnJvdW5k
ZWQgYnkgbm9uLWVkaXRhYmxlIHBvc2l0aW9ucy4gSXQgYWN0cyB0byBuZWdhdGUgdGhlIGxvZ2lj
IGF0IHRoZSBiZWdpbm5pbmcKICAgICAgICAgICAgIC8vIG9mIFJlbmRlck9iamVjdDo6Y3JlYXRl
VmlzaWJsZVBvc2l0aW9uKCkuCkBAIC0xMjExLDcgKzEyMTEsNyBAQCB2b2lkIFBvc2l0aW9uOjpk
ZWJ1Z1Bvc2l0aW9uKGNvbnN0IGNoYXIqCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxcbiIsIG1zZyk7CiAgICAgZWxzZQotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRcbiIsIG1z
Zywgbm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCksIG5vZGUoKSwgbV9vZmZzZXQpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzIFslcF0gYXQgJWRcbiIs
IG1zZywgZGVwcmVjYXRlZE5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBkZXByZWNh
dGVkTm9kZSgpLCBtX29mZnNldCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xMjI3LDcgKzEy
MjcsNyBAQCB2b2lkIFBvc2l0aW9uOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBiCiAgICAgICAg
IHJlc3VsdCArPSAib2Zmc2V0ICI7CiAgICAgICAgIHJlc3VsdCArPSBTdHJpbmc6Om51bWJlciht
X29mZnNldCk7CiAgICAgICAgIHJlc3VsdCArPSAiIG9mICI7Ci0gICAgICAgIG5vZGUoKS0+Zm9y
bWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKKyAgICAgICAgZGVwcmVjYXRlZE5vZGUoKS0+
Zm9ybWF0Rm9yRGVidWdnZXIocywgc2l6ZW9mKHMpKTsKICAgICAgICAgcmVzdWx0ICs9IHM7CiAg
ICAgfQogICAgICAgICAgIApAQCAtMTI1NCw4ICsxMjU0LDggQEAgdm9pZCBQb3NpdGlvbjo6c2hv
d0FuY2hvclR5cGVBbmRPZmZzZXQoKQogCiB2b2lkIFBvc2l0aW9uOjpzaG93VHJlZUZvclRoaXMo
KSBjb25zdAogewotICAgIGlmIChub2RlKCkpIHsKLSAgICAgICAgbm9kZSgpLT5zaG93VHJlZUZv
clRoaXMoKTsKKyAgICBpZiAoYW5jaG9yTm9kZSgpKSB7CisgICAgICAgIGFuY2hvck5vZGUoKS0+
c2hvd1RyZWVGb3JUaGlzKCk7CiAgICAgICAgIHNob3dBbmNob3JUeXBlQW5kT2Zmc2V0KCk7CiAg
ICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIGJlIG1vdmVkIG9mZiBv
ZiBub2RlKCksIG5vZGUoKSBpcyBub3QgYWx3YXlzIHRoZSBjb250YWluZXIgZm9yIHRoaXMgcG9z
aXRpb24uCiAgICAgLy8gRm9yIG5vZGVzIHdoaWNoIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2Rl
KCkpIHJldHVybnMgdHJ1ZSwgcG9zaXRpb25zIGxpa2UgW2lnbm9yZWROb2RlLCAwXQogICAgIC8v
IHdpbGwgYmUgdHJlYXRlZCBhcyBiZWZvcmUgaWdub3JlZE5vZGUgKHRodXMgbm9kZSgpIGlzIHJl
YWxseSBhZnRlciB0aGUgcG9zaXRpb24sIG5vdCBjb250YWluaW5nIGl0KS4KLSAgICBOb2RlKiBu
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOyB9CisgICAgTm9kZSogZGVw
cmVjYXRlZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvck5vZGUuZ2V0KCk7IH0KIAogICAg
IC8vIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciBwb3NpdGlvbnMsIHVubGVzcwogICAgIC8vIHRoZSBwb3NpdGlvbiBpcyBhIGxlZ2FjeSBlZGl0
aW5nIHBvc2l0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCwxMSArMTM0LDExIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpmb3Jt
YXRTZWwKICAgICAgICAgLy8gaW5kZW50SW50b0Jsb2NrcXVvdGUgY291bGQgbW92ZSBtb3JlIHRo
YW4gb25lIHBhcmFncmFwaCBpZiB0aGUgcGFyYWdyYXBoCiAgICAgICAgIC8vIGlzIGluIGEgbGlz
dCBpdGVtIG9yIGEgdGFibGUuIEFzIGEgcmVzdWx0LCBlbmRBZnRlclNlbGVjdGlvbiBjb3VsZCBy
ZWZlciB0byBhIHBvc2l0aW9uCiAgICAgICAgIC8vIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQu
Ci0gICAgICAgIGlmIChlbmRBZnRlclNlbGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJT
ZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAg
aWYgKGVuZEFmdGVyU2VsZWN0aW9uLmlzTm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVjdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBtb3ZlUGFyYWdy
YXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpCisgICAgICAgIC8vIFNhbml0eSBjaGVjazogTWFrZSBzdXJlIG91ciBtb3ZlUGFy
YWdyYXBoIGNhbGxzIGRpZG4ndCByZW1vdmUgZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKQogICAgICAgICAvLyBJZiBzb21laG93IHdlIGRpZCwgcmV0
dXJuIHRvIHByZXZlbnQgY3Jhc2hlcy4KLSAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5p
c05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51
bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgp
LT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xODIsOCArMTgyLDggQEAgdm9pZCBBcHBs
eUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgIFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKHN0YXJ0KTsKICAgICBib29sIGlz
U3RhcnRBbmRFbmRPblNhbWVOb2RlID0gZmFsc2U7CiAgICAgaWYgKHN0YXJ0U3R5bGUpIHsKLSAg
ICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4
dE5vZGUoZW5kKSAmJiBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKTsKLSAgICAgICAgYm9vbCBp
c1N0YXJ0QW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgc3RhcnQubm9kZSgpID09IG1f
ZW5kT2ZMYXN0UGFyYWdyYXBoLm5vZGUoKTsKKyAgICAgICAgaXNTdGFydEFuZEVuZE9uU2FtZU5v
ZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9zaW5nVGV4dE5vZGUoZW5kKSAmJiBzdGFydC5kZXByZWNh
dGVkTm9kZSgpID09IGVuZC5kZXByZWNhdGVkTm9kZSgpOworICAgICAgICBib29sIGlzU3RhcnRB
bmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1Rl
eHROb2RlKG1fZW5kT2ZMYXN0UGFyYWdyYXBoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpID09
IG1fZW5kT2ZMYXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAgLy8gQXZv
aWQgb2J0YW5pbmluZyB0aGUgc3RhcnQgb2YgbmV4dCBwYXJhZ3JhcGggZm9yIHN0YXJ0CiAgICAg
ICAgIGlmIChzdGFydFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBpc05ld0xpbmVBdFBvc2l0
aW9uKHN0YXJ0KSAmJiAhaXNOZXdMaW5lQXRQb3NpdGlvbihzdGFydC5wcmV2aW91cygpKSAmJiBz
dGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+IDApCkBAIC0xOTIsMTUgKzE5MiwxNSBAQCB2
b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAgIC8vIElmIHN0
YXJ0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAgICAgICBpZiAo
IXN0YXJ0U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldEluQ29udGFp
bmVyTm9kZSgpID4gMCkgewogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19j
YXN0PFRleHQqPihzdGFydC5ub2RlKCkpLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICBzdGFy
dCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICAgICAgc3BsaXRU
ZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSksIHN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2Rl
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+
PSBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUo
KSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnRPZmZzZXQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgICAgIGVuZCA9IFBvc2l0aW9u
KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFy
dE9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5v
ZGUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIG1fZW5k
T2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24obV9lbmRPZkxhc3RQYXJhZ3JhcGgubm9kZSgpLCBt
X2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0T2Zmc2V0
LAorICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gUG9zaXRpb24obV9lbmRP
Zkxhc3RQYXJhZ3JhcGguZGVwcmVjYXRlZE5vZGUoKSwgbV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTIwOCwxMyArMjA4LDEzIEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5k
OjpyYW5nZUZvclAKIAogICAgIFJlbmRlclN0eWxlKiBlbmRTdHlsZSA9IHJlbmRlclN0eWxlT2ZF
bmNsb3NpbmdUZXh0Tm9kZShlbmQpOwogICAgIGlmIChlbmRTdHlsZSkgewotICAgICAgICBib29s
IGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNs
b3NpbmdUZXh0Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgZW5kLm5vZGUoKSA9PSBtX2Vu
ZE9mTGFzdFBhcmFncmFwaC5ub2RlKCk7CisgICAgICAgIGJvb2wgaXNFbmRBbmRFbmRPZkxhc3RQ
YXJhZ3JhcGhPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKG1fZW5k
T2ZMYXN0UGFyYWdyYXBoKSAmJiBlbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2VuZE9mTGFzdFBh
cmFncmFwaC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBJbmNsdWRlIFxuIGF0IHRoZSBl
bmQgb2YgbGluZSBpZiB3ZSdyZSBhdCBhbiBlbXB0eSBwYXJhZ3JhcGgKICAgICAgICAgaWYgKGVu
ZFN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBzdGFydCA9PSBlbmQKICAgICAgICAgICAgICYm
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENo
YXJhY3Rlck9mZnNldCgpKSB7CiAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKCFpc05ld0xpbmVBdFBvc2l0aW9u
KGVuZC5wcmV2aW91cygpKSAmJiBpc05ld0xpbmVBdFBvc2l0aW9uKGVuZCkpCi0gICAgICAgICAg
ICAgICAgZW5kID0gUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kT2Zmc2V0ICsgMSwgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CisgICAgICAgICAgICAgICAgZW5kID0gUG9zaXRp
b24oZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZE9mZnNldCArIDEsIFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0UGFy
YWdyYXBoT25TYW1lTm9kZSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gbV9lbmRP
Zkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAg
bV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBlbmQ7CiAgICAgICAgIH0KQEAgLTIyMiwxNyArMjIyLDE3
IEBAIHZvaWQgQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclAKICAgICAgICAgLy8g
SWYgZW5kIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUsIHNwbGl0LgogICAgICAgICBp
ZiAoIWVuZFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkKICAgICAgICAgICAgICYmIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVu
ZC5jb250YWluZXJOb2RlKCktPm1heENoYXJhY3Rlck9mZnNldCgpKSB7Ci0gICAgICAgICAgICBz
cGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgpKSwgZW5kLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8
VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9kZSgpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgp
KTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkKLSAgICAgICAgICAg
ICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxp
bmcoKSk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kLmRl
cHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAgICAgIGlmIChpc0Vu
ZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPT0gZW5kLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFn
cmFwaCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQubm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fZW5kT2ZMYXN0UGFyYWdyYXBoID0gbGFzdFBvc2l0aW9u
SW5Ob2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9
IFBvc2l0aW9uKGVuZC5ub2RlKCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIC0gZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLAorICAgICAgICAgICAgICAg
ICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgp
LCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVuZCA9IGxhc3RQb3NpdGlvbkluTm9kZShlbmQubm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25J
bk5vZGUoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnByZXZpb3VzU2libGluZygpKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgU3R5
bGVDaGFuZ2U6OlN0eWxlQ2hhbmdlKENTU1N0eWxlRGVjbGFyYQogCiB2b2lkIFN0eWxlQ2hhbmdl
Ojppbml0KFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBwb3NpdGlvbi5ub2Rl
KCkgPyBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCkgOiAwOworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHBvc2l0aW9uLmFuY2hvck5vZGUoKSA/IHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+ZG9j
dW1lbnQoKSA6IDA7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgU3R5bGVDaGFuZ2U6Omlu
aXQoUGFzc1JlZlB0cjxDU1NTdHkKICAgICAgICAgZXh0cmFjdFRleHRTdHlsZXMoZG9jdW1lbnQs
IG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+dXNlRml4ZWRGb250RGVmYXVsdFNp
emUoKSk7CiAKICAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFjZSBzdHlsZSBpbiBhIHRhYiBz
cGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNlLgotICAgIGlmIChpc1RhYlNw
YW5UZXh0Tm9kZShwb3NpdGlvbi5ub2RlKCkpIHx8IGlzVGFiU3Bhbk5vZGUoKHBvc2l0aW9uLm5v
ZGUoKSkpKQorICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpKSB8fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAg
ICAgIG11dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsK
IAogICAgIC8vIElmIHVuaWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHlsZSBhbmQg
ZGlyZWN0aW9uIGlzIG5vdCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHlsZS4KQEAg
LTU4MSw3ICs1ODEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUo
CiAgICAgLy8gU2F2ZSBhbmQgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGVuZHBvaW50cyB1c2luZyB0
aGVpciBpbmRpY2VzIGluIHRoZSBkb2N1bWVudCwgc2luY2UKICAgICAvLyBhZGRCbG9ja1N0eWxl
SWZOZWVkZWQgbWF5IG1vdmVQYXJhZ3JhcGhzLCB3aGljaCBjYW4gcmVtb3ZlIHRoZXNlIGVuZHBv
aW50cy4KICAgICAvLyBDYWxjdWxhdGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzIGZyb20gdGhlIHN0
YXJ0IG9mIHRoZSB0cmVlIHRoYXQgdGhleSdyZSBpbi4KLSAgICBOb2RlKiBzY29wZSA9IGhpZ2hl
c3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5v
ZGUqIHNjb3BlID0gaGlnaGVzdEFuY2VzdG9yKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZSA9IFJhbmdl
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShzY29wZSksIHZpc2libGVT
dGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBS
ZWZQdHI8UmFuZ2U+IGVuZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBv
c2l0aW9uSW5Ob2RlKHNjb3BlKSwgdmlzaWJsZUVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFu
Y2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBpbnQgc3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgoc3RhcnRSYW5nZS5nZXQoKSwgdHJ1ZSk7CkBAIC01OTMsNyArNTkzLDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKAogICAgIHdoaWxlIChwYXJh
Z3JhcGhTdGFydC5pc05vdE51bGwoKSAmJiBwYXJhZ3JhcGhTdGFydCAhPSBiZXlvbmRFbmQpIHsK
ICAgICAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUtPnN0eWxlKCksIHBhcmFncmFw
aFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuY3NzU3R5
bGUoKS5sZW5ndGgoKSB8fCBtX3JlbW92ZU9ubHkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBibG9jayA9IGVuY2xvc2luZ0Jsb2Nr
KHBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
ICAgICAgICBpZiAoIW1fcmVtb3ZlT25seSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBuZXdCbG9jayA9IG1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3QmxvY2tJZk5lY2Vzc2FyeShw
YXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgICAgICAgICBpZiAobmV3
QmxvY2spCkBAIC02MzYsMTMgKzYzNiwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9uCiAgICAgfQogCiAgICAgLy8gSm9pbiB1cCBhbnkgYWRqYWNlbnQgdGV4dCBu
b2Rlcy4KLSAgICBpZiAoc3RhcnQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgam9p
bkNoaWxkVGV4dE5vZGVzKHN0YXJ0Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsK
KyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAg
IGpvaW5DaGlsZFRleHROb2RlcyhzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCks
IHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAg
ZW5kID0gZW5kUG9zaXRpb24oKTsKICAgICB9Ci0gICAgaWYgKGVuZC5ub2RlKCktPmlzVGV4dE5v
ZGUoKSAmJiBzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmQubm9kZSgpLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgam9pbkNoaWxkVGV4dE5vZGVzKGVuZC5ub2RlKCktPnBhcmVudE5v
ZGUoKSwgc3RhcnQsIGVuZCk7CisgICAgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHRO
b2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgam9pbkNoaWxkVGV4dE5vZGVz
KGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0LCBlbmQpOwogICAgICAg
ICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsK
ICAgICB9CkBAIC02NjQsMTMgKzY2NCwxMyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eVJlbGF0aXZlRm9uCiAgICAgLy8gSWYgdGhlIGVuZCBub2RlIGlzIGJlZm9yZSB0aGUgc3RhcnQg
bm9kZSAoY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBlbmQgbm9kZSBpcwogICAgIC8vIGFuIGFuY2Vz
dG9yIG9mIHRoZSBzdGFydCBub2RlKSwgd2UgZ2F0aGVyIG5vZGVzIHVwIHRvIHRoZSBuZXh0IHNp
Ymxpbmcgb2YgdGhlIGVuZCBub2RlCiAgICAgTm9kZSAqYmV5b25kRW5kOwotICAgIGlmIChzdGFy
dC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5ub2RlKCkpKQotICAgICAgICBiZXlvbmRFbmQg
PSBlbmQubm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgaWYgKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICAg
ICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKICAgICBlbHNlCi0gICAgICAgIGJleW9uZEVuZCA9IGVuZC5ub2RlKCktPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZl
cnNlTmV4dE5vZGUoKTsKICAgICAKICAgICBzdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7IC8vIE1v
dmUgdXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVkdW5kYW50IHNwYW5zLgotICAg
IE5vZGUgKnN0YXJ0Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBz
dGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0
Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiByYW5nZSBkb2VzIG5vdCBpbmNsdWRl
IGl0cyBjaGFyYWN0ZXJzLgogICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKIApAQCAtODc0LDI1ICs4NzQsMjUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgIC8vIHNwbGl0IHRoZSBzdGFydCBub2RlIGFuZCBjb250
YWluaW5nIGVsZW1lbnQgaWYgdGhlIHNlbGVjdGlvbiBzdGFydHMgaW5zaWRlIG9mIGl0CiAgICAg
Ym9vbCBzcGxpdFN0YXJ0ID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKHN0YXJ0KTsK
ICAgICBpZiAoc3BsaXRTdGFydCkgewotICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVu
dChzdGFydC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQorICAgICAg
ICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5wYXJl
bnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgpKSkKICAgICAgICAgICAgIHNwbGl0VGV4dEVsZW1l
bnRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzcGxpdFRl
eHRBdFN0YXJ0KHN0YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgc3RhcnREdW1teVNwYW5BbmNl
c3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5ub2RlKCkpOworICAgICAgICBz
dGFydER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIH0KIAogICAgIC8vIHNwbGl0IHRoZSBlbmQgbm9kZSBhbmQg
Y29udGFpbmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbnNpZGUgb2YgaXQKICAg
ICBib29sIHNwbGl0RW5kID0gaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGVuZCk7CiAg
ICAgaWYgKHNwbGl0RW5kKSB7Ci0gICAgICAgIGlmIChzaG91bGRTcGxpdFRleHRFbGVtZW50KGVu
ZC5ub2RlKCktPnBhcmVudEVsZW1lbnQoKSwgc3R5bGUtPnN0eWxlKCkpKQorICAgICAgICBpZiAo
c2hvdWxkU3BsaXRUZXh0RWxlbWVudChlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50RWxlbWVu
dCgpLCBzdHlsZS0+c3R5bGUoKSkpCiAgICAgICAgICAgICBzcGxpdFRleHRFbGVtZW50QXRFbmQo
c3RhcnQsIGVuZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNwbGl0VGV4dEF0RW5kKHN0
YXJ0LCBlbmQpOwogICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsKICAgICAgICAgZW5k
ID0gZW5kUG9zaXRpb24oKTsKLSAgICAgICAgZW5kRHVtbXlTcGFuQW5jZXN0b3IgPSBkdW1teVNw
YW5BbmNlc3RvckZvck5vZGUoZW5kLm5vZGUoKSk7CisgICAgICAgIGVuZER1bW15U3BhbkFuY2Vz
dG9yID0gZHVtbXlTcGFuQW5jZXN0b3JGb3JOb2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICB9CiAKICAgICAvLyBSZW1vdmUgc3R5bGUgZnJvbSB0aGUgc2VsZWN0aW9uLgpAQCAtOTA5LDEw
ICs5MDksMTAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAg
ICAgICBzdHlsZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKIAogICAgICAgICAvLyBM
ZWF2ZSBhbG9uZSBhbiBhbmNlc3RvciB0aGF0IHByb3ZpZGVzIHRoZSBkZXNpcmVkIHNpbmdsZSBs
ZXZlbCBlbWJlZGRpbmcsIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgICAgSFRNTEVsZW1lbnQqIHN0
YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoc3RhcnQu
bm9kZSgpLCB0cnVlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGVuZFVu
c3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKGVuZC5ub2RlKCks
IGZhbHNlLCB0ZXh0RGlyZWN0aW9uKTsKLSAgICAgICAgcmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xv
c2luZ0Jsb2NrKHN0YXJ0Lm5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3IpOwotICAgICAgICBy
ZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSwgZW5kVW5zcGxpdEFu
Y2VzdG9yKTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIHN0YXJ0VW5zcGxpdEFuY2VzdG9yID0gc3Bs
aXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgdHJ1ZSwg
dGV4dERpcmVjdGlvbik7CisgICAgICAgIEhUTUxFbGVtZW50KiBlbmRVbnNwbGl0QW5jZXN0b3Ig
PSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZmFs
c2UsIHRleHREaXJlY3Rpb24pOworICAgICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5n
QmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRVbnNwbGl0QW5jZXN0b3IpOworICAg
ICAgICByZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soZW5kLmRlcHJlY2F0ZWROb2Rl
KCksIGVuZFVuc3BsaXRBbmNlc3Rvcik7CiAKICAgICAgICAgLy8gQXZvaWQgcmVtb3ZpbmcgdGhl
IGRpciBhdHRyaWJ1dGUgYW5kIHRoZSB1bmljb2RlLWJpZGkgYW5kIGRpcmVjdGlvbiBwcm9wZXJ0
aWVzIGZyb20gdGhlIHVuc3BsaXQgYW5jZXN0b3JzLgogICAgICAgICBQb3NpdGlvbiBlbWJlZGRp
bmdSZW1vdmVTdGFydCA9IHJlbW92ZVN0YXJ0OwpAQCAtOTU5LDggKzk1OSw4IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlVG9BcHBseSA9IHN0eWxlLT5pc0VtcHR5KCkgPyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkgOiBzdHlsZS0+c3R5bGUoKTsKICAgICBpZiAo
dW5pY29kZUJpZGkpIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNvZGUtYmlk
aSBhbmQgZGlyZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBhbHJlYWR5
IGhhdmUgdGhlbS4KLSAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVt
YmVkZGluZ0FuY2VzdG9yKHN0YXJ0Lm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQubm9kZSgp
KSk7Ci0gICAgICAgIE5vZGUqIGVtYmVkZGluZ0VuZE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5j
ZXN0b3IoZW5kLm5vZGUoKSwgZW5jbG9zaW5nQmxvY2soZW5kLm5vZGUoKSkpOworICAgICAgICBO
b2RlKiBlbWJlZGRpbmdTdGFydE5vZGUgPSBoaWdoZXN0RW1iZWRkaW5nQW5jZXN0b3Ioc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSwgZW5jbG9zaW5nQmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkp
OworICAgICAgICBOb2RlKiBlbWJlZGRpbmdFbmROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2Vz
dG9yKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmNsb3NpbmdCbG9jayhlbmQuZGVwcmVjYXRlZE5v
ZGUoKSkpOwogCiAgICAgICAgIGlmIChlbWJlZGRpbmdTdGFydE5vZGUgfHwgZW1iZWRkaW5nRW5k
Tm9kZSkgewogICAgICAgICAgICAgUG9zaXRpb24gZW1iZWRkaW5nQXBwbHlTdGFydCA9IGVtYmVk
ZGluZ1N0YXJ0Tm9kZSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoZW1iZWRkaW5nU3RhcnRO
b2RlKSA6IHN0YXJ0OwpAQCAtOTg3LDIyICs5ODcsMjIgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFu
ZEFwcGx5SW5saW5lU3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgTm9kZSogc3Rh
cnROb2RlID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCk7CiAKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSBjYXJldE1heE9mZnNldChzdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSkpIHsKICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CiAgICAgICAgIGlmICghc3RhcnROb2RlIHx8IGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKTsKLSAgICBpZiAo
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoZW5kLm5vZGUo
KSkpCi0gICAgICAgIHBhc3RFbmROb2RlID0gZW5kLm5vZGUoKS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgIE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
aWYgKGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOwogCiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hv
dWxkIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24gb24gYSBSYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBi
cgogICAgIC8vIGlmIHRoZXkgd2FudCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBlbXB0eSBsaW5lLgot
ICAgIGlmIChzdGFydCA9PSBlbmQgJiYgc3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkK
LSAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5ub2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsK
KyAgICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpKQorICAgICAgICBwYXN0RW5kTm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKIAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgZnVs
bHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxseSBzZWxl
Y3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxhcmdlIG9u
IDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUg
Zm9udCBlbGVtZW50IGluIG91ciBydW4KQEAgLTE0NzgsOCArMTQ3OCw4IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3RO
dWxsKCkpOwogICAgIEFTU0VSVChlbmQuaXNOb3ROdWxsKCkpOwotICAgIEFTU0VSVChzdGFydC5u
b2RlKCktPmluRG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKGVuZC5ub2RlKCktPmluRG9jdW1lbnQo
KSk7CisgICAgQVNTRVJUKHN0YXJ0LmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKKyAgICBB
U1NFUlQoZW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKICAgICBBU1NFUlQoY29tcGFy
ZVBvc2l0aW9ucyhzdGFydCwgZW5kKSA8PSAwKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4
dERlY29yYXRpb25TcGVjaWFsUHJvcGVydHkgPSBzdHlsZSA/IHN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpIDogMDsKQEAg
LTE0OTcsMTggKzE0OTcsMTggQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5l
U3R5bAogICAgICAgICAmJiBwdXNoRG93blN0YXJ0LmNvbXB1dGVPZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA9PSBwdXNoRG93blN0YXJ0Q29udGFpbmVyLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkKICAg
ICAgICAgcHVzaERvd25TdGFydCA9IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHB1c2hE
b3duU3RhcnQpOwogICAgIFBvc2l0aW9uIHB1c2hEb3duRW5kID0gZW5kLnVwc3RyZWFtKCk7Ci0g
ICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hEb3duU3Rh
cnQubm9kZSgpKTsKLSAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQo
KSwgcHVzaERvd25FbmQubm9kZSgpKTsKKyAgICBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9k
ZShzdHlsZS5nZXQoKSwgcHVzaERvd25TdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBwdXNo
RG93bklubGluZVN0eWxlQXJvdW5kTm9kZShzdHlsZS5nZXQoKSwgcHVzaERvd25FbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CiAKICAgICAvLyBUaGUgcyBhbmQgZSB2YXJpYWJsZXMgc3RvcmUgdGhlIHBv
c2l0aW9ucyB1c2VkIHRvIHNldCB0aGUgZW5kaW5nIHNlbGVjdGlvbiBhZnRlciBzdHlsZSByZW1v
dmFsCiAgICAgLy8gdGFrZXMgcGxhY2UuIFRoaXMgd2lsbCBoZWxwIGNhbGxlcnMgdG8gcmVjb2du
aXplIHdoZW4gZWl0aGVyIHRoZSBzdGFydCBub2RlIG9yIHRoZSBlbmQgbm9kZQogICAgIC8vIGFy
ZSByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0aGUgd29yayBvZiB0aGlzIGZ1bmN0
aW9uLgotICAgIC8vIElmIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIGhhcyBwcnVuZWQg
c3RhcnQubm9kZSgpIG9yIGVuZC5ub2RlKCksCisgICAgLy8gSWYgcHVzaERvd25JbmxpbmVTdHls
ZUFyb3VuZE5vZGUgaGFzIHBydW5lZCBzdGFydC5kZXByZWNhdGVkTm9kZSgpIG9yIGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLAogICAgIC8vIHVzZSBwdXNoRG93blN0YXJ0IG9yIHB1c2hEb3duRW5kIGlu
c3RlYWQsIHdoaWNoIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlIHdvbid0IHBydW5lLgog
ICAgIFBvc2l0aW9uIHMgPSBzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpID8gcHVz
aERvd25TdGFydCA6IHN0YXJ0OwogICAgIFBvc2l0aW9uIGUgPSBlbmQuaXNOdWxsKCkgfHwgZW5k
LmlzT3JwaGFuKCkgPyBwdXNoRG93bkVuZCA6IGVuZDsKIAotICAgIE5vZGUqIG5vZGUgPSBzdGFy
dC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAg
d2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZUZ1
bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpIHsKQEAgLTE1MjQsMTMgKzE1MjQsMTMgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bAogCiAgICAgICAgICAgICBy
ZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLmdldCgpLCBlbGVtLmdldCgpLCBSZW1v
dmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIGlmICghZWxl
bS0+aW5Eb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHMubm9kZSgpID09IGVsZW0p
IHsKKyAgICAgICAgICAgICAgICBpZiAocy5kZXByZWNhdGVkTm9kZSgpID09IGVsZW0pIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gU2luY2UgZWxlbSBtdXN0IGhhdmUgYmVlbiBmdWxseSBzZWxl
Y3RlZCwgYW5kIGl0IGlzIGF0IHRoZSBzdGFydAogICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgcyBvZmZzZXQgdG8g
MC4KICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHMuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9u
OjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIHx8IHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPD0g
MCk7CiAgICAgICAgICAgICAgICAgICAgIHMgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bmV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlLm5v
ZGUoKSA9PSBlbGVtKSB7CisgICAgICAgICAgICAgICAgaWYgKGUuZGVwcmVjYXRlZE5vZGUoKSA9
PSBlbGVtKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBoYXZlIGJl
ZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBpcyBhdCB0aGUgZW5kCiAgICAgICAgICAgICAgICAg
ICAgIC8vIG9mIHRoZSBzZWxlY3Rpb24sIGl0IGlzIGNsZWFyIHdlIGNhbiBzZXQgdGhlIG5ldyBl
IG9mZnNldCB0bwogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWF4IHJhbmdlIG9mZnNldCBv
ZiBwcmV2LgpAQCAtMTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bAogICAgICAgICAgICAgICAgICAgICBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihjaGlsZE5vZGUuZ2V0KCksIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSkKKyAgICAgICAg
aWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CiAgICAgfQpAQCAtMTU4Myw5ICsxNTgzLDkgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydAogICAgIGVsc2UKICAgICAgICAg
bmV3RW5kID0gZW5kOwogCi0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihzdGFy
dC5ub2RlKCkpOworICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSk7Ci0gICAgdXBkYXRlU3RhcnRFbmQoZmlyc3RQb3NpdGlvbkluTm9kZShz
dGFydC5ub2RlKCkpLCBuZXdFbmQpOworICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25J
bk5vZGUoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSksIG5ld0VuZCk7CiB9CiAKIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCkKQEAgLTE1OTMsNyArMTU5Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnNwbGl0VGV4dEF0RW5kKGMKICAgICBBU1NFUlQoZW5kLmFuY2hvclR5cGUoKSA9PSBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRl
U3RhcnQgPSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKTsK
LSAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQubm9kZSgpKTsKKyAgICBU
ZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogCiAg
ICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsKQEAgLTE2MTIsOSAr
MTYxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnQKICAgICBl
bHNlCiAgICAgICAgIG5ld0VuZCA9IGVuZDsKIAotICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oc3RhcnQubm9kZSgpKTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5n
RWxlbWVudCh0ZXh0LCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICB1cGRh
dGVTdGFydEVuZChQb3NpdGlvbihzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQubm9k
ZSgpLT5ub2RlSW5kZXgoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5l
d0VuZCk7CisgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+cGFyZW50Tm9kZSgpLCBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5ub2RlSW5kZXgoKSwgUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciksIG5ld0VuZCk7CiB9CiAKIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCkBAIC0xNjIyLDcgKzE2MjIsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgQVNTRVJUKGVuZC5hbmNob3JUeXBl
KCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAKICAgICBib29sIHNo
b3VsZFVwZGF0ZVN0YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWlu
ZXJOb2RlKCk7Ci0gICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQubm9kZSgp
KTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodGV4dCwgZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wYXJl
bnROb2RlKCktPnByZXZpb3VzU2libGluZygpLT5sYXN0Q2hpbGQoKTsKQEAgLTE3MTMsOSArMTcx
Myw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHIKICAgICAgICAg
bWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0VsZW1lbnQsIGVsZW1lbnQpOwogCiAgICAg
ICAgIGludCBzdGFydE9mZnNldEFkanVzdG1lbnQgPSBzdGFydENoaWxkLT5ub2RlSW5kZXgoKTsK
LSAgICAgICAgaW50IGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydE5vZGUgPT0gZW5kLm5vZGUo
KSA/IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA6IDA7CisgICAgICAgIGludCBlbmRPZmZzZXRBZGp1
c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnRPZmZzZXRB
ZGp1c3RtZW50IDogMDsKICAgICAgICAgdXBkYXRlU3RhcnRFbmQoUG9zaXRpb24oc3RhcnROb2Rl
LCBzdGFydE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNo
b3IpLAotICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpKTsgCisgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0
aW9uKGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAr
IGVuZE9mZnNldEFkanVzdG1lbnQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
KTsgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTczMSwxMSArMTczMSwxMSBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAgICAgICAgIGlmIChl
bmRPZmZzZXQgPCBsYXN0T2Zmc2V0SW5Ob2RlKGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHVuc2lnbmVkIHBhcmVudExhc3RPZmZzZXQgPSBlbmQubm9kZSgp
LT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZXMoKS0+bGVuZ3RoKCkgLSAxOwotICAgICAgICBpZiAo
ZW5kLm5vZGUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdW5zaWduZWQgcGFyZW50TGFzdE9m
ZnNldCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCktPmNoaWxkTm9kZXMoKS0+
bGVuZ3RoKCkgLSAxOworICAgICAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCktPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgZW5kTm9kZSA9IGVu
ZC5ub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICAgICAgZW5kTm9kZSA9IGVuZC5kZXByZWNhdGVk
Tm9kZSgpLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGVuZE9mZnNldCA9IHBhcmVudExhc3RPZmZz
ZXQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtC
bG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIAog
ICAgIC8vIEZpbmQgdGhlIHRvcC1tb3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQuCiAgICAg
RWxlbWVudCogdG9wQmxvY2txdW90ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2RlKiBub2Rl
ID0gcG9zLm5vZGUoKS0+cGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2Rl
KCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAg
ICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKICAgICAgICAgICAgIHRvcEJsb2NrcXVv
dGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgfQpAQCAtMTAzLDExICsxMDMs
MTEgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9z
ID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3
ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKLSAgICB3aGlsZSAo
aXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVz
dE1haWxCbG9ja3F1b3RlKHBvcy5ub2RlKCkpKSkKKyAgICB3aGlsZSAoaXNGaXJzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KHBvcy5kZXByZWNhdGVkTm9kZSgpKSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwog
ICAgIAogICAgIC8vIHN0YXJ0Tm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5lZWQgdG8g
bW92ZSB0byB0aGUgbmV3IGJsb2NrcXVvdGUuCi0gICAgTm9kZSogc3RhcnROb2RlID0gcG9zLm5v
ZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAg
ICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUu
CiAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydE5vZGVBdCgKICAgICAvLyBGb3IgZWRpdGluZyBwb3NpdGlvbnMgbGlrZSBbdGFibGUs
IDBdLCBpbnNlcnQgYmVmb3JlIHRoZSB0YWJsZSwKICAgICAvLyBsaWtld2lzZSBmb3IgcmVwbGFj
ZWQgZWxlbWVudHMsIGJycywgZXRjLgogICAgIFBvc2l0aW9uIHAgPSBlZGl0aW5nUG9zaXRpb24u
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSogcmVmQ2hpbGQgPSBwLm5vZGUo
KTsKKyAgICBOb2RlKiByZWZDaGlsZCA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpbnQgb2Zm
c2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIAogICAgIGlmIChjYW5IYXZl
Q2hpbGRyZW5Gb3JFZGl0aW5nKHJlZkNoaWxkKSkgewpAQCAtMzQyLDE4ICszNDIsMTggQEAgdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbgogCiBQb3NpdGlvbiBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9z
KQogewotICAgIGlmICghaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpCisgICAgaWYgKCFp
c1RhYlNwYW5UZXh0Tm9kZShwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBw
b3M7CiAgICAgCi0gICAgTm9kZSogdGFiU3BhbiA9IHRhYlNwYW5Ob2RlKHBvcy5ub2RlKCkpOwor
ICAgIE5vZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgCi0gICAgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0TWluT2Zm
c2V0KHBvcy5ub2RlKCkpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8
PSBjYXJldE1pbk9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBw
b3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKICAgICAgICAgCi0gICAgaWYgKHBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHBvcy5ub2RlKCkp
KQorICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNl
dChwb3MuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50
QWZ0ZXJOb2RlKHRhYlNwYW4pOwogCi0gICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
KHN0YXRpY19jYXN0PFRleHQgKj4ocG9zLm5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8
VGV4dCAqPihwb3MuZGVwcmVjYXRlZE5vZGUoKSksIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUodGFiU3Bhbik7CiB9
CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFu
Y2VXaGl0CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXNwYWNlQXRQ
b3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBOb2RlKiBub2RlID0g
cG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7ICAgIApA
QCAtNDk1LDEwICs0OTUsMTAgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdo
aXRlcwogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3ModmlzaWJsZVBvcy5w
cmV2aW91cygpKTsKICAgICBQb3NpdGlvbiBwcmV2aW91cyhwcmV2aW91c1Zpc2libGVQb3MuZGVl
cEVxdWl2YWxlbnQoKSk7CiAgICAgCi0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHBy
ZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwcmV2aW91cy5ub2RlKCktPmlz
VGV4dE5vZGUoKSAmJiAhcHJldmlvdXMubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAg
ICAgcmVwbGFjZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLm5vZGUoKSks
IHByZXZpb3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VT
dHJpbmcoKSk7Ci0gICAgaWYgKGlzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHZpc2libGVQb3MuY2hh
cmFjdGVyQWZ0ZXIoKSkgJiYgcG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvc2l0
aW9uLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
KHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5ub2RlKCkpLCBwb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgIGlmIChp
c0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIo
KSkgJiYgcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKKyAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpLCBw
cmV2aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkpOworICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9zLmNoYXJh
Y3RlckFmdGVyKCkpICYmIHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAm
JiAhcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtp
bmdTcGFjZVN0cmluZygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxh
bmNlV2hpdGVzcGFjZSgpCkBAIC02MDAsMTUgKzYwMCwxNSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5leHQ7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQubm9kZSgpOyBub2RlOyBub2RlID0gbmV4dCkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5v
ZGUgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOwotICAgICAgICAgICAgaW50IHN0YXJ0T2Zm
c2V0ID0gbm9kZSA9PSBzdGFydC5ub2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpIDogMDsKLSAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVuZC5ub2RlKCkg
PyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGludD4odGV4dE5v
ZGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG5vZGUgPT0gc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiAw
OworICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2Rl
KCkgPyBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IHN0YXRpY19jYXN0PGludD4odGV4
dE5vZGUtPmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHRl
eHROb2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBpZiAo
bm9kZSA9PSBlbmQubm9kZSgpKQorICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTYzOCw3ICs2MzgsNyBAQCBQ
YXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgLy8gU2hvdWxkIGFzc2VydCBpc0Jsb2NrRmxvdyB8fCBpc0lubGluZUZsb3cgd2hl
biBkZWxldGlvbiBpbXByb3Zlcy4gIFNlZSA0MjQ0OTY0LgotICAgIEFTU0VSVChwb3Mubm9kZSgp
LT5yZW5kZXJlcigpKTsKKyAgICBBU1NFUlQocG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQmxvY2tQbGFjZWhv
bGRlckVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUF0KHBsYWNlaG9sZGVyLCBw
b3MpOwpAQCAtNzE0LDI4ICs3MTQsMjYgQEAgUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFBlcmZvcm0gc29tZSBjaGVj
a3MgdG8gc2VlIGlmIHdlIG5lZWQgdG8gcGVyZm9ybSB3b3JrIGluIHRoaXMgZnVuY3Rpb24uCi0g
ICAgaWYgKGlzQmxvY2sodXBzdHJlYW1TdGFydC5ub2RlKCkpKSB7CisgICAgaWYgKGlzQmxvY2so
dXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAvLyBJZiB0aGUgYmxv
Y2sgaXMgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCwgYWx3YXlzIG1vdmUgY29udGVudCB0byBh
IG5ldyBibG9jaywKICAgICAgICAgLy8gc2luY2UgaXQgaXMgaWxsZWdhbCB0byBtb2RpZnkgYXR0
cmlidXRlcyBvbiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGZvciBlZGl0aW5nLgotICAgICAg
ICBpZiAodXBzdHJlYW1TdGFydC5ub2RlKCkgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24odXBz
dHJlYW1TdGFydCkpIHsKKyAgICAgICAgaWYgKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KSA9PSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbih1cHN0cmVhbVN0YXJ0KSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlIGJsb2NrIGlzIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgYW5kIGl0IGNv
bnRhaW5zIG5vIHZpc2libGUgY29udGVudCwgY3JlYXRlIGEgbmV3CiAgICAgICAgICAgICAvLyBi
bG9jayBidXQgZG9uJ3QgdHJ5IGFuZCBtb3ZlIGNvbnRlbnQgaW50byBpdCwgc2luY2UgdGhlcmUn
cyBub3RoaW5nIGZvciBtb3ZlUGFyYWdyYXBocyB0byBtb3ZlLgotICAgICAgICAgICAgaWYgKCFQ
b3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodXBz
dHJlYW1TdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgaWYgKCFQb3NpdGlv
bjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQodXBzdHJlYW1T
dGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRBdCh1cHN0cmVhbVN0YXJ0KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkpIHsKLSAgICAgICAg
ICAgIGlmICghdXBzdHJlYW1FbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZih1cHN0cmVhbVN0YXJ0
Lm5vZGUoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChpc0Jsb2NrKHVwc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXVwc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCktPmlzRGVzY2VuZGFudE9mKHVwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcGFyYWdyYXBoIGVuZCBpcyBhIGRlc2NlbmRhbnQg
b2YgcGFyYWdyYXBoIHN0YXJ0LCB0aGVuIHdlIG5lZWQgdG8gcnVuCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbi4gSWYgbm90LCB3ZSBjYW4gYmFpbCBoZXJlLgog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGVuY2xvc2luZ0Jsb2NrKHVwc3RyZWFtRW5kLm5vZGUoKSkgIT0gdXBzdHJl
YW1TdGFydC5ub2RlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChlbmNsb3NpbmdCbG9jayh1cHN0
cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSAhPSB1cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSB2aXNpYmxlRW5kLiAgSXQgbXVzdCBiZSBhbiBhbmNl
c3RvciBvZiB0aGUgcGFyYWdyYXBoIHN0YXJ0LgogICAgICAgICAgICAgLy8gV2UgY2FuIGJhaWwg
YXMgd2UgaGF2ZSBhIGZ1bGwgYmxvY2sgdG8gd29yayB3aXRoLgotICAgICAgICAgICAgQVNTRVJU
KHVwc3RyZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdCbG9jayh1cHN0
cmVhbUVuZC5ub2RlKCkpKSk7CisgICAgICAgICAgICBBU1NFUlQodXBzdHJlYW1TdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdCbG9jayh1cHN0cmVhbUVuZC5k
ZXByZWNhdGVkTm9kZSgpKSkpOwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoaXNFbmRPZkRvY3VtZW50KHZpc2libGVFbmQpKSB7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNFbmRPZkRvY3VtZW50KHZpc2libGVFbmQpKSB7CiAgICAgICAgICAgICAvLyBB
dCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4gV2UgY2FuIGJhaWwgaGVyZSBhcyB3ZWxsLgogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTc0Myw3ICs3NDEsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptCiAKICAgICBSZWZQdHI8Tm9kZT4gbmV3
QmxvY2sgPSBpbnNlcnROZXdEZWZhdWx0UGFyYWdyYXBoRWxlbWVudEF0KHVwc3RyZWFtU3RhcnQp
OwogCi0gICAgYm9vbCBlbmRXYXNCciA9IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOworICAgIGJvb2wgZW5kV2FzQnIgPSB2aXNp
YmxlUGFyYWdyYXBoRW5kLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFn
TmFtZShiclRhZyk7CiAKICAgICBtb3ZlUGFyYWdyYXBocyh2aXNpYmxlUGFyYWdyYXBoU3RhcnQs
IHZpc2libGVQYXJhZ3JhcGhFbmQsIFZpc2libGVQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5Ob2Rl
KG5ld0Jsb2NrLmdldCgpKSkpOwogCkBAIC03NzgsMTQgKzc3NiwxNCBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwCiAgICAgYXBwZW5kTm9kZSh0b3BOb2RlLCBibG9j
a0VsZW1lbnQpOwogICAgIFJlZlB0cjxOb2RlPiBsYXN0Tm9kZSA9IHRvcE5vZGU7CiAKLSAgICBp
ZiAoc3RhcnQubm9kZSgpICE9IG91dGVyTm9kZSkgeworICAgIGlmIChzdGFydC5kZXByZWNhdGVk
Tm9kZSgpICE9IG91dGVyTm9kZSkgewogICAgICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gYW5j
ZXN0b3JzOwogICAgICAgICAKICAgICAgICAgLy8gSW5zZXJ0IGVhY2ggbm9kZSBmcm9tIGlubmVy
Tm9kZSB0byBvdXRlck5vZGUgKGV4Y2x1ZGVkKSBpbiBhIGxpc3QuCi0gICAgICAgIGZvciAoTm9k
ZSogbiA9IHN0YXJ0Lm5vZGUoKTsgbiAmJiBuICE9IG91dGVyTm9kZTsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbiAm
JiBuICE9IG91dGVyTm9kZTsgbiA9IG4tPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgIGFuY2Vz
dG9ycy5hcHBlbmQobik7CiAKLSAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBiZXR3ZWVuIHN0
YXJ0Lm5vZGUoKSBhbmQgb3V0ZXJCbG9jay4KKyAgICAgICAgLy8gQ2xvbmUgZXZlcnkgbm9kZSBi
ZXR3ZWVuIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgYW5kIG91dGVyQmxvY2suCiAKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGFuY2VzdG9ycy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7CiAgICAgICAg
ICAgICBOb2RlKiBpdGVtID0gYW5jZXN0b3JzW2kgLSAxXS5nZXQoKTsKQEAgLTc5NiwyNSArNzk0
LDI1IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXAKICAgICB9CiAK
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugb2YgcGFyYWdyYXBocyB3aXRoIG1vcmUgdGhhbiBvbmUg
bm9kZSwKLSAgICAvLyBjbG9uaW5nIGFsbCB0aGUgc2libGluZ3MgdW50aWwgZW5kLm5vZGUoKSBp
cyByZWFjaGVkLgorICAgIC8vIGNsb25pbmcgYWxsIHRoZSBzaWJsaW5ncyB1bnRpbCBlbmQuZGVw
cmVjYXRlZE5vZGUoKSBpcyByZWFjaGVkLgogICAgIAotICAgIGlmIChzdGFydC5ub2RlKCkgIT0g
ZW5kLm5vZGUoKSAmJiAhc3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQubm9kZSgpKSkg
eworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICE9IGVuZC5kZXByZWNhdGVkTm9kZSgp
ICYmICFzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQuZGVwcmVjYXRl
ZE5vZGUoKSkpIHsKICAgICAgICAgLy8gSWYgZW5kIGlzIG5vdCBhIGRlc2NlbmRhbnQgb2Ygb3V0
ZXJOb2RlIHdlIG5lZWQgdG8KICAgICAgICAgLy8gZmluZCB0aGUgZmlyc3QgY29tbW9uIGFuY2Vz
dG9yIGFuZCBhZGp1c3QgdGhlIGluc2VydGlvbgogICAgICAgICAvLyBwb2ludCBhY2NvcmRpbmds
eS4KLSAgICAgICAgd2hpbGUgKCFlbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihvdXRlck5vZGUp
KSB7CisgICAgICAgIHdoaWxlICghZW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KG91dGVyTm9kZSkpIHsKICAgICAgICAgICAgIG91dGVyTm9kZSA9IG91dGVyTm9kZS0+cGFyZW50
Tm9kZSgpOwogICAgICAgICAgICAgdG9wTm9kZSA9IHRvcE5vZGUtPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0Lm5vZGUoKS0+dHJhdmVyc2VO
ZXh0U2libGluZyhvdXRlck5vZGUpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRl
ck5vZGUpKSB7Ci0gICAgICAgICAgICBpZiAobi0+cGFyZW50Tm9kZSgpICE9IHN0YXJ0Lm5vZGUo
KS0+cGFyZW50Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9kZSk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKG91dGVyTm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChuLT5wYXJlbnROb2Rl
KCkgIT0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKQogICAgICAgICAgICAg
ICAgIGxhc3ROb2RlID0gdG9wTm9kZS0+bGFzdENoaWxkKCk7CiAKICAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBjbG9uZWROb2RlID0gbi0+Y2xvbmVOb2RlKHRydWUpOwogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKGNsb25lZE5vZGUsIGxhc3ROb2RlKTsKICAgICAgICAgICAgIGxhc3ROb2Rl
ID0gY2xvbmVkTm9kZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAobiA9PSBlbmQubm9kZSgp
IHx8IGVuZC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG4pKQorICAgICAgICAgICAgaWYgKG4gPT0g
ZW5kLmRlcHJlY2F0ZWROb2RlKCkgfHwgZW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKG4pKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtODMz
LDcgKzgzMSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckQKICAg
ICBpZiAoaXNTdGFydE9mUGFyYWdyYXBoKGNhcmV0QWZ0ZXJEZWxldGUpICYmIGlzRW5kT2ZQYXJh
Z3JhcGgoY2FyZXRBZnRlckRlbGV0ZSkpIHsKICAgICAgICAgLy8gTm90ZTogV2Ugd2FudCB0aGUg
cmlnaHRtb3N0IGNhbmRpZGF0ZS4KICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBjYXJldEFm
dGVyRGVsZXRlLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpOwotICAgICAgICBOb2RlKiBu
b2RlID0gcG9zaXRpb24ubm9kZSgpOworICAgICAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKTsKICAgICAgICAgLy8gTm9ybWFsbHkgZGVsZXRpb24gd2lsbCBsZWF2ZSBh
IGJyIGFzIGEgcGxhY2Vob2xkZXIuCiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJyVGFn
KSkKICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKQEAgLTg5
NSw3ICs4OTMsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAg
ICAgYmVmb3JlUGFyYWdyYXBoID0gVmlzaWJsZVBvc2l0aW9uKGJlZm9yZVBhcmFncmFwaC5kZWVw
RXF1aXZhbGVudCgpKTsKICAgICBhZnRlclBhcmFncmFwaCA9IFZpc2libGVQb3NpdGlvbihhZnRl
clBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIGlmIChiZWZvcmVQYXJhZ3JhcGgu
aXNOb3ROdWxsKCkgJiYgIWlzVGFibGVFbGVtZW50KGJlZm9yZVBhcmFncmFwaC5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKSkKKyAgICBpZiAoYmVmb3JlUGFyYWdyYXBoLmlzTm90TnVsbCgpICYmICFp
c1RhYmxlRWxlbWVudChiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpKQogICAgICAgICAmJiAoKCFpc0VuZE9mUGFyYWdyYXBoKGJlZm9yZVBhcmFncmFwaCkg
JiYgIWlzU3RhcnRPZlBhcmFncmFwaChiZWZvcmVQYXJhZ3JhcGgpKSB8fCBiZWZvcmVQYXJhZ3Jh
cGggPT0gYWZ0ZXJQYXJhZ3JhcGgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUcmltIHRleHQgYmV0
d2VlbiBiZWZvcmVQYXJhZ3JhcGggYW5kIGFmdGVyUGFyYWdyYXBoIGlmIHRoZXkgYXJlbid0IGVx
dWFsLgogICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkp
LCBiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CkBAIC05NTUsNyArOTUzLDcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8vIHN0YXJ0IGFu
ZCBlbmQgY2FuJ3QgYmUgdXNlZCBkaXJlY3RseSB0byBjcmVhdGUgYSBSYW5nZTsgdGhleSBhcmUg
ImVkaXRpbmcgcG9zaXRpb25zIgogICAgIFBvc2l0aW9uIHN0YXJ0UmFuZ2VDb21wbGlhbnQgPSBz
dGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmRSYW5nZUNv
bXBsaWFudCA9IGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydFJhbmdlQ29tcGxpYW50
Lm5vZGUoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
bmRSYW5nZUNvbXBsaWFudC5ub2RlKCksIGVuZFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRSYW5n
ZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlbmRSYW5nZUNvbXBsaWFudC5k
ZXByZWNhdGVkTm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGluZWZmaWNpZW50IHdheSB0byBwcmVz
ZXJ2ZSBzdHlsZSBvbiBub2RlcyBpbiB0aGUgcGFyYWdyYXBoIHRvIG1vdmUuIEl0CiAgICAgLy8g
c2hvdWxkbid0IG1hdHRlciB0aG91Z2gsIHNpbmNlIG1vdmVkIHBhcmFncmFwaHMgd2lsbCB1c3Vh
bGx5IGJlIHF1aXRlIHNtYWxsLgpAQCAtOTgwLDEwICs5NzgsMTAgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRv
cigpLT5jbGVhck1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoZW5kaW5nU2VsZWN0aW9uKCkpOwog
ICAgIGRlbGV0ZVNlbGVjdGlvbihmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICBB
U1NFUlQoZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSk7
CisgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5p
bkRvY3VtZW50KCkpOwogCiAgICAgY2xlYW51cEFmdGVyRGVsZXRpb24oKTsKLSAgICBBU1NFUlQo
ZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSk7CisgICAg
QVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkpOwogCiAgICAgLy8gQWRkIGEgYnIgaWYgcHJ1bmluZyBhbiBlbXB0eSBibG9jayBsZXZl
bCBlbGVtZW50IGNhdXNlZCBhIGNvbGxhcHNlLiBGb3IgZXhhbXBsZToKICAgICAvLyBmb29eCkBA
IC0xMTMxLDE1ICsxMTI5LDE1IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0
T2ZFbXAKICAgICAKICAgICBQb3NpdGlvbiBjYXJldFBvcyhjYXJldC5kZWVwRXF1aXZhbGVudCgp
KTsKICAgICAvLyBBIGxpbmUgYnJlYWsgaXMgZWl0aGVyIGEgYnIgb3IgYSBwcmVzZXJ2ZWQgbmV3
bGluZS4KLSAgICBBU1NFUlQoY2FyZXRQb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAo
Y2FyZXRQb3Mubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgY2FyZXRQb3Mubm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkpOworICAgIEFTU0VSVChjYXJldFBvcy5k
ZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSB8fCAoY2FyZXRQb3MuZGVwcmVjYXRl
ZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSk7CiAgICAgCi0gICAgaWYgKGNhcmV0
UG9zLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAgICAgUG9zaXRpb24gYmVmb3Jl
QlIocG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoY2FyZXRQb3Mubm9kZSgpKSk7Ci0gICAgICAg
IHJlbW92ZU5vZGUoY2FyZXRQb3Mubm9kZSgpKTsKLSAgICAgICAgcHJ1bmUoYmVmb3JlQlIubm9k
ZSgpKTsKKyAgICBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykpIHsKKyAgICAgICAgUG9zaXRpb24gYmVmb3JlQlIocG9zaXRpb25JblBhcmVudEJlZm9yZU5v
ZGUoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSkpOworICAgICAgICByZW1vdmVOb2RlKGNhcmV0
UG9zLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBwcnVuZShiZWZvcmVCUi5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA9PSAwKTsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4oY2FyZXRQb3Mubm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxUZXh0Kj4oY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhl
IG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gcGFyYWdyYXBo
IHdvdWxkIGJlIHF1b3RlZCwgYW5kIHdlIHZlcmlmaWVkIHRoYXQgaXQgd2Fzbid0IGFib3ZlLgpA
QCAtMTE3NSw3ICsxMTczLDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0
aW9uQQogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBsYXN0SW5BbmNob3IpIHsKICAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSBhbmNob3JzIGFyZSBwdXNoZWQgZG93biBiZWZvcmUgYXZvaWRpbmcg
dGhlbSBzbyB0aGF0IHdlIGRvbid0CiAgICAgICAgICAgICAvLyBhbHNvIGF2b2lkIHN0cnVjdHVy
YWwgZWxlbWVudHMgbGlrZSBsaXN0cyBhbmQgYmxvY2tzICg1MTQyMDEyKS4KLSAgICAgICAgICAg
IGlmIChvcmlnaW5hbC5ub2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yICYmIG9yaWdpbmFsLm5vZGUo
KS0+cGFyZW50Tm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvcikgeworICAgICAgICAgICAgaWYgKG9y
aWdpbmFsLmRlcHJlY2F0ZWROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yICYmIG9yaWdpbmFsLmRl
cHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IpIHsKICAgICAg
ICAgICAgICAgICBwdXNoQW5jaG9yRWxlbWVudERvd24oZW5jbG9zaW5nQW5jaG9yKTsKICAgICAg
ICAgICAgICAgICBlbmNsb3NpbmdBbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG9yaWdp
bmFsKTsKICAgICAgICAgICAgICAgICBpZiAoIWVuY2xvc2luZ0FuY2hvcikKQEAgLTExODQsNyAr
MTE4Miw3IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbkEKICAgICAg
ICAgICAgIC8vIERvbid0IGluc2VydCBvdXRzaWRlIGFuIGFuY2hvciBpZiBkb2luZyBzbyB3b3Vs
ZCBza2lwIG92ZXIgYSBsaW5lIGJyZWFrLiAgSXQgd291bGQKICAgICAgICAgICAgIC8vIHByb2Jh
Ymx5IGJlIHNhZmUgdG8gbW92ZSB0aGUgbGluZSBicmVhayBzbyB0aGF0IHdlIGNvdWxkIHN0aWxs
IGF2b2lkIHRoZSBhbmNob3IgaGVyZS4KICAgICAgICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW0o
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKSk7Ci0gICAgICAgICAgICBp
ZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93bnN0
cmVhbS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKGVuY2xvc2luZ0FuY2hvcikpCisgICAgICAgICAg
ICBpZiAobGluZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZVBvcykgJiYgZG93
bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdBbmNob3Ip
KQogICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbDsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgcmVzdWx0ID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShlbmNsb3NpbmdBbmNob3Ip
OwpAQCAtMTE5NCw3ICsxMTkyLDcgQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBv
c2l0aW9uQQogICAgICAgICBpZiAodmlzaWJsZVBvcyA9PSBmaXJzdEluQW5jaG9yKSB7CiAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgYW5jaG9ycyBhcmUgcHVzaGVkIGRvd24gYmVmb3JlIGF2b2lk
aW5nIHRoZW0gc28gdGhhdCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gYWxzbyBhdm9pZCBzdHJ1
Y3R1cmFsIGVsZW1lbnRzIGxpa2UgbGlzdHMgYW5kIGJsb2NrcyAoNTE0MjAxMikuCi0gICAgICAg
ICAgICBpZiAob3JpZ2luYWwubm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5hbC5u
b2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IpIHsKKyAgICAgICAgICAgIGlm
IChvcmlnaW5hbC5kZXByZWNhdGVkTm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5h
bC5kZXByZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yKSB7CiAg
ICAgICAgICAgICAgICAgcHVzaEFuY2hvckVsZW1lbnREb3duKGVuY2xvc2luZ0FuY2hvcik7CiAg
ICAgICAgICAgICAgICAgZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChv
cmlnaW5hbCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxl
Y3Rpb25DCiB9CiAKIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIHNtYXJ0RGVsZXRlLCBi
b29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFjZSwgYm9vbCBleHBhbmRGb3JT
cGVjaWFsRWxlbWVudHMpCi0gICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChzZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCktPmRvY3VtZW50KCkpLCAKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHNl
bGVjdGlvbi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSksIAogICAgICAgbV9oYXNT
ZWxlY3Rpb25Ub0RlbGV0ZSh0cnVlKSwgCiAgICAgICBtX3NtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRl
KSwgCiAgICAgICBtX21lcmdlQmxvY2tzQWZ0ZXJEZWxldGUobWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSksCkBAIC0xMTAsMTAgKzExMCwxMCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Omlu
aXRpYWxpemVTCiAgCiAgICAgLy8gRm9yIEhScywgd2UnbGwgZ2V0IGEgcG9zaXRpb24gYXQgKEhS
LDEpIHdoZW4gaGl0dGluZyBkZWxldGUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91
cyBsaW5lLCBvciAoSFIsMCkgd2hlbiBmb3J3YXJkIGRlbGV0aW5nLAogICAgIC8vIGJ1dCBpbiB0
aGVzZSBjYXNlcywgd2Ugd2FudCB0byBkZWxldGUgaXQsIHNvIG1hbnVhbGx5IGV4cGFuZCB0aGUg
c2VsZWN0aW9uCi0gICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpCi0gICAg
ICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Lm5vZGUoKSk7Ci0gICAgZWxzZSBp
ZiAoZW5kLm5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpCi0gICAgICAgIGVuZCA9IHBvc2l0aW9u
QWZ0ZXJOb2RlKGVuZC5ub2RlKCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5o
YXNUYWdOYW1lKGhyVGFnKSkKKyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgZWxzZSBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoaHJUYWcpKQorICAgICAgICBlbmQgPSBwb3NpdGlvbkFmdGVyTm9kZShlbmQu
ZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSB1c2Vk
IHNvIHRoYXQgbW92ZVBhcmFncmFwaHMgY2FuIGF2b2lkIHRoZSBidWdzIGluIHNwZWNpYWwgZWxl
bWVudCBleHBhbnNpb24uCiAgICAgaWYgKCFtX2V4cGFuZEZvclNwZWNpYWxFbGVtZW50cykKQEAg
LTI3NSw3ICsyNzUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdT
CiAgICAgLy8gdHlwaW5nIHN0eWxlIGF0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uLCBub3Ig
aXMgdGhlcmUgYSByZWFzb24gdG8gCiAgICAgLy8gY29tcHV0ZSB0aGUgc3R5bGUgYXQgdGhlIHN0
YXJ0IG9mIHRoZSBzZWxlY3Rpb24gYWZ0ZXIgZGVsZXRpb24gKHNlZSB0aGUgCiAgICAgLy8gZWFy
bHkgcmV0dXJuIGluIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpLgotICAgIGlmICht
X3Vwc3RyZWFtU3RhcnQubm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgJiYgbV91cHN0
cmVhbVN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBt
X3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGaWd1cmUgb3V0IHRoZSB0eXBpbmcgc3R5bGUgaW4gZWZmZWN0IGJl
Zm9yZSB0aGUgZGVsZXRlIGlzIGRvbmUuCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwogCiAgICAgLy8gSWYgd2UncmUgZGVsZXRpbmcg
aW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkgaW5zdGVhZCBv
ZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0ZVR5cGluZ1N0
eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJsb2NrcXVvdGUK
LSAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KS5ub2RlKCkpKQorICAgIGlmIChuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9zZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBtX2RlbGV0ZUludG9CbG9j
a3F1b3RlU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRlLmVu
ZCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9IDA7
CkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVU
eXBpbmdTCiBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNpYWxDYXNlQlJE
ZWxldGUoKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjaWFsLWNhc2Ugd2hlcmUgdGhlIHNlbGVj
dGlvbiBjb250YWlucyBvbmx5IGEgQlIgb24gYSBsaW5lIGJ5IGl0c2VsZiBhZnRlciBhbm90aGVy
IEJSLgotICAgIGJvb2wgdXBzdHJlYW1TdGFydElzQlIgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKTsKLSAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rv
d25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpOwotICAgIGJvb2wgaXNCUk9u
TGluZUJ5SXRzZWxmID0gdXBzdHJlYW1TdGFydElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAm
JiBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkgPT0gbV91cHN0cmVhbUVuZC5ub2RlKCk7CisgICAg
Ym9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rv
d25zdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKTsKKyAgICBi
b29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1T
dGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBtX3Vwc3Ry
ZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGlzQlJPbkxpbmVCeUl0c2VsZikgewot
ICAgICAgICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSk7CisgICAgICAgIHJl
bW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtNDE2LDcgKzQxNiw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6ZGVsZXRlVGV4dEYKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlR2VuZXJhbERlbGV0ZSgpCiB7CiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV91cHN0cmVhbVN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gbV91
cHN0cmVhbVN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAKICAgICAvLyBOZXZlciByZW1vdmUgdGhlIHN0YXJ0
IGJsb2NrIHVubGVzcyBpdCdzIGEgdGFibGUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJ3QgbWVyZ2Ug
Y29udGVudCBpbi4KICAgICBpZiAoc3RhcnROb2RlID09IG1fc3RhcnRCbG9jayAmJiBzdGFydE9m
ZnNldCA9PSAwICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoc3RhcnROb2RlKSAmJiAhc3Rh
cnROb2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgewpAQCAtNDM5LDcgKzQzOSw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQu
bm9kZSgpKSB7CisgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSkgewogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkgLSBzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUt
PmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQg
bmVlZHMgdG8gYmUgdHJpbW1lZApAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIHJlbW92ZU5vZGUoc3RhcnROb2Rl
KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGJvb2wgc3RhcnROb2RlV2FzRGVzY2VuZGFu
dE9mRW5kTm9kZSA9IG1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpOworICAgICAgICBib29sIHN0YXJ0Tm9kZVdhc0Rlc2NlbmRhbnRP
ZkVuZE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAvLyBUaGUgc2Vs
ZWN0aW9uIHRvIGRlbGV0ZSBzcGFucyBtb3JlIHRoYW4gb25lIG5vZGUuCiAgICAgICAgIFJlZlB0
cjxOb2RlPiBub2RlKHN0YXJ0Tm9kZSk7CiAgICAgICAgIApAQCAtNDY5LDIxICs0NjksMjEgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5jaGlsZE5vZGUoc3RhcnRP
ZmZzZXQpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBt
X3Vwc3RyZWFtRW5kLm5vZGUoKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3Vwc3RyZWFtRW5kLm5vZGUo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgVGV4
dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fdXBzdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9kZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZWxl
Y3RlZAotICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IG1fZG93bnN0cmVhbUVuZC5ub2Rl
KCkpIHsKKyAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBtX2Rvd25zdHJlYW1FbmQpID49IDAp
IHsKICAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZU5leHRTaWJsaW5nIGp1c3QgYmxldyBwYXN0
IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2Rl
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2Rv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkp
IHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCByZW1vdmVkIGEg
bm9kZSBmcm9tIHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9uIHNvIHRoZQog
ICAgICAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm5vZGVJbmRleCgpIDwgKHVuc2lnbmVkKW1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9kb3duc3RyZWFtRW5k
Lm1vdmVUb09mZnNldChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAt
IDEpOwpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlR2VuZXIKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5sYXN0RGVzY2Vu
ZGFudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubm9kZSgpID09IG4g
JiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhP
ZmZzZXQobikpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCkgPT0gbiAmJiBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+PSBjYXJldE1heE9mZnNldChuKSkgewogICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2Rl
KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAg
ICAgICB9IGVsc2UKQEAgLTUwMCwzMyArNTAwLDMzIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3Ry
ZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSAm
JiBtX2Rvd25zdHJlYW1FbmQubm9kZSgpLT5pbkRvY3VtZW50KCkgJiYgbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQobV9kb3duc3RyZWFt
RW5kLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuYXRMYXN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG1fZG93
bnN0cmVhbUVuZC5ub2RlKCkpKSB7CisgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSAhPSBzdGFydE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgJiYg
bV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWluT2Zmc2V0KG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVh
bUVuZC5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZv
ckVkaXRpbmcobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIGlzIGZ1bGx5IHNlbGVjdGVkLCBub3QganVzdCBpdHMg
Y29udGVudHMuICBEZWxldGUgaXQuCi0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25z
dHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5ub2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMg
dG8gYmUgdHJpbW1lZAotICAgICAgICAgICAgICAgICAgICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nh
c3Q8VGV4dCAqPihtX2Rvd25zdHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
VGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBSZW1v
dmUgY2hpbGRyZW4gb2YgbV9kb3duc3RyZWFtRW5kLm5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91
cHN0cmVhbVN0YXJ0LgotICAgICAgICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hp
bGRyZW4gaWYgbV91cHN0cmVhbVN0YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLm5vZGUo
KQorICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiBvZiBtX2Rvd25zdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSB0aGF0IGNvbWUgYWZ0ZXIgbV91cHN0cmVhbVN0YXJ0LgorICAgICAg
ICAgICAgICAgIC8vIERvbid0IHRyeSB0byByZW1vdmUgY2hpbGRyZW4gaWYgbV91cHN0cmVhbVN0
YXJ0IHdhcyBpbnNpZGUgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkKICAgICAgICAg
ICAgICAgICAvLyBhbmQgbV91cHN0cmVhbVN0YXJ0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUg
ZG9jdW1lbnQsIGJlY2F1c2UgdGhlbiB3ZSBkb24ndCAKICAgICAgICAgICAgICAgICAvLyBrbm93
IGhvdyBtYW55IGNoaWxkcmVuIHRvIHJlbW92ZS4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
TWFrZSBtX3Vwc3RyZWFtU3RhcnQgYSBwb3NpdGlvbiB3ZSB1cGRhdGUgYXMgd2UgcmVtb3ZlIGNv
bnRlbnQsIHRoZW4gd2UgY2FuCiAgICAgICAgICAgICAgICAgLy8gYWx3YXlzIGtub3cgd2hpY2gg
Y2hpbGRyZW4gdG8gcmVtb3ZlLgotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShzdGFydE5v
ZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pbkRv
Y3VtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKHN0YXJ0Tm9kZVdhc0Rl
c2NlbmRhbnRPZkVuZE5vZGUgJiYgIW1fdXBzdHJlYW1TdGFydC5hbmNob3JOb2RlKCktPmluRG9j
dW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZiht
X2Rvd25zdHJlYW1FbmQubm9kZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSAq
biA9IG1fdXBzdHJlYW1TdGFydC5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0gbV9kb3duc3RyZWFtRW5kLm5vZGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuICYmIG4tPnBhcmVudE5vZGUoKSAh
PSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbi0+bm9kZUluZGV4KCkg
KyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNo
aWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQubm9kZSgpLCBvZmZzZXQsIG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlQ2hpbGRyZW5JblJhbmdlKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLCBvZmZz
ZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9kb3duc3RyZWFtRW5kLm1vdmVUb09mZnNldChvZmZzZXQpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUzOCwxMyArNTM4LDEzIEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6Zml4dXBXaGl0ZXMKIHsKICAgICB1cGRhdGVMYXlvdXQoKTsK
ICAgICAvLyBGSVhNRTogaXNSZW5kZXJlZENoYXJhY3RlciBzaG91bGQgYmUgcmVtb3ZlZCwgYW5k
IHdlIHNob3VsZCB1c2UgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXJBZnRlciBhbmQgVmlzaWJs
ZVBvc2l0aW9uOjpjaGFyYWN0ZXJCZWZvcmUKLSAgICBpZiAobV9sZWFkaW5nV2hpdGVzcGFjZS5p
c05vdE51bGwoKSAmJiAhbV9sZWFkaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkg
JiYgbV9sZWFkaW5nV2hpdGVzcGFjZS5ub2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBU
ZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX2xlYWRpbmdXaGl0ZXNwYWNlLm5v
ZGUoKSk7CisgICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVh
ZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIG1fbGVhZGluZ1doaXRlc3Bh
Y2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5v
ZGUoKSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUt
PnJlbmRlcmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVw
bGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9Ci0gICAg
aWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVz
cGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgbV90cmFpbGluZ1doaXRlc3BhY2Uubm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obV90cmFpbGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKKyAgICBpZiAobV90cmFpbGluZ1do
aXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRD
aGFyYWN0ZXIoKSAmJiBtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4o
bV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VSVCgh
dGV4dE5vZGUtPnJlbmRlcmVyKCkgfHx0ZXh0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29s
bGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwg
bV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CkBAIC01NjksNyArNTY5LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAgIEFTU0VSVCghbV9wcnVuZVN0YXJ0
QmxvY2tJZk5lY2Vzc2FyeSk7CiAKICAgICAvLyBGSVhNRTogRGVsZXRpb24gc2hvdWxkIGFkanVz
dCBzZWxlY3Rpb24gZW5kcG9pbnRzIGFzIGl0IHJlbW92ZXMgbm9kZXMgc28gdGhhdCB3ZSBuZXZl
ciBnZXQgaW50byB0aGlzIHN0YXRlICg0MDk5ODM5KS4KLSAgICBpZiAoIW1fZG93bnN0cmVhbUVu
ZC5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aW5Eb2N1
bWVudCgpKQorICAgIGlmICghbV9kb3duc3RyZWFtRW5kLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVu
dCgpIHx8ICFtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAKICAgICAvLyBGSVhNRTogVGhlIGRlbGV0aW9uIGFsZ29y
aXRobSBzaG91bGRuJ3QgbGV0IHRoaXMgaGFwcGVuLgpAQCAtNTg1LDE0ICs1ODUsMTQgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgogICAgIAogICAgIC8vIG1fZG93
bnN0cmVhbUVuZCdzIGJsb2NrIGhhcyBiZWVuIGVtcHRpZWQgb3V0IGJ5IGRlbGV0aW9uLiAgVGhl
cmUgaXMgbm8gY29udGVudCBpbnNpZGUgb2YgaXQgdG8KICAgICAvLyBtb3ZlLCBzbyBqdXN0IHJl
bW92ZSBpdC4KLSAgICBFbGVtZW50KiBlbmRCbG9jayA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihl
bmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQubm9kZSgpKSk7Ci0gICAgaWYgKCFzdGFydE9m
UGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpIHx8ICFlbmRCbG9jay0+Y29u
dGFpbnMoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpIHsK
LSAgICAgICAgcmVtb3ZlTm9kZShlbmNsb3NpbmdCbG9jayhtX2Rvd25zdHJlYW1FbmQubm9kZSgp
KSk7CisgICAgRWxlbWVudCogZW5kQmxvY2sgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9z
aW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBpZiAoIXN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpIHx8
ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgIHJlbW92ZU5vZGUoZW5jbG9zaW5nQmxv
Y2sobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICAvLyBXZSBuZWVkIHRvIG1lcmdlIGludG8gbV91cHN0cmVhbVN0YXJ0
J3MgYmxvY2ssIGJ1dCBpdCdzIGJlZW4gZW1wdGllZCBvdXQgYW5kIGNvbGxhcHNlZCBieSBkZWxl
dGlvbi4KLSAgICBpZiAoIW1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkg
fHwgIW1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFu
dE9mKG1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSkg
fHwgbV9zdGFydHNBdEVtcHR5TGluZSkgeworICAgIGlmICghbWVyZ2VEZXN0aW5hdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkgfHwgIW1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX3Vwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpKSB8fCBtX3N0
YXJ0c0F0RW1wdHlMaW5lKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChjcmVhdGVCcmVha0VsZW1l
bnQoZG9jdW1lbnQoKSkuZ2V0KCksIG1fdXBzdHJlYW1TdGFydCk7CiAgICAgICAgIG1lcmdlRGVz
dGluYXRpb24gPSBWaXNpYmxlUG9zaXRpb24obV91cHN0cmVhbVN0YXJ0KTsKICAgICB9CkBAIC02
MDgsOCArNjA4LDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncgog
ICAgIC8vIFRoZSBydWxlIGZvciBtZXJnaW5nIGludG8gYW4gZW1wdHkgYmxvY2sgaXM6IG9ubHkg
ZG8gc28gaWYgaXRzIGZhcnRoZXIgdG8gdGhlIHJpZ2h0LgogICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBSVEwuCiAgICAgaWYgKCFtX3N0YXJ0c0F0RW1wdHlMaW5lICYmIGlzU3RhcnRPZlBhcmFncmFw
aChtZXJnZURlc3RpbmF0aW9uKSAmJiBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKS54KCkgPiBtZXJnZURlc3RpbmF0aW9uLmFic29sdXRlQ2FyZXRCb3VuZHMoKS54
KCkpIHsKLSAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3du
c3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkgewotICAgICAgICAgICAgcmVtb3Zl
Tm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5k
b3duc3RyZWFtKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykpIHsKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhtZXJnZURlc3Rp
bmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVl
cEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjE4LDcg
KzYxOCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAgICAv
LyBCbG9jayBpbWFnZXMsIHRhYmxlcyBhbmQgaG9yaXpvbnRhbCBydWxlcyBjYW5ub3QgYmUgbWFk
ZSBpbmxpbmUgd2l0aCBjb250ZW50IGF0IG1lcmdlRGVzdGluYXRpb24uICBJZiB0aGVyZSBpcyAK
ICAgICAvLyBhbnkgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgobWVyZ2VEZXN0aW5hdGlvbikpLCBkb24n
dCBtZXJnZSwganVzdCBtb3ZlIHRoZSBjYXJldCB0byBqdXN0IGJlZm9yZSB0aGUgc2VsZWN0aW9u
IHdlIGRlbGV0ZWQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNTQzOQotICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JI
UihzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSAmJiAhaXNT
dGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pKSB7CisgICAgaWYgKGlzUmVuZGVyZWRB
c05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSAmJiAhaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVz
dGluYXRpb24pKSB7CiAgICAgICAgIG1fZW5kaW5nUG9zaXRpb24gPSBtX3Vwc3RyZWFtU3RhcnQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aQogICAgIGlmIChtX2VuZFRhYmxlUm93ICYmIG1f
ZW5kVGFibGVSb3ctPmluRG9jdW1lbnQoKSAmJiBtX2VuZFRhYmxlUm93ICE9IG1fc3RhcnRUYWJs
ZVJvdykKICAgICAgICAgaWYgKGlzVGFibGVSb3dFbXB0eShtX2VuZFRhYmxlUm93LmdldCgpKSkg
ewogICAgICAgICAgICAgLy8gRG9uJ3QgcmVtb3ZlIG1fZW5kVGFibGVSb3cgaWYgaXQncyB3aGVy
ZSB3ZSdyZSBwdXR0aW5nIHRoZSBlbmRpbmcgc2VsZWN0aW9uLgotICAgICAgICAgICAgaWYgKCFt
X2VuZGluZ1Bvc2l0aW9uLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9lbmRUYWJsZVJvdy5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGlmICghbV9lbmRpbmdQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZihtX2VuZFRhYmxlUm93LmdldCgpKSkgewogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBwcm9iYWJseSBzaG91bGRuJ3QgcmVtb3ZlIG1fZW5kVGFibGVSb3cgdW5s
ZXNzIGl0J3MgZnVsbHkgc2VsZWN0ZWQsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuCiAgICAgICAgICAg
ICAgICAgLy8gV2UnbGwgbmVlZCB0byBzdGFydCBhZGp1c3RpbmcgdGhlIHNlbGVjdGlvbiBlbmRw
b2ludHMgZHVyaW5nIGRlbGV0aW9uIHRvIGtub3cgd2hldGhlciBvciBub3QgbV9lbmRUYWJsZVJv
dwogICAgICAgICAgICAgICAgIC8vIHdhcyBmdWxseSBzZWxlY3RlZCBoZXJlLgpAQCAtNjg3LDcg
KzY4Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICAv
LyBoYXMgY29tcGxldGVkLgogICAgIAogICAgIC8vIElmIHdlIGRlbGV0ZWQgaW50byBhIGJsb2Nr
cXVvdGUsIGJ1dCBhcmUgbm93IG5vIGxvbmdlciBpbiBhIGJsb2NrcXVvdGUsIHVzZSB0aGUgYWx0
ZXJuYXRlIHR5cGluZyBzdHlsZQotICAgIGlmIChtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUg
JiYgIW5lYXJlc3RNYWlsQmxvY2txdW90ZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSkpCisgICAg
aWYgKG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KG1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIG1fdHlwaW5nU3R5
bGUgPSBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgbV9kZWxldGVJbnRvQmxvY2tx
dW90ZVN0eWxlID0gMDsKIApAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBJZiB0aGUgZGVsZXRpb24gaXMgb2NjdXJyaW5n
IGluIGEgdGV4dCBmaWVsZCwgYW5kIHdlJ3JlIG5vdCBkZWxldGluZyB0byByZXBsYWNlIHRoZSBz
ZWxlY3Rpb24sIHRoZW4gbGV0IHRoZSBmcmFtZSBjYWxsIGFjcm9zcyB0aGUgYnJpZGdlIHRvIG5v
dGlmeSB0aGUgZm9ybSBkZWxlZ2F0ZS4gCiAgICAgaWYgKCFtX3JlcGxhY2UpIHsKLSAgICAgICAg
Tm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLm5vZGUoKTsKKyAg
ICAgICAgTm9kZSogc3RhcnROb2RlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgICAgIE5vZGUqIGFuY2VzdG9yTm9kZSA9IHN0YXJ0Tm9kZSA/IHN0
YXJ0Tm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICBpZiAoYW5jZXN0b3JO
b2RlICYmIGFuY2VzdG9yTm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykKICAgICAgICAgICAgICAg
ICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oYW5jZXN0b3JOb2RlKS0+aXNUZXh0
RmllbGQoKQpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIC8vIGFuZCBlbmRzIGluc2lkZSBpdCAod2UgZG8gbmVlZCBwbGFj
ZWhvbGRlcnMgdG8gaG9sZCBvcGVuIGVtcHR5IGNlbGxzLCBidXQgdGhhdCdzCiAgICAgICAgIC8v
IGhhbmRsZWQgZWxzZXdoZXJlKS4KICAgICAgICAgaWYgKE5vZGUqIHRhYmxlID0gaXNMYXN0UG9z
aXRpb25CZWZvcmVUYWJsZShtX3NlbGVjdGlvblRvRGVsZXRlLnZpc2libGVTdGFydCgpKSkKLSAg
ICAgICAgICAgIGlmIChtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2YodGFibGUpKQorICAgICAgICAgICAgaWYgKG1fc2VsZWN0aW9uVG9EZWxldGUuZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAgICAgICAgICAgICAg
IG1fbmVlZFBsYWNlaG9sZGVyID0gZmFsc2U7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsNyArMTAxLDcgQEAgRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgUG9zaXRpbwog
ICAgIDogbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZShmYWxzZSkKICAgICAsIG1fZm9u
dFNpemVEZWx0YShOb0ZvbnREZWx0YSkKIHsKLSAgICBpbml0KHBvc2l0aW9uLm5vZGUoKSwgT25s
eUluaGVyaXRhYmxlUHJvcGVydGllcyk7CisgICAgaW5pdChwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLCBPbmx5SW5oZXJpdGFibGVQcm9wZXJ0aWVzKTsKIH0KIAogRWRpdGluZ1N0eWxlOjpFZGl0
aW5nU3R5bGUoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCkBAIC0zNDYsNyArMzQ2
LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29ucwogUGFzc1JlZlB0
cjxFZGl0aW5nU3R5bGU+IGVkaXRpbmdTdHlsZUluY2x1ZGluZ1R5cGluZ1N0eWxlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5
bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShwb3NpdGlvbik7Ci0gICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gdHlwaW5nU3R5bGUgPSBwb3NpdGlvbi5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkt
PnNlbGVjdGlvbigpLT50eXBpbmdTdHlsZSgpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5
cGluZ1N0eWxlID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5n
U3R5bGUtPnN0eWxlKCkpCiAgICAgICAgIGVkaXRpbmdTdHlsZS0+c3R5bGUoKS0+bWVyZ2UoY29w
eUVkaXRpbmdQcm9wZXJ0aWVzKHR5cGluZ1N0eWxlLT5zdHlsZSgpKS5nZXQoKSk7CiAgICAgcmV0
dXJuIGVkaXRpbmdTdHlsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlz
aW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNyArMTQzLDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBFZGl0b3I6OnNlbGVj
dGlvbkZvckNvbQogICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgYSB0ZXh0IGNvbnRyb2wsIGFuZCB0
aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgb3V0c2lkZSBvZiBpdHMgc2hhZG93IHRyZWUsCiAgICAg
Ly8gdGhlbiB1c2UgdGhlIHNhdmVkIHNlbGVjdGlvbiBmb3IgdGhhdCB0ZXh0IGNvbnRyb2wuCiAg
ICAgTm9kZSogdGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKLSAgICBOb2RlKiBz
ZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzZWxl
Y3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYg
KHRhcmdldCAmJiAoIXNlbGVjdGlvblN0YXJ0IHx8IHRhcmdldC0+c2hhZG93QW5jZXN0b3JOb2Rl
KCkgIT0gc2VsZWN0aW9uU3RhcnQtPnNoYWRvd0FuY2VzdG9yTm9kZSgpKSkgewogICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlOwogICAgICAgICBpZiAodGFyZ2V0LT5oYXNUYWdOYW1lKGlucHV0
VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4odGFyZ2V0KS0+aXNUZXh0Rmll
bGQoKSkKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIEVkaXRvcjo6Y2FuRGVsZXRlUmFuZ2UoUmFu
Z2UqIHJhbmdlCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwg
cmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwcmV2aW91cyA9IHN0YXJ0LnByZXZpb3VzKCk7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBz
b21ldGltZXMgYWxsb3cgZGVsZXRpb25zIGF0IHRoZSBzdGFydCBvZiBlZGl0YWJsZSByb290cywg
bGlrZSB3aGVuIHRoZSBjYXJldCBpcyBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0uCi0gICAgICAgIGlm
IChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHN0YXJ0Q29udGFpbmVyLT5yb290RWRpdGFibGVFbGVt
ZW50KCkpCisgICAgICAgIGlmIChwcmV2aW91cy5pc051bGwoKSB8fCBwcmV2aW91cy5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBzdGFy
dENvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIEVk
aXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjCiB2b2lkIEVkaXRvcjo6cmVzcG9uZFRv
Q2hhbmdlZENvbnRlbnRzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGVuZGluZ1NlbGVjdGlvbikK
IHsKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAg
ICAgICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOworICAgICAg
ICBOb2RlKiBub2RlID0gZW5kaW5nU2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obm9kZS0+cmVuZGVyZXIoKSwgQVhPYmplY3RD
YWNoZTo6QVhWYWx1ZUNoYW5nZWQsIGZhbHNlKTsKICAgICB9CkBAIC02MTMsNyArNjEzLDcgQEAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250ID0gMDsKIAogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBOb2RlKiBzdGFydE5vZGUg
PSByYW5nZS0+ZWRpdGluZ1N0YXJ0UG9zaXRpb24oKS5ub2RlKCk7CisgICAgTm9kZSogc3RhcnRO
b2RlID0gcmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoc3RhcnROb2RlKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExh
c3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3VsZCBldmVudHVh
bGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBs
ZWFzdCBvbmUKQEAgLTY0OCw3ICs2NDgsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4
dERpcmVjdGlvbkZvCiAKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKTsKIAotICAgIE5vZGUqIG5vZGUg
PSBwb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJl
Y3Rpb247CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4
dERpcmVjdGlvbkZvCiAgICAgICAgICAgICBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncyA9
IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGlvbjsKICAgICAgICAgfQotICAgICAg
ICBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBub2RlID0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICB9CiAKICAgICAvLyBUaGUgc2VsZWN0aW9uIGlzIGVpdGhlciBhIGNh
cmV0IHdpdGggbm8gdHlwaW5nIGF0dHJpYnV0ZXMgb3IgYSByYW5nZSBpbiB3aGljaCBubyBlbWJl
ZGRpbmcgaXMgYWRkZWQsIHNvIGp1c3QgdXNlIHRoZSBzdGFydCBwb3NpdGlvbgpAQCAtNzE5LDcg
KzcxOSw3IEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdG9yOjp0ZXh0RGlyZWN0aW9uRm8KICAgICAg
ICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKIAogICAgICAgICAvLyBJbiB0
aGUgcmFuZ2UgY2FzZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGVtYmVkZGluZyBlbGVtZW50IHBlcnNp
c3RzIHVudGlsIHRoZSBlbmQgb2YgdGhlIHJhbmdlLgotICAgICAgICBpZiAobV9mcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiAhZW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkp
CisgICAgICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpICYmICFlbmQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4g
TmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAgZm91bmREaXJlY3Rpb24gPSBkaXJl
Y3Rpb25WYWx1ZSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6
IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKQEAgLTczNSwxMiArNzM1LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYXNCaWRpU2VsZWN0aW9uKCkgY29uc3QKIAogICAgIE5vZGUqIHN0YXJ0Tm9kZTsK
ICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkgewotICAgICAgICBzdGFy
dE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3Ry
ZWFtKCkubm9kZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLmVuZCgpLnVwc3RyZWFtKCkubm9kZSgpOworICAgICAgICBzdGFydE5v
ZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgICAgIGlmIChlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpICE9IGVuY2xvc2luZ0Jsb2Nr
KGVuZE5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZQotICAgICAg
ICBzdGFydE5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3Rh
cnROb2RlLT5yZW5kZXJlcigpOwogICAgIHdoaWxlIChyZW5kZXJlciAmJiAhcmVuZGVyZXItPmlz
UmVuZGVyQmxvY2soKSkKQEAgLTEwMDMsMTggKzEwMDMsMTggQEAgVHJpU3RhdGUgRWRpdG9yOjpz
ZWxlY3Rpb25IYXNTdHlsZShDU1NTdAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7
CiAgICAgICAgIHN0YXRlID0gdHJpU3RhdGVPZlN0eWxlKHN0eWxlLCBzZWxlY3Rpb25TdHlsZS5n
ZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24+IG5vZGVTdHlsZSA9IGNvbXB1dGVkU3R5bGUobm9kZSk7CiAgICAgICAgICAgICBpZiAo
bm9kZVN0eWxlKSB7CiAgICAgICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0YXRlID0gdHJpU3Rh
dGVPZlN0eWxlKHN0eWxlLCBub2RlU3R5bGUuZ2V0KCksICFub2RlLT5pc1RleHROb2RlKCkpOwot
ICAgICAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
Lm5vZGUoKSkKKyAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IG5vZGVTdGF0ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSAhPSBub2RlU3RhdGUg
JiYgbm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gTWl4
ZWRUcmlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9mcmFtZS0+c2VsZWN0
aW9uKCktPmVuZCgpLm5vZGUoKSkKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgYm9vbCBFZGl0b3I6Omlu
c2VydFRleHRXaXRob3V0U2VuZGluZ1RleAogICAgIC8vIHRoYXQgaXMgY29udGFpbmVkIGluIHRo
ZSBldmVudCB0YXJnZXQuCiAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmln
Z2VyaW5nRXZlbnQpOwogICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewot
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCkpIHsKKyAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0
KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1
bWVudCA9IHNlbGVjdGlvblN0YXJ0LT5kb2N1bWVudCgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBJbnNlcnQgdGhlIHRleHQKQEAgLTEyODEsNyArMTI4MSw3IEBAIHZvaWQgRWRpdG9y
OjpjdXQoKQogI2lmIFJFTU9WRV9NQVJLRVJTX1VQT05fRURJVElORwogICAgICAgICByZW1vdmVT
cGVsbEFuZENvcnJlY3Rpb25NYXJrZXJzRnJvbVdvcmRzVG9CZUVkaXRlZCh0cnVlKTsKICNlbmRp
ZgotICAgICAgICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnN0YXJ0KCkubm9kZSgpKSkKKyAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9s
KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAg
ICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQoc2Vs
ZWN0ZWRUZXh0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5l
cmFsUGFzdGVib2FyZCgpLT53cml0ZVNlbGVjdGlvbihzZWxlY3Rpb24uZ2V0KCksIGNhblNtYXJ0
Q29weU9yRGVsZXRlKCksIG1fZnJhbWUpOwpAQCAtMTI5OSw3ICsxMjk5LDcgQEAgdm9pZCBFZGl0
b3I6OmNvcHkoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGlzTm9kZUluVGV4
dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSkpCisgICAg
aWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2Fy
ZCgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHQoKSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7CkBAIC0xNzI0LDkgKzE3
MjQsOSBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAgICAg
IC8vIEZpbmQgb3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KICAgICAgICAg
UG9zaXRpb24gYmFzZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5iYXNlKCkuZG93bnN0cmVhbSgp
OwogICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZXh0ZW50
KCk7Ci0gICAgICAgIE5vZGUqIGJhc2VOb2RlID0gYmFzZS5ub2RlKCk7CisgICAgICAgIE5vZGUq
IGJhc2VOb2RlID0gYmFzZS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBiYXNl
T2Zmc2V0ID0gYmFzZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgICAgICBOb2RlKiBl
eHRlbnROb2RlID0gZXh0ZW50Lm5vZGUoKTsKKyAgICAgICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4
dGVudC5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICB1bnNpZ25lZCBleHRlbnRPZmZzZXQgPSBl
eHRlbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKIAogICAgICAgICBpZiAoYmFzZU5vZGUg
JiYgYmFzZU5vZGUgPT0gZXh0ZW50Tm9kZSAmJiBiYXNlTm9kZS0+aXNUZXh0Tm9kZSgpICYmIGJh
c2VPZmZzZXQgKyB0ZXh0Lmxlbmd0aCgpID09IGV4dGVudE9mZnNldCkgewpAQCAtMTc5Miw3ICsx
NzkyLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAgIFJl
ZlB0cjxSYW5nZT4gc3BlbGxpbmdTZWFyY2hSYW5nZShyYW5nZU9mQ29udGVudHMoZnJhbWUoKS0+
ZG9jdW1lbnQoKSkpOwogCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwot
ICAgIGlmIChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsKKyAgICBpZiAoc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9
IHRydWU7CiAgICAgICAgIGlmIChzdGFydEJlZm9yZVNlbGVjdGlvbikgewogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSk7CkBAIC0xODE2
LDcgKzE4MTYsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBQb3NpdGlvbiByYW5nZUNvbXBs
aWFudFBvc2l0aW9uID0gcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAg
ICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJhbmdlQ29tcGxpYW50UG9zaXRpb24u
bm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCks
IGVjKTsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQocmFuZ2VDb21wbGlh
bnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCByYW5nZUNvbXBsaWFudFBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24g
PSBmYWxzZTsgLy8gd29uJ3QgbmVlZCB0byB3cmFwCiAgICAgfQogICAgIApAQCAtMjIyMSw3ICsy
MjIxLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29s
IEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewot
ICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zdGFydCgpLm5vZGUoKSk7CisgICAgcmV0dXJuIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3Io
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjg1MiwxMCAr
Mjg1MiwxMCBAQCBib29sIEVkaXRvcjo6Z2V0Q29tcG9zaXRpb25TZWxlY3Rpb24odW5zCiAgICAg
aWYgKCFtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBvc2l0
aW9uIHN0YXJ0ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCk7Ci0gICAgaWYgKHN0YXJ0
Lm5vZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBv
c2l0aW9uIGVuZCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5lbmQoKTsKLSAgICBpZiAoZW5kLm5v
ZGUoKSAhPSBtX2NvbXBvc2l0aW9uTm9kZSkKKyAgICBpZiAoZW5kLmRlcHJlY2F0ZWROb2RlKCkg
IT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkgPCBt
X2NvbXBvc2l0aW9uU3RhcnQpCkBAIC0zMTExLDcgKzMxMTEsNyBAQCBJbnRSZWN0IEVkaXRvcjo6
Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAg
c3RhcnRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgc3RhcnRJbmxp
bmVCb3gsIHN0YXJ0Q2FyZXRPZmZzZXQpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRl
cmVyID0gc3RhcnRQb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0
KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpOwogICAgIEFTU0VSVChzdGFydFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IHN0YXJ0Q2FyZXRS
ZWN0ID0gc3RhcnRSZW5kZXJlci0+bG9jYWxDYXJldFJlY3Qoc3RhcnRJbmxpbmVCb3gsIHN0YXJ0
Q2FyZXRPZmZzZXQsICZleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwogICAgIGlmIChzdGFydENhcmV0
UmVjdCAhPSBJbnRSZWN0KCkpCkBAIC0zMTI0LDcgKzMxMjQsNyBAQCBJbnRSZWN0IEVkaXRvcjo6
Zmlyc3RSZWN0Rm9yUmFuZ2UoUmFuZ2UqCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAg
ZW5kUG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQU1RSRUFNLCBlbmRJbmxpbmVCb3gs
IGVuZENhcmV0T2Zmc2V0KTsKIAotICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSBlbmRQ
b3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJl
ciA9IGVuZFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgQVNTRVJU
KGVuZFJlbmRlcmVyKTsKICAgICBJbnRSZWN0IGVuZENhcmV0UmVjdCA9IGVuZFJlbmRlcmVyLT5s
b2NhbENhcmV0UmVjdChlbmRJbmxpbmVCb3gsIGVuZENhcmV0T2Zmc2V0KTsKICAgICBpZiAoZW5k
Q2FyZXRSZWN0ICE9IEludFJlY3QoKSkKQEAgLTMyODQsMTIgKzMyODQsMTIgQEAgUmVuZGVyU3R5
bGUqIEVkaXRvcjo6c3R5bGVGb3JTZWxlY3Rpb25TdAogICAgIFBvc2l0aW9uIHBvc2l0aW9uID0g
bV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVp
dmFsZW50KCk7CiAgICAgaWYgKCFwb3NpdGlvbi5pc0NhbmRpZGF0ZSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKSkKKyAgICBpZiAoIXBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKICAg
ICBpZiAoIXR5cGluZ1N0eWxlIHx8ICF0eXBpbmdTdHlsZS0+c3R5bGUoKSkKLSAgICAgICAgcmV0
dXJuIHBvc2l0aW9uLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAKQEAgLTMzMDEsNyArMzMwMSw3IEBAIFJlbmRlclN0
eWxlKiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKICAgICBzdHlsZUVsZW1lbnQtPmFwcGVu
ZENoaWxkKG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgiIiksIGVj
KTsKICAgICBBU1NFUlQoIWVjKTsKIAotICAgIHBvc2l0aW9uLm5vZGUoKS0+cGFyZW50Tm9kZSgp
LT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICBwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5wYXJlbnROb2RlKCktPmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCwgZWMpOwogICAg
IEFTU0VSVCghZWMpOwogCiAgICAgbm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOwpA
QCAtMzUzNyw3ICszNTM3LDcgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rp
b24oYwogICAgICAgICAvLyBXaGVuIHR5cGluZyB3ZSBjaGVjayBzcGVsbGluZyBlbHNld2hlcmUs
IHNvIGRvbid0IHJlZG8gaXQgaGVyZS4KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNoYW5nZSBp
biBzZWxlY3Rpb24gcmVzdWx0aW5nIGZyb20gYSBkZWxldGUgb3BlcmF0aW9uLAogICAgICAgICAv
LyBvbGRTZWxlY3Rpb24gbWF5IG5vIGxvbmdlciBiZSBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAg
IGlmIChzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciAmJiBjbG9zZVR5cGluZyAmJiBvbGRT
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZENoZWNrU3BlbGxpbmdBbmRHcmFtbWFyICYmIGNsb3NlVHlwaW5nICYmIG9s
ZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLmRl
cHJlY2F0ZWROb2RlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkuYW5jaG9yTm9kZSgpLT5pbkRv
Y3VtZW50KCkpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChvbGRTZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRB
ZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZChvbGRTdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpOwogICAgICAgICAgICAgaWYgKG9sZEFkamFjZW50V29yZHMgIT0gbmV3QWRqYWNlbnRX
b3JkcykgewpAQCAtMzU3Niw3ICszNTc2LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmth
YmxlKE5vZGUqIG5vZAogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlz
VGV4dENvbnRyb2woKSkKLSAgICAgICAgICAgIG5vZGUgPSB0b1JlbmRlclRleHRDb250cm9sKG5v
ZGUtPnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUt
PnJlbmRlcmVyKCkpLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgxKS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmZpcnN0Q2hpbGQoKSkK
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgICAgIGVsc2UKQEAg
LTM1ODgsNyArMzU4OCw3IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJsZShOb2RlKiBu
b2QKIAogYm9vbCBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0SGFzU3BlbGxpbmdNYXJrZXJGb3IoaW50
IGZyb20sIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1h
cmthYmxlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKSk7CisgICAgTm9kZSog
bm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOCArNjAsOCBAQCB2b2lkIEZvcm1hdEJs
b2NrQ29tbWFuZDo6Zm9ybWF0U2VsZWN0aW9uCiAKIHZvaWQgRm9ybWF0QmxvY2tDb21tYW5kOjpm
b3JtYXRSYW5nZShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIGNv
bnN0IFBvc2l0aW9uJiBlbmRPZlNlbGVjdGlvbiwgUmVmUHRyPEVsZW1lbnQ+JiBibG9ja05vZGUp
CiB7Ci0gICAgTm9kZSogbm9kZVRvU3BsaXRUbyA9IGVuY2xvc2luZ0Jsb2NrVG9TcGxpdFRyZWVU
byhzdGFydC5ub2RlKCkpOwotICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5v
ZGUoKSA9PSBub2RlVG9TcGxpdFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShz
dGFydC5ub2RlKCksIG5vZGVUb1NwbGl0VG8pOworICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBl
bmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8oc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAg
UmVmUHRyPE5vZGU+IG91dGVyQmxvY2sgPSAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBub2Rl
VG9TcGxpdFRvKSA/IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSwgbm9kZVRvU3BsaXRUbyk7CiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGVBZnRlckluc2VydGlvblBvc2l0aW9uID0gb3V0ZXJCbG9jazsKIAogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0LCBlbmRPZlNlbGVjdGlv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21t
YW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVu
dE91dGRlbnRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6SW5kZW50T3V0ZGVudENvbW1hCiBib29sIEluZGVudE91dGRlbnRD
b21tYW5kOjp0cnlJbmRlbnRpbmdBc0xpc3RJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCkKIHsKICAgICAvLyBJZiBvdXIgc2VsZWN0aW9uIGlzIG5vdCBpbnNp
ZGUgYSBsaXN0LCBiYWlsIG91dC4KLSAgICBOb2RlKiBsYXN0Tm9kZUluU2VsZWN0ZWRQYXJhZ3Jh
cGggPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogbGFzdE5vZGVJblNlbGVjdGVkUGFyYWdyYXBo
ID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gbGlzdE5vZGUg
PSBlbmNsb3NpbmdMaXN0KGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCk7CiAgICAgaWYgKCFs
aXN0Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTQsMTUgKzk0LDE1IEBAIHZvaWQg
SW5kZW50T3V0ZGVudENvbW1hbmQ6OmluZGVudEludG9CbG8KICAgICBOb2RlKiBub2RlVG9TcGxp
dFRvOwogICAgIGlmIChlbmNsb3NpbmdDZWxsKQogICAgICAgICBub2RlVG9TcGxpdFRvID0gZW5j
bG9zaW5nQ2VsbDsKLSAgICBlbHNlIGlmIChlbmNsb3NpbmdMaXN0KHN0YXJ0Lm5vZGUoKSkpCi0g
ICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9jayhzdGFydC5ub2RlKCkpOworICAg
IGVsc2UgaWYgKGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAg
IG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9jayhzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBlbHNlCiAgICAgICAgIG5vZGVUb1NwbGl0VG8gPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlv
bihzdGFydCk7CiAKICAgICBpZiAoIW5vZGVUb1NwbGl0VG8pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0Lm5vZGUoKSA9PSBub2RlVG9TcGxp
dFRvKSA/IHN0YXJ0Lm5vZGUoKSA6IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2RlKCksIG5vZGVU
b1NwbGl0VG8pOworICAgIFJlZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3Bs
aXRUcmVlVG9Ob2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIG5vZGVUb1NwbGl0VG8pOwogCiAg
ICAgaWYgKCF0YXJnZXRCbG9ja3F1b3RlKSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibG9j
a3F1b3RlIGFuZCBpbnNlcnQgaXQgYXMgYSBjaGlsZCBvZiB0aGUgcm9vdCBlZGl0YWJsZSBlbGVt
ZW50LiBXZSBhY2NvbXBsaXNoCkBAIC0xNjYsMTMgKzE2NiwxMyBAQCB2b2lkIEluZGVudE91dGRl
bnRDb21tYW5kOjpvdXRkZW50UGFyYWdyCiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBO
b2RlKiBlbmNsb3NpbmdCbG9ja0Zsb3cgPSBlbmNsb3NpbmdCbG9jayh2aXNpYmxlU3RhcnRPZlBh
cmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSogZW5jbG9zaW5nQmxv
Y2tGbG93ID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBSZWZQdHI8Tm9kZT4gc3BsaXRCbG9ja3F1
b3RlTm9kZSA9IGVuY2xvc2luZ05vZGU7CiAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrRmxvdyAhPSBl
bmNsb3NpbmdOb2RlKQogICAgICAgICBzcGxpdEJsb2NrcXVvdGVOb2RlID0gc3BsaXRUcmVlVG9O
b2RlKGVuY2xvc2luZ0Jsb2NrRmxvdywgZW5jbG9zaW5nTm9kZSwgdHJ1ZSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJlIHdlIHN0YXJ0IG91
dGRlbnRpbmcuCi0gICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5j
bG9zaW5nTm9kZSksIHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbmNsb3Np
bmdOb2RlKSwgdmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICB9CiAgICAgUmVmUHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRl
QnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVCZWZvcmUocGxhY2Vob2xk
ZXIsIHNwbGl0QmxvY2txdW90ZU5vZGUpOwpAQCAtMjA1LDEwICsyMDUsMTAgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFJlZ2lvbgogICAgICAgICAvLyBvdXRkZW50UGFyYWdy
YXBoIGNvdWxkIG1vdmUgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGggaWYgdGhlIHBhcmFncmFwaAog
ICAgICAgICAvLyBpcyBpbiBhIGxpc3QgaXRlbS4gQXMgYSByZXN1bHQsIGVuZEFmdGVyU2VsZWN0
aW9uIGFuZCBlbmRPZk5leHRQYXJhZ3JhcGgKICAgICAgICAgLy8gY291bGQgcmVmZXIgdG8gcG9z
aXRpb25zIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIGlmIChlbmRBZnRlclNl
bGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKGVuZEFmdGVyU2VsZWN0aW9uLmlz
Tm90TnVsbCgpICYmICFlbmRBZnRlclNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAg
ICAgICAgaWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFy
YWdyYXBoLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAg
aWYgKGVuZE9mTmV4dFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhZW5kT2ZOZXh0UGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ICAgIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpOwogICAg
ICAgICAgICAgZW5kT2ZOZXh0UGFyYWdyYXBoID0gZW5kT2ZQYXJhZ3JhcGgoZW5kT2ZDdXJyZW50
UGFyYWdyYXBoLm5leHQoKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMSArNTcsMTEgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
OjppbnNlcnROb2RlQQogICAgIC8vIEluc2VydCB0aGUgQlIgYWZ0ZXIgdGhlIGNhcmV0IHBvc2l0
aW9uLiBJbiB0aGUgY2FzZSB0aGUKICAgICAvLyBwb3NpdGlvbiBpcyBhIGJsb2NrLCBkbyBhbiBh
cHBlbmQuIFdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0CiAgICAgLy8gdGhlIEJSICphZnRlciogdGhl
IGJsb2NrLgotICAgIEVsZW1lbnQqIGNiID0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwotICAgIGlmIChjYiA9PSBwb3Mubm9kZSgpKQorICAgIEVsZW1lbnQqIGNiID0g
cG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICBp
ZiAoY2IgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIGFwcGVuZE5vZGUobm9kZSwg
Y2IpOwogICAgIGVsc2UKLSAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHBvcy5ub2RlKCkp
OworICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgcG9zLmRlcHJlY2F0ZWROb2RlKCkpOwog
fQogCiB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmVQb3NpdGlv
bihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgcG9zKQpAQCAtNjksMTEgKzY5LDExIEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9kZUIKICAgICAvLyBJbnNlcnQgdGhl
IEJSIGFmdGVyIHRoZSBjYXJldCBwb3NpdGlvbi4gSW4gdGhlIGNhc2UgdGhlCiAgICAgLy8gcG9z
aXRpb24gaXMgYSBibG9jaywgZG8gYW4gYXBwZW5kLiBXZSBkb24ndCB3YW50IHRvIGluc2VydAog
ICAgIC8vIHRoZSBCUiAqYmVmb3JlKiB0aGUgYmxvY2suCi0gICAgRWxlbWVudCogY2IgPSBwb3Mu
bm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Ci0gICAgaWYgKGNiID09IHBvcy5u
b2RlKCkpCisgICAgRWxlbWVudCogY2IgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOworICAgIGlmIChjYiA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKSkK
ICAgICAgICAgYXBwZW5kTm9kZShub2RlLCBjYik7CiAgICAgZWxzZQotICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKG5vZGUsIHBvcy5ub2RlKCkpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5v
ZGUsIHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogLy8gV2hldGhlciB3ZSBzaG91bGQgaW5z
ZXJ0IGEgYnJlYWsgZWxlbWVudCBvciBhICdcbicuCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZDo6c2hvdWxkVXNlQnIKICAgICAvLyB0aGUgaW5wdXQgZWxlbWVu
dCwgYW5kIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCBlbGVtZW50J3MK
ICAgICAvLyBwYXJlbnQncyByZW5kZXJlci4KICAgICBQb3NpdGlvbiBwKGluc2VydGlvblBvcy5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgcmV0dXJuIHAubm9kZSgpLT5yZW5kZXJl
cigpICYmICFwLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7
CisgICAgcmV0dXJuIHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiAhcC5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAog
dm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIG1lcmdlIHRleHQgbm9kZXMgd2hlbiBpbnNlcnRpbmcganVzdCBhZnRlciBvciBiZWZv
cmUgdGV4dC4KICAgICAKICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChjYXJldCkgJiYgIWxpbmVC
cmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKGNhcmV0KSkgewotICAgICAgICBib29sIG5lZWRF
eHRyYUxpbmVCcmVhayA9ICFwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLm5v
ZGUoKS0+aGFzVGFnTmFtZSh0YWJsZVRhZyk7CisgICAgICAgIGJvb2wgbmVlZEV4dHJhTGluZUJy
ZWFrID0gIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFnKSAmJiAhcG9zLmRl
cHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUodGFibGVUYWcpOwogICAgICAgICAKICAgICAgICAg
aW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2VydC5nZXQoKSwgcG9zKTsKICAgICAgICAgCkBAIC0xMjMs
NyArMTIzLDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRpbmdQb3NpdGlvbihwb3NpdGlvbkJlZm9y
ZU5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGVuZGluZ1Bvc2l0aW9uKSk7Ci0gICAgfSBlbHNlIGlmIChwb3MuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgpKSkgewor
ICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0gY2FyZXRNaW5P
ZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChub2Rl
VG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnNlcnQgYW4gZXh0
cmEgYnIgb3IgJ1xuJyBpZiB0aGUganVzdCBpbnNlcnRlZCBvbmUgY29sbGFwc2VkLgpAQCAtMTMz
LDEyICsxMzMsMTIgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocG9zaXRpb25JblBhcmVu
dEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RSRUFNKSk7CiAgICAgLy8gSWYg
d2UncmUgaW5zZXJ0aW5nIGFmdGVyIGFsbCBvZiB0aGUgcmVuZGVyZWQgdGV4dCBpbiBhIHRleHQg
bm9kZSwgb3IgaW50byBhIG5vbi10ZXh0IG5vZGUsCiAgICAgLy8gYSBzaW1wbGUgaW5zZXJ0aW9u
IGlzIHN1ZmZpY2llbnQuCi0gICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSB8fCAhcG9zLm5vZGUoKS0+aXNUZXh0
Tm9kZSgpKSB7CisgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSBjYXJldE1heE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkgfHwgIXBvcy5kZXByZWNhdGVk
Tm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5vZGVUb0luc2Vy
dC5nZXQoKSwgcG9zKTsKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rp
b24ocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpLCBET1dOU1RS
RUFNKSk7Ci0gICAgfSBlbHNlIGlmIChwb3Mubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKKyAgICB9
IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAg
Ly8gU3BsaXQgYSB0ZXh0IG5vZGUKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4ocG9zLm5vZGUoKSk7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0
ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKG5vZGVUb0luc2VydCwgdGV4dE5vZGUpOwogICAgICAgICBQb3NpdGlvbiBlbmRp
bmdQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDEyICs4NCwxMiBAQCBib29sIEluc2VydExpc3RDb21tYW5kOjpzZWxl
Y3Rpb25IYXNMaXN0CiB7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwogCi0gICAgaWYgKCFlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKSkKKyAgICBpZiAoIWVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CiAgICAgd2hpbGUgKHN0
YXJ0LmlzTm90TnVsbCgpICYmIHN0YXJ0ICE9IGVuZCkgewotICAgICAgICBFbGVtZW50KiBsaXN0
Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAg
ICAgICBFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qoc3RhcnQuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaWYgKCFsaXN0Tm9kZSB8fCAhbGlzdE5v
ZGUtPmhhc1RhZ05hbWUobGlzdFRhZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgoc3RhcnQpOwpAQCAtMTQzLDcgKzE0Myw3
IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIC8v
IGluZmluaXRlIGxvb3AgYW5kIGJlY2F1c2UgdGhlcmUgaXMgbm8gbW9yZSB3b3JrIHRvIGJlIGRv
bmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUUoPHJkYXI6Ly9wcm9ibGVtLzU5ODM5NzQ+KTog
VGhlIGVuZGluZ1NlbGVjdGlvbigpIG1heSBiZSBpbmNvcnJlY3QgaGVyZS4gIENvbXB1dGUgCiAg
ICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBsb2NhdGlvbiBvZiBlbmRPZlNlbGVjdGlvbiBhbmQg
dXNlIGl0IGFzIHRoZSBlbmQgb2YgdGhlIG5ldyBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAg
aWYgKCFzdGFydE9mTGFzdFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKQorICAgICAgICAgICAgICAgIGlmICghc3RhcnRPZkxhc3RQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjpkb0FwcGx5Rm9yU2luZ2xlCiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBwcm9kdWNlIHVu
ZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxlY3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUg
YQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGluc2lkZSB0aGUgZmlyc3QgY2VsbCwgc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3VsZCBwcm9iYWJseQogICAgIC8vIGJlIHJlbmFtZWQg
YW5kIGRlcGxveWVkIGluc2lkZSBzZXRFbmRpbmdTZWxlY3Rpb24oKS4KLSAgICBOb2RlKiBzZWxl
Y3Rpb25Ob2RlID0gZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSog
c2VsZWN0aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBOb2RlKiBsaXN0Q2hpbGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlv
bk5vZGUpOwogICAgIGJvb2wgc3dpdGNoTGlzdFR5cGUgPSBmYWxzZTsKICAgICBpZiAobGlzdENo
aWxkTm9kZSkgewpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRv
QXBwbHlGb3JTaW5nbGUKICAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbmV3TGlzdCA9
IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RUYWcpOwogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUJlZm9yZShuZXdMaXN0LCBsaXN0Tm9kZSk7CiAKLSAgICAgICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGRJbkxpc3QgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoVmlzaWJsZVBvc2l0aW9uKGZpcnN0
UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwg
bGlzdE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgTm9kZSogZmlyc3RDaGlsZEluTGlzdCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShsaXN0
Tm9kZS5nZXQoKSkpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSwgbGlzdE5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgTm9kZSogb3V0ZXJCbG9jayA9IGZpcnN0Q2hpbGRJbkxpc3Qt
PmlzQmxvY2tGbG93KCkgPyBmaXJzdENoaWxkSW5MaXN0IDogbGlzdE5vZGUuZ2V0KCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzKGZpcnN0UG9zaXRp
b25Jbk5vZGUobGlzdE5vZGUuZ2V0KCkpLCBsYXN0UG9zaXRpb25Jbk5vZGUobGlzdE5vZGUuZ2V0
KCkpLCBuZXdMaXN0LmdldCgpLCBvdXRlckJsb2NrKTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhCiAgICAgICAgIC8vIEEgcGFyYWdy
YXBoIGlzIHZpc3VhbGx5IGEgbGlzdCBpdGVtIG1pbnVzIGEgbGlzdCBtYXJrZXIuICBUaGUgcGFy
YWdyYXBoIHdpbGwgYmUgbW92ZWQuCiAgICAgICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChv
cmlnaW5hbFN0YXJ0KTsKICAgICAgICAgZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQpOwotICAg
ICAgICBuZXh0TGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGVuZC5uZXh0KCkuZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCksIGxpc3ROb2RlKTsKKyAgICAgICAgbmV4dExpc3RDaGlsZCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSwgbGlzdE5vZGUpOwogICAgICAgICBBU1NFUlQobmV4dExpc3RDaGlsZCAhPSBsaXN0Q2hp
bGROb2RlKTsKLSAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQo
c3RhcnQucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwgbGlzdE5vZGUpOworICAg
ICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChzdGFydC5wcmV2aW91
cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSwgbGlzdE5vZGUpOwogICAgICAg
ICBBU1NFUlQocHJldmlvdXNMaXN0Q2hpbGQgIT0gbGlzdENoaWxkTm9kZSk7CiAgICAgfQogICAg
IC8vIFdoZW4gcmVtb3ZpbmcgYSBsaXN0LCB3ZSBtdXN0IGFsd2F5cyBjcmVhdGUgYSBwbGFjZWhv
bGRlciB0byBhY3QgYXMgYSBwb2ludCBvZiBpbnNlcnRpb24KQEAgLTMwOCw3ICszMDgsNyBAQCB2
b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhCiAKIHN0YXRpYyBFbGVtZW50
KiBhZGphY2VudEVuY2xvc2luZ0xpc3QoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3MsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgYWRqYWNlbnRQb3MsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RU
YWcpCiB7Ci0gICAgRWxlbWVudCogbGlzdE5vZGUgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KGFk
amFjZW50UG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBFbGVtZW50KiBsaXN0Tm9k
ZSA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QoYWRqYWNlbnRQb3MuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIGlmICghbGlzdE5vZGUpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtMzE3LDkgKzMxNyw5IEBAIHN0YXRpYyBFbGVtZW50KiBhZGphY2VudEVuY2xvc2luZ0xp
c3QoY28KICAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xvc2luZ1RhYmxlQ2VsbChhZGphY2Vu
dFBvcy5kZWVwRXF1aXZhbGVudCgpKTsKIAogICAgIGlmICghbGlzdE5vZGUtPmhhc1RhZ05hbWUo
bGlzdFRhZykKLSAgICAgICAgfHwgbGlzdE5vZGUtPmNvbnRhaW5zKHBvcy5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSkKKyAgICAgICAgfHwgbGlzdE5vZGUtPmNvbnRhaW5zKHBvcy5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHx8IHByZXZpb3VzQ2VsbCAhPSBjdXJy
ZW50Q2VsbAotICAgICAgICB8fCBlbmNsb3NpbmdMaXN0KGxpc3ROb2RlKSAhPSBlbmNsb3NpbmdM
aXN0KHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisgICAgICAgIHx8IGVuY2xvc2luZ0xp
c3QobGlzdE5vZGUpICE9IGVuY2xvc2luZ0xpc3QocG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxpc3ROb2RlOwpA
QCAtMzUxLDcgKzM1MSw3IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21t
YW4KICAgICAgICAgbGlzdEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBs
aXN0VGFnKTsKICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQsIGxpc3RFbGVtZW50
KTsKIAotICAgICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIGlzQmxvY2soc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKS5ub2RlKCkpKSB7CisgICAgICAgIGlmIChzdGFydCA9PSBlbmQgJiYgaXNCbG9jayhz
dGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICAv
LyBJbnNlcnRpbmcgdGhlIGxpc3QgaW50byBhbiBlbXB0eSBwYXJhZ3JhcGggdGhhdCBpc24ndCBo
ZWxkIG9wZW4gCiAgICAgICAgICAgICAvLyBieSBhIGJyIG9yIGEgJ1xuJywgd2lsbCBpbnZhbGlk
YXRlIHN0YXJ0IGFuZCBlbmQuICBJbnNlcnQgCiAgICAgICAgICAgICAvLyBhIHBsYWNlaG9sZGVy
IGFuZCB0aGVuIHJlY29tcHV0ZSBzdGFydCBhbmQgZW5kLgpAQCAtMzY3LDcgKzM2Nyw3IEBAIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW4KICAgICAgICAgLy8gY2xlYW4g
bWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBmYXIgYXMgcG9z
c2libGUuCiAgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyhzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLnVwc3RyZWFtKCkpOwogICAgICAgICAvLyBBbHNvIGF2b2lkIHRoZSBjb250YWluaW5nIGxp
c3QgaXRlbS4KLSAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGlu
c2VydGlvblBvcy5ub2RlKCkpOworICAgICAgICBOb2RlKiBsaXN0Q2hpbGQgPSBlbmNsb3NpbmdM
aXN0Q2hpbGQoaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBpZiAobGlz
dENoaWxkICYmIGxpc3RDaGlsZC0+aGFzVGFnTmFtZShsaVRhZykpCiAgICAgICAgICAgICBpbnNl
cnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShsaXN0Q2hpbGQpOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY5LDggKzE2OSw4IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6ZG8KICAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsKHN0YXJ0QmxvY2spCiAgICAgICAgICAg
ICB8fCBzdGFydEJsb2NrLT5oYXNUYWdOYW1lKGZvcm1UYWcpCiAgICAgICAgICAgICAvLyBGSVhN
RTogSWYgdGhlIG5vZGUgaXMgaGlkZGVuLCB3ZSBkb24ndCBoYXZlIGEgY2Fub25pY2FsIHBvc2l0
aW9uIHNvIHdlIHdpbGwgZG8gdGhlIHdyb25nIHRoaW5nIGZvciB0YWJsZXMgYW5kIDxocj4uIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDM0MgotICAgICAgICAgICAg
fHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25pY2FsUG9zLm5vZGUoKS0+cmVuZGVy
ZXIoKSAmJiBjYW5vbmljYWxQb3Mubm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkpCi0gICAg
ICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKGhyVGFnKSkpIHsKKyAgICAgICAgICAgIHx8ICghY2Fub25pY2FsUG9zLmlz
TnVsbCgpICYmIGNhbm9uaWNhbFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIGNh
bm9uaWNhbFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5pc1RhYmxlKCkpCisgICAg
ICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVj
YXRlZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykpKSB7CiAgICAgICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAvLyBSZWNyZWF0ZSB0aGUgc2FtZSBz
dHJ1Y3R1cmUgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCiAgICAgICAgIAogICAgICAgICBWZWN0b3I8
RWxlbWVudCo+IGFuY2VzdG9yczsKLSAgICAgICAgZ2V0QW5jZXN0b3JzSW5zaWRlQmxvY2soaW5z
ZXJ0aW9uUG9zaXRpb24ubm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOyAgICAgIAorICAg
ICAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOyAgICAgIAogICAgICAgICBSZWZQdHI8RWxl
bWVudD4gcGFyZW50ID0gY2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrKGFuY2VzdG9ycywgYmxv
Y2tUb0luc2VydCk7CiAgICAgICAgIAogICAgICAgICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKHBh
cmVudCk7CkBAIC0yNTQsMTEgKzI1NCwxMSBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvCiAgICAgICAgIE5vZGUgKnJlZk5vZGU7CiAgICAgICAgIGlmIChpc0ZpcnN0
SW5CbG9jayAmJiAhbmVzdE5ld0Jsb2NrKQogICAgICAgICAgICAgcmVmTm9kZSA9IHN0YXJ0Qmxv
Y2s7Ci0gICAgICAgIGVsc2UgaWYgKGluc2VydGlvblBvc2l0aW9uLm5vZGUoKSA9PSBzdGFydEJs
b2NrICYmIG5lc3ROZXdCbG9jaykgeworICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpID09IHN0YXJ0QmxvY2sgJiYgbmVzdE5ld0Jsb2NrKSB7CiAgICAg
ICAgICAgICByZWZOb2RlID0gc3RhcnRCbG9jay0+Y2hpbGROb2RlKGluc2VydGlvblBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNTRVJUKHJlZk5vZGUp
OyAvLyBtdXN0IGJlIHRydWUgb3Igd2UnZCBiZSBpbiB0aGUgZW5kIG9mIGJsb2NrIGNhc2UKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZWZOb2RlID0gaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpOworICAgICAgICAgICAgcmVmTm9kZSA9IGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAKICAgICAgICAgLy8gZmluZCBlbmRpbmcgc2VsZWN0aW9uIHBvc2l0aW9uIGVhc2ls
eSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBwYXJhZ3JhcGgKICAgICAgICAgaW5zZXJ0aW9uUG9zaXRp
b24gPSBpbnNlcnRpb25Qb3NpdGlvbi5kb3duc3RyZWFtKCk7CkBAIC0yNjgsNyArMjY4LDcgQEAg
dm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICAvLyBSZWNy
ZWF0ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gdGhlIG5ldyBwYXJhZ3JhcGguCiAKICAgICAgICAg
VmVjdG9yPEVsZW1lbnQqPiBhbmNlc3RvcnM7Ci0gICAgICAgIGdldEFuY2VzdG9yc0luc2lkZUJs
b2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGluc2VydGlvblBvc2l0
aW9uKS5ub2RlKCksIHN0YXJ0QmxvY2ssIGFuY2VzdG9ycyk7CisgICAgICAgIGdldEFuY2VzdG9y
c0luc2lkZUJsb2NrKHBvc2l0aW9uQXZvaWRpbmdTcGVjaWFsRWxlbWVudEJvdW5kYXJ5KGluc2Vy
dGlvblBvc2l0aW9uKS5kZXByZWNhdGVkTm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOwog
ICAgICAgICAKICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihjbG9uZUhpZXJhcmNoeVVu
ZGVyTmV3QmxvY2soYW5jZXN0b3JzLCBibG9ja1RvSW5zZXJ0KSk7CiAgICAgICAgIApAQCAtMzAx
LDIyICszMDEsMjIgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwog
CiAgICAgLy8gQnVpbGQgdXAgbGlzdCBvZiBhbmNlc3RvcnMgaW4gYmV0d2VlbiB0aGUgc3RhcnQg
bm9kZSBhbmQgdGhlIHN0YXJ0IGJsb2NrLgogICAgIFZlY3RvcjxFbGVtZW50Kj4gYW5jZXN0b3Jz
OwotICAgIGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKGluc2VydGlvblBvc2l0aW9uLm5vZGUoKSwg
c3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKKyAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNl
cnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOwog
CiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBjYXVzZSBhIHJlbmRlcmVkIHNwYWNlIHRvIGJl
Y29tZSB1bnJlbmRlcmVkLgogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRoZSBhZmZpbml0eSBmb3Ig
cG9zLCBidXQgcG9zLmRvd25zdHJlYW0oKSBkb2VzIG5vdCBnaXZlIGl0CiAgICAgUG9zaXRpb24g
bGVhZGluZ1doaXRlc3BhY2UgPSBpbnNlcnRpb25Qb3NpdGlvbi5sZWFkaW5nV2hpdGVzcGFjZVBv
c2l0aW9uKFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIC8vIEZJWE1FOiBsZWFkaW5nV2hpdGVz
cGFjZVBvc2l0aW9uIGlzIHJldHVybmluZyB0aGUgcG9zaXRpb24gYmVmb3JlIHByZXNlcnZlZCBu
ZXdsaW5lcyBmb3IgcG9zaXRpb25zCiAgICAgLy8gYWZ0ZXIgdGhlIHByZXNlcnZlZCBuZXdsaW5l
LCBjYXVzaW5nIHRoZSBuZXdsaW5lIHRvIGJlIHR1cm5lZCBpbnRvIGEgbmJzcC4KLSAgICBpZiAo
bGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgbGVhZGluZ1doaXRlc3BhY2Uubm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxU
ZXh0Kj4obGVhZGluZ1doaXRlc3BhY2Uubm9kZSgpKTsKKyAgICBpZiAobGVhZGluZ1doaXRlc3Bh
Y2UuaXNOb3ROdWxsKCkgJiYgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRl
eHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xs
YXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRleHROb2RlLCBs
ZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2lu
Z1NwYWNlU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4g
dGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KLSAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpKTsKKyAgICBpZiAoaW5zZXJ0aW9uUG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRl
eHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0gKHVuc2lnbmVkKWluc2VydGlvblBvc2l0aW9u
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgICAg
ICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDAgJiYg
IWF0RW5kKSB7CiAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBpbnNlcnRpb25Q
b3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKQEAgLTM0NCw4ICszNDQsOCBAQCB2
b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgICAgIGFwcGVuZE5v
ZGUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBibG9ja1RvSW5zZXJ0Lmdl
dCgpKTsKICAgICAgICAgCiAgICAgLy8gTW92ZSB0aGUgc3RhcnQgbm9kZSBhbmQgdGhlIHNpYmxp
bmdzIG9mIHRoZSBzdGFydCBub2RlLgotICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCkg
IT0gc3RhcnRCbG9jaykgewotICAgICAgICBOb2RlKiBuID0gaW5zZXJ0aW9uUG9zaXRpb24ubm9k
ZSgpOworICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpICE9IHN0YXJ0
QmxvY2spIHsKKyAgICAgICAgTm9kZSogbiA9IGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KG4pKQogICAgICAgICAgICAgbiA9IG4tPm5leHRTaWJs
aW5nKCk7CiAKQEAgLTM4MiwxMCArMzgyLDEwIEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIGluc2VydGlvblBvc2l0aW9uLm1vdmVUb09mZnNl
dCgwKTsKICAgICAgICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlvbi5pc1JlbmRlcmVkQ2hhcmFjdGVy
KCkpIHsKICAgICAgICAgICAgIC8vIENsZWFyIG91dCBhbGwgd2hpdGVzcGFjZSBhbmQgaW5zZXJ0
IG9uZSBub24tYnJlYWtpbmcgc3BhY2UKLSAgICAgICAgICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9z
aXRpb24ubm9kZSgpLT5yZW5kZXJlcigpIHx8IGluc2VydGlvblBvc2l0aW9uLm5vZGUoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkpOworICAgICAgICAgICAgQVNT
RVJUKCFpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpIHx8IGlu
c2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0
RG93bnN0cmVhbShpbnNlcnRpb25Qb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAoaW5zZXJ0aW9u
UG9zaXRpb24ubm9kZSgpLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0VGV4
dEludG9Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCkpLCAw
LCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKGluc2VydGlvblBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgICAgICBp
bnNlcnRUZXh0SW50b05vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRl
cHJlY2F0ZWROb2RlKCkpLCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICB9
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTMgKzU4LDEzIEBAIFBvc2l0
aW9uIEluc2VydFRleHRDb21tYW5kOjpwcmVwYXJlRm9yVGUKICAgICBQb3NpdGlvbiBwb3MgPSBw
OwogICAgIC8vIFByZXBhcmUgZm9yIHRleHQgaW5wdXQgYnkgbG9va2luZyBhdCB0aGUgc3BlY2lm
aWVkIHBvc2l0aW9uLgogICAgIC8vIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gaW5zZXJ0IGEgdGV4
dCBub2RlIHRvIHJlY2VpdmUgY2hhcmFjdGVycy4KLSAgICBpZiAoIXBvcy5ub2RlKCktPmlzVGV4
dE5vZGUoKSkgeworICAgIGlmICghcG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICBSZWZQdHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0
aW5nVGV4dE5vZGUoIiIpOwogICAgICAgICBpbnNlcnROb2RlQXQodGV4dE5vZGUuZ2V0KCksIHBv
cyk7CiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHROb2RlLmdldCgpKTsK
ICAgICB9CiAKLSAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLm5vZGUoKSkpIHsKKyAgICBp
ZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFJl
ZlB0cjxOb2RlPiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZUVkaXRpbmdUZXh0Tm9kZSgi
Iik7CiAgICAgICAgIGluc2VydE5vZGVBdFRhYlNwYW5Qb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwg
cG9zKTsKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkp
OwpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0
IFN0cmkKICAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIG5vZGUgdGhhdCBjb250
YWlucyBzdGFydFBvc2l0aW9uIHRvIGNvbnRhaW4gb25seSB1bnJlbmRlcmVkIHdoaXRlc3BhY2Us
CiAgICAgLy8gYW5kIHNvIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0IGNvdWxkIHJlbW92ZSBpdC4g
IFNhdmUgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgbm9kZSBpbiBjYXNlIHRoYXQgaGFwcGVucy4K
LSAgICBQb3NpdGlvbiBwb3NpdGlvbkJlZm9yZVN0YXJ0Tm9kZShwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShzdGFydFBvc2l0aW9uLm5vZGUoKSkpOworICAgIFBvc2l0aW9uIHBvc2l0aW9uQmVm
b3JlU3RhcnROb2RlKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHN0YXJ0UG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSkpOwogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KHN0YXJ0UG9zaXRp
b24udXBzdHJlYW0oKSwgc3RhcnRQb3NpdGlvbi5kb3duc3RyZWFtKCkpOwotICAgIGlmICghc3Rh
cnRQb3NpdGlvbi5ub2RlKCktPmluRG9jdW1lbnQoKSkKKyAgICBpZiAoIXN0YXJ0UG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwb3Np
dGlvbkJlZm9yZVN0YXJ0Tm9kZTsKICAgICBpZiAoIXN0YXJ0UG9zaXRpb24uaXNDYW5kaWRhdGUo
KSkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24uZG93bnN0cmVhbSgpOwpA
QCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KGNvbnN0IFN0
cmkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXBhcmVGb3JUZXh0SW5zZXJ0aW9uKHN0YXJ0
UG9zaXRpb24pOwogICAgICAgICBpZiAocGxhY2Vob2xkZXIuaXNOb3ROdWxsKCkpCiAgICAgICAg
ICAgICByZW1vdmVQbGFjZWhvbGRlckF0KHBsYWNlaG9sZGVyKTsKLSAgICAgICAgVGV4dCAqdGV4
dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHN0YXJ0UG9zaXRpb24ubm9kZSgpKTsKKyAgICAg
ICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnRQb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaW50IG9mZnNldCA9IHN0YXJ0UG9zaXRpb24uZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKTsKIAogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5v
ZGUsIG9mZnNldCwgdGV4dCk7CkBAIC0yMDksNyArMjA5LDcgQEAgUG9zaXRpb24gSW5zZXJ0VGV4
dENvbW1hbmQ6Omluc2VydFRhYihjbwogewogICAgIFBvc2l0aW9uIGluc2VydFBvcyA9IFZpc2li
bGVQb3NpdGlvbihwb3MsIERPV05TVFJFQU0pLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgICAgIAot
ICAgIE5vZGUgKm5vZGUgPSBpbnNlcnRQb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBpbnNl
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gaW5zZXJ0
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAvLyBrZWVwIHRhYnMgY29hbGVz
Y2VkIGluIHRhYiBzcGFuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTIgKzUyLDEyIEBAIHN0YXRpYyBib29sIGdldFN0YXJ0RW5kTGlzdENoaWxkcmVu
KGNvbnMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gc3RhcnQgbXVzdCBiZSBpbiBh
IGxpc3QgY2hpbGQKLSAgICBOb2RlKiBzdGFydExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGls
ZChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOworICAgIE5vZGUqIHN0YXJ0TGlzdENoaWxkID0g
ZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwog
ICAgIGlmICghc3RhcnRMaXN0Q2hpbGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CiAgICAgLy8gZW5kIG11c3QgYmUgaW4gYSBsaXN0IGNoaWxkCi0gICAgTm9kZSogZW5kTGlzdENo
aWxkID0gc2VsZWN0aW9uLmlzUmFuZ2UoKSA/IGVuY2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb24u
ZW5kKCkubm9kZSgpKSA6IHN0YXJ0TGlzdENoaWxkOworICAgIE5vZGUqIGVuZExpc3RDaGlsZCA9
IHNlbGVjdGlvbi5pc1JhbmdlKCkgPyBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uLmVuZCgp
LmRlcHJlY2F0ZWROb2RlKCkpIDogc3RhcnRMaXN0Q2hpbGQ7CiAgICAgaWYgKCFlbmRMaXN0Q2hp
bGQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE1vdmVTZWxl
Y3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50LCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGJvb2wgc21hcnRJbnNl
cnQsIGJvb2wgc21hcnREZWxldGUpIAotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQocG9zaXRp
b24ubm9kZSgpLT5kb2N1bWVudCgpKSwgbV9mcmFnbWVudChmcmFnbWVudCksIG1fcG9zaXRpb24o
cG9zaXRpb24pLCBtX3NtYXJ0SW5zZXJ0KHNtYXJ0SW5zZXJ0KSwgbV9zbWFydERlbGV0ZShzbWFy
dERlbGV0ZSkKKyAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHBvc2l0aW9uLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKSksIG1fZnJhZ21lbnQoZnJhZ21lbnQpLCBtX3Bvc2l0aW9uKHBvc2l0aW9u
KSwgbV9zbWFydEluc2VydChzbWFydEluc2VydCksIG1fc21hcnREZWxldGUoc21hcnREZWxldGUp
CiB7CiAgICAgQVNTRVJUKG1fZnJhZ21lbnQpOwogfQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIE1v
dmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBzZXQgdGhlIGRlc3RpbmF0aW9u
IHRvIHRoZSBlbmRpbmcgcG9pbnQgYWZ0ZXIgdGhlIGRlbGV0aW9uLgogICAgIC8vIEZpeGVzOiA8
cmRhcjovL3Byb2JsZW0vMzkxMDQyNT4gUkVHUkVTU0lPTiAoTWFpbCk6IENyYXNoIGluIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOyAKICAgICAvLyAgICAgICAgc2VsZWN0aW9uIGlzIGVtcHR5LCBs
ZWFkaW5nIHRvIG51bGwgZGVyZWYKLSAgICBpZiAoIXBvcy5ub2RlKCktPmluRG9jdW1lbnQoKSkK
KyAgICBpZiAoIXBvcy5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgcG9zID0g
ZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKTsKIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNp
YmxlU2VsZWN0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCwxNSArMTEwLDE1IEBAIHN0
YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVMKIHN0YXRpYyBQb3NpdGlvbiBw
b3NpdGlvbkF2b2lkaW5nUHJlY2VkaW5nTm9kZXMoUG9zaXRpb24gcG9zKQogewogICAgIC8vIElm
IHdlJ3JlIGFscmVhZHkgb24gYSBicmVhaywgaXQncyBwcm9iYWJseSBhIHBsYWNlaG9sZGVyIGFu
ZCB3ZSBzaG91bGRuJ3QgY2hhbmdlIG91ciBwb3NpdGlvbi4KLSAgICBpZiAocG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGJyVGFnKSkKICAgICAgICAgcmV0dXJuIHBvczsKIAogICAgIC8vIFdlIGFsc28gc3RvcCB3
aGVuIGNoYW5naW5nIGJsb2NrIGZsb3cgZWxlbWVudHMgYmVjYXVzZSBldmVuIHRob3VnaCB0aGUg
dmlzdWFsIHBvc2l0aW9uIGlzIHRoZQogICAgIC8vIHNhbWUuICBFLmcuLAogICAgIC8vICAgPGRp
dj5mb29ePC9kaXY+XgogICAgIC8vIFRoZSB0d28gcG9zaXRpb25zIGFib3ZlIGFyZSB0aGUgc2Ft
ZSB2aXN1YWwgcG9zaXRpb24sIGJ1dCB3ZSB3YW50IHRvIHN0YXkgaW4gdGhlIHNhbWUgYmxvY2su
Ci0gICAgTm9kZSogc3RvcE5vZGUgPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCk7Ci0gICAgd2hpbGUgKHN0b3BOb2RlICE9IHBvcy5ub2RlKCkgJiYgVmlzaWJsZVBvc2l0
aW9uKHBvcykgPT0gVmlzaWJsZVBvc2l0aW9uKHBvcy5uZXh0KCkpKQorICAgIE5vZGUqIHN0b3BO
b2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsK
KyAgICB3aGlsZSAoc3RvcE5vZGUgIT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkgJiYgVmlzaWJsZVBv
c2l0aW9uKHBvcykgPT0gVmlzaWJsZVBvc2l0aW9uKHBvcy5uZXh0KCkpKQogICAgICAgICBwb3Mg
PSBwb3MubmV4dCgpOwogICAgIHJldHVybiBwb3M7CiB9CkBAIC0xNTIsNyArMTUyLDcgQEAgUmVw
bGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTm9kZSogc3R5bGVOb2RlID0gc2VsZWN0aW9uLmJhc2UoKS5ub2RlKCk7Cisg
ICAgTm9kZSogc3R5bGVOb2RlID0gc2VsZWN0aW9uLmJhc2UoKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBob2xkZXIgPSBpbnNlcnRGcmFnbWVudEZvclRlc3RS
ZW5kZXJpbmcoc3R5bGVOb2RlKTsKICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlz
aWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgYm9vbCBoYXNN
YXRjaGluZ1F1b3RlTGV2ZWwoVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gZXhpc3RpbmcgPSBlbmRP
ZkV4aXN0aW5nQ29udGVudC5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGluc2VydGVk
ID0gZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBib29sIGlzSW5z
aWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0ZWQubm9kZSgp
KTsKKyAgICBib29sIGlzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVv
dGUoaW5zZXJ0ZWQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgcmV0dXJuIGlzSW5zaWRlTWFpbEJs
b2NrcXVvdGUgJiYgKG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhleGlzdGluZykgPT0gbnVt
RW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGluc2VydGVkKSk7CiB9CiAKQEAgLTM3OSwxMSArMzc5
LDExIEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmcKICAgICBpZiAo
aXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpICYmIHNlbGVjdGlvblN0
YXJ0V2FzSW5zaWRlTWFpbEJsb2NrcXVvdGUgJiYgaGFzTWF0Y2hpbmdRdW90ZUxldmVsKHByZXYs
IHBvc2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gIXNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBhcmFncmFwaCAmJiAKLSAg
ICAgICAgICAgIWZyYWdtZW50SGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydCAmJgotICAgICAg
ICAgICBpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkgJiYgCi0gICAg
ICAgICAgICFzdGFydE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5o
YXNUYWdOYW1lKGJyVGFnKSAmJgotICAgICAgICAgICBzaG91bGRNZXJnZShzdGFydE9mSW5zZXJ0
ZWRDb250ZW50LCBwcmV2KTsKKyAgICByZXR1cm4gIXNlbGVjdGlvblN0YXJ0V2FzU3RhcnRPZlBh
cmFncmFwaAorICAgICAgICAmJiAhZnJhZ21lbnRIYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0
CisgICAgICAgICYmIGlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KQor
ICAgICAgICAmJiAhc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpCisgICAgICAgICYmIHNob3VsZE1lcmdlKHN0
YXJ0T2ZJbnNlcnRlZENvbnRlbnQsIHByZXYpOwogfQogCiBib29sIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpzaG91bGRNZXJnZUVuZChib29sIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
KQpAQCAtMzkzLDEwICszOTMsMTAgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hv
dWxkTWVyZwogICAgIGlmIChuZXh0LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gIXNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmCi0gICAgICAgICAg
IGlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpICYmIAotICAgICAgICAgICAh
ZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmhhc1RhZ05hbWUo
YnJUYWcpICYmCi0gICAgICAgICAgIHNob3VsZE1lcmdlKGVuZE9mSW5zZXJ0ZWRDb250ZW50LCBu
ZXh0KTsKKyAgICByZXR1cm4gIXNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoCisgICAgICAg
ICYmIGlzRW5kT2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENvbnRlbnQpCisgICAgICAgICYmICFl
bmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpCisgICAgICAgICYmIHNob3VsZE1lcmdlKGVuZE9mSW5zZXJ0ZWRDb250
ZW50LCBuZXh0KTsKIH0KIAogc3RhdGljIGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUo
Y29uc3QgTm9kZSogbm9kZSkKQEAgLTQ1Myw4ICs0NTMsOCBAQCBib29sIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpzaG91bGRNZXJnCiAgICAgaWYgKHNvdXJjZS5pc051bGwoKSB8fCBkZXN0aW5h
dGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICBOb2Rl
KiBzb3VyY2VOb2RlID0gc291cmNlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwotICAgIE5vZGUq
IGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOwor
ICAgIE5vZGUqIHNvdXJjZU5vZGUgPSBzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpOworICAgIE5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2RlKiBzb3VyY2VCbG9jayA9IGVuY2xv
c2luZ0Jsb2NrKHNvdXJjZU5vZGUpOwogICAgIE5vZGUqIGRlc3RpbmF0aW9uQmxvY2sgPSBlbmNs
b3NpbmdCbG9jayhkZXN0aW5hdGlvbk5vZGUpOwogICAgIHJldHVybiAhZW5jbG9zaW5nTm9kZU9m
VHlwZShzb3VyY2UuZGVlcEVxdWl2YWxlbnQoKSwgJmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2Rl
KSAmJgpAQCAtNzQwLDcgKzc0MCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1l
cmdlRW5kSWYKICAgICAvLyBUbyBhdm9pZCB0aGlzLCB3ZSBhZGQgYSBwbGFjZWhvbGRlciBub2Rl
IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaC4KICAgICBpZiAoZW5kT2ZQYXJhZ3Jh
cGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSkgPT0gZGVzdGluYXRpb24pIHsKICAgICAgICAgUmVm
UHRyPE5vZGU+IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwot
ICAgICAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVyLCBzdGFydE9mUGFyYWdyYXBoVG9N
b3ZlLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShw
bGFjZWhvbGRlciwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgICAgICBkZXN0aW5hdGlvbiA9IFZpc2libGVQb3NpdGlvbihwb3Np
dGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIuZ2V0KCkpKTsKICAgICB9CiAKQEAgLTc1MSw5ICs3
NTEsOSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZUVuZElmCiAgICAgLy8g
b25seSBldmVyIHVzZWQgdG8gY3JlYXRlIHBvc2l0aW9ucyB3aGVyZSBpbnNlcnRlZCBjb250ZW50
IHN0YXJ0cy9lbmRzLiAgQWxzbywgd2Ugc29tZXRpbWVzIGluc2VydCBjb250ZW50CiAgICAgLy8g
ZGlyZWN0bHkgaW50byB0ZXh0IG5vZGVzIGFscmVhZHkgaW4gdGhlIGRvY3VtZW50LCBpbiB3aGlj
aCBjYXNlIHRyYWNraW5nIGluc2VydGVkIG5vZGVzIGlzIGluYWRlcXVhdGUuCiAgICAgaWYgKG1l
cmdlRm9yd2FyZCkgewotICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBkZXN0aW5hdGlvbi5w
cmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBtX2xhc3RMZWFmSW5z
ZXJ0ZWQgPSBkZXN0aW5hdGlvbi5wcmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKTsKICAgICAgICAgaWYgKCFtX2ZpcnN0Tm9kZUluc2VydGVkLT5pbkRvY3VtZW50KCkp
Ci0gICAgICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgICAgICAvLyBJZiB3ZSBtZXJnZWQgdGV4dCBu
b2RlcywgbV9sYXN0TGVhZkluc2VydGVkIGNvdWxkIGJlIG51bGwuIElmIHRoaXMgaXMgdGhlIGNh
c2UsCiAgICAgICAgIC8vIHdlIHVzZSBtX2ZpcnN0Tm9kZUluc2VydGVkLgogICAgICAgICBpZiAo
IW1fbGFzdExlYWZJbnNlcnRlZCkKQEAgLTc4MCw4ICs3ODAsOCBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
biA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgIEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFu
Z2UoKSk7Ci0gICAgQVNTRVJUKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSk7Ci0gICAgaWYgKCFz
ZWxlY3Rpb24uaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpIHx8ICFzZWxlY3Rpb24uc3RhcnQo
KS5ub2RlKCkpCisgICAgQVNTRVJUKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkp
OworICAgIGlmICghc2VsZWN0aW9uLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSB8fCAhc2Vs
ZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGJvb2wgc2VsZWN0aW9uSXNQbGFpblRleHQgPSAhc2VsZWN0aW9uLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCk7CkBAIC03OTMsOCArNzkzLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBXZSBjYW4gc2tp
cCBtYXRjaGluZyB0aGUgc3R5bGUgaWYgdGhlIHNlbGVjdGlvbiBpcyBwbGFpbiB0ZXh0LgotICAg
IGlmICgoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5yZW5kZXJlcigpICYmIHNlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJFQURf
V1JJVEVfUExBSU5URVhUX09OTFkpICYmCi0gICAgICAgIChzZWxlY3Rpb24uZW5kKCkubm9kZSgp
LT5yZW5kZXJlcigpICYmIHNlbGVjdGlvbi5lbmQoKS5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZKSkKKyAgICBpZiAo
KHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc2VsZWN0
aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1v
ZGlmeSgpID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFkpCisgICAgICAgICYmIChzZWxlY3Rp
b24uZW5kKCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzZWxlY3Rpb24uZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJF
QURfV1JJVEVfUExBSU5URVhUX09OTFkpKQogICAgICAgICBtX21hdGNoU3R5bGUgPSBmYWxzZTsK
ICAgICAKICAgICBpZiAobV9tYXRjaFN0eWxlKQpAQCAtODA2LDEwICs4MDYsMTAgQEAgdm9pZCBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgYm9vbCBzZWxlY3Rpb25FbmRX
YXNFbmRPZlBhcmFncmFwaCA9IGlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZUVuZCk7CiAgICAgYm9v
bCBzZWxlY3Rpb25TdGFydFdhc1N0YXJ0T2ZQYXJhZ3JhcGggPSBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
dmlzaWJsZVN0YXJ0KTsKICAgICAKLSAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxv
Y2sodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBOb2RlKiBzdGFy
dEJsb2NrID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0
aW9uLnN0YXJ0KCk7Ci0gICAgYm9vbCBzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFy
ZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0aW9uUG9zLm5vZGUoKSk7CisgICAgYm9vbCBzdGFydElz
SW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0aW9uUG9z
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIAogICAgIGlmICgoc2VsZWN0aW9uU3RhcnRXYXNTdGFy
dE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBoICYmICFzdGFydElz
SW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAgIHN0YXJ0QmxvY2sgPT0gY3VycmVudFJv
b3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rpb25Jc1BsYWluVGV4dCkKQEAg
LTg2Miw3ICs4NjIsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkK
ICAgICBpZiAoc3RhcnRJc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIG1fcHJldmVudE5lc3Rpbmcg
JiYgIShlbmNsb3NpbmdOb2RlT2ZUeXBlKGluc2VydGlvblBvcywgJmlzVGFibGVTdHJ1Y3R1cmVO
b2RlKSkpIHsgCiAgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEJyZWFrQmxvY2txdW90
ZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7IAogICAgICAgICAvLyBUaGlzIHdpbGwgbGVh
dmUgYSBiciBiZXR3ZWVuIHRoZSBzcGxpdC4gCi0gICAgICAgIE5vZGUqIGJyID0gZW5kaW5nU2Vs
ZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7IAorICAgICAgICBOb2RlKiBiciA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsgCiAgICAgICAgIEFTU0VSVChici0+aGFz
VGFnTmFtZShiclRhZykpOyAKICAgICAgICAgLy8gSW5zZXJ0IGNvbnRlbnQgYmV0d2VlbiB0aGUg
dHdvIGJsb2NrcXVvdGVzLCBidXQgcmVtb3ZlIHRoZSBiciAoc2luY2UgaXQgd2FzIGp1c3QgYSBw
bGFjZWhvbGRlcikuIAogICAgICAgICBpbnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVm
b3JlTm9kZShicik7CkBAIC04NzMsMTggKzg3MywxOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxp
dChpbnNlcnRpb25Qb3MpOwogCiAgICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gbm9kZSBoYXMgYmVl
biByZW1vdmVkIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY29udGludWluZy4KLSAgICBpZiAoIWluc2Vy
dGlvblBvcy5kb3duc3RyZWFtKCkubm9kZSgpKQorICAgIGlmICghaW5zZXJ0aW9uUG9zLmRvd25z
dHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIE5P
VEU6IFRoaXMgd291bGQgYmUgYW4gaW5jb3JyZWN0IHVzYWdlIG9mIGRvd25zdHJlYW0oKSBpZiBk
b3duc3RyZWFtKCkgd2VyZSBjaGFuZ2VkIHRvIG1lYW4gdGhlIGxhc3QgcG9zaXRpb24gYWZ0ZXIg
CiAgICAgLy8gcCB0aGF0IG1hcHMgdG8gdGhlIHNhbWUgdmlzaWJsZSBwb3NpdGlvbiBhcyBwIChz
aW5jZSBpbiB0aGUgY2FzZSB3aGVyZSBhIGJyIGlzIGF0IHRoZSBlbmQgb2YgYSBibG9jayBhbmQg
Y29sbGFwc2VkIAogICAgIC8vIGF3YXksIHRoZXJlIGFyZSBwb3NpdGlvbnMgYWZ0ZXIgdGhlIGJy
IHdoaWNoIG1hcCB0byB0aGUgc2FtZSB2aXNpYmxlIHBvc2l0aW9uIGFzIFticiwgMF0pLiAgCi0g
ICAgTm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKS0+aGFzVGFn
TmFtZShiclRhZykgPyBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKSA6IDA7CisgICAg
Tm9kZSogZW5kQlIgPSBpbnNlcnRpb25Qb3MuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5kZXByZWNhdGVk
Tm9kZSgpIDogMDsKICAgICBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxWaXNQb3NCZWZvcmVFbmRC
UjsKICAgICBpZiAoZW5kQlIpCiAgICAgICAgIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIgPSBW
aXNpYmxlUG9zaXRpb24oZW5kQlIsIDAsIERPV05TVFJFQU0pLnByZXZpb3VzKCk7CiAgICAgCi0g
ICAgc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5ub2RlKCkpOworICAg
IHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgCiAgICAgLy8gQWRqdXN0IGluc2VydGlvblBvcyB0byBwcmV2ZW50IG5lc3Rpbmcu
CiAgICAgLy8gSWYgdGhlIHN0YXJ0IHdhcyBpbiBhIE1haWwgYmxvY2txdW90ZSwgd2Ugd2lsbCBo
YXZlIGFscmVhZHkgaGFuZGxlZCBhZGp1c3RpbmcgaW5zZXJ0aW9uUG9zIGFib3ZlLgpAQCAtOTM5
LDcgKzkzOSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
IAogICAgIGZyYWdtZW50LnJlbW92ZU5vZGUocmVmTm9kZSk7CiAKLSAgICBOb2RlKiBibG9ja1N0
YXJ0ID0gZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLm5vZGUoKSk7CisgICAgTm9kZSogYmxv
Y2tTdGFydCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBpZiAoKGlzTGlzdEVsZW1lbnQocmVmTm9kZS5nZXQoKSkgfHwgKGlzU3R5bGVTcGFuKHJl
Zk5vZGUuZ2V0KCkpICYmIGlzTGlzdEVsZW1lbnQocmVmTm9kZS0+Zmlyc3RDaGlsZCgpKSkpCiAg
ICAgICAgICYmIGJsb2NrU3RhcnQtPnJlbmRlcmVyKCktPmlzTGlzdEl0ZW0oKSkKICAgICAgICAg
cmVmTm9kZSA9IGluc2VydEFzTGlzdEl0ZW1zKHJlZk5vZGUsIGJsb2NrU3RhcnQsIGluc2VydGlv
blBvcyk7CkBAIC05ODMsNyArOTgzLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgCiAgICAgLy8gV2UgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBzdGFydEJsb2Nr
IHRvIHByZXZlbnQgbmVzdGluZywgYW5kIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgc3RhcnRCbG9j
ayB3YXNuJ3QgaW4gaXRzIG93biBibG9jayBhbmQKICAgICAvLyBkaWRuJ3QgaGF2ZSBhIGJyIGFm
dGVyIGl0LCBzbyB0aGUgaW5zZXJ0ZWQgY29udGVudCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwYXJh
Z3JhcGguCi0gICAgaWYgKHN0YXJ0QmxvY2sgJiYgaW5zZXJ0aW9uUG9zLm5vZGUoKSA9PSBzdGFy
dEJsb2NrLT5wYXJlbnROb2RlKCkgJiYgKHVuc2lnbmVkKWluc2VydGlvblBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIDwgc3RhcnRCbG9jay0+bm9kZUluZGV4KCkgJiYgIWlzU3RhcnRPZlBh
cmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSkKKyAgICBpZiAoc3RhcnRCbG9jayAmJiBp
bnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSA9PSBzdGFydEJsb2NrLT5wYXJlbnROb2RlKCkg
JiYgKHVuc2lnbmVkKWluc2VydGlvblBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDwgc3Rh
cnRCbG9jay0+bm9kZUluZGV4KCkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0
ZWRDb250ZW50KSkKICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKS5nZXQoKSwgc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpKTsK
ICAgICAKICAgICBQb3NpdGlvbiBsYXN0UG9zaXRpb25Ub1NlbGVjdDsKQEAgLTEwMDMsNyArMTAw
Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAv
LyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBuZWVkIHRvIG1lcmdlIHRoZSBl
bmQKICAgICAgICAgLy8gYnV0IG91ciBkZXN0aW5hdGlvbiBub2RlIGlzIGluc2lkZSBhbiBpbmxp
bmUgdGhhdCBpcyB0aGUgbGFzdCBpbiB0aGUgYmxvY2suCiAgICAgICAgIC8vIFdlIGluc2VydCBh
IHBsYWNlaG9sZGVyIGJlZm9yZSB0aGUgbmV3bHkgaW5zZXJ0ZWQgY29udGVudCB0byBhdm9pZCBi
ZWluZyBtZXJnZWQgaW50byB0aGUgaW5saW5lLgotICAgICAgICBOb2RlKiBkZXN0aW5hdGlvbk5v
ZGUgPSBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgTm9kZSog
ZGVzdGluYXRpb25Ob2RlID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpOwogICAgICAgICBpZiAobV9zaG91bGRNZXJnZUVuZCAmJiBkZXN0aW5hdGlvbk5vZGUg
IT0gZW5jbG9zaW5nSW5saW5lKGRlc3RpbmF0aW9uTm9kZSkgJiYgZW5jbG9zaW5nSW5saW5lKGRl
c3RpbmF0aW9uTm9kZSktPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgcmVmTm9kZS5nZXQoKSk7CiAgICAg
ICAgIApAQCAtMTAxOCwxNiArMTAxOCwxNiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoZW5kT2ZJbnNlcnRlZENv
bnRlbnQpID09IHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUpIHsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBdChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSkuZ2V0KCksIGVuZE9mSW5zZXJ0ZWRD
b250ZW50LmRlZXBFcXVpdmFsZW50KCkpOwogICAgICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRz
IChidWcgMjI2MzQpIHRyaWdnZXJlZCBieSBpbnNlcnRpbmcgdGhlIDxicj4gbWlnaHQgaGF2ZSBy
ZW1vdmVkIHRoZSBjb250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKLSAgICAgICAgICAgIGlmICgh
c3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVu
dCgpKQorICAgICAgICAgICAgaWYgKCFzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFs
ZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IE1haW50YWluIHBvc2l0aW9ucyBmb3Ig
dGhlIHN0YXJ0IGFuZCBlbmQgb2YgaW5zZXJ0ZWQgY29udGVudCBpbnN0ZWFkIG9mIGtlZXBpbmcg
bm9kZXMuICBUaGUgbm9kZXMgYXJlCiAgICAgICAgIC8vIG9ubHkgZXZlciB1c2VkIHRvIGNyZWF0
ZSBwb3NpdGlvbnMgd2hlcmUgaW5zZXJ0ZWQgY29udGVudCBzdGFydHMvZW5kcy4KICAgICAgICAg
bW92ZVBhcmFncmFwaChzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLCBlbmRPZlBhcmFncmFwaChzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlKSwgZGVzdGluYXRpb24pOwotICAgICAgICBtX2ZpcnN0Tm9kZUlu
c2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kb3duc3RyZWFtKCkubm9kZSgpOworICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gZW5k
aW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFt
KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKCFtX2xhc3RMZWFmSW5zZXJ0ZWQtPmlu
RG9jdW1lbnQoKSkKLSAgICAgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVFbmQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkubm9kZSgpOwor
ICAgICAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJs
ZUVuZCgpLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwogICAg
IH0KICAgICAgICAgICAgIAogICAgIGVuZE9mSW5zZXJ0ZWRDb250ZW50ID0gcG9zaXRpb25BdEVu
ZE9mSW5zZXJ0ZWRDb250ZW50KCk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgaWYgKHNlbGVjdGlvbkVuZFdhc0Vu
ZE9mUGFyYWdyYXBoIHx8ICFpc0VuZE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250ZW50KSB8
fCBuZXh0LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzU3RhcnRPZlBhcmFncmFwaChl
bmRPZkluc2VydGVkQ29udGVudCkpIHsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oZW5kT2ZJbnNlcnRlZENvbnRlbnQpOwotICAgICAgICAgICAgICAgIE5vZGUqIGVuY2xvc2lu
Z05vZGUgPSBlbmNsb3NpbmdCbG9jayhlbmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogZW5jbG9zaW5nTm9kZSA9IGVuY2xv
c2luZ0Jsb2NrKGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGlzdEl0ZW0oZW5jbG9zaW5nTm9kZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5ld0xpc3RJdGVtID0gY3JlYXRl
TGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlQWZ0ZXIobmV3TGlzdEl0ZW0sIGVuY2xvc2luZ05vZGUpOwpAQCAtMTA1MSw3ICsxMDUxLDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAgICAgICAg
ICAgICAvLyBTZWxlY3QgdXAgdG8gdGhlIHBhcmFncmFwaCBzZXBhcmF0b3IgdGhhdCB3YXMgYWRk
ZWQuCiAgICAgICAgICAgICAgICAgbGFzdFBvc2l0aW9uVG9TZWxlY3QgPSBlbmRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICAgICAgICAgIHVw
ZGF0ZU5vZGVzSW5zZXJ0ZWQobGFzdFBvc2l0aW9uVG9TZWxlY3Qubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVOb2Rlc0luc2VydGVkKGxhc3RQb3NpdGlvblRvU2VsZWN0LmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gU2VsZWN0IHVwIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcGFyYWdyYXBoLgpAQCAt
MTA3OSw3ICsxMDc5LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgICAgIGlmIChuZWVkc1RyYWlsaW5nU3BhY2UpIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCk7CiAgICAgICAg
ICAgICBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5
bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBOb2RlKiBlbmROb2RlID0g
cG9zaXRpb25BdEVuZE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVh
bSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBwb3NpdGlvbkF0RW5kT2ZJ
bnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICAgICAgICAgIGlmIChlbmROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAg
ICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZE5vZGUpOwogICAgICAg
ICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgY29sbGFw
c2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKQEAgLTEwOTQs
NyArMTA5NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBtX2xhc3RMZWFmSW5zZXJ0ZWQtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBi
b29sIGNvbGxhcHNlV2hpdGVTcGFjZSA9ICFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCk7Ci0gICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3Np
dGlvbkF0U3RhcnRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVh
bSgpLm5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHBvc2l0aW9uQXRTdGFy
dE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICAgICAgICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewog
ICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnROb2Rl
KTsKICAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgMCwgY29sbGFwc2VX
aGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKQEAgLTEyMTIsOSAr
MTIxMiw5IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0wKICAgICAv
LyBsaXN0IGl0ZW1zIGFuZCBpbnNlcnQgdGhlc2Ugbm9kZXMgYmV0d2VlbiB0aGVtLgogICAgIGlm
IChpc01pZGRsZSkgewogICAgICAgICBpbnQgdGV4dE5vZGVPZmZzZXQgPSBpbnNlcnRQb3Mub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7Ci0gICAgICAgIGlmIChpbnNlcnRQb3Mubm9kZSgpLT5pc1Rl
eHROb2RlKCkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQotICAgICAgICAgICAgc3BsaXRUZXh0Tm9k
ZShzdGF0aWNfY2FzdDxUZXh0Kj4oaW5zZXJ0UG9zLm5vZGUoKSksIHRleHROb2RlT2Zmc2V0KTsK
LSAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5ub2RlKCksIGxhc3ROb2RlLCB0cnVl
KTsKKyAgICAgICAgaWYgKGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkg
JiYgdGV4dE5vZGVPZmZzZXQgPiAwKQorICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNf
Y2FzdDxUZXh0Kj4oaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7
CisgICAgICAgIHNwbGl0VHJlZVRvTm9kZShpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgbGFz
dE5vZGUsIHRydWUpOwogICAgIH0KIAogICAgIHdoaWxlIChSZWZQdHI8Tm9kZT4gbGlzdEl0ZW0g
PSBsaXN0RWxlbWVudC0+Zmlyc3RDaGlsZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0
aW9uKGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5vZGUqIGJhc2VOb2RlID0gcy5i
YXNlKCkubm9kZSgpOworICAgIE5vZGUqIGJhc2VOb2RlID0gcy5iYXNlKCkuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAwOwogICAgIGlmIChiYXNlTm9kZSkKICAg
ICAgICAgZG9jdW1lbnQgPSBiYXNlTm9kZS0+ZG9jdW1lbnQoKTsKQEAgLTIwNCwxNyArMjA0LDE3
IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0U2VsZWN0aW9uKGMKIAogc3RhdGljIGJv
b2wgcmVtb3ZpbmdOb2RlUmVtb3Zlc1Bvc2l0aW9uKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKIHsKLSAgICBpZiAoIXBvc2l0aW9uLm5vZGUoKSkKKyAgICBpZiAoIXBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChw
b3NpdGlvbi5ub2RlKCkgPT0gbm9kZSkKKyAgICBpZiAocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSA9PSBub2RlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5jb250
YWlucyhwb3NpdGlvbi5ub2RlKCkpIHx8IGVsZW1lbnQtPmNvbnRhaW5zKHBvc2l0aW9uLm5vZGUo
KS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOworICAgIHJldHVybiBlbGVtZW50LT5jb250YWlucyhw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSk7CiB9CiAKIHZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSAqbm9kZSkKQEAgLTI2Miw3ICsy
NjIsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb05vZGVNCiAgICAgfQog
CiAgICAgaWYgKGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewotICAgICAgICBSZWZQdHI8RG9j
dW1lbnQ+IGRvY3VtZW50ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50KCk7
CisgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX3NlbGVjdGlvbi5zdGFydCgp
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXco
ZG9jdW1lbnQtPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24o
KTsKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OndpbGxCZU1v
ZGlmaWVkCiAKIFRleHREaXJlY3Rpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6ZGlyZWN0aW9uT2ZF
bmNsb3NpbmdCbG9jaygpCiB7Ci0gICAgTm9kZSogZW5jbG9zaW5nQmxvY2tOb2RlID0gZW5jbG9z
aW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkubm9kZSgpKTsKKyAgICBOb2RlKiBlbmNsb3Np
bmdCbG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhtX3NlbGVjdGlvbi5leHRlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICBpZiAoIWVuY2xvc2luZ0Jsb2NrTm9kZSkKICAgICAgICAgcmV0dXJu
IExUUjsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZW5jbG9zaW5nQmxvY2tOb2RlLT5y
ZW5kZXJlcigpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIGludCBTZWxlY3Rpb25Db250cm9sbGVyOjp4
UG9zRm9yVmVydGljYWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1l
ID0gcG9zLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBw
b3MuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiB4OwogICAgICAgICAKQEAgLTk5OCwxOSArOTk4LDE5IEBAIHZvaWQgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6c2V0Q2FyZXRSZWN0TmUKIAogdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjp1cGRhdGVDYXJldFJlY3QoKQogewotICAgIGlmIChpc05vbmUoKSB8fCAhbV9zZWxlY3Rp
b24uc3RhcnQoKS5ub2RlKCktPmluRG9jdW1lbnQoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkubm9k
ZSgpLT5pbkRvY3VtZW50KCkpIHsKKyAgICBpZiAoaXNOb25lKCkgfHwgIW1fc2VsZWN0aW9uLnN0
YXJ0KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLmFu
Y2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIG1fY2FyZXRSZWN0ID0gSW50UmVj
dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zZWxlY3Rpb24uc3RhcnQoKS5u
b2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKKyAgICBtX3NlbGVjdGlv
bi5zdGFydCgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogICAgIAogICAgIG1fY2FyZXRSZWN0ID0gSW50UmVjdCgpOwogICAgICAgICAKICAgICBpZiAo
aXNDYXJldCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MobV9zZWxlY3Rpb24uc3Rh
cnQoKSwgbV9zZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiAgICAgICAgIGlmIChwb3MuaXNOb3ROdWxs
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJl
bmRlcmVyKCkpOworICAgICAgICAgICAgQVNTRVJUKHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBG
aXJzdCBjb21wdXRlIGEgcmVjdCBsb2NhbCB0byB0aGUgcmVuZGVyZXIgYXQgdGhlIHNlbGVjdGlv
biBzdGFydAogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlcjsKQEAgLTEwNDQsNyAr
MTA0NCw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6dXBkYXRlQ2FyZXRSZWMKIAogUmVu
ZGVyT2JqZWN0KiBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlbmRlcmVyKCkgY29uc3QKIHsK
LSAgICBOb2RlKiBub2RlID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMTUxLDcgKzExNTEsNyBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmludmFsaWRhdGVDYXJlCiAgICAgaWYgKCFpc0NhcmV0KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIERvY3VtZW50KiBkID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5ub2Rl
KCktPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGQgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmFu
Y2hvck5vZGUoKS0+ZG9jdW1lbnQoKTsKIAogICAgIC8vIHJlY29tcHV0ZUNhcmV0UmVjdCB3aWxs
IGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIHRoZSBkcmFnIGNhcmV0LAogICAgIC8vIGJlY2F1c2Ug
aXRzIG1fZnJhbWUgaXMgYWx3YXlzIDAuCkBAIC0xMjI5LDkgKzEyMjksOSBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoCiAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0g
dGV4dC5sZW5ndGgoKTsKICAgICAgICAgaWYgKHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCkpCisgICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0
YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBtX3NlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICBlbHNl
IGlmIChyLT5ub2RlKCkgPT0gbV9zZWxlY3Rpb24uZW5kKCkubm9kZSgpKQorICAgICAgICAgICAg
ZWxzZSBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWROb2RlKCkp
CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGludCBwb3M7CkBA
IC0xNDI5LDcgKzE0MjksNyBAQCBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGVk
UmFuCiAKIGJvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6aXNJblBhc3N3b3JkRmllbGQoKSBjb25z
dAogewotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0KCkubm9kZSgpOworICAgIE5vZGUqIHN0
YXJ0Tm9kZSA9IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNTc1LDggKzE1NzUsOCBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFwcGVhcmFuCiAgICAgLy8gV2UgY2FuIGdldCBpbnRvIGEg
c3RhdGUgd2hlcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgbWFwIHRvIHRoZSBzYW1lIFZpc2li
bGVQb3NpdGlvbiB3aGVuIGEgc2VsZWN0aW9uIGlzIGRlbGV0ZWQKICAgICAvLyBiZWNhdXNlIHdl
IGRvbid0IHlldCBub3RpZnkgdGhlIFNlbGVjdGlvbkNvbnRyb2xsZXIgb2YgdGV4dCByZW1vdmFs
LgogICAgIGlmIChzdGFydFBvcy5pc05vdE51bGwoKSAmJiBlbmRQb3MuaXNOb3ROdWxsKCkgJiYg
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpICE9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpIHsKLSAg
ICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3RhcnRQb3Mubm9kZSgpLT5yZW5k
ZXJlcigpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLm5vZGUo
KS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0gc3Rh
cnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAg
ICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRQb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmVuZGVyZXIsIGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKTsKICAgICB9CiB9CkBAIC0xNjc3LDcgKzE2NzcsNyBAQCB2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciogZHJhZ0NhcmV0Q29udHJvbGxlciA9IG1fZnJhbWUtPnBhZ2UoKS0+
ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwogICAgIEFTU0VSVChkcmFnQ2FyZXRDb250cm9sbGVyLT5z
ZWxlY3Rpb24oKS5pc0NhcmV0KCkpOwotICAgIGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQor
ICAgIGlmIChkcmFnQ2FyZXRDb250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpLmFuY2hvck5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA9PSBtX2ZyYW1lKQogICAgICAgICBkcmFnQ2FyZXRD
b250cm9sbGVyLT5wYWludENhcmV0KHAsIHR4LCB0eSwgY2xpcFJlY3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ocCk7CkBAIC0xNzUxLDcgKzE3NTEsNyBAQCBIVE1MRm9ybUVsZW1lbnQqIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmN1CiAgICAgLy8gU3RhcnQgbG9va2luZyBlaXRoZXIgYXQgdGhl
IGFjdGl2ZSAoZmlyc3QgcmVzcG9uZGVyKSBub2RlLCBvciB3aGVyZSB0aGUgc2VsZWN0aW9uIGlz
LgogICAgIE5vZGUqIHN0YXJ0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkubm9kZSgpOwor
ICAgICAgICBzdGFydCA9IHRoaXMtPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIC8v
IFRyeSB3YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudC4KICAg
ICBOb2RlKiBub2RlOwpAQCAtMTc4MiwxMiArMTc4MiwxMiBAQCB2b2lkIFNlbGVjdGlvbkNvbnRy
b2xsZXI6OnJldmVhbFNlbGVjdGlvCiAgICAgfQogCiAgICAgUG9zaXRpb24gc3RhcnQgPSB0aGlz
LT5zdGFydCgpOwotICAgIEFTU0VSVChzdGFydC5ub2RlKCkpOwotICAgIGlmIChzdGFydC5ub2Rl
KCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpKSB7CisgICAgQVNTRVJUKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpOworICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBvbmx5IGhhbmRsZXMgc2Nyb2xsaW5nIHRoZSBzdGFydENvbnRhaW5lcidzIGxheWVyLCBidXQK
ICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiByZWN0IGNvdWxkIGludGVyc2VjdCBtb3JlIHRoYW4g
anVzdCB0aGF0LgogICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ3OTk4OTk+LgotICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50
LCBhbGlnbm1lbnQpOwogICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTZXRTZWxlY3Rpb25Db21tYW5kOjpTZXRTZWxlY3Rpb25Db21tYW5kKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgU2VsZWN0aW9uQ29udHJvbGxlcjo6U2V0
U2VsZWN0aW9uT3B0aW9ucyBvcHRpb25zKQotICAgIDogU2ltcGxlRWRpdENvbW1hbmQoc2VsZWN0
aW9uLmJhc2UoKS5ub2RlKCktPmRvY3VtZW50KCkpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChz
ZWxlY3Rpb24uYmFzZSgpLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSkKICAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQogICAgICwgbV9zZWxlY3Rpb25Ub1NldChzZWxlY3Rpb24pCiB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM0Niw3ICsyMzQ2LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZybwogICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbiBydW5FbmQgPSBWaXNpYmxlUG9zaXRp
b24ocnVuU3RhcnQpLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAocnVuRW5kLmlzTm90TnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW5SYW5nZS0+
c2V0RW5kKHJ1bkVuZC5ub2RlKCksIHJ1bkVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
Yyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNldEVuZChydW5FbmQu
ZGVwcmVjYXRlZE5vZGUoKSwgcnVuRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqCiAgICAgVmlzaWJsZVNlbGVjdGlv
biBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKICAg
ICBib29sIGNoYW5nZVNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb24gIT0gc2VsZWN0aW9uRm9y
SW5zZXJ0aW9uOwogICAgIFN0cmluZyBuZXdUZXh0ID0gdGV4dDsKLSAgICBOb2RlKiBzdGFydE5v
ZGUgPSBzZWxlY3Rpb25Gb3JJbnNlcnRpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc3Rh
cnROb2RlID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICAKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpICYmIGNvbXBvc2l0aW9uVHlwZSAhPSBUZXh0Q29tcG9zaXRpb25VcGRhdGUpIHsKICAgICAg
ICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50IGhhbmRsZXIgd2ls
bCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleAogCiAgICAgICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlU3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIGEgY2FyZXQgc2VsZWN0aW9uIG9uIGFuIGVtcHR5IGNlbGwsIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICAgICAgaWYgKGlzRW1wdHlUYWJsZUNlbGwodmlzaWJsZVN0
YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkKKyAgICAgICAgaWYgKGlzRW1wdHlUYWJsZUNl
bGwodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gSWYgdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFy
dCBvZiBhIHBhcmFncmFwaCBhZnRlciBhIHRhYmxlLCBtb3ZlIGNvbnRlbnQgaW50byB0aGUgbGFz
dCB0YWJsZSBjZWxsLgpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChUZXgKIAogICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IHNlbGVjdGlv
bi5zZWxlY3Rpb24oKTsKIAotICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgpID09IHNlbGVjdGlvblRv
RGVsZXRlLnN0YXJ0KCkubm9kZSgpICYmIHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPiAxKSB7CisgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0
ZXJHcmFudWxhcml0eSAmJiBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgp
ID09IHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSAmJiBzZWxlY3Rp
b25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc2VsZWN0aW9uVG9E
ZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIFVuaWNvZGUgY29kZSBwb2ludHMgdG8gYmUgZGVs
ZXRlZCwgYWRqdXN0IHRoZSByYW5nZSB0byBtYXRjaCBwbGF0Zm9ybSBjb252ZW50aW9ucy4KICAg
ICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlLnNldFdpdGhvdXRWYWxpZGF0aW9uKHNlbGVjdGlv
blRvRGVsZXRlLmVuZCgpLCBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5wcmV2aW91cyhCYWNrd2Fy
ZERlbGV0aW9uKSk7CiAgICAgICAgIH0KQEAgLTU3MCw4ICs1NzAsOCBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgIGlmICh2aXNpYmxlRW5kID09IGVu
ZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpKQogICAgICAgICAgICAgZG93bnN0cmVhbUVuZCA9IHZp
c2libGVFbmQubmV4dCh0cnVlKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKICAgICAg
ICAgLy8gV2hlbiBkZWxldGluZyB0YWJsZXM6IFNlbGVjdCB0aGUgdGFibGUgZmlyc3QsIHRoZW4g
cGVyZm9ybSB0aGUgZGVsZXRpb24KLSAgICAgICAgaWYgKGRvd25zdHJlYW1FbmQubm9kZSgpICYm
IGRvd25zdHJlYW1FbmQubm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW1FbmQubm9kZSgp
LT5yZW5kZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkgewotICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb24oZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZShkb3duc3RyZWFtRW5kLm5vZGUoKSksIERPV05TVFJFQU0pKTsKKyAgICAgICAgaWYgKGRv
d25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSAmJiBkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpLT5pc1RhYmxlKCkgJiYgIWRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSkgeworICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
ZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCksIGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShk
b3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAg
ICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTU4OCwxNSArNTg4LDE1IEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXMKICAgICAgICAgICAgIC8vIFdlIGNhbid0IGxldCB0
aGUgVmlzaWJsZVNlbGVjdGlvbiBjbGFzcydzIHZhbGlkYXRpb24ga2ljayBpbiBvciBpdCdsbCBh
ZGp1c3QgZm9yIHVzIGJhc2VkIG9uCiAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBzdGF0ZSBv
ZiB0aGUgZG9jdW1lbnQgYW5kIHdlJ2xsIGdldCB0aGUgd3JvbmcgcmVzdWx0LgogICAgICAgICAg
ICAgUG9zaXRpb24gZXh0ZW50ID0gc3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKLSAgICAgICAg
ICAgIGlmIChleHRlbnQubm9kZSgpICE9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKSkK
KyAgICAgICAgICAgIGlmIChleHRlbnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBzZWxlY3Rpb25Ub0Rl
bGV0ZS5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgICAgIGV4dGVudCA9IHNl
bGVjdGlvblRvRGVsZXRlLmV4dGVudCgpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaW50IGV4dHJhQ2hhcmFjdGVyczsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuc3RhcnQoKS5ub2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkubm9kZSgp
KQorICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0
ZWROb2RlKCkgPT0gc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFDaGFyYWN0ZXJzID0gc2VsZWN0aW9uVG9EZWxldGUuZW5k
KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHNlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCku
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhQ2hhcmFjdGVycyA9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgZXh0ZW50ID0gUG9zaXRp
b24oZXh0ZW50Lm5vZGUoKSwgZXh0ZW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBleHRy
YUNoYXJhY3RlcnMsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAg
ICAgICAgICAgIGV4dGVudCA9IFBvc2l0aW9uKGV4dGVudC5kZXByZWNhdGVkTm9kZSgpLCBleHRl
bnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSArIGV4dHJhQ2hhcmFjdGVycywgUG9zaXRpb246
OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBz
ZWxlY3Rpb25BZnRlclVuZG8uc2V0V2l0aG91dFZhbGlkYXRpb24oc3RhcnRpbmdTZWxlY3Rpb24o
KS5zdGFydCgpLCBleHRlbnQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcg
KzEwNiw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnByZXZpb3UKIFBvc2l0
aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUoKSBjb25z
dAogewogICAgIFBvc2l0aW9uIHAgPSBtX2RlZXBQb3NpdGlvbjsKLSAgICBpZiAoIXAubm9kZSgp
KQorICAgIGlmICghcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24o
KTsKIAogICAgIFBvc2l0aW9uIGRvd25zdHJlYW1TdGFydCA9IHAuZG93bnN0cmVhbSgpOwpAQCAt
MjQyLDcgKzI0Miw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmxlZnQoYm8K
IFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRl
KCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFw
Lm5vZGUoKSkKKyAgICBpZiAoIXAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0o
KTsKQEAgLTM4NCw3ICszODQsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpo
b25vckVkCiAgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGRlZXBF
cXVpdmFsZW50KCkpOwogICAgIAogICAgIC8vIFJldHVybiBlbXB0eSBwb3NpdGlvbiBpZiBwb3Mg
aXMgbm90IHNvbWV3aGVyZSBpbnNpZGUgdGhlIGVkaXRhYmxlIHJlZ2lvbiBjb250YWluaW5nIHRo
aXMgcG9zaXRpb24KLSAgICBpZiAoaGlnaGVzdFJvb3QgJiYgIXBvcy5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgIGlmIChoaWdoZXN0Um9v
dCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAg
ICAgIAogICAgIC8vIFJldHVybiBwb3MgaXRzZWxmIGlmIHRoZSB0d28gYXJlIGZyb20gdGhlIHZl
cnkgc2FtZSBlZGl0YWJsZSByZWdpb24sIG9yIGJvdGggYXJlIG5vbi1lZGl0YWJsZQpAQCAtNDEw
LDcgKzQxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246Omhvbm9yRWQKICAg
ICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QoZGVlcEVxdWl2YWxlbnQo
KSk7CiAgICAgCiAgICAgLy8gUmV0dXJuIGVtcHR5IHBvc2l0aW9uIGlmIHBvcyBpcyBub3Qgc29t
ZXdoZXJlIGluc2lkZSB0aGUgZWRpdGFibGUgcmVnaW9uIGNvbnRhaW5pbmcgdGhpcyBwb3NpdGlv
bgotICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5p
c0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3Mu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0
Um9vdCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBS
ZXR1cm4gcG9zIGl0c2VsZiBpZiB0aGUgdHdvIGFyZSBmcm9tIHRoZSB2ZXJ5IHNhbWUgZWRpdGFi
bGUgcmVnaW9uLCBvciBib3RoIGFyZSBub24tZWRpdGFibGUKQEAgLTQ1MSw3ICs0NTEsNyBAQCBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OmNhbm9uaWNhbFBvc2l0CiAgICAgLy8gVG8gZml4IHRo
aXMsIHdlIG5lZWQgdG8gZWl0aGVyIGEpIGFkZCBjb2RlIHRvIGFsbCBwYWludENhcmV0cyB0byBw
YXNzIHRoZSByZXNwb25zaWJpbGl0eSBvZmYgdG8KICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgcmVu
ZGVyZXIgZm9yIFZpc2libGVQb3NpdGlvbidzIGxpa2UgdGhlc2UsIG9yIGIpIGNhbm9uaWNhbGl6
ZSB0byB0aGUgcmlnaHRtb3N0IGNhbmRpZGF0ZQogICAgIC8vIHVubGVzcyB0aGUgYWZmaW5pdHkg
aXMgdXBzdHJlYW0uCi0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLm5vZGUoKTsKKyAgICBOb2Rl
KiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBQb3NpdGlvbigpOwogCkBAIC00NjksOCArNDY5LDggQEAgUG9zaXRpb24gVmlz
aWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAogICAgIC8vIGJsb2NrcyBvciBlbnRlciBuZXcg
b25lcyksIHdlIHNlYXJjaCBmb3J3YXJkIGFuZCBiYWNrd2FyZCB1bnRpbCB3ZSBmaW5kIG9uZS4K
ICAgICBQb3NpdGlvbiBuZXh0ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKG5leHRDYW5kaWRhdGUo
cG9zaXRpb24pKTsKICAgICBQb3NpdGlvbiBwcmV2ID0gY2Fub25pY2FsaXplQ2FuZGlkYXRlKHBy
ZXZpb3VzQ2FuZGlkYXRlKHBvc2l0aW9uKSk7Ci0gICAgTm9kZSogbmV4dE5vZGUgPSBuZXh0Lm5v
ZGUoKTsKLSAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXYubm9kZSgpOworICAgIE5vZGUqIG5leHRO
b2RlID0gbmV4dC5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIHByZXZOb2RlID0gcHJldi5k
ZXByZWNhdGVkTm9kZSgpOwogCiAgICAgLy8gVGhlIG5ldyBwb3NpdGlvbiBtdXN0IGJlIGluIHRo
ZSBzYW1lIGVkaXRhYmxlIGVsZW1lbnQuIEVuZm9yY2UgdGhhdCBmaXJzdC4KICAgICAvLyBVbmxl
c3MgdGhlIGRlc2NlbnQgaXMgZnJvbSBhIG5vbi1lZGl0YWJsZSBodG1sIGVsZW1lbnQgdG8gYW4g
ZWRpdGFibGUgYm9keS4KQEAgLTQ4MSw3ICs0ODEsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRp
b246OmNhbm9uaWNhbFBvc2l0CiAgICAgICAgIAogICAgIC8vIElmIHRoZSBodG1sIGVsZW1lbnQg
aXMgZWRpdGFibGUsIGRlc2NlbmRpbmcgaW50byBpdHMgYm9keSB3aWxsIGxvb2sgbGlrZSBhIGRl
c2NlbnQgCiAgICAgLy8gZnJvbSBub24tZWRpdGFibGUgdG8gZWRpdGFibGUgY29udGVudCBzaW5j
ZSByb290RWRpdGFibGVFbGVtZW50KCkgYWx3YXlzIHN0b3BzIGF0IHRoZSBib2R5LgotICAgIGlm
ICgoZWRpdGluZ1Jvb3QgJiYgZWRpdGluZ1Jvb3QtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHx8IHBv
c2l0aW9uLm5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICBpZiAoKGVkaXRpbmdSb290ICYm
IGVkaXRpbmdSb290LT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB8fCBwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gbmV4dC5pc05vdE51bGwo
KSA/IG5leHQgOiBwcmV2OwogICAgICAgICAKICAgICBib29sIHByZXZJc0luU2FtZUVkaXRhYmxl
RWxlbWVudCA9IHByZXZOb2RlICYmIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHByZXYpID09IGVk
aXRpbmdSb290OwpAQCAtNTEwLDEwICs1MTAsMTAgQEAgVUNoYXIzMiBWaXNpYmxlUG9zaXRpb246
OmNoYXJhY3RlckFmdGVyKAogICAgIC8vIFdlIGNhbm9uaWNhbGl6ZSB0byB0aGUgZmlyc3Qgb2Yg
dHdvIGVxdWl2YWxlbnQgY2FuZGlkYXRlcywgYnV0IHRoZSBzZWNvbmQgb2YgdGhlIHR3byBjYW5k
aWRhdGVzCiAgICAgLy8gaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgaW5zaWRlIHRoZSB0ZXh0IG5v
ZGUgY29udGFpbmluZyB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoaXMgdmlzaWJsZSBwb3NpdGlvbi4K
ICAgICBQb3NpdGlvbiBwb3MgPSBtX2RlZXBQb3NpdGlvbi5kb3duc3RyZWFtKCk7Ci0gICAgTm9k
ZSogbm9kZSA9IHBvcy5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3Mubm9kZSgp
KTsKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihwb3MuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUtPmxlbmd0aCgpOwogICAgIGlm
IChvZmZzZXQgPj0gbGVuZ3RoKQpAQCAtNTI3LDcgKzUyNyw3IEBAIFVDaGFyMzIgVmlzaWJsZVBv
c2l0aW9uOjpjaGFyYWN0ZXJBZnRlcigKIAogSW50UmVjdCBWaXNpYmxlUG9zaXRpb246OmxvY2Fs
Q2FyZXRSZWN0KFJlbmRlck9iamVjdComIHJlbmRlcmVyKSBjb25zdAogewotICAgIE5vZGUqIG5v
ZGUgPSBtX2RlZXBQb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IG1fZGVlcFBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKSB7CiAgICAgICAgIHJlbmRlcmVy
ID0gMDsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCB2b2lk
IFZpc2libGVQb3NpdGlvbjo6ZGVidWdQb3NpdGlvbihjb25zCiAgICAgaWYgKGlzTnVsbCgpKQog
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106IG51bGxcbiIsIG1zZyk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUG9zaXRpb24gWyVzXTogJXMsICIs
IG1zZywgbV9kZWVwUG9zaXRpb24ubm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzLCAiLCBtc2csIG1fZGVl
cFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgICAgIG1fZGVlcFBvc2l0aW9uLnNob3dBbmNob3JUeXBlQW5kT2Zmc2V0KCk7CiAgICAgfQog
fQpAQCAtNjAxLDcgKzYwMSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBW
aXNpYmwKICAgICAKICAgICBQb3NpdGlvbiBzID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlID0gZW5kLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVh
dGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMubm9kZSgpLCBzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCksIGUubm9kZSgpLCBlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHMuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzLmRlcHJlY2F0ZWRO
b2RlKCksIHMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZS5kZXByZWNhdGVkTm9kZSgpLCBl
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRW
aXNpYmxlUG9zaXRpb24oY29uc3QgUmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKQEAgLTYy
Miw3ICs2MjIsNyBAQCBib29sIHNldFN0YXJ0KFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaW50IGNvZGUg
PSAwOwotICAgIHItPnNldFN0YXJ0KHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOworICAgIHItPnNldFN0YXJ0KHAuZGVwcmVjYXRlZE5vZGUoKSwgcC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBA
IC02MzIsNyArNjMyLDcgQEAgYm9vbCBzZXRFbmQoUmFuZ2UgKnIsIGNvbnN0IFZpc2libGVQb3Np
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBj
b2RlID0gMDsKLSAgICByLT5zZXRFbmQocC5ub2RlKCksIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgY29kZSk7CisgICAgci0+c2V0RW5kKHAuZGVwcmVjYXRlZE5vZGUoKSwgcC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBjb2RlKTsKICAgICByZXR1cm4gY29kZSA9PSAwOwogfQogCkBA
IC02NDEsNyArNjQxLDcgQEAgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25z
dAogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBOVUxM
OwogCi0gICAgcmV0dXJuIHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCk7CiB9CiAKIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNp
YmxlUG9zaXRpb24gJnZpc2libGVQb3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKQEAgLTY0OSwx
MSArNjQ5LDExIEBAIGJvb2wgaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCAKICAg
ICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCF2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKG5vZGUpKQorICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzID0gdmlz
aWJsZVBvc2l0aW9uLnByZXZpb3VzKCk7Ci0gICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8
ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZSk7
CisgICAgcmV0dXJuIHByZXZpb3VzLmlzTnVsbCgpIHx8ICFwcmV2aW91cy5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwogfQogCiBib29sIGlz
TGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQ
b3NpdGlvbiwgY29uc3QgTm9kZSAqbm9kZSkKQEAgLTY2MSwxMSArNjYxLDExIEBAIGJvb2wgaXNM
YXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNvbnN0IFYKICAgICBpZiAodmlzaWJsZVBvc2l0aW9u
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCF2aXNpYmxl
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQor
ICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KS0+aXNEZXNjZW5kYW50T2Yobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHZpc2libGVQb3NpdGlvbi5uZXh0
KCk7Ci0gICAgcmV0dXJuIG5leHQuaXNOdWxsKCkgfHwgIW5leHQuZGVlcEVxdWl2YWxlbnQoKS5u
b2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOworICAgIHJldHVybiBuZXh0LmlzTnVsbCgpIHx8
ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
bm9kZSk7CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtODEsNyAr
ODEsNyBAQCBwdWJsaWM6CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXJBZnRlcigpIGNvbnN0OwogICAg
IFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gcHJldmlvdXMoKS5jaGFy
YWN0ZXJBZnRlcigpOyB9CiAKLSAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkgPyBtX2RlZXBQb3NpdGlvbi5u
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA6IDA7IH0KKyAgICBFbGVtZW50KiByb290RWRp
dGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWVwUG9zaXRpb24uaXNOb3ROdWxsKCkg
PyBtX2RlZXBQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkg
OiAwOyB9CiAgICAgCiAgICAgdm9pZCBnZXRJbmxpbmVCb3hBbmRPZmZzZXQoSW5saW5lQm94KiYg
aW5saW5lQm94LCBpbnQmIGNhcmV0T2Zmc2V0KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gNzg3OTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlv
bjo6ZmlycwogICAgICAgICByZXR1cm4gMDsKICAgICBQb3NpdGlvbiBzdGFydCA9IG1fc3RhcnQu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQu
bm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogfQogCiBQYXNz
UmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0
CkBAIC0xMzQsNyArMTM0LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6
dG9ObwogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNo
IG1vZGlmeSB0aGUgRE9NLgogICAgIC8vIEZhaWxpbmcgdG8gY2FsbCB0aGlzIGNhbiByZXN1bHQg
aW4gZXF1aXZhbGVudFhYWFBvc2l0aW9uIGNhbGxzIHJldHVybmluZwogICAgIC8vIGluY29ycmVj
dCByZXN1bHRzLgotICAgIG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKKyAgICBtX3N0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7
CiAKICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFy
IHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZSgpKQpAQCAtMTc4LDcgKzE3OCw3IEBAIFBh
c3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm8KIAogICAgIC8vIFZpc2libGVT
ZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVj
dG9yIHdpbGwgQVNTRVJUCiAgICAgLy8gaWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3Jl
YXRlZCwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZShzLm5vZGUoKS0+ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUocy5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHMsIGUpOwogfQogCiBib29sIFZpc2li
bGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQpAQCAtMTkyLDcgKzE5Miw3IEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWwKIAogc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShj
b25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIE5vZGUqIG4gPSBwb3Mubm9kZSgpOworICAgIE5v
ZGUqIG4gPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVy
biAwOwogICAgIERvY3VtZW50KiBkID0gbi0+ZG9jdW1lbnQoKTsKQEAgLTIwOCw3ICsyMDgsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlCiAKICAgICBQb3NpdGlv
biBzdGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwogICAgIHNlYXJjaFJhbmdl
LT5zZWxlY3ROb2RlQ29udGVudHMoYm91bmRhcnksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7
CisgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKIAogICAgIEFTU0VSVCghZWMpOwogICAg
IGlmIChlYykKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldFN0
YXJ0QW5kRW5kRnJvCiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gd29yZEVuZChlbmRPZldv
cmQob3JpZ2luYWxFbmQsIHNpZGUpKTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQo
d29yZEVuZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBo
KG9yaWdpbmFsRW5kKSAmJiAhaXNFbXB0eVRhYmxlQ2VsbChtX3N0YXJ0Lm5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKG9yaWdpbmFsRW5kKSAmJiAhaXNFbXB0eVRh
YmxlQ2VsbChtX3N0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8g
U2VsZWN0IHRoZSBwYXJhZ3JhcGggYnJlYWsgKHRoZSBzcGFjZSBmcm9tIHRoZSBlbmQgb2YgYSBw
YXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIAogICAgICAgICAgICAgICAgIC8vIHRoZSBuZXh0IG9u
ZSkgdG8gbWF0Y2ggVGV4dEVkaXQuCiAgICAgICAgICAgICAgICAgZW5kID0gd29yZEVuZC5uZXh0
KCk7CkBAIC00NTcsNyArNDU3LDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxl
Y3Rpb25UbwogICAgIE5vZGUqIHN0YXJ0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9zdGFy
dCk7CiAgICAgTm9kZSogZW5kUm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QobV9lbmQpOwogICAg
IAotICAgIE5vZGUqIGJhc2VFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3Rv
cihtX2Jhc2Uubm9kZSgpKTsKKyAgICBOb2RlKiBiYXNlRWRpdGFibGVBbmNlc3RvciA9IGxvd2Vz
dEVkaXRhYmxlQW5jZXN0b3IobV9iYXNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIAogICAgIC8v
IFRoZSBiYXNlLCBzdGFydCBhbmQgZW5kIGFyZSBhbGwgaW4gdGhlIHNhbWUgcmVnaW9uLiAgTm8g
YWRqdXN0bWVudCBuZWNlc3NhcnkuCiAgICAgaWYgKGJhc2VSb290ID09IHN0YXJ0Um9vdCAmJiBi
YXNlUm9vdCA9PSBlbmRSb290KQpAQCAtNDkyLDE3ICs0OTIsMTcgQEAgdm9pZCBWaXNpYmxlU2Vs
ZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25UbwogICAgIAogICAgICAgICAvLyBUaGUgc2VsZWN0aW9u
IGVuZHMgaW4gZWRpdGFibGUgY29udGVudCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUg
YSBkaWZmZXJlbnQgZWRpdGFibGUgYW5jZXN0b3IsIAogICAgICAgICAvLyBtb3ZlIGJhY2t3YXJk
IHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50IGluc2lkZSB0aGUgc2FtZSBsb3dlc3QgZWRpdGFi
bGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KLSAgICAgICAgTm9kZSogZW5kRWRpdGFibGVBbmNlc3Rv
ciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQubm9kZSgpKTsKKyAgICAgICAgTm9kZSog
ZW5kRWRpdGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9lbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CiAgICAgICAgIGlmIChlbmRSb290IHx8IGVuZEVkaXRhYmxlQW5jZXN0b3Ig
IT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUG9z
aXRpb24gcCA9IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX2VuZCk7CiAgICAg
ICAgICAgICBOb2RlKiBzaGFkb3dBbmNlc3RvciA9IGVuZFJvb3QgPyBlbmRSb290LT5zaGFkb3dB
bmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgICAgICAgICBpZiAocC5pc051bGwoKSAmJiBlbmRSb290
ICYmIChzaGFkb3dBbmNlc3RvciAhPSBlbmRSb290KSkKICAgICAgICAgICAgICAgICBwID0gbGFz
dERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAg
IHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLm5vZGUo
KSkgPT0gYmFzZUVkaXRhYmxlQW5jZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsK
KyAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNl
c3RvcihwLmRlcHJlY2F0ZWROb2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0Vk
aXRhYmxlUG9zaXRpb24ocCkpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRh
YmxlUm9vdEZvclBvc2l0aW9uKHApOwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0g
cm9vdCA/IHJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBw
ID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHAu
bm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKKyAgICAgICAg
ICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIChz
aGFkb3dBbmNlc3RvciAhPSByb290KSkKICAgICAgICAgICAgICAgICAgICAgcCA9IGxhc3REZWVw
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAgICAgICAgICB9CkBA
IC01MjIsMTYgKzUyMiwxNiBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFkanVzdFNlbGVjdGlv
blRvCiAKICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGFydHMgaW4gZWRpdGFibGUgY29udGVu
dCBvciBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgYSBkaWZmZXJlbnQgZWRpdGFibGUgYW5j
ZXN0b3IsIAogICAgICAgICAvLyBtb3ZlIGZvcndhcmQgdW50aWwgbm9uLWVkaXRhYmxlIGNvbnRl
bnQgaW5zaWRlIHRoZSBzYW1lIGxvd2VzdCBlZGl0YWJsZSBhbmNlc3RvciBpcyByZWFjaGVkLgot
ICAgICAgICBOb2RlKiBzdGFydEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2Vz
dG9yKG1fc3RhcnQubm9kZSgpKTsgICAgICAKKyAgICAgICAgTm9kZSogc3RhcnRFZGl0YWJsZUFu
Y2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX3N0YXJ0LmRlcHJlY2F0ZWROb2RlKCkp
OyAgICAgIAogICAgICAgICBpZiAoc3RhcnRSb290IHx8IHN0YXJ0RWRpdGFibGVBbmNlc3RvciAh
PSBiYXNlRWRpdGFibGVBbmNlc3RvcikgewogICAgICAgICAgICAgUG9zaXRpb24gcCA9IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKG1fc3RhcnQpOwogICAgICAgICAgICAgTm9kZSogc2hh
ZG93QW5jZXN0b3IgPSBzdGFydFJvb3QgPyBzdGFydFJvb3QtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
IDogMDsKICAgICAgICAgICAgIGlmIChwLmlzTnVsbCgpICYmIHN0YXJ0Um9vdCAmJiAoc2hhZG93
QW5jZXN0b3IgIT0gc3RhcnRSb290KSkKICAgICAgICAgICAgICAgICBwID0gcG9zaXRpb25CZWZv
cmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKLSAgICAgICAgICAgIHdoaWxlIChwLmlzTm90TnVsbCgp
ICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLm5vZGUoKSkgPT0gYmFzZUVkaXRhYmxlQW5j
ZXN0b3IgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSkpIHsKKyAgICAgICAgICAgIHdoaWxlIChw
LmlzTm90TnVsbCgpICYmICEobG93ZXN0RWRpdGFibGVBbmNlc3RvcihwLmRlcHJlY2F0ZWROb2Rl
KCkpID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogcm9vdCA9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHAp
OwogICAgICAgICAgICAgICAgIHNoYWRvd0FuY2VzdG9yID0gcm9vdCA/IHJvb3QtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKLSAgICAgICAgICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9k
ZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5
RGlzdGluY3RDYW5kaWRhdGUocCk7CisgICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShw
LmRlcHJlY2F0ZWROb2RlKCkpID8gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLmRlcHJlY2F0
ZWROb2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgKHNoYWRvd0FuY2VzdG9yICE9IHJvb3QpKQogICAgICAg
ICAgICAgICAgICAgICBwID0gcG9zaXRpb25CZWZvcmVOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAg
ICAgICAgICAgIH0KQEAgLTU1MSw3ICs1NTEsNyBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFk
anVzdFNlbGVjdGlvblRvCiAgICAgfQogICAgIAogICAgIC8vIENvcnJlY3QgdGhlIGV4dGVudCBp
ZiBuZWNlc3NhcnkuCi0gICAgaWYgKGJhc2VFZGl0YWJsZUFuY2VzdG9yICE9IGxvd2VzdEVkaXRh
YmxlQW5jZXN0b3IobV9leHRlbnQubm9kZSgpKSkKKyAgICBpZiAoYmFzZUVkaXRhYmxlQW5jZXN0
b3IgIT0gbG93ZXN0RWRpdGFibGVBbmNlc3RvcihtX2V4dGVudC5kZXByZWNhdGVkTm9kZSgpKSkK
ICAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2VJc0ZpcnN0ID8gbV9lbmQgOiBtX3N0YXJ0OwogfQog
CkBAIC01NzIsNyArNTcyLDcgQEAgRWxlbWVudCogVmlzaWJsZVNlbGVjdGlvbjo6cm9vdEVkaXRh
YmxlRQogCiBOb2RlKiBWaXNpYmxlU2VsZWN0aW9uOjpzaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25z
dAogewotICAgIHJldHVybiBzdGFydCgpLm5vZGUoKSA/IHN0YXJ0KCkubm9kZSgpLT5zaGFkb3dU
cmVlUm9vdE5vZGUoKSA6IDA7CisgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93VHJlZVJvb3ROb2RlKCkgOiAwOwogfQog
CiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDkgQEAgYm9vbCBjYW5IYXZlQ2hpbGRy
ZW5Gb3JFZGl0aW5nKGNvbnN0IE5vZAogLy8gY291bGQgYmUgaW5zaWRlIGEgc2hhZG93IHRyZWUu
IE9ubHkgd29ya3MgZm9yIG5vbi1udWxsIHZhbHVlcy4KIGludCBjb21wYXJlUG9zaXRpb25zKGNv
bnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKIHsKLSAgICBOb2RlKiBub2RlQSA9
IGEubm9kZSgpOworICAgIE5vZGUqIG5vZGVBID0gYS5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFT
U0VSVChub2RlQSk7Ci0gICAgTm9kZSogbm9kZUIgPSBiLm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
QiA9IGIuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBBU1NFUlQobm9kZUIpOwogICAgIGludCBvZmZz
ZXRBID0gYS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIGludCBvZmZzZXRCID0gYi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIGludCBjb21wYXJl
UG9zaXRpb25zKGNvbnN0IFZpc2libGVQb3NpdGkKIAogTm9kZSogaGlnaGVzdEVkaXRhYmxlUm9v
dChjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgTm9kZSogbm9kZSA9IHBvc2l0aW9u
Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKQEAgLTE3Myw3ICsxNzMs
NyBAQCBOb2RlKiBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKE5vZGUqIG5vZGUpCiAKIGJvb2wgaXNF
ZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewotICAgIE5vZGUqIG5vZGUgPSBw
Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTE4NSwxNCArMTg1LDE0
IEBAIGJvb2wgaXNFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiAKIAogYm9vbCBpc0F0
VW5zcGxpdHRhYmxlRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIE5vZGUqIG5v
ZGUgPSBwb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICByZXR1cm4gKG5vZGUgPT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24ocG9zKSB8fCBub2Rl
ID09IGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCAmaXNUYWJsZUNlbGwpKTsKIH0KICAgICAKICAg
ICAKIGJvb2wgaXNSaWNobHlFZGl0YWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwKQogewot
ICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVk
Tm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
QEAgLTIwNCw3ICsyMDQsNyBAQCBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQ
b3NpCiAKIEVsZW1lbnQqIGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
KQogewotICAgIE5vZGUqIG5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IApAQCAtMjgyLDE0ICsyODIsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0RWRpdGFibGVQb3Np
dGlvbkFmdAogCiAgICAgUG9zaXRpb24gcCA9IHBvc2l0aW9uOwogICAgIAotICAgIGlmIChOb2Rl
KiBzaGFkb3dBbmNlc3RvciA9IHAubm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKLSAgICAg
ICAgaWYgKHNoYWRvd0FuY2VzdG9yICE9IHAubm9kZSgpKQorICAgIGlmIChOb2RlKiBzaGFkb3dB
bmNlc3RvciA9IHAuZGVwcmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCisgICAg
ICAgIGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAg
ICBwID0gbGFzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAg
ICAKLSAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLm5v
ZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQotICAgICAgICBwID0gaXNBdG9taWNO
b2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkpIDogbmV4
dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CisgICAgd2hpbGUgKHAuZGVwcmVjYXRlZE5v
ZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAuZGVw
cmVjYXRlZE5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHAuZGVwcmVjYXRlZE5v
ZGUoKSkgOiBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAKLSAgICBpZiAo
cC5ub2RlKCkgJiYgcC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2Nl
bmRhbnRPZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiBwLmRl
cHJlY2F0ZWROb2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CiAgICAgCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwKTsKQEAgLTMwMywxNCArMzAz
LDE0IEBAIFZpc2libGVQb3NpdGlvbiBsYXN0RWRpdGFibGVQb3NpdGlvbkJlZm8KIAogICAgIFBv
c2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAKLSAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3Ig
PSBwLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCi0gICAgICAgIGlmIChzaGFkb3dBbmNl
c3RvciAhPSBwLm5vZGUoKSkKKyAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3IgPSBwLmRlcHJl
Y2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQorICAgICAgICBpZiAoc2hhZG93QW5j
ZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgcCA9IGZpcnN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgIAotICAgIHdoaWxlIChw
Lm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRh
bnRPZihoaWdoZXN0Um9vdCkpCi0gICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8g
cG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOworICAgIHdoaWxlIChwLmRlcHJlY2F0ZWROb2RlKCkgJiYgIWlz
RWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KGhpZ2hlc3RSb290KSkKKyAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLmRlcHJlY2F0ZWROb2Rl
KCkpID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA6IHBy
ZXZpb3VzVmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwKTsKICAgICAKLSAgICBpZiAocC5ub2Rl
KCkgJiYgcC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihoaWdoZXN0Um9vdCkpCisgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKSAmJiBwLmRlcHJlY2F0
ZWROb2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5k
YW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAg
ICAgCiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihwKTsKQEAgLTQyMSw5ICs0MjEsOSBAQCBi
b29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9kZSAqbikKIAogc3RhdGljIE5vZGUqIGZpcnN0
SW5TcGVjaWFsRWxlbWVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIC8vIEZJWE1FOiBU
aGlzIGJlZ2lucyBhdCBwb3Mubm9kZSgpLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbnRh
aW4gcG9zIChzdXBwb3NlIHBvcyB3YXMgW2ltZywgMF0pLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS81
MDI3NzAyPi4KLSAgICBOb2RlKiByb290RWRpdGFibGVFbGVtZW50ID0gcG9zLm5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpOwotICAgIGZvciAoTm9kZSogbiA9IHBvcy5ub2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCisgICAgLy8gRklYTUU6IFRoaXMgYmVnaW5zIGF0IHBvcy5kZXByZWNhdGVk
Tm9kZSgpLCB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGNvbnRhaW4gcG9zIChzdXBwb3NlIHBv
cyB3YXMgW2ltZywgMF0pLiAgU2VlIDxyZGFyOi8vcHJvYmxlbS81MDI3NzAyPi4KKyAgICBOb2Rl
KiByb290RWRpdGFibGVFbGVtZW50ID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBmb3IgKE5vZGUqIG4gPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsgbiAm
JiBuLT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4t
PnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYgKGlzU3BlY2lhbEVsZW1lbnQobikpIHsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2UG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgRE9XTlNU
UkVBTSk7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RJbkVsZW1lbnQgPSBWaXNp
YmxlUG9zaXRpb24obiwgMCwgRE9XTlNUUkVBTSk7CkBAIC00MzcsOSArNDM3LDkgQEAgc3RhdGlj
IE5vZGUqIGZpcnN0SW5TcGVjaWFsRWxlbWVudChjb25zdAogCiBzdGF0aWMgTm9kZSogbGFzdElu
U3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBiZWdpbnMgYXQgcG9zLm5vZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWlu
IHBvcyAoc3VwcG9zZSBwb3Mgd2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAy
NzcwMj4uCi0gICAgTm9kZSogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4t
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFy
ZW50Tm9kZSgpKQorICAgIC8vIEZJWE1FOiBUaGlzIGJlZ2lucyBhdCBwb3MuZGVwcmVjYXRlZE5v
ZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWluIHBvcyAoc3VwcG9zZSBwb3Mg
d2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAyNzcwMj4uCisgICAgTm9kZSog
cm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgZm9yIChOb2RlKiBuID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJF
QU0pOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGxhc3RJbkVsZW1lbnQgPSBWaXNpYmxl
UG9zaXRpb24obiwgbi0+Y2hpbGROb2RlQ291bnQoKSwgRE9XTlNUUkVBTSk7CkBAIC00NjIsNyAr
NDYyLDcgQEAgUG9zaXRpb24gcG9zaXRpb25CZWZvcmVDb250YWluaW5nU3BlY2lhbAogICAgIGlm
ICghbikKICAgICAgICAgcmV0dXJuIHBvczsKICAgICBQb3NpdGlvbiByZXN1bHQgPSBwb3NpdGlv
bkluUGFyZW50QmVmb3JlTm9kZShuKTsKLSAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJlc3Vs
dC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpCisgICAgaWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1bHQuZGVwcmVjYXRl
ZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5y
b290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgaWYgKGNvbnRh
aW5pbmdTcGVjaWFsRWxlbWVudCkKICAgICAgICAgKmNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCA9
IG47CkBAIC00ODAsNyArNDgwLDcgQEAgUG9zaXRpb24gcG9zaXRpb25BZnRlckNvbnRhaW5pbmdT
cGVjaWFsRQogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIHBvczsKICAgICBQb3NpdGlvbiBy
ZXN1bHQgPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKG4pOwotICAgIGlmIChyZXN1bHQuaXNO
dWxsKCkgfHwgcmVzdWx0Lm5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHBvcy5ub2Rl
KCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICBpZiAocmVzdWx0LmlzTnVsbCgpIHx8IHJl
c3VsdC5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zLmRlcHJl
Y2F0ZWROb2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHBvczsK
ICAgICBpZiAoY29udGFpbmluZ1NwZWNpYWxFbGVtZW50KQogICAgICAgICAqY29udGFpbmluZ1Nw
ZWNpYWxFbGVtZW50ID0gbjsKQEAgLTQ5OSw4ICs0OTksOCBAQCBQb3NpdGlvbiBwb3NpdGlvbk91
dHNpZGVDb250YWluaW5nU3BlY2lhCiBOb2RlKiBpc0ZpcnN0UG9zaXRpb25BZnRlclRhYmxlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIFBvc2l0aW9uIHVw
c3RyZWFtKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkpOwotICAg
IGlmICh1cHN0cmVhbS5ub2RlKCkgJiYgdXBzdHJlYW0ubm9kZSgpLT5yZW5kZXJlcigpICYmIHVw
c3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIHVwc3RyZWFtLmF0TGFzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHVwc3RyZWFtLm5vZGUoKTsK
KyAgICBpZiAodXBzdHJlYW0uZGVwcmVjYXRlZE5vZGUoKSAmJiB1cHN0cmVhbS5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpICYmIHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkp
CisgICAgICAgIHJldHVybiB1cHN0cmVhbS5kZXByZWNhdGVkTm9kZSgpOwogICAgIAogICAgIHJl
dHVybiAwOwogfQpAQCAtNTA4LDggKzUwOCw4IEBAIE5vZGUqIGlzRmlyc3RQb3NpdGlvbkFmdGVy
VGFibGUoY29uc3QgVmkKIE5vZGUqIGlzTGFzdFBvc2l0aW9uQmVmb3JlVGFibGUoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CiAgICAgUG9zaXRpb24gZG93bnN0cmVh
bSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgIGlm
IChkb3duc3RyZWFtLm5vZGUoKSAmJiBkb3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBk
b3duc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRvd25zdHJlYW0uYXRG
aXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGRvd25zdHJlYW0u
bm9kZSgpOworICAgIGlmIChkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCkgJiYgZG93bnN0cmVh
bS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW0uZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmIGRvd25zdHJlYW0uYXRGaXJzdEVkaXRpbmdQ
b3NpdGlvbkZvck5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGRvd25zdHJlYW0uZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICAKICAgICByZXR1cm4gMDsKIH0KQEAgLTU5MSw3ICs1OTEsNyBAQCBOb2RlKiBl
bmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKLSAgICBmb3Ig
KE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgeworICAgIGZvciAo
Tm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewog
ICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh0YWdOYW1lKSkKQEAgLTYwOSw3
ICs2MDksNyBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uCiAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewogICAgICAgICAvLyBEb24ndCByZXR1cm4gYSBub24tZWRpdGFibGUg
bm9kZSBpZiB0aGUgaW5wdXQgcG9zaXRpb24gd2FzIGVkaXRhYmxlLCBzaW5jZQogICAgICAgICAv
LyB0aGUgY2FsbGVycyBmcm9tIGVkaXRpbmcgd2lsbCBubyBkb3VidCB3YW50IHRvIHBlcmZvcm0g
ZWRpdGluZyBpbnNpZGUgdGhlIHJldHVybmVkIG5vZGUuCiAgICAgICAgIGlmIChyb290ICYmICFu
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG9ubHlSZXR1cm5FZGl0YWJsZU5vZGVzKQpAQCAtNjI3
LDcgKzYyNyw3IEBAIE5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFAKIHsK
ICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKICAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoKCpub2RlSXNPZlR5cGUpKG4pKQogICAgICAg
ICAgICAgaGlnaGVzdCA9IG47CiAgICAgICAgIGlmIChuID09IHJvb3QpCkBAIC02NDcsNyArNjQ3
LDcgQEAgTm9kZSogZW5jbG9zaW5nQW5jaG9yRWxlbWVudChjb25zdCBQb3NpdAogICAgIGlmIChw
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBOb2RlKiBub2RlID0gcC5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB3aGlsZSAo
bm9kZSAmJiAhKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlLT5pc0xpbmsoKSkpCiAgICAg
ICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIG5vZGU7CkBAIC03MTcs
NyArNzE3LDcgQEAgc3RhdGljIE5vZGUqIGFwcGVuZGVkU3VibGlzdChOb2RlKiBsaXN0SQogTm9k
ZSogZW5jbG9zaW5nRW1wdHlMaXN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwb3NpdGlvbiBpcyBvbiBhIGxpbmUgYnkgaXRzZWxm
IGluc2lkZSBhIGxpc3QgaXRlbQotICAgIE5vZGUqIGxpc3RDaGlsZE5vZGUgPSBlbmNsb3NpbmdM
aXN0Q2hpbGQodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSog
bGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZCh2aXNpYmxlUG9zLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgaWYgKCFsaXN0Q2hpbGROb2RlIHx8ICFpc1N0
YXJ0T2ZQYXJhZ3JhcGgodmlzaWJsZVBvcykgfHwgIWlzRW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBv
cykpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC04ODMsNyArODgzLDcgQEAgYm9vbCBpc05vZGVJ
blRleHRGb3JtQ29udHJvbChOb2RlKiBub2RlKQogICAgIAogUG9zaXRpb24gcG9zaXRpb25CZWZv
cmVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7Ci0gICAgTm9kZSAqbm9kZSA9IHBvcy5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChp
c1RhYlNwYW5UZXh0Tm9kZShub2RlKSkKICAgICAgICAgbm9kZSA9IHRhYlNwYW5Ob2RlKG5vZGUp
OwogICAgIGVsc2UgaWYgKCFpc1RhYlNwYW5Ob2RlKG5vZGUpKQpAQCAtOTQ0LDcgKzk0NCw3IEBA
IE5vZGUgKm5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlICoKIHVuc2lnbmVkIG51bUVu
Y2xvc2luZ01haWxCbG9ja3F1b3Rlcyhjb25zdCBQb3NpdGlvbiYgcCkKIHsKICAgICB1bnNpZ25l
ZCBudW0gPSAwOwotICAgIGZvciAoTm9kZSogbiA9IHAubm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKQorICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4t
PnBhcmVudE5vZGUoKSkKICAgICAgICAgaWYgKGlzTWFpbEJsb2NrcXVvdGUobikpCiAgICAgICAg
ICAgICBudW0rKzsKICAgICAKQEAgLTEwMTUsNyArMTAxNSw3IEBAIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uRm9yUGFyYWdyYXBoSXQKICAgICAvLyB0aGF0IHdlJ2xsIHdhbnQgbW9kaWZ5IGlz
IHRoZSBsYXN0IG9uZSBpbnNpZGUgdGhlIHRhYmxlLCBub3QgdGhlIHRhYmxlIGl0c2VsZgogICAg
IC8vIChhIHRhYmxlIGlzIGl0c2VsZiBhIHBhcmFncmFwaCkuCiAgICAgaWYgKE5vZGUqIHRhYmxl
ID0gaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShlbmRPZlNlbGVjdGlvbikpCi0gICAgICAgIGlm
IChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
Zih0YWJsZSkpCisgICAgICAgIGlmIChzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCku
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQogICAgICAgICAgICAgbmV3
U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNlbGVj
dGlvbi5wcmV2aW91cyh0cnVlKSk7CiAgICAgCiAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mIHRoZSBz
ZWxlY3Rpb24gdG8gbW9kaWZ5IGlzIGp1c3QgYmVmb3JlIGEgdGFibGUsCkBAIC0xMDIzLDcgKzEw
MjMsNyBAQCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0CiAgICAgLy8g
d2UnbGwgd2FudCB0byBtb2RpZnkgaXMgdGhlIGZpcnN0IG9uZSBpbnNpZGUgdGhlIHRhYmxlLCBu
b3QgdGhlIHBhcmFncmFwaAogICAgIC8vIGNvbnRhaW5pbmcgdGhlIHRhYmxlIGl0c2VsZi4KICAg
ICBpZiAoTm9kZSogdGFibGUgPSBpc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKHN0YXJ0T2ZTZWxl
Y3Rpb24pKQotICAgICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKKyAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YodGFibGUpKQog
ICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VsZWN0
aW9uLm5leHQodHJ1ZSksIGVuZE9mU2VsZWN0aW9uKTsKICAgICAKICAgICByZXR1cm4gbmV3U2Vs
ZWN0aW9uOwpAQCAtMTAzNSw3ICsxMDM1LDcgQEAgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGNvbnN0IFZpc2libAogICAgIGlmICh2aXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiAwOwogICAgIFBvc2l0aW9uIHAodmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHAubm9kZSgpLT5k
b2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHAuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSksCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpj
cmVhdGUocC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUocC5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKICAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1
ZSk7CiB9CkBAIC0xMTE0LDggKzExMTQsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIGF2b2lkSW50ZXJz
ZWN0aW9uV2l0aE5vCiAgICAgICAgIHJldHVybiBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbik7
CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHVwZGF0ZWRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKLSAg
ICBOb2RlKiBiYXNlID0gc2VsZWN0aW9uLmJhc2UoKS5ub2RlKCk7Ci0gICAgTm9kZSogZXh0ZW50
ID0gc2VsZWN0aW9uLmV4dGVudCgpLm5vZGUoKTsKKyAgICBOb2RlKiBiYXNlID0gc2VsZWN0aW9u
LmJhc2UoKS5kZXByZWNhdGVkTm9kZSgpOworICAgIE5vZGUqIGV4dGVudCA9IHNlbGVjdGlvbi5l
eHRlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIEFTU0VSVChiYXNlKTsKICAgICBBU1NFUlQo
ZXh0ZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNzg3
OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzNyw4ICs0MzcsOCBAQCBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9O
b25lCiBzdGF0aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2KQogewogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0ID0gdi5uZXh0KCk7Ci0g
ICAgTm9kZSogdXBzdHJlYW1Ob2RlID0gbmV4dC5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCku
bm9kZSgpOwotICAgIE5vZGUqIGRvd25zdHJlYW1Ob2RlID0gdi5kZWVwRXF1aXZhbGVudCgpLmRv
d25zdHJlYW0oKS5ub2RlKCk7CisgICAgTm9kZSogdXBzdHJlYW1Ob2RlID0gbmV4dC5kZWVwRXF1
aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBkb3duc3Ry
ZWFtTm9kZSA9IHYuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICAvLyBBZGQgYW4gaW50ZXJjaGFuZ2UgbmV3bGluZSBpZiBhIHBhcmFncmFwaCBicmVh
ayBpcyBzZWxlY3RlZCBhbmQgYSBiciB3b24ndCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBtYXJr
dXAgdG8gcmVwcmVzZW50IGl0LgogICAgIHJldHVybiBpc0VuZE9mUGFyYWdyYXBoKHYpICYmIGlz
U3RhcnRPZlBhcmFncmFwaChuZXh0KSAmJiAhKHVwc3RyZWFtTm9kZS0+aGFzVGFnTmFtZShiclRh
ZykgJiYgdXBzdHJlYW1Ob2RlID09IGRvd25zdHJlYW1Ob2RlKTsKIH0KQEAgLTU3MSw3ICs1NzEs
NyBAQCBTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAgIH0K
IAogICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmRTdHJpbmcoaW50ZXJjaGFuZ2VOZXdsaW5lU3Ry
aW5nKTsKLSAgICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5kZWVwRXF1aXZh
bGVudCgpLm5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gdmlzaWJsZVN0YXJ0Lm5leHQoKS5k
ZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAgICAgaWYgKHBhc3RFbmQg
JiYgUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzdGFydE5vZGUsIDAsIHBhc3RFbmQsIDAp
ID49IDApIHsKICAgICAgICAgICAgIGlmIChkZWxldGVCdXR0b24pCkBAIC03NjQsNyArNzY0LDcg
QEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogCiAgICAgTm9kZSog
c3R5bGVOb2RlID0gY29udGV4dC0+Zmlyc3ROb2RlKCk7CiAgICAgaWYgKCFzdHlsZU5vZGUpIHsK
LSAgICAgICAgc3R5bGVOb2RlID0gY29udGV4dC0+c3RhcnRQb3NpdGlvbigpLm5vZGUoKTsKKyAg
ICAgICAgc3R5bGVOb2RlID0gY29udGV4dC0+c3RhcnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgIGlmICghc3R5bGVOb2RlKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lv
biA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0JvdW5kYXJ5KAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5j
aGFyYWN0ZXJCZWZvcmUoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBmb3J3YXJkc1NjYW5S
YW5nZShkLT5jcmVhdGVSYW5nZSgpKTsKICAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2UtPnNldEVu
ZEFmdGVyKGJvdW5kYXJ5LCBlYyk7Ci0gICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFy
dChlbmQubm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgICAg
ICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgICAgIFRleHRJdGVyYXRvciBmb3J3
YXJkc0l0ZXJhdG9yKGZvcndhcmRzU2NhblJhbmdlLmdldCgpKTsKICAgICAgICAgd2hpbGUgKCFm
b3J3YXJkc0l0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzID0gZm9yd2FyZHNJdGVyYXRvci5jaGFyYWN0ZXJzKCk7CkBAIC04Miw4ICs4Miw4IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgKICAgICAgICAgfQogICAg
IH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0LmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKLSAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5u
b2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFu
Z2UtPnNldFN0YXJ0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0RW5kKGVuZC5kZXByZWNhdGVk
Tm9kZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgIAogICAgIEFT
U0VSVCghZWMpOwogICAgIGlmIChlYykKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KAogCiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJ
dGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9yRW5kc0F0RWRpdGluZ0Jv
dW5kYXJ5KTsKICAgICB1bnNpZ25lZCBuZXh0ID0gMDsKLSAgICBib29sIGluVGV4dFNlY3VyaXR5
TW9kZSA9IHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQu
bm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7Cisg
ICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOwogICAgIGJv
b2wgbmVlZE1vcmVDb250ZXh0ID0gZmFsc2U7CiAgICAgd2hpbGUgKCFpdC5hdEVuZCgpKSB7CiAg
ICAgICAgIC8vIGl0ZXJhdGUgdG8gZ2V0IGNodW5rcyB1bnRpbCB0aGUgc2VhcmNoRnVuY3Rpb24g
cmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLgpAQCAtMTQ2LDcgKzE0Niw3IEBAIHN0YXRpYyBWaXNp
YmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnMKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIo
KSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWNrd2FyZHNTY2FuUmFuZ2UoZC0+Y3JlYXRl
UmFuZ2UoKSk7Ci0gICAgICAgIGJhY2t3YXJkc1NjYW5SYW5nZS0+c2V0RW5kKHN0YXJ0Lm5vZGUo
KSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgICAgICBiYWNrd2Fy
ZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IoYmFja3dhcmRzU2NhblJhbmdlLmdldCgpKTsKICAg
ICAgICAgd2hpbGUgKCFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IGJhY2t3YXJkc0l0ZXJhdG9yLmNoYXJhY3RlcnMoKTsK
QEAgLTE2MSwxMCArMTYxLDEwIEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5
KGNvbnMKICAgICB9CiAKICAgICBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5k
YXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFy
dChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBlYyk7CiAgICAgVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0
b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAgICAgdW5zaWdu
ZWQgbmV4dCA9IDA7Ci0gICAgYm9vbCBpblRleHRTZWN1cml0eU1vZGUgPSBzdGFydC5ub2RlKCkg
JiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+
c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOworICAgIGJvb2wgaW5UZXh0U2VjdXJp
dHlNb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBib29sIG5lZWRNb3JlQ29udGV4dCA9
IGZhbHNlOwogICAgIHdoaWxlICghaXQuYXRFbmQoKSkgewogICAgICAgICAvLyBLZWVwIGFza2lu
ZyB0aGUgaXRlcmF0b3IgZm9yIGNodW5rcyB1bnRpbCB0aGUgc2VhcmNoIGZ1bmN0aW9uCkBAIC0z
MTYsNyArMzE2LDcgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRXb3JkUG9zaXRpb24oY29uc3QgVgog
c3RhdGljIFJvb3RJbmxpbmVCb3ggKnJvb3RCb3hGb3JMaW5lKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmYykKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUg
Km5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwog
ICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM1MSw3ICszNTEsNyBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAgICAgICAgIC8vIFRoZXJl
IGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CiAgICAg
ICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJv
cmRlcmVkIGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsK
LSAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigp
LT5pc1JlbmRlckJsb2NrKCkgJiYgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID09IDApCisg
ICAgICAgIGlmIChwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgcC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3Np
dGlvbkluVGFibGUoYyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CkBAIC00MDQsNyArNDA0LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
bkZvckxpbgogICAgICAgICAvLyBUaGVyZSBhcmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQg
MCBpbiBibG9ja3Mgd2l0aG91dAogICAgICAgICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1w
dHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBibG9ja3MuCiAgICAgICAgIFBvc2l0aW9u
IHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIo
KSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmIHAuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA9PSAwKQorICAgICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5y
ZW5kZXJlcigpICYmIHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9j
aygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4g
YzsKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIH0KQEAgLTUwMSw3ICs1
MDEsNyBAQCBzdGF0aWMgTm9kZSogZW5jbG9zaW5nTm9kZVdpdGhOb25JbmxpbmVSCiBWaXNpYmxl
UG9zaXRpb24gcHJldmlvdXNMaW5lUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNp
YmxlUG9zaXRpb24sIGludCB4KQogewogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpub2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hl
c3RFZGl0YWJsZVJvb3QocCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CkBAIC02MTAsNyArNjEwLDcgQEAgc3RhdGljIE5vZGUqIG5leHRMZWFmV2l0
aFNhbWVFZGl0YWJpbGl0eQogVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGludCB4KQogewogICAgIFBvc2l0aW9u
IHAgPSB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpub2RlID0g
cC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBOb2Rl
KiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CiAgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC03NDAsNyArNzQwLDcgQEAgVmlz
aWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNvbgogVmlzaWJsZVBvc2l0aW9uIHN0
YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCiB7CiAgICAgUG9zaXRpb24gcCA9IGMu
ZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBO
b2RlKiBzdGFydE5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoIXN0YXJ0Tm9k
ZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtODAyLDcgKzgwMiw3IEBA
IFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQo
KTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUg
PSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFi
bGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKICAgICAgICAgcmV0dXJuIGxhc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShzdGFydE5vZGUpOwpAQCAtOTEwLDcgKzkxMCw3IEBAIFZpc2libGVQb3Np
dGlvbiBuZXh0UGFyYWdyYXBoUG9zaXRpb24oY28KIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQmxv
Y2soY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBF
cXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSog
c3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihmaXJzdFBvc2l0aW9uSW5Ob2RlKHN0YXJ0Tm9kZS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpKSwgRE9XTlNUUkVBTSk7CkBAIC05MjAsNyArOTIwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mQmxvY2soY29uc3QgVmlzaWJsZQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFs
ZW50KCk7CiAKLSAgICBOb2RlICpzdGFydE5vZGUgPSBwLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFy
dE5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIApAQCAtOTU2LDcgKzk1Niw3IEBAIFZpc2libGVQ
b3NpdGlvbiBzdGFydE9mRG9jdW1lbnQoY29uc3QgTm8KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmMpCiB7Ci0gICAgcmV0dXJuIHN0YXJ0
T2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICByZXR1cm4gc3RhcnRP
ZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgTm9kZSogbm9kZSkKQEAgLTk3MCwxNyAr
OTcwLDE3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUKIAogVmlz
aWJsZVBvc2l0aW9uIGVuZE9mRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewot
ICAgIHJldHVybiBlbmRPZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAg
IHJldHVybiBlbmRPZkRvY3VtZW50KGMuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
KTsKIH0KIAogYm9vbCBpblNhbWVEb2N1bWVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmEsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmYikKIHsKICAgICBQb3NpdGlvbiBhcCA9IGEuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBOb2RlICphbiA9IGFwLm5vZGUoKTsKKyAgICBOb2RlKiBhbiA9IGFwLmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFhbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IFBvc2l0aW9uIGJwID0gYi5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUgKmJuID0gYnAubm9k
ZSgpOworICAgIE5vZGUqIGJuID0gYnAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoYW4gPT0g
Ym4pCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0xMTA4LDcgKzExMDgsNyBAQCBzdGF0aWMg
VmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxTdGFydFBvc2l0CiAgICAgICAgIC8vIFRoZXJlIGFyZSBW
aXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2NrcyB3aXRob3V0CiAgICAgICAgIC8v
IFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJsZSBibG9ja3MgYW5kIGJvcmRlcmVk
IGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAg
ICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9kZSgpLT5yZW5kZXJlcigpLT5pc1Jl
bmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKKyAgICAgICAgaWYg
KHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPnJl
bmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQXZvaWRpbmdGaXJzdFBvc2l0aW9uSW5UYWJs
ZShjKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTEx
NDYsNyArMTE0Niw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbG9naWNhbEVuZFBvc2l0aW8K
ICAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAgaW4gYmxv
Y2tzIHdpdGhvdXQKICAgICAgICAgLy8gUm9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5IGVkaXRh
YmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tzLgogICAgICAgICBQb3NpdGlvbiBwID0gYy5k
ZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkgJiYgcC5u
b2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKQorICAgICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYm
IHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmICFwLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY2hyb21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRyb2xsZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
aHJvbWl1bS9TZWxlY3Rpb25Db250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIK
ICAgICAvLyBGSVhNRTogU3VwcG9ydCBlZGl0YWJsZSB0ZXh0IGluIGNocm9taXVtLgogICAgIGlm
IChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0aW9uLnN0
YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpIHsKICAg
ICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAg
ZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRD
aGFuZ2VkLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3RO
b3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLCBBWE9iamVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlz
aW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgTlNXcml0aW5nRGlyZWN0aW9uIEVkaXRv
cjo6YmFzZVdyaXRpbmdEaQogICAgIE5TV3JpdGluZ0RpcmVjdGlvbiByZXN1bHQgPSBOU1dyaXRp
bmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKIAogICAgIFBvc2l0aW9uIHBvcyA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIE5vZGUqIG5vZGUgPSBwb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1NlbGVjdGlvbkNvbnRyb2xsZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJv
bGxlck1hYy5tbQkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9TZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3
IEBAIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bm90aWZ5QWNjZXNzaWIKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkgJiYgbV9zZWxlY3Rpb24uc3RhcnQoKS5pc05vdE51
bGwoKSAmJiBtX3NlbGVjdGlvbi5lbmQoKS5pc05vdE51bGwoKSkKLSAgICAgICAgZG9jdW1lbnQt
PmF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLm5v
ZGUoKS0+cmVuZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBm
YWxzZSk7CisgICAgICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24obV9zZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLCBBWE9i
amVjdENhY2hlOjpBWFNlbGVjdGVkVGV4dENoYW5nZWQsIGZhbHNlKTsKIAogICAgIC8vIGlmIHpv
b20gZmVhdHVyZSBpcyBlbmFibGVkLCBpbnNlcnRpb24gcG9pbnQgY2hhbmdlcyBzaG91bGQgdXBk
YXRlIHRoZSB6b29tCiAgICAgaWYgKCFVQVpvb21FbmFibGVkKCkgfHwgIW1fc2VsZWN0aW9uLmlz
Q2FyZXQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHJldmlzaW9u
IDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDEsNyArMTAxLDcgQEAgTm9kZSogRE9NU2VsZWN0aW9uOjphbmNob3JOb2Rl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9y
ID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBzaGFk
b3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwotICAgIHJldHVybiBh
bmNob3JQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gYW5j
aG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwogfQogCiBp
bnQgRE9NU2VsZWN0aW9uOjphbmNob3JPZmZzZXQoKSBjb25zdApAQCAtMTE5LDcgKzExOSw3IEBA
IE5vZGUqIERPTVNlbGVjdGlvbjo6Zm9jdXNOb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3Io
bV9mcmFtZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJh
bnRlZWRIb3N0RnJlZSgpOwotICAgIHJldHVybiBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rp
b24oKSkubm9kZSgpOworICAgIHJldHVybiBmb2N1c1Bvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24o
KSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6Zm9jdXNPZmZzZXQo
KSBjb25zdApAQCAtMTM3LDcgKzEzNyw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6YmFzZU5vZGUo
KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoTm9kZSogc2hhZG93QW5jZXN0b3Ig
PSBzZWxlY3Rpb25TaGFkb3dBbmNlc3RvcihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuIHNoYWRv
d0FuY2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7Ci0gICAgcmV0dXJuIGJh
c2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gYmFzZVBv
c2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERP
TVNlbGVjdGlvbjo6YmFzZU9mZnNldCgpIGNvbnN0CkBAIC0xNTUsNyArMTU1LDcgQEAgTm9kZSog
RE9NU2VsZWN0aW9uOjpleHRlbnROb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
aWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFt
ZSkpCiAgICAgICAgIHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRI
b3N0RnJlZSgpOwotICAgIHJldHVybiBleHRlbnRQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkp
Lm5vZGUoKTsKKyAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5k
ZXByZWNhdGVkTm9kZSgpOwogfQogCiBpbnQgRE9NU2VsZWN0aW9uOjpleHRlbnRPZmZzZXQoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1NCw3ICs3NTQsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERy
YWcoRnJhbWUqIHNyCiAgICAgICAgIGRvU3lzdGVtRHJhZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIG1v
dXNlRHJhZ2dlZFBvaW50LCBjbGlwYm9hcmQsIHNyYywgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChp
c1NlbGVjdGVkICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0
aW9uKSkgewogICAgICAgICBpZiAoIWNsaXBib2FyZC0+aGFzRGF0YSgpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXNOb2RlSW5UZXh0Rm9ybUNvbnRyb2woc3JjLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCkpKQorICAgICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKHNyYy0+c2Vs
ZWN0aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgICAgICAgICAgY2xp
cGJvYXJkLT53cml0ZVBsYWluVGV4dChzcmMtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlID0gc3JjLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODUsNyAr
Mjg1LDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNlbGVjdENsb3Nlc3RXb3JkT3JMaQogICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbjsKICAgICAgICAgRWxlbWVudCogVVJMRWxl
bWVudCA9IHJlc3VsdC5oaXRUZXN0UmVzdWx0KCkuVVJMRWxlbWVudCgpOwogICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcG9zKGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JQb2ludChy
ZXN1bHQubG9jYWxQb2ludCgpKSk7Ci0gICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkgJiYgcG9z
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihVUkxFbGVtZW50KSkKKyAg
ICAgICAgaWYgKHBvcy5pc05vdE51bGwoKSAmJiBwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihVUkxFbGVtZW50KSkKICAgICAgICAgICAgIG5ld1Nl
bGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShV
UkxFbGVtZW50KTsKICAgICAKICAgICAgICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5ID0g
Q2hhcmFjdGVyR3JhbnVsYXJpdHk7CkBAIC0zNDcsNyArMzQ3LDcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudAogCiBzdGF0aWMgaW50IHRleHREaXN0YW5jZShjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7Ci0gICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCk7CisgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CiAgICAgIHJldHVybiBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpLCB0cnVlKTsKIH0KIApAQCAtNjI2LDcg
KzYyNiw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3UKICNpZiBF
TkFCTEUoU1ZHKQogICAgIC8vIFNwZWNpYWwgY2FzZSB0byBsaW1pdCBzZWxlY3Rpb24gdG8gdGhl
IGNvbnRhaW5pbmcgYmxvY2sgZm9yIFNWRyB0ZXh0LgogICAgIC8vIEZJWE1FOiBJc24ndCB0aGVy
ZSBhIGJldHRlciBub24tU1ZHLXNwZWNpZmljIHdheSB0byBkbyB0aGlzPwotICAgIGlmIChOb2Rl
KiBzZWxlY3Rpb25CYXNlTm9kZSA9IG5ld1NlbGVjdGlvbi5iYXNlKCkubm9kZSgpKQorICAgIGlm
IChOb2RlKiBzZWxlY3Rpb25CYXNlTm9kZSA9IG5ld1NlbGVjdGlvbi5iYXNlKCkuZGVwcmVjYXRl
ZE5vZGUoKSkKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogc2VsZWN0aW9uQmFzZVJlbmRlcmVy
ID0gc2VsZWN0aW9uQmFzZU5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBpZiAoc2VsZWN0
aW9uQmFzZVJlbmRlcmVyLT5pc1NWR1RleHQoKSkKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkgIT0gc2VsZWN0aW9uQmFzZVJlbmRl
cmVyLT5jb250YWluaW5nQmxvY2soKSkKQEAgLTIxMjcsNyArMjEyNyw3IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEYKICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBz
ZWxlY3Rpb25Db250cm9sbGVyID0gbV9mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb25Db250cm9sbGVyLT5zZWxlY3Rpb24oKS5zdGFydCgpOwogCi0gICAg
aWYgKHN0YXJ0Lm5vZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpIHx8IHNlbGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKKyAgICBpZiAoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uQ29udHJvbGxlci0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpIHx8IHNlbGVjdGlvbkNvbnRyb2xsZXItPmlzUmFuZ2UoKSkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVyLT50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVkaXRvcigp
LT5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcg
KzIwMSw3IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3UKICAgICBi
b29sIGNhcmV0QnJvd3NpbmcgPSBmb2N1c2VkT3JNYWluRnJhbWUoKS0+c2V0dGluZ3MoKS0+Y2Fy
ZXRCcm93c2luZ0VuYWJsZWQoKTsKIAogICAgIGlmIChjYXJldEJyb3dzaW5nICYmICFjdXJyZW50
Tm9kZSkKLSAgICAgICAgY3VycmVudE5vZGUgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCku
bm9kZSgpOworICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCkBAIC0zMjUsNyArMzI1LDcgQEAgc3RhdGljIHZvaWQgY2xl
YXJTZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgIGlmIChjYXJldEJyb3dzaW5nKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBOb2RlKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBzLT5zZWxlY3Rpb24o
KS5zdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25TdGFydE5vZGUgPSBzLT5zZWxl
Y3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXJ0
Tm9kZSA9PSBuZXdGb2N1c2VkTm9kZSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPmlzRGVzY2VuZGFu
dE9mKG5ld0ZvY3VzZWROb2RlKSB8fCBzZWxlY3Rpb25TdGFydE5vZGUtPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpID09IG5ld0ZvY3VzZWROb2RlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDc4
Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2NTEsMTAgKzI2NTEsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlck9i
amVjdDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgLy8gSWYgaXQgY2FuIGJlIGZvdW5kLCB3ZSBw
cmVmZXIgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHRoYXQgaXMgZWRpdGFibGUuIAog
ICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwotICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCkpCisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlv
bihjYW5kaWRhdGUsIGFmZmluaXR5KTsKICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHBvc2l0aW9u
LnVwc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihub2RlLCBvZmZzZXQsIGFmZmluaXR5
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBz
ZXRTZWxlY3Rpb25SYW5nZShOb2RlKiBub2RlLCBpbnQgcwogICAgIC8vIHN0YXJ0UG9zaXRpb24g
YW5kIGVuZFBvc2l0aW9uIGNhbiBiZSBudWxsIHBvc2l0aW9uIGZvciBleGFtcGxlIHdoZW4KICAg
ICAvLyAiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSIgc3R5bGUgYXR0cmlidXRlIGlzIHNwZWNp
ZmllZC4KICAgICBpZiAoc3RhcnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBlbmRQb3NpdGlvbi5p
c05vdE51bGwoKSkgewotICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSAmJiBlbmRQb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSk7Cisg
ICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbm9kZSAmJiBlbmRQb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUp
OwogICAgIH0KICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxl
Y3Rpb24oc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCkBAIC0zMzgsMTMgKzMzOCwxMyBA
QCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2w6OnZpc2liCiBpbnQgUmVuZGVyVGV4
dENvbnRyb2w6OmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
cG9zKSBjb25zdAogewogICAgIFBvc2l0aW9uIGluZGV4UG9zaXRpb24gPSBwb3MuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBpZiAoIWlzU2VsZWN0YWJsZUVsZW1lbnQoaW5kZXhQb3NpdGlvbi5ub2Rl
KCkpKQorICAgIGlmICghaXNTZWxlY3RhYmxlRWxlbWVudChpbmRleFBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAg
ICByYW5nZS0+c2V0U3RhcnQobV9pbm5lclRleHQuZ2V0KCksIDAsIGVjKTsKICAgICBBU1NFUlQo
IWVjKTsKLSAgICByYW5nZS0+c2V0RW5kKGluZGV4UG9zaXRpb24ubm9kZSgpLCBpbmRleFBvc2l0
aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICByYW5nZS0+c2V0RW5kKGlu
ZGV4UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpLCBlYyk7CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxNywxMyArNzE3LDEzIEBAIHN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKFRleHRT
dHJlYW0mIHQKIAogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkgewotICAg
ICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5z
dGFydCgpLm5vZGUoKSk7CisgICAgICAgIHRzIDw8ICJjYXJldDogcG9zaXRpb24gIiA8PCBzZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw8ICIgb2YgIiA8PCBub2Rl
UG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlm
IChzZWxlY3Rpb24uYWZmaW5pdHkoKSA9PSBVUFNUUkVBTSkKICAgICAgICAgICAgIHRzIDw8ICIg
KHVwc3RyZWFtIGFmZmluaXR5KSI7CiAgICAgICAgIHRzIDw8ICJcbiI7CiAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICB0cyA8PCAic2VsZWN0aW9uIHN0YXJ0OiBw
b3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
PDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIDw8ICJc
biIKLSAgICAgICAgICAgPDwgInNlbGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rp
b24uZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0
aW9uKHNlbGVjdGlvbi5lbmQoKS5ub2RlKCkpIDw8ICJcbiI7CisgICAgICAgIHRzIDw8ICJzZWxl
Y3Rpb24gc3RhcnQ6IHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpIDw8ICJcbiIKKyAgICAgICAgICAgPDwgInNlbGVjdGlvbiBlbmQ6
ICAgcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA8PCAiIG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9k
ZSgpKSA8PCAiXG4iOwogfQogCiBTdHJpbmcgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihGcmFtZSog
ZnJhbWUsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODA3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMi0xNyAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgUG9zaXRpb246Om5vZGUoKSB0byBQb3NpdGlv
bjo6ZGVwcmVjYXRlZE5vZGUoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTQ2MjIKKworICAgICAgICBEb25lIHRoZSByZW5hbWUuIEFsbCBjYWxscyB0
byBub2RlKCkgYXJlIHJlcGxhY2VkIGJ5IGNhbGxzIHRvIGRlcHJlY2F0ZWROb2RlKCkuCisKKyAg
ICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6c2V0Q29tcG9zaXRpb24pOiBDaGVjayB0aGUgbnVsbGl0eSBvZiBzdGFydENvbnRhaW5lcigp
IGluc3RlYWQgb2Ygc3RhcnRQb3NpdGlvbigpLT5ub2RlKCkuCisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpjb25maXJtQ29tcG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnRleHRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6Y2FyZXRPclNlbGVjdGlvbkJvdW5kcyk6CisKIDIwMTEtMDItMTYgIEJyaWFuIFJ5bmVyICA8
YnJ5bmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCShyZXZp
c2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI3Niw3ICsxMjc2LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6
c2V0Q29tcG9zaXRpb24oCiAgICAgLy8gbm9kZSwgd2hpY2ggZG9lc24ndCBleGlzdCBhbnkgbG9u
Z2VyLgogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWRpdG9yLT5jb21wb3NpdGlvblJh
bmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGNvbnN0IE5vZGUqIG5vZGUgPSByYW5n
ZS0+c3RhcnRQb3NpdGlvbigpLm5vZGUoKTsKKyAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpOwogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTMy
NSw3ICsxMzI1LDcgQEAgYm9vbCBXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbgog
ICAgIC8vIG5vZGUsIHdoaWNoIGRvZXNuJ3QgZXhpc3QgYW55IGxvbmdlci4KICAgICBQYXNzUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+Y29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmIChy
YW5nZSkgewotICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KS5ub2RlKCk7CisgICAgICAgIGNvbnN0IE5vZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWlu
ZXIoKTsKICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEzNTYsNyArMTM1Niw3IEBAIFdl
YlRleHRJbnB1dFR5cGUgV2ViVmlld0ltcGw6OnRleHRJbnB1dFQKICAgICBpZiAoIWNvbnRyb2xs
ZXIpCiAgICAgICAgIHJldHVybiB0eXBlOwogCi0gICAgY29uc3QgTm9kZSogbm9kZSA9IGNvbnRy
b2xsZXItPnN0YXJ0KCkubm9kZSgpOworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBjb250cm9sbGVy
LT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gdHlwZTsKIApAQCAtMTM4NSwxNCArMTM4NSwxNCBAQCBXZWJSZWN0IFdlYlZpZXdJbXBsOjpj
YXJldE9yU2VsZWN0aW9uQm91CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gcmVjdDsK
IAotICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBjb250cm9sbGVyLT5zdGFydCgpLm5vZGUoKTsKKyAg
ICBjb25zdCBOb2RlKiBub2RlID0gY29udHJvbGxlci0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgp
OwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHJl
Y3Q7CiAKICAgICBpZiAoY29udHJvbGxlci0+aXNDYXJldCgpKQogICAgICAgICByZWN0ID0gdmll
dy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVyLT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwog
ICAgIGVsc2UgaWYgKGNvbnRyb2xsZXItPmlzUmFuZ2UoKSkgewotICAgICAgICBub2RlID0gY29u
dHJvbGxlci0+ZW5kKCkubm9kZSgpOworICAgICAgICBub2RlID0gY29udHJvbGxlci0+ZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigp
KQogICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBjb250cm9sbGVyLT50b05vcm1hbGl6ZWRSYW5nZSgpOwpJbmRleDogU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwko
cmV2aXNpb24gNzg4MDcpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW5hbWUgUG9zaXRpb246Om5vZGUoKSB0byBQb3NpdGlvbjo6ZGVwcmVjYXRlZE5vZGUo
KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2MjIK
KworICAgICAgICBEb25lIHRoZSByZW5hbWUuIEFsbCBjYWxscyB0byBub2RlKCkgYXJlIHJlcGxh
Y2VkIGJ5IGNhbGxzIHRvIGRlcHJlY2F0ZWROb2RlKCkuCisKKyAgICAgICAgKiB3ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWVudV9oYW5k
bGVyKToKKwogMjAxMS0wMi0xNiAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk3LDcgKzM5Nyw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWUK
ICAgICBpbnQgcmlnaHRBbGlnbmVkID0gRkFMU0U7CiAgICAgSW50UG9pbnQgbG9jYXRpb247CiAK
LSAgICBpZiAoIXN0YXJ0Lm5vZGUoKSB8fCAhZW5kLm5vZGUoKQorICAgIGlmICghc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKSB8fCAhZW5kLmRlcHJlY2F0ZWROb2RlKCkKICAgICAgICAgfHwgKGZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkuaXNDYXJldCgpICYmICFmcmFtZS0+c2VsZWN0aW9u
KCktPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpKSB7CiAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYSBmb2N1c2VkIGVsbWVudCwgdXNlIGl0cyBsb2NhdGlvbi4KICAgICAgICAgaWYgKE5v
ZGUqIGZvY3VzZWROb2RlID0gZ2V0Rm9jdXNlZE5vZGUoZnJhbWUpKSB7CkBAIC00MDYsNyArNDA2
LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9tZQogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8gdmll
dy0+Y29udGVudHNXaWR0aCgpIC0gY29udGV4dE1lbnVNYXJnaW4gOiBjb250ZXh0TWVudU1hcmdp
biwgY29udGV4dE1lbnVNYXJnaW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAg
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODc5OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAyLTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZSBQb3NpdGlvbjo6bm9kZSgpIHRvIFBvc2l0aW9uOjpk
ZXByZWNhdGVkTm9kZSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NDYyMgorICAgICAgICAKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLgorCisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3NtYXJ0RGVs
ZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOl0pOiBTaW5jZSBuZXdTdGFydCBhbmQgbmV3RW5kIGFy
ZSBwYXJlbnQtYW5jaG9yZWQsCisgICAgICAgIHVzZSBjb250YWluZXJOb2RlKCkgYW5kIG9mZnNl
dEluQ29udGFpbmVyTm9kZSgpIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBtZW1iZXIgZnVuY3Rpb25z
LgorCiAyMDExLTAyLTE2ICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwNSw4ICs4MDUsOCBAQCAt
IChET01SYW5nZSAqKV9zbWFydERlbGV0ZVJhbmdlRm9yUHJvcG9zCiAKICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlUmFuZ2Uo
KTsKICAgICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICByYW5nZS0+c2V0U3RhcnQobmV3U3RhcnQu
bm9kZSgpLCBuZXdTdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBleGNlcHRpb24pOwot
ICAgIHJhbmdlLT5zZXRFbmQobmV3U3RhcnQubm9kZSgpLCBuZXdTdGFydC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpLCBleGNlcHRpb24pOworICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFydC5j
b250YWluZXJOb2RlKCksIG5ld1N0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRp
b24pOworICAgIHJhbmdlLT5zZXRFbmQobmV3U3RhcnQuY29udGFpbmVyTm9kZSgpLCBuZXdTdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZXhjZXB0aW9uKTsKICAgICByZXR1cm4ga2l0KHJh
bmdlLmdldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82781</attachid>
            <date>2011-02-17 03:48:49 -0800</date>
            <delta_ts>2011-02-20 17:54:49 -0800</delta_ts>
            <desc>4th attempt</desc>
            <filename>bug-54622-20110217204846.patch</filename>
            <type>text/plain</type>
            <size>214178</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRl
cHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLiBBbGwgY2FsbHMgdG8gbm9k
ZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVkTm9kZSgpIGV4Y2VwdCB3aGVu
CisgICAgICAgIGNhbGxzIHdlcmUgb2YgdGhlIGZvcm0gbm9kZSgpLT5kb2N1bWVudCgpIGFuZCBu
b2RlKCktPmluRG9jdW1lbnQoKSBpbiB3aGljaCBjYXNlIHRoZXkgd2VyZQorICAgICAgICByZXBs
YWNlZCBieSBhbmNob3JOb2RlKCktPmRvY3VtZW50KCkgYW5kIGFuY2hvck5vZGUoKS0+aW5Eb2N1
bWVudCgpIHJlc3BlY3RpdmVseS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBBZGRlZCBQ
b3NpdGlvbjo6Y29udGFpbmVyTm9kZS4KKworICAgICAgICBUaGUgcmVzdCBhYmJyZXZpYXRlZCBm
b3Igc2ltcGxpY2l0eS4gUGxlYXNlIHNlZSBzdm4gbG9nLgorCiAyMDExLTAyLTE3ICBCZW5qYW1p
biBLYWxtYW4gIDxrYWxtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJ5
b3N1a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA3ODc5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE1LDYg
KzEyMTUsNyBAQCBfX1pOSzdXZWJDb3JlOERvY3VtZW50NmRvbWFpbkV2CiBfX1pOSzdXZWJDb3Jl
OEludFBvaW50Y3Y3Q0dQb2ludEV2CiBfX1pOSzdXZWJDb3JlOEludFBvaW50Y3Y4X05TUG9pbnRF
dgogX19aTks3V2ViQ29yZThQb3NpdGlvbjEwZG93bnN0cmVhbUVOU18yN0VkaXRpbmdCb3VuZGFy
eUNyb3NzaW5nUnVsZUUKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24xM2NvbnRhaW5lck5vZGVFdgog
X19aTks3V2ViQ29yZThQb3NpdGlvbjI0cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50RXYKIF9fWk5L
N1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb25FTlNfOUVBZmZpbml0
eUViCiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbkVO
U185RUFmZmluaXR5RWIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNyArNTc4
LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFYT2JqZWN0Q2FjaGU6OnZpc2libGVQbwogICAgIGlmIChk
ZWVwUG9zLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGRlZXBQb3Mubm9kZSgpLT5yZW5kZXJlcigp
OworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZWVwUG9zLmRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwogICAgIApAQCAtNTg2LDcgKzU4Niw3IEBAIFZpc2libGVQb3NpdGlvbiBBWE9i
amVjdENhY2hlOjp2aXNpYmxlUG8KICAgICBpZiAoIWNhY2hlLT5pc0lEaW5Vc2UodGV4dE1hcmtl
ckRhdGEuYXhJRCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKLSAg
ICBpZiAoZGVlcFBvcy5ub2RlKCkgIT0gdGV4dE1hcmtlckRhdGEubm9kZSB8fCBkZWVwUG9zLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgIT0gdGV4dE1hcmtlckRhdGEub2Zmc2V0KQorICAgIGlm
IChkZWVwUG9zLmRlcHJlY2F0ZWROb2RlKCkgIT0gdGV4dE1hcmtlckRhdGEubm9kZSB8fCBkZWVw
UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgIT0gdGV4dE1hcmtlckRhdGEub2Zmc2V0KQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAgICAgcmV0dXJuIHZpc2li
bGVQb3M7CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2Vy
RGF0YUZvclZpcwogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUG9zaXRpb24gZGVlcFBvcyA9
IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBkb21Ob2RlID0gZGVlcFBv
cy5ub2RlKCk7CisgICAgTm9kZSogZG9tTm9kZSA9IGRlZXBQb3MuZGVwcmVjYXRlZE5vZGUoKTsK
ICAgICBBU1NFUlQoZG9tTm9kZSk7CiAgICAgaWYgKCFkb21Ob2RlKQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDkg
KzIyMiw5IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gdXBkYXRlQVhMaW5lU3RhcnQKICAgICAg
ICAgaWYgKHRlbXBQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBwID0gdGVtcFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmICghcC5ub2Rl
KCkpCisgICAgICAgIGlmICghcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHJlbmRlcmVyID0gcC5ub2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIHJlbmRl
cmVyID0gcC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRl
cmVyIHx8IChyZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIElubGluZUJveCogYm94OwpA
QCAtMzE4LDcgKzMxOCw3IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmpl
Y3QKIAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydE9mU3R5bGVSYW5nZShjb25zdCBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvcykKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyID0g
cmVuZGVyZXI7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAK
QEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTdHlsZVJh
bmdlCiAKIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kT2ZTdHlsZVJhbmdlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvcykKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IHJl
bmRlcmVyOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogCkBA
IC02NDksNyArNjQ5LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVj
dAogICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IFJlbmRlck9iamVjdCogb2JqID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIG9iaiA9IHZpc2libGVQb3MuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghb2JqKQogICAg
ICAgICByZXR1cm4gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3ODc5
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0ODIsMTMgKzI0ODIsMTMgQEAgaW50IEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmluZGV4Rm9yVgogICAgICAgICByZXR1cm4gMDsKICAgICAK
ICAgICBQb3NpdGlvbiBpbmRleFBvc2l0aW9uID0gcG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAg
aWYgKCFpbmRleFBvc2l0aW9uLm5vZGUoKSB8fCBpbmRleFBvc2l0aW9uLm5vZGUoKS0+cm9vdEVk
aXRhYmxlRWxlbWVudCgpICE9IG5vZGUpCisgICAgaWYgKCFpbmRleFBvc2l0aW9uLmFuY2hvck5v
ZGUoKSB8fCBpbmRleFBvc2l0aW9uLmFuY2hvck5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
ICE9IG5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG1fcmVuZGVyZXIt
PmRvY3VtZW50KCkpOwogICAgIHJhbmdlLT5zZXRTdGFydChub2RlLCAwLCBlYyk7Ci0gICAgcmFu
Z2UtPnNldEVuZChpbmRleFBvc2l0aW9uLm5vZGUoKSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgcmFuZ2UtPnNldEVuZChpbmRleFBvc2l0aW9uLmFu
Y2hvck5vZGUoKSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7
CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpOwogfQog
CkBAIC0yNjIxLDcgKzI2MjEsNyBAQCBpbnQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5k
ZXgoY29uCiAgICAgaWYgKCFpc1RleHRDb250cm9sKCkpCiAgICAgICAgIHJldHVybiAtMTsKICAg
ICAKLSAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7Cisg
ICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAtMTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIxLDcgKzEyMjEsNyBAQCBzdGF0aWMgZ2ludCB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jCiAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBOb2RlKiBmb2N1
c2VkTm9kZSA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpLmVuZCgpLm5vZGUoKTsKKyAgICBOb2Rl
KiBmb2N1c2VkTm9kZSA9IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpLmVuZCgpLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgaWYgKCFmb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgUGFz
c1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IAogCiBQb3NpdGlvbiBQb3NpdGlv
bjo6cHJldmlvdXMoUG9zaXRpb25Nb3ZlVHlwZSBtb3ZlVHlwZSkgY29uc3QKIHsKLSAgICBOb2Rl
KiBuID0gbm9kZSgpOworICAgIE5vZGUqIG4gPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICgh
bikKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIApAQCAtMjY5LDcgKzI2OSw3IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUKIHsKICAgICBBU1NFUlQobW92ZVR5
cGUgIT0gQmFja3dhcmREZWxldGlvbik7CiAKLSAgICBOb2RlKiBuID0gbm9kZSgpOworICAgIE5v
ZGUqIG4gPSBkZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIApAQCAtMzIzLDcgKzMyMyw3IEBAIGJvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRp
bmdQb3NpdGlvbkZvck4KIHsKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIHJldHVybiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2RlKCkpOwor
ICAgIHJldHVybiBtX29mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhkZXByZWNhdGVkTm9k
ZSgpKTsKIH0KIAogLy8gQSBwb3NpdGlvbiBpcyBjb25zaWRlcmVkIGF0IGVkaXRpbmcgYm91bmRh
cnkgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKQEAgLTMzNiwxNSArMzM2LDE1IEBA
IGJvb2wgUG9zaXRpb246OmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck4KIGJvb2wgUG9zaXRpb246
OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKIHsKICAgICBQb3NpdGlvbiBuZXh0UG9zaXRpb24g
PSBkb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICBpZiAoYXRGaXJzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5l
eHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGF0Rmlyc3RF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFu
ZXh0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIFBvc2l0aW9uIHByZXZQb3NpdGlvbiA9IHVw
c3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICBpZiAoYXRMYXN0RWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZSgpICYmIHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0
aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAoYXRMYXN0RWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZSgpICYmIHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAKLSAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYm
ICFuZXh0UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpCi0gICAgICAgICYmIHBy
ZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50
RWRpdGFibGUoKTsKKyAgICByZXR1cm4gbmV4dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmICFuZXh0
UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKQorICAgICAgICAm
JiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQogCiBOb2RlKiBQb3NpdGlvbjo6cGFyZW50RWRp
dGluZ0JvdW5kYXJ5KCkgY29uc3QKQEAgLTM2OCwyNiArMzY4LDI2IEBAIGJvb2wgUG9zaXRpb246
OmF0U3RhcnRPZlRyZWUoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuICFub2RlKCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNldCA8
PSAwOworICAgIHJldHVybiAhZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICYmIG1fb2Zm
c2V0IDw9IDA7CiB9CiAKIGJvb2wgUG9zaXRpb246OmF0RW5kT2ZUcmVlKCkgY29uc3QKIHsKICAg
ICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiAhbm9kZSgp
LT5wYXJlbnROb2RlKCkgJiYgbV9vZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobm9kZSgp
KTsKKyAgICByZXR1cm4gIWRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAmJiBtX29mZnNl
dCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhkZXByZWNhdGVkTm9kZSgpKTsKIH0KIAogaW50IFBv
c2l0aW9uOjpyZW5kZXJlZE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFub2RlKCktPmlzVGV4
dE5vZGUoKSkKKyAgICBpZiAoIWRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0OwogICAgCi0gICAgaWYgKCFub2RlKCktPnJlbmRlcmVyKCkpCisg
ICAgaWYgKCFkZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gbV9v
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIAogICAgIGludCByZXN1bHQgPSAwOwotICAgIFJl
bmRlclRleHQgKnRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChub2RlKCktPnJlbmRlcmVyKCkp
OworICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyVGV4dChkZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICBmb3IgKElubGluZVRleHRCb3ggKmJveCA9IHRleHRS
ZW5kZXJlci0+Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7
CiAgICAgICAgIGludCBzdGFydCA9IGJveC0+c3RhcnQoKTsKICAgICAgICAgaW50IGVuZCA9IGJv
eC0+c3RhcnQoKSArIGJveC0+bGVuKCk7CkBAIC00MDgsNyArNDA4LDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaQogICAgIGlmIChpc051bGwoKSkKICAgICAgICAg
cmV0dXJuIFBvc2l0aW9uKCk7CiAKLSAgICBOb2RlICpmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9
IG5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIE5vZGUqIGZyb21Sb290RWRpdGFi
bGVFbGVtZW50ID0gZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAg
ICAgYm9vbCBhdFN0YXJ0T2ZMaW5lID0gaXNTdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24oKnRo
aXMsIGFmZmluaXR5KSk7CiAgICAgYm9vbCByZW5kZXJlZCA9IGlzQ2FuZGlkYXRlKCk7CkBAIC00
MTcsNyArNDE3LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzQ2hhcmFjdGVyUG9zaQog
ICAgIHdoaWxlICghY3VycmVudFBvcy5hdFN0YXJ0T2ZUcmVlKCkpIHsKICAgICAgICAgY3VycmVu
dFBvcyA9IGN1cnJlbnRQb3MucHJldmlvdXMoKTsKIAotICAgICAgICBpZiAoY3VycmVudFBvcy5u
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCkK
KyAgICAgICAgaWYgKGN1cnJlbnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuICp0
aGlzOwogCiAgICAgICAgIGlmIChhdFN0YXJ0T2ZMaW5lIHx8ICFyZW5kZXJlZCkgewpAQCAtNDM2
LDcgKzQzNiw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0Q2hhcmFjdGVyUG9zaXRpb24KICAg
ICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCi0gICAgTm9kZSAq
ZnJvbVJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KyAgICBOb2RlKiBmcm9tUm9vdEVkaXRhYmxlRWxlbWVudCA9IGRlcHJlY2F0ZWROb2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKTsKIAogICAgIGJvb2wgYXRFbmRPZkxpbmUgPSBpc0VuZE9mTGlu
ZShWaXNpYmxlUG9zaXRpb24oKnRoaXMsIGFmZmluaXR5KSk7CiAgICAgYm9vbCByZW5kZXJlZCA9
IGlzQ2FuZGlkYXRlKCk7CkBAIC00NDUsNyArNDQ1LDcgQEAgUG9zaXRpb24gUG9zaXRpb246Om5l
eHRDaGFyYWN0ZXJQb3NpdGlvbgogICAgIHdoaWxlICghY3VycmVudFBvcy5hdEVuZE9mVHJlZSgp
KSB7CiAgICAgICAgIGN1cnJlbnRQb3MgPSBjdXJyZW50UG9zLm5leHQoKTsKIAotICAgICAgICBp
ZiAoY3VycmVudFBvcy5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBmcm9tUm9vdEVk
aXRhYmxlRWxlbWVudCkKKyAgICAgICAgaWYgKGN1cnJlbnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IGZyb21Sb290RWRpdGFibGVFbGVtZW50KQogICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgICAgIGlmIChhdEVuZE9mTGluZSB8fCAhcmVuZGVy
ZWQpIHsKQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgYm9vbCBpc1N0cmVhbWVyKGNvbnN0IFBv
c2l0aW9uSXRlCiAvLyBpbiBib3VuZGFyeSwgd2hlcmUgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlz
dGluY3RQb3NpdGlvbnMoYm91bmRhcnkpIGlzIHRydWUuCiBQb3NpdGlvbiBQb3NpdGlvbjo6dXBz
dHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiB7Ci0gICAgTm9k
ZSogc3RhcnROb2RlID0gbm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwog
ICAgIApAQCAtNjI4LDcgKzYyOCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0
aW5nQm91bmQKIC8vIGluIGJvdW5kYXJ5IGFmdGVyIHRoZSBsYXN0IGNhbmRpZGF0ZSwgd2hlcmUg
ZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91bmRhcnkpLgogUG9zaXRp
b24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUp
IGNvbnN0CiB7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gbm9kZSgpOworICAgIE5vZGUqIHN0YXJ0
Tm9kZSA9IGRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCkBAIC03NjQsNyArNzY0LDcgQEAgYm9vbCBQb3NpdGlvbjo6aXND
YW5kaWRhdGUoKSBjb25zdAogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
QEAgLTc3MiwxMyArNzcyLDEzIEBAIGJvb2wgUG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAg
ICAgIHJldHVybiAhbV9vZmZzZXQgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFy
ZW50Tm9kZSgpKTsKKyAgICAgICAgcmV0dXJuICFtX29mZnNldCAmJiAhbm9kZUlzVXNlclNlbGVj
dE5vbmUoZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKTsKIAogICAgIGlmIChyZW5kZXJl
ci0+aXNUZXh0KCkpCi0gICAgICAgIHJldHVybiAhbm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgp
KSAmJiBpblJlbmRlcmVkVGV4dCgpOworICAgICAgICByZXR1cm4gIW5vZGVJc1VzZXJTZWxlY3RO
b25lKGRlcHJlY2F0ZWROb2RlKCkpICYmIGluUmVuZGVyZWRUZXh0KCk7CiAKLSAgICBpZiAoaXNU
YWJsZUVsZW1lbnQobm9kZSgpKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKLSAg
ICAgICAgcmV0dXJuIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIHx8IGF0TGFzdEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+
cGFyZW50Tm9kZSgpKTsKKyAgICBpZiAoaXNUYWJsZUVsZW1lbnQoZGVwcmVjYXRlZE5vZGUoKSkg
fHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KGRlcHJlY2F0ZWROb2RlKCkpKQorICAgICAgICByZXR1
cm4gKGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgfHwgYXRMYXN0RWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSgpKSAmJiAhbm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKS0+
cGFyZW50Tm9kZSgpKTsKIAogICAgIGlmIChtX2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoaHRtbFRh
ZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc4NiwyMSArNzg2LDIxIEBAIGJvb2wgUG9z
aXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICBpZiAocmVuZGVyZXItPmlzQmxvY2tGbG93
KCkpIHsKICAgICAgICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBt
X2FuY2hvck5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKICAgICAgICAgICAgIGlmICghUG9z
aXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRl
cmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYm
ICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9hbmNob3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFQb3Np
dGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5n
Qm91bmRhcnkoKTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gbV9hbmNo
b3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVj
dE5vbmUobm9kZSgpKSAmJiBhdEVkaXRpbmdCb3VuZGFyeSgpOworICAgICAgICByZXR1cm4gbV9h
bmNob3JOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNl
bGVjdE5vbmUoZGVwcmVjYXRlZE5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnkoKTsKIAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBQb3NpdGlvbjo6aW5SZW5kZXJlZFRleHQoKSBjb25z
dAogewotICAgIGlmIChpc051bGwoKSB8fCAhbm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgaWYg
KGlzTnVsbCgpIHx8ICFkZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUo
KS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC04MzMsMTAgKzgzMywxMCBAQCBzdGF0aWMgdW5zaWduZWQgY2FyZXRNYXhS
ZW5kZXJlZE9mZnNldChjCiAKIGJvb2wgUG9zaXRpb246OmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSBj
b25zdAogewotICAgIGlmIChpc051bGwoKSB8fCAhbm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAg
aWYgKGlzTnVsbCgpIHx8ICFkZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgCkBAIC04NjAsMTEgKzg2MCwxMSBAQCBib29sIFBvc2l0aW9uOjpyZW5kZXJz
SW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgaWYgKGlzTnVsbCgpIHx8IHBvcy5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUo
KS0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0ICpwb3NSZW5kZXJlciA9IHBvcy5ub2RlKCktPnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiBwb3NSZW5kZXJlciA9IHBvcy5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcG9zUmVuZGVyZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtODcyLDMyICs4NzIsMzIgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0lu
RGlmZmVyZW50UG9zaXRpbwogICAgICAgICBwb3NSZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAobm9k
ZSgpID09IHBvcy5ub2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShiclRh
ZykpCisgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCkgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpIHsK
KyAgICAgICAgaWYgKGRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChtX29mZnNldCA9PSBwb3MuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIAotICAgICAgICBpZiAoIW5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3Mubm9kZSgpLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgaWYgKCFkZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2Rl
KCkgJiYgIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAg
IGlmIChtX29mZnNldCAhPSBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobm9k
ZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBwb3MuaXNDYW5kaWRhdGUoKSkKKyAgICBpZiAoZGVw
cmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgJiYgcG9zLmlzQ2FuZGlkYXRlKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAotICAgIGlmIChwb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBpc0NhbmRpZGF0ZSgpKQorICAgIGlmIChwb3MuZGVwcmVj
YXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgJiYgaXNDYW5kaWRhdGUoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKG5vZGUoKS0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpICE9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoKSkKKyAgICBpZiAoZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpICE9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKG5vZGUoKS0+aXNUZXh0Tm9kZSgpICYm
ICFpblJlbmRlcmVkVGV4dCgpKQorICAgIGlmIChkZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2Rl
KCkgJiYgIWluUmVuZGVyZWRUZXh0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChwb3Mubm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvcy5pblJlbmRlcmVkVGV4dCgpKQorICAg
IGlmIChwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3MuaW5SZW5kZXJl
ZFRleHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaW50IHRoaXNSZW5kZXJlZE9m
ZnNldCA9IHJlbmRlcmVkT2Zmc2V0KCk7CkBAIC05MTYsOCArOTE2LDggQEAgYm9vbCBQb3NpdGlv
bjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpbwogICAgIExPRyhFZGl0aW5nLCAidGhpc1JlbmRl
cmVkT2Zmc2V0OiAgICAgICAgICVkXG4iLCB0aGlzUmVuZGVyZWRPZmZzZXQpOwogICAgIExPRyhF
ZGl0aW5nLCAicG9zUmVuZGVyZXI6ICAgICAgICAgICAgJXAgWyVwXVxuIiwgcG9zUmVuZGVyZXIs
IGIyKTsKICAgICBMT0coRWRpdGluZywgInBvc1JlbmRlcmVkT2Zmc2V0OiAgICAgICVkXG4iLCBw
b3NSZW5kZXJlZE9mZnNldCk7Ci0gICAgTE9HKEVkaXRpbmcsICJub2RlIG1pbi9tYXg6ICAgICAg
ICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQobm9kZSgpKSwgY2FyZXRNYXhSZW5kZXJlZE9m
ZnNldChub2RlKCkpKTsKLSAgICBMT0coRWRpdGluZywgInBvcyBub2RlIG1pbi9tYXg6ICAgICAg
ICVkOiVkXG4iLCBjYXJldE1pbk9mZnNldChwb3Mubm9kZSgpKSwgY2FyZXRNYXhSZW5kZXJlZE9m
ZnNldChwb3Mubm9kZSgpKSk7CisgICAgTE9HKEVkaXRpbmcsICJub2RlIG1pbi9tYXg6ICAgICAg
ICAgICAlZDolZFxuIiwgY2FyZXRNaW5PZmZzZXQoZGVwcmVjYXRlZE5vZGUoKSksIGNhcmV0TWF4
UmVuZGVyZWRPZmZzZXQoZGVwcmVjYXRlZE5vZGUoKSkpOworICAgIExPRyhFZGl0aW5nLCAicG9z
IG5vZGUgbWluL21heDogICAgICAgJWQ6JWRcbiIsIGNhcmV0TWluT2Zmc2V0KHBvcy5kZXByZWNh
dGVkTm9kZSgpKSwgY2FyZXRNYXhSZW5kZXJlZE9mZnNldChwb3MuZGVwcmVjYXRlZE5vZGUoKSkp
OwogICAgIExPRyhFZGl0aW5nLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAKICAgICBpZiAoIWIxIHx8
ICFiMikgewpAQCAtOTI4LDEzICs5MjgsMTMgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlm
ZmVyZW50UG9zaXRpbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAobmV4
dFJlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9PSBwb3Mubm9kZSgpICYmIAotICAgICAgICB0aGlz
UmVuZGVyZWRPZmZzZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KG5vZGUoKSkgJiYg
cG9zUmVuZGVyZWRPZmZzZXQgPT0gMCkgeworICAgIGlmIChuZXh0UmVuZGVyZWRFZGl0YWJsZShk
ZXByZWNhdGVkTm9kZSgpKSA9PSBwb3MuZGVwcmVjYXRlZE5vZGUoKQorICAgICAgICAmJiB0aGlz
UmVuZGVyZWRPZmZzZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KGRlcHJlY2F0ZWRO
b2RlKCkpICYmICFwb3NSZW5kZXJlZE9mZnNldCkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIGlmIChwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUobm9kZSgpKSA9PSBw
b3Mubm9kZSgpICYmIAotICAgICAgICB0aGlzUmVuZGVyZWRPZmZzZXQgPT0gMCAmJiBwb3NSZW5k
ZXJlZE9mZnNldCA9PSAoaW50KWNhcmV0TWF4UmVuZGVyZWRPZmZzZXQocG9zLm5vZGUoKSkpIHsK
KyAgICBpZiAocHJldmlvdXNSZW5kZXJlZEVkaXRhYmxlKGRlcHJlY2F0ZWROb2RlKCkpID09IHBv
cy5kZXByZWNhdGVkTm9kZSgpCisgICAgICAgICYmICF0aGlzUmVuZGVyZWRPZmZzZXQgJiYgcG9z
UmVuZGVyZWRPZmZzZXQgPT0gKGludCljYXJldE1heFJlbmRlcmVkT2Zmc2V0KHBvcy5kZXByZWNh
dGVkTm9kZSgpKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC05NDgsMTIg
Kzk0OCwxMiBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3NpCiAgICAg
aWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAKLSAgICBpZiAo
dXBzdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgIGlmICh1cHN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91c0NoYXJhY3RlclBvc2l0aW9u
KGFmZmluaXR5KTsKLSAgICBpZiAocHJldiAhPSAqdGhpcyAmJiBwcmV2Lm5vZGUoKS0+aW5TYW1l
Q29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSgpKSAmJiBwcmV2Lm5vZGUoKS0+aXNUZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmcgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KHBy
ZXYubm9kZSgpKS0+ZGF0YSgpOworICAgIGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYuZGVwcmVj
YXRlZE5vZGUoKS0+aW5TYW1lQ29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRlZE5v
ZGUoKSkgJiYgcHJldi5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAg
U3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRleHQgKj4ocHJldi5kZXByZWNhdGVkTm9kZSgp
KS0+ZGF0YSgpOwogICAgICAgICBVQ2hhciBjID0gc3RyaW5nW3ByZXYuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKV07CiAgICAgICAgIGlmIChjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVzcGFj
ZSA/IChpc1NwYWNlT3JOZXdsaW5lKGMpIHx8IGMgPT0gbm9CcmVha1NwYWNlKSA6IGlzQ29sbGFw
c2libGVXaGl0ZXNwYWNlKGMpKQogICAgICAgICAgICAgaWYgKGlzRWRpdGFibGVQb3NpdGlvbihw
cmV2KSkKQEAgLTEwNDUsMTEgKzEwNDUsMTEgQEAgc3RhdGljIFBvc2l0aW9uIHVwc3RyZWFtSWdu
b3JpbmdFZGl0aW5nQgogdm9pZCBQb3NpdGlvbjo6Z2V0SW5saW5lQm94QW5kT2Zmc2V0KEVBZmZp
bml0eSBhZmZpbml0eSwgVGV4dERpcmVjdGlvbiBwcmltYXJ5RGlyZWN0aW9uLCBJbmxpbmVCb3gq
JiBpbmxpbmVCb3gsIGludCYgY2FyZXRPZmZzZXQpIGNvbnN0CiB7CiAgICAgY2FyZXRPZmZzZXQg
PSBtX29mZnNldDsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSgpLT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBkZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpOwogCiAgICAgaWYgKCFyZW5kZXJlci0+aXNUZXh0KCkpIHsKICAgICAgICAgaW5saW5l
Qm94ID0gMDsKLSAgICAgICAgaWYgKGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobm9kZSgpKSAm
JiByZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiBoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2Nl
bmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikpIHsKKyAgICAgICAgaWYgKGNhbkhhdmVDaGlsZHJl
bkZvckVkaXRpbmcoZGVwcmVjYXRlZE5vZGUoKSkgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkg
JiYgaGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIp
KSB7CiAgICAgICAgICAgICAvLyBUcnkgYSB2aXN1YWxseSBlcXVpdmFsZW50IHBvc2l0aW9uIHdp
dGggcG9zc2libHkgb3Bwb3NpdGUgZWRpdGFiaWxpdHkuIFRoaXMgaGVscHMgaW4gY2FzZSB8dGhp
c3wgaXMgaW4KICAgICAgICAgICAgIC8vIGFuIGVkaXRhYmxlIGJsb2NrIGJ1dCBzdXJyb3VuZGVk
IGJ5IG5vbi1lZGl0YWJsZSBwb3NpdGlvbnMuIEl0IGFjdHMgdG8gbmVnYXRlIHRoZSBsb2dpYyBh
dCB0aGUgYmVnaW5uaW5nCiAgICAgICAgICAgICAvLyBvZiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZp
c2libGVQb3NpdGlvbigpLgpAQCAtMTIxMSw3ICsxMjExLDcgQEAgdm9pZCBQb3NpdGlvbjo6ZGVi
dWdQb3NpdGlvbihjb25zdCBjaGFyKgogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiBudWxsXG4iLCBtc2cpOwogICAgIGVsc2UKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiAlcyBbJXBdIGF0ICVkXG4iLCBtc2cs
IG5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpLCBub2RlKCksIG1fb2Zmc2V0KTsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiAlcyBbJXBdIGF0ICVkXG4iLCBt
c2csIGRlcHJlY2F0ZWROb2RlKCktPm5vZGVOYW1lKCkudXRmOCgpLmRhdGEoKSwgZGVwcmVjYXRl
ZE5vZGUoKSwgbV9vZmZzZXQpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMTIyNyw3ICsxMjI3
LDcgQEAgdm9pZCBQb3NpdGlvbjo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYgogICAgICAgICBy
ZXN1bHQgKz0gIm9mZnNldCAiOwogICAgICAgICByZXN1bHQgKz0gU3RyaW5nOjpudW1iZXIobV9v
ZmZzZXQpOwogICAgICAgICByZXN1bHQgKz0gIiBvZiAiOwotICAgICAgICBub2RlKCktPmZvcm1h
dEZvckRlYnVnZ2VyKHMsIHNpemVvZihzKSk7CisgICAgICAgIGRlcHJlY2F0ZWROb2RlKCktPmZv
cm1hdEZvckRlYnVnZ2VyKHMsIHNpemVvZihzKSk7CiAgICAgICAgIHJlc3VsdCArPSBzOwogICAg
IH0KICAgICAgICAgICAKQEAgLTEyNTQsOCArMTI1NCw4IEBAIHZvaWQgUG9zaXRpb246OnNob3dB
bmNob3JUeXBlQW5kT2Zmc2V0KCkKIAogdm9pZCBQb3NpdGlvbjo6c2hvd1RyZWVGb3JUaGlzKCkg
Y29uc3QKIHsKLSAgICBpZiAobm9kZSgpKSB7Ci0gICAgICAgIG5vZGUoKS0+c2hvd1RyZWVGb3JU
aGlzKCk7CisgICAgaWYgKGFuY2hvck5vZGUoKSkgeworICAgICAgICBhbmNob3JOb2RlKCktPnNo
b3dUcmVlRm9yVGhpcygpOwogICAgICAgICBzaG93QW5jaG9yVHlwZUFuZE9mZnNldCgpOwogICAg
IH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBDYWxsZXJzIHNob3VsZCBiZSBtb3ZlZCBvZmYgb2Yg
bm9kZSgpLCBub2RlKCkgaXMgbm90IGFsd2F5cyB0aGUgY29udGFpbmVyIGZvciB0aGlzIHBvc2l0
aW9uLgogICAgIC8vIEZvciBub2RlcyB3aGljaCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgp
KSByZXR1cm5zIHRydWUsIHBvc2l0aW9ucyBsaWtlIFtpZ25vcmVkTm9kZSwgMF0KICAgICAvLyB3
aWxsIGJlIHRyZWF0ZWQgYXMgYmVmb3JlIGlnbm9yZWROb2RlICh0aHVzIG5vZGUoKSBpcyByZWFs
bHkgYWZ0ZXIgdGhlIHBvc2l0aW9uLCBub3QgY29udGFpbmluZyBpdCkuCi0gICAgTm9kZSogbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yTm9kZS5nZXQoKTsgfQorICAgIE5vZGUqIGRlcHJl
Y2F0ZWROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hbmNob3JOb2RlLmdldCgpOyB9CiAKICAgICAv
LyBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ig
cG9zaXRpb25zLCB1bmxlc3MKICAgICAvLyB0aGUgcG9zaXRpb24gaXMgYSBsZWdhY3kgZWRpdGlu
ZyBwb3NpdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsMTEgKzEzNCwxMSBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6Zm9ybWF0
U2VsCiAgICAgICAgIC8vIGluZGVudEludG9CbG9ja3F1b3RlIGNvdWxkIG1vdmUgbW9yZSB0aGFu
IG9uZSBwYXJhZ3JhcGggaWYgdGhlIHBhcmFncmFwaAogICAgICAgICAvLyBpcyBpbiBhIGxpc3Qg
aXRlbSBvciBhIHRhYmxlLiBBcyBhIHJlc3VsdCwgZW5kQWZ0ZXJTZWxlY3Rpb24gY291bGQgcmVm
ZXIgdG8gYSBwb3NpdGlvbgogICAgICAgICAvLyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50Lgot
ICAgICAgICBpZiAoZW5kQWZ0ZXJTZWxlY3Rpb24uaXNOb3ROdWxsKCkgJiYgIWVuZEFmdGVyU2Vs
ZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgICAgIGlm
IChlbmRBZnRlclNlbGVjdGlvbi5pc05vdE51bGwoKSAmJiAhZW5kQWZ0ZXJTZWxlY3Rpb24uZGVl
cEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAvLyBTYW5pdHkgY2hlY2s6IE1ha2Ugc3VyZSBvdXIgbW92ZVBhcmFncmFw
aCBjYWxscyBkaWRuJ3QgcmVtb3ZlIGVuZE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgp
Lm5vZGUoKQorICAgICAgICAvLyBTYW5pdHkgY2hlY2s6IE1ha2Ugc3VyZSBvdXIgbW92ZVBhcmFn
cmFwaCBjYWxscyBkaWRuJ3QgcmVtb3ZlIGVuZE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkKICAgICAgICAgLy8gSWYgc29tZWhvdyB3ZSBkaWQsIHJldHVy
biB0byBwcmV2ZW50IGNyYXNoZXMuCi0gICAgICAgIGlmIChlbmRPZk5leHRQYXJhZ3JhcGguaXNO
b3ROdWxsKCkgJiYgIWVuZE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+
aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChlbmRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxs
KCkgJiYgIWVuZE9mTmV4dFBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+
aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTgyLDggKzE4Miw4IEBAIHZvaWQgQXBwbHlC
bG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclAKICAgICBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShzdGFydCk7CiAgICAgYm9vbCBpc1N0
YXJ0QW5kRW5kT25TYW1lTm9kZSA9IGZhbHNlOwogICAgIGlmIChzdGFydFN0eWxlKSB7Ci0gICAg
ICAgIGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHRO
b2RlKGVuZCkgJiYgc3RhcnQubm9kZSgpID09IGVuZC5ub2RlKCk7Ci0gICAgICAgIGJvb2wgaXNT
dGFydEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJhZ3JhcGgpICYmIHN0YXJ0Lm5vZGUoKSA9PSBtX2Vu
ZE9mTGFzdFBhcmFncmFwaC5ub2RlKCk7CisgICAgICAgIGlzU3RhcnRBbmRFbmRPblNhbWVOb2Rl
ID0gcmVuZGVyU3R5bGVPZkVuY2xvc2luZ1RleHROb2RlKGVuZCkgJiYgc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgYm9vbCBpc1N0YXJ0QW5k
RW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0
Tm9kZShtX2VuZE9mTGFzdFBhcmFncmFwaCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA9PSBt
X2VuZE9mTGFzdFBhcmFncmFwaC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgICAgIC8vIEF2b2lk
IG9idGFuaW5pbmcgdGhlIHN0YXJ0IG9mIG5leHQgcGFyYWdyYXBoIGZvciBzdGFydAogICAgICAg
ICBpZiAoc3RhcnRTdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgaXNOZXdMaW5lQXRQb3NpdGlv
bihzdGFydCkgJiYgIWlzTmV3TGluZUF0UG9zaXRpb24oc3RhcnQucHJldmlvdXMoKSkgJiYgc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPiAwKQpAQCAtMTkyLDE1ICsxOTIsMTUgQEAgdm9p
ZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUAogICAgICAgICAvLyBJZiBzdGFy
dCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLCBzcGxpdC4KICAgICAgICAgaWYgKCFz
dGFydFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSA+IDApIHsKICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpOwotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNfY2Fz
dDxUZXh0Kj4oc3RhcnQubm9kZSgpKSwgc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgc3RhcnQg
PSBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnQubm9kZSgpKTsKKyAgICAgICAgICAgIHNwbGl0VGV4
dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpLCBzdGFydE9m
ZnNldCk7CisgICAgICAgICAgICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0QW5kRW5kT25TYW1lTm9kZSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVChlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0g
c3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIGVuZCA9IFBvc2l0aW9uKGVuZC5ub2RlKCks
IGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0T2Zmc2V0LCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICAgICAgICAgICAgICBlbmQgPSBQb3NpdGlvbihl
bmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnRP
ZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2Rl
KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpID49IHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBtX2VuZE9m
TGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm5vZGUoKSwgbV9l
bmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydE9mZnNldCwK
KyAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKG1fZW5kT2ZM
YXN0UGFyYWdyYXBoLmRlcHJlY2F0ZWROb2RlKCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpIC0gc3RhcnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0yMDgsMTMgKzIwOCwxMyBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6
cmFuZ2VGb3JQCiAKICAgICBSZW5kZXJTdHlsZSogZW5kU3R5bGUgPSByZW5kZXJTdHlsZU9mRW5j
bG9zaW5nVGV4dE5vZGUoZW5kKTsKICAgICBpZiAoZW5kU3R5bGUpIHsKLSAgICAgICAgYm9vbCBp
c0VuZEFuZEVuZE9mTGFzdFBhcmFncmFwaE9uU2FtZU5vZGUgPSByZW5kZXJTdHlsZU9mRW5jbG9z
aW5nVGV4dE5vZGUobV9lbmRPZkxhc3RQYXJhZ3JhcGgpICYmIGVuZC5ub2RlKCkgPT0gbV9lbmRP
Zkxhc3RQYXJhZ3JhcGgubm9kZSgpOworICAgICAgICBib29sIGlzRW5kQW5kRW5kT2ZMYXN0UGFy
YWdyYXBoT25TYW1lTm9kZSA9IHJlbmRlclN0eWxlT2ZFbmNsb3NpbmdUZXh0Tm9kZShtX2VuZE9m
TGFzdFBhcmFncmFwaCkgJiYgZW5kLmRlcHJlY2F0ZWROb2RlKCkgPT0gbV9lbmRPZkxhc3RQYXJh
Z3JhcGguZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgLy8gSW5jbHVkZSBcbiBhdCB0aGUgZW5k
IG9mIGxpbmUgaWYgd2UncmUgYXQgYW4gZW1wdHkgcGFyYWdyYXBoCiAgICAgICAgIGlmIChlbmRT
dHlsZS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgc3RhcnQgPT0gZW5kCiAgICAgICAgICAgICAmJiBl
bmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBlbmQuY29udGFpbmVyTm9kZSgpLT5tYXhDaGFy
YWN0ZXJPZmZzZXQoKSkgewogICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgICAgIGlmICghaXNOZXdMaW5lQXRQb3NpdGlvbihl
bmQucHJldmlvdXMoKSkgJiYgaXNOZXdMaW5lQXRQb3NpdGlvbihlbmQpKQotICAgICAgICAgICAg
ICAgIGVuZCA9IFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZE9mZnNldCArIDEsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgICAgICAgICAgICAgIGVuZCA9IFBvc2l0aW9u
KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmRPZmZzZXQgKyAxLCBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKTsKICAgICAgICAgICAgIGlmIChpc0VuZEFuZEVuZE9mTGFzdFBhcmFn
cmFwaE9uU2FtZU5vZGUgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IG1fZW5kT2ZM
YXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgICAgIG1f
ZW5kT2ZMYXN0UGFyYWdyYXBoID0gZW5kOwogICAgICAgICB9CkBAIC0yMjIsMTcgKzIyMiwxNyBA
QCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQCiAgICAgICAgIC8vIElm
IGVuZCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLCBzcGxpdC4KICAgICAgICAgaWYg
KCFlbmRTdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpCiAgICAgICAgICAgICAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPCBlbmQu
Y29udGFpbmVyTm9kZSgpLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgewotICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSksIGVuZC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXRpY19jYXN0PFRl
eHQqPihlbmQuZGVwcmVjYXRlZE5vZGUoKSksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CiAgICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUpCi0gICAgICAgICAgICAg
ICAgc3RhcnQgPSBwb3NpdGlvbkJlZm9yZU5vZGUoZW5kLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5n
KCkpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKGVuZC5kZXBy
ZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRB
bmRFbmRPZkxhc3RQYXJhZ3JhcGhPblNhbWVOb2RlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1f
ZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID09IGVuZC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9lbmRPZkxhc3RQYXJhZ3Jh
cGggPSBsYXN0UG9zaXRpb25Jbk5vZGUoZW5kLm5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IGxhc3RQb3NpdGlvbklu
Tm9kZShlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQ
b3NpdGlvbihlbmQubm9kZSgpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSAtIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3NpdGlvbihlbmQuZGVwcmVjYXRlZE5vZGUoKSwg
bV9lbmRPZkxhc3RQYXJhZ3JhcGgub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBlbmQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUoZW5kLm5vZGUo
KS0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgICAgICAgICAgZW5kID0gbGFzdFBvc2l0aW9uSW5O
b2RlKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBAIFN0eWxl
Q2hhbmdlOjpTdHlsZUNoYW5nZShDU1NTdHlsZURlY2xhcmEKIAogdm9pZCBTdHlsZUNoYW5nZTo6
aW5pdChQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBjb25zdCBQb3NpdGlv
biYgcG9zaXRpb24pCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcG9zaXRpb24ubm9kZSgp
ID8gcG9zaXRpb24ubm9kZSgpLT5kb2N1bWVudCgpIDogMDsKKyAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBwb3NpdGlvbi5hbmNob3JOb2RlKCkgPyBwb3NpdGlvbi5hbmNob3JOb2RlKCktPmRvY3Vt
ZW50KCkgOiAwOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFN0eWxlQ2hhbmdlOjppbml0
KFBhc3NSZWZQdHI8Q1NTU3R5CiAgICAgICAgIGV4dHJhY3RUZXh0U3R5bGVzKGRvY3VtZW50LCBt
dXRhYmxlU3R5bGUuZ2V0KCksIGNvbXB1dGVkU3R5bGUtPnVzZUZpeGVkRm9udERlZmF1bHRTaXpl
KCkpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHdoaXRlc3BhY2Ugc3R5bGUgaW4gYSB0YWIgc3Bh
biB3b3VsZCBjb2xsYXBzZSB0aGUgdGFiIGludG8gYSBzcGFjZS4KLSAgICBpZiAoaXNUYWJTcGFu
VGV4dE5vZGUocG9zaXRpb24ubm9kZSgpKSB8fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5ub2Rl
KCkpKSkKKyAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSkgfHwgaXNUYWJTcGFuTm9kZSgocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpKQogICAgICAg
ICBtdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSk7CiAK
ICAgICAvLyBJZiB1bmljb2RlLWJpZGkgaXMgcHJlc2VudCBpbiBtdXRhYmxlU3R5bGUgYW5kIGRp
cmVjdGlvbiBpcyBub3QsIHRoZW4gYWRkIGRpcmVjdGlvbiB0byBtdXRhYmxlU3R5bGUuCkBAIC01
ODEsNyArNTgxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKAog
ICAgIC8vIFNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBlbmRwb2ludHMgdXNpbmcgdGhl
aXIgaW5kaWNlcyBpbiB0aGUgZG9jdW1lbnQsIHNpbmNlCiAgICAgLy8gYWRkQmxvY2tTdHlsZUlm
TmVlZGVkIG1heSBtb3ZlUGFyYWdyYXBocywgd2hpY2ggY2FuIHJlbW92ZSB0aGVzZSBlbmRwb2lu
dHMuCiAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IGFuZCBlbmQgaW5kaWNlcyBmcm9tIHRoZSBzdGFy
dCBvZiB0aGUgdHJlZSB0aGF0IHRoZXkncmUgaW4uCi0gICAgTm9kZSogc2NvcGUgPSBoaWdoZXN0
QW5jZXN0b3IodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBOb2Rl
KiBzY29wZSA9IGhpZ2hlc3RBbmNlc3Rvcih2aXNpYmxlU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpKTsKICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoc2NvcGUpLCB2aXNpYmxlU3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgUmVm
UHRyPFJhbmdlPiBlbmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZmlyc3RQb3Np
dGlvbkluTm9kZShzY29wZSksIHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7CiAgICAgaW50IHN0YXJ0SW5kZXggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHN0YXJ0UmFuZ2UuZ2V0KCksIHRydWUpOwpAQCAtNTkzLDcgKzU5Myw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSgKICAgICB3aGlsZSAocGFyYWdy
YXBoU3RhcnQuaXNOb3ROdWxsKCkgJiYgcGFyYWdyYXBoU3RhcnQgIT0gYmV5b25kRW5kKSB7CiAg
ICAgICAgIFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdlKHN0eWxlLT5zdHlsZSgpLCBwYXJhZ3JhcGhT
dGFydC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxl
KCkubGVuZ3RoKCkgfHwgbV9yZW1vdmVPbmx5KSB7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
YmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5v
ZGUoKSk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhw
YXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAg
ICAgICAgaWYgKCFtX3JlbW92ZU9ubHkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
bmV3QmxvY2sgPSBtb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkocGFy
YWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld0Js
b2NrKQpAQCAtNjM2LDEzICs2MzYsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbgogICAgIH0KIAogICAgIC8vIEpvaW4gdXAgYW55IGFkamFjZW50IHRleHQgbm9k
ZXMuCi0gICAgaWYgKHN0YXJ0Lm5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGpvaW5D
aGlsZFRleHROb2RlcyhzdGFydC5ub2RlKCktPnBhcmVudE5vZGUoKSwgc3RhcnQsIGVuZCk7Cisg
ICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBq
b2luQ2hpbGRUZXh0Tm9kZXMoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBz
dGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVu
ZCA9IGVuZFBvc2l0aW9uKCk7CiAgICAgfQotICAgIGlmIChlbmQubm9kZSgpLT5pc1RleHROb2Rl
KCkgJiYgc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5kLm5vZGUoKS0+cGFyZW50Tm9k
ZSgpKSB7Ci0gICAgICAgIGpvaW5DaGlsZFRleHROb2RlcyhlbmQubm9kZSgpLT5wYXJlbnROb2Rl
KCksIHN0YXJ0LCBlbmQpOworICAgIGlmIChlbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSAhPSBlbmQuZGVwcmVj
YXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGpvaW5DaGlsZFRleHROb2Rlcyhl
bmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydCwgZW5kKTsKICAgICAgICAg
c3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7CiAg
ICAgfQpAQCAtNjY0LDEzICs2NjQsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbgogICAgIC8vIElmIHRoZSBlbmQgbm9kZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG5v
ZGUgKGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgZW5kIG5vZGUgaXMKICAgICAvLyBhbiBhbmNlc3Rv
ciBvZiB0aGUgc3RhcnQgbm9kZSksIHdlIGdhdGhlciBub2RlcyB1cCB0byB0aGUgbmV4dCBzaWJs
aW5nIG9mIHRoZSBlbmQgbm9kZQogICAgIE5vZGUgKmJleW9uZEVuZDsKLSAgICBpZiAoc3RhcnQu
bm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQubm9kZSgpKSkKLSAgICAgICAgYmV5b25kRW5kID0g
ZW5kLm5vZGUoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgIGlmIChzdGFydC5kZXByZWNh
dGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQuZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgICAg
IGJleW9uZEVuZCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CiAgICAgZWxzZQotICAgICAgICBiZXlvbmRFbmQgPSBlbmQubm9kZSgpLT50cmF2ZXJzZU5leHRO
b2RlKCk7CisgICAgICAgIGJleW9uZEVuZCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJz
ZU5leHROb2RlKCk7CiAgICAgCiAgICAgc3RhcnQgPSBzdGFydC51cHN0cmVhbSgpOyAvLyBNb3Zl
IHVwc3RyZWFtIHRvIGVuc3VyZSB3ZSBkbyBub3QgYWRkIHJlZHVuZGFudCBzcGFucy4KLSAgICBO
b2RlICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChzdGFydE5v
ZGUpKSAvLyBNb3ZlIG91dCBvZiB0ZXh0IG5vZGUgaWYgcmFuZ2UgZG9lcyBub3QgaW5jbHVkZSBp
dHMgY2hhcmFjdGVycy4KICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CiAKQEAgLTg3NCwyNSArODc0LDI1IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGUKICAgICAvLyBzcGxpdCB0aGUgc3RhcnQgbm9kZSBhbmQgY29udGFp
bmluZyBlbGVtZW50IGlmIHRoZSBzZWxlY3Rpb24gc3RhcnRzIGluc2lkZSBvZiBpdAogICAgIGJv
b2wgc3BsaXRTdGFydCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShzdGFydCk7CiAg
ICAgaWYgKHNwbGl0U3RhcnQpIHsKLSAgICAgICAgaWYgKHNob3VsZFNwbGl0VGV4dEVsZW1lbnQo
c3RhcnQubm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgpKSkKKyAgICAgICAg
aWYgKHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50
RWxlbWVudCgpLCBzdHlsZS0+c3R5bGUoKSkpCiAgICAgICAgICAgICBzcGxpdFRleHRFbGVtZW50
QXRTdGFydChzdGFydCwgZW5kKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3BsaXRUZXh0
QXRTdGFydChzdGFydCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAg
ICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uKCk7Ci0gICAgICAgIHN0YXJ0RHVtbXlTcGFuQW5jZXN0
b3IgPSBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoc3RhcnQubm9kZSgpKTsKKyAgICAgICAgc3Rh
cnREdW1teVNwYW5BbmNlc3RvciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpKTsKICAgICB9CiAKICAgICAvLyBzcGxpdCB0aGUgZW5kIG5vZGUgYW5kIGNv
bnRhaW5pbmcgZWxlbWVudCBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW5zaWRlIG9mIGl0CiAgICAg
Ym9vbCBzcGxpdEVuZCA9IGlzVmFsaWRDYXJldFBvc2l0aW9uSW5UZXh0Tm9kZShlbmQpOwogICAg
IGlmIChzcGxpdEVuZCkgewotICAgICAgICBpZiAoc2hvdWxkU3BsaXRUZXh0RWxlbWVudChlbmQu
bm9kZSgpLT5wYXJlbnRFbGVtZW50KCksIHN0eWxlLT5zdHlsZSgpKSkKKyAgICAgICAgaWYgKHNo
b3VsZFNwbGl0VGV4dEVsZW1lbnQoZW5kLmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudEVsZW1lbnQo
KSwgc3R5bGUtPnN0eWxlKCkpKQogICAgICAgICAgICAgc3BsaXRUZXh0RWxlbWVudEF0RW5kKHN0
YXJ0LCBlbmQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzcGxpdFRleHRBdEVuZChzdGFy
dCwgZW5kKTsKICAgICAgICAgc3RhcnQgPSBzdGFydFBvc2l0aW9uKCk7CiAgICAgICAgIGVuZCA9
IGVuZFBvc2l0aW9uKCk7Ci0gICAgICAgIGVuZER1bW15U3BhbkFuY2VzdG9yID0gZHVtbXlTcGFu
QW5jZXN0b3JGb3JOb2RlKGVuZC5ub2RlKCkpOworICAgICAgICBlbmREdW1teVNwYW5BbmNlc3Rv
ciA9IGR1bW15U3BhbkFuY2VzdG9yRm9yTm9kZShlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAg
fQogCiAgICAgLy8gUmVtb3ZlIHN0eWxlIGZyb20gdGhlIHNlbGVjdGlvbi4KQEAgLTkwOSwxMCAr
OTA5LDEwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAg
ICAgc3R5bGUtPnRleHREaXJlY3Rpb24odGV4dERpcmVjdGlvbik7CiAKICAgICAgICAgLy8gTGVh
dmUgYWxvbmUgYW4gYW5jZXN0b3IgdGhhdCBwcm92aWRlcyB0aGUgZGVzaXJlZCBzaW5nbGUgbGV2
ZWwgZW1iZWRkaW5nLCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgIEhUTUxFbGVtZW50KiBzdGFy
dFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKHN0YXJ0Lm5v
ZGUoKSwgdHJ1ZSwgdGV4dERpcmVjdGlvbik7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlbmRVbnNw
bGl0QW5jZXN0b3IgPSBzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShlbmQubm9kZSgpLCBm
YWxzZSwgdGV4dERpcmVjdGlvbik7Ci0gICAgICAgIHJlbW92ZUVtYmVkZGluZ1VwVG9FbmNsb3Np
bmdCbG9jayhzdGFydC5ub2RlKCksIHN0YXJ0VW5zcGxpdEFuY2VzdG9yKTsKLSAgICAgICAgcmVt
b3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKGVuZC5ub2RlKCksIGVuZFVuc3BsaXRBbmNl
c3Rvcik7CisgICAgICAgIEhUTUxFbGVtZW50KiBzdGFydFVuc3BsaXRBbmNlc3RvciA9IHNwbGl0
QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHRydWUsIHRl
eHREaXJlY3Rpb24pOworICAgICAgICBIVE1MRWxlbWVudCogZW5kVW5zcGxpdEFuY2VzdG9yID0g
c3BsaXRBbmNlc3RvcnNXaXRoVW5pY29kZUJpZGkoZW5kLmRlcHJlY2F0ZWROb2RlKCksIGZhbHNl
LCB0ZXh0RGlyZWN0aW9uKTsKKyAgICAgICAgcmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Js
b2NrKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0VW5zcGxpdEFuY2VzdG9yKTsKKyAgICAg
ICAgcmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKGVuZC5kZXByZWNhdGVkTm9kZSgp
LCBlbmRVbnNwbGl0QW5jZXN0b3IpOwogCiAgICAgICAgIC8vIEF2b2lkIHJlbW92aW5nIHRoZSBk
aXIgYXR0cmlidXRlIGFuZCB0aGUgdW5pY29kZS1iaWRpIGFuZCBkaXJlY3Rpb24gcHJvcGVydGll
cyBmcm9tIHRoZSB1bnNwbGl0IGFuY2VzdG9ycy4KICAgICAgICAgUG9zaXRpb24gZW1iZWRkaW5n
UmVtb3ZlU3RhcnQgPSByZW1vdmVTdGFydDsKQEAgLTk1OSw4ICs5NTksOCBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZVRvQXBwbHkgPSBzdHlsZS0+aXNFbXB0eSgpID8gQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpIDogc3R5bGUtPnN0eWxlKCk7CiAgICAgaWYgKHVu
aWNvZGVCaWRpKSB7CiAgICAgICAgIC8vIEF2b2lkIGFwcGx5aW5nIHRoZSB1bmljb2RlLWJpZGkg
YW5kIGRpcmVjdGlvbiBwcm9wZXJ0aWVzIGJlbmVhdGggYW5jZXN0b3JzIHRoYXQgYWxyZWFkeSBo
YXZlIHRoZW0uCi0gICAgICAgIE5vZGUqIGVtYmVkZGluZ1N0YXJ0Tm9kZSA9IGhpZ2hlc3RFbWJl
ZGRpbmdBbmNlc3RvcihzdGFydC5ub2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Lm5vZGUoKSkp
OwotICAgICAgICBOb2RlKiBlbWJlZGRpbmdFbmROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2Vz
dG9yKGVuZC5ub2RlKCksIGVuY2xvc2luZ0Jsb2NrKGVuZC5ub2RlKCkpKTsKKyAgICAgICAgTm9k
ZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKTsK
KyAgICAgICAgTm9kZSogZW1iZWRkaW5nRW5kTm9kZSA9IGhpZ2hlc3RFbWJlZGRpbmdBbmNlc3Rv
cihlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5jbG9zaW5nQmxvY2soZW5kLmRlcHJlY2F0ZWROb2Rl
KCkpKTsKIAogICAgICAgICBpZiAoZW1iZWRkaW5nU3RhcnROb2RlIHx8IGVtYmVkZGluZ0VuZE5v
ZGUpIHsKICAgICAgICAgICAgIFBvc2l0aW9uIGVtYmVkZGluZ0FwcGx5U3RhcnQgPSBlbWJlZGRp
bmdTdGFydE5vZGUgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGVtYmVkZGluZ1N0YXJ0Tm9k
ZSkgOiBzdGFydDsKQEAgLTk4NywyMiArOTg3LDIyIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGUKIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRB
cHBseUlubGluZVN0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewotICAgIE5vZGUqIHN0YXJ0
Tm9kZSA9IHN0YXJ0Lm5vZGUoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNh
dGVkTm9kZSgpOwogCi0gICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0g
Y2FyZXRNYXhPZmZzZXQoc3RhcnQubm9kZSgpKSkgeworICAgIGlmIChzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkp
KSB7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwog
ICAgICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBOb2RlKiBwYXN0RW5kTm9kZSA9IGVuZC5ub2RlKCk7Ci0gICAgaWYgKGVu
ZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5ub2RlKCkp
KQotICAgICAgICBwYXN0RW5kTm9kZSA9IGVuZC5ub2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKKyAgICBOb2RlKiBwYXN0RW5kTm9kZSA9IGVuZC5kZXByZWNhdGVkTm9kZSgpOworICAgIGlm
IChlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChlbmQuZGVw
cmVjYXRlZE5vZGUoKSkpCisgICAgICAgIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2Rl
KCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKIAogICAgIC8vIEZJWE1FOiBDYWxsZXJzIHNob3Vs
ZCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIG9uIGEgUmFuZ2UgdGhhdCBpbmNsdWRlcyB0aGUgYnIK
ICAgICAvLyBpZiB0aGV5IHdhbnQgc3R5bGUgYXBwbGllZCB0byB0aGUgZW1wdHkgbGluZS4KLSAg
ICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0g
ICAgICAgIHBhc3RFbmROb2RlID0gc3RhcnQubm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7Cisg
ICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1l
KGJyVGFnKSkKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT50
cmF2ZXJzZU5leHROb2RlKCk7CiAKICAgICAvLyBTdGFydCBmcm9tIHRoZSBoaWdoZXN0IGZ1bGx5
IHNlbGVjdGVkIGFuY2VzdG9yIHNvIHRoYXQgd2UgY2FuIG1vZGlmeSB0aGUgZnVsbHkgc2VsZWN0
ZWQgbm9kZS4KICAgICAvLyBlLmcuIFdoZW4gYXBwbHlpbmcgZm9udC1zaXplOiBsYXJnZSBvbiA8
Zm9udCBjb2xvcj0iYmx1ZSI+aGVsbG88L2ZvbnQ+LCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGZv
bnQgZWxlbWVudCBpbiBvdXIgcnVuCkBAIC0xNDc4LDggKzE0NzgsOCBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiB7CiAgICAgQVNTRVJUKHN0YXJ0LmlzTm90TnVs
bCgpKTsKICAgICBBU1NFUlQoZW5kLmlzTm90TnVsbCgpKTsKLSAgICBBU1NFUlQoc3RhcnQubm9k
ZSgpLT5pbkRvY3VtZW50KCkpOwotICAgIEFTU0VSVChlbmQubm9kZSgpLT5pbkRvY3VtZW50KCkp
OworICAgIEFTU0VSVChzdGFydC5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSk7CisgICAgQVNT
RVJUKGVuZC5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKGNvbXBhcmVQ
b3NpdGlvbnMoc3RhcnQsIGVuZCkgPD0gMCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHRE
ZWNvcmF0aW9uU3BlY2lhbFByb3BlcnR5ID0gc3R5bGUgPyBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSA6IDA7CkBAIC0x
NDk3LDE4ICsxNDk3LDE4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0
eWwKICAgICAgICAgJiYgcHVzaERvd25TdGFydC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkgPT0gcHVzaERvd25TdGFydENvbnRhaW5lci0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCkpCiAgICAg
ICAgIHB1c2hEb3duU3RhcnQgPSBuZXh0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZShwdXNoRG93
blN0YXJ0KTsKICAgICBQb3NpdGlvbiBwdXNoRG93bkVuZCA9IGVuZC51cHN0cmVhbSgpOwotICAg
IHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKHN0eWxlLmdldCgpLCBwdXNoRG93blN0YXJ0
Lm5vZGUoKSk7Ci0gICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCks
IHB1c2hEb3duRW5kLm5vZGUoKSk7CisgICAgcHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUo
c3R5bGUuZ2V0KCksIHB1c2hEb3duU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgcHVzaERv
d25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoc3R5bGUuZ2V0KCksIHB1c2hEb3duRW5kLmRlcHJlY2F0
ZWROb2RlKCkpOwogCiAgICAgLy8gVGhlIHMgYW5kIGUgdmFyaWFibGVzIHN0b3JlIHRoZSBwb3Np
dGlvbnMgdXNlZCB0byBzZXQgdGhlIGVuZGluZyBzZWxlY3Rpb24gYWZ0ZXIgc3R5bGUgcmVtb3Zh
bAogICAgIC8vIHRha2VzIHBsYWNlLiBUaGlzIHdpbGwgaGVscCBjYWxsZXJzIHRvIHJlY29nbml6
ZSB3aGVuIGVpdGhlciB0aGUgc3RhcnQgbm9kZSBvciB0aGUgZW5kIG5vZGUKICAgICAvLyBhcmUg
cmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBkdXJpbmcgdGhlIHdvcmsgb2YgdGhpcyBmdW5jdGlv
bi4KLSAgICAvLyBJZiBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSBoYXMgcHJ1bmVkIHN0
YXJ0Lm5vZGUoKSBvciBlbmQubm9kZSgpLAorICAgIC8vIElmIHB1c2hEb3duSW5saW5lU3R5bGVB
cm91bmROb2RlIGhhcyBwcnVuZWQgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSBvciBlbmQuZGVwcmVj
YXRlZE5vZGUoKSwKICAgICAvLyB1c2UgcHVzaERvd25TdGFydCBvciBwdXNoRG93bkVuZCBpbnN0
ZWFkLCB3aGljaCBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSB3b24ndCBwcnVuZS4KICAg
ICBQb3NpdGlvbiBzID0gc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSA/IHB1c2hE
b3duU3RhcnQgOiBzdGFydDsKICAgICBQb3NpdGlvbiBlID0gZW5kLmlzTnVsbCgpIHx8IGVuZC5p
c09ycGhhbigpID8gcHVzaERvd25FbmQgOiBlbmQ7CiAKLSAgICBOb2RlKiBub2RlID0gc3RhcnQu
bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIHdo
aWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOwogICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGVGdWxs
eVNlbGVjdGVkKG5vZGUsIHN0YXJ0LCBlbmQpKSB7CkBAIC0xNTI0LDEzICsxNTI0LDEzIEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKIAogICAgICAgICAgICAgcmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZS5nZXQoKSwgZWxlbS5nZXQoKSwgUmVtb3Zl
SWZOZWVkZWQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAgICAgICAgICBpZiAoIWVsZW0t
PmluRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzLm5vZGUoKSA9PSBlbGVtKSB7
CisgICAgICAgICAgICAgICAgaWYgKHMuZGVwcmVjYXRlZE5vZGUoKSA9PSBlbGVtKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVsZW0gbXVzdCBoYXZlIGJlZW4gZnVsbHkgc2VsZWN0
ZWQsIGFuZCBpdCBpcyBhdCB0aGUgc3RhcnQKICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhl
IHNlbGVjdGlvbiwgaXQgaXMgY2xlYXIgd2UgY2FuIHNldCB0aGUgbmV3IHMgb2Zmc2V0IHRvIDAu
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzLmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6
UG9zaXRpb25Jc0JlZm9yZUFuY2hvciB8fCBzLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDw9IDAp
OwogICAgICAgICAgICAgICAgICAgICBzID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5l
eHQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZS5ub2Rl
KCkgPT0gZWxlbSkgeworICAgICAgICAgICAgICAgIGlmIChlLmRlcHJlY2F0ZWROb2RlKCkgPT0g
ZWxlbSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBiZWVu
IGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIGVuZAogICAgICAgICAgICAgICAgICAg
ICAvLyBvZiB0aGUgc2VsZWN0aW9uLCBpdCBpcyBjbGVhciB3ZSBjYW4gc2V0IHRoZSBuZXcgZSBv
ZmZzZXQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1heCByYW5nZSBvZmZzZXQgb2Yg
cHJldi4KQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUlubGluZVN0eWwKICAgICAgICAgICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERv
d24oY2hpbGROb2RlLmdldCgpLCBzdHlsZVRvUHVzaERvd24uZ2V0KCkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlID09IGVuZC5ub2RlKCkpCisgICAgICAgIGlm
IChub2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIG5vZGUgPSBuZXh0LmdldCgpOwogICAgIH0KQEAgLTE1ODMsOSArMTU4Myw5IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQKICAgICBlbHNlCiAgICAgICAgIG5l
d0VuZCA9IGVuZDsKIAotICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnQu
bm9kZSgpKTsKKyAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIHNwbGl0VGV4dE5vZGUodGV4dCwgc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwotICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25Jbk5vZGUoc3Rh
cnQubm9kZSgpKSwgbmV3RW5kKTsKKyAgICB1cGRhdGVTdGFydEVuZChmaXJzdFBvc2l0aW9uSW5O
b2RlKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpLCBuZXdFbmQpOwogfQogCiB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdFRleHRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpCkBAIC0xNTkzLDcgKzE1OTMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpzcGxpdFRleHRBdEVuZChjCiAgICAgQVNTRVJUKGVuZC5hbmNob3JUeXBlKCkgPT0gUG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAKICAgICBib29sIHNob3VsZFVwZGF0ZVN0
YXJ0ID0gc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IgJiYgc3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2RlKCk7Ci0g
ICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oZW5kLm5vZGUoKSk7CisgICAgVGV4
dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oZW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IHNwbGl0VGV4dE5vZGUodGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIAogICAg
IE5vZGUqIHByZXZOb2RlID0gdGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7CkBAIC0xNjEyLDkgKzE2
MTIsOSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgZWxz
ZQogICAgICAgICBuZXdFbmQgPSBlbmQ7CiAKLSAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHN0YXJ0Lm5vZGUoKSk7CisgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQq
PihzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnQodGV4dCwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAgdXBkYXRl
U3RhcnRFbmQoUG9zaXRpb24oc3RhcnQubm9kZSgpLT5wYXJlbnROb2RlKCksIHN0YXJ0Lm5vZGUo
KS0+bm9kZUluZGV4KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBuZXdF
bmQpOworICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
PnBhcmVudE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+bm9kZUluZGV4KCksIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpLCBuZXdFbmQpOwogfQogCiB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpAQCAtMTYyMiw3ICsxNjIyLDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudAogICAgIEFTU0VSVChlbmQuYW5jaG9yVHlwZSgp
ID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogCiAgICAgYm9vbCBzaG91
bGRVcGRhdGVTdGFydCA9IHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yICYmIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVy
Tm9kZSgpOwotICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oZW5kLm5vZGUoKSk7
CisgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmQuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIGVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpKTsKIAogICAgIE5vZGUqIHByZXZOb2RlID0gdGV4dC0+cGFyZW50
Tm9kZSgpLT5wcmV2aW91c1NpYmxpbmcoKS0+bGFzdENoaWxkKCk7CkBAIC0xNzEzLDkgKzE3MTMs
OSBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZVN0YXJ0V2l0aFByCiAgICAgICAgIG1l
cmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNFbGVtZW50LCBlbGVtZW50KTsKIAogICAgICAg
ICBpbnQgc3RhcnRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnRDaGlsZC0+bm9kZUluZGV4KCk7Ci0g
ICAgICAgIGludCBlbmRPZmZzZXRBZGp1c3RtZW50ID0gc3RhcnROb2RlID09IGVuZC5ub2RlKCkg
PyBzdGFydE9mZnNldEFkanVzdG1lbnQgOiAwOworICAgICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0
bWVudCA9IHN0YXJ0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0T2Zmc2V0QWRq
dXN0bWVudCA6IDA7CiAgICAgICAgIHVwZGF0ZVN0YXJ0RW5kKFBvc2l0aW9uKHN0YXJ0Tm9kZSwg
c3RhcnRPZmZzZXRBZGp1c3RtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24oZW5kLm5vZGUoKSwgZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBlbmRPZmZzZXRBZGp1c3RtZW50LCBQb3NpdGlvbjo6UG9z
aXRpb25Jc09mZnNldEluQW5jaG9yKSk7IAorICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlv
bihlbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBl
bmRPZmZzZXRBZGp1c3RtZW50LCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSk7
IAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE3MzEsMTEgKzE3MzEsMTEgQEAg
Ym9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dAogICAgICAgICBpZiAoZW5k
T2Zmc2V0IDwgbGFzdE9mZnNldEluTm9kZShlbmROb2RlKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICB1bnNpZ25lZCBwYXJlbnRMYXN0T2Zmc2V0ID0gZW5kLm5vZGUoKS0+
cGFyZW50Tm9kZSgpLT5jaGlsZE5vZGVzKCktPmxlbmd0aCgpIC0gMTsKLSAgICAgICAgaWYgKGVu
ZC5ub2RlKCktPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVuc2lnbmVkIHBhcmVudExhc3RPZmZz
ZXQgPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpLT5jaGlsZE5vZGVzKCktPmxl
bmd0aCgpIC0gMTsKKyAgICAgICAgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5uZXh0U2libGlu
ZygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGVuZE5vZGUgPSBlbmQu
bm9kZSgpLT5wYXJlbnROb2RlKCk7CisgICAgICAgIGVuZE5vZGUgPSBlbmQuZGVwcmVjYXRlZE5v
ZGUoKS0+cGFyZW50Tm9kZSgpOwogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcg
KzY3LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAKICAg
ICAvLyBGaW5kIHRoZSB0b3AtbW9zdCBibG9ja3F1b3RlIGZyb20gdGhlIHN0YXJ0LgogICAgIEVs
ZW1lbnQqIHRvcEJsb2NrcXVvdGUgPSAwOwotICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9
IHBvcy5ub2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KSkgeworICAgIGZvciAoQ29udGFpbmVyTm9kZSogbm9kZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgp
LT5wYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgaWYgKGlzTWFpbEJsb2NrcXVvdGUobm9kZSkpCiAgICAgICAgICAgICB0b3BCbG9ja3F1b3Rl
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwogICAgIH0KQEAgLTEwMywxMSArMTAzLDEx
IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHBvcyA9
IHBvcy5uZXh0KCk7CiAgICAgICAgIAogICAgIC8vIEFkanVzdCB0aGUgcG9zaXRpb24gc28gd2Ug
ZG9uJ3Qgc3BsaXQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHF1b3RlLiAgCi0gICAgd2hpbGUgKGlz
Rmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoVmlzaWJsZVBvc2l0aW9uKHBvcyksIG5lYXJlc3RN
YWlsQmxvY2txdW90ZShwb3Mubm9kZSgpKSkpCisgICAgd2hpbGUgKGlzRmlyc3RWaXNpYmxlUG9z
aXRpb25Jbk5vZGUoVmlzaWJsZVBvc2l0aW9uKHBvcyksIG5lYXJlc3RNYWlsQmxvY2txdW90ZShw
b3MuZGVwcmVjYXRlZE5vZGUoKSkpKQogICAgICAgICBwb3MgPSBwb3MucHJldmlvdXMoKTsKICAg
ICAKICAgICAvLyBzdGFydE5vZGUgaXMgdGhlIGZpcnN0IG5vZGUgdGhhdCB3ZSBuZWVkIHRvIG1v
dmUgdG8gdGhlIG5ldyBibG9ja3F1b3RlLgotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHBvcy5ub2Rl
KCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAg
IAogICAgIC8vIFNwbGl0IGF0IHBvcyBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgdGV4dCBub2RlLgog
ICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQXQoCiAgICAgLy8gRm9yIGVkaXRpbmcgcG9zaXRpb25zIGxpa2UgW3RhYmxlLCAw
XSwgaW5zZXJ0IGJlZm9yZSB0aGUgdGFibGUsCiAgICAgLy8gbGlrZXdpc2UgZm9yIHJlcGxhY2Vk
IGVsZW1lbnRzLCBicnMsIGV0Yy4KICAgICBQb3NpdGlvbiBwID0gZWRpdGluZ1Bvc2l0aW9uLnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIE5vZGUqIHJlZkNoaWxkID0gcC5ub2RlKCk7
CisgICAgTm9kZSogcmVmQ2hpbGQgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaW50IG9mZnNl
dCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAKICAgICBpZiAoY2FuSGF2ZUNo
aWxkcmVuRm9yRWRpdGluZyhyZWZDaGlsZCkpIHsKQEAgLTM0MiwxOCArMzQyLDE4IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW4KIAogUG9zaXRpb24gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvcykK
IHsKLSAgICBpZiAoIWlzVGFiU3BhblRleHROb2RlKHBvcy5ub2RlKCkpKQorICAgIGlmICghaXNU
YWJTcGFuVGV4dE5vZGUocG9zLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gcG9z
OwogICAgIAotICAgIE5vZGUqIHRhYlNwYW4gPSB0YWJTcGFuTm9kZShwb3Mubm9kZSgpKTsKKyAg
ICBOb2RlKiB0YWJTcGFuID0gdGFiU3Bhbk5vZGUocG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IAotICAgIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PSBjYXJldE1pbk9mZnNl
dChwb3Mubm9kZSgpKSkKKyAgICBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0g
Y2FyZXRNaW5PZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gcG9z
aXRpb25JblBhcmVudEJlZm9yZU5vZGUodGFiU3Bhbik7CiAgICAgICAgIAotICAgIGlmIChwb3Mu
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChwb3Mubm9kZSgpKSkK
KyAgICBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQo
cG9zLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFm
dGVyTm9kZSh0YWJTcGFuKTsKIAotICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChz
dGF0aWNfY2FzdDxUZXh0ICo+KHBvcy5ub2RlKCkpLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSk7CisgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHN0YXRpY19jYXN0PFRl
eHQgKj4ocG9zLmRlcHJlY2F0ZWROb2RlKCkpLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CiAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHRhYlNwYW4pOwogfQog
CkBAIC00NzUsNyArNDc1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNl
V2hpdAogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9z
aXRpb25Gb3JTcGxpdChQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgTm9kZSogbm9kZSA9IHBv
c2l0aW9uLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOyAgICAKQEAg
LTQ5NSwxMCArNDk1LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0
ZXMKICAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNWaXNpYmxlUG9zKHZpc2libGVQb3MucHJl
dmlvdXMoKSk7CiAgICAgUG9zaXRpb24gcHJldmlvdXMocHJldmlvdXNWaXNpYmxlUG9zLmRlZXBF
cXVpdmFsZW50KCkpOwogICAgIAotICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2
aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0ZXIoKSkgJiYgcHJldmlvdXMubm9kZSgpLT5pc1Rl
eHROb2RlKCkgJiYgIXByZXZpb3VzLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwcmV2aW91cy5ub2RlKCkpLCBw
cmV2aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkpOwotICAgIGlmIChpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9zLmNoYXJh
Y3RlckFmdGVyKCkpICYmIHBvc2l0aW9uLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmICFwb3NpdGlv
bi5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAgICByZXBsYWNlVGV4dEluTm9kZShz
dGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24ubm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICBpZiAoaXND
b2xsYXBzaWJsZVdoaXRlc3BhY2UocHJldmlvdXNWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkp
ICYmIHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcHJldmlvdXMu
ZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgICAgIHJlcGxhY2VUZXh0
SW5Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSwgcHJl
dmlvdXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpKTsKKyAgICBpZiAoaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0
ZXJBZnRlcigpKSAmJiBwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYg
IXBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQorICAgICAgICBy
ZXBsYWNlVGV4dEluTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5n
U3BhY2VTdHJpbmcoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5j
ZVdoaXRlc3BhY2UoKQpAQCAtNjAwLDE1ICs2MDAsMTUgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6ZGVsZXRlSW5zaWduaQogICAgICAgICByZXR1cm47CiAKICAgICBOb2RlKiBuZXh0Owot
ICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Lm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5leHQpIHsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2Rl
ID0gbmV4dCkgewogICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAg
ICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9k
ZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2RlKTsKLSAgICAgICAgICAgIGludCBzdGFydE9mZnNl
dCA9IG5vZGUgPT0gc3RhcnQubm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA6IDA7Ci0gICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmQubm9kZSgpID8g
ZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiBzdGF0aWNfY2FzdDxpbnQ+KHRleHROb2Rl
LT5sZW5ndGgoKSk7CisgICAgICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogMDsK
KyAgICAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgp
ID8gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiBzdGF0aWNfY2FzdDxpbnQ+KHRleHRO
b2RlLT5sZW5ndGgoKSk7CiAgICAgICAgICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0
Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5v
ZGUgPT0gZW5kLm5vZGUoKSkKKyAgICAgICAgaWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2Rl
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC02MzgsNyArNjM4LDcgQEAgUGFz
c1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIFNob3VsZCBhc3NlcnQgaXNCbG9ja0Zsb3cgfHwgaXNJbmxpbmVGbG93IHdoZW4g
ZGVsZXRpb24gaW1wcm92ZXMuICBTZWUgNDI0NDk2NC4KLSAgICBBU1NFUlQocG9zLm5vZGUoKS0+
cmVuZGVyZXIoKSk7CisgICAgQVNTRVJUKHBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
KTsKIAogICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJsb2NrUGxhY2Vob2xk
ZXJFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVBdChwbGFjZWhvbGRlciwgcG9z
KTsKQEAgLTcxNCwyOCArNzE0LDI2IEBAIFBhc3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Om0KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBQZXJmb3JtIHNvbWUgY2hlY2tz
IHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHBlcmZvcm0gd29yayBpbiB0aGlzIGZ1bmN0aW9uLgotICAg
IGlmIChpc0Jsb2NrKHVwc3RyZWFtU3RhcnQubm9kZSgpKSkgeworICAgIGlmIChpc0Jsb2NrKHVw
c3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgLy8gSWYgdGhlIGJsb2Nr
IGlzIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQsIGFsd2F5cyBtb3ZlIGNvbnRlbnQgdG8gYSBu
ZXcgYmxvY2ssCiAgICAgICAgIC8vIHNpbmNlIGl0IGlzIGlsbGVnYWwgdG8gbW9kaWZ5IGF0dHJp
YnV0ZXMgb24gdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVudCBmb3IgZWRpdGluZy4KLSAgICAgICAg
aWYgKHVwc3RyZWFtU3RhcnQubm9kZSgpID09IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHVwc3Ry
ZWFtU3RhcnQpKSB7CisgICAgICAgIGlmICh1cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkg
PT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24odXBzdHJlYW1TdGFydCkpIHsKICAgICAgICAgICAg
IC8vIElmIHRoZSBibG9jayBpcyB0aGUgcm9vdCBlZGl0YWJsZSBlbGVtZW50IGFuZCBpdCBjb250
YWlucyBubyB2aXNpYmxlIGNvbnRlbnQsIGNyZWF0ZSBhIG5ldwogICAgICAgICAgICAgLy8gYmxv
Y2sgYnV0IGRvbid0IHRyeSBhbmQgbW92ZSBjb250ZW50IGludG8gaXQsIHNpbmNlIHRoZXJlJ3Mg
bm90aGluZyBmb3IgbW92ZVBhcmFncmFwaHMgdG8gbW92ZS4KLSAgICAgICAgICAgIGlmICghUG9z
aXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHVwc3Ry
ZWFtU3RhcnQubm9kZSgpLT5yZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGlmICghUG9zaXRpb246
Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHVwc3RyZWFtU3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQodXBzdHJlYW1TdGFydCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoaXNCbG9jayh1cHN0cmVhbUVuZC5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoIXVwc3RyZWFtRW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YodXBzdHJlYW1TdGFydC5u
b2RlKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCbG9jayh1cHN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKSkgeworICAgICAgICAgICAgaWYgKCF1cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZih1cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFncmFwaCBlbmQgaXMgYSBkZXNjZW5kYW50IG9m
IHBhcmFncmFwaCBzdGFydCwgdGhlbiB3ZSBuZWVkIHRvIHJ1bgogICAgICAgICAgICAgICAgIC8v
IHRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24uIElmIG5vdCwgd2UgY2FuIGJhaWwgaGVyZS4KICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChlbmNsb3NpbmdCbG9jayh1cHN0cmVhbUVuZC5ub2RlKCkpICE9IHVwc3RyZWFt
U3RhcnQubm9kZSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoZW5jbG9zaW5nQmxvY2sodXBzdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgIT0gdXBzdHJlYW1TdGFydC5kZXByZWNhdGVkTm9kZSgp
KSB7CiAgICAgICAgICAgICAvLyBUaGUgdmlzaWJsZUVuZC4gIEl0IG11c3QgYmUgYW4gYW5jZXN0
b3Igb2YgdGhlIHBhcmFncmFwaCBzdGFydC4KICAgICAgICAgICAgIC8vIFdlIGNhbiBiYWlsIGFz
IHdlIGhhdmUgYSBmdWxsIGJsb2NrIHRvIHdvcmsgd2l0aC4KLSAgICAgICAgICAgIEFTU0VSVCh1
cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQmxvY2sodXBzdHJl
YW1FbmQubm9kZSgpKSkpOworICAgICAgICAgICAgQVNTRVJUKHVwc3RyZWFtU3RhcnQuZGVwcmVj
YXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQmxvY2sodXBzdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKSkpKTsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKGlzRW5kT2ZEb2N1bWVudCh2aXNpYmxlRW5kKSkgeworICAgICAgICB9IGVs
c2UgaWYgKGlzRW5kT2ZEb2N1bWVudCh2aXNpYmxlRW5kKSkgewogICAgICAgICAgICAgLy8gQXQg
dGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuIFdlIGNhbiBiYWlsIGhlcmUgYXMgd2VsbC4KICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC03NDMsNyArNzQxLDcgQEAgUGFzc1JlZlB0
cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bQogCiAgICAgUmVmUHRyPE5vZGU+IG5ld0Js
b2NrID0gaW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRBdCh1cHN0cmVhbVN0YXJ0KTsK
IAotICAgIGJvb2wgZW5kV2FzQnIgPSB2aXNpYmxlUGFyYWdyYXBoRW5kLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKTsKKyAgICBib29sIGVuZFdhc0JyID0gdmlzaWJs
ZVBhcmFncmFwaEVuZC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpOwogCiAgICAgbW92ZVBhcmFncmFwaHModmlzaWJsZVBhcmFncmFwaFN0YXJ0LCB2
aXNpYmxlUGFyYWdyYXBoRW5kLCBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShu
ZXdCbG9jay5nZXQoKSkpKTsKIApAQCAtNzc4LDE0ICs3NzYsMTQgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcAogICAgIGFwcGVuZE5vZGUodG9wTm9kZSwgYmxvY2tF
bGVtZW50KTsKICAgICBSZWZQdHI8Tm9kZT4gbGFzdE5vZGUgPSB0b3BOb2RlOwogCi0gICAgaWYg
KHN0YXJ0Lm5vZGUoKSAhPSBvdXRlck5vZGUpIHsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAhPSBvdXRlck5vZGUpIHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IGFuY2Vz
dG9yczsKICAgICAgICAgCiAgICAgICAgIC8vIEluc2VydCBlYWNoIG5vZGUgZnJvbSBpbm5lck5v
ZGUgdG8gb3V0ZXJOb2RlIChleGNsdWRlZCkgaW4gYSBsaXN0LgotICAgICAgICBmb3IgKE5vZGUq
IG4gPSBzdGFydC5ub2RlKCk7IG4gJiYgbiAhPSBvdXRlck5vZGU7IG4gPSBuLT5wYXJlbnROb2Rl
KCkpCisgICAgICAgIGZvciAoTm9kZSogbiA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG4gJiYg
biAhPSBvdXRlck5vZGU7IG4gPSBuLT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICBhbmNlc3Rv
cnMuYXBwZW5kKG4pOwogCi0gICAgICAgIC8vIENsb25lIGV2ZXJ5IG5vZGUgYmV0d2VlbiBzdGFy
dC5ub2RlKCkgYW5kIG91dGVyQmxvY2suCisgICAgICAgIC8vIENsb25lIGV2ZXJ5IG5vZGUgYmV0
d2VlbiBzdGFydC5kZXByZWNhdGVkTm9kZSgpIGFuZCBvdXRlckJsb2NrLgogCiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBhbmNlc3RvcnMuc2l6ZSgpOyBpICE9IDA7IC0taSkgewogICAgICAgICAg
ICAgTm9kZSogaXRlbSA9IGFuY2VzdG9yc1tpIC0gMV0uZ2V0KCk7CkBAIC03OTYsMjUgKzc5NCwy
NSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwCiAgICAgfQogCiAg
ICAgLy8gSGFuZGxlIHRoZSBjYXNlIG9mIHBhcmFncmFwaHMgd2l0aCBtb3JlIHRoYW4gb25lIG5v
ZGUsCi0gICAgLy8gY2xvbmluZyBhbGwgdGhlIHNpYmxpbmdzIHVudGlsIGVuZC5ub2RlKCkgaXMg
cmVhY2hlZC4KKyAgICAvLyBjbG9uaW5nIGFsbCB0aGUgc2libGluZ3MgdW50aWwgZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgaXMgcmVhY2hlZC4KICAgICAKLSAgICBpZiAoc3RhcnQubm9kZSgpICE9IGVu
ZC5ub2RlKCkgJiYgIXN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5kLm5vZGUoKSkpIHsK
KyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAhPSBlbmQuZGVwcmVjYXRlZE5vZGUoKSAm
JiAhc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5kLmRlcHJlY2F0ZWRO
b2RlKCkpKSB7CiAgICAgICAgIC8vIElmIGVuZCBpcyBub3QgYSBkZXNjZW5kYW50IG9mIG91dGVy
Tm9kZSB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IGNvbW1vbiBhbmNlc3Rv
ciBhbmQgYWRqdXN0IHRoZSBpbnNlcnRpb24KICAgICAgICAgLy8gcG9pbnQgYWNjb3JkaW5nbHku
Ci0gICAgICAgIHdoaWxlICghZW5kLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yob3V0ZXJOb2RlKSkg
eworICAgICAgICB3aGlsZSAoIWVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihv
dXRlck5vZGUpKSB7CiAgICAgICAgICAgICBvdXRlck5vZGUgPSBvdXRlck5vZGUtPnBhcmVudE5v
ZGUoKTsKICAgICAgICAgICAgIHRvcE5vZGUgPSB0b3BOb2RlLT5wYXJlbnROb2RlKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBmb3IgKE5vZGUqIG4gPSBzdGFydC5ub2RlKCktPnRyYXZlcnNlTmV4
dFNpYmxpbmcob3V0ZXJOb2RlKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcob3V0ZXJO
b2RlKSkgewotICAgICAgICAgICAgaWYgKG4tPnBhcmVudE5vZGUoKSAhPSBzdGFydC5ub2RlKCkt
PnBhcmVudE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKS0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRlck5vZGUpOyBuOyBuID0gbi0+dHJhdmVyc2VO
ZXh0U2libGluZyhvdXRlck5vZGUpKSB7CisgICAgICAgICAgICBpZiAobi0+cGFyZW50Tm9kZSgp
ICE9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKSkKICAgICAgICAgICAgICAg
ICBsYXN0Tm9kZSA9IHRvcE5vZGUtPmxhc3RDaGlsZCgpOwogCiAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gY2xvbmVkTm9kZSA9IG4tPmNsb25lTm9kZSh0cnVlKTsKICAgICAgICAgICAgIGluc2Vy
dE5vZGVBZnRlcihjbG9uZWROb2RlLCBsYXN0Tm9kZSk7CiAgICAgICAgICAgICBsYXN0Tm9kZSA9
IGNsb25lZE5vZGUucmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKG4gPT0gZW5kLm5vZGUoKSB8
fCBlbmQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihuKSkKKyAgICAgICAgICAgIGlmIChuID09IGVu
ZC5kZXByZWNhdGVkTm9kZSgpIHx8IGVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihuKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTgzMyw3
ICs4MzEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbGVhbnVwQWZ0ZXJECiAgICAg
aWYgKGlzU3RhcnRPZlBhcmFncmFwaChjYXJldEFmdGVyRGVsZXRlKSAmJiBpc0VuZE9mUGFyYWdy
YXBoKGNhcmV0QWZ0ZXJEZWxldGUpKSB7CiAgICAgICAgIC8vIE5vdGU6IFdlIHdhbnQgdGhlIHJp
Z2h0bW9zdCBjYW5kaWRhdGUuCiAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uID0gY2FyZXRBZnRl
ckRlbGV0ZS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKTsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IHBvc2l0aW9uLm5vZGUoKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCk7CiAgICAgICAgIC8vIE5vcm1hbGx5IGRlbGV0aW9uIHdpbGwgbGVhdmUgYSBi
ciBhcyBhIHBsYWNlaG9sZGVyLgogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShiclRhZykp
CiAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7CkBAIC04OTUs
NyArODkzLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAg
IGJlZm9yZVBhcmFncmFwaCA9IFZpc2libGVQb3NpdGlvbihiZWZvcmVQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKSk7CiAgICAgYWZ0ZXJQYXJhZ3JhcGggPSBWaXNpYmxlUG9zaXRpb24oYWZ0ZXJQ
YXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7CiAKLSAgICBpZiAoYmVmb3JlUGFyYWdyYXBoLmlz
Tm90TnVsbCgpICYmICFpc1RhYmxlRWxlbWVudChiZWZvcmVQYXJhZ3JhcGguZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCkpCisgICAgaWYgKGJlZm9yZVBhcmFncmFwaC5pc05vdE51bGwoKSAmJiAhaXNU
YWJsZUVsZW1lbnQoYmVmb3JlUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKSkKICAgICAgICAgJiYgKCghaXNFbmRPZlBhcmFncmFwaChiZWZvcmVQYXJhZ3JhcGgpICYm
ICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoYmVmb3JlUGFyYWdyYXBoKSkgfHwgYmVmb3JlUGFyYWdyYXBo
ID09IGFmdGVyUGFyYWdyYXBoKSkgewogICAgICAgICAvLyBGSVhNRTogVHJpbSB0ZXh0IGJldHdl
ZW4gYmVmb3JlUGFyYWdyYXBoIGFuZCBhZnRlclBhcmFncmFwaCBpZiB0aGV5IGFyZW4ndCBlcXVh
bC4KICAgICAgICAgaW5zZXJ0Tm9kZUF0KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwg
YmVmb3JlUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwpAQCAtOTU1LDcgKzk1Myw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyBzdGFydCBhbmQg
ZW5kIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgdG8gY3JlYXRlIGEgUmFuZ2U7IHRoZXkgYXJlICJl
ZGl0aW5nIHBvc2l0aW9ucyIKICAgICBQb3NpdGlvbiBzdGFydFJhbmdlQ29tcGxpYW50ID0gc3Rh
cnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kUmFuZ2VDb21w
bGlhbnQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRSYW5nZUNvbXBsaWFudC5u
b2RlKCksIHN0YXJ0UmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5k
UmFuZ2VDb21wbGlhbnQubm9kZSgpLCBlbmRSYW5nZUNvbXBsaWFudC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCBzdGFydFJhbmdlQ29tcGxpYW50LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0UmFuZ2VD
b21wbGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kUmFuZ2VDb21wbGlhbnQuZGVw
cmVjYXRlZE5vZGUoKSwgZW5kUmFuZ2VDb21wbGlhbnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBpbmVmZmljaWVudCB3YXkgdG8gcHJlc2Vy
dmUgc3R5bGUgb24gbm9kZXMgaW4gdGhlIHBhcmFncmFwaCB0byBtb3ZlLiBJdAogICAgIC8vIHNo
b3VsZG4ndCBtYXR0ZXIgdGhvdWdoLCBzaW5jZSBtb3ZlZCBwYXJhZ3JhcGhzIHdpbGwgdXN1YWxs
eSBiZSBxdWl0ZSBzbWFsbC4KQEAgLTk4MCwxMCArOTc4LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3Io
KS0+Y2xlYXJNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGVuZGluZ1NlbGVjdGlvbigpKTsKICAg
ICBkZWxldGVTZWxlY3Rpb24oZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCi0gICAgQVNT
RVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpOwor
ICAgIEFTU0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5E
b2N1bWVudCgpKTsKIAogICAgIGNsZWFudXBBZnRlckRlbGV0aW9uKCk7Ci0gICAgQVNTRVJUKGRl
c3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pbkRvY3VtZW50KCkpOworICAgIEFT
U0VSVChkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVu
dCgpKTsKIAogICAgIC8vIEFkZCBhIGJyIGlmIHBydW5pbmcgYW4gZW1wdHkgYmxvY2sgbGV2ZWwg
ZWxlbWVudCBjYXVzZWQgYSBjb2xsYXBzZS4gRm9yIGV4YW1wbGU6CiAgICAgLy8gZm9vXgpAQCAt
MTEzMSwxNSArMTEyOSwxNSBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9m
RW1wCiAgICAgCiAgICAgUG9zaXRpb24gY2FyZXRQb3MoY2FyZXQuZGVlcEVxdWl2YWxlbnQoKSk7
CiAgICAgLy8gQSBsaW5lIGJyZWFrIGlzIGVpdGhlciBhIGJyIG9yIGEgcHJlc2VydmVkIG5ld2xp
bmUuCi0gICAgQVNTRVJUKGNhcmV0UG9zLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgfHwgKGNh
cmV0UG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGNhcmV0UG9zLm5vZGUoKS0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpKTsKKyAgICBBU1NFUlQoY2FyZXRQb3MuZGVw
cmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgfHwgKGNhcmV0UG9zLmRlcHJlY2F0ZWRO
b2RlKCktPmlzVGV4dE5vZGUoKSAmJiBjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkpOwogICAgIAotICAgIGlmIChjYXJldFBv
cy5ub2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKSB7Ci0gICAgICAgIFBvc2l0aW9uIGJlZm9yZUJS
KHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGNhcmV0UG9zLm5vZGUoKSkpOwotICAgICAgICBy
ZW1vdmVOb2RlKGNhcmV0UG9zLm5vZGUoKSk7Ci0gICAgICAgIHBydW5lKGJlZm9yZUJSLm5vZGUo
KSk7CisgICAgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcp
KSB7CisgICAgICAgIFBvc2l0aW9uIGJlZm9yZUJSKHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2Rl
KGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICAgICAgcmVtb3ZlTm9kZShjYXJldFBv
cy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgcHJ1bmUoYmVmb3JlQlIuZGVwcmVjYXRlZE5v
ZGUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGNhcmV0UG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPT0gMCk7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KGNhcmV0UG9zLm5vZGUoKSk7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3Rh
dGljX2Nhc3Q8VGV4dCo+KGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBDb250
YWluZXJOb2RlKiBwYXJlbnROb2RlID0gdGV4dE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAg
Ly8gVGhlIHByZXNlcnZlZCBuZXdsaW5lIG11c3QgYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBu
b2RlLCBzaW5jZSBvdGhlcndpc2UgdGhlIHByZXZpb3VzCiAgICAgICAgIC8vIHBhcmFncmFwaCB3
b3VsZCBiZSBxdW90ZWQsIGFuZCB3ZSB2ZXJpZmllZCB0aGF0IGl0IHdhc24ndCBhYm92ZS4KQEAg
LTExNzUsNyArMTE3Myw3IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlv
bkEKICAgICAgICAgaWYgKHZpc2libGVQb3MgPT0gbGFzdEluQW5jaG9yKSB7CiAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgYW5jaG9ycyBhcmUgcHVzaGVkIGRvd24gYmVmb3JlIGF2b2lkaW5nIHRo
ZW0gc28gdGhhdCB3ZSBkb24ndAogICAgICAgICAgICAgLy8gYWxzbyBhdm9pZCBzdHJ1Y3R1cmFs
IGVsZW1lbnRzIGxpa2UgbGlzdHMgYW5kIGJsb2NrcyAoNTE0MjAxMikuCi0gICAgICAgICAgICBp
ZiAob3JpZ2luYWwubm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5hbC5ub2RlKCkt
PnBhcmVudE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IpIHsKKyAgICAgICAgICAgIGlmIChvcmln
aW5hbC5kZXByZWNhdGVkTm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvciAmJiBvcmlnaW5hbC5kZXBy
ZWNhdGVkTm9kZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yKSB7CiAgICAgICAg
ICAgICAgICAgcHVzaEFuY2hvckVsZW1lbnREb3duKGVuY2xvc2luZ0FuY2hvcik7CiAgICAgICAg
ICAgICAgICAgZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChvcmlnaW5h
bCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdBbmNob3IpCkBAIC0xMTg0LDcgKzEx
ODIsNyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25BCiAgICAgICAg
ICAgICAvLyBEb24ndCBpbnNlcnQgb3V0c2lkZSBhbiBhbmNob3IgaWYgZG9pbmcgc28gd291bGQg
c2tpcCBvdmVyIGEgbGluZSBicmVhay4gIEl0IHdvdWxkCiAgICAgICAgICAgICAvLyBwcm9iYWJs
eSBiZSBzYWZlIHRvIG1vdmUgdGhlIGxpbmUgYnJlYWsgc28gdGhhdCB3ZSBjb3VsZCBzdGlsbCBh
dm9pZCB0aGUgYW5jaG9yIGhlcmUuCiAgICAgICAgICAgICBQb3NpdGlvbiBkb3duc3RyZWFtKHZp
c2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkpOwotICAgICAgICAgICAgaWYg
KGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpICYmIGRvd25zdHJl
YW0ubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmNsb3NpbmdBbmNob3IpKQorICAgICAgICAgICAg
aWYgKGxpbmVCcmVha0V4aXN0c0F0VmlzaWJsZVBvc2l0aW9uKHZpc2libGVQb3MpICYmIGRvd25z
dHJlYW0uZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5jbG9zaW5nQW5jaG9yKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHJlc3VsdCA9IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUoZW5jbG9zaW5nQW5jaG9yKTsK
QEAgLTExOTQsNyArMTE5Miw3IEBAIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3Np
dGlvbkEKICAgICAgICAgaWYgKHZpc2libGVQb3MgPT0gZmlyc3RJbkFuY2hvcikgewogICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIGFuY2hvcnMgYXJlIHB1c2hlZCBkb3duIGJlZm9yZSBhdm9pZGlu
ZyB0aGVtIHNvIHRoYXQgd2UgZG9uJ3QKICAgICAgICAgICAgIC8vIGFsc28gYXZvaWQgc3RydWN0
dXJhbCBlbGVtZW50cyBsaWtlIGxpc3RzIGFuZCBibG9ja3MgKDUxNDIwMTIpLgotICAgICAgICAg
ICAgaWYgKG9yaWdpbmFsLm5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IgJiYgb3JpZ2luYWwubm9k
ZSgpLT5wYXJlbnROb2RlKCkgIT0gZW5jbG9zaW5nQW5jaG9yKSB7CisgICAgICAgICAgICBpZiAo
b3JpZ2luYWwuZGVwcmVjYXRlZE5vZGUoKSAhPSBlbmNsb3NpbmdBbmNob3IgJiYgb3JpZ2luYWwu
ZGVwcmVjYXRlZE5vZGUoKS0+cGFyZW50Tm9kZSgpICE9IGVuY2xvc2luZ0FuY2hvcikgewogICAg
ICAgICAgICAgICAgIHB1c2hBbmNob3JFbGVtZW50RG93bihlbmNsb3NpbmdBbmNob3IpOwogICAg
ICAgICAgICAgICAgIGVuY2xvc2luZ0FuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQob3Jp
Z2luYWwpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDcgKzg0LDcgQEAgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0
aW9uQwogfQogCiBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpEZWxldGVTZWxlY3Rpb25Db21tYW5k
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBzbWFydERlbGV0ZSwgYm9v
bCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2UsIGJvb2wgZXhwYW5kRm9yU3Bl
Y2lhbEVsZW1lbnRzKQotICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoc2VsZWN0aW9uLnN0YXJ0
KCkubm9kZSgpLT5kb2N1bWVudCgpKSwgCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChzZWxl
Y3Rpb24uc3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkpLCAKICAgICAgIG1faGFzU2Vs
ZWN0aW9uVG9EZWxldGUodHJ1ZSksIAogICAgICAgbV9zbWFydERlbGV0ZShzbWFydERlbGV0ZSks
IAogICAgICAgbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUp
LApAQCAtMTEwLDEwICsxMTAsMTAgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjppbml0
aWFsaXplUwogIAogICAgIC8vIEZvciBIUnMsIHdlJ2xsIGdldCBhIHBvc2l0aW9uIGF0IChIUiwx
KSB3aGVuIGhpdHRpbmcgZGVsZXRlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJldmlvdXMg
bGluZSwgb3IgKEhSLDApIHdoZW4gZm9yd2FyZCBkZWxldGluZywKICAgICAvLyBidXQgaW4gdGhl
c2UgY2FzZXMsIHdlIHdhbnQgdG8gZGVsZXRlIGl0LCBzbyBtYW51YWxseSBleHBhbmQgdGhlIHNl
bGVjdGlvbgotICAgIGlmIChzdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoaHJUYWcpKQotICAgICAg
ICBzdGFydCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydC5ub2RlKCkpOwotICAgIGVsc2UgaWYg
KGVuZC5ub2RlKCktPmhhc1RhZ05hbWUoaHJUYWcpKQotICAgICAgICBlbmQgPSBwb3NpdGlvbkFm
dGVyTm9kZShlbmQubm9kZSgpKTsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aGFz
VGFnTmFtZShoclRhZykpCisgICAgICAgIHN0YXJ0ID0gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCkpOworICAgIGVsc2UgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpLT5o
YXNUYWdOYW1lKGhyVGFnKSkKKyAgICAgICAgZW5kID0gcG9zaXRpb25BZnRlck5vZGUoZW5kLmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgdXNlZCBz
byB0aGF0IG1vdmVQYXJhZ3JhcGhzIGNhbiBhdm9pZCB0aGUgYnVncyBpbiBzcGVjaWFsIGVsZW1l
bnQgZXhwYW5zaW9uLgogICAgIGlmICghbV9leHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpCkBAIC0y
NzUsNyArMjc1LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwog
ICAgIC8vIHR5cGluZyBzdHlsZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNlbGVjdGlvbiwgbm9yIGlz
IHRoZXJlIGEgcmVhc29uIHRvIAogICAgIC8vIGNvbXB1dGUgdGhlIHN0eWxlIGF0IHRoZSBzdGFy
dCBvZiB0aGUgc2VsZWN0aW9uIGFmdGVyIGRlbGV0aW9uIChzZWUgdGhlIAogICAgIC8vIGVhcmx5
IHJldHVybiBpbiBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKS4KLSAgICBpZiAobV91
cHN0cmVhbVN0YXJ0Lm5vZGUoKSA9PSBtX2Rvd25zdHJlYW1FbmQubm9kZSgpICYmIG1fdXBzdHJl
YW1TdGFydC5ub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICBpZiAobV91cHN0cmVhbVN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCkgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgbV91
cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRmlndXJlIG91dCB0aGUgdHlwaW5nIHN0eWxlIGluIGVmZmVjdCBiZWZv
cmUgdGhlIGRlbGV0ZSBpcyBkb25lLgpAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIAogICAgIC8vIElmIHdlJ3JlIGRlbGV0aW5nIGlu
dG8gYSBNYWlsIGJsb2NrcXVvdGUsIHNhdmUgdGhlIHN0eWxlIGF0IGVuZCgpIGluc3RlYWQgb2Yg
c3RhcnQoKQogICAgIC8vIFdlJ2xsIHVzZSB0aGlzIGxhdGVyIGluIGNvbXB1dGVUeXBpbmdTdHls
ZUFmdGVyRGVsZXRlIGlmIHdlIGVuZCB1cCBvdXRzaWRlIG9mIGEgTWFpbCBibG9ja3F1b3RlCi0g
ICAgaWYgKG5lYXJlc3RNYWlsQmxvY2txdW90ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCku
bm9kZSgpKSkKKyAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxl
dGUuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgbV9kZWxldGVJbnRvQmxvY2tx
dW90ZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQo
KSk7CiAgICAgZWxzZQogICAgICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwpA
QCAtMjkzLDExICsyOTMsMTEgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlw
aW5nUwogYm9vbCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVs
ZXRlKCkKIHsKICAgICAvLyBDaGVjayBmb3Igc3BlY2lhbC1jYXNlIHdoZXJlIHRoZSBzZWxlY3Rp
b24gY29udGFpbnMgb25seSBhIEJSIG9uIGEgbGluZSBieSBpdHNlbGYgYWZ0ZXIgYW5vdGhlciBC
Ui4KLSAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZyk7Ci0gICAgYm9vbCBkb3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3du
c3RyZWFtU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKTsKLSAgICBib29sIGlzQlJPbkxp
bmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1TdGFydElzQlIgJiYg
bV9kb3duc3RyZWFtU3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQubm9kZSgpOworICAgIGJv
b2wgdXBzdHJlYW1TdGFydElzQlIgPSBtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZyk7CisgICAgYm9vbCBkb3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3du
c3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZyk7CisgICAgYm9v
bCBpc0JST25MaW5lQnlJdHNlbGYgPSB1cHN0cmVhbVN0YXJ0SXNCUiAmJiBkb3duc3RyZWFtU3Rh
cnRJc0JSICYmIG1fZG93bnN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbV91cHN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsKLSAg
ICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOworICAgICAgICByZW1v
dmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTQxNiw3ICs0MTYsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmRlbGV0ZVRleHRGCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZUdlbmVyYWxEZWxldGUoKQogewogICAgIGludCBzdGFydE9mZnNldCA9IG1fdXBzdHJlYW1TdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG1fdXBz
dHJlYW1TdGFydC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gbV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgCiAgICAgLy8gTmV2ZXIgcmVtb3ZlIHRoZSBzdGFydCBi
bG9jayB1bmxlc3MgaXQncyBhIHRhYmxlLCBpbiB3aGljaCBjYXNlIHdlIHdvbid0IG1lcmdlIGNv
bnRlbnQgaW4uCiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX3N0YXJ0QmxvY2sgJiYgc3RhcnRPZmZz
ZXQgPT0gMCAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIXN0YXJ0
Tm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKQEAgLTQzOSw3ICs0MzksNyBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgaWYgKCFzdGFydE5vZGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdGFydE5vZGUgPT0gbV9kb3duc3RyZWFtRW5kLm5v
ZGUoKSkgeworICAgIGlmIChzdGFydE5vZGUgPT0gbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCkpIHsKICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpIC0gc3RhcnRPZmZzZXQgPiAwKSB7CiAgICAgICAgICAgICBpZiAoc3RhcnROb2RlLT5p
c1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5l
ZWRzIHRvIGJlIHRyaW1tZWQKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgICAgICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7
CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBib29sIHN0YXJ0Tm9kZVdhc0Rlc2NlbmRhbnRP
ZkVuZE5vZGUgPSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihtX2Rvd25z
dHJlYW1FbmQubm9kZSgpKTsKKyAgICAgICAgYm9vbCBzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZF
bmROb2RlID0gbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgLy8gVGhlIHNlbGVj
dGlvbiB0byBkZWxldGUgc3BhbnMgbW9yZSB0aGFuIG9uZSBub2RlLgogICAgICAgICBSZWZQdHI8
Tm9kZT4gbm9kZShzdGFydE5vZGUpOwogICAgICAgICAKQEAgLTQ2OSwyMSArNDY5LDIxIEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgbm9kZSA9IHN0YXJ0Tm9kZS0+Y2hpbGROb2RlKHN0YXJ0T2Zm
c2V0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUgPT0gbV91
cHN0cmVhbUVuZC5ub2RlKCkgJiYgc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAg
ICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV91cHN0cmVhbUVuZC5ub2RlKCkp
OworICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCkgJiYgc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgIFRleHQq
IHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgp
KTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX3Vwc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICAvLyBoYW5kbGUgZGVsZXRpbmcgYWxsIG5vZGVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgc2VsZWN0
ZWQKLSAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2Rvd25zdHJlYW1FbmQubm9kZSgp
KSB7CisgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gbV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKSwgbV9kb3duc3RyZWFtRW5kKSA+PSAwKSB7
CiAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VOZXh0U2libGluZyBqdXN0IGJsZXcgcGFzdCB0
aGUgZW5kIHBvc2l0aW9uLCBzbyBzdG9wIGRlbGV0aW5nCiAgICAgICAgICAgICAgICAgbm9kZSA9
IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2Rvd25zdHJlYW1FbmQubm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihub2RlLmdldCgpKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZygpOwogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGp1c3QgcmVtb3ZlZCBhIG5v
ZGUgZnJvbSB0aGUgZW5kIGNvbnRhaW5lciwgdXBkYXRlIGVuZCBwb3NpdGlvbiBzbyB0aGUKICAg
ICAgICAgICAgICAgICAvLyBjaGVjayBhYm92ZSB3aWxsIHdvcmsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+cGFyZW50Tm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpID09IG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5ub2RlSW5kZXgoKSA8ICh1bnNpZ25lZCltX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZC5t
b3ZlVG9PZmZzZXQobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSAx
KTsKQEAgLTQ5Miw3ICs0OTIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZUdlbmVyCiAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHROb2RlLmdldCgpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBOb2RlKiBuID0gbm9kZS0+bGFzdERlc2NlbmRh
bnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLm5vZGUoKSA9PSBuICYm
IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zm
c2V0KG4pKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
Tm9kZSgpID09IG4gJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
Pj0gY2FyZXRNYXhPZmZzZXQobikpIHsKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShu
b2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCkBAIC01MDAsMzMgKzUwMCwzMyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubm9kZSgpICE9IHN0YXJ0Tm9kZSAmJiAhbV91cHN0cmVh
bVN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkgJiYg
bV9kb3duc3RyZWFtRW5kLm5vZGUoKS0+aW5Eb2N1bWVudCgpICYmIG1fZG93bnN0cmVhbUVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWluT2Zmc2V0KG1fZG93bnN0cmVhbUVu
ZC5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmF0TGFzdEVkaXRp
bmdQb3NpdGlvbkZvck5vZGUoKSAmJiAhY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhtX2Rvd25z
dHJlYW1FbmQubm9kZSgpKSkgeworICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWROb2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUo
KS0+aXNEZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpICYmIG1f
ZG93bnN0cmVhbUVuZC5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQoKSAmJiBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1pbk9mZnNldChtX2Rvd25zdHJl
YW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1F
bmQuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmICFjYW5IYXZlQ2hpbGRyZW5Gb3JF
ZGl0aW5nKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBub2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3RlZCwgbm90IGp1c3QgaXRzIGNv
bnRlbnRzLiAgRGVsZXRlIGl0LgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3Ry
ZWFtRW5kLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmIChtX2Rvd25zdHJlYW1FbmQubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUo
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRv
IGJlIHRyaW1tZWQKLSAgICAgICAgICAgICAgICAgICAgVGV4dCAqdGV4dCA9IHN0YXRpY19jYXN0
PFRleHQgKj4obV9kb3duc3RyZWFtRW5kLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIFRl
eHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVU
ZXh0RnJvbU5vZGUodGV4dCwgMCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGNoaWxkcmVuIG9mIG1fZG93bnN0cmVhbUVuZC5ub2RlKCkgdGhhdCBjb21lIGFmdGVyIG1fdXBz
dHJlYW1TdGFydC4KLSAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVtb3ZlIGNoaWxk
cmVuIGlmIG1fdXBzdHJlYW1TdGFydCB3YXMgaW5zaWRlIG1fZG93bnN0cmVhbUVuZC5ub2RlKCkK
KyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY2hpbGRyZW4gb2YgbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkgdGhhdCBjb21lIGFmdGVyIG1fdXBzdHJlYW1TdGFydC4KKyAgICAgICAg
ICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVtb3ZlIGNoaWxkcmVuIGlmIG1fdXBzdHJlYW1TdGFy
dCB3YXMgaW5zaWRlIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpCiAgICAgICAgICAg
ICAgICAgLy8gYW5kIG1fdXBzdHJlYW1TdGFydCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRv
Y3VtZW50LCBiZWNhdXNlIHRoZW4gd2UgZG9uJ3QgCiAgICAgICAgICAgICAgICAgLy8ga25vdyBo
b3cgbWFueSBjaGlsZHJlbiB0byByZW1vdmUuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1h
a2UgbV91cHN0cmVhbVN0YXJ0IGEgcG9zaXRpb24gd2UgdXBkYXRlIGFzIHdlIHJlbW92ZSBjb250
ZW50LCB0aGVuIHdlIGNhbgogICAgICAgICAgICAgICAgIC8vIGFsd2F5cyBrbm93IHdoaWNoIGNo
aWxkcmVuIHRvIHJlbW92ZS4KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEoc3RhcnROb2Rl
V2FzRGVzY2VuZGFudE9mRW5kTm9kZSAmJiAhbV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aW5Eb2N1
bWVudCgpKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIShzdGFydE5vZGVXYXNEZXNj
ZW5kYW50T2ZFbmROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuYW5jaG9yTm9kZSgpLT5pbkRvY3Vt
ZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobV91cHN0cmVhbVN0YXJ0Lm5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9k
b3duc3RyZWFtRW5kLm5vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgKm4g
PSBtX3Vwc3RyZWFtU3RhcnQubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KG4gJiYgbi0+cGFyZW50Tm9kZSgpICE9IG1fZG93bnN0cmVhbUVuZC5ub2RlKCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNj
ZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBuID0gbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5wYXJlbnROb2RlKCkgIT0g
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG4tPm5vZGVJbmRleCgpICsg
MTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGls
ZHJlbkluUmFuZ2UobV9kb3duc3RyZWFtRW5kLm5vZGUoKSwgb2Zmc2V0LCBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJlbW92
ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSwgb2Zmc2V0
LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fZG93bnN0cmVhbUVuZC5tb3ZlVG9PZmZzZXQob2Zmc2V0KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MzgsMTMgKzUzOCwxMyBAQCB2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzCiB7CiAgICAgdXBkYXRlTGF5b3V0KCk7CiAg
ICAgLy8gRklYTUU6IGlzUmVuZGVyZWRDaGFyYWN0ZXIgc2hvdWxkIGJlIHJlbW92ZWQsIGFuZCB3
ZSBzaG91bGQgdXNlIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyQWZ0ZXIgYW5kIFZpc2libGVQ
b3NpdGlvbjo6Y2hhcmFjdGVyQmVmb3JlCi0gICAgaWYgKG1fbGVhZGluZ1doaXRlc3BhY2UuaXNO
b3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYm
IG1fbGVhZGluZ1doaXRlc3BhY2Uubm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4
dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9sZWFkaW5nV2hpdGVzcGFjZS5ub2Rl
KCkpOworICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX2xlYWRp
bmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBtX2xlYWRpbmdXaGl0ZXNwYWNl
LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBUZXh0KiB0ZXh0Tm9k
ZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxh
Y2VUZXh0SW5Ob2RlKHRleHROb2RlLCBtX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgfQotICAgIGlm
IChtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc05vdE51bGwoKSAmJiAhbV90cmFpbGluZ1doaXRlc3Bh
Y2UuaXNSZW5kZXJlZENoYXJhY3RlcigpICYmIG1fdHJhaWxpbmdXaGl0ZXNwYWNlLm5vZGUoKS0+
aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KG1fdHJhaWxpbmdXaGl0ZXNwYWNlLm5vZGUoKSk7CisgICAgaWYgKG1fdHJhaWxpbmdXaGl0
ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hh
cmFjdGVyKCkgJiYgbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0
Tm9kZSgpKSB7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1f
dHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRl
eHROb2RlLT5yZW5kZXJlcigpIHx8dGV4dE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPmNvbGxh
cHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIG1f
dHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgfQpAQCAtNTY5LDcgKzU2OSw3IEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAgICBBU1NFUlQoIW1fcHJ1bmVTdGFydEJs
b2NrSWZOZWNlc3NhcnkpOwogCiAgICAgLy8gRklYTUU6IERlbGV0aW9uIHNob3VsZCBhZGp1c3Qg
c2VsZWN0aW9uIGVuZHBvaW50cyBhcyBpdCByZW1vdmVzIG5vZGVzIHNvIHRoYXQgd2UgbmV2ZXIg
Z2V0IGludG8gdGhpcyBzdGF0ZSAoNDA5OTgzOSkuCi0gICAgaWYgKCFtX2Rvd25zdHJlYW1FbmQu
bm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fdXBzdHJlYW1TdGFydC5ub2RlKCktPmluRG9jdW1l
bnQoKSkKKyAgICBpZiAoIW1fZG93bnN0cmVhbUVuZC5hbmNob3JOb2RlKCktPmluRG9jdW1lbnQo
KSB8fCAhbV91cHN0cmVhbVN0YXJ0LmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgCiAgICAgLy8gRklYTUU6IFRoZSBkZWxldGlvbiBhbGdvcml0
aG0gc2hvdWxkbid0IGxldCB0aGlzIGhhcHBlbi4KQEAgLTU4NSwxNCArNTg1LDE0IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAgICAKICAgICAvLyBtX2Rvd25z
dHJlYW1FbmQncyBibG9jayBoYXMgYmVlbiBlbXB0aWVkIG91dCBieSBkZWxldGlvbi4gIFRoZXJl
IGlzIG5vIGNvbnRlbnQgaW5zaWRlIG9mIGl0IHRvCiAgICAgLy8gbW92ZSwgc28ganVzdCByZW1v
dmUgaXQuCi0gICAgRWxlbWVudCogZW5kQmxvY2sgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5j
bG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkpOwotICAgIGlmICghc3RhcnRPZlBh
cmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSB8fCAhZW5kQmxvY2stPmNvbnRh
aW5zKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpKSB7Ci0g
ICAgICAgIHJlbW92ZU5vZGUoZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLm5vZGUoKSkp
OworICAgIEVsZW1lbnQqIGVuZEJsb2NrID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xvc2lu
Z0Jsb2NrKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSk7CisgICAgaWYgKCFzdGFy
dE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSB8fCAh
ZW5kQmxvY2stPmNvbnRhaW5zKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpKSkgeworICAgICAgICByZW1vdmVOb2RlKGVuY2xvc2luZ0Jsb2Nr
KG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgLy8gV2UgbmVlZCB0byBtZXJnZSBpbnRvIG1fdXBzdHJlYW1TdGFydCdz
IGJsb2NrLCBidXQgaXQncyBiZWVuIGVtcHRpZWQgb3V0IGFuZCBjb2xsYXBzZWQgYnkgZGVsZXRp
b24uCi0gICAgaWYgKCFtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpIHx8
ICFtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihtX3Vwc3RyZWFtU3RhcnQubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkpIHx8
IG1fc3RhcnRzQXRFbXB0eUxpbmUpIHsKKyAgICBpZiAoIW1lcmdlRGVzdGluYXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpIHx8ICFtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSkgfHwgbV9zdGFy
dHNBdEVtcHR5TGluZSkgewogICAgICAgICBpbnNlcnROb2RlQXQoY3JlYXRlQnJlYWtFbGVtZW50
KGRvY3VtZW50KCkpLmdldCgpLCBtX3Vwc3RyZWFtU3RhcnQpOwogICAgICAgICBtZXJnZURlc3Rp
bmF0aW9uID0gVmlzaWJsZVBvc2l0aW9uKG1fdXBzdHJlYW1TdGFydCk7CiAgICAgfQpAQCAtNjA4
LDggKzYwOCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3IKICAg
ICAvLyBUaGUgcnVsZSBmb3IgbWVyZ2luZyBpbnRvIGFuIGVtcHR5IGJsb2NrIGlzOiBvbmx5IGRv
IHNvIGlmIGl0cyBmYXJ0aGVyIHRvIHRoZSByaWdodC4KICAgICAvLyBGSVhNRTogQ29uc2lkZXIg
UlRMLgogICAgIGlmICghbV9zdGFydHNBdEVtcHR5TGluZSAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgo
bWVyZ2VEZXN0aW5hdGlvbikgJiYgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5hYnNvbHV0ZUNhcmV0
Qm91bmRzKCkueCgpID4gbWVyZ2VEZXN0aW5hdGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkueCgp
KSB7Ci0gICAgICAgIGlmIChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0
cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAgICAgICAgIHJlbW92ZU5v
ZGVBbmRQcnVuZUFuY2VzdG9ycyhtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93
bnN0cmVhbSgpLm5vZGUoKSk7CisgICAgICAgIGlmIChtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVp
dmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcp
KSB7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobWVyZ2VEZXN0aW5h
dGlvbi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICAgICAgICAgIG1fZW5kaW5nUG9zaXRpb24gPSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBF
cXVpdmFsZW50KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTYxOCw3ICs2
MTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyCiAgICAgLy8g
QmxvY2sgaW1hZ2VzLCB0YWJsZXMgYW5kIGhvcml6b250YWwgcnVsZXMgY2Fubm90IGJlIG1hZGUg
aW5saW5lIHdpdGggY29udGVudCBhdCBtZXJnZURlc3RpbmF0aW9uLiAgSWYgdGhlcmUgaXMgCiAg
ICAgLy8gYW55ICghaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pKSwgZG9uJ3Qg
bWVyZ2UsIGp1c3QgbW92ZSB0aGUgY2FyZXQgdG8ganVzdCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3
ZSBkZWxldGVkLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjU0MzkKLSAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
c3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkgJiYgIWlzU3Rh
cnRPZlBhcmFncmFwaChtZXJnZURlc3RpbmF0aW9uKSkgeworICAgIGlmIChpc1JlbmRlcmVkQXNO
b25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzU3RhcnRPZlBhcmFncmFwaChtZXJnZURlc3Rp
bmF0aW9uKSkgewogICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gbV91cHN0cmVhbVN0YXJ0Owog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUHJldmkKICAgICBpZiAobV9lbmRUYWJsZVJvdyAmJiBtX2Vu
ZFRhYmxlUm93LT5pbkRvY3VtZW50KCkgJiYgbV9lbmRUYWJsZVJvdyAhPSBtX3N0YXJ0VGFibGVS
b3cpCiAgICAgICAgIGlmIChpc1RhYmxlUm93RW1wdHkobV9lbmRUYWJsZVJvdy5nZXQoKSkpIHsK
ICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBtX2VuZFRhYmxlUm93IGlmIGl0J3Mgd2hlcmUg
d2UncmUgcHV0dGluZyB0aGUgZW5kaW5nIHNlbGVjdGlvbi4KLSAgICAgICAgICAgIGlmICghbV9l
bmRpbmdQb3NpdGlvbi5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZW5kVGFibGVSb3cuZ2V0KCkp
KSB7CisgICAgICAgICAgICBpZiAoIW1fZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+
aXNEZXNjZW5kYW50T2YobV9lbmRUYWJsZVJvdy5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV2UgcHJvYmFibHkgc2hvdWxkbid0IHJlbW92ZSBtX2VuZFRhYmxlUm93IHVubGVz
cyBpdCdzIGZ1bGx5IHNlbGVjdGVkLCBldmVuIGlmIGl0IGlzIGVtcHR5LgogICAgICAgICAgICAg
ICAgIC8vIFdlJ2xsIG5lZWQgdG8gc3RhcnQgYWRqdXN0aW5nIHRoZSBzZWxlY3Rpb24gZW5kcG9p
bnRzIGR1cmluZyBkZWxldGlvbiB0byBrbm93IHdoZXRoZXIgb3Igbm90IG1fZW5kVGFibGVSb3cK
ICAgICAgICAgICAgICAgICAvLyB3YXMgZnVsbHkgc2VsZWN0ZWQgaGVyZS4KQEAgLTY4Nyw3ICs2
ODcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAgICAgLy8g
aGFzIGNvbXBsZXRlZC4KICAgICAKICAgICAvLyBJZiB3ZSBkZWxldGVkIGludG8gYSBibG9ja3F1
b3RlLCBidXQgYXJlIG5vdyBubyBsb25nZXIgaW4gYSBibG9ja3F1b3RlLCB1c2UgdGhlIGFsdGVy
bmF0ZSB0eXBpbmcgc3R5bGUKLSAgICBpZiAobV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlICYm
ICFuZWFyZXN0TWFpbEJsb2NrcXVvdGUobV9lbmRpbmdQb3NpdGlvbi5ub2RlKCkpKQorICAgIGlm
IChtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgJiYgIW5lYXJlc3RNYWlsQmxvY2txdW90ZSht
X2VuZGluZ1Bvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAgICBtX3R5cGluZ1N0eWxl
ID0gbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxlOwogICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVv
dGVTdHlsZSA9IDA7CiAKQEAgLTc0Miw3ICs3NDIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgLy8gSWYgdGhlIGRlbGV0aW9uIGlzIG9jY3VycmluZyBp
biBhIHRleHQgZmllbGQsIGFuZCB3ZSdyZSBub3QgZGVsZXRpbmcgdG8gcmVwbGFjZSB0aGUgc2Vs
ZWN0aW9uLCB0aGVuIGxldCB0aGUgZnJhbWUgY2FsbCBhY3Jvc3MgdGhlIGJyaWRnZSB0byBub3Rp
ZnkgdGhlIGZvcm0gZGVsZWdhdGUuIAogICAgIGlmICghbV9yZXBsYWNlKSB7Ci0gICAgICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5ub2RlKCk7CisgICAg
ICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXByZWNh
dGVkTm9kZSgpOwogICAgICAgICBOb2RlKiBhbmNlc3Rvck5vZGUgPSBzdGFydE5vZGUgPyBzdGFy
dE5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKICAgICAgICAgaWYgKGFuY2VzdG9yTm9k
ZSAmJiBhbmNlc3Rvck5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpCiAgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGFuY2VzdG9yTm9kZSktPmlzVGV4dEZp
ZWxkKCkKQEAgLTc2Miw3ICs3NjIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgICAgICAvLyBhbmQgZW5kcyBpbnNpZGUgaXQgKHdlIGRvIG5lZWQgcGxhY2Vo
b2xkZXJzIHRvIGhvbGQgb3BlbiBlbXB0eSBjZWxscywgYnV0IHRoYXQncwogICAgICAgICAvLyBo
YW5kbGVkIGVsc2V3aGVyZSkuCiAgICAgICAgIGlmIChOb2RlKiB0YWJsZSA9IGlzTGFzdFBvc2l0
aW9uQmVmb3JlVGFibGUobV9zZWxlY3Rpb25Ub0RlbGV0ZS52aXNpYmxlU3RhcnQoKSkpCi0gICAg
ICAgICAgICBpZiAobV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5ub2RlKCktPmlzRGVzY2VuZGFu
dE9mKHRhYmxlKSkKKyAgICAgICAgICAgIGlmIChtX3NlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRl
cHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKICAgICAgICAgICAgICAgICBt
X25lZWRQbGFjZWhvbGRlciA9IGZhbHNlOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDcgKzEwMSw3IEBAIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1N0eWxlKGNvbnN0IFBvc2l0aW8KICAg
ICA6IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUoZmFsc2UpCiAgICAgLCBtX2ZvbnRT
aXplRGVsdGEoTm9Gb250RGVsdGEpCiB7Ci0gICAgaW5pdChwb3NpdGlvbi5ub2RlKCksIE9ubHlJ
bmhlcml0YWJsZVByb3BlcnRpZXMpOworICAgIGluaXQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSwgT25seUluaGVyaXRhYmxlUHJvcGVydGllcyk7CiB9CiAKIEVkaXRpbmdTdHlsZTo6RWRpdGlu
Z1N0eWxlKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQpAQCAtMzQ2LDcgKzM0Niw3
IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnMKIFBhc3NSZWZQdHI8
RWRpdGluZ1N0eWxlPiBlZGl0aW5nU3R5bGVJbmNsdWRpbmdUeXBpbmdTdHlsZShjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24pCiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxl
ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocG9zaXRpb24pOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5
bGU+IHR5cGluZ1N0eWxlID0gcG9zaXRpb24ubm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0eXBp
bmdTdHlsZSA9IHBvc2l0aW9uLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAgaWYgKHR5cGluZ1N0eWxlICYmIHR5cGluZ1N0
eWxlLT5zdHlsZSgpKQogICAgICAgICBlZGl0aW5nU3R5bGUtPnN0eWxlKCktPm1lcmdlKGNvcHlF
ZGl0aW5nUHJvcGVydGllcyh0eXBpbmdTdHlsZS0+c3R5bGUoKSkuZ2V0KCkpOwogICAgIHJldHVy
biBlZGl0aW5nU3R5bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lv
biA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIFZpc2libGVTZWxlY3Rpb24gRWRpdG9yOjpzZWxlY3Rp
b25Gb3JDb20KICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIGEgdGV4dCBjb250cm9sLCBhbmQgdGhl
IGN1cnJlbnQgc2VsZWN0aW9uIGlzIG91dHNpZGUgb2YgaXRzIHNoYWRvdyB0cmVlLAogICAgIC8v
IHRoZW4gdXNlIHRoZSBzYXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgdGV4dCBjb250cm9sLgogICAg
IE5vZGUqIHRhcmdldCA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7Ci0gICAgTm9kZSogc2Vs
ZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICh0
YXJnZXQgJiYgKCFzZWxlY3Rpb25TdGFydCB8fCB0YXJnZXQtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
ICE9IHNlbGVjdGlvblN0YXJ0LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkpIHsKICAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKICAgICAgICAgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShpbnB1dFRh
ZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHRhcmdldCktPmlzVGV4dEZpZWxk
KCkpCkBAIC0zMDYsNyArMzA2LDcgQEAgYm9vbCBFZGl0b3I6OmNhbkRlbGV0ZVJhbmdlKFJhbmdl
KiByYW5nZQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQoc3RhcnRDb250YWluZXIsIHJh
bmdlLT5zdGFydE9mZnNldChlYyksIERPV05TVFJFQU0pOwogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcHJldmlvdXMgPSBzdGFydC5wcmV2aW91cygpOwogICAgICAgICAvLyBGSVhNRTogV2Ugc29t
ZXRpbWVzIGFsbG93IGRlbGV0aW9ucyBhdCB0aGUgc3RhcnQgb2YgZWRpdGFibGUgcm9vdHMsIGxp
a2Ugd2hlbiB0aGUgY2FyZXQgaXMgaW4gYW4gZW1wdHkgbGlzdCBpdGVtLgotICAgICAgICBpZiAo
cHJldmlvdXMuaXNOdWxsKCkgfHwgcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBzdGFydENvbnRhaW5lci0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpKQorICAgICAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkgfHwgcHJldmlvdXMuZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gc3RhcnRD
b250YWluZXItPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBFZGl0
b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oYwogdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0No
YW5nZWRDb250ZW50cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBlbmRpbmdTZWxlY3Rpb24pCiB7
CiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGVuZGluZ1NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKG5vZGUtPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2Fj
aGU6OkFYVmFsdWVDaGFuZ2VkLCBmYWxzZSk7CiAgICAgfQpAQCAtNjEzLDcgKzYxMyw3IEBAIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCA9IDA7CiAKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0g
cmFuZ2UtPmVkaXRpbmdTdGFydFBvc2l0aW9uKCkubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0Tm9k
ZSA9IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAg
aWYgKHN0YXJ0Tm9kZSkgewogICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0
Tm9kZSgpOwogICAgICAgICAvLyBJbiB0aGUgbG9vcCBiZWxvdywgbiBzaG91bGQgZXZlbnR1YWxs
eSBtYXRjaCBwYXN0RW5kIGFuZCBub3QgYmVjb21lIG5pbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVh
c3Qgb25lCkBAIC02NDgsNyArNjQ4LDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHRE
aXJlY3Rpb25GbwogCiAgICAgUG9zaXRpb24gcG9zaXRpb24gPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCk7CiAKLSAgICBOb2RlKiBub2RlID0g
cG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIE5hdHVyYWxXcml0aW5nRGlyZWN0
aW9uOwogCkBAIC02ODAsNyArNjgwLDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0b3I6OnRleHRE
aXJlY3Rpb25GbwogICAgICAgICAgICAgaGFzTmVzdGVkT3JNdWx0aXBsZUVtYmVkZGluZ3MgPSBm
YWxzZTsKICAgICAgICAgICAgIHJldHVybiBkaXJlY3Rpb247CiAgICAgICAgIH0KLSAgICAgICAg
bm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5k
ZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIHNlbGVjdGlvbiBpcyBlaXRoZXIgYSBjYXJl
dCB3aXRoIG5vIHR5cGluZyBhdHRyaWJ1dGVzIG9yIGEgcmFuZ2UgaW4gd2hpY2ggbm8gZW1iZWRk
aW5nIGlzIGFkZGVkLCBzbyBqdXN0IHVzZSB0aGUgc3RhcnQgcG9zaXRpb24KQEAgLTcxOSw3ICs3
MTksNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRvcjo6dGV4dERpcmVjdGlvbkZvCiAgICAgICAg
ICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAgLy8gSW4gdGhl
IHJhbmdlIGNhc2UsIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbWJlZGRpbmcgZWxlbWVudCBwZXJzaXN0
cyB1bnRpbCB0aGUgZW5kIG9mIHRoZSByYW5nZS4KLSAgICAgICAgaWYgKG1fZnJhbWUtPnNlbGVj
dGlvbigpLT5pc1JhbmdlKCkgJiYgIWVuZC5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQor
ICAgICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSAmJiAhZW5kLmRlcHJl
Y2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIE5h
dHVyYWxXcml0aW5nRGlyZWN0aW9uOwogCiAgICAgICAgIGZvdW5kRGlyZWN0aW9uID0gZGlyZWN0
aW9uVmFsdWUgPT0gQ1NTVmFsdWVMdHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBS
aWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CkBAIC03MzUsMTIgKzczNSwxMiBAQCBib29sIEVk
aXRvcjo6aGFzQmlkaVNlbGVjdGlvbigpIGNvbnN0CiAKICAgICBOb2RlKiBzdGFydE5vZGU7CiAg
ICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCkpIHsKLSAgICAgICAgc3RhcnRO
b2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVh
bSgpLm5vZGUoKTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpLm5vZGUoKTsKKyAgICAgICAgc3RhcnROb2Rl
ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7CisgICAgICAgIE5vZGUqIGVuZE5vZGUgPSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCkuZW5kKCkudXBzdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpOwog
ICAgICAgICBpZiAoZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKSAhPSBlbmNsb3NpbmdCbG9jayhl
bmROb2RlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UKLSAgICAgICAg
c3RhcnROb2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnZpc2libGVTdGFy
dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBtX2ZyYW1l
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHN0YXJ0
Tm9kZS0+cmVuZGVyZXIoKTsKICAgICB3aGlsZSAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5pc1Jl
bmRlckJsb2NrKCkpCkBAIC0xMDAzLDE4ICsxMDAzLDE4IEBAIFRyaVN0YXRlIEVkaXRvcjo6c2Vs
ZWN0aW9uSGFzU3R5bGUoQ1NTU3QKICAgICAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwog
ICAgICAgICBzdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZShzdHlsZSwgc2VsZWN0aW9uU3R5bGUuZ2V0
KCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNl
bGVjdGlvbigpLT5zdGFydCgpLm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24o
KS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBub2RlU3R5bGUgPSBjb21wdXRlZFN0eWxlKG5vZGUpOwogICAgICAgICAgICAgaWYgKG5v
ZGVTdHlsZSkgewogICAgICAgICAgICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRl
T2ZTdHlsZShzdHlsZSwgbm9kZVN0eWxlLmdldCgpLCAhbm9kZS0+aXNUZXh0Tm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5u
b2RlKCkpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCkt
PnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBu
b2RlU3RhdGU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgIT0gbm9kZVN0YXRlICYm
IG5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IE1peGVk
VHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChub2RlID09IG1fZnJhbWUtPnNlbGVjdGlv
bigpLT5lbmQoKS5ub2RlKCkpCisgICAgICAgICAgICBpZiAobm9kZSA9PSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+ZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTEyMTgsNyArMTIxOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNl
cnRUZXh0V2l0aG91dFNlbmRpbmdUZXgKICAgICAvLyB0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUg
ZXZlbnQgdGFyZ2V0LgogICAgIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvckNvbW1hbmQodHJpZ2dl
cmluZ0V2ZW50KTsKICAgICBpZiAoc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAg
ICAgICAgaWYgKE5vZGUqIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgp
KSB7CisgICAgICAgIGlmIChOb2RlKiBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1l
bnQgPSBzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gSW5zZXJ0IHRoZSB0ZXh0CkBAIC0xMjgxLDcgKzEyODEsNyBAQCB2b2lkIEVkaXRvcjo6
Y3V0KCkKICNpZiBSRU1PVkVfTUFSS0VSU19VUE9OX0VESVRJTkcKICAgICAgICAgcmVtb3ZlU3Bl
bGxBbmRDb3JyZWN0aW9uTWFya2Vyc0Zyb21Xb3Jkc1RvQmVFZGl0ZWQodHJ1ZSk7CiAjZW5kaWYK
LSAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zdGFydCgpLm5vZGUoKSkpCisgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29udHJvbCht
X2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAg
ICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHNlbGVj
dGVkVGV4dCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJh
bFBhc3RlYm9hcmQoKS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0aW9uLmdldCgpLCBjYW5TbWFydENv
cHlPckRlbGV0ZSgpLCBtX2ZyYW1lKTsKQEAgLTEyOTksNyArMTI5OSw3IEBAIHZvaWQgRWRpdG9y
Ojpjb3B5KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpc05vZGVJblRleHRG
b3JtQ29udHJvbChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpKQorICAgIGlm
IChpc05vZGVJblRleHRGb3JtQ29udHJvbChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQo
KS0+d3JpdGVQbGFpblRleHQoc2VsZWN0ZWRUZXh0KCkpOwogICAgIGVsc2UgewogICAgICAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwpAQCAtMTcyNCw5ICsxNzI0
LDkgQEAgdm9pZCBFZGl0b3I6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZwogICAgICAgICAv
LyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3NpdGlvbiBub3cuCiAgICAgICAgIFBv
c2l0aW9uIGJhc2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+YmFzZSgpLmRvd25zdHJlYW0oKTsK
ICAgICAgICAgUG9zaXRpb24gZXh0ZW50ID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmV4dGVudCgp
OwotICAgICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2Uubm9kZSgpOworICAgICAgICBOb2RlKiBi
YXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgYmFzZU9m
ZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICAgICAgTm9kZSogZXh0
ZW50Tm9kZSA9IGV4dGVudC5ub2RlKCk7CisgICAgICAgIE5vZGUqIGV4dGVudE5vZGUgPSBleHRl
bnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5zaWduZWQgZXh0ZW50T2Zmc2V0ID0gZXh0
ZW50LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAgICAgaWYgKGJhc2VOb2RlICYm
IGJhc2VOb2RlID09IGV4dGVudE5vZGUgJiYgYmFzZU5vZGUtPmlzVGV4dE5vZGUoKSAmJiBiYXNl
T2Zmc2V0ICsgdGV4dC5sZW5ndGgoKSA9PSBleHRlbnRPZmZzZXQpIHsKQEAgLTE3OTIsNyArMTc5
Miw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm8KICAgICBSZWZQ
dHI8UmFuZ2U+IHNwZWxsaW5nU2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGZyYW1lKCktPmRv
Y3VtZW50KCkpKTsKIAogICAgIGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKLSAg
ICBpZiAoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKSB7CisgICAgaWYgKHNlbGVjdGlvbi5zdGFy
dCgpLmRlcHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSB0
cnVlOwogICAgICAgICBpZiAoc3RhcnRCZWZvcmVTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBzdGFydChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkpOwpAQCAtMTgxNiw3
ICsxODE2LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhibwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUG9zaXRpb24gcmFuZ2VDb21wbGlh
bnRQb3NpdGlvbiA9IHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgICAg
ICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydChyYW5nZUNvbXBsaWFudFBvc2l0aW9uLm5v
ZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBl
Yyk7CisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJhbmdlQ29tcGxpYW50
UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgcmFuZ2VDb21wbGlhbnRQb3NpdGlvbi5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0g
ZmFsc2U7IC8vIHdvbid0IG5lZWQgdG8gd3JhcAogICAgIH0KICAgICAKQEAgLTIyMjEsNyArMjIy
MSw3IEBAIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE4KIAogYm9vbCBF
ZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
c3RhcnQoKS5ub2RlKCkpOworICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogfQogCiB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKQEAgLTI4NTIsMTAgKzI4
NTIsMTAgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwogICAgIGlm
ICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3NpdGlv
biBzdGFydCA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpOwotICAgIGlmIChzdGFydC5u
b2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQb3Np
dGlvbiBlbmQgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+ZW5kKCk7Ci0gICAgaWYgKGVuZC5ub2Rl
KCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCisgICAgaWYgKGVuZC5kZXByZWNhdGVkTm9kZSgpICE9
IG1fY29tcG9zaXRpb25Ob2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpIDwgbV9j
b21wb3NpdGlvblN0YXJ0KQpAQCAtMzExMSw3ICszMTExLDcgQEAgSW50UmVjdCBFZGl0b3I6OmZp
cnN0UmVjdEZvclJhbmdlKFJhbmdlKgogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIHN0
YXJ0UG9zaXRpb24uZ2V0SW5saW5lQm94QW5kT2Zmc2V0KERPV05TVFJFQU0sIHN0YXJ0SW5saW5l
Qm94LCBzdGFydENhcmV0T2Zmc2V0KTsKIAotICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJl
ciA9IHN0YXJ0UG9zaXRpb24ubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCog
c3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIo
KTsKICAgICBBU1NFUlQoc3RhcnRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBzdGFydENhcmV0UmVj
dCA9IHN0YXJ0UmVuZGVyZXItPmxvY2FsQ2FyZXRSZWN0KHN0YXJ0SW5saW5lQm94LCBzdGFydENh
cmV0T2Zmc2V0LCAmZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKTsKICAgICBpZiAoc3RhcnRDYXJldFJl
Y3QgIT0gSW50UmVjdCgpKQpAQCAtMzEyNCw3ICszMTI0LDcgQEAgSW50UmVjdCBFZGl0b3I6OmZp
cnN0UmVjdEZvclJhbmdlKFJhbmdlKgogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIGVu
ZFBvc2l0aW9uLmdldElubGluZUJveEFuZE9mZnNldChVUFNUUkVBTSwgZW5kSW5saW5lQm94LCBl
bmRDYXJldE9mZnNldCk7CiAKLSAgICBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9z
aXRpb24ubm9kZSgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIg
PSBlbmRQb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpOwogICAgIEFTU0VSVChl
bmRSZW5kZXJlcik7CiAgICAgSW50UmVjdCBlbmRDYXJldFJlY3QgPSBlbmRSZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QoZW5kSW5saW5lQm94LCBlbmRDYXJldE9mZnNldCk7CiAgICAgaWYgKGVuZENh
cmV0UmVjdCAhPSBJbnRSZWN0KCkpCkBAIC0zMjg0LDEyICszMjg0LDEyIEBAIFJlbmRlclN0eWxl
KiBFZGl0b3I6OnN0eWxlRm9yU2VsZWN0aW9uU3QKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZh
bGVudCgpOwogICAgIGlmICghcG9zaXRpb24uaXNDYW5kaWRhdGUoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKCFwb3NpdGlvbi5ub2RlKCkpCisgICAgaWYgKCFwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IHR5cGluZ1N0eWxlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCk7CiAgICAg
aWYgKCF0eXBpbmdTdHlsZSB8fCAhdHlwaW5nU3R5bGUtPnN0eWxlKCkpCi0gICAgICAgIHJldHVy
biBwb3NpdGlvbi5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgICAgIHJldHVybiBw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCiAgICAgUmVm
UHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmNyZWF0ZUVs
ZW1lbnQoc3BhblRhZywgZmFsc2UpOwogCkBAIC0zMzAxLDcgKzMzMDEsNyBAQCBSZW5kZXJTdHls
ZSogRWRpdG9yOjpzdHlsZUZvclNlbGVjdGlvblN0CiAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRD
aGlsZChtX2ZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIpLCBlYyk7
CiAgICAgQVNTRVJUKCFlYyk7CiAKLSAgICBwb3NpdGlvbi5ub2RlKCktPnBhcmVudE5vZGUoKS0+
YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAgcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKS0+cGFyZW50Tm9kZSgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKICAgICBB
U1NFUlQoIWVjKTsKIAogICAgIG5vZGVUb1JlbW92ZSA9IHN0eWxlRWxlbWVudC5nZXQoKTsKQEAg
LTM1MzcsNyArMzUzNyw3IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9u
KGMKICAgICAgICAgLy8gV2hlbiB0eXBpbmcgd2UgY2hlY2sgc3BlbGxpbmcgZWxzZXdoZXJlLCBz
byBkb24ndCByZWRvIGl0IGhlcmUuCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGFuZ2UgaW4g
c2VsZWN0aW9uIHJlc3VsdGluZyBmcm9tIGEgZGVsZXRlIG9wZXJhdGlvbiwKICAgICAgICAgLy8g
b2xkU2VsZWN0aW9uIG1heSBubyBsb25nZXIgYmUgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICBp
ZiAoc2hvdWxkQ2hlY2tTcGVsbGluZ0FuZEdyYW1tYXIgJiYgY2xvc2VUeXBpbmcgJiYgb2xkU2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgb2xkU2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgp
ICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAg
IGlmIChzaG91bGRDaGVja1NwZWxsaW5nQW5kR3JhbW1hciAmJiBjbG9zZVR5cGluZyAmJiBvbGRT
ZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSAmJiBvbGRTZWxlY3Rpb24uc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpICYmIG9sZFNlbGVjdGlvbi5zdGFydCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1
bWVudCgpKSB7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2xkU3RhcnQob2xkU2VsZWN0
aW9uLnZpc2libGVTdGFydCgpKTsKICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gb2xkQWRq
YWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQob2xkU3RhcnQsIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG9sZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRh
cnkpKTsKICAgICAgICAgICAgIGlmIChvbGRBZGphY2VudFdvcmRzICE9IG5ld0FkamFjZW50V29y
ZHMpIHsKQEAgLTM1NzYsNyArMzU3Niw3IEBAIHN0YXRpYyBOb2RlKiBmaW5kRmlyc3RNYXJrYWJs
ZShOb2RlKiBub2QKICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dCgpKQogICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1Rl
eHRDb250cm9sKCkpCi0gICAgICAgICAgICBub2RlID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2Rl
LT5yZW5kZXJlcigpKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCk7CisgICAgICAgICAgICBub2RlID0gdG9SZW5kZXJUZXh0Q29udHJvbChub2RlLT5y
ZW5kZXJlcigpKS0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoMSkuZGVlcEVxdWl2YWxlbnQoKS5k
ZXByZWNhdGVkTm9kZSgpOwogICAgICAgICBlbHNlIGlmIChub2RlLT5maXJzdENoaWxkKCkpCiAg
ICAgICAgICAgICBub2RlID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICBlbHNlCkBAIC0z
NTg4LDcgKzM1ODgsNyBAQCBzdGF0aWMgTm9kZSogZmluZEZpcnN0TWFya2FibGUoTm9kZSogbm9k
CiAKIGJvb2wgRWRpdG9yOjpzZWxlY3Rpb25TdGFydEhhc1NwZWxsaW5nTWFya2VyRm9yKGludCBm
cm9tLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSBmaW5kRmlyc3RNYXJr
YWJsZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCkpOworICAgIE5vZGUqIG5v
ZGUgPSBmaW5kRmlyc3RNYXJrYWJsZShtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAko
cmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgdm9pZCBGb3JtYXRCbG9j
a0NvbW1hbmQ6OmZvcm1hdFNlbGVjdGlvbgogCiB2b2lkIEZvcm1hdEJsb2NrQ29tbWFuZDo6Zm9y
bWF0UmFuZ2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBjb25z
dCBQb3NpdGlvbiYgZW5kT2ZTZWxlY3Rpb24sIFJlZlB0cjxFbGVtZW50PiYgYmxvY2tOb2RlKQog
ewotICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3NpbmdCbG9ja1RvU3BsaXRUcmVlVG8o
c3RhcnQubm9kZSgpKTsKLSAgICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5ub2Rl
KCkgPT0gbm9kZVRvU3BsaXRUbykgPyBzdGFydC5ub2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3Rh
cnQubm9kZSgpLCBub2RlVG9TcGxpdFRvKTsKKyAgICBOb2RlKiBub2RlVG9TcGxpdFRvID0gZW5j
bG9zaW5nQmxvY2tUb1NwbGl0VHJlZVRvKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOworICAgIFJl
ZlB0cjxOb2RlPiBvdXRlckJsb2NrID0gKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPT0gbm9kZVRv
U3BsaXRUbykgPyBzdGFydC5kZXByZWNhdGVkTm9kZSgpIDogc3BsaXRUcmVlVG9Ob2RlKHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCksIG5vZGVUb1NwbGl0VG8pOwogICAgIFJlZlB0cjxOb2RlPiBub2Rl
QWZ0ZXJJbnNlcnRpb25Qb3NpdGlvbiA9IG91dGVyQmxvY2s7CiAKICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydCwgZW5kT2ZTZWxlY3Rpb24p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRP
dXRkZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgSW5kZW50
T3V0ZGVudENvbW1hbmQ6OkluZGVudE91dGRlbnRDb21tYQogYm9vbCBJbmRlbnRPdXRkZW50Q29t
bWFuZDo6dHJ5SW5kZW50aW5nQXNMaXN0SXRlbShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgLy8gSWYgb3VyIHNlbGVjdGlvbiBpcyBub3QgaW5zaWRl
IGEgbGlzdCwgYmFpbCBvdXQuCi0gICAgTm9kZSogbGFzdE5vZGVJblNlbGVjdGVkUGFyYWdyYXBo
ID0gc3RhcnQubm9kZSgpOworICAgIE5vZGUqIGxhc3ROb2RlSW5TZWxlY3RlZFBhcmFncmFwaCA9
IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGxpc3ROb2RlID0g
ZW5jbG9zaW5nTGlzdChsYXN0Tm9kZUluU2VsZWN0ZWRQYXJhZ3JhcGgpOwogICAgIGlmICghbGlz
dE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTk0LDE1ICs5NCwxNSBAQCB2b2lkIElu
ZGVudE91dGRlbnRDb21tYW5kOjppbmRlbnRJbnRvQmxvCiAgICAgTm9kZSogbm9kZVRvU3BsaXRU
bzsKICAgICBpZiAoZW5jbG9zaW5nQ2VsbCkKICAgICAgICAgbm9kZVRvU3BsaXRUbyA9IGVuY2xv
c2luZ0NlbGw7Ci0gICAgZWxzZSBpZiAoZW5jbG9zaW5nTGlzdChzdGFydC5ub2RlKCkpKQotICAg
ICAgICBub2RlVG9TcGxpdFRvID0gZW5jbG9zaW5nQmxvY2soc3RhcnQubm9kZSgpKTsKKyAgICBl
bHNlIGlmIChlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKQorICAgICAgICBu
b2RlVG9TcGxpdFRvID0gZW5jbG9zaW5nQmxvY2soc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgZWxzZQogICAgICAgICBub2RlVG9TcGxpdFRvID0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24o
c3RhcnQpOwogCiAgICAgaWYgKCFub2RlVG9TcGxpdFRvKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5ub2RlKCkgPT0gbm9kZVRvU3BsaXRU
bykgPyBzdGFydC5ub2RlKCkgOiBzcGxpdFRyZWVUb05vZGUoc3RhcnQubm9kZSgpLCBub2RlVG9T
cGxpdFRvKTsKKyAgICBSZWZQdHI8Tm9kZT4gb3V0ZXJCbG9jayA9IChzdGFydC5kZXByZWNhdGVk
Tm9kZSgpID09IG5vZGVUb1NwbGl0VG8pID8gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSA6IHNwbGl0
VHJlZVRvTm9kZShzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBub2RlVG9TcGxpdFRvKTsKIAogICAg
IGlmICghdGFyZ2V0QmxvY2txdW90ZSkgewogICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYmxvY2tx
dW90ZSBhbmQgaW5zZXJ0IGl0IGFzIGEgY2hpbGQgb2YgdGhlIHJvb3QgZWRpdGFibGUgZWxlbWVu
dC4gV2UgYWNjb21wbGlzaApAQCAtMTY2LDEzICsxNjYsMTMgQEAgdm9pZCBJbmRlbnRPdXRkZW50
Q29tbWFuZDo6b3V0ZGVudFBhcmFncgogCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTm9k
ZSogZW5jbG9zaW5nQmxvY2tGbG93ID0gZW5jbG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0T2ZQYXJh
Z3JhcGguZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5vZGUqIGVuY2xvc2luZ0Jsb2Nr
RmxvdyA9IGVuY2xvc2luZ0Jsb2NrKHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgUmVmUHRyPE5vZGU+IHNwbGl0QmxvY2txdW90
ZU5vZGUgPSBlbmNsb3NpbmdOb2RlOwogICAgIGlmIChlbmNsb3NpbmdCbG9ja0Zsb3cgIT0gZW5j
bG9zaW5nTm9kZSkKICAgICAgICAgc3BsaXRCbG9ja3F1b3RlTm9kZSA9IHNwbGl0VHJlZVRvTm9k
ZShlbmNsb3NpbmdCbG9ja0Zsb3csIGVuY2xvc2luZ05vZGUsIHRydWUpOwogICAgIGVsc2Ugewog
ICAgICAgICAvLyBXZSBzcGxpdCB0aGUgYmxvY2txdW90ZSBhdCB3aGVyZSB3ZSBzdGFydCBvdXRk
ZW50aW5nLgotICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGVuY2xv
c2luZ05vZGUpLCB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KSk7CisgICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZW5jbG9zaW5n
Tm9kZSksIHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgfQogICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJy
ZWFrRWxlbWVudChkb2N1bWVudCgpKTsKICAgICBpbnNlcnROb2RlQmVmb3JlKHBsYWNlaG9sZGVy
LCBzcGxpdEJsb2NrcXVvdGVOb2RlKTsKQEAgLTIwNSwxMCArMjA1LDEwIEBAIHZvaWQgSW5kZW50
T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRSZWdpb24KICAgICAgICAgLy8gb3V0ZGVudFBhcmFncmFw
aCBjb3VsZCBtb3ZlIG1vcmUgdGhhbiBvbmUgcGFyYWdyYXBoIGlmIHRoZSBwYXJhZ3JhcGgKICAg
ICAgICAgLy8gaXMgaW4gYSBsaXN0IGl0ZW0uIEFzIGEgcmVzdWx0LCBlbmRBZnRlclNlbGVjdGlv
biBhbmQgZW5kT2ZOZXh0UGFyYWdyYXBoCiAgICAgICAgIC8vIGNvdWxkIHJlZmVyIHRvIHBvc2l0
aW9ucyBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50LgotICAgICAgICBpZiAoZW5kQWZ0ZXJTZWxl
Y3Rpb24uaXNOb3ROdWxsKCkgJiYgIWVuZEFmdGVyU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgICAgIGlmIChlbmRBZnRlclNlbGVjdGlvbi5pc05v
dE51bGwoKSAmJiAhZW5kQWZ0ZXJTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2Rl
KCktPmluRG9jdW1lbnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAg
ICAgIGlmIChlbmRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgJiYgIWVuZE9mTmV4dFBhcmFn
cmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CisgICAgICAgIGlm
IChlbmRPZk5leHRQYXJhZ3JhcGguaXNOb3ROdWxsKCkgJiYgIWVuZE9mTmV4dFBhcmFncmFwaC5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgICAg
ICBlbmRPZkN1cnJlbnRQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKTsKICAgICAg
ICAgICAgIGVuZE9mTmV4dFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGVuZE9mQ3VycmVudFBh
cmFncmFwaC5uZXh0KCkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsMTEgKzU3LDExIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6
aW5zZXJ0Tm9kZUEKICAgICAvLyBJbnNlcnQgdGhlIEJSIGFmdGVyIHRoZSBjYXJldCBwb3NpdGlv
bi4gSW4gdGhlIGNhc2UgdGhlCiAgICAgLy8gcG9zaXRpb24gaXMgYSBibG9jaywgZG8gYW4gYXBw
ZW5kLiBXZSBkb24ndCB3YW50IHRvIGluc2VydAogICAgIC8vIHRoZSBCUiAqYWZ0ZXIqIHRoZSBi
bG9jay4KLSAgICBFbGVtZW50KiBjYiA9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoKTsKLSAgICBpZiAoY2IgPT0gcG9zLm5vZGUoKSkKKyAgICBFbGVtZW50KiBjYiA9IHBv
cy5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgaWYg
KGNiID09IHBvcy5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICBhcHBlbmROb2RlKG5vZGUsIGNi
KTsKICAgICBlbHNlCi0gICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlLCBwb3Mubm9kZSgpKTsK
KyAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKIH0K
IAogdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlUG9zaXRpb24o
Tm9kZSogbm9kZSwgY29uc3QgUG9zaXRpb24mIHBvcykKQEAgLTY5LDExICs2OSwxMSBAQCB2b2lk
IEluc2VydExpbmVCcmVha0NvbW1hbmQ6Omluc2VydE5vZGVCCiAgICAgLy8gSW5zZXJ0IHRoZSBC
UiBhZnRlciB0aGUgY2FyZXQgcG9zaXRpb24uIEluIHRoZSBjYXNlIHRoZQogICAgIC8vIHBvc2l0
aW9uIGlzIGEgYmxvY2ssIGRvIGFuIGFwcGVuZC4gV2UgZG9uJ3Qgd2FudCB0byBpbnNlcnQKICAg
ICAvLyB0aGUgQlIgKmJlZm9yZSogdGhlIGJsb2NrLgotICAgIEVsZW1lbnQqIGNiID0gcG9zLm5v
ZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwotICAgIGlmIChjYiA9PSBwb3Mubm9k
ZSgpKQorICAgIEVsZW1lbnQqIGNiID0gcG9zLmRlcHJlY2F0ZWROb2RlKCktPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKTsKKyAgICBpZiAoY2IgPT0gcG9zLmRlcHJlY2F0ZWROb2RlKCkpCiAg
ICAgICAgIGFwcGVuZE5vZGUobm9kZSwgY2IpOwogICAgIGVsc2UKLSAgICAgICAgaW5zZXJ0Tm9k
ZUJlZm9yZShub2RlLCBwb3Mubm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2Rl
LCBwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGluc2Vy
dCBhIGJyZWFrIGVsZW1lbnQgb3IgYSAnXG4nLgpAQCAtODMsNyArODMsNyBAQCBib29sIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQ6OnNob3VsZFVzZUJyCiAgICAgLy8gdGhlIGlucHV0IGVsZW1lbnQs
IGFuZCBpbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBjaGVjayB0aGUgaW5wdXQgZWxlbWVudCdzCiAg
ICAgLy8gcGFyZW50J3MgcmVuZGVyZXIuCiAgICAgUG9zaXRpb24gcChpbnNlcnRpb25Qb3MucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIHJldHVybiBwLm5vZGUoKS0+cmVuZGVyZXIo
KSAmJiAhcC5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpOwor
ICAgIHJldHVybiBwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgIXAuZGVwcmVjYXRl
ZE5vZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7CiB9CiAKIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCkBAIC0xMTQsNyArMTE0LDcgQEAg
dm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBtZXJnZSB0ZXh0IG5vZGVzIHdoZW4gaW5zZXJ0aW5nIGp1c3QgYWZ0ZXIgb3IgYmVmb3Jl
IHRleHQuCiAgICAgCiAgICAgaWYgKGlzRW5kT2ZQYXJhZ3JhcGgoY2FyZXQpICYmICFsaW5lQnJl
YWtFeGlzdHNBdFZpc2libGVQb3NpdGlvbihjYXJldCkpIHsKLSAgICAgICAgYm9vbCBuZWVkRXh0
cmFMaW5lQnJlYWsgPSAhcG9zLm5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykgJiYgIXBvcy5ub2Rl
KCktPmhhc1RhZ05hbWUodGFibGVUYWcpOworICAgICAgICBib29sIG5lZWRFeHRyYUxpbmVCcmVh
ayA9ICFwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShoclRhZykgJiYgIXBvcy5kZXBy
ZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKHRhYmxlVGFnKTsKICAgICAgICAgCiAgICAgICAgIGlu
c2VydE5vZGVBdChub2RlVG9JbnNlcnQuZ2V0KCksIHBvcyk7CiAgICAgICAgIApAQCAtMTIzLDcg
KzEyMyw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
IAogICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kaW5nUG9zaXRpb24ocG9zaXRpb25CZWZvcmVO
b2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihlbmRpbmdQb3NpdGlvbikpOwotICAgIH0gZWxzZSBpZiAocG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPD0gY2FyZXRNaW5PZmZzZXQocG9zLm5vZGUoKSkpIHsKKyAg
ICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDw9IGNhcmV0TWluT2Zm
c2V0KHBvcy5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBpbnNlcnROb2RlQXQobm9kZVRv
SW5zZXJ0LmdldCgpLCBwb3MpOwogICAgICAgICAKICAgICAgICAgLy8gSW5zZXJ0IGFuIGV4dHJh
IGJyIG9yICdcbicgaWYgdGhlIGp1c3QgaW5zZXJ0ZWQgb25lIGNvbGxhcHNlZC4KQEAgLTEzMywx
MiArMTMzLDEyIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uSW5QYXJlbnRB
ZnRlck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSkpOwogICAgIC8vIElmIHdl
J3JlIGluc2VydGluZyBhZnRlciBhbGwgb2YgdGhlIHJlbmRlcmVkIHRleHQgaW4gYSB0ZXh0IG5v
ZGUsIG9yIGludG8gYSBub24tdGV4dCBub2RlLAogICAgIC8vIGEgc2ltcGxlIGluc2VydGlvbiBp
cyBzdWZmaWNpZW50LgotICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkgPj0gY2FyZXRNYXhPZmZzZXQocG9zLm5vZGUoKSkgfHwgIXBvcy5ub2RlKCktPmlzVGV4dE5v
ZGUoKSkgeworICAgIH0gZWxzZSBpZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0g
Y2FyZXRNYXhPZmZzZXQocG9zLmRlcHJlY2F0ZWROb2RlKCkpIHx8ICFwb3MuZGVwcmVjYXRlZE5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIGluc2VydE5vZGVBdChub2RlVG9JbnNlcnQu
Z2V0KCksIHBvcyk7CiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgRE9XTlNUUkVB
TSkpOwotICAgIH0gZWxzZSBpZiAocG9zLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgfSBl
bHNlIGlmIChwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIC8v
IFNwbGl0IGEgdGV4dCBub2RlCi0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KHBvcy5ub2RlKCkpOworICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0
PFRleHQqPihwb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4
dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgaW5zZXJ0Tm9k
ZUJlZm9yZShub2RlVG9JbnNlcnQsIHRleHROb2RlKTsKICAgICAgICAgUG9zaXRpb24gZW5kaW5n
UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHROb2RlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCwxMiArODQsMTIgQEAgYm9vbCBJbnNlcnRMaXN0Q29tbWFuZDo6c2VsZWN0
aW9uSGFzTGlzdAogewogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi52aXNp
YmxlU3RhcnQoKTsKIAotICAgIGlmICghZW5jbG9zaW5nTGlzdChzdGFydC5kZWVwRXF1aXZhbGVu
dCgpLm5vZGUoKSkpCisgICAgaWYgKCFlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2li
bGVQb3NpdGlvbiBlbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwogICAgIHdoaWxlIChzdGFy
dC5pc05vdE51bGwoKSAmJiBzdGFydCAhPSBlbmQpIHsKLSAgICAgICAgRWxlbWVudCogbGlzdE5v
ZGUgPSBlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICAg
ICAgRWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KHN0YXJ0LmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGlmICghbGlzdE5vZGUgfHwgIWxpc3ROb2Rl
LT5oYXNUYWdOYW1lKGxpc3RUYWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBzdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHN0YXJ0KTsKQEAgLTE0Myw3ICsxNDMsNyBA
QCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICAvLyBp
bmZpbml0ZSBsb29wIGFuZCBiZWNhdXNlIHRoZXJlIGlzIG5vIG1vcmUgd29yayB0byBiZSBkb25l
LgogICAgICAgICAgICAgICAgIC8vIEZJWE1FKDxyZGFyOi8vcHJvYmxlbS81OTgzOTc0Pik6IFRo
ZSBlbmRpbmdTZWxlY3Rpb24oKSBtYXkgYmUgaW5jb3JyZWN0IGhlcmUuICBDb21wdXRlIAogICAg
ICAgICAgICAgICAgIC8vIHRoZSBuZXcgbG9jYXRpb24gb2YgZW5kT2ZTZWxlY3Rpb24gYW5kIHVz
ZSBpdCBhcyB0aGUgZW5kIG9mIHRoZSBuZXcgc2VsZWN0aW9uLgotICAgICAgICAgICAgICAgIGlm
ICghc3RhcnRPZkxhc3RQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmRlZXBFcXVp
dmFsZW50KCkuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oc3RhcnRPZkN1cnJl
bnRQYXJhZ3JhcGgpOwogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFu
ZDo6ZG9BcHBseUZvclNpbmdsZQogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcHJvZHVjZSB1bmV4
cGVjdGVkIHJlc3VsdHMgZm9yIGEgc2VsZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEK
ICAgICAvLyB0YWJsZSBhbmQgZW5kcyBpbnNpZGUgdGhlIGZpcnN0IGNlbGwsIHNlbGVjdGlvbkZv
clBhcmFncmFwaEl0ZXJhdGlvbiBzaG91bGQgcHJvYmFibHkKICAgICAvLyBiZSByZW5hbWVkIGFu
ZCBkZXBsb3llZCBpbnNpZGUgc2V0RW5kaW5nU2VsZWN0aW9uKCkuCi0gICAgTm9kZSogc2VsZWN0
aW9uTm9kZSA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGUqIHNl
bGVjdGlvbk5vZGUgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgTm9kZSogbGlzdENoaWxkTm9kZSA9IGVuY2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb25O
b2RlKTsKICAgICBib29sIHN3aXRjaExpc3RUeXBlID0gZmFsc2U7CiAgICAgaWYgKGxpc3RDaGls
ZE5vZGUpIHsKQEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0Fw
cGx5Rm9yU2luZ2xlCiAgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5ld0xpc3QgPSBj
cmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBsaXN0VGFnKTsKICAgICAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUobmV3TGlzdCwgbGlzdE5vZGUpOwogCi0gICAgICAgICAgICBOb2RlKiBmaXJz
dENoaWxkSW5MaXN0ID0gZW5jbG9zaW5nTGlzdENoaWxkKFZpc2libGVQb3NpdGlvbihmaXJzdFBv
c2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgpKSkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCksIGxp
c3ROb2RlLmdldCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGRJbkxpc3QgPSBlbmNs
b3NpbmdMaXN0Q2hpbGQoVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobGlzdE5v
ZGUuZ2V0KCkpKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCksIGxpc3ROb2RlLmdl
dCgpKTsKICAgICAgICAgICAgIE5vZGUqIG91dGVyQmxvY2sgPSBmaXJzdENoaWxkSW5MaXN0LT5p
c0Jsb2NrRmxvdygpID8gZmlyc3RDaGlsZEluTGlzdCA6IGxpc3ROb2RlLmdldCgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyhmaXJzdFBvc2l0aW9u
SW5Ob2RlKGxpc3ROb2RlLmdldCgpKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKGxpc3ROb2RlLmdldCgp
KSwgbmV3TGlzdC5nZXQoKSwgb3V0ZXJCbG9jayk7CkBAIC0yNjUsOSArMjY1LDkgQEAgdm9pZCBJ
bnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYQogICAgICAgICAvLyBBIHBhcmFncmFw
aCBpcyB2aXN1YWxseSBhIGxpc3QgaXRlbSBtaW51cyBhIGxpc3QgbWFya2VyLiAgVGhlIHBhcmFn
cmFwaCB3aWxsIGJlIG1vdmVkLgogICAgICAgICBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgob3Jp
Z2luYWxTdGFydCk7CiAgICAgICAgIGVuZCA9IGVuZE9mUGFyYWdyYXBoKHN0YXJ0KTsKLSAgICAg
ICAgbmV4dExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgpLmRlZXBFcXVp
dmFsZW50KCkubm9kZSgpLCBsaXN0Tm9kZSk7CisgICAgICAgIG5leHRMaXN0Q2hpbGQgPSBlbmNs
b3NpbmdMaXN0Q2hpbGQoZW5kLm5leHQoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2Rl
KCksIGxpc3ROb2RlKTsKICAgICAgICAgQVNTRVJUKG5leHRMaXN0Q2hpbGQgIT0gbGlzdENoaWxk
Tm9kZSk7Ci0gICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKHN0
YXJ0LnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCksIGxpc3ROb2RlKTsKKyAgICAg
ICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQoc3RhcnQucHJldmlvdXMo
KS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCksIGxpc3ROb2RlKTsKICAgICAgICAg
QVNTRVJUKHByZXZpb3VzTGlzdENoaWxkICE9IGxpc3RDaGlsZE5vZGUpOwogICAgIH0KICAgICAv
LyBXaGVuIHJlbW92aW5nIGEgbGlzdCwgd2UgbXVzdCBhbHdheXMgY3JlYXRlIGEgcGxhY2Vob2xk
ZXIgdG8gYWN0IGFzIGEgcG9pbnQgb2YgaW5zZXJ0aW9uCkBAIC0zMDgsNyArMzA4LDcgQEAgdm9p
ZCBJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYQogCiBzdGF0aWMgRWxlbWVudCog
YWRqYWNlbnRFbmNsb3NpbmdMaXN0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zLCBjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGFkamFjZW50UG9zLCBjb25zdCBRdWFsaWZpZWROYW1lJiBsaXN0VGFn
KQogewotICAgIEVsZW1lbnQqIGxpc3ROb2RlID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChhZGph
Y2VudFBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgRWxlbWVudCogbGlzdE5vZGUg
PSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KGFkamFjZW50UG9zLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKSk7CiAKICAgICBpZiAoIWxpc3ROb2RlKQogICAgICAgICByZXR1cm4gMDsK
QEAgLTMxNyw5ICszMTcsOSBAQCBzdGF0aWMgRWxlbWVudCogYWRqYWNlbnRFbmNsb3NpbmdMaXN0
KGNvCiAgICAgTm9kZSogY3VycmVudENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwoYWRqYWNlbnRQ
b3MuZGVlcEVxdWl2YWxlbnQoKSk7CiAKICAgICBpZiAoIWxpc3ROb2RlLT5oYXNUYWdOYW1lKGxp
c3RUYWcpCi0gICAgICAgIHx8IGxpc3ROb2RlLT5jb250YWlucyhwb3MuZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCkpCisgICAgICAgIHx8IGxpc3ROb2RlLT5jb250YWlucyhwb3MuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICB8fCBwcmV2aW91c0NlbGwgIT0gY3VycmVu
dENlbGwKLSAgICAgICAgfHwgZW5jbG9zaW5nTGlzdChsaXN0Tm9kZSkgIT0gZW5jbG9zaW5nTGlz
dChwb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpKQorICAgICAgICB8fCBlbmNsb3NpbmdMaXN0
KGxpc3ROb2RlKSAhPSBlbmNsb3NpbmdMaXN0KHBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBsaXN0Tm9kZTsKQEAg
LTM1MSw3ICszNTEsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFu
CiAgICAgICAgIGxpc3RFbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgbGlz
dFRhZyk7CiAgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LCBsaXN0RWxlbWVudCk7
CiAKLSAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBpc0Jsb2NrKHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkubm9kZSgpKSkgeworICAgICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIGlzQmxvY2soc3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgLy8g
SW5zZXJ0aW5nIHRoZSBsaXN0IGludG8gYW4gZW1wdHkgcGFyYWdyYXBoIHRoYXQgaXNuJ3QgaGVs
ZCBvcGVuIAogICAgICAgICAgICAgLy8gYnkgYSBiciBvciBhICdcbicsIHdpbGwgaW52YWxpZGF0
ZSBzdGFydCBhbmQgZW5kLiAgSW5zZXJ0IAogICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciBh
bmQgdGhlbiByZWNvbXB1dGUgc3RhcnQgYW5kIGVuZC4KQEAgLTM2Nyw3ICszNjcsNyBAQCBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuCiAgICAgICAgIC8vIGNsZWFuIG1h
cmt1cCB3aGVuIGlubGluZSBlbGVtZW50cyBhcmUgcHVzaGVkIGRvd24gYXMgZmFyIGFzIHBvc3Np
YmxlLgogICAgICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KS51cHN0cmVhbSgpKTsKICAgICAgICAgLy8gQWxzbyBhdm9pZCB0aGUgY29udGFpbmluZyBsaXN0
IGl0ZW0uCi0gICAgICAgIE5vZGUqIGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChpbnNl
cnRpb25Qb3Mubm9kZSgpKTsKKyAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlz
dENoaWxkKGluc2VydGlvblBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgaWYgKGxpc3RD
aGlsZCAmJiBsaXN0Q2hpbGQtPmhhc1RhZ05hbWUobGlUYWcpKQogICAgICAgICAgICAgaW5zZXJ0
aW9uUG9zID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobGlzdENoaWxkKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNl
cGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2OSw4ICsxNjksOCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6
OmRvCiAgICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbChzdGFydEJsb2NrKQogICAgICAgICAgICAg
fHwgc3RhcnRCbG9jay0+aGFzVGFnTmFtZShmb3JtVGFnKQogICAgICAgICAgICAgLy8gRklYTUU6
IElmIHRoZSBub2RlIGlzIGhpZGRlbiwgd2UgZG9uJ3QgaGF2ZSBhIGNhbm9uaWNhbCBwb3NpdGlv
biBzbyB3ZSB3aWxsIGRvIHRoZSB3cm9uZyB0aGluZyBmb3IgdGFibGVzIGFuZCA8aHI+LiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAzNDIKLSAgICAgICAgICAgIHx8
ICghY2Fub25pY2FsUG9zLmlzTnVsbCgpICYmIGNhbm9uaWNhbFBvcy5ub2RlKCktPnJlbmRlcmVy
KCkgJiYgY2Fub25pY2FsUG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQotICAgICAg
ICAgICAgfHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25pY2FsUG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShoclRhZykpKSB7CisgICAgICAgICAgICB8fCAoIWNhbm9uaWNhbFBvcy5pc051
bGwoKSAmJiBjYW5vbmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBjYW5v
bmljYWxQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+aXNUYWJsZSgpKQorICAgICAg
ICAgICAgfHwgKCFjYW5vbmljYWxQb3MuaXNOdWxsKCkgJiYgY2Fub25pY2FsUG9zLmRlcHJlY2F0
ZWROb2RlKCktPmhhc1RhZ05hbWUoaHJUYWcpKSkgewogICAgICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgLy8gUmVjcmVhdGUgdGhlIHNhbWUgc3Ry
dWN0dXJlIGluIHRoZSBuZXcgcGFyYWdyYXBoLgogICAgICAgICAKICAgICAgICAgVmVjdG9yPEVs
ZW1lbnQqPiBhbmNlc3RvcnM7Ci0gICAgICAgIGdldEFuY2VzdG9yc0luc2lkZUJsb2NrKGluc2Vy
dGlvblBvc2l0aW9uLm5vZGUoKSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsgICAgICAKKyAgICAg
ICAgZ2V0QW5jZXN0b3JzSW5zaWRlQmxvY2soaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsgICAgICAKICAgICAgICAgUmVmUHRyPEVsZW1l
bnQ+IHBhcmVudCA9IGNsb25lSGllcmFyY2h5VW5kZXJOZXdCbG9jayhhbmNlc3RvcnMsIGJsb2Nr
VG9JbnNlcnQpOwogICAgICAgICAKICAgICAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihwYXJl
bnQpOwpAQCAtMjU0LDExICsyNTQsMTEgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjpkbwogICAgICAgICBOb2RlICpyZWZOb2RlOwogICAgICAgICBpZiAoaXNGaXJzdElu
QmxvY2sgJiYgIW5lc3ROZXdCbG9jaykKICAgICAgICAgICAgIHJlZk5vZGUgPSBzdGFydEJsb2Nr
OwotICAgICAgICBlbHNlIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCkgPT0gc3RhcnRCbG9j
ayAmJiBuZXN0TmV3QmxvY2spIHsKKyAgICAgICAgZWxzZSBpZiAoaW5zZXJ0aW9uUG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKSA9PSBzdGFydEJsb2NrICYmIG5lc3ROZXdCbG9jaykgewogICAgICAg
ICAgICAgcmVmTm9kZSA9IHN0YXJ0QmxvY2stPmNoaWxkTm9kZShpbnNlcnRpb25Qb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgIEFTU0VSVChyZWZOb2RlKTsg
Ly8gbXVzdCBiZSB0cnVlIG9yIHdlJ2QgYmUgaW4gdGhlIGVuZCBvZiBibG9jayBjYXNlCiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgcmVmTm9kZSA9IGluc2VydGlvblBvc2l0aW9uLm5vZGUo
KTsKKyAgICAgICAgICAgIHJlZk5vZGUgPSBpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwogCiAgICAgICAgIC8vIGZpbmQgZW5kaW5nIHNlbGVjdGlvbiBwb3NpdGlvbiBlYXNpbHkg
YmVmb3JlIGluc2VydGluZyB0aGUgcGFyYWdyYXBoCiAgICAgICAgIGluc2VydGlvblBvc2l0aW9u
ID0gaW5zZXJ0aW9uUG9zaXRpb24uZG93bnN0cmVhbSgpOwpAQCAtMjY4LDcgKzI2OCw3IEBAIHZv
aWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgLy8gUmVjcmVh
dGUgdGhlIHNhbWUgc3RydWN0dXJlIGluIHRoZSBuZXcgcGFyYWdyYXBoLgogCiAgICAgICAgIFZl
Y3RvcjxFbGVtZW50Kj4gYW5jZXN0b3JzOwotICAgICAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9j
ayhwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeShpbnNlcnRpb25Qb3NpdGlv
bikubm9kZSgpLCBzdGFydEJsb2NrLCBhbmNlc3RvcnMpOworICAgICAgICBnZXRBbmNlc3RvcnNJ
bnNpZGVCbG9jayhwb3NpdGlvbkF2b2lkaW5nU3BlY2lhbEVsZW1lbnRCb3VuZGFyeShpbnNlcnRp
b25Qb3NpdGlvbikuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKICAg
ICAgICAgCiAgICAgICAgIGFwcGVuZEJsb2NrUGxhY2Vob2xkZXIoY2xvbmVIaWVyYXJjaHlVbmRl
ck5ld0Jsb2NrKGFuY2VzdG9ycywgYmxvY2tUb0luc2VydCkpOwogICAgICAgICAKQEAgLTMwMSwy
MiArMzAxLDIyIEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KIAog
ICAgIC8vIEJ1aWxkIHVwIGxpc3Qgb2YgYW5jZXN0b3JzIGluIGJldHdlZW4gdGhlIHN0YXJ0IG5v
ZGUgYW5kIHRoZSBzdGFydCBibG9jay4KICAgICBWZWN0b3I8RWxlbWVudCo+IGFuY2VzdG9yczsK
LSAgICBnZXRBbmNlc3RvcnNJbnNpZGVCbG9jayhpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCksIHN0
YXJ0QmxvY2ssIGFuY2VzdG9ycyk7CisgICAgZ2V0QW5jZXN0b3JzSW5zaWRlQmxvY2soaW5zZXJ0
aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnRCbG9jaywgYW5jZXN0b3JzKTsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgY2F1c2UgYSByZW5kZXJlZCBzcGFjZSB0byBiZWNv
bWUgdW5yZW5kZXJlZC4KICAgICAvLyBGSVhNRTogV2UgbmVlZCB0aGUgYWZmaW5pdHkgZm9yIHBv
cywgYnV0IHBvcy5kb3duc3RyZWFtKCkgZG9lcyBub3QgZ2l2ZSBpdAogICAgIFBvc2l0aW9uIGxl
YWRpbmdXaGl0ZXNwYWNlID0gaW5zZXJ0aW9uUG9zaXRpb24ubGVhZGluZ1doaXRlc3BhY2VQb3Np
dGlvbihWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICAvLyBGSVhNRTogbGVhZGluZ1doaXRlc3Bh
Y2VQb3NpdGlvbiBpcyByZXR1cm5pbmcgdGhlIHBvc2l0aW9uIGJlZm9yZSBwcmVzZXJ2ZWQgbmV3
bGluZXMgZm9yIHBvc2l0aW9ucwogICAgIC8vIGFmdGVyIHRoZSBwcmVzZXJ2ZWQgbmV3bGluZSwg
Y2F1c2luZyB0aGUgbmV3bGluZSB0byBiZSB0dXJuZWQgaW50byBhIG5ic3AuCi0gICAgaWYgKGxl
YWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmIGxlYWRpbmdXaGl0ZXNwYWNlLm5vZGUoKS0+
aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KGxlYWRpbmdXaGl0ZXNwYWNlLm5vZGUoKSk7CisgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNl
LmlzTm90TnVsbCgpICYmIGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihs
ZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQVNTRVJUKCF0ZXh0
Tm9kZS0+cmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFw
c2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICByZXBsYWNlVGV4dEluTm9kZSh0ZXh0Tm9kZSwgbGVh
ZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdT
cGFjZVN0cmluZygpKTsKICAgICB9CiAgICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRo
ZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUuCi0gICAgaWYgKGluc2VydGlvblBvc2l0aW9uLm5vZGUo
KS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLm5vZGUoKSk7CisgICAgaWYgKGluc2VydGlvblBvc2l0
aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBUZXh0KiB0ZXh0
Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICAgICAgYm9vbCBhdEVuZCA9ICh1bnNpZ25lZClpbnNlcnRpb25Qb3NpdGlvbi5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICAgICAg
aWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwICYmICFh
dEVuZCkgewogICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgaW5zZXJ0aW9uUG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CkBAIC0zNDQsOCArMzQ0LDggQEAgdm9p
ZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICBhcHBlbmROb2Rl
KGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKS5nZXQoKSwgYmxvY2tUb0luc2VydC5nZXQo
KSk7CiAgICAgICAgIAogICAgIC8vIE1vdmUgdGhlIHN0YXJ0IG5vZGUgYW5kIHRoZSBzaWJsaW5n
cyBvZiB0aGUgc3RhcnQgbm9kZS4KLSAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpICE9
IHN0YXJ0QmxvY2spIHsKLSAgICAgICAgTm9kZSogbiA9IGluc2VydGlvblBvc2l0aW9uLm5vZGUo
KTsKKyAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSAhPSBzdGFydEJs
b2NrKSB7CisgICAgICAgIE5vZGUqIG4gPSBpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpOwogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSA+PSBjYXJldE1heE9mZnNldChuKSkKICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGlu
ZygpOwogCkBAIC0zODIsMTAgKzM4MiwxMCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvCiAgICAgICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbi5tb3ZlVG9PZmZzZXQo
MCk7CiAgICAgICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uaXNSZW5kZXJlZENoYXJhY3Rlcigp
KSB7CiAgICAgICAgICAgICAvLyBDbGVhciBvdXQgYWxsIHdoaXRlc3BhY2UgYW5kIGluc2VydCBv
bmUgbm9uLWJyZWFraW5nIHNwYWNlCi0gICAgICAgICAgICBBU1NFUlQoIWluc2VydGlvblBvc2l0
aW9uLm5vZGUoKS0+cmVuZGVyZXIoKSB8fCBpbnNlcnRpb25Qb3NpdGlvbi5ub2RlKCktPnJlbmRl
cmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VCghaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSB8fCBpbnNl
cnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xs
YXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dERv
d25zdHJlYW0oaW5zZXJ0aW9uUG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKGluc2VydGlvblBv
c2l0aW9uLm5vZGUoKS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZShzdGF0aWNfY2FzdDxUZXh0Kj4oaW5zZXJ0aW9uUG9zaXRpb24ubm9kZSgpKSwgMCwg
bm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpCisgICAgICAgICAgICAgICAgaW5z
ZXJ0VGV4dEludG9Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRpb25Qb3NpdGlvbi5kZXBy
ZWNhdGVkTm9kZSgpKSwgMCwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICAgICAgfQog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1OCwxMyBAQCBQb3NpdGlv
biBJbnNlcnRUZXh0Q29tbWFuZDo6cHJlcGFyZUZvclRlCiAgICAgUG9zaXRpb24gcG9zID0gcDsK
ICAgICAvLyBQcmVwYXJlIGZvciB0ZXh0IGlucHV0IGJ5IGxvb2tpbmcgYXQgdGhlIHNwZWNpZmll
ZCBwb3NpdGlvbi4KICAgICAvLyBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGluc2VydCBhIHRleHQg
bm9kZSB0byByZWNlaXZlIGNoYXJhY3RlcnMuCi0gICAgaWYgKCFwb3Mubm9kZSgpLT5pc1RleHRO
b2RlKCkpIHsKKyAgICBpZiAoIXBvcy5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgUmVmUHRyPE5vZGU+IHRleHROb2RlID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGlu
Z1RleHROb2RlKCIiKTsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KHRleHROb2RlLmdldCgpLCBwb3Mp
OwogICAgICAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZS5nZXQoKSk7CiAg
ICAgfQogCi0gICAgaWYgKGlzVGFiU3BhblRleHROb2RlKHBvcy5ub2RlKCkpKSB7CisgICAgaWYg
KGlzVGFiU3BhblRleHROb2RlKHBvcy5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBSZWZQ
dHI8Tm9kZT4gdGV4dE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVFZGl0aW5nVGV4dE5vZGUoIiIp
OwogICAgICAgICBpbnNlcnROb2RlQXRUYWJTcGFuUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIHBv
cyk7CiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHROb2RlLmdldCgpKTsK
QEAgLTE0Nyw5ICsxNDcsOSBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBT
dHJpCiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBub2RlIHRoYXQgY29udGFp
bnMgc3RhcnRQb3NpdGlvbiB0byBjb250YWluIG9ubHkgdW5yZW5kZXJlZCB3aGl0ZXNwYWNlLAog
ICAgIC8vIGFuZCBzbyBkZWxldGVJbnNpZ25pZmljYW50VGV4dCBjb3VsZCByZW1vdmUgaXQuICBT
YXZlIHRoZSBwb3NpdGlvbiBiZWZvcmUgdGhlIG5vZGUgaW4gY2FzZSB0aGF0IGhhcHBlbnMuCi0g
ICAgUG9zaXRpb24gcG9zaXRpb25CZWZvcmVTdGFydE5vZGUocG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUoc3RhcnRQb3NpdGlvbi5ub2RlKCkpKTsKKyAgICBQb3NpdGlvbiBwb3NpdGlvbkJlZm9y
ZVN0YXJ0Tm9kZShwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShzdGFydFBvc2l0aW9uLmRlcHJl
Y2F0ZWROb2RlKCkpKTsKICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dChzdGFydFBvc2l0aW9u
LnVwc3RyZWFtKCksIHN0YXJ0UG9zaXRpb24uZG93bnN0cmVhbSgpKTsKLSAgICBpZiAoIXN0YXJ0
UG9zaXRpb24ubm9kZSgpLT5pbkRvY3VtZW50KCkpCisgICAgaWYgKCFzdGFydFBvc2l0aW9uLmFu
Y2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICBzdGFydFBvc2l0aW9uID0gcG9zaXRp
b25CZWZvcmVTdGFydE5vZGU7CiAgICAgaWYgKCFzdGFydFBvc2l0aW9uLmlzQ2FuZGlkYXRlKCkp
CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLmRvd25zdHJlYW0oKTsKQEAg
LTE2OCw3ICsxNjgsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBTdHJp
CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBwcmVwYXJlRm9yVGV4dEluc2VydGlvbihzdGFydFBv
c2l0aW9uKTsKICAgICAgICAgaWYgKHBsYWNlaG9sZGVyLmlzTm90TnVsbCgpKQogICAgICAgICAg
ICAgcmVtb3ZlUGxhY2Vob2xkZXJBdChwbGFjZWhvbGRlcik7Ci0gICAgICAgIFRleHQgKnRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihzdGFydFBvc2l0aW9uLm5vZGUoKSk7CisgICAgICAg
IFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0UG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKSk7CiAgICAgICAgIGludCBvZmZzZXQgPSBzdGFydFBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CiAKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHROb2Rl
LCBvZmZzZXQsIHRleHQpOwpAQCAtMjA5LDcgKzIwOSw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRD
b21tYW5kOjppbnNlcnRUYWIoY28KIHsKICAgICBQb3NpdGlvbiBpbnNlcnRQb3MgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBET1dOU1RSRUFNKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAKLSAg
ICBOb2RlICpub2RlID0gaW5zZXJ0UG9zLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gaW5zZXJ0
UG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IGluc2VydFBv
cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogCiAgICAgLy8ga2VlcCB0YWJzIGNvYWxlc2Nl
ZCBpbiB0YWIgc3BhbgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDEyICs1MiwxMiBAQCBzdGF0aWMgYm9vbCBnZXRTdGFydEVuZExpc3RDaGlsZHJlbihj
b25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIHN0YXJ0IG11c3QgYmUgaW4gYSBs
aXN0IGNoaWxkCi0gICAgTm9kZSogc3RhcnRMaXN0Q2hpbGQgPSBlbmNsb3NpbmdMaXN0Q2hpbGQo
c2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKTsKKyAgICBOb2RlKiBzdGFydExpc3RDaGlsZCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAg
ICBpZiAoIXN0YXJ0TGlzdENoaWxkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgIC8vIGVuZCBtdXN0IGJlIGluIGEgbGlzdCBjaGlsZAotICAgIE5vZGUqIGVuZExpc3RDaGls
ZCA9IHNlbGVjdGlvbi5pc1JhbmdlKCkgPyBlbmNsb3NpbmdMaXN0Q2hpbGQoc2VsZWN0aW9uLmVu
ZCgpLm5vZGUoKSkgOiBzdGFydExpc3RDaGlsZDsKKyAgICBOb2RlKiBlbmRMaXN0Q2hpbGQgPSBz
ZWxlY3Rpb24uaXNSYW5nZSgpID8gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbi5lbmQoKS5k
ZXByZWNhdGVkTm9kZSgpKSA6IHN0YXJ0TGlzdENoaWxkOwogICAgIGlmICghZW5kTGlzdENoaWxk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBNb3ZlU2VsZWN0
aW9uQ29tbWFuZDo6TW92ZVNlbGVjdGlvbkNvbW1hbmQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBib29sIHNtYXJ0SW5zZXJ0
LCBib29sIHNtYXJ0RGVsZXRlKSAKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHBvc2l0aW9u
Lm5vZGUoKS0+ZG9jdW1lbnQoKSksIG1fZnJhZ21lbnQoZnJhZ21lbnQpLCBtX3Bvc2l0aW9uKHBv
c2l0aW9uKSwgbV9zbWFydEluc2VydChzbWFydEluc2VydCksIG1fc21hcnREZWxldGUoc21hcnRE
ZWxldGUpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChwb3NpdGlvbi5hbmNob3JOb2RlKCkt
PmRvY3VtZW50KCkpLCBtX2ZyYWdtZW50KGZyYWdtZW50KSwgbV9wb3NpdGlvbihwb3NpdGlvbiks
IG1fc21hcnRJbnNlcnQoc21hcnRJbnNlcnQpLCBtX3NtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKQog
ewogICAgIEFTU0VSVChtX2ZyYWdtZW50KTsKIH0KQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBNb3Zl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gc2V0IHRoZSBkZXN0aW5hdGlvbiB0
byB0aGUgZW5kaW5nIHBvaW50IGFmdGVyIHRoZSBkZWxldGlvbi4KICAgICAvLyBGaXhlczogPHJk
YXI6Ly9wcm9ibGVtLzM5MTA0MjU+IFJFR1JFU1NJT04gKE1haWwpOiBDcmFzaCBpbiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDsgCiAgICAgLy8gICAgICAgIHNlbGVjdGlvbiBpcyBlbXB0eSwgbGVh
ZGluZyB0byBudWxsIGRlcmVmCi0gICAgaWYgKCFwb3Mubm9kZSgpLT5pbkRvY3VtZW50KCkpCisg
ICAgaWYgKCFwb3MuYW5jaG9yTm9kZSgpLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHBvcyA9IGVu
ZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7CiAKICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsMTUgKzExMCwxNSBAQCBzdGF0
aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTCiBzdGF0aWMgUG9zaXRpb24gcG9z
aXRpb25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvcykKIHsKICAgICAvLyBJZiB3
ZSdyZSBhbHJlYWR5IG9uIGEgYnJlYWssIGl0J3MgcHJvYmFibHkgYSBwbGFjZWhvbGRlciBhbmQg
d2Ugc2hvdWxkbid0IGNoYW5nZSBvdXIgcG9zaXRpb24uCi0gICAgaWYgKHBvcy5ub2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpKQorICAgIGlmIChwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFt
ZShiclRhZykpCiAgICAgICAgIHJldHVybiBwb3M7CiAKICAgICAvLyBXZSBhbHNvIHN0b3Agd2hl
biBjaGFuZ2luZyBibG9jayBmbG93IGVsZW1lbnRzIGJlY2F1c2UgZXZlbiB0aG91Z2ggdGhlIHZp
c3VhbCBwb3NpdGlvbiBpcyB0aGUKICAgICAvLyBzYW1lLiAgRS5nLiwKICAgICAvLyAgIDxkaXY+
Zm9vXjwvZGl2Pl4KICAgICAvLyBUaGUgdHdvIHBvc2l0aW9ucyBhYm92ZSBhcmUgdGhlIHNhbWUg
dmlzdWFsIHBvc2l0aW9uLCBidXQgd2Ugd2FudCB0byBzdGF5IGluIHRoZSBzYW1lIGJsb2NrLgot
ICAgIE5vZGUqIHN0b3BOb2RlID0gcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpOwotICAgIHdoaWxlIChzdG9wTm9kZSAhPSBwb3Mubm9kZSgpICYmIFZpc2libGVQb3NpdGlv
bihwb3MpID09IFZpc2libGVQb3NpdGlvbihwb3MubmV4dCgpKSkKKyAgICBOb2RlKiBzdG9wTm9k
ZSA9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Cisg
ICAgd2hpbGUgKHN0b3BOb2RlICE9IHBvcy5kZXByZWNhdGVkTm9kZSgpICYmIFZpc2libGVQb3Np
dGlvbihwb3MpID09IFZpc2libGVQb3NpdGlvbihwb3MubmV4dCgpKSkKICAgICAgICAgcG9zID0g
cG9zLm5leHQoKTsKICAgICByZXR1cm4gcG9zOwogfQpAQCAtMTUyLDcgKzE1Miw3IEBAIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIE5vZGUqIHN0eWxlTm9kZSA9IHNlbGVjdGlvbi5iYXNlKCkubm9kZSgpOworICAg
IE5vZGUqIHN0eWxlTm9kZSA9IHNlbGVjdGlvbi5iYXNlKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBSZWZQdHI8U3R5bGVkRWxlbWVudD4gaG9sZGVyID0gaW5zZXJ0RnJhZ21lbnRGb3JUZXN0UmVu
ZGVyaW5nKHN0eWxlTm9kZSk7CiAgICAgCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFZpc2li
bGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zNTcsNyArMzU3LDcgQEAgc3RhdGljIGJvb2wgaGFzTWF0
Y2hpbmdRdW90ZUxldmVsKFZpc2libAogewogICAgIFBvc2l0aW9uIGV4aXN0aW5nID0gZW5kT2ZF
eGlzdGluZ0NvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBpbnNlcnRlZCA9
IGVuZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgYm9vbCBpc0luc2lk
ZU1haWxCbG9ja3F1b3RlID0gbmVhcmVzdE1haWxCbG9ja3F1b3RlKGluc2VydGVkLm5vZGUoKSk7
CisgICAgYm9vbCBpc0luc2lkZU1haWxCbG9ja3F1b3RlID0gbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KGluc2VydGVkLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIHJldHVybiBpc0luc2lkZU1haWxCbG9j
a3F1b3RlICYmIChudW1FbmNsb3NpbmdNYWlsQmxvY2txdW90ZXMoZXhpc3RpbmcpID09IG51bUVu
Y2xvc2luZ01haWxCbG9ja3F1b3RlcyhpbnNlcnRlZCkpOwogfQogCkBAIC0zNzksMTEgKzM3OSwx
MSBAQCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRNZXJnCiAgICAgaWYgKGlz
U3RhcnRPZlBhcmFncmFwaChzdGFydE9mSW5zZXJ0ZWRDb250ZW50KSAmJiBzZWxlY3Rpb25TdGFy
dFdhc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIGhhc01hdGNoaW5nUXVvdGVMZXZlbChwcmV2LCBw
b3NpdGlvbkF0RW5kT2ZJbnNlcnRlZENvbnRlbnQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydFdhc1N0YXJ0T2ZQYXJhZ3JhcGggJiYgCi0gICAg
ICAgICAgICFmcmFnbWVudEhhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQgJiYKLSAgICAgICAg
ICAgaXNTdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQpICYmIAotICAgICAg
ICAgICAhc3RhcnRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aGFz
VGFnTmFtZShiclRhZykgJiYKLSAgICAgICAgICAgc2hvdWxkTWVyZ2Uoc3RhcnRPZkluc2VydGVk
Q29udGVudCwgcHJldik7CisgICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydFdhc1N0YXJ0T2ZQYXJh
Z3JhcGgKKyAgICAgICAgJiYgIWZyYWdtZW50SGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydAor
ICAgICAgICAmJiBpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkKKyAg
ICAgICAgJiYgIXN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKQorICAgICAgICAmJiBzaG91bGRNZXJnZShzdGFy
dE9mSW5zZXJ0ZWRDb250ZW50LCBwcmV2KTsKIH0KIAogYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6c2hvdWxkTWVyZ2VFbmQoYm9vbCBzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCkK
QEAgLTM5MywxMCArMzkzLDEwIEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3Vs
ZE1lcmcKICAgICBpZiAobmV4dC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuICFzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCAmJgotICAgICAgICAgICBp
c0VuZE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250ZW50KSAmJiAKLSAgICAgICAgICAgIWVu
ZE9mSW5zZXJ0ZWRDb250ZW50LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5oYXNUYWdOYW1lKGJy
VGFnKSAmJgotICAgICAgICAgICBzaG91bGRNZXJnZShlbmRPZkluc2VydGVkQ29udGVudCwgbmV4
dCk7CisgICAgcmV0dXJuICFzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaAorICAgICAgICAm
JiBpc0VuZE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250ZW50KQorICAgICAgICAmJiAhZW5k
T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKQorICAgICAgICAmJiBzaG91bGRNZXJnZShlbmRPZkluc2VydGVkQ29udGVu
dCwgbmV4dCk7CiB9CiAKIHN0YXRpYyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNv
bnN0IE5vZGUqIG5vZGUpCkBAIC00NTMsOCArNDUzLDggQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6c2hvdWxkTWVyZwogICAgIGlmIChzb3VyY2UuaXNOdWxsKCkgfHwgZGVzdGluYXRp
b24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgTm9kZSog
c291cmNlTm9kZSA9IHNvdXJjZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKLSAgICBOb2RlKiBk
ZXN0aW5hdGlvbk5vZGUgPSBkZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAg
ICBOb2RlKiBzb3VyY2VOb2RlID0gc291cmNlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKTsKKyAgICBOb2RlKiBkZXN0aW5hdGlvbk5vZGUgPSBkZXN0aW5hdGlvbi5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgTm9kZSogc291cmNlQmxvY2sgPSBlbmNsb3Np
bmdCbG9jayhzb3VyY2VOb2RlKTsKICAgICBOb2RlKiBkZXN0aW5hdGlvbkJsb2NrID0gZW5jbG9z
aW5nQmxvY2soZGVzdGluYXRpb25Ob2RlKTsKICAgICByZXR1cm4gIWVuY2xvc2luZ05vZGVPZlR5
cGUoc291cmNlLmRlZXBFcXVpdmFsZW50KCksICZpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSkg
JiYKQEAgLTc0MCw3ICs3NDAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZUVuZElmCiAgICAgLy8gVG8gYXZvaWQgdGhpcywgd2UgYWRkIGEgcGxhY2Vob2xkZXIgbm9kZSBi
ZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGguCiAgICAgaWYgKGVuZE9mUGFyYWdyYXBo
KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUpID09IGRlc3RpbmF0aW9uKSB7CiAgICAgICAgIFJlZlB0
cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsKLSAg
ICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFjZWhvbGRlciwgc3RhcnRPZlBhcmFncmFwaFRvTW92
ZS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgICAgIGluc2VydE5vZGVCZWZvcmUocGxh
Y2Vob2xkZXIsIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICAgICAgZGVzdGluYXRpb24gPSBWaXNpYmxlUG9zaXRpb24ocG9zaXRp
b25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLmdldCgpKSk7CiAgICAgfQogCkBAIC03NTEsOSArNzUx
LDkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZgogICAgIC8vIG9u
bHkgZXZlciB1c2VkIHRvIGNyZWF0ZSBwb3NpdGlvbnMgd2hlcmUgaW5zZXJ0ZWQgY29udGVudCBz
dGFydHMvZW5kcy4gIEFsc28sIHdlIHNvbWV0aW1lcyBpbnNlcnQgY29udGVudAogICAgIC8vIGRp
cmVjdGx5IGludG8gdGV4dCBub2RlcyBhbHJlYWR5IGluIHRoZSBkb2N1bWVudCwgaW4gd2hpY2gg
Y2FzZSB0cmFja2luZyBpbnNlcnRlZCBub2RlcyBpcyBpbmFkZXF1YXRlLgogICAgIGlmIChtZXJn
ZUZvcndhcmQpIHsKLSAgICAgICAgbV9sYXN0TGVhZkluc2VydGVkID0gZGVzdGluYXRpb24ucHJl
dmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKKyAgICAgICAgbV9sYXN0TGVhZkluc2Vy
dGVkID0gZGVzdGluYXRpb24ucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCk7CiAgICAgICAgIGlmICghbV9maXJzdE5vZGVJbnNlcnRlZC0+aW5Eb2N1bWVudCgpKQot
ICAgICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgICAgICAgICAgbV9maXJzdE5v
ZGVJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgLy8gSWYgd2UgbWVyZ2VkIHRleHQgbm9k
ZXMsIG1fbGFzdExlYWZJbnNlcnRlZCBjb3VsZCBiZSBudWxsLiBJZiB0aGlzIGlzIHRoZSBjYXNl
LAogICAgICAgICAvLyB3ZSB1c2UgbV9maXJzdE5vZGVJbnNlcnRlZC4KICAgICAgICAgaWYgKCFt
X2xhc3RMZWFmSW5zZXJ0ZWQpCkBAIC03ODAsOCArNzgwLDggQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdl
KCkpOwotICAgIEFTU0VSVChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOwotICAgIGlmICghc2Vs
ZWN0aW9uLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2UoKSB8fCAhc2VsZWN0aW9uLnN0YXJ0KCku
bm9kZSgpKQorICAgIEFTU0VSVChzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsK
KyAgICBpZiAoIXNlbGVjdGlvbi5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkgfHwgIXNlbGVj
dGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAg
ICBib29sIHNlbGVjdGlvbklzUGxhaW5UZXh0ID0gIXNlbGVjdGlvbi5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOwpAQCAtNzkzLDggKzc5Myw4IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gV2UgY2FuIHNraXAg
bWF0Y2hpbmcgdGhlIHN0eWxlIGlmIHRoZSBzZWxlY3Rpb24gaXMgcGxhaW4gdGV4dC4KLSAgICBp
ZiAoKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dS
SVRFX1BMQUlOVEVYVF9PTkxZKSAmJgotICAgICAgICAoc2VsZWN0aW9uLmVuZCgpLm5vZGUoKS0+
cmVuZGVyZXIoKSAmJiBzZWxlY3Rpb24uZW5kKCkubm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9XUklURV9QTEFJTlRFWFRfT05MWSkpCisgICAgaWYgKChz
ZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIHNlbGVjdGlv
bi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2Rp
ZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZKQorICAgICAgICAmJiAoc2VsZWN0aW9u
LmVuZCgpLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgc2VsZWN0aW9uLmVuZCgpLmRl
cHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFE
X1dSSVRFX1BMQUlOVEVYVF9PTkxZKSkKICAgICAgICAgbV9tYXRjaFN0eWxlID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKG1fbWF0Y2hTdHlsZSkKQEAgLTgwNiwxMCArODA2LDEwIEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGJvb2wgc2VsZWN0aW9uRW5kV2Fz
RW5kT2ZQYXJhZ3JhcGggPSBpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpOwogICAgIGJvb2wg
c2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBoID0gaXNTdGFydE9mUGFyYWdyYXBoKHZp
c2libGVTdGFydCk7CiAgICAgCi0gICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2Nr
KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSogc3RhcnRC
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIAogICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyA9IHNlbGVjdGlv
bi5zdGFydCgpOwotICAgIGJvb2wgc3RhcnRJc0luc2lkZU1haWxCbG9ja3F1b3RlID0gbmVhcmVz
dE1haWxCbG9ja3F1b3RlKGluc2VydGlvblBvcy5ub2RlKCkpOworICAgIGJvb2wgc3RhcnRJc0lu
c2lkZU1haWxCbG9ja3F1b3RlID0gbmVhcmVzdE1haWxCbG9ja3F1b3RlKGluc2VydGlvblBvcy5k
ZXByZWNhdGVkTm9kZSgpKTsKICAgICAKICAgICBpZiAoKHNlbGVjdGlvblN0YXJ0V2FzU3RhcnRP
ZlBhcmFncmFwaCAmJiBzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCAmJiAhc3RhcnRJc0lu
c2lkZU1haWxCbG9ja3F1b3RlKSB8fAogICAgICAgICBzdGFydEJsb2NrID09IGN1cnJlbnRSb290
IHx8IGlzTGlzdEl0ZW0oc3RhcnRCbG9jaykgfHwgc2VsZWN0aW9uSXNQbGFpblRleHQpCkBAIC04
NjIsNyArODYyLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgaWYgKHN0YXJ0SXNJbnNpZGVNYWlsQmxvY2txdW90ZSAmJiBtX3ByZXZlbnROZXN0aW5nICYm
ICEoZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNlcnRpb25Qb3MsICZpc1RhYmxlU3RydWN0dXJlTm9k
ZSkpKSB7IAogICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShCcmVha0Jsb2NrcXVvdGVD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOyAKICAgICAgICAgLy8gVGhpcyB3aWxsIGxlYXZl
IGEgYnIgYmV0d2VlbiB0aGUgc3BsaXQuIAotICAgICAgICBOb2RlKiBiciA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkubm9kZSgpOyAKKyAgICAgICAgTm9kZSogYnIgPSBlbmRpbmdTZWxlY3Rp
b24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IAogICAgICAgICBBU1NFUlQoYnItPmhhc1Rh
Z05hbWUoYnJUYWcpKTsgCiAgICAgICAgIC8vIEluc2VydCBjb250ZW50IGJldHdlZW4gdGhlIHR3
byBibG9ja3F1b3RlcywgYnV0IHJlbW92ZSB0aGUgYnIgKHNpbmNlIGl0IHdhcyBqdXN0IGEgcGxh
Y2Vob2xkZXIpLiAKICAgICAgICAgaW5zZXJ0aW9uUG9zID0gcG9zaXRpb25JblBhcmVudEJlZm9y
ZU5vZGUoYnIpOwpAQCAtODczLDE4ICs4NzMsMTggQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgcHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQo
aW5zZXJ0aW9uUG9zKTsKIAogICAgIC8vIElmIHRoZSBkb3duc3RyZWFtIG5vZGUgaGFzIGJlZW4g
cmVtb3ZlZCB0aGVyZSdzIG5vIHBvaW50IGluIGNvbnRpbnVpbmcuCi0gICAgaWYgKCFpbnNlcnRp
b25Qb3MuZG93bnN0cmVhbSgpLm5vZGUoKSkKKyAgICBpZiAoIWluc2VydGlvblBvcy5kb3duc3Ry
ZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBOT1RF
OiBUaGlzIHdvdWxkIGJlIGFuIGluY29ycmVjdCB1c2FnZSBvZiBkb3duc3RyZWFtKCkgaWYgZG93
bnN0cmVhbSgpIHdlcmUgY2hhbmdlZCB0byBtZWFuIHRoZSBsYXN0IHBvc2l0aW9uIGFmdGVyIAog
ICAgIC8vIHAgdGhhdCBtYXBzIHRvIHRoZSBzYW1lIHZpc2libGUgcG9zaXRpb24gYXMgcCAoc2lu
Y2UgaW4gdGhlIGNhc2Ugd2hlcmUgYSBiciBpcyBhdCB0aGUgZW5kIG9mIGEgYmxvY2sgYW5kIGNv
bGxhcHNlZCAKICAgICAvLyBhd2F5LCB0aGVyZSBhcmUgcG9zaXRpb25zIGFmdGVyIHRoZSBiciB3
aGljaCBtYXAgdG8gdGhlIHNhbWUgdmlzaWJsZSBwb3NpdGlvbiBhcyBbYnIsIDBdKS4gIAotICAg
IE5vZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05h
bWUoYnJUYWcpID8gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5ub2RlKCkgOiAwOworICAgIE5v
ZGUqIGVuZEJSID0gaW5zZXJ0aW9uUG9zLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpLT5o
YXNUYWdOYW1lKGJyVGFnKSA/IGluc2VydGlvblBvcy5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKSA6IDA7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlI7
CiAgICAgaWYgKGVuZEJSKQogICAgICAgICBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSID0gVmlz
aWJsZVBvc2l0aW9uKGVuZEJSLCAwLCBET1dOU1RSRUFNKS5wcmV2aW91cygpOwogICAgIAotICAg
IHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3Mubm9kZSgpKTsKKyAgICBz
dGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkp
OwogICAgIAogICAgIC8vIEFkanVzdCBpbnNlcnRpb25Qb3MgdG8gcHJldmVudCBuZXN0aW5nLgog
ICAgIC8vIElmIHRoZSBzdGFydCB3YXMgaW4gYSBNYWlsIGJsb2NrcXVvdGUsIHdlIHdpbGwgaGF2
ZSBhbHJlYWR5IGhhbmRsZWQgYWRqdXN0aW5nIGluc2VydGlvblBvcyBhYm92ZS4KQEAgLTkzOSw3
ICs5MzksNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAK
ICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKHJlZk5vZGUpOwogCi0gICAgTm9kZSogYmxvY2tTdGFy
dCA9IGVuY2xvc2luZ0Jsb2NrKGluc2VydGlvblBvcy5ub2RlKCkpOworICAgIE5vZGUqIGJsb2Nr
U3RhcnQgPSBlbmNsb3NpbmdCbG9jayhpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZE5vZGUoKSk7CiAg
ICAgaWYgKChpc0xpc3RFbGVtZW50KHJlZk5vZGUuZ2V0KCkpIHx8IChpc1N0eWxlU3BhbihyZWZO
b2RlLmdldCgpKSAmJiBpc0xpc3RFbGVtZW50KHJlZk5vZGUtPmZpcnN0Q2hpbGQoKSkpKQogICAg
ICAgICAmJiBibG9ja1N0YXJ0LT5yZW5kZXJlcigpLT5pc0xpc3RJdGVtKCkpCiAgICAgICAgIHJl
Zk5vZGUgPSBpbnNlcnRBc0xpc3RJdGVtcyhyZWZOb2RlLCBibG9ja1N0YXJ0LCBpbnNlcnRpb25Q
b3MpOwpAQCAtOTgzLDcgKzk4Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRv
QXBwbHkoKQogICAgIAogICAgIC8vIFdlIGluc2VydGVkIGJlZm9yZSB0aGUgc3RhcnRCbG9jayB0
byBwcmV2ZW50IG5lc3RpbmcsIGFuZCB0aGUgY29udGVudCBiZWZvcmUgdGhlIHN0YXJ0QmxvY2sg
d2Fzbid0IGluIGl0cyBvd24gYmxvY2sgYW5kCiAgICAgLy8gZGlkbid0IGhhdmUgYSBiciBhZnRl
ciBpdCwgc28gdGhlIGluc2VydGVkIGNvbnRlbnQgZW5kZWQgdXAgaW4gdGhlIHNhbWUgcGFyYWdy
YXBoLgotICAgIGlmIChzdGFydEJsb2NrICYmIGluc2VydGlvblBvcy5ub2RlKCkgPT0gc3RhcnRC
bG9jay0+cGFyZW50Tm9kZSgpICYmICh1bnNpZ25lZClpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA8IHN0YXJ0QmxvY2stPm5vZGVJbmRleCgpICYmICFpc1N0YXJ0T2ZQYXJh
Z3JhcGgoc3RhcnRPZkluc2VydGVkQ29udGVudCkpCisgICAgaWYgKHN0YXJ0QmxvY2sgJiYgaW5z
ZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkgPT0gc3RhcnRCbG9jay0+cGFyZW50Tm9kZSgpICYm
ICh1bnNpZ25lZClpbnNlcnRpb25Qb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8IHN0YXJ0
QmxvY2stPm5vZGVJbmRleCgpICYmICFpc1N0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZkluc2VydGVk
Q29udGVudCkpCiAgICAgICAgIGluc2VydE5vZGVBdChjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1l
bnQoKSkuZ2V0KCksIHN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAg
ICAgCiAgICAgUG9zaXRpb24gbGFzdFBvc2l0aW9uVG9TZWxlY3Q7CkBAIC0xMDAzLDcgKzEwMDMs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8g
V2UgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBtZXJnZSB0aGUgZW5k
CiAgICAgICAgIC8vIGJ1dCBvdXIgZGVzdGluYXRpb24gbm9kZSBpcyBpbnNpZGUgYW4gaW5saW5l
IHRoYXQgaXMgdGhlIGxhc3QgaW4gdGhlIGJsb2NrLgogICAgICAgICAvLyBXZSBpbnNlcnQgYSBw
bGFjZWhvbGRlciBiZWZvcmUgdGhlIG5ld2x5IGluc2VydGVkIGNvbnRlbnQgdG8gYXZvaWQgYmVp
bmcgbWVyZ2VkIGludG8gdGhlIGlubGluZS4KLSAgICAgICAgTm9kZSogZGVzdGluYXRpb25Ob2Rl
ID0gZGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7CisgICAgICAgIE5vZGUqIGRl
c3RpbmF0aW9uTm9kZSA9IGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICAgICAgaWYgKG1fc2hvdWxkTWVyZ2VFbmQgJiYgZGVzdGluYXRpb25Ob2RlICE9
IGVuY2xvc2luZ0lubGluZShkZXN0aW5hdGlvbk5vZGUpICYmIGVuY2xvc2luZ0lubGluZShkZXN0
aW5hdGlvbk5vZGUpLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9y
ZShjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIHJlZk5vZGUuZ2V0KCkpOwogICAgICAg
ICAKQEAgLTEwMTgsMTYgKzEwMTgsMTYgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIGlmIChzdGFydE9mUGFyYWdyYXBoKGVuZE9mSW5zZXJ0ZWRDb250
ZW50KSA9PSBzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlKSB7CiAgICAgICAgICAgICBpbnNlcnROb2Rl
QXQoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLmdldCgpLCBlbmRPZkluc2VydGVkQ29u
dGVudC5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgICAgIC8vIE11dGF0aW9uIGV2ZW50cyAo
YnVnIDIyNjM0KSB0cmlnZ2VyZWQgYnkgaW5zZXJ0aW5nIHRoZSA8YnI+IG1pZ2h0IGhhdmUgcmVt
b3ZlZCB0aGUgY29udGVudCB3ZSdyZSBhYm91dCB0byBtb3ZlCi0gICAgICAgICAgICBpZiAoIXN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmluRG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIGlmICghc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVu
dCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBNYWludGFpbiBwb3NpdGlvbnMgZm9yIHRo
ZSBzdGFydCBhbmQgZW5kIG9mIGluc2VydGVkIGNvbnRlbnQgaW5zdGVhZCBvZiBrZWVwaW5nIG5v
ZGVzLiAgVGhlIG5vZGVzIGFyZQogICAgICAgICAvLyBvbmx5IGV2ZXIgdXNlZCB0byBjcmVhdGUg
cG9zaXRpb25zIHdoZXJlIGluc2VydGVkIGNvbnRlbnQgc3RhcnRzL2VuZHMuCiAgICAgICAgIG1v
dmVQYXJhZ3JhcGgoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGgoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSksIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgbV9maXJzdE5vZGVJbnNl
cnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCku
ZG93bnN0cmVhbSgpLm5vZGUoKTsKKyAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IGVuZGlu
Z1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgp
LmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmICghbV9sYXN0TGVhZkluc2VydGVkLT5pbkRv
Y3VtZW50KCkpCi0gICAgICAgICAgICBtX2xhc3RMZWFmSW5zZXJ0ZWQgPSBlbmRpbmdTZWxlY3Rp
b24oKS52aXNpYmxlRW5kKCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLm5vZGUoKTsKKyAg
ICAgICAgICAgIG1fbGFzdExlYWZJbnNlcnRlZCA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVF
bmQoKS5kZWVwRXF1aXZhbGVudCgpLnVwc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICB9
CiAgICAgICAgICAgICAKICAgICBlbmRPZkluc2VydGVkQ29udGVudCA9IHBvc2l0aW9uQXRFbmRP
Zkluc2VydGVkQ29udGVudCgpOwpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIGlmIChzZWxlY3Rpb25FbmRXYXNFbmRP
ZlBhcmFncmFwaCB8fCAhaXNFbmRPZlBhcmFncmFwaChlbmRPZkluc2VydGVkQ29udGVudCkgfHwg
bmV4dC5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFpc1N0YXJ0T2ZQYXJhZ3JhcGgoZW5k
T2ZJbnNlcnRlZENvbnRlbnQpKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9u
KGVuZE9mSW5zZXJ0ZWRDb250ZW50KTsKLSAgICAgICAgICAgICAgICBOb2RlKiBlbmNsb3NpbmdO
b2RlID0gZW5jbG9zaW5nQmxvY2soZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQo
KS5ub2RlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGVuY2xvc2luZ05vZGUgPSBlbmNsb3Np
bmdCbG9jayhlbmRPZkluc2VydGVkQ29udGVudC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgICAgICAgICAgICAgIGlmIChpc0xpc3RJdGVtKGVuY2xvc2luZ05vZGUpKSB7
CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0SXRlbSA9IGNyZWF0ZUxp
c3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9k
ZUFmdGVyKG5ld0xpc3RJdGVtLCBlbmNsb3NpbmdOb2RlKTsKQEAgLTEwNTEsNyArMTA1MSw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgICAgICAgICAg
ICAgLy8gU2VsZWN0IHVwIHRvIHRoZSBwYXJhZ3JhcGggc2VwYXJhdG9yIHRoYXQgd2FzIGFkZGVk
LgogICAgICAgICAgICAgICAgIGxhc3RQb3NpdGlvblRvU2VsZWN0ID0gZW5kaW5nU2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICAgICAgICAgICAgICB1cGRh
dGVOb2Rlc0luc2VydGVkKGxhc3RQb3NpdGlvblRvU2VsZWN0Lm5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgdXBkYXRlTm9kZXNJbnNlcnRlZChsYXN0UG9zaXRpb25Ub1NlbGVjdC5kZXByZWNhdGVk
Tm9kZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IFNlbGVjdCB1cCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IHBhcmFncmFwaC4KQEAgLTEw
NzksNyArMTA3OSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICBpZiAobmVlZHNUcmFpbGluZ1NwYWNlKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbV9sYXN0TGVhZkluc2VydGVkLT5yZW5kZXJlcigpOwogICAgICAgICAg
ICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxl
KCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgTm9kZSogZW5kTm9kZSA9IHBv
c2l0aW9uQXRFbmRPZkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkudXBzdHJlYW0o
KS5ub2RlKCk7CisgICAgICAgICAgICBOb2RlKiBlbmROb2RlID0gcG9zaXRpb25BdEVuZE9mSW5z
ZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgICAgICAgICBpZiAoZW5kTm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRleHQqPihlbmROb2RlKTsKICAgICAgICAg
ICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dCwgdGV4dC0+bGVuZ3RoKCksIGNvbGxhcHNl
V2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CkBAIC0xMDk0LDcg
KzEwOTQsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgaWYgKG5lZWRzTGVhZGluZ1NwYWNlKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbV9sYXN0TGVhZkluc2VydGVkLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgYm9v
bCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPmNv
bGxhcHNlV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgTm9kZSogc3RhcnROb2RlID0gcG9zaXRp
b25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0o
KS5ub2RlKCk7CisgICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBwb3NpdGlvbkF0U3RhcnRP
Zkluc2VydGVkQ29udGVudCgpLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0
ZWROb2RlKCk7CiAgICAgICAgICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9kZSk7
CiAgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIDAsIGNvbGxhcHNlV2hp
dGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CkBAIC0xMjEyLDkgKzEy
MTIsOSBAQCBOb2RlKiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMCiAgICAgLy8g
bGlzdCBpdGVtcyBhbmQgaW5zZXJ0IHRoZXNlIG5vZGVzIGJldHdlZW4gdGhlbS4KICAgICBpZiAo
aXNNaWRkbGUpIHsKICAgICAgICAgaW50IHRleHROb2RlT2Zmc2V0ID0gaW5zZXJ0UG9zLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpOwotICAgICAgICBpZiAoaW5zZXJ0UG9zLm5vZGUoKS0+aXNUZXh0
Tm9kZSgpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKLSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUo
c3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydFBvcy5ub2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7Ci0g
ICAgICAgIHNwbGl0VHJlZVRvTm9kZShpbnNlcnRQb3Mubm9kZSgpLCBsYXN0Tm9kZSwgdHJ1ZSk7
CisgICAgICAgIGlmIChpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYm
IHRleHROb2RlT2Zmc2V0ID4gMCkKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nh
c3Q8VGV4dCo+KGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSwgdGV4dE5vZGVPZmZzZXQpOwor
ICAgICAgICBzcGxpdFRyZWVUb05vZGUoaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIGxhc3RO
b2RlLCB0cnVlKTsKICAgICB9CiAKICAgICB3aGlsZSAoUmVmUHRyPE5vZGU+IGxpc3RJdGVtID0g
bGlzdEVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlv
bihjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOb2RlKiBiYXNlTm9kZSA9IHMuYmFz
ZSgpLm5vZGUoKTsKKyAgICBOb2RlKiBiYXNlTm9kZSA9IHMuYmFzZSgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gMDsKICAgICBpZiAoYmFzZU5vZGUpCiAgICAg
ICAgIGRvY3VtZW50ID0gYmFzZU5vZGUtPmRvY3VtZW50KCk7CkBAIC0yMDQsMTcgKzIwNCwxNyBA
QCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldFNlbGVjdGlvbihjCiAKIHN0YXRpYyBib29s
IHJlbW92aW5nTm9kZVJlbW92ZXNQb3NpdGlvbihOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYg
cG9zaXRpb24pCiB7Ci0gICAgaWYgKCFwb3NpdGlvbi5ub2RlKCkpCisgICAgaWYgKCFwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocG9z
aXRpb24ubm9kZSgpID09IG5vZGUpCisgICAgaWYgKHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkg
PT0gbm9kZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbWVudC0+Y29udGFp
bnMocG9zaXRpb24ubm9kZSgpKSB8fCBlbGVtZW50LT5jb250YWlucyhwb3NpdGlvbi5ub2RlKCkt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpKTsKKyAgICByZXR1cm4gZWxlbWVudC0+Y29udGFpbnMocG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKSkgfHwgZWxlbWVudC0+Y29udGFpbnMocG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpOwogfQogCiB2b2lkIFNlbGVjdGlv
bkNvbnRyb2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUgKm5vZGUpCkBAIC0yNjIsNyArMjYy
LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpyZXNwb25kVG9Ob2RlTQogICAgIH0KIAog
ICAgIGlmIChjbGVhclJlbmRlclRyZWVTZWxlY3Rpb24pIHsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50PiBkb2N1bWVudCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpLT5kb2N1bWVudCgpOwor
ICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5h
bmNob3JOb2RlKCktPmRvY3VtZW50KCk7CiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZUlm
TmVlZGVkKCk7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KGRv
Y3VtZW50LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7
CkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjp3aWxsQmVNb2Rp
ZmllZAogCiBUZXh0RGlyZWN0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRpcmVjdGlvbk9mRW5j
bG9zaW5nQmxvY2soKQogewotICAgIE5vZGUqIGVuY2xvc2luZ0Jsb2NrTm9kZSA9IGVuY2xvc2lu
Z0Jsb2NrKG1fc2VsZWN0aW9uLmV4dGVudCgpLm5vZGUoKSk7CisgICAgTm9kZSogZW5jbG9zaW5n
QmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2sobV9zZWxlY3Rpb24uZXh0ZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgaWYgKCFlbmNsb3NpbmdCbG9ja05vZGUpCiAgICAgICAgIHJldHVybiBM
VFI7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVuY2xvc2luZ0Jsb2NrTm9kZS0+cmVu
ZGVyZXIoKTsKQEAgLTkyMSw3ICs5MjEsNyBAQCBpbnQgU2VsZWN0aW9uQ29udHJvbGxlcjo6eFBv
c0ZvclZlcnRpY2FsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9
IHBvcy5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gcG9z
LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4geDsKICAgICAgICAgCkBAIC05OTgsMTkgKzk5OCwxOSBAQCB2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OnNldENhcmV0UmVjdE5lCiAKIHZvaWQgU2VsZWN0aW9uQ29udHJvbGxl
cjo6dXBkYXRlQ2FyZXRSZWN0KCkKIHsKLSAgICBpZiAoaXNOb25lKCkgfHwgIW1fc2VsZWN0aW9u
LnN0YXJ0KCkubm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fc2VsZWN0aW9uLmVuZCgpLm5vZGUo
KS0+aW5Eb2N1bWVudCgpKSB7CisgICAgaWYgKGlzTm9uZSgpIHx8ICFtX3NlbGVjdGlvbi5zdGFy
dCgpLmFuY2hvck5vZGUoKS0+aW5Eb2N1bWVudCgpIHx8ICFtX3NlbGVjdGlvbi5lbmQoKS5hbmNo
b3JOb2RlKCktPmluRG9jdW1lbnQoKSkgewogICAgICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3Qo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fc2VsZWN0aW9uLnN0YXJ0KCkubm9k
ZSgpLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CisgICAgbV9zZWxlY3Rpb24u
c3RhcnQoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsK
ICAgICAKICAgICBtX2NhcmV0UmVjdCA9IEludFJlY3QoKTsKICAgICAgICAgCiAgICAgaWYgKGlz
Q2FyZXQoKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKG1fc2VsZWN0aW9uLnN0YXJ0
KCksIG1fc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogICAgICAgICBpZiAocG9zLmlzTm90TnVsbCgp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQocG9zLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5yZW5k
ZXJlcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChwb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRmly
c3QgY29tcHV0ZSBhIHJlY3QgbG9jYWwgdG8gdGhlIHJlbmRlcmVyIGF0IHRoZSBzZWxlY3Rpb24g
c3RhcnQKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7CkBAIC0xMDQ0LDcgKzEw
NDQsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUNhcmV0UmVjCiAKIFJlbmRl
ck9iamVjdCogU2VsZWN0aW9uQ29udHJvbGxlcjo6Y2FyZXRSZW5kZXJlcigpIGNvbnN0CiB7Ci0g
ICAgTm9kZSogbm9kZSA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGUqIG5v
ZGUgPSBtX3NlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2Rl
KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTE1MSw3ICsxMTUxLDcgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjppbnZhbGlkYXRlQ2FyZQogICAgIGlmICghaXNDYXJldCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBEb2N1bWVudCogZCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgp
LT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkID0gbV9zZWxlY3Rpb24uc3RhcnQoKS5hbmNo
b3JOb2RlKCktPmRvY3VtZW50KCk7CiAKICAgICAvLyByZWNvbXB1dGVDYXJldFJlY3Qgd2lsbCBh
bHdheXMgcmV0dXJuIGZhbHNlIGZvciB0aGUgZHJhZyBjYXJldCwKICAgICAvLyBiZWNhdXNlIGl0
cyBtX2ZyYW1lIGlzIGFsd2F5cyAwLgpAQCAtMTIyOSw5ICsxMjI5LDkgQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjpkZWJ1Z1JlbmRlcmVyKAogICAgICAgICBpbnQgdGV4dExlbmd0aCA9IHRl
eHQubGVuZ3RoKCk7CiAgICAgICAgIGlmIChzZWxlY3RlZCkgewogICAgICAgICAgICAgaW50IG9m
ZnNldCA9IDA7Ci0gICAgICAgICAgICBpZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLnN0YXJ0
KCkubm9kZSgpKQorICAgICAgICAgICAgaWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5zdGFy
dCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoci0+bm9kZSgpID09IG1fc2VsZWN0aW9uLmVuZCgpLm5vZGUoKSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKHItPm5vZGUoKSA9PSBtX3NlbGVjdGlvbi5lbmQoKS5kZXByZWNhdGVkTm9kZSgpKQog
ICAgICAgICAgICAgICAgIG9mZnNldCA9IG1fc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnQgcG9zOwpAQCAt
MTQyOSw3ICsxNDI5LDcgQEAgYm9vbCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRTZWxlY3RlZFJh
bgogCiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3QK
IHsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydCgpLm5vZGUoKTsKKyAgICBOb2RlKiBzdGFy
dE5vZGUgPSBzdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFzdGFydE5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTU3NSw4ICsxNTc1LDggQEAgdm9pZCBTZWxlY3Rp
b25Db250cm9sbGVyOjp1cGRhdGVBcHBlYXJhbgogICAgIC8vIFdlIGNhbiBnZXQgaW50byBhIHN0
YXRlIHdoZXJlIHRoZSBzZWxlY3Rpb24gZW5kcG9pbnRzIG1hcCB0byB0aGUgc2FtZSBWaXNpYmxl
UG9zaXRpb24gd2hlbiBhIHNlbGVjdGlvbiBpcyBkZWxldGVkCiAgICAgLy8gYmVjYXVzZSB3ZSBk
b24ndCB5ZXQgbm90aWZ5IHRoZSBTZWxlY3Rpb25Db250cm9sbGVyIG9mIHRleHQgcmVtb3ZhbC4K
ICAgICBpZiAoc3RhcnRQb3MuaXNOb3ROdWxsKCkgJiYgZW5kUG9zLmlzTm90TnVsbCgpICYmIHNl
bGVjdGlvbi52aXNpYmxlU3RhcnQoKSAhPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKSB7Ci0gICAg
ICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHN0YXJ0UG9zLm5vZGUoKS0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5ub2RlKCkt
PnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciA9IHN0YXJ0
UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7CisgICAgICAgIFJlbmRlck9iamVjdCog
ZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgdmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0UG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIGVuZFJlbmRlcmVyLCBlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSk7CiAgICAgfQogfQpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAgdm9pZCBTZWxlY3Rpb25Db250
cm9sbGVyOjpwYWludERyYWdDYXJldAogI2lmIEVOQUJMRShURVhUX0NBUkVUKQogICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIqIGRyYWdDYXJldENvbnRyb2xsZXIgPSBtX2ZyYW1lLT5wYWdlKCktPmRy
YWdDYXJldENvbnRyb2xsZXIoKTsKICAgICBBU1NFUlQoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2Vs
ZWN0aW9uKCkuaXNDYXJldCgpKTsKLSAgICBpZiAoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0
aW9uKCkuc3RhcnQoKS5ub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgPT0gbV9mcmFtZSkKKyAg
ICBpZiAoZHJhZ0NhcmV0Q29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3RhcnQoKS5hbmNob3JOb2Rl
KCktPmRvY3VtZW50KCktPmZyYW1lKCkgPT0gbV9mcmFtZSkKICAgICAgICAgZHJhZ0NhcmV0Q29u
dHJvbGxlci0+cGFpbnRDYXJldChwLCB0eCwgdHksIGNsaXBSZWN0KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHApOwpAQCAtMTc1MSw3ICsxNzUxLDcgQEAgSFRNTEZvcm1FbGVtZW50KiBTZWxl
Y3Rpb25Db250cm9sbGVyOjpjdQogICAgIC8vIFN0YXJ0IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBh
Y3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Igd2hlcmUgdGhlIHNlbGVjdGlvbiBpcy4K
ICAgICBOb2RlKiBzdGFydCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCk7CiAg
ICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3RhcnQgPSB0aGlzLT5zdGFydCgpLm5vZGUoKTsKKyAg
ICAgICAgc3RhcnQgPSB0aGlzLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAKICAgICAvLyBU
cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQuCiAgICAg
Tm9kZSogbm9kZTsKQEAgLTE3ODIsMTIgKzE3ODIsMTIgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpyZXZlYWxTZWxlY3RpbwogICAgIH0KIAogICAgIFBvc2l0aW9uIHN0YXJ0ID0gdGhpcy0+
c3RhcnQoKTsKLSAgICBBU1NFUlQoc3RhcnQubm9kZSgpKTsKLSAgICBpZiAoc3RhcnQubm9kZSgp
ICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSkgeworICAgIEFTU0VSVChzdGFydC5kZXByZWNh
dGVkTm9kZSgpKTsKKyAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
b25seSBoYW5kbGVzIHNjcm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIncyBsYXllciwgYnV0CiAg
ICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNlY3QgbW9yZSB0aGFuIGp1
c3QgdGhhdC4KICAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80Nzk5ODk5Pi4KLSAgICAg
ICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5j
bG9zaW5nTGF5ZXIoKSkgeworICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgZmFsc2UsIGFsaWdubWVudCwg
YWxpZ25tZW50KTsKICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9u
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogU2V0U2VsZWN0aW9uQ29tbWFuZDo6U2V0U2VsZWN0aW9uQ29tbWFuZChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlNldFNl
bGVjdGlvbk9wdGlvbnMgb3B0aW9ucykKLSAgICA6IFNpbXBsZUVkaXRDb21tYW5kKHNlbGVjdGlv
bi5iYXNlKCkubm9kZSgpLT5kb2N1bWVudCgpKQorICAgIDogU2ltcGxlRWRpdENvbW1hbmQoc2Vs
ZWN0aW9uLmJhc2UoKS5hbmNob3JOb2RlKCktPmRvY3VtZW50KCkpCiAgICAgLCBtX29wdGlvbnMo
b3B0aW9ucykKICAgICAsIG1fc2VsZWN0aW9uVG9TZXQoc2VsZWN0aW9uKQogewpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzNDYsNyArMjM0Niw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VG
cm8KICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gcnVuRW5kID0gVmlzaWJsZVBvc2l0aW9u
KHJ1blN0YXJ0KS5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHJ1bkVuZC5pc05vdE51bGwoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UnVuUmFuZ2UtPnNl
dEVuZChydW5FbmQubm9kZSgpLCBydW5FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMp
OworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJ1blJhbmdlLT5zZXRFbmQocnVuRW5kLmRl
cHJlY2F0ZWROb2RlKCksIHJ1bkVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5n
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KgogICAgIFZpc2libGVTZWxlY3Rpb24g
Y3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAg
Ym9vbCBjaGFuZ2VTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uICE9IHNlbGVjdGlvbkZvcklu
c2VydGlvbjsKICAgICBTdHJpbmcgbmV3VGV4dCA9IHRleHQ7Ci0gICAgTm9kZSogc3RhcnROb2Rl
ID0gc2VsZWN0aW9uRm9ySW5zZXJ0aW9uLnN0YXJ0KCkubm9kZSgpOworICAgIE5vZGUqIHN0YXJ0
Tm9kZSA9IHNlbGVjdGlvbkZvckluc2VydGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgCiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KSAmJiBjb21wb3NpdGlvblR5cGUgIT0gVGV4dENvbXBvc2l0aW9uVXBkYXRlKSB7CiAgICAgICAg
IC8vIFNlbmQgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuIFRoZSBldmVudCBoYW5kbGVyIHdpbGwg
dXBkYXRlIHRleHQgaWYgbmVjZXNzYXJ5LgpAQCAtNDgzLDcgKzQ4Myw3IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXgKIAogICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZVN0YXJ0KGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIGNhcmV0IHNlbGVjdGlvbiBvbiBhbiBlbXB0eSBjZWxsLCB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCi0gICAgICAgIGlmIChpc0VtcHR5VGFibGVDZWxsKHZpc2libGVTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpCisgICAgICAgIGlmIChpc0VtcHR5VGFibGVDZWxs
KHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElmIHRoZSBjYXJldCBpcyBhdCB0aGUgc3RhcnQg
b2YgYSBwYXJhZ3JhcGggYWZ0ZXIgYSB0YWJsZSwgbW92ZSBjb250ZW50IGludG8gdGhlIGxhc3Qg
dGFibGUgY2VsbC4KQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoVGV4CiAKICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCk7CiAKLSAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51
bGFyaXR5ICYmIHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKSA9PSBzZWxlY3Rpb25Ub0Rl
bGV0ZS5zdGFydCgpLm5vZGUoKSAmJiBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIC0gc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpID4gMSkgeworICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVy
R3JhbnVsYXJpdHkgJiYgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSA9
PSBzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkgJiYgc2VsZWN0aW9u
VG9EZWxldGUuZW5kKCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHNlbGVjdGlvblRvRGVs
ZXRlLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDEpIHsKICAgICAgICAgICAg
IC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBVbmljb2RlIGNvZGUgcG9pbnRzIHRvIGJlIGRlbGV0
ZWQsIGFkanVzdCB0aGUgcmFuZ2UgdG8gbWF0Y2ggcGxhdGZvcm0gY29udmVudGlvbnMuCiAgICAg
ICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZS5zZXRXaXRob3V0VmFsaWRhdGlvbihzZWxlY3Rpb25U
b0RlbGV0ZS5lbmQoKSwgc2VsZWN0aW9uVG9EZWxldGUuZW5kKCkucHJldmlvdXMoQmFja3dhcmRE
ZWxldGlvbikpOwogICAgICAgICB9CkBAIC01NzAsOCArNTcwLDggQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICBpZiAodmlzaWJsZUVuZCA9PSBlbmRP
ZlBhcmFncmFwaCh2aXNpYmxlRW5kKSkKICAgICAgICAgICAgIGRvd25zdHJlYW1FbmQgPSB2aXNp
YmxlRW5kLm5leHQodHJ1ZSkuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCk7CiAgICAgICAg
IC8vIFdoZW4gZGVsZXRpbmcgdGFibGVzOiBTZWxlY3QgdGhlIHRhYmxlIGZpcnN0LCB0aGVuIHBl
cmZvcm0gdGhlIGRlbGV0aW9uCi0gICAgICAgIGlmIChkb3duc3RyZWFtRW5kLm5vZGUoKSAmJiBk
b3duc3RyZWFtRW5kLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBkb3duc3RyZWFtRW5kLm5vZGUoKS0+
cmVuZGVyZXIoKS0+aXNUYWJsZSgpICYmICFkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKGVuZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5v
ZGUoZG93bnN0cmVhbUVuZC5ub2RlKCkpLCBET1dOU1RSRUFNKSk7CisgICAgICAgIGlmIChkb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpICYmIGRvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVy
ZXIoKS0+aXNUYWJsZSgpICYmICFkb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkpIHsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVu
ZGluZ1NlbGVjdGlvbigpLmVuZCgpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSwgRE9XTlNUUkVBTSkpOwogICAgICAgICAgICAg
dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC01ODgsMTUgKzU4OCwxNSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgICAgICAvLyBXZSBjYW4ndCBsZXQgdGhl
IFZpc2libGVTZWxlY3Rpb24gY2xhc3MncyB2YWxpZGF0aW9uIGtpY2sgaW4gb3IgaXQnbGwgYWRq
dXN0IGZvciB1cyBiYXNlZCBvbgogICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgc3RhdGUgb2Yg
dGhlIGRvY3VtZW50IGFuZCB3ZSdsbCBnZXQgdGhlIHdyb25nIHJlc3VsdC4KICAgICAgICAgICAg
IFBvc2l0aW9uIGV4dGVudCA9IHN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCk7Ci0gICAgICAgICAg
ICBpZiAoZXh0ZW50Lm5vZGUoKSAhPSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5ub2RlKCkpCisg
ICAgICAgICAgICBpZiAoZXh0ZW50LmRlcHJlY2F0ZWROb2RlKCkgIT0gc2VsZWN0aW9uVG9EZWxl
dGUuZW5kKCkuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgICAgICBleHRlbnQgPSBzZWxl
Y3Rpb25Ub0RlbGV0ZS5leHRlbnQoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIGludCBleHRyYUNoYXJhY3RlcnM7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblRv
RGVsZXRlLnN0YXJ0KCkubm9kZSgpID09IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXByZWNhdGVk
Tm9kZSgpID09IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIGV4dHJhQ2hhcmFjdGVycyA9IHNlbGVjdGlvblRvRGVsZXRlLmVuZCgp
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzZWxlY3Rpb25Ub0RlbGV0ZS5zdGFydCgpLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBleHRyYUNoYXJhY3RlcnMgPSBzZWxlY3Rpb25Ub0RlbGV0ZS5lbmQoKS5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgICAgICAgICAgICAgIGV4dGVudCA9IFBvc2l0aW9u
KGV4dGVudC5ub2RlKCksIGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpICsgZXh0cmFD
aGFyYWN0ZXJzLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICAgICAg
ICAgICAgICBleHRlbnQgPSBQb3NpdGlvbihleHRlbnQuZGVwcmVjYXRlZE5vZGUoKSwgZXh0ZW50
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgKyBleHRyYUNoYXJhY3RlcnMsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2Vs
ZWN0aW9uQWZ0ZXJVbmRvLnNldFdpdGhvdXRWYWxpZGF0aW9uKHN0YXJ0aW5nU2VsZWN0aW9uKCku
c3RhcnQoKSwgZXh0ZW50KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsx
MDYsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpwcmV2aW91CiBQb3NpdGlv
biBWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKCkgY29uc3QK
IHsKICAgICBQb3NpdGlvbiBwID0gbV9kZWVwUG9zaXRpb247Ci0gICAgaWYgKCFwLm5vZGUoKSkK
KyAgICBpZiAoIXAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAKICAgICBQb3NpdGlvbiBkb3duc3RyZWFtU3RhcnQgPSBwLmRvd25zdHJlYW0oKTsKQEAgLTI0
Miw3ICsyNDIsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpsZWZ0KGJvCiBQ
b3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0VmlzdWFsbHlEaXN0aW5jdENhbmRpZGF0ZSgp
IGNvbnN0CiB7CiAgICAgUG9zaXRpb24gcCA9IG1fZGVlcFBvc2l0aW9uOwotICAgIGlmICghcC5u
b2RlKCkpCisgICAgaWYgKCFwLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIHJldHVybiBQb3Np
dGlvbigpOwogCiAgICAgUG9zaXRpb24gZG93bnN0cmVhbVN0YXJ0ID0gcC5kb3duc3RyZWFtKCk7
CkBAIC0zODQsNyArMzg0LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6aG9u
b3JFZAogICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChkZWVwRXF1
aXZhbGVudCgpKTsKICAgICAKICAgICAvLyBSZXR1cm4gZW1wdHkgcG9zaXRpb24gaWYgcG9zIGlz
IG5vdCBzb21ld2hlcmUgaW5zaWRlIHRoZSBlZGl0YWJsZSByZWdpb24gY29udGFpbmluZyB0aGlz
IHBvc2l0aW9uCi0gICAgaWYgKGhpZ2hlc3RSb290ICYmICFwb3MuZGVlcEVxdWl2YWxlbnQoKS5u
b2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKKyAgICBpZiAoaGlnaGVzdFJvb3Qg
JiYgIXBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9m
KGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgICAg
ICAKICAgICAvLyBSZXR1cm4gcG9zIGl0c2VsZiBpZiB0aGUgdHdvIGFyZSBmcm9tIHRoZSB2ZXJ5
IHNhbWUgZWRpdGFibGUgcmVnaW9uLCBvciBib3RoIGFyZSBub24tZWRpdGFibGUKQEAgLTQxMCw3
ICs0MTAsNyBAQCBWaXNpYmxlUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9uOjpob25vckVkCiAgICAg
Tm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KGRlZXBFcXVpdmFsZW50KCkp
OwogICAgIAogICAgIC8vIFJldHVybiBlbXB0eSBwb3NpdGlvbiBpZiBwb3MgaXMgbm90IHNvbWV3
aGVyZSBpbnNpZGUgdGhlIGVkaXRhYmxlIHJlZ2lvbiBjb250YWluaW5nIHRoaXMgcG9zaXRpb24K
LSAgICBpZiAoaGlnaGVzdFJvb3QgJiYgIXBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNE
ZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgIGlmIChoaWdoZXN0Um9vdCAmJiAhcG9zLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJv
b3QpKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAgICAgLy8gUmV0
dXJuIHBvcyBpdHNlbGYgaWYgdGhlIHR3byBhcmUgZnJvbSB0aGUgdmVyeSBzYW1lIGVkaXRhYmxl
IHJlZ2lvbiwgb3IgYm90aCBhcmUgbm9uLWVkaXRhYmxlCkBAIC00NTEsNyArNDUxLDcgQEAgUG9z
aXRpb24gVmlzaWJsZVBvc2l0aW9uOjpjYW5vbmljYWxQb3NpdAogICAgIC8vIFRvIGZpeCB0aGlz
LCB3ZSBuZWVkIHRvIGVpdGhlciBhKSBhZGQgY29kZSB0byBhbGwgcGFpbnRDYXJldHMgdG8gcGFz
cyB0aGUgcmVzcG9uc2liaWxpdHkgb2ZmIHRvCiAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIHJlbmRl
cmVyIGZvciBWaXNpYmxlUG9zaXRpb24ncyBsaWtlIHRoZXNlLCBvciBiKSBjYW5vbmljYWxpemUg
dG8gdGhlIHJpZ2h0bW9zdCBjYW5kaWRhdGUKICAgICAvLyB1bmxlc3MgdGhlIGFmZmluaXR5IGlz
IHVwc3RyZWFtLgotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5ub2RlKCk7CisgICAgTm9kZSog
bm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIApAQCAtNDY5LDggKzQ2OSw4IEBAIFBvc2l0aW9uIFZpc2li
bGVQb3NpdGlvbjo6Y2Fub25pY2FsUG9zaXQKICAgICAvLyBibG9ja3Mgb3IgZW50ZXIgbmV3IG9u
ZXMpLCB3ZSBzZWFyY2ggZm9yd2FyZCBhbmQgYmFja3dhcmQgdW50aWwgd2UgZmluZCBvbmUuCiAg
ICAgUG9zaXRpb24gbmV4dCA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShuZXh0Q2FuZGlkYXRlKHBv
c2l0aW9uKSk7CiAgICAgUG9zaXRpb24gcHJldiA9IGNhbm9uaWNhbGl6ZUNhbmRpZGF0ZShwcmV2
aW91c0NhbmRpZGF0ZShwb3NpdGlvbikpOwotICAgIE5vZGUqIG5leHROb2RlID0gbmV4dC5ub2Rl
KCk7Ci0gICAgTm9kZSogcHJldk5vZGUgPSBwcmV2Lm5vZGUoKTsKKyAgICBOb2RlKiBuZXh0Tm9k
ZSA9IG5leHQuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXYuZGVw
cmVjYXRlZE5vZGUoKTsKIAogICAgIC8vIFRoZSBuZXcgcG9zaXRpb24gbXVzdCBiZSBpbiB0aGUg
c2FtZSBlZGl0YWJsZSBlbGVtZW50LiBFbmZvcmNlIHRoYXQgZmlyc3QuCiAgICAgLy8gVW5sZXNz
IHRoZSBkZXNjZW50IGlzIGZyb20gYSBub24tZWRpdGFibGUgaHRtbCBlbGVtZW50IHRvIGFuIGVk
aXRhYmxlIGJvZHkuCkBAIC00ODEsNyArNDgxLDcgQEAgUG9zaXRpb24gVmlzaWJsZVBvc2l0aW9u
OjpjYW5vbmljYWxQb3NpdAogICAgICAgICAKICAgICAvLyBJZiB0aGUgaHRtbCBlbGVtZW50IGlz
IGVkaXRhYmxlLCBkZXNjZW5kaW5nIGludG8gaXRzIGJvZHkgd2lsbCBsb29rIGxpa2UgYSBkZXNj
ZW50IAogICAgIC8vIGZyb20gbm9uLWVkaXRhYmxlIHRvIGVkaXRhYmxlIGNvbnRlbnQgc2luY2Ug
cm9vdEVkaXRhYmxlRWxlbWVudCgpIGFsd2F5cyBzdG9wcyBhdCB0aGUgYm9keS4KLSAgICBpZiAo
KGVkaXRpbmdSb290ICYmIGVkaXRpbmdSb290LT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB8fCBwb3Np
dGlvbi5ub2RlKCktPmlzRG9jdW1lbnROb2RlKCkpCisgICAgaWYgKChlZGl0aW5nUm9vdCAmJiBl
ZGl0aW5nUm9vdC0+aGFzVGFnTmFtZShodG1sVGFnKSkgfHwgcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIG5leHQuaXNOb3ROdWxsKCkg
PyBuZXh0IDogcHJldjsKICAgICAgICAgCiAgICAgYm9vbCBwcmV2SXNJblNhbWVFZGl0YWJsZUVs
ZW1lbnQgPSBwcmV2Tm9kZSAmJiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwcmV2KSA9PSBlZGl0
aW5nUm9vdDsKQEAgLTUxMCwxMCArNTEwLDEwIEBAIFVDaGFyMzIgVmlzaWJsZVBvc2l0aW9uOjpj
aGFyYWN0ZXJBZnRlcigKICAgICAvLyBXZSBjYW5vbmljYWxpemUgdG8gdGhlIGZpcnN0IG9mIHR3
byBlcXVpdmFsZW50IGNhbmRpZGF0ZXMsIGJ1dCB0aGUgc2Vjb25kIG9mIHRoZSB0d28gY2FuZGlk
YXRlcwogICAgIC8vIGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIGluc2lkZSB0aGUgdGV4dCBub2Rl
IGNvbnRhaW5pbmcgdGhlIGNoYXJhY3RlciBhZnRlciB0aGlzIHZpc2libGUgcG9zaXRpb24uCiAg
ICAgUG9zaXRpb24gcG9zID0gbV9kZWVwUG9zaXRpb24uZG93bnN0cmVhbSgpOwotICAgIE5vZGUq
IG5vZGUgPSBwb3Mubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLm5vZGUoKSk7
CisgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zLmRlcHJlY2F0ZWRO
b2RlKCkpOwogICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHROb2RlLT5sZW5ndGgoKTsKICAgICBpZiAo
b2Zmc2V0ID49IGxlbmd0aCkKQEAgLTUyNyw3ICs1MjcsNyBAQCBVQ2hhcjMyIFZpc2libGVQb3Np
dGlvbjo6Y2hhcmFjdGVyQWZ0ZXIoCiAKIEludFJlY3QgVmlzaWJsZVBvc2l0aW9uOjpsb2NhbENh
cmV0UmVjdChSZW5kZXJPYmplY3QqJiByZW5kZXJlcikgY29uc3QKIHsKLSAgICBOb2RlKiBub2Rl
ID0gbV9kZWVwUG9zaXRpb24ubm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBtX2RlZXBQb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkgewogICAgICAgICByZW5kZXJlciA9
IDA7CiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBW
aXNpYmxlUG9zaXRpb246OmRlYnVnUG9zaXRpb24oY29ucwogICAgIGlmIChpc051bGwoKSkKICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiBudWxsXG4iLCBtc2cpOwogICAg
IGVsc2UgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlBvc2l0aW9uIFslc106ICVzLCAiLCBt
c2csIG1fZGVlcFBvc2l0aW9uLm5vZGUoKS0+bm9kZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJQb3NpdGlvbiBbJXNdOiAlcywgIiwgbXNnLCBtX2RlZXBQ
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpLT5ub2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICBtX2RlZXBQb3NpdGlvbi5zaG93QW5jaG9yVHlwZUFuZE9mZnNldCgpOwogICAgIH0KIH0K
QEAgLTYwMSw3ICs2MDEsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlz
aWJsCiAgICAgCiAgICAgUG9zaXRpb24gcyA9IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZSA9IGVuZC5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRl
KHMubm9kZSgpLT5kb2N1bWVudCgpLCBzLm5vZGUoKSwgcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpLCBlLm5vZGUoKSwgZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICByZXR1cm4g
UmFuZ2U6OmNyZWF0ZShzLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgcy5kZXByZWNhdGVkTm9k
ZSgpLCBzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGUuZGVwcmVjYXRlZE5vZGUoKSwgZS5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0Vmlz
aWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCkBAIC02MjIs
NyArNjIyLDcgQEAgYm9vbCBzZXRTdGFydChSYW5nZSAqciwgY29uc3QgVmlzaWJsZVBvcwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgUG9zaXRpb24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIGludCBjb2RlID0g
MDsKLSAgICByLT5zZXRTdGFydChwLm5vZGUoKSwgcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
LCBjb2RlKTsKKyAgICByLT5zZXRTdGFydChwLmRlcHJlY2F0ZWROb2RlKCksIHAuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIApAQCAt
NjMyLDcgKzYzMiw3IEBAIGJvb2wgc2V0RW5kKFJhbmdlICpyLCBjb25zdCBWaXNpYmxlUG9zaXQK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFBvc2l0aW9uIHAgPSB2aXNpYmxlUG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpbnQgY29k
ZSA9IDA7Ci0gICAgci0+c2V0RW5kKHAubm9kZSgpLCBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCksIGNvZGUpOworICAgIHItPnNldEVuZChwLmRlcHJlY2F0ZWROb2RlKCksIHAuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgY29kZSk7CiAgICAgcmV0dXJuIGNvZGUgPT0gMDsKIH0KIApAQCAt
NjQxLDcgKzY0MSw3IEBAIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoY29uc3QK
ICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gTlVMTDsK
IAotICAgIHJldHVybiB2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICByZXR1cm4gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpOwogfQogCiBib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZ2aXNpYmxlUG9zaXRpb24sIGNvbnN0IE5vZGUgKm5vZGUpCkBAIC02NDksMTEg
KzY0OSwxMSBAQCBib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgCiAgICAg
aWYgKHZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAotICAgIGlmICghdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihub2RlKSkKKyAgICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyA9IHZpc2li
bGVQb3NpdGlvbi5wcmV2aW91cygpOwotICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAh
cHJldmlvdXMuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPmlzRGVzY2VuZGFudE9mKG5vZGUpOwor
ICAgIHJldHVybiBwcmV2aW91cy5pc051bGwoKSB8fCAhcHJldmlvdXMuZGVlcEVxdWl2YWxlbnQo
KS5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKTsKIH0KIAogYm9vbCBpc0xh
c3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ2aXNpYmxlUG9z
aXRpb24sIGNvbnN0IE5vZGUgKm5vZGUpCkBAIC02NjEsMTEgKzY2MSwxMSBAQCBib29sIGlzTGFz
dFZpc2libGVQb3NpdGlvbkluTm9kZShjb25zdCBWCiAgICAgaWYgKHZpc2libGVQb3NpdGlvbi5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghdmlzaWJsZVBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKKyAg
ICBpZiAoIXZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkt
PmlzRGVzY2VuZGFudE9mKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHQgPSB2aXNpYmxlUG9zaXRpb24ubmV4dCgp
OwotICAgIHJldHVybiBuZXh0LmlzTnVsbCgpIHx8ICFuZXh0LmRlZXBFcXVpdmFsZW50KCkubm9k
ZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlKTsKKyAgICByZXR1cm4gbmV4dC5pc051bGwoKSB8fCAh
bmV4dC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG5v
ZGUpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgx
LDcgQEAgcHVibGljOgogICAgIFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXIoKSBjb25zdDsKICAgICBV
Q2hhcjMyIGNoYXJhY3RlckJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIHByZXZpb3VzKCkuY2hhcmFj
dGVyQWZ0ZXIoKTsgfQogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpID8gbV9kZWVwUG9zaXRpb24ubm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgOiAwOyB9CisgICAgRWxlbWVudCogcm9vdEVkaXRh
YmxlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVlcFBvc2l0aW9uLmlzTm90TnVsbCgpID8g
bV9kZWVwUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpIDog
MDsgfQogICAgIAogICAgIHZvaWQgZ2V0SW5saW5lQm94QW5kT2Zmc2V0KElubGluZUJveComIGlu
bGluZUJveCwgaW50JiBjYXJldE9mZnNldCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIyLDcgKzEyMiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246
OmZpcnMKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBtX3N0YXJ0LnBh
cmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IG1fZW5kLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0Lm5v
ZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CisgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUo
c3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKTsKIH0KIAogUGFzc1Jl
ZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdApA
QCAtMTM0LDcgKzEzNCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRv
Tm8KICAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3aGljaCBt
b2RpZnkgdGhlIERPTS4KICAgICAvLyBGYWlsaW5nIHRvIGNhbGwgdGhpcyBjYW4gcmVzdWx0IGlu
IGVxdWl2YWxlbnRYWFhQb3NpdGlvbiBjYWxscyByZXR1cm5pbmcKICAgICAvLyBpbmNvcnJlY3Qg
cmVzdWx0cy4KLSAgICBtX3N0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7
CisgICAgbV9zdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwog
CiAgICAgLy8gQ2hlY2sgYWdhaW4sIGJlY2F1c2UgdXBkYXRpbmcgbGF5b3V0IGNhbiBjbGVhciB0
aGUgc2VsZWN0aW9uLgogICAgIGlmIChpc05vbmUoKSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBQYXNz
UmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vCiAKICAgICAvLyBWaXNpYmxlU2Vs
ZWN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYWx3YXlzIGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3Rv
ciB3aWxsIEFTU0VSVAogICAgIC8vIGlmIGEgdmFsaWQgcmFuZ2UgY291bGQgbm90IGJlIGNyZWF0
ZWQsIHdoaWNoIGlzIGZpbmUgZm9yIHRoaXMgY2FsbHNpdGUuCi0gICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUocy5ub2RlKCktPmRvY3VtZW50KCksIHMsIGUpOworICAgIHJldHVybiBSYW5nZTo6Y3Jl
YXRlKHMuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzLCBlKTsKIH0KIAogYm9vbCBWaXNpYmxl
U2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSkKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVz
aW5nR3JhbnVsCiAKIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29u
c3QgUG9zaXRpb24mIHBvcykKIHsKLSAgICBOb2RlKiBuID0gcG9zLm5vZGUoKTsKKyAgICBOb2Rl
KiBuID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1cm4g
MDsKICAgICBEb2N1bWVudCogZCA9IG4tPmRvY3VtZW50KCk7CkBAIC0yMDgsNyArMjA4LDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZQogCiAgICAgUG9zaXRpb24g
c3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKICAgICBzZWFyY2hSYW5nZS0+
c2VsZWN0Tm9kZUNvbnRlbnRzKGJvdW5kYXJ5LCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldFN0
YXJ0KHN0YXJ0Lm5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwor
ICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CiAKICAgICBBU1NFUlQoIWVjKTsKICAgICBp
ZiAoZWMpCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRTdGFy
dEFuZEVuZEZybwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHdvcmRFbmQoZW5kT2ZXb3Jk
KG9yaWdpbmFsRW5kLCBzaWRlKSk7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kKHdv
cmRFbmQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChv
cmlnaW5hbEVuZCkgJiYgIWlzRW1wdHlUYWJsZUNlbGwobV9zdGFydC5ub2RlKCkpKSB7CisgICAg
ICAgICAgICBpZiAoaXNFbmRPZlBhcmFncmFwaChvcmlnaW5hbEVuZCkgJiYgIWlzRW1wdHlUYWJs
ZUNlbGwobV9zdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIFNl
bGVjdCB0aGUgcGFyYWdyYXBoIGJyZWFrICh0aGUgc3BhY2UgZnJvbSB0aGUgZW5kIG9mIGEgcGFy
YWdyYXBoIHRvIHRoZSBzdGFydCBvZiAKICAgICAgICAgICAgICAgICAvLyB0aGUgbmV4dCBvbmUp
IHRvIG1hdGNoIFRleHRFZGl0LgogICAgICAgICAgICAgICAgIGVuZCA9IHdvcmRFbmQubmV4dCgp
OwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0
aW9uVG8KICAgICBOb2RlKiBzdGFydFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KG1fc3RhcnQp
OwogICAgIE5vZGUqIGVuZFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KG1fZW5kKTsKICAgICAK
LSAgICBOb2RlKiBiYXNlRWRpdGFibGVBbmNlc3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3Io
bV9iYXNlLm5vZGUoKSk7CisgICAgTm9kZSogYmFzZUVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RF
ZGl0YWJsZUFuY2VzdG9yKG1fYmFzZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAKICAgICAvLyBU
aGUgYmFzZSwgc3RhcnQgYW5kIGVuZCBhcmUgYWxsIGluIHRoZSBzYW1lIHJlZ2lvbi4gIE5vIGFk
anVzdG1lbnQgbmVjZXNzYXJ5LgogICAgIGlmIChiYXNlUm9vdCA9PSBzdGFydFJvb3QgJiYgYmFz
ZVJvb3QgPT0gZW5kUm9vdCkKQEAgLTQ5MiwxNyArNDkyLDE3IEBAIHZvaWQgVmlzaWJsZVNlbGVj
dGlvbjo6YWRqdXN0U2VsZWN0aW9uVG8KICAgICAKICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBl
bmRzIGluIGVkaXRhYmxlIGNvbnRlbnQgb3Igbm9uLWVkaXRhYmxlIGNvbnRlbnQgaW5zaWRlIGEg
ZGlmZmVyZW50IGVkaXRhYmxlIGFuY2VzdG9yLCAKICAgICAgICAgLy8gbW92ZSBiYWNrd2FyZCB1
bnRpbCBub24tZWRpdGFibGUgY29udGVudCBpbnNpZGUgdGhlIHNhbWUgbG93ZXN0IGVkaXRhYmxl
IGFuY2VzdG9yIGlzIHJlYWNoZWQuCi0gICAgICAgIE5vZGUqIGVuZEVkaXRhYmxlQW5jZXN0b3Ig
PSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fZW5kLm5vZGUoKSk7CisgICAgICAgIE5vZGUqIGVu
ZEVkaXRhYmxlQW5jZXN0b3IgPSBsb3dlc3RFZGl0YWJsZUFuY2VzdG9yKG1fZW5kLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICBpZiAoZW5kUm9vdCB8fCBlbmRFZGl0YWJsZUFuY2VzdG9yICE9
IGJhc2VFZGl0YWJsZUFuY2VzdG9yKSB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFBvc2l0
aW9uIHAgPSBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUobV9lbmQpOwogICAgICAg
ICAgICAgTm9kZSogc2hhZG93QW5jZXN0b3IgPSBlbmRSb290ID8gZW5kUm9vdC0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOwogICAgICAgICAgICAgaWYgKHAuaXNOdWxsKCkgJiYgZW5kUm9vdCAm
JiAoc2hhZG93QW5jZXN0b3IgIT0gZW5kUm9vdCkpCiAgICAgICAgICAgICAgICAgcCA9IGxhc3RE
ZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7Ci0gICAgICAgICAgICB3
aGlsZSAocC5pc05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5ub2RlKCkp
ID09IGJhc2VFZGl0YWJsZUFuY2VzdG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAocC5pc05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0
b3IocC5kZXByZWNhdGVkTm9kZSgpKSA9PSBiYXNlRWRpdGFibGVBbmNlc3RvciAmJiAhaXNFZGl0
YWJsZVBvc2l0aW9uKHApKSkgewogICAgICAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBlZGl0YWJs
ZVJvb3RGb3JQb3NpdGlvbihwKTsKICAgICAgICAgICAgICAgICBzaGFkb3dBbmNlc3RvciA9IHJv
b3QgPyByb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7Ci0gICAgICAgICAgICAgICAgcCA9
IGlzQXRvbWljTm9kZShwLm5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShwLm5v
ZGUoKSkgOiBwcmV2aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CisgICAgICAgICAg
ICAgICAgcCA9IGlzQXRvbWljTm9kZShwLmRlcHJlY2F0ZWROb2RlKCkpID8gcG9zaXRpb25JblBh
cmVudEJlZm9yZU5vZGUocC5kZXByZWNhdGVkTm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShwKTsKICAgICAgICAgICAgICAgICBpZiAocC5pc051bGwoKSAmJiAoc2hh
ZG93QW5jZXN0b3IgIT0gcm9vdCkpCiAgICAgICAgICAgICAgICAgICAgIHAgPSBsYXN0RGVlcEVk
aXRpbmdQb3NpdGlvbkZvck5vZGUoc2hhZG93QW5jZXN0b3IpOwogICAgICAgICAgICAgfQpAQCAt
NTIyLDE2ICs1MjIsMTYgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1c3RTZWxlY3Rpb25U
bwogCiAgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gc3RhcnRzIGluIGVkaXRhYmxlIGNvbnRlbnQg
b3Igbm9uLWVkaXRhYmxlIGNvbnRlbnQgaW5zaWRlIGEgZGlmZmVyZW50IGVkaXRhYmxlIGFuY2Vz
dG9yLCAKICAgICAgICAgLy8gbW92ZSBmb3J3YXJkIHVudGlsIG5vbi1lZGl0YWJsZSBjb250ZW50
IGluc2lkZSB0aGUgc2FtZSBsb3dlc3QgZWRpdGFibGUgYW5jZXN0b3IgaXMgcmVhY2hlZC4KLSAg
ICAgICAgTm9kZSogc3RhcnRFZGl0YWJsZUFuY2VzdG9yID0gbG93ZXN0RWRpdGFibGVBbmNlc3Rv
cihtX3N0YXJ0Lm5vZGUoKSk7ICAgICAgCisgICAgICAgIE5vZGUqIHN0YXJ0RWRpdGFibGVBbmNl
c3RvciA9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9zdGFydC5kZXByZWNhdGVkTm9kZSgpKTsg
ICAgICAKICAgICAgICAgaWYgKHN0YXJ0Um9vdCB8fCBzdGFydEVkaXRhYmxlQW5jZXN0b3IgIT0g
YmFzZUVkaXRhYmxlQW5jZXN0b3IpIHsKICAgICAgICAgICAgIFBvc2l0aW9uIHAgPSBuZXh0Vmlz
dWFsbHlEaXN0aW5jdENhbmRpZGF0ZShtX3N0YXJ0KTsKICAgICAgICAgICAgIE5vZGUqIHNoYWRv
d0FuY2VzdG9yID0gc3RhcnRSb290ID8gc3RhcnRSb290LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6
IDA7CiAgICAgICAgICAgICBpZiAocC5pc051bGwoKSAmJiBzdGFydFJvb3QgJiYgKHNoYWRvd0Fu
Y2VzdG9yICE9IHN0YXJ0Um9vdCkpCiAgICAgICAgICAgICAgICAgcCA9IHBvc2l0aW9uQmVmb3Jl
Tm9kZShzaGFkb3dBbmNlc3Rvcik7Ci0gICAgICAgICAgICB3aGlsZSAocC5pc05vdE51bGwoKSAm
JiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5ub2RlKCkpID09IGJhc2VFZGl0YWJsZUFuY2Vz
dG9yICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkpKSB7CisgICAgICAgICAgICB3aGlsZSAocC5p
c05vdE51bGwoKSAmJiAhKGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IocC5kZXByZWNhdGVkTm9kZSgp
KSA9PSBiYXNlRWRpdGFibGVBbmNlc3RvciAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApKSkgewog
ICAgICAgICAgICAgICAgIE5vZGUqIHJvb3QgPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihwKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3dBbmNlc3RvciA9IHJvb3QgPyByb290LT5zaGFkb3dBbmNl
c3Rvck5vZGUoKSA6IDA7Ci0gICAgICAgICAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLm5vZGUo
KSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHAubm9kZSgpKSA6IG5leHRWaXN1YWxseURp
c3RpbmN0Q2FuZGlkYXRlKHApOworICAgICAgICAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5k
ZXByZWNhdGVkTm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5kZXByZWNhdGVk
Tm9kZSgpKSA6IG5leHRWaXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwogICAgICAgICAgICAg
ICAgIGlmIChwLmlzTnVsbCgpICYmIChzaGFkb3dBbmNlc3RvciAhPSByb290KSkKICAgICAgICAg
ICAgICAgICAgICAgcCA9IHBvc2l0aW9uQmVmb3JlTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAg
ICAgICAgICB9CkBAIC01NTEsNyArNTUxLDcgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphZGp1
c3RTZWxlY3Rpb25UbwogICAgIH0KICAgICAKICAgICAvLyBDb3JyZWN0IHRoZSBleHRlbnQgaWYg
bmVjZXNzYXJ5LgotICAgIGlmIChiYXNlRWRpdGFibGVBbmNlc3RvciAhPSBsb3dlc3RFZGl0YWJs
ZUFuY2VzdG9yKG1fZXh0ZW50Lm5vZGUoKSkpCisgICAgaWYgKGJhc2VFZGl0YWJsZUFuY2VzdG9y
ICE9IGxvd2VzdEVkaXRhYmxlQW5jZXN0b3IobV9leHRlbnQuZGVwcmVjYXRlZE5vZGUoKSkpCiAg
ICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlSXNGaXJzdCA/IG1fZW5kIDogbV9zdGFydDsKIH0KIApA
QCAtNTcyLDcgKzU3Miw3IEBAIEVsZW1lbnQqIFZpc2libGVTZWxlY3Rpb246OnJvb3RFZGl0YWJs
ZUUKIAogTm9kZSogVmlzaWJsZVNlbGVjdGlvbjo6c2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gc3RhcnQoKS5ub2RlKCkgPyBzdGFydCgpLm5vZGUoKS0+c2hhZG93VHJl
ZVJvb3ROb2RlKCkgOiAwOworICAgIHJldHVybiBzdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkgPyBz
dGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd1RyZWVSb290Tm9kZSgpIDogMDsKIH0KIAog
I2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw5ICs5NSw5IEBAIGJvb2wgY2FuSGF2ZUNoaWxkcmVu
Rm9yRWRpdGluZyhjb25zdCBOb2QKIC8vIGNvdWxkIGJlIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBP
bmx5IHdvcmtzIGZvciBub24tbnVsbCB2YWx1ZXMuCiBpbnQgY29tcGFyZVBvc2l0aW9ucyhjb25z
dCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7Ci0gICAgTm9kZSogbm9kZUEgPSBh
Lm5vZGUoKTsKKyAgICBOb2RlKiBub2RlQSA9IGEuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBBU1NF
UlQobm9kZUEpOwotICAgIE5vZGUqIG5vZGVCID0gYi5ub2RlKCk7CisgICAgTm9kZSogbm9kZUIg
PSBiLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgQVNTRVJUKG5vZGVCKTsKICAgICBpbnQgb2Zmc2V0
QSA9IGEuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgb2Zmc2V0QiA9IGIuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBpbnQgY29tcGFyZVBv
c2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpCiAKIE5vZGUqIGhpZ2hlc3RFZGl0YWJsZVJvb3Qo
Y29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIE5vZGUqIG5vZGUgPSBwb3NpdGlvbi5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCkBAIC0xNzMsNyArMTczLDcg
QEAgTm9kZSogbG93ZXN0RWRpdGFibGVBbmNlc3RvcihOb2RlKiBub2RlKQogCiBib29sIGlzRWRp
dGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKIHsKLSAgICBOb2RlKiBub2RlID0gcC5u
b2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC0xODUsMTQgKzE4NSwxNCBA
QCBib29sIGlzRWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgCiAKIGJvb2wgaXNBdFVu
c3BsaXR0YWJsZUVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKLSAgICBOb2RlKiBub2Rl
ID0gcG9zLm5vZGUoKTsKKyAgICBOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAg
ICAgcmV0dXJuIChub2RlID09IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHBvcykgfHwgbm9kZSA9
PSBlbmNsb3NpbmdOb2RlT2ZUeXBlKHBvcywgJmlzVGFibGVDZWxsKSk7CiB9CiAgICAgCiAgICAg
CiBib29sIGlzUmljaGx5RWRpdGFibGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkKIHsKLSAg
ICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5v
ZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBA
IC0yMDQsNyArMjA0LDcgQEAgYm9vbCBpc1JpY2hseUVkaXRhYmxlUG9zaXRpb24oY29uc3QgUG9z
aQogCiBFbGVtZW50KiBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcCkK
IHsKLSAgICBOb2RlKiBub2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVj
YXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAK
QEAgLTI4MiwxNCArMjgyLDE0IEBAIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRp
b25BZnQKIAogICAgIFBvc2l0aW9uIHAgPSBwb3NpdGlvbjsKICAgICAKLSAgICBpZiAoTm9kZSog
c2hhZG93QW5jZXN0b3IgPSBwLm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCkpCi0gICAgICAg
IGlmIChzaGFkb3dBbmNlc3RvciAhPSBwLm5vZGUoKSkKKyAgICBpZiAoTm9kZSogc2hhZG93QW5j
ZXN0b3IgPSBwLmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQorICAgICAg
ICBpZiAoc2hhZG93QW5jZXN0b3IgIT0gcC5kZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAg
cCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShzaGFkb3dBbmNlc3Rvcik7CiAgICAg
Ci0gICAgd2hpbGUgKHAubm9kZSgpICYmICFpc0VkaXRhYmxlUG9zaXRpb24ocCkgJiYgcC5ub2Rl
KCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKLSAgICAgICAgcCA9IGlzQXRvbWljTm9k
ZShwLm5vZGUoKSkgPyBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHAubm9kZSgpKSA6IG5leHRW
aXN1YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOworICAgIHdoaWxlIChwLmRlcHJlY2F0ZWROb2Rl
KCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVz
Y2VuZGFudE9mKGhpZ2hlc3RSb290KSkKKyAgICAgICAgcCA9IGlzQXRvbWljTm9kZShwLmRlcHJl
Y2F0ZWROb2RlKCkpID8gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShwLmRlcHJlY2F0ZWROb2Rl
KCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgCi0gICAgaWYgKHAu
bm9kZSgpICYmIHAubm9kZSgpICE9IGhpZ2hlc3RSb290ICYmICFwLm5vZGUoKS0+aXNEZXNjZW5k
YW50T2YoaGlnaGVzdFJvb3QpKQorICAgIGlmIChwLmRlcHJlY2F0ZWROb2RlKCkgJiYgcC5kZXBy
ZWNhdGVkTm9kZSgpICE9IGhpZ2hlc3RSb290ICYmICFwLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVz
Y2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwogICAgIAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocCk7CkBAIC0zMDMsMTQgKzMwMywx
NCBAQCBWaXNpYmxlUG9zaXRpb24gbGFzdEVkaXRhYmxlUG9zaXRpb25CZWZvCiAKICAgICBQb3Np
dGlvbiBwID0gcG9zaXRpb247CiAgICAgCi0gICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0g
cC5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpKQotICAgICAgICBpZiAoc2hhZG93QW5jZXN0
b3IgIT0gcC5ub2RlKCkpCisgICAgaWYgKE5vZGUqIHNoYWRvd0FuY2VzdG9yID0gcC5kZXByZWNh
dGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSkKKyAgICAgICAgaWYgKHNoYWRvd0FuY2Vz
dG9yICE9IHAuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgIHAgPSBmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKHNoYWRvd0FuY2VzdG9yKTsKICAgICAKLSAgICB3aGlsZSAocC5u
b2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAmJiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50
T2YoaGlnaGVzdFJvb3QpKQotICAgICAgICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBv
c2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHAubm9kZSgpKSA6IHByZXZpb3VzVmlzdWFsbHlEaXN0
aW5jdENhbmRpZGF0ZShwKTsKKyAgICB3aGlsZSAocC5kZXByZWNhdGVkTm9kZSgpICYmICFpc0Vk
aXRhYmxlUG9zaXRpb24ocCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZiho
aWdoZXN0Um9vdCkpCisgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5kZXByZWNhdGVkTm9kZSgp
KSA/IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKHAuZGVwcmVjYXRlZE5vZGUoKSkgOiBwcmV2
aW91c1Zpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgCi0gICAgaWYgKHAubm9kZSgp
ICYmIHAubm9kZSgpICE9IGhpZ2hlc3RSb290ICYmICFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
aGlnaGVzdFJvb3QpKQorICAgIGlmIChwLmRlcHJlY2F0ZWROb2RlKCkgJiYgcC5kZXByZWNhdGVk
Tm9kZSgpICE9IGhpZ2hlc3RSb290ICYmICFwLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAg
IAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocCk7CkBAIC00MjEsOSArNDIxLDkgQEAgYm9v
bCBpc1NwZWNpYWxFbGVtZW50KGNvbnN0IE5vZGUgKm4pCiAKIHN0YXRpYyBOb2RlKiBmaXJzdElu
U3BlY2lhbEVsZW1lbnQoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKLSAgICAvLyBGSVhNRTogVGhp
cyBiZWdpbnMgYXQgcG9zLm5vZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWlu
IHBvcyAoc3VwcG9zZSBwb3Mgd2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAy
NzcwMj4uCi0gICAgTm9kZSogcm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBwb3Mubm9kZSgpOyBuICYmIG4t
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFy
ZW50Tm9kZSgpKQorICAgIC8vIEZJWE1FOiBUaGlzIGJlZ2lucyBhdCBwb3MuZGVwcmVjYXRlZE5v
ZGUoKSwgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBjb250YWluIHBvcyAoc3VwcG9zZSBwb3Mg
d2FzIFtpbWcsIDBdKS4gIFNlZSA8cmRhcjovL3Byb2JsZW0vNTAyNzcwMj4uCisgICAgTm9kZSog
cm9vdEVkaXRhYmxlRWxlbWVudCA9IHBvcy5kZXByZWNhdGVkTm9kZSgpLT5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgZm9yIChOb2RlKiBuID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7IG4gJiYg
bi0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQ7IG4gPSBuLT5w
YXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc1NwZWNpYWxFbGVtZW50KG4pKSB7CiAgICAgICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gdlBvcyA9IFZpc2libGVQb3NpdGlvbihwb3MsIERPV05TVFJF
QU0pOwogICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0SW5FbGVtZW50ID0gVmlzaWJs
ZVBvc2l0aW9uKG4sIDAsIERPV05TVFJFQU0pOwpAQCAtNDM3LDkgKzQzNyw5IEBAIHN0YXRpYyBO
b2RlKiBmaXJzdEluU3BlY2lhbEVsZW1lbnQoY29uc3QKIAogc3RhdGljIE5vZGUqIGxhc3RJblNw
ZWNpYWxFbGVtZW50KGNvbnN0IFBvc2l0aW9uJiBwb3MpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMg
YmVnaW5zIGF0IHBvcy5ub2RlKCksIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgY29udGFpbiBw
b3MgKHN1cHBvc2UgcG9zIHdhcyBbaW1nLCAwXSkuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjc3
MDI+LgotICAgIE5vZGUqIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBwb3Mubm9kZSgpLT5yb290RWRp
dGFibGVFbGVtZW50KCk7Ci0gICAgZm9yIChOb2RlKiBuID0gcG9zLm5vZGUoKTsgbiAmJiBuLT5y
b290RWRpdGFibGVFbGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudDsgbiA9IG4tPnBhcmVu
dE5vZGUoKSkKKyAgICAvLyBGSVhNRTogVGhpcyBiZWdpbnMgYXQgcG9zLmRlcHJlY2F0ZWROb2Rl
KCksIHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgY29udGFpbiBwb3MgKHN1cHBvc2UgcG9zIHdh
cyBbaW1nLCAwXSkuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzUwMjc3MDI+LgorICAgIE5vZGUqIHJv
b3RFZGl0YWJsZUVsZW1lbnQgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxl
bWVudCgpOworICAgIGZvciAoTm9kZSogbiA9IHBvcy5kZXByZWNhdGVkTm9kZSgpOyBuICYmIG4t
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFibGVFbGVtZW50OyBuID0gbi0+cGFy
ZW50Tm9kZSgpKQogICAgICAgICBpZiAoaXNTcGVjaWFsRWxlbWVudChuKSkgewogICAgICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZQb3MgPSBWaXNpYmxlUG9zaXRpb24ocG9zLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBsYXN0SW5FbGVtZW50ID0gVmlzaWJsZVBv
c2l0aW9uKG4sIG4tPmNoaWxkTm9kZUNvdW50KCksIERPV05TVFJFQU0pOwpAQCAtNDYyLDcgKzQ2
Miw3IEBAIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3JlQ29udGFpbmluZ1NwZWNpYWwKICAgICBpZiAo
IW4pCiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgUG9zaXRpb24gcmVzdWx0ID0gcG9zaXRpb25J
blBhcmVudEJlZm9yZU5vZGUobik7Ci0gICAgaWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1bHQu
bm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpKQorICAgIGlmIChyZXN1bHQuaXNOdWxsKCkgfHwgcmVzdWx0LmRlcHJlY2F0ZWRO
b2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3MuZGVwcmVjYXRlZE5vZGUoKS0+cm9v
dEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gcG9zOwogICAgIGlmIChjb250YWlu
aW5nU3BlY2lhbEVsZW1lbnQpCiAgICAgICAgICpjb250YWluaW5nU3BlY2lhbEVsZW1lbnQgPSBu
OwpAQCAtNDgwLDcgKzQ4MCw3IEBAIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJDb250YWluaW5nU3Bl
Y2lhbEUKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBwb3M7CiAgICAgUG9zaXRpb24gcmVz
dWx0ID0gcG9zaXRpb25JblBhcmVudEFmdGVyTm9kZShuKTsKLSAgICBpZiAocmVzdWx0LmlzTnVs
bCgpIHx8IHJlc3VsdC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSAhPSBwb3Mubm9kZSgp
LT5yb290RWRpdGFibGVFbGVtZW50KCkpCisgICAgaWYgKHJlc3VsdC5pc051bGwoKSB8fCByZXN1
bHQuZGVwcmVjYXRlZE5vZGUoKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IHBvcy5kZXByZWNh
dGVkTm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBwb3M7CiAg
ICAgaWYgKGNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudCkKICAgICAgICAgKmNvbnRhaW5pbmdTcGVj
aWFsRWxlbWVudCA9IG47CkBAIC00OTksOCArNDk5LDggQEAgUG9zaXRpb24gcG9zaXRpb25PdXRz
aWRlQ29udGFpbmluZ1NwZWNpYQogTm9kZSogaXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25z
dCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKIHsKICAgICBQb3NpdGlvbiB1cHN0
cmVhbSh2aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKLSAgICBp
ZiAodXBzdHJlYW0ubm9kZSgpICYmIHVwc3RyZWFtLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiB1cHN0
cmVhbS5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiB1cHN0cmVhbS5hdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkpCi0gICAgICAgIHJldHVybiB1cHN0cmVhbS5ub2RlKCk7Cisg
ICAgaWYgKHVwc3RyZWFtLmRlcHJlY2F0ZWROb2RlKCkgJiYgdXBzdHJlYW0uZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKSAmJiB1cHN0cmVhbS5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigp
LT5pc1RhYmxlKCkgJiYgdXBzdHJlYW0uYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKQor
ICAgICAgICByZXR1cm4gdXBzdHJlYW0uZGVwcmVjYXRlZE5vZGUoKTsKICAgICAKICAgICByZXR1
cm4gMDsKIH0KQEAgLTUwOCw4ICs1MDgsOCBAQCBOb2RlKiBpc0ZpcnN0UG9zaXRpb25BZnRlclRh
YmxlKGNvbnN0IFZpCiBOb2RlKiBpc0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewogICAgIFBvc2l0aW9uIGRvd25zdHJlYW0o
dmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpKTsKLSAgICBpZiAo
ZG93bnN0cmVhbS5ub2RlKCkgJiYgZG93bnN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCkgJiYgZG93
bnN0cmVhbS5ub2RlKCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiBkb3duc3RyZWFtLmF0Rmly
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkpCi0gICAgICAgIHJldHVybiBkb3duc3RyZWFtLm5v
ZGUoKTsKKyAgICBpZiAoZG93bnN0cmVhbS5kZXByZWNhdGVkTm9kZSgpICYmIGRvd25zdHJlYW0u
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2Rl
KCktPnJlbmRlcmVyKCktPmlzVGFibGUoKSAmJiBkb3duc3RyZWFtLmF0Rmlyc3RFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKCkpCisgICAgICAgIHJldHVybiBkb3duc3RyZWFtLmRlcHJlY2F0ZWROb2Rl
KCk7CiAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkBAIC01OTEsNyArNTkxLDcgQEAgTm9kZSogZW5j
bG9zaW5nTm9kZVdpdGhUYWcoY29uc3QgUG9zaXRpbwogICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7Ci0gICAgZm9yIChO
b2RlKiBuID0gcC5ub2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKKyAgICBmb3IgKE5v
ZGUqIG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAg
ICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodGFnTmFtZSkpCkBAIC02MDksNyAr
NjA5LDcgQEAgTm9kZSogZW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbgogICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgCiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJv
b3QocCk7Ci0gICAgZm9yIChOb2RlKiBuID0gcC5ub2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIGEgbm9uLWVkaXRhYmxlIG5v
ZGUgaWYgdGhlIGlucHV0IHBvc2l0aW9uIHdhcyBlZGl0YWJsZSwgc2luY2UKICAgICAgICAgLy8g
dGhlIGNhbGxlcnMgZnJvbSBlZGl0aW5nIHdpbGwgbm8gZG91YnQgd2FudCB0byBwZXJmb3JtIGVk
aXRpbmcgaW5zaWRlIHRoZSByZXR1cm5lZCBub2RlLgogICAgICAgICBpZiAocm9vdCAmJiAhbi0+
aXNDb250ZW50RWRpdGFibGUoKSAmJiBvbmx5UmV0dXJuRWRpdGFibGVOb2RlcykKQEAgLTYyNyw3
ICs2MjcsNyBAQCBOb2RlKiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQCiB7CiAg
ICAgTm9kZSogaGlnaGVzdCA9IDA7CiAgICAgTm9kZSogcm9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJv
b3QocCk7Ci0gICAgZm9yIChOb2RlKiBuID0gcC5ub2RlKCk7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKCgqbm9kZUlzT2ZUeXBlKShuKSkKICAgICAgICAg
ICAgIGhpZ2hlc3QgPSBuOwogICAgICAgICBpZiAobiA9PSByb290KQpAQCAtNjQ3LDcgKzY0Nyw3
IEBAIE5vZGUqIGVuY2xvc2luZ0FuY2hvckVsZW1lbnQoY29uc3QgUG9zaXQKICAgICBpZiAocC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgTm9kZSogbm9kZSA9IHAubm9k
ZSgpOworICAgIE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgd2hpbGUgKG5v
ZGUgJiYgIShub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgbm9kZS0+aXNMaW5rKCkpKQogICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBub2RlOwpAQCAtNzE3LDcg
KzcxNyw3IEBAIHN0YXRpYyBOb2RlKiBhcHBlbmRlZFN1Ymxpc3QoTm9kZSogbGlzdEkKIE5vZGUq
IGVuY2xvc2luZ0VtcHR5TGlzdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9z
KQogewogICAgIC8vIENoZWNrIHRoYXQgcG9zaXRpb24gaXMgb24gYSBsaW5lIGJ5IGl0c2VsZiBp
bnNpZGUgYSBsaXN0IGl0ZW0KLSAgICBOb2RlKiBsaXN0Q2hpbGROb2RlID0gZW5jbG9zaW5nTGlz
dENoaWxkKHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5vZGUqIGxp
c3RDaGlsZE5vZGUgPSBlbmNsb3NpbmdMaXN0Q2hpbGQodmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghbGlzdENoaWxkTm9kZSB8fCAhaXNTdGFy
dE9mUGFyYWdyYXBoKHZpc2libGVQb3MpIHx8ICFpc0VuZE9mUGFyYWdyYXBoKHZpc2libGVQb3Mp
KQogICAgICAgICByZXR1cm4gMDsKIApAQCAtODgzLDcgKzg4Myw3IEBAIGJvb2wgaXNOb2RlSW5U
ZXh0Rm9ybUNvbnRyb2woTm9kZSogbm9kZSkKICAgICAKIFBvc2l0aW9uIHBvc2l0aW9uQmVmb3Jl
VGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9zKQogewotICAgIE5vZGUgKm5vZGUgPSBwb3Mubm9k
ZSgpOworICAgIE5vZGUqIG5vZGUgPSBwb3MuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoaXNU
YWJTcGFuVGV4dE5vZGUobm9kZSkpCiAgICAgICAgIG5vZGUgPSB0YWJTcGFuTm9kZShub2RlKTsK
ICAgICBlbHNlIGlmICghaXNUYWJTcGFuTm9kZShub2RlKSkKQEAgLTk0NCw3ICs5NDQsNyBAQCBO
b2RlICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm9kZSAqCiB1bnNpZ25lZCBudW1FbmNs
b3NpbmdNYWlsQmxvY2txdW90ZXMoY29uc3QgUG9zaXRpb24mIHApCiB7CiAgICAgdW5zaWduZWQg
bnVtID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBwLm5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5v
ZGUoKSkKKyAgICBmb3IgKE5vZGUqIG4gPSBwLmRlcHJlY2F0ZWROb2RlKCk7IG47IG4gPSBuLT5w
YXJlbnROb2RlKCkpCiAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3RlKG4pKQogICAgICAgICAg
ICAgbnVtKys7CiAgICAgCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbkZvclBhcmFncmFwaEl0CiAgICAgLy8gdGhhdCB3ZSdsbCB3YW50IG1vZGlmeSBpcyB0
aGUgbGFzdCBvbmUgaW5zaWRlIHRoZSB0YWJsZSwgbm90IHRoZSB0YWJsZSBpdHNlbGYKICAgICAv
LyAoYSB0YWJsZSBpcyBpdHNlbGYgYSBwYXJhZ3JhcGgpLgogICAgIGlmIChOb2RlKiB0YWJsZSA9
IGlzRmlyc3RQb3NpdGlvbkFmdGVyVGFibGUoZW5kT2ZTZWxlY3Rpb24pKQotICAgICAgICBpZiAo
c3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2Yo
dGFibGUpKQorICAgICAgICBpZiAoc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRl
cHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKICAgICAgICAgICAgIG5ld1Nl
bGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rp
b24ucHJldmlvdXModHJ1ZSkpOwogICAgIAogICAgIC8vIElmIHRoZSBzdGFydCBvZiB0aGUgc2Vs
ZWN0aW9uIHRvIG1vZGlmeSBpcyBqdXN0IGJlZm9yZSBhIHRhYmxlLApAQCAtMTAyMyw3ICsxMDIz
LDcgQEAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Gb3JQYXJhZ3JhcGhJdAogICAgIC8vIHdl
J2xsIHdhbnQgdG8gbW9kaWZ5IGlzIHRoZSBmaXJzdCBvbmUgaW5zaWRlIHRoZSB0YWJsZSwgbm90
IHRoZSBwYXJhZ3JhcGgKICAgICAvLyBjb250YWluaW5nIHRoZSB0YWJsZSBpdHNlbGYuCiAgICAg
aWYgKE5vZGUqIHRhYmxlID0gaXNMYXN0UG9zaXRpb25CZWZvcmVUYWJsZShzdGFydE9mU2VsZWN0
aW9uKSkKLSAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5pc0Rlc2NlbmRhbnRPZih0YWJsZSkpCisgICAgICAgIGlmIChlbmRPZlNlbGVjdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKHRhYmxlKSkKICAg
ICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlv
bi5uZXh0KHRydWUpLCBlbmRPZlNlbGVjdGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG5ld1NlbGVj
dGlvbjsKQEAgLTEwMzUsNyArMTAzNSw3IEBAIGludCBpbmRleEZvclZpc2libGVQb3NpdGlvbihj
b25zdCBWaXNpYmwKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBQb3NpdGlvbiBwKHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShwLm5vZGUoKS0+ZG9j
dW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluTm9kZShwLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCkpLAorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHAuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5Ob2RlKHAuYW5j
aG9yTm9kZSgpLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7
CiAgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCksIHRydWUp
OwogfQpAQCAtMTExNCw4ICsxMTE0LDggQEAgVmlzaWJsZVNlbGVjdGlvbiBhdm9pZEludGVyc2Vj
dGlvbldpdGhObwogICAgICAgICByZXR1cm4gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24pOwog
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiB1cGRhdGVkU2VsZWN0aW9uKHNlbGVjdGlvbik7Ci0gICAg
Tm9kZSogYmFzZSA9IHNlbGVjdGlvbi5iYXNlKCkubm9kZSgpOwotICAgIE5vZGUqIGV4dGVudCA9
IHNlbGVjdGlvbi5leHRlbnQoKS5ub2RlKCk7CisgICAgTm9kZSogYmFzZSA9IHNlbGVjdGlvbi5i
YXNlKCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBleHRlbnQgPSBzZWxlY3Rpb24uZXh0
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBBU1NFUlQoYmFzZSk7CiAgICAgQVNTRVJUKGV4
dGVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDc4Nzk1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzcsOCArNDM3LDggQEAgc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9u
ZQogc3RhdGljIGJvb2wgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgdikKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dCA9IHYubmV4dCgpOwotICAg
IE5vZGUqIHVwc3RyZWFtTm9kZSA9IG5leHQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpLm5v
ZGUoKTsKLSAgICBOb2RlKiBkb3duc3RyZWFtTm9kZSA9IHYuZGVlcEVxdWl2YWxlbnQoKS5kb3du
c3RyZWFtKCkubm9kZSgpOworICAgIE5vZGUqIHVwc3RyZWFtTm9kZSA9IG5leHQuZGVlcEVxdWl2
YWxlbnQoKS51cHN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9kZSogZG93bnN0cmVh
bU5vZGUgPSB2LmRlZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLmRlcHJlY2F0ZWROb2RlKCk7
CiAgICAgLy8gQWRkIGFuIGludGVyY2hhbmdlIG5ld2xpbmUgaWYgYSBwYXJhZ3JhcGggYnJlYWsg
aXMgc2VsZWN0ZWQgYW5kIGEgYnIgd29uJ3QgYWxyZWFkeSBiZSBhZGRlZCB0byB0aGUgbWFya3Vw
IHRvIHJlcHJlc2VudCBpdC4KICAgICByZXR1cm4gaXNFbmRPZlBhcmFncmFwaCh2KSAmJiBpc1N0
YXJ0T2ZQYXJhZ3JhcGgobmV4dCkgJiYgISh1cHN0cmVhbU5vZGUtPmhhc1RhZ05hbWUoYnJUYWcp
ICYmIHVwc3RyZWFtTm9kZSA9PSBkb3duc3RyZWFtTm9kZSk7CiB9CkBAIC01NzEsNyArNTcxLDcg
QEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogICAgICAgICB9CiAK
ICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kU3RyaW5nKGludGVyY2hhbmdlTmV3bGluZVN0cmlu
Zyk7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHZpc2libGVTdGFydC5uZXh0KCkuZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IHZpc2libGVTdGFydC5uZXh0KCkuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgICAgIGlmIChwYXN0RW5kICYm
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoc3RhcnROb2RlLCAwLCBwYXN0RW5kLCAwKSA+
PSAwKSB7CiAgICAgICAgICAgICBpZiAoZGVsZXRlQnV0dG9uKQpAQCAtNzY0LDcgKzc2NCw3IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KIAogICAgIE5vZGUqIHN0
eWxlTm9kZSA9IGNvbnRleHQtPmZpcnN0Tm9kZSgpOwogICAgIGlmICghc3R5bGVOb2RlKSB7Ci0g
ICAgICAgIHN0eWxlTm9kZSA9IGNvbnRleHQtPnN0YXJ0UG9zaXRpb24oKS5ub2RlKCk7CisgICAg
ICAgIHN0eWxlTm9kZSA9IGNvbnRleHQtPnN0YXJ0UG9zaXRpb24oKS5kZXByZWNhdGVkTm9kZSgp
OwogICAgICAgICBpZiAoIXN0eWxlTm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24g
Nzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlv
dXNCb3VuZGFyeSgKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hh
cmFjdGVyQmVmb3JlKCkpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gZm9yd2FyZHNTY2FuUmFu
Z2UoZC0+Y3JlYXRlUmFuZ2UoKSk7CiAgICAgICAgIGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRB
ZnRlcihib3VuZGFyeSwgZWMpOwotICAgICAgICBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQo
ZW5kLm5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAg
Zm9yd2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KGVuZC5kZXByZWNhdGVkTm9kZSgpLCBlbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAgICBUZXh0SXRlcmF0b3IgZm9yd2Fy
ZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZS5nZXQoKSk7CiAgICAgICAgIHdoaWxlICghZm9y
d2FyZHNJdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IGZvcndhcmRzSXRlcmF0b3IuY2hhcmFjdGVycygpOwpAQCAtODIsOCArODIsOCBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoc3RhcnQubm9kZSgpLCBzdGFydC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpLCBlYyk7Ci0gICAgc2VhcmNoUmFuZ2UtPnNldEVuZChlbmQubm9k
ZSgpLCBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOworICAgIHNlYXJjaFJhbmdl
LT5zZXRTdGFydChzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCBlYyk7CisgICAgc2VhcmNoUmFuZ2UtPnNldEVuZChlbmQuZGVwcmVjYXRlZE5v
ZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKICAgICAKICAgICBBU1NF
UlQoIWVjKTsKICAgICBpZiAoZWMpCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNCb3VuZGFyeSgKIAogICAgIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRl
cmF0b3IgaXQoc2VhcmNoUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVuZHNBdEVkaXRpbmdCb3Vu
ZGFyeSk7CiAgICAgdW5zaWduZWQgbmV4dCA9IDA7Ci0gICAgYm9vbCBpblRleHRTZWN1cml0eU1v
ZGUgPSBzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0Lm5v
ZGUoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FOworICAg
IGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCktPnN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKICAgICBib29s
IG5lZWRNb3JlQ29udGV4dCA9IGZhbHNlOwogICAgIHdoaWxlICghaXQuYXRFbmQoKSkgewogICAg
ICAgICAvLyBpdGVyYXRlIHRvIGdldCBjaHVua3MgdW50aWwgdGhlIHNlYXJjaEZ1bmN0aW9uIHJl
dHVybnMgYSBub24temVybyB2YWx1ZS4KQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0aWMgVmlzaWJs
ZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckFmdGVyKCkp
KSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFja3dhcmRzU2NhblJhbmdlKGQtPmNyZWF0ZVJh
bmdlKCkpOwotICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZChzdGFydC5ub2RlKCks
IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICAgICAgYmFja3dhcmRz
U2NhblJhbmdlLT5zZXRFbmQoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgICAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0
ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJhY2t3YXJkc1NjYW5SYW5nZS5nZXQoKSk7CiAgICAg
ICAgIHdoaWxlICghYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBiYWNrd2FyZHNJdGVyYXRvci5jaGFyYWN0ZXJzKCk7CkBA
IC0xNjEsMTAgKzE2MSwxMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShj
b25zCiAgICAgfQogCiAgICAgc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhib3VuZGFy
eSwgZWMpOwotICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChzdGFydC5ub2RlKCksIHN0YXJ0LmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVjKTsKKyAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQo
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwg
ZWMpOwogICAgIFRleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZS5nZXQoKSwgVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAgIHVuc2lnbmVk
IG5leHQgPSAwOwotICAgIGJvb2wgaW5UZXh0U2VjdXJpdHlNb2RlID0gc3RhcnQubm9kZSgpICYm
IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPnN0
eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORTsKKyAgICBib29sIGluVGV4dFNlY3VyaXR5
TW9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+
cmVuZGVyZXIoKSAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT50ZXh0U2VjdXJpdHkoKSAhPSBUU05PTkU7CiAgICAgYm9vbCBuZWVkTW9yZUNvbnRleHQgPSBm
YWxzZTsKICAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKICAgICAgICAgLy8gS2VlcCBhc2tpbmcg
dGhlIGl0ZXJhdG9yIGZvciBjaHVua3MgdW50aWwgdGhlIHNlYXJjaCBmdW5jdGlvbgpAQCAtMzE2
LDcgKzMxNiw3IEBAIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZFBvc2l0aW9uKGNvbnN0IFYKIHN0
YXRpYyBSb290SW5saW5lQm94ICpyb290Qm94Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24g
JmMpCiB7CiAgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpu
b2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogbm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zNTEsNyArMzUxLDcgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uRm9yTAogICAgICAgICAvLyBUaGVyZSBh
cmUgVmlzaWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAogICAgICAg
ICAvLyBSb290SW5saW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3Jk
ZXJlZCBibG9ja3MuCiAgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgICAgIGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+
aXNSZW5kZXJCbG9jaygpICYmIHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAwKQorICAg
ICAgICBpZiAocC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpICYmIHAuZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9jaygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25Bdm9pZGluZ0ZpcnN0UG9zaXRp
b25JblRhYmxlKGMpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigp
OwpAQCAtNDA0LDcgKzQwNCw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25G
b3JMaW4KICAgICAgICAgLy8gVGhlcmUgYXJlIFZpc2libGVQb3NpdGlvbnMgYXQgb2Zmc2V0IDAg
aW4gYmxvY2tzIHdpdGhvdXQKICAgICAgICAgLy8gUm9vdElubGluZUJveGVzLCBsaWtlIGVtcHR5
IGVkaXRhYmxlIGJsb2NrcyBhbmQgYm9yZGVyZWQgYmxvY2tzLgogICAgICAgICBQb3NpdGlvbiBw
ID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgICAgICBpZiAocC5ub2RlKCktPnJlbmRlcmVyKCkg
JiYgcC5ub2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiBwLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPT0gMCkKKyAgICAgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSAmJiBwLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2so
KSAmJiAhcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGM7
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICB9CkBAIC01MDEsNyArNTAx
LDcgQEAgc3RhdGljIE5vZGUqIGVuY2xvc2luZ05vZGVXaXRoTm9uSW5saW5lUgogVmlzaWJsZVBv
c2l0aW9uIHByZXZpb3VzTGluZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmdmlzaWJs
ZVBvc2l0aW9uLCBpbnQgeCkKIHsKICAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbm9kZSA9IHAubm9kZSgpOworICAgIE5vZGUqIG5v
ZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0
RWRpdGFibGVSb290KHApOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwpAQCAtNjEwLDcgKzYxMCw3IEBAIHN0YXRpYyBOb2RlKiBuZXh0TGVhZldpdGhT
YW1lRWRpdGFiaWxpdHkKIFZpc2libGVQb3NpdGlvbiBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmdmlzaWJsZVBvc2l0aW9uLCBpbnQgeCkKIHsKICAgICBQb3NpdGlvbiBw
ID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqbm9kZSA9IHAu
bm9kZSgpOworICAgIE5vZGUqIG5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgTm9kZSog
aGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwpAQCAtNzQwLDcgKzc0MCw3IEBAIFZpc2li
bGVQb3NpdGlvbiBuZXh0U2VudGVuY2VQb3NpdGlvbihjb24KIFZpc2libGVQb3NpdGlvbiBzdGFy
dE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQogewogICAgIFBvc2l0aW9uIHAgPSBjLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9k
ZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKCFzdGFydE5vZGUp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKQEAgLTgwMiw3ICs4MDIsNyBAQCBW
aXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7
Ci0gICAgTm9kZSogc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnROb2RlID0g
cC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxl
SW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCiAgICAgICAgIHJldHVybiBsYXN0RGVlcEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoc3RhcnROb2RlKTsKQEAgLTkxMCw3ICs5MTAsNyBAQCBWaXNpYmxlUG9zaXRp
b24gbmV4dFBhcmFncmFwaFBvc2l0aW9uKGNvCiBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZkJsb2Nr
KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1
aXZhbGVudCgpOwotICAgIE5vZGUgKnN0YXJ0Tm9kZSA9IHAubm9kZSgpOworICAgIE5vZGUqIHN0
YXJ0Tm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
Zmlyc3RQb3NpdGlvbkluTm9kZShzdGFydE5vZGUtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSksIERPV05TVFJFQU0pOwpAQCAtOTIwLDcgKzkyMCw3IEBAIFZpc2libGVQb3NpdGlvbiBlbmRP
ZkJsb2NrKGNvbnN0IFZpc2libGUKIHsKICAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVu
dCgpOwogCi0gICAgTm9kZSAqc3RhcnROb2RlID0gcC5ub2RlKCk7CisgICAgTm9kZSogc3RhcnRO
b2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKQEAgLTk1Niw3ICs5NTYsNyBAQCBWaXNpYmxlUG9z
aXRpb24gc3RhcnRPZkRvY3VtZW50KGNvbnN0IE5vCiAKIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
RG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjKQogewotICAgIHJldHVybiBzdGFydE9m
RG9jdW1lbnQoYy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXJ0T2ZE
b2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIFZpc2li
bGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IE5vZGUqIG5vZGUpCkBAIC05NzAsMTcgKzk3
MCwxNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZEb2N1bWVudChjb25zdCBOb2RlCiAKIFZpc2li
bGVQb3NpdGlvbiBlbmRPZkRvY3VtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmYykKIHsKLSAg
ICByZXR1cm4gZW5kT2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICBy
ZXR1cm4gZW5kT2ZEb2N1bWVudChjLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7
CiB9CiAKIGJvb2wgaW5TYW1lRG9jdW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZhLCBjb25z
dCBWaXNpYmxlUG9zaXRpb24gJmIpCiB7CiAgICAgUG9zaXRpb24gYXAgPSBhLmRlZXBFcXVpdmFs
ZW50KCk7Ci0gICAgTm9kZSAqYW4gPSBhcC5ub2RlKCk7CisgICAgTm9kZSogYW4gPSBhcC5kZXBy
ZWNhdGVkTm9kZSgpOwogICAgIGlmICghYW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQ
b3NpdGlvbiBicCA9IGIuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlICpibiA9IGJwLm5vZGUo
KTsKKyAgICBOb2RlKiBibiA9IGJwLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGFuID09IGJu
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTEwOCw3ICsxMTA4LDcgQEAgc3RhdGljIFZp
c2libGVQb3NpdGlvbiBsb2dpY2FsU3RhcnRQb3NpdAogICAgICAgICAvLyBUaGVyZSBhcmUgVmlz
aWJsZVBvc2l0aW9ucyBhdCBvZmZzZXQgMCBpbiBibG9ja3Mgd2l0aG91dAogICAgICAgICAvLyBS
b290SW5saW5lQm94ZXMsIGxpa2UgZW1wdHkgZWRpdGFibGUgYmxvY2tzIGFuZCBib3JkZXJlZCBi
bG9ja3MuCiAgICAgICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgICAg
IGlmIChwLm5vZGUoKS0+cmVuZGVyZXIoKSAmJiBwLm5vZGUoKS0+cmVuZGVyZXIoKS0+aXNSZW5k
ZXJCbG9jaygpICYmICFwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpCisgICAgICAgIGlmIChw
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkgJiYgcC5kZXByZWNhdGVkTm9kZSgpLT5yZW5k
ZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSkK
ICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkF2b2lkaW5nRmlyc3RQb3NpdGlvbkluVGFibGUo
Yyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CkBAIC0xMTQ2
LDcgKzExNDYsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGxvZ2ljYWxFbmRQb3NpdGlvCiAg
ICAgICAgIC8vIFRoZXJlIGFyZSBWaXNpYmxlUG9zaXRpb25zIGF0IG9mZnNldCAwIGluIGJsb2Nr
cyB3aXRob3V0CiAgICAgICAgIC8vIFJvb3RJbmxpbmVCb3hlcywgbGlrZSBlbXB0eSBlZGl0YWJs
ZSBibG9ja3MgYW5kIGJvcmRlcmVkIGJsb2Nrcy4KICAgICAgICAgUG9zaXRpb24gcCA9IGMuZGVl
cEVxdWl2YWxlbnQoKTsKLSAgICAgICAgaWYgKHAubm9kZSgpLT5yZW5kZXJlcigpICYmIHAubm9k
ZSgpLT5yZW5kZXJlcigpLT5pc1JlbmRlckJsb2NrKCkgJiYgIXAuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSkKKyAgICAgICAgaWYgKHAuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSAmJiBw
LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2soKSAmJiAhcC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2Nocm9taXVtL1NlbGVjdGlvbkNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jaHJvbWl1bS9TZWxlY3Rpb25Db250cm9sbGVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY2hy
b21pdW0vU2VsZWN0aW9uQ29udHJvbGxlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liCiAg
ICAgLy8gRklYTUU6IFN1cHBvcnQgZWRpdGFibGUgdGV4dCBpbiBjaHJvbWl1bS4KICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAmJiBtX3NlbGVjdGlvbi5zdGFy
dCgpLmlzTm90TnVsbCgpICYmIG1fc2VsZWN0aW9uLmVuZCgpLmlzTm90TnVsbCgpKSB7CiAgICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGRv
Y3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rpb24uc3Rh
cnQoKS5ub2RlKCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRUZXh0Q2hh
bmdlZCwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90
aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIo
KSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBmYWxzZSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9TZWxlY3Rp
b25Db250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2d0ay9TZWxlY3Rpb25Db250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2liCiAg
ICAgaWYgKCFtX3NlbGVjdGlvbi5zdGFydCgpLmlzTm90TnVsbCgpIHx8ICFtX3NlbGVjdGlvbi5l
bmQoKS5pc05vdE51bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyT2JqZWN0KiBm
b2N1c2VkTm9kZSA9IG1fc2VsZWN0aW9uLmVuZCgpLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIGZvY3VzZWROb2RlID0gbV9zZWxlY3Rpb24uZW5kKCkuZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5
T2JqZWN0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0
ZShmb2N1c2VkTm9kZSk7CiAKICAgICAvLyBOZWVkIHRvIGNoZWNrIHRoaXMgYXMgZ2V0T3JDcmVh
dGUgY291bGQgcmV0dXJuIDAsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9y
TWFjLm1tCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIE5TV3JpdGluZ0Rp
cmVjdGlvbiBFZGl0b3I6OmJhc2VXcml0aW5nRGkKICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gcmVz
dWx0ID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CiAKICAgICBQb3NpdGlvbiBwb3Mg
PSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBOb2RlKiBub2RlID0gcG9zLm5vZGUoKTsKKyAgICBOb2RlKiBub2Rl
ID0gcG9zLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9TZWxlY3Rpb25Db250
cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL1Nl
bGVjdGlvbkNvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvU2VsZWN0aW9uQ29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNyBAQCB2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFjY2Vzc2li
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKTsKIAogICAgIGlm
IChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIG1fc2VsZWN0aW9uLnN0
YXJ0KCkuaXNOb3ROdWxsKCkgJiYgbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpCi0gICAg
ICAgIGRvY3VtZW50LT5heE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24obV9zZWxlY3Rp
b24uc3RhcnQoKS5ub2RlKCktPnJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYU2VsZWN0ZWRU
ZXh0Q2hhbmdlZCwgZmFsc2UpOworICAgICAgICBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5w
b3N0Tm90aWZpY2F0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSwgQVhPYmplY3RDYWNoZTo6QVhTZWxlY3RlZFRleHRDaGFuZ2VkLCBmYWxzZSk7CiAK
ICAgICAvLyBpZiB6b29tIGZlYXR1cmUgaXMgZW5hYmxlZCwgaW5zZXJ0aW9uIHBvaW50IGNoYW5n
ZXMgc2hvdWxkIHVwZGF0ZSB0aGUgem9vbQogICAgIGlmICghVUFab29tRW5hYmxlZCgpIHx8ICFt
X3NlbGVjdGlvbi5pc0NhcmV0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIE5vZGUqIERPTVNlbGVjdGlv
bjo6YW5jaG9yTm9kZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChOb2RlKiBz
aGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAgICAg
ICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsK
LSAgICByZXR1cm4gYW5jaG9yUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7Cisg
ICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5v
ZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6YW5jaG9yT2Zmc2V0KCkgY29uc3QKQEAgLTEx
OSw3ICsxMTksNyBAQCBOb2RlKiBET01TZWxlY3Rpb246OmZvY3VzTm9kZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNo
YWRvd0FuY2VzdG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBh
cmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICByZXR1cm4gZm9jdXNQb3NpdGlvbih2
aXNpYmxlU2VsZWN0aW9uKCkpLm5vZGUoKTsKKyAgICByZXR1cm4gZm9jdXNQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7CiB9CiAKIGludCBET01TZWxlY3Rpb246
OmZvY3VzT2Zmc2V0KCkgY29uc3QKQEAgLTEzNyw3ICsxMzcsNyBAQCBOb2RlKiBET01TZWxlY3Rp
b246OmJhc2VOb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKE5vZGUqIHNo
YWRvd0FuY2VzdG9yID0gc2VsZWN0aW9uU2hhZG93QW5jZXN0b3IobV9mcmFtZSkpCiAgICAgICAg
IHJldHVybiBzaGFkb3dBbmNlc3Rvci0+cGFyZW50Tm9kZUd1YXJhbnRlZWRIb3N0RnJlZSgpOwot
ICAgIHJldHVybiBiYXNlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbigpKS5ub2RlKCk7CisgICAg
cmV0dXJuIGJhc2VQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7
CiB9CiAKIGludCBET01TZWxlY3Rpb246OmJhc2VPZmZzZXQoKSBjb25zdApAQCAtMTU1LDcgKzE1
NSw3IEBAIE5vZGUqIERPTVNlbGVjdGlvbjo6ZXh0ZW50Tm9kZSgpIGNvbnN0CiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmIChOb2RlKiBzaGFkb3dBbmNlc3RvciA9IHNlbGVjdGlvblNoYWRvd0Fu
Y2VzdG9yKG1fZnJhbWUpKQogICAgICAgICByZXR1cm4gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5v
ZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKLSAgICByZXR1cm4gZXh0ZW50UG9zaXRpb24odmlzaWJs
ZVNlbGVjdGlvbigpKS5ub2RlKCk7CisgICAgcmV0dXJuIGV4dGVudFBvc2l0aW9uKHZpc2libGVT
ZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKIH0KIAogaW50IERPTVNlbGVjdGlvbjo6ZXh0
ZW50T2Zmc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTQsNyArNzU0LDcgQEAgYm9vbCBEcmFnQ29udHJv
bGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgICAgICBkb1N5c3RlbURyYWcoZHJhZ0ltYWdl
LCBkcmFnTG9jLCBtb3VzZURyYWdnZWRQb2ludCwgY2xpcGJvYXJkLCBzcmMsIHRydWUpOwogICAg
IH0gZWxzZSBpZiAoaXNTZWxlY3RlZCAmJiAobV9kcmFnU291cmNlQWN0aW9uICYgRHJhZ1NvdXJj
ZUFjdGlvblNlbGVjdGlvbikpIHsKICAgICAgICAgaWYgKCFjbGlwYm9hcmQtPmhhc0RhdGEoKSkg
ewotICAgICAgICAgICAgaWYgKGlzTm9kZUluVGV4dEZvcm1Db250cm9sKHNyYy0+c2VsZWN0aW9u
KCktPnN0YXJ0KCkubm9kZSgpKSkKKyAgICAgICAgICAgIGlmIChpc05vZGVJblRleHRGb3JtQ29u
dHJvbChzcmMtPnNlbGVjdGlvbigpLT5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkpKQogICAgICAg
ICAgICAgICAgIGNsaXBib2FyZC0+d3JpdGVQbGFpblRleHQoc3JjLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA3ODc5
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZWxlY3RDbG9zZXN0V29y
ZE9yTGkKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb247CiAgICAgICAgIEVs
ZW1lbnQqIFVSTEVsZW1lbnQgPSByZXN1bHQuaGl0VGVzdFJlc3VsdCgpLlVSTEVsZW1lbnQoKTsK
ICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0
aW9uRm9yUG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAgICAgICBpZiAocG9zLmlzTm90
TnVsbCgpICYmIHBvcy5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoVVJM
RWxlbWVudCkpCisgICAgICAgIGlmIChwb3MuaXNOb3ROdWxsKCkgJiYgcG9zLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoVVJMRWxlbWVudCkpCiAgICAg
ICAgICAgICBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoVVJMRWxlbWVudCk7CiAgICAgCiAgICAgICAgIFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5OwpAQCAtMzQ3LDcgKzM0Nyw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQKIAogc3RhdGljIGludCB0ZXh0
RGlzdGFuY2UoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQogewot
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzdGFydC5ub2RlKCktPmRv
Y3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOwogICAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZS5nZXQoKSwgdHJ1ZSk7CiB9
CiAKQEAgLTYyNiw3ICs2MjYsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9u
Rm9yTW91CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTcGVjaWFsIGNhc2UgdG8gbGltaXQgc2Vs
ZWN0aW9uIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIGZvciBTVkcgdGV4dC4KICAgICAvLyBGSVhN
RTogSXNuJ3QgdGhlcmUgYSBiZXR0ZXIgbm9uLVNWRy1zcGVjaWZpYyB3YXkgdG8gZG8gdGhpcz8K
LSAgICBpZiAoTm9kZSogc2VsZWN0aW9uQmFzZU5vZGUgPSBuZXdTZWxlY3Rpb24uYmFzZSgpLm5v
ZGUoKSkKKyAgICBpZiAoTm9kZSogc2VsZWN0aW9uQmFzZU5vZGUgPSBuZXdTZWxlY3Rpb24uYmFz
ZSgpLmRlcHJlY2F0ZWROb2RlKCkpCiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHNlbGVjdGlv
bkJhc2VSZW5kZXJlciA9IHNlbGVjdGlvbkJhc2VOb2RlLT5yZW5kZXJlcigpKQogICAgICAgICAg
ICAgaWYgKHNlbGVjdGlvbkJhc2VSZW5kZXJlci0+aXNTVkdUZXh0KCkpCiAgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpICE9IHNlbGVj
dGlvbkJhc2VSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCkpCkBAIC0yMTI3LDcgKzIxMjcsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGCiAgICAgU2VsZWN0aW9u
Q29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxlciA9IG1fZnJhbWUtPnNlbGVjdGlvbigpOwog
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uQ29udHJvbGxlci0+c2VsZWN0aW9uKCkuc3Rh
cnQoKTsKIAotICAgIGlmIChzdGFydC5ub2RlKCkgJiYgKHNlbGVjdGlvbkNvbnRyb2xsZXItPnJv
b3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb25Db250cm9sbGVyLT5pc1JhbmdlKCkpKSB7
CisgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbkNvbnRyb2xsZXIt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb25Db250cm9sbGVyLT5pc1JhbmdlKCkp
KSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0aW9uQ29udHJvbGxl
ci0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2Zy
YW1lLT5lZGl0b3IoKS0+Zmlyc3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uLmdldCgpKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzg3OTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBib29sIEZvY3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3Vz
SW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gZm9jdXNlZE9yTWFpbkZyYW1lKCktPnNl
dHRpbmdzKCktPmNhcmV0QnJvd3NpbmdFbmFibGVkKCk7CiAKICAgICBpZiAoY2FyZXRCcm93c2lu
ZyAmJiAhY3VycmVudE5vZGUpCi0gICAgICAgIGN1cnJlbnROb2RlID0gZnJhbWUtPnNlbGVjdGlv
bigpLT5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAgY3VycmVudE5vZGUgPSBmcmFtZS0+c2VsZWN0
aW9uKCktPnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGRvY3VtZW50LT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtMzI1LDcgKzMyNSw3IEBAIHN0
YXRpYyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2FyZXRCcm93
c2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnROb2RlID0g
cy0+c2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc2VsZWN0aW9uU3RhcnRO
b2RlID0gcy0+c2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3RhcnROb2Rl
LT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnROb2RlLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKSA9PSBuZXdGb2N1c2VkTm9kZSkKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiA3ODc5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUxLDEwICsyNjUxLDEwIEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICAgICAgICAgIC8vIElmIGl0IGNhbiBi
ZSBmb3VuZCwgd2UgcHJlZmVyIGEgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbiB0aGF0IGlz
IGVkaXRhYmxlLiAKICAgICAgICAgICAgIFBvc2l0aW9uIHBvc2l0aW9uKG5vZGUsIG9mZnNldCk7
CiAgICAgICAgICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBwb3NpdGlvbi5kb3duc3RyZWFtKENh
bkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKLSAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNh
dGVkTm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgICAgICBjYW5kaWRh
dGUgPSBwb3NpdGlvbi51cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Ci0gICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5p
dHkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zm
c2V0LCBhZmZpbml0eSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDcgKzI0
OSw3IEBAIHZvaWQgc2V0U2VsZWN0aW9uUmFuZ2UoTm9kZSogbm9kZSwgaW50IHMKICAgICAvLyBz
dGFydFBvc2l0aW9uIGFuZCBlbmRQb3NpdGlvbiBjYW4gYmUgbnVsbCBwb3NpdGlvbiBmb3IgZXhh
bXBsZSB3aGVuCiAgICAgLy8gIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmUiIHN0eWxlIGF0dHJp
YnV0ZSBpcyBzcGVjaWZpZWQuCiAgICAgaWYgKHN0YXJ0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
ZW5kUG9zaXRpb24uaXNOb3ROdWxsKCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUgJiYg
ZW5kUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
ID09IG5vZGUpOworICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5vZGUgJiYgZW5kUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKSA9PSBub2RlKTsKICAgICB9CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24g
PSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIApAQCAtMzM4
LDEzICszMzgsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sOjp2aXNpYgog
aW50IFJlbmRlclRleHRDb250cm9sOjppbmRleEZvclZpc2libGVQb3NpdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHBvcykgY29uc3QKIHsKICAgICBQb3NpdGlvbiBpbmRleFBvc2l0aW9uID0g
cG9zLmRlZXBFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFpc1NlbGVjdGFibGVFbGVtZW50KGluZGV4
UG9zaXRpb24ubm9kZSgpKSkKKyAgICBpZiAoIWlzU2VsZWN0YWJsZUVsZW1lbnQoaW5kZXhQb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQoKSk7CiAgICAgcmFuZ2UtPnNldFN0YXJ0KG1faW5uZXJUZXh0LmdldCgpLCAwLCBlYyk7
CiAgICAgQVNTRVJUKCFlYyk7Ci0gICAgcmFuZ2UtPnNldEVuZChpbmRleFBvc2l0aW9uLm5vZGUo
KSwgaW5kZXhQb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBlYyk7CisgICAgcmFu
Z2UtPnNldEVuZChpbmRleFBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCksIGluZGV4UG9zaXRpb24u
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZWMpOwogICAgIEFTU0VSVCghZWMpOwogICAgIHJl
dHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlLmdldCgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9u
IDc4Nzk1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MTcsMTMgKzcxNywxMyBAQCBzdGF0aWMgdm9pZCB3cml0ZVNl
bGVjdGlvbihUZXh0U3RyZWFtJiB0CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0Nh
cmV0KCkpIHsKLSAgICAgICAgdHMgPDwgImNhcmV0OiBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5z
dGFydCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlv
bihzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpOworICAgICAgICB0cyA8PCAiY2FyZXQ6IHBvc2l0
aW9uICIgPDwgc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA8PCAi
IG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCkp
OwogICAgICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pCiAgICAgICAg
ICAgICB0cyA8PCAiICh1cHN0cmVhbSBhZmZpbml0eSkiOwogICAgICAgICB0cyA8PCAiXG4iOwog
ICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgdHMgPDwgInNlbGVj
dGlvbiBzdGFydDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpIDw8ICIgb2YgIiA8PCBub2RlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCku
bm9kZSgpKSA8PCAiXG4iCi0gICAgICAgICAgIDw8ICJzZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9u
ICIgPDwgc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAi
IDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCkubm9kZSgpKSA8PCAiXG4iOworICAgICAg
ICB0cyA8PCAic2VsZWN0aW9uIHN0YXJ0OiBwb3NpdGlvbiAiIDw8IHNlbGVjdGlvbi5zdGFydCgp
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSA8PCAiXG4iCisgICAgICAgICAgIDw8ICJz
ZWxlY3Rpb24gZW5kOiAgIHBvc2l0aW9uICIgPDwgc2VsZWN0aW9uLmVuZCgpLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPDwgIiBvZiAiIDw8IG5vZGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCku
ZGVwcmVjYXRlZE5vZGUoKSkgPDwgIlxuIjsKIH0KIAogU3RyaW5nIGV4dGVybmFsUmVwcmVzZW50
YXRpb24oRnJhbWUqIGZyYW1lLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODgwNykKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTEtMDItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2Rl
KCkgdG8gUG9zaXRpb246OmRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1l
LiBBbGwgY2FsbHMgdG8gbm9kZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVk
Tm9kZSgpLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uKTogQ2hlY2sgdGhlIG51bGxpdHkgb2Ygc3Rh
cnRDb250YWluZXIoKSBpbnN0ZWFkIG9mIHN0YXJ0UG9zaXRpb24oKS0+bm9kZSgpLgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29uZmlybUNvbXBvc2l0aW9uKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp0ZXh0SW5wdXRUeXBlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmNhcmV0T3JTZWxlY3Rpb25Cb3VuZHMpOgorCiAyMDExLTAyLTE2ICBC
cmlhbiBSeW5lciAgPGJyeW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcAkocmV2aXNpb24gNzg3OTUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzYsNyArMTI3Niw3IEBAIGJvb2wg
V2ViVmlld0ltcGw6OnNldENvbXBvc2l0aW9uKAogICAgIC8vIG5vZGUsIHdoaWNoIGRvZXNuJ3Qg
ZXhpc3QgYW55IGxvbmdlci4KICAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVkaXRvci0+
Y29tcG9zaXRpb25SYW5nZSgpOwogICAgIGlmIChyYW5nZSkgewotICAgICAgICBjb25zdCBOb2Rl
KiBub2RlID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKS5ub2RlKCk7CisgICAgICAgIGNvbnN0IE5v
ZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgaWYgKCFub2RlIHx8
ICFub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KQEAgLTEzMjUsNyArMTMyNSw3IEBAIGJvb2wgV2ViVmlld0ltcGw6OmNvbmZpcm1Db21w
b3NpdGlvbihjb24KICAgICAvLyBub2RlLCB3aGljaCBkb2Vzbid0IGV4aXN0IGFueSBsb25nZXIu
CiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2Uo
KTsKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgY29uc3QgTm9kZSogbm9kZSA9IHJhbmdlLT5z
dGFydFBvc2l0aW9uKCkubm9kZSgpOworICAgICAgICBjb25zdCBOb2RlKiBub2RlID0gcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNDb250ZW50
RWRpdGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMzU2LDcg
KzEzNTYsNyBAQCBXZWJUZXh0SW5wdXRUeXBlIFdlYlZpZXdJbXBsOjp0ZXh0SW5wdXRUCiAgICAg
aWYgKCFjb250cm9sbGVyKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIGNvbnN0IE5vZGUq
IG5vZGUgPSBjb250cm9sbGVyLT5zdGFydCgpLm5vZGUoKTsKKyAgICBjb25zdCBOb2RlKiBub2Rl
ID0gY29udHJvbGxlci0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIHR5cGU7CiAKQEAgLTEzODUsMTQgKzEzODUsMTQgQEAgV2ViUmVjdCBX
ZWJWaWV3SW1wbDo6Y2FyZXRPclNlbGVjdGlvbkJvdQogICAgIGlmICghdmlldykKICAgICAgICAg
cmV0dXJuIHJlY3Q7CiAKLSAgICBjb25zdCBOb2RlKiBub2RlID0gY29udHJvbGxlci0+c3RhcnQo
KS5ub2RlKCk7CisgICAgY29uc3QgTm9kZSogbm9kZSA9IGNvbnRyb2xsZXItPnN0YXJ0KCkuZGVw
cmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybiByZWN0OwogCiAgICAgaWYgKGNvbnRyb2xsZXItPmlzQ2FyZXQoKSkKICAgICAg
ICAgcmVjdCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci0+YWJzb2x1dGVDYXJl
dEJvdW5kcygpKTsKICAgICBlbHNlIGlmIChjb250cm9sbGVyLT5pc1JhbmdlKCkpIHsKLSAgICAg
ICAgbm9kZSA9IGNvbnRyb2xsZXItPmVuZCgpLm5vZGUoKTsKKyAgICAgICAgbm9kZSA9IGNvbnRy
b2xsZXItPmVuZCgpLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiByZWN0OwogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gY29udHJvbGxlci0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODA3KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRl
cHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU0NjIyCisKKyAgICAgICAgRG9uZSB0aGUgcmVuYW1lLiBBbGwgY2FsbHMgdG8gbm9k
ZSgpIGFyZSByZXBsYWNlZCBieSBjYWxscyB0byBkZXByZWNhdGVkTm9kZSgpLgorCisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3Bv
cHVwX21lbnVfaGFuZGxlcik6CisKIDIwMTEtMDItMTYgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBj
b2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRleDog
U291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNzg3
OTUpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5Nyw3ICszOTcsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92
aWV3X3BvcHVwX21lCiAgICAgaW50IHJpZ2h0QWxpZ25lZCA9IEZBTFNFOwogICAgIEludFBvaW50
IGxvY2F0aW9uOwogCi0gICAgaWYgKCFzdGFydC5ub2RlKCkgfHwgIWVuZC5ub2RlKCkKKyAgICBp
ZiAoIXN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgfHwgIWVuZC5kZXByZWNhdGVkTm9kZSgpCiAgICAg
ICAgIHx8IChmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAmJiAhZnJh
bWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSkgewogICAg
ICAgICAvLyBJZiB0aGVyZSdzIGEgZm9jdXNlZCBlbG1lbnQsIHVzZSBpdHMgbG9jYXRpb24uCiAg
ICAgICAgIGlmIChOb2RlKiBmb2N1c2VkTm9kZSA9IGdldEZvY3VzZWROb2RlKGZyYW1lKSkgewpA
QCAtNDA2LDcgKzQwNiw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcG9wdXBf
bWUKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0
QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGNvbnRleHRNZW51TWFyZ2luIDogY29u
dGV4dE1lbnVNYXJnaW4sIGNvbnRleHRNZW51TWFyZ2luKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpOworICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBGQUxT
RTsKIApJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4ODA3KQorKysgU291cmNl
L1dlYktpdC9oYWlrdS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAxMS0wMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgUG9zaXRpb246Om5v
ZGUoKSB0byBQb3NpdGlvbjo6ZGVwcmVjYXRlZE5vZGUoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2MjIKKworICAgICAgICBSZXBsYWNlZCB0aGUg
Y2FsbCB0byBub2RlKCkgYnkgYSBjYWxsIHRvIGNvbnRhaW5lck5vZGUoKSBiZWNhdXNlIHRoZSBy
ZXR1cm5lZCBub2RlIGlzCisgICAgICAgIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90
IHRoZSBzZWxlY3RlZCBjb250ZW50cyBhcmUgZWRpdGFibGUgYW5kIHN1Y2ggYSBjaGVjaworICAg
ICAgICBtdXN0IGJlIGRvbmUgYWdhaW5zdCB0aGUgY29udGFpbmVyIG5vZGUuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDEtMjYg
IE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgpJbmRleDogU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9oYWlr
dS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDc4Nzk1KQor
KysgU291cmNlL1dlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRIYWlrdS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIEVkaXRvckNsaWVudEhh
aWt1OjpoYW5kbGVLZXlib2FyZEV2CiAgICAgaWYgKCFrZXZlbnQgfHwga2V2ZW50LT50eXBlKCkg
PT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlVcCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Tm9kZSogc3RhcnQgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOworICAgIE5v
ZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDc4ODA3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246OmRlcHJlY2F0ZWROb2Rl
KCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjIy
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
c21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6CisKKzIwMTEtMDItMTcgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIFBvc2l0aW9uOjpub2RlKCkgdG8gUG9zaXRpb246
OmRlcHJlY2F0ZWROb2RlKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0NjIyCisgICAgICAgIAorICAgICAgICBEb25lIHRoZSByZW5hbWUuCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnRE
ZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6IFNpbmNlIG5ld1N0YXJ0IGFuZCBuZXdFbmQg
YXJlIHBhcmVudC1hbmNob3JlZCwKKyAgICAgICAgdXNlIGNvbnRhaW5lck5vZGUoKSBhbmQgb2Zm
c2V0SW5Db250YWluZXJOb2RlKCkgaW5zdGVhZCBvZiBkZXByZWNhdGVkIG1lbWJlciBmdW5jdGlv
bnMuCisKIDIwMTEtMDItMTYgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDc4Nzk1KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODA1LDggKzgwNSw4IEBA
IC0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3MKIAogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLT5jcmVhdGVSYW5n
ZSgpOwogICAgIGludCBleGNlcHRpb24gPSAwOwotICAgIHJhbmdlLT5zZXRTdGFydChuZXdTdGFy
dC5ub2RlKCksIG5ld1N0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGV4Y2VwdGlvbik7
Ci0gICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5ub2RlKCksIG5ld1N0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIGV4Y2VwdGlvbik7CisgICAgcmFuZ2UtPnNldFN0YXJ0KG5ld1N0YXJ0
LmNvbnRhaW5lck5vZGUoKSwgbmV3U3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGV4Y2Vw
dGlvbik7CisgICAgcmFuZ2UtPnNldEVuZChuZXdTdGFydC5jb250YWluZXJOb2RlKCksIG5ld1N0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBleGNlcHRpb24pOwogICAgIHJldHVybiBraXQo
cmFuZ2UuZ2V0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzg4MDcpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSArMSwxNSBA
QAorMjAxMS0wMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgUG9zaXRpb246
Om5vZGUoKSB0byBQb3NpdGlvbjo6ZGVwcmVjYXRlZE5vZGUoKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ2MjIKKworICAgICAgICBSZXBsYWNlZCB0
aGUgY2FsbCB0byBub2RlKCkgYnkgYSBjYWxsIHRvIGNvbnRhaW5lck5vZGUoKSBiZWNhdXNlIHRo
ZSByZXR1cm5lZCBub2RlIGlzCisgICAgICAgIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IHRoZSBzZWxlY3RlZCBjb250ZW50cyBhcmUgZWRpdGFibGUgYW5kIHN1Y2ggYSBjaGVjawor
ICAgICAgICBtdXN0IGJlIGRvbmUgYWdhaW5zdCB0aGUgY29udGFpbmVyIG5vZGUuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3JDbGllbnRRdDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6CisKID09IFJvbGxlZCBvdmVy
IHRvIENoYW5nZUxvZy0yMDExLTAyLTE2ID09CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAkocmV2aXNpb24gNzg3OTUpCisr
KyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudFF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50UXQ6OmhhbmRs
ZUtleWJvYXJkRXZlbnQKICAgICBpZiAoIWtldmVudCB8fCBrZXZlbnQtPnR5cGUoKSA9PSBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OktleVVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlKiBz
dGFydCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5ub2RlKCk7CisgICAgTm9kZSogc3Rh
cnQgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOwogICAgIGlm
ICghc3RhcnQpCiAgICAgICAgIHJldHVybjsKIAo=
</data>
<flag name="review"
          id="74477"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>