<?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>77779</bug_id>
          
          <creation_ts>2012-02-03 14:20:39 -0800</creation_ts>
          <short_desc>Rename CSSMutableStyleDeclaration.h/.cpp to StylePropertySet.h/.cpp</short_desc>
          <delta_ts>2012-02-03 14:42:23 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>549067</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 14:20:39 -0800</bug_when>
    <thetext>Match the new class name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549074</commentid>
    <comment_count>1</comment_count>
      <attachid>125413</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 14:24:26 -0800</bug_when>
    <thetext>Created attachment 125413
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549077</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 14:26:06 -0800</bug_when>
    <thetext>Attachment 125413 did not pass style-queue:

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

Source/WebCore/css/StylePropertySet.h:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/css/StylePropertySet.cpp:262:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/css/StylePropertySet.cpp:543:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/css/StylePropertySet.cpp:562:  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: 4 in 46 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>549079</commentid>
    <comment_count>3</comment_count>
      <attachid>125413</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-03 14:27:05 -0800</bug_when>
    <thetext>Comment on attachment 125413
patch

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

This patch doesn’t seem to have used “svn mv”. It would be nice to see the diffs between the code that was moved and how it looks in its new location, and if we use “svn mv” we would see that.

&gt; Source/WebCore/css/StylePropertySet.h:22
&gt; +#ifndef CSSMutableStyleDeclaration_h
&gt; +#define CSSMutableStyleDeclaration_h

Forgot to rename these.

&gt; Source/WebCore/css/StylePropertySet.h:24
&gt; +#include &quot;CSSStyleDeclaration.h&quot;

Should be able to get rid of this include eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549081</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 14:29:27 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; This patch doesn’t seem to have used “svn mv”. It would be nice to see the diffs between the code that was moved and how it looks in its new location, and if we use “svn mv” we would see that.

Hmm, I used Xcode rename. Thought that would do svn mv.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549108</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 14:42:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106695</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125413</attachid>
            <date>2012-02-03 14:24:26 -0800</date>
            <delta_ts>2012-02-03 14:27:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>rename-mutable.patch</filename>
            <type>text/plain</type>
            <size>148633</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjY5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTAyLTAzICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaC8uY3BwIHRvIFN0eWxlUHJvcGVydHlTZXQuaC8uY3BwIAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc3NzkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYXRjaCB0aGUgbmV3IGNs
