<?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>129083</bug_id>
          
          <creation_ts>2014-02-19 21:41:00 -0800</creation_ts>
          <short_desc>DFG should have a way of carrying and preserving conditional branch weights</short_desc>
          <delta_ts>2014-02-20 05:11:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>129100</dependson>
          <blocked>129082</blocked>
    
    <blocked>129055</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>atrick</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>rgabor</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>982667</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 21:41:00 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982673</commentid>
    <comment_count>1</comment_count>
      <attachid>224709</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 21:46:28 -0800</bug_when>
    <thetext>Created attachment 224709
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982677</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-19 21:50:02 -0800</bug_when>
    <thetext>Attachment 224709 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGNode.h:82:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNode.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1468:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 14 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>982679</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 21:52:30 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 224709 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNode.h:82:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNode.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1468:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; Total errors found: 3 in 14 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982685</commentid>
    <comment_count>4</comment_count>
      <attachid>224713</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 22:09:19 -0800</bug_when>
    <thetext>Created attachment 224713
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982686</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-19 22:12:27 -0800</bug_when>
    <thetext>Attachment 224713 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGNode.h:88:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 14 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>982687</commentid>
    <comment_count>6</comment_count>
      <attachid>224714</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 22:16:10 -0800</bug_when>
    <thetext>Created attachment 224714
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982690</commentid>
    <comment_count>7</comment_count>
      <attachid>224714</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-02-19 22:37:58 -0800</bug_when>
    <thetext>Comment on attachment 224714
the patch

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

r=me
Do all the other files have updated copyright (adding , 2014)?  If not, add them.

&gt; Source/JavaScriptCore/dfg/DFGNode.cpp:44
&gt; +    if (count == count)

Is this checking !NaN?  A comment would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982691</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 22:39:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 224714 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=224714&amp;action=review
&gt; 
&gt; r=me
&gt; Do all the other files have updated copyright (adding , 2014)?  If not, add them.

Will do!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNode.cpp:44
&gt; &gt; +    if (count == count)
&gt; 
&gt; Is this checking !NaN?  A comment would help.

Yup, I&apos;ll add a comment.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982710</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-19 23:56:06 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/164417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982763</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-20 02:48:46 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Landed in http://trac.webkit.org/changeset/164417

It broke half of the jsc stress tests on 32 bit platforms:
- GTK 32 bit: http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/41379
- EFL ARMv7 Thumb2: http://build.webkit.sed.hu/builders/EFL%20ARMv7%20Linux%20Release%20%28Build%29/builds/2934</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982779</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-20 04:08:25 -0800</bug_when>
    <thetext>I checked, the bug is valid on Mac too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>982799</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-20 05:11:42 -0800</bug_when>
    <thetext>new bug report about the regression on 32 bit platforms: https://bugs.webkit.org/show_bug.cgi?id=129100</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224709</attachid>
            <date>2014-02-19 21:46:28 -0800</date>
            <delta_ts>2014-02-19 22:09:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56163</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE0LTAyLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgd2F5IG9mIGNhcnJ5aW5nIGFuZCBwcmVzZXJ2aW5nIGNvbmRpdGlv
bmFsIGJyYW5jaCB3ZWlnaHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkwODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEJyYW5jaCBhbmQgU3dpdGNoIG5vdyBoYXZlIGJyYW5jaCBjb3Vu
dHMvd2VpZ2h0cyBmb3IgZWFjaCB0YXJnZXQuIFRoaXMgaXMgZW5jYXBzdWxhdGVkCisgICAgICAg
IGJlaGluZCBERkc6OkJyYW5jaFRhcmdldC4gV2UgY2FycnkgdGhpcyBkYXRhIGFsbCB0aGUgd2F5
IHRvIHRoZSBGVEwsIGFuZCB0aGUgREZHCisgICAgICAgIGJhY2tlbmQgaWdub3JlcyBpdC4KKyAg
ICAgICAgCisgICAgICAgIFdlIGRvbid0IHNldCB0aGlzIGRhdGEgeWV0OyB0aGF0J3MgZm9yIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNTUuCisKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaFRhcmdldDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJn
ZXQ6OkJyYW5jaFRhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoVGFyZ2V0OjpzZXRC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJnZXQ6OmJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OndpdGhCeXRlY29kZUluZGlj
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OnRha2VuQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoRGF0YTo6bm90VGFrZW5CeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hEYXRhOjpmb3JDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlN3aXRjaENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hE
YXRhOjpTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YXJnZXRCeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnRhcmdldEJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nl
c3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXApOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZUludDUyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVTd2l0Y2gpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpidWlsZFN3aXRjaCk6CisKIDIwMTQtMDItMTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBhZnRlciAtW0pTQ29udGV4dCBldmFsdWF0ZVNj
cmlwdDpdIHdoZW4gaW5pdGlhbGl6aW5nIEpTQ29udGV4dCB3aXRoIEpTVmlydHVhbE1hY2hpbmUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDYgKzcyMywxMyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCkgfHwgdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKICAgICB9CiAgICAgCisgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSh1bnNp
Z25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCisgICAgeworICAgICAgICBCcmFuY2hEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX2JyYW5jaERhdGEuYWRkKCk7CisgICAgICAgICpkYXRhID0gQnJh
bmNoRGF0YTo6d2l0aEJ5dGVjb2RlSW5kaWNlcyh0YWtlbiwgbm90VGFrZW4pOworICAgICAgICBy
ZXR1cm4gZGF0YTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBv
cCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTE0NTgs
OCArMTQ2NSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAg
ICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrKCkgPT0gMCk7Ci0gICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2soYmxvY2suZ2V0KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+dGFy
Z2V0QmxvY2soKSA9PSAwKTsKKyAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrLmdl
dCgpOwogICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVk
c0Vhcmx5UmV0dXJuTGlua2luZyA9IGZhbHNlOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAg
ICAgYmxvY2tUb0xpbmstPmlzTGlua2VkID0gdHJ1ZTsKQEAgLTI2OTcsNyArMjcwNCw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfanRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfanRydWUpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfanRydWUpKSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KIApAQCAtMjcxNiw3ICsyNzIz
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pmYWxzZSkpLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RI
KG9wX2pmYWxzZSksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgIH0KIApAQCAt
MjcyNCw3ICsyNzMxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25z
dGFudE51bGwoKSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX2plcV9udWxsKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKSkpLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwpOwogICAgICAgICB9
CiAKQEAgLTI3MzIsNyArMjczOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1
ZSwgY29uc3RhbnROdWxsKCkpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5lcV9udWxsKSksIE9wSW5mbyht
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3Bfam5lcV9udWxsKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9udWxsKTsK
ICAgICAgICAgfQogCkBAIC0yNzU4LDcgKzI3NjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBv
cDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9qbGVzcykpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpKSwgY29uZGl0aW9uKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX2psZXNzKTsKICAgICAgICAgfQogCkBAIC0yNzg0LDcgKzI3
OTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
YWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2psZXNzZXEpKSwgY29uZGl0aW9u
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3Bfamxlc3NlcSkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2psZXNzZXEpOwogICAgICAgICB9CiAKQEAgLTI4MTAsNyArMjgxNyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxh
dGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyKSkp
LCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXIpOwogICAg
ICAgICB9CiAKQEAgLTI4MzYsNyArMjg0Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwg
b3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfamdyZWF0ZXJlcSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChC
cmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQs
IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcmVxKSkpLCBjb25kaXRp
b24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamdyZWF0ZXJlcSk7CiAgICAgICAgIH0K
IApAQCAtMjg2Miw3ICsyODY5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX2pubGVzcykpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNl
dCksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pubGVzcyksIG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2pubGVzcyk7CiAgICAgICAgIH0KIApAQCAtMjg4OCw3ICsyODk1LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3Jh
cGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpKSwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3NlcSksIG1fY3VycmVudEluZGV4ICsgcmVsYXRp
dmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVz
c2VxKTsKICAgICAgICAgfQogCkBAIC0yOTE0LDcgKzI5MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ciwgb3AxLCBvcDIpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1
cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyKSksIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3Bfam5ncmVhdGVyKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKICAgICAg
ICAgfQogCkBAIC0yOTQwLDY2ICsyOTQ3LDYzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwg
b3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2puZ3JlYXRlcmVxKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3Bfam5ncmVhdGVyZXEpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXJlcSk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3N3aXRjaF9pbW06IHsKLSAgICAgICAg
ICAgIFN3aXRjaERhdGEgZGF0YTsKKyAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9n
cmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJ
bW07CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9w
LT5tX3N3aXRjaFJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmRdOwotICAgICAg
ICAgICAgZGF0YS5zZXRGYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRo
cm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZS5icmFuY2hPZmZzZXRzW2ldKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKQor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUlu
ZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRh
dGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7Ci0gICAg
ICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5s
YXN0KCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7Ci0gICAgICAgICAgICBTd2l0Y2hE
YXRhIGRhdGE7CisgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zd2l0
Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoQ2hhcjsKICAgICAg
ICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNo
UmVtYXBbY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBkYXRh
LnNldEZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRC
eXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1f
Y3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKLSAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkpCisgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5h
cHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4
KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdl
dCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBw
ZW5kKGRhdGEpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFw
aC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9w
SW5mbygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogewotICAgICAgICAgICAg
U3dpdGNoRGF0YSBkYXRhOworICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaFN0cmlu
ZzsKICAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBkYXRhLnNldEZhbGxUaHJvdWdoQnl0ZWNvZGVJ
bmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudElu
ZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTdHJp
bmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShk
YXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJp
bmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlcjsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJs
ZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVu
ZCgpOwogICAgICAgICAgICAgZm9yIChpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IG1fY3VycmVudEluZGV4ICsgaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSkKKyAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgp
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNh
c2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2Rl
SW5kZXgoTGF6eUpTVmFsdWU6Omtub3duU3RyaW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJn
ZXQpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFw
cGVuZChkYXRhKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3Jh
cGgubV9zd2l0Y2hEYXRhLmxhc3QoKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBP
cEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfc3RyaW5nKTsK
ICAgICAgICAgfQogCkBAIC0zNDIzLDE5ICszNDI3LDIzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmxpbmtCbG9jayhCYXNpY0Jsb2MKICAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAg
ICBjYXNlIEp1bXA6Ci0gICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29k
ZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQ
YXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+dGFyZ2V0QmxvY2soKSA9IGJsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT50YXJnZXRCeXRlY29kZU9mZnNldER1cmlu
Z1BhcnNpbmcoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIEJyYW5jaDoK
LSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3Np
YmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwot
ICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9z
c2libGVUYXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7CisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgQnJhbmNoRGF0YSogZGF0YSA9IG5vZGUt
PmJyYW5jaERhdGEoKTsKKyAgICAgICAgZGF0YS0+dGFrZW4uYmxvY2sgPSBibG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+dGFrZW5CeXRlY29kZUluZGV4KCkpOwor
ICAgICAgICBkYXRhLT5ub3RUYWtlbi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9z
c2libGVUYXJnZXRzLCBkYXRhLT5ub3RUYWtlbkJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTd2l0Y2g6CisgICAgY2FzZSBTd2l0Y2g6
IHsKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCk7IGkt
LTspCi0gICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldCA9IGJs
b2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCkt
PmNhc2VzW2ldLnRhcmdldEJ5dGVjb2RlSW5kZXgoKSk7Ci0gICAgICAgIG5vZGUtPnN3aXRjaERh
dGEoKS0+ZmFsbFRocm91Z2ggPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0
cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgICAgICBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJ5dGVjb2RlSW5kZXgo
KSk7CisgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9m
ZnNldChwb3NzaWJsZVRhcmdldHMsIGRhdGEtPmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSk7
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMywxNCArMTMzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIC8vIFBydW5lIG91dCBjYXNlcyB0aGF0IGVuZCB1cCBqdW1w
aW5nIHRvIGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGRhdGEtPmNhc2VzW2ldLnRhcmdldCA9PSBkYXRhLT5mYWxsVGhyb3VnaCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhLT5jYXNlc1tpLS1dID0gZGF0YS0+Y2FzZXMudGFrZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jYXNlc1tpXS50YXJnZXQu
YmxvY2sgPT0gZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5jb3VudCArPSBkYXRhLT5jYXNlc1tpXS50YXJnZXQu
Y291bnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y2FzZXNbaS0tXSA9IGRh
dGEtPmNhc2VzLmxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jYXNl
cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0aGlzIHR1cm5zCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAgICAgICAgICAgICBp
ZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0VG9KdW1wKGJsb2NrLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrLCBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTE1MywxMyArMTU2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSAm
JiBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBkYXRhLT5jYXNl
c1tpXS52YWx1ZS5zdHJpY3RFcXVhbCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvdW5kID09IFRydWVUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0QmxvY2sgPSBkYXRhLT5jYXNlc1tpXS50YXJnZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRhcmdldEJsb2NrID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJs
b2NrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gTWl4ZWRUcmlTdGF0ZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmb3VuZCA9PSBGYWxzZVRyaVN0YXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRhcmdldEJsb2NrID0gZGF0YS0+ZmFsbFRocm91Z2g7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGFyZ2V0QmxvY2sgPSBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jazsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRCbG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gamV0dGlz
b25lZEJsb2NrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY5LDEwICs2NjksOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdlLT5oYXNCb29sZWFuUmVz
dWx0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxk
MShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0b0JlTm90VGFrZW4gPSBub2Rl
LT50YWtlbkJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRUYWtlbkJs
b2NrKHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROb3RUYWtl
bkJsb2NrKHRvQmVOb3RUYWtlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hEYXRh
KiBkYXRhID0gbm9kZS0+YnJhbmNoRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKGRhdGEtPnRha2VuLCBkYXRhLT5ub3RUYWtlbik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNSwxNiArMzE1
LDE2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICB9CiAg
ICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJh
d1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpLCAiICgiLCBpbkNvbnRleHQoKm5vZGUtPndl
YWtDb25zdGFudCgpLT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7Ci0gICAgaWYgKG5vZGUt
PmlzQnJhbmNoKCkgfHwgbm9kZS0+aXNKdW1wKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRha2VuQmxvY2soKSk7CisgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsICpub2RlLT50YXJnZXRCbG9jaygpKTsKICAgICBp
ZiAobm9kZS0+aXNCcmFuY2goKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRjoiLCAqbm9k
ZS0+bm90VGFrZW5CbG9jaygpKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCBub2Rl
LT5icmFuY2hEYXRhKCktPnRha2VuLCAiLCBGOiIsIG5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFr
ZW4pOwogICAgIGlmIChub2RlLT5pc1N3aXRjaCgpKSB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRh
dGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+
a2luZCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEtPmNh
c2VzW2ldLnZhbHVlLCBjb250ZXh0KSwgIjoiLCAqZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDoiLCAqZGF0YS0+ZmFsbFRocm91Z2gpOwor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS0+Y2FzZXNbaV0udmFs
dWUsIGNvbnRleHQpLCAiOiIsIGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgIG91dC5w
cmludChjb21tYSwgImRlZmF1bHQ6IiwgZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgIH0KICAgICBD
bG9iYmVyU2V0IHJlYWRzOwogICAgIENsb2JiZXJTZXQgd3JpdGVzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MjksNyArODI5LDgg
QEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVj
dHVyZVNldDsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+
IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5
QnVmZmVyRGF0YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7Ci0gICAgU2VnbWVudGVkVmVjdG9y
PFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKKyAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFu
Y2hEYXRhOworICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRp
R2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOwogICAgIFZlY3RvcjxJbmxp
bmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIE93blB0cjxJbmxp
bmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDE2ICszNjMsMTYgQEAgaW5saW5l
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgIHN3aXRjaCAodGVybWluYWwt
Pm9wKCkpIHsKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkpOworICAgICAgICBy
ZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRhcmdldEJsb2NrKCkpOwogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAg
Ym9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hE
aXJlY3Rpb24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNp
Y0Jsb2NrLCB0ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2spOwog
ICAgICAgICBpZiAoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IFRha2VUcnVlKQot
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+bm90VGFr
ZW5CbG9jaygpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgdGVy
bWluYWwtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2spOwogICAgICAgICByZXR1cm4gY2hh
bmdlZDsKICAgICB9CiAgICAgICAgIApAQCAtMzgxLDkgKzM4MSw5IEBAIGlubGluZSBib29sIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVQKICAgICAgICAgLy8gd2UncmUgbm90LiBIb3dldmVy
IEkgc29tZWhvdyBkb3VidCB0aGF0IHRoaXMgd2lsbCBldmVyIGJlIGEgYmlnIGRlYWwuCiAgICAg
ICAgIEFTU0VSVChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5j
aERpcmVjdGlvbik7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSB0ZXJtaW5hbC0+c3dpdGNo
RGF0YSgpOwotICAgICAgICBib29sIGNoYW5nZWQgPSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5m
YWxsVGhyb3VnaCk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRh
dGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+
Y2FzZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Js
b2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwogICAgICAgICByZXR1
cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjAsOCArMTYwLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogICAgIG1faml0Q29kZS0+Y29tbW9uLnNsb3dBcmd1bWVudHMgPSBzdGQ6Om1vdmUo
bV9ncmFwaC5tX3Nsb3dBcmd1bWVudHMpOwogCiAgICAgQml0VmVjdG9yIHVzZWRKdW1wVGFibGVz
OwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLnNpemUoKTsgaS0t
OykgewotICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gbV9ncmFwaC5tX3N3aXRjaERhdGFbaV07
CisgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dp
dGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgeworICAgICAgICBTd2l0Y2hEYXRhJiBk
YXRhID0gKippdGVyOwogICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIApAQCAtMTcyLDE0ICsxNzIsMTQgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAKICAgICAgICAgdXNlZEp1
bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFi
bGVJbmRleCk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gtPmluZGV4XSk7CisgICAgICAgIHRhYmxl
LmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2guYmxvY2stPmluZGV4XSk7CiAgICAgICAgIHRhYmxlLmN0aU9mZnNldHMuZ3Jvdyh0
YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRh
YmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0
c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEu
Y2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBk
YXRhLmNhc2VzW2pdOwogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUu
c3dpdGNoTG9va3VwVmFsdWUoKSAtIHRhYmxlLm1pbl0gPQotICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC0+aW5kZXhdKTsKKyAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50
YXJnZXQuYmxvY2stPmluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xOTMsOCAr
MTkzLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgIC8v
IE5PVEU6IHdlIGNhbm5vdCBjbGVhciBzdHJpbmcgc3dpdGNoIHRhYmxlcyBiZWNhdXNlICgxKSB3
ZSdyZSBydW5uaW5nIGNvbmN1cnJlbnRseQogICAgIC8vIGFuZCB3ZSBjYW5ub3QgZGVyZWYgU3Ry
aW5nSW1wbCdzIGFuZCAoMikgaXQgd291bGQgYmUgd2VpcmQgdG8gZGVyZWYgdGhvc2UKICAgICAv
LyBTdHJpbmdJbXBsJ3Mgc2luY2Ugd2UgcmVmZXIgdG8gdGhlbS4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3dpdGNo
RGF0YSYgZGF0YSA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhW2ldOworICAgIGZvciAoQmFnPFN3aXRj
aERhdGE+OjppdGVyYXRvciBzd2l0Y2hEYXRhSXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJl
Z2luKCk7ICEhc3dpdGNoRGF0YUl0ZXI7ICsrc3dpdGNoRGF0YUl0ZXIpIHsKKyAgICAgICAgU3dp
dGNoRGF0YSYgZGF0YSA9ICoqc3dpdGNoRGF0YUl0ZXI7CiAgICAgICAgIGlmICghZGF0YS5kaWRV
c2VKdW1wVGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0yMDIsNyAr
MjAyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxl
ID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5k
ZXgpOwotICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1f
YmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLT5pbmRleF0pOworICAgICAgICB0YWJsZS5jdGlE
ZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJv
dWdoLmJsb2NrLT5pbmRleF0pOwogICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNl
dFRhYmxlOjppdGVyYXRvciBpdGVyOwogICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09m
ZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAg
ICAgZm9yIChpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZm
ZXImIGxpbmtCCiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pd
OwogICAgICAgICAgICAgaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmZpbmQobXlDYXNlLnZhbHVl
LnN0cmluZ0ltcGwoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IGVuZCk7
Ci0gICAgICAgICAgICBpdGVyLT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXQtPmluZGV4XSk7CisgICAgICAgICAgICBpdGVy
LT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215
Q2FzZS50YXJnZXQuYmxvY2stPmluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCit2b2lkIEJy
YW5jaFRhcmdldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghYmxv
Y2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBvdXQucHJpbnQoKmJsb2NrKTsKKyAgICAK
KyAgICBpZiAoY291bnQgPT0gY291bnQpCisgICAgICAgIG91dC5wcmludCgiL3c6IiwgY291bnQp
OworfQorCiB1bnNpZ25lZCBOb2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5vZGVB
bGxvY2F0b3I6OmFsbG9jYXRvck9mKHRoaXMpLT5pbmRleE9mKHRoaXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw0NyBA
QCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlOwogfTsKIAorc3RydWN0IEJyYW5jaFRhcmdldCB7CisgICAgQnJhbmNoVGFyZ2V0KCkgOiBi
bG9jaygwKSwgY291bnQoUU5hTikgeyB9CisgICAgCisgICAgZXhwbGljaXQgQnJhbmNoVGFyZ2V0
KEJhc2ljQmxvY2sqIGJsb2NrKSA6IGJsb2NrKGJsb2NrKSwgY291bnQoUU5hTikgeyB9CisgICAg
CisgICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAg
eworICAgICAgICBibG9jayA9IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8
dWludHB0cl90PihieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7IH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBCYXNp
Y0Jsb2NrKiBibG9jazsKKyAgICBmbG9hdCBjb3VudDsKK307CisKK3N0cnVjdCBCcmFuY2hEYXRh
IHsKKyAgICBzdGF0aWMgQnJhbmNoRGF0YSB3aXRoQnl0ZWNvZGVJbmRpY2VzKAorICAgICAgICB1
bnNpZ25lZCB0YWtlbkJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIEJyYW5jaERhdGEgcmVzdWx0OworICAgICAgICByZXN1bHQudGFr
ZW4uYmxvY2sgPSBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4odGFrZW5CeXRlY29kZUluZGV4KSk7CisgICAgICAgIHJlc3VsdC5ub3RUYWtlbi5ibG9jayA9
IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihub3RUYWtl
bkJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gdGFrZW4uYnl0
ZWNvZGVJbmRleCgpOyB9CisgICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gbm90VGFrZW4uYnl0ZWNvZGVJbmRleCgpOyB9CisgICAgCisgICAgQmFzaWNC
bG9jayomIGZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChj
b25kaXRpb24pCisgICAgICAgICAgICByZXR1cm4gdGFrZW4uYmxvY2s7CisgICAgICAgIHJldHVy
biBub3RUYWtlbi5ibG9jazsKKyAgICB9CisgICAgCisgICAgQnJhbmNoVGFyZ2V0IHRha2VuOwor
ICAgIEJyYW5jaFRhcmdldCBub3RUYWtlbjsKK307CisKIC8vIFRoZSBTd2l0Y2hEYXRhIGFuZCBh
c3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcyBkdXBsaWNhdGUgdGhlIGluZm9ybWF0aW9uIGluCiAv
LyBKdW1wVGFibGUuIFRoZSBERkcgbWF5IHVsdGltYXRlbHkgZW5kIHVwIHVzaW5nIHRoZSBKdW1w
VGFibGUsIHRob3VnaCBpdCBtYXkKIC8vIGluc3RlYWQgZGVjaWRlIHRvIGRvIHNvbWV0aGluZyBk
aWZmZXJlbnQgLSB0aGlzIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBERkcuCkBAIC05MSw3ICsxMzIs
NiBAQCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIC8vIHZhbHVlcy4KIHN0cnVjdCBTd2l0
Y2hDYXNlIHsKICAgICBTd2l0Y2hDYXNlKCkKLSAgICAgICAgOiB0YXJnZXQoMCkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtMTA1LDE0ICsxNDUsMTIgQEAgc3RydWN0IFN3aXRjaENhc2UgewogICAg
IHsKICAgICAgICAgU3dpdGNoQ2FzZSByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHZh
bHVlOwotICAgICAgICByZXN1bHQudGFyZ2V0ID0gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmVzdWx0LnRh
cmdldC5zZXRCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCB0YXJnZXRCeXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGFyZ2V0KTsgfQotICAgIAogICAg
IExhenlKU1ZhbHVlIHZhbHVlOwotICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKKyAgICBCcmFuY2hU
YXJnZXQgdGFyZ2V0OwogfTsKIAogZW51bSBTd2l0Y2hLaW5kIHsKQEAgLTEyNiwyMSArMTY0LDE0
IEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICAvLyBjb25zdHJ1Y3RpbmcgdGhpcyBzaG91bGQg
bWFrZSBzdXJlIHRvIGluaXRpYWxpemUgZXZlcnl0aGluZyB0aGV5CiAgICAgLy8gY2FyZSBhYm91
dCBtYW51YWxseS4KICAgICBTd2l0Y2hEYXRhKCkKLSAgICAgICAgOiBmYWxsVGhyb3VnaCgwKQot
ICAgICAgICAsIGtpbmQoc3RhdGljX2Nhc3Q8U3dpdGNoS2luZD4oLTEpKQorICAgICAgICA6IGtp
bmQoc3RhdGljX2Nhc3Q8U3dpdGNoS2luZD4oLTEpKQogICAgICAgICAsIHN3aXRjaFRhYmxlSW5k
ZXgoVUlOVF9NQVgpCiAgICAgICAgICwgZGlkVXNlSnVtcFRhYmxlKGZhbHNlKQogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzZXRGYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgodW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGZhbGxUaHJvdWdoID0gYml0d2lzZV9jYXN0
PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpKTsKLSAg
ICB9Ci0gICAgdW5zaWduZWQgZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZmFsbFRocm91Z2gpOyB9Ci0gICAgCiAgICAgVmVj
dG9yPFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoOworICAg
IEJyYW5jaFRhcmdldCBmYWxsVGhyb3VnaDsKICAgICBTd2l0Y2hLaW5kIGtpbmQ7CiAgICAgdW5z
aWduZWQgc3dpdGNoVGFibGVJbmRleDsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKQEAgLTgx
OSw0MCArODUwLDIyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHVu
c2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKKyAgICB1bnNpZ25lZCB0
YXJnZXRCeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICBBU1NFUlQoaXNKdW1wKCkpOwogICAg
ICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQogCi0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRl
Y29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQnJhbmNo
KCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8yOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dFRha2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgQmFzaWNCbG9jayomIHRhcmdldEJs
b2NrKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAg
ICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgbV9vcEluZm8yID0gYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiYg
dGFrZW5CbG9jaygpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAo
KSk7CisgICAgICAgIEFTU0VSVChpc0p1bXAoKSk7CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9j
YXN0PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9j
ayomIG5vdFRha2VuQmxvY2soKQorICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2Fz
dDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEJyYW5jaERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3
aXRjaERhdGEoKQpAQCAtODc5LDI1ICs4OTIsMjYgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAg
ICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERh
dGEoKS0+Y2FzZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCkt
PmNhc2VzW2luZGV4XS50YXJnZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEo
KS0+Y2FzZXNbaW5kZXhdLnRhcmdldC5ibG9jazsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluZGV4ID09IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBzd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoOworICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERh
dGEoKS0+ZmFsbFRocm91Z2guYmxvY2s7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRl
eCkgewogICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9jaygpOwor
ICAgICAgICAgICAgaWYgKGlzSnVtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRC
bG9jaygpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CiAg
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrKCk7CisgICAg
ICAgICAgICByZXR1cm4gYnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gdGFrZW5CbG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldEJsb2Nr
KCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZv
ckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0JyYW5j
aCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2soKSA6IG5vdFRha2Vu
QmxvY2soKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaERhdGEoKS0+Zm9yQ29uZGl0aW9uKGNvbmRp
dGlvbik7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsOCArMjgxLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQs
IE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJhc2ljQmxvY2sqIHRha2Vu
ID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
YnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJh
bmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNpY0Jsb2NrKiBub3RU
YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAgICAgCiAg
ICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7
CkBAIC0zNjEsOCArMzYxLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVD
b21wYQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNp
Y0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRh
a2VuLmJsb2NrOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0
Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTUxNCw4ICs1MTQsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBOb2RlKiBi
cmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBi
cmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogCiAgICAgLy8gVGhlIGJy
YW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8g
SWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhl
IGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KQEAgLTEyOTEsOCArMTI5
MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSkKIHsK
LSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7
CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5v
dFRha2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBs
ZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTYxNSw4ICsxNjE1LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT50YWtl
bkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJs
b2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RU
YWtlbi5ibG9jazsKIAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAg
ICAgY2FzZSBCb29sZWFuVXNlOiB7CkBAIC0zMDA5LDcgKzMwMDksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6
IHsKLSAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkpOworICAgICAgICBqdW1wKG5vZGUt
PmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2spOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yODUsOCArMjg1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
TnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAg
IEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2lj
QmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAg
ICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFr
ZW4uYmxvY2s7CiAgICAgCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAg
IGludmVydCA9ICFpbnZlcnQ7CkBAIC0zNjMsOCArMzYzLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxw
ZXJGdW5jdGlvbikKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2Vu
QmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2Vu
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEo
KS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5i
cmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENv
bmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAg
LTUwNyw4ICs1MDcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShO
b2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBu
b3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0
YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2Nr
OwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFr
ZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90
VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3Vn
aC4KQEAgLTE2NjksOCArMTY2OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RUb09iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9P
YmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9k
ZSogYnJhbmNoTm9kZSkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRh
a2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRh
a2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERh
dGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlz
LCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTc5Miw4ICsxNzky
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDUyQ29tcGFyZQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnQ1MkJyYW5jaChOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24p
CiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0g
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJs
b2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgp
LT5ub3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBi
cmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRj
aCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdl
IGNhbiBmYWxsIHRocm91Z2guCkBAIC0yMDMyLDggKzIwMzIsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSogbm9kZSkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG5vZGUtPnRha2VuQmxv
Y2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7
CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2Vu
LmJsb2NrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAg
ICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CkBAIC0zMzY5LDcgKzMzNjksNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6
Okp1bXA6IHsKLSAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkpOworICAgICAgICBqdW1w
KG5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDk3LDggKzEwOTcsOCBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURv
dWJsZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBi
cmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMTA5LDggKzEx
MDksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUs
IE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2Rl
LT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5u
b3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFu
Y2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsK
ICAgICAKQEAgLTExODUsOCArMTE4NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZU9iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQm9vbGVh
bkJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFu
Y2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hO
b2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2Rl
LT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
YnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRoZSBi
cmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8v
IElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRo
ZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0xMjE2LDggKzEy
MTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCb29sCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMyQnJhbmNoKE5vZGUqIG5vZGUsIE5v
ZGUqIGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsK
LSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4u
YmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRh
KCktPm5vdFRha2VuLmJsb2NrOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxs
IGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dp
dGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28g
d2UgY2FuIGZhbGwgdGhyb3VnaC4KQEAgLTM2MzcsOCArMzYzNyw4IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxv
Y2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sg
IT0gVUlOVF9NQVgpIHsKICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJy
YW5jaEluZGV4SW5CbG9jayk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9k
ZS0+dGFrZW5CbG9jaygpOwotICAgICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hO
b2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgICAgICBCYXNpY0Jsb2NrKiBub3RU
YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rp
b24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgpAQCAtNDIxMyw4ICs0MjEzLDggQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogICAgIEFTU0VSVChub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJy
YW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5j
aE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4g
PSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIGJv
b2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC00
ODk1LDcgKzQ4OTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgK
ICAgICBtX2ppdC5zdWIzMihJbW0zMih0YWJsZS5taW4pLCB2YWx1ZSk7CiAgICAgYWRkQnJhbmNo
KAogICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB2YWx1
ZSwgSW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKLSAgICAgICAgZGF0YS0+ZmFsbFRo
cm91Z2gpOworICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gpOwogICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNoLCB2YWx1ZSwgSklU
Q29tcGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5qdW1wKHNjcmF0Y2gp
OwpAQCAtNDkyOSw3ICs0OTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaElt
bShOb2RlKgogICAgICAgICBhZGRCcmFuY2goCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
NjQoCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlUmVncy5ncHIoKSwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdz
LmdwcigpLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhzY3JhdGNoKTsKQEAgLTQ5NjcsNyArNDk2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW4KICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZMZW5ndGgoKSksCiAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSkpLAotICAg
ICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2Nr
KTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CiAgICAgCkBAIC01MDI1LDEy
ICs1MDI1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKE5vZGUKICAg
ICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAg
ICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogI2Vsc2UKICAgICAgICAgYWRkQnJh
bmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAg
ICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBh
ZGRCcmFuY2goCkBAIC01MDM4LDcgKzUwMzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
U3dpdGNoQ2hhcihOb2RlCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVJlZ3MucGF5bG9h
ZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIGVtaXRTd2l0Y2hDaGFyU3Ry
aW5nSnVtcChkYXRhLCBvcDFSZWdzLnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CiAgICAgICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CkBAIC01MDkzLDcgKzUw
OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyCiAgICAgfQog
ICAgIAogICAgIGlmIChiZWdpbiA9PSBlbmQpIHsKLSAgICAgICAganVtcChkYXRhLT5mYWxsVGhy
b3VnaCwgRm9yY2VKdW1wKTsKKyAgICAgICAganVtcChkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaywg
Rm9yY2VKdW1wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTUxMjksMTQgKzUx
MjksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJpbmFyeVN3aXRjaFN0cgogICAgICAg
ICBkYXRhTG9nKCJsZW5ndGggPSAiLCBtaW5MZW5ndGgsICIsIGNvbW1vbkNoYXJzID0gIiwgY29t
bW9uQ2hhcnMsICIsIGFsbExlbmd0aHNFcXVhbCA9ICIsIGFsbExlbmd0aHNFcXVhbCwgIlxuIik7
CiAgICAgCiAgICAgaWYgKCFhbGxMZW5ndGhzRXF1YWwgJiYgYWxyZWFkeUNoZWNrZWRMZW5ndGgg
PCBtaW5MZW5ndGgpCi0gICAgICAgIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgbGVu
Z3RoLCBJbW0zMihtaW5MZW5ndGgpLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgIGJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgbGVuZ3RoLCBJbW0zMihtaW5MZW5ndGgpLCBkYXRh
LT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAgaWYgKGFsbExlbmd0aHNFcXVhbCAmJiAoYWxyZWFk
eUNoZWNrZWRMZW5ndGggPCBtaW5MZW5ndGggfHwgIWNoZWNrZWRFeGFjdExlbmd0aCkpCi0gICAg
ICAgIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGVuZ3RoLCBJbW0zMihtaW5M
ZW5ndGgpLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgIGJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgbGVuZ3RoLCBJbW0zMihtaW5MZW5ndGgpLCBkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ2hlY2tlZDsgaSA8IGNv
bW1vbkNoYXJzOyArK2kpIHsKICAgICAgICAgYnJhbmNoOCgKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyLCBpKSwKLSAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChpKSksIGRhdGEt
PmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihjYXNlc1tiZWdpbl0uc3Ry
aW5nLT5hdChpKSksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAg
aWYgKG1pbkxlbmd0aCA9PSBjb21tb25DaGFycykgewpAQCAtNTIwNiw3ICs1MjA2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJpbmFyeVN3aXRjaFN0cgogICAgICAgICAgICAgdGVtcCwg
bWluTGVuZ3RoLCBhbGxMZW5ndGhzRXF1YWwpOwogICAgIH0KICAgICAKLSAgICBhZGRCcmFuY2go
YmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCksIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICBhZGRC
cmFuY2goYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2Nr
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3RyaW5nKFN3
aXRjaERhdGEqIGRhdGEsIEdQUlJlZyBzdHJpbmcpCkBAIC01MjU4LDcgKzUyNTgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TCiAgICAgVmVjdG9yPFN0cmluZ1N3
aXRjaENhc2U+IGNhc2VzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNl
cy5zaXplKCk7ICsraSkgewogICAgICAgICBjYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICBTdHJp
bmdTd2l0Y2hDYXNlKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmluZ0ltcGwoKSwgZGF0YS0+Y2Fz
ZXNbaV0udGFyZ2V0KSk7CisgICAgICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKGRhdGEtPmNhc2Vz
W2ldLnZhbHVlLnN0cmluZ0ltcGwoKSwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKSk7CiAg
ICAgfQogICAgIAogICAgIHN0ZDo6c29ydChjYXNlcy5iZWdpbigpLCBjYXNlcy5lbmQoKSk7CkBA
IC01Mjk0LDggKzUyOTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5n
KE5vCiAgICAgICAgIAogICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKHRlbXBHUFIs
IGlkZW50aWZpZXJDYXNlVmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CiAgICAgICAgIHdo
aWxlIChiaW5hcnlTd2l0Y2guYWR2YW5jZShtX2ppdCkpCi0gICAgICAgICAgICBqdW1wKGRhdGEt
PmNhc2VzW2JpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKV0udGFyZ2V0LCBGb3JjZUp1bXApOwotICAg
ICAgICBhZGRCcmFuY2goYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCksIGRhdGEtPmZhbGxUaHJv
dWdoKTsKKyAgICAgICAgICAgIGp1bXAoZGF0YS0+Y2FzZXNbYmluYXJ5U3dpdGNoLmNhc2VJbmRl
eCgpXS50YXJnZXQuYmxvY2ssIEZvcmNlSnVtcCk7CisgICAgICAgIGFkZEJyYW5jaChiaW5hcnlT
d2l0Y2guZmFsbFRocm91Z2goKSwgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICAK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNTMyNSwxMiArNTMy
NSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vCiAgICAgICAg
IGFkZEJyYW5jaCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxUmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAg
ICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICNlbHNlCiAgICAgICAgIGFkZEJyYW5jaCgK
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgb3AxUmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIGRh
dGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYWRkQnJh
bmNoKApAQCAtNTMzOCw3ICs1MzM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRj
aFN0cmluZyhObwogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFSZWdzLnBheWxvYWRHUFIo
KSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSks
Ci0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jayk7CiAgICAgICAgIAogICAgICAgICBlbWl0U3dpdGNoU3RyaW5nT25TdHJp
bmcoZGF0YSwgb3AxUmVncy5wYXlsb2FkR1BSKCkpOwogICAgICAgICBub1Jlc3VsdChub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDg3LDI1ICszNDg3LDIzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlSnVtcCgpCiAgICAgewotICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFr
ZW5CbG9jaygpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YXJnZXRC
bG9jaygpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJyYW5jaCgpCiAgICAgewot
ICAgICAgICAvLyBGSVhNRTogREZHIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgdXMgYnJhbmNoIHdl
aWdodHMgaGVyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyOTA1NQotICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAg
ICAgYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIHVuc3VyZShsb3dCbG9j
ayhtX25vZGUtPnRha2VuQmxvY2soKSkpLAotICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKG1f
bm9kZS0+bm90VGFrZW5CbG9jaygpKSkpOworICAgICAgICAgICAgV2VpZ2h0ZWRUYXJnZXQoCisg
ICAgICAgICAgICAgICAgbG93QmxvY2sobV9ub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2Nr
KSwKKyAgICAgICAgICAgICAgICBtX25vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uY291bnQpLAor
ICAgICAgICAgICAgV2VpZ2h0ZWRUYXJnZXQoCisgICAgICAgICAgICAgICAgbG93QmxvY2sobV9u
b2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrKSwKKyAgICAgICAgICAgICAgICBtX25v
ZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uY291bnQpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlU3dpdGNoKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBERkcgc2hvdWxkIGJl
IGFibGUgdG8gdGVsbCB1cyBicmFuY2ggd2VpZ2h0cyBoZXJlLgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDU1Ci0gICAgICAgIAogICAgICAg
ICBTd2l0Y2hEYXRhKiBkYXRhID0gbV9ub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgIHN3aXRj
aCAoZGF0YS0+a2luZCkgewogICAgICAgICBjYXNlIFN3aXRjaEltbTogewpAQCAtMzUzNyw3ICsz
NTM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc05vdElu
dCwgaXNEb3VibGUpOwogICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAg
ICAgICAgICAgaXNDZWxsT3JNaXNjKGJveGVkVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICB1
c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoKSksIHJhcmVseShpc0RvdWJsZSkpOwor
ICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJs
b2NrKSksIHJhcmVseShpc0RvdWJsZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsKICAgICAgICAgICAg
ICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZShib3hlZFZhbHVlKTsKQEAgLTM1
NDUsNyArMzU0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVu
ZChtX291dC5hbmNob3IoaW50SW5Eb3VibGUpKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKG1fb3V0LmludFRvRG91
YmxlKGludEluRG91YmxlKSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICB1bnN1
cmUoc3dpdGNoT25JbnRzKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoKSkpOwor
ICAgICAgICAgICAgICAgICAgICB1bnN1cmUoc3dpdGNoT25JbnRzKSwgdW5zdXJlKGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzU2Miw2ICszNTYwLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogewogICAgICAgICAgICAgTFZhbHVlIHN0cmlu
Z1ZhbHVlOwogICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVz
ZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB1bnN1cmUoKSBmb3IgdGhlIGJyYW5jaCB3ZWlnaHQKKyAg
ICAgICAgICAgIC8vIG9mIHRoZSBmYWxsVGhyb3VnaCBibG9jay4gVGhlIG1haW4gY2hhbGxlbmdl
IGlzIGp1c3QgdGhhdCB3ZSBoYXZlIG11bHRpcGxlCisgICAgICAgICAgICAvLyBicmFuY2hlcyB0
byBmYWxsVGhyb3VnaCBidXQgYSBzaW5nbGUgY291bnQsIHNvIHdlIHdvdWxkIG5lZWQgdG8gZGl2
dnkgaXQgdXAKKyAgICAgICAgICAgIC8vIGFtb25nIHRoZSBkaWZmZXJlbnQgbG93ZXJlZCBicmFu
Y2hlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjkwODIKKyAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKICAgICAg
ICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKTsKQEAg
LTM1NzYsMTMgKzM1ODAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2goCiAgICAgICAgICAgICAgICAgICAgIGlzTm90Q2VsbCh1bmJv
eGVkVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFs
bFRocm91Z2gpKSwgdW5zdXJlKGlzQ2VsbENhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5z
dXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc0NlbGxDYXNl
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOwogICAgICAgICAg
ICAgICAgIExWYWx1ZSBjZWxsVmFsdWUgPSB1bmJveGVkVmFsdWU7CiAgICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgICAgICAgICBpc05vdFN0cmluZyhjZWxsVmFsdWUp
LAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gp
KSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSkpOworICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93
QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSkpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5n
Q2FzZSwgbGFzdE5leHQpOwogICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0gY2VsbFZhbHVl
OwpAQCAtMzYwNSw3ICszNjA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3Ry
aW5nVmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSwKICAgICAgICAgICAgICAgICAgICAg
bV9vdXQuaW50MzJPbmUpLAotICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5m
YWxsVGhyb3VnaCkpLCB1bnN1cmUobGVuZ3RoSXMxKSk7CisgICAgICAgICAgICAgICAgdW5zdXJl
KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShsZW5ndGhJczEpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhsZW5ndGhJczEsIG5lZWRSZXNvbHV0aW9uKTsKICAgICAgICAgICAgIFZlY3RvcjxW
YWx1ZUZyb21CbG9jaywgMj4gdmFsdWVzOwpAQCAtNDE4OCwxMCArNDE5MiwxMiBAQCBwcml2YXRl
OgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAogICAgICAgICAgICAg
ICAgIGNvbnN0SW50KHR5cGUsIGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVl
KCkpLAotICAgICAgICAgICAgICAgIGxvd0Jsb2NrKGRhdGEtPmNhc2VzW2ldLnRhcmdldCksIFdl
aWdodCgpKSk7CisgICAgICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
LmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oc3dpdGNoVmFsdWUs
IGNhc2VzLCBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaCksIFdlaWdodCgpKTsKKyAgICAgICAg
bV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBzd2l0Y2hWYWx1ZSwgY2FzZXMs
CisgICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayksIFdlaWdodChk
YXRhLT5mYWxsVGhyb3VnaC5jb3VudCkpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgZG91Ymxl
VG9JbnQzMihMVmFsdWUgZG91YmxlVmFsdWUsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoLCBib29s
IGlzU2lnbmVkID0gdHJ1ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224713</attachid>
            <date>2014-02-19 22:09:19 -0800</date>
            <delta_ts>2014-02-19 22:16:10 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56660</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE0LTAyLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgd2F5IG9mIGNhcnJ5aW5nIGFuZCBwcmVzZXJ2aW5nIGNvbmRpdGlv