YXNzIG5hbWUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBl
KToKKyAgICAgICAgKiBjc3MvQ1NTQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
Rm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQYWdlUnVsZS5jcHA6CisgICAgICAgICog
Y3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5jcHA6CisgICAg
ICAgICogY3NzL0NTU1N0eWxlUnVsZS5oOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnR5U2V0
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmNwcC4KKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0eVNldC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaC4KKyAgICAg
ICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDoKKyAgICAgICAgKiBjc3MvV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmg6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUu
Y3BwOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAqIGRvbS9D
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5oOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAq
IGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5j
cHA6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAg
ICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAx
Mi0wMi0wMyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFVwZGF0ZSB0aGUgdHJlZSBzdGF0ZSBhZnRlciBsYXlvdXQgYW5kIGFkZCBhIHdheSB0byBjb21t
aXQgaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDY2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDUyLDcgKzQ1Miw2
IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvQ1NTSW5pdGlhbFZhbHVlLmNwcAogICAg
IGNzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmNwcAogICAgIGNzcy9DU1NNZWRpYVJ1bGUuY3Bw
Ci0gICAgY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAogICAgIGNzcy9DU1NPTVV0
aWxzLmNwcAogICAgIGNzcy9DU1NQYWdlUnVsZS5jcHAKICAgICBjc3MvQ1NTUGFyc2VyLmNwcApA
QCAtNDkzLDYgKzQ5Miw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBjc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAogICAgIGNzcy9TaGFkb3dWYWx1ZS5jcHAKICAgICBjc3MvU3R5bGVNZWRpYS5j
cHAKKyAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHAKICAgICBjc3MvU3R5bGVTaGVldC5jcHAK
ICAgICBjc3MvU3R5bGVTaGVldExpc3QuY3BwCiAgICAgY3NzL1dlYktpdENTU0ZpbHRlclZhbHVl
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMDY2Nzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzI0LDggKzEzMjQsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
ZWRpYVJ1bGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmggXAotCVNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgXAotCVNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTTmFtZXNwYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NPTVV0aWxz
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL0NTU09NVXRpbHMuaCBcCkBAIC0xNDEzLDYgKzE0
MTEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TaGFkb3dW
YWx1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwIFwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA2Njc4KQorKysgU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNDE2LDcgKzQxNiw2IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGNzcy9DU1NJbml0aWFsVmFsdWUuY3BwIFwKICAgICBjc3MvQ1NTTGluZUJveENvbnRhaW5W
YWx1ZS5jcHAgXAogICAgIGNzcy9DU1NNZWRpYVJ1bGUuY3BwIFwKLSAgICBjc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwIFwKICAgICBjc3MvQ1NTT01VdGlscy5jcHAgXAogICAgIGNz
cy9DU1NQYWdlUnVsZS5jcHAgXAogICAgIGNzcy9DU1NQYXJzZXIuY3BwIFwKQEAgLTQ1Nyw2ICs0
NTYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBcCiAgICAg
Y3NzL1NoYWRvd1ZhbHVlLmNwcCBcCiAgICAgY3NzL1N0eWxlTWVkaWEuY3BwIFwKKyAgICBjc3Mv
U3R5bGVQcm9wZXJ0eVNldC5jcHAgXAogICAgIGNzcy9TdHlsZVNoZWV0LmNwcCBcCiAgICAgY3Nz
L1N0eWxlU2hlZXRMaXN0LmNwcCBcCiAgICAgY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcCBc
CkBAIC0xNTMwLDcgKzE1MzAsNiBAQCBIRUFERVJTICs9IFwKICAgICBjc3MvQ1NTSW5oZXJpdGVk
VmFsdWUuaCBcCiAgICAgY3NzL0NTU0luaXRpYWxWYWx1ZS5oIFwKICAgICBjc3MvQ1NTTWVkaWFS
dWxlLmggXAotICAgIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIFwKICAgICBjc3Mv
Q1NTT01VdGlscy5oIFwKICAgICBjc3MvQ1NTUGFnZVJ1bGUuaCBcCiAgICAgY3NzL0NTU1BhcnNl
ci5oIFwKQEAgLTE1NzEsNiArMTU3MCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGNzcy9TZWxlY3Rv
ckNoZWNrZXIuaCBcCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmggXAogICAgIGNzcy9TdHlsZU1lZGlh
LmggXAorICAgIGNzcy9TdHlsZVByb3BlcnR5U2V0LmggXAogICAgIGNzcy9TdHlsZVNoZWV0Lmgg
XAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5oIFwKICAgICBjc3MvV2ViS2l0Q1NTRmlsdGVyVmFs
dWUuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMDY2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAKICAg
ICAgICAgICAgICdjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oJywKICAgICAgICAgICAgICdj
c3MvQ1NTSW1hZ2VWYWx1ZS5oJywKICAgICAgICAgICAgICdjc3MvQ1NTTGluZUJveENvbnRhaW5W
YWx1ZS5oJywKLSAgICAgICAgICAgICdjc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCcs
CiAgICAgICAgICAgICAnY3NzL0NTU1BhcnNlclZhbHVlcy5oJywKICAgICAgICAgICAgICdjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaCcsCiAgICAgICAgICAgICAnY3NzL0NTU1Byb3BlcnR5LmgnLApA
QCAtMjAxOSw3ICsyMDE4LDYgQEAKICAgICAgICAgICAgICdjc3MvQ1NTTGluZUJveENvbnRhaW5W
YWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9DU1NNZWRpYVJ1bGUuY3BwJywKICAgICAgICAg
ICAgICdjc3MvQ1NTTWVkaWFSdWxlLmgnLAotICAgICAgICAgICAgJ2Nzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2Nzcy9DU1NOYW1lc3BhY2UuaCcsCiAg
ICAgICAgICAgICAnY3NzL0NTU09NVXRpbHMuY3BwJywKICAgICAgICAgICAgICdjc3MvQ1NTT01V
dGlscy5oJywKQEAgLTIwOTksNiArMjA5Nyw4IEBACiAgICAgICAgICAgICAnY3NzL1NoYWRvd1Zh
bHVlLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZU1lZGlhLmNwcCcsCiAgICAgICAgICAgICAn
Y3NzL1N0eWxlTWVkaWEuaCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlUHJvcGVydHlTZXQuY3Bw
JworICAgICAgICAgICAgJ2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgnCiAgICAgICAgICAgICAnY3Nz
L1N0eWxlU2hlZXQuY3BwJywKICAgICAgICAgICAgICdjc3MvU3R5bGVTaGVldC5oJywKICAgICAg
ICAgICAgICdjc3MvU3R5bGVTaGVldExpc3QuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDY2NzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzM4ODYsNyArMzM4ODYsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwIgorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlUHJvcGVydHlTZXQuY3BwIgogCQkJCT4KIAkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KIAkJCQkJTmFtZT0iRGVidWd8V2luMzIiCkBAIC0zMzkzOCw3ICsz
MzkzOCw3IEBACiAJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3NcQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZVByb3BlcnR5U2V0LmgiCiAJCQkJPgogCQkJ
PC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEwNjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MzYyNiw4ICszNjI2LDggQEAKIAkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2Fy
ZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgwRTZDRTEwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oICovOyB9OwogCQlB
ODBFNkQwQzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkNFMjBBMTk4OUNBMDA3RkI4QzUg
LyogQ1NTU3R5bGVSdWxlLmggKi87IH07CiAJCUE4MEU2RDBEMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODBFNkNFMzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUnVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE4MEU2REZCMEExOTkwNjcwMDdGQjhDNSAv
KiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkRGOTBBMTk5MDY3MDA3RkI4QzUgLyogQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwICovOyB9OwotCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4
QzUgLyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2REZBMEExOTkwNjcwMDdGQjhDNSAvKiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUE4MEU2REZCMEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3Bl
cnR5U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnR5U2V0LmNwcCAqLzsgfTsK
KwkJQTgwRTZERkMwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydHlTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2REZBMEExOTkwNjcw
MDdGQjhDNSAvKiBTdHlsZVByb3BlcnR5U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgwRTZFMEYwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0
eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MEU2RTBEMEExOTkxMUMwMDdGQjhDNSAvKiBDU1NTdHlsZURlY2xhcmF0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgwRTZF
MTAwQTE5OTExQzAwN0ZCOEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZFMEUwQTE5OTExQzAwN0ZC
OEM1IC8qIENTU1N0eWxlRGVjbGFyYXRpb24uY3BwICovOyB9OwogCQlBODBFNzM0RTBBMTk5Qzc3
MDA3RkI4QzUgLyogQ1NTTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBODBFNzM0NzBBMTk5Qzc3MDA3RkI4QzUgLyogQ1NTTmFtZXNwYWNl
LmggKi87IH07CkBAIC0xMDQ3MCw4ICsxMDQ3MCw4IEBACiAJCUE4MEU2Q0UxMEExOTg5Q0EwMDdG
QjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERhc2hib2FyZFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBF
NkNFMjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTU3R5bGVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NTdHlsZVJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTgwRTZDRTMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1J1bGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQTgwRTZERjkwQTE5OTA2NzAwN0ZCOEM1IC8qIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MEU2
REZBMEExOTkwNjcwMDdGQjhDNSAvKiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTgwRTZERjkwQTE5OTA2NzAwN0ZCOEM1
IC8qIFN0eWxlUHJvcGVydHlTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFN0eWxlUHJvcGVydHlTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBODBFNkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0eVNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVQcm9wZXJ0eVNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBODBFNkUwRDBBMTk5MTFDMDA3RkI4QzUgLyogQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODBFNkUwRTBBMTk5
MTFDMDA3RkI4QzUgLyogQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4MEU3MzQ3MEExOTlDNzcwMDdGQjhDNSAvKiBDU1NOYW1lc3Bh
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU05hbWVzcGFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk5NjQsOCArMTk5NjQsOCBAQAogCQkJCUE4
MEU2Q0QyMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NNZWRpYVJ1bGUuY3BwICovLAogCQkJCUE4MEU2
Q0Q5MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NNZWRpYVJ1bGUuaCAqLywKIAkJCQk4NUM1NkNBMjBB
QTg5QzEwMDBEOTU3NTUgLyogQ1NTTWVkaWFSdWxlLmlkbCAqLywKLQkJCQlBODBFNkRGOTBBMTk5
MDY3MDA3RkI4QzUgLyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwICovLAotCQkJCUE4
MEU2REZBMEExOTkwNjcwMDdGQjhDNSAvKiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oICov
LAorCQkJCUE4MEU2REY5MEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnR5U2V0LmNwcCAq
LywKKwkJCQlBODBFNkRGQTBBMTk5MDY3MDA3RkI4QzUgLyogU3R5bGVQcm9wZXJ0eVNldC5oICov
LAogCQkJCUE4MEU3MzQ3MEExOTlDNzcwMDdGQjhDNSAvKiBDU1NOYW1lc3BhY2UuaCAqLywKIAkJ
CQlGOThGRkY0MjExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5jcHAgKi8sCiAJCQkJRjk4
RkZGNDMxMUEyNjc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuaCAqLywKQEAgLTIxMjcxLDcgKzIx
MjcxLDcgQEAKIAkJCQlCQzc3MkUxMzEzMzE2MjBDMDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRh
aW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDNEE4MDkwOUQ1NjMyNzAwMDNBQzhEIC8q
IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBF
NkQwMzBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTTWVkaWFSdWxlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUgLyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCUE4MEU2REZDMEExOTkwNjcwMDdGQjhDNSAvKiBTdHlsZVBy
b3BlcnR5U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNzM0RTBBMTk5Qzc3MDA3RkI4QzUg
LyogQ1NTTmFtZXNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGOThGRkY0NTExQTI2NzYyMDBG
NTQ4RTggLyogQ1NTT01VdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMDAwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjczLDcgKzI0
NjczLDcgQEAKIAkJCQlCQzc3MkUxNjEzMzE2MkMyMDAxRUM5Q0UgLyogQ1NTTGluZUJveENvbnRh
aW5WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEM0QTgwQTA5RDU2MzI3MDAwM0FDOEQg
LyogQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTgwRTZDRkMwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU01lZGlhUnVsZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBODBFNkRGQjBBMTk5MDY3MDA3RkI4QzUgLyogQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTgwRTZERkIwQTE5OTA2NzAwN0ZCOEM1IC8q
IFN0eWxlUHJvcGVydHlTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjk4RkZGNDQxMUEyNjc2
MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRjUw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU1BhZ2VSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
NzcyQjNEMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJK
U0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uaCIKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJp
bWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC0zNCw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiSlNDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJ
Q1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxMDY2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsNyArMjMsNiBAQAogI2RlZmluZSBKU0RPTUJpbmRpbmdfaAogCiAjaW5jbHVkZSAi
Q1NTSW1wb3J0UnVsZS5oIgotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCkBAIC0zMSw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0
LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1l
bnQuaCIKICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9u
UHJvdG90eXBlLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTA2Njc4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAg
LTI5NjMsNyArMjk2Myw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAkZ2xvYmFsT2Jq
ZWN0ID0gIiR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpIjsKIAogICAgIGlmICgkdHlwZSBlcSAi
Q1NTU3R5bGVEZWNsYXJhdGlvbiIpIHsKLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkNTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiU3R5bGVQcm9wZXJ0eVNldC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICB9CiAK
ICAgICBpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiAx
MDY2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JP
YmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC02MTcsNyArNjE3LDcgQEAgc3ViIEFkZEluY2x1ZGVz
Rm9yVHlwZQogICAgIH0KIAogICAgICMgRklYTUU6IHdvbid0IGNvbXBpbGUgd2l0aG91dCB0aGVz
ZQotICAgICRpbXBsSW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDEg
aWYgJHR5cGUgZXEgIkNTU1N0eWxlRGVjbGFyYXRpb24iOworICAgICRpbXBsSW5jbHVkZXN7IlN0
eWxlUHJvcGVydHlTZXQuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7
CiAgICAgJGltcGxJbmNsdWRlc3siTmFtZU5vZGVMaXN0LmgifSA9IDEgaWYgJHR5cGUgZXEgIk5v
ZGVMaXN0IjsKIAogICAgICMgRGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlICh0
aGUgaW1wbGVtZW50YXRpb24pIGFuZCB0aGUgc2FtZSBuYW1lIHByZWZpeGVkIHdpdGggIkRPTSIu
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0FsbEluT25lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxMDY2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiQ1NTSW5pdGlhbFZhbHVlLmNwcCIKICNpbmNsdWRlICJD
U1NMaW5lQm94Q29udGFpblZhbHVlLmNwcCIKICNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuY3BwIgot
I2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcCIKICNpbmNsdWRlICJDU1NP
TVV0aWxzLmNwcCIKICNpbmNsdWRlICJDU1NQYWdlUnVsZS5jcHAiCiAjaW5jbHVkZSAiQ1NTUGFy
c2VyLmNwcCIKQEAgLTcyLDMgKzcxLDQgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuY3BwIgog
I2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5jcHAiCiAjaW5jbHVkZSAiQ1NTV3JhcFNoYXBlcy5jcHAi
CisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTA2
NjgxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJDU1NBc3BlY3RS
YXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQm9yZGVySW1hZ2UuaCIKICNpbmNsdWRlICJDU1NM
aW5lQm94Q29udGFpblZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKQEAgLTU4LDYgKzU3
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogI2luY2x1ZGUgIlN0eWxlQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIgogI2luY2x1ZGUgIldlYktpdENTU0ZpbHRlclZhbHVlLmgiCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkocmV2aXNpb24gMTA2Njc4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcg
KzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUu
aCIKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
U3R5bGVQcm9wZXJ0eVNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIs
OCBAQAogI2lmbmRlZiBDU1NGb250RmFjZVJ1bGVfaAogI2RlZmluZSBDU1NGb250RmFjZVJ1bGVf
aAogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJD
U1NSdWxlLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMTA2NjgxKQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDYgQEAKICNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NGb250RmFj
ZVNvdXJjZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlU3JjVmFsdWUuaCIKLSNpbmNsdWRlICJD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVl
LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1NlZ21lbnRl
ZEZvbnRGYWNlLmgiCkBAIC00OCw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJXZWJLaXRGb250RmFtaWx5TmFt
ZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZp
c2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNTYgKzAsMCBAQAotLyoKLSAqIChDKSAx
OTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TG9uZ2hhbmQuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NT
UnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiTXV0YXRpb25P
YnNlcnZlckludGVyZXN0R3JvdXAuaCIKLSNpbmNsdWRlICJNdXRhdGlvblJlY29yZC5oIgotI2lu
Y2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRNdXRhdGlvbk9ic2VydmVy
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBD
U1NTdHlsZURlY2xhcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IHByb3BlcnR5U2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
cm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24ocHJvcGVydHlTZXQpKTsgCi0gICAgfQotCi1w
cml2YXRlOgotICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IHByb3BlcnR5U2V0KSA6IG1fcHJvcGVydHlTZXQocHJvcGVydHlTZXQp
IHsgfQotICAgIAotICAgIHZpcnR1YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBTdHJpbmcgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVZhbHVl
KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRQcm9wZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzUHJvcGVydHlJbXBs
aWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlLCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0
eU5hbWUsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENzc1RleHQoY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlE
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChDU1NQcm9w
ZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0aW9uQ29k
ZSYpIE9WRVJSSURFOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMo
Y29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIENTU1N0eWxl
U2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURF
OwotICAgIAotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX3Byb3BlcnR5U2V0OwotfTsK
LQotbmFtZXNwYWNlIHsKLQotY2xhc3MgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUpOwotcHVi
bGljOgotICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZShTdHlsZVByb3BlcnR5U2V0KiBk
ZWNsKQotICAgIHsKLSAgICAgICAgKytzX3Njb3BlQ291bnQ7Ci0KLSAgICAgICAgaWYgKHNfc2Nv
cGVDb3VudCAhPSAxKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc19jdXJyZW50RGVjbCA9PSBkZWNs
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVCghc19j
dXJyZW50RGVjbCk7Ci0gICAgICAgIHNfY3VycmVudERlY2wgPSBkZWNsOwotCi0jaWYgRU5BQkxF
KE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAgaWYgKCFzX2N1cnJlbnREZWNsLT5pc0lubGlu
ZVN0eWxlRGVjbGFyYXRpb24oKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCFz
X2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIG1fbXV0YXRpb25SZWNpcGllbnRzID0gTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXA6
OmNyZWF0ZUZvckF0dHJpYnV0ZXNNdXRhdGlvbihzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50
KCksIEhUTUxOYW1lczo6c3R5bGVBdHRyKTsKLSAgICAgICAgaWYgKCFtX211dGF0aW9uUmVjaXBp
ZW50cykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBdG9taWNTdHJpbmcgb2xkVmFs
dWUgPSBtX211dGF0aW9uUmVjaXBpZW50cy0+aXNPbGRWYWx1ZVJlcXVlc3RlZCgpID8gc19jdXJy
ZW50RGVjbC0+cGFyZW50RWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdHlsZUF0
dHIpIDogbnVsbEF0b207Ci0gICAgICAgIG1fbXV0YXRpb24gPSBNdXRhdGlvblJlY29yZDo6Y3Jl
YXRlQXR0cmlidXRlcyhzX2N1cnJlbnREZWNsLT5wYXJlbnRFbGVtZW50KCksIEhUTUxOYW1lczo6
c3R5bGVBdHRyLCBvbGRWYWx1ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB+U3R5bGVBdHRyaWJ1
dGVNdXRhdGlvblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIC0tc19zY29wZUNvdW50OwotICAgICAg
ICBpZiAoc19zY29wZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKE1V
VEFUSU9OX09CU0VSVkVSUykKLSAgICAgICAgaWYgKG1fbXV0YXRpb24gJiYgc19zaG91bGREZWxp
dmVyKQotICAgICAgICAgICAgbV9tdXRhdGlvblJlY2lwaWVudHMtPmVucXVldWVNdXRhdGlvblJl
Y29yZChtX211dGF0aW9uKTsKLSAgICAgICAgc19zaG91bGREZWxpdmVyID0gZmFsc2U7Ci0jZW5k
aWYKLSAgICAgICAgaWYgKCFzX3Nob3VsZE5vdGlmeUluc3BlY3RvcikgewotICAgICAgICAgICAg
c19jdXJyZW50RGVjbCA9IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gV2UgaGF2ZSB0byBjbGVhciBpbnRlcm5hbCBzdGF0ZSBiZWZvcmUgY2FsbGluZyBJbnNw
ZWN0b3IncyBjb2RlLgotICAgICAgICBTdHlsZVByb3BlcnR5U2V0KiBsb2NhbENvcHlTdHlsZURl
Y2wgPSBzX2N1cnJlbnREZWNsOwotICAgICAgICBzX2N1cnJlbnREZWNsID0gMDsKLSAgICAgICAg
c19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKGxvY2FsQ29weVN0
eWxlRGVjbC0+aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNs
LT5wYXJlbnRFbGVtZW50KCkgJiYgbG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCkt
PmRvY3VtZW50KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZElu
dmFsaWRhdGVTdHlsZUF0dHIobG9jYWxDb3B5U3R5bGVEZWNsLT5wYXJlbnRFbGVtZW50KCktPmRv
Y3VtZW50KCksIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpKTsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIHZvaWQgZW5xdWV1ZU11dGF0aW9u
UmVjb3JkKCkKLSAgICB7Ci0gICAgICAgIHNfc2hvdWxkRGVsaXZlciA9IHRydWU7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICB2b2lkIGRpZEludmFsaWRhdGVTdHlsZUF0dHIoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHNfY3VycmVudERlY2wtPmlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpKTsKLSAg
ICAgICAgc19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgdW5zaWduZWQgc19zY29wZUNvdW50OwotICAgIHN0YXRpYyBTdHlsZVByb3Bl
cnR5U2V0KiBzX2N1cnJlbnREZWNsOwotICAgIHN0YXRpYyBib29sIHNfc2hvdWxkTm90aWZ5SW5z
cGVjdG9yOwotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgc3RhdGljIGJvb2wg
c19zaG91bGREZWxpdmVyOwotCi0gICAgT3duUHRyPE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdy
b3VwPiBtX211dGF0aW9uUmVjaXBpZW50czsKLSAgICBSZWZQdHI8TXV0YXRpb25SZWNvcmQ+IG1f
bXV0YXRpb247Ci0jZW5kaWYKLX07Ci0KLXVuc2lnbmVkIFN0eWxlQXR0cmlidXRlTXV0YXRpb25T
Y29wZTo6c19zY29wZUNvdW50ID0gMDsKLVN0eWxlUHJvcGVydHlTZXQqIFN0eWxlQXR0cmlidXRl
TXV0YXRpb25TY29wZTo6c19jdXJyZW50RGVjbCA9IDA7Ci1ib29sIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZTo6c19zaG91bGROb3RpZnlJbnNwZWN0b3IgPSBmYWxzZTsKLSNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQotYm9vbCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNf
c2hvdWxkRGVsaXZlciA9IGZhbHNlOwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlCi0KLVN0eWxl
UHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoKQotICAgIDogbV9zdHJpY3RQYXJzaW5nKGZh
bHNlKQotICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oZmFsc2UpCi0gICAgLCBtX3Bh
cmVudChzdGF0aWNfY2FzdDxDU1NSdWxlKj4oMCkpCi17Ci19Ci0KLVN0eWxlUHJvcGVydHlTZXQ6
OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSkKLSAgICA6IG1fc3RyaWN0UGFy
c2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCi0gICAg
LCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKLSAgICAsIG1fcGFyZW50KHBhcmVu
dFJ1bGUpCi17Ci19Ci0KLVN0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVs
ZSogcGFyZW50UnVsZSwgY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYgcHJvcGVydGllcykKLSAg
ICA6IG1fcHJvcGVydGllcyhwcm9wZXJ0aWVzKQotICAgICwgbV9zdHJpY3RQYXJzaW5nKCFwYXJl
bnRSdWxlIHx8IHBhcmVudFJ1bGUtPnVzZVN0cmljdFBhcnNpbmcoKSkKLSAgICAsIG1faXNJbmxp
bmVTdHlsZURlY2xhcmF0aW9uKGZhbHNlKQotICAgICwgbV9wYXJlbnQocGFyZW50UnVsZSkKLXsK
LSAgICBtX3Byb3BlcnRpZXMuc2hyaW5rVG9GaXQoKTsKLX0KLQotU3R5bGVQcm9wZXJ0eVNldDo6
U3R5bGVQcm9wZXJ0eVNldChDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSog
Y29uc3QgKiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLSAgICA6IG1fc3RyaWN0UGFy
c2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51c2VTdHJpY3RQYXJzaW5nKCkpCi0gICAg
LCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxzZSkKLSAgICAsIG1fcGFyZW50KHBhcmVu
dFJ1bGUpCi17Ci0gICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtUHJv
cGVydGllcyk7Ci0gICAgSGFzaE1hcDxpbnQsIGJvb2w+IGNhbmRpZGF0ZXM7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgQ1NTUHJv
cGVydHkgKnByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5
KTsKLSAgICAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcm9wZXJ0eS0+aXNJbXBvcnRhbnQoKTsKLQot
ICAgICAgICBIYXNoTWFwPGludCwgYm9vbD46Oml0ZXJhdG9yIGl0ID0gY2FuZGlkYXRlcy5maW5k
KHByb3BlcnR5LT5pZCgpKTsKLSAgICAgICAgaWYgKGl0ICE9IGNhbmRpZGF0ZXMuZW5kKCkpIHsK
LSAgICAgICAgICAgIGlmICghaW1wb3J0YW50ICYmIGl0LT5zZWNvbmQpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eS0+aWQoKSwg
ZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQo
KnByb3BlcnR5KTsKLSAgICAgICAgY2FuZGlkYXRlcy5zZXQocHJvcGVydHktPmlkKCksIGltcG9y
dGFudCk7Ci0gICAgfQotfQotCi1TdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KFN0
eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpIAotICAgIDogbV9zdHJpY3RQYXJzaW5nKGZhbHNl
KQotICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24odHJ1ZSkKLSAgICAsIG1fcGFyZW50
KHBhcmVudEVsZW1lbnQpCi17IAotfQotCi1TdHlsZVByb3BlcnR5U2V0Ojp+U3R5bGVQcm9wZXJ0
eVNldCgpCi17Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6ZGVyZWYoKQotewotICAgIGlm
IChkZXJlZkJhc2UoKSkgewotICAgICAgICBkZWxldGUgdGhpczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBTdHlsZVByb3BlcnR5U2V0IGFuZCBDU1NTdHlsZURlY2xhcmF0aW9uIHJl
ZiBlYWNoIG90aGVyLiBXaGVuIHdlIGhhdmUgYSBkZWNsYXJhdGlvbiBhbmQKLSAgICAvLyBvdXIg
cmVmY291bnQgZHJvcHMgdG8gb25lIHdlIGtub3cgaXQgaXMgdGhlIG9ubHkgdGhpbmcga2VlcGlu
ZyB1cyBhbGl2ZS4KLSAgICBpZiAobV9jc3NTdHlsZURlY2xhcmF0aW9uICYmIGhhc09uZVJlZigp
KQotICAgICAgICBtX2Nzc1N0eWxlRGVjbGFyYXRpb24uY2xlYXIoKTsKLX0KLQotQ1NTU3R5bGVT
aGVldCogU3R5bGVQcm9wZXJ0eVNldDo6Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdAotewotICAg
IGlmIChtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbikgewotICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBtX3BhcmVudC5lbGVtZW50ID8gbV9wYXJlbnQuZWxlbWVudC0+ZG9jdW1lbnQoKSA6
IDA7Ci0gICAgICAgIHJldHVybiBkb2N1bWVudCA/IGRvY3VtZW50LT5lbGVtZW50U2hlZXQoKSA6
IDA7Ci0gICAgfQotICAgIHJldHVybiBtX3BhcmVudC5ydWxlID8gbV9wYXJlbnQucnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpIDogMDsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJv
cGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYgb3RoZXIpCi17Ci0gICAgbV9wcm9w
ZXJ0aWVzID0gb3RoZXIubV9wcm9wZXJ0aWVzOwotfQotCi1TdHJpbmcgU3R5bGVQcm9wZXJ0eVNl
dDo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsKLSAgICBSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLSAgICBp
ZiAodmFsdWUpCi0gICAgICAgIHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOwotCi0gICAgLy8gU2hv
cnRoYW5kIGFuZCA0LXZhbHVlcyBwcm9wZXJ0aWVzCi0gICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nOiB7Ci0gICAgICAgICAgICBj
b25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9u
dGFsU3BhY2luZywgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcgfTsKLSAg
ICAgICAgICAgIHJldHVybiBib3JkZXJTcGFjaW5nVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbjogewotICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3NzcGFyc2VyLmNw
cCBpcyBjb25mdXNpbmcKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9w
ZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJl
cGVhdDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3Bl
cnR5QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgfTsKLSAg
ICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6IHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzldID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRJbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRQb3NpdGlvblgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2lu
IH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRp
ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXI6IHsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdWzRdID0ge3sgQ1NTUHJvcGVydHlCb3JkZXJU
b3BXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0
aCB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDU1NQcm9w
ZXJ0eUJvcmRlclRvcFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdFN0eWxlIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IgfX07Ci0gICAgICAgICAgICBTdHJpbmcgcmVzOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHByb3BlcnRp
ZXMpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRDb21tb25WYWx1
ZShwcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzICs9ICIgIjsKLSAgICAgICAgICAgICAgICAgICAgcmVzICs9IHZhbHVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXM7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcDogewotICAgICAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lk
dGgsIENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcn07Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1szXSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBDU1NQcm9wZXJ0eUJv
cmRlclJpZ2h0U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9
IHsgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21T
dHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbUNvbG9yfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
TGVmdDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xv
cn07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmU6IHsKLSAgICAgICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgQ1NT
UHJvcGVydHlPdXRsaW5lU3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRT
aG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyQ29sb3I6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRd
ID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29s
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21Db2xvciwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IgfTsKLSAgICAgICAg
ICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCB9Owot
ICAgICAgICAgICAgcmV0dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOiB7Ci0gICAgICAgICAgICBjb25zdCBp
bnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwgQ1NTUHJvcGVy
dHlCb3JkZXJSaWdodFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdFN0
eWxlIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhwcm9wZXJ0aWVzKTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleEZsb3c6IHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0RmxleERpcmVj
dGlvbiwgQ1NTUHJvcGVydHlXZWJraXRGbGV4V3JhcCB9OwotICAgICAgICAgICAgcmV0dXJuIGdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250OgotICAgICAgICAgICAgcmV0dXJuIGZvbnRWYWx1ZSgpOwotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1s0XSA9IHsgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW5C
b3R0b20sIENTU1Byb3BlcnR5TWFyZ2luTGVmdCB9OwotICAgICAgICAgICAgcmV0dXJuIGdldDRW
YWx1ZXMocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU92
ZXJmbG93OiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJv
cGVydHlPdmVyZmxvd1gsIENTU1Byb3BlcnR5T3ZlcmZsb3dZIH07Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0Q29tbW9uVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVBhZGRpbmc6IHsKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRd
ID0geyBDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsIENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5UGFkZGluZ0Jv
dHRvbSwgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCB9OwotICAgICAgICAgICAgcmV0dXJuIGdldDRW
YWx1ZXMocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxp
c3RTdHlsZTogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1By
b3BlcnR5TGlzdFN0eWxlVHlwZSwgQ1NTUHJvcGVydHlMaXN0U3R5bGVQb3NpdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZUlt
YWdlIH07Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjog
ewotICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY29ycmVjdD8gVGhlIGNvZGUgaW4gY3Nz
cGFyc2VyLmNwcCBpcyBjb25mdXNpbmcKLSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWSB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRW
YWx1ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1JlcGVhdDogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7
IENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdFgsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVh
dFkgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVy
dGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6IHsK
LSAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50LCBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0
TWFza09yaWdpbiB9OwotICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNmb3JtT3JpZ2luOiB7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9
IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybU9yaWdpblogfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1
ZShwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvbjogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uRGVsYXkgfTsKLSAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRo
YW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbjogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbN10g
PSB7IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZSwgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EdXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkRlbGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUgfTsKLSAgICAgICAgICAg
IHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXA6IHsKLSAgICAgICAgICAgIGNvbnN0
IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93LCBDU1NQcm9w
ZXJ0eVdlYmtpdFdyYXBNYXJnaW4sCi0gICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRX
cmFwUGFkZGluZyB9OwotICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3Bl
cnRpZXMpOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eU1hcmtlcjogewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlNYXJrZXJTdGFydCk7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBTdHls
ZVByb3BlcnR5U2V0Ojpib3JkZXJTcGFjaW5nVmFsdWUoY29uc3QgaW50IHByb3BlcnRpZXNbMl0p
IGNvbnN0Ci17Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBob3Jpem9udGFsVmFsdWUgPSBnZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbMF0pOwotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmVydGlj
YWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1sxXSk7Ci0KLSAgICBpZiAo
IWhvcml6b250YWxWYWx1ZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIEFTU0VSVCh2
ZXJ0aWNhbFZhbHVlKTsgLy8gQnkgPGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3RhYmxlcy5o
dG1sI3NlcGFyYXRlZC1ib3JkZXJzPi4KLQotICAgIFN0cmluZyBob3Jpem9udGFsVmFsdWVDU1NU
ZXh0ID0gaG9yaXpvbnRhbFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgU3RyaW5nIHZlcnRpY2FsVmFs
dWVDU1NUZXh0ID0gdmVydGljYWxWYWx1ZS0+Y3NzVGV4dCgpOwotICAgIGlmIChob3Jpem9udGFs
VmFsdWVDU1NUZXh0ID09IHZlcnRpY2FsVmFsdWVDU1NUZXh0KQotICAgICAgICByZXR1cm4gaG9y
aXpvbnRhbFZhbHVlQ1NTVGV4dDsKLSAgICByZXR1cm4gaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCAr
ICcgJyArIHZlcnRpY2FsVmFsdWVDU1NUZXh0OwotfQotCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6
OmFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChpbnQgcHJvcGVydHlJZCwgU3RyaW5n
QnVpbGRlciYgcmVzdWx0KSBjb25zdAotewotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0
eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlkKTsKLSAgICBpZiAoIXByb3BlcnR5KQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFsbCBsb25naGFuZHMgbXVzdCBoYXZlIGF0IGxlYXN0
IGltcGxpY2l0IHZhbHVlcyBpZiAiZm9udCIgaXMgc3BlY2lmaWVkLgotICAgIGlmIChwcm9wZXJ0
eS0+aXNJbXBsaWNpdCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNoYXIgcHJlZml4
ID0gJ1wwJzsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFN0eWxlOgotICAgICAgICBicmVhazsgLy8gTm8gcHJlZml4LgotICAgIGNhc2UgQ1NTUHJv
cGVydHlGb250RmFtaWx5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSAgICAgICAgcHJlZml4ID0gJyAnOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdodDoKLSAgICAgICAgcHJlZml4
ID0gJy8nOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAocHJlZml4ICYmICFyZXN1bHQuaXNFbXB0eSgp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKHByZWZpeCk7Ci0gICAgcmVzdWx0LmFwcGVuZChwcm9w
ZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TdHJp
bmcgU3R5bGVQcm9wZXJ0eVNldDo6Zm9udFZhbHVlKCkgY29uc3QKLXsKLSAgICBjb25zdCBDU1NQ
cm9wZXJ0eSogZm9udFNpemVQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChDU1NQcm9wZXJ0
eUZvbnRTaXplKTsKLSAgICBpZiAoIWZvbnRTaXplUHJvcGVydHkgfHwgZm9udFNpemVQcm9wZXJ0
eS0+aXNJbXBsaWNpdCgpKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQotICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7Ci0gICAgc3VjY2Vz
cyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGljaXQoQ1NTUHJvcGVydHlGb250U3R5
bGUsIHJlc3VsdCk7Ci0gICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhw
bGljaXQoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcmVzdWx0KTsKLSAgICBzdWNjZXNzICY9IGFw
cGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHJl
c3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQuYXBwZW5k
KCcgJyk7Ci0gICAgcmVzdWx0LmFwcGVuZChmb250U2l6ZVByb3BlcnR5LT52YWx1ZSgpLT5jc3NU
ZXh0KCkpOwotICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgcmVzdWx0KTsKLSAgICBzdWNjZXNzICY9IGFwcGVuZEZv
bnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHJlc3VsdCk7
Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIC8vIEFuIGludmFsaWQgImZvbnQiIHZhbHVl
IGhhcyBiZWVuIGJ1aWx0IChzaG91bGQgbmV2ZXIgaGFwcGVuLCBhcyBhdCBsZWFzdCBpbXBsaWNp
dCB2YWx1ZXMKLSAgICAgICAgLy8gZm9yIG1hbmRhdG9yeSBsb25naGFuZHMgYXJlIGFsd2F5cyBm
b3VuZCBpbiB0aGUgc3R5bGUpLCByZXBvcnQgZW1wdHkgdmFsdWUgaW5zdGVhZC4KLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
IH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3Bl
cnR5U2V0OjpnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3QKLXsKLSAgICAv
LyBBc3N1bWUgdGhlIHByb3BlcnRpZXMgYXJlIGluIHRoZSB1c3VhbCBvcmRlciB0b3AsIHJpZ2h0
LCBib3R0b20sIGxlZnQuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB0b3BWYWx1ZSA9IGdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydGllc1swXSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiByaWdodFZh
bHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzFdKTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWU+IGJvdHRvbVZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzJdKTsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGxlZnRWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydGllc1szXSk7Ci0KLSAgICAvLyBBbGwgNCBwcm9wZXJ0aWVzIG11c3QgYmUgc3BlY2lmaWVk
LgotICAgIGlmICghdG9wVmFsdWUgfHwgIXJpZ2h0VmFsdWUgfHwgIWJvdHRvbVZhbHVlIHx8ICFs
ZWZ0VmFsdWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGJvb2wgc2hvd0xlZnQg
PSByaWdodFZhbHVlLT5jc3NUZXh0KCkgIT0gbGVmdFZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgYm9v
bCBzaG93Qm90dG9tID0gKHRvcFZhbHVlLT5jc3NUZXh0KCkgIT0gYm90dG9tVmFsdWUtPmNzc1Rl
eHQoKSkgfHwgc2hvd0xlZnQ7Ci0gICAgYm9vbCBzaG93UmlnaHQgPSAodG9wVmFsdWUtPmNzc1Rl
eHQoKSAhPSByaWdodFZhbHVlLT5jc3NUZXh0KCkpIHx8IHNob3dCb3R0b207Ci0KLSAgICBTdHJp
bmcgcmVzID0gdG9wVmFsdWUtPmNzc1RleHQoKTsKLSAgICBpZiAoc2hvd1JpZ2h0KQotICAgICAg
ICByZXMgKz0gIiAiICsgcmlnaHRWYWx1ZS0+Y3NzVGV4dCgpOwotICAgIGlmIChzaG93Qm90dG9t
KQotICAgICAgICByZXMgKz0gIiAiICsgYm90dG9tVmFsdWUtPmNzc1RleHQoKTsKLSAgICBpZiAo
c2hvd0xlZnQpCi0gICAgICAgIHJlcyArPSAiICIgKyBsZWZ0VmFsdWUtPmNzc1RleHQoKTsKLQot
ICAgIHJldHVybiByZXM7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpnZXRMYXllcmVk
U2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QK
LXsKLSAgICBTdHJpbmcgcmVzOwotCi0gICAgLy8gQmVnaW4gYnkgY29sbGVjdGluZyB0aGUgcHJv
cGVydGllcyBpbnRvIGFuIGFycmF5LgotICAgIFZlY3RvcjwgUmVmUHRyPENTU1ZhbHVlPiA+IHZh
bHVlcyhzaXplKTsKLSAgICBzaXplX3QgbnVtTGF5ZXJzID0gMDsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIHZhbHVlc1tpXSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgIGlmICh2YWx1ZXNbaV0pIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICBD
U1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVl
c1tpXS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4KHZhbHVlTGlzdC0+
bGVuZ3RoKCksIG51bUxheWVycyk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBudW1MYXllcnMgPSBtYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIC8vIE5vdyBzdGl0Y2ggdGhlIHByb3BlcnRpZXMgdG9nZXRoZXIuICBJbXBsaWNp
dCBpbml0aWFsIHZhbHVlcyBhcmUgZmxhZ2dlZCBhcyBzdWNoIGFuZAotICAgIC8vIGNhbiBzYWZl
bHkgYmUgb21pdHRlZC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUxheWVyczsgaSsr
KSB7Ci0gICAgICAgIFN0cmluZyBsYXllclJlczsKLSAgICAgICAgYm9vbCB1c2VSZXBlYXRYU2hv
cnRoYW5kID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgdXNlUmVwZWF0WVNob3J0aGFuZCA9IGZhbHNl
OwotICAgICAgICBib29sIHVzZVNpbmdsZVdvcmRTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWVzW2pdKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbHVlc1tqXS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZXNbal0uZ2V0KCkpLT5pdGVt
KGkpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IHZhbHVlc1tqXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBvbmx5IGJlbG9uZ3Mg
aW4gdGhlIGxhc3QgbGF5ZXIuCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2pd
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaSAhPSBudW1MYXllcnMgLSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpICE9IDApIC8vIE90aGVy
IHNpbmdsZXRvbnMgb25seSBiZWxvbmcgaW4gdGhlIGZpcnN0IGxheWVyLgotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXBvcnQgYmFja2dyb3VuZC1yZXBlYXQgYXMg
aXQgd2FzIHdyaXR0ZW4gaW4gdGhlIENTUy4gSWYgdGhlIHByb3BlcnR5IGlzIGltcGxpY2l0LAot
ICAgICAgICAgICAgLy8gdGhlbiBpdCB3YXMgd3JpdHRlbiB3aXRoIG9ubHkgb25lIHZhbHVlLiBI
ZXJlIHdlIGZpZ3VyZSBvdXQgd2hpY2ggdmFsdWUgdGhhdCB3YXMgc28gd2UgY2FuCi0gICAgICAg
ICAgICAvLyByZXBvcnQgYmFjayBjb3JyZWN0bHkuCi0gICAgICAgICAgICBpZiAocHJvcGVydGll
c1tqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYICYmIGlzUHJvcGVydHlJbXBsaWNp
dChwcm9wZXJ0aWVzW2pdKSkgewotCi0gICAgICAgICAgICAgICAgLy8gQlVHIDQ5MDU1OiBtYWtl
IHN1cmUgdGhlIHZhbHVlIHdhcyBub3QgcmVzZXQgaW4gdGhlIGxheWVyIGNoZWNrIGp1c3QgYWJv
dmUuCi0gICAgICAgICAgICAgICAgaWYgKGogPCBzaXplIC0gMSAmJiBwcm9wZXJ0aWVzW2ogKyAx
XSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZICYmIHZhbHVlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4geVZhbHVlOwotICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IG5leHRWYWx1ZSA9IHZhbHVlc1tqICsgMV07Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChuZXh0VmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB5VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihuZXh0VmFsdWUuZ2V0KCkp
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBuZXh0VmFsdWU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaW50IHhJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUu
Z2V0KCkpLT5nZXRJZGVudCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgeUlkID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih5VmFsdWUuZ2V0KCkpLT5nZXRJZGVudCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoeElkICE9IHlJZCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHhJZCA9PSBDU1NWYWx1ZVJlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVOb1JlcGVhdCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFhTaG9ydGhhbmQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrajsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoeElkID09IENTU1ZhbHVlTm9SZXBlYXQgJiYgeUlkID09IENTU1ZhbHVl
UmVwZWF0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WVNob3J0aGFu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICsrajsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+
aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXllclJl
cy5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gIiAiOwotICAgICAg
ICAgICAgICAgIGlmICh1c2VSZXBlYXRYU2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVzZVJlcGVhdFhTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJS
ZXMgKz0gZ2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmICh1c2VSZXBlYXRZU2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZVJl
cGVhdFlTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0g
Z2V0VmFsdWVOYW1lKENTU1ZhbHVlUmVwZWF0WSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh1c2VTaW5nbGVXb3JkU2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZVNpbmds
ZVdvcmRTaG9ydGhhbmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0g
dmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbGF5ZXJSZXMuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlm
ICghcmVzLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHJlcyArPSAiLCAiOwotICAgICAgICAg
ICAgcmVzICs9IGxheWVyUmVzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsK
LX0KLQotU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGlu
dCogcHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIHJlczsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIWlzUHJv
cGVydHlJbXBsaWNpdChwcm9wZXJ0aWVzW2ldKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogcHJvdmlkZSBkZWZhdWx0IHZhbHVlIGlmICF2YWx1ZQotICAgICAgICAg
ICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJlcyArPSAiICI7Ci0gICAgICAgICAgICAgICAgcmVzICs9IHZhbHVl
LT5jc3NUZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlczsKLX0KLQotLy8gb25seSByZXR1cm5zIGEgbm9uLW51bGwgdmFsdWUgaWYgYWxsIHByb3Bl
cnRpZXMgaGF2ZSB0aGUgc2FtZSwgbm9uLW51bGwgdmFsdWUKLVN0cmluZyBTdHlsZVByb3BlcnR5
U2V0OjpnZXRDb21tb25WYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBzaXplKSBj
b25zdAotewotICAgIFN0cmluZyByZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3BlcnR5Q1NT
VmFsdWUocHJvcGVydGllc1tpXSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gdmFsdWUtPmNzc1RleHQoKTsK
LSAgICAgICAgaWYgKHRleHQuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgICAgIGlmIChyZXMuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXMgPSB0ZXh0OwotICAg
ICAgICBlbHNlIGlmIChyZXMgIT0gdGV4dCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU3R5bGVQ
cm9wZXJ0eVNldDo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKLXsK
LSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJv
cGVydHlJRCk7Ci0gICAgcmV0dXJuIHByb3BlcnR5ID8gcHJvcGVydHktPnZhbHVlKCkgOiAwOwot
fQotCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpCi17Ci0gICAgQ1NTUHJvcGVydHlMb25naGFu
ZCBsb25naGFuZCA9IGxvbmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFs
b25naGFuZC5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiByZW1v
dmVQcm9wZXJ0aWVzSW5TZXQobG9uZ2hhbmQucHJvcGVydGllcygpLCBsb25naGFuZC5sZW5ndGgo
KSwgbm90aWZ5Q2hhbmdlZCk7Ci19Ci0KLVN0cmluZyBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVQ
cm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJldHVyblRl
eHQpCi17Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0
ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCi0gICAgaWYgKHJl
bW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5SUQsIG5vdGlmeUNoYW5nZWQpKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBSZXR1cm4gYW4gZXF1aXZhbGVudCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJs
ZS4KLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLQotICAgIENTU1Byb3BlcnR5KiBm
b3VuZFByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwotICAgIGlmICgh
Zm91bmRQcm9wZXJ0eSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3RyaW5nIHZh
bHVlID0gcmV0dXJuVGV4dCA/IGZvdW5kUHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQoKSA6IFN0
cmluZygpOwotCi0gICAgLy8gQSBtb3JlIGVmZmljaWVudCByZW1vdmFsIHN0cmF0ZWd5IHdvdWxk
IGludm9sdmUgbWFya2luZyBlbnRyaWVzIGFzIGVtcHR5Ci0gICAgLy8gYW5kIHN3ZWVwaW5nIHRo
ZW0gd2hlbiB0aGUgdmVjdG9yIGdyb3dzIHRvbyBiaWcuCi0gICAgbV9wcm9wZXJ0aWVzLnJlbW92
ZShmb3VuZFByb3BlcnR5IC0gbV9wcm9wZXJ0aWVzLmRhdGEoKSk7Ci0KLSNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3Jk
KCk7Ci0jZW5kaWYKLQotICAgIGlmIChub3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7Ci0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0
eVNldDo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCi17Ci0gICAgaWYgKGlzSW5saW5lU3R5bGVEZWNs
YXJhdGlvbigpKSB7Ci0gICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSBwYXJlbnRFbGVt
ZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7Ci0gICAg
ICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwotICAgICAgICBTdHlsZUF0
dHJpYnV0ZU11dGF0aW9uU2NvcGUodGhpcykuZGlkSW52YWxpZGF0ZVN0eWxlQXR0cigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBjb250ZXh0U3R5bGVTaGVldCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBzdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRvY3VtZW50LT5zdHls
ZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLSAgICB9Ci19Ci0KLWJvb2wgU3R5
bGVQcm9wZXJ0eVNldDo6cHJvcGVydHlJc0ltcG9ydGFudChpbnQgcHJvcGVydHlJRCkgY29uc3QK
LXsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQo
cHJvcGVydHlJRCk7Ci0gICAgaWYgKHByb3BlcnR5KQotICAgICAgICByZXR1cm4gcHJvcGVydHkt
PmlzSW1wb3J0YW50KCk7Ci0KLSAgICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxvbmdoYW5kcyA9IGxv
bmdoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgaWYgKCFsb25naGFuZHMubGVuZ3Ro
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsb25naGFuZHMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXByb3BlcnR5SXNJbXBv
cnRhbnQobG9uZ2hhbmRzLnByb3BlcnRpZXMoKVtpXSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbnQgU3R5bGVQcm9wZXJ0eVNldDo6
Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW50IHByb3BlcnR5SUQpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
Q1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOwot
ICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5zaG9ydGhhbmRJRCgpIDogMDsKLX0KLQot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaXQoaW50IHByb3BlcnR5SUQp
IGNvbnN0Ci17Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5
V2l0aElkKHByb3BlcnR5SUQpOwotICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5pc0lt
cGxpY2l0KCkgOiBmYWxzZTsKLX0KLQotYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0
eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJv
b2wgbm90aWZ5Q2hhbmdlZCkKLXsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAg
IFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlm
Ci0KLSAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcganVzdCByZW1v
dmVzIHRoZSBwcm9wZXJ0eSBpbiBib3RoIElFIGFuZCBHZWNrby4KLSAgICAvLyBTZXR0aW5nIGl0
IHRvIG51bGwgc2VlbXMgdG8gcHJvZHVjZSBsZXNzIGNvbnNpc3RlbnQgcmVzdWx0cywgYnV0IHdl
IHRyZWF0IGl0IGp1c3QgdGhlIHNhbWUuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewotICAg
ICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkLCBmYWxzZSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIFdoZW4gcmVwbGFjaW5nIGFuIGV4
aXN0aW5nIHByb3BlcnR5IHZhbHVlLCB0aGlzIG1vdmVzIHRoZSBwcm9wZXJ0eSB0byB0aGUgZW5k
IG9mIHRoZSBsaXN0LgotICAgIC8vIEZpcmVmb3ggcHJlc2VydmVzIHRoZSBwb3NpdGlvbiwgYW5k
IE1TSUUgbW92ZXMgdGhlIHByb3BlcnR5IHRvIHRoZSBiZWdpbm5pbmcuCi0gICAgYm9vbCBzdWNj
ZXNzID0gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKHRoaXMsIHByb3BlcnR5SUQsIHZhbHVlLCBpbXBv
cnRhbnQsIHVzZVN0cmljdFBhcnNpbmcoKSk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAg
IC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBTWU5UQVhfRVJSIGhlcmUsIGJ1dCB0aGlzIGlz
IHRvbyBkYW5nZXJvdXMgZm9yIGNvbXBhdGliaWxpdHksCi0gICAgICAgIC8vIHNlZSA8aHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5Nj4uCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIG11dGF0
aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAgIGlmIChub3Rp
ZnlDaGFuZ2VkKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShjb25zdCBDU1NQ
cm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG90KQotewotI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9u
U2NvcGUodGhpcyk7Ci0jZW5kaWYKLQotICAgIGlmICghcmVtb3ZlU2hvcnRoYW5kUHJvcGVydHko
cHJvcGVydHkuaWQoKSwgZmFsc2UpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5KiB0b1JlcGxhY2Ug
PSBzbG90ID8gc2xvdCA6IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eS5pZCgpKTsKLSAgICAg
ICAgaWYgKHRvUmVwbGFjZSkgewotICAgICAgICAgICAgKnRvUmVwbGFjZSA9IHByb3BlcnR5Owot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fcHJvcGVydGllcy5h
cHBlbmQocHJvcGVydHkpOwotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBt
dXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi19Ci0KLWJvb2wg
U3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKLXsKLSAgICBDU1NQcm9wZXJ0eSBw
cm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2
YWx1ZSksIGltcG9ydGFudCk7Ci0gICAgc2V0UHJvcGVydHkocHJvcGVydHkpOwotICAgIGlmIChu
b3RpZnlDaGFuZ2VkKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0LCBi
b29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKQotewotICAgIENTU1Byb3BlcnR5IHBy
b3BlcnR5KHByb3BlcnR5SUQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHVuaXQp
LCBpbXBvcnRhbnQpOwotICAgIHNldFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAobm90aWZ5
Q2hhbmdlZCkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3Ry
aW5nJiBzdHlsZURlY2xhcmF0aW9uKQotewotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
Ci0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0j
ZW5kaWYKLQotICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwotICAgIENTU1BhcnNlciBwYXJzZXIo
dXNlU3RyaWN0UGFyc2luZygpKTsKLSAgICBwYXJzZXIucGFyc2VEZWNsYXJhdGlvbih0aGlzLCBz
dHlsZURlY2xhcmF0aW9uKTsKLQotI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAg
bXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKLSNlbmRpZgotCi0gICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFBhcnNl
ZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBpbnQgbnVt
UHJvcGVydGllcykKLXsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgIFN0eWxl
QXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwotI2VuZGlmCi0KLSAg
ICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG51bVByb3BlcnRpZXMpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKQotICAgICAgICBhZGRQYXJzZWRQcm9w
ZXJ0eSgqcHJvcGVydGllc1tpXSk7Ci0KLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQot
ICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7Ci0jZW5kaWYKLQotICAg
IC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZCBoYXZlIGEgY2FsbCB0byBzZXROZWVkc1N0
eWxlUmVjYWxjKCkgaWYgc29tZXRoaW5nIGNoYW5nZWQuIFdlIG1heSBhbHNvIHdpc2ggdG8gYWRk
Ci0gICAgLy8gYSBub3RpZnlDaGFuZ2VkIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24gdG8gZm9s
bG93IHRoZSBtb2RlbCBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcy4KLX0KLQotdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkpCi17Ci0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0
dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCi0gICAg
Ly8gT25seSBhZGQgcHJvcGVydGllcyB0aGF0IGhhdmUgbm8gIWltcG9ydGFudCBjb3VudGVycGFy
dCBwcmVzZW50Ci0gICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KHByb3BlcnR5LmlkKCkpIHx8
IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVy
dHkuaWQoKSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZChwcm9w
ZXJ0eSk7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRh
dGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi19Ci0KLVN0cmluZyBT
dHlsZVByb3BlcnR5U2V0Ojphc1RleHQoKSBjb25zdAotewotICAgIFN0cmluZyByZXN1bHQgPSAi
IjsKLQotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwb3NpdGlvblhQcm9wID0gMDsKLSAgICBjb25z
dCBDU1NQcm9wZXJ0eSogcG9zaXRpb25ZUHJvcCA9IDA7Ci0gICAgY29uc3QgQ1NTUHJvcGVydHkq
IHJlcGVhdFhQcm9wID0gMDsKLSAgICBjb25zdCBDU1NQcm9wZXJ0eSogcmVwZWF0WVByb3AgPSAw
OwotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0
eSYgcHJvcCA9IG1fcHJvcGVydGllc1tuXTsKLSAgICAgICAgaWYgKHByb3AuaWQoKSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgpCi0gICAgICAgICAgICBwb3NpdGlvblhQcm9wID0g
JnByb3A7Ci0gICAgICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvblkpCi0gICAgICAgICAgICBwb3NpdGlvbllQcm9wID0gJnByb3A7Ci0gICAgICAg
IGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYKQotICAg
ICAgICAgICAgcmVwZWF0WFByb3AgPSAmcHJvcDsKLSAgICAgICAgZWxzZSBpZiAocHJvcC5pZCgp
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkpCi0gICAgICAgICAgICByZXBlYXRZUHJv
cCA9ICZwcm9wOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgKz0gcHJvcC5jc3NU
ZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgYSBub3Qtc28tbmljZSB3YXkg
dG8gdHVybiB4L3kgcG9zaXRpb25zIGludG8gc2luZ2xlIGJhY2tncm91bmQtcG9zaXRpb24gaW4g
b3V0cHV0LgotICAgIC8vIEl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgYmFja2dyb3VuZC1wb3NpdGlv
bi14L3kgYXJlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBXZWJLaXQgZ2VuZXJhdGVkIG91
dHB1dAotICAgIC8vIHdvdWxkIG5vdCB3b3JrIGluIEZpcmVmb3ggKDxyZGFyOi8vcHJvYmxlbS81
MTQzMTgzPikKLSAgICAvLyBJdCB3b3VsZCBiZSBhIGJldHRlciBzb2x1dGlvbiBpZiBiYWNrZ3Jv
dW5kLXBvc2l0aW9uIHdhcyBDU1NfUEFJUi4KLSAgICBpZiAocG9zaXRpb25YUHJvcCAmJiBwb3Np
dGlvbllQcm9wICYmIHBvc2l0aW9uWFByb3AtPmlzSW1wb3J0YW50KCkgPT0gcG9zaXRpb25ZUHJv
cC0+aXNJbXBvcnRhbnQoKSkgewotICAgICAgICBTdHJpbmcgcG9zaXRpb25WYWx1ZTsKLSAgICAg
ICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIH07Ci0gICAgICAgIGlmIChwb3Np
dGlvblhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHBvc2l0aW9uWVByb3AtPnZhbHVl
KCktPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgICAgICBwb3NpdGlvblZhbHVlID0gZ2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
b3NpdGlvblZhbHVlID0gcG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpICsgIiAiICsg
cG9zaXRpb25ZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpOwotICAgICAgICByZXN1bHQgKz0gImJh
Y2tncm91bmQtcG9zaXRpb246ICIgKyBwb3NpdGlvblZhbHVlICsgKHBvc2l0aW9uWFByb3AtPmlz
SW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAocG9zaXRpb25YUHJvcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlv
blhQcm9wLT5jc3NUZXh0KCk7Ci0gICAgICAgIGlmIChwb3NpdGlvbllQcm9wKQotICAgICAgICAg
ICAgcmVzdWx0ICs9IHBvc2l0aW9uWVByb3AtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgYmFja2dyb3VuZC1yZXBlYXQuCi0gICAg
aWYgKHJlcGVhdFhQcm9wICYmIHJlcGVhdFlQcm9wICYmIHJlcGVhdFhQcm9wLT5pc0ltcG9ydGFu
dCgpID09IHJlcGVhdFlQcm9wLT5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgIFN0cmluZyByZXBl
YXRWYWx1ZTsKLSAgICAgICAgY29uc3QgaW50IHJlcGVhdFByb3BlcnRpZXNbMl0gPSB7IENTU1By
b3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFkgfTsK
LSAgICAgICAgaWYgKHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHJlcGVh
dFlQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgcmVwZWF0VmFsdWUg
PSBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocmVwZWF0UHJvcGVydGllcyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlcGVhdFZhbHVlID0gcmVwZWF0WFByb3AtPnZhbHVlKCktPmNzc1Rl
eHQoKSArICIgIiArIHJlcGVhdFlQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCk7Ci0gICAgICAgIHJl
c3VsdCArPSAiYmFja2dyb3VuZC1yZXBlYXQ6ICIgKyByZXBlYXRWYWx1ZSArIChyZXBlYXRYUHJv
cC0+aXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChyZXBlYXRYUHJvcCkKLSAgICAgICAgICAgIHJlc3VsdCArPSByZXBl
YXRYUHJvcC0+Y3NzVGV4dCgpOwotICAgICAgICBpZiAocmVwZWF0WVByb3ApCi0gICAgICAgICAg
ICByZXN1bHQgKz0gcmVwZWF0WVByb3AtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIFN0eWxlUHJvcGVydHlTZXQ6Om1lcmdlKGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqIG90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCi17Ci0jaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUg
bXV0YXRpb25TY29wZSh0aGlzKTsKLSNlbmRpZgotCi0gICAgdW5zaWduZWQgc2l6ZSA9IG90aGVy
LT5tX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXpl
OyArK24pIHsKLSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9w
cm9wZXJ0aWVzW25dOwotICAgICAgICBDU1NQcm9wZXJ0eSogb2xkID0gZmluZFByb3BlcnR5V2l0
aElkKHRvTWVyZ2UuaWQoKSk7Ci0gICAgICAgIGlmIChvbGQpIHsKLSAgICAgICAgICAgIGlmICgh
YXJnT3ZlcnJpZGVzT25Db25mbGljdCAmJiBvbGQtPnZhbHVlKCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBzZXRQcm9wZXJ0eSh0b01lcmdlLCBvbGQpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQodG9NZXJnZSk7Ci0gICAg
fQotCi0jaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKLSAgICBtdXRhdGlvblNjb3BlLmVu
cXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogVGhpcyBwcm9i
YWJseSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0TmVlZHNTdHlsZVJlY2FsYygpIGlmIHNvbWV0
aGluZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAotICAgIC8vIGEgbm90aWZ5Q2hh
bmdlZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3Ro
ZXIgZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCi19Ci0KLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpCi17Ci0gICAg
Q1NTU3R5bGVTaGVldCogc2hlZXQgPSBjb250ZXh0U3R5bGVTaGVldCgpOwotICAgIHNpemVfdCBz
aXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0aWVzW2ldLnZhbHVlKCktPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIHNoZWV0KTsKLX0KLQotLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBwcm9w
ZXJ0aWVzIHdlIHdhbnQgdG8gY29weSBpbiB0aGUgY29weUJsb2NrUHJvcGVydGllcygpIGZ1bmN0
aW9uLgotLy8gSXQgaXMgdGhlIGxpc3Qgb2YgQ1NTIHByb3BlcnRpZXMgdGhhdCBhcHBseSBzcGVj
aWFsbHkgdG8gYmxvY2stbGV2ZWwgZWxlbWVudHMuCi1zdGF0aWMgY29uc3QgaW50IGJsb2NrUHJv
cGVydGllc1tdID0gewotICAgIENTU1Byb3BlcnR5T3JwaGFucywKLSAgICBDU1NQcm9wZXJ0eU92
ZXJmbG93LCAvLyBUaGlzIGNhbiBiZSBhbHNvIGJlIGFwcGxpZWQgdG8gcmVwbGFjZWQgZWxlbWVu
dHMKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLAotICAgIENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uQ291bnQsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsCi0gICAgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlU3R5bGUsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsCi0gICAg
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZSwKLSAgICBDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkJyZWFrQWZ0ZXIsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lk
ZSwKLSAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLAotICAgIENTU1Byb3BlcnR5UGFn
ZUJyZWFrQWZ0ZXIsCi0gICAgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZvcmUsCi0gICAgQ1NTUHJv
cGVydHlQYWdlQnJlYWtJbnNpZGUsCi0gICAgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0Fm
dGVyLAotICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtCZWZvcmUsCi0gICAgQ1NTUHJv
cGVydHlXZWJraXRSZWdpb25CcmVha0luc2lkZSwKLSAgICBDU1NQcm9wZXJ0eVRleHRBbGlnbiwK
LSAgICBDU1NQcm9wZXJ0eVRleHRJbmRlbnQsCi0gICAgQ1NTUHJvcGVydHlXaWRvd3MKLX07Ci0K
LWNvbnN0IHVuc2lnbmVkIG51bUJsb2NrUHJvcGVydGllcyA9IFdURl9BUlJBWV9MRU5HVEgoYmxv
Y2tQcm9wZXJ0aWVzKTsKLQotUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3Bl
cnR5U2V0Ojpjb3B5QmxvY2tQcm9wZXJ0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29weVBy
b3BlcnRpZXNJblNldChibG9ja1Byb3BlcnRpZXMsIG51bUJsb2NrUHJvcGVydGllcyk7Ci19Ci0K
LXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKLXsKLSAgICBy
ZW1vdmVQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9wZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMp
OwotfQotCi1ib29sIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25z
dCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3RoLCBib29sIG5vdGlmeUNoYW5nZWQpCi17Ci0gICAg
aWYgKG1fcHJvcGVydGllcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCi0gICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNj
b3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Ci0jZW5kaWYKLQotICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGFsd2F5cyB1c2VkIHdpdGggc3RhdGljIHNldHMgYW5kIGluIHRoYXQgY2FzZSBjb25zdHJ1Y3Rp
bmcgdGhlIGhhc2ggcmVwZWF0ZWRseSBpcyBwcmV0dHkgcG9pbnRsZXNzLgotICAgIEhhc2hTZXQ8
aW50PiB0b1JlbW92ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
Ci0gICAgICAgIHRvUmVtb3ZlLmFkZChzZXRbaV0pOwotCi0gICAgVmVjdG9yPENTU1Byb3BlcnR5
LCA0PiBuZXdQcm9wZXJ0aWVzOwotICAgIG5ld1Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3Bl
cnRpZXMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsK
LSAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW25dOwot
ICAgICAgICAvLyBOb3QgcXVpdGUgc3VyZSBpZiB0aGUgaXNJbXBvcnRhbnQgdGVzdCBpcyBuZWVk
ZWQgYnV0IGl0IG1hdGNoZXMgdGhlIGV4aXN0aW5nIGJlaGF2aW9yLgotICAgICAgICBpZiAoIXBy
b3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgIGlmICh0b1JlbW92ZS5jb250YWlu
cyhwcm9wZXJ0eS5pZCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBuZXdQcm9wZXJ0aWVzLmFwcGVuZChwcm9wZXJ0eSk7Ci0gICAgfQotCi0gICAgYm9v
bCBjaGFuZ2VkID0gbmV3UHJvcGVydGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNpemUoKTsK
LSAgICBtX3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0aWVzOwotCi0gICAgaWYgKG5vdGlmeUNoYW5n
ZWQpIHsKLSNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQotICAgICAgICBtdXRhdGlvblNj
b3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwotI2VuZGlmCi0gICAgICAgIHNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY2hhbmdlZDsKLX0KLQotY29uc3QgQ1NT
UHJvcGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9wZXJ0eVdpdGhJZChpbnQgcHJvcGVy
dHlJRCkgY29uc3QKLXsKLSAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0aWVzLnNpemUoKSAtIDEg
OyBuID49IDA7IC0tbikgewotICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBtX3Byb3BlcnRpZXNb
bl0ubV9pZCkKLSAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0aWVzW25dOwotICAgIH0KLSAg
ICByZXR1cm4gMDsKLX0KLQotQ1NTUHJvcGVydHkqIFN0eWxlUHJvcGVydHlTZXQ6OmZpbmRQcm9w
ZXJ0eVdpdGhJZChpbnQgcHJvcGVydHlJRCkKLXsKLSAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0
aWVzLnNpemUoKSAtIDEgOyBuID49IDA7IC0tbikgewotICAgICAgICBpZiAocHJvcGVydHlJRCA9
PSBtX3Byb3BlcnRpZXNbbl0ubV9pZCkKLSAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0aWVz
W25dOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLSAgICAKLWJvb2wgU3R5bGVQcm9wZXJ0eVNl
dDo6cHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSkgY29uc3QKLXsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0
eS0+aWQoKSk7Ci0gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLT5jc3NUZXh0KCkgPT0gcHJvcGVy
dHktPnZhbHVlKCktPmNzc1RleHQoKTsKLX0KLSAgICAKLXZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6
cmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUp
Ci17Ci0gICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOwotICAgIHNpemVfdCBzaXpl
ID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRp
ZXNbaV07Ci0gICAgICAgIGlmIChzdHlsZS0+cHJvcGVydHlNYXRjaGVzKCZwcm9wZXJ0eSkpCi0g
ICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwotICAg
IH0gICAgCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKLX0KLQotdm9p
ZCBTdHlsZVByb3BlcnR5U2V0OjpyZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsKLSAgICBWZWN0b3I8aW50PiBwcm9wZXJ0aWVzVG9S
ZW1vdmU7Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5
JiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1tpXTsKLSAgICAgICAgaWYgKHN0eWxlLT5jc3NQcm9w
ZXJ0eU1hdGNoZXMoJnByb3BlcnR5KSkKLSAgICAgICAgICAgIHByb3BlcnRpZXNUb1JlbW92ZS5h
cHBlbmQocHJvcGVydHkuaWQoKSk7Ci0gICAgfSAgICAKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIG1hc3MgcmVtb3ZhbC4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dGllc1RvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0
aWVzVG9SZW1vdmVbaV0pOwotfQotCi1QYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFN0eWxl
UHJvcGVydHlTZXQ6OmNvcHkoKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5
bGVQcm9wZXJ0eVNldCgwLCBtX3Byb3BlcnRpZXMpKTsKLX0KLQotUGFzc1JlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5UHJvcGVydGllc0luU2V0KGNvbnN0IGlu
dCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPENTU1Byb3BlcnR5
PiBsaXN0OwotICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwotICAgICAgICBpZiAo
dmFsdWUpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0sIHZhbHVl
LnJlbGVhc2UoKSwgZmFsc2UpKTsKLSAgICB9Ci0gICAgcmV0dXJuIFN0eWxlUHJvcGVydHlTZXQ6
OmNyZWF0ZShsaXN0KTsKLX0KLQotQ1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5bGVQcm9wZXJ0eVNl
dDo6ZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Nzc1N0
eWxlRGVjbGFyYXRpb24pCi0gICAgICAgIG1fY3NzU3R5bGVEZWNsYXJhdGlvbiA9IFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0eVNl
dCo+KHRoaXMpKTsKLSAgICByZXR1cm4gbV9jc3NTdHlsZURlY2xhcmF0aW9uLmdldCgpOwotfQot
Ci11bnNpZ25lZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246Omxlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5Q291bnQoKTsKLX0KLQotU3Ry
aW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25z
dAotewotICAgIGlmIChpID49IG1fcHJvcGVydHlTZXQtPnByb3BlcnR5Q291bnQoKSkKLSAgICAg
ICAgcmV0dXJuICIiOwotICAgIHJldHVybiBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NT
UHJvcGVydHlJRD4obV9wcm9wZXJ0eVNldC0+cHJvcGVydHlBdChpKS5pZCgpKSk7Ci19Ci0KLUNT
U1J1bGUqIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cGFyZW50UnVsZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnBhcmVudFJ1bGVJbnRlcm5hbCgpOwotfQot
Ci1TdHJpbmcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+YXNUZXh0KCk7Ci19Ci0gICAgCi12b2lkIFBy
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICAvLyBGSVhNRTogRGV0
ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KLSAgICBtX3Byb3BlcnR5U2V0LT5wYXJzZURl
Y2xhcmF0aW9uKHRleHQpOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsKLX0KLQot
U3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShj
b25zdCBTdHJpbmcgJnByb3BlcnR5TmFtZSkKLXsKLSAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1By
b3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlWYWx1
ZShwcm9wZXJ0eUlEKTsKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAo
IXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldC0+cHJvcGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eUlEKSA/ICJpbXBvcnRhbnQiIDog
IiI7Ci19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGludCBwcm9w
ZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwotICAgIGlmICghcHJvcGVydHlJ
RCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGludCBzaG9ydGhhbmRJRCA9IG1fcHJv
cGVydHlTZXQtPmdldFByb3BlcnR5U2hvcnRoYW5kKHByb3BlcnR5SUQpOwotICAgIGlmICghc2hv
cnRoYW5kSUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gZ2V0UHJvcGVy
dHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHNob3J0aGFuZElEKSk7Ci19Ci0KLWJv
b2wgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbGljaXQoY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9w
ZXJ0eUlEKHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKCFwcm9wZXJ0eUlEKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmlzUHJvcGVydHlJbXBsaWNpdChw
cm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNl
dFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
LCBjb25zdCBTdHJpbmcmIHByaW9yaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQg
cHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAgICBpZiAoIXByb3Bl
cnR5SUQpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGltcG9ydGFudCA9IHByaW9yaXR5LmZp
bmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RGb3VuZDsKLSAgICBlYyA9IDA7Ci0gICAg
bV9wcm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwg
dHJ1ZSk7Ci19Ci0KLVN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnJlbW92
ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoIXByb3BlcnR5SUQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBlYyA9IDA7
Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRy
dWUsIHRydWUpOwotfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQpCi17IAotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKHByb3BlcnR5SUQpOyAKLX0KLQotU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0UHJvcGVydHlWYWx1ZUludGVybmFsKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkK
LXsgCi0gICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJ
RCk7IAotfQotCi12b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVy
dHlJbnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IGJvb2wgaW1wb3J0YW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsgCi0gICAgZWMgPSAwOwotICAg
IG1fcHJvcGVydHlTZXQtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQs
IHRydWUpOwotfQotCi1DU1NTdHlsZVNoZWV0KiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAoteyAKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNl
dC0+Y29udGV4dFN0eWxlU2hlZXQoKTsgCi19Ci0KLVBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcm9wZXJ0eVNldC0+Y29weSgpOwotfQotCi1QYXNzUmVmUHRyPFN0eWxlUHJvcGVy
dHlTZXQ+IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6bWFrZU11dGFibGUoKQotewot
ICAgIEFTU0VSVChtX3Byb3BlcnR5U2V0LT5tX2Nzc1N0eWxlRGVjbGFyYXRpb24gPT0gdGhpcyB8
fCAoIW1fcHJvcGVydHlTZXQtPm1fY3NzU3R5bGVEZWNsYXJhdGlvbiAmJiBtX3Byb3BlcnR5U2V0
LT5oYXNPbmVSZWYoKSkpOwotICAgIGlmICghbV9wcm9wZXJ0eVNldC0+bV9jc3NTdHlsZURlY2xh
cmF0aW9uKQotICAgICAgICBtX3Byb3BlcnR5U2V0LT5tX2Nzc1N0eWxlRGVjbGFyYXRpb24gPSB0
aGlzOwotICAgIHJldHVybiBtX3Byb3BlcnR5U2V0OwotfQotCi1ib29sIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KiBw
cm9wZXJ0eSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVNldC0+cHJvcGVydHlNYXRj
aGVzKHByb3BlcnR5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9u
IDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3NCArMCwwIEBACi0vKgotICogKEMpIDE5OTktMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRl
ZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbl9oCi0jZGVmaW5lIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uX2gKLQotI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCi0jaW5jbHVk
ZSAiS1VSTEhhc2guaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb247Ci1jbGFzcyBT
dHlsZWRFbGVtZW50OwotCi1jbGFzcyBTdHlsZVByb3BlcnR5U2V0IDogcHVibGljIFdURjo6UmVm
Q291bnRlZEJhc2UgewotcHVibGljOgotICAgIH5TdHlsZVByb3BlcnR5U2V0KCk7Ci0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KTsKLSAgICB9Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRlKENTU1J1bGUqIHBhcmVudFJ1
bGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQo
cGFyZW50UnVsZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiBjcmVhdGUoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0
KiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxlLCBwcm9wZXJ0aWVzLCBudW1Q
cm9wZXJ0aWVzKSk7Ci0gICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBwcm9wZXJ0aWVzKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KDAsIHByb3BlcnRp
ZXMpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3Jl
YXRlSW5saW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgeyAKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGVsZW1lbnQpKTsKLSAgICB9Ci0KLSAgICB2
b2lkIGRlcmVmKCk7Ci0KLSAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvcGVydGllcy5pc0VtcHR5KCk7IH0KLSAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJv
cGVydHlBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzW2luZGV4
XTsgfQotCi0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgU3RyaW5nIGdldFByb3BlcnR5VmFsdWUoaW50IHByb3Bl
cnR5SUQpIGNvbnN0OwotICAgIGJvb2wgcHJvcGVydHlJc0ltcG9ydGFudChpbnQgcHJvcGVydHlJ
RCkgY29uc3Q7Ci0gICAgaW50IGdldFByb3BlcnR5U2hvcnRoYW5kKGludCBwcm9wZXJ0eUlEKSBj
b25zdDsKLSAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQgcHJvcGVydHlJRCkgY29uc3Q7
Ci0KLSAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wg
aW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVl
LCBpbXBvcnRhbnQsIHRydWUpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJ
ZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHVuaXQsIGJvb2wg
aW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5KHByb3BlcnR5SWQsIHZhbHVl
LCB1bml0LCBpbXBvcnRhbnQsIHRydWUpOyB9Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSkgeyBy
ZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSk7IH0K
LSAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNs
b3QgPSAwKTsKLSAgICAKLSAgICB2b2lkIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlEKSB7
IHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIGZhbHNlKTsgfQotICAgIFN0cmluZyBy
ZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkLCBib29sIHJl
dHVyblRleHQpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBwYXJzZXMgYW4gZW50aXJlIG5ldyBz
dHlsZSBkZWNsYXJhdGlvbi4KLSAgICB2b2lkIHBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5n
JiBzdHlsZURlY2xhcmF0aW9uKTsKLQotICAgIC8vIEJlc2lkZXMgYWRkaW5nIHRoZSBwcm9wZXJ0
aWVzLCB0aGlzIGFsc28gcmVtb3ZlcyBhbnkgZXhpc3RpbmcgcHJvcGVydGllcyB3aXRoIHRoZXNl
IElEcy4KLSAgICAvLyBJdCBkb2VzIG5vIG5vdGlmaWNhdGlvbiBzaW5jZSBpdCdzIGNhbGxlZCBi
eSB0aGUgcGFyc2VyLgotICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydGllcyhjb25zdCBDU1NQcm9w
ZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOwotICAgIC8vIFRoaXMgZG9lcyBubyBj
aGFuZ2Ugbm90aWZpY2F0aW9ucyBzaW5jZSBpdCdzIG9ubHkgY2FsbGVkIGJ5IGNyZWF0ZU1hcmt1
cC4KLSAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7Ci0KLSAg
ICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25z
dDsKLSAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwotICAgIHZvaWQgcmVtb3ZlUHJv
cGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsgcmVtb3ZlUHJv
cGVydGllc0luU2V0KHNldCwgbGVuZ3RoLCB0cnVlKTsgfQotCi0gICAgdm9pZCBtZXJnZShjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7
Ci0KLSAgICB2b2lkIHNldFN0cmljdFBhcnNpbmcoYm9vbCBiKSB7IG1fc3RyaWN0UGFyc2luZyA9
IGI7IH0KLSAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmlj
dFBhcnNpbmc7IH0KLSAgICBib29sIGlzSW5saW5lU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uOyB9Ci0KLSAgICB2b2lkIGFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jik7Ci0KLSAgICBQYXNzUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBjb25zdDsKLSAgICAvLyBVc2VkIGJ5IFN0eWxlZEVsZW1l
bnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCi0gICAgdm9pZCBjb3B5UHJvcGVydGll
c0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYpOwotCi0gICAgdm9pZCByZW1vdmVFcXVpdmFs
ZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0Kik7Ci0gICAgdm9pZCByZW1vdmVF
cXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0KLSAgICBQ
YXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50
KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7Ci0KLSAgICBDU1NSdWxlKiBwYXJlbnRSdWxl
SW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA/IDAg
OiBtX3BhcmVudC5ydWxlOyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVCgh
bV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24pOyBtX3BhcmVudC5ydWxlID0gMDsgfQotICAgIAot
ICAgIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IEFTU0VSVChtX2lzSW5s
aW5lU3R5bGVEZWNsYXJhdGlvbik7IHJldHVybiBtX3BhcmVudC5lbGVtZW50OyB9Ci0gICAgdm9p
ZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IEFTU0VSVChtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlv
bik7IG1fcGFyZW50LmVsZW1lbnQgPSAwOyB9Ci0gICAgCi0gICAgQ1NTU3R5bGVTaGVldCogY29u
dGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKLSAgICAKLSAgICBTdHJpbmcgYXNUZXh0KCkgY29uc3Q7
Ci0gICAgCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJlQ1NTU3R5bGVEZWNsYXJhdGlv
bigpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIFN0eWxlUHJvcGVydHlTZXQoKTsKLSAgICBTdHls
ZVByb3BlcnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUpOwotICAgIFN0eWxlUHJvcGVydHlTZXQo
Q1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgVmVjdG9yPENTU1Byb3BlcnR5PiYpOwotICAgIFN0
eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNv
bnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKLSAgICBTdHlsZVByb3BlcnR5U2V0KFN0eWxlZEVs
ZW1lbnQqKTsKLQotICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotCi0gICAgU3RyaW5n
IGdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgc2l6ZV90KSBjb25zdDsK
LSAgICBTdHJpbmcgZ2V0Q29tbW9uVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qp
IGNvbnN0OwotICAgIFN0cmluZyBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBw
cm9wZXJ0aWVzLCBzaXplX3QpIGNvbnN0OwotICAgIFN0cmluZyBnZXQ0VmFsdWVzKGNvbnN0IGlu
dCogcHJvcGVydGllcykgY29uc3Q7Ci0gICAgU3RyaW5nIGJvcmRlclNwYWNpbmdWYWx1ZShjb25z
dCBpbnQgcHJvcGVydGllc1syXSkgY29uc3Q7Ci0gICAgU3RyaW5nIGZvbnRWYWx1ZSgpIGNvbnN0
OwotICAgIGJvb2wgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KGludCBwcm9wZXJ0
eUlELCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIGNvbnN0OwotCi0gICAgdGVtcGxhdGU8c2l6ZV90
IHNpemU+IFN0cmluZyBnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQgKCZwcm9wZXJ0aWVzKVtz
aXplXSkgY29uc3QgeyByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgc2l6ZSk7
IH0KLSAgICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gU3RyaW5nIGdldENvbW1vblZhbHVlKGNvbnN0
IGludCAoJnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJldHVybiBnZXRDb21tb25WYWx1ZShw
cm9wZXJ0aWVzLCBzaXplKTsgfQotICAgIHRlbXBsYXRlPHNpemVfdCBzaXplPiBTdHJpbmcgZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCAoJnByb3BlcnRpZXMpW3NpemVdKSBjb25z
dCB7IHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcywgc2l6ZSk7IH0K
LQotICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBp
bXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7Ci0gICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQg
cHJvcGVydHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzLCBi
b29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHNldFByb3BlcnR5
KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9v
bCBub3RpZnlDaGFuZ2VkKTsKLSAgICBib29sIHJlbW92ZVNob3J0aGFuZFByb3BlcnR5KGludCBw
cm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwotICAgIGJvb2wgcmVtb3ZlUHJvcGVydGll
c0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdl
ZCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdDsK
LQotICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5
SWQpIGNvbnN0OwotICAgIENTU1Byb3BlcnR5KiBmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3Bl
cnR5SWQpOwotCi0gICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBtX3Byb3BlcnRpZXM7Ci0KLSAg
ICBib29sIG1fc3RyaWN0UGFyc2luZyA6IDE7Ci0gICAgYm9vbCBtX2lzSW5saW5lU3R5bGVEZWNs
YXJhdGlvbiA6IDE7Ci0KLSAgICB1bmlvbiBQYXJlbnQgewotICAgICAgICBQYXJlbnQoQ1NTUnVs
ZSogcnVsZSkgOiBydWxlKHJ1bGUpIHsgfQotICAgICAgICBQYXJlbnQoU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpIHsgfQotICAgICAgICBDU1NSdWxlKiBydWxlOwot
ICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50OwotICAgIH0gbV9wYXJlbnQ7Ci0gICAgCi0g
ICAgbXV0YWJsZSBSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uPiBtX2Nzc1N0
eWxlRGVjbGFyYXRpb247Ci0gICAgCi0gICAgZnJpZW5kIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5
bGVEZWNsYXJhdGlvbjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VS
dWxlLmNwcAkocmV2aXNpb24gMTA2Njc4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCiAKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIkNT
U0luaXRpYWxWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWluVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgpAQCAtNzUsNiArNzQsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCiAjaW5jbHVkZSAiV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCIKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlzaW9uIDEwNjY3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MiwxMiArMjIsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1
bGUuaCIKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFnZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NT
ZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5oCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDkgKzIyLDkgQEAKICNpZm5kZWYgQ1NTU3R5
bGVSdWxlX2gKICNkZWZpbmUgQ1NTU3R5bGVSdWxlX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkocmV2aXNpb24gMTA2NjgxKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOjEwNjY4MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNTYgQEAKKy8qCisgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eUxvbmdoYW5kLmgiCisjaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwLmgi
CisjaW5jbHVkZSAiTXV0YXRpb25SZWNvcmQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0eVNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uKHByb3BlcnR5U2V0KSk7IAorICAgIH0KKworcHJpdmF0ZToKKyAgICBQcm9wZXJ0eVNl
dENTU1N0eWxlRGVjbGFyYXRpb24oUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0
eVNldCkgOiBtX3Byb3BlcnR5U2V0KHByb3BlcnR5U2V0KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0
UHJvcGVydHlDU1NWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eShj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcg
Z2V0UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBT
dHJpbmcmIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBw
cmlvcml0eSwgRXhjZXB0aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIHJl
bW92ZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBFeGNlcHRpb25Db2RlJikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUlEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRQ
cm9wZXJ0eVZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIEV4Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKyAgICAKKyAg
ICB2aXJ0dWFsIGJvb2wgY3NzUHJvcGVydHlNYXRjaGVzKGNvbnN0IENTU1Byb3BlcnR5KikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+IGNvcHkoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gbWFrZU11dGFibGUoKSBPVkVSUklERTsKKyAgICAKKyAgICBSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gbV9wcm9wZXJ0eVNldDsKK307CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKTsKK3B1YmxpYzoKKyAgICBTdHlsZUF0dHJpYnV0
ZU11dGF0aW9uU2NvcGUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbCkKKyAgICB7CisgICAgICAgICsr
c19zY29wZUNvdW50OworCisgICAgICAgIGlmIChzX3Njb3BlQ291bnQgIT0gMSkgeworICAgICAg
ICAgICAgQVNTRVJUKHNfY3VycmVudERlY2wgPT0gZGVjbCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIXNfY3VycmVudERlY2wpOworICAgICAgICBz
X2N1cnJlbnREZWNsID0gZGVjbDsKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisg
ICAgICAgIGlmICghc19jdXJyZW50RGVjbC0+aXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghc19jdXJyZW50RGVjbC0+cGFyZW50RWxl
bWVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX211dGF0aW9uUmVjaXBpZW50
cyA9IE11dGF0aW9uT2JzZXJ2ZXJJbnRlcmVzdEdyb3VwOjpjcmVhdGVGb3JBdHRyaWJ1dGVzTXV0
YXRpb24oc19jdXJyZW50RGVjbC0+cGFyZW50RWxlbWVudCgpLCBIVE1MTmFtZXM6OnN0eWxlQXR0
cik7CisgICAgICAgIGlmICghbV9tdXRhdGlvblJlY2lwaWVudHMpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgQXRvbWljU3RyaW5nIG9sZFZhbHVlID0gbV9tdXRhdGlvblJlY2lwaWVu
dHMtPmlzT2xkVmFsdWVSZXF1ZXN0ZWQoKSA/IHNfY3VycmVudERlY2wtPnBhcmVudEVsZW1lbnQo
KS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyKSA6IG51bGxBdG9tOworICAgICAg
ICBtX211dGF0aW9uID0gTXV0YXRpb25SZWNvcmQ6OmNyZWF0ZUF0dHJpYnV0ZXMoc19jdXJyZW50
RGVjbC0+cGFyZW50RWxlbWVudCgpLCBIVE1MTmFtZXM6OnN0eWxlQXR0ciwgb2xkVmFsdWUpOwor
I2VuZGlmCisgICAgfQorCisgICAgflN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSgpCisgICAg
eworICAgICAgICAtLXNfc2NvcGVDb3VudDsKKyAgICAgICAgaWYgKHNfc2NvcGVDb3VudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAg
ICAgIGlmIChtX211dGF0aW9uICYmIHNfc2hvdWxkRGVsaXZlcikKKyAgICAgICAgICAgIG1fbXV0
YXRpb25SZWNpcGllbnRzLT5lbnF1ZXVlTXV0YXRpb25SZWNvcmQobV9tdXRhdGlvbik7CisgICAg
ICAgIHNfc2hvdWxkRGVsaXZlciA9IGZhbHNlOworI2VuZGlmCisgICAgICAgIGlmICghc19zaG91
bGROb3RpZnlJbnNwZWN0b3IpIHsKKyAgICAgICAgICAgIHNfY3VycmVudERlY2wgPSAwOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY2xlYXIg
aW50ZXJuYWwgc3RhdGUgYmVmb3JlIGNhbGxpbmcgSW5zcGVjdG9yJ3MgY29kZS4KKyAgICAgICAg
U3R5bGVQcm9wZXJ0eVNldCogbG9jYWxDb3B5U3R5bGVEZWNsID0gc19jdXJyZW50RGVjbDsKKyAg
ICAgICAgc19jdXJyZW50RGVjbCA9IDA7CisgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5zcGVjdG9y
ID0gZmFsc2U7CisgICAgICAgIGlmIChsb2NhbENvcHlTdHlsZURlY2wtPmlzSW5saW5lU3R5bGVE
ZWNsYXJhdGlvbigpICYmIGxvY2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpICYmIGxv
Y2FsQ29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpKQorICAgICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGxvY2Fs
Q29weVN0eWxlRGVjbC0+cGFyZW50RWxlbWVudCgpLT5kb2N1bWVudCgpLCBsb2NhbENvcHlTdHls
ZURlY2wtPnBhcmVudEVsZW1lbnQoKSk7CisgICAgfQorCisjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKKyAgICB2b2lkIGVucXVldWVNdXRhdGlvblJlY29yZCgpCisgICAgeworICAgICAg
ICBzX3Nob3VsZERlbGl2ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCBkaWRJ
bnZhbGlkYXRlU3R5bGVBdHRyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChzX2N1cnJlbnREZWNs
LT5pc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSk7CisgICAgICAgIHNfc2hvdWxkTm90aWZ5SW5z
cGVjdG9yID0gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIHNf
c2NvcGVDb3VudDsKKyAgICBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogc19jdXJyZW50RGVjbDsK
KyAgICBzdGF0aWMgYm9vbCBzX3Nob3VsZE5vdGlmeUluc3BlY3RvcjsKKyNpZiBFTkFCTEUoTVVU
QVRJT05fT0JTRVJWRVJTKQorICAgIHN0YXRpYyBib29sIHNfc2hvdWxkRGVsaXZlcjsKKworICAg
IE93blB0cjxNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cD4gbV9tdXRhdGlvblJlY2lwaWVu
dHM7CisgICAgUmVmUHRyPE11dGF0aW9uUmVjb3JkPiBtX211dGF0aW9uOworI2VuZGlmCit9Owor
Cit1bnNpZ25lZCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2NvcGVDb3VudCA9IDA7
CitTdHlsZVByb3BlcnR5U2V0KiBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfY3VycmVu
dERlY2wgPSAwOworYm9vbCBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGU6OnNfc2hvdWxkTm90
aWZ5SW5zcGVjdG9yID0gZmFsc2U7CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKK2Jv
b2wgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlOjpzX3Nob3VsZERlbGl2ZXIgPSBmYWxzZTsK
KyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZQorCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3Bl
cnR5U2V0KCkKKyAgICA6IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKKyAgICAsIG1faXNJbmxpbmVT
dHlsZURlY2xhcmF0aW9uKGZhbHNlKQorICAgICwgbV9wYXJlbnQoc3RhdGljX2Nhc3Q8Q1NTUnVs
ZSo+KDApKQoreworfQorCitTdHlsZVByb3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1J1
bGUqIHBhcmVudFJ1bGUpCisgICAgOiBtX3N0cmljdFBhcnNpbmcoIXBhcmVudFJ1bGUgfHwgcGFy
ZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQorICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFy
YXRpb24oZmFsc2UpCisgICAgLCBtX3BhcmVudChwYXJlbnRSdWxlKQoreworfQorCitTdHlsZVBy
b3BlcnR5U2V0OjpTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFZl
Y3RvcjxDU1NQcm9wZXJ0eT4mIHByb3BlcnRpZXMpCisgICAgOiBtX3Byb3BlcnRpZXMocHJvcGVy
dGllcykKKyAgICAsIG1fc3RyaWN0UGFyc2luZyghcGFyZW50UnVsZSB8fCBwYXJlbnRSdWxlLT51
c2VTdHJpY3RQYXJzaW5nKCkpCisgICAgLCBtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbihmYWxz
ZSkKKyAgICAsIG1fcGFyZW50KHBhcmVudFJ1bGUpCit7CisgICAgbV9wcm9wZXJ0aWVzLnNocmlu
a1RvRml0KCk7Cit9CisKK1N0eWxlUHJvcGVydHlTZXQ6OlN0eWxlUHJvcGVydHlTZXQoQ1NTUnVs
ZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJvcGVydGllcywgaW50
IG51bVByb3BlcnRpZXMpCisgICAgOiBtX3N0cmljdFBhcnNpbmcoIXBhcmVudFJ1bGUgfHwgcGFy
ZW50UnVsZS0+dXNlU3RyaWN0UGFyc2luZygpKQorICAgICwgbV9pc0lubGluZVN0eWxlRGVjbGFy
YXRpb24oZmFsc2UpCisgICAgLCBtX3BhcmVudChwYXJlbnRSdWxlKQoreworICAgIG1fcHJvcGVy
dGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVByb3BlcnRpZXMpOworICAgIEhhc2hNYXA8
aW50LCBib29sPiBjYW5kaWRhdGVzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVy
dGllczsgKytpKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5ICpwcm9wZXJ0eSA9IHByb3Bl
cnRpZXNbaV07CisgICAgICAgIEFTU0VSVChwcm9wZXJ0eSk7CisgICAgICAgIGJvb2wgaW1wb3J0
YW50ID0gcHJvcGVydHktPmlzSW1wb3J0YW50KCk7CisKKyAgICAgICAgSGFzaE1hcDxpbnQsIGJv
b2w+OjppdGVyYXRvciBpdCA9IGNhbmRpZGF0ZXMuZmluZChwcm9wZXJ0eS0+aWQoKSk7CisgICAg
ICAgIGlmIChpdCAhPSBjYW5kaWRhdGVzLmVuZCgpKSB7CisgICAgICAgICAgICBpZiAoIWltcG9y
dGFudCAmJiBpdC0+c2Vjb25kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydHktPmlkKCksIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
IH0KKworICAgICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKCpwcm9wZXJ0eSk7CisgICAgICAgIGNh
bmRpZGF0ZXMuc2V0KHByb3BlcnR5LT5pZCgpLCBpbXBvcnRhbnQpOworICAgIH0KK30KKworU3R5
bGVQcm9wZXJ0eVNldDo6U3R5bGVQcm9wZXJ0eVNldChTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVt
ZW50KSAKKyAgICA6IG1fc3RyaWN0UGFyc2luZyhmYWxzZSkKKyAgICAsIG1faXNJbmxpbmVTdHls
ZURlY2xhcmF0aW9uKHRydWUpCisgICAgLCBtX3BhcmVudChwYXJlbnRFbGVtZW50KQoreyAKK30K
KworU3R5bGVQcm9wZXJ0eVNldDo6flN0eWxlUHJvcGVydHlTZXQoKQoreworfQorCit2b2lkIFN0
eWxlUHJvcGVydHlTZXQ6OmRlcmVmKCkKK3sKKyAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAg
ICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gU3R5bGVQcm9w
ZXJ0eVNldCBhbmQgQ1NTU3R5bGVEZWNsYXJhdGlvbiByZWYgZWFjaCBvdGhlci4gV2hlbiB3ZSBo
YXZlIGEgZGVjbGFyYXRpb24gYW5kCisgICAgLy8gb3VyIHJlZmNvdW50IGRyb3BzIHRvIG9uZSB3
ZSBrbm93IGl0IGlzIHRoZSBvbmx5IHRoaW5nIGtlZXBpbmcgdXMgYWxpdmUuCisgICAgaWYgKG1f
Y3NzU3R5bGVEZWNsYXJhdGlvbiAmJiBoYXNPbmVSZWYoKSkKKyAgICAgICAgbV9jc3NTdHlsZURl
Y2xhcmF0aW9uLmNsZWFyKCk7Cit9CisKK0NTU1N0eWxlU2hlZXQqIFN0eWxlUHJvcGVydHlTZXQ6
OmNvbnRleHRTdHlsZVNoZWV0KCkgY29uc3QKK3sKKyAgICBpZiAobV9pc0lubGluZVN0eWxlRGVj
bGFyYXRpb24pIHsKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wYXJlbnQuZWxlbWVu
dCA/IG1fcGFyZW50LmVsZW1lbnQtPmRvY3VtZW50KCkgOiAwOworICAgICAgICByZXR1cm4gZG9j
dW1lbnQgPyBkb2N1bWVudC0+ZWxlbWVudFNoZWV0KCkgOiAwOworICAgIH0KKyAgICByZXR1cm4g
bV9wYXJlbnQucnVsZSA/IG1fcGFyZW50LnJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7Cit9
CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y29weVByb3BlcnRpZXNGcm9tKGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQmIG90aGVyKQoreworICAgIG1fcHJvcGVydGllcyA9IG90aGVyLm1fcHJvcGVy
dGllczsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5VmFsdWUoaW50
IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICByZXR1
cm4gdmFsdWUtPmNzc1RleHQoKTsKKworICAgIC8vIFNob3J0aGFuZCBhbmQgNC12YWx1ZXMgcHJv
cGVydGllcworICAgIHN3aXRjaCAocHJvcGVydHlJRCkgeworICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyU3BhY2luZzogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0g
PSB7IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIENTU1Byb3BlcnR5
V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nIH07CisgICAgICAgICAgICByZXR1cm4gYm9yZGVy
U3BhY2luZ1ZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb246IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGlz
IGNvcnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5nCisgICAgICAg
ICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9z
aXRpb25YLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsKKyAgICAgICAgICAgIHJl
dHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6IHsKKyAgICAgICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1s5XSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVw
ZWF0WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRDbGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB9OworICAgICAgICAgICAgcmV0dXJu
IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1szXVs0XSA9IHt7IENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlCb3JkZXJCb3R0b21XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGggfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ1NTUHJvcGVydHlCb3JkZXJUb3BTdHlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDU1NQcm9wZXJ0eUJvcmRlclRv
cENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9y
IH19OworICAgICAgICAgICAgU3RyaW5nIHJlczsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChwcm9wZXJ0aWVzKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0Q29tbW9uVmFsdWUocHJvcGVydGllc1tpXSk7CisgICAg
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIXJlcy5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSAiICI7Cisg
ICAgICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJUb3A6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0
aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlclRv
cFN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5Qm9yZGVyVG9wQ29sb3J9OworICAgICAgICAgICAgcmV0dXJuIGdldFNob3J0aGFuZFZhbHVl
KHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodDogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3Bl
cnR5Qm9yZGVyUmlnaHRXaWR0aCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRD
b2xvcn07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbTogeworICAg
ICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tV2lkdGgsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tU3R5bGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcn07Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6IHsKKyAgICAgICAgICAgIGNv
bnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3J9OworICAgICAgICAgICAgcmV0dXJu
IGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1sz
XSA9IHsgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsIENTU1Byb3BlcnR5T3V0bGluZVN0eWxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5T3V0bGlu
ZUNvbG9yIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGll
cyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbG9yOiB7Cisg
ICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlCb3JkZXJU
b3BDb2xvciwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIENTU1By
b3BlcnR5Qm9yZGVyTGVmdENvbG9yIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0NFZhbHVlcyhw
cm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyV2lk
dGg6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0
eUJvcmRlclRvcFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0
aCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGggfTsKKyAgICAgICAgICAgIHJldHVybiBnZXQ0
VmFsdWVzKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJTdHlsZTogeworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENT
U1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVN0eWxlLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZSB9OworICAgICAgICAgICAgcmV0
dXJuIGdldDRWYWx1ZXMocHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEZsZXhGbG93OiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGll
c1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhEaXJlY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0
RmxleFdyYXAgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0
aWVzKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKKyAgICAgICAg
ICAgIHJldHVybiBmb250VmFsdWUoKTsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbjog
eworICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbNF0gPSB7IENTU1Byb3BlcnR5TWFy
Z2luVG9wLCBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBDU1NQcm9wZXJ0eU1hcmdp
bkxlZnQgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzogeworICAgICAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBDU1NQcm9w
ZXJ0eU92ZXJmbG93WSB9OworICAgICAgICAgICAgcmV0dXJuIGdldENvbW1vblZhbHVlKHByb3Bl
cnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nOiB7Cisg
ICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s0XSA9IHsgQ1NTUHJvcGVydHlQYWRkaW5n
VG9wLCBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sIENTU1Byb3BlcnR5UGFkZGlu
Z0xlZnQgfTsKKyAgICAgICAgICAgIHJldHVybiBnZXQ0VmFsdWVzKHByb3BlcnRpZXMpOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGU6IHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBwcm9wZXJ0aWVzWzNdID0geyBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGUsIENT
U1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSB9OworICAgICAgICAgICAgcmV0
dXJuIGdldFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb246IHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGlzIGNvcnJlY3Q/IFRoZSBjb2RlIGluIGNzc3BhcnNlci5jcHAgaXMgY29uZnVzaW5n
CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25YLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkgfTsKKyAgICAg
ICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6IHsKKyAgICAg
ICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tS
ZXBlYXRYLCBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZIH07CisgICAgICAgICAgICByZXR1
cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrOiB7CisgICAgICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9z
aXRpb24sIENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKKyAgICAgICAg
ICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjogeworICAg
ICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbM10gPSB7IENTU1Byb3BlcnR5V2Via2l0VHJh
bnNmb3JtT3JpZ2luWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5aIH07Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246IHsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uVGltaW5nRnVuY3Rpb24sIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5IH07Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246IHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzddID0geyBDU1NQcm9wZXJ0eVdlYmtpdEFu
aW1hdGlvbk5hbWUsIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25UaW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkl0ZXJhdGlvbkNvdW50LCBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkZpbGxNb2RlIH07CisgICAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJlZFNob3J0
aGFuZFZhbHVlKHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRXcmFwOiB7CisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdywgQ1NTUHJvcGVydHlXZWJraXRXcmFwTWFyZ2luLAor
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0V3JhcFBhZGRpbmcgfTsKKyAgICAgICAg
ICAgIHJldHVybiBnZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShTVkcpCisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJrZXI6IHsKKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5TWFya2VyU3RhcnQpOworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAg
cmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Ym9yZGVyU3Bh
Y2luZ1ZhbHVlKGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdKSBjb25zdAoreworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gaG9yaXpvbnRhbFZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVz
WzBdKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHZlcnRpY2FsVmFsdWUgPSBnZXRQcm9wZXJ0eUNT
U1ZhbHVlKHByb3BlcnRpZXNbMV0pOworCisgICAgaWYgKCFob3Jpem9udGFsVmFsdWUpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBBU1NFUlQodmVydGljYWxWYWx1ZSk7IC8vIEJ5IDxo
dHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS90YWJsZXMuaHRtbCNzZXBhcmF0ZWQtYm9yZGVycz4u
CisKKyAgICBTdHJpbmcgaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9IGhvcml6b250YWxWYWx1ZS0+
Y3NzVGV4dCgpOworICAgIFN0cmluZyB2ZXJ0aWNhbFZhbHVlQ1NTVGV4dCA9IHZlcnRpY2FsVmFs
dWUtPmNzc1RleHQoKTsKKyAgICBpZiAoaG9yaXpvbnRhbFZhbHVlQ1NTVGV4dCA9PSB2ZXJ0aWNh
bFZhbHVlQ1NTVGV4dCkKKyAgICAgICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZUNTU1RleHQ7Cisg
ICAgcmV0dXJuIGhvcml6b250YWxWYWx1ZUNTU1RleHQgKyAnICcgKyB2ZXJ0aWNhbFZhbHVlQ1NT
VGV4dDsKK30KKworYm9vbCBTdHlsZVByb3BlcnR5U2V0OjphcHBlbmRGb250TG9uZ2hhbmRWYWx1
ZUlmRXhwbGljaXQoaW50IHByb3BlcnR5SWQsIFN0cmluZ0J1aWxkZXImIHJlc3VsdCkgY29uc3QK
K3sKKyAgICBjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQo
cHJvcGVydHlJZCk7CisgICAgaWYgKCFwcm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBBbGwgbG9uZ2hhbmRzIG11c3QgaGF2ZSBhdCBsZWFzdCBpbXBsaWNpdCB2YWx1ZXMgaWYgImZv
bnQiIGlzIHNwZWNpZmllZC4KKyAgICBpZiAocHJvcGVydHktPmlzSW1wbGljaXQoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBjaGFyIHByZWZpeCA9ICdcMCc7CisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKKyAgICAgICAgYnJl
YWs7IC8vIE5vIHByZWZpeC4KKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWln
aHQ6CisgICAgICAgIHByZWZpeCA9ICcgJzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQ6CisgICAgICAgIHByZWZpeCA9ICcvJzsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgaWYgKHByZWZpeCAmJiAhcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChwcmVmaXgpOworICAgIHJlc3VsdC5hcHBlbmQocHJvcGVydHktPnZhbHVlKCktPmNzc1RleHQo
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5nIFN0eWxlUHJvcGVydHlTZXQ6OmZv
bnRWYWx1ZSgpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIGZvbnRTaXplUHJvcGVy
dHkgPSBmaW5kUHJvcGVydHlXaXRoSWQoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgaWYgKCFm
b250U2l6ZVByb3BlcnR5IHx8IGZvbnRTaXplUHJvcGVydHktPmlzSW1wbGljaXQoKSkKKyAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAg
ICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIHN1Y2Nlc3MgJj0gYXBwZW5kRm9udExvbmdoYW5k
VmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udFN0eWxlLCByZXN1bHQpOworICAgIHN1Y2Nl
c3MgJj0gYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4cGxpY2l0KENTU1Byb3BlcnR5Rm9udFZh
cmlhbnQsIHJlc3VsdCk7CisgICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlm
RXhwbGljaXQoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCByZXN1bHQpOworICAgIGlmICghcmVzdWx0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgIHJlc3VsdC5hcHBl
bmQoZm9udFNpemVQcm9wZXJ0eS0+dmFsdWUoKS0+Y3NzVGV4dCgpKTsKKyAgICBzdWNjZXNzICY9
IGFwcGVuZEZvbnRMb25naGFuZFZhbHVlSWZFeHBsaWNpdChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IHJlc3VsdCk7CisgICAgc3VjY2VzcyAmPSBhcHBlbmRGb250TG9uZ2hhbmRWYWx1ZUlmRXhwbGlj
aXQoQ1NTUHJvcGVydHlGb250RmFtaWx5LCByZXN1bHQpOworICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAvLyBBbiBpbnZhbGlkICJmb250IiB2YWx1ZSBoYXMgYmVlbiBidWlsdCAoc2hvdWxk
IG5ldmVyIGhhcHBlbiwgYXMgYXQgbGVhc3QgaW1wbGljaXQgdmFsdWVzCisgICAgICAgIC8vIGZv
ciBtYW5kYXRvcnkgbG9uZ2hhbmRzIGFyZSBhbHdheXMgZm91bmQgaW4gdGhlIHN0eWxlKSwgcmVw
b3J0IGVtcHR5IHZhbHVlIGluc3RlYWQuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOworfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0NFZhbHVlcyhjb25z
dCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0Cit7CisgICAgLy8gQXNzdW1lIHRoZSBwcm9wZXJ0aWVz
IGFyZSBpbiB0aGUgdXN1YWwgb3JkZXIgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LgorICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdG9wVmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNb
MF0pOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmlnaHRWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydGllc1sxXSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBib3R0b21WYWx1ZSA9IGdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1syXSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBs
ZWZ0VmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbM10pOworCisgICAgLy8g
QWxsIDQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZC4KKyAgICBpZiAoIXRvcFZhbHVlIHx8
ICFyaWdodFZhbHVlIHx8ICFib3R0b21WYWx1ZSB8fCAhbGVmdFZhbHVlKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICBib29sIHNob3dMZWZ0ID0gcmlnaHRWYWx1ZS0+Y3NzVGV4dCgp
ICE9IGxlZnRWYWx1ZS0+Y3NzVGV4dCgpOworICAgIGJvb2wgc2hvd0JvdHRvbSA9ICh0b3BWYWx1
ZS0+Y3NzVGV4dCgpICE9IGJvdHRvbVZhbHVlLT5jc3NUZXh0KCkpIHx8IHNob3dMZWZ0OworICAg
IGJvb2wgc2hvd1JpZ2h0ID0gKHRvcFZhbHVlLT5jc3NUZXh0KCkgIT0gcmlnaHRWYWx1ZS0+Y3Nz
VGV4dCgpKSB8fCBzaG93Qm90dG9tOworCisgICAgU3RyaW5nIHJlcyA9IHRvcFZhbHVlLT5jc3NU
ZXh0KCk7CisgICAgaWYgKHNob3dSaWdodCkKKyAgICAgICAgcmVzICs9ICIgIiArIHJpZ2h0VmFs
dWUtPmNzc1RleHQoKTsKKyAgICBpZiAoc2hvd0JvdHRvbSkKKyAgICAgICAgcmVzICs9ICIgIiAr
IGJvdHRvbVZhbHVlLT5jc3NUZXh0KCk7CisgICAgaWYgKHNob3dMZWZ0KQorICAgICAgICByZXMg
Kz0gIiAiICsgbGVmdFZhbHVlLT5jc3NUZXh0KCk7CisKKyAgICByZXR1cm4gcmVzOworfQorCitT
dHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGlu
dCogcHJvcGVydGllcywgc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHJlczsKKwor
ICAgIC8vIEJlZ2luIGJ5IGNvbGxlY3RpbmcgdGhlIHByb3BlcnRpZXMgaW50byBhbiBhcnJheS4K
KyAgICBWZWN0b3I8IFJlZlB0cjxDU1NWYWx1ZT4gPiB2YWx1ZXMoc2l6ZSk7CisgICAgc2l6ZV90
IG51bUxheWVycyA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICB2YWx1ZXNbaV0gPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0p
OworICAgICAgICBpZiAodmFsdWVzW2ldKSB7CisgICAgICAgICAgICBpZiAodmFsdWVzW2ldLT5p
c1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZXNbaV0uZ2V0KCkpOworICAgICAgICAg
ICAgICAgIG51bUxheWVycyA9IG1heCh2YWx1ZUxpc3QtPmxlbmd0aCgpLCBudW1MYXllcnMpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4PHNpemVf
dD4oMVUsIG51bUxheWVycyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgc3RpdGNo
IHRoZSBwcm9wZXJ0aWVzIHRvZ2V0aGVyLiAgSW1wbGljaXQgaW5pdGlhbCB2YWx1ZXMgYXJlIGZs
YWdnZWQgYXMgc3VjaCBhbmQKKyAgICAvLyBjYW4gc2FmZWx5IGJlIG9taXR0ZWQuCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBudW1MYXllcnM7IGkrKykgeworICAgICAgICBTdHJpbmcgbGF5
ZXJSZXM7CisgICAgICAgIGJvb2wgdXNlUmVwZWF0WFNob3J0aGFuZCA9IGZhbHNlOworICAgICAg
ICBib29sIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCB1c2VTaW5n
bGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
c2l6ZTsgaisrKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOworICAgICAg
ICAgICAgaWYgKHZhbHVlc1tqXSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbal0tPmlz
VmFsdWVMaXN0KCkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4odmFsdWVzW2pdLmdldCgpKS0+aXRlbShpKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbal07CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQ29sb3Igb25seSBiZWxvbmdzIGluIHRoZSBsYXN0IGxheWVyLgorICAg
ICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tqXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbnVtTGF5ZXJzIC0g
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaSAhPSAwKSAvLyBPdGhlciBzaW5nbGV0b25zIG9ubHkgYmVsb25n
IGluIHRoZSBmaXJzdCBsYXllci4KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gcmVwb3J0IGJhY2tncm91bmQtcmVwZWF0IGFzIGl0IHdhcyB3cml0dGVuIGluIHRoZSBD
U1MuIElmIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCwKKyAgICAgICAgICAgIC8vIHRoZW4gaXQg
d2FzIHdyaXR0ZW4gd2l0aCBvbmx5IG9uZSB2YWx1ZS4gSGVyZSB3ZSBmaWd1cmUgb3V0IHdoaWNo
IHZhbHVlIHRoYXQgd2FzIHNvIHdlIGNhbgorICAgICAgICAgICAgLy8gcmVwb3J0IGJhY2sgY29y
cmVjdGx5LgorICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kUmVwZWF0WCAmJiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tqXSkpIHsKKwor
ICAgICAgICAgICAgICAgIC8vIEJVRyA0OTA1NTogbWFrZSBzdXJlIHRoZSB2YWx1ZSB3YXMgbm90
IHJlc2V0IGluIHRoZSBsYXllciBjaGVjayBqdXN0IGFib3ZlLgorICAgICAgICAgICAgICAgIGlm
IChqIDwgc2l6ZSAtIDEgJiYgcHJvcGVydGllc1tqICsgMV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WSAmJiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHlWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBuZXh0VmFs
dWUgPSB2YWx1ZXNbaiArIDFdOworICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVMaXN0Kj4obmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayhpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eVZhbHVlID0gbmV4dFZhbHVlOworCisgICAgICAgICAgICAgICAgICAgIGludCB4SWQgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRlbnQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IHlJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oeVZhbHVlLmdldCgpKS0+Z2V0SWRlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhJ
ZCAhPSB5SWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgPT0gQ1NTVmFsdWVS
ZXBlYXQgJiYgeUlkID09IENTU1ZhbHVlTm9SZXBlYXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhJZCA9PSBD
U1NWYWx1ZU5vUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZVJlcGVhdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZVJlcGVhdFlTaG9ydGhhbmQgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdXNlU2lu
Z2xlV29yZFNob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICArK2o7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWUtPmlzSW1wbGljaXRJbml0aWFsVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgIGlmICghbGF5ZXJSZXMuaXNOdWxsKCkpCisgICAgICAgICAg
ICAgICAgICAgIGxheWVyUmVzICs9ICIgIjsKKyAgICAgICAgICAgICAgICBpZiAodXNlUmVwZWF0
WFNob3J0aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NW
YWx1ZVJlcGVhdFgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlUmVwZWF0WVNob3J0
aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VSZXBlYXRZU2hvcnRoYW5kID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IGdldFZhbHVlTmFtZShDU1NWYWx1ZVJl
cGVhdFkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlU2luZ2xlV29yZFNob3J0aGFu
ZCkgeworICAgICAgICAgICAgICAgICAgICB1c2VTaW5nbGVXb3JkU2hvcnRoYW5kID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVl
LT5jc3NUZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWxh
eWVyUmVzLmlzTnVsbCgpKSB7CisgICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICByZXMgKz0gIiwgIjsKKyAgICAgICAgICAgIHJlcyArPSBsYXllclJlczsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKK1N0cmluZyBTdHlsZVByb3Bl
cnR5U2V0OjpnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHNpemVfdCBz
aXplKSBjb25zdAoreworICAgIFN0cmluZyByZXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpIHsKKyAgICAgICAgaWYgKCFpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGll
c1tpXSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOworICAgICAgICAgICAgLy8gRklYTUU6IHByb3ZpZGUg
ZGVmYXVsdCB2YWx1ZSBpZiAhdmFsdWUKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIGlmICghcmVzLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICByZXMgKz0g
IiAiOworICAgICAgICAgICAgICAgIHJlcyArPSB2YWx1ZS0+Y3NzVGV4dCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKKy8vIG9ubHkgcmV0
dXJucyBhIG5vbi1udWxsIHZhbHVlIGlmIGFsbCBwcm9wZXJ0aWVzIGhhdmUgdGhlIHNhbWUsIG5v
bi1udWxsIHZhbHVlCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6Z2V0Q29tbW9uVmFsdWUoY29u
c3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3Qgc2l6ZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVz
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRpZXNbaV0pOwor
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAg
ICBTdHJpbmcgdGV4dCA9IHZhbHVlLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICh0ZXh0LmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICBpZiAocmVzLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmVzID0gdGV4dDsKKyAgICAgICAgZWxzZSBpZiAocmVzICE9IHRl
eHQpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiByZXM7
Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5
Q1NTVmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTUHJvcGVydHkq
IHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOworICAgIHJldHVybiBw
cm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKK30KKworYm9vbCBTdHlsZVByb3BlcnR5
U2V0OjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlD
aGFuZ2VkKQoreworICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmQgPSBsb25naGFuZEZv
clByb3BlcnR5KHByb3BlcnR5SUQpOworICAgIGlmICghbG9uZ2hhbmQubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVtb3ZlUHJvcGVydGllc0luU2V0KGxvbmdo
YW5kLnByb3BlcnRpZXMoKSwgbG9uZ2hhbmQubGVuZ3RoKCksIG5vdGlmeUNoYW5nZWQpOworfQor
CitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGJvb2wgbm90aWZ5Q2hhbmdlZCwgYm9vbCByZXR1cm5UZXh0KQoreworI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9u
U2NvcGUodGhpcyk7CisjZW5kaWYKKworICAgIGlmIChyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShw
cm9wZXJ0eUlELCBub3RpZnlDaGFuZ2VkKSkgeworICAgICAgICAvLyBGSVhNRTogUmV0dXJuIGFu
IGVxdWl2YWxlbnQgc2hvcnRoYW5kIHdoZW4gcG9zc2libGUuCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICBDU1NQcm9wZXJ0eSogZm91bmRQcm9wZXJ0eSA9IGZpbmRQcm9w
ZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIWZvdW5kUHJvcGVydHkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZyB2YWx1ZSA9IHJldHVyblRleHQgPyBmb3Vu
ZFByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkgOiBTdHJpbmcoKTsKKworICAgIC8vIEEgbW9y
ZSBlZmZpY2llbnQgcmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmll
cyBhcyBlbXB0eQorICAgIC8vIGFuZCBzd2VlcGluZyB0aGVtIHdoZW4gdGhlIHZlY3RvciBncm93
cyB0b28gYmlnLgorICAgIG1fcHJvcGVydGllcy5yZW1vdmUoZm91bmRQcm9wZXJ0eSAtIG1fcHJv
cGVydGllcy5kYXRhKCkpOworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBt
dXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOworI2VuZGlmCisKKyAgICBpZiAo
bm90aWZ5Q2hhbmdlZCkKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworCisgICAgcmV0
dXJuIHZhbHVlOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnNldE5lZWRzU3R5bGVSZWNh
bGMoKQoreworICAgIGlmIChpc0lubGluZVN0eWxlRGVjbGFyYXRpb24oKSkgeworICAgICAgICBT
dHlsZWRFbGVtZW50KiBlbGVtZW50ID0gcGFyZW50RWxlbWVudCgpOworICAgICAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOworICAgICAgICBlbGVtZW50LT5pbnZhbGlkYXRl
U3R5bGVBdHRyaWJ1dGUoKTsKKyAgICAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKHRo
aXMpLmRpZEludmFsaWRhdGVTdHlsZUF0dHIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQoKSkg
eworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+ZmluZERvY3Vt
ZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVTZWxlY3RvckNoYW5nZWQoRGVmZXJS
ZWNhbGNTdHlsZSk7CisgICAgfQorfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5
SXNJbXBvcnRhbnQoaW50IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgY29uc3QgQ1NTUHJvcGVy
dHkqIHByb3BlcnR5ID0gZmluZFByb3BlcnR5V2l0aElkKHByb3BlcnR5SUQpOworICAgIGlmIChw
cm9wZXJ0eSkKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5LT5pc0ltcG9ydGFudCgpOworCisgICAg
Q1NTUHJvcGVydHlMb25naGFuZCBsb25naGFuZHMgPSBsb25naGFuZEZvclByb3BlcnR5KHByb3Bl
cnR5SUQpOworICAgIGlmICghbG9uZ2hhbmRzLmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eUlzSW1wb3J0YW50KGxvbmdoYW5kcy5wcm9wZXJ0
aWVzKClbaV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW50IFN0eWxlUHJvcGVydHlTZXQ6OmdldFByb3BlcnR5U2hvcnRoYW5kKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwcm9wZXJ0eSA9
IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAgICByZXR1cm4gcHJvcGVydHkgPyBw
cm9wZXJ0eS0+c2hvcnRoYW5kSUQoKSA6IDA7Cit9CisKK2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6
aXNQcm9wZXJ0eUltcGxpY2l0KGludCBwcm9wZXJ0eUlEKSBjb25zdAoreworICAgIGNvbnN0IENT
U1Byb3BlcnR5KiBwcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKKyAg
ICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+aXNJbXBsaWNpdCgpIDogZmFsc2U7Cit9CisK
K2Jvb2wgU3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5vdGlmeUNoYW5nZWQpCit7Cisj
aWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRpZgorCisgICAgLy8gU2V0dGluZyB0aGUg
dmFsdWUgdG8gYW4gZW1wdHkgc3RyaW5nIGp1c3QgcmVtb3ZlcyB0aGUgcHJvcGVydHkgaW4gYm90
aCBJRSBhbmQgR2Vja28uCisgICAgLy8gU2V0dGluZyBpdCB0byBudWxsIHNlZW1zIHRvIHByb2R1
Y2UgbGVzcyBjb25zaXN0ZW50IHJlc3VsdHMsIGJ1dCB3ZSB0cmVhdCBpdCBqdXN0IHRoZSBzYW1l
LgorICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJv
cGVydHlJRCwgbm90aWZ5Q2hhbmdlZCwgZmFsc2UpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBXaGVuIHJlcGxhY2luZyBhbiBleGlzdGluZyBwcm9wZXJ0eSB2YWx1ZSwg
dGhpcyBtb3ZlcyB0aGUgcHJvcGVydHkgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAgICAvLyBG
aXJlZm94IHByZXNlcnZlcyB0aGUgcG9zaXRpb24sIGFuZCBNU0lFIG1vdmVzIHRoZSBwcm9wZXJ0
eSB0byB0aGUgYmVnaW5uaW5nLgorICAgIGJvb2wgc3VjY2VzcyA9IENTU1BhcnNlcjo6cGFyc2VW
YWx1ZSh0aGlzLCBwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB1c2VTdHJpY3RQYXJzaW5n
KCkpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJh
aXNpbmcgU1lOVEFYX0VSUiBoZXJlLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZvciBjb21w
YXRpYmlsaXR5LAorICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcyOTY+LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlv
blJlY29yZCgpOworI2VuZGlmCisKKyAgICBpZiAobm90aWZ5Q2hhbmdlZCkKKyAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3R5bGVQ
cm9wZXJ0eVNldDo6c2V0UHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQ
cm9wZXJ0eSogc2xvdCkKK3sKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0
eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2VuZGlmCisK
KyAgICBpZiAoIXJlbW92ZVNob3J0aGFuZFByb3BlcnR5KHByb3BlcnR5LmlkKCksIGZhbHNlKSkg
eworICAgICAgICBDU1NQcm9wZXJ0eSogdG9SZXBsYWNlID0gc2xvdCA/IHNsb3QgOiBmaW5kUHJv
cGVydHlXaXRoSWQocHJvcGVydHkuaWQoKSk7CisgICAgICAgIGlmICh0b1JlcGxhY2UpIHsKKyAg
ICAgICAgICAgICp0b1JlcGxhY2UgPSBwcm9wZXJ0eTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKKworI2lm
IEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0
YXRpb25SZWNvcmQoKTsKKyNlbmRpZgorfQorCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFBy
b3BlcnR5KGludCBwcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIG5v
dGlmeUNoYW5nZWQpCit7CisgICAgQ1NTUHJvcGVydHkgcHJvcGVydHkocHJvcGVydHlJRCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUpLCBpbXBvcnRhbnQpOworICAg
IHNldFByb3BlcnR5KHByb3BlcnR5KTsKKyAgICBpZiAobm90aWZ5Q2hhbmdlZCkKKyAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0eWxl
UHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90
aWZ5Q2hhbmdlZCkKK3sKKyAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlELCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB1bml0KSwgaW1wb3J0YW50KTsKKyAgICBzZXRQ
cm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgaWYgKG5vdGlmeUNoYW5nZWQpCisgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZVByb3Bl
cnR5U2V0OjpwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYgc3R5bGVEZWNsYXJhdGlvbikK
K3sKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0
YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOworI2VuZGlmCisKKyAgICBtX3Byb3BlcnRp
ZXMuY2xlYXIoKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKHVzZVN0cmljdFBhcnNpbmcoKSk7Cisg
ICAgcGFyc2VyLnBhcnNlRGVjbGFyYXRpb24odGhpcywgc3R5bGVEZWNsYXJhdGlvbik7CisKKyNp
ZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11
dGF0aW9uUmVjb3JkKCk7CisjZW5kaWYKKworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30K
Kwordm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IENTU1By
b3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCit7CisjaWYgRU5B
QkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUg
bXV0YXRpb25TY29wZSh0aGlzKTsKKyNlbmRpZgorCisgICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVD
YXBhY2l0eShudW1Qcm9wZXJ0aWVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkKKyAgICAgICAgYWRkUGFyc2VkUHJvcGVydHkoKnByb3BlcnRpZXNbaV0pOwor
CisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICBtdXRhdGlvblNjb3BlLmVucXVl
dWVNdXRhdGlvblJlY29yZCgpOworI2VuZGlmCisKKyAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJs
eSBzaG91bGQgaGF2ZSBhIGNhbGwgdG8gc2V0TmVlZHNTdHlsZVJlY2FsYygpIGlmIHNvbWV0aGlu
ZyBjaGFuZ2VkLiBXZSBtYXkgYWxzbyB3aXNoIHRvIGFkZAorICAgIC8vIGEgbm90aWZ5Q2hhbmdl
ZCBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUgbW9kZWwgb2Ygb3RoZXIg
ZnVuY3Rpb25zIGluIHRoaXMgY2xhc3MuCit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRk
UGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5KQoreworI2lmIEVOQUJM
RShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11
dGF0aW9uU2NvcGUodGhpcyk7CisjZW5kaWYKKworICAgIC8vIE9ubHkgYWRkIHByb3BlcnRpZXMg
dGhhdCBoYXZlIG5vICFpbXBvcnRhbnQgY291bnRlcnBhcnQgcHJlc2VudAorICAgIGlmICghcHJv
cGVydHlJc0ltcG9ydGFudChwcm9wZXJ0eS5pZCgpKSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFudCgp
KSB7CisgICAgICAgIHJlbW92ZVByb3BlcnR5KHByb3BlcnR5LmlkKCksIGZhbHNlLCBmYWxzZSk7
CisgICAgICAgIG1fcHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOworICAgIH0KKworI2lmIEVO
QUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCisgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRp
b25SZWNvcmQoKTsKKyNlbmRpZgorfQorCitTdHJpbmcgU3R5bGVQcm9wZXJ0eVNldDo6YXNUZXh0
KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVzdWx0ID0gIiI7CisKKyAgICBjb25zdCBDU1NQcm9w
ZXJ0eSogcG9zaXRpb25YUHJvcCA9IDA7CisgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9u
WVByb3AgPSAwOworICAgIGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7CisgICAg
Y29uc3QgQ1NTUHJvcGVydHkqIHJlcGVhdFlQcm9wID0gMDsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBtX3Byb3BlcnRpZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXpl
OyArK24pIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBtX3Byb3BlcnRpZXNb
bl07CisgICAgICAgIGlmIChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25YKQorICAgICAgICAgICAgcG9zaXRpb25YUHJvcCA9ICZwcm9wOworICAgICAgICBlbHNlIGlm
IChwcm9wLmlkKCkgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZKQorICAgICAgICAg
ICAgcG9zaXRpb25ZUHJvcCA9ICZwcm9wOworICAgICAgICBlbHNlIGlmIChwcm9wLmlkKCkgPT0g
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCkKKyAgICAgICAgICAgIHJlcGVhdFhQcm9wID0g
JnByb3A7CisgICAgICAgIGVsc2UgaWYgKHByb3AuaWQoKSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRSZXBlYXRZKQorICAgICAgICAgICAgcmVwZWF0WVByb3AgPSAmcHJvcDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzdWx0ICs9IHByb3AuY3NzVGV4dCgpOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0aW9ucyBp
bnRvIHNpbmdsZSBiYWNrZ3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KKyAgICAvLyBJdCBpcyBy
ZXF1aXJlZCBiZWNhdXNlIGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQg
cHJvcGVydGllcyBhbmQgV2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKKyAgICAvLyB3b3VsZCBub3Qg
d29yayBpbiBGaXJlZm94ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCisgICAgLy8gSXQgd291
bGQgYmUgYSBiZXR0ZXIgc29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BB
SVIuCisgICAgaWYgKHBvc2l0aW9uWFByb3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3NpdGlvblhQ
cm9wLT5pc0ltcG9ydGFudCgpID09IHBvc2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkpIHsKKyAg
ICAgICAgU3RyaW5nIHBvc2l0aW9uVmFsdWU7CisgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dy
b3VuZFBvc2l0aW9uWSB9OworICAgICAgICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+aXNW
YWx1ZUxpc3QoKSB8fCBwb3NpdGlvbllQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKQorICAg
ICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0
aWVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zaXRpb25WYWx1ZSA9IHBvc2l0aW9u
WFByb3AtPnZhbHVlKCktPmNzc1RleHQoKSArICIgIiArIHBvc2l0aW9uWVByb3AtPnZhbHVlKCkt
PmNzc1RleHQoKTsKKyAgICAgICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXBvc2l0aW9uOiAiICsg
cG9zaXRpb25WYWx1ZSArIChwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0
YW50IiA6ICIiKSArICI7ICI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uWFBy
b3ApCisgICAgICAgICAgICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgpOworICAg
ICAgICBpZiAocG9zaXRpb25ZUHJvcCkKKyAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvbllQ
cm9wLT5jc3NUZXh0KCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZG8gdGhl
IHNhbWUgZm9yIGJhY2tncm91bmQtcmVwZWF0LgorICAgIGlmIChyZXBlYXRYUHJvcCAmJiByZXBl
YXRZUHJvcCAmJiByZXBlYXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJvcC0+aXNJ
bXBvcnRhbnQoKSkgeworICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7CisgICAgICAgIGNvbnN0
IGludCByZXBlYXRQcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRY
LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZIH07CisgICAgICAgIGlmIChyZXBlYXRYUHJv
cC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNWYWx1
ZUxpc3QoKSkKKyAgICAgICAgICAgIHJlcGVhdFZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZh
bHVlKHJlcGVhdFByb3BlcnRpZXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBlYXRW
YWx1ZSA9IHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyByZXBlYXRZUHJv
cC0+dmFsdWUoKS0+Y3NzVGV4dCgpOworICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcmVw
ZWF0OiAiICsgcmVwZWF0VmFsdWUgKyAocmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkgPyAiICFp
bXBvcnRhbnQiIDogIiIpICsgIjsgIjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVwZWF0
WFByb3ApCisgICAgICAgICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQoKTsKKyAg
ICAgICAgaWYgKHJlcGVhdFlQcm9wKQorICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVhdFlQcm9w
LT5jc3NUZXh0KCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHls
ZVByb3BlcnR5U2V0OjptZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBvdGhlciwgYm9vbCBh
cmdPdmVycmlkZXNPbkNvbmZsaWN0KQoreworI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMp
CisgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7Cisj
ZW5kaWYKKworICAgIHVuc2lnbmVkIHNpemUgPSBvdGhlci0+bV9wcm9wZXJ0aWVzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CisgICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiB0b01lcmdlID0gb3RoZXItPm1fcHJvcGVydGllc1tuXTsKKyAgICAgICAg
Q1NTUHJvcGVydHkqIG9sZCA9IGZpbmRQcm9wZXJ0eVdpdGhJZCh0b01lcmdlLmlkKCkpOworICAg
ICAgICBpZiAob2xkKSB7CisgICAgICAgICAgICBpZiAoIWFyZ092ZXJyaWRlc09uQ29uZmxpY3Qg
JiYgb2xkLT52YWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
c2V0UHJvcGVydHkodG9NZXJnZSwgb2xkKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X3Byb3BlcnRpZXMuYXBwZW5kKHRvTWVyZ2UpOworICAgIH0KKworI2lmIEVOQUJMRShNVVRBVElP
Tl9PQlNFUlZFUlMpCisgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
KyNlbmRpZgorCisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkIGhhdmUgYSBjYWxs
IHRvIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBpZiBzb21ldGhpbmcgY2hhbmdlZC4gV2UgbWF5IGFs
c28gd2lzaCB0byBhZGQKKyAgICAvLyBhIG5vdGlmeUNoYW5nZWQgYXJndW1lbnQgdG8gdGhpcyBm
dW5jdGlvbiB0byBmb2xsb3cgdGhlIG1vZGVsIG9mIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNs
YXNzLgorfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKQoreworICAgIENTU1N0eWxlU2hlZXQqIHNoZWV0ID0g
Y29udGV4dFN0eWxlU2hlZXQoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXpl
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fcHJv
cGVydGllc1tpXS52YWx1ZSgpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzaGVldCk7
Cit9CisKKy8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB3ZSB3YW50IHRvIGNvcHkg
aW4gdGhlIGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBmdW5jdGlvbi4KKy8vIEl0IGlzIHRoZSBsaXN0
IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgc3BlY2lhbGx5IHRvIGJsb2NrLWxldmVsIGVs
ZW1lbnRzLgorc3RhdGljIGNvbnN0IGludCBibG9ja1Byb3BlcnRpZXNbXSA9IHsKKyAgICBDU1NQ
cm9wZXJ0eU9ycGhhbnMsCisgICAgQ1NTUHJvcGVydHlPdmVyZmxvdywgLy8gVGhpcyBjYW4gYmUg
YWxzbyBiZSBhcHBsaWVkIHRvIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRBc3BlY3RSYXRpbywKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LAorICAgIENT
U1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZUNvbG9yLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlLAorICAgIENTU1By
b3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLAorICAgIENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
QnJlYWtCZWZvcmUsCisgICAgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0FmdGVyLAorICAg
IENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGUsCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5XaWR0aCwKKyAgICBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyLAorICAgIENTU1By
b3BlcnR5UGFnZUJyZWFrQmVmb3JlLAorICAgIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5zaWRlLAor
ICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtBZnRlciwKKyAgICBDU1NQcm9wZXJ0eVdl
YmtpdFJlZ2lvbkJyZWFrQmVmb3JlLAorICAgIENTU1Byb3BlcnR5V2Via2l0UmVnaW9uQnJlYWtJ
bnNpZGUsCisgICAgQ1NTUHJvcGVydHlUZXh0QWxpZ24sCisgICAgQ1NTUHJvcGVydHlUZXh0SW5k
ZW50LAorICAgIENTU1Byb3BlcnR5V2lkb3dzCit9OworCitjb25zdCB1bnNpZ25lZCBudW1CbG9j
a1Byb3BlcnRpZXMgPSBXVEZfQVJSQVlfTEVOR1RIKGJsb2NrUHJvcGVydGllcyk7CisKK1Bhc3NS
ZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0eVNldDo6Y29weUJsb2NrUHJvcGVy
dGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvcHlQcm9wZXJ0aWVzSW5TZXQoYmxvY2tQcm9w
ZXJ0aWVzLCBudW1CbG9ja1Byb3BlcnRpZXMpOworfQorCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6
OnJlbW92ZUJsb2NrUHJvcGVydGllcygpCit7CisgICAgcmVtb3ZlUHJvcGVydGllc0luU2V0KGJs
b2NrUHJvcGVydGllcywgbnVtQmxvY2tQcm9wZXJ0aWVzKTsKK30KKworYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpyZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxl
bmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkKQoreworICAgIGlmIChtX3Byb3BlcnRpZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQorICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMp
OworI2VuZGlmCisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbHdheXMgdXNlZCB3aXRoIHN0YXRp
YyBzZXRzIGFuZCBpbiB0aGF0IGNhc2UgY29uc3RydWN0aW5nIHRoZSBoYXNoIHJlcGVhdGVkbHkg
aXMgcHJldHR5IHBvaW50bGVzcy4KKyAgICBIYXNoU2V0PGludD4gdG9SZW1vdmU7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICB0b1JlbW92ZS5hZGQo
c2V0W2ldKTsKKworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eSwgND4gbmV3UHJvcGVydGllczsKKyAg
ICBuZXdQcm9wZXJ0aWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9wcm9wZXJ0aWVzLnNpemUo
KSk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSA9IG1fcHJvcGVydGllc1tuXTsKKyAgICAgICAgLy8gTm90IHF1aXRlIHN1
cmUgaWYgdGhlIGlzSW1wb3J0YW50IHRlc3QgaXMgbmVlZGVkIGJ1dCBpdCBtYXRjaGVzIHRoZSBl
eGlzdGluZyBiZWhhdmlvci4KKyAgICAgICAgaWYgKCFwcm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7
CisgICAgICAgICAgICBpZiAodG9SZW1vdmUuY29udGFpbnMocHJvcGVydHkuaWQoKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbmV3UHJvcGVydGllcy5h
cHBlbmQocHJvcGVydHkpOworICAgIH0KKworICAgIGJvb2wgY2hhbmdlZCA9IG5ld1Byb3BlcnRp
ZXMuc2l6ZSgpICE9IG1fcHJvcGVydGllcy5zaXplKCk7CisgICAgbV9wcm9wZXJ0aWVzID0gbmV3
UHJvcGVydGllczsKKworICAgIGlmIChub3RpZnlDaGFuZ2VkKSB7CisjaWYgRU5BQkxFKE1VVEFU
SU9OX09CU0VSVkVSUykKKyAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNv
cmQoKTsKKyNlbmRpZgorICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2NvbnN0IENTU1Byb3BlcnR5KiBTdHlsZVByb3BlcnR5
U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpIGNvbnN0Cit7CisgICAgZm9y
IChpbnQgbiA9IG1fcHJvcGVydGllcy5zaXplKCkgLSAxIDsgbiA+PSAwOyAtLW4pIHsKKyAgICAg
ICAgaWYgKHByb3BlcnR5SUQgPT0gbV9wcm9wZXJ0aWVzW25dLm1faWQpCisgICAgICAgICAgICBy
ZXR1cm4gJm1fcHJvcGVydGllc1tuXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0NTU1By
b3BlcnR5KiBTdHlsZVByb3BlcnR5U2V0OjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5
SUQpCit7CisgICAgZm9yIChpbnQgbiA9IG1fcHJvcGVydGllcy5zaXplKCkgLSAxIDsgbiA+PSAw
OyAtLW4pIHsKKyAgICAgICAgaWYgKHByb3BlcnR5SUQgPT0gbV9wcm9wZXJ0aWVzW25dLm1faWQp
CisgICAgICAgICAgICByZXR1cm4gJm1fcHJvcGVydGllc1tuXTsKKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CisgICAgCitib29sIFN0eWxlUHJvcGVydHlTZXQ6OnByb3BlcnR5TWF0Y2hlcyhjb25z
dCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Cit7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHktPmlkKCkpOworICAgIHJldHVybiB2
YWx1ZSAmJiB2YWx1ZS0+Y3NzVGV4dCgpID09IHByb3BlcnR5LT52YWx1ZSgpLT5jc3NUZXh0KCk7
Cit9CisgICAgCit2b2lkIFN0eWxlUHJvcGVydHlTZXQ6OnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0
aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlKQoreworICAgIFZlY3RvcjxpbnQ+IHBy
b3BlcnRpZXNUb1JlbW92ZTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
Q1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW2ldOworICAgICAgICBpZiAoc3R5
bGUtPnByb3BlcnR5TWF0Y2hlcygmcHJvcGVydHkpKQorICAgICAgICAgICAgcHJvcGVydGllc1Rv
UmVtb3ZlLmFwcGVuZChwcm9wZXJ0eS5pZCgpKTsKKyAgICB9ICAgIAorICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2UgbWFzcyByZW1vdmFsLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbW92ZVByb3BlcnR5
KHByb3BlcnRpZXNUb1JlbW92ZVtpXSk7Cit9CisKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6cmVt
b3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUp
Cit7CisgICAgVmVjdG9yPGludD4gcHJvcGVydGllc1RvUmVtb3ZlOworICAgIHNpemVfdCBzaXpl
ID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRp
ZXNbaV07CisgICAgICAgIGlmIChzdHlsZS0+Y3NzUHJvcGVydHlNYXRjaGVzKCZwcm9wZXJ0eSkp
CisgICAgICAgICAgICBwcm9wZXJ0aWVzVG9SZW1vdmUuYXBwZW5kKHByb3BlcnR5LmlkKCkpOwor
ICAgIH0gICAgCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBtYXNzIHJlbW92YWwuCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnRpZXNUb1JlbW92ZS5zaXplKCk7ICsr
aSkKKyAgICAgICAgcmVtb3ZlUHJvcGVydHkocHJvcGVydGllc1RvUmVtb3ZlW2ldKTsKK30KKwor
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBTdHlsZVByb3BlcnR5U2V0Ojpjb3B5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUHJvcGVydHlTZXQoMCwgbV9wcm9w
ZXJ0aWVzKSk7Cit9CisKK1Bhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gU3R5bGVQcm9wZXJ0
eVNldDo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQgbGVuZ3Ro
KSBjb25zdAoreworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKKyAgICBsaXN0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGdldFByb3Bl
cnR5Q1NTVmFsdWUoc2V0W2ldKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbGlz
dC5hcHBlbmQoQ1NTUHJvcGVydHkoc2V0W2ldLCB2YWx1ZS5yZWxlYXNlKCksIGZhbHNlKSk7Cisg
ICAgfQorICAgIHJldHVybiBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUobGlzdCk7Cit9CisKK0NT
U1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlUHJvcGVydHlTZXQ6OmVuc3VyZUNTU1N0eWxlRGVjbGFy
YXRpb24oKSBjb25zdAoreworICAgIGlmICghbV9jc3NTdHlsZURlY2xhcmF0aW9uKQorICAgICAg
ICBtX2Nzc1N0eWxlRGVjbGFyYXRpb24gPSBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZShjb25zdF9jYXN0PFN0eWxlUHJvcGVydHlTZXQqPih0aGlzKSk7CisgICAgcmV0dXJu
IG1fY3NzU3R5bGVEZWNsYXJhdGlvbi5nZXQoKTsKK30KKwordW5zaWduZWQgUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3Bl
cnR5U2V0LT5wcm9wZXJ0eUNvdW50KCk7Cit9CisKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKK3sKKyAgICBpZiAoaSA+PSBtX3By
b3BlcnR5U2V0LT5wcm9wZXJ0eUNvdW50KCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1
cm4gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fcHJvcGVydHlT
ZXQtPnByb3BlcnR5QXQoaSkuaWQoKSkpOworfQorCitDU1NSdWxlKiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OnBhcmVudFJ1bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3Bl
cnR5U2V0LT5wYXJlbnRSdWxlSW50ZXJuYWwoKTsKK30KKworU3RyaW5nIFByb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVy
dHlTZXQtPmFzVGV4dCgpOworfQorICAgIAordm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBlYyA9IDA7CisgICAgLy8gRklYTUU6IERldGVjdCBzeW50YXggZXJyb3JzIGFuZCBz
ZXQgZWMuCisgICAgbV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0KTsKK30KKwor
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGludCBw
cm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOworICAgIGlmICghcHJvcGVy
dHlJRCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7Cit9CisKK1N0cmluZyBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nICZwcm9wZXJ0eU5h
bWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7
CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlJRCk7Cit9CisKK1N0
cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQ
cm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5SXNJbXBv
cnRhbnQocHJvcGVydHlJRCkgPyAiaW1wb3J0YW50IiA6ICIiOworfQorCitTdHJpbmcgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJp
bmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpbnQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXByb3BlcnR5SUQpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICBpbnQgc2hvcnRoYW5kSUQgPSBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eVNo
b3J0aGFuZChwcm9wZXJ0eUlEKTsKKyAgICBpZiAoIXNob3J0aGFuZElEKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGdldFByb3BlcnR5TmFtZShzdGF0aWNfY2FzdDxDU1NQ
cm9wZXJ0eUlEPihzaG9ydGhhbmRJRCkpOworfQorCitib29sIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
KQoreworICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwor
ICAgIGlmICghcHJvcGVydHlJRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3Byb3BlcnR5U2V0LT5pc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydHlJRCk7Cit9CisKK3ZvaWQg
UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBwcmlvcml0
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50IHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0
eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAgICAgICByZXR1cm47
CisgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxz
ZSkgIT0gbm90Rm91bmQ7CisgICAgZWMgPSAwOworICAgIG1fcHJvcGVydHlTZXQtPnNldFByb3Bl
cnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOworfQorCitTdHJpbmcgUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShjb25zdCBTdHJpbmcm
IHByb3BlcnR5TmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaW50IHByb3BlcnR5SUQg
PSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCFwcm9wZXJ0eUlEKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgZWMgPSAwOworICAgIHJldHVybiBtX3Byb3BlcnR5
U2V0LT5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlELCB0cnVlLCB0cnVlKTsKK30KKworUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlSW50ZXJuYWwoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreyAKKyAgICByZXR1
cm4gbV9wcm9wZXJ0eVNldC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsgCit9CisK
K1N0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5VmFsdWVJ
bnRlcm5hbChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCit7IAorICAgIHJldHVybiBtX3Byb3Bl
cnR5U2V0LT5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQpOyAKK30KKwordm9pZCBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5SW50ZXJuYWwoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7IAorICAgIGVjID0gMDsKKyAgICBtX3Byb3BlcnR5U2V0LT5zZXRQcm9w
ZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0YW50LCB0cnVlKTsKK30KKworQ1NTU3R5bGVT
aGVldCogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkg
Y29uc3QKK3sgCisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmNvbnRleHRTdHlsZVNoZWV0KCk7
IAorfQorCitQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJvcGVydHlTZXQtPmNv
cHkoKTsKK30KKworUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246Om1ha2VNdXRhYmxlKCkKK3sKKyAgICBBU1NFUlQobV9wcm9wZXJ0eVNl
dC0+bV9jc3NTdHlsZURlY2xhcmF0aW9uID09IHRoaXMgfHwgKCFtX3Byb3BlcnR5U2V0LT5tX2Nz
c1N0eWxlRGVjbGFyYXRpb24gJiYgbV9wcm9wZXJ0eVNldC0+aGFzT25lUmVmKCkpKTsKKyAgICBp
ZiAoIW1fcHJvcGVydHlTZXQtPm1fY3NzU3R5bGVEZWNsYXJhdGlvbikKKyAgICAgICAgbV9wcm9w
ZXJ0eVNldC0+bV9jc3NTdHlsZURlY2xhcmF0aW9uID0gdGhpczsKKyAgICByZXR1cm4gbV9wcm9w
ZXJ0eVNldDsKK30KKworYm9vbCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNzc1By
b3BlcnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSogcHJvcGVydHkpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJvcGVydHlTZXQtPnByb3BlcnR5TWF0Y2hlcyhwcm9wZXJ0eSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnR5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0
eVNldC5jcHAJKHJldmlzaW9uIDEwNjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVBy
b3BlcnR5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKIAogI2luY2x1ZGUgIkNTU0ltYWdlVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVByb3BlcnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydHlTZXQuaAkocmV2aXNpb24gMTA2NjgxKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc0IEBACisv
KgorICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbl9oCisjZGVmaW5l
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uX2gKKworI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1By
b3BlcnR5LmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb247CitjbGFzcyBTdHlsZWRFbGVtZW50OworCitjbGFzcyBTdHlsZVByb3BlcnR5U2V0
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgeworcHVibGljOgorICAgIH5TdHlsZVByb3Bl
cnR5U2V0KCk7CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0
KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY3JlYXRl
KENTU1J1bGUqIHBhcmVudFJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0eWxlUHJvcGVydHlTZXQocGFyZW50UnVsZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjcmVhdGUoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3Qg
Q1NTUHJvcGVydHkqIGNvbnN0KiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydGllcykKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVQcm9wZXJ0eVNldChwYXJlbnRSdWxl
LCBwcm9wZXJ0aWVzLCBudW1Qcm9wZXJ0aWVzKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNyZWF0ZShjb25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+JiBw
cm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3Bl
cnR5U2V0KDAsIHByb3BlcnRpZXMpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5
bGVQcm9wZXJ0eVNldD4gY3JlYXRlSW5saW5lKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCisgICAg
eyAKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVByb3BlcnR5U2V0KGVsZW1lbnQp
KTsKKyAgICB9CisKKyAgICB2b2lkIGRlcmVmKCk7CisKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUNv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLnNpemUoKTsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICBjb25z
dCBDU1NQcm9wZXJ0eSYgcHJvcGVydHlBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0aWVzW2luZGV4XTsgfQorCisgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJv
cGVydHlDU1NWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgU3RyaW5nIGdldFByb3Bl
cnR5VmFsdWUoaW50IHByb3BlcnR5SUQpIGNvbnN0OworICAgIGJvb2wgcHJvcGVydHlJc0ltcG9y
dGFudChpbnQgcHJvcGVydHlJRCkgY29uc3Q7CisgICAgaW50IGdldFByb3BlcnR5U2hvcnRoYW5k
KGludCBwcm9wZXJ0eUlEKSBjb25zdDsKKyAgICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChpbnQg
cHJvcGVydHlJRCkgY29uc3Q7CisKKyAgICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5
KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUpOyB9CisgICAgYm9vbCBzZXRQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHVuaXQsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpIHsgcmV0dXJuIHNldFByb3BlcnR5
KHByb3BlcnR5SWQsIHZhbHVlLCB1bml0LCBpbXBvcnRhbnQsIHRydWUpOyB9CisgICAgYm9vbCBz
ZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQgPSBmYWxzZSkgeyByZXR1cm4gc2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGlt
cG9ydGFudCwgdHJ1ZSk7IH0KKyAgICB2b2lkIHNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5
JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKKyAgICAKKyAgICB2b2lkIHJlbW92ZVByb3BlcnR5
KGludCBwcm9wZXJ0eUlEKSB7IHJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQsIHRydWUsIGZhbHNl
KTsgfQorICAgIFN0cmluZyByZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3Rp
ZnlDaGFuZ2VkLCBib29sIHJldHVyblRleHQpOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBwYXJz
ZXMgYW4gZW50aXJlIG5ldyBzdHlsZSBkZWNsYXJhdGlvbi4KKyAgICB2b2lkIHBhcnNlRGVjbGFy
YXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uKTsKKworICAgIC8vIEJlc2lkZXMg
YWRkaW5nIHRoZSBwcm9wZXJ0aWVzLCB0aGlzIGFsc28gcmVtb3ZlcyBhbnkgZXhpc3RpbmcgcHJv
cGVydGllcyB3aXRoIHRoZXNlIElEcy4KKyAgICAvLyBJdCBkb2VzIG5vIG5vdGlmaWNhdGlvbiBz
aW5jZSBpdCdzIGNhbGxlZCBieSB0aGUgcGFyc2VyLgorICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVy
dGllcyhjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOworICAg
IC8vIFRoaXMgZG9lcyBubyBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBzaW5jZSBpdCdzIG9ubHkgY2Fs
bGVkIGJ5IGNyZWF0ZU1hcmt1cC4KKyAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENT
U1Byb3BlcnR5Jik7CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlCbG9j
a1Byb3BlcnRpZXMoKSBjb25zdDsKKyAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwor
ICAgIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIHsgcmVtb3ZlUHJvcGVydGllc0luU2V0KHNldCwgbGVuZ3RoLCB0cnVlKTsgfQorCisg
ICAgdm9pZCBtZXJnZShjb25zdCBTdHlsZVByb3BlcnR5U2V0KiwgYm9vbCBhcmdPdmVycmlkZXNP
bkNvbmZsaWN0ID0gdHJ1ZSk7CisKKyAgICB2b2lkIHNldFN0cmljdFBhcnNpbmcoYm9vbCBiKSB7
IG1fc3RyaWN0UGFyc2luZyA9IGI7IH0KKyAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25z
dCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KKyAgICBib29sIGlzSW5saW5lU3R5bGVEZWNs
YXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbmxpbmVTdHlsZURlY2xhcmF0aW9uOyB9CisK
KyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jik7CisK
KyAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHkoKSBjb25zdDsKKyAgICAvLyBV
c2VkIGJ5IFN0eWxlZEVsZW1lbnQ6OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKCkuCisgICAg
dm9pZCBjb3B5UHJvcGVydGllc0Zyb20oY29uc3QgU3R5bGVQcm9wZXJ0eVNldCYpOworCisgICAg
dm9pZCByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnR5U2V0Kik7
CisgICAgdm9pZCByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhjb25zdCBDU1NTdHlsZURlY2xh
cmF0aW9uKik7CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IGNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CisKKyAgICBD
U1NSdWxlKiBwYXJlbnRSdWxlSW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBtX2lzSW5saW5lU3R5
bGVEZWNsYXJhdGlvbiA/IDAgOiBtX3BhcmVudC5ydWxlOyB9CisgICAgdm9pZCBjbGVhclBhcmVu
dFJ1bGUoKSB7IEFTU0VSVCghbV9pc0lubGluZVN0eWxlRGVjbGFyYXRpb24pOyBtX3BhcmVudC5y
dWxlID0gMDsgfQorICAgIAorICAgIFN0eWxlZEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25z
dCB7IEFTU0VSVChtX2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbik7IHJldHVybiBtX3BhcmVudC5l
bGVtZW50OyB9CisgICAgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSB7IEFTU0VSVChtX2lzSW5s
aW5lU3R5bGVEZWNsYXJhdGlvbik7IG1fcGFyZW50LmVsZW1lbnQgPSAwOyB9CisgICAgCisgICAg
Q1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICAKKyAgICBTdHJp
bmcgYXNUZXh0KCkgY29uc3Q7CisgICAgCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZW5zdXJl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFN0eWxlUHJvcGVy
dHlTZXQoKTsKKyAgICBTdHlsZVByb3BlcnR5U2V0KENTU1J1bGUqIHBhcmVudFJ1bGUpOworICAg
IFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgVmVjdG9yPENTU1By
b3BlcnR5PiYpOworICAgIFN0eWxlUHJvcGVydHlTZXQoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29u
c3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKKyAgICBTdHlsZVBy
b3BlcnR5U2V0KFN0eWxlZEVsZW1lbnQqKTsKKworICAgIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworCisgICAgU3RyaW5nIGdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGll
cywgc2l6ZV90KSBjb25zdDsKKyAgICBTdHJpbmcgZ2V0Q29tbW9uVmFsdWUoY29uc3QgaW50KiBw
cm9wZXJ0aWVzLCBzaXplX3QpIGNvbnN0OworICAgIFN0cmluZyBnZXRMYXllcmVkU2hvcnRoYW5k
VmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBzaXplX3QpIGNvbnN0OworICAgIFN0cmluZyBn
ZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3Q7CisgICAgU3RyaW5nIGJvcmRl
clNwYWNpbmdWYWx1ZShjb25zdCBpbnQgcHJvcGVydGllc1syXSkgY29uc3Q7CisgICAgU3RyaW5n
IGZvbnRWYWx1ZSgpIGNvbnN0OworICAgIGJvb2wgYXBwZW5kRm9udExvbmdoYW5kVmFsdWVJZkV4
cGxpY2l0KGludCBwcm9wZXJ0eUlELCBTdHJpbmdCdWlsZGVyJiByZXN1bHQpIGNvbnN0OworCisg
ICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IFN0cmluZyBnZXRTaG9ydGhhbmRWYWx1ZShjb25zdCBp
bnQgKCZwcm9wZXJ0aWVzKVtzaXplXSkgY29uc3QgeyByZXR1cm4gZ2V0U2hvcnRoYW5kVmFsdWUo
cHJvcGVydGllcywgc2l6ZSk7IH0KKyAgICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gU3RyaW5nIGdl
dENvbW1vblZhbHVlKGNvbnN0IGludCAoJnByb3BlcnRpZXMpW3NpemVdKSBjb25zdCB7IHJldHVy
biBnZXRDb21tb25WYWx1ZShwcm9wZXJ0aWVzLCBzaXplKTsgfQorICAgIHRlbXBsYXRlPHNpemVf
dCBzaXplPiBTdHJpbmcgZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCAoJnByb3Bl
cnRpZXMpW3NpemVdKSBjb25zdCB7IHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJv
cGVydGllcywgc2l6ZSk7IH0KKworICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgbm90aWZ5Q2hhbmdlZCk7CisgICAgYm9v
bCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKKyAg
ICBib29sIHNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlLCBi
b29sIGltcG9ydGFudCwgYm9vbCBub3RpZnlDaGFuZ2VkKTsKKyAgICBib29sIHJlbW92ZVNob3J0
aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOworICAgIGJv
b2wgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgbm90aWZ5Q2hhbmdlZCk7CisgICAgYm9vbCBwcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NT
UHJvcGVydHkqKSBjb25zdDsKKworICAgIGNvbnN0IENTU1Byb3BlcnR5KiBmaW5kUHJvcGVydHlX
aXRoSWQoaW50IHByb3BlcnR5SWQpIGNvbnN0OworICAgIENTU1Byb3BlcnR5KiBmaW5kUHJvcGVy
dHlXaXRoSWQoaW50IHByb3BlcnR5SWQpOworCisgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBt
X3Byb3BlcnRpZXM7CisKKyAgICBib29sIG1fc3RyaWN0UGFyc2luZyA6IDE7CisgICAgYm9vbCBt
X2lzSW5saW5lU3R5bGVEZWNsYXJhdGlvbiA6IDE7CisKKyAgICB1bmlvbiBQYXJlbnQgeworICAg
ICAgICBQYXJlbnQoQ1NTUnVsZSogcnVsZSkgOiBydWxlKHJ1bGUpIHsgfQorICAgICAgICBQYXJl
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpIHsgfQorICAgICAg
ICBDU1NSdWxlKiBydWxlOworICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50OworICAgIH0g
bV9wYXJlbnQ7CisgICAgCisgICAgbXV0YWJsZSBSZWZQdHI8UHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uPiBtX2Nzc1N0eWxlRGVjbGFyYXRpb247CisgICAgCisgICAgZnJpZW5kIGNsYXNz
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAkocmV2aXNpb24gMTA2Njc4KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgs
OCArMTgsOCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRl
ZiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbl9oCi0jZGVmaW5lIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uX2gKKyNpZm5kZWYgU3R5bGVQcm9wZXJ0eVNldF9oCisjZGVmaW5lIFN0eWxlUHJv
cGVydHlTZXRfaAogCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCkBAIC0xNzEsNCArMTcxLDQgQEAgcHJpdmF0ZToKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25faAorI2VuZGlmIC8vIFN0eWxlUHJvcGVydHlTZXRfaApJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmgiCiAKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCShy
ZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlX2gKICNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gKIAotI2luY2x1
ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgor
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU0tleWZyYW1lc1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkocmV2aXNpb24gMTA2Njc4KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5oIgogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDEwIEBA
CiAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
Ci0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmgJKHJl
dmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSw5IEBACiAjaWZuZGVmIENT
U01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uX2gKICNkZWZpbmUgQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb25faAogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIK
ICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGVFbnRyeS5oIgogI2luY2x1ZGUgIlF1YWxpZmllZE5h
bWUuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgJKHJl
dmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVmIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhX2gKICNkZWZpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGFfaAogCi0jaW5jbHVkZSAi
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJTcGFjZVNwbGl0U3RyaW5n
LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNjY4
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKIAogI2luY2x1
ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0zNiw2ICszNSw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoRnVuY3Rpb25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9TdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDkgQEAK
ICNpZm5kZWYgU3R5bGVkRWxlbWVudF9oCiAjZGVmaW5lIFN0eWxlZEVsZW1lbnRfaAogCi0jaW5j
bHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlRW50cnkuaCIKKyNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKIAogI2lu
Y2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAi
Q1NTUHJvcGVydHkuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC00NSw2ICs0
NCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2lu
Y2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw2IEBACiAjaW5jbHVkZSAiRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIgogCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5o
IgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKQEAgLTQ2LDYgKzQ1LDcgQEAK
ICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAi
QXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUg
IkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlU2VsZWN0b3IuaCIKQEAgLTQ0LDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1h
bmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRl
ICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5Lmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0
b3IuaCIKQEAgLTc4LDYgKzc3LDcgQEAKICNpbmNsdWRlICJTb3VuZC5oIgogI2luY2x1ZGUgIlNw
ZWxsQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCIKKyNp
bmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEw
NjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJFZGl0b3IuaCIKIAogI2luY2x1
ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKQEAgLTU1
LDYgKzU0LDcgQEAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlNvdW5kLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2lu
Y2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKICNpbmNsdWRlICJVbmxpbmtDb21tYW5kLmgiCiAjaW5j
bHVkZSAiVXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oIgogCi0jaW5jbHVkZSAi
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDEwNjY4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNsdWRlICJCcmVha0Js
b2NrcXVvdGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlNtYXJ0UmVwbGFjZS5oIgor
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTA2NjgxKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAK
ICNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAi
TWFya3VwQWNjdW11bGF0b3IuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiWE1M
TlNOYW1lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCkBAIC02MCw2ICs1
OSw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlN0cm9rZVN0eWxlQXBwbGllci5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVy
dHlTZXQuaCIKICNpbmNsdWRlICJUZXh0TWV0cmljcy5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWV0ZXJTaGFkb3dFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZXRlclNoYWRvd0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDY2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZXRlclNoYWRvd0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIg
QEAKICNpZiBFTkFCTEUoTUVURVJfVEFHKQogI2luY2x1ZGUgIk1ldGVyU2hhZG93RWxlbWVudC5o
IgogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE1ldGVyRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlck1ldGVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJD
U1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgpAQCAtNDUsNiArNDQsNyBAQAogI2luY2x1
ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiU3R5
bGVTaGVldExpc3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lv
biAxMDY2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw2IEBACiAKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5o
IgpAQCAtNzksNiArNzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3R5bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNldC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA2NjgxKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogCiAjaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1BvbGljeS5o
IgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCkBAIC02NCw2ICs2Myw3IEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNp
bmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiaHRtbGVk
aXRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMDY2NzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NiBAQAogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNo
ZWRDU1NTdHlsZVNoZWV0LmgiCkBAIC04MCw2ICs3OSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U291
cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlVzZXJDb250
ZW50VVJMUGF0dGVybi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkNvbHVtbkluZm8uaCIKLSNpbmNsdWRlICJDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC05
MCw2ICs4OSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBoaWMuaCIKKyNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2V0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShy
ZXZpc2lvbiAxMDY2ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAKLSNpbmNsdWRlICJDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgpAQCAtNDgsNiArNDcsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCiAj
aW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RmFjZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZh
Y2VFbGVtZW50LmgJKHJldmlzaW9uIDEwNjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NGb250RmFjZVJ1bGU7Ci1jbGFzcyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIFNWR0ZvbnRFbGVtZW50OwogCiBjbGFzcyBTVkdGb250
RmFjZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7Cg==
</data>
<flag name="review"
          id="126912"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>