bmFsIGJyYW5jaCB3ZWlnaHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkwODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEJyYW5jaCBhbmQgU3dpdGNoIG5vdyBoYXZlIGJyYW5jaCBjb3Vu
dHMvd2VpZ2h0cyBmb3IgZWFjaCB0YXJnZXQuIFRoaXMgaXMgZW5jYXBzdWxhdGVkCisgICAgICAg
IGJlaGluZCBERkc6OkJyYW5jaFRhcmdldC4gV2UgY2FycnkgdGhpcyBkYXRhIGFsbCB0aGUgd2F5
IHRvIHRoZSBGVEwsIGFuZCB0aGUgREZHCisgICAgICAgIGJhY2tlbmQgaWdub3JlcyBpdC4KKyAg
ICAgICAgCisgICAgICAgIFdlIGRvbid0IHNldCB0aGlzIGRhdGEgeWV0OyB0aGF0J3MgZm9yIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNTUuCisKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaFRhcmdldDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJn
ZXQ6OkJyYW5jaFRhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoVGFyZ2V0OjpzZXRC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJnZXQ6OmJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OndpdGhCeXRlY29kZUluZGlj
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OnRha2VuQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoRGF0YTo6bm90VGFrZW5CeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hEYXRhOjpmb3JDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlN3aXRjaENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hE
YXRhOjpTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YXJnZXRCeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnRhcmdldEJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nl
c3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXApOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZUludDUyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVTd2l0Y2gpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpidWlsZFN3aXRjaCk6CisKIDIwMTQtMDItMTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBhZnRlciAtW0pTQ29udGV4dCBldmFsdWF0ZVNj
cmlwdDpdIHdoZW4gaW5pdGlhbGl6aW5nIEpTQ29udGV4dCB3aXRoIEpTVmlydHVhbE1hY2hpbmUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDYgKzcyMywxMyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCkgfHwgdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKICAgICB9CiAgICAgCisgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSh1bnNp
Z25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCisgICAgeworICAgICAgICBCcmFuY2hEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX2JyYW5jaERhdGEuYWRkKCk7CisgICAgICAgICpkYXRhID0gQnJh
bmNoRGF0YTo6d2l0aEJ5dGVjb2RlSW5kaWNlcyh0YWtlbiwgbm90VGFrZW4pOworICAgICAgICBy
ZXR1cm4gZGF0YTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBv
cCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTE0NTgs
OCArMTQ2NSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAg
ICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrKCkgPT0gMCk7Ci0gICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2soYmxvY2suZ2V0KCkpOworICAgICAgICBBU1NFUlQoIW5vZGUtPnRh
cmdldEJsb2NrKCkpOworICAgICAgICBub2RlLT50YXJnZXRCbG9jaygpID0gYmxvY2suZ2V0KCk7
CiAgICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFy
bHlSZXR1cm5MaW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBi
bG9ja1RvTGluay0+aXNMaW5rZWQgPSB0cnVlOwpAQCAtMjY5Nyw3ICsyNzA0LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9q
dHJ1ZSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qdHJ1ZSkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgfQogCkBAIC0yNzE2LDcgKzI3MjMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfamZhbHNlKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bf
amZhbHNlKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamZhbHNlKTsKICAgICAgICAgfQogCkBAIC0yNzI0
LDcgKzI3MzEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50
TnVsbCgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3BfamVxX251bGwpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0
LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamVxX251bGwpKSksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAgICAgICAgIH0KIApA
QCAtMjczMiw3ICsyNzM5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBj
b25zdGFudE51bGwoKSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpKSwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSks
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAg
ICAgICB9CiAKQEAgLTI3NTgsNyArMjc2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2psZXNzKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2psZXNzKSkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICB9CiAKQEAgLTI3ODQsNyArMjc5MSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyht
X2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfamxlc3NlcSkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qbGVzc2VxKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxl
c3NlcSk7CiAgICAgICAgIH0KIApAQCAtMjgxMCw3ICsyODE3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0
ZXIsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3BfamdyZWF0ZXIpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIpKSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAgICAgICAg
IH0KIApAQCAtMjgzNiw3ICsyODQzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qZ3JlYXRlcmVxKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCkBA
IC0yODYyLDcgKzI4NjksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwotICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3Bfam5sZXNzKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
Y29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNo
RGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5sZXNzKTsKICAgICAgICAgfQogCkBAIC0yODg4LDcgKzI4OTUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlTGVzc0VxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3NlcSkpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2pubGVzc2VxKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzZXEp
OwogICAgICAgICB9CiAKQEAgLTI5MTQsNyArMjkyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBv
cDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXIpKSwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9qbmdyZWF0ZXIpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXIpOwogICAgICAgICB9
CiAKQEAgLTI5NDAsNjYgKzI5NDcsNjMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9q
bmdyZWF0ZXJlcSksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTogewotICAgICAgICAgICAg
U3dpdGNoRGF0YSBkYXRhOworICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsK
ICAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1f
c3dpdGNoUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07Ci0gICAgICAgICAg
ICBkYXRhLnNldEZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3Vn
aC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKLSAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkpCisgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5j
YXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoanNOdW1iZXIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3Qo
KSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfaW1tKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIFN3aXRjaERhdGEg
ZGF0YTsKKyAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hDaGFyOwogICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1h
cFtjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGRhdGEuc2V0
RmFsbFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJy
ZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOwotICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVu
ZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6
eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQo
ZGF0YSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1f
c3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZv
KCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBTd2l0
Y2hEYXRhIGRhdGE7CisgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9z
d2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwog
ICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGEuc2V0RmFsbFRocm91Z2hCeXRlY29kZUluZGV4
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09m
ZnNldFRhYmxlOjppdGVyYXRvciBpdGVyOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7
CiAgICAgICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9j
dXJyZW50SW5kZXggKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMu
YXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRl
eChMYXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5k
KGRhdGEpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5t
X3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5m
bygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9zdHJpbmcpOwogICAg
ICAgICB9CiAKQEAgLTM0MjMsMTkgKzM0MjcsMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNh
c2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNp
bmcoKSkpOworICAgICAgICBub2RlLT50YXJnZXRCbG9jaygpID0gYmxvY2tGb3JCeXRlY29kZU9m
ZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRhcmdldEJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFy
c2luZygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQnJhbmNoOgotICAg
ICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsK
KyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBCcmFuY2hEYXRhKiBkYXRhID0gbm9kZS0+YnJh
bmNoRGF0YSgpOworICAgICAgICBkYXRhLT50YWtlbi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT50YWtlbkJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIGRhdGEtPm5vdFRha2VuQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJlYWs7
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIFN3aXRjaDogewor
ICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykK
LSAgICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2Fz
ZXNbaV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgp
LT5mYWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
ICAgIGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQo
cG9zc2libGVUYXJnZXRzLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+ZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKTsKICAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDE0ICsxMzMsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgb3V0IGNhc2VzIHRoYXQgZW5kIHVwIGp1bXBpbmcg
dG8gZGVmYXVsdC4KICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0ID09IGRhdGEtPmZhbGxUaHJvdWdoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzW2ktLV0gPSBkYXRhLT5jYXNlcy50YWtlTGFzdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9j
ayA9PSBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50ICs9IGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3Vu
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jYXNlc1tpLS1dID0gZGF0YS0+
Y2FzZXMubGFzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIG5vIGNhc2VzIG90aGVyIHRoYW4gZGVmYXVsdCB0aGVuIHRoaXMgdHVybnMKICAgICAg
ICAgICAgICAgICAgICAgLy8gaW50byBhIGp1bXAuCiAgICAgICAgICAgICAgICAgICAgIGlmIChk
YXRhLT5jYXNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRU
b0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTUz
LDEzICsxNTYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRyaVN0YXRlICYmIGkt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGRhdGEtPmNhc2VzW2ld
LnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRCbG9jayA9IGRhdGEtPmNhc2VzW2ldLnRhcmdldDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2sgPSBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2s7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBNaXhlZFRyaVN0YXRlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGZvdW5kID09IEZhbHNlVHJpU3RhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0QmxvY2sgPSBkYXRhLT5mYWxsVGhyb3VnaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0aXNvbmVk
QmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjksMTAgKzY2OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG5l
d0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVOb3RUYWtlbiA9IG5vZGUtPnRh
a2VuQmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2so
dG9CZVRha2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxv
Y2sodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaERhdGEqIGRh
dGEgPSBub2RlLT5icmFuY2hEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoZGF0YS0+dGFrZW4sIGRhdGEtPm5vdFRha2VuKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE2ICszMTUsMTYg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBp
ZiAob3AgPT0gV2Vha0pTQ29uc3RhbnQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9p
bnRlcihub2RlLT53ZWFrQ29uc3RhbnQoKSksICIgKCIsIGluQ29udGV4dCgqbm9kZS0+d2Vha0Nv
bnN0YW50KCktPnN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIikiKTsKLSAgICBpZiAobm9kZS0+aXNC
cmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoi
LCAqbm9kZS0+dGFrZW5CbG9jaygpKTsKKyAgICBpZiAobm9kZS0+aXNKdW1wKCkpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChu
b2RlLT5pc0JyYW5jaCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGOiIsICpub2RlLT5u
b3RUYWtlbkJsb2NrKCkpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsIG5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4sICIsIEY6Iiwgbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbik7
CiAgICAgaWYgKG5vZGUtPmlzU3dpdGNoKCkpIHsKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9
IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5raW5k
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS0+Y2FzZXNb
aV0udmFsdWUsIGNvbnRleHQpLCAiOiIsICpkYXRhLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJkZWZhdWx0OiIsICpkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwg
Y29udGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQogICAgIENsb2Ji
ZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyOSw3ICs4MjksOCBAQCBw
dWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJl
U2V0OwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8TmV3QXJyYXlCdWZm
ZXJEYXRhLCA0PiBtX25ld0FycmF5QnVmZmVyRGF0YTsKLSAgICBTZWdtZW50ZWRWZWN0b3I8U3dp
dGNoRGF0YSwgND4gbV9zd2l0Y2hEYXRhOworICAgIEJhZzxCcmFuY2hEYXRhPiBtX2JyYW5jaERh
dGE7CisgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRC
eU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgVmVjdG9yPElubGluZVZh
cmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNh
bGxGcmFtZVNldD4gbV9pbmxpbmVDYWxsRnJhbWVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDE2NDQxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTYgKzM2MywxNiBAQCBpbmxpbmUgYm9v
bCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUCiAgICAgc3dpdGNoICh0ZXJtaW5hbC0+b3Ao
KSkgewogICAgIGNhc2UgSnVtcDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJh
bmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4g
bWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2VuQmxvY2soKSk7CisgICAgICAgIHJldHVy
biBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+dGFyZ2V0QmxvY2soKSk7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2Zh
QnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVj
dGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxv
Y2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jayk7CiAgICAg
ICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtlbkJs
b2NrKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5h
bC0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayk7CiAgICAgICAgIHJldHVybiBjaGFuZ2Vk
OwogICAgIH0KICAgICAgICAgCkBAIC0zODEsOSArMzgxLDkgQEAgaW5saW5lIGJvb2wgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBz
b21laG93IGRvdWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRh
KCk7Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNl
cy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ss
IGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayk7CiAgICAgICAgIHJldHVybiBj
aGFuZ2VkOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE2MCw4ICsxNjAsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCCiAgICAgbV9qaXRDb2RlLT5jb21tb24uc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bW92ZShtX2dy
YXBoLm1fc2xvd0FyZ3VtZW50cyk7CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YVtpXTsKKyAg
ICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hE
YXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN3aXRjaERhdGEmIGRhdGEg
PSAqKml0ZXI7CiAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xNzIsMTQgKzE3MiwxNCBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIAogICAgICAgICB1c2VkSnVtcFRh
Ymxlcy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC0+aW5kZXhdKTsKKyAgICAgICAgdGFibGUuY3Rp
RGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhy
b3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgdGFibGUuY3RpT2Zmc2V0cy5ncm93KHRhYmxl
LmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdGFibGUu
Y3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZzZXRzW2pd
ID0gdGFibGUuY3RpRGVmYXVsdDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZGF0YS5jYXNl
cy5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEu
Y2FzZXNbal07CiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZzZXRzW215Q2FzZS52YWx1ZS5zd2l0
Y2hMb29rdXBWYWx1ZSgpIC0gdGFibGUubWluXSA9Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LT5pbmRleF0pOworICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdl
dC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE5Myw4ICsxOTMs
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgLy8gTk9U
RTogd2UgY2Fubm90IGNsZWFyIHN0cmluZyBzd2l0Y2ggdGFibGVzIGJlY2F1c2UgKDEpIHdlJ3Jl
IHJ1bm5pbmcgY29uY3VycmVudGx5CiAgICAgLy8gYW5kIHdlIGNhbm5vdCBkZXJlZiBTdHJpbmdJ
bXBsJ3MgYW5kICgyKSBpdCB3b3VsZCBiZSB3ZWlyZCB0byBkZXJlZiB0aG9zZQogICAgIC8vIFN0
cmluZ0ltcGwncyBzaW5jZSB3ZSByZWZlciB0byB0aGVtLgotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTd2l0Y2hEYXRh
JiBkYXRhID0gbV9ncmFwaC5tX3N3aXRjaERhdGFbaV07CisgICAgZm9yIChCYWc8U3dpdGNoRGF0
YT46Oml0ZXJhdG9yIHN3aXRjaERhdGFJdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4o
KTsgISFzd2l0Y2hEYXRhSXRlcjsgKytzd2l0Y2hEYXRhSXRlcikgeworICAgICAgICBTd2l0Y2hE
YXRhJiBkYXRhID0gKipzd2l0Y2hEYXRhSXRlcjsKICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1
bXBUYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTIwMiw3ICsyMDIs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9j
a0hlYWRzW2RhdGEuZmFsbFRocm91Z2gtPmluZGV4XSk7CisgICAgICAgIHRhYmxlLmN0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBm
b3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAg
ICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3Ry
aW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAg
ICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC0+aW5kZXhdKTsKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNl
LnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgQnJhbmNo
VGFyZ2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCFibG9jaykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91dC5wcmludCgqYmxvY2spOworICAgIAorICAg
IGlmIChjb3VudCA9PSBjb3VudCkKKyAgICAgICAgb3V0LnByaW50KCIvdzoiLCBjb3VudCk7Cit9
CisKIHVuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKIHsKICAgICByZXR1cm4gTm9kZUFsbG9j
YXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDUxIEBAIHN0
cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7
CiB9OwogCitzdHJ1Y3QgQnJhbmNoVGFyZ2V0IHsKKyAgICBCcmFuY2hUYXJnZXQoKQorICAgICAg
ICA6IGJsb2NrKDApCisgICAgICAgICwgY291bnQoUU5hTikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IEJyYW5jaFRhcmdldChCYXNpY0Jsb2NrKiBibG9jaykgOiBibG9jayhibG9j
ayksIGNvdW50KFFOYU4pIHsgfQorICAgIAorICAgIHZvaWQgc2V0Qnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgYmxvY2sgPSBiaXR3aXNlX2Nhc3Q8
QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleCkpOworICAg
IH0KKyAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oYmxvY2spOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCisgICAgQmFzaWNCbG9jayogYmxvY2s7CisgICAgZmxvYXQgY291bnQ7
Cit9OworCitzdHJ1Y3QgQnJhbmNoRGF0YSB7CisgICAgc3RhdGljIEJyYW5jaERhdGEgd2l0aEJ5
dGVjb2RlSW5kaWNlcygKKyAgICAgICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZUluZGV4LCB1bnNp
Z25lZCBub3RUYWtlbkJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICBCcmFuY2hEYXRhIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0LnRha2VuLmJsb2NrID0gYml0d2lzZV9jYXN0PEJhc2ljQmxv
Y2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHRha2VuQnl0ZWNvZGVJbmRleCkpOworICAgICAg
ICByZXN1bHQubm90VGFrZW4uYmxvY2sgPSBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4obm90VGFrZW5CeXRlY29kZUluZGV4KSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIHRha2VuLmJ5dGVjb2RlSW5kZXgoKTsgfQorICAgIHVuc2lnbmVkIG5v
dFRha2VuQnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG5vdFRha2VuLmJ5dGVjb2RlSW5k
ZXgoKTsgfQorICAgIAorICAgIEJhc2ljQmxvY2sqJiBmb3JDb25kaXRpb24oYm9vbCBjb25kaXRp
b24pCisgICAgeworICAgICAgICBpZiAoY29uZGl0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHRh
a2VuLmJsb2NrOworICAgICAgICByZXR1cm4gbm90VGFrZW4uYmxvY2s7CisgICAgfQorICAgIAor
ICAgIEJyYW5jaFRhcmdldCB0YWtlbjsKKyAgICBCcmFuY2hUYXJnZXQgbm90VGFrZW47Cit9Owor
CiAvLyBUaGUgU3dpdGNoRGF0YSBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgZHVwbGlj
YXRlIHRoZSBpbmZvcm1hdGlvbiBpbgogLy8gSnVtcFRhYmxlLiBUaGUgREZHIG1heSB1bHRpbWF0
ZWx5IGVuZCB1cCB1c2luZyB0aGUgSnVtcFRhYmxlLCB0aG91Z2ggaXQgbWF5CiAvLyBpbnN0ZWFk
IGRlY2lkZSB0byBkbyBzb21ldGhpbmcgZGlmZmVyZW50IC0gdGhpcyBpcyBlbnRpcmVseSB1cCB0
byB0aGUgREZHLgpAQCAtOTEsNyArMTM2LDYgQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7
CiAvLyB2YWx1ZXMuCiBzdHJ1Y3QgU3dpdGNoQ2FzZSB7CiAgICAgU3dpdGNoQ2FzZSgpCi0gICAg
ICAgIDogdGFyZ2V0KDApCiAgICAgewogICAgIH0KICAgICAKQEAgLTEwNSwxNCArMTQ5LDEyIEBA
IHN0cnVjdCBTd2l0Y2hDYXNlIHsKICAgICB7CiAgICAgICAgIFN3aXRjaENhc2UgcmVzdWx0Owog
ICAgICAgICByZXN1bHQudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgcmVzdWx0LnRhcmdldCA9IGJp
dHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZUlu
ZGV4KSk7CisgICAgICAgIHJlc3VsdC50YXJnZXQuc2V0Qnl0ZWNvZGVJbmRleChieXRlY29kZUlu
ZGV4KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQg
dGFyZ2V0Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KHRhcmdldCk7IH0KLSAgICAKICAgICBMYXp5SlNWYWx1ZSB2YWx1ZTsKLSAgICBCYXNpY0Js
b2NrKiB0YXJnZXQ7CisgICAgQnJhbmNoVGFyZ2V0IHRhcmdldDsKIH07CiAKIGVudW0gU3dpdGNo
S2luZCB7CkBAIC0xMjYsMjEgKzE2OCwxNCBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgLy8g
Y29uc3RydWN0aW5nIHRoaXMgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbml0aWFsaXplIGV2ZXJ5dGhp
bmcgdGhleQogICAgIC8vIGNhcmUgYWJvdXQgbWFudWFsbHkuCiAgICAgU3dpdGNoRGF0YSgpCi0g
ICAgICAgIDogZmFsbFRocm91Z2goMCkKLSAgICAgICAgLCBraW5kKHN0YXRpY19jYXN0PFN3aXRj
aEtpbmQ+KC0xKSkKKyAgICAgICAgOiBraW5kKHN0YXRpY19jYXN0PFN3aXRjaEtpbmQ+KC0xKSkK
ICAgICAgICAgLCBzd2l0Y2hUYWJsZUluZGV4KFVJTlRfTUFYKQogICAgICAgICAsIGRpZFVzZUp1
bXBUYWJsZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RmFsbFRocm91
Z2hCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi0gICAgewotICAgICAgICBm
YWxsVGhyb3VnaCA9IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZUluZGV4KSk7Ci0gICAgfQotICAgIHVuc2lnbmVkIGZhbGxUaHJvdWdoQnl0
ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZhbGxU
aHJvdWdoKTsgfQotICAgIAogICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICBCYXNp
Y0Jsb2NrKiBmYWxsVGhyb3VnaDsKKyAgICBCcmFuY2hUYXJnZXQgZmFsbFRocm91Z2g7CiAgICAg
U3dpdGNoS2luZCBraW5kOwogICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7CiAgICAgYm9v
bCBkaWRVc2VKdW1wVGFibGU7CkBAIC04MTksNDAgKzg1NCwyMiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICB1bnNpZ25lZCB0YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5n
UGFyc2luZygpCisgICAgdW5zaWduZWQgdGFyZ2V0Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5n
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKKyAgICAg
ICAgQVNTRVJUKGlzSnVtcCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRUYWtlbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgIEJhc2ljQmxvY2sqJiB0YXJnZXRCbG9jaygpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNC
cmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYmxvY2spOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldE5vdFRha2VuQmxvY2so
QmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0g
ICAgICAgIG1fb3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKLSAgICB9
Ci0gICAgCi0gICAgQmFzaWNCbG9jayomIHRha2VuQmxvY2soKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICBBU1NFUlQoaXNKdW1wKCkpOwog
ICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKio+KCZtX29wSW5mbyk7CiAg
ICAgfQogICAgIAotICAgIEJhc2ljQmxvY2sqJiBub3RUYWtlbkJsb2NrKCkKKyAgICBCcmFuY2hE
YXRhKiBicmFuY2hEYXRhKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAg
ICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayoqPigmbV9vcEluZm8yKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCcmFuY2hEYXRhKj4obV9vcEluZm8pOwogICAgIH0K
ICAgICAKICAgICBTd2l0Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTg3OSwyNSArODk2LDI2IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAg
ICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5jYXNlc1tpbmRleF0udGFyZ2V0OworICAgICAgICAg
ICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNhc2VzW2luZGV4XS50YXJnZXQuYmxvY2s7CiAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA9PSBzd2l0Y2hEYXRhKCktPmNhc2VzLnNp
emUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaDsKKyAg
ICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoLmJsb2NrOwogICAgICAg
ICB9CiAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAgICAgY2FzZSAwOgotICAgICAgICAg
ICAgcmV0dXJuIHRha2VuQmxvY2soKTsKKyAgICAgICAgICAgIGlmIChpc0p1bXAoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGFyZ2V0QmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2hEYXRhKCktPnRha2VuLmJsb2NrOwogICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1
cm4gbm90VGFrZW5CbG9jaygpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaERhdGEoKS0+bm90
VGFrZW4uYmxvY2s7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2soKTsKKyAgICAg
ICAgICAgIHJldHVybiB0YXJnZXRCbG9jaygpOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JGb3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIHJldHVybiBjb25kaXRpb24g
PyB0YWtlbkJsb2NrKCkgOiBub3RUYWtlbkJsb2NrKCk7CisgICAgICAgIHJldHVybiBicmFuY2hE
YXRhKCktPmZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0KICAgICAKICAgICBib29sIGhh
c0hlYXBQcmVkaWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgxLDggKzI4MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkK
IHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAg
ICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxv
Y2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCkt
Pm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewog
ICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMzYxLDggKzM2MSw4IEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0pJVE9wZXJhdGlvbl9F
SkogaGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2Rl
LT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5u
b3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFu
Y2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIEpJVENvbXBpbGVyOjpS
ZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJv
OwogCkBAIC01MTQsOCArNTE0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAg
QmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtl
bi5ibG9jazsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8g
dGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3
aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxs
IHRocm91Z2guCkBAIC0xMjkxLDggKzEyOTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0VG9PYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hp
bGQsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hO
b2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5i
cmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKICAgICAKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTE2MTUs
OCArMTYxNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogewotICAgIEJhc2lj
QmxvY2sqIHRha2VuID0gbm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRh
a2VuID0gbm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbm9k
ZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9
IG5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAKICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgQm9vbGVhblVzZTogewpAQCAtMzAwOSw3
ICszMDA5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIGp1bXAobm9kZS0+dGFrZW5CbG9j
aygpKTsKKyAgICAgICAganVtcChub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrKTsKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hO
b2RlLCBib29sIGludmVydCkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5v
dFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5j
aERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hO
b2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMzYzLDggKzM2
Myw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBO
b2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgQmFzaWNCbG9jayog
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFr
ZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4g
PSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAog
ICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJ
VENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC01MDcsOCArNTA3LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9v
bCBpbnZlcnQpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJs
b2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCkt
PnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJh
bmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rp
b24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5l
eHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0
aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0xNjY5LDggKzE2NjksOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENo
aWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFr
ZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxv
Y2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsK
ICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKQEAgLTE3OTIsOCArMTc5Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbnQ1MkNvbXBhcmUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50
NTJCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewotICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJh
bmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9k
ZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9
IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAKICAgICAvLyBUaGUg
YnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAv
LyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0
aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpAQCAtMjAzMiw4ICsy
MDMyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0gICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4g
PSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT5i
cmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbm9k
ZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogewpAQCAt
MzM2OSw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIGp1bXAobm9kZS0+dGFr
ZW5CbG9jaygpKTsKKyAgICAgICAganVtcChub2RlLT50YXJnZXRCbG9jaygpKTsKICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjQ0
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA5Nyw4ICsxMDk3LDggQEAg
RlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJh
bmNoTm9kZSwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAg
QmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtl
bi5ibG9jazsKICAgICAKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwpAQCAtMTEwOSw4ICsxMTA5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlRG91YgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplY3RFcXVhbGl0eShOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlKQogewotICAgIEJhc2lj
QmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNp
Y0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxv
Y2s7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgCkBAIC0xMTg1LDggKzExODUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQZWVwSG9sZUJvb2xlYW5CcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNo
Tm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewotICAg
IEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2lj
QmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAg
ICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFr
ZW4uYmxvY2s7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRv
IHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4g
d2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFs
bCB0aHJvdWdoLgpAQCAtMTIxNiw4ICsxMjE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlQm9vbAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJ
bnQzMkJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBi
cmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hO
b2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRo
ZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAg
IC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0
IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0zNjM3LDgg
KzM2MzcsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAgICAg
dW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAg
ICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7CiAgICAgICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwotICAgICAgICBCYXNp
Y0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICAgICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgICAgIEJh
c2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsK
KyAgICAgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCkt
Pm5vdFRha2VuLmJsb2NrOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgICAgIAogICAgICAg
ICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9j
ay4KQEAgLTQyMTMsOCArNDIxMyw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdF
eHBFeGVjKE4KICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJ
bkJsb2NrKTsKICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0g
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFz
aWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOwor
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RU
YWtlbi5ibG9jazsKICAgICAKICAgICBib29sIGludmVydCA9IGZhbHNlOwogICAgIGlmICh0YWtl
biA9PSBuZXh0QmxvY2soKSkgewpAQCAtNDg5NSw3ICs0ODk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXAoCiAgICAgbV9qaXQuc3ViMzIoSW1tMzIodGFibGUubWlu
KSwgdmFsdWUpOwogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgp
KSksCi0gICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91
Z2guYmxvY2spOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih0YWJsZS5jdGlPZmZzZXRz
LmJlZ2luKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpCYXNl
SW5kZXgoc2NyYXRjaCwgdmFsdWUsIEpJVENvbXBpbGVyOjp0aW1lc1B0cigpKSwgc2NyYXRjaCk7
CiAgICAgbV9qaXQuanVtcChzY3JhdGNoKTsKQEAgLTQ5MjksNyArNDkyOSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgYWRkQnJhbmNoKAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpaZXJvLCB2YWx1ZVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciks
Ci0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jayk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gp
OwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JE
b3VibGUsIHNjcmF0Y2gsIHZhbHVlUmVncy5ncHIoKSwgZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7
CiAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CkBAIC00OTQzLDcgKzQ5
NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVP
ckVxdWFsLCB2YWx1ZVJlZ3MudGFnR1BSKCksCiAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOwor
ICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhzY3JhdGNoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25G
aW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1ZVJlZ3MsIGRhdGEtPnN3
aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gp
OwpAQCAtNDk2Nyw3ICs0OTY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENo
YXJTdHJpbgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSwKICAgICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSksCi0gICAgICAgIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgIAogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUsIEpTU3RyaW5nOjpvZmZz
ZXRPZlZhbHVlKCkpLCBzY3JhdGNoKTsKICAgICAKQEAgLTUwMjUsMTIgKzUwMjUsMTIgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZQogICAgICAgICBhZGRCcmFuY2go
CiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIG9wMVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBkYXRhLT5m
YWxsVGhyb3VnaC5ibG9jayk7CiAjZWxzZQogICAgICAgICBhZGRCcmFuY2goCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksCi0g
ICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBkYXRhLT5mYWxsVGhy
b3VnaC5ibG9jayk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGFkZEJyYW5jaCgKQEAgLTUw
MzgsNyArNTAzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKE5vZGUK
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpLAotICAgICAgICAg
ICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxv
Y2spOwogICAgICAgICAKICAgICAgICAgZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKGRhdGEsIG9w
MVJlZ3MucGF5bG9hZEdQUigpLCB0ZW1wR1BSKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKQEAgLTUwOTMsNyArNTA5Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRCaW5hcnlTd2l0Y2hTdHIKICAgICB9CiAgICAgCiAgICAgaWYgKGJl
Z2luID09IGVuZCkgewotICAgICAgICBqdW1wKGRhdGEtPmZhbGxUaHJvdWdoLCBGb3JjZUp1bXAp
OworICAgICAgICBqdW1wKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrLCBGb3JjZUp1bXApOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtNTEyOSwxNCArNTEyOSwxNCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyCiAgICAgICAgIGRhdGFMb2coImxlbmd0
aCA9ICIsIG1pbkxlbmd0aCwgIiwgY29tbW9uQ2hhcnMgPSAiLCBjb21tb25DaGFycywgIiwgYWxs
TGVuZ3Roc0VxdWFsID0gIiwgYWxsTGVuZ3Roc0VxdWFsLCAiXG4iKTsKICAgICAKICAgICBpZiAo
IWFsbExlbmd0aHNFcXVhbCAmJiBhbHJlYWR5Q2hlY2tlZExlbmd0aCA8IG1pbkxlbmd0aCkKLSAg
ICAgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBsZW5ndGgsIEltbTMyKG1pbkxl
bmd0aCksIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBsZW5ndGgsIEltbTMyKG1pbkxlbmd0aCksIGRhdGEtPmZhbGxUaHJvdWdoLmJs
b2NrKTsKICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFsICYmIChhbHJlYWR5Q2hlY2tlZExlbmd0aCA8
IG1pbkxlbmd0aCB8fCAhY2hlY2tlZEV4YWN0TGVuZ3RoKSkKLSAgICAgICAgYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBsZW5ndGgsIEltbTMyKG1pbkxlbmd0aCksIGRhdGEtPmZh
bGxUaHJvdWdoKTsKKyAgICAgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBs
ZW5ndGgsIEltbTMyKG1pbkxlbmd0aCksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1DaGVja2VkOyBpIDwgY29tbW9uQ2hhcnM7ICsraSkg
ewogICAgICAgICBicmFuY2g4KAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWZmZXIsIGkpLAotICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGkpKSwgZGF0YS0+ZmFsbFRocm91Z2gpOwor
ICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGkpKSwgZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgIH0KICAgICAKICAgICBpZiAobWluTGVuZ3RoID09
IGNvbW1vbkNoYXJzKSB7CkBAIC01MjA2LDcgKzUyMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QmluYXJ5U3dpdGNoU3RyCiAgICAgICAgICAgICB0ZW1wLCBtaW5MZW5ndGgsIGFsbExl
bmd0aHNFcXVhbCk7CiAgICAgfQogICAgIAotICAgIGFkZEJyYW5jaChiaW5hcnlTd2l0Y2guZmFs
bFRocm91Z2goKSwgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgIGFkZEJyYW5jaChiaW5hcnlTd2l0
Y2guZmFsbFRocm91Z2goKSwgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcoU3dpdGNoRGF0YSogZGF0YSwg
R1BSUmVnIHN0cmluZykKQEAgLTUyNTgsNyArNTI1OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4gY2FzZXM7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGNhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgIFN0cmluZ1N3aXRjaENhc2UoZGF0
YS0+Y2FzZXNbaV0udmFsdWUuc3RyaW5nSW1wbCgpLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQpKTsK
KyAgICAgICAgICAgIFN0cmluZ1N3aXRjaENhc2UoZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3RyaW5n
SW1wbCgpLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spKTsKICAgICB9CiAgICAgCiAgICAg
c3RkOjpzb3J0KGNhc2VzLmJlZ2luKCksIGNhc2VzLmVuZCgpKTsKQEAgLTUyOTQsOCArNTI5NCw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm8KICAgICAgICAgCiAg
ICAgICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2godGVtcEdQUiwgaWRlbnRpZmllckNhc2VW
YWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50UHRyKTsKICAgICAgICAgd2hpbGUgKGJpbmFyeVN3aXRj
aC5hZHZhbmNlKG1faml0KSkKLSAgICAgICAgICAgIGp1bXAoZGF0YS0+Y2FzZXNbYmluYXJ5U3dp
dGNoLmNhc2VJbmRleCgpXS50YXJnZXQsIEZvcmNlSnVtcCk7Ci0gICAgICAgIGFkZEJyYW5jaChi
aW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKSwgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAg
ICAganVtcChkYXRhLT5jYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLnRhcmdldC5ibG9j
aywgRm9yY2VKdW1wKTsKKyAgICAgICAgYWRkQnJhbmNoKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3Vn
aCgpLCBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3Vs
dChub2RlKTsKICAgICAgICAgYnJlYWs7CkBAIC01MzI1LDEyICs1MzI1LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm8KICAgICAgICAgYWRkQnJhbmNoKAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLAot
ICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2spOwogI2Vsc2UKICAgICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBv
cDFSZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLAotICAgICAg
ICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gu
YmxvY2spOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBhZGRCcmFuY2goCkBAIC01MzM4LDcg
KzUzMzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwKLSAgICAgICAgICAgIGRh
dGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsK
ICAgICAgICAgCiAgICAgICAgIGVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhkYXRhLCBvcDFSZWdz
LnBheWxvYWRHUFIoKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0ODcsMjUg
KzM0ODcsMjMgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVKdW1wKCkKICAgICB7
Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YWtlbkJsb2NrKCkpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJsb2NrKCkpKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQnJhbmNoKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBERkcgc2hvdWxkIGJlIGFibGUgdG8gdGVsbCB1cyBicmFuY2ggd2VpZ2h0cyBoZXJlLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDU1Ci0g
ICAgICAgIAogICAgICAgICBtX291dC5icmFuY2goCiAgICAgICAgICAgICBib29saWZ5KG1fbm9k
ZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKG1fbm9kZS0+dGFrZW5C
bG9jaygpKSksCi0gICAgICAgICAgICB1bnN1cmUobG93QmxvY2sobV9ub2RlLT5ub3RUYWtlbkJs
b2NrKCkpKSk7CisgICAgICAgICAgICBXZWlnaHRlZFRhcmdldCgKKyAgICAgICAgICAgICAgICBs
b3dCbG9jayhtX25vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2spLAorICAgICAgICAgICAg
ICAgIG1fbm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5jb3VudCksCisgICAgICAgICAgICBXZWln
aHRlZFRhcmdldCgKKyAgICAgICAgICAgICAgICBsb3dCbG9jayhtX25vZGUtPmJyYW5jaERhdGEo
KS0+bm90VGFrZW4uYmxvY2spLAorICAgICAgICAgICAgICAgIG1fbm9kZS0+YnJhbmNoRGF0YSgp
LT5ub3RUYWtlbi5jb3VudCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVTd2l0Y2go
KQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IERGRyBzaG91bGQgYmUgYWJsZSB0byB0ZWxsIHVz
IGJyYW5jaCB3ZWlnaHRzIGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjkwNTUKLSAgICAgICAgCiAgICAgICAgIFN3aXRjaERhdGEqIGRh
dGEgPSBtX25vZGUtPnN3aXRjaERhdGEoKTsKICAgICAgICAgc3dpdGNoIChkYXRhLT5raW5kKSB7
CiAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CkBAIC0zNTM3LDcgKzM1MzUsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTm90SW50LCBpc0RvdWJsZSk7CiAg
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgICAgICAgICBpc0NlbGxP
ck1pc2MoYm94ZWRWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgIHVzdWFsbHkobG93QmxvY2so
ZGF0YS0+ZmFsbFRocm91Z2gpKSwgcmFyZWx5KGlzRG91YmxlKSk7CisgICAgICAgICAgICAgICAg
ICAgIHVzdWFsbHkobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgcmFyZWx5KGlz
RG91YmxlKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oaXNEb3VibGUsIGlubmVyTGFzdE5leHQpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBkb3Vi
bGVWYWx1ZSA9IHVuYm94RG91YmxlKGJveGVkVmFsdWUpOwpAQCAtMzU0NSw3ICszNTQzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihp
bnRJbkRvdWJsZSkpOwogICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobV9vdXQuaW50VG9Eb3VibGUoaW50SW5Eb3VibGUp
LCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShzd2l0Y2hPbkludHMp
LCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gpKSk7CisgICAgICAgICAgICAgICAg
ICAgIHVuc3VyZShzd2l0Y2hPbkludHMpLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91
Z2guYmxvY2spKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCkBAIC0zNTYyLDYgKzM1NjAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBTd2l0Y2hDaGFyOiB7CiAgICAgICAgICAgICBMVmFsdWUgc3RyaW5nVmFsdWU7CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhl
ciB0aGFuIHVuc3VyZSgpIGZvciB0aGUgYnJhbmNoIHdlaWdodAorICAgICAgICAgICAgLy8gb2Yg
dGhlIGZhbGxUaHJvdWdoIGJsb2NrLiBUaGUgbWFpbiBjaGFsbGVuZ2UgaXMganVzdCB0aGF0IHdl
IGhhdmUgbXVsdGlwbGUKKyAgICAgICAgICAgIC8vIGJyYW5jaGVzIHRvIGZhbGxUaHJvdWdoIGJ1
dCBhIHNpbmdsZSBjb3VudCwgc28gd2Ugd291bGQgbmVlZCB0byBkaXZ2eSBpdCB1cAorICAgICAg
ICAgICAgLy8gYW1vbmcgdGhlIGRpZmZlcmVudCBsb3dlcmVkIGJyYW5jaGVzLgorICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA4MgorICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CiAgICAgICAgICAgICBjYXNlIFN0cmluZ1VzZTogewogICAgICAgICAgICAgICAgIHN0cmlu
Z1ZhbHVlID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMzU3NiwxMyArMzU4MCwx
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaCgKICAgICAgICAgICAgICAgICAgICAgaXNOb3RDZWxsKHVuYm94ZWRWYWx1ZSksCi0gICAg
ICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaCkpLCB1bnN1
cmUoaXNDZWxsQ2FzZSkpOworICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzQ2VsbENhc2UpKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CiAgICAgICAgICAgICAgICAgTFZhbHVlIGNl
bGxWYWx1ZSA9IHVuYm94ZWRWYWx1ZTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCiAg
ICAgICAgICAgICAgICAgICAgIGlzTm90U3RyaW5nKGNlbGxWYWx1ZSksCi0gICAgICAgICAgICAg
ICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaCkpLCB1bnN1cmUoaXNTdHJp
bmdDYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jaykpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBsYXN0TmV4dCk7
CiAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBjZWxsVmFsdWU7CkBAIC0zNjA1LDcgKzM2
MDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAogICAgICAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdHJpbmdWYWx1ZSwgbV9oZWFw
cy5KU1N0cmluZ19sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgICBtX291dC5pbnQzMk9uZSks
Ci0gICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoKSksIHVu
c3VyZShsZW5ndGhJczEpKTsKKyAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGxlbmd0aElzMSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlbmd0aElz
MSwgbmVlZFJlc29sdXRpb24pOwogICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAy
PiB2YWx1ZXM7CkBAIC00MTg4LDEwICs0MTkyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCiAgICAgICAgICAgICAgICAgY29uc3RJbnQodHlw
ZSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoKSksCi0gICAgICAgICAg
ICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KSwgV2VpZ2h0KCkpKTsKKyAgICAg
ICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spLCBXZWlnaHQo
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmNvdW50KSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihzd2l0Y2hWYWx1ZSwgY2FzZXMsIGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoKSwgV2VpZ2h0KCkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0
cnVjdGlvbigKKyAgICAgICAgICAgIHN3aXRjaFZhbHVlLCBjYXNlcywKKyAgICAgICAgICAgIGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdo
LmNvdW50KSk7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBk
b3VibGVWYWx1ZSwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gsIGJvb2wgaXNTaWduZWQgPSB0cnVl
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224714</attachid>
            <date>2014-02-19 22:16:10 -0800</date>
            <delta_ts>2014-02-19 22:37:58 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56689</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE0LTAyLTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGEgd2F5IG9mIGNhcnJ5aW5nIGFuZCBwcmVzZXJ2aW5nIGNvbmRpdGlv
bmFsIGJyYW5jaCB3ZWlnaHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjkwODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIEJyYW5jaCBhbmQgU3dpdGNoIG5vdyBoYXZlIGJyYW5jaCBjb3Vu
dHMvd2VpZ2h0cyBmb3IgZWFjaCB0YXJnZXQuIFRoaXMgaXMgZW5jYXBzdWxhdGVkCisgICAgICAg
IGJlaGluZCBERkc6OkJyYW5jaFRhcmdldC4gV2UgY2FycnkgdGhpcyBkYXRhIGFsbCB0aGUgd2F5
IHRvIHRoZSBGVEwsIGFuZCB0aGUgREZHCisgICAgICAgIGJhY2tlbmQgaWdub3JlcyBpdC4KKyAg
ICAgICAgCisgICAgICAgIFdlIGRvbid0IHNldCB0aGlzIGRhdGEgeWV0OyB0aGF0J3MgZm9yIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNTUuCisKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZH
Rml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2Rl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFj
dFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICog
ZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaFRhcmdldDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJn
ZXQ6OkJyYW5jaFRhcmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoVGFyZ2V0OjpzZXRC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hUYXJnZXQ6OmJ5dGVjb2Rl
SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OndpdGhCeXRlY29kZUluZGlj
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkJyYW5jaERhdGE6OnRha2VuQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6QnJhbmNoRGF0YTo6bm90VGFrZW5CeXRlY29kZUluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpCcmFuY2hEYXRhOjpmb3JDb25kaXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlN3aXRjaENhc2U6OlN3aXRjaENhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hE
YXRhOjpTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YXJnZXRCeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnRhcmdldEJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpicmFuY2hEYXRhKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nl
c3NvckZvckNvbmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCb29sZWFuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MzJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEludEp1bXApOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXJTdHJpbmdKdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QmluYXJ5U3dpdGNoU3RyaW5nUmVjdXJzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZUludDUyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVTd2l0Y2gpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpidWlsZFN3aXRjaCk6CisKIDIwMTQtMDItMTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBhZnRlciAtW0pTQ29udGV4dCBldmFsdWF0ZVNj
cmlwdDpdIHdoZW4gaW5pdGlhbGl6aW5nIEpTQ29udGV4dCB3aXRoIEpTVmlydHVhbE1hY2hpbmUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDYgKzcyMywxMyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFuKCkgfHwgdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKTsKICAgICB9CiAgICAgCisgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSh1bnNp
Z25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCisgICAgeworICAgICAgICBCcmFuY2hEYXRh
KiBkYXRhID0gbV9ncmFwaC5tX2JyYW5jaERhdGEuYWRkKCk7CisgICAgICAgICpkYXRhID0gQnJh
bmNoRGF0YTo6d2l0aEJ5dGVjb2RlSW5kaWNlcyh0YWtlbiwgbm90VGFrZW4pOworICAgICAgICBy
ZXR1cm4gZGF0YTsKKyAgICB9CisgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBv
cCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTE0NTgs
OCArMTQ2NSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAg
ICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVt
cCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrKCkgPT0gMCk7Ci0gICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2soYmxvY2suZ2V0KCkpOworICAgICAgICBBU1NFUlQoIW5vZGUtPnRh
cmdldEJsb2NrKCkpOworICAgICAgICBub2RlLT50YXJnZXRCbG9jaygpID0gYmxvY2suZ2V0KCk7
CiAgICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFy
bHlSZXR1cm5MaW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBi
bG9ja1RvTGluay0+aXNMaW5rZWQgPSB0cnVlOwpAQCAtMjY5Nyw3ICsyNzA0LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9q
dHJ1ZSkpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5m
byhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qdHJ1ZSkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX2p0cnVlKTsKICAgICAgICAgfQogCkBAIC0yNzE2LDcgKzI3MjMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2pmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfamZhbHNlKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bf
amZhbHNlKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamZhbHNlKTsKICAgICAgICAgfQogCkBAIC0yNzI0
LDcgKzI3MzEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50
TnVsbCgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9M
RU5HVEgob3BfamVxX251bGwpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0
LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamVxX251bGwpKSksIGNvbmRpdGlv
bik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAgICAgICAgIH0KIApA
QCAtMjczMiw3ICsyNzM5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBj
b25zdGFudE51bGwoKSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpKSwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRk
VG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSks
IGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxX251bGwpOwogICAg
ICAgICB9CiAKQEAgLTI3NTgsNyArMjc2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMik7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2psZXNzKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2psZXNzKSkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3Bfamxlc3MpOwogICAgICAgICB9CiAKQEAgLTI3ODQsNyArMjc5MSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgo
QnJhbmNoLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyht
X2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfamxlc3NlcSkpLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qbGVzc2VxKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxl
c3NlcSk7CiAgICAgICAgIH0KIApAQCAtMjgxMCw3ICsyODE3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0
ZXIsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8obV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3BfamdyZWF0ZXIpKSwgY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamdyZWF0ZXIpKSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CiAgICAgICAg
IH0KIApAQCAtMjgzNiw3ICsyODQzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qZ3JlYXRlcmVxKSksIGNvbmRpdGlvbik7CisgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5j
aCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2pncmVhdGVyZXEpKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCkBA
IC0yODYyLDcgKzI4NjksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwotICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3Bfam5sZXNzKSksIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSwg
Y29uZGl0aW9uKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNo
RGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam5sZXNzKTsKICAgICAgICAgfQogCkBAIC0yODg4LDcgKzI4OTUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlTGVzc0VxLCBvcDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3NlcSkpLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCksIGNvbmRpdGlvbik7CisgICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2pubGVzc2VxKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9m
ZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5sZXNzZXEp
OwogICAgICAgICB9CiAKQEAgLTI5MTQsNyArMjkyMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBv
cDEsIG9wMik7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXIpKSwgT3BJbmZvKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFw
aChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9qbmdyZWF0ZXIpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmdyZWF0ZXIpOwogICAgICAgICB9
CiAKQEAgLTI5NDAsNjYgKzI5NDcsNjMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIp
OwotICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpKSwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpLCBjb25kaXRpb24pOworICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9q
bmdyZWF0ZXJlcSksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZ3JlYXRlcmVxKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTogewotICAgICAgICAgICAg
U3dpdGNoRGF0YSBkYXRhOworICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsK
ICAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1f
c3dpdGNoUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07Ci0gICAgICAgICAg
ICBkYXRhLnNldEZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3Vn
aC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKLSAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkpCisgICAg
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5j
YXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoanNOdW1iZXIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsKLSAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3Qo
KSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
KTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfaW1tKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIFN3aXRjaERhdGEg
ZGF0YTsKKyAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERh
dGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hDaGFyOwogICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1h
cFtjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIGRhdGEuc2V0
RmFsbFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVj
b2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJy
ZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOwotICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVu
ZCgKICAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6
eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQo
ZGF0YSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1f
c3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZv
KCZkYXRhKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7Ci0gICAgICAgICAgICBTd2l0
Y2hEYXRhIGRhdGE7CisgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9z
d2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwog
ICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGEuc2V0RmFsbFRocm91Z2hCeXRlY29kZUluZGV4
KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgg
KyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09m
ZnNldFRhYmxlOjppdGVyYXRvciBpdGVyOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7
CiAgICAgICAgICAgICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9j
dXJyZW50SW5kZXggKyBpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQ7Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKQorICAgICAgICAg
ICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMu
YXBwZW5kKAogICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRl
eChMYXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5k
KGRhdGEpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5t
X3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5m
bygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9zdHJpbmcpOwogICAg
ICAgICB9CiAKQEAgLTM0MjMsMTkgKzM0MjcsMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNh
c2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNp
bmcoKSkpOworICAgICAgICBub2RlLT50YXJnZXRCbG9jaygpID0gYmxvY2tGb3JCeXRlY29kZU9m
ZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRhcmdldEJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFy
c2luZygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgQnJhbmNoOgotICAg
ICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsK
KyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICBCcmFuY2hEYXRhKiBkYXRhID0gbm9kZS0+YnJh
bmNoRGF0YSgpOworICAgICAgICBkYXRhLT50YWtlbi5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBkYXRhLT50YWtlbkJ5dGVjb2RlSW5kZXgoKSk7CisgICAg
ICAgIGRhdGEtPm5vdFRha2VuLmJsb2NrID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIGRhdGEtPm5vdFRha2VuQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJlYWs7
CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN3aXRjaDoKKyAgICBjYXNlIFN3aXRjaDogewor
ICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykK
LSAgICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2Fz
ZXNbaV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgp
LT5mYWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAg
ICAgIGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQo
cG9zc2libGVUYXJnZXRzLCBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYnl0ZWNvZGVJbmRleCgpKTsK
KyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgZGF0YS0+ZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKTsKICAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDE0ICsxMzMsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gUHJ1bmUgb3V0IGNhc2VzIHRoYXQgZW5kIHVwIGp1bXBpbmcg
dG8gZGVmYXVsdC4KICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0ID09IGRhdGEtPmZhbGxUaHJvdWdoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzW2ktLV0gPSBkYXRhLT5jYXNlcy50YWtlTGFzdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9j
ayA9PSBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50ICs9IGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3Vu
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5jYXNlc1tpLS1dID0gZGF0YS0+
Y2FzZXMubGFzdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmNhc2VzLnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIG5vIGNhc2VzIG90aGVyIHRoYW4gZGVmYXVsdCB0aGVuIHRoaXMgdHVybnMKICAgICAg
ICAgICAgICAgICAgICAgLy8gaW50byBhIGp1bXAuCiAgICAgICAgICAgICAgICAgICAgIGlmIChk
YXRhLT5jYXNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRU
b0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTUz
LDEzICsxNTYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRyaVN0YXRlICYmIGkt
LTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGRhdGEtPmNhc2VzW2ld
LnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRCbG9jayA9IGRhdGEtPmNhc2VzW2ldLnRhcmdldDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2sgPSBkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2s7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBNaXhlZFRyaVN0YXRlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGZvdW5kID09IEZhbHNlVHJpU3RhdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy
Z2V0QmxvY2sgPSBkYXRhLT5mYWxsVGhyb3VnaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0aXNvbmVk
QmxvY2tzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjksMTAgKzY2OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKG5l
d0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVOb3RUYWtlbiA9IG5vZGUtPnRh
a2VuQmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2so
dG9CZVRha2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxv
Y2sodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaERhdGEqIGRh
dGEgPSBub2RlLT5icmFuY2hEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoZGF0YS0+dGFrZW4sIGRhdGEtPm5vdFRha2VuKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDE2ICszMTUsMTYg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIH0KICAgICBp
ZiAob3AgPT0gV2Vha0pTQ29uc3RhbnQpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9p
bnRlcihub2RlLT53ZWFrQ29uc3RhbnQoKSksICIgKCIsIGluQ29udGV4dCgqbm9kZS0+d2Vha0Nv
bnN0YW50KCktPnN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIikiKTsKLSAgICBpZiAobm9kZS0+aXNC
cmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoi
LCAqbm9kZS0+dGFrZW5CbG9jaygpKTsKKyAgICBpZiAobm9kZS0+aXNKdW1wKCkpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChu
b2RlLT5pc0JyYW5jaCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGOiIsICpub2RlLT5u
b3RUYWtlbkJsb2NrKCkpOworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsIG5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4sICIsIEY6Iiwgbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbik7
CiAgICAgaWYgKG5vZGUtPmlzU3dpdGNoKCkpIHsKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9
IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5raW5k
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsg
KytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS0+Y2FzZXNb
aV0udmFsdWUsIGNvbnRleHQpLCAiOiIsICpkYXRhLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJkZWZhdWx0OiIsICpkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLT5jYXNlc1tpXS52YWx1ZSwg
Y29udGV4dCksICI6IiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiZGVmYXVsdDoiLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQogICAgIENsb2Ji
ZXJTZXQgcmVhZHM7CiAgICAgQ2xvYmJlclNldCB3cml0ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyOSw3ICs4MjksOCBAQCBw
dWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJl
U2V0OwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8TmV3QXJyYXlCdWZm
ZXJEYXRhLCA0PiBtX25ld0FycmF5QnVmZmVyRGF0YTsKLSAgICBTZWdtZW50ZWRWZWN0b3I8U3dp
dGNoRGF0YSwgND4gbV9zd2l0Y2hEYXRhOworICAgIEJhZzxCcmFuY2hEYXRhPiBtX2JyYW5jaERh
dGE7CisgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRC
eU9mZnNldERhdGE+IG1fbXVsdGlHZXRCeU9mZnNldERhdGE7CiAgICAgVmVjdG9yPElubGluZVZh
cmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNh
bGxGcmFtZVNldD4gbV9pbmxpbmVDYWxsRnJhbWVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDE2NDQxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTYgKzM2MywxNiBAQCBpbmxpbmUgYm9v
bCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUCiAgICAgc3dpdGNoICh0ZXJtaW5hbC0+b3Ao
KSkgewogICAgIGNhc2UgSnVtcDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJh
bmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICByZXR1cm4g
bWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2VuQmxvY2soKSk7CisgICAgICAgIHJldHVy
biBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+dGFyZ2V0QmxvY2soKSk7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2Zh
QnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVj
dGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxv
Y2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jayk7CiAgICAg
ICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtlbkJs
b2NrKCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5h
bC0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayk7CiAgICAgICAgIHJldHVybiBjaGFuZ2Vk
OwogICAgIH0KICAgICAgICAgCkBAIC0zODEsOSArMzgxLDkgQEAgaW5saW5lIGJvb2wgSW5QbGFj
ZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBz
b21laG93IGRvdWJ0IHRoYXQgdGhpcyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAg
QVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGly
ZWN0aW9uKTsKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRh
KCk7Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNl
cy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ss
IGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayk7CiAgICAgICAgIHJldHVybiBj
aGFuZ2VkOwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE2MCw4ICsxNjAsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCCiAgICAgbV9qaXRDb2RlLT5jb21tb24uc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bW92ZShtX2dy
YXBoLm1fc2xvd0FyZ3VtZW50cyk7CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YVtpXTsKKyAg
ICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hE
YXRhLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CisgICAgICAgIFN3aXRjaERhdGEmIGRhdGEg
PSAqKml0ZXI7CiAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xNzIsMTQgKzE3MiwxNCBAQCB2b2lkIEpJVENvbXBp
bGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIAogICAgICAgICB1c2VkSnVtcFRh
Ymxlcy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUlu
ZGV4KTsKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC0+aW5kZXhdKTsKKyAgICAgICAgdGFibGUuY3Rp
RGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhy
b3VnaC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgdGFibGUuY3RpT2Zmc2V0cy5ncm93KHRhYmxl
LmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdGFibGUu
Y3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZzZXRzW2pd
ID0gdGFibGUuY3RpRGVmYXVsdDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZGF0YS5jYXNl
cy5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEu
Y2FzZXNbal07CiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZzZXRzW215Q2FzZS52YWx1ZS5zd2l0
Y2hMb29rdXBWYWx1ZSgpIC0gdGFibGUubWluXSA9Ci0gICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0LT5pbmRleF0pOworICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdl
dC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE5Myw4ICsxOTMs
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgLy8gTk9U
RTogd2UgY2Fubm90IGNsZWFyIHN0cmluZyBzd2l0Y2ggdGFibGVzIGJlY2F1c2UgKDEpIHdlJ3Jl
IHJ1bm5pbmcgY29uY3VycmVudGx5CiAgICAgLy8gYW5kIHdlIGNhbm5vdCBkZXJlZiBTdHJpbmdJ
bXBsJ3MgYW5kICgyKSBpdCB3b3VsZCBiZSB3ZWlyZCB0byBkZXJlZiB0aG9zZQogICAgIC8vIFN0
cmluZ0ltcGwncyBzaW5jZSB3ZSByZWZlciB0byB0aGVtLgotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLnNpemUoKTsgaS0tOykgewotICAgICAgICBTd2l0Y2hEYXRh
JiBkYXRhID0gbV9ncmFwaC5tX3N3aXRjaERhdGFbaV07CisgICAgZm9yIChCYWc8U3dpdGNoRGF0
YT46Oml0ZXJhdG9yIHN3aXRjaERhdGFJdGVyID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuYmVnaW4o
KTsgISFzd2l0Y2hEYXRhSXRlcjsgKytzd2l0Y2hEYXRhSXRlcikgeworICAgICAgICBTd2l0Y2hE
YXRhJiBkYXRhID0gKipzd2l0Y2hEYXRhSXRlcjsKICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1
bXBUYWJsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTIwMiw3ICsyMDIs
NyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBt
X2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7
Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9j
a0hlYWRzW2RhdGEuZmFsbFRocm91Z2gtPmluZGV4XSk7CisgICAgICAgIHRhYmxlLmN0aURlZmF1
bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gu
YmxvY2stPmluZGV4XSk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICBm
b3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAg
ICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUuc3Ry
aW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsKLSAg
ICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
X2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC0+aW5kZXhdKTsKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNl
LnRhcmdldC5ibG9jay0+aW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgQnJhbmNo
VGFyZ2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCFibG9jaykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG91dC5wcmludCgqYmxvY2spOworICAgIAorICAg
IGlmIChjb3VudCA9PSBjb3VudCkKKyAgICAgICAgb3V0LnByaW50KCIvdzoiLCBjb3VudCk7Cit9
CisKIHVuc2lnbmVkIE5vZGU6OmluZGV4KCkgY29uc3QKIHsKICAgICByZXR1cm4gTm9kZUFsbG9j
YXRvcjo6YWxsb2NhdG9yT2YodGhpcyktPmluZGV4T2YodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0NDEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDU1IEBAIHN0
cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7
CiB9OwogCitzdHJ1Y3QgQnJhbmNoVGFyZ2V0IHsKKyAgICBCcmFuY2hUYXJnZXQoKQorICAgICAg
ICA6IGJsb2NrKDApCisgICAgICAgICwgY291bnQoUU5hTikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IEJyYW5jaFRhcmdldChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBi
bG9jayhibG9jaykKKyAgICAgICAgLCBjb3VudChRTmFOKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgewor
ICAgICAgICBibG9jayA9IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7IH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBCYXNpY0Js
b2NrKiBibG9jazsKKyAgICBmbG9hdCBjb3VudDsKK307CisKK3N0cnVjdCBCcmFuY2hEYXRhIHsK
KyAgICBzdGF0aWMgQnJhbmNoRGF0YSB3aXRoQnl0ZWNvZGVJbmRpY2VzKAorICAgICAgICB1bnNp
Z25lZCB0YWtlbkJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVJbmRleCkK
KyAgICB7CisgICAgICAgIEJyYW5jaERhdGEgcmVzdWx0OworICAgICAgICByZXN1bHQudGFrZW4u
YmxvY2sgPSBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
dGFrZW5CeXRlY29kZUluZGV4KSk7CisgICAgICAgIHJlc3VsdC5ub3RUYWtlbi5ibG9jayA9IGJp
dHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90Pihub3RUYWtlbkJ5
dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
dW5zaWduZWQgdGFrZW5CeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gdGFrZW4uYnl0ZWNv
ZGVJbmRleCgpOyB9CisgICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbm90VGFrZW4uYnl0ZWNvZGVJbmRleCgpOyB9CisgICAgCisgICAgQmFzaWNCbG9j
ayomIGZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGlmIChjb25k
aXRpb24pCisgICAgICAgICAgICByZXR1cm4gdGFrZW4uYmxvY2s7CisgICAgICAgIHJldHVybiBu
b3RUYWtlbi5ibG9jazsKKyAgICB9CisgICAgCisgICAgQnJhbmNoVGFyZ2V0IHRha2VuOworICAg
IEJyYW5jaFRhcmdldCBub3RUYWtlbjsKK307CisKIC8vIFRoZSBTd2l0Y2hEYXRhIGFuZCBhc3Nv
Y2lhdGVkIGRhdGEgc3RydWN0dXJlcyBkdXBsaWNhdGUgdGhlIGluZm9ybWF0aW9uIGluCiAvLyBK
dW1wVGFibGUuIFRoZSBERkcgbWF5IHVsdGltYXRlbHkgZW5kIHVwIHVzaW5nIHRoZSBKdW1wVGFi
bGUsIHRob3VnaCBpdCBtYXkKIC8vIGluc3RlYWQgZGVjaWRlIHRvIGRvIHNvbWV0aGluZyBkaWZm
ZXJlbnQgLSB0aGlzIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBERkcuCkBAIC05MSw3ICsxNDAsNiBA
QCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIC8vIHZhbHVlcy4KIHN0cnVjdCBTd2l0Y2hD
YXNlIHsKICAgICBTd2l0Y2hDYXNlKCkKLSAgICAgICAgOiB0YXJnZXQoMCkKICAgICB7CiAgICAg
fQogICAgIApAQCAtMTA1LDE0ICsxNTMsMTIgQEAgc3RydWN0IFN3aXRjaENhc2UgewogICAgIHsK
ICAgICAgICAgU3dpdGNoQ2FzZSByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHZhbHVl
OwotICAgICAgICByZXN1bHQudGFyZ2V0ID0gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmVzdWx0LnRhcmdl
dC5zZXRCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCB0YXJnZXRCeXRlY29kZUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGFyZ2V0KTsgfQotICAgIAogICAgIExh
enlKU1ZhbHVlIHZhbHVlOwotICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKKyAgICBCcmFuY2hUYXJn
ZXQgdGFyZ2V0OwogfTsKIAogZW51bSBTd2l0Y2hLaW5kIHsKQEAgLTEyNiwyMSArMTcyLDE0IEBA
IHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICAvLyBjb25zdHJ1Y3RpbmcgdGhpcyBzaG91bGQgbWFr
ZSBzdXJlIHRvIGluaXRpYWxpemUgZXZlcnl0aGluZyB0aGV5CiAgICAgLy8gY2FyZSBhYm91dCBt
YW51YWxseS4KICAgICBTd2l0Y2hEYXRhKCkKLSAgICAgICAgOiBmYWxsVGhyb3VnaCgwKQotICAg
ICAgICAsIGtpbmQoc3RhdGljX2Nhc3Q8U3dpdGNoS2luZD4oLTEpKQorICAgICAgICA6IGtpbmQo
c3RhdGljX2Nhc3Q8U3dpdGNoS2luZD4oLTEpKQogICAgICAgICAsIHN3aXRjaFRhYmxlSW5kZXgo
VUlOVF9NQVgpCiAgICAgICAgICwgZGlkVXNlSnVtcFRhYmxlKGZhbHNlKQogICAgIHsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBzZXRGYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIGZhbGxUaHJvdWdoID0gYml0d2lzZV9jYXN0PEJh
c2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpKTsKLSAgICB9
Ci0gICAgdW5zaWduZWQgZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZmFsbFRocm91Z2gpOyB9Ci0gICAgCiAgICAgVmVjdG9y
PFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoOworICAgIEJy
YW5jaFRhcmdldCBmYWxsVGhyb3VnaDsKICAgICBTd2l0Y2hLaW5kIGtpbmQ7CiAgICAgdW5zaWdu
ZWQgc3dpdGNoVGFibGVJbmRleDsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKQEAgLTgxOSw0
MCArODU4LDIyIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2ln
bmVkIHRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKKyAgICB1bnNpZ25lZCB0YXJn
ZXRCeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
QnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICBBU1NFUlQoaXNKdW1wKCkpOwogICAgICAg
ICByZXR1cm4gbV9vcEluZm87CiAgICAgfQogCi0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkp
OwotICAgICAgICByZXR1cm4gbV9vcEluZm8yOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldFRh
a2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgQmFzaWNCbG9jayomIHRhcmdldEJsb2Nr
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAg
ICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oYmxvY2spOwotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiYgdGFr
ZW5CbG9jaygpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7
CisgICAgICAgIEFTU0VSVChpc0p1bXAoKSk7CiAgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0
PEJhc2ljQmxvY2sqKj4oJm1fb3BJbmZvKTsKICAgICB9CiAgICAgCi0gICAgQmFzaWNCbG9jayom
IG5vdFRha2VuQmxvY2soKQorICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxC
YXNpY0Jsb2NrKio+KCZtX29wSW5mbzIpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJy
YW5jaERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3aXRj
aERhdGEoKQpAQCAtODc5LDI1ICs5MDAsMjYgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAg
ICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERhdGEo
KS0+Y2FzZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzd2l0Y2hEYXRhKCktPmNh
c2VzW2luZGV4XS50YXJnZXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEoKS0+
Y2FzZXNbaW5kZXhdLnRhcmdldC5ibG9jazsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4ID09IHN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBz
d2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoOworICAgICAgICAgICAgcmV0dXJuIHN3aXRjaERhdGEo
KS0+ZmFsbFRocm91Z2guYmxvY2s7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRleCkg
ewogICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9jaygpOworICAg
ICAgICAgICAgaWYgKGlzSnVtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRCbG9j
aygpOworICAgICAgICAgICAgcmV0dXJuIGJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CiAgICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBub3RUYWtlbkJsb2NrKCk7CisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdGFrZW5CbG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldEJsb2NrKCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckZvckNv
bmRpdGlvbihib29sIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0JyYW5jaCgp
KTsKLSAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2soKSA6IG5vdFRha2VuQmxv
Y2soKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaERhdGEoKS0+Zm9yQ29uZGl0aW9uKGNvbmRpdGlv
bik7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsOCArMjgxLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5v
ZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJhc2ljQmxvY2sqIHRha2VuID0g
YnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNo
Tm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAgICAgCiAgICAg
aWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBA
IC0zNjEsOCArMzYxLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAg
QmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2Vu
LmJsb2NrOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29u
ZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTUxNCw4ICs1MTQsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBOb2RlKiBicmFu
Y2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogCiAgICAgLy8gVGhlIGJyYW5j
aCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYg
dGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJy
YW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KQEAgLTEyOTEsOCArMTI5MSw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHko
RWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSkKIHsKLSAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNp
Y0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRh
a2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0
Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTYxNSw4ICsxNjE1LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUqIG5vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT50YWtlbkJs
b2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7
CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2Nr
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtl
bi5ibG9jazsKIAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAg
Y2FzZSBCb29sZWFuVXNlOiB7CkBAIC0zMDA5LDcgKzMwMDksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsK
LSAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkpOworICAgICAgICBqdW1wKG5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4uYmxvY2spOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjQ0MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODUsOCArMjg1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25Q
ZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJh
c2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwotICAgIEJhc2ljQmxv
Y2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIHRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jazsKKyAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4u
YmxvY2s7CiAgICAgCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGlu
dmVydCA9ICFpbnZlcnQ7CkBAIC0zNjMsOCArMzYzLDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVDb21wYQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+
dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFu
Y2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRp
dGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTUw
Nyw4ICs1MDcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2Rl
KiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RU
YWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtl
biA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9j
ayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwog
CiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4g
YmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFr
ZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4K
QEAgLTE2NjksOCArMTY2OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RU
b09iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmpl
Y3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSog
YnJhbmNoTm9kZSkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2Vu
QmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2Vu
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEo
KS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5i
cmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBy
aWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTc5Miw4ICsxNzkyLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludDUyQ29tcGFyZQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnQ1MkJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBi
cmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Ci0gICAg
QmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAg
QmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2Nr
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5u
b3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFu
Y2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0
YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNh
biBmYWxsIHRocm91Z2guCkBAIC0yMDMyLDggKzIwMzIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2go
Tm9kZSogbm9kZSkKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2so
KTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJs
b2NrOwogICAgIAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOiB7CkBAIC0zMzY5LDcgKzMzNjksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1
bXA6IHsKLSAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkpOworICAgICAgICBqdW1wKG5v
ZGUtPnRhcmdldEJsb2NrKCkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NDQxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMDk3LDggKzEwOTcsOCBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJs
ZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJy
YW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIFNwZWN1bGF0
ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMTA5LDggKzExMDks
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUsIE5v
ZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50
YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RU
YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hE
YXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9k
ZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAg
ICAKQEAgLTExODUsOCArMTE4NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZU9iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQm9vbGVhbkJy
YW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hO
b2RlLT50YWtlbkJsb2NrKCk7Ci0gICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5ub3RUYWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT5i
cmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jazsKIAogICAgIC8vIFRoZSBicmFu
Y2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElm
IHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBi
cmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0xMjE2LDggKzEyMTYs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCb29sCiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMyQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUq
IGJyYW5jaE5vZGUsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
IHsKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKLSAg
ICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxv
Y2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5icmFuY2hEYXRhKCkt
Pm5vdFRha2VuLmJsb2NrOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJy
YW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNo
IHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2Ug
Y2FuIGZhbGwgdGhyb3VnaC4KQEAgLTM2MzcsOCArMzYzNyw4IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sg
PSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0g
VUlOVF9NQVgpIHsKICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+
dGFrZW5CbG9jaygpOwotICAgICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2Rl
LT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrOworICAgICAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IGJyYW5jaE5vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFrZW4uYmxvY2s7CiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpFcXVhbDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24g
d2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgpAQCAtNDIxMyw4ICs0MjEzLDggQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogICAgIEFTU0VSVChub2RlLT5h
ZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2soKTsKLSAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2s7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBi
cmFuY2hOb2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmJsb2NrOwogICAgIAogICAgIGJvb2wg
aW52ZXJ0ID0gZmFsc2U7CiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CkBAIC00ODk1
LDcgKzQ4OTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCgKICAg
ICBtX2ppdC5zdWIzMihJbW0zMih0YWJsZS5taW4pLCB2YWx1ZSk7CiAgICAgYWRkQnJhbmNoKAog
ICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLCB2YWx1ZSwg
SW1tMzIodGFibGUuY3RpT2Zmc2V0cy5zaXplKCkpKSwKLSAgICAgICAgZGF0YS0+ZmFsbFRocm91
Z2gpOworICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKHRhYmxlLmN0aU9mZnNldHMuYmVnaW4oKSksIHNjcmF0Y2gpOwogICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkJhc2VJbmRleChzY3JhdGNoLCB2YWx1ZSwgSklUQ29t
cGlsZXI6OnRpbWVzUHRyKCkpLCBzY3JhdGNoKTsKICAgICBtX2ppdC5qdW1wKHNjcmF0Y2gpOwpA
QCAtNDkyOSw3ICs0OTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShO
b2RlKgogICAgICAgICBhZGRCcmFuY2goCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQo
CiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIHZhbHVlUmVncy5ncHIoKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJv
dWdoKTsKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwgc2NyYXRjaCwgdmFsdWVSZWdzLmdw
cigpLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhzY3JhdGNoKTsKQEAgLTQ5NDMsNyArNDk0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsIHZhbHVlUmVncy50YWdHUFIoKSwK
ICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSksCi0gICAg
ICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHNjcmF0Y2gpOwogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUs
IHNjcmF0Y2gsIHZhbHVlUmVncywgZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoc2NyYXRjaCk7CkBAIC00OTY3LDcgKzQ5NjcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhclN0cmluCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2
YWx1ZSwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLAogICAgICAgICAgICAgVHJ1c3RlZElt
bTMyKDEpKSwKLSAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICBkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jayk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZSwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2gpOwogICAg
IApAQCAtNTAyNSwxMiArNTAyNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNo
Q2hhcihOb2RlCiAgICAgICAgIGFkZEJyYW5jaCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaFRl
c3Q2NCgKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxUmVncy5n
cHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICNlbHNlCiAg
ICAgICAgIGFkZEJyYW5jaCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxUmVncy50YWdHUFIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdo
KTsKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgYWRkQnJhbmNoKApAQCAtNTAzOCw3ICs1MDM4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAg
ICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAgICAgIAogICAgICAgICBlbWl0
U3dpdGNoQ2hhclN0cmluZ0p1bXAoZGF0YSwgb3AxUmVncy5wYXlsb2FkR1BSKCksIHRlbXBHUFIp
OwogICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpA
QCAtNTA5Myw3ICs1MDkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJpbmFyeVN3aXRj
aFN0cgogICAgIH0KICAgICAKICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7Ci0gICAgICAgIGp1bXAo
ZGF0YS0+ZmFsbFRocm91Z2gsIEZvcmNlSnVtcCk7CisgICAgICAgIGp1bXAoZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2ssIEZvcmNlSnVtcCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBA
IC01MTI5LDE0ICs1MTI5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCaW5hcnlTd2l0
Y2hTdHIKICAgICAgICAgZGF0YUxvZygibGVuZ3RoID0gIiwgbWluTGVuZ3RoLCAiLCBjb21tb25D
aGFycyA9ICIsIGNvbW1vbkNoYXJzLCAiLCBhbGxMZW5ndGhzRXF1YWwgPSAiLCBhbGxMZW5ndGhz
RXF1YWwsICJcbiIpOwogICAgIAogICAgIGlmICghYWxsTGVuZ3Roc0VxdWFsICYmIGFscmVhZHlD
aGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoKQotICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGxlbmd0aCwgSW1tMzIobWluTGVuZ3RoKSwgZGF0YS0+ZmFsbFRocm91Z2gpOwor
ICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGxlbmd0aCwgSW1tMzIobWlu
TGVuZ3RoKSwgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgIGlmIChhbGxMZW5ndGhzRXF1
YWwgJiYgKGFscmVhZHlDaGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoIHx8ICFjaGVja2VkRXhhY3RM
ZW5ndGgpKQotICAgICAgICBicmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxlbmd0
aCwgSW1tMzIobWluTGVuZ3RoKSwgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICBicmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGxlbmd0aCwgSW1tMzIobWluTGVuZ3RoKSwgZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNo
ZWNrZWQ7IGkgPCBjb21tb25DaGFyczsgKytpKSB7CiAgICAgICAgIGJyYW5jaDgoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1
ZmZlciwgaSksCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoY2FzZXNbYmVnaW5dLnN0cmluZy0+
YXQoaSkpLCBkYXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoY2Fz
ZXNbYmVnaW5dLnN0cmluZy0+YXQoaSkpLCBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAgICAg
fQogICAgIAogICAgIGlmIChtaW5MZW5ndGggPT0gY29tbW9uQ2hhcnMpIHsKQEAgLTUyMDYsNyAr
NTIwNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCaW5hcnlTd2l0Y2hTdHIKICAgICAg
ICAgICAgIHRlbXAsIG1pbkxlbmd0aCwgYWxsTGVuZ3Roc0VxdWFsKTsKICAgICB9CiAgICAgCi0g
ICAgYWRkQnJhbmNoKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLCBkYXRhLT5mYWxsVGhyb3Vn
aCk7CisgICAgYWRkQnJhbmNoKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLCBkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jayk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJp
bmdPblN0cmluZyhTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgc3RyaW5nKQpAQCAtNTI1OCw3ICs1
MjU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uUwogICAgIFZl
Y3RvcjxTdHJpbmdTd2l0Y2hDYXNlPiBjYXNlczsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY2FzZXMuYXBwZW5kKAotICAg
ICAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShkYXRhLT5jYXNlc1tpXS52YWx1ZS5zdHJpbmdJbXBs
KCksIGRhdGEtPmNhc2VzW2ldLnRhcmdldCkpOworICAgICAgICAgICAgU3RyaW5nU3dpdGNoQ2Fz
ZShkYXRhLT5jYXNlc1tpXS52YWx1ZS5zdHJpbmdJbXBsKCksIGRhdGEtPmNhc2VzW2ldLnRhcmdl
dC5ibG9jaykpOwogICAgIH0KICAgICAKICAgICBzdGQ6OnNvcnQoY2FzZXMuYmVnaW4oKSwgY2Fz
ZXMuZW5kKCkpOwpAQCAtNTI5NCw4ICs1Mjk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN3aXRjaFN0cmluZyhObwogICAgICAgICAKICAgICAgICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3
aXRjaCh0ZW1wR1BSLCBpZGVudGlmaWVyQ2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIp
OwogICAgICAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2UobV9qaXQpKQotICAgICAgICAg
ICAganVtcChkYXRhLT5jYXNlc1tiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCldLnRhcmdldCwgRm9y
Y2VKdW1wKTsKLSAgICAgICAgYWRkQnJhbmNoKGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLCBk
YXRhLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBqdW1wKGRhdGEtPmNhc2VzW2JpbmFyeVN3
aXRjaC5jYXNlSW5kZXgoKV0udGFyZ2V0LmJsb2NrLCBGb3JjZUp1bXApOworICAgICAgICBhZGRC
cmFuY2goYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2Nr
KTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKQEAg
LTUzMjUsMTIgKzUzMjUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmlu
ZyhObwogICAgICAgICBhZGRCcmFuY2goCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQo
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMVJlZ3MuZ3ByKCks
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3Vn
aCk7CisgICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAjZWxzZQogICAgICAg
ICBhZGRCcmFuY2goCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaCk7Cisg
ICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CiAjZW5kaWYKICAgICAgICAgCiAg
ICAgICAgIGFkZEJyYW5jaCgKQEAgLTUzMzgsNyArNTMzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm8KICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxUmVn
cy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAg
ICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICAKICAgICAgICAgZW1pdFN3aXRj
aFN0cmluZ09uU3RyaW5nKGRhdGEsIG9wMVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
NjQ0MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ4NywyNSArMzQ4NywyMyBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKLSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9j
ayhtX25vZGUtPnRha2VuQmxvY2soKSkpOworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1f
bm9kZS0+dGFyZ2V0QmxvY2soKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVCcmFu
Y2goKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IERGRyBzaG91bGQgYmUgYWJsZSB0byB0ZWxs
IHVzIGJyYW5jaCB3ZWlnaHRzIGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwNTUKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5j
aCgKICAgICAgICAgICAgIGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICB1
bnN1cmUobG93QmxvY2sobV9ub2RlLT50YWtlbkJsb2NrKCkpKSwKLSAgICAgICAgICAgIHVuc3Vy
ZShsb3dCbG9jayhtX25vZGUtPm5vdFRha2VuQmxvY2soKSkpKTsKKyAgICAgICAgICAgIFdlaWdo
dGVkVGFyZ2V0KAorICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgp
LT50YWtlbi5ibG9jayksCisgICAgICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPnRh
a2VuLmNvdW50KSwKKyAgICAgICAgICAgIFdlaWdodGVkVGFyZ2V0KAorICAgICAgICAgICAgICAg
IGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayksCisgICAgICAg
ICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmNvdW50KSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZVN3aXRjaCgpCiAgICAgewotICAgICAgICAvLyBGSVhNRTog
REZHIHNob3VsZCBiZSBhYmxlIHRvIHRlbGwgdXMgYnJhbmNoIHdlaWdodHMgaGVyZS4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA1NQotICAg
ICAgICAKICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG1fbm9kZS0+c3dpdGNoRGF0YSgpOwog
ICAgICAgICBzd2l0Y2ggKGRhdGEtPmtpbmQpIHsKICAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsK
QEAgLTM1MzcsNyArMzUzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaXNOb3RJbnQsIGlzRG91YmxlKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
CiAgICAgICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyhib3hlZFZhbHVlKSwKLSAgICAgICAg
ICAgICAgICAgICAgdXN1YWxseShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaCkpLCByYXJlbHko
aXNEb3VibGUpKTsKKyAgICAgICAgICAgICAgICAgICAgdXN1YWxseShsb3dCbG9jayhkYXRhLT5m
YWxsVGhyb3VnaC5ibG9jaykpLCByYXJlbHkoaXNEb3VibGUpKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc0RvdWJsZSwgaW5uZXJMYXN0TmV4dCk7
CiAgICAgICAgICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gdW5ib3hEb3VibGUoYm94ZWRW
YWx1ZSk7CkBAIC0zNTQ1LDcgKzM1NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlu
dFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGludEluRG91YmxlKSk7CiAgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbCht
X291dC5pbnRUb0RvdWJsZShpbnRJbkRvdWJsZSksIGRvdWJsZVZhbHVlKSwKLSAgICAgICAgICAg
ICAgICAgICAgdW5zdXJlKHN3aXRjaE9uSW50cyksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxs
VGhyb3VnaCkpKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKHN3aXRjaE9uSW50cyksIHVu
c3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTM1NjIsNiArMzU2
MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFN3aXRjaENoYXI6IHsKICAgICAgICAgICAg
IExWYWx1ZSBzdHJpbmdWYWx1ZTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCB1c2Ugc29tZXRoaW5nIG90aGVyIHRoYW4gdW5zdXJlKCkgZm9yIHRoZSBicmFu
Y2ggd2VpZ2h0CisgICAgICAgICAgICAvLyBvZiB0aGUgZmFsbFRocm91Z2ggYmxvY2suIFRoZSBt
YWluIGNoYWxsZW5nZSBpcyBqdXN0IHRoYXQgd2UgaGF2ZSBtdWx0aXBsZQorICAgICAgICAgICAg
Ly8gYnJhbmNoZXMgdG8gZmFsbFRocm91Z2ggYnV0IGEgc2luZ2xlIGNvdW50LCBzbyB3ZSB3b3Vs
ZCBuZWVkIHRvIGRpdnZ5IGl0IHVwCisgICAgICAgICAgICAvLyBhbW9uZyB0aGUgZGlmZmVyZW50
IGxvd2VyZWQgYnJhbmNoZXMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDgyCisgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgU3RyaW5n
VXNlOiB7CiAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBsb3dTdHJpbmcobV9ub2RlLT5j
aGlsZDEoKSk7CkBAIC0zNTc2LDEzICszNTgwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgICAgICAgICBp
c05vdENlbGwodW5ib3hlZFZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Js
b2NrKGRhdGEtPmZhbGxUaHJvdWdoKSksIHVuc3VyZShpc0NlbGxDYXNlKSk7CisgICAgICAgICAg
ICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1
cmUoaXNDZWxsQ2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNl
KTsKICAgICAgICAgICAgICAgICBMVmFsdWUgY2VsbFZhbHVlID0gdW5ib3hlZFZhbHVlOwogICAg
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgICAgICAgICAgaXNOb3RTdHJp
bmcoY2VsbFZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEt
PmZhbGxUaHJvdWdoKSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpKTsKKyAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc1N0
cmluZ0Nhc2UpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhpc1N0cmluZ0Nhc2UsIGxhc3ROZXh0KTsKICAgICAgICAgICAgICAgICBzdHJpbmdWYWx1
ZSA9IGNlbGxWYWx1ZTsKQEAgLTM2MDUsNyArMzYwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCksCiAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmludDMyT25lKSwKLSAgICAgICAgICAgICAgICB1bnN1cmUobG93
QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gpKSwgdW5zdXJlKGxlbmd0aElzMSkpOworICAgICAgICAg
ICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUo
bGVuZ3RoSXMxKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVuZ3RoSXMxLCBuZWVkUmVzb2x1dGlvbik7CiAgICAgICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHZhbHVlczsKQEAgLTQxODgsMTAgKzQxOTIs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNh
c2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgK
ICAgICAgICAgICAgICAgICBjb25zdEludCh0eXBlLCBkYXRhLT5jYXNlc1tpXS52YWx1ZS5zd2l0
Y2hMb29rdXBWYWx1ZSgpKSwKLSAgICAgICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5jYXNlc1tp
XS50YXJnZXQpLCBXZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIGxvd0Jsb2NrKGRhdGEtPmNh
c2VzW2ldLnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQp
KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9u
KHN3aXRjaFZhbHVlLCBjYXNlcywgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gpLCBXZWlnaHQo
KSk7CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgc3dpdGNo
VmFsdWUsIGNhc2VzLAorICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxv
Y2spLCBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291bnQpKTsKICAgICB9CiAgICAgCiAgICAg
TFZhbHVlIGRvdWJsZVRvSW50MzIoTFZhbHVlIGRvdWJsZVZhbHVlLCBkb3VibGUgbG93LCBkb3Vi
bGUgaGlnaCwgYm9vbCBpc1NpZ25lZCA9IHRydWUpCg==
</data>
<flag name="review"
          id="248823"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>