<?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>70410</bug_id>
          
          <creation_ts>2011-10-19 05:12:26 -0700</creation_ts>
          <short_desc>Strip trailing whitespace in the WebCore/css C++ code</short_desc>
          <delta_ts>2011-10-19 16:47:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>eric</cc>
    
    <cc>macpherson</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486687</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-19 05:12:26 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486688</commentid>
    <comment_count>1</comment_count>
      <attachid>111594</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-19 05:13:59 -0700</bug_when>
    <thetext>Created attachment 111594
[PATCH] Suggested fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486692</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 05:17:35 -0700</bug_when>
    <thetext>Attachment 111594 did not pass style-queue:

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

Source/WebCore/css/CSSStyleSelector.cpp:1625:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2573:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSStyleSelector.cpp:2580:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSParser.cpp:5688:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/CSSParser.cpp:5715:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/css/MediaQueryExp.h:60:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 7 in 90 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>486697</commentid>
    <comment_count>3</comment_count>
      <attachid>111598</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-19 05:22:24 -0700</bug_when>
    <thetext>Created attachment 111598
[PATCH] Multiline boolean expressions fixed where necessary to avoid style violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486698</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 05:25:56 -0700</bug_when>
    <thetext>Attachment 111598 did not pass style-queue:

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

Source/WebCore/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 90 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>486699</commentid>
    <comment_count>5</comment_count>
      <attachid>111599</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-19 05:26:19 -0700</bug_when>
    <thetext>Created attachment 111599
[PATCH] Tab removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486720</commentid>
    <comment_count>6</comment_count>
      <attachid>111599</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 06:20:05 -0700</bug_when>
    <thetext>Comment on attachment 111599
[PATCH] Tab removed

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486728</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-10-19 06:30:40 -0700</bug_when>
    <thetext>Committed r97854: &lt;http://trac.webkit.org/changeset/97854&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487124</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-10-19 16:37:43 -0700</bug_when>
    <thetext>I&apos;m surprised that such a far-reaching change was not announced (or discussed) on webkit-dev first. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487127</commentid>
    <comment_count>9</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-10-19 16:42:33 -0700</bug_when>
    <thetext>Way to break all my outstanding patches. Thanks guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487133</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-10-19 16:47:32 -0700</bug_when>
    <thetext>I would encourage you to use webkit-patch apply-attachment --non-interactive, or simply roll back to a revision before this change, apply your patch, and then let git rebase do the right thing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111594</attachid>
            <date>2011-10-19 05:13:59 -0700</date>
            <delta_ts>2011-10-19 05:22:24 -0700</delta_ts>
            <desc>[PATCH] Suggested fix</desc>
            <filename>csswhitespace.patch</filename>
            <type>text/plain</type>
            <size>233588</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDU3NmQwY2ZlMDZmMWI4MjVlYjQzOTE5NzI0OGQxODBiOTg2YWY0MDgKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBXZWQgT2N0IDE5
IDEzOjA3OjM4IDIwMTEgKzA0MDAKCiAgICBGaXgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZlNDRhYS4uNjkw
ZDRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDExLTEwLTE5ICBBbGV4YW5kZXIg
UGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgc3Ry
aXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiB0aGUgY3NzLyBDKysgY29kZS4KKworCU9ubHkgYWZm
ZWN0ZWQgZmlsZSBuYW1lcyByZXRhaW5lZCBiZWxvdyBmb3IgYnJldml0eS4KKworICAgICAgICAq
IGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5j
cHA6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NT
Q2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgICog
Y3NzL0NTU0ZvbnRGYWNlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2UuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250RmFj
ZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcDoKKyAgICAg
ICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBj
c3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NT
U0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5j
cHA6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaDoKKyAgICAgICAgKiBj
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5jcHA6CisgICAgICAgICogY3NzL0NTU0luaXRpYWxW
YWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNz
cy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgICogY3NzL0NTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oOgorICAg
ICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWVDYWNoZS5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZU1h
cHBpbmdzLmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5LmNwcDoKKyAgICAgICAgKiBjc3Mv
Q1NTUHJvcGVydHkuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlMb25naGFuZC5jcHA6Cisg
ICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1JlZmxl
Y3RWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmg6CisgICAg
ICAgICogY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAg
ICAqIGNzcy9DU1NTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvckxpc3QuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvckxpc3QuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVBcHBseVByb3BlcnR5LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5o
OgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAg
ICAgKiBjc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAqIGNzcy9DU1NXcmFwU2hhcGVzLmNwcDoKKyAg
ICAgICAgKiBjc3MvQ1NTV3JhcFNoYXBlcy5oOgorICAgICAgICAqIGNzcy9Gb250VmFsdWUuY3Bw
OgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5
LmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeS5oOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmg6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlFeHAuY3BwOgorICAgICAg
ICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6CisgICAgICAgICogY3NzL1BhaXIuaDoKKyAgICAgICAg
KiBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKiBjc3Mv
U1ZHQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6
CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5oOgorICAgICAgICAqIGNzcy9TdHlsZUJhc2UuY3BwOgorICAgICAgICAqIGNz
cy9TdHlsZU1lZGlhLmNwcDoKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5oOgorICAgICAgICAq
IGNzcy9TdHlsZVNoZWV0TGlzdC5jcHA6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRMaXN0Lmg6
CisgICAgICAgICogY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3Mv
V2ViS2l0Q1NTRmlsdGVyVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg6CisgICAgICAg
ICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAqIGNzcy9XZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmg6CisgICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5jcHA6Cisg
ICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5oOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHA6CisgICAgICAgICogY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVl
Lmg6CisKIDIwMTEtMTAtMTkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAg
ICAgICAgIE1lZGlhTGlzdDogUmVtb3ZlIGluaGVyaXRhbmNlIGZyb20gU3R5bGVCYXNlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcAppbmRleCAx
NWZkOTM5Li5iY2UzMGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC00NSw3ICs0NSw3IEBAIFN0cmluZyBDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWU6OmNzc1RleHQoKSBjb25zdAogewogICAgIC8vIER1bXAgdGhlIHNsaWNl
cyBmaXJzdC4KICAgICBTdHJpbmcgdGV4dCA9IG1fc2xpY2VzLT5jc3NUZXh0KCk7Ci0gICAgCisK
ICAgICAvLyBOb3cgdGhlIGZpbGwga2V5d29yZHMgaWYgaXQgaXMgcHJlc2VudC4KICAgICBpZiAo
bV9maWxsKQogICAgICAgICB0ZXh0ICs9ICIgZmlsbCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgKaW5kZXggZDc0ZWFkNy4uYzZhZGJhYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKaW5k
ZXggYjc3ODhmNy4uODI1ZDBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jv
cmRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFn
ZVZhbHVlLmNwcApAQCAtNDQsNyArNDQsNyBAQCBTdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6
Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgLy8gSW1hZ2UgZmlyc3QuCiAgICAgU3RyaW5nIHRleHQ7
Ci0gICAgCisKICAgICBpZiAobV9pbWFnZSkKICAgICAgICAgdGV4dCArPSBtX2ltYWdlLT5jc3NU
ZXh0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDM0NzM5NjMu
Ljc2ZTc3ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCmluZGV4IDI3YjhmMmIuLjZmMzg5ODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpZm5kZWYgQ1NTQ2FudmFzVmFsdWVfaApAQCAtNTcsNyArNTcsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQq
KTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KERvY3VtZW50Kik7Ci0gICAgIAor
CiAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNhbnZhcy4KICAgICBTdHJpbmcgbV9uYW1lOwogICAg
IC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUgZWxlbWVudCBhbmQgb3ducyBpdC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5k
ZXggNzc2OGZmMy4uZDA4NWFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTM1MCw4ICszNTAsOCBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VT
bGljZShjb25zdCBOaQogICAgICAgICB0b3AgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVW
YWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgZWxzZQogICAgICAgICB0b3AgPSBwcmltaXRpdmVWYWx1
ZUNhY2hlLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLnZhbHVlKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAKLSAgICBpZiAoaW1hZ2UuaW1hZ2VT
bGljZXMoKS5yaWdodCgpID09IGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkgJiYgaW1hZ2UuaW1h
Z2VTbGljZXMoKS5ib3R0b20oKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpIAorCisgICAg
aWYgKGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRv
cCgpICYmIGltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9tKCkgPT0gaW1hZ2UuaW1hZ2VTbGljZXMo
KS50b3AoKQogICAgICAgICAmJiBpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSA9PSBpbWFnZS5p
bWFnZVNsaWNlcygpLnRvcCgpKSB7CiAgICAgICAgIHJpZ2h0ID0gdG9wOwogICAgICAgICBib3R0
b20gPSB0b3A7CkBAIC0zNjEsNyArMzYxLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAg
ICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2Uu
aW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFs
dWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
IGlmIChpbWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpID09IGltYWdlLmltYWdlU2xpY2VzKCku
dG9wKCkgJiYgaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpID09IGltYWdlLmltYWdlU2xpY2Vz
KCkubGVmdCgpKSB7CiAgICAgICAgICAgICBib3R0b20gPSB0b3A7CiAgICAgICAgICAgICBsZWZ0
ID0gcmlnaHQ7CkBAIC0zNzAsNyArMzcwLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAg
ICAgICAgICAgICAgICBib3R0b20gPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShp
bWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm90dG9t
ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5i
b3R0b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpID09IGlt
YWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7
CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoY29uc3QgTGVu
Z3RoQm94JgogICAgICAgICAgICAgcmlnaHQgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVW
YWx1ZShib3gucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlVmFsdWUoYm94LnJpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm94LmJv
dHRvbSgpID09IGJveC50b3AoKSAmJiBib3gucmlnaHQoKSA9PSBib3gubGVmdCgpKSB7CiAgICAg
ICAgICAgICBib3R0b20gPSB0b3A7CiAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CkBAIC00MjIs
NyArNDIyLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9y
TmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEJveCYKICAgICAgICAgICAgICAgICBib3R0
b20gPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkudmFsdWUo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGJvdHRvbSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKGJv
eC5ib3R0b20oKSk7Ci0gICAgCisKICAgICAgICAgICAgIGlmIChib3gubGVmdCgpID09IGJveC5y
aWdodCgpKQogICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgICAgIGVsc2Ug
ewpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZv
ck5pbmVQaWVjZUltYWdlUmVwZWF0KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpCiB7CiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsUmVwZWF0OwogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmVydGljYWxSZXBlYXQ7Ci0gICAgCisKICAgICBob3Jpem9udGFsUmVw
ZWF0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlRm9y
UmVwZWF0UnVsZShpbWFnZS5ob3Jpem9udGFsUnVsZSgpKSk7CiAgICAgaWYgKGltYWdlLmhvcml6
b250YWxSdWxlKCkgPT0gaW1hZ2UudmVydGljYWxSdWxlKCkpCiAgICAgICAgIHZlcnRpY2FsUmVw
ZWF0ID0gaG9yaXpvbnRhbFJlcGVhdDsKQEAgLTQ2MCwxNSArNDYwLDE1IEBAIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiBpbWFnZSwKIHsKICAgICBpZiAoIWltYWdlLmhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVy
biBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KTsKLSAgICAKKwogICAgIC8vIEltYWdlIGZpcnN0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1h
Z2VWYWx1ZTsKICAgICBpZiAoaW1hZ2UuaW1hZ2UoKSkKICAgICAgICAgaW1hZ2VWYWx1ZSA9IGlt
YWdlLmltYWdlKCktPmNzc1ZhbHVlKCk7Ci0gICAgCisKICAgICAvLyBDcmVhdGUgdGhlIGltYWdl
IHNsaWNlLgogICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IGltYWdlU2xpY2Vz
ID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGltYWdlLCBwcmltaXRpdmVWYWx1ZUNhY2hl
KTsKLSAgICAKKwogICAgIC8vIENyZWF0ZSB0aGUgYm9yZGVyIGFyZWEgc2xpY2VzLgogICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gYm9yZGVyU2xpY2VzID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQo
aW1hZ2UuYm9yZGVyU2xpY2VzKCksIHByaW1pdGl2ZVZhbHVlQ2FjaGUpOwogCkBAIC01MDgsNyAr
NTA4LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yUmVmbGVjdGlvbihj
b25zdCBTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24KICAgICAgICAgb2Zmc2V0ID0gcHJpbWl0
aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCkucGVyY2VudCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UKICAgICAgICAg
b2Zmc2V0ID0gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS52YWx1
ZSgpLCBzdHlsZSwgcHJpbWl0aXZlVmFsdWVDYWNoZSk7Ci0gICAgCisKICAgICByZXR1cm4gQ1NT
UmVmbGVjdFZhbHVlOjpjcmVhdGUocmVmbGVjdGlvbi0+ZGlyZWN0aW9uKCksIG9mZnNldC5yZWxl
YXNlKCksIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2UocmVmbGVjdGlvbi0+bWFzaygpLCBwcmltaXRp
dmVWYWx1ZUNhY2hlKSk7CiB9CiAKQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgTGF5b3V0UmVj
dCBzaXppbmdCb3goUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVy
LT5pc0JveCgpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIAorCiAgICAgUmVu
ZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7CiAgICAgcmV0dXJuIGJveC0+c3R5
bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3gtPmNvbnRlbnRCb3hSZWN0KCkg
OiBib3gtPmJvcmRlckJveFJlY3QoKTsKIH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgUmVuZAogewogICAgIGlmICghcmVuZGVyZXIgfHwgc3R5bGUtPnRyYW5zZm9ybSgp
Lm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNh
Y2hlLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAKKwogICAgIElu
dFJlY3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybTsKQEAgLTY1MCwxMSArNjUwLDExIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBjb21wdXRlZEZpbHRlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTCiB7CiAgICAgaWYgKCFyZW5kZXJlciB8fCBzdHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9ucygp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgIAorCiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKIAogICAg
IFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWU7Ci0gICAgCisKICAgICBW
ZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5
bGUtPmZpbHRlcigpLm9wZXJhdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5maWx0ZXIoKS5v
cGVyYXRpb25zKCkuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZpbHRlck9w
ZXJhdGlvbiogZmlsdGVyT3BlcmF0aW9uID0gKCppdCkuZ2V0KCk7CkBAIC03MzAsNyArNzMwLDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkRmlsdGVyKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclMKICAgICAgICAgfQogICAgICAgICBsaXN0LT5hcHBl
bmQoZmlsdGVyVmFsdWUpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKIH0KICNlbmRpZgpAQCAtODUxLDcgKzg1MSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdL
CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZSht
X3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVy
biAwOwotICAgIAorCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSogcHJpbWl0aXZlVmFsdWVD
YWNoZSA9IG1fbm9kZS0+ZG9jdW1lbnQoKS0+Y3NzUHJpbWl0aXZlVmFsdWVDYWNoZSgpLmdldCgp
OwogCiAgICAgaWYgKGludCBrZXl3b3JkU2l6ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5r
ZXl3b3JkU2l6ZSgpKQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBs
ZW1lbnRlZFByb3BlcnR5SUQoaW50IHByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IExPR19FUlJPUigiV2ViS2l0IGRvZXMgbm90IHlldCBpbXBsZW1lbnQgZ2V0Q29tcHV0ZWRTdHls
ZSBmb3IgJyVzJy4iLCBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4o
cHJvcGVydHlJRCkpKTsKLX0gCit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Zm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ByaW1pdGl2ZVZhbHVl
Q2FjaGUqIHByaW1pdGl2ZVZhbHVlQ2FjaGUpCiB7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWUoaW50IHByb3BlcgogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCisKICAgICBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBwcmltaXRpdmVWYWx1ZUNhY2hl
ID0gbm9kZS0+ZG9jdW1lbnQoKS0+Y3NzUHJpbWl0aXZlVmFsdWVDYWNoZSgpLmdldCgpOwogCiAg
ICAgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0
eShwcm9wZXJ0eUlELCBzdHlsZS0+ZGlyZWN0aW9uKCksIHN0eWxlLT53cml0aW5nTW9kZSgpKTsK
QEAgLTEyMDQsNyArMTIwNCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgICAg
ICAgICAgRUZpbGxCb3ggYm94ID0gaXNDbGlwID8gbGF5ZXJzLT5jbGlwKCkgOiBsYXllcnMtPm9y
aWdpbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVh
dGVWYWx1ZShib3gpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0g
bGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKSB7CiAgICAg
ICAgICAgICAgICAgRUZpbGxCb3ggYm94ID0gaXNDbGlwID8gY3VyckxheWVyLT5jbGlwKCkgOiBj
dXJyTGF5ZXItPm9yaWdpbigpOwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXIKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KHN0eWxlLT5ob3Jpem9udGFsQm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZl
VmFsdWVDYWNoZSkpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc3R5bGUtPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgcHJpbWl0
aXZlVmFsdWVDYWNoZSkpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwotICAg
ICAgICB9ICAKKyAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
SG9yaXpvbnRhbFNwYWNpbmc6CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZShzdHlsZS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIHByaW1p
dGl2ZVZhbHVlQ2FjaGUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVy
dGljYWxTcGFjaW5nOgpAQCAtMTg4Nyw3ICsxODg3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9w
ZXIKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKSwg
c3R5bGUuZ2V0KCksIHByaW1pdGl2ZVZhbHVlQ2FjaGUpKTsKICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3Rp
dmVPcmlnaW5ZKCksIHN0eWxlLmdldCgpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKSk7Ci0gICAgICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKICAgICAgICAgfQpAQCAtMTg5Niw3ICsxODk2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBw
cm9wZXIKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9y
T3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+dGFwSGlnaGxpZ2h0Q29sb3IoKSk7Ci0j
ZW5kaWYgICAgICAgICAgICAKKyNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VXNlckRyYWc6CiAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRl
VmFsdWUoc3R5bGUtPnVzZXJEcmFnKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VXNlclNlbGVjdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFn
ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcApp
bmRleCBkYjkyYTc1Li4yNGVmOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuY3BwCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwogICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovIAorICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCkBAIC0xMTYs
NyArMTE2LDcgQEAgU3R5bGVDYWNoZWRJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVk
SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBTdHJpbmcgdXJsID0g
Z2V0U3RyaW5nVmFsdWUoKTsKIAotI2lmIEVOQUJMRShTVkcpIAorI2lmIEVOQUJMRShTVkcpCiAg
ICAgaWYgKGlzU1ZHQ3Vyc29ySWRlbnRpZmllcih1cmwpICYmIGxvYWRlciAmJiBsb2FkZXItPmRv
Y3VtZW50KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBmYWlsIGlmIHRoZSA8Y3Vy
c29yPiBlbGVtZW50IGlzIGluIGEgc2hhZG93IERPTSAoYnVnIDU5ODI3KQogICAgICAgICBpZiAo
U1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vy
c29yRWxlbWVudCh1cmwsIGxvYWRlci0+ZG9jdW1lbnQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlLmNwcAppbmRleCAyYzUwYTA0Li43YjFiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAppbmRleCA1NWUwNDhjLi44NTAyM2Ez
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0ZvbnRGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTb3VyY2UuY3BwCmluZGV4IDk3MDE4OWEuLjVkMWIxMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yMTUsOCArMjE1LDggQEAgU1ZH
Rm9udEZhY2VFbGVtZW50KiBDU1NGb250RmFjZVNvdXJjZTo6c3ZnRm9udEZhY2VFbGVtZW50KCkg
Y29uc3QKICAgICByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7CiB9CiAKLXZvaWQg
Q1NTRm9udEZhY2VTb3VyY2U6OnNldFNWR0ZvbnRGYWNlRWxlbWVudChQYXNzUmVmUHRyPFNWR0Zv
bnRGYWNlRWxlbWVudD4gZWxlbWVudCkgCi17IAordm9pZCBDU1NGb250RmFjZVNvdXJjZTo6c2V0
U1ZHRm9udEZhY2VFbGVtZW50KFBhc3NSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBlbGVtZW50
KQorewogICAgIG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZWxlbWVudDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAppbmRleCA3MDNkYWViLi45OWRiNTkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0ZvbnRGYWNlU291cmNlX2gKQEAgLTU4LDkgKzU4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Rm9udEZhY2UoQ1NTRm9udEZhY2UqIGZhY2UpIHsg
bV9mYWNlID0gZmFjZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9u
dCopOwotICAgIAorCiAgICAgU2ltcGxlRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENT
U0ZvbnRTZWxlY3RvciopOwotICAgIAorCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU3JjVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUu
Y3BwCmluZGV4IDAzZWRiY2IuLjViNGMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU3JjVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmgKaW5kZXggYTZjOGJiOS4uYmFlZmI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpZm5kZWYgQ1NTRm9udEZhY2VTcmNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCmluZGV4IDU2NjVmMWQuLjU4ZTIxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAppbmRl
eCA2MWJhYTlmLi5lN2VhMDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBA
IC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTRm9udFNl
bGVjdG9yX2gKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNTU0ZvbnRT
ZWxlY3RvcigpOwogCiAgICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
TmFtZSk7Ci0gICAgCisKICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKSB7IG1fZG9jdW1lbnQgPSAw
OyB9CiAKICAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShjb25zdCBDU1NGb250RmFjZVJ1bGUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcAppbmRleCA1MmEyOTUzLi5kMzNm
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCkBAIC0yMCw3ICsy
MCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCmluZGV4IGJlMzgyMDYuLjBhMTg3YTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0Z1bmN0aW9uVmFsdWVfaApAQCAtNDEsMTIgKzQx
LDEyIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIH5DU1NGdW5jdGlvblZhbHVlKCk7
Ci0gICAgCisKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgQ1NTRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJGdW5jdGlvbiopOwotICAg
IAorCiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBtX2FyZ3M7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDI2NmU0ZTku
LmNkYTE0ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTIw
LDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtNTYsNyArNTYsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFn
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJgogICAgICAgICBpZiAocmVz
dWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICAvLyBX
ZSBuZWVkIHRvIGNyZWF0ZSBhbiBpbWFnZS4KICAgICBSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlID0g
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShjcmVhdGVHcmFkaWVudChyZW5kZXJlciwgc2l6ZSksIHNp
emUpOwogICAgIGlmIChjYWNoZWFibGUpCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjb21wYXJlU3RvcHMoY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNvbnN0IENT
U0dyYWRpZW50CiB7CiAgICAgZG91YmxlIGFWYWwgPSBhLm1fcG9zaXRpb24tPmdldERvdWJsZVZh
bHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICBkb3VibGUgYlZhbCA9IGIu
bV9wb3NpdGlvbi0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
OwotICAgIAorCiAgICAgcmV0dXJuIGFWYWwgPCBiVmFsOwogfQogCkBAIC04NSw3ICs4NSw3IEBA
IHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQoKQogfQogCiBzdGF0aWMg
aW5saW5lIGludCBibGVuZChpbnQgZnJvbSwgaW50IHRvLCBmbG9hdCBwcm9ncmVzcykKLXsgIAor
ewogICAgIHJldHVybiBpbnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwogfQogCkBA
IC0xMDIsNyArMTAyLDcgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3IgY29sb3I7
CiAgICAgZmxvYXQgb2Zmc2V0OwogICAgIGJvb2wgc3BlY2lmaWVkOwotICAgIAorCiAgICAgR3Jh
ZGllbnRTdG9wKCkKICAgICAgICAgOiBvZmZzZXQoMCkKICAgICAgICAgLCBzcGVjaWZpZWQoZmFs
c2UpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiB2b2lkIENTU0dy
YWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0
KQogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIAor
CiAgICAgaWYgKG1fZGVwcmVjYXRlZFR5cGUpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQo
KTsKIApAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMo
R3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAg
ICAgICAgICAgb2Zmc2V0ID0gc3RvcC5tX3Bvc2l0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gc3RvcC5tX3Bvc2l0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKG9mZnNldCwgY29sb3IpOwogICAgICAgICB9CiAKQEAgLTEz
NiwxOSArMTM2LDE5IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQq
IGdyYWRpZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgfQogCiAgICAgc2l6
ZV90IG51bVN0b3BzID0gbV9zdG9wcy5zaXplKCk7Ci0gICAgCisKICAgICBWZWN0b3I8R3JhZGll
bnRTdG9wPiBzdG9wcyhudW1TdG9wcyk7Ci0gICAgCisKICAgICBmbG9hdCBncmFkaWVudExlbmd0
aCA9IDA7CiAgICAgYm9vbCBjb21wdXRlZEdyYWRpZW50TGVuZ3RoID0gZmFsc2U7Ci0gICAgCisK
ICAgICBGbG9hdFBvaW50IGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC0+cDAoKTsKICAgICBGbG9h
dFBvaW50IGdyYWRpZW50RW5kOwogICAgIGlmIChpc0xpbmVhckdyYWRpZW50KCkpCiAgICAgICAg
IGdyYWRpZW50RW5kID0gZ3JhZGllbnQtPnAxKCk7CiAgICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFk
aWVudCgpKQogICAgICAgICBncmFkaWVudEVuZCA9IGdyYWRpZW50U3RhcnQgKyBGbG9hdFNpemUo
Z3JhZGllbnQtPmVuZFJhZGl1cygpLCAwKTsKLSAgICAgICAgCisKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bVN0b3BzOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xv
clN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOwogCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCB2b2lkIENT
U0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAgICAgIGlmIChzdG9wc1twcmV2U3BlY2lmaWVk
SW5kZXhdLnNwZWNpZmllZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9mZnNldCA8IHN0
b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0KQogICAgICAgICAgICAgICAgIHN0b3BzW2ld
Lm9mZnNldCA9IHN0b3BzW3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0OwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgQVNTRVJUKHN0b3BzWzBdLnNwZWNpZmllZCAmJiBzdG9wc1tudW1TdG9wcyAt
IDFdLnNwZWNpZmllZCk7Ci0gICAgCisKICAgICAvLyBJZiBhbnkgY29sb3Itc3RvcCBzdGlsbCBk
b2VzIG5vdCBoYXZlIGEgcG9zaXRpb24sIHRoZW4sIGZvciBlYWNoIHJ1biBvZiBhZGphY2VudAog
ICAgIC8vIGNvbG9yLXN0b3BzIHdpdGhvdXQgcG9zaXRpb25zLCBzZXQgdGhlaXIgcG9zaXRpb25z
IHNvIHRoYXQgdGhleSBhcmUgZXZlbmx5IHNwYWNlZAogICAgIC8vIGJldHdlZW4gdGhlIHByZWNl
ZGluZyBhbmQgZm9sbG93aW5nIGNvbG9yLXN0b3BzIHdpdGggcG9zaXRpb25zLgpAQCAtMjE3LDcg
KzIxNyw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRp
ZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGxhc3RTcGVjaWZpZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0IC0gMV0u
b2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zmc2V0ID0g
c3RvcHNbdW5zcGVjaWZpZWRSdW5FbmRdLm9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgZGVsdGEgPSAobmV4dFNwZWNpZmllZE9mZnNldCAtIGxhc3RTcGVjaWZpZWRPZmZzZXQpIC8g
KHVuc3BlY2lmaWVkUnVuRW5kIC0gdW5zcGVjaWZpZWRSdW5TdGFydCArIDEpOwotICAgICAgICAg
ICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdW5zcGVj
aWZpZWRSdW5TdGFydDsgaiA8IHVuc3BlY2lmaWVkUnVuRW5kOyArK2opCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9wc1tqXS5vZmZzZXQgPSBsYXN0U3BlY2lmaWVkT2Zmc2V0ICsgKGogLSB1
bnNwZWNpZmllZFJ1blN0YXJ0ICsgMSkgKiBkZWx0YTsKICAgICAgICAgICAgICAgICB9CkBAIC0y
NDksNyArMjQ5LDcgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCog
Z3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgICAgICAg
ICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOwog
ICAgICAgICAgICAgICAgICAgICBncmFkaWVudExlbmd0aCA9IGdyYWRpZW50U2l6ZS5kaWFnb25h
bExlbmd0aCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgIGlmIChtYXhMZW5ndGhGb3JSZXBlYXQgPiBncmFkaWVudExlbmd0aCkKICAgICAg
ICAgICAgICAgICAgICAgbWF4RXh0ZW50ID0gbWF4TGVuZ3RoRm9yUmVwZWF0IC8gZ3JhZGllbnRM
ZW5ndGg7CiAgICAgICAgICAgICB9CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBDU1NHcmFkaWVu
dFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmQKICAgICAgICAgICAgIGlmIChmaXJzdE9mZnNldCA+IDApIHsKICAgICAgICAgICAg
ICAgICBmbG9hdCBjdXJyT2Zmc2V0ID0gZmlyc3RPZmZzZXQ7CiAgICAgICAgICAgICAgICAgc2l6
ZV90IHNyY1N0b3BPcmRpbmFsID0gb3JpZ2luYWxOdW1TdG9wcyAtIDE7Ci0gICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAg
ICBHcmFkaWVudFN0b3AgbmV3U3RvcCA9IHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXggKyBz
cmNTdG9wT3JkaW5hbF07CiAgICAgICAgICAgICAgICAgICAgIG5ld1N0b3Aub2Zmc2V0ID0gY3Vy
ck9mZnNldDsKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0
b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAg
ICAgICAgICAgICAgICAgICBzcmNTdG9wT3JkaW5hbCA9IChzcmNTdG9wT3JkaW5hbCArIG9yaWdp
bmFsTnVtU3RvcHMgLSAxKSAlIG9yaWdpbmFsTnVtU3RvcHM7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIFdvcmsgZm9yd2Fy
ZHMgZnJvbSB0aGUgZW5kLCBhZGRpbmcgc3RvcHMgdW50aWwgd2UgZ2V0IG9uZSBhZnRlciAxLgog
ICAgICAgICAgICAgZmxvYXQgbGFzdE9mZnNldCA9IHN0b3BzW3N0b3BzLnNpemUoKSAtIDFdLm9m
ZnNldDsKICAgICAgICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgbWF4RXh0ZW50KSB7CkBAIC0yOTcs
OSArMjk3LDkgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3Jh
ZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLSAgICAKKwogICAgIG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotICAgIAor
CiAgICAgLy8gSWYgdGhlIGdyYWRpZW50IGdvZXMgb3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3Jt
YWxpemUgaXQgYnkgbW92aW5nIHRoZSBlbmRwb2ludHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3Bz
LgogICAgIGlmIChudW1TdG9wcyA+IDEgJiYgKHN0b3BzWzBdLm9mZnNldCA8IDAgfHwgc3RvcHNb
bnVtU3RvcHMgLSAxXS5vZmZzZXQgPiAxKSkgewogICAgICAgICBpZiAoaXNMaW5lYXJHcmFkaWVu
dCgpKSB7CkBAIC0zMjgsMTIgKzMyOCwxMiBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0
b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4
ID4gMCkgewogICAgICAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51
bVN0b3BzICYmIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHByZXZPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9Pckdy
ZWF0ZXJJbmRleCAtIDFdLm9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9m
ZnNldCA9IHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRp
b24gPSAtcHJldk9mZnNldCAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgICAgIENvbG9yIGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3Jl
YXRlckluZGV4IC0gMV0uY29sb3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xv
ciwgaW50ZXJTdG9wUHJvcG9ydGlvbik7CiAKQEAgLTM0OCwxNSArMzQ4LDE1IEBAIHZvaWQgQ1NT
R3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQg
PSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCiAgICAgICAg
ICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0IC89IHNjYWxlOwotICAgICAgICAgICAgCisKICAgICAg
ICAgICAgIGdyYWRpZW50LT5zZXRTdGFydFJhZGl1cyhncmFkaWVudC0+c3RhcnRSYWRpdXMoKSAq
IHNjYWxlKTsKICAgICAgICAgICAgIGdyYWRpZW50LT5zZXRFbmRSYWRpdXMoZ3JhZGllbnQtPmVu
ZFJhZGl1cygpICogc2NhbGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bVN0b3BzOyBpKyspCiAgICAgICAgIGdyYWRpZW50LT5hZGRD
b2xvclN0b3Aoc3RvcHNbaV0ub2Zmc2V0LCBzdG9wc1tpXS5jb2xvcik7CiAKQEAgLTQwNCw3ICs0
MDQsNyBAQCBGbG9hdFBvaW50IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QsIENTU1ByaW1pdAogCiAgICAgaWYgKHNlY29uZCkKICAgICAg
ICAgcmVzdWx0LnNldFkocG9zaXRpb25Gcm9tVmFsdWUoc2Vjb25kLCBzdHlsZSwgcm9vdFN0eWxl
LCBzaXplLCBmYWxzZSkpOwotICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTQyNCw3ICs0MjQsNyBAQCBib29sIENTU0dyYWRpZW50VmFsdWU6OmlzQ2FjaGVhYmxlKCkgY29u
c3QKICAgICAgICAgaWYgKHVuaXRUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TIHx8
IHVuaXRUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTIHx8IHVuaXRUeXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDgzLDEzICs0ODMsMTMgQEAg
c3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRT
aXplJiBzaXplLCBGbG9hdFBvaW50JgogICAgIGFuZ2xlRGVnID0gZm1vZGYoYW5nbGVEZWcsIDM2
MCk7CiAgICAgaWYgKGFuZ2xlRGVnIDwgMCkKICAgICAgICAgYW5nbGVEZWcgKz0gMzYwOwotICAg
IAorCiAgICAgaWYgKCFhbmdsZURlZykgewogICAgICAgICBmaXJzdFBvaW50LnNldCgwLCAwKTsK
ICAgICAgICAgc2Vjb25kUG9pbnQuc2V0KHNpemUud2lkdGgoKSwgMCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoYW5nbGVEZWcgPT0gOTApIHsKICAgICAgICAgZmly
c3RQb2ludC5zZXQoMCwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHNlY29uZFBvaW50LnNldCgw
LCAwKTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBzdGF0aWMgdm9pZCBlbmRQb2ludHNGcm9tQW5nbGUo
ZmxvYXQgYW5nbGVEZWcsIGNvbnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9pbnQmCiAgICAgICAg
IHNlY29uZFBvaW50LnNldCgwLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwog
ICAgIGlmIChhbmdsZURlZyA9PSAyNzApIHsKICAgICAgICAgZmlyc3RQb2ludC5zZXQoMCwgMCk7
CiAgICAgICAgIHNlY29uZFBvaW50LnNldCgwLCBzaXplLmhlaWdodCgpKTsKQEAgLTUxMyw3ICs1
MTMsNyBAQCBzdGF0aWMgdm9pZCBlbmRQb2ludHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcsIGNv
bnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9pbnQmCiAgICAgLy8gV2UgZmluZCB0aGUgZW5kcG9p
bnQgYnkgY29tcHV0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgZm9ybWVkIGJ5IHRo
ZSBzbG9wZSwKICAgICAvLyBhbmQgYSBsaW5lIHBlcnBlbmRpY3VsYXIgdG8gaXQgdGhhdCBpbnRl
cnNlY3RzIHRoZSBjb3JuZXIuCiAgICAgZmxvYXQgcGVycGVuZGljdWxhclNsb3BlID0gLTEgLyBz
bG9wZTsKLSAgICAKKwogICAgIC8vIENvbXB1dGUgc3RhcnQgY29ybmVyIHJlbGF0aXZlIHRvIGNl
bnRlci4KICAgICBmbG9hdCBoYWxmSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKSAvIDI7CiAgICAgZmxv
YXQgaGFsZldpZHRoID0gc2l6ZS53aWR0aCgpIC8gMjsKQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0
aWMgdm9pZCBlbmRQb2ludHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcsIGNvbnN0IEludFNpemUm
IHNpemUsIEZsb2F0UG9pbnQmCiAgICAgZmxvYXQgYyA9IGVuZENvcm5lci55KCkgLSBwZXJwZW5k
aWN1bGFyU2xvcGUgKiBlbmRDb3JuZXIueCgpOwogICAgIGZsb2F0IGVuZFggPSBjIC8gKHNsb3Bl
IC0gcGVycGVuZGljdWxhclNsb3BlKTsKICAgICBmbG9hdCBlbmRZID0gcGVycGVuZGljdWxhclNs
b3BlICogZW5kWCArIGM7Ci0gICAgCisKICAgICAvLyBXZSBjb21wdXRlZCB0aGUgZW5kIHBvaW50
LCBzbyBzZXQgdGhlIHNlY29uZCBwb2ludCwgZmxpcHBpbmcgdGhlIFkgdG8gYWNjb3VudCBmb3Ig
YW5nbGVzIGdvaW5nIGFudGljbG9ja3dpc2UuCiAgICAgc2Vjb25kUG9pbnQuc2V0KGhhbGZXaWR0
aCArIGVuZFgsIHNpemUuaGVpZ2h0KCkgLSAoaGFsZkhlaWdodCArIGVuZFkpKTsKICAgICAvLyBS
ZWZsZWN0IGFyb3VuZCB0aGUgY2VudGVyIGZvciB0aGUgc3RhcnQgcG9pbnQuCkBAIC01NDEsNyAr
NTQxLDcgQEAgc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBj
b25zdCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50JgogUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NT
TGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsK
LSAgICAKKwogICAgIFJlbmRlclN0eWxlKiByb290U3R5bGUgPSByZW5kZXJlci0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCk7CiAKICAgICBGbG9hdFBvaW50IGZp
cnN0UG9pbnQ7CkBAIC01NTEsNyArNTUxLDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAg
ICAgICAgZW5kUG9pbnRzRnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQ
b2ludCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2lu
dChtX2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290
U3R5bGUsIHNpemUpOwotICAgICAgICAKKwogICAgICAgICBpZiAobV9zZWNvbmRYIHx8IG1fc2Vj
b25kWSkKICAgICAgICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25k
WC5nZXQoKSwgbV9zZWNvbmRZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBz
aXplKTsKICAgICAgICAgZWxzZSB7CkBAIC02NTAsNyArNjUwLDcgQEAgZmxvYXQgQ1NTUmFkaWFs
R3JhZGllbnRWYWx1ZTo6cmVzb2x2ZVJhZGl1cyhDU1NQcmltaXRpdmVWYWx1ZSogcmFkaXVzLCBS
ZW5kZXJTdHkKICAgICAgICAgcmVzdWx0ID0gKndpZHRoT3JIZWlnaHQgKiByYWRpdXMtPmdldEZs
b2F0VmFsdWUoKSAvIDEwMDsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHJhZGl1cy0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gCisKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MzQsNyArNzM0LDcgQEAgc3RhdGljIGlubGluZSBm
bG9hdCBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhjb25zdCBGbG9hdFNpemUmIHAsIGZsb2F0IGFz
cGVjdFJhdGkKIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNy
ZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7Ci0gICAgCisKICAgICBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5y
ZW5kZXJTdHlsZSgpOwogCiAgICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBv
aW50KG1fZmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJv
b3RTdHlsZSwgc2l6ZSk7CkBAIC03NDgsNyArNzQ4LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4g
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5k
ZXIKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKICAgICBpZiAo
IW1fc2Vjb25kWSkKICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7
Ci0gICAgCisKICAgICBmbG9hdCBmaXJzdFJhZGl1cyA9IDA7CiAgICAgaWYgKG1fZmlyc3RSYWRp
dXMpCiAgICAgICAgIGZpcnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdl
dCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlKTsKQEAgLTc2NywxMCArNzY3LDEwIEBA
IFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRp
ZW50KFJlbmRlck9iamVjdCogcmVuZGVyCiAgICAgICAgIEdyYWRpZW50U2hhcGUgc2hhcGUgPSBF
bGxpcHNlOwogICAgICAgICBpZiAobV9zaGFwZSAmJiBtX3NoYXBlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCAmJiBtX3NoYXBlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQ2lyY2xlKQogICAgICAgICAgICAgc2hhcGUgPSBDaXJjbGU7Ci0gICAgICAgIAor
CiAgICAgICAgIGVudW0gR3JhZGllbnRGaWxsIHsgQ2xvc2VzdFNpZGUsIENsb3Nlc3RDb3JuZXIs
IEZhcnRoZXN0U2lkZSwgRmFydGhlc3RDb3JuZXIgfTsKICAgICAgICAgR3JhZGllbnRGaWxsIGZp
bGwgPSBGYXJ0aGVzdENvcm5lcjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1fc2l6aW5nQmVo
YXZpb3IgJiYgbV9zaXppbmdCZWhhdmlvci0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgICAgIHN3aXRjaCAobV9zaXppbmdCZWhhdmlv
ci0+Z2V0SWRlbnQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbnRhaW46CkBAIC03
ODksOSArNzg5LDkgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBO
b3cgY29tcHV0ZSB0aGUgZW5kIHJhZGlpIGJhc2VkIG9uIHRoZSBzZWNvbmQgcG9pbnQsIHNoYXBl
IGFuZCBmaWxsLgotICAgICAgICAKKwogICAgICAgICAvLyBIb3Jpem9udGFsCiAgICAgICAgIHN3
aXRjaCAoZmlsbCkgewogICAgICAgICBjYXNlIENsb3Nlc3RTaWRlOiB7CkBAIC04MjgsNyArODI4
LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRl
R3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAgICAgICAgICAvLyB0aGF0IGl0
IHdvdWxkIGlmIGNsb3Nlc3Qtc2lkZSBvciBmYXJ0aGVzdC1zaWRlIHdlcmUgc3BlY2lmaWVkLCBh
cyBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgICAgICBmbG9hdCB4RGlzdCA9IG1pbihzZWNvbmRQ
b2ludC54KCksIHNpemUud2lkdGgoKSAtIHNlY29uZFBvaW50LngoKSk7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgeURpc3QgPSBtaW4oc2Vjb25kUG9pbnQueSgpLCBzaXplLmhlaWdodCgpIC0gc2Vj
b25kUG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHNlY29u
ZFJhZGl1cyA9IGhvcml6b250YWxFbGxpcHNlUmFkaXVzKGNvcm5lciAtIHNlY29uZFBvaW50LCB4
RGlzdCAvIHlEaXN0KTsKICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbyA9IHhEaXN0IC8geURp
c3Q7CiAgICAgICAgICAgICB9CkBAIC04NDUsNyArODQ1LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVu
dD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiBy
ZW5kZXIKICAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IHdvdWxkIGlmIGNsb3Nlc3Qtc2lkZSBv
ciBmYXJ0aGVzdC1zaWRlIHdlcmUgc3BlY2lmaWVkLCBhcyBhcHByb3ByaWF0ZS4KICAgICAgICAg
ICAgICAgICBmbG9hdCB4RGlzdCA9IG1heChzZWNvbmRQb2ludC54KCksIHNpemUud2lkdGgoKSAt
IHNlY29uZFBvaW50LngoKSk7CiAgICAgICAgICAgICAgICAgZmxvYXQgeURpc3QgPSBtYXgoc2Vj
b25kUG9pbnQueSgpLCBzaXplLmhlaWdodCgpIC0gc2Vjb25kUG9pbnQueSgpKTsKLSAgICAgICAg
ICAgICAgICAKKwogICAgICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGhvcml6b250YWxFbGxp
cHNlUmFkaXVzKGNvcm5lciAtIHNlY29uZFBvaW50LCB4RGlzdCAvIHlEaXN0KTsKICAgICAgICAg
ICAgICAgICBhc3BlY3RSYXRpbyA9IHhEaXN0IC8geURpc3Q7CiAgICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCBiMTk1NDhlLi40NGVlMWM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NHcmFkaWVudFZhbHVlX2gKQEAgLTUyLDE2ICs1
MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGaXJzdFkoUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gdmFsKSB7IG1fZmlyc3RZID0gdmFsOyB9CiAgICAgdm9pZCBzZXRTZWNvbmRYKFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCkgeyBtX3NlY29uZFggPSB2YWw7IH0KICAg
ICB2b2lkIHNldFNlY29uZFkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1f
c2Vjb25kWSA9IHZhbDsgfQotICAgIAorCiAgICAgdm9pZCBhZGRTdG9wKGNvbnN0IENTU0dyYWRp
ZW50Q29sb3JTdG9wJiBzdG9wKSB7IG1fc3RvcHMuYXBwZW5kKHN0b3ApOyB9CiAKICAgICBWZWN0
b3I8Q1NTR3JhZGllbnRDb2xvclN0b3A+JiBzdG9wcygpIHsgcmV0dXJuIG1fc3RvcHM7IH0KIAog
ICAgIHZvaWQgc29ydFN0b3BzSWZOZWVkZWQoKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBp
c0xpbmVhckdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSYWRpYWxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisKICAg
ICBib29sIGlzUmVwZWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRpbmc7IH0KIAogICAg
IGJvb2wgZGVwcmVjYXRlZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RlcHJlY2F0ZWRUeXBlOyB9
IC8vIGNhbWUgZnJvbSAtd2Via2l0LWdyYWRpZW50CkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgLCBtX3JlcGVhdGluZyhyZXBlYXQgPT0gUmVwZWF0aW5nKQogICAgIHsKICAg
ICB9Ci0gICAgCisKICAgICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50KiwgUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0ID0gMCk7CiAK
ICAgICAvLyBDcmVhdGUgdGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNpemUuCkBAIC04MSwxNiAr
ODEsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gUmVzb2x2ZSBwb2ludHMvcmFkaWkgdG8gZnJv
bnQgZW5kIHZhbHVlcy4KICAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRp
dmVWYWx1ZSosIENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBjb25zdCBJbnRTaXplJik7Ci0gICAgCisKICAgICBib29sIGlzQ2FjaGVhYmxl
KCkgY29uc3Q7CiAKICAgICAvLyBQb2ludHMuIFNvbWUgb2YgdGhlc2UgbWF5IGJlIG51bGwgZm9y
IGxpbmVhciBncmFkaWVudHMuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0
WDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3RZOwotICAgIAorCiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlY29uZFg7CiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX3NlY29uZFk7Ci0gICAgCisKICAgICAvLyBTdG9wcwogICAgIFZlY3RvcjxD
U1NHcmFkaWVudENvbG9yU3RvcD4gbV9zdG9wczsKICAgICBib29sIG1fc3RvcHNTb3J0ZWQ7CkBA
IC0xNTIsMTAgKzE1MiwxMCBAQCBwcml2YXRlOgogCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVu
dCBmb3IgYSBnaXZlbiBzaXplLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3Jl
YXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwotICAgIAorCiAgICAg
Ly8gUmVzb2x2ZSBwb2ludHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KICAgICBmbG9hdCBy
ZXNvbHZlUmFkaXVzKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBmbG9hdCogd2lkdGhPckhlaWdodCA9IDApOwotICAgIAorCiAgICAgLy8g
VGhlc2UgbWF5IGJlIG51bGwgZm9yIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cy4KICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3RSYWRpdXM7CiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX3NlY29uZFJhZGl1czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCBjZjE4ZjZhLi40OGZkZWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCmluZGV4IGE1M2M5NjUuLmZlMzkxZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWVfaApAQCAtNDQsMTMgKzQ0LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SW1hZ2U+IGltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CiAK
ICAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOwotICAgIAorCiAgICAg
dmlydHVhbCBib29sIGlzRml4ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIEludFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlck9iamVjdCopIHsgcmV0dXJuIElu
dFNpemUoKTsgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpOwotICAgIAorCiAgICAgSW1hZ2UqIGdldEltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFNpemUmKTsKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPElt
YWdlPik7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwJiBjbGllbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZUNhY2hlLmNsaWVudHMoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlVmFsdWUuY3BwCmluZGV4IGZmYzY3NjMuLjA4MzZiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW1hZ2VWYWx1ZS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgU3R5bGVDYWNoZWRJbWFnZSogQ1NTSW1h
Z2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QK
ICAgICAgICAgICAgIG1faW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoY2FjaGVkSW1h
Z2UpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIChtX2ltYWdlICYmIG1f
aW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkgPyBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4o
bV9pbWFnZS5nZXQoKSkgOiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuaAppbmRl
eCA2NDVhMTczLi43MDkxZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3R5bGVDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKICAgICAvLyBSZXR1cm5zIGEgU3R5bGVDYWNo
ZWRJbWFnZSBpZiB0aGUgaW1hZ2UgaXMgY2FjaGVkIGFscmVhZHksIG90aGVyd2lzZSBhIFN0eWxl
UGVuZGluZ0ltYWdlLgogICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7Ci0g
ICAgCisKIHByb3RlY3RlZDoKICAgICBDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCmluZGV4IGFkYTkxZjAuLjA2MTQ4NmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2
b2lkIENTU0ltcG9ydFJ1bGU6Omluc2VydGVkSW50b1BhcmVudCgpCiAgICAgLy8gaW4gb3VyIHBh
cmVudCBjaGFpbiB3aXRoIHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCiAgICAgU3R5bGVC
YXNlKiByb290ID0gdGhpczsKICAgICBmb3IgKFN0eWxlQmFzZSogY3VyciA9IHBhcmVudCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
d3JvbmcgaWYgdGhlIGZpbmFsVVJMIHdhcyB1cGRhdGVkIHZpYSBkb2N1bWVudDo6dXBkYXRlQmFz
ZVVSTC4gCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlmIHRoZSBmaW5hbFVSTCB3
YXMgdXBkYXRlZCB2aWEgZG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwuCiAgICAgICAgIGlmIChjdXJy
LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihjdXJyKS0+ZmluYWxVUkwoKS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgcm9vdCA9IGN1cnI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5p
dGlhbFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuY3BwCmlu
ZGV4IGNiZTc3NmIuLjBkMGM1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bml0aWFsVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUu
Y3BwCkBAIC0yNiw4ICsyNiw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVkIHNo
b3J0IENTU0luaXRpYWxWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJu
IENTU19JTklUSUFMOyAKK3sKKyAgICByZXR1cm4gQ1NTX0lOSVRJQUw7CiB9CiAKIFN0cmluZyBD
U1NJbml0aWFsVmFsdWU6OmNzc1RleHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0luaXRpYWxWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxW
YWx1ZS5oCmluZGV4IDllZTJmMjkuLjAxYmI2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbml0aWFsVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlh
bFZhbHVlLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICAgICAgCisKIHByaXZhdGU6CiAgICAgQ1NTSW5p
dGlhbFZhbHVlKGJvb2wgaW1wbGljaXQpCiAgICAgICAgIDogbV9pbXBsaWNpdChpbXBsaWNpdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
CmluZGV4IDFlNmZlMjEuLjU4ZGNhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKQogICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlVmFsdWUqPih2YWx1ZSktPnNldE5vZGUoMCk7CiAgICAg
fQogfQotIAorCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246Om9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgb3Ro
ZXIpCiB7CiAgICAgQVNTRVJUKCFtX2l0ZXJhdG9yQ291bnQpOwpAQCAtMTQwLDE0ICsxNDAsMTQg
QEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGlu
dCBwcm9wZXJ0eUlEKSBjb25zdAogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kOiB7CiAgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s5XSA9IHsgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFJlcGVhdFksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25ZLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eUJhY2tncm91bmRJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNo
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3Jp
Z2luIH07IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5QmFja2dyb3VuZE9yaWdpbiB9OwogICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyOiB7CkBAIC0yNDMsNyArMjQzLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAogICAgICAg
ICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazogewotICAgICAgICAgICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwgCisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJraXRN
YXNrUmVwZWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24s
IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKICAgICAgICAgICAgIHJl
dHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CkBAIC0zMjcsNyArMzI3
LDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hvcnRo
YW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWUKICAgICAvLyBCZWdpbiBieSBjb2xsZWN0aW5n
IHRoZSBwcm9wZXJ0aWVzIGludG8gYW4gYXJyYXkuCiAgICAgVmVjdG9yPCBSZWZQdHI8Q1NTVmFs
dWU+ID4gdmFsdWVzKHNpemUpOwogICAgIHNpemVfdCBudW1MYXllcnMgPSAwOwotICAgIAorCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgdmFsdWVzW2ld
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgaWYgKHZhbHVl
c1tpXSkgewpAQCAtMzM4LDcgKzMzOCw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAgICAg
ICAgICAgICAgICAgbnVtTGF5ZXJzID0gbWF4PHNpemVfdD4oMVUsIG51bUxheWVycyk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBOb3cgc3RpdGNoIHRoZSBwcm9wZXJ0aWVzIHRv
Z2V0aGVyLiAgSW1wbGljaXQgaW5pdGlhbCB2YWx1ZXMgYXJlIGZsYWdnZWQgYXMgc3VjaCBhbmQK
ICAgICAvLyBjYW4gc2FmZWx5IGJlIG9taXR0ZWQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1MYXllcnM7IGkrKykgewpAQCAtMzUzLDcgKzM1Myw3IEBAIFN0cmluZyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJv
cGVydGllCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVM
aXN0Kj4odmFsdWVzW2pdLmdldCgpKS0+aXRlbShpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbal07Ci0gICAgICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgICAgIC8vIENvbG9yIG9ubHkgYmVsb25ncyBpbiB0aGUg
bGFzdCBsYXllci4KICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
ICE9IG51bUxheWVycyAtIDEpCkBAIC0zNjUsNyArMzY1LDcgQEAgU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9w
ZXJ0aWUKIAogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXBvcnQgYmFja2dyb3VuZC1yZXBl
YXQgYXMgaXQgd2FzIHdyaXR0ZW4gaW4gdGhlIENTUy4gSWYgdGhlIHByb3BlcnR5IGlzIGltcGxp
Y2l0LAogICAgICAgICAgICAgLy8gdGhlbiBpdCB3YXMgd3JpdHRlbiB3aXRoIG9ubHkgb25lIHZh
bHVlLiBIZXJlIHdlIGZpZ3VyZSBvdXQgd2hpY2ggdmFsdWUgdGhhdCB3YXMgc28gd2UgY2FuCi0g
ICAgICAgICAgICAvLyByZXBvcnQgYmFjayBjb3JyZWN0bHkuIAorICAgICAgICAgICAgLy8gcmVw
b3J0IGJhY2sgY29ycmVjdGx5LgogICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCAmJiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGll
c1tqXSkpIHsKIAogICAgICAgICAgICAgICAgIC8vIEJVRyA0OTA1NTogbWFrZSBzdXJlIHRoZSB2
YWx1ZSB3YXMgbm90IHJlc2V0IGluIHRoZSBsYXllciBjaGVjayBqdXN0IGFib3ZlLgpAQCAtMzc2
LDcgKzM3Niw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAgICAgICAgICAgICAgICAgICAg
ICAgICB5VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihuZXh0VmFsdWUuZ2V0KCkp
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBuZXh0VmFsdWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpbnQgeElkID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZS5nZXQoKSktPmdldElkZW50KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGludCB5SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHlWYWx1
ZS5nZXQoKSktPmdldElkZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgIT0geUlk
KSB7CkBAIC0zOTMsNyArMzkzLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWUKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlh
bFZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQogICAg
ICAgICAgICAgICAgICAgICBsYXllclJlcyArPSAiICI7CkBAIC00MTAsNyArNDEwLDcgQEAgU3Ry
aW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUo
Y29uc3QgaW50KiBwcm9wZXJ0aWUKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gdmFs
dWUtPmNzc1RleHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJlcy5pc051
bGwoKSkKICAgICAgICAgICAgICAgICByZXMgKz0gIiwgIjsKQEAgLTQ2Myw3ICs0NjMsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVy
dHlDU1NWYWx1ZShpbnQgcHJvcGVydAogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52
YWx1ZSgpIDogMDsKIH0KIAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3Zl
U2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkgCiti
b29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShp
bnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGFuZ2VkKQogewogICAgIENTU1Byb3BlcnR5TG9u
Z2hhbmQgbG9uZ2hhbmQgPSBsb25naGFuZEZvclByb3BlcnR5KHByb3BlcnR5SUQpOwogICAgIGlm
IChsb25naGFuZC5sZW5ndGgoKSkgewpAQCAtNDgxLDExICs0ODEsMTEgQEAgU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9v
bCBub3RpZnlDaGEKICAgICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVpdmFsZW50IHNob3J0
aGFuZCB3aGVuIHBvc3NpYmxlLgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAg
CisKICAgICBDU1NQcm9wZXJ0eSogZm91bmRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChw
cm9wZXJ0eUlEKTsKICAgICBpZiAoIWZvdW5kUHJvcGVydHkpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAKKwogICAgIFN0cmluZyB2YWx1ZSA9IHJldHVyblRleHQgPyBmb3VuZFByb3Bl
cnR5LT52YWx1ZSgpLT5jc3NUZXh0KCkgOiBTdHJpbmcoKTsKIAogICAgIC8vIEEgbW9yZSBlZmZp
Y2llbnQgcmVtb3ZhbCBzdHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBl
bXB0eQpAQCAtNTgwLDcgKzU4MCw3IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OnNldFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlCiAKICAgICBy
ZXR1cm4gc3VjY2VzczsKIH0KLSAgICAKKwogdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6c2V0UHJvcGVydHlJbnRlcm5hbChjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1By
b3BlcnR5KiBzbG90KQogewogICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKQEAgLTY4Nywx
MiArNjg3LDEyIEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNp
Z25lZCBpKSBjb25zdAogU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0
KCkgY29uc3QKIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCisKICAgICBjb25zdCBD
U1NQcm9wZXJ0eSogcG9zaXRpb25YUHJvcCA9IDA7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBv
c2l0aW9uWVByb3AgPSAwOwogICAgIGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7
CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHJlcGVhdFlQcm9wID0gMDsKLSAgICAKKwogICAgIHVu
c2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCBzaXplOyArK24pIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBt
X3Byb3BlcnRpZXNbbl07CkBAIC03MDcsMjEgKzcwNywyMSBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICByZXN1bHQgKz0gcHJvcC5jc3NUZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gRklYTUU6
IFRoaXMgaXMgYSBub3Qtc28tbmljZSB3YXkgdG8gdHVybiB4L3kgcG9zaXRpb25zIGludG8gc2lu
Z2xlIGJhY2tncm91bmQtcG9zaXRpb24gaW4gb3V0cHV0LgotICAgIC8vIEl0IGlzIHJlcXVpcmVk
IGJlY2F1c2UgYmFja2dyb3VuZC1wb3NpdGlvbi14L3kgYXJlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0
aWVzIGFuZCBXZWJLaXQgZ2VuZXJhdGVkIG91dHB1dCAKKyAgICAvLyBJdCBpcyByZXF1aXJlZCBi
ZWNhdXNlIGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGll
cyBhbmQgV2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQKICAgICAvLyB3b3VsZCBub3Qgd29yayBpbiBG
aXJlZm94ICg8cmRhcjovL3Byb2JsZW0vNTE0MzE4Mz4pCiAgICAgLy8gSXQgd291bGQgYmUgYSBi
ZXR0ZXIgc29sdXRpb24gaWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BBSVIuCiAgICAg
aWYgKHBvc2l0aW9uWFByb3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3NpdGlvblhQcm9wLT5pc0lt
cG9ydGFudCgpID09IHBvc2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkpIHsKICAgICAgICAgU3Ry
aW5nIHBvc2l0aW9uVmFsdWU7CiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0
aW9uWSB9OwotICAgICAgICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3Qo
KSB8fCBwb3NpdGlvbllQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSAKKyAgICAgICAgaWYg
KHBvc2l0aW9uWFByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcG9zaXRpb25ZUHJvcC0+
dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHBvc2l0aW9uVmFsdWUgPSBnZXRM
YXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHBvc2l0aW9uVmFsdWUgPSBwb3NpdGlvblhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAi
ICIgKyBwb3NpdGlvbllQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCk7CiAgICAgICAgIHJlc3VsdCAr
PSAiYmFja2dyb3VuZC1wb3NpdGlvbjogIiArIHBvc2l0aW9uVmFsdWUgKyAocG9zaXRpb25YUHJv
cC0+aXNJbXBvcnRhbnQoKSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChwb3NpdGlvblhQcm9wKSAKKyAgICAgICAgaWYgKHBvc2l0aW9uWFBy
b3ApCiAgICAgICAgICAgICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgpOwogICAg
ICAgICBpZiAocG9zaXRpb25ZUHJvcCkKICAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvbllQ
cm9wLT5jc3NUZXh0KCk7CkBAIC03MzEsMTMgKzczMSwxMyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNzc1RleHQoKSBjb25zdAogICAgIGlmIChyZXBlYXRYUHJvcCAmJiBy
ZXBlYXRZUHJvcCAmJiByZXBlYXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJvcC0+
aXNJbXBvcnRhbnQoKSkgewogICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7CiAgICAgICAgIGNv
bnN0IGludCByZXBlYXRQcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBl
YXRYLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZIH07Ci0gICAgICAgIGlmIChyZXBlYXRY
UHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNW
YWx1ZUxpc3QoKSkgCisgICAgICAgIGlmIChyZXBlYXRYUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxp
c3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAg
IHJlcGVhdFZhbHVlID0gZ2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHJlcGVhdFByb3BlcnRpZXMp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXBlYXRWYWx1ZSA9IHJlcGVhdFhQcm9wLT52
YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyByZXBlYXRZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgp
OwogICAgICAgICByZXN1bHQgKz0gImJhY2tncm91bmQtcmVwZWF0OiAiICsgcmVwZWF0VmFsdWUg
KyAocmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsg
IjsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVwZWF0WFByb3ApIAorICAgICAgICBpZiAo
cmVwZWF0WFByb3ApCiAgICAgICAgICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQo
KTsKICAgICAgICAgaWYgKHJlcGVhdFlQcm9wKQogICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVh
dFlQcm9wLT5jc3NUZXh0KCk7CkBAIC04MjUsMTggKzgyNSwxOCBAQCB2b2lkIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQogdm9pZCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKICAgICBBU1NFUlQoIW1faXRl
cmF0b3JDb3VudCk7Ci0gICAgCisKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQg
d2l0aCBzdGF0aWMgc2V0cyBhbmQgaW4gdGhhdCBjYXNlIGNvbnN0cnVjdGluZyB0aGUgaGFzaCBy
ZXBlYXRlZGx5IGlzIHByZXR0eSBwb2ludGxlc3MuCiAgICAgSGFzaFNldDxpbnQ+IHRvUmVtb3Zl
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgdG9S
ZW1vdmUuYWRkKHNldFtpXSk7Ci0gICAgCisKICAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IG5l
d1Byb3BlcnRpZXM7CiAgICAgbmV3UHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
cHJvcGVydGllcy5zaXplKCkpOwotICAgIAorCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVy
dGllcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewog
ICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbbl07CkBA
IC04NTAsNyArODUwLDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3Zl
UHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZAogCiAgICAgYm9vbCBjaGFu
Z2VkID0gbmV3UHJvcGVydGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBt
X3Byb3BlcnRpZXMgPSBuZXdQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgaWYgKGNoYW5nZWQgJiYg
bm90aWZ5Q2hhbmdlZCkKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQpAQCAtODY2
LDcgKzg2Niw3IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb3B5KCkgY29uc3QKIH0KIAogY29uc3QgQ1NTUHJvcGVy
dHkqIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHBy
b3BlcnR5SUQpIGNvbnN0Ci17ICAgIAorewogICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMu
c2l6ZSgpIC0gMSA7IG4gPj0gMDsgLS1uKSB7CiAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1f
cHJvcGVydGllc1tuXS5tX2lkKQogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnRpZXNbbl07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCmlu
ZGV4IGVhOGFiM2YuLjMwOTIzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5oCkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiogZGVjbCwgQ1NTUHJvcGVydHkqIGN1cnJlbnQpOwogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkNvbnN0SXRlcmF0b3ImIG8pOwogICAgIH5DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkNvbnN0SXRlcmF0b3IoKTsKLSAgICAKKwogICAgIGNvbnN0IENTU1Byb3BlcnR5JiBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAqbV9jdXJyZW50OyB9CiAgICAgY29uc3QgQ1NTUHJvcGVydHkq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KLSAgICAKKwogICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0
b3ImIG8pIHsgQVNTRVJUKG1fZGVjbCA9PSBvLm1fZGVjbCk7IHJldHVybiBtX2N1cnJlbnQgIT0g
by5tX2N1cnJlbnQ7IH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKSB7IEFTU0VSVChtX2RlY2wgPT0gby5tX2RlY2wp
OyByZXR1cm4gbV9jdXJyZW50ID09IG8ubV9jdXJyZW50OyB9Ci0gICAgCisKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG8pOwotICAgIAorCiAgICAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7CiAKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mKTsKLSAg
ICAKKwogICAgIHR5cGVkZWYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOwogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBj
b25zdF9pdGVyYXRvcih0aGlzLCBtX3Byb3BlcnRpZXMuYmVnaW4oKSk7IH0KQEAgLTExMyw3ICsx
MTMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFu
Z2VkID0gdHJ1ZSk7CiAKICAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQs
IGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUsIGJvb2wgcmV0dXJuVGV4dCA9IGZhbHNlKTsKLSAK
KwogICAgIC8vIHNldExlbmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChO
ZWVkZWQgZm9yIGNvbnZlcnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKICAgICB2b2lkIHNldExl
bmd0aFByb3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGlt
cG9ydGFudCwgYm9vbCBtdWx0aUxlbmd0aCA9IGZhbHNlKTsKICAgICB2b2lkIHNldFN0cmluZ1By
b3BlcnR5KGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzLCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmlu
ZyB2YWx1ZQpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBhcnNlZFBy
b3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsK
ICAgICAvLyBUaGlzIGRvZXMgbm8gY2hhbmdlIG5vdGlmaWNhdGlvbnMgc2luY2UgaXQncyBvbmx5
IGNhbGxlZCBieSBjcmVhdGVNYXJrdXAuCiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25z
dCBDU1NQcm9wZXJ0eSYpOwotIAorCiAgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gY29weUJsb2NrUHJvcGVydGllcygpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlQmxv
Y2tQcm9wZXJ0aWVzKCk7CiAgICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50
KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7CkBAIC0x
MzgsNyArMTM4LDcgQEAgcHVibGljOgogICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpOwotICAgIAorCiAgICAgYm9vbCBwcm9wZXJ0aWVz
RXF1YWwoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIG8pIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllcyA9PSBvLT5tX3Byb3BlcnRpZXM7IH0KIAogICAgIGJvb2wgaXNJbmxpbmVT
dHlsZURlY2xhcmF0aW9uKCk7CkBAIC0xODEsMTMgKzE4MSwxMyBAQCBwcml2YXRlOgogCiAgICAg
ZnJpZW5kIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjsKIH07
Ci0gICAgCi1pbmxpbmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjpD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qIGRlY2wsIENTU1Byb3BlcnR5KiBjdXJyZW50KSAKKworaW5saW5lIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25Db25zdEl0ZXJhdG9yKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBk
ZWNsLCBDU1NQcm9wZXJ0eSogY3VycmVudCkKIDogbV9kZWNsKGRlY2wpCiAsIG1fY3VycmVudChj
dXJyZW50KQoteyAKK3sKICNpZm5kZWYgTkRFQlVHCi0gICAgY29uc3RfY2FzdDxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudCsrOyAKKyAgICBjb25z
dF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVyYXRvckNv
dW50Kys7CiAjZW5kaWYKIH0KIApAQCAtMTk2LDExICsxOTYsMTEgQEAgaW5saW5lIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25Db25zdEkKICwgbV9jdXJyZW50KG8ubV9jdXJyZW50KQogewogI2lmbmRlZiBOREVCVUcKLSAg
ICBjb25zdF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVy
YXRvckNvdW50Kys7IAorICAgIGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
PihtX2RlY2wpLT5tX2l0ZXJhdG9yQ291bnQrKzsKICNlbmRpZgogfQogCi1pbmxpbmUgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25Db25zdEl0ZXJhdG9yKCkgCitpbmxpbmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25D
b25zdEl0ZXJhdG9yOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yKCkK
IHsKICNpZm5kZWYgTkRFQlVHCiAgICAgY29uc3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudC0tOwpAQCAtMjEyLDIyICsyMTIsMjIgQEAg
aW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEkKICAgICBtX2RlY2wgPSBvLm1fZGVjbDsKICAgICBtX2N1
cnJlbnQgPSBvLm1fY3VycmVudDsKICNpZm5kZWYgTkRFQlVHCi0gICAgY29uc3RfY2FzdDxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudCsrOyAKKyAg
ICBjb25zdF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVy
YXRvckNvdW50Kys7CiAjZW5kaWYKICAgICByZXR1cm4gKnRoaXM7CiB9Ci0gICAgCi1pbmxpbmUg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAKLXsgCisKK2lubGluZSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CiAgICAgQVNTRVJUKG1fY3VycmVu
dCAhPSBjb25zdF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9w
cm9wZXJ0aWVzLmVuZCgpKTsKICAgICArK21fY3VycmVudDsKLSAgICByZXR1cm4gKnRoaXM7IAor
ICAgIHJldHVybiAqdGhpczsKIH0KIAotaW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Q29uc3RJdGVyYXRvciYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjpv
cGVyYXRvci0tKCkgCi17IAotICAgIC0tbV9jdXJyZW50OyAKLSAgICByZXR1cm4gKnRoaXM7IAor
aW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgICAtLW1f
Y3VycmVudDsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggMzA1YjBjZi4uMTFkYTQwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
aXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKGludCBwcm9wZXJ0eUlkLCBib29sJiBhY2NlcHRzTmVn
YXRpdgogICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5XaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5
UGFkZGluZ0JvdHRvbToKICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDogCisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdS
aWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TG9naWNhbFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2Fs
SGVpZ2h0OgpAQCAtMzgxLDggKzM4MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NpbXBsZUxl
bmd0aFByb3BlcnR5SUQoaW50IHByb3BlcnR5SWQsIGJvb2wmIGFjY2VwdHNOZWdhdGl2CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKICAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoKICAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5M
ZWZ0OiAKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6IAorICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXJnaW5MZWZ0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoKICAgICBj
YXNlIENTU1Byb3BlcnR5TWFyZ2luVG9wOgogICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKICAg
ICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKQEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIENT
U1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKCkKICAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZv
cmVNYXJnaW5Cb3ggPSBJTlZBTElEX05VTV9QQVJTRURfUFJPUEVSVElFUzsKICAgICBtX2hhc0Zv
bnRGYWNlT25seVZhbHVlcyA9IGZhbHNlOwogfQotICAgIAorCiB2b2lkIENTU1BhcnNlcjo6c2V0
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5bGVTaGVl
dCA9IHN0eWxlU2hlZXQ7CkBAIC0xMjYwLDExICsxMjYwLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5U3Bl
YWs6ICAgICAgICAgICAvLyBub25lIHwgbm9ybWFsIHwgc3BlbGwtb3V0IHwgZGlnaXRzIHwgbGl0
ZXJhbC1wdW5jdHVhdGlvbiB8IG5vLXB1bmN0dWF0aW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAo
aWQgPT0gQ1NTVmFsdWVOb25lIHx8IGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1Zh
bHVlU3BlbGxPdXQgfHwgaWQgPT0gQ1NTVmFsdWVEaWdpdHMgCisgICAgICAgIGlmIChpZCA9PSBD
U1NWYWx1ZU5vbmUgfHwgaWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTcGVs
bE91dCB8fCBpZCA9PSBDU1NWYWx1ZURpZ2l0cwogICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFs
dWVMaXRlcmFsUHVuY3R1YXRpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb1B1bmN0dWF0aW9uKQogICAg
ICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAorCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6ICAgICAgICAgIC8vIDxsZW5n
dGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICgh
aWQgJiYgdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIG1fc3RyaWN0KSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtMTYwMiw3ICsxNjAyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gaWQgPT0gQ1NTVmFsdWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBDU1NW
YWx1ZUNlbnRlciB8fCBpZCA9PSBDU1NWYWx1ZUJhc2VsaW5lIHx8IGlkID09IENTU1ZhbHVlU3Ry
ZXRjaDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhGbG93
OgotICAgICAgICAvLyBGSVhNRTogLXdlYmtpdC1mbGV4LWZsb3cgdGFrZXMgYSBzZWNvbmQgIndy
YXAiIHZhbHVlLiAgICAKKyAgICAgICAgLy8gRklYTUU6IC13ZWJraXQtZmxleC1mbG93IHRha2Vz
IGEgc2Vjb25kICJ3cmFwIiB2YWx1ZS4KICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSBpZCA9PSBD
U1NWYWx1ZVJvdyB8fCBpZCA9PSBDU1NWYWx1ZVJvd1JldmVyc2UgfHwgaWQgPT0gQ1NTVmFsdWVD
b2x1bW4gfHwgaWQgPT0gQ1NTVmFsdWVDb2x1bW5SZXZlcnNlOwogICAgICAgICBicmVhazsKICNl
bmRpZgpAQCAtMjI0Niw3ICsyMjQ2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0
aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAg
ICAgICAgICAgICAgICAgaWYgKChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbikg
JiYgIXBhcnNlZFByb3BlcnR5W2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBi
YWNrZ3JvdW5kLW9yaWdpbiB3YXNuJ3QgcHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNs
aXAgYWxzby4KICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUs
IENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CkBAIC0zMzMyLDcgKzMzMzIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKQogCiAgICAgICAgIHJldHVybiBD
U1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQp
OwogICAgIH0KLSAgICAKKwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rp
b24tPm5hbWUsICJjdWJpYy1iZXppZXIoIikpIHsKICAgICAgICAgLy8gRm9yIGN1YmljIGJlemll
ciwgNCB2YWx1ZXMgbXVzdCBiZSBzcGVjaWZpZWQuCiAgICAgICAgIGlmICghYXJncyB8fCBhcmdz
LT5zaXplKCkgIT0gNykKQEAgLTMzNTIsNyArMzM1Miw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCiAKICAgICAgICAgcmV0
dXJuIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLCB5MSwgeDIs
IHkyKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzcwNSwyMCArMzcw
NSwyMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBl
UmVjdChDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MpOwotICAg
IAorCiAgICAgLy8gcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBbW3J4XSwgcnldKQogICAgIGlm
IChhcmdzLT5zaXplKCkgIT0gNyAmJiBhcmdzLT5zaXplKCkgIT0gOSAmJiBhcmdzLT5zaXplKCkg
IT0gMTEpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgUmVmUHRyPENTU1dyYXBTaGFw
ZVJlY3Q+IHNoYXBlID0gQ1NTV3JhcFNoYXBlUmVjdDo6Y3JlYXRlKCk7Ci0gICAgCisKICAgICB1
bnNpZ25lZCBhcmd1bWVudE51bWJlciA9IDA7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50
ID0gYXJncy0+Y3VycmVudCgpOwogICAgIHdoaWxlIChhcmd1bWVudCkgewogICAgICAgICBpZiAo
IXZhbGlkVW5pdChhcmd1bWVudCwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJndW1lbnQtPmZWYWx1ZSwg
CisKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsCiAgICAgICAgICAgICAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYXJndW1lbnQtPnVuaXQpOwogICAgICAgICBB
U1NFUlQoYXJndW1lbnROdW1iZXIgPCA2KTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudE51bWJl
cikgewpAQCAtMzc0NSwzNCArMzc0NSwzNCBAQCBQYXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NT
UGFyc2VyOjpwYXJzZVdyYXBTaGFwZVJlY3QoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogICAg
ICAgICBpZiAoYXJndW1lbnQpIHsKICAgICAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBD
U1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXJndW1l
bnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIH0KICAgICAgICAgYXJndW1lbnROdW1iZXIrKzsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoYXJndW1lbnROdW1iZXIgPCA0KQotICAgICAgICByZXR1
cm4gMDsgICAgCisgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZTsKIH0KIAogUGFz
c1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VXcmFwU2hhcGVDaXJjbGUoQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogewogICAgIEFTU0VSVChhcmdzKTsKLSAgICAKKwogICAg
IC8vIGNpcmNsZSh4LCB5LCByKQogICAgIGlmIChhcmdzLT5zaXplKCkgIT0gNSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgUmVmUHRyPENTU1dyYXBTaGFwZUNpcmNsZT4gc2hh
cGUgPSBDU1NXcmFwU2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgdW5zaWduZWQg
YXJndW1lbnROdW1iZXIgPSAwOwogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mt
PmN1cnJlbnQoKTsKICAgICB3aGlsZSAoYXJndW1lbnQpIHsKICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnQsIEZMZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gcHJpbWl0aXZlVmFs
dWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShhcmd1bWVudC0+ZlZhbHVlLCAKKyAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0
ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsCiAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcykgYXJndW1lbnQtPnVuaXQpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnROdW1i
ZXIgPCAzKTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudE51bWJlcikgewpAQCAtMzc4NiwzNyAr
Mzc4NiwzNyBAQCBQYXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdyYXBT
aGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZwogICAgICAgICAgICAgc2hhcGUtPnNl
dFJhZGl1cyhsZW5ndGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmIChhcmd1bWVu
dCkgewogICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpP
cGVyYXRvciB8fCBhcmd1bWVudC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIGFyZ3VtZW50TnVt
YmVyKys7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGFyZ3VtZW50TnVtYmVyIDwgMykKLSAgICAg
ICAgcmV0dXJuIDA7ICAgIAorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcGU7CiB9
CiAKIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlRWxs
aXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MpOwotICAg
IAorCiAgICAgLy8gZWxsaXBzZSh4LCB5LCByeCwgcnkpCiAgICAgaWYgKGFyZ3MtPnNpemUoKSAh
PSA3KQogICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgCisKICAgICBSZWZQdHI8Q1NTV3JhcFNo
YXBlRWxsaXBzZT4gc2hhcGUgPSBDU1NXcmFwU2hhcGVFbGxpcHNlOjpjcmVhdGUoKTsKICAgICB1
bnNpZ25lZCBhcmd1bWVudE51bWJlciA9IDA7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50
ID0gYXJncy0+Y3VycmVudCgpOwogICAgIHdoaWxlIChhcmd1bWVudCkgewogICAgICAgICBpZiAo
IXZhbGlkVW5pdChhcmd1bWVudCwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJndW1lbnQtPmZWYWx1ZSwg
CisKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsCiAgICAgICAgICAgICAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYXJndW1lbnQtPnVuaXQpOwogICAgICAgICBB
U1NFUlQoYXJndW1lbnROdW1iZXIgPCA0KTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudE51bWJl
cikgewpAQCAtMzgzMyw3ICszODMzLDcgQEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VXcmFwU2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCogYXIKICAgICAg
ICAgICAgIHNoYXBlLT5zZXRSYWRpdXNZKGxlbmd0aCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAg
ICAgICAgaWYgKGFyZ3VtZW50KSB7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywnKQpAQCAt
Mzg0Miw3ICszODQyLDcgQEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6cGFy
c2VXcmFwU2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCogYXIKICAgICAgICAgfQogICAg
ICAgICBhcmd1bWVudE51bWJlcisrOwogICAgIH0KLSAgICAKKwogICAgIGlmIChhcmd1bWVudE51
bWJlciA8IDQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZTsKQEAgLTM4NTUs
NyArMzg1NSw3IEBAIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3Jh
cFNoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgdW5zaWduZWQgc2l6ZSA9
IGFyZ3MtPnNpemUoKTsKICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAor
CiAgICAgUmVmUHRyPENTU1dyYXBTaGFwZVBvbHlnb24+IHNoYXBlID0gQ1NTV3JhcFNoYXBlUG9s
eWdvbjo6Y3JlYXRlKCk7CiAKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5j
dXJyZW50KCk7CkBAIC0zODY5LDM0ICszODY5LDM0IEBAIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBl
PiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIGFy
CiAgICAgICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICBzaXplIC09IDI7CiAg
ICAgfQotICAgIAorCiAgICAgLy8gPGxlbmd0aD4sIDxsZW5ndGg+IC4uLiA8bGVuZ3RoPiwgPGxl
bmd0aD4gLT4gZWFjaCBwYWlyIGhhcyAzIGVsZW1lbnRzCiAgICAgaWYgKCFzaXplIHx8IChzaXpl
ICUgMykpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFy
Z3VtZW50WCA9IGFyZ3VtZW50OwogICAgIHdoaWxlIChhcmd1bWVudFgpIHsKICAgICAgICAgaWYg
KCF2YWxpZFVuaXQoYXJndW1lbnRYLCBGTGVuZ3RoLCBtX3N0cmljdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgCisKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGNvbW1hID0gYXJn
cy0+bmV4dCgpOwogICAgICAgICBpZiAoIWNvbW1hIHx8IGNvbW1hLT51bml0ICE9IENTU1BhcnNl
clZhbHVlOjpPcGVyYXRvciB8fCBjb21tYS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAKKwogICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0g
YXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWFyZ3VtZW50WSB8fCAhdmFsaWRVbml0KGFyZ3Vt
ZW50WSwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBwcmltaXRpdmVW
YWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50WC0+ZlZhbHVlLCAKKworICAgICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCkt
PmNyZWF0ZVZhbHVlKGFyZ3VtZW50WC0+ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMpIGFyZ3VtZW50WC0+dW5pdCk7Ci0gICAgICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4geUxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFs
dWUoYXJndW1lbnRZLT5mVmFsdWUsIAorICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHlMZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50WS0+
ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZ3Vt
ZW50WS0+dW5pdCk7Ci0gICAgICAgIAorCiAgICAgICAgIHNoYXBlLT5hcHBlbmRQb2ludCh4TGVu
Z3RoLnJlbGVhc2UoKSwgeUxlbmd0aC5yZWxlYXNlKCkpOwotICAgICAgICAKKwogICAgICAgICBh
cmd1bWVudFggPSBhcmdzLT5uZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHNoYXBl
OwogfQogCkBAIC0zOTA3LDkgKzM5MDcsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VXcmFwU2hh
cGUoYm9vbCBpbXBvcnRhbnQpCiAKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKKwogICAgIFJlZlB0cjxDU1NXcmFwU2hhcGU+IHNoYXBlOwotICAgIAorCiAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlY3QoIikpCiAg
ICAgICAgIHNoYXBlID0gcGFyc2VXcmFwU2hhcGVSZWN0KGFyZ3MpOwogICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNpcmNsZSgiKSkKQEAgLTUx
MzksNyArNTEzOSw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAgICAgLCBt
X2FsbG93UmVwZWF0KHRydWUpCiAgICAgLCBtX2FsbG93U2xhc2goZmFsc2UpCiAgICAgLCBtX3Jl
cXVpcmVXaWR0aChmYWxzZSkKLSAgICAsIG1fcmVxdWlyZU91dHNldChmYWxzZSkgICAgCisgICAg
LCBtX3JlcXVpcmVPdXRzZXQoZmFsc2UpCiAgICAge30KIAogICAgIGJvb2wgY2FuQWR2YW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FuQWR2YW5jZTsgfQpAQCAtNTE1Myw3ICs1MTUzLDcgQEAgc3Ry
dWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKIAogICAgIGJvb2wgcmVxdWlyZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXF1aXJlV2lkdGg7IH0KICAgICBib29sIHJlcXVpcmVPdXRzZXQo
KSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVPdXRzZXQ7IH0KLSAgICAKKwogICAgIHZvaWQgY29t
bWl0SW1hZ2UoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UpCiAgICAgewogICAgICAgICBtX2lt
YWdlID0gaW1hZ2U7CkBAIC01MjE3LDcgKzUyMTcsNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJz
ZUNvbnRleHQgewogICAgICAgICAvLyBNYWtlIG91ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5v
dy4KICAgICAgICAgcmV0dXJuIENTU0JvcmRlckltYWdlVmFsdWU6OmNyZWF0ZShtX2ltYWdlLCBt
X2ltYWdlU2xpY2UsIG1fYm9yZGVyU2xpY2UsIG1fb3V0c2V0LCBtX3JlcGVhdCk7CiAgICAgfQot
ICAgIAorCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSogbV9wcmltaXRpdmVWYWx1ZUNhY2hl
OwogCiAgICAgYm9vbCBtX2NhbkFkdmFuY2U7CkBAIC01MjI3LDcgKzUyMjcsNyBAQCBzdHJ1Y3Qg
Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgIGJvb2wgbV9hbGxvd0ltYWdlU2xpY2U7CiAg
ICAgYm9vbCBtX2FsbG93UmVwZWF0OwogICAgIGJvb2wgbV9hbGxvd1NsYXNoOwotICAgIAorCiAg
ICAgYm9vbCBtX3JlcXVpcmVXaWR0aDsKICAgICBib29sIG1fcmVxdWlyZU91dHNldDsKIApAQCAt
NTI0OCw3ICs1MjQ4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UoaW50IHBy
b3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogCiAgICAgICAgIGlmICghY29udGV4dC5j
YW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd1NsYXNoKCkgJiYgdmFsLT51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWwtPmlWYWx1ZSA9PSAnLycpCiAgICAgICAgICAgICBj
b250ZXh0LmNvbW1pdFNsYXNoKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY29udGV4dC5j
YW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdlKCkpIHsKICAgICAgICAgICAgIGlmICh2
YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYgbV9zdHlsZVNoZWV0KSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjb21wbGV0ZVVSTCBjYWxsIHNob3VsZCBi
ZSBkb25lIHdoZW4gdXNpbmcgdGhlIENTU0ltYWdlVmFsdWUsCkBAIC01MjYzLDM0ICs1MjYzLDM0
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIFJlZlB0cjxD
U1NWYWx1ZT4mIHJlc3VsdCkKICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLT5pZCA9PSBDU1NW
YWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShDU1NJbWFnZVZh
bHVlOjpjcmVhdGUoKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFjb250
ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93SW1hZ2VTbGljZSgpKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiBpbWFnZVNsaWNlOwogICAgICAg
ICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VTbGljZShwcm9wSWQsIGltYWdlU2xpY2UpKQogICAg
ICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2VTbGljZShpbWFnZVNsaWNlLnJlbGVhc2Uo
KSk7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgaWYgKCFjb250
ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LmFsbG93UmVwZWF0KCkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcmVwZWF0OwogICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1h
Z2VSZXBlYXQocmVwZWF0KSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFJlcGVhdChy
ZXBlYXQpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY29udGV4dC5jYW5B
ZHZhbmNlKCkgJiYgY29udGV4dC5yZXF1aXJlV2lkdGgoKSkgewogICAgICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBib3JkZXJTbGljZTsKICAgICAgICAgICAgIGlmIChwYXJzZUJv
cmRlckltYWdlV2lkdGgoYm9yZGVyU2xpY2UpKQogICAgICAgICAgICAgICAgIGNvbnRleHQuY29t
bWl0Qm9yZGVyV2lkdGgoYm9yZGVyU2xpY2UucmVsZWFzZSgpKTsKLSAgICAgICAgfSAKLSAgICAg
ICAgCisgICAgICAgIH0KKwogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNv
bnRleHQucmVxdWlyZU91dHNldCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGJvcmRlck91dHNldDsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlT3V0
c2V0KGJvcmRlck91dHNldCkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJP
dXRzZXQoYm9yZGVyT3V0c2V0LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAg
ICAgICB9CisKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
IH0KIApAQCAtNTMxNyw3ICs1MzE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1h
Z2VSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogICAgICAgICBmaXJzdFZhbHVlID0g
cHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICB2YWwgPSBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgIGlmICh2YWwpIHsKICAgICAgICAgaWYgKGlzQm9yZGVySW1hZ2VS
ZXBlYXRLZXl3b3JkKHZhbC0+aWQpKQpAQCAtNTQwMiw3ICs1NDAyLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyBNYWtlIG91ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5vdy4KICAgICAgICAgcmV0
dXJuIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTo6Y3JlYXRlKG1fcHJpbWl0aXZlVmFsdWVDYWNo
ZS0+Y3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpLCBtX2ZpbGwpOwogICAgIH0KLSAgICAKKwog
cHJpdmF0ZToKICAgICBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBtX3ByaW1pdGl2ZVZhbHVlQ2Fj
aGU7CiAKQEAgLTU0MTQsNyArNTQxNCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX3JpZ2h0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0
b207CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci0gICAgCisKICAgICBi
b29sIG1fZmlsbDsKIH07CiAKQEAgLTU0NzMsNyArNTQ3Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHZhbCA9IG1fcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHYt
PmlkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdmFsID0gbV9wcmltaXRpdmVWYWx1ZUNh
Y2hlLT5jcmVhdGVWYWx1ZSh2LT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
KXYtPnVuaXQpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIW1fdG9wKQogICAgICAgICAgICAg
bV90b3AgPSB2YWw7CiAgICAgICAgIGVsc2UgaWYgKCFtX3JpZ2h0KQpAQCAtNTUxOCw3ICs1NTE4
LDcgQEAgcHVibGljOgogICAgICAgICAvLyBNYWtlIG91ciBuZXcgdmFsdWUgbm93LgogICAgICAg
ICByZXR1cm4gbV9wcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShxdWFkLnJlbGVhc2Uo
KSk7CiAgICAgfQotICAgIAorCiBwcml2YXRlOgogICAgIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUq
IG1fcHJpbWl0aXZlVmFsdWVDYWNoZTsKIApAQCAtNTY4NSw3ICs1Njg1LDcgQEAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQo
Q1NTUGFyc2VyVmFsdWUKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsK
ICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAg
ICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAibGVmdCIpICYmIGhvcml6b250
YWwpIHx8IAorICAgICAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgImxlZnQi
KSAmJiBob3Jpem9udGFsKSB8fAogICAgICAgICAgICAgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0
cmluZywgInRvcCIpICYmICFob3Jpem9udGFsKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHByaW1p
dGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpOwogICAgICAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5n
LCAicmlnaHQiKSAmJiBob3Jpem9udGFsKSB8fApAQCAtNTcxMiw3ICs1NzEyLDcgQEAgc3RhdGlj
IGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQ
YXJzZXJWYWx1ZSogYSwgQ1MKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgImZyb20oIikg
fHwgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgi
KSB8fAogICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgInRvKCIp
KSB7CiAgICAgICAgIC8vIFRoZSAiZnJvbSIgYW5kICJ0byIgc3RvcHMgZXhwZWN0IDEgYXJndW1l
bnQuCiAgICAgICAgIGlmIChhcmdzLT5zaXplKCkgIT0gMSkKQEAgLTU5MjQsNyArNTkyNCw3IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUdyYWRpZW50Q29sb3JP
cktleXdvcmQoQ1NTUGFyc2VyKiBwLCBDCiBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFk
aWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0
aW5nKQogewogICAgIFJlZlB0cjxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NM
aW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVwZWF0aW5nKTsKLSAgICAKKwogICAgIC8vIFdh
bGsgdGhlIGFyZ3VtZW50cy4KICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJncy5nZXQoKTsKICAgICBpZiAoIWFyZ3MgfHwg
IWFyZ3MtPnNpemUoKSkKQEAgLTU5MzgsMTMgKzU5MzgsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTGluZWFyR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50
UmVwZWEKICAgICAvLyBMb29rIGZvciBhbmdsZS4KICAgICBpZiAodmFsaWRVbml0KGEsIEZBbmds
ZSwgdHJ1ZSkpIHsKICAgICAgICAgcmVzdWx0LT5zZXRBbmdsZShjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoYSkpOwotICAgICAgICAKKwogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAg
ICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTG9vayBv
bmUgb3IgdHdvIG9wdGlvbmFsIGtleXdvcmRzIHRoYXQgaW5kaWNhdGUgYSBzaWRlIG9yIGNvcm5l
ci4KICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdGFydFgsIHN0YXJ0WTsKLSAg
ICAgICAgCisKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbjsKICAg
ICAgICAgYm9vbCBpc0hvcml6b250YWwgPSBmYWxzZTsKICAgICAgICAgaWYgKChsb2NhdGlvbiA9
IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCwgcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpKSkpIHsKQEAgLTU5NTIsNyArNTk1Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVh
ckdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAg
ICAgICAgICAgICAgICAgc3RhcnRYID0gbG9jYXRpb247CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgc3RhcnRZID0gbG9jYXRpb247Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKChsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCwg
cHJpbWl0aXZlVmFsdWVDYWNoZSgpKSkpIHsKQEAgLTU5NzIsMTAgKzU5NzIsMTAgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQs
IENTU0dyYWRpZW50UmVwZWEKIAogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghc3RhcnRYICYmICFzdGFydFkpCiAgICAg
ICAgICAgICBzdGFydFkgPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVRvcCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICByZXN1bHQtPnNldEZp
cnN0WChzdGFydFgucmVsZWFzZSgpKTsKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoc3RhcnRZ
LnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtNTk5NCw3ICs1OTk0LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlTGluZWFyR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRp
ZW50UmVwZWEKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0cjxDU1NW
YWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7CiAgICAgUmVm
UHRyPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU1JhZGlhbEdyYWRpZW50VmFs
dWU6OmNyZWF0ZShyZXBlYXRpbmcpOwotICAgIAorCiAgICAgLy8gV2FsayB0aGUgYXJndW1lbnRz
LgogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCkt
PmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIGlmICghYXJncyB8fCAhYXJncy0+c2l6ZSgpKQpA
QCAtNjAxNCw3ICs2MDE0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQo
UmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICBhID0gYXJn
cy0+Y3VycmVudCgpOwogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgaWYgKGNlbnRlclggfHwgY2VudGVyWSkgewogICAgICAgICAvLyBDb21tYQogICAgICAg
ICBpZiAoYS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgYS0+aVZhbHVlICE9
ICcsJykKQEAgLTYwMjQsNyArNjAyNCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdy
YWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAg
ICAgIGlmICghYSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICBBU1NFUlQoIWNlbnRlclggfHwgY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKICAgICBB
U1NFUlQoIWNlbnRlclkgfHwgY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKIApAQCAtNjAz
Myw3ICs2MDMzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoUmVmUHRy
PENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICAvLyBDU1MzIHJhZGlh
bCBncmFkaWVudHMgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgcG9pbnQuCiAg
ICAgcmVzdWx0LT5zZXRGaXJzdFkoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihjZW50
ZXJZLmdldCgpKSk7CiAgICAgcmVzdWx0LT5zZXRTZWNvbmRZKHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4oY2VudGVyWS5nZXQoKSkpOwotICAgIAorCiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzaGFwZVZhbHVlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6
ZVZhbHVlOwogCkBAIC02MDQxLDcgKzYwNDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRp
YWxHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CiAgICAgICAgIGlmIChhLT51bml0ICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAK
KwogICAgICAgICBib29sIGZvdW5kVmFsdWUgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoIChhLT5p
ZCkgewogICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgpAQCAtNjA2OCwxMCArNjA2OCwxMCBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBn
cmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmVzdWx0LT5zZXRTaGFwZShzaGFwZVZh
bHVlKTsKICAgICByZXN1bHQtPnNldFNpemluZ0JlaGF2aW9yKHNpemVWYWx1ZSk7Ci0gICAgCisK
ICAgICAvLyBPciwgdHdvIGxlbmd0aHMgb3IgcGVyY2VudGFnZXMKICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGhvcml6b250YWxTaXplOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmVydGljYWxTaXplOwpAQCAtNjA5OSw3ICs2MDk5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlUmFkaWFsR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50
UmVwZWEKICAgICAvLyBNdXN0IGhhdmUgbmVpdGhlciBvciBib3RoLgogICAgIGlmICghaG9yaXpv
bnRhbFNpemUgIT0gIXZlcnRpY2FsU2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CiAgICAgcmVzdWx0LT5zZXRFbmRIb3Jpem9udGFsU2l6ZShob3Jpem9udGFsU2l6ZSk7CiAgICAg
cmVzdWx0LT5zZXRFbmRWZXJ0aWNhbFNpemUodmVydGljYWxTaXplKTsKIApAQCAtNjEzOSw3ICs2
MTM5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnRDb2xvclN0b3BzKENTU1BhcnNl
clZhbHVlTGlzdCogdmFsdWVMaXN0LCBDU1NHcmFkaWUKICAgICAgICAgICAgICAgICBhID0gdmFs
dWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgZ3JhZGllbnQtPmFkZFN0b3Aoc3RvcCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1
ZTsKICAgICB9CkBAIC02NDE3LDcgKzY0MTcsNyBAQCBib29sIENTU1BhcnNlcjo6aXNWYWxpZEZp
bHRlckFyZ3VtZW50KENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCwgV2ViS2l0Q1NTRmlsdGVyVgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBpZiAoIXZhbGlkVW5pdChhcmd1
bWVudCwgRk51bWJlciwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IC8vIENoZWNrIHBhcmFtZXRlciB2YWx1ZXMuCiAgICAgaWYgKGZpbHRlclR5cGUgPT0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9wZXJhdGlvbgogICAgICAgICB8fCBmaWx0
ZXJUeXBlID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRlck9wZXJhdGlvbgpAQCAt
NjQ2NiwxMiArNjQ2NiwxMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpw
YXJzZUZpbHRlcigpCiAgICAgICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHJl
ZmVyZW5jZUZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChyZWZlcmVuY2VGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICByZWZlcmVuY2VG
aWx0ZXJWYWx1ZS0+YXBwZW5kKHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFs
dWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKLSAgICAgICAgfSBl
bHNlIHsgICAgICAgIAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY29uc3QgQ1NTUGFy
c2VyU3RyaW5nIG5hbWUgPSB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWU7CiAgICAgICAgICAgICB1bnNp
Z25lZCBtYXhpbXVtQXJndW1lbnRDb3VudCA9IDE7CiAKICAgICAgICAgICAgIGZpbHRlckluZm9G
b3JOYW1lKG5hbWUsIGZpbHRlclR5cGUsIG1heGltdW1Bcmd1bWVudENvdW50KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAoZmlsdGVyVHlwZSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6VW5rbm93bkZpbHRlck9wZXJhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIApA
QCAtNjQ4Miw3ICs2NDgyLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6
cGFyc2VGaWx0ZXIoKQogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgV2ViS2l0Q1NTRmls
dGVyVmFsdWUgZm9yIHRoaXMgb3BlcmF0aW9uIGFuZCBhZGQgaXQgdG8gb3VyIGxpc3QuCiAgICAg
ICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IGZpbHRlclZhbHVlID0gV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShmaWx0ZXJUeXBlKTsKICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChmaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ1NTUGFyc2Vy
VmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgpOwogICAgICAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRDb3VudCA9IDA7CiAKQEAgLTY3MzcsNyArNjczNyw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUxpbmVCb3hDb250YWluKGJvb2wgaW1wb3J0YW50KQogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWxpbmVCb3hD
b250YWluKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTcyNTEsNyArNzI1MSw3IEBAIENT
U1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAgICAgICAgIHByb3Bl
cnR5LT5tX3ZhbHVlID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4ocHJvcGVydHktPnZhbHVlKCkpLT5h
cHBlbmQodmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHkgJiYgKCFwcm9wZXJ0eS0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihwcm9wZXJ0eS0+dmFsdWUoKSktPmxlbmd0aCgpICE9
IDEpKSB7Ci0gICAgICAgICAgICAvLyBVbmxpa2UgZm9udC1mYW1pbHkgcHJvcGVydHksIGZvbnQt
ZmFtaWx5IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBydWxlIAorICAgICAgICAgICAgLy8gVW5s
aWtlIGZvbnQtZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250
LWZhY2UgcnVsZQogICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4
YWN0bHkgb25lIGZhbWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCiAgICAgICAgICAgICAvLyBo
YXZlICdpbml0aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KICAg
ICAgICAgICAgIC8vIFNlZSBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3MzLWZvbnRzLyNmb250
LWZhbWlseS1kZXNjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggZTM5MWIzOS4uYzgwNGU0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtOTgsNyArOTgsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25YKENTU1BhcnNlclZhbHVlTGlzdCop
OwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRmlsbFBvc2l0aW9uWShDU1NQYXJzZXJW
YWx1ZUxpc3QqKTsKICAgICB2b2lkIHBhcnNlRmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlz
dCosIFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7Ci0gICAgCisKICAgICB2
b2lkIHBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYp
OwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRmlsbFNpemUoaW50IHByb3BJZCwgYm9v
bCAmYWxsb3dDb21tYSk7CiAKQEAgLTMwNSw3ICszMDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKLSAgICAKKwogICAgIHZv
aWQgcmVjaGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKTsKIAogICAgIHZv
aWQgc2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcmLCBjb25zdCBj
aGFyKiBzdWZmaXgpOwpAQCAtMzg1LDcgKzM4NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJv
b2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiwgVW5pdHMsIGJvb2wgc3RyaWN0KTsKIAogICAg
IGJvb2wgcGFyc2VCb3JkZXJJbWFnZVF1YWQoVW5pdHMsIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4mKTsKLSAgICAKKwogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQYXJzZXJWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVl
Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKaW5kZXggM2U5NzAxMy4u
MDY4ODMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKQEAgLTI3LDcg
KzI3LDcgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgICAgICAKKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogQ1NTUGFyc2VyVmFsdWVM
aXN0Ojp+Q1NTUGFyc2VyVmFsdWVMaXN0KCkKQEAgLTUwLDcgKzUwLDcgQEAgdm9pZCBDU1NQYXJz
ZXJWYWx1ZUxpc3Q6Omluc2VydFZhbHVlQXQodW5zaWduZWQgaSwgY29uc3QgQ1NTUGFyc2VyVmFs
dWUmIHYpCiB9CiAKIHZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0OjpkZWxldGVWYWx1ZUF0KHVuc2ln
bmVkIGkpCi17IAorewogICAgIG1fdmFsdWVzLnJlbW92ZShpKTsKIH0KIApAQCAtODUsNyArODUs
NyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXJWYWx1ZTo6Y3JlYXRlQ1NTVmFsdWUo
KQogICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVBbGxvd2lu
Z01hcmdpblF1aXJrKGZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwogICAgIHJl
dHVybiBwYXJzZWRWYWx1ZTsKIH0KLSAgICAKKwogQ1NTUGFyc2VyU2VsZWN0b3I6OkNTU1BhcnNl
clNlbGVjdG9yKCkKICAgICA6IG1fc2VsZWN0b3IoYWRvcHRQdHIoZmFzdE5ldzxDU1NTZWxlY3Rv
cj4oKSkpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKaW5kZXggNDlmMDFkMC4u
Y2I1YzkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaApAQCAtNTYsOCArNTYs
OCBAQCBzdHJ1Y3QgQ1NTUGFyc2VyVmFsdWUgewogICAgICAgICBRX0VNUyAgICA9IDB4MTAwMDAy
CiAgICAgfTsKICAgICBpbnQgdW5pdDsKLSAgICAKLSAgICAKKworCiAgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gY3JlYXRlQ1NTVmFsdWUoKTsKIH07CiAKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogICAgIHsKICAgICB9CiAgICAgfkNTU1BhcnNlclZhbHVlTGlzdCgpOwotICAgIAorCiAgICAg
dm9pZCBhZGRWYWx1ZShjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwogICAgIHZvaWQgaW5zZXJ0VmFs
dWVBdCh1bnNpZ25lZCwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKICAgICB2b2lkIGRlbGV0ZVZh
bHVlQXQodW5zaWduZWQpOwpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlQXQodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fdmFsdWVz
LnNpemUoKSA/ICZtX3ZhbHVlc1tpXSA6IDA7IH0KLSAgICAgICAgCisKICAgICB2b2lkIGNsZWFy
KCkgeyBtX3ZhbHVlcy5jbGVhcigpOyB9CiAKIHByaXZhdGU6CkBAIC0xMDksNyArMTA5LDcgQEAg
cHVibGljOgogICAgIH5DU1NQYXJzZXJTZWxlY3RvcigpOwogCiAgICAgUGFzc093blB0cjxDU1NT
ZWxlY3Rvcj4gcmVsZWFzZVNlbGVjdG9yKCkgeyByZXR1cm4gbV9zZWxlY3Rvci5yZWxlYXNlKCk7
IH0KLSAgICAKKwogICAgIHZvaWQgc2V0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSB7
IG1fc2VsZWN0b3ItPnNldFRhZyh2YWx1ZSk7IH0KICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOyB9CiAgICAg
dm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIHsgbV9zZWxlY3Rv
ci0+c2V0QXR0cmlidXRlKHZhbHVlKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAKaW5kZXggNDU2NGUzMS4uNWY5YTZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCkBAIC00MTIsNyArNDEyLDcgQEAgZG91YmxlIENTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5
bGUqIHIKICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RG91YmxlVmFsdWUoKSAqIGZhY3RvcjsKICAg
ICBpZiAoIWFwcGx5Wm9vbU11bHRpcGxpZXIgfHwgbXVsdGlwbGllciA9PSAxLjApCiAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgIAorCiAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0
IHdhcyA+PSAxIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuICBUaGlzIGtl
ZXBzIGJvcmRlciBsaW5lcyBmcm9tCiAgICAgLy8gdmFuaXNoaW5nLgogICAgIGRvdWJsZSB6b29t
ZWRSZXN1bHQgPSByZXN1bHQgKiBtdWx0aXBsaWVyOwpAQCAtNDIzLDcgKzQyMyw3IEBAIGRvdWJs
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiByCiAKIHZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFs
dWUodW5zaWduZWQgc2hvcnQsIGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8g
S2VlcGluZyB2YWx1ZXMgaW1tdXRhYmxlIG1ha2VzIG9wdGltaXphdGlvbnMgZWFzaWVyIGFuZCBh
bGxvd3Mgc2hhcmluZyBvZiB0aGUgcHJpbWl0aXZlIHZhbHVlIG9iamVjdHMuIAorICAgIC8vIEtl
ZXBpbmcgdmFsdWVzIGltbXV0YWJsZSBtYWtlcyBvcHRpbWl6YXRpb25zIGVhc2llciBhbmQgYWxs
b3dzIHNoYXJpbmcgb2YgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvYmplY3RzLgogICAgIC8vIE5vIG90
aGVyIGVuZ2luZSBzdXBwb3J0cyBtdXRhdGluZyBzdHlsZSB0aHJvdWdoIHRoaXMgQVBJLiBDb21w
dXRlZCBzdHlsZSBpcyBhbHdheXMgcmVhZC1vbmx5IGFueXdheS4KICAgICAvLyBTdXBwb3J0aW5n
IHNldHRlciB3b3VsZCByZXF1aXJlIG1ha2luZyBwcmltaXRpdmUgdmFsdWUgY29weS1vbi13cml0
ZSBhbmQgdGFraW5nIGNhcmUgb2Ygc3R5bGUgaW52YWxpZGF0aW9uLgogICAgIGVjID0gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwpAQCAtNTY4LDcgKzU2OCw3IEBAIGJvb2wgQ1NTUHJpbWl0
aXZlVmFsdWU6OmdldERvdWJsZVZhbHVlSW50ZXJuYWwoVW5pdFR5cGVzIHJlcXVlc3RlZFVuaXRU
eXBlLCBkb3ViCiAKIHZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldFN0cmluZ1ZhbHVlKHVuc2ln
bmVkIHNob3J0LCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBL
ZWVwaW5nIHZhbHVlcyBpbW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNpZXIgYW5kIGFs
bG93cyBzaGFyaW5nIG9mIHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4gCisgICAgLy8gS2Vl
cGluZyB2YWx1ZXMgaW1tdXRhYmxlIG1ha2VzIG9wdGltaXphdGlvbnMgZWFzaWVyIGFuZCBhbGxv
d3Mgc2hhcmluZyBvZiB0aGUgcHJpbWl0aXZlIHZhbHVlIG9iamVjdHMuCiAgICAgLy8gTm8gb3Ro
ZXIgZW5naW5lIHN1cHBvcnRzIG11dGF0aW5nIHN0eWxlIHRocm91Z2ggdGhpcyBBUEkuIENvbXB1
dGVkIHN0eWxlIGlzIGFsd2F5cyByZWFkLW9ubHkgYW55d2F5LgogICAgIC8vIFN1cHBvcnRpbmcg
c2V0dGVyIHdvdWxkIHJlcXVpcmUgbWFraW5nIHByaW1pdGl2ZSB2YWx1ZSBjb3B5LW9uLXdyaXRl
IGFuZCB0YWtpbmcgY2FyZSBvZiBzdHlsZSBpbnZhbGlkYXRpb24uCiAgICAgZWMgPSBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5o
CmluZGV4IDZlNTY1YWIuLjQ2ZjM2NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5oCkBAIC04MywxNSArODMsMTUgQEAgcHVibGljOgogICAgICAgICBDU1NfUEFJUiA9IDEw
MCwgLy8gV2UgZW52aXNpb24gdGhpcyBiZWluZyBleHBvc2VkIGFzIGEgbWVhbnMgb2YgZ2V0dGlu
ZyBjb21wdXRlZCBzdHlsZSB2YWx1ZXMgZm9yIHBhaXJzIChib3JkZXItc3BhY2luZy9yYWRpdXMs
IGJhY2tncm91bmQtcG9zaXRpb24sIGV0Yy4pCiAgICAgICAgIENTU19EQVNIQk9BUkRfUkVHSU9O
ID0gMTAxLCAvLyBGSVhNRTogRGFzaGJvYXJkIHJlZ2lvbiBzaG91bGQgbm90IGJlIGEgcHJpbWl0
aXZlIHZhbHVlLgogICAgICAgICBDU1NfVU5JQ09ERV9SQU5HRSA9IDEwMiwKLSAgICAgICAgCisK
ICAgICAgICAgLy8gVGhlc2UgbmV4dCB0eXBlcyBhcmUganVzdCB1c2VkIGludGVybmFsbHkgdG8g
YWxsb3cgdXMgdG8gdHJhbnNsYXRlIGJhY2sgYW5kIGZvcnRoIGZyb20gQ1NTUHJpbWl0aXZlVmFs
dWVzIHRvIENTU1BhcnNlclZhbHVlcy4KICAgICAgICAgQ1NTX1BBUlNFUl9PUEVSQVRPUiA9IDEw
MywKICAgICAgICAgQ1NTX1BBUlNFUl9JTlRFR0VSID0gMTA0LAogICAgICAgICBDU1NfUEFSU0VS
X0hFWENPTE9SID0gMTA1LAotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGludGVy
bmFsbHkgZm9yIHVua25vd24gaWRlbnRpZmllcnMgCisKKyAgICAgICAgLy8gVGhpcyBpcyB1c2Vk
IGludGVybmFsbHkgZm9yIHVua25vd24gaWRlbnRpZmllcnMKICAgICAgICAgQ1NTX1BBUlNFUl9J
REVOVElGSUVSID0gMTA2LAotICAgICAgICAKKwogICAgICAgICAvLyBUaGVzZSBhcmUgZnJvbSBD
U1MzIFZhbHVlcyBhbmQgVW5pdHMsIGJ1dCB0aGF0IGlzbid0IGEgZmluaXNoZWQgc3RhbmRhcmQg
eWV0CiAgICAgICAgIENTU19UVVJOID0gMTA3LAogICAgICAgICBDU1NfUkVNUyA9IDEwOCwKQEAg
LTEwMSwxMSArMTAxLDExIEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBUaGlzIGlzIHVzZWQgYnkg
dGhlIENTUyBFeGNsdXNpb25zIGRyYWZ0CiAgICAgICAgIENTU19TSEFQRSA9IDExMCwKLSAgICAg
ICAgCisKICAgICAgICAgLy8gVXNlZCBieSBib3JkZXIgaW1hZ2VzLgogICAgICAgICBDU1NfUVVB
RCA9IDExMQogICAgIH07Ci0gICAgCisKICAgICAvLyBUaGlzIGVudW0gZm9sbG93cyB0aGUgQ1NT
UGFyc2VyOjpVbml0cyBlbnVtIGF1Z21lbnRlZCB3aXRoIFVOSVRfRlJFUVVFTkNZIGZvciBmcmVx
dWVuY2llcy4KICAgICBlbnVtIFVuaXRDYXRlZ29yeSB7CiAgICAgICAgIFVOdW1iZXIsCkBAIC0x
MjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjcmVhdGVDb2xvcih1bnNpZ25lZCByZ2JWYWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJnYlZhbHVlKSk7IH0KICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSwgVW5pdFR5cGVzIHR5cGUp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOyB9
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIHZhbHVlLCBVbml0VHlwZXMgdHlwZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1By
aW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSk7IH0KLSAgICAKKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoVCB2YWx1
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAKICAgICAvLyB1c2Ugd2l0aCBj
YXJlISEhCiAgICAgdm9pZCBzZXRQcmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsg
bV90eXBlID0gdHlwZTsgfQotICAgIAorCiAgICAgZG91YmxlIGdldERvdWJsZVZhbHVlKHVuc2ln
bmVkIHNob3J0IHVuaXRUeXBlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgZG91YmxlIGdl
dERvdWJsZVZhbHVlKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKSBjb25zdDsKICAgICBkb3VibGUg
Z2V0RG91YmxlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLm51bTsgfQpAQCAtMTkzLDcg
KzE5Myw3IEBAIHB1YmxpYzoKIAogICAgIFF1YWQqIGdldFF1YWRWYWx1ZShFeGNlcHRpb25Db2Rl
JikgY29uc3Q7CiAgICAgUXVhZCogZ2V0UXVhZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
ICE9IENTU19RVUFEID8gMCA6IG1fdmFsdWUucXVhZDsgfQotICAgIAorCiAgICAgUGFzc1JlZlB0
cjxSR0JDb2xvcj4gZ2V0UkdCQ29sb3JWYWx1ZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAg
UkdCQTMyIGdldFJHQkEzMlZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlICE9IENTU19SR0JD
T0xPUiA/IDAgOiBtX3ZhbHVlLnJnYmNvbG9yOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZUNhY2hlLmNwcAppbmRleCAzYWRhZGY4Li5hNWI1ODhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuY3BwCkBAIC02NSw3ICs2
NSw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1ByaW1pdGl2ZVZhbHVlQ2Fj
aGU6OmNyZWF0ZUNvbG9yVmFsdWUodW5zaWduZWQKICAgICAvLyBKdXN0IGJlY2F1c2UgaXQgaXMg
Y29tbW9uLgogICAgIGlmIChyZ2JWYWx1ZSA9PSBDb2xvcjo6YmxhY2spCiAgICAgICAgIHJldHVy
biBtX2NvbG9yQmxhY2s7Ci0gICAgCisKICAgICAvLyBKdXN0IHdpcGUgb3V0IHRoZSBjYWNoZSBh
bmQgc3RhcnQgcmVidWlsZGluZyBpZiBpdCBnZXRzIHRvbyBiaWcuCiAgICAgY29uc3QgaW50IG1h
eGltdW1Db2xvckNhY2hlU2l6ZSA9IDUxMjsKICAgICBpZiAobV9jb2xvclZhbHVlQ2FjaGUuc2l6
ZSgpID4gbWF4aW11bUNvbG9yQ2FjaGVTaXplKQpAQCAtODgsNyArODgsNyBAQCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlOjpjcmVhdGVWYWx1ZShk
b3VibGUgdmFsdWUsCiAgICAgaW50IGludFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSk7
CiAgICAgaWYgKHZhbHVlICE9IGludFZhbHVlKQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7Ci0gICAgCisKICAgICBJbnRlZ2VyVmFsdWVDYWNo
ZSogY2FjaGU7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmgK
aW5kZXggOGJlM2I1Mi4uNjMyYWMxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWVDYWNoZS5oCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSAKKwogI2lmbmRlZiBDU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlX2gKICNkZWZpbmUgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZV9oCiAKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAKKwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSA6IHB1YmxpYyBSZWZD
b3VudGVkPENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZUNhY2hlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSk7IH0KQEAgLTQyLDcgKzQyLDcgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVlKGRvdWJsZSB2
YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyk7CiAgICAgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gY3JlYXRlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHZhbHVlLCB0eXBlKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVWYWx1ZShUIHZhbHVlKSB7IHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlKTsgfQotICAgIAorCiBwcml2YXRlOgogICAg
IENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUoKTsKIApAQCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9jb2xvclRyYW5zcGFyZW50OwogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9jb2xvcldoaXRlOwogICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV9jb2xvckJsYWNrOwotICAgIAorCiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+IEludGVnZXJWYWx1ZUNhY2hlOwogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9waXhlbFplcm87CiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX3BlcmNlbnRaZXJvOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmgKaW5kZXggMGI5Y2M4ZC4uMTRmODM1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCkBAIC04LDEzICs4LDEz
IEBACiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKLSAqIAorICoKICAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTCiAgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgpAQCAtMjcwOCw3ICsyNzA4LDcgQEAgdGVtcGxhdGU8
PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEZvbnRTbW9vdGhp
bmdNb2RlIHNtb290aGkKICAgICAgICAgbV92YWx1ZS5pZGVudCA9IENTU1ZhbHVlU3VicGl4ZWxB
bnRpYWxpYXNlZDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIG1fdmFsdWUuaWRlbnQgPSBDU1NWYWx1ZUF1dG87CiB9CkBAIC0y
NzI1LDcgKzI3MjUsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgRm9udFNtb290aGluZ01vZGUoKSBjb25zdAogICAgIGNhc2UgQ1NTVmFsdWVTdWJwaXhl
bEFudGlhbGlhc2VkOgogICAgICAgICByZXR1cm4gU3VicGl4ZWxBbnRpYWxpYXNlZDsKICAgICB9
Ci0gICAgCisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gQXV0b1Ntb290
aGluZzsKIH0KQEAgLTI5ODUsNyArMjk4NSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShFU3BlYWsgZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQotICAgIAorCiB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3Bl
cmF0b3IgT3JkZXIoKSBjb25zdAogewogICAgIHN3aXRjaCAobV92YWx1ZS5pZGVudCkgewpAQCAt
MzYxMCw3ICszNjEwLDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9w
ZXJhdG9yIEVWZWN0b3JFZmZlY3QoKSBjb25zdAogICAgICAgICByZXR1cm4gVkVfTk9ORTsKICAg
ICB9CiB9Ci0gICAgCisKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmNwcApp
bmRleCAxZTA0ZGE3Li42OWIyZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5jcHAKQEAg
LTQ4LDcgKzQ4LDcgQEAgc3RhdGljIGludCByZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5KFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW4KICAgICAgICAgICAgIC8vIExl
ZnQgPSBTdGFydCwgUmlnaHQgPSBFbmQsIEJlZm9yZSA9IFRvcCwgQWZ0ZXIgPSBCb3R0b20KICAg
ICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW2xvZ2ljYWxTaWRlXTsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAod3JpdGluZ01vZGUgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9k
ZSkgewogICAgICAgICAgICAgLy8gU3RhcnQgPSBMZWZ0LCBFbmQgPSBSaWdodCwgQmVmb3JlID0g
Qm90dG9tLCBBZnRlciA9IFRvcC4KICAgICAgICAgICAgIHN3aXRjaCAobG9naWNhbFNpZGUpIHsK
QEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIGludCByZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5KFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW4KICAgICAgICAgICAgICAg
ICByZXR1cm4gcHJvcGVydGllc1tUb3BTaWRlXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBpZiAod3JpdGluZ01vZGUgPT0gTGVmdFRvUmlnaHRXcml0aW5n
TW9kZSkgewogICAgICAgICAgICAgLy8gU3RhcnQgPSBUb3AsIEVuZCA9IEJvdHRvbSwgQmVmb3Jl
ID0gTGVmdCwgQWZ0ZXIgPSBSaWdodC4KICAgICAgICAgICAgIHN3aXRjaCAobG9naWNhbFNpZGUp
IHsKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIGludCByZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5
KFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW4KICAgICAgICAgICAg
ICAgICByZXR1cm4gcHJvcGVydGllc1tSaWdodFNpZGVdOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFN0YXJ0ID0gVG9wLCBFbmQgPSBCb3R0b20sIEJl
Zm9yZSA9IFJpZ2h0LCBBZnRlciA9IExlZnQKICAgICAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkg
ewogICAgICAgICBjYXNlIFN0YXJ0U2lkZToKQEAgLTEwMyw3ICsxMDMsNyBAQCBzdGF0aWMgaW50
IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRp
bmdNb2RlIHdyaXRpbgogICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNbQm90dG9tU2lkZV07
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAod3JpdGluZ01vZGUgPT0gQm90dG9t
VG9Ub3BXcml0aW5nTW9kZSkgewogICAgICAgICAvLyBTdGFydCA9IFJpZ2h0LCBFbmQgPSBMZWZ0
LCBCZWZvcmUgPSBCb3R0b20sIEFmdGVyID0gVG9wCiAgICAgICAgIHN3aXRjaCAobG9naWNhbFNp
ZGUpIHsKQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgaW50IHJlc29sdmVUb1BoeXNpY2FsUHJv
cGVydHkoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbgogICAgICAg
ICAgICAgcmV0dXJuIHByb3BlcnRpZXNbVG9wU2lkZV07CiAgICAgICAgIH0KICAgICB9Ci0gICAg
CisKICAgICBpZiAod3JpdGluZ01vZGUgPT0gTGVmdFRvUmlnaHRXcml0aW5nTW9kZSkgewogICAg
ICAgICAvLyBTdGFydCA9IEJvdHRvbSwgRW5kID0gVG9wLCBCZWZvcmUgPSBMZWZ0LCBBZnRlciA9
IFJpZ2h0CiAgICAgICAgIHN3aXRjaCAobG9naWNhbFNpZGUpIHsKQEAgLTEzMSw3ICsxMzEsNyBA
QCBzdGF0aWMgaW50IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbgogICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNb
UmlnaHRTaWRlXTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIFN0YXJ0ID0gQm90
dG9tLCBFbmQgPSBUb3AsIEJlZm9yZSA9IFJpZ2h0LCBBZnRlciA9IExlZnQKICAgICBzd2l0Y2gg
KGxvZ2ljYWxTaWRlKSB7CiAgICAgY2FzZSBTdGFydFNpZGU6CkBAIC0xNTMsNyArMTUzLDcgQEAg
c3RhdGljIGludCByZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5KFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlLCBMb2dpY2FsRXh0ZW50IGxvZ2kKICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNbbG9naWNh
bFNpZGVdOwogICAgIHJldHVybiBsb2dpY2FsU2lkZSA9PSBMb2dpY2FsV2lkdGggPyBwcm9wZXJ0
aWVzWzFdIDogcHJvcGVydGllc1swXTsKIH0KLSAgICAgICAgCisKIGludCBDU1NQcm9wZXJ0eTo6
cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIFRleHREaXJlY3Rp
b24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5SUQpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eS5oCmluZGV4IDRhNDZmYzIuLjI3Yzg2ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5o
CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzSW1wbGljaXQoKSBjb25zdCB7
IHJldHVybiBtX2ltcGxpY2l0OyB9CiAKICAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0gICAgCisKICAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwogCiAgICAgc3RhdGljIGludCByZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpbnQgcHJv
cGVydHlJRCwgVGV4dERpcmVjdGlvbiwgV3JpdGluZ01vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwCmluZGV4IDczNzJhNTQuLjdkMTgyNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eUxvbmdoYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlMb25naGFuZC5jcHAKQEAgLTIwNiwxMyArMjA2LDEz
IEBAIHN0YXRpYyB2b2lkIGluaXRTaG9ydGhhbmRNYXAoU2hvcnRoYW5kTWFwJiBzaG9ydGhhbmRN
YXApCiAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWQogICAgIH07CiAg
ICAgU0VUX1NIT1JUSEFORF9NQVBfRU5UUlkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybU9yaWdpbiwgdHJhbnNmb3JtT3JpZ2luUHJvcGVydGllcyk7Ci0gICAgCisKICAg
ICBzdGF0aWMgY29uc3QgaW50IHRleHRFbXBoYXNpc1Byb3BlcnRpZXNbXSA9IHsKICAgICAgICAg
Q1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNDb2xvciwKICAgICAgICAgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXNTdHlsZQogICAgIH07CiAgICAgU0VUX1NIT1JUSEFORF9NQVBfRU5U
Ulkoc2hvcnRoYW5kTWFwLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpcywgdGV4dEVtcGhh
c2lzUHJvcGVydGllcyk7Ci0gICAgCisKICAgICAjdW5kZWYgU0VUX1NIT1JUSEFORF9NQVBfRU5U
UlkKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcAppbmRleCBhOGNhNTll
Li5kZGMzY2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBA
IC01Miw3ICs1Miw3IEBAIFN0cmluZyBDU1NSZWZsZWN0VmFsdWU6OmNzc1RleHQoKSBjb25zdAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAg
cmVzdWx0ICs9IG1fb2Zmc2V0LT5jc3NUZXh0KCkgKyAiICI7CiAgICAgaWYgKG1fbWFzaykKICAg
ICAgICAgcmVzdWx0ICs9IG1fbWFzay0+Y3NzVGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxl
Y3RWYWx1ZS5oCmluZGV4IDFkY2IxYmUuLjU4MDc2ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lm
bmRlZiBDU1NSZWZsZWN0VmFsdWVfaApAQCAtNjEsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIHZpcnR1YWwgYm9vbCBpc1JlZmxlY3RWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLSAgICAKKwogICAgIENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX29mZnNldDsKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IG1fbWFzazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0aW9uRGly
ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oCmlu
ZGV4IDVhMGMyMDMuLmUzMGJjMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
ZWZsZWN0aW9uRGlyZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3Rp
b25EaXJlY3Rpb24uaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aWZuZGVmIENTU1JlZmxlY3Rpb25EaXJlY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWdtZW50ZWRGb250RmFjZS5jcHAKaW5kZXggODA5ZjRhYi4uNGE0NThjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKaW5kZXggMDNlYmU0YS4uM2VmYzQ3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NTZWdtZW50ZWRGb250RmFjZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAppbmRleCA2YmVhOTliLi5lOTVkMjVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKQEAgLTM3LDEwICszNywxMCBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotICAgIAorCiB2b2lkIENTU1Nl
bGVjdG9yOjpjcmVhdGVSYXJlRGF0YSgpCiB7Ci0gICAgaWYgKG1faGFzUmFyZURhdGEpIAorICAg
IGlmIChtX2hhc1JhcmVEYXRhKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTW92ZSB0aGUgdmFs
dWUgdG8gdGhlIHJhcmUgZGF0YSBzdHVjdHVyZS4KICAgICBtX2RhdGEubV9yYXJlRGF0YSA9IG5l
dyBSYXJlRGF0YShhZG9wdFJlZihtX2RhdGEubV92YWx1ZSkpOwpAQCAtMTUwLDcgKzE1MCw3IEBA
IFBzZXVkb0lkIENTU1NlbGVjdG9yOjpwc2V1ZG9JZChQc2V1ZG9UeXBlIHR5cGUpCiAgICAgY2Fz
ZSBQc2V1ZG9BbmltYXRpbmdGdWxsU2NyZWVuVHJhbnNpdGlvbjoKICAgICAgICAgcmV0dXJuIEFO
SU1BVElOR19GVUxMX1NDUkVFTl9UUkFOU0lUSU9OOwogI2VuZGlmCi0gICAgICAgICAgICAKKwog
ICAgIGNhc2UgUHNldWRvSW5wdXRMaXN0QnV0dG9uOgogI2lmIEVOQUJMRShEQVRBTElTVCkKICAg
ICAgICAgcmV0dXJuIElOUFVUX0xJU1RfQlVUVE9OOwpAQCAtNjQwLDIxICs2NDAsMjEgQEAgU3Ry
aW5nIENTU1NlbGVjdG9yOjpzZWxlY3RvclRleHQoKSBjb25zdAogICAgIHJldHVybiBzdHI7CiB9
CiAKLXZvaWQgQ1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2
YWx1ZSkgCi17IAotICAgIGNyZWF0ZVJhcmVEYXRhKCk7IAotICAgIG1fZGF0YS5tX3JhcmVEYXRh
LT5tX2F0dHJpYnV0ZSA9IHZhbHVlOyAKK3ZvaWQgQ1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSkKK3sKKyAgICBjcmVhdGVSYXJlRGF0YSgpOworICAg
IG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSA9IHZhbHVlOwogfQotICAgIAotdm9pZCBD
U1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgCi17IAot
ICAgIGNyZWF0ZVJhcmVEYXRhKCk7IAotICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2FyZ3VtZW50
ID0gdmFsdWU7IAorCit2b2lkIENTU1NlbGVjdG9yOjpzZXRBcmd1bWVudChjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQoreworICAgIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgbV9kYXRhLm1fcmFy
ZURhdGEtPm1fYXJndW1lbnQgPSB2YWx1ZTsKIH0KLSAgICAKKwogdm9pZCBDU1NTZWxlY3Rvcjo6
c2V0U2VsZWN0b3JMaXN0KFBhc3NPd25QdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxlY3Rvckxpc3Qp
CiB7Ci0gICAgY3JlYXRlUmFyZURhdGEoKTsgCisgICAgY3JlYXRlUmFyZURhdGEoKTsKICAgICBt
X2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QgPSBzZWxlY3Rvckxpc3Q7CiB9CiAKQEAg
LTcxMywxNSArNzEzLDE1IEBAIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6flJhcmVEYXRhKCkKICAg
ICBpZiAobV92YWx1ZSkKICAgICAgICAgbV92YWx1ZS0+ZGVyZWYoKTsKIH0KLSAgICAKKwogLy8g
YSBoZWxwZXIgZnVuY3Rpb24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwogYm9vbCBDU1NTZWxl
Y3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKIHsKICAgICBTdHJpbmcgYXJndW1lbnQgPSBtX2Fy
Z3VtZW50Lmxvd2VyKCk7Ci0gICAgCisKICAgICBpZiAoYXJndW1lbnQuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBtX2EgPSAwOwogICAgIG1fYiA9IDA7CiAg
ICAgaWYgKGFyZ3VtZW50ID09ICJvZGQiKSB7CkBAIC03NDIsNyArNzQyLDcgQEAgYm9vbCBDU1NT
ZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKICAgICAgICAgICAgICAgICBtX2EgPSAxOyAv
LyBuID09IDFuCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9hID0gYXJndW1l
bnQuc3Vic3RyaW5nKDAsIG4pLnRvSW50KCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAg
c2l6ZV90IHAgPSBhcmd1bWVudC5maW5kKCcrJywgbik7CiAgICAgICAgICAgICBpZiAocCAhPSBu
b3RGb3VuZCkKICAgICAgICAgICAgICAgICBtX2IgPSBhcmd1bWVudC5zdWJzdHJpbmcocCArIDEs
IGFyZ3VtZW50Lmxlbmd0aCgpIC0gcCAtIDEpLnRvSW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ci5oCmluZGV4IDYxNjFhZjkuLmFmZDUyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCkBA
IC0yMTUsMTIgKzIxNSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBi
b29sIGlzVW5rbm93blBzZXVkb1R5cGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgICAgIHN0
YXRpYyBQc2V1ZG9JZCBwc2V1ZG9JZChQc2V1ZG9UeXBlKTsKIAotICAgICAgICAvLyBTZWxlY3Rv
cnMgYXJlIGtlcHQgaW4gYW4gYXJyYXkgYnkgQ1NTU2VsZWN0b3JMaXN0LiBUaGUgbmV4dCBjb21w
b25lbnQgb2YgdGhlIHNlbGVjdG9yIGlzIAorICAgICAgICAvLyBTZWxlY3RvcnMgYXJlIGtlcHQg
aW4gYW4gYXJyYXkgYnkgQ1NTU2VsZWN0b3JMaXN0LiBUaGUgbmV4dCBjb21wb25lbnQgb2YgdGhl
IHNlbGVjdG9yIGlzCiAgICAgICAgIC8vIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGFycmF5LgogICAg
ICAgICBDU1NTZWxlY3RvciogdGFnSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5U
YWdIaXN0b3J5ID8gMCA6IGNvbnN0X2Nhc3Q8Q1NTU2VsZWN0b3IqPih0aGlzICsgMSk7IH0KIAog
ICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFnICE9IGFueVFOYW1lKCk7
IH0KLSAgICAgICAgCisKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnKCkgY29uc3Qg
eyByZXR1cm4gbV90YWc7IH0KICAgICAgICAgLy8gQXRvbWljU3RyaW5nIGlzIHJlYWxseSBqdXN0
IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNvIHRoZSBjYXN0IGJlbG93IGlzIHNhZmUuCiAgICAgICAg
IC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQg
QXRvbWljU3RyaW5nSW1wbD8KQEAgLTIzNCw3ICsyMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICAg
ICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICAgICAgdm9pZCBz
ZXRTZWxlY3Rvckxpc3QoUGFzc093blB0cjxDU1NTZWxlY3Rvckxpc3Q+KTsKLSAgICAgICAgCisK
ICAgICAgICAgYm9vbCBwYXJzZU50aCgpOwogICAgICAgICBib29sIG1hdGNoTnRoKGludCBjb3Vu
dCk7CiAKQEAgLTI1OCw5ICsyNTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHVu
c2lnbmVkIG1fcmVsYXRpb24gICAgICAgICAgIDogMzsgLy8gZW51bSBSZWxhdGlvbgogICAgICAg
ICBtdXRhYmxlIHVuc2lnbmVkIG1fbWF0Y2ggICAgICA6IDQ7IC8vIGVudW0gTWF0Y2gKICAgICAg
ICAgbXV0YWJsZSB1bnNpZ25lZCBtX3BzZXVkb1R5cGUgOiA4OyAvLyBQc2V1ZG9UeXBlCi0gICAg
ICAgIAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBtX3BhcnNlZE50aCAgICAgICAgICAg
ICAgOiAxOyAvLyBVc2VkIGZvciA6bnRoLSogCisgICAgICAgIGJvb2wgbV9wYXJzZWROdGggICAg
ICAgICAgICAgIDogMTsgLy8gVXNlZCBmb3IgOm50aC0qCiAgICAgICAgIGJvb2wgbV9pc0xhc3RJ
blNlbGVjdG9yTGlzdCAgIDogMTsKICAgICAgICAgYm9vbCBtX2lzTGFzdEluVGFnSGlzdG9yeSAg
ICAgOiAxOwogICAgICAgICBib29sIG1faGFzUmFyZURhdGEgICAgICAgICAgICA6IDE7CkBAIC0y
ODcsMjUgKzI4NywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBPd25QdHI8
Q1NTU2VsZWN0b3JMaXN0PiBtX3NlbGVjdG9yTGlzdDsgLy8gVXNlZCBmb3IgOi13ZWJraXQtYW55
IGFuZCA6bm90CiAgICAgICAgIH07CiAgICAgICAgIHZvaWQgY3JlYXRlUmFyZURhdGEoKTsKLSAg
ICAgICAgCisKICAgICAgICAgdW5pb24gRGF0YVVuaW9uIHsKICAgICAgICAgICAgIERhdGFVbmlv
bigpIDogbV92YWx1ZSgwKSB7IH0KICAgICAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIG1fdmFs
dWU7CiAgICAgICAgICAgICBSYXJlRGF0YSogbV9yYXJlRGF0YTsKICAgICAgICAgfSBtX2RhdGE7
Ci0gICAgICAgIAorCiAgICAgICAgIFF1YWxpZmllZE5hbWUgbV90YWc7CiAgICAgfTsKIAogaW5s
aW5lIGNvbnN0IFF1YWxpZmllZE5hbWUmIENTU1NlbGVjdG9yOjphdHRyaWJ1dGUoKSBjb25zdAot
eyAKK3sKICAgICBBU1NFUlQoaXNBdHRyaWJ1dGVTZWxlY3RvcigpKTsKICAgICBBU1NFUlQobV9o
YXNSYXJlRGF0YSk7CiAgICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZTsK
IH0KLSAgICAKLWlubGluZSBib29sIENTU1NlbGVjdG9yOjptYXRjaGVzUHNldWRvRWxlbWVudCgp
IGNvbnN0IAoteyAKKworaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6Om1hdGNoZXNQc2V1ZG9FbGVt
ZW50KCkgY29uc3QKK3sKICAgICBpZiAobV9wc2V1ZG9UeXBlID09IFBzZXVkb1Vua25vd24pCiAg
ICAgICAgIGV4dHJhY3RQc2V1ZG9UeXBlKCk7CiAgICAgcmV0dXJuIG1fbWF0Y2ggPT0gUHNldWRv
RWxlbWVudDsKQEAgLTM2MSw3ICszNjEsNyBAQCBpbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICBtX2RhdGEubV92YWx1ZS0+cmVm
KCk7CiB9CiAKLWlubGluZSB2b2lkIG1vdmUoUGFzc093blB0cjxDU1NTZWxlY3Rvcj4gZnJvbSwg
Q1NTU2VsZWN0b3IqIHRvKSAKK2lubGluZSB2b2lkIG1vdmUoUGFzc093blB0cjxDU1NTZWxlY3Rv
cj4gZnJvbSwgQ1NTU2VsZWN0b3IqIHRvKQogewogICAgIG1lbWNweSh0bywgZnJvbS5nZXQoKSwg
c2l6ZW9mKENTU1NlbGVjdG9yKSk7CiAgICAgLy8gV2Ugd2FudCB0byBmcmVlIHRoZSBtZW1vcnkg
KHdoaWNoIHdhcyBhbGxvY2F0ZWQgd2l0aCBmYXN0TmV3KSwgYnV0IHdlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWxlY3Rvckxpc3QuY3BwCmluZGV4IDg0YWM5ZWMuLjliMGZhODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMxLDExICszMSwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1NlbGVjdG9yTGlzdDo6fkNTU1NlbGVjdG9yTGlzdCgp
IAorQ1NTU2VsZWN0b3JMaXN0Ojp+Q1NTU2VsZWN0b3JMaXN0KCkKIHsKICAgICBkZWxldGVTZWxl
Y3RvcnMoKTsKIH0KLSAgICAKKwogdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0KENTU1NlbGVj
dG9yTGlzdCYgbGlzdCkKIHsKICAgICBkZWxldGVTZWxlY3RvcnMoKTsKQEAgLTQ4LDcgKzQ4LDcg
QEAgdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2UKICAgICBkZWxldGVTZWxlY3RvcnMoKTsKICAgICBj
b25zdCBzaXplX3QgdmVjdG9yU2l6ZSA9IHNlbGVjdG9yVmVjdG9yLnNpemUoKTsKICAgICBzaXpl
X3QgZmxhdHRlbmVkU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JT
aXplOyArK2kpIHsgICAgICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yU2l6
ZTsgKytpKSB7CiAgICAgICAgIGZvciAoQ1NTUGFyc2VyU2VsZWN0b3IqIHNlbGVjdG9yID0gc2Vs
ZWN0b3JWZWN0b3JbaV0uZ2V0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCkpCiAgICAgICAgICAgICArK2ZsYXR0ZW5lZFNpemU7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlbGVjdG9yTGlzdC5oCmluZGV4IDIxOWQ3NGUuLjdkNDVhNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBDU1NTZWxlY3Rvckxpc3RfaApAQCAtMjksOSArMjksOSBAQAogI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogY2xh
c3MgQ1NTUGFyc2VyU2VsZWN0b3I7Ci0gICAgCisKIGNsYXNzIENTU1NlbGVjdG9yTGlzdCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTU2VsZWN0b3JMaXN0KTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
YWRvcHQoQ1NTU2VsZWN0b3JMaXN0JiBsaXN0KTsKICAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0
b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2VsZWN0b3JWZWN0b3IpOwot
ICAgIAorCiAgICAgQ1NTU2VsZWN0b3IqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rv
ckFycmF5ID8gbV9zZWxlY3RvckFycmF5IDogMDsgfQogICAgIHN0YXRpYyBDU1NTZWxlY3Rvciog
bmV4dChDU1NTZWxlY3RvciopOwogICAgIGJvb2wgaGFzT25lU2VsZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdG9yQXJyYXkgJiYgIW5leHQobV9zZWxlY3RvckFycmF5KTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcAppbmRleCBmYmIyM2FjLi4x
NzhjYjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3Bl
cnR5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNw
cApAQCAtMjY0LDcgKzI2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgKHNlbGVjdG9y
LT5zdHlsZSgpLT4qbV92aXNpdGVkTGlua1NldHRlcikoc2VsZWN0b3ItPmdldENvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCB0cnVlKSk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICB2b2lkIGFwcGx5Q29sb3JWYWx1ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKHNlbGVjdG9y
LT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oCmluZGV4IDRjOWY2MzAuLjQ0Nzk3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwog
ICAgIFN0cmluZyBnZXRQcm9wZXJ0eVNob3J0aGFuZChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFt
ZSk7CiAgICAgYm9vbCBpc1Byb3BlcnR5SW1wbGljaXQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpOwotICAgIAorCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQcm9wZXJ0
eUNTU1ZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcg
Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRQcm9wZXJ0eVByaW9yaXR5KGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CkBAIC02
Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1ha2VNdXRhYmxlKCkgPSAwOwotIAorCiAg
ICAgdm9pZCBkaWZmKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CiAKICAgICBQ
YXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5UHJvcGVydGllc0luU2V0
KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDk3YzU5NGEuLjg4OTZiNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCBpZiAoaWQg
PT0gcHJvcElEKSB7IFwKICAgICBtX3N0eWxlLT5zZXQjI1Byb3AobV9wYXJlbnRTdHlsZS0+cHJv
cCgpKTsgXAogICAgIHJldHVybjsgXAogfQotICAgIAorCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklU
X0NPTkRfV0lUSF9CQUNLVVAocHJvcElELCBwcm9wLCBwcm9wQWx0LCBQcm9wKSBcCiBpZiAoaWQg
PT0gcHJvcElEKSB7IFwKICAgICBpZiAobV9wYXJlbnRTdHlsZS0+cHJvcCgpLmlzVmFsaWQoKSkg
XApAQCAtMTkyLDE5ICsxOTIsMTkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIENTU1N0eWxlUnVsZSogcnVsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcnVsZTsgfQogICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KLSAgICAKKwogICAgIGJvb2wgaGFzRmFzdENoZWNrYWJs
ZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3I7IH0K
ICAgICBib29sIGhhc011bHRpcGFydFNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNdWx0
aXBhcnRTZWxlY3RvcjsgfQogICAgIGJvb2wgaGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hU
TUxCYXNlZE9uUnVsZUhhc2goKSBjb25zdCB7IHJldHVybiBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9y
TWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoOyB9CiAgICAgYm9vbCBjb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3RvcjsgfQogICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjaWZpY2l0eTsgfQogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2xpbmtNYXRjaFR5cGU7IH0KLSAgICAKKwogICAgIC8vIFRyeSB0byBiYWxhbmNl
IGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmpl
Y3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwogICAgIGNvbnN0IHVuc2lnbmVkKiBk
ZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CiAKLXByaXZhdGU6ICAgIAorcHJpdmF0
ZToKICAgICBDU1NTdHlsZVJ1bGUqIG1fcnVsZTsKICAgICBDU1NTZWxlY3RvciogbV9zZWxlY3Rv
cjsKICAgICB1bnNpZ25lZCBtX3NwZWNpZmljaXR5OwpAQCAtMjIzLDkgKzIyMyw5IEBAIGNsYXNz
IFJ1bGVTZXQgewogcHVibGljOgogICAgIFJ1bGVTZXQoKTsKICAgICB+UnVsZVNldCgpOwotICAg
IAorCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBWZWN0b3I8UnVsZURh
dGE+Kj4gQXRvbVJ1bGVNYXA7Ci0gICAgCisKICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENT
U1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3Rv
ciogPSAwKTsKIAogICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogaXRlbSk7CkBA
IC0yMzcsNyArMjM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0Zp
dCgpIHsgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KIAogICAgIHZvaWQgY29s
bGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJikgY29uc3Q7Ci0gICAgCisK
ICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBpZFJ1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtl
eSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CiAgICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogY2xhc3NSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0
dXJuIG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV90YWdSdWxl
cy5nZXQoa2V5KTsgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBmb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9m
b2N1c1BzZXVkb0NsYXNzUnVsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB1bml2
ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9CiAgICAgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogcGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fcGFnZVJ1
bGVzOyB9Ci0gICAgCisKIHB1YmxpYzoKICAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAg
QXRvbVJ1bGVNYXAgbV9jbGFzc1J1bGVzOwpAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSdWxl
U2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5
bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKIHN0YXRpYyBDU1NT
dHlsZVNoZWV0KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKLSAgICAKKwogc3RhdGljIFJ1bGVT
ZXQqIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIHVuY29tbW9u
QXR0cmlidXRlUnVsZXNJbkRlZmF1bHRTdHlsZTsKIApAQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKCkKICAgICBB
U1NFUlQoIXNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKTsKICNlbmRpZgogfQotICAgIAorCiBz
dGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgc2NyZWVuRXZhbCgpCiB7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yLCBzdGF0aWNTY3JlZW5F
dmFsLCAoInNjcmVlbiIpKTsKQEAgLTQxOCw3ICs0MTgsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpD
U1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxl
U2hlZQogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKGkpOwog
ICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJsZWQo
KSkKICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1bSwgdGhpcyk7Ci0gICAgfSAgICAK
KyAgICB9CiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNl
bGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50
IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1h
dGlvbiB0byByZWplY3QKICAgICAvLyBzaGFyaW5nIGNhbmRpZGF0ZXMuCkBAIC00NTgsOCArNDU4
LDggQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQogICAgIG1fZm9udFNl
bGVjdG9yLT5jbGVhckRvY3VtZW50KCk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CiB9Ci0gICAgCi1DU1NTdHlsZVNlbGVjdG9yOjpG
ZWF0dXJlczo6RmVhdHVyZXMoKSAKKworQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OkZlYXR1
cmVzKCkKICAgICA6IHVzZXNGaXJzdExpbmVSdWxlcyhmYWxzZSkKICAgICAsIHVzZXNCZWZvcmVB
ZnRlclJ1bGVzKGZhbHNlKQogICAgICwgdXNlc0xpbmtSdWxlcyhmYWxzZSkKQEAgLTUxNSw3ICs1
MTUsNyBAQCBzdGF0aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKIHsKICAgICBBU1NF
UlQoIWRlZmF1bHRTdHlsZSk7CiAgICAgQVNTRVJUKCFzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCk7
Ci0gICAgCisKICAgICBkZWZhdWx0U3R5bGUgPSBuZXcgUnVsZVNldDsKICAgICAvLyBUaGVyZSBh
cmUgbm8gbWVkaWEtc3BlY2lmaWMgcnVsZXMgaW4gdGhlIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgog
ICAgIGRlZmF1bHRQcmludFN0eWxlID0gZGVmYXVsdFN0eWxlOwpAQCAtNTIzLDEwICs1MjMsMTAg
QEAgc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCiAKICAgICBzaW1wbGVEZWZh
dWx0U3R5bGVTaGVldCA9IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBz
dHJsZW4oc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCkpOwogICAgIGRlZmF1bHRTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQoc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7Ci0g
ICAgCisKICAgICAvLyBObyBuZWVkIHRvIGluaXRpYWxpemUgcXVpcmtzIHNoZWV0IHlldCBhcyB0
aGVyZSBhcmUgbm8gcXVpcmsgcnVsZXMgZm9yIGVsZW1lbnRzIGFsbG93ZWQgaW4gc2ltcGxlIGRl
ZmF1bHQgc3R5bGUuCiB9Ci0gICAgCisKIHN0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUo
KQogewogICAgIEFTU0VSVCghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSk7CkBAIC01NDEsNyArNTQx
LDcgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50KQogICAgICAgICBhc3NlcnROb1NpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxl
KCk7CiAgICAgICAgIGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0K
LSAgICAKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgc3RhdGljIGJvb2wgbG9hZGVkU1ZHVXNlckFn
ZW50U2hlZXQ7CiAgICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpICYmICFsb2FkZWRTVkdV
c2VyQWdlbnRTaGVldCkgewpAQCAtNTU0LDcgKzU1NCw3IEBAIHN0YXRpYyB2b2lkIGVuc3VyZURl
ZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgY29s
bGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCi0gICAgCisK
ICNpZiBFTkFCTEUoTUFUSE1MKQogICAgIHN0YXRpYyBib29sIGxvYWRlZE1hdGhNTFVzZXJBZ2Vu
dFNoZWV0OwogICAgIGlmIChlbGVtZW50LT5pc01hdGhNTEVsZW1lbnQoKSAmJiAhbG9hZGVkTWF0
aE1MVXNlckFnZW50U2hlZXQpIHsKQEAgLTU2Nyw3ICs1NjcsNyBAQCBzdGF0aWMgdm9pZCBlbnN1
cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAg
IGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgotICAg
IAorCiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHN0YXRpYyBib29sIGxvYWRlZE1lZGlhU3R5bGVT
aGVldDsKICAgICBpZiAoIWxvYWRlZE1lZGlhU3R5bGVTaGVldCAmJiAoZWxlbWVudC0+aGFzVGFn
TmFtZSh2aWRlb1RhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhdWRpb1RhZykpKSB7CkBAIC01
NzksNyArNTc5LDcgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxlU2hlZXRzRm9yRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBjb2xsZWN0U3BlY2lhbFJ1bGVzSW5EZWZh
dWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKLSAgICAKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKICAgICBzdGF0aWMgYm9vbCBsb2FkZWRGdWxsU2NyZWVuU3R5bGVTaGVldDsKICAgICBp
ZiAoIWxvYWRlZEZ1bGxTY3JlZW5TdHlsZVNoZWV0ICYmIGVsZW1lbnQtPmRvY3VtZW50KCktPndl
YmtpdElzRnVsbFNjcmVlbigpKSB7CkBAIC02MDQsNyArNjA0LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3QKIAogICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwotICAgIAorCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNs
YXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0
aGVuIHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQpAQCAtNjI3
LDE0ICs2MjcsMTQgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3QKICAgICAgICAgbWF0Y2hSdWxl
c0Zvckxpc3QocnVsZXMtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0
KHJ1bGVzLT50YWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0UnVs
ZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxl
c0Zvckxpc3QocnVsZXMtPnVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBkaWRuJ3Qg
bWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIFNvcnQgdGhlIHNldCBvZiBt
YXRjaGVkIHJ1bGVzLgogICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLSAgICAKKwogICAgIC8vIE5v
dyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBk
ZWNscy4KICAgICBpZiAoIW1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkgewogICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcywgdGhlIGluc3BlY3RvciBzaG91bGQgZ2V0IHRoZSBz
dHlsZSBmcm9tIHRoZSB2aXNpdGVkIHN0eWxlIGl0c2VsZi4KQEAgLTcxMiw4ICs3MTIsOCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICghZGVjbC0+
bGVuZ3RoKCkgJiYgIWluY2x1ZGVFbXB0eVJ1bGVzKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGlmIChtX3NhbWVPcmlnaW5Pbmx5ICYmICFtX2NoZWNrZXIuZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChydWxlLT5iYXNlVVJMKCkpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOyAKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5n
IG5vcm1hbCBydWxlcywgc2V0IGEgcHNldWRvIGJpdCBpZiAKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIG1hdGNoaW5nIG5vcm1hbCBydWxlcywgc2V0
IGEgcHNldWRvIGJpdCBpZgogICAgICAgICAgICAgLy8gd2UgcmVhbGx5IGp1c3QgbWF0Y2hlZCBh
IHBzZXVkby1lbGVtZW50LgogICAgICAgICAgICAgaWYgKG1fZHluYW1pY1BzZXVkbyAhPSBOT1BT
RVVETyAmJiBtX2NoZWNrZXIucHNldWRvU3R5bGUoKSA9PSBOT1BTRVVETykgewogICAgICAgICAg
ICAgICAgIGlmIChtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpCkBAIC03MzcsMTQg
KzczNywxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRh
KiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQogewogICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MSA9
IHIxLT5zcGVjaWZpY2l0eSgpOwogICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MiA9IHIyLT5zcGVj
aWZpY2l0eSgpOwotICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNwZWNpZmljaXR5MikgPyBy
MS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNp
dHkyOyAKKyAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBv
c2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsK
IH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKIHsKICAgICBz
dGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNv
bXBhcmVSdWxlcyk7CiB9Ci0gICAgCisKIGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omlu
aXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7CiAgICAgaWYgKG1fZWxlbWVudCAhPSBlKSB7CkBAIC04
NDIsMjIgKzg0MiwyMiBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRo
Q29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKHByb2dyZXNzVGFnKSkgewogICAgICAgICBpZiAoIW1fZWxlbWVudC0+aGFzVGFn
TmFtZShwcm9ncmVzc1RhZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAor
CiAgICAgICAgIEhUTUxQcm9ncmVzc0VsZW1lbnQqIHRoaXNQcm9ncmVzc0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIEhUTUxQcm9n
cmVzc0VsZW1lbnQqIG90aGVyUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dy
ZXNzRWxlbWVudCo+KG1fZWxlbWVudCk7CiAgICAgICAgIGlmICh0aGlzUHJvZ3Jlc3NFbGVtZW50
LT5pc0RldGVybWluYXRlKCkgIT0gb3RoZXJQcm9ncmVzc0VsZW1lbnQtPmlzRGV0ZXJtaW5hdGUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlz
SW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBIVE1MSW5wdXRF
bGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
LSAgICAKKwogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1dEVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmICh0aGlzSW5wdXRFbGVtZW50
LT5pc0F1dG9maWxsZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+c2hvdWxkQXBw
ZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkp
CkBAIC04NjYsMzAgKzg2NiwzMCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkgIT0gb3RoZXJJ
bnB1dEVsZW1lbnQtPnJlcXVpcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwog
ICAgIGlmIChlbGVtZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpICE9IG1fZWxlbWVudC0+aXNF
bmFibGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAg
aWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSAhPSBtX2VsZW1lbnQtPmlzRGVm
YXVsdEJ1dHRvbkZvckZvcm0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFt
X2VsZW1lbnQtPmRvY3VtZW50KCktPmNvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGJvb2wgd2lsbFZhbGlkYXRlID0gZWxlbWVu
dC0+d2lsbFZhbGlkYXRlKCk7Ci0gICAgCisKICAgICBpZiAod2lsbFZhbGlkYXRlICE9IG1fZWxl
bWVudC0+d2lsbFZhbGlkYXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IGlmICh3aWxsVmFsaWRhdGUgJiYgKGVsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQo
KSAhPSBtX2VsZW1lbnQtPmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBtX2Vs
ZW1lbnQtPmlzSW5SYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBp
ZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc091dE9mUmFuZ2UoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTk3OCw3ICs5NzgsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogCiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisK
IGlubGluZSBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmlu
ZyhOb2RlKiBub2RlLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7
IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewpAQCAtOTk0LDcgKzk5NCw3IEBAIGlu
bGluZSBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhO
b2RlKiBub2RlLCB1bnNpZ25lZCYKIAogc3RhdGljIGlubGluZSBib29sIHBhcmVudFN0eWxlUHJl
dmVudHNTaGFyaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKLSAgICByZXR1
cm4gcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeVBvc2l0aW9uYWxSdWxlcygpIAorICAg
IHJldHVybiBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkK
ICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxl
cygpCiAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRS
dWxlcygpOwogfQpAQCAtMTA1Miw3ICsxMDUyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFSdWxlKQogICAgIC8vIElu
IHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBz
aGVldC4KICAgICBpZiAoIW1fY2hlY2tlci5zdHJpY3RQYXJzaW5nKCkpCiAgICAgICAgIG1hdGNo
UnVsZXMoZGVmYXVsdFF1aXJrc1N0eWxlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2Up
OwotICAgICAgICAKKwogICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVz
IChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0
Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYgKG1fY2hl
Y2tlci5kb2N1bWVudCgpLT5pc1ZpZXdTb3VyY2UoKSkgewogICAgICAgICBpZiAoIWRlZmF1bHRW
aWV3U291cmNlU3R5bGUpCkBAIC0xMTEwLDcgKzExMTAsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKIAogICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwogICAgIGRvY3VtZW50U3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7Ci0gICAgICAgIAorCiAg
ICAgcmV0dXJuIGRvY3VtZW50U3R5bGUucmVsZWFzZSgpOwogfQogCkBAIC0xMjE4LDcgKzEyMTgs
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogICAgICAgICAgICAgICAgICAgICBhZGRNYXRj
aGVkRGVjbGFyYXRpb24odGV4dERpcmVjdGlvbiA9PSBMVFIgPyBsZWZ0VG9SaWdodERlY2xhcmF0
aW9uKCkgOiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgCisKICAgICAgICAgLy8gNi4gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVl
dHMgbmV4dC4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQogICAgICAg
ICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUsIGxh
c3RBdXRob3JSdWxlLCBmYWxzZSk7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgUmVuZAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAg
Ly8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVkIHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0
ZSBvcmRlci4gIFdhbGsgdGhlIHJ1bGVzIGFuZCBhcHBseQogICAgIC8vIGhpZ2gtcHJpb3JpdHkg
cHJvcGVydGllcyBmaXJzdCwgaS5lLiwgdGhvc2UgcHJvcGVydGllcyB0aGF0IG90aGVyIHByb3Bl
cnRpZXMgZGVwZW5kIG9uLgogICAgIC8vIFRoZSBvcmRlciBpcyAoMSkgaGlnaC1wcmlvcml0eSBu
b3QgaW1wb3J0YW50LCAoMikgaGlnaC1wcmlvcml0eSBpbXBvcnRhbnQsICgzKSBub3JtYWwgbm90
IGltcG9ydGFudApAQCAtMTI0Niw3ICsxMjQ2LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmQK
ICAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFz
dFVzZXJSdWxlKTsKICAgICB9CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmly
c3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAorCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgogICAgIHVwZGF0ZUZvbnQoKTsKIApA
QCAtMTI1NiwxMCArMTI1NiwxMCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogCiAgICAgLy8g
Tm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4KICAgICBhcHBseURlY2xh
cmF0aW9uczxmYWxzZT4oZmFsc2UsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKLSAgICAKKwog
ICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhh
bWluZSB0aGVtIGxhdGVyLgogICAgIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotICAgIAor
CiAgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5kIHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3Bl
cnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBwcm9wZXJ0aWVzLgogICAgIGlmICghcmVzb2x2
ZUZvclJvb3REZWZhdWx0KSB7CiAgICAgICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxz
ZSwgbGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwpAQCAtMTI2OSw3
ICsxMjY5LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5
bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmQKICAgICBhcHBseURlY2xhcmF0aW9u
czxmYWxzZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwogCiAgICAgQVNTRVJUKCFt
X2ZvbnREaXJ0eSk7Ci0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRo
ZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIAorICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0
aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFo
ZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNvbmQgdGltZS4KICAgICB1cGRhdGVGb250KCk7CiAKQEAg
LTEzNDIsMjQgKzEzNDIsMjQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSogZWwKIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgS2V5ZnJhbWVMaXN0JiBsaXN0KQogewogICAgIGxp
c3QuY2xlYXIoKTsKLSAgICAKKwogICAgIC8vIEdldCB0aGUga2V5ZnJhbWVzUnVsZSBmb3IgdGhp
cyBuYW1lCiAgICAgaWYgKCFlIHx8IGxpc3QuYW5pbWF0aW9uTmFtZSgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9rZXlmcmFtZXNSdWxlTWFwLmNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgIAorCiAgICAgaWYgKCFtX2tleWZyYW1lc1J1bGVNYXAuY29udGFpbnMobGlzdC5hbmlt
YXRpb25OYW1lKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgIGNv
bnN0IFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHJ1bGUgPSBtX2tleWZyYW1lc1J1bGVNYXAuZmlu
ZChsaXN0LmFuaW1hdGlvbk5hbWUoKS5pbXBsKCkpLmdldCgpLT5zZWNvbmQuZ2V0KCk7Ci0gICAg
CisKICAgICAvLyBDb25zdHJ1Y3QgYW5kIHBvcHVsYXRlIHRoZSBzdHlsZSBmb3IgZWFjaCBrZXlm
cmFtZQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlLT5sZW5ndGgoKTsgKytpKSB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMg
YSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAogICAg
ICAgICBpbml0RWxlbWVudChlKTsKICAgICAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlKTsKLSAg
ICAgICAgCisKICAgICAgICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZXlmcmFtZVJ1
bGUgPSBydWxlLT5pdGVtKGkpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWUoMCwg
MCk7CkBAIC0xMzczLDcgKzEzNzMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1l
U3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKgogICAgICAg
ICAgICAgbGlzdC5pbnNlcnQoa2V5ZnJhbWUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAg
ICAgLy8gSWYgdGhlIDAlIGtleWZyYW1lIGlzIG1pc3NpbmcsIGNyZWF0ZSBpdCAoYnV0IG9ubHkg
aWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG90aGVyIGtleWZyYW1lKQogICAgIGludCBpbml0aWFs
TGlzdFNpemUgPSBsaXN0LnNpemUoKTsKICAgICBpZiAoaW5pdGlhbExpc3RTaXplID4gMCAmJiBs
aXN0WzBdLmtleSgpICE9IDApIHsKQEAgLTE0MDMsMTMgKzE0MDMsMTMgQEAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVk
b0lkIHBzZXVkbywKIAogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgcGFyZW50U3R5bGUsIHBz
ZXVkbyk7CiAgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICAKKwogICAg
IGlmIChtX3BhcmVudFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVu
dFN0eWxlKTsKIAogICAgIC8vIFNpbmNlIHdlIGRvbid0IHVzZSBwc2V1ZG8tZWxlbWVudHMgaW4g
YW55IG9mIG91ciBxdWlyay9wcmludCB1c2VyIGFnZW50IHJ1bGVzLCBkb24ndCB3YXN0ZSB0aW1l
IHdhbGtpbmcKICAgICAvLyB0aG9zZSBydWxlcy4KLSAgICAKKwogICAgIC8vIENoZWNrIFVBLCB1
c2VyIGFuZCBhdXRob3IgcnVsZXMuCiAgICAgaW50IGZpcnN0VUFSdWxlID0gLTEsIGxhc3RVQVJ1
bGUgPSAtMSwgZmlyc3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMSwgZmlyc3RBdXRo
b3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7CiAgICAgbWF0Y2hVQVJ1bGVzKGZpcnN0
VUFSdWxlLCBsYXN0VUFSdWxlKTsKQEAgLTE0MjMsNyArMTQyMyw3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9J
ZCBwc2V1ZG8sCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBl
KHBzZXVkbyk7Ci0gICAgCisKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAKICAgICAvLyBI
aWdoLXByaW9yaXR5IHByb3BlcnRpZXMuCkBAIC0xNDMxLDI2ICsxNDMxLDI2IEBAIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQ
c2V1ZG9JZCBwc2V1ZG8sCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RB
dXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4o
dHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9u
czx0cnVlPih0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7Ci0gICAgCisKICAgICAvLyBJ
ZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCiAgICAg
dXBkYXRlRm9udCgpOwogCiAgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCiAgICAgaWYgKG1fbGluZUhlaWdodFZhbHVl
KQogICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVp
Z2h0VmFsdWUpOwotICAgIAorCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgcHJv
cGVydGllcy4KICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlKTsKLSAgICAKKwogICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJhY2tn
cm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgogICAgIGNhY2hlQm9yZGVy
QW5kQmFja2dyb3VuZCgpOwotICAgIAorCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZh
bHNlLCBsYXN0VUFSdWxlICsgMSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CiAgICAgYXBw
bHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1
bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBs
YXN0VXNlclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVB
UnVsZSwgbGFzdFVBUnVsZSk7Ci0gICAgCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQg
Ynkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIAorCisgICAgLy8gSWYgb3Vy
IGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMs
CiAgICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgogICAgIHVwZGF0
ZUZvbnQoKTsKIApAQCAtMTQ1OSw3ICsxNDU5LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywK
IAogICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
ICAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwotICAgICAgICAKKwogICAgIC8vIE5vdyByZXR1cm4g
dGhlIHN0eWxlLgogICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KQEAgLTE1MDAsNyAr
MTUwMCw3IEBAIHN0YXRpYyB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCiAgICAgY29uc3QgaW50IGlu
dHJpbnNpY01hcmdpbiA9IDIgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIAorCiAgICAg
Ly8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3
aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgogICAgIC8vIEZJWE1FOiBVc2luZyAi
cXVpcmsiIHRvIGRlY2lkZSB0aGUgbWFyZ2luIHdhc24ndCBzZXQgaXMga2luZCBvZiBsYW1lLgog
ICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7CkBAIC0xNTg3LDEy
ICsxNTg3LDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgICAgICB9Ci0gICAg
ICAgIAorCiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCBzdXBwb3J0IHRoaXMgbXV0YXRpb24gZm9y
IHBzZXVkbyBzdHlsZXMgbGlrZSBmaXJzdC1sZXR0ZXIgb3IgZmlyc3QtbGluZSwgc2luY2UgaXQn
cyBub3QgY29tcGxldGVseQogICAgICAgICAvLyBjbGVhciBob3cgdGhhdCBzaG91bGQgd29yay4K
ICAgICAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FICYmIHN0eWxlLT5zdHlsZVR5
cGUoKSA9PSBOT1BTRVVETyAmJiBwYXJlbnRTdHlsZSAmJiBzdHlsZS0+d3JpdGluZ01vZGUoKSAh
PSBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNw
bGF5KElOTElORV9CTE9DSyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEFmdGVyIHBlcmZvcm1p
bmcgdGhlIGRpc3BsYXkgbXV0YXRpb24sIGNoZWNrIHRhYmxlIHJvd3MuICBXZSBkbyBub3QgaG9u
b3IgcG9zaXRpb246cmVsYXRpdmUgb24KICAgICAgICAgLy8gdGFibGUgcm93cyBvciBjZWxscy4g
IFRoaXMgaGFzIGJlZW4gZXN0YWJsaXNoZWQgaW4gQ1NTMi4xIChhbmQgY2F1c2VkIGEgY3Jhc2gg
aW4gY29udGFpbmluZ0Jsb2NrKCkKICAgICAgICAgLy8gb24gc29tZSBzaXRlcykuCkBAIC0xNjIy
LDcgKzE2MjIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudAogICAgIC8vIEF1dG8gei1pbmRl
eCBiZWNvbWVzIDAgZm9yIHRoZSByb290IGVsZW1lbnQgYW5kIHRyYW5zcGFyZW50IG9iamVjdHMu
ICBUaGlzIHByZXZlbnRzCiAgICAgLy8gY2FzZXMgd2hlcmUgb2JqZWN0cyB0aGF0IHNob3VsZCBi
ZSBibGVuZGVkIGFzIGEgc2luZ2xlIHVuaXQgZW5kIHVwIHdpdGggYSBub24tdHJhbnNwYXJlbnQK
ICAgICAvLyBvYmplY3Qgd2VkZ2VkIGluIGJldHdlZW4gdGhlbS4gIEF1dG8gei1pbmRleCBhbHNv
IGJlY29tZXMgMCBmb3Igb2JqZWN0cyB0aGF0IHNwZWNpZnkgdHJhbnNmb3Jtcy9tYXNrcy9yZWZs
ZWN0aW9ucy4KLSAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSAmJiAoKGUgJiYgZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwgc3R5bGUtPm9wYWNpdHkoKSA8IDEu
MGYgfHwgCisgICAgaWYgKHN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUpIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBm
IHx8CiAgICAgICAgIHN0eWxlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKSB8fCBzdHls
ZS0+aGFzTWFzaygpIHx8IHN0eWxlLT5ib3hSZWZsZWN0KCkpKQogICAgICAgICBzdHlsZS0+c2V0
WkluZGV4KDApOwogCkBAIC0xNjM5LDcgKzE2MzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVu
dAogICAgICAgICBzdHlsZS0+c2V0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qoc3R5bGUtPnRleHRE
ZWNvcmF0aW9uKCkpOwogICAgIGVsc2UKICAgICAgICAgc3R5bGUtPmFkZFRvVGV4dERlY29yYXRp
b25zSW5FZmZlY3Qoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOwotICAgIAorCiAgICAgLy8gSWYg
ZWl0aGVyIG92ZXJmbG93IHZhbHVlIGlzIG5vdCB2aXNpYmxlLCBjaGFuZ2UgdG8gYXV0by4KICAg
ICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpID09IE9NQVJRVUVFICYmIHN0eWxlLT5vdmVyZmxvd1ko
KSAhPSBPTUFSUVVFRSkKICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPTUFSUVVFRSk7CkBA
IC0xNjU0LDkgKzE2NTQsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudAogICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHRhYmxlIHNlY3Rpb25zIHdpbGwgc3VwcG9ydCBhdXRvIGFuZCBzY3JvbGwu
CiAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEUgfHwgc3R5bGUtPmRpc3BsYXkoKSA9
PSBJTkxJTkVfVEFCTEUgfHwKICAgICAgICAgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1df
R1JPVVAgfHwgc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJMRV9ST1cpIHsKLSAgICAgICAgaWYgKHN0
eWxlLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT0hJ
RERFTikgCisgICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5
bGUtPm92ZXJmbG93WCgpICE9IE9ISURERU4pCiAgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZs
b3dYKE9WSVNJQkxFKTsKLSAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJM
RSAmJiBzdHlsZS0+b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikgCisgICAgICAgIGlmIChzdHlsZS0+
b3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9ISURERU4p
CiAgICAgICAgICAgICBzdHlsZS0+c2V0T3ZlcmZsb3dZKE9WSVNJQkxFKTsKICAgICB9CiAKQEAg
LTE3NjcsNyArMTc2Nyw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVsZW1lbnQqIGUsCiAgICAgfQogCiAgICAg
bV9jaGVja2VyLnNldENvbGxlY3RpbmdSdWxlc09ubHkoZmFsc2UpOwotICAgCisKICAgICByZXR1
cm4gbV9ydWxlTGlzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTE4NDksNyArMTg0OSw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbGVjdG9yCiAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rv
cnkoKTsKICAgICB9OwogCi0gICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5
KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsgICAgICAg
ICAgICAKKyAgICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0
b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBpZiAoc2VsZWN0b3JMaXN0Q29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KHNlbGVjdG9yKSkKQEAgLTE4NzksNyArMTg3OSw3IEBAIFJ1bGVTZXQ6OlJ1bGVTZXQoKQogfQog
CiBSdWxlU2V0Ojp+UnVsZVNldCgpCi17IAorewogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2lkUnVs
ZXMpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NsYXNzUnVsZXMpOwogICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX3NoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyk7CkBAIC0yMDA4LDcgKzIwMDgsNyBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgICAgICAg
ICBhZGRSdWxlKHJ1bGUsIHMpOwogICAgIH0KIH0KLSAgICAKKwogc3RhdGljIGlubGluZSB2b2lk
IGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYg
ZmVhdHVyZXMsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBpZiAoc2VsZWN0
b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkICYmICFzZWxlY3Rvci0+dmFsdWUoKS5pc0Vt
cHR5KCkpCkBAIC0yMDUzLDEyICsyMDUzLDEyIEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJl
c0Zyb21MaXN0KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QKICAg
ICAgICAgaWYgKGZvdW5kU2libGluZ1NlbGVjdG9yKSB7CiAgICAgICAgICAgICBpZiAoIWZlYXR1
cmVzLnNpYmxpbmdSdWxlcykKICAgICAgICAgICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMg
PSBhZG9wdFB0cihuZXcgUnVsZVNldCk7Ci0gICAgICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVs
ZXMtPmFkZFJ1bGUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpKTsgICAKKyAg
ICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+YWRkUnVsZShydWxlRGF0YS5ydWxlKCks
IHJ1bGVEYXRhLnNlbGVjdG9yKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChydWxlRGF0YS5j
b250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKSkgewogICAgICAgICAgICAgaWYgKCFm
ZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzKQogICAgICAgICAgICAgICAgIGZlYXR1cmVz
LnVuY29tbW9uQXR0cmlidXRlUnVsZXMgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7Ci0gICAgICAg
ICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1
bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7IAorICAgICAgICAgICAgZmVhdHVyZXMudW5jb21t
b25BdHRyaWJ1dGVSdWxlcy0+YWRkUnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVj
dG9yKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMjA4MSwxNCArMjA4MSwxNCBAQCB2b2lk
IFJ1bGVTZXQ6OmNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVh
dHVyZXMpIGNvbnN0CiAgICAgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoZmVhdHVyZXMsIG1fZm9j
dXNQc2V1ZG9DbGFzc1J1bGVzKTsKICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJl
cywgbV91bml2ZXJzYWxSdWxlcyk7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJp
bmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKIHsKICAgICBSdWxl
U2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgpOwogICAgIGZvciAoUnVs
ZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgaXQtPnNlY29uZC0+c2hyaW5rVG9GaXQoKTsKIH0KLSAgICAKKwogdm9p
ZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiB7CiAgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1f
aWRSdWxlcyk7CkBAIC0yMTE1LDcgKzIxMTUsNyBAQCBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWxlKiBzdAog
ICAgICAgICAgICAgKm9rID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50IHR5cGUg
PSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICAKKwogICAgICAgICBp
ZiAoIXN0eWxlICYmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TIHx8IHR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgfHwgdHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1JFTVMpKSB7CiAgICAgICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAgICAgKm9r
ID0gZmFsc2U7CkBAIC0yMTM0LDcgKzIxMzQsNyBAQCBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xl
bmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWxlKiBzdAog
ICAgIH0KICAgICByZXR1cm4gbDsKIH0KLSAgICAKKwogc3RhdGljIExlbmd0aCBjb252ZXJ0VG9J
bnRMZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZW5kZXJTdHlsZSog
c3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMSwgYm9v
bCAqb2sgPSAwKQogewogICAgIHJldHVybiBjb252ZXJ0VG9MZW5ndGgocHJpbWl0aXZlVmFsdWUs
IHN0eWxlLCByb290U3R5bGUsIGZhbHNlLCBtdWx0aXBsaWVyLCBvayk7CkBAIC0yMTQ0LDI0ICsy
MTQ0LDI0IEBAIHN0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRMZW5ndGgoQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBSZW5kZXJTdHlsCiB7CiAgICAgcmV0dXJuIGNvbnZlcnRU
b0xlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgdHJ1ZSwgbXVsdGlwbGll
ciwgb2spOwogfQotICAgIAorCiB0ZW1wbGF0ZSA8Ym9vbCBhcHBseUZpcnN0Pgogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZURlY2xhcmF0aW9uLCBib29sIGlzSW1wb3J0YW50KQogewogICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZURlY2xhcmF0aW9uLT5l
bmQoKTsKICAgICBmb3IgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRv
ciBpdCA9IHN0eWxlRGVjbGFyYXRpb24tPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAg
ICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVudCA9ICppdDsKLSAgICAgICAgCisKICAgICAg
ICAgaWYgKGlzSW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKKwogICAgICAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50Lmlk
KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhcHBseUZpcnN0KSB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChmaXJzdENTU1Byb3BlcnR5ID09IENTU1Byb3BlcnR5Q29sb3IsIENTU19j
b2xvcl9pc19maXJzdF9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQ
cm9wZXJ0eVpvb20gPT0gQ1NTUHJvcGVydHlDb2xvciArIDE2LCBDU1Nfem9vbV9pc19lbmRfb2Zf
Zmlyc3RfcHJvcF9yYW5nZSk7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChDU1NQcm9wZXJ0
eUxpbmVIZWlnaHQgPT0gQ1NTUHJvcGVydHlab29tICsgMSwgQ1NTX2xpbmVfaGVpZ2h0X2lzX2Fm
dGVyX3pvb20pOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGdpdmUgc3BlY2lhbCBw
cmlvcml0eSB0byBmb250LXh4eCwgY29sb3IgcHJvcGVydGllcywgZXRjCiAgICAgICAgICAgICBp
ZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yMTkyLDEzICsyMTkyLDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlEZWNsYXJhdGlvbnMoYm9vbCBpc0ltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlCiAg
ICAgICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGxpbmtNYXRjaFR5cGUg
JiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluazsKICAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSA9IGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZDsKIAotICAgICAgICAgICAgYXBwbHlEZWNsYXJhdGlvbjxhcHBseUZpcnN0Pihz
dHlsZURlY2xhcmF0aW9uLCBpc0ltcG9ydGFudCk7ICAgICAgICAKKyAgICAgICAgICAgIGFwcGx5
RGVjbGFyYXRpb248YXBwbHlGaXJzdD4oc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRhbnQpOwog
ICAgICAgICB9CiAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gdHJ1ZTsK
ICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5k
SW5kZXg7ICsraSkgICAgICAgIAorICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVu
ZEluZGV4OyArK2kpCiAgICAgICAgIGFwcGx5RGVjbGFyYXRpb248YXBwbHlGaXJzdD4obV9tYXRj
aGVkRGVjbHNbaV0uc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRhbnQpOwogfQogCkBAIC0yNDA1
LDcgKzI0MDUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlk
LCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpIDogMDsKIAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBtX3N0eWxlLT5lZmZl
Y3RpdmVab29tKCk7Ci0gICAgCisKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQg
bWFwcyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVu
ZAogICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4gIFNob3J0aGFuZHMgKGUuZy4gYm9yZGVyLCBi
YWNrZ3JvdW5kKSBvY2N1ciBpbiB0aGlzIGxpc3QgYXMgd2VsbCBhbmQKICAgICAvLyBhcmUgb25s
eSBoaXQgd2hlbiBtYXBwaW5nICJpbmhlcml0IiBvciAiaW5pdGlhbCIgaW50byBmcm9udC1lbmQg
dmFsdWVzLgpAQCAtMjQ0NiwxMCArMjQ0NiwxMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVRhYmxlTGF5b3V0OgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJ
TUlUSVZFKHRhYmxlTGF5b3V0LCBUYWJsZUxheW91dCkKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlVbmljb2RlQmlkaTogCisgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVC
aWRpOgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVu
aWNvZGVCaWRpLCBVbmljb2RlQmlkaSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJv
cGVydHlUZXh0VHJhbnNmb3JtOiAKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybToK
ICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh0ZXh0VHJh
bnNmb3JtLCBUZXh0VHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVZpc2liaWxpdHk6CkBAIC0yNTAwLDcgKzI1MDAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICAg
ICAgciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDog
UkVTSVpFX05PTkU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgciA9ICpwcmltaXRpdmVW
YWx1ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIG1fc3R5bGUtPnNldFJlc2l6ZShyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1MzIsNyArMjUzMiw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwogICAgICAgICBmbG9hdCBvbGRTaXpl
ID0gMDsKICAgICAgICAgZmxvYXQgc2l6ZSA9IDA7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wg
cGFyZW50SXNBYnNvbHV0ZVNpemUgPSBmYWxzZTsKICAgICAgICAgaWYgKG1fcGFyZW50Tm9kZSkg
ewogICAgICAgICAgICAgb2xkU2l6ZSA9IG1fcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LnNwZWNpZmllZFNpemUoKTsKQEAgLTI1NzAsMTQgKzI1NzAsMTQgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRl
U2l6ZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
cmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUxhcmdlciB8fAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZVNtYWxsZXIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6
ZSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBl
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRU1TICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19FWFMgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVMpKTsKICAgICAgICAgICAg
IGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkKQEAgLTI2ODQs
NyArMjY4NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgfQogICAgICAgICBtX3N0eWxlLT5zZXRDbGlwKHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAgICAgICAgIG1fc3R5bGUtPnNldEhhc0NsaXAoaGFz
Q2xpcCk7Ci0gICAgCisKICAgICAgICAgLy8gcmVjdCwgaWRlbnQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTI3MDAsNyArMjcwMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIG1fc3R5bGUtPmNs
ZWFyQ29udGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAor
CiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKQEAgLTI4MzMsNyArMjgzMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0
eWxlLT5mb250RGVzY3JpcHRpb24oKTsKQEAgLTI5OTYsNyArMjk5Niw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgbV9zdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAg
ICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9u
dERlc2NyaXB0aW9uKTsKIApAQCAtMzAwOSw3ICszMDA5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRl
cmluZ01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+
cHJpbnRpbmcoKSk7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSB6b29tIGZhY3Rvci4KICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVu
dCgpLCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9u
dERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKICAgICAg
ICAgICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTMwODUs
NyArMzA4NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3go
KSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGll
Y2VJbWFnZVF1YWQodmFsdWUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGlzQm9yZGVySW1h
Z2UpCiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZShpbWFnZSk7CiAgICAgICAg
IGVsc2UKQEAgLTMxMDMsNyArMzEwMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIGltYWdlLnNldFZl
cnRpY2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoaXNCb3JkZXJJbWFnZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlcklt
YWdlKGltYWdlKTsKICAgICAgICAgZWxzZQpAQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAg
ICAgICAgICAgaW1hZ2Uuc2V0RmlsbChmYWxzZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoaXNCb3JkZXJJbWFnZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlcklt
YWdlKGltYWdlKTsKICAgICAgICAgZWxzZQpAQCAtMzE5MSw3ICszMTkxLDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAg
ICAgICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJl
ZmxlY3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtMzIwOSw3ICszMjA5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0
cygpOwogICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgcmVmbGVjdFZhbHVlLT5t
YXNrKCksIG1hc2spOwogICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwotICAgICAg
ICAKKwogICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzMTUsNyArMzMxNSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNw
ZWVkOiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVTcGVlZCwg
TWFycXVlZVNwZWVkKSAgICAgIAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCht
YXJxdWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7CkBAIC0zMzY1LDcgKzMzNjUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToKLSAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1
ZWVCZWhhdmlvcikgICAgICAKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1ZWVCZWhhdmlvcikKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKICAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwoZmxvd1RocmVhZCwgRmxvd1RocmVhZCk7CkBAIC0zMzg4LDEz
ICszMzg4LDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRShtYXJxdWVlRGlyZWN0aW9uLCBNYXJxdWVlRGlyZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJEcmFnLCBVc2VyRHJhZykg
ICAgICAKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1
c2VyRHJhZywgVXNlckRyYWcpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VXNlck1vZGlmeToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5E
X1BSSU1JVElWRSh1c2VyTW9kaWZ5LCBVc2VyTW9kaWZ5KSAgICAgIAorICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJNb2RpZnksIFVzZXJNb2RpZnkp
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoK
LSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1c2VyU2Vs
ZWN0LCBVc2VyU2VsZWN0KSAgICAgIAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKHVzZXJTZWxlY3QsIFVzZXJTZWxlY3QpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3c6IHsKQEAgLTM0ODAsNyArMzQ4MCw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVl
ICp2YWx1ZSkKICAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpyZWdpb24gPSBwcmltaXRpdmVWYWx1
ZS0+Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKICAgICAgICAgaWYgKCFyZWdpb24pCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgICAgICBEYXNoYm9hcmRSZWdpb24g
KmZpcnN0ID0gcmVnaW9uOwogICAgICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgICAgICBM
ZW5ndGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1f
cm9vdEVsZW1lbnRTdHlsZSk7CkBAIC0zNDkzLDEyICszNDkzLDEyIEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAg
ICAgICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246
OlJlY3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJl
Z2lvbiA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICByZWdpb24gPSByZWdp
b24tPm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnNldEhhc0Rhc2hib2FyZFJlZ2lvbnModHJ1ZSk7Ci0gICAgICAgIAor
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHJ0bE9yZGVyaW5nLCBSVExPcmRlcmluZykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMzU0MCw3ICszNTQwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgbV9zdHls
ZS0+c2V0UGVyc3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaW50IHR5
cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICBpZiAoQ1NTUHJp
bWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCkBAIC0zNjgyLDIwICszNjgyLDIw
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVl
ICp2YWx1ZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hD
b250YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNDU1NMaW5lQm94Q29udGFpblZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUq
IGxpbmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVl
Kj4odmFsdWUpOwogICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29u
dGFpblZhbHVlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwU2hhcGU6CiAgICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMKHdyYXBTaGFwZSwgV3JhcFNoYXBlKTsKICAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIG1f
c3R5bGUtPnNldFdyYXBTaGFwZSgwKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NIQVBFKQpAQCAtNDA4
NSw3ICs0MDg1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQ29tcG9zaXRlKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHUKICAgICAgICAgbGF5ZXItPnNl
dENvbXBvc2l0ZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlKGxheWVyLT50eXBlKCkp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MTQyLDcgKzQxNDIsNyBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5
ZXI6OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgCisKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNDE1Niw3ICs0MTU2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1
ZSoKICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVh
dFkobGF5ZXItPnR5cGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQx
NzgsOSArNDE3OCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNpemUoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAgICAgIGxheWVyLT5z
ZXRTaXplVHlwZShDb3Zlcik7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUo
U2l6ZUxlbmd0aCk7Ci0gICAgCisKICAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6OmluaXRp
YWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKLSAgICAKKwogICAgIGlmICh2YWx1ZS0+
Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMIHx8IHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFpbgogICAgICAgICB8fCBwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVyKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXpl
TGVuZ3RoKGIpOwpAQCAtNDE5MSw3ICs0MTkxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEK
IAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHBhaXIgPyBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpIDogcHJpbWl0aXZlVmFsdWU7CiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHBhaXIgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHBhaXItPnNlY29uZCgpKSA6IDA7Ci0gICAgCisKICAgICBMZW5ndGggZmlyc3RMZW5n
dGgsIHNlY29uZExlbmd0aDsKICAgICBpbnQgZmlyc3RUeXBlID0gZmlyc3QtPnByaW1pdGl2ZVR5
cGUoKTsKICAgICBpbnQgc2Vjb25kVHlwZSA9IHNlY29uZCA/IHNlY29uZC0+cHJpbWl0aXZlVHlw
ZSgpIDogMDsKQEAgLTQyMTUsNyArNDIxNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
RmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAg
ICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYi5zZXRXaWR0
aChmaXJzdExlbmd0aCk7CiAgICAgYi5zZXRIZWlnaHQoc2Vjb25kTGVuZ3RoKTsKICAgICBsYXll
ci0+c2V0U2l6ZUxlbmd0aChiKTsKQEAgLTQyMjcsNyArNDIyNyw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1CiAgICAgICAgIGxheWVyLT5zZXRYUG9zaXRpb24oRmlsbExheWVyOjppbml0aWFs
RmlsbFhQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgCisKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDI1MSwxMiArNDI1MSwxMiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZp
bGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdQogICAg
ICAgICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24o
bGF5ZXItPnR5cGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9h
dCB6b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIAorCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CiAgICAgTGVuZ3RoIGw7CiAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwpAQCAtNDQxOCw3ICs0NDE4LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlv
biwgQ1NTVmFsdWUKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRp
b246OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKKwogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7CkBAIC00NDQ2LDcgKzQ0NDYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmFs
dWUtPmlzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CiAgICAgICAgIENTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUqIHRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVGltaW5nRnVuY3Rpb25WYWx1
ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSgpKSB7CkBAIC00NDY4LDcgKzQ0NjgsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1Zh
bHVlKiB2YWx1ZQogCiAgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KICAg
ICBDU1NCb3JkZXJJbWFnZVZhbHVlKiBib3JkZXJJbWFnZSA9IHN0YXRpY19jYXN0PENTU0JvcmRl
ckltYWdlVmFsdWUqPih2YWx1ZSk7Ci0gICAgCisKICAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlz
IGtpY2tzIG9mZiB0aGUgbG9hZCkuCiAgICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5Owog
ICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlIHx8IHByb3Bl
cnR5ID09IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UpCkBAIC00NDc3LDcgKzQ0NzcsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U7CiAgICAgZWxzZQogICAgICAgICBpbWFnZVByb3BlcnR5
ID0gcHJvcGVydHk7Ci0gICAgICAgIAorCiAgICAgaWYgKENTU1ZhbHVlKiBpbWFnZVZhbHVlID0g
Ym9yZGVySW1hZ2UtPmltYWdlVmFsdWUoKSkKICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uoc3R5bGVJ
bWFnZShpbWFnZVByb3BlcnR5LCBpbWFnZVZhbHVlKSk7CiAKQEAgLTQ0ODcsNyArNDQ4Nyw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlCiAgICAgLy8gTWFwIGluIHRoZSBib3JkZXIgc2xpY2Vz
LgogICAgIGlmIChib3JkZXJJbWFnZS0+bV9ib3JkZXJTbGljZSkKICAgICAgICAgaW1hZ2Uuc2V0
Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChib3JkZXJJbWFnZS0+bV9ib3JkZXJT
bGljZS5nZXQoKSkpOwotICAgIAorCiAgICAgLy8gTWFwIGluIHRoZSBvdXRzZXQuCiAgICAgaWYg
KGJvcmRlckltYWdlLT5tX291dHNldCkKICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQ
aWVjZUltYWdlUXVhZChib3JkZXJJbWFnZS0+bV9vdXRzZXQuZ2V0KCkpKTsKQEAgLTQ1OTIsNyAr
NDU5Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQo
Q1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBh
aXJWYWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vj
b25kKCkpCkBAIC00NjQwLDcgKzQ2NDAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNr
Rm9yVGV4dFNpemVBZGp1c3QoKQogewogICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgp
KQogICAgICAgICByZXR1cm47Ci0gCisKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2Ny
aXB0aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwog
ICAgIG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwpAQCAt
NDY1MCw3ICs0NjUwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0Zvclpvb21DaGFu
Z2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW4KIHsKICAgICBpZiAoc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgCisKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9u
dCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9u
dERlc2NyaXB0aW9uKGNoaWxkRm9udCk7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0
aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKQEAgLTQ2NjAsNyArNDY2MCw3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHBhcmVuCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKIHsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKLSAgCisKICAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXpl
KCkgfHwgIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ3MzEsNyArNDczMSw3
IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRT
aXplKERvY3VtZW50KiBkb2N1bWVudCwgZmxvCiAgICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11
bSwgd2UgbmV2ZXIgd2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6
ZSB0byBrZWVwIGZvbnRzIHJlYWRhYmxlLgogICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93
IHRoZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwK
ICAgICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRw
Oi8vd3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgotICAgIAorCiAgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5n
cykKICAgICAgICAgcmV0dXJuIDEuMGY7CkBAIC00NzUwLDcgKzQ3NTAsNyBAQCBmbG9hdCBDU1NT
dHlsZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCog
ZG9jdW1lbnQsIGZsbwogICAgIC8vIGRvaW5nIHNvIHdvbid0IGRpc3J1cHQgdGhlIGxheW91dC4K
ICAgICBpZiAodXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUgJiYgem9vbWVkU2l6ZSA8IG1pbkxv
Z2ljYWxTaXplICYmIChzcGVjaWZpZWRTaXplID49IG1pbkxvZ2ljYWxTaXplIHx8ICFpc0Fic29s
dXRlU2l6ZSkpCiAgICAgICAgIHpvb21lZFNpemUgPSBtaW5Mb2dpY2FsU2l6ZTsKLSAgICAKKwog
ICAgIC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJldmVudCBpbnNh
bmUgZm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCiAgICAgLy8gcGxh
dGZvcm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQogICAgIHJldHVybiBtaW4oMTAw
MDAwMC4wZiwgem9vbWVkU2l6ZSk7CkBAIC00ODEyLDcgKzQ4MTIsNyBAQCBmbG9hdCBDU1NTdHls
ZVNlbGVjdG9yOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5
d29yZCwgYm9vbAogICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwp
OwogICAgICAgICByZXR1cm4gcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtj
b2xdIDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddW2NvbF07CiAgICAgfQotICAgIAorCiAgICAg
Ly8gVmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2Nh
bGUgZmFjdG9yIGluc3RlYWQuCiAgICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGlu
Z3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7CiAgICAgcmV0dXJuIG1heChmb250U2l6
ZUZhY3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNh
bFNpemUpOwpAQCAtNDg0OCwxNCArNDg0OCwxNCBAQCBpbnQgQ1NTU3R5bGVTZWxlY3Rvcjo6bGVn
YWN5Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbAog
ZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6bGFyZ2VyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCkg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBz
aXplIHJhbmdlcyAoeHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgdXAgdG8KLSAgICAv
LyB0aGUgbmV4dCBzaXplIGxldmVsLiAgCisgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KICAg
ICByZXR1cm4gc2l6ZSAqIDEuMmY7CiB9CiAKIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OnNtYWxs
ZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgt
bGFyZ2UpIGFuZCBzY2FsZSBkb3duIHRvCi0gICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4gCisg
ICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiB9CiAK
QEAgLTQ5OTQsOSArNDk5NCw5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNm
b3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKKwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMCkpOwotICAgICAgICAgCisKICAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1W
YWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKQEAgLTUwMDUs
MTMgKzUwMDUsMTMgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAgICAgICAgICAgICBk
b3VibGUgc3kgPSAxLjA7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAh
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNTAyNyw3ICs1MDI3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVh
dGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAg
ICAgICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMikgewpAQCAtNTAzNyw3ICs1
MDM3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC01MDUyLDcgKzUw
NTIsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMo
Q1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgIExlbmd0aCB0
eSA9IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlU
cmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxv
YXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUs
IHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CkBAIC01MDc4LDcgKzUwNzgsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3Is
ICZvayk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yLCAmb2spOwotICAgICAgICAg
ICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yLCAmb2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKQEAgLTUxMDYsNyArNTEwNiw3IEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1
ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5n
bGUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4pCiAgICAgICAgICAgICAgICAgICAgIGFu
Z2xlID0gdHVybjJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CkBAIC01MTIxLDcgKzUxMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6
OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxl
KgogICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0dSQUQpCiAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWco
YW5nbGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgIHggPSAxOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCkBAIC01MjEz
LDcgKzUyMTMsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJh
dGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE1KSktPmdldERvdWJsZVZhbHVlKCkpOwog
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAg
ICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBMZW5ndGggcCA9
IExlbmd0aCgwLCBGaXhlZCk7CkBAIC01MjI1LDcgKzUyMjUsNyBAQCBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKgogICAgICAgICAgICAgICAgICAgICBvayA9IHZhbCA+PSAwOwogICAgICAgICAgICAg
ICAgICAgICBwID0gTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlm
ICghb2spCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTI4MCw3ICs1
MjgwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENT
U1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3QKICAgICAgICAgb3V0T3BlcmF0aW9ucy5j
bGVhcigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgZmxvYXQg
em9vbUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CiAgICAgRmls
dGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aSA9IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewpAQCAtNTQxMSwxMyArNTQx
MSwxMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKICAg
ICBpZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKKwogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSBzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPigqaXQpOwogCiAgICAgICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJv
cGVydHkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsK
ICAgICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHls
ZS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRM
YXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuaAppbmRleCBiMDJiMjI5Li42N2U0YjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmgKQEAgLTkzLDEzICs5MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVmUHRy
PENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAogICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7
CiAgICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLSAgICAKKwogICAgIC8vIFVzaW5nIHRoZXNlIGR1
cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGls
ZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgogICAgIHZvaWQgcHVzaFBhcmVudChF
bGVtZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsgfQogICAgIHZv
aWQgcG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucG9wUGFyZW50KHBhcmVu
dCk7IH0KIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVt
ZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0
cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKLSAgICAKKwogICAgIHZv
aWQga2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxl
KiwgS2V5ZnJhbWVMaXN0Jik7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9T
dHlsZUZvckVsZW1lbnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdHlsZShQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhl
IGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KIAogICAgIHZvaWQgYXBw
bHlQcm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7Ci0gICAg
CisKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9j
dW1lbnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVj
aWZpZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JG
b250Rml6ZSk7CiAKIHByaXZhdGU6CkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwog
ICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAg
dm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgCisKICAgICBib29sIGNoZWNrU2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKTsKIAogICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KQEAgLTI0
Myw3ICsyNDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRl
eCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNG
aXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBw
YWdlSW5kZXgpIGNvbnN0OwotICAgIAorCiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5
bGU7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwogCkBAIC0yNjQsNyArMjY0LDcg
QEAgcHVibGljOgogCiAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSopOwogICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgCisKICAgICBib29sIGFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CiAKQEAgLTMz
MCw3ICszMzAsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBt
X21hdGNoZWRSdWxlczsKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLSAg
ICAKKwogICAgIEhhc2hTZXQ8aW50PiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IC8vIEhhc2gg
b2YgQ1NTUHJvcGVydHlJRHMKIAogICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9yPiBtX21l
ZGl1bTsKQEAgLTM1MSw3ICszNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mb250RGlydHk7
CiAgICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKICAgICBib29sIG1fc2FtZU9y
aWdpbk9ubHk7Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxl
Y3RvcjsKICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZURlY2xzOwogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAtMzU5LDcgKzM1OSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBib29s
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBDU1NTdHlsZUFw
cGx5UHJvcGVydHkmIG1fYXBwbHlQcm9wZXJ0eTsKLSAgICAKKwogICAgIGZyaWVuZCBjbGFzcyBD
U1NTdHlsZUFwcGx5UHJvcGVydHk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5j
cHAKaW5kZXggNjYwMTA2Yi4uNmQ0ZTdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVDU1NTdHlsZVNo
ZWV0UGFyZW50KE5vZGUqIHBhcmVudE5vZGUpCiAgICAgICAgIHx8IHBhcmVudE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB8fCBw
YXJlbnROb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdHlsZVRhZykKLSNlbmRpZiAgICAKKyNl
bmRpZgogICAgICAgICB8fCBwYXJlbnROb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJ
TkdfSU5TVFJVQ1RJT05fTk9ERTsKIH0KICNlbmRpZgpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHVuc2ln
bmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uCiAgICAgQ1NTUnVsZSogYyA9IHIuZ2V0KCk7CiAgICAgbV9jaGls
ZHJlbi5pbnNlcnQoaW5kZXgsIHIucmVsZWFzZSgpKTsKICAgICBjLT5pbnNlcnRlZEludG9QYXJl
bnQoKTsKLSAgICAKKwogICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci0gICAgCisKICAgICByZXR1
cm4gaW5kZXg7CiB9CiAKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFk
ZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25z
dAogICAgICAgICByZXR1cm47CiAKICAgICBtX25hbWVzcGFjZXMgPSBhZG9wdFB0cihuZXcgQ1NT
TmFtZXNwYWNlKHByZWZpeCwgdXJpLCBtX25hbWVzcGFjZXMucmVsZWFzZSgpKSk7Ci0gICAgCisK
ICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKICAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IG5h
bWVzcGFjZSBvbiB0aGUgcGFyc2VyIHNvIHRoYXQgc2VsZWN0b3JzIHRoYXQgb21pdCBuYW1lc3Bh
Y2UgaW5mbyB3aWxsCiAgICAgICAgIC8vIGJlIGFibGUgdG8gcGljayBpdCB1cCBlYXNpbHkuCkBA
IC0yODEsNyArMjgxLDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgp
CiAgICAgd2hpbGUgKFN0eWxlQmFzZSogcGFyZW50ID0gcm9vdC0+cGFyZW50KCkpCiAgICAgICAg
IHJvb3QgPSBwYXJlbnQ7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50VG9VcGRhdGUgPSByb290LT5p
c0NTU1N0eWxlU2hlZXQoKSA/IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9j
dW1lbnQoKSA6IDA7Ci0gICAgCisKICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBl
dmVyeXRoaW5nIHVwZGF0ZVN0eWxlU2VsZWN0b3IgZG9lcywKICAgICAgKiBiYXNpY2FsbHkgd2Ug
anVzdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBkb2N1bWVudCdzIHNlbGVjdG9yIHdpdGggdGhlCiAg
ICAgICogYWxyZWFkeSBleGlzdGluZyBzdHlsZSBzaGVldHMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAKaW5kZXggOWVlY2IyYy4uZDI5YzJkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaAppbmRleCAyN2U4OTli
Li5lMzY5MWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rp
b25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NU
aW1pbmdGdW5jdGlvblZhbHVlX2gKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVlKTsK
ICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTTGluZWFyVGltaW5nRnVuY3Rpb25WYWx1
ZSgpCiAgICAgewpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29s
IGlzTGluZWFyVGltaW5nRnVuY3Rpb25WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIH07
Ci0gICAgCisKIGNsYXNzIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSA6IHB1Ymxp
YyBDU1NUaW1pbmdGdW5jdGlvblZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+IGNyZWF0ZShkb3VibGUgeDEsIGRv
dWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGlj
OgogCiAgICAgaW50IG51bWJlck9mU3RlcHMoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBzOyB9CiAg
ICAgYm9vbCBzdGVwQXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcEF0U3RhcnQ7IH0KLSAg
ICAKKwogcHJpdmF0ZToKICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUoaW50IHN0ZXBz
LCBib29sIHN0ZXBBdFN0YXJ0KQogICAgICAgICA6IG1fc3RlcHMoc3RlcHMpCkBAIC0xMTksNyAr
MTE5LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zdGVwczsKICAgICBib29sIG1fc3RlcEF0U3Rh
cnQ7CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwCmluZGV4IDU5OWMwNzguLmY3Yjg3NzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCmluZGV4IDBiYTE5ODAuLjJmMmMw
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCkBAIC0yMCw3
ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTVW5pY29kZVJhbmdl
VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAppbmRleCBjNGQ5MWIxLi4yZTRk
N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcApAQCAtNzIsMTAgKzcyLDEwIEBA
IGJvb2wgQ1NTVmFsdWVMaXN0OjpyZW1vdmVBbGwoQ1NTVmFsdWUqIHZhbCkKICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmb3Vu
ZDsKIH0KLSAgICAKKwogYm9vbCBDU1NWYWx1ZUxpc3Q6Omhhc1ZhbHVlKENTU1ZhbHVlKiB2YWwp
IGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBiZSBpbXBsZW1lbnRpbmcgb3BlcmF0
b3I9PSB0byBDU1NWYWx1ZSBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1dyYXBTaGFwZXMuY3BwCmluZGV4IDZjZjI4MDkuLmU1ZTlmOTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTV3JhcFNoYXBlcy5jcHAKQEAgLTEyLDcgKzEyLDcgQEAKICAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKICAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFO
WQogICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpAQCAtNDEsNyArNDEsNyBAQCBTdHJpbmcgQ1NT
V3JhcFNoYXBlUmVjdDo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJyZWN0KCIpKTsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAgCisKICAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKICAgICByZXN1
bHQuYXBwZW5kKHJlY3RQYXJlbik7CkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBDU1NXcmFwU2hh
cGVSZWN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAogICAg
IHJlc3VsdC5hcHBlbmQobV9oZWlnaHQtPmNzc1RleHQoKSk7Ci0gICAgCisKICAgICBpZiAobV9y
YWRpdXNYLmdldCgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogICAgICAgICBy
ZXN1bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKQEAgLTY2LDkgKzY2LDkgQEAgU3Ry
aW5nIENTU1dyYXBTaGFwZVJlY3Q6OmNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisK
ICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgICAgICAgICAKKwogICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKIH0KIApAQCAtNzYsNyArNzYsNyBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBl
Q2lyY2xlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IFN0cmluZywgY2lyY2xlUGFyZW4sICgiY2lyY2xlKCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAgCisKICAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKICAgICByZXN1bHQu
YXBwZW5kKGNpcmNsZVBhcmVuKTsKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIENTU1dyYXBTaGFw
ZUNpcmNsZTo6Y3NzVGV4dCgpIGNvbnN0CiAKICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzLT5j
c3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIAorCiAgICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIFN0cmluZyBD
U1NXcmFwU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgZWxsaXBzZVBhcmVuLCAoImVsbGlwc2UoIikpOwogICAgIERF
RklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKLSAgICAKKwog
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIp
OwogICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBhcmVuKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBT
dHJpbmcgQ1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0CiAKICAgICByZXN1bHQu
YXBwZW5kKG1fcmFkaXVzWS0+Y3NzVGV4dCgpKTsKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0g
ICAgICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIApAQCAtMTIy
LDcgKzEyMiw3IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY29uc3QK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcG9seWdvblBhcmVuRXZlbk9k
ZCwgKCJwb2x5Z29uKGV2ZW5vZGQsICIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IFN0cmluZywgcG9seWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnplcm8sICIpKTsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAg
CisKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5
KDMyKTsKICAgICBpZiAobV93aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCkBAIC0xMzksOSArMTM5
LDkgQEAgU3RyaW5nIENTU1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogICAgICAg
ICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5h
dChpICsgMSktPmNzc1RleHQoKSk7CiAgICAgfQotICAgIAorCiAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOwotICAgICAgICAgICAgCisKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5oCmluZGV4IDkxNzhlYmIuLjNmZjlmYWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuaApAQCAtMTIsNyArMTIsNyBAQAogICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAq
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cwogICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCkBAIC00NSwxNSArNDUsMTUgQEAg
cHVibGljOgogICAgICAgICBDU1NfV1JBUF9TSEFQRV9DSVJDTEUgPSAyLAogICAgICAgICBDU1Nf
V1JBUF9TSEFQRV9FTExJUFNFID0gMywKICAgICAgICAgQ1NTX1dSQVBfU0hBUEVfUE9MWUdPTiA9
IDQsCi0gICAgICAgIENTU19XUkFQX1NIQVBFX1BBVEggPSA1ICAgICAgICAKKyAgICAgICAgQ1NT
X1dSQVBfU0hBUEVfUEFUSCA9IDUKICAgICB9OwotICAgIAorCiAgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKIAogcHVi
bGljOgogICAgIHZpcnR1YWwgfkNTU1dyYXBTaGFwZSgpIHsgfQotICAgIAorCiBwcm90ZWN0ZWQ6
CiAgICAgQ1NTV3JhcFNoYXBlKCkgeyB9CiB9OwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0Lmdl
dCgpOyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBt
X3JhZGl1c1guZ2V0KCk7IH0KICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmFkaXVzWSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmFkaXVzWS5nZXQoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRMZWZ0KFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQogICAg
IHZvaWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9
IHRvcDsgfQogICAgIHZvaWQgc2V0V2lkdGgoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
d2lkdGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CkBAIC03OCwxMCArNzgsMTAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSB7IHJldHVybiBDU1NfV1JBUF9TSEFQRV9SRUNUOyB9
CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIAorCiBwcml2YXRlOgog
ICAgIENTU1dyYXBTaGFwZVJlY3QoKSB7IH0KLSAgICAKKwogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV90b3A7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7CiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3dpZHRoOwpAQCAtOTcsMTcgKzk3LDE3IEBA
IHB1YmxpYzoKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVmdC5nZXQoKTsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVy
biBtX3RvcC5nZXQoKTsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXMoKSBjb25zdCB7
IHJldHVybiBtX3JhZGl1cy5nZXQoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRMZWZ0KFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQogICAgIHZv
aWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRv
cDsgfQogICAgIHZvaWQgc2V0UmFkaXVzKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJh
ZGl1cykgeyBtX3JhZGl1cyA9IHJhZGl1czsgfQogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSB7
IHJldHVybiBDU1NfV1JBUF9TSEFQRV9DSVJDTEU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTV3JhcFNoYXBlQ2lyY2xlKCkg
eyB9Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbV9yYWRpdXM7CkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQogICAgIENTU1By
aW1pdGl2ZVZhbHVlKiByYWRpdXNYKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNYLmdldCgpOyB9
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1
c1kuZ2V0KCk7IH0KLSAgICAKKwogICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBsZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KICAgICB2b2lkIHNldFRvcChQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90b3AgPSB0b3A7IH0KICAgICB2b2lk
IHNldFJhZGl1c1goUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzWCkgeyBtX3Jh
ZGl1c1ggPSByYWRpdXNYOyB9CkBAIC0xMjksMTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIHsgcmV0dXJuIENTU19XUkFQX1NIQVBFX0VMTElQU0U7IH0KICAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAg
Q1NTV3JhcFNoYXBlRWxsaXBzZSgpIHsgfQotICAgIAorCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBtX3RvcDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmFkaXVzWDsKQEAgLTE0MiwzMCArMTQyLDMw
IEBAIHByaXZhdGU6CiBjbGFzcyBDU1NXcmFwU2hhcGVQb2x5Z29uIDogcHVibGljIENTU1dyYXBT
aGFwZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlUG9seWdv
bj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1dyYXBTaGFwZVBvbHlnb24pOyB9
Ci0gICAgCisKICAgICB2b2lkIGFwcGVuZFBvaW50KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHgsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHkpCi0gICAgeyAKKyAgICB7CiAg
ICAgICAgIG1fdmFsdWVzLmFwcGVuZCh4KTsKICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHkpOwog
ICAgIH0KLSAgICAKKwogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGdldFhBdCh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX3ZhbHVlcy5hdChpICogMik7IH0KICAgICBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBnZXRZQXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV92YWx1ZXMu
YXQoaSAqIDIgKyAxKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRXaW5kUnVsZShXaW5kUnVsZSB3
KSB7IG1fd2luZFJ1bGUgPSB3OyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX3dpbmRSdWxlOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIHsgcmV0
dXJuIENTU19XUkFQX1NIQVBFX1BPTFlHT047IH0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTV3JhcFNoYXBlUG9seWdvbigpCiAg
ICAgICAgIDogbV93aW5kUnVsZShSVUxFX05PTlpFUk8pCiAgICAgewogICAgIH0KLSAgICAKKwog
ICAgIFZlY3RvcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4gbV92YWx1ZXM7Ci0gICAgV2lu
ZFJ1bGUgbV93aW5kUnVsZTsgICAgCisgICAgV2luZFJ1bGUgbV93aW5kUnVsZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAKaW5kZXggOTkxZmM2
ZS4uNmIwOTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgRm9udFZhbHVlOjpjc3NUZXh0KCkgY29uc3QK
IHsKLSAgICAvLyBmb250IHZhcmlhbnQgd2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkg
CisgICAgLy8gZm9udCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5CiAK
ICAgICBTdHJpbmcgcmVzdWx0KCIiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA1
ZmUwNTBhLi44NmVlMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtNzIsNyArNzIs
NyBAQCBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
LCBjb25zdCBTdHJpbmcmIG1lZGlhLCBib29sCiAgICAgLy8gRklYTUU6IHBhcnNpbmcgY2FuIGZh
aWwuIFRoZSBwcm9ibGVtIHdpdGggZmFpbGluZyBjb25zdHJ1Y3RvciBpcyB0aGF0CiAgICAgLy8g
d2Ugd291bGQgbmVlZCBhZGRpdGlvbmFsIGZsYWcgc2F5aW5nIE1lZGlhTGlzdCBpcyBub3QgdmFs
aWQKICAgICAvLyBQYXJzZSBjYW4gZmFpbCBvbmx5IHdoZW4gZmFsbGJhY2tUb0Rlc2NyaXB0b3Ig
PT0gZmFsc2UsIGkuZSB3aGVuIEhUTUw0IG1lZGlhIGRlc2NyaXB0b3IKLSAgICAvLyBmb3J3YXJk
LWNvbXBhdGlibGUgc3ludGF4IGlzIG5vdCBpbiB1c2UuIAorICAgIC8vIGZvcndhcmQtY29tcGF0
aWJsZSBzeW50YXggaXMgbm90IGluIHVzZS4KICAgICAvLyBET01JbXBsZW1lbnRhdGlvbkNTUyBz
ZWVtcyB0byBtYW5kYXRlIHRoYXQgbWVkaWEgZGVzY3JpcHRvcnMgYXJlIHVzZWQKICAgICAvLyBm
b3IgYm90aCBodG1sIGFuZCBzdmcsIGV2ZW4gdGhvdWdoIHN2ZzpzdHlsZSBkb2Vzbid0IHVzZSBt
ZWRpYSBkZXNjcmlwdG9ycwogICAgIC8vIEN1cnJlbnRseSB0aGUgb25seSBwbGFjZXMgd2hlcmUg
cGFyc2luZyBjYW4gZmFpbCBhcmUKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIE1lZGlhTGlzdDo6
ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgb2xkTWVkaXVtLCBFeGNlcHRpb25Db2RlJiBlYykK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICghZWMpCiAg
ICAgICAgIG5vdGlmeUNoYW5nZWQoKTsKIH0KQEAgLTE5MSwxMSArMTkxLDExIEBAIHZvaWQgTWVk
aWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgICAgICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAg
CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fZmFsbGJhY2spIHsKICAgICAg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAg
ICAgICAgICAgIAorICAgICAgICB9CiAgICAgfQogICAgIC8vICIsLCwsIiBmYWxscyBzdHJhaWdo
dCB0aHJvdWdoLCBidXQgaXMgbm90IHZhbGlkIHVubGVzcyBmYWxsYmFjawogICAgIGlmICghbV9m
YWxsYmFjayAmJiBsaXN0LmJlZ2luKCkgPT0gbGlzdC5lbmQoKSkgewpAQCAtMjA1LDcgKzIwNSw3
IEBAIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICBlYyA9IDA7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcXVlcmllcyk7CiAgICAg
bV9xdWVyaWVzID0gdGVtcE1lZGlhTGlzdC0+bV9xdWVyaWVzOwpAQCAtMjM2LDcgKzIzNiw3IEBA
IHZvaWQgTWVkaWFMaXN0OjphcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBuZXdNZWRpdW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgZWMgPSAwOwogICAgICAgICB9CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKCFlYykKICAgICAgICAgbm90aWZ5Q2hhbmdlZCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnkuY3BwCmluZGV4IGM0NzZhMjEuLjhmYTU4MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeS5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNjksNyArNjksNyBAQCBTdHJpbmcgTWVkaWFRdWVyeTo6
c2VyaWFsaXplKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLXN0
YXRpYyBib29sIGV4cHJlc3Npb25Db21wYXJlKGNvbnN0IE93blB0cjxNZWRpYVF1ZXJ5RXhwPiYg
YSwgY29uc3QgT3duUHRyPE1lZGlhUXVlcnlFeHA+JiBiKSAKK3N0YXRpYyBib29sIGV4cHJlc3Np
b25Db21wYXJlKGNvbnN0IE93blB0cjxNZWRpYVF1ZXJ5RXhwPiYgYSwgY29uc3QgT3duUHRyPE1l
ZGlhUXVlcnlFeHA+JiBiKQogewogICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEtPnNlcmlh
bGl6ZSgpLCBiLT5zZXJpYWxpemUoKSkgPCAwOwogfQpAQCAtOTUsNyArOTUsNyBAQCBNZWRpYVF1
ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBh
c3NPd25QdHI8VmVjdG9yPAogICAgICAgICAvLyBpZiBub3QgYWxsIG9mIHRoZSBleHByZXNzaW9u
cyBpcyB2YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgogICAgICAgICBpZiAo
IW1faWdub3JlZCkKICAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25zLT5hdChp
KS0+aXNWYWxpZCgpOwotIAorCiAgICAgICAgIGlmIChtX2V4cHJlc3Npb25zLT5hdChpKS0+c2Vy
aWFsaXplKCkgPT0ga2V5KQogICAgICAgICAgICAgbV9leHByZXNzaW9ucy0+cmVtb3ZlKGkpOwog
ICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAppbmRleCA0Y2MzNjY1Li5jYjE0MTU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAogI2lmbmRlZiBNZWRpYVF1ZXJ5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5oCmluZGV4IDA1YzhkYzkuLmJhODM4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaApAQCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCiAjaWZuZGVmIE1lZGlhUXVlcnlFdmFsdWF0b3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFeHAuY3BwCmluZGV4IGU5NzA0MDAuLjFmNTMyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV4cC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFeHAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKaW5kZXgg
N2U0ZDQ3Ny4uYzUxNGI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlFeHAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCkBAIC0yMyw3
ICsyMyw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgTWVkaWFRdWVyeUV4cF9o
CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWYWxpZDsgfQogCi0gICAgYm9vbCBpc1ZpZXdwb3J0RGVwZW5kZW50KCkgY29u
c3QgeyByZXR1cm4gbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVk
aWFGZWF0dXJlIHx8IAorICAgIGJvb2wgaXNWaWV3cG9ydERlcGVuZGVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aE1lZGlhRmVhdHVy
ZSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHRNZWRpYUZlYXR1cmUgfHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3dpZHRoTWVkaWFGZWF0dXJlIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9oZWlnaHRNZWRpYUZlYXR1cmUgfHwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWlyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFpci5oCmlu
ZGV4IGM3NmJkODIuLmE5NTM3MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWly
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1BhaXIuaApAQCAtNTMsNyArNTMsNyBAQCBwcml2
YXRlOgogICAgIFBhaXIoKSA6IG1fZmlyc3QoMCksIG1fc2Vjb25kKDApIHsgfQogICAgIFBhaXIo
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZmlyc3QsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHNlY29uZCkKICAgICAgICAgOiBtX2ZpcnN0KGZpcnN0KSwgbV9zZWNvbmQoc2Vj
b25kKSB7IH0KLSAgICAKKwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdDsK
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fc2Vjb25kOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5k
ZXggMGMyYWFmZi4uN2VmM2IwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NW
R0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTczLDE5ICs3MywxOSBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFNWR1Byb3Bl
cnR5Q1NTVmFsdWUoaW50IHBybwogICAgIE5vZGUqIG5vZGUgPSBtX25vZGUuZ2V0KCk7CiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIC8vIE1ha2Ugc3VyZSBv
dXIgbGF5b3V0IGlzIHVwIHRvIGRhdGUgYmVmb3JlIHdlIGFsbG93IGEgcXVlcnkgb24gdGhlc2Ug
YXR0cmlidXRlcy4KICAgICBpZiAodXBkYXRlTGF5b3V0KQogICAgICAgICBub2RlLT5kb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXQoKTsKLSAgICAgICAgCisKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBub2RlLT5jb21wdXRlZFN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+
c3ZnU3R5bGUoKTsKICAgICBpZiAoIXN2Z1N0eWxlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAK
KwogICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcGVydHlJRCkpIHsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNsaXBSdWxlOgogICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmNsaXBSdWxlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTUGFyc2VyLmNwcAppbmRleCA2ZDcyYjM1Li42YjYyM2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTUGFyc2VyLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVNWR1ZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb246ICAgLy8gYXV0byB8IHNS
R0IgfCBsaW5lYXJSR0IgfCBpbmhlcml0Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9ySW50ZXJw
b2xhdGlvbkZpbHRlcnM6ICAKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9u
RmlsdGVyczoKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1
ZVNyZ2IgfHwgaWQgPT0gQ1NTVmFsdWVMaW5lYXJyZ2IpCiAgICAgICAgICAgICB2YWxpZF9wcmlt
aXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKQEAgLTIyNyw3ICsyMjcsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAor
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlY3RvckVmZmVjdDogLy8gbm9uZSB8IG5vbi1zY2FsaW5n
LXN0cm9rZSB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlTm9uZSB8fCBpZCA9
PSBDU1NWYWx1ZU5vblNjYWxpbmdTdHJva2UpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUg
PSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4
IDg3YTg1MjEuLmRkNGU1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NT
dHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAgICBTVkdSZW5kZXJTdHls
ZSogc3Znc3R5bGUgPSBtX3N0eWxlLT5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIHVuc2lnbmVkIHNo
b3J0IHZhbHVlVHlwZSA9IHZhbHVlLT5jc3NWYWx1ZVR5cGUoKTsKLSAgICAKKwogICAgIGJvb2wg
aXNJbmhlcml0ID0gbV9wYXJlbnROb2RlICYmIHZhbHVlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0lOSEVSSVQ7CiAgICAgYm9vbCBpc0luaXRpYWwgPSB2YWx1ZVR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JTklUSUFMIHx8ICghbV9wYXJlbnROb2RlICYmIHZhbHVlVHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOSEVSSVQpOwogCkBAIC0xMjcsNyArMTI3LDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoYWxpZ25tZW50
QmFzZWxpbmUsIEFsaWdubWVudEJhc2VsaW5lKQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICBzdmdzdHlsZS0+c2V0QWxpZ25tZW50QmFzZWxpbmUoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yOTksOCArMjk5LDggQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmlsbE9wYWNpdHksIEZpbGxPcGFj
aXR5KQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgICAgICAgICAgZmxvYXQgZiA9IDAuMGY7ICAgIAorCisgICAg
ICAgICAgICBmbG9hdCBmID0gMC4wZjsKICAgICAgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZl
VmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBmID0gcHJpbWl0aXZl
VmFsdWUtPmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wZjsKQEAgLTMxNyw4ICszMTcsOCBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdHJva2VPcGFjaXR5
LCBTdHJva2VPcGFjaXR5KQogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAgICAgZmxvYXQgZiA9IDAuMGY7
ICAgIAorCisgICAgICAgICAgICBmbG9hdCBmID0gMC4wZjsKICAgICAgICAgICAgIGludCB0eXBl
ID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBl
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBm
ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wZjsKQEAgLTMzNSw4ICsz
MzUsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChz
dG9wT3BhY2l0eSwgU3RvcE9wYWNpdHkpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgICAgICBmbG9hdCBm
ID0gMC4wZjsgICAgCisKKyAgICAgICAgICAgIGZsb2F0IGYgPSAwLjBmOwogICAgICAgICAgICAg
aW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAg
aWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICAg
ICAgICAgIGYgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBmOwpAQCAt
NDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9wZXJ0eShp
bnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBzID0gcHJpbWl0aXZlVmFs
dWUtPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRNYXNrZXJS
ZXNvdXJjZShTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmco
cywgbV9lbGVtZW50LT5kb2N1bWVudCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIC8vIC13ZWJraXQtc3Zn
LXNoYWRvdyBkb2VzIHNob3VsZCBub3QgaGF2ZSBhIHNwcmVhZCBvciBzdHlsZQogICAgICAgICAg
ICAgQVNTRVJUKCFpdGVtLT5zcHJlYWQpOwogICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zdHls
ZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgIE93blB0cjxTaGFkb3dEYXRhPiBz
aGFkb3dEYXRhID0gYWRvcHRQdHIobmV3IFNoYWRvd0RhdGEoeCwgeSwgYmx1ciwgMCwgTm9ybWFs
LCBmYWxzZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTaGFkb3coc2hhZG93RGF0YS5yZWxlYXNlKCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApp
bmRleCA0YWIxMTBjLi4yOTI5N2E2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcApAQCAtNjIsOSArNjIsOSBAQAogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICAKKwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLSAgICAKKwogc3RhdGljIGJvb2wgaHRt
bEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHIpOwogCiBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCogZG9jdW1l
bnQsIGJvb2wgc3RyaWN0UGFyc2luZykKQEAgLTE3NSw4ICsxNzUsOCBAQCB2b2lkIFNlbGVjdG9y
Q2hlY2tlcjo6Y29sbGVjdElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCB1bnNpZwogICAgIHVuc2lnbmVkKiBoYXNoID0gaWRlbnRpZmllckhhc2hlczsKICAgICB1
bnNpZ25lZCogZW5kID0gaWRlbnRpZmllckhhc2hlcyArIG1heGltdW1JZGVudGlmaWVyQ291bnQ7
CiAgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsZWN0b3ItPnJlbGF0aW9u
KCk7Ci0gICAgCi0gICAgLy8gU2tpcCB0aGUgdG9wbW9zdCBzZWxlY3Rvci4gSXQgaXMgaGFuZGxl
ZCBxdWlja2x5IGJ5IHRoZSBydWxlIGhhc2hlcy4gICAgCisKKyAgICAvLyBTa2lwIHRoZSB0b3Bt
b3N0IHNlbGVjdG9yLiBJdCBpcyBoYW5kbGVkIHF1aWNrbHkgYnkgdGhlIHJ1bGUgaGFzaGVzLgog
ICAgIGJvb2wgc2tpcE92ZXJTdWJzZWxlY3RvcnMgPSB0cnVlOwogICAgIGZvciAoc2VsZWN0b3Ig
PSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+
dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgIC8vIE9ubHkgY29sbGVjdCBpZGVudGlmaWVycyB0aGF0
IG1hdGNoIGFuY2VzdG9ycy4KQEAgLTIwNywyNCArMjA3LDI0IEBAIHN0YXRpYyBpbmxpbmUgY29u
c3QgQXRvbWljU3RyaW5nKiBsaW5rQXR0cmlidXRlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBBU1NFUlQobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOwogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiAmZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7Ci0gICAgCisK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuICZlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwog
I2VuZGlmCi0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIAogRUluc2lkZUxpbmsgU2VsZWN0b3JD
aGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogewogICAgIEFTU0VSVChlbGVtZW50LT5pc0xpbmsoKSk7Ci0gICAgCisKICAgICBjb25zdCBB
dG9taWNTdHJpbmcqIGF0dHIgPSBsaW5rQXR0cmlidXRlKGVsZW1lbnQpOwogICAgIGlmICghYXR0
ciB8fCBhdHRyLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CkBAIC0y
NDEsMTMgKzI0MSwxMyBAQCBFSW5zaWRlTGluayBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxp
bmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgRnJhbWUqIGZyYW1l
ID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
SW5zaWRlVW52aXNpdGVkTGluazsKLSAgICAKKwogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7
Ci0gICAgCisKICAgICBtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5hZGQoaGFzaCk7Ci0g
ICAgCisKICNpZiBVU0UoUExBVEZPUk1fU1RSQVRFR0lFUykKICAgICByZXR1cm4gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnZpc2l0ZWRMaW5rU3RyYXRlZ3koKS0+aXNMaW5rVmlzaXRlZChwYWdlLCBo
YXNoLCBtX2RvY3VtZW50LT5iYXNlVVJMKCksICphdHRyKSA/IEluc2lkZVZpc2l0ZWRMaW5rIDog
SW5zaWRlVW52aXNpdGVkTGluazsKICNlbHNlCkBAIC0yODksNyArMjg5LDcgQEAgaW5saW5lIGJv
b2wgZmFzdENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3Rvciwg
Y29uc3QgRWxlbWVudCoKICAgICAgICAgfQogICAgICAgICBpZiAodG9wQ2hpbGRPclN1YnNlbGVj
dG9yKSB7CiAgICAgICAgICAgICAvLyBDaGlsZCBvciBzdWJzZWxlY3RvciBjaGVjayBmYWlsZWQu
Ci0gICAgICAgICAgICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGlsZE9y
U3Vic2VsZWN0b3Igd2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFkIHRv
IG1hdGNoIAorICAgICAgICAgICAgLy8gSWYgdGhlIG1hdGNoIGVsZW1lbnQgaXMgbnVsbCwgdG9w
Q2hpbGRPclN1YnNlbGVjdG9yIHdhcyBhbHNvIHRoZSB2ZXJ5IHRvcG1vc3Qgc2VsZWN0b3IgYW5k
IGhhZCB0byBtYXRjaAogICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGVsZW1lbnQgd2Ugd2Vy
ZSBjaGVja2luZy4KICAgICAgICAgICAgIGlmICghdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hF
bGVtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMwNCwxMiArMzA0LDEy
IEBAIGlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbmxp
bmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgQXRvbWljU3Ry
aW5nSW1wbCogdmFsdWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmKSAKK2lubGluZSBib29sIGNoZWNr
Q2xhc3NWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1
ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmhhc0NsYXNz
KCkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05h
bWVzKCkuY29udGFpbnModmFsdWUpOwogfQogCi1pbmxpbmUgYm9vbCBjaGVja0lEVmFsdWUoY29u
c3QgRWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSAKK2lubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYpCiB7CiAg
ICAgcmV0dXJuIGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRp
b24oKS5pbXBsKCkgPT0gdmFsdWU7CiB9CkBAIC0zMjMsNyArMzIzLDcgQEAgaW5saW5lIGJvb2wg
Y2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFF1
YWxpZmllZE5hbWUKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogfQogCiBpbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNo
VHlwZSB2aXNpdGVkTWF0Y2hUeXBlKSBjb25zdApAQCAtMzU4LDEyICszNTgsMTIgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgY29uc3QgRWxlbWUKICAgICBjb25zdCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0
b3JNYXRjaEVsZW1lbnQgPSAwOwogICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NT
ZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1
YlNlbGVjdG9yKQogICAgICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAg
ICAKKwogICAgIGlmIChzZWxlY3Rvci0+cmVsYXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2Vs
ZWN0b3IpCiAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAg
CisKICAgICBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCk7Ci0gICAgCisKICAgICAv
LyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2VsZWN0b3IgaGFzIGRlc2NlbmRhbnQsIGNoaWxkIGFu
ZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBvbmx5IGFuZCBhbGwgY29tcG9uZW50cyBhcmUgc2lt
cGxlLgogICAgIHdoaWxlIChzZWxlY3RvcikgewogICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5t
X21hdGNoKSB7CkBAIC00NDIsMTAgKzQ0MiwxMCBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
TWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAg
ICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCiAgICAgaWYgKCFjaGVja09uZVNlbGVj
dG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3RvciwgdmlzaXRlZE1hdGNoVHlw
ZSwgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gU2Vs
ZWN0b3JGYWlsc0xvY2FsbHk7Ci0gICAgCisKICAgICAvLyBUaGUgcmVzdCBvZiB0aGUgc2VsZWN0
b3JzIGhhcyB0byBtYXRjaAogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9IHNl
bC0+cmVsYXRpb24oKTsKLSAgICAKKwogICAgIC8vIFByZXBhcmUgbmV4dCBzZWwKICAgICBzZWwg
PSBzZWwtPnRhZ0hpc3RvcnkoKTsKICAgICBpZiAoIXNlbCkKQEAgLTQ1NSw3ICs0NTUsNyBAQCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0
b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxlCiAgICAgICAgIGlmIChtX3BzZXVk
b1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKICAg
ICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAKKwogICAgICAg
ICAvLyBEaXNhYmxlIDp2aXNpdGVkIG1hdGNoaW5nIHdoZW4gd2Ugc2VlIHRoZSBmaXJzdCBsaW5r
IG9yIHRyeSB0byBtYXRjaCBhbnl0aGluZyBlbHNlIHRoYW4gYW4gYW5jZXN0b3JzLgogICAgICAg
ICBpZiAoIWlzU3ViU2VsZWN0b3IgJiYgKGUtPmlzTGluaygpIHx8IChyZWxhdGlvbiAhPSBDU1NT
ZWxlY3Rvcjo6RGVzY2VuZGFudCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6Q2hpbGQpKSkK
ICAgICAgICAgICAgIHZpc2l0ZWRNYXRjaFR5cGUgPSBWaXNpdGVkTWF0Y2hEaXNhYmxlZDsKQEAg
LTQ3Myw3ICs0NzMsNyBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkNoaWxkOiAKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKICAgICAgICAgewog
ICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAg
ICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtNTMxLDcgKzUzMSw3IEBAIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNl
bCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIHZpc2l0ZWRNYXRjaFR5cGUpOwogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogfQog
CkBAIC01NDUsNyArNTQ1LDcgQEAgc3RhdGljIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+KiBj
cmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1NldCgpCiAgICAgLy8gVGhpcyBpcyB0
aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIGluIEhUTUwgNC4wMSB3aXRoIHZhbHVlcyBtYXJrZWQgYXMg
IltDSV0iIG9yIGNhc2UtaW5zZW5zaXRpdmUKICAgICAvLyBNb3ppbGxhIHRyZWF0cyBhbGwgb3Ro
ZXIgdmFsdWVzIGFzIGNhc2Utc2Vuc2l0aXZlLCB0aHVzIHNvIGRvIHdlLgogICAgIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+KiBhdHRyU2V0ID0gbmV3IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+OwotICAgIAorCiAgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWNjZXB0X2NoYXJz
ZXRBdHRyKTsKICAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2NlcHRBdHRyKTsKICAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhbGlnbkF0dHIpOwpAQCAtNTkxLDcgKzU5MSw3
IEBAIHN0YXRpYyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNl
bnNpdGl2ZUF0dHJpYnV0ZXNTZXQoKQogICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZh
bGlnbkF0dHIpOwogICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZhbHVldHlwZUF0dHIp
OwogICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0dHJTZXQsIHZsaW5rQXR0cik7Ci0gICAgCisKICAg
ICByZXR1cm4gYXR0clNldDsKIH0KIApAQCAtNjA3LDcgKzYwNyw3IEBAIHN0YXRpYyBib29sIGF0
dHJpYnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9y
OjpNYXRjaCBtCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZUl0ZW0t
PnZhbHVlKCk7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisKICAgICBzd2l0Y2ggKG1hdGNoKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RXhh
Y3Q6CiAgICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlID8gc2VsZWN0b3JWYWx1ZSAhPSB2YWx1ZSA6
ICFlcXVhbElnbm9yaW5nQ2FzZShzZWxlY3RvclZhbHVlLCB2YWx1ZSkpCkBAIC02MTgsNyArNjE4
LDcgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0KICAgICAgICAgICAgIC8vIElnbm9yZSBlbXB0
eSBzZWxlY3RvcnMgb3Igc2VsZWN0b3JzIGNvbnRhaW5pbmcgc3BhY2VzCiAgICAgICAgICAgICBp
ZiAoc2VsZWN0b3JWYWx1ZS5jb250YWlucygnICcpIHx8IHNlbGVjdG9yVmFsdWUuaXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKICAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3Rv
clZhbHVlLCBzdGFydFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKQEAgLTYyOSw3ICs2MjksNyBA
QCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGVJ
dGVtLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbQogICAgICAgICAgICAgICAgICAgICBpZiAoZW5kU3Ry
ID09IHZhbHVlLmxlbmd0aCgpIHx8IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gTm8gbWF0Y2guIEtlZXAg
bG9va2luZy4KICAgICAgICAgICAgICAgICBzdGFydFNlYXJjaEF0ID0gZm91bmRQb3MgKyAxOwog
ICAgICAgICAgICAgfQpAQCAtNjYxLDcgKzY2MSw3IEBAIHN0YXRpYyBib29sIGF0dHJpYnV0ZVZh
bHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpNYXRjaCBt
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTY2OSwxNCArNjY5LDE0IEBAIHN0YXRpYyBib29sIGFueUF0dHJpYnV0
ZU1hdGNoZXMoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytp
KSB7CiAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSA9IGF0dHJpYnV0ZXMtPmF0dHJp
YnV0ZUl0ZW0oaSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghU2VsZWN0b3JDaGVja2VyOjph
dHRyaWJ1dGVOYW1lTWF0Y2hlcyhhdHRyaWJ1dGVJdGVtLCBzZWxlY3RvckF0dHIpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1h
dGNoZXMoYXR0cmlidXRlSXRlbSwgbWF0Y2gsIHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC02ODUsMjYgKzY4NSwyNiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAog
ICAgIEFTU0VSVChlKTsKICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlLCBz
ZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoc2VsLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpDbGFzcykKICAgICAgICAgcmV0dXJuIGUtPmhhc0NsYXNzKCkgJiYg
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFzc05hbWVzKCkuY29udGFpbnMoc2Vs
LT52YWx1ZSgpKTsKLSAgICAKKwogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6
OklkKQogICAgICAgICByZXR1cm4gZS0+aGFzSUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpID09IHNlbC0+dmFsdWUoKTsKLSAgICAKKwogICAgIGlmIChzZWwtPmlzQXR0cmlidXRlU2Vs
ZWN0b3IoKSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyID0gc2VsLT5hdHRy
aWJ1dGUoKTsKLSAgICAgICAgCisKICAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0g
ZS0+YXR0cmlidXRlcyh0cnVlKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUg
PSAhbV9kb2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZh
bHVlKGF0dHIpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMo
YXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gp
LCBhdHRyLCBzZWwtPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzKSB7CiAgICAgICAgIC8vIEhhbmRsZSA6bm90IHVwIGZyb250LgogICAg
ICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb05vdCkgewpA
QCAtNzI4LDcgKzcyOCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBp
ZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZl
KQogICAgICAgICAgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS0+aXNBY3RpdmUoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBO
b3JtYWwgZWxlbWVudCBwc2V1ZG8gY2xhc3MgY2hlY2tpbmcuCiAgICAgICAgIHN3aXRjaCAoc2Vs
LT5wc2V1ZG9UeXBlKCkpIHsKICAgICAgICAgICAgIC8vIFBzZXVkbyBjbGFzc2VzOgpAQCAtODQ4
LDcgKzg0OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBpZiAoRWxl
bWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAg
ICAgIGJvb2wgZmlyc3RDaGlsZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgbGFzdENo
aWxkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBOb2RlKiBu
ID0gZS0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG4gJiYgIW4t
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2li
bGluZygpOwpAQCAtOTMwLDcgKzkzMCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2li
bGluZygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAg
ICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50U3R5bGUg
OiBlLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwpAQCAtOTM5LDcgKzkzOSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVk
b0lkJiBkCiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9z
aXRpb25hbFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTk1NiwxMyArOTU2LDEzIEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwog
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBlbGVtZW50U3R5bGUgPyBlbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0Q2hpbGRyZW5BZmZlY3Rl
ZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChzZWwtPm1hdGNoTnRoKGNvdW50KSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xMDU5LDcg
KzEwNTksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFu
Y2hvcnMgd2l0aCBubwotICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5v
dCBtYXRjaCBhbnl0aGluZy4gCisgICAgICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91
bGQgbm90IG1hdGNoIGFueXRoaW5nLgogICAgICAgICAgICAgaWYgKG1fc3RyaWN0UGFyc2luZyB8
fCBpc1N1YlNlbGVjdG9yIHx8IChzZWwtPmhhc1RhZygpICYmICFlLT5oYXNUYWdOYW1lKGFUYWcp
KSB8fCBlLT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCiAg
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVz
KHRydWUpOwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAg
ICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNv
bnRyb2woKSAmJiBlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsKLSAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvUmVhZFdyaXRlOiAKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvUmVhZFdyaXRlOgogICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVy
biBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmICFlLT5pc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsK
QEAgLTExNTMsOSArMTE1Myw5IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAg
ICB9CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9GdWxsU2NyZWVuOgotICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBp
biB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgYW5kIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgZnVsbHNj
cmVlbiAKLSAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUgZG9jdW1l
bnQsIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8gCi0gICAgICAgICAg
ICAvLyB0aGF0IGVsZW1lbnQuIEFsc28sIGFuIDxpZnJhbWU+LCA8b2JqZWN0PiBvciA8ZW1iZWQ+
IGVsZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3NpbmcgCisgICAgICAgICAgICAvLyBXaGlsZSBhIERv
Y3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCBhbmQgdGhlIGRvY3VtZW50J3MgY3Vy
cmVudCBmdWxsc2NyZWVuCisgICAgICAgICAgICAvLyBlbGVtZW50IGlzIGFuIGVsZW1lbnQgaW4g
dGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFzcyBhcHBsaWVzIHRvCisg
ICAgICAgICAgICAvLyB0aGF0IGVsZW1lbnQuIEFsc28sIGFuIDxpZnJhbWU+LCA8b2JqZWN0PiBv
ciA8ZW1iZWQ+IGVsZW1lbnQgd2hvc2UgY2hpbGQgYnJvd3NpbmcKICAgICAgICAgICAgIC8vIGNv
bnRleHQncyBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSBoYXMgdGhlICdmdWxs
LXNjcmVlbicgcHNldWRvY2xhc3MgYXBwbGllZC4KICAgICAgICAgICAgIGlmIChlLT5pc0ZyYW1l
RWxlbWVudEJhc2UoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGUpLT5j
b250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMTY5LDcgKzExNjksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuQW5jZXN0b3I6CiAgICAgICAgICAgICBy
ZXR1cm4gZS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuRG9jdW1lbnQ6Ci0gICAgICAgICAgICAvLyBXaGlsZSBh
IERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwtc2NyZWVuLWRv
Y3VtZW50JyBwc2V1ZG9jbGFzcyBhcHBsaWVzIAorICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1
bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgdGhlICdmdWxsLXNjcmVlbi1kb2N1bWVu
dCcgcHNldWRvY2xhc3MgYXBwbGllcwogICAgICAgICAgICAgLy8gdG8gYWxsIGVsZW1lbnRzIG9m
IHRoYXQgRG9jdW1lbnQuCiAgICAgICAgICAgICBpZiAoIWUtPmRvY3VtZW50KCktPndlYmtpdElz
RnVsbFNjcmVlbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTExOTYsMTIg
KzExOTYsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICBpZiAoc2VsLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIGlmICghZWxlbWVudFN0
eWxlICYmICFtX2lzQ29sbGVjdGluZ1J1bGVzT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRvRWxlbWVudCgp
KSB7CiAgICAgICAgICAgICBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IHRydWU7CiAgICAg
ICAgICAgICByZXR1cm4gZS0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWwtPnZhbHVlKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rv
cjo6cHNldWRvSWQoc2VsLT5wc2V1ZG9UeXBlKCkpOwogICAgICAgICBpZiAocHNldWRvSWQgPT0g
RklSU1RfTEVUVEVSKSB7CiAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+
ZG9jdW1lbnQoKSkKQEAgLTEyMTgsMTUgKzEyMTgsMTUgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBj
b24KIHsKICAgICBSZW5kZXJTY3JvbGxiYXIqIHNjcm9sbGJhciA9IFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCk7CiAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gUmVu
ZGVyU2Nyb2xsYmFyOjpwYXJ0Rm9yU3R5bGVSZXNvbHZlKCk7Ci0gICAgCisKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIGZvciByZXNpemVycyBhbmQgc2Nyb2xsYmFyIGNv
cm5lcnMuIEV2ZW50dWFsbHkgOndpbmRvdy1pbmFjdGl2ZSBzaG91bGQgYmVjb21lIGEgcmVhbAog
ICAgIC8vIHBzZXVkbyBjbGFzcyBhbmQganVzdCBhcHBseSB0byBldmVyeXRoaW5nLgogICAgIGlm
IChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUp
CiAgICAgICAgIHJldHVybiAhbV9kb2N1bWVudC0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+
aXNBY3RpdmUoKTsKLSAgICAKKwogICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKICAgICBBU1NFUlQoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzcyk7CiAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgewogICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6CkBAIC0xMjYzLDcgKzEyNjMsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2Vs
LCBQc2V1ZG9JZCYpIGNvbgogICAgICAgICByZXR1cm4gcGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQ
YXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFj
a1BhcnQ7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5kOgogICAgICAgICByZXR1cm4g
cGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0
IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9Eb3VibGVCdXR0b246IAorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRv
bjoKICAgICAgICAgewogICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0
b25zUGxhY2VtZW50ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7CiAg
ICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9y
d2FyZEJ1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQpCkBAIC0xMjcxLDcg
KzEyNzEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbgogICAgICAgICAgICAgaWYgKHBhcnQg
PT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBw
YXJ0ID09IEZvcndhcmRUcmFja1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQ
bGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50
ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9IAorICAgICAgICB9CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU2lu
Z2xlQnV0dG9uOgogICAgICAgICB7CiAgICAgICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2Vt
ZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1l
bnQoKTsKQEAgLTEzMzYsNyArMTMzNiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjb21tb25Q
c2V1ZG9DbGFzc1NlbGVjdG9yTWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjCiB1bnNp
Z25lZCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUgPSBNYXRjaEFs
bDsKLSAgICAKKwogICAgIC8vIFN0YXRpY2FsbHkgZGV0ZXJtaW5lIGlmIHRoaXMgc2VsZWN0b3Ig
d2lsbCBtYXRjaCBhIGxpbmsgaW4gdmlzaXRlZCwgdW52aXNpdGVkIG9yIGFueSBzdGF0ZSwgb3Ig
bmV2ZXIuCiAgICAgLy8gOnZpc2l0ZWQgbmV2ZXIgbWF0Y2hlcyBvdGhlciBlbGVtZW50cyB0aGFu
IHRoZSBpbm5lcm1vc3QgbGluayBlbGVtZW50LgogICAgIGZvciAoOyBzZWxlY3Rvcjsgc2VsZWN0
b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKaW5kZXggZjU5Yjc0YS4uNzYwYmE1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaApAQCAtNjcsMTAgKzY3LDEwIEBAIHB1YmxpYzoKICAgICBFSW5zaWRlTGluayBkZXRl
cm1pbmVMaW5rU3RhdGUoRWxlbWVudCopIGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRl
Q2hhbmdlZCgpOwogICAgIHZvaWQgdmlzaXRlZFN0YXRlQ2hhbmdlZChMaW5rSGFzaCB2aXNpdGVk
SGFzaCk7Ci0gICAgCisKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X2RvY3VtZW50OyB9CiAgICAgYm9vbCBzdHJpY3RQYXJzaW5nKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJpY3RQYXJzaW5nOyB9Ci0gICAgCisKICAgICBib29sIGlzQ29sbGVjdGluZ1J1bGVzT25seSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5OyB9CiAgICAgdm9pZCBzZXRD
b2xsZWN0aW5nUnVsZXNPbmx5KGJvb2wgYikgeyBtX2lzQ29sbGVjdGluZ1J1bGVzT25seSA9IGI7
IH0KIApAQCAtNzksMTQgKzc5LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHM7
IH0KICAgICB2b2lkIGNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkgeyBtX2hhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cyA9IGZhbHNlOyB9Ci0gICAgCisKICAgICBzdGF0aWMgYm9vbCB0YWdN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0YXRpYyBi
b29sIGF0dHJpYnV0ZU5hbWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICBzdGF0aWMgYm9vbCBpc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29u
c3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29sIG1hdGNoZXNGb2N1c1BzZXVkb0NsYXNzKGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2tSaWdodG1vc3RBdHRy
aWJ1dGVTZWxlY3Rvcihjb25zdCBFbGVtZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBz
dGF0aWMgYm9vbCBjaGVja0V4YWN0QXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBzZWxlY3RvckF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZ0ltcGwq
IHZhbHVlKTsKLSAgICAKKwogICAgIGVudW0gTGlua01hdGNoTWFzayB7IE1hdGNoTGluayA9IDEs
IE1hdGNoVmlzaXRlZCA9IDIsIE1hdGNoQWxsID0gTWF0Y2hMaW5rIHwgTWF0Y2hWaXNpdGVkIH07
CiAgICAgc3RhdGljIHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2Vs
ZWN0b3IqKTsKIApAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tPbmVT
ZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywg
Ym9vbCBpc1N1YlNlbGVjdG9yLCBWaXNpdGVkTWF0Y2hUeXBlLCBSZW5kZXJTdHlsZSosIFJlbmRl
clN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxi
YXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25z
dDsKICAgICBzdGF0aWMgYm9vbCBpc0ZyYW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7Ci0gICAg
CisKICAgICBib29sIGZhc3RDaGVja1JpZ2h0bW9zdFNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
KiwgY29uc3QgRWxlbWVudCosIFZpc2l0ZWRNYXRjaFR5cGUpIGNvbnN0OwogICAgIGJvb2wgY29t
bW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMoY29uc3QgRWxlbWVudCosIGNvbnN0IENTU1Nl
bGVjdG9yKiwgVmlzaXRlZE1hdGNoVHlwZSkgY29uc3Q7CiAKQEAgLTEzMCw3ICsxMzAsNyBAQCBp
bmxpbmUgRUluc2lkZUxpbmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGUoRWxl
bWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIE5vdEluc2lkZUxpbms7CiAgICAg
cmV0dXJuIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKGVsZW1lbnQpOwogfQotICAgIAorCiB0
ZW1wbGF0ZSA8dW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudD4KIGlubGluZSBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlm
aWVySGFzaGVzKSBjb25zdAogewpAQCAtMTQxLDcgKzE0MSw3IEBAIGlubGluZSBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVy
SGFzaGVzCiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKKwogaW5saW5lIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjppc0NvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3IoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCAhPSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCkBAIC0xNTksNyArMTU5LDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjptYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KiBlbGVtZW50
KSBjb24KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGVsZW1lbnQtPmZvY3VzZWQo
KSAmJiBpc0ZyYW1lRm9jdXNlZChlbGVtZW50KTsKIH0KLSAgICAKKwogaW5saW5lIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBpZiAoIXNlbGVjdG9yLT5oYXNUYWcoKSkKQEAg
LTE3MCwxNCArMTcwLDE0IEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hl
cyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3RvCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7
CiAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0g
ZWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7CiB9Ci0gICAgCisKIGlubGluZSBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6YXR0cmlidXRlTmFtZU1hdGNoZXMoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9yQXR0cmlidXRlTmFtZSkKIHsKICAgICBpZiAo
c2VsZWN0b3JBdHRyaWJ1dGVOYW1lLmxvY2FsTmFtZSgpICE9IGF0dHJpYnV0ZS0+bG9jYWxOYW1l
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc2VsZWN0b3JBdHRyaWJ1dGVO
YW1lLnByZWZpeCgpID09IHN0YXJBdG9tIHx8IHNlbGVjdG9yQXR0cmlidXRlTmFtZS5uYW1lc3Bh
Y2VVUkkoKSA9PSBhdHRyaWJ1dGUtPm5hbWVzcGFjZVVSSSgpOwogfQotICAgIAorCiBpbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrRXhhY3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLCBjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSkKIHsKICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZU1hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOwpAQCAtMTkxLDcgKzE5MSw3IEBAIGlubGlu
ZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRCiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKKwog
aW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tSaWdodG1vc3RBdHRyaWJ1dGVT
ZWxlY3Rvcihjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0
b3IpCiB7CiAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCB8
fCBzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6U2V0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVC
YXNlLmNwcAppbmRleCBhN2I1MzZiLi5hNDJkN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmNw
cApAQCAtNzIsNyArNzIsNyBAQCBLVVJMIFN0eWxlQmFzZTo6YmFzZVVSTCgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBzaGVldC0+ZmluYWxVUkwoKTsKICAgICBpZiAoc2hlZXQtPnBhcmVudCgpKQog
ICAgICAgICByZXR1cm4gc2hlZXQtPnBhcmVudCgpLT5iYXNlVVJMKCk7Ci0gICAgaWYgKCFzaGVl
dC0+b3duZXJOb2RlKCkpIAorICAgIGlmICghc2hlZXQtPm93bmVyTm9kZSgpKQogICAgICAgICBy
ZXR1cm4gS1VSTCgpOwogICAgIHJldHVybiBzaGVldC0+b3duZXJOb2RlKCktPmRvY3VtZW50KCkt
PmJhc2VVUkwoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAppbmRleCBlMGZmNDQwLi45
MGI1NzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVN
ZWRpYS5oCmluZGV4IDM5OGEwYjEuLjIzOWMzOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZU1lZGlhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuaApA
QCAtMjEsNyArMjEsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFN0eWxlTWVk
aWFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKaW5kZXggMmM5MDI1OC4uYmJl
ZmQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCkBAIC02NSw3ICs2NSw3
IEBAIEhUTUxTdHlsZUVsZW1lbnQqIFN0eWxlU2hlZXRMaXN0OjpnZXROYW1lZEl0ZW0oY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdAogICAgIC8vICMjIyBCYWQgaW1wbGVtZW50YXRpb24gYmVjYXVz
ZSByZXR1cm5zIGEgc2luZ2xlIGVsZW1lbnQgKGFyZSBJRHMgYWx3YXlzIHVuaXF1ZT8pCiAgICAg
Ly8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUuCiAgICAgLy8gQnV0IHVuaWNp
dHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKLSAgICAKKwog
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5SWQobmFtZSk7CiAgICAg
aWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShzdHlsZVRhZykpCiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0TGlzdC5oCmluZGV4IGEwMTk2OTEuLjRlYjdkNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0TGlzdC5oCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2RvYzsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgU3R5bGVTaGVl
dExpc3QoRG9jdW1lbnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU0ZpbHRlclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJW
YWx1ZS5jcHAKaW5kZXggYmYxYzk1Ni4uMjUwNTgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTg0LDcgKzg0LDcgQEAgU3RyaW5nIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpjc3NUZXh0KCkgY29uc3QKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVzdWx0ICsgQ1NTVmFsdWVMaXN0
Ojpjc3NUZXh0KCkgKyAiKSI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRl
clZhbHVlLmgKaW5kZXggOGQ2ZWU4Mi4uZDRkMDhlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU0ZpbHRlclZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2lmbmRlZiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZV9oCkBAIC02MCw5ICs2MCw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpOwogCiAgICAgdmlydHVh
bCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotIAorCiAgICAgRmlsdGVyT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgCisKIHByaXZhdGU6
CiAgICAgV2ViS2l0Q1NTRmlsdGVyVmFsdWUoRmlsdGVyT3BlcmF0aW9uVHlwZSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAKaW5kZXggOGYzZDY3Ni4u
Y2Q2ZmQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
UnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5j
cHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpAQCAtNzAsMTEgKzcwLDExIEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpw
YXJzZUtleVN0cmluZyhjb25zdCBTdHJpbmcmIHMsIFZlY3RvcjxmbG9hdD4mIGtleXMpCiAgICAg
a2V5cy5jbGVhcigpOwogICAgIFZlY3RvcjxTdHJpbmc+IHN0cmluZ3M7CiAgICAgcy5zcGxpdCgn
LCcsIHN0cmluZ3MpOwotICAgIAorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmdz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGZsb2F0IGtleSA9IC0xOwogICAgICAgICBTdHJpbmcg
Y3VyID0gc3RyaW5nc1tpXS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAKKwogICAgICAgICAvLyBG
b3Igbm93IHRoZSBzeW50YXggTVVTVCBiZSAneHh4JScgb3IgJ2Zyb20nIG9yICd0bycsIHdoZXJl
IHh4eCBpcyBhIGxlZ2FsIGZsb2F0aW5nIHBvaW50IG51bWJlcgogICAgICAgICBpZiAoY3VyID09
ICJmcm9tIikKICAgICAgICAgICAgIGtleSA9IDA7CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlOjpwYXJzZUtleVN0cmluZyhjb25zdCBTdHJpbmcmIHMsIFZlY3Rv
cjxmbG9hdD4mIGtleXMpCiAgICAgICAgICAgICBpZiAoayA+PSAwICYmIGsgPD0gMTAwKQogICAg
ICAgICAgICAgICAgIGtleSA9IGsvMTAwOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IGlmIChrZXkgPCAwKSB7CiAgICAgICAgICAgICBrZXlzLmNsZWFyKCk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKaW5kZXgg
YmRiZWE2MS4uZWZjYWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVm
IFdlYktpdENTU0tleWZyYW1lUnVsZV9oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyBrZXlUZXh0KCkgY29uc3QgICAgICAgICAgICAgIHsgcmV0dXJuIG1fa2V5OyB9CiAg
ICAgdm9pZCBzZXRLZXlUZXh0KGNvbnN0IFN0cmluZyYgcykgICAgeyBtX2tleSA9IHM7IH0KLSAg
ICAKKwogICAgIHZvaWQgZ2V0S2V5cyhWZWN0b3I8ZmxvYXQ+JiBrZXlzKSBjb25zdCAgIHsgcGFy
c2VLZXlTdHJpbmcobV9rZXksIGtleXMpOyB9CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CkBAIC02MCwxOSAr
NjAsMTkgQEAgcHVibGljOgogCiAgICAgLy8gTm90IHBhcnQgb2YgdGhlIENTU09NCiAgICAgdmly
dHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYsIGJvb2wgPSBmYWxzZSk7Ci0gICAg
CisKICAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+KTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgICAgICAgIGRl
Y2xhcmF0aW9uKCkgICAgICAgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogICAgIGNvbnN0IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgIGRlY2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZS5nZXQoKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0tl
eWZyYW1lUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAvLyBJbmhlcml0ZWQgZnJv
bSBDU1NSdWxlCiAgICAgdmlydHVhbCBDU1NSdWxlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
V0VCS0lUX0tFWUZSQU1FX1JVTEU7IH0KIAogICAgIHN0YXRpYyB2b2lkIHBhcnNlS2V5U3RyaW5n
KGNvbnN0IFN0cmluZyYgcywgVmVjdG9yPGZsb2F0PiYga2V5cyk7Ci0gICAgCisKICAgICBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KTsKIAogICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAppbmRleCBiN2IzNzNjLi5lMTcxYjBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCkBAIC0yMCw3
ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAg
LTU4LDcgKzU4LDcgQEAgU3RyaW5nIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Om5hbWUoKSBjb25z
dAogdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKICAgICBtX25hbWUgPSBuYW1lOwotICAgIAorCiAgICAgLy8gU2luY2UgdGhlIG5hbWUg
aXMgdXNlZCBpbiB0aGUga2V5ZnJhbWUgbWFwIGxpc3QgaW4gQ1NTU3R5bGVTZWxlY3Rvciwgd2Ug
bmVlZAogICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgc3R5bGUgc2hlZXQgdG8gZ2V0IHRoZSB1cGRh
dGVkIG5hbWUuCiAgICAgaWYgKHN0eWxlc2hlZXQoKSkKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjphcHBlbmQoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBydWxl
KQogCiAgICAgbV9sc3RDU1NSdWxlcy0+YXBwZW5kKHJ1bGUpOwogICAgIHJ1bGUtPnNldFBhcmVu
dCh0aGlzKTsKLSAgICAKKwogICAgIGlmIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBydWxlLT5zdHlsZSgpKQogICAgICAgICBzdHlsZS0+c2V0UGFyZW50KHRoaXMpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKaW5kZXggMGY1Yjdh
Yy4uZTg3Y2FkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lc1J1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZV9oCkBAIC01MywxMiArNTMsMTIgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgCisKICAgICAvLyBUaGlzIHZlcnNpb24gb2Ygc2V0TmFtZSBkb2VzIG5vdCBjYWxsIHN0eWxl
U2hlZXRDaGFuZ2VkIHRvIGF2b2lkCiAgICAgLy8gdW5uZWNlc3Nhcnkgd29yay4gSXQgYXNzdW1l
cyBjYWxsZXJzIHdpbGwgZWl0aGVyIG1ha2UgdGhhdCBjYWxsCiAgICAgLy8gdGhlbXNlbHZlcywg
b3Iga25vdyB0aGF0IGl0IHdpbGwgZ2V0IGNhbGxlZCBsYXRlci4KICAgICB2b2lkIHNldE5hbWVJ
bnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUpCi0gICAgeyAgIAorICAgIHsKICAgICAgICAgbV9u
YW1lID0gQXRvbWljU3RyaW5nKG5hbWUpOwogICAgIH0KIApAQCAtODQsNyArODQsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgQ1NTUnVsZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFdFQktJ
VF9LRVlGUkFNRVNfUlVMRTsgfQogCiAgICAgaW50IGZpbmRSdWxlSW5kZXgoY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0OwotICAgIAorCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1
bGVzOwogICAgIEF0b21pY1N0cmluZyBtX25hbWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcAppbmRleCAyNmZlMjg2Li5mNjE3MTllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTTWF0cml4LmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC00MSw3ICs0MSw3IEBAIFdlYktpdENTU01hdHJp
eDo6V2ViS2l0Q1NTTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewogfQog
Ci1XZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBTdHJpbmcmIHMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSAKK1dlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KGNvbnN0IFN0
cmluZyYgcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgc2V0TWF0cml4VmFsdWUocywgZWMp
OwogfQpAQCAtNTQsNyArNTQsNyBAQCB2b2lkIFdlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFs
dWUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVEZWNsYXJhdGlvbiA9IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBpZiAoQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKHN0eWxlRGVjbGFyYXRpb24uZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCBz
dHJpbmcsIHRydWUsIHRydWUpKSB7Ci0gICAgICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3Bl
cmF0aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5IAorICAgICAgICAvLyBDb252ZXJ0
IHRvIFRyYW5zZm9ybU9wZXJhdGlvbnMuIFRoaXMgY2FuIGZhaWwgaWYgYSBwcm9wZXJ0eQogICAg
ICAgICAvLyByZXF1aXJlcyBzdHlsZSAoaS5lLiwgcGFyYW0gdXNlcyAnZW1zJyBvciAnZXhzJykK
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogCkBAIC02Nyw3ICs2
Nyw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcm
IHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8g
Q29udmVydCB0cmFuc2Zvcm0gb3BlcmF0aW9ucyB0byBhIFRyYW5zZm9ybWF0aW9uTWF0cml4LiBU
aGlzIGNhbiBmYWlsCiAgICAgICAgIC8vIGlmIGEgcGFyYW0gaGFzIGEgcGVyY2VudGFnZSAoJyUn
KQogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OwpAQCAtNzcsNyArNzcsNyBAQCB2b2lk
IFdlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBzZXQgdGhlIG1hdHJpeAogICAgICAg
ICBtX21hdHJpeCA9IHQ7CiAgICAgfSBlbHNlIGlmICghc3RyaW5nLmlzRW1wdHkoKSkgLy8gVGhl
cmUgaXMgc29tZXRoaW5nIHRoZXJlIGJ1dCBwYXJzaW5nIGZhaWxlZApAQCAtOTksNyArOTksNyBA
QCBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gV2ViS2l0Q1NTTWF0cml4OjppbnZlcnNlKEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gV2ViS2l0Q1NTTWF0
cml4OjpjcmVhdGUobV9tYXRyaXguaW52ZXJzZSgpKTsKIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBA
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBXZWJLaXRDU1NNYXRyaXg6OnJvdGF0ZShkb3Vi
bGUgcm90WCwgZG91YmxlIHJvdFksIGRvCiB7CiAgICAgaWYgKGlzbmFuKHJvdFgpKQogICAgICAg
ICByb3RYID0gMDsKLSAgICAgICAgCisKICAgICBpZiAoaXNuYW4ocm90WSkgJiYgaXNuYW4ocm90
WikpIHsKICAgICAgICAgcm90WiA9IHJvdFg7CiAgICAgICAgIHJvdFggPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU01hdHJpeC5oCmluZGV4IDEwN2JmOGIuLjRhNjczMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBXZWJLaXRDU1NNYXRyaXhfaApAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYktpdENTU01hdHJpeChz
LCBlYykpOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgfldlYktpdENTU01hdHJpeCgpOwog
CiAgICAgZG91YmxlIGEoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5hKCk7IH0KQEAgLTUyLDE0
ICs1MiwxNCBAQCBwdWJsaWM6CiAgICAgZG91YmxlIGQoKSBjb25zdCB7IHJldHVybiBtX21hdHJp
eC5kKCk7IH0KICAgICBkb3VibGUgZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4LmUoKTsgfQog
ICAgIGRvdWJsZSBmKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXguZigpOyB9Ci0gICAgCisKICAg
ICB2b2lkIHNldEEoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0QShmKTsgfQogICAgIHZvaWQgc2V0
Qihkb3VibGUgZikgeyBtX21hdHJpeC5zZXRCKGYpOyB9CiAgICAgdm9pZCBzZXRDKGRvdWJsZSBm
KSB7IG1fbWF0cml4LnNldEMoZik7IH0KICAgICB2b2lkIHNldEQoZG91YmxlIGYpIHsgbV9tYXRy
aXguc2V0RChmKTsgfQogICAgIHZvaWQgc2V0RShkb3VibGUgZikgeyBtX21hdHJpeC5zZXRFKGYp
OyB9CiAgICAgdm9pZCBzZXRGKGRvdWJsZSBmKSB7IG1fbWF0cml4LnNldEYoZik7IH0KLSAKKwog
ICAgIGRvdWJsZSBtMTEoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMTEoKTsgfQogICAgIGRv
dWJsZSBtMTIoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMTIoKTsgfQogICAgIGRvdWJsZSBt
MTMoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMTMoKTsgfQpAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgZG91YmxlIG00MigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm00MigpOyB9
CiAgICAgZG91YmxlIG00MygpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm00MygpOyB9CiAgICAg
ZG91YmxlIG00NCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm00NCgpOyB9Ci0gICAgCisKICAg
ICB2b2lkIHNldE0xMShkb3VibGUgZikgeyBtX21hdHJpeC5zZXRNMTEoZik7IH0KICAgICB2b2lk
IHNldE0xMihkb3VibGUgZikgeyBtX21hdHJpeC5zZXRNMTIoZik7IH0KICAgICB2b2lkIHNldE0x
Myhkb3VibGUgZikgeyBtX21hdHJpeC5zZXRNMTMoZik7IH0KQEAgLTkzLDI2ICs5MywyNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRNNDIoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0TTQyKGYpOyB9
CiAgICAgdm9pZCBzZXRNNDMoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0TTQzKGYpOyB9CiAgICAg
dm9pZCBzZXRNNDQoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0TTQ0KGYpOyB9Ci0gCisKICAgICB2
b2lkIHNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAK
LSAgICAvLyBUaGUgZm9sbG93aW5nIG1hdGggZnVuY3Rpb24gcmV0dXJuIGEgbmV3IG1hdHJpeCB3
aXRoIHRoZSAKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgbWF0aCBmdW5jdGlvbiByZXR1cm4gYSBu
ZXcgbWF0cml4IHdpdGggdGhlCiAgICAgLy8gc3BlY2lmaWVkIG9wZXJhdGlvbiBhcHBsaWVkLiBU
aGUgdGhpcyB2YWx1ZSBpcyBub3QgbW9kaWZpZWQuCi0gICAgCisKICAgICAvLyBNdWx0aXBseSB0
aGlzIG1hdHJpeCBieSBzZWNvbmRNYXRyaXgsIG9uIHRoZSByaWdodCAocmVzdWx0ID0gdGhpcyAq
IHNlY29uZE1hdHJpeCkKICAgICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gbXVsdGlwbHko
V2ViS2l0Q1NTTWF0cml4KiBzZWNvbmRNYXRyaXgpIGNvbnN0OwotICAgIAorCiAgICAgLy8gUmV0
dXJuIHRoZSBpbnZlcnNlIG9mIHRoaXMgbWF0cml4LiBUaHJvdyBhbiBleGNlcHRpb24gaWYgdGhl
IG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZQogICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4
PiBpbnZlcnNlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICAKKwogICAgIC8vIFJldHVybiB0
aGlzIG1hdHJpeCB0cmFuc2xhdGVkIGJ5IHRoZSBwYXNzZWQgdmFsdWVzLgogICAgIC8vIFBhc3Np
bmcgYSBOYU4gd2lsbCB1c2UgYSB2YWx1ZSBvZiAwLiBUaGlzIGFsbG93cyB0aGUgM0QgZm9ybSB0
byB1c2VkIGZvciAyRCBvcGVyYXRpb25zCiAgICAgLy8gT3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBh
cyB0aG91Z2ggdGhlIHRoaXMgbWF0cml4IGlzIG11bHRpcGxpZWQgYnkgYSBtYXRyaXggd2l0aAog
ICAgIC8vIHRoZSB0cmFuc2xhdGlvbiB2YWx1ZXMgb24gdGhlIGxlZnQgKHJlc3VsdCA9IHRyYW5z
bGF0aW9uKHgseSx6KSAqIHRoaXMpCiAgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IHRy
YW5zbGF0ZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KSBjb25zdDsKLSAgICAKKwogICAg
IC8vIFJldHVybnMgdGhpcyBtYXRyaXggc2NhbGVkIGJ5IHRoZSBwYXNzZWQgdmFsdWVzLgotICAg
IC8vIFBhc3Npbmcgc2NhbGVYIG9yIHNjYWxlWiBhcyBOYU4gdXNlcyBhIHZhbHVlIG9mIDEsIGJ1
dCBwYXNzaW5nIHNjYWxlWSBvZiBOYU4gCisgICAgLy8gUGFzc2luZyBzY2FsZVggb3Igc2NhbGVa
IGFzIE5hTiB1c2VzIGEgdmFsdWUgb2YgMSwgYnV0IHBhc3Npbmcgc2NhbGVZIG9mIE5hTgogICAg
IC8vIG1ha2VzIGl0IHRoZSBzYW1lIGFzIHNjYWxlWC4gVGhpcyBhbGxvd3MgdGhlIDNEIGZvcm0g
dG8gdXNlZCBmb3IgMkQgb3BlcmF0aW9ucwogICAgIC8vIE9wZXJhdGlvbiBpcyBwZXJmb3JtZWQg
YXMgdGhvdWdoIHRoZSB0aGlzIG1hdHJpeCBpcyBtdWx0aXBsaWVkIGJ5IGEgbWF0cml4IHdpdGgK
ICAgICAvLyB0aGUgc2NhbGUgdmFsdWVzIG9uIHRoZSBsZWZ0IChyZXN1bHQgPSBzY2FsZSh4LHks
eikgKiB0aGlzKQpAQCAtMTIwLDE3ICsxMjAsMTcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJu
cyB0aGlzIG1hdHJpeCByb3RhdGVkIGJ5IHRoZSBwYXNzZWQgdmFsdWVzLgogICAgIC8vIElmIHJv
dFkgYW5kIHJvdFogYXJlIE5hTiwgcm90YXRlIGFib3V0IFogKHJvdFg9MCwgcm90YXRlWT0wLCBy
b3RhdGVaPXJvdFgpLgotICAgIC8vIE90aGVyd2lzZSB1c2UgYSByb3RhdGlvbiB2YWx1ZSBvZiAw
IGZvciBhbnkgcGFzc2VkIE5hTi4gICAgCisgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHJvdGF0aW9u
IHZhbHVlIG9mIDAgZm9yIGFueSBwYXNzZWQgTmFOLgogICAgIC8vIE9wZXJhdGlvbiBpcyBwZXJm
b3JtZWQgYXMgdGhvdWdoIHRoZSB0aGlzIG1hdHJpeCBpcyBtdWx0aXBsaWVkIGJ5IGEgbWF0cml4
IHdpdGgKICAgICAvLyB0aGUgcm90YXRpb24gdmFsdWVzIG9uIHRoZSBsZWZ0IChyZXN1bHQgPSBy
b3RhdGlvbih4LHkseikgKiB0aGlzKQogICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBy
b3RhdGUoZG91YmxlIHJvdFgsIGRvdWJsZSByb3RZLCBkb3VibGUgcm90WikgY29uc3Q7Ci0gICAg
CisKICAgICAvLyBSZXR1cm5zIHRoaXMgbWF0cml4IHJvdGF0ZWQgYWJvdXQgdGhlIHBhc3NlZCBh
eGlzIGJ5IHRoZSBwYXNzZWQgYW5nbGUuCiAgICAgLy8gUGFzc2luZyBhIE5hTiB3aWxsIHVzZSBh
IHZhbHVlIG9mIDAuIElmIHRoZSBheGlzIGlzICgwLDAsMCkgdXNlIGEgdmFsdWUKICAgICAvLyBP
cGVyYXRpb24gaXMgcGVyZm9ybWVkIGFzIHRob3VnaCB0aGUgdGhpcyBtYXRyaXggaXMgbXVsdGlw
bGllZCBieSBhIG1hdHJpeCB3aXRoCiAgICAgLy8gdGhlIHJvdGF0aW9uIHZhbHVlcyBvbiB0aGUg
bGVmdCAocmVzdWx0ID0gcm90YXRpb24oeCx5LHosYW5nbGUpICogdGhpcykKICAgICBQYXNzUmVm
UHRyPFdlYktpdENTU01hdHJpeD4gcm90YXRlQXhpc0FuZ2xlKGRvdWJsZSB4LCBkb3VibGUgeSwg
ZG91YmxlIHosIGRvdWJsZSBhbmdsZSkgY29uc3Q7Ci0gICAgCisKICAgICAvLyBSZXR1cm4gdGhp
cyBtYXRyaXggc2tld2VkIGFsb25nIHRoZSBYIGF4aXMgYnkgdGhlIHBhc3NlZCB2YWx1ZXMuCiAg
ICAgLy8gUGFzc2luZyBhIE5hTiB3aWxsIHVzZSBhIHZhbHVlIG9mIDAuCiAgICAgLy8gT3BlcmF0
aW9uIGlzIHBlcmZvcm1lZCBhcyB0aG91Z2ggdGhlIHRoaXMgbWF0cml4IGlzIG11bHRpcGxpZWQg
YnkgYSBtYXRyaXggd2l0aApAQCAtMTQ0LDkgKzE0NCw5IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPFdlYktpdENTU01hdHJpeD4gc2tld1koZG91YmxlIGFuZ2xlKSBjb25zdDsKIAogICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeDsgfQotICAgIAorCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgCisKIHBy
b3RlY3RlZDoKICAgICBXZWJLaXRDU1NNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
KTsKICAgICBXZWJLaXRDU1NNYXRyaXgoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKaW5kZXgg
M2I0Mjg2ZS4uNzYyMDQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTExMiw5ICsxMTIsOSBAQCBTdHJpbmcgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OmNzc1RleHQoKSBjb25zdAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgcmVzdWx0ICs9IENTU1ZhbHVlTGlzdDo6
Y3NzVGV4dCgpOwotICAgIAorCiAgICAgcmVzdWx0ICs9ICIpIjsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAppbmRl
eCAwYzNjMDM4Li44NTgwOTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aWZuZGVmIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlX2gKQEAgLTY4LDkgKzY4LDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfldlYktpdENTU1RyYW5zZm9ybVZhbHVlKCk7CiAKICAgICB2aXJ0dWFs
IFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gCisKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25UeXBl
IG9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKKwogcHJpdmF0
ZToKICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111598</attachid>
            <date>2011-10-19 05:22:24 -0700</date>
            <delta_ts>2011-10-19 05:26:19 -0700</delta_ts>
            <desc>[PATCH] Multiline boolean expressions fixed where necessary to avoid style violations.</desc>
            <filename>csswhitespace.patch</filename>
            <type>text/plain</type>
            <size>236868</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGZkODQ3MWRmMWU5ZjRhOTEwNmI4NDhkOTRiMmY1NWJlMDI4OGRkMDcKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBXZWQgT2N0IDE5
IDEzOjA3OjM4IDIwMTEgKzA0MDAKCiAgICBGaXgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZlNDRhYS4uZjMw
YTUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMCBAQAorMjAxMS0xMC0xOSAgQWxleGFuZGVy
IFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHN0
cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gdGhlIGNzcy8gQysrIGNvZGUuCisKKyAgICAgICAg
T25seSBhZmZlY3RlZCBmaWxlIG5hbWVzIHJldGFpbmVkIGJlbG93IGZvciBicmV2aXR5LgorCU11
bHRpbGluZSBib29sZWFuIGV4cHJlc3Npb24gd2VyZSBmaXhlZCB3aGVyZSBuZWNlc3NhcnkgdG8g
YXZvaWQgcGF0Y2ggc3R5bGUgdmlvbGF0aW9ucy4KKworICAgICAgICAqIGNzcy9DU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgICog
Y3NzL0NTU0NhbnZhc1ZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoK
KyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAg
KiBjc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNl
LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2UuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9u
dEZhY2VTb3VyY2UuY3BwOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAg
ICAgICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAg
ICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NTRnVuY3Rpb25W
YWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaDoKKyAgICAgICAgKiBj
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgICog
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
SW1wb3J0UnVsZS5jcHA6CisgICAgICAgICogY3NzL0NTU0luaXRpYWxWYWx1ZS5jcHA6CisgICAg
ICAgICogY3NzL0NTU0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmg6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgICogY3NzL0NTU1Bh
cnNlci5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwOgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZUNhY2hlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWVD
YWNoZS5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmg6CisgICAg
ICAgICogY3NzL0NTU1Byb3BlcnR5LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHkuaDoK
KyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHlMb25naGFuZC5jcHA6CisgICAgICAgICogY3NzL0NT
U1JlZmxlY3RWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAg
ICAgICAqIGNzcy9DU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmg6CisgICAgICAgICogY3NzL0NTU1Nl
Z21lbnRlZEZvbnRGYWNlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAqIGNzcy9DU1NTZWxl
Y3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvckxpc3QuY3BwOgorICAgICAgICAqIGNz
cy9DU1NTZWxlY3Rvckxpc3QuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5
LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
OgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwOgorICAgICAgICAq
IGNzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxpc3Qu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NXcmFwU2hhcGVzLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NT
V3JhcFNoYXBlcy5oOgorICAgICAgICAqIGNzcy9Gb250VmFsdWUuY3BwOgorICAgICAgICAqIGNz
cy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNwcDoKKyAgICAgICAg
KiBjc3MvTWVkaWFRdWVyeS5oOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6
CisgICAgICAgICogY3NzL01lZGlhUXVlcnlFeHAuY3BwOgorICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXhwLmg6CisgICAgICAgICogY3NzL1BhaXIuaDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NTUGFyc2VyLmNw
cDoKKyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3Nz
L1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgor
ICAgICAgICAqIGNzcy9TdHlsZUJhc2UuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZU1lZGlhLmNw
cDoKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5oOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0
TGlzdC5jcHA6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRMaXN0Lmg6CisgICAgICAgICogY3Nz
L1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTRmlsdGVy
VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDoKKyAgICAg
ICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg6CisgICAgICAgICogY3NzL1dlYktpdENT
U0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Lmg6CisgICAgICAgICogY3NzL1dlYktpdENTU01hdHJpeC5jcHA6CisgICAgICAgICogY3NzL1dl
YktpdENTU01hdHJpeC5oOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5j
cHA6CisgICAgICAgICogY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg6CisKIDIwMTEtMTAt
MTkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIE1lZGlhTGlz
dDogUmVtb3ZlIGluaGVyaXRhbmNlIGZyb20gU3R5bGVCYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcAppbmRleCAxNWZkOTM5Li5iY2UzMGFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNw
cApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCkBAIC00NSw3ICs0NSw3IEBAIFN0cmluZyBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6
OmNzc1RleHQoKSBjb25zdAogewogICAgIC8vIER1bXAgdGhlIHNsaWNlcyBmaXJzdC4KICAgICBT
dHJpbmcgdGV4dCA9IG1fc2xpY2VzLT5jc3NUZXh0KCk7Ci0gICAgCisKICAgICAvLyBOb3cgdGhl
IGZpbGwga2V5d29yZHMgaWYgaXQgaXMgcHJlc2VudC4KICAgICBpZiAobV9maWxsKQogICAgICAg
ICB0ZXh0ICs9ICIgZmlsbCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlLmgKaW5kZXggZDc0ZWFkNy4uYzZhZGJhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggYjc3ODhmNy4uODI1
ZDBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVZhbHVlLmNwcApAQCAt
NDQsNyArNDQsNyBAQCBTdHJpbmcgQ1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0
CiB7CiAgICAgLy8gSW1hZ2UgZmlyc3QuCiAgICAgU3RyaW5nIHRleHQ7Ci0gICAgCisKICAgICBp
ZiAobV9pbWFnZSkKICAgICAgICAgdGV4dCArPSBtX2ltYWdlLT5jc3NUZXh0KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCmluZGV4IDM0NzM5NjMuLjc2ZTc3ZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5oCmluZGV4IDI3YjhmMmIuLjZmMzg5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5k
ZWYgQ1NTQ2FudmFzVmFsdWVfaApAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQqKTsKIAogICAgIEhUTUxD
YW52YXNFbGVtZW50KiBlbGVtZW50KERvY3VtZW50Kik7Ci0gICAgIAorCiAgICAgLy8gVGhlIG5h
bWUgb2YgdGhlIGNhbnZhcy4KICAgICBTdHJpbmcgbV9uYW1lOwogICAgIC8vIFRoZSBkb2N1bWVu
dCBzdXBwbGllcyB0aGUgZWxlbWVudCBhbmQgb3ducyBpdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggNzc2OGZmMy4uZDA4
NWFlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKQEAgLTM1MCw4ICszNTAsOCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VTbGljZShjb25zdCBOaQog
ICAgICAgICB0b3AgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFn
ZVNsaWNlcygpLnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSk7CiAgICAgZWxzZQogICAgICAgICB0b3AgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVW
YWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKTsKLSAgICAKLSAgICBpZiAoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgp
ID09IGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkgJiYgaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0
b20oKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpIAorCisgICAgaWYgKGltYWdlLmltYWdl
U2xpY2VzKCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpICYmIGltYWdlLmlt
YWdlU2xpY2VzKCkuYm90dG9tKCkgPT0gaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKQogICAgICAg
ICAmJiBpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRv
cCgpKSB7CiAgICAgICAgIHJpZ2h0ID0gdG9wOwogICAgICAgICBib3R0b20gPSB0b3A7CkBAIC0z
NjEsNyArMzYxLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAgICAgICAgICAgIHJpZ2h0
ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5y
aWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRl
VmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIGlmIChpbWFnZS5pbWFn
ZVNsaWNlcygpLmJvdHRvbSgpID09IGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkgJiYgaW1hZ2Uu
aW1hZ2VTbGljZXMoKS5yaWdodCgpID09IGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpKSB7CiAg
ICAgICAgICAgICBib3R0b20gPSB0b3A7CiAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CkBAIC0z
NzAsNyArMzcwLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAgICAgICAgICAgICAgICBi
b3R0b20gPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNsaWNl
cygpLmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYm90dG9tID0gcHJpbWl0aXZlVmFs
dWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpID09IGltYWdlLmltYWdlU2xpY2Vz
KCkucmlnaHQoKSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CiAgICAgICAgICAgICBl
bHNlIHsKQEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JgogICAgICAg
ICAgICAgcmlnaHQgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShib3gucmlnaHQo
KS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoYm94
LnJpZ2h0KCkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoYm94LmJvdHRvbSgpID09IGJveC50
b3AoKSAmJiBib3gucmlnaHQoKSA9PSBib3gubGVmdCgpKSB7CiAgICAgICAgICAgICBib3R0b20g
PSB0b3A7CiAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CkBAIC00MjIsNyArNDIyLDcgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VR
dWFkKGNvbnN0IExlbmd0aEJveCYKICAgICAgICAgICAgICAgICBib3R0b20gPSBwcmltaXRpdmVW
YWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJv
dHRvbSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKGJveC5ib3R0b20oKSk7Ci0g
ICAgCisKICAgICAgICAgICAgIGlmIChib3gubGVmdCgpID09IGJveC5yaWdodCgpKQogICAgICAg
ICAgICAgICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgICAgIGVsc2UgewpAQCAtNDQ3LDcgKzQ0
Nyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdl
UmVwZWF0KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpCiB7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBob3Jpem9udGFsUmVwZWF0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
dmVydGljYWxSZXBlYXQ7Ci0gICAgCisKICAgICBob3Jpem9udGFsUmVwZWF0ID0gcHJpbWl0aXZl
VmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlRm9yUmVwZWF0UnVsZShpbWFn
ZS5ob3Jpem9udGFsUnVsZSgpKSk7CiAgICAgaWYgKGltYWdlLmhvcml6b250YWxSdWxlKCkgPT0g
aW1hZ2UudmVydGljYWxSdWxlKCkpCiAgICAgICAgIHZlcnRpY2FsUmVwZWF0ID0gaG9yaXpvbnRh
bFJlcGVhdDsKQEAgLTQ2MCwxNSArNDYwLDE1IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwKIHsK
ICAgICBpZiAoIWltYWdlLmhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1
ZUNhY2hlLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAKKwogICAg
IC8vIEltYWdlIGZpcnN0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gaW1hZ2VWYWx1ZTsKICAgICBp
ZiAoaW1hZ2UuaW1hZ2UoKSkKICAgICAgICAgaW1hZ2VWYWx1ZSA9IGltYWdlLmltYWdlKCktPmNz
c1ZhbHVlKCk7Ci0gICAgCisKICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIHNsaWNlLgogICAgIFJl
ZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IGltYWdlU2xpY2VzID0gdmFsdWVGb3JOaW5l
UGllY2VJbWFnZVNsaWNlKGltYWdlLCBwcmltaXRpdmVWYWx1ZUNhY2hlKTsKLSAgICAKKwogICAg
IC8vIENyZWF0ZSB0aGUgYm9yZGVyIGFyZWEgc2xpY2VzLgogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Ym9yZGVyU2xpY2VzID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoaW1hZ2UuYm9yZGVyU2xp
Y2VzKCksIHByaW1pdGl2ZVZhbHVlQ2FjaGUpOwogCkBAIC01MDgsNyArNTA4LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yUmVmbGVjdGlvbihjb25zdCBTdHlsZVJlZmxl
Y3Rpb24qIHJlZmxlY3Rpb24KICAgICAgICAgb2Zmc2V0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCkucGVyY2VudCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UKICAgICAgICAgb2Zmc2V0ID0gem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS52YWx1ZSgpLCBzdHlsZSwgcHJp
bWl0aXZlVmFsdWVDYWNoZSk7Ci0gICAgCisKICAgICByZXR1cm4gQ1NTUmVmbGVjdFZhbHVlOjpj
cmVhdGUocmVmbGVjdGlvbi0+ZGlyZWN0aW9uKCksIG9mZnNldC5yZWxlYXNlKCksIHZhbHVlRm9y
TmluZVBpZWNlSW1hZ2UocmVmbGVjdGlvbi0+bWFzaygpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKSk7
CiB9CiAKQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGF0aWMgTGF5b3V0UmVjdCBzaXppbmdCb3goUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyLT5pc0JveCgpKQogICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIAorCiAgICAgUmVuZGVyQm94KiBib3ggPSB0
b1JlbmRlckJveChyZW5kZXJlcik7CiAgICAgcmV0dXJuIGJveC0+c3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQ09OVEVOVF9CT1ggPyBib3gtPmNvbnRlbnRCb3hSZWN0KCkgOiBib3gtPmJvcmRlckJv
eFJlY3QoKTsKIH0KQEAgLTU5Niw3ICs1OTYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gY29tcHV0ZWRUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZAog
ewogICAgIGlmICghcmVuZGVyZXIgfHwgc3R5bGUtPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAKKwogICAgIEludFJlY3QgYm94ID0gc2l6
aW5nQm94KHJlbmRlcmVyKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsK
QEAgLTY1MCwxMSArNjUwLDExIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRl
ZEZpbHRlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTCiB7CiAgICAgaWYg
KCFyZW5kZXJlciB8fCBzdHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwotICAgIAorCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKIAogICAgIFJlZlB0cjxXZWJLaXRD
U1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWU7Ci0gICAgCisKICAgICBWZWN0b3I8UmVmUHRyPEZp
bHRlck9wZXJhdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmZpbHRlcigpLm9w
ZXJhdGlvbnMoKS5lbmQoKTsKICAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5maWx0ZXIoKS5vcGVyYXRpb25zKCkuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbiogZmlsdGVy
T3BlcmF0aW9uID0gKCppdCkuZ2V0KCk7CkBAIC03MzAsNyArNzMwLDcgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkRmlsdGVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclMKICAgICAgICAgfQogICAgICAgICBsaXN0LT5hcHBlbmQoZmlsdGVyVmFsdWUp
OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KICNlbmRpZgpA
QCAtODUxLDcgKzg1MSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0Rm9udFNpemVDU1NWYWx1ZVByZWZlcnJpbmdLCiAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSA9IG1fbm9kZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRT
cGVjaWZpZXIpOwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSogcHJpbWl0aXZlVmFsdWVDYWNoZSA9IG1fbm9kZS0+
ZG9jdW1lbnQoKS0+Y3NzUHJpbWl0aXZlVmFsdWVDYWNoZSgpLmdldCgpOwogCiAgICAgaWYgKGlu
dCBrZXl3b3JkU2l6ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3JkU2l6ZSgpKQpA
QCAtMTAxNiw3ICsxMDE2LDcgQEAgc3RhdGljIHZvaWQgbG9nVW5pbXBsZW1lbnRlZFByb3BlcnR5
SUQoaW50IHByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybjsKIAogICAgIExPR19FUlJPUigiV2Vi
S2l0IGRvZXMgbm90IHlldCBpbXBsZW1lbnQgZ2V0Q29tcHV0ZWRTdHlsZSBmb3IgJyVzJy4iLCBn
ZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcGVydHlJRCkpKTsK
LX0gCit9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gZm9udEZhbWlseUZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUqIHByaW1pdGl2
ZVZhbHVlQ2FjaGUpCiB7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHBy
b3BlcgogCiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBD
U1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBwcmltaXRpdmVWYWx1ZUNhY2hlID0gbm9kZS0+ZG9jdW1l
bnQoKS0+Y3NzUHJpbWl0aXZlVmFsdWVDYWNoZSgpLmdldCgpOwogCiAgICAgcHJvcGVydHlJRCA9
IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShwcm9wZXJ0eUlELCBz
dHlsZS0+ZGlyZWN0aW9uKCksIHN0eWxlLT53cml0aW5nTW9kZSgpKTsKQEAgLTEyMDQsNyArMTIw
NCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgICAgICAgICAgRUZpbGxCb3gg
Ym94ID0gaXNDbGlwID8gbGF5ZXJzLT5jbGlwKCkgOiBsYXllcnMtPm9yaWdpbigpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShib3gpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAg
ICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5
ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgRUZp
bGxCb3ggYm94ID0gaXNDbGlwID8gY3VyckxheWVyLT5jbGlwKCkgOiBjdXJyTGF5ZXItPm9yaWdp
bigpOwpAQCAtMTI2Niw3ICsxMjY2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5ob3Jpem9u
dGFsQm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZlVmFsdWVDYWNoZSkpOwog
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnZl
cnRpY2FsQm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZlVmFsdWVDYWNoZSkp
OwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwotICAgICAgICB9ICAKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNp
bmc6CiAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+aG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIHByaW1pdGl2ZVZhbHVlQ2FjaGUp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nOgpA
QCAtMTg4Nyw3ICsxODg3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlRm9yTGVuZ3RoKHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKSwgc3R5bGUuZ2V0KCksIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUpKTsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCksIHN0
eWxlLmdldCgpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKSk7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAg
fQpAQCAtMTg5Niw3ICsxODk2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGFwSGlnaGxp
Z2h0Q29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0
eWxlLmdldCgpLCBzdHlsZS0+dGFwSGlnaGxpZ2h0Q29sb3IoKSk7Ci0jZW5kaWYgICAgICAgICAg
ICAKKyNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6CiAgICAg
ICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoc3R5bGUtPnVz
ZXJEcmFnKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAppbmRleCBkYjkyYTc1Li4y
NGVmOGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCkBA
IC0xNyw3ICsxNyw3IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwogICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovIAorICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCkBAIC0xMTYsNyArMTE2LDcgQEAgU3R5
bGVDYWNoZWRJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBTdHJpbmcgdXJsID0gZ2V0U3RyaW5nVmFsdWUo
KTsKIAotI2lmIEVOQUJMRShTVkcpIAorI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlzU1ZHQ3Vy
c29ySWRlbnRpZmllcih1cmwpICYmIGxvYWRlciAmJiBsb2FkZXItPmRvY3VtZW50KCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBmYWlsIGlmIHRoZSA8Y3Vyc29yPiBlbGVtZW50IGlz
IGluIGEgc2hhZG93IERPTSAoYnVnIDU5ODI3KQogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVu
dCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh1cmws
IGxvYWRlci0+ZG9jdW1lbnQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAppbmRleCAy
YzUwYTA0Li43YjFiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAKQEAgLTIwLDcg
KzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2UuaAppbmRleCA1NWUwNDhjLi44NTAyM2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udEZhY2UuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aWZuZGVmIENTU0ZvbnRGYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
Y3BwCmluZGV4IDk3MDE4OWEuLjVkMWIxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250RmFjZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCkBAIC0yMTUsOCArMjE1LDggQEAgU1ZHRm9udEZhY2VFbGVtZW50
KiBDU1NGb250RmFjZVNvdXJjZTo6c3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QKICAgICByZXR1
cm4gbV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCk7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTb3Vy
Y2U6OnNldFNWR0ZvbnRGYWNlRWxlbWVudChQYXNzUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4g
ZWxlbWVudCkgCi17IAordm9pZCBDU1NGb250RmFjZVNvdXJjZTo6c2V0U1ZHRm9udEZhY2VFbGVt
ZW50KFBhc3NSZWZQdHI8U1ZHRm9udEZhY2VFbGVtZW50PiBlbGVtZW50KQorewogICAgIG1fc3Zn
Rm9udEZhY2VFbGVtZW50ID0gZWxlbWVudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuaAppbmRleCA3MDNkYWViLi45OWRiNTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTb3VyY2UuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIENTU0ZvbnRGYWNlU291cmNlX2gKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0Rm9udEZhY2UoQ1NTRm9udEZhY2UqIGZhY2UpIHsgbV9mYWNlID0gZmFjZTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGZvbnRMb2FkZWQoQ2FjaGVkRm9udCopOwotICAgIAorCiAg
ICAgU2ltcGxlRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJv
b2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMsIENTU0ZvbnRTZWxlY3Rvciop
OwotICAgIAorCiAgICAgdm9pZCBwcnVuZVRhYmxlKCk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCmluZGV4IDAzZWRi
Y2IuLjViNGMzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNy
Y1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5j
cHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKaW5kZXggYTZj
OGJiOS4uYmFlZmI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U3JjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5o
CkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTRm9u
dEZhY2VTcmNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNl
bGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4
IDU2NjVmMWQuLjU4ZTIxMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3Bw
CkBAIC0yMSw3ICsyMSw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAppbmRleCA2MWJhYTlmLi5lN2Vh
MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5oCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTRm9udFNlbGVjdG9yX2gKQEAgLTUx
LDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkNTU0ZvbnRTZWxlY3RvcigpOwogCiAg
ICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSk7Ci0gICAgCisK
ICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKSB7IG1fZG9jdW1lbnQgPSAwOyB9CiAKICAgICB2b2lk
IGFkZEZvbnRGYWNlUnVsZShjb25zdCBDU1NGb250RmFjZVJ1bGUqKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGdW5jdGlvblZhbHVlLmNwcAppbmRleCA1MmEyOTUzLi5kMzNmMjA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVu
Y3Rpb25WYWx1ZS5oCmluZGV4IGJlMzgyMDYuLjBhMTg3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0Z1bmN0aW9uVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIENTU0Z1bmN0aW9uVmFsdWVfaApAQCAtNDEsMTIgKzQxLDEyIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5DU1NGdW5jdGlvblZhbHVlKCk7Ci0gICAgCisKICAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
Q1NTRnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJGdW5jdGlvbiopOwotICAgIAorCiAgICAgU3RyaW5n
IG1fbmFtZTsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBtX2FyZ3M7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IDI2NmU0ZTkuLmNkYTE0ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNTYsNyArNTYsNyBA
QCBQYXNzUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJgogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgCisKICAgICAvLyBXZSBuZWVkIHRvIGNyZWF0
ZSBhbiBpbWFnZS4KICAgICBSZWZQdHI8SW1hZ2U+IG5ld0ltYWdlID0gR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShjcmVhdGVHcmFkaWVudChyZW5kZXJlciwgc2l6ZSksIHNpemUpOwogICAgIGlmIChj
YWNoZWFibGUpCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlU3Rv
cHMoY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIGEsIGNvbnN0IENTU0dyYWRpZW50CiB7CiAg
ICAgZG91YmxlIGFWYWwgPSBhLm1fcG9zaXRpb24tPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICBkb3VibGUgYlZhbCA9IGIubV9wb3NpdGlvbi0+Z2V0
RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgIAorCiAgICAg
cmV0dXJuIGFWYWwgPCBiVmFsOwogfQogCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgQ1NTR3JhZGll
bnRWYWx1ZTo6c29ydFN0b3BzSWZOZWVkZWQoKQogfQogCiBzdGF0aWMgaW5saW5lIGludCBibGVu
ZChpbnQgZnJvbSwgaW50IHRvLCBmbG9hdCBwcm9ncmVzcykKLXsgIAorewogICAgIHJldHVybiBp
bnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwogfQogCkBAIC0xMDIsNyArMTAyLDcg
QEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgZmxvYXQgb2Zm
c2V0OwogICAgIGJvb2wgc3BlY2lmaWVkOwotICAgIAorCiAgICAgR3JhZGllbnRTdG9wKCkKICAg
ICAgICAgOiBvZmZzZXQoMCkKICAgICAgICAgLCBzcGVjaWZpZWQoZmFsc2UpCkBAIC0xMTIsNyAr
MTEyLDcgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFk
ZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0KQogewogICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIAorCiAgICAgaWYgKG1fZGVw
cmVjYXRlZFR5cGUpIHsKICAgICAgICAgc29ydFN0b3BzSWZOZWVkZWQoKTsKIApAQCAtMTI2LDcg
KzEyNiw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRp
ZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gc3RvcC5tX3Bvc2l0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkgLyAxMDA7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gc3RvcC5tX3Bvc2l0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBncmFkaWVudC0+YWRkQ29s
b3JTdG9wKG9mZnNldCwgY29sb3IpOwogICAgICAgICB9CiAKQEAgLTEzNiwxOSArMTM2LDE5IEBA
IHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgfQogCiAgICAgc2l6ZV90IG51bVN0b3BzID0g
bV9zdG9wcy5zaXplKCk7Ci0gICAgCisKICAgICBWZWN0b3I8R3JhZGllbnRTdG9wPiBzdG9wcyhu
dW1TdG9wcyk7Ci0gICAgCisKICAgICBmbG9hdCBncmFkaWVudExlbmd0aCA9IDA7CiAgICAgYm9v
bCBjb21wdXRlZEdyYWRpZW50TGVuZ3RoID0gZmFsc2U7Ci0gICAgCisKICAgICBGbG9hdFBvaW50
IGdyYWRpZW50U3RhcnQgPSBncmFkaWVudC0+cDAoKTsKICAgICBGbG9hdFBvaW50IGdyYWRpZW50
RW5kOwogICAgIGlmIChpc0xpbmVhckdyYWRpZW50KCkpCiAgICAgICAgIGdyYWRpZW50RW5kID0g
Z3JhZGllbnQtPnAxKCk7CiAgICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudCgpKQogICAgICAg
ICBncmFkaWVudEVuZCA9IGdyYWRpZW50U3RhcnQgKyBGbG9hdFNpemUoZ3JhZGllbnQtPmVuZFJh
ZGl1cygpLCAwKTsKLSAgICAgICAgCisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVN0
b3BzOyArK2kpIHsKICAgICAgICAgY29uc3QgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3AgPSBt
X3N0b3BzW2ldOwogCkBAIC0xOTEsMTQgKzE5MSwxNCBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6
OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVu
ZAogICAgICAgICAgICAgICAgIGlmIChzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLnNwZWNpZmll
ZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgaWYgKHN0b3BzW2ldLm9mZnNldCA8IHN0b3BzW3ByZXZTcGVjaWZp
ZWRJbmRleF0ub2Zmc2V0KQogICAgICAgICAgICAgICAgIHN0b3BzW2ldLm9mZnNldCA9IHN0b3Bz
W3ByZXZTcGVjaWZpZWRJbmRleF0ub2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCiAgICAgQVNT
RVJUKHN0b3BzWzBdLnNwZWNpZmllZCAmJiBzdG9wc1tudW1TdG9wcyAtIDFdLnNwZWNpZmllZCk7
Ci0gICAgCisKICAgICAvLyBJZiBhbnkgY29sb3Itc3RvcCBzdGlsbCBkb2VzIG5vdCBoYXZlIGEg
cG9zaXRpb24sIHRoZW4sIGZvciBlYWNoIHJ1biBvZiBhZGphY2VudAogICAgIC8vIGNvbG9yLXN0
b3BzIHdpdGhvdXQgcG9zaXRpb25zLCBzZXQgdGhlaXIgcG9zaXRpb25zIHNvIHRoYXQgdGhleSBh
cmUgZXZlbmx5IHNwYWNlZAogICAgIC8vIGJldHdlZW4gdGhlIHByZWNlZGluZyBhbmQgZm9sbG93
aW5nIGNvbG9yLXN0b3BzIHdpdGggcG9zaXRpb25zLgpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQg
Q1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxhc3RTcGVjaWZp
ZWRPZmZzZXQgPSBzdG9wc1t1bnNwZWNpZmllZFJ1blN0YXJ0IC0gMV0ub2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBuZXh0U3BlY2lmaWVkT2Zmc2V0ID0gc3RvcHNbdW5zcGVjaWZp
ZWRSdW5FbmRdLm9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSAobmV4
dFNwZWNpZmllZE9mZnNldCAtIGxhc3RTcGVjaWZpZWRPZmZzZXQpIC8gKHVuc3BlY2lmaWVkUnVu
RW5kIC0gdW5zcGVjaWZpZWRSdW5TdGFydCArIDEpOwotICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gdW5zcGVjaWZpZWRSdW5TdGFydDsg
aiA8IHVuc3BlY2lmaWVkUnVuRW5kOyArK2opCiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9w
c1tqXS5vZmZzZXQgPSBsYXN0U3BlY2lmaWVkT2Zmc2V0ICsgKGogLSB1bnNwZWNpZmllZFJ1blN0
YXJ0ICsgMSkgKiBkZWx0YTsKICAgICAgICAgICAgICAgICB9CkBAIC0yNDksNyArMjQ5LDcgQEAg
dm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplIGdy
YWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGllbnRFbmQpOwogICAgICAgICAgICAgICAg
ICAgICBncmFkaWVudExlbmd0aCA9IGdyYWRpZW50U2l6ZS5kaWFnb25hbExlbmd0aCgpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmICht
YXhMZW5ndGhGb3JSZXBlYXQgPiBncmFkaWVudExlbmd0aCkKICAgICAgICAgICAgICAgICAgICAg
bWF4RXh0ZW50ID0gbWF4TGVuZ3RoRm9yUmVwZWF0IC8gZ3JhZGllbnRMZW5ndGg7CiAgICAgICAg
ICAgICB9CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9w
cyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAg
ICAgICAgIGlmIChmaXJzdE9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICBmbG9hdCBjdXJy
T2Zmc2V0ID0gZmlyc3RPZmZzZXQ7CiAgICAgICAgICAgICAgICAgc2l6ZV90IHNyY1N0b3BPcmRp
bmFsID0gb3JpZ2luYWxOdW1TdG9wcyAtIDE7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBHcmFkaWVudFN0b3Ag
bmV3U3RvcCA9IHN0b3BzW29yaWdpbmFsRmlyc3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbF07
CiAgICAgICAgICAgICAgICAgICAgIG5ld1N0b3Aub2Zmc2V0ID0gY3Vyck9mZnNldDsKQEAgLTI3
Niw3ICsyNzYsNyBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBn
cmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAgICAgICAg
ICBzcmNTdG9wT3JkaW5hbCA9IChzcmNTdG9wT3JkaW5hbCArIG9yaWdpbmFsTnVtU3RvcHMgLSAx
KSAlIG9yaWdpbmFsTnVtU3RvcHM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIFdvcmsgZm9yd2FyZHMgZnJvbSB0aGUgZW5k
LCBhZGRpbmcgc3RvcHMgdW50aWwgd2UgZ2V0IG9uZSBhZnRlciAxLgogICAgICAgICAgICAgZmxv
YXQgbGFzdE9mZnNldCA9IHN0b3BzW3N0b3BzLnNpemUoKSAtIDFdLm9mZnNldDsKICAgICAgICAg
ICAgIGlmIChsYXN0T2Zmc2V0IDwgbWF4RXh0ZW50KSB7CkBAIC0yOTcsOSArMjk3LDkgQEAgdm9p
ZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIG51bVN0b3BzID0gc3RvcHMuc2l6ZSgpOwotICAgIAorCiAgICAgLy8gSWYgdGhl
IGdyYWRpZW50IGdvZXMgb3V0c2lkZSB0aGUgMC0xIHJhbmdlLCBub3JtYWxpemUgaXQgYnkgbW92
aW5nIHRoZSBlbmRwb2ludHMsIGFuZCBhZGp1c3RpbmcgdGhlIHN0b3BzLgogICAgIGlmIChudW1T
dG9wcyA+IDEgJiYgKHN0b3BzWzBdLm9mZnNldCA8IDAgfHwgc3RvcHNbbnVtU3RvcHMgLSAxXS5v
ZmZzZXQgPiAxKSkgewogICAgICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudCgpKSB7CkBAIC0zMjgs
MTIgKzMyOCwxMiBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBn
cmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
KwogICAgICAgICAgICAgaWYgKGZpcnN0WmVyb09yR3JlYXRlckluZGV4ID4gMCkgewogICAgICAg
ICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA8IG51bVN0b3BzICYmIHN0b3Bz
W2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQgPiAwKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IHByZXZPZmZzZXQgPSBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleCAtIDFd
Lm9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dE9mZnNldCA9IHN0b3BzW2Zp
cnN0WmVyb09yR3JlYXRlckluZGV4XS5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGludGVyU3RvcFByb3BvcnRpb24gPSAtcHJldk9mZnNl
dCAvIChuZXh0T2Zmc2V0IC0gcHJldk9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIENvbG9y
IGJsZW5kZWRDb2xvciA9IGJsZW5kKHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4IC0gMV0u
Y29sb3IsIHN0b3BzW2ZpcnN0WmVyb09yR3JlYXRlckluZGV4XS5jb2xvciwgaW50ZXJTdG9wUHJv
cG9ydGlvbik7CiAKQEAgLTM0OCwxNSArMzQ4LDE1IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6
YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAwOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bVN0b3BzOyArK2kpCiAgICAgICAgICAgICAgICAgc3RvcHNb
aV0ub2Zmc2V0IC89IHNjYWxlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGdyYWRpZW50
LT5zZXRTdGFydFJhZGl1cyhncmFkaWVudC0+c3RhcnRSYWRpdXMoKSAqIHNjYWxlKTsKICAgICAg
ICAgICAgIGdyYWRpZW50LT5zZXRFbmRSYWRpdXMoZ3JhZGllbnQtPmVuZFJhZGl1cygpICogc2Nh
bGUpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bVN0b3BzOyBpKyspCiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Aoc3RvcHNb
aV0ub2Zmc2V0LCBzdG9wc1tpXS5jb2xvcik7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQCBGbG9hdFBv
aW50IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSog
Zmlyc3QsIENTU1ByaW1pdAogCiAgICAgaWYgKHNlY29uZCkKICAgICAgICAgcmVzdWx0LnNldFko
cG9zaXRpb25Gcm9tVmFsdWUoc2Vjb25kLCBzdHlsZSwgcm9vdFN0eWxlLCBzaXplLCBmYWxzZSkp
OwotICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQyNCw3ICs0MjQsNyBA
QCBib29sIENTU0dyYWRpZW50VmFsdWU6OmlzQ2FjaGVhYmxlKCkgY29uc3QKICAgICAgICAgaWYg
KHVuaXRUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TIHx8IHVuaXRUeXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTIHx8IHVuaXRUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkVNUykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDgzLDEzICs0ODMsMTMgQEAgc3RhdGljIHZvaWQgZW5k
UG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBGbG9h
dFBvaW50JgogICAgIGFuZ2xlRGVnID0gZm1vZGYoYW5nbGVEZWcsIDM2MCk7CiAgICAgaWYgKGFu
Z2xlRGVnIDwgMCkKICAgICAgICAgYW5nbGVEZWcgKz0gMzYwOwotICAgIAorCiAgICAgaWYgKCFh
bmdsZURlZykgewogICAgICAgICBmaXJzdFBvaW50LnNldCgwLCAwKTsKICAgICAgICAgc2Vjb25k
UG9pbnQuc2V0KHNpemUud2lkdGgoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
CisKICAgICBpZiAoYW5nbGVEZWcgPT0gOTApIHsKICAgICAgICAgZmlyc3RQb2ludC5zZXQoMCwg
c2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIHNlY29uZFBvaW50LnNldCgwLCAwKTsKQEAgLTUwMSw3
ICs1MDEsNyBAQCBzdGF0aWMgdm9pZCBlbmRQb2ludHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcs
IGNvbnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9pbnQmCiAgICAgICAgIHNlY29uZFBvaW50LnNl
dCgwLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmIChhbmdsZURl
ZyA9PSAyNzApIHsKICAgICAgICAgZmlyc3RQb2ludC5zZXQoMCwgMCk7CiAgICAgICAgIHNlY29u
ZFBvaW50LnNldCgwLCBzaXplLmhlaWdodCgpKTsKQEAgLTUxMyw3ICs1MTMsNyBAQCBzdGF0aWMg
dm9pZCBlbmRQb2ludHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcsIGNvbnN0IEludFNpemUmIHNp
emUsIEZsb2F0UG9pbnQmCiAgICAgLy8gV2UgZmluZCB0aGUgZW5kcG9pbnQgYnkgY29tcHV0aW5n
IHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGxpbmUgZm9ybWVkIGJ5IHRoZSBzbG9wZSwKICAgICAv
LyBhbmQgYSBsaW5lIHBlcnBlbmRpY3VsYXIgdG8gaXQgdGhhdCBpbnRlcnNlY3RzIHRoZSBjb3Ju
ZXIuCiAgICAgZmxvYXQgcGVycGVuZGljdWxhclNsb3BlID0gLTEgLyBzbG9wZTsKLSAgICAKKwog
ICAgIC8vIENvbXB1dGUgc3RhcnQgY29ybmVyIHJlbGF0aXZlIHRvIGNlbnRlci4KICAgICBmbG9h
dCBoYWxmSGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKSAvIDI7CiAgICAgZmxvYXQgaGFsZldpZHRoID0g
c2l6ZS53aWR0aCgpIC8gMjsKQEAgLTUzMSw3ICs1MzEsNyBAQCBzdGF0aWMgdm9pZCBlbmRQb2lu
dHNGcm9tQW5nbGUoZmxvYXQgYW5nbGVEZWcsIGNvbnN0IEludFNpemUmIHNpemUsIEZsb2F0UG9p
bnQmCiAgICAgZmxvYXQgYyA9IGVuZENvcm5lci55KCkgLSBwZXJwZW5kaWN1bGFyU2xvcGUgKiBl
bmRDb3JuZXIueCgpOwogICAgIGZsb2F0IGVuZFggPSBjIC8gKHNsb3BlIC0gcGVycGVuZGljdWxh
clNsb3BlKTsKICAgICBmbG9hdCBlbmRZID0gcGVycGVuZGljdWxhclNsb3BlICogZW5kWCArIGM7
Ci0gICAgCisKICAgICAvLyBXZSBjb21wdXRlZCB0aGUgZW5kIHBvaW50LCBzbyBzZXQgdGhlIHNl
Y29uZCBwb2ludCwgZmxpcHBpbmcgdGhlIFkgdG8gYWNjb3VudCBmb3IgYW5nbGVzIGdvaW5nIGFu
dGljbG9ja3dpc2UuCiAgICAgc2Vjb25kUG9pbnQuc2V0KGhhbGZXaWR0aCArIGVuZFgsIHNpemUu
aGVpZ2h0KCkgLSAoaGFsZkhlaWdodCArIGVuZFkpKTsKICAgICAvLyBSZWZsZWN0IGFyb3VuZCB0
aGUgY2VudGVyIGZvciB0aGUgc3RhcnQgcG9pbnQuCkBAIC01NDEsNyArNTQxLDcgQEAgc3RhdGlj
IHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRTaXplJiBz
aXplLCBGbG9hdFBvaW50JgogUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRW
YWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKLSAgICAKKwogICAgIFJl
bmRlclN0eWxlKiByb290U3R5bGUgPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCktPnJlbmRlclN0eWxlKCk7CiAKICAgICBGbG9hdFBvaW50IGZpcnN0UG9pbnQ7CkBAIC01
NTEsNyArNTUxLDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAgZW5kUG9pbnRz
RnJvbUFuZ2xlKGFuZ2xlLCBzaXplLCBmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2ZpcnN0WC5nZXQo
KSwgbV9maXJzdFkuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290U3R5bGUsIHNpemUpOwot
ICAgICAgICAKKwogICAgICAgICBpZiAobV9zZWNvbmRYIHx8IG1fc2Vjb25kWSkKICAgICAgICAg
ICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNv
bmRZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKICAgICAgICAg
ZWxzZSB7CkBAIC02NTAsNyArNjUwLDcgQEAgZmxvYXQgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6
cmVzb2x2ZVJhZGl1cyhDU1NQcmltaXRpdmVWYWx1ZSogcmFkaXVzLCBSZW5kZXJTdHkKICAgICAg
ICAgcmVzdWx0ID0gKndpZHRoT3JIZWlnaHQgKiByYWRpdXMtPmdldEZsb2F0VmFsdWUoKSAvIDEw
MDsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHJhZGl1cy0+Y29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7Ci0gCisKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC03MzQsNyArNzM0LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBob3Jpem9udGFs
RWxsaXBzZVJhZGl1cyhjb25zdCBGbG9hdFNpemUmIHAsIGZsb2F0IGFzcGVjdFJhdGkKIFBhc3NS
ZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgQVNTRVJU
KCFzaXplLmlzRW1wdHkoKSk7Ci0gICAgCisKICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0g
cmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwog
CiAgICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdl
dCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6ZSk7
CkBAIC03NDgsNyArNzQ4LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAgc2Vj
b25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAyKTsKICAgICBpZiAoIW1fc2Vjb25kWSkKICAg
ICAgICAgc2Vjb25kUG9pbnQuc2V0WShzaXplLmhlaWdodCgpIC8gMik7Ci0gICAgCisKICAgICBm
bG9hdCBmaXJzdFJhZGl1cyA9IDA7CiAgICAgaWYgKG1fZmlyc3RSYWRpdXMpCiAgICAgICAgIGZp
cnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCByZW5kZXJlci0+
c3R5bGUoKSwgcm9vdFN0eWxlKTsKQEAgLTc2NywxMCArNzY3LDEwIEBAIFBhc3NSZWZQdHI8R3Jh
ZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVj
dCogcmVuZGVyCiAgICAgICAgIEdyYWRpZW50U2hhcGUgc2hhcGUgPSBFbGxpcHNlOwogICAgICAg
ICBpZiAobV9zaGFwZSAmJiBtX3NoYXBlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19JREVOVCAmJiBtX3NoYXBlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQ2lyY2xl
KQogICAgICAgICAgICAgc2hhcGUgPSBDaXJjbGU7Ci0gICAgICAgIAorCiAgICAgICAgIGVudW0g
R3JhZGllbnRGaWxsIHsgQ2xvc2VzdFNpZGUsIENsb3Nlc3RDb3JuZXIsIEZhcnRoZXN0U2lkZSwg
RmFydGhlc3RDb3JuZXIgfTsKICAgICAgICAgR3JhZGllbnRGaWxsIGZpbGwgPSBGYXJ0aGVzdENv
cm5lcjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1fc2l6aW5nQmVoYXZpb3IgJiYgbV9zaXpp
bmdCZWhhdmlvci0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpIHsKICAgICAgICAgICAgIHN3aXRjaCAobV9zaXppbmdCZWhhdmlvci0+Z2V0SWRlbnQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNvbnRhaW46CkBAIC03ODksOSArNzg5LDkgQEAg
UGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGll
bnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBOb3cgY29tcHV0ZSB0aGUg
ZW5kIHJhZGlpIGJhc2VkIG9uIHRoZSBzZWNvbmQgcG9pbnQsIHNoYXBlIGFuZCBmaWxsLgotICAg
ICAgICAKKwogICAgICAgICAvLyBIb3Jpem9udGFsCiAgICAgICAgIHN3aXRjaCAoZmlsbCkgewog
ICAgICAgICBjYXNlIENsb3Nlc3RTaWRlOiB7CkBAIC04MjgsNyArODI4LDcgQEAgUGFzc1JlZlB0
cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVy
T2JqZWN0KiByZW5kZXIKICAgICAgICAgICAgICAgICAvLyB0aGF0IGl0IHdvdWxkIGlmIGNsb3Nl
c3Qtc2lkZSBvciBmYXJ0aGVzdC1zaWRlIHdlcmUgc3BlY2lmaWVkLCBhcyBhcHByb3ByaWF0ZS4K
ICAgICAgICAgICAgICAgICBmbG9hdCB4RGlzdCA9IG1pbihzZWNvbmRQb2ludC54KCksIHNpemUu
d2lkdGgoKSAtIHNlY29uZFBvaW50LngoKSk7CiAgICAgICAgICAgICAgICAgZmxvYXQgeURpc3Qg
PSBtaW4oc2Vjb25kUG9pbnQueSgpLCBzaXplLmhlaWdodCgpIC0gc2Vjb25kUG9pbnQueSgpKTsK
LSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGhvcml6
b250YWxFbGxpcHNlUmFkaXVzKGNvcm5lciAtIHNlY29uZFBvaW50LCB4RGlzdCAvIHlEaXN0KTsK
ICAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbyA9IHhEaXN0IC8geURpc3Q7CiAgICAgICAgICAg
ICB9CkBAIC04NDUsNyArODQ1LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXIKICAgICAgICAg
ICAgICAgICAvLyB0aGF0IGl0IHdvdWxkIGlmIGNsb3Nlc3Qtc2lkZSBvciBmYXJ0aGVzdC1zaWRl
IHdlcmUgc3BlY2lmaWVkLCBhcyBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgICAgICBmbG9hdCB4
RGlzdCA9IG1heChzZWNvbmRQb2ludC54KCksIHNpemUud2lkdGgoKSAtIHNlY29uZFBvaW50Lngo
KSk7CiAgICAgICAgICAgICAgICAgZmxvYXQgeURpc3QgPSBtYXgoc2Vjb25kUG9pbnQueSgpLCBz
aXplLmhlaWdodCgpIC0gc2Vjb25kUG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGhvcml6b250YWxFbGxpcHNlUmFkaXVzKGNvcm5l
ciAtIHNlY29uZFBvaW50LCB4RGlzdCAvIHlEaXN0KTsKICAgICAgICAgICAgICAgICBhc3BlY3RS
YXRpbyA9IHhEaXN0IC8geURpc3Q7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuaAppbmRleCBiMTk1NDhlLi40NGVlMWM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmFkaWVudFZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2lmbmRlZiBDU1NHcmFkaWVudFZhbHVlX2gKQEAgLTUyLDE2ICs1MiwxNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRGaXJzdFkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7
IG1fZmlyc3RZID0gdmFsOyB9CiAgICAgdm9pZCBzZXRTZWNvbmRYKFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhbCkgeyBtX3NlY29uZFggPSB2YWw7IH0KICAgICB2b2lkIHNldFNlY29u
ZFkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fc2Vjb25kWSA9IHZhbDsg
fQotICAgIAorCiAgICAgdm9pZCBhZGRTdG9wKGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBz
dG9wKSB7IG1fc3RvcHMuYXBwZW5kKHN0b3ApOyB9CiAKICAgICBWZWN0b3I8Q1NTR3JhZGllbnRD
b2xvclN0b3A+JiBzdG9wcygpIHsgcmV0dXJuIG1fc3RvcHM7IH0KIAogICAgIHZvaWQgc29ydFN0
b3BzSWZOZWVkZWQoKTsKLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBpc0xpbmVhckdyYWRpZW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpYWxHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCisKICAgICBib29sIGlzUmVwZWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXBlYXRpbmc7IH0KIAogICAgIGJvb2wgZGVwcmVjYXRl
ZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2RlcHJlY2F0ZWRUeXBlOyB9IC8vIGNhbWUgZnJvbSAt
d2Via2l0LWdyYWRpZW50CkBAIC03Myw3ICs3Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgLCBt
X3JlcGVhdGluZyhyZXBlYXQgPT0gUmVwZWF0aW5nKQogICAgIHsKICAgICB9Ci0gICAgCisKICAg
ICB2b2lkIGFkZFN0b3BzKEdyYWRpZW50KiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0ID0gMCk7CiAKICAgICAvLyBDcmVhdGUg
dGhlIGdyYWRpZW50IGZvciBhIGdpdmVuIHNpemUuCkBAIC04MSwxNiArODEsMTYgQEAgcHJvdGVj
dGVkOgogCiAgICAgLy8gUmVzb2x2ZSBwb2ludHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4K
ICAgICBGbG9hdFBvaW50IGNvbXB1dGVFbmRQb2ludChDU1NQcmltaXRpdmVWYWx1ZSosIENTU1By
aW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBjb25z
dCBJbnRTaXplJik7Ci0gICAgCisKICAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3Q7CiAKICAg
ICAvLyBQb2ludHMuIFNvbWUgb2YgdGhlc2UgbWF5IGJlIG51bGwgZm9yIGxpbmVhciBncmFkaWVu
dHMuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0WDsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3RZOwotICAgIAorCiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBtX3NlY29uZFg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Nl
Y29uZFk7Ci0gICAgCisKICAgICAvLyBTdG9wcwogICAgIFZlY3RvcjxDU1NHcmFkaWVudENvbG9y
U3RvcD4gbV9zdG9wczsKICAgICBib29sIG1fc3RvcHNTb3J0ZWQ7CkBAIC0xNTIsMTAgKzE1Miwx
MCBAQCBwcml2YXRlOgogCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVudCBmb3IgYSBnaXZlbiBz
aXplLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwotICAgIAorCiAgICAgLy8gUmVzb2x2ZSBwb2lu
dHMvcmFkaWkgdG8gZnJvbnQgZW5kIHZhbHVlcy4KICAgICBmbG9hdCByZXNvbHZlUmFkaXVzKENT
U1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBm
bG9hdCogd2lkdGhPckhlaWdodCA9IDApOwotICAgIAorCiAgICAgLy8gVGhlc2UgbWF5IGJlIG51
bGwgZm9yIG5vbi1kZXByZWNhdGVkIGdyYWRpZW50cy4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IG1fZmlyc3RSYWRpdXM7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Nl
Y29uZFJhZGl1czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVl
LmNwcAppbmRleCBjZjE4ZjZhLi40OGZkZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5oCmluZGV4IGE1M2M5NjUuLmZlMzkxZjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0ltYWdlR2VuZXJhdG9yVmFsdWVfaApAQCAt
NDQsMTMgKzQ0LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKSA9IDA7CiAKICAgICBTdHlsZUdlbmVy
YXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOwotICAgIAorCiAgICAgdmlydHVhbCBib29sIGlz
Rml4ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEludFNpemUg
Zml4ZWRTaXplKGNvbnN0IFJlbmRlck9iamVjdCopIHsgcmV0dXJuIEludFNpemUoKTsgfQotICAg
IAorCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOwotICAgIAorCiAg
ICAgSW1hZ2UqIGdldEltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKICAgICB2
b2lkIHB1dEltYWdlKGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEltYWdlPik7CiAgICAgY29u
c3QgUmVuZGVyT2JqZWN0U2l6ZUNvdW50TWFwJiBjbGllbnRzKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZUNhY2hlLmNsaWVudHMoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuY3BwCmlu
ZGV4IGZmYzY3NjMuLjA4MzZiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5jcHAK
QEAgLTc4LDcgKzc4LDcgQEAgU3R5bGVDYWNoZWRJbWFnZSogQ1NTSW1hZ2VWYWx1ZTo6Y2FjaGVk
SW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QKICAgICAgICAgICAgIG1f
aW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoY2FjaGVkSW1hZ2UpOwogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIChtX2ltYWdlICYmIG1faW1hZ2UtPmlzQ2FjaGVk
SW1hZ2UoKSkgPyBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4obV9pbWFnZS5nZXQoKSkg
OiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuaAppbmRleCA2NDVhMTczLi43MDkx
ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgU3R5bGVDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoQ2FjaGVkUmVz
b3VyY2VMb2FkZXIqKTsKICAgICAvLyBSZXR1cm5zIGEgU3R5bGVDYWNoZWRJbWFnZSBpZiB0aGUg
aW1hZ2UgaXMgY2FjaGVkIGFscmVhZHksIG90aGVyd2lzZSBhIFN0eWxlUGVuZGluZ0ltYWdlLgog
ICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7Ci0gICAgCisKIHByb3RlY3Rl
ZDoKICAgICBDU1NJbWFnZVZhbHVlKGNvbnN0IFN0cmluZyYgdXJsKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltcG9ydFJ1bGUuY3BwCmluZGV4IGFkYTkxZjAuLjA2MTQ4NmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1wb3J0UnVsZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIENTU0ltcG9ydFJ1
bGU6Omluc2VydGVkSW50b1BhcmVudCgpCiAgICAgLy8gaW4gb3VyIHBhcmVudCBjaGFpbiB3aXRo
IHRoZSBzYW1lIFVSTCwgdGhlbiBqdXN0IGJhaWwuCiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhp
czsKICAgICBmb3IgKFN0eWxlQmFzZSogY3VyciA9IHBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cGFyZW50KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgdGhlIGZp
bmFsVVJMIHdhcyB1cGRhdGVkIHZpYSBkb2N1bWVudDo6dXBkYXRlQmFzZVVSTC4gCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlmIHRoZSBmaW5hbFVSTCB3YXMgdXBkYXRlZCB2aWEg
ZG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwuCiAgICAgICAgIGlmIChjdXJyLT5pc0NTU1N0eWxlU2hl
ZXQoKSAmJiBhYnNIcmVmID09IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihjdXJyKS0+Zmlu
YWxVUkwoKS5zdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcm9vdCA9IGN1
cnI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuY3BwCmluZGV4IGNiZTc3NmIuLjBk
MGM1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuY3BwCkBAIC0yNiw4ICsy
Niw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVuc2lnbmVkIHNob3J0IENTU0luaXRpYWxW
YWx1ZTo6Y3NzVmFsdWVUeXBlKCkgY29uc3QKLXsgCi0gICAgcmV0dXJuIENTU19JTklUSUFMOyAK
K3sKKyAgICByZXR1cm4gQ1NTX0lOSVRJQUw7CiB9CiAKIFN0cmluZyBDU1NJbml0aWFsVmFsdWU6
OmNzc1RleHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRp
YWxWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1ZS5oCmluZGV4IDll
ZTJmMjkuLjAxYmI2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFs
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmgKQEAgLTQw
LDcgKzQwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQo
KSBjb25zdDsKLSAgICAgICAgCisKIHByaXZhdGU6CiAgICAgQ1NTSW5pdGlhbFZhbHVlKGJvb2wg
aW1wbGljaXQpCiAgICAgICAgIDogbV9pbXBsaWNpdChpbXBsaWNpdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDFlNmZlMjEu
LjU4ZGNhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKQogICAgICAgICBzdGF0aWNfY2FzdDxD
U1NNdXRhYmxlVmFsdWUqPih2YWx1ZSktPnNldE5vZGUoMCk7CiAgICAgfQogfQotIAorCiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om9wZXJh
dG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYgb3RoZXIpCiB7CiAgICAgQVNT
RVJUKCFtX2l0ZXJhdG9yQ291bnQpOwpAQCAtMTQwLDE0ICsxNDAsMTQgQEAgU3RyaW5nIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBj
b25zdAogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOiB7CiAg
ICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1s5XSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFgsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZEF0dGFjaG1lbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXRYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdFksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3Np
dGlvblgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luIH07IAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZE9y
aWdpbiB9OwogICAgICAgICAgICAgcmV0dXJuIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9w
ZXJ0aWVzKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOiB7CkBA
IC0yNDMsNyArMjQzLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIGdl
dExheWVyZWRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0aWVzKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazogewotICAgICAgICAgICAgY29uc3QgaW50IHByb3Bl
cnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0
TWFza1JlcGVhdCwgCisgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNr
QXR0YWNobWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0NsaXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4gfTsKICAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVk
U2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CkBAIC0zMjcsNyArMzI3LDcgQEAgU3RyaW5nIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3Qg
aW50KiBwcm9wZXJ0aWUKICAgICAvLyBCZWdpbiBieSBjb2xsZWN0aW5nIHRoZSBwcm9wZXJ0aWVz
IGludG8gYW4gYXJyYXkuCiAgICAgVmVjdG9yPCBSZWZQdHI8Q1NTVmFsdWU+ID4gdmFsdWVzKHNp
emUpOwogICAgIHNpemVfdCBudW1MYXllcnMgPSAwOwotICAgIAorCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgdmFsdWVzW2ldID0gZ2V0UHJvcGVydHlD
U1NWYWx1ZShwcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgaWYgKHZhbHVlc1tpXSkgewpAQCAtMzM4
LDcgKzMzOCw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJl
ZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAgICAgICAgICAgICAgICAgbnVt
TGF5ZXJzID0gbWF4PHNpemVfdD4oMVUsIG51bUxheWVycyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICAvLyBOb3cgc3RpdGNoIHRoZSBwcm9wZXJ0aWVzIHRvZ2V0aGVyLiAgSW1wbGlj
aXQgaW5pdGlhbCB2YWx1ZXMgYXJlIGZsYWdnZWQgYXMgc3VjaCBhbmQKICAgICAvLyBjYW4gc2Fm
ZWx5IGJlIG9taXR0ZWQuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1MYXllcnM7IGkr
KykgewpAQCAtMzUzLDcgKzM1Myw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWVzW2pd
LmdldCgpKS0+aXRlbShpKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZXNbal07Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAgICAgICAgIC8vIENvbG9yIG9ubHkgYmVsb25ncyBpbiB0aGUgbGFzdCBsYXllci4KICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IG51bUxheWVycyAt
IDEpCkBAIC0zNjUsNyArMzY1LDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWUKIAogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byByZXBvcnQgYmFja2dyb3VuZC1yZXBlYXQgYXMgaXQgd2FzIHdy
aXR0ZW4gaW4gdGhlIENTUy4gSWYgdGhlIHByb3BlcnR5IGlzIGltcGxpY2l0LAogICAgICAgICAg
ICAgLy8gdGhlbiBpdCB3YXMgd3JpdHRlbiB3aXRoIG9ubHkgb25lIHZhbHVlLiBIZXJlIHdlIGZp
Z3VyZSBvdXQgd2hpY2ggdmFsdWUgdGhhdCB3YXMgc28gd2UgY2FuCi0gICAgICAgICAgICAvLyBy
ZXBvcnQgYmFjayBjb3JyZWN0bHkuIAorICAgICAgICAgICAgLy8gcmVwb3J0IGJhY2sgY29ycmVj
dGx5LgogICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbal0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0WCAmJiBpc1Byb3BlcnR5SW1wbGljaXQocHJvcGVydGllc1tqXSkpIHsKIAogICAg
ICAgICAgICAgICAgIC8vIEJVRyA0OTA1NTogbWFrZSBzdXJlIHRoZSB2YWx1ZSB3YXMgbm90IHJl
c2V0IGluIHRoZSBsYXllciBjaGVjayBqdXN0IGFib3ZlLgpAQCAtMzc2LDcgKzM3Niw3IEBAIFN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVl
KGNvbnN0IGludCogcHJvcGVydGllCiAgICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihuZXh0VmFsdWUuZ2V0KCkpLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICB5VmFsdWUgPSBuZXh0VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICBpbnQgeElkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZS5nZXQoKSktPmdldElkZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCB5
SWQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHlWYWx1ZS5nZXQoKSktPmdldElk
ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7CkBAIC0zOTMsNyAr
MzkzLDcgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hv
cnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9wZXJ0aWUKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICBpZiAodmFsdWUgJiYgIXZhbHVlLT5pc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIWxheWVyUmVzLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAg
ICBsYXllclJlcyArPSAiICI7CkBAIC00MTAsNyArNDEwLDcgQEAgU3RyaW5nIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9w
ZXJ0aWUKICAgICAgICAgICAgICAgICAgICAgbGF5ZXJSZXMgKz0gdmFsdWUtPmNzc1RleHQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWxheWVy
UmVzLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoIXJlcy5pc051bGwoKSkKICAgICAgICAg
ICAgICAgICByZXMgKz0gIiwgIjsKQEAgLTQ2Myw3ICs0NjMsNyBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVydAogICAgIHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT52YWx1ZSgpIDogMDsKIH0K
IAotYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVy
dHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkgCitib29sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpyZW1vdmVTaG9ydGhhbmRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwg
Ym9vbCBub3RpZnlDaGFuZ2VkKQogewogICAgIENTU1Byb3BlcnR5TG9uZ2hhbmQgbG9uZ2hhbmQg
PSBsb25naGFuZEZvclByb3BlcnR5KHByb3BlcnR5SUQpOwogICAgIGlmIChsb25naGFuZC5sZW5n
dGgoKSkgewpAQCAtNDgxLDExICs0ODEsMTEgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpyZW1vdmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgYm9vbCBub3RpZnlDaGEKICAg
ICAgICAgLy8gRklYTUU6IFJldHVybiBhbiBlcXVpdmFsZW50IHNob3J0aGFuZCB3aGVuIHBvc3Np
YmxlLgogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgCisKICAgICBDU1NQcm9w
ZXJ0eSogZm91bmRQcm9wZXJ0eSA9IGZpbmRQcm9wZXJ0eVdpdGhJZChwcm9wZXJ0eUlEKTsKICAg
ICBpZiAoIWZvdW5kUHJvcGVydHkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAKKwog
ICAgIFN0cmluZyB2YWx1ZSA9IHJldHVyblRleHQgPyBmb3VuZFByb3BlcnR5LT52YWx1ZSgpLT5j
c3NUZXh0KCkgOiBTdHJpbmcoKTsKIAogICAgIC8vIEEgbW9yZSBlZmZpY2llbnQgcmVtb3ZhbCBz
dHJhdGVneSB3b3VsZCBpbnZvbHZlIG1hcmtpbmcgZW50cmllcyBhcyBlbXB0eQpAQCAtNTgwLDcg
KzU4MCw3IEBAIGJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHZhbHVlCiAKICAgICByZXR1cm4gc3VjY2VzczsK
IH0KLSAgICAKKwogdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHlJ
bnRlcm5hbChjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG90KQog
ewogICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKQEAgLTY4NywxMiArNjg3LDEyIEBAIFN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAog
U3RyaW5nIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKIHsKICAg
ICBTdHJpbmcgcmVzdWx0ID0gIiI7Ci0gICAgCisKICAgICBjb25zdCBDU1NQcm9wZXJ0eSogcG9z
aXRpb25YUHJvcCA9IDA7CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIHBvc2l0aW9uWVByb3AgPSAw
OwogICAgIGNvbnN0IENTU1Byb3BlcnR5KiByZXBlYXRYUHJvcCA9IDA7CiAgICAgY29uc3QgQ1NT
UHJvcGVydHkqIHJlcGVhdFlQcm9wID0gMDsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNpemUgPSBt
X3Byb3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyAr
K24pIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3AgPSBtX3Byb3BlcnRpZXNbbl07
CkBAIC03MDcsMjEgKzcwNywyMSBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNzc1RleHQoKSBjb25zdAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgKz0gcHJv
cC5jc3NUZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBub3Qt
c28tbmljZSB3YXkgdG8gdHVybiB4L3kgcG9zaXRpb25zIGludG8gc2luZ2xlIGJhY2tncm91bmQt
cG9zaXRpb24gaW4gb3V0cHV0LgotICAgIC8vIEl0IGlzIHJlcXVpcmVkIGJlY2F1c2UgYmFja2dy
b3VuZC1wb3NpdGlvbi14L3kgYXJlIG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBXZWJLaXQg
Z2VuZXJhdGVkIG91dHB1dCAKKyAgICAvLyBJdCBpcyByZXF1aXJlZCBiZWNhdXNlIGJhY2tncm91
bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGllcyBhbmQgV2ViS2l0IGdl
bmVyYXRlZCBvdXRwdXQKICAgICAvLyB3b3VsZCBub3Qgd29yayBpbiBGaXJlZm94ICg8cmRhcjov
L3Byb2JsZW0vNTE0MzE4Mz4pCiAgICAgLy8gSXQgd291bGQgYmUgYSBiZXR0ZXIgc29sdXRpb24g
aWYgYmFja2dyb3VuZC1wb3NpdGlvbiB3YXMgQ1NTX1BBSVIuCiAgICAgaWYgKHBvc2l0aW9uWFBy
b3AgJiYgcG9zaXRpb25ZUHJvcCAmJiBwb3NpdGlvblhQcm9wLT5pc0ltcG9ydGFudCgpID09IHBv
c2l0aW9uWVByb3AtPmlzSW1wb3J0YW50KCkpIHsKICAgICAgICAgU3RyaW5nIHBvc2l0aW9uVmFs
dWU7CiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblgsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB9OwotICAgICAg
ICBpZiAocG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCBwb3NpdGlvbllQ
cm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSAKKyAgICAgICAgaWYgKHBvc2l0aW9uWFByb3At
PnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcG9zaXRpb25ZUHJvcC0+dmFsdWUoKS0+aXNWYWx1
ZUxpc3QoKSkKICAgICAgICAgICAgIHBvc2l0aW9uVmFsdWUgPSBnZXRMYXllcmVkU2hvcnRoYW5k
VmFsdWUocHJvcGVydGllcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvc2l0aW9uVmFs
dWUgPSBwb3NpdGlvblhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0KCkgKyAiICIgKyBwb3NpdGlvbllQ
cm9wLT52YWx1ZSgpLT5jc3NUZXh0KCk7CiAgICAgICAgIHJlc3VsdCArPSAiYmFja2dyb3VuZC1w
b3NpdGlvbjogIiArIHBvc2l0aW9uVmFsdWUgKyAocG9zaXRpb25YUHJvcC0+aXNJbXBvcnRhbnQo
KSA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAiOyAiOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChwb3NpdGlvblhQcm9wKSAKKyAgICAgICAgaWYgKHBvc2l0aW9uWFByb3ApCiAgICAgICAgICAg
ICByZXN1bHQgKz0gcG9zaXRpb25YUHJvcC0+Y3NzVGV4dCgpOwogICAgICAgICBpZiAocG9zaXRp
b25ZUHJvcCkKICAgICAgICAgICAgIHJlc3VsdCArPSBwb3NpdGlvbllQcm9wLT5jc3NUZXh0KCk7
CkBAIC03MzEsMTMgKzczMSwxMyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNzc1RleHQoKSBjb25zdAogICAgIGlmIChyZXBlYXRYUHJvcCAmJiByZXBlYXRZUHJvcCAmJiBy
ZXBlYXRYUHJvcC0+aXNJbXBvcnRhbnQoKSA9PSByZXBlYXRZUHJvcC0+aXNJbXBvcnRhbnQoKSkg
ewogICAgICAgICBTdHJpbmcgcmVwZWF0VmFsdWU7CiAgICAgICAgIGNvbnN0IGludCByZXBlYXRQ
cm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCBDU1NQcm9wZXJ0
eUJhY2tncm91bmRSZXBlYXRZIH07Ci0gICAgICAgIGlmIChyZXBlYXRYUHJvcC0+dmFsdWUoKS0+
aXNWYWx1ZUxpc3QoKSB8fCByZXBlYXRZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkgCisg
ICAgICAgIGlmIChyZXBlYXRYUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCByZXBlYXRZ
UHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJlcGVhdFZhbHVlID0g
Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHJlcGVhdFByb3BlcnRpZXMpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICByZXBlYXRWYWx1ZSA9IHJlcGVhdFhQcm9wLT52YWx1ZSgpLT5jc3NUZXh0
KCkgKyAiICIgKyByZXBlYXRZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpOwogICAgICAgICByZXN1
bHQgKz0gImJhY2tncm91bmQtcmVwZWF0OiAiICsgcmVwZWF0VmFsdWUgKyAocmVwZWF0WFByb3At
PmlzSW1wb3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKICAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAocmVwZWF0WFByb3ApIAorICAgICAgICBpZiAocmVwZWF0WFByb3ApCiAg
ICAgICAgICAgICByZXN1bHQgKz0gcmVwZWF0WFByb3AtPmNzc1RleHQoKTsKICAgICAgICAgaWYg
KHJlcGVhdFlQcm9wKQogICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVhdFlQcm9wLT5jc3NUZXh0
KCk7CkBAIC04MjUsMTggKzgyNSwxOCBAQCB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQogdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6cmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKICAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3VudCk7Ci0g
ICAgCisKICAgICBpZiAobV9wcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzIHVzZWQgd2l0aCBzdGF0aWMgc2V0
cyBhbmQgaW4gdGhhdCBjYXNlIGNvbnN0cnVjdGluZyB0aGUgaGFzaCByZXBlYXRlZGx5IGlzIHBy
ZXR0eSBwb2ludGxlc3MuCiAgICAgSGFzaFNldDxpbnQ+IHRvUmVtb3ZlOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtp
XSk7Ci0gICAgCisKICAgICBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IG5ld1Byb3BlcnRpZXM7CiAg
ICAgbmV3UHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcHJvcGVydGllcy5zaXpl
KCkpOwotICAgIAorCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1fcHJvcGVydGllcy5zaXplKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpemU7ICsrbikgewogICAgICAgICBjb25zdCBD
U1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbbl07CkBAIC04NTAsNyArODUwLDcg
QEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydGllc0luU2V0
KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZAogCiAgICAgYm9vbCBjaGFuZ2VkID0gbmV3UHJvcGVy
dGllcy5zaXplKCkgIT0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBtX3Byb3BlcnRpZXMgPSBu
ZXdQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgaWYgKGNoYW5nZWQgJiYgbm90aWZ5Q2hhbmdlZCkK
ICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQpAQCAtODY2LDcgKzg2Niw3IEBAIFBh
c3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjb3B5KCkgY29uc3QKIH0KIAogY29uc3QgQ1NTUHJvcGVydHkqIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpmaW5kUHJvcGVydHlXaXRoSWQoaW50IHByb3BlcnR5SUQpIGNvbnN0
Ci17ICAgIAorewogICAgIGZvciAoaW50IG4gPSBtX3Byb3BlcnRpZXMuc2l6ZSgpIC0gMSA7IG4g
Pj0gMDsgLS1uKSB7CiAgICAgICAgIGlmIChwcm9wZXJ0eUlEID09IG1fcHJvcGVydGllc1tuXS5t
X2lkKQogICAgICAgICAgICAgcmV0dXJuICZtX3Byb3BlcnRpZXNbbl07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCmluZGV4IGVhOGFiM2YuLjMw
OTIzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oCkBAIC0zOCwxNSArMzgsMTUgQEAgcHVibGljOgogICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uQ29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbCwgQ1NTUHJvcGVydHkqIGN1cnJlbnQpOwogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uQ29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRl
cmF0b3ImIG8pOwogICAgIH5DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3Io
KTsKLSAgICAKKwogICAgIGNvbnN0IENTU1Byb3BlcnR5JiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqbV9jdXJyZW50OyB9CiAgICAgY29uc3QgQ1NTUHJvcGVydHkqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnQ7IH0KLSAgICAKKwogICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIG8pIHsgQVNTRVJU
KG1fZGVjbCA9PSBvLm1fZGVjbCk7IHJldHVybiBtX2N1cnJlbnQgIT0gby5tX2N1cnJlbnQ7IH0K
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25z
dEl0ZXJhdG9yJiBvKSB7IEFTU0VSVChtX2RlY2wgPT0gby5tX2RlY2wpOyByZXR1cm4gbV9jdXJy
ZW50ID09IG8ubV9jdXJyZW50OyB9Ci0gICAgCisKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkNvbnN0SXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkNvbnN0SXRlcmF0b3ImIG8pOwotICAgIAorCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7CiAKQEAgLTc3LDcgKzc3LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJiBvcGVyYXRv
cj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mKTsKLSAgICAKKwogICAgIHR5cGVk
ZWYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OwogCiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBjb25zdF9pdGVyYXRvcih0
aGlzLCBtX3Byb3BlcnRpZXMuYmVnaW4oKSk7IH0KQEAgLTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBzZXRQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7CiAK
ICAgICBTdHJpbmcgcmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5Q2hh
bmdlZCA9IHRydWUsIGJvb2wgcmV0dXJuVGV4dCA9IGZhbHNlKTsKLSAKKwogICAgIC8vIHNldExl
bmd0aFByb3BlcnR5IHRyZWF0cyBpbnRlZ2VycyBhcyBwaXhlbHMhIChOZWVkZWQgZm9yIGNvbnZl
cnNpb24gb2YgSFRNTCBhdHRyaWJ1dGVzLikKICAgICB2b2lkIHNldExlbmd0aFByb3BlcnR5KGlu
dCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBt
dWx0aUxlbmd0aCA9IGZhbHNlKTsKICAgICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGludCBwcm9w
ZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
LCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsgLy8gcGFyc2VkIHN0cmluZyB2YWx1ZQpAQCAtMTI3
LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFBhcnNlZFByb3BlcnRpZXMoY29uc3Qg
Q1NTUHJvcGVydHkqIGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKICAgICAvLyBUaGlzIGRv
ZXMgbm8gY2hhbmdlIG5vdGlmaWNhdGlvbnMgc2luY2UgaXQncyBvbmx5IGNhbGxlZCBieSBjcmVh
dGVNYXJrdXAuCiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYp
OwotIAorCiAgICAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weUJs
b2NrUHJvcGVydGllcygpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CiAgICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVk
IGxlbmd0aCwgYm9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7CkBAIC0xMzgsNyArMTM4LDcgQEAg
cHVibGljOgogICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aWN0UGFyc2luZzsgfQogCiAgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYpOwotICAgIAorCiAgICAgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoY29uc3QgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIG8pIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcyA9
PSBvLT5tX3Byb3BlcnRpZXM7IH0KIAogICAgIGJvb2wgaXNJbmxpbmVTdHlsZURlY2xhcmF0aW9u
KCk7CkBAIC0xODEsMTMgKzE4MSwxMyBAQCBwcml2YXRlOgogCiAgICAgZnJpZW5kIGNsYXNzIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjsKIH07Ci0gICAgCi1pbmxpbmUg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjpDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGRlY2wsIENTU1Byb3BlcnR5KiBjdXJyZW50KSAKKworaW5saW5lIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0
ZXJhdG9yKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsLCBDU1NQcm9wZXJ0
eSogY3VycmVudCkKIDogbV9kZWNsKGRlY2wpCiAsIG1fY3VycmVudChjdXJyZW50KQoteyAKK3sK
ICNpZm5kZWYgTkRFQlVHCi0gICAgY29uc3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudCsrOyAKKyAgICBjb25zdF9jYXN0PENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVyYXRvckNvdW50Kys7CiAjZW5kaWYK
IH0KIApAQCAtMTk2LDExICsxOTYsMTEgQEAgaW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uQ29uc3RJdGVyYXRvcjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEkKICwgbV9j
dXJyZW50KG8ubV9jdXJyZW50KQogewogI2lmbmRlZiBOREVCVUcKLSAgICBjb25zdF9jYXN0PENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVyYXRvckNvdW50Kys7IAor
ICAgIGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPihtX2RlY2wpLT5tX2l0
ZXJhdG9yQ291bnQrKzsKICNlbmRpZgogfQogCi1pbmxpbmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb25Db25zdEl0ZXJhdG9yOjp+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJh
dG9yKCkgCitpbmxpbmUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjp+
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yKCkKIHsKICNpZm5kZWYgTkRF
QlVHCiAgICAgY29uc3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCkt
Pm1faXRlcmF0b3JDb3VudC0tOwpAQCAtMjEyLDIyICsyMTIsMjIgQEAgaW5saW5lIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25Db25zdEkKICAgICBtX2RlY2wgPSBvLm1fZGVjbDsKICAgICBtX2N1cnJlbnQgPSBvLm1fY3Vy
cmVudDsKICNpZm5kZWYgTkRFQlVHCi0gICAgY29uc3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudCsrOyAKKyAgICBjb25zdF9jYXN0PENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9pdGVyYXRvckNvdW50Kys7CiAj
ZW5kaWYKICAgICByZXR1cm4gKnRoaXM7CiB9Ci0gICAgCi1pbmxpbmUgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0
SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAKLXsgCisKK2lubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVy
YXRvcjo6b3BlcmF0b3IrKygpCit7CiAgICAgQVNTRVJUKG1fY3VycmVudCAhPSBjb25zdF9jYXN0
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNsKS0+bV9wcm9wZXJ0aWVzLmVuZCgp
KTsKICAgICArK21fY3VycmVudDsKLSAgICByZXR1cm4gKnRoaXM7IAorICAgIHJldHVybiAqdGhp
czsKIH0KIAotaW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yOjpvcGVyYXRvci0tKCkgCi17
IAotICAgIC0tbV9jdXJyZW50OyAKLSAgICByZXR1cm4gKnRoaXM7IAoraW5saW5lIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25Db25zdEl0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgICAtLW1fY3VycmVudDsKKyAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKaW5kZXggMzA1YjBjZi4uYzE5NDQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKQEAgLTM2Niw3ICszNjYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQ
cm9wZXJ0eUlEKGludCBwcm9wZXJ0eUlkLCBib29sJiBhY2NlcHRzTmVnYXRpdgogICAgIGNhc2Ug
Q1NTUHJvcGVydHlNaW5XaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbToK
ICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xlZnQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVBh
ZGRpbmdSaWdodDogCisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDoKICAgICBjYXNl
IENTU1Byb3BlcnR5UGFkZGluZ1RvcDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNh
bFdpZHRoOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMb2dpY2FsSGVpZ2h0OgpAQCAtMzgx
LDggKzM4MSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NpbXBsZUxlbmd0aFByb3BlcnR5SUQo
aW50IHByb3BlcnR5SWQsIGJvb2wmIGFjY2VwdHNOZWdhdGl2CiAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvdHRvbToKICAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoKICAgICBjYXNlIENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tOgotICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OiAKLSAgICBjYXNl
IENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6IAorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoKICAgICBjYXNlIENTU1Byb3BlcnR5
TWFyZ2luVG9wOgogICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dEluZGVudDoKQEAgLTY0Miw3ICs2NDIsNyBAQCB2b2lkIENTU1BhcnNlcjo6Y2xlYXJQ
cm9wZXJ0aWVzKCkKICAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBJ
TlZBTElEX05VTV9QQVJTRURfUFJPUEVSVElFUzsKICAgICBtX2hhc0ZvbnRGYWNlT25seVZhbHVl
cyA9IGZhbHNlOwogfQotICAgIAorCiB2b2lkIENTU1BhcnNlcjo6c2V0U3R5bGVTaGVldChDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7
CkBAIC0xMjYwLDExICsxMjYwLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Byb3BlcnR5U3BlYWs6ICAgICAgICAgICAv
LyBub25lIHwgbm9ybWFsIHwgc3BlbGwtb3V0IHwgZGlnaXRzIHwgbGl0ZXJhbC1wdW5jdHVhdGlv
biB8IG5vLXB1bmN0dWF0aW9uIHwgaW5oZXJpdAotICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lIHx8IGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlU3BlbGxPdXQgfHwg
aWQgPT0gQ1NTVmFsdWVEaWdpdHMgCisgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwg
aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgaWQgPT0gQ1NTVmFsdWVTcGVsbE91dCB8fCBpZCA9PSBD
U1NWYWx1ZURpZ2l0cwogICAgICAgICAgICAgfHwgaWQgPT0gQ1NTVmFsdWVMaXRlcmFsUHVuY3R1
YXRpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb1B1bmN0dWF0aW9uKQogICAgICAgICAgICAgdmFsaWRQ
cmltaXRpdmUgPSB0cnVlOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRJbmRlbnQ6ICAgICAgICAgIC8vIDxsZW5ndGg+IHwgPHBlcmNlbnRh
Z2U+IHwgaW5oZXJpdAogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9ICghaWQgJiYgdmFsaWRVbml0
KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIG1fc3RyaWN0KSk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMTYwMiw3ICsxNjAyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gaWQgPT0gQ1NTVmFs
dWVTdGFydCB8fCBpZCA9PSBDU1NWYWx1ZUVuZCB8fCBpZCA9PSBDU1NWYWx1ZUNlbnRlciB8fCBp
ZCA9PSBDU1NWYWx1ZUJhc2VsaW5lIHx8IGlkID09IENTU1ZhbHVlU3RyZXRjaDsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhGbG93OgotICAgICAgICAvLyBG
SVhNRTogLXdlYmtpdC1mbGV4LWZsb3cgdGFrZXMgYSBzZWNvbmQgIndyYXAiIHZhbHVlLiAgICAK
KyAgICAgICAgLy8gRklYTUU6IC13ZWJraXQtZmxleC1mbG93IHRha2VzIGEgc2Vjb25kICJ3cmFw
IiB2YWx1ZS4KICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSBpZCA9PSBDU1NWYWx1ZVJvdyB8fCBp
ZCA9PSBDU1NWYWx1ZVJvd1JldmVyc2UgfHwgaWQgPT0gQ1NTVmFsdWVDb2x1bW4gfHwgaWQgPT0g
Q1NTVmFsdWVDb2x1bW5SZXZlcnNlOwogICAgICAgICBicmVhazsKICNlbmRpZgpAQCAtMjI0Niw3
ICsyMjQ2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElk
LCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAgICAgICAgICAgICAgICAg
aWYgKChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9w
ZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbikgJiYgIXBhcnNlZFByb3Bl
cnR5W2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3JvdW5kLW9yaWdp
biB3YXNuJ3QgcHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxzby4KICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIENTU0luaXRpYWxWYWx1
ZTo6Y3JlYXRlSW1wbGljaXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0z
MzMyLDcgKzMzMzIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5p
bWF0aW9uVGltaW5nRnVuY3Rpb24oKQogCiAgICAgICAgIHJldHVybiBDU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWU6OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJjdWJp
Yy1iZXppZXIoIikpIHsKICAgICAgICAgLy8gRm9yIGN1YmljIGJlemllciwgNCB2YWx1ZXMgbXVz
dCBiZSBzcGVjaWZpZWQuCiAgICAgICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gNykK
QEAgLTMzNTIsNyArMzM1Miw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCiAKICAgICAgICAgcmV0dXJuIENTU0N1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZTo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKICAgICB9Ci0g
ICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzcwNSwyMCArMzcwNSwyMCBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIFBhc3NSZWZQ
dHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlUmVjdChDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MpOwotICAgIAorCiAgICAgLy8gcmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBbW3J4XSwgcnldKQogICAgIGlmIChhcmdzLT5zaXplKCkg
IT0gNyAmJiBhcmdzLT5zaXplKCkgIT0gOSAmJiBhcmdzLT5zaXplKCkgIT0gMTEpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAorCiAgICAgUmVmUHRyPENTU1dyYXBTaGFwZVJlY3Q+IHNoYXBlID0g
Q1NTV3JhcFNoYXBlUmVjdDo6Y3JlYXRlKCk7Ci0gICAgCisKICAgICB1bnNpZ25lZCBhcmd1bWVu
dE51bWJlciA9IDA7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVu
dCgpOwogICAgIHdoaWxlIChhcmd1bWVudCkgewogICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1
bWVudCwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IHByaW1pdGl2ZVZh
bHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJndW1lbnQtPmZWYWx1ZSwgCisKKyAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNy
ZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsCiAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgYXJndW1lbnQtPnVuaXQpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnRO
dW1iZXIgPCA2KTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudE51bWJlcikgewpAQCAtMzc0NSwz
NCArMzc0NSwzNCBAQCBQYXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdy
YXBTaGFwZVJlY3QoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogICAgICAgICBpZiAoYXJndW1l
bnQpIHsKICAgICAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6
T3BlcmF0b3IgfHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0
KCk7CiAgICAgICAgIH0KICAgICAgICAgYXJndW1lbnROdW1iZXIrKzsKICAgICB9Ci0gICAgCisK
ICAgICBpZiAoYXJndW1lbnROdW1iZXIgPCA0KQotICAgICAgICByZXR1cm4gMDsgICAgCisgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZTsKIH0KIAogUGFzc1JlZlB0cjxDU1NXcmFw
U2hhcGU+IENTU1BhcnNlcjo6cGFyc2VXcmFwU2hhcGVDaXJjbGUoQ1NTUGFyc2VyVmFsdWVMaXN0
KiBhcmdzKQogewogICAgIEFTU0VSVChhcmdzKTsKLSAgICAKKwogICAgIC8vIGNpcmNsZSh4LCB5
LCByKQogICAgIGlmIChhcmdzLT5zaXplKCkgIT0gNSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIAorCiAgICAgUmVmUHRyPENTU1dyYXBTaGFwZUNpcmNsZT4gc2hhcGUgPSBDU1NXcmFwU2hh
cGVDaXJjbGU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgdW5zaWduZWQgYXJndW1lbnROdW1iZXIg
PSAwOwogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAg
ICB3aGlsZSAoYXJndW1lbnQpIHsKICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQsIEZM
ZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVh
dGVWYWx1ZShhcmd1bWVudC0+ZlZhbHVlLCAKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50
LT5mVmFsdWUsCiAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYXJn
dW1lbnQtPnVuaXQpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnROdW1iZXIgPCAzKTsKICAgICAg
ICAgc3dpdGNoIChhcmd1bWVudE51bWJlcikgewpAQCAtMzc4NiwzNyArMzc4NiwzNyBAQCBQYXNz
UmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdyYXBTaGFwZUNpcmNsZShDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZwogICAgICAgICAgICAgc2hhcGUtPnNldFJhZGl1cyhsZW5ndGgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYXJn
dW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmIChhcmd1bWVudCkgewogICAgICAgICAg
ICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhcmd1
bWVudC0+aVZhbHVlICE9ICcsJykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJn
cy0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIGFyZ3VtZW50TnVtYmVyKys7CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKGFyZ3VtZW50TnVtYmVyIDwgMykKLSAgICAgICAgcmV0dXJuIDA7ICAg
IAorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKIFBhc3NSZWZQdHI8
Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlRWxsaXBzZShDU1NQYXJzZXJW
YWx1ZUxpc3QqIGFyZ3MpCiB7CiAgICAgQVNTRVJUKGFyZ3MpOwotICAgIAorCiAgICAgLy8gZWxs
aXBzZSh4LCB5LCByeCwgcnkpCiAgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSA3KQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgCisKICAgICBSZWZQdHI8Q1NTV3JhcFNoYXBlRWxsaXBzZT4gc2hh
cGUgPSBDU1NXcmFwU2hhcGVFbGxpcHNlOjpjcmVhdGUoKTsKICAgICB1bnNpZ25lZCBhcmd1bWVu
dE51bWJlciA9IDA7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVu
dCgpOwogICAgIHdoaWxlIChhcmd1bWVudCkgewogICAgICAgICBpZiAoIXZhbGlkVW5pdChhcmd1
bWVudCwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IHByaW1pdGl2ZVZh
bHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJndW1lbnQtPmZWYWx1ZSwgCisKKyAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNy
ZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsCiAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgYXJndW1lbnQtPnVuaXQpOwogICAgICAgICBBU1NFUlQoYXJndW1lbnRO
dW1iZXIgPCA0KTsKICAgICAgICAgc3dpdGNoIChhcmd1bWVudE51bWJlcikgewpAQCAtMzgzMyw3
ICszODMzLDcgQEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VXcmFw
U2hhcGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCogYXIKICAgICAgICAgICAgIHNoYXBlLT5z
ZXRSYWRpdXNZKGxlbmd0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKGFyZ3Vt
ZW50KSB7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywnKQpAQCAtMzg0Miw3ICszODQyLDcg
QEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VXcmFwU2hhcGVFbGxp
cHNlKENTU1BhcnNlclZhbHVlTGlzdCogYXIKICAgICAgICAgfQogICAgICAgICBhcmd1bWVudE51
bWJlcisrOwogICAgIH0KLSAgICAKKwogICAgIGlmIChhcmd1bWVudE51bWJlciA8IDQpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBzaGFwZTsKQEAgLTM4NTUsNyArMzg1NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlUG9seWdvbihD
U1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3MtPnNpemUoKTsK
ICAgICBpZiAoIXNpemUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgUmVmUHRyPENT
U1dyYXBTaGFwZVBvbHlnb24+IHNoYXBlID0gQ1NTV3JhcFNoYXBlUG9seWdvbjo6Y3JlYXRlKCk7
CiAKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CkBAIC0z
ODY5LDM0ICszODY5LDM0IEBAIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBh
cnNlV3JhcFNoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgICAgIGFyZ3Vt
ZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICBzaXplIC09IDI7CiAgICAgfQotICAgIAorCiAg
ICAgLy8gPGxlbmd0aD4sIDxsZW5ndGg+IC4uLiA8bGVuZ3RoPiwgPGxlbmd0aD4gLT4gZWFjaCBw
YWlyIGhhcyAzIGVsZW1lbnRzCiAgICAgaWYgKCFzaXplIHx8IChzaXplICUgMykpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAorCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WCA9IGFyZ3Vt
ZW50OwogICAgIHdoaWxlIChhcmd1bWVudFgpIHsKICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJn
dW1lbnRYLCBGTGVuZ3RoLCBtX3N0cmljdCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgCisKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGNvbW1hID0gYXJncy0+bmV4dCgpOwogICAg
ICAgICBpZiAoIWNvbW1hIHx8IGNvbW1hLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciB8fCBjb21tYS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAKKwogICAgICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnRZID0gYXJncy0+bmV4dCgpOwog
ICAgICAgICBpZiAoIWFyZ3VtZW50WSB8fCAhdmFsaWRVbml0KGFyZ3VtZW50WSwgRkxlbmd0aCwg
bV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHhMZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNy
ZWF0ZVZhbHVlKGFyZ3VtZW50WC0+ZlZhbHVlLCAKKworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHhMZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFy
Z3VtZW50WC0+ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIGFyZ3VtZW50WC0+dW5pdCk7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
eUxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJndW1lbnRZLT5m
VmFsdWUsIAorICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHlMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50WS0+ZlZhbHVlLAogICAgICAg
ICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZ3VtZW50WS0+dW5pdCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIHNoYXBlLT5hcHBlbmRQb2ludCh4TGVuZ3RoLnJlbGVhc2UoKSwg
eUxlbmd0aC5yZWxlYXNlKCkpOwotICAgICAgICAKKwogICAgICAgICBhcmd1bWVudFggPSBhcmdz
LT5uZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHNoYXBlOwogfQogCkBAIC0zOTA3
LDkgKzM5MDcsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VXcmFwU2hhcGUoYm9vbCBpbXBvcnRh
bnQpCiAKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IFJlZlB0cjxDU1NXcmFwU2hhcGU+IHNoYXBlOwotICAgIAorCiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgInJlY3QoIikpCiAgICAgICAgIHNoYXBlID0g
cGFyc2VXcmFwU2hhcGVSZWN0KGFyZ3MpOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHZhbHVlLT5mdW5jdGlvbi0+bmFtZSwgImNpcmNsZSgiKSkKQEAgLTUxMzksNyArNTEzOSw3IEBA
IHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAgICAgLCBtX2FsbG93UmVwZWF0KHRy
dWUpCiAgICAgLCBtX2FsbG93U2xhc2goZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVXaWR0aChmYWxz
ZSkKLSAgICAsIG1fcmVxdWlyZU91dHNldChmYWxzZSkgICAgCisgICAgLCBtX3JlcXVpcmVPdXRz
ZXQoZmFsc2UpCiAgICAge30KIAogICAgIGJvb2wgY2FuQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2FuQWR2YW5jZTsgfQpAQCAtNTE1Myw3ICs1MTUzLDcgQEAgc3RydWN0IEJvcmRlckltYWdl
UGFyc2VDb250ZXh0IHsKIAogICAgIGJvb2wgcmVxdWlyZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1aXJlV2lkdGg7IH0KICAgICBib29sIHJlcXVpcmVPdXRzZXQoKSBjb25zdCB7IHJldHVy
biBtX3JlcXVpcmVPdXRzZXQ7IH0KLSAgICAKKwogICAgIHZvaWQgY29tbWl0SW1hZ2UoUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gaW1hZ2UpCiAgICAgewogICAgICAgICBtX2ltYWdlID0gaW1hZ2U7CkBA
IC01MjE3LDcgKzUyMTcsNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAg
ICAgICAvLyBNYWtlIG91ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5vdy4KICAgICAgICAgcmV0
dXJuIENTU0JvcmRlckltYWdlVmFsdWU6OmNyZWF0ZShtX2ltYWdlLCBtX2ltYWdlU2xpY2UsIG1f
Ym9yZGVyU2xpY2UsIG1fb3V0c2V0LCBtX3JlcGVhdCk7CiAgICAgfQotICAgIAorCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWVDYWNoZSogbV9wcmltaXRpdmVWYWx1ZUNhY2hlOwogCiAgICAgYm9vbCBt
X2NhbkFkdmFuY2U7CkBAIC01MjI3LDcgKzUyMjcsNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJz
ZUNvbnRleHQgewogICAgIGJvb2wgbV9hbGxvd0ltYWdlU2xpY2U7CiAgICAgYm9vbCBtX2FsbG93
UmVwZWF0OwogICAgIGJvb2wgbV9hbGxvd1NsYXNoOwotICAgIAorCiAgICAgYm9vbCBtX3JlcXVp
cmVXaWR0aDsKICAgICBib29sIG1fcmVxdWlyZU91dHNldDsKIApAQCAtNTI0OCw3ICs1MjQ4LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UoaW50IHByb3BJZCwgUmVmUHRyPENT
U1ZhbHVlPiYgcmVzdWx0KQogCiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYg
Y29udGV4dC5hbGxvd1NsYXNoKCkgJiYgdmFsLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVy
YXRvciAmJiB2YWwtPmlWYWx1ZSA9PSAnLycpCiAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFNs
YXNoKCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYg
Y29udGV4dC5hbGxvd0ltYWdlKCkpIHsKICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkgJiYgbV9zdHlsZVNoZWV0KSB7CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBjb21wbGV0ZVVSTCBjYWxsIHNob3VsZCBiZSBkb25lIHdoZW4gdXNp
bmcgdGhlIENTU0ltYWdlVmFsdWUsCkBAIC01MjYzLDM0ICs1MjYzLDM0IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3Vs
dCkKICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsLT5pZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAg
ICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2Uo
KSAmJiBjb250ZXh0LmFsbG93SW1hZ2VTbGljZSgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NT
Qm9yZGVySW1hZ2VTbGljZVZhbHVlPiBpbWFnZVNsaWNlOwogICAgICAgICAgICAgaWYgKHBhcnNl
Qm9yZGVySW1hZ2VTbGljZShwcm9wSWQsIGltYWdlU2xpY2UpKQogICAgICAgICAgICAgICAgIGNv
bnRleHQuY29tbWl0SW1hZ2VTbGljZShpbWFnZVNsaWNlLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0g
Ci0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2Uo
KSAmJiBjb250ZXh0LmFsbG93UmVwZWF0KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcmVwZWF0OwogICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VSZXBlYXQocmVwZWF0
KSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdFJlcGVhdChyZXBlYXQpOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29u
dGV4dC5yZXF1aXJlV2lkdGgoKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBib3JkZXJTbGljZTsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlV2lkdGgo
Ym9yZGVyU2xpY2UpKQogICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Qm9yZGVyV2lkdGgo
Ym9yZGVyU2xpY2UucmVsZWFzZSgpKTsKLSAgICAgICAgfSAKLSAgICAgICAgCisgICAgICAgIH0K
KwogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQucmVxdWlyZU91
dHNldCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvcmRlck91
dHNldDsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlT3V0c2V0KGJvcmRlck91dHNl
dCkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJPdXRzZXQoYm9yZGVyT3V0
c2V0LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAg
ICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKKwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0KIApAQCAtNTMxNyw3
ICs1MzE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2VSZXBlYXQoUmVmUHRy
PENTU1ZhbHVlPiYgcmVzdWx0KQogICAgICAgICBmaXJzdFZhbHVlID0gcHJpbWl0aXZlVmFsdWVD
YWNoZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICB2YWwgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwog
ICAgIGlmICh2YWwpIHsKICAgICAgICAgaWYgKGlzQm9yZGVySW1hZ2VSZXBlYXRLZXl3b3JkKHZh
bC0+aWQpKQpAQCAtNTQwMiw3ICs1NDAyLDcgQEAgcHVibGljOgogICAgICAgICAvLyBNYWtlIG91
ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5vdy4KICAgICAgICAgcmV0dXJuIENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZTo6Y3JlYXRlKG1fcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUo
cXVhZC5yZWxlYXNlKCkpLCBtX2ZpbGwpOwogICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBD
U1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBtX3ByaW1pdGl2ZVZhbHVlQ2FjaGU7CiAKQEAgLTU0MTQs
NyArNTQxNCw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Jp
Z2h0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7Ci0gICAgCisKICAgICBib29sIG1fZmlsbDsKIH07
CiAKQEAgLTU0NzMsNyArNTQ3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZhbCA9IG1fcHJp
bWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHYtPmlkKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdmFsID0gbV9wcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1
ZSh2LT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXYtPnVuaXQpOwotICAg
ICAgICAKKwogICAgICAgICBpZiAoIW1fdG9wKQogICAgICAgICAgICAgbV90b3AgPSB2YWw7CiAg
ICAgICAgIGVsc2UgaWYgKCFtX3JpZ2h0KQpAQCAtNTUxOCw3ICs1NTE4LDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBNYWtlIG91ciBuZXcgdmFsdWUgbm93LgogICAgICAgICByZXR1cm4gbV9wcmlt
aXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShxdWFkLnJlbGVhc2UoKSk7CiAgICAgfQotICAg
IAorCiBwcml2YXRlOgogICAgIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUqIG1fcHJpbWl0aXZlVmFs
dWVDYWNoZTsKIApAQCAtNTY4NSwxMSArNTY4NSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChDU1NQYXJzZXJWYWx1
ZQogewogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OwogICAgIGlmIChhLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKLSAgICAgICAgaWYgKChlcXVh
bElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJsZWZ0IikgJiYgaG9yaXpvbnRhbCkgfHwgCi0gICAg
ICAgICAgICAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAidG9wIikgJiYgIWhvcml6b250
YWwpKQorICAgICAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgImxlZnQiKSAm
JiBob3Jpem9udGFsKQorICAgICAgICAgICAgfHwgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmlu
ZywgInRvcCIpICYmICFob3Jpem9udGFsKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2
ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOwotICAgICAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAi
cmlnaHQiKSAmJiBob3Jpem9udGFsKSB8fAotICAgICAgICAgICAgICAgICAoZXF1YWxJZ25vcmlu
Z0Nhc2UoYS0+c3RyaW5nLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQorICAgICAgICBlbHNl
IGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAicmlnaHQiKSAmJiBob3Jpem9udGFs
KQorICAgICAgICAgICAgICAgICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAiYm90
dG9tIikgJiYgIWhvcml6b250YWwpKQogICAgICAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFs
dWVDYWNoZS0+Y3JlYXRlVmFsdWUoMTAwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAiY2Vu
dGVyIikpCiAgICAgICAgICAgICByZXN1bHQgPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVW
YWx1ZSg1MC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CkBAIC01NzEyLDgg
KzU3MTIsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcChD
U1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDUwogICAgIGlmICghYXJncykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9u
LT5uYW1lLCAiZnJvbSgiKSB8fCAKLSAgICAgICAgZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rp
b24tPm5hbWUsICJ0bygiKSkgeworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlv
bi0+bmFtZSwgImZyb20oIikKKyAgICAgICAgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rp
b24tPm5hbWUsICJ0bygiKSkgewogICAgICAgICAvLyBUaGUgImZyb20iIGFuZCAidG8iIHN0b3Bz
IGV4cGVjdCAxIGFyZ3VtZW50LgogICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDEpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01OTI0LDcgKzU5MjQsNyBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1Bh
cnNlciogcCwgQwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGllbnQoUmVmUHRyPENT
U1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBS
ZWZQdHI8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTTGluZWFyR3JhZGllbnRW
YWx1ZTo6Y3JlYXRlKHJlcGVhdGluZyk7Ci0gICAgCisKICAgICAvLyBXYWxrIHRoZSBhcmd1bWVu
dHMuCiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+ZnVuY3Rpb24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkp
CkBAIC01OTM4LDEzICs1OTM4LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRp
ZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgLy8g
TG9vayBmb3IgYW5nbGUuCiAgICAgaWYgKHZhbGlkVW5pdChhLCBGQW5nbGUsIHRydWUpKSB7CiAg
ICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsK
LSAgICAgICAgCisKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgZXhwZWN0Q29t
bWEgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIExvb2sgb25lIG9yIHR3byBvcHRp
b25hbCBrZXl3b3JkcyB0aGF0IGluZGljYXRlIGEgc2lkZSBvciBjb3JuZXIuCiAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc3RhcnRYLCBzdGFydFk7Ci0gICAgICAgIAorCiAgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbG9jYXRpb247CiAgICAgICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gZmFsc2U7CiAgICAgICAgIGlmICgobG9jYXRpb24gPSB2YWx1ZUZyb21TaWRl
S2V5d29yZChhLCBpc0hvcml6b250YWwsIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKSkpKSB7CkBAIC01
OTUyLDcgKzU5NTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChSZWZQ
dHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQogICAgICAgICAgICAgICAg
IHN0YXJ0WCA9IGxvY2F0aW9uOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHN0
YXJ0WSA9IGxvY2F0aW9uOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGEgPSBhcmdzLT5u
ZXh0KCk7CiAgICAgICAgICAgICBpZiAoYSkgewogICAgICAgICAgICAgICAgIGlmICgobG9jYXRp
b24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZChhLCBpc0hvcml6b250YWwsIHByaW1pdGl2ZVZhbHVl
Q2FjaGUoKSkpKSB7CkBAIC01OTcyLDEwICs1OTcyLDEwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUxpbmVhckdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJl
cGVhCiAKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBpZiAoIXN0YXJ0WCAmJiAhc3RhcnRZKQogICAgICAgICAgICAgc3RhcnRZ
ID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVU
b3ApOwotICAgICAgICAgICAgCisKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoc3RhcnRYLnJl
bGVhc2UoKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHN0YXJ0WS5yZWxlYXNlKCkpOwog
ICAgIH0KQEAgLTU5OTQsNyArNTk5NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdy
YWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiBib29s
IENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVu
dCwgQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0aW5nKQogewogICAgIFJlZlB0cjxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGUocmVw
ZWF0aW5nKTsKLSAgICAKKwogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KICAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJn
cy5nZXQoKTsKICAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MtPnNpemUoKSkKQEAgLTYwMTQsNyArNjAx
NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0cjxDU1NWYWx1
ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgYSA9IGFyZ3MtPmN1cnJlbnQoKTsK
ICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChjZW50
ZXJYIHx8IGNlbnRlclkpIHsKICAgICAgICAgLy8gQ29tbWEKICAgICAgICAgaWYgKGEtPnVuaXQg
IT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGEtPmlWYWx1ZSAhPSAnLCcpCkBAIC02MDI0
LDcgKzYwMjQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQogICAgICAgICBpZiAoIWEpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgQVNTRVJUKCFjZW50
ZXJYIHx8IGNlbnRlclgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAgICAgQVNTRVJUKCFjZW50ZXJZ
IHx8IGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7CiAKQEAgLTYwMzMsNyArNjAzMyw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdy
YWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgLy8gQ1NTMyByYWRpYWwgZ3JhZGllbnRzIGFs
d2F5cyBzaGFyZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIHBvaW50LgogICAgIHJlc3VsdC0+c2V0
Rmlyc3RZKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY2VudGVyWS5nZXQoKSkpOwog
ICAgIHJlc3VsdC0+c2V0U2Vjb25kWShzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGNl
bnRlclkuZ2V0KCkpKTsKLSAgICAKKwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hh
cGVWYWx1ZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemVWYWx1ZTsKIApAQCAt
NjA0MSw3ICs2MDQxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoUmVm
UHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7ICsraSkgewogICAgICAgICBpZiAoYS0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgCisKICAgICAgICAgYm9v
bCBmb3VuZFZhbHVlID0gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAoYS0+aWQpIHsKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZUNpcmNsZToKQEAgLTYwNjgsMTAgKzYwNjgsMTAgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dy
YWRpZW50UmVwZWEKICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIHJlc3VsdC0+c2V0U2hhcGUoc2hhcGVWYWx1ZSk7CiAgICAgcmVz
dWx0LT5zZXRTaXppbmdCZWhhdmlvcihzaXplVmFsdWUpOwotICAgIAorCiAgICAgLy8gT3IsIHR3
byBsZW5ndGhzIG9yIHBlcmNlbnRhZ2VzCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBo
b3Jpem9udGFsU2l6ZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZlcnRpY2FsU2l6
ZTsKQEAgLTYwOTksNyArNjA5OSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRp
ZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgLy8g
TXVzdCBoYXZlIG5laXRoZXIgb3IgYm90aC4KICAgICBpZiAoIWhvcml6b250YWxTaXplICE9ICF2
ZXJ0aWNhbFNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIHJlc3VsdC0+
c2V0RW5kSG9yaXpvbnRhbFNpemUoaG9yaXpvbnRhbFNpemUpOwogICAgIHJlc3VsdC0+c2V0RW5k
VmVydGljYWxTaXplKHZlcnRpY2FsU2l6ZSk7CiAKQEAgLTYxMzksNyArNjEzOSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50Q29sb3JTdG9wcyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHZh
bHVlTGlzdCwgQ1NTR3JhZGllCiAgICAgICAgICAgICAgICAgYSA9IHZhbHVlTGlzdC0+bmV4dCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGdyYWRpZW50
LT5hZGRTdG9wKHN0b3ApOwogICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgfQpAQCAt
NjQxNyw3ICs2NDE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OmlzVmFsaWRGaWx0ZXJBcmd1bWVudChD
U1NQYXJzZXJWYWx1ZSogYXJndW1lbnQsIFdlYktpdENTU0ZpbHRlclYKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9IGVsc2UgaWYgKCF2YWxpZFVuaXQoYXJndW1lbnQsIEZOdW1iZXIs
IHRydWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAvLyBDaGVjayBwYXJh
bWV0ZXIgdmFsdWVzLgogICAgIGlmIChmaWx0ZXJUeXBlID09IFdlYktpdENTU0ZpbHRlclZhbHVl
OjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb24KICAgICAgICAgfHwgZmlsdGVyVHlwZSA9PSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb24KQEAgLTY0NjYsMTIgKzY0NjYs
MTIgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGaWx0ZXIoKQog
ICAgICAgICAgICAgUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiByZWZlcmVuY2VGaWx0ZXJW
YWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OlJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQocmVm
ZXJlbmNlRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyVmFsdWUtPmFw
cGVuZChwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7Ci0gICAgICAgIH0gZWxzZSB7ICAgICAgICAK
KyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IENTU1BhcnNlclN0cmluZyBuYW1l
ID0gdmFsdWUtPmZ1bmN0aW9uLT5uYW1lOwogICAgICAgICAgICAgdW5zaWduZWQgbWF4aW11bUFy
Z3VtZW50Q291bnQgPSAxOwogCiAgICAgICAgICAgICBmaWx0ZXJJbmZvRm9yTmFtZShuYW1lLCBm
aWx0ZXJUeXBlLCBtYXhpbXVtQXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgaWYgKGZpbHRlclR5cGUgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlVua25vd25GaWx0
ZXJPcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTY0ODIsNyArNjQ4
Miw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRmlsdGVyKCkK
ICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IFdlYktpdENTU0ZpbHRlclZhbHVlIGZvciB0
aGlzIG9wZXJhdGlvbiBhbmQgYWRkIGl0IHRvIG91ciBsaXN0LgogICAgICAgICAgICAgUmVmUHRy
PFdlYktpdENTU0ZpbHRlclZhbHVlPiBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVl
OjpjcmVhdGUoZmlsdGVyVHlwZSk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZmlsdGVyVmFs
dWUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVu
dCA9IGFyZ3MtPmN1cnJlbnQoKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQg
PSAwOwogCkBAIC02NzM3LDcgKzY3MzcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5lQm94
Q29udGFpbihib29sIGltcG9ydGFudCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFsaW5lQm94Q29udGFpbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MjUxLDcgKzcyNTEsNyBAQCBDU1NSdWxlKiBDU1NQYXJz
ZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+bV92YWx1ZSA9
IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1ZhbHVlTGlzdCo+KHByb3BlcnR5LT52YWx1ZSgpKS0+YXBwZW5kKHZhbHVlLnJl
bGVhc2UoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT0gQ1NTUHJvcGVydHlGb250RmFtaWx5
ICYmICghcHJvcGVydHktPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVMaXN0Kj4ocHJvcGVydHktPnZhbHVlKCkpLT5sZW5ndGgoKSAhPSAxKSkgewotICAgICAg
ICAgICAgLy8gVW5saWtlIGZvbnQtZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlw
dG9yIGluIEBmb250LWZhY2UgcnVsZSAKKyAgICAgICAgICAgIC8vIFVubGlrZSBmb250LWZhbWls
eSBwcm9wZXJ0eSwgZm9udC1mYW1pbHkgZGVzY3JpcHRvciBpbiBAZm9udC1mYWNlIHJ1bGUKICAg
ICAgICAgICAgIC8vIGhhcyB0byBiZSBhIHZhbHVlIGxpc3Qgd2l0aCBleGFjdGx5IG9uZSBmYW1p
bHkgbmFtZS4gSXQgY2Fubm90IGhhdmUgYQogICAgICAgICAgICAgLy8gaGF2ZSAnaW5pdGlhbCcg
dmFsdWUgYW5kIGNhbm5vdCAnaW5oZXJpdCcgZnJvbSBwYXJlbnQuCiAgICAgICAgICAgICAvLyBT
ZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzMy1mb250cy8jZm9udC1mYW1pbHktZGVzYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGUzOTFiMzkuLmM4MDRlNGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKQEAgLTk4LDcgKzk4LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IHBhcnNlRmlsbFBvc2l0aW9uWChDU1NQYXJzZXJWYWx1ZUxpc3QqKTsKICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZUZpbGxQb3NpdGlvblkoQ1NTUGFyc2VyVmFsdWVMaXN0Kik7CiAg
ICAgdm9pZCBwYXJzZUZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqLCBSZWZQdHI8Q1NT
VmFsdWU+JiwgUmVmUHRyPENTU1ZhbHVlPiYpOwotICAgIAorCiAgICAgdm9pZCBwYXJzZUZpbGxS
ZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZUZpbGxTaXplKGludCBwcm9wSWQsIGJvb2wgJmFsbG93Q29tbWEp
OwogCkBAIC0zMDUsNyArMzA1LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgc2V0
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7Ci0gICAgCisKICAgICB2b2lkIHJlY2hlY2tBdEtl
eXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbik7CiAKICAgICB2b2lkIHNldHVwUGFyc2Vy
KGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3VmZml4KTsK
QEAgLTM4NSw3ICszODUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHZhbGlkVW5pdChD
U1NQYXJzZXJWYWx1ZSosIFVuaXRzLCBib29sIHN0cmljdCk7CiAKICAgICBib29sIHBhcnNlQm9y
ZGVySW1hZ2VRdWFkKFVuaXRzLCBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+Jik7Ci0gICAgCisK
ICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoQ1NTUGFyc2VyVmFsdWUqKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSopOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCmluZGV4IDNlOTcwMTMuLjA2ODgzMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAgICAg
CisKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIENTU1BhcnNlclZhbHVlTGlzdDo6fkNTU1BhcnNl
clZhbHVlTGlzdCgpCkBAIC01MCw3ICs1MCw3IEBAIHZvaWQgQ1NTUGFyc2VyVmFsdWVMaXN0Ojpp
bnNlcnRWYWx1ZUF0KHVuc2lnbmVkIGksIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2KQogfQogCiB2
b2lkIENTU1BhcnNlclZhbHVlTGlzdDo6ZGVsZXRlVmFsdWVBdCh1bnNpZ25lZCBpKQoteyAKK3sK
ICAgICBtX3ZhbHVlcy5yZW1vdmUoaSk7CiB9CiAKQEAgLTg1LDcgKzg1LDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyVmFsdWU6OmNyZWF0ZUNTU1ZhbHVlKCkKICAgICAgICAgcGFy
c2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQWxsb3dpbmdNYXJnaW5RdWlyayhm
VmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKICAgICByZXR1cm4gcGFyc2VkVmFs
dWU7CiB9Ci0gICAgCisKIENTU1BhcnNlclNlbGVjdG9yOjpDU1NQYXJzZXJTZWxlY3RvcigpCiAg
ICAgOiBtX3NlbGVjdG9yKGFkb3B0UHRyKGZhc3ROZXc8Q1NTU2VsZWN0b3I+KCkpKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCmluZGV4IDQ5ZjAxZDAuLmNiNWM5MDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKQEAgLTU2LDggKzU2LDggQEAgc3RydWN0IENT
U1BhcnNlclZhbHVlIHsKICAgICAgICAgUV9FTVMgICAgPSAweDEwMDAwMgogICAgIH07CiAgICAg
aW50IHVuaXQ7Ci0gICAgCi0gICAgCisKKwogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNyZWF0
ZUNTU1ZhbHVlKCk7CiB9OwogCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIH5DU1NQYXJzZXJWYWx1ZUxpc3QoKTsKLSAgICAKKwogICAgIHZvaWQgYWRkVmFsdWUo
Y29uc3QgQ1NTUGFyc2VyVmFsdWUmKTsKICAgICB2b2lkIGluc2VydFZhbHVlQXQodW5zaWduZWQs
IGNvbnN0IENTU1BhcnNlclZhbHVlJik7CiAgICAgdm9pZCBkZWxldGVWYWx1ZUF0KHVuc2lnbmVk
KTsKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENTU1BhcnNlclZhbHVl
KiB2YWx1ZUF0KHVuc2lnbmVkIGkpIHsgcmV0dXJuIGkgPCBtX3ZhbHVlcy5zaXplKCkgPyAmbV92
YWx1ZXNbaV0gOiAwOyB9Ci0gICAgICAgIAorCiAgICAgdm9pZCBjbGVhcigpIHsgbV92YWx1ZXMu
Y2xlYXIoKTsgfQogCiBwcml2YXRlOgpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB+
Q1NTUGFyc2VyU2VsZWN0b3IoKTsKIAogICAgIFBhc3NPd25QdHI8Q1NTU2VsZWN0b3I+IHJlbGVh
c2VTZWxlY3RvcigpIHsgcmV0dXJuIG1fc2VsZWN0b3IucmVsZWFzZSgpOyB9Ci0gICAgCisKICAg
ICB2b2lkIHNldFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5z
ZXRUYWcodmFsdWUpOyB9CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKSB7IG1fc2VsZWN0b3ItPnNldFZhbHVlKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0QXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0
ZSh2YWx1ZSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4
IDQ1NjRlMzEuLjVmOWE2ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcApAQCAtNDEyLDcgKzQxMiw3IEBAIGRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZUxlbmd0aERvdWJsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByCiAgICAgZG91
YmxlIHJlc3VsdCA9IGdldERvdWJsZVZhbHVlKCkgKiBmYWN0b3I7CiAgICAgaWYgKCFhcHBseVpv
b21NdWx0aXBsaWVyIHx8IG11bHRpcGxpZXIgPT0gMS4wKQogICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAKKwogICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91
bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLiAgVGhpcyBrZWVwcyBib3JkZXIgbGlu
ZXMgZnJvbQogICAgIC8vIHZhbmlzaGluZy4KICAgICBkb3VibGUgem9vbWVkUmVzdWx0ID0gcmVz
dWx0ICogbXVsdGlwbGllcjsKQEAgLTQyMyw3ICs0MjMsNyBAQCBkb3VibGUgQ1NTUHJpbWl0aXZl
VmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcgogCiB2b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRGbG9hdFZhbHVlKHVuc2lnbmVkIHNo
b3J0LCBkb3VibGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIC8vIEtlZXBpbmcgdmFsdWVz
IGltbXV0YWJsZSBtYWtlcyBvcHRpbWl6YXRpb25zIGVhc2llciBhbmQgYWxsb3dzIHNoYXJpbmcg
b2YgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvYmplY3RzLiAKKyAgICAvLyBLZWVwaW5nIHZhbHVlcyBp
bW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNpZXIgYW5kIGFsbG93cyBzaGFyaW5nIG9m
IHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4KICAgICAvLyBObyBvdGhlciBlbmdpbmUgc3Vw
cG9ydHMgbXV0YXRpbmcgc3R5bGUgdGhyb3VnaCB0aGlzIEFQSS4gQ29tcHV0ZWQgc3R5bGUgaXMg
YWx3YXlzIHJlYWQtb25seSBhbnl3YXkuCiAgICAgLy8gU3VwcG9ydGluZyBzZXR0ZXIgd291bGQg
cmVxdWlyZSBtYWtpbmcgcHJpbWl0aXZlIHZhbHVlIGNvcHktb24td3JpdGUgYW5kIHRha2luZyBj
YXJlIG9mIHN0eWxlIGludmFsaWRhdGlvbi4KICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjsKQEAgLTU2OCw3ICs1NjgsNyBAQCBib29sIENTU1ByaW1pdGl2ZVZhbHVlOjpnZXRE
b3VibGVWYWx1ZUludGVybmFsKFVuaXRUeXBlcyByZXF1ZXN0ZWRVbml0VHlwZSwgZG91YgogCiB2
b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRTdHJpbmdWYWx1ZSh1bnNpZ25lZCBzaG9ydCwgY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8gS2VlcGluZyB2YWx1ZXMg
aW1tdXRhYmxlIG1ha2VzIG9wdGltaXphdGlvbnMgZWFzaWVyIGFuZCBhbGxvd3Mgc2hhcmluZyBv
ZiB0aGUgcHJpbWl0aXZlIHZhbHVlIG9iamVjdHMuIAorICAgIC8vIEtlZXBpbmcgdmFsdWVzIGlt
bXV0YWJsZSBtYWtlcyBvcHRpbWl6YXRpb25zIGVhc2llciBhbmQgYWxsb3dzIHNoYXJpbmcgb2Yg
dGhlIHByaW1pdGl2ZSB2YWx1ZSBvYmplY3RzLgogICAgIC8vIE5vIG90aGVyIGVuZ2luZSBzdXBw
b3J0cyBtdXRhdGluZyBzdHlsZSB0aHJvdWdoIHRoaXMgQVBJLiBDb21wdXRlZCBzdHlsZSBpcyBh
bHdheXMgcmVhZC1vbmx5IGFueXdheS4KICAgICAvLyBTdXBwb3J0aW5nIHNldHRlciB3b3VsZCBy
ZXF1aXJlIG1ha2luZyBwcmltaXRpdmUgdmFsdWUgY29weS1vbi13cml0ZSBhbmQgdGFraW5nIGNh
cmUgb2Ygc3R5bGUgaW52YWxpZGF0aW9uLgogICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCA2ZTU2NWFi
Li40NmYzNjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtODMs
MTUgKzgzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTX1BBSVIgPSAxMDAsIC8vIFdlIGVudmlz
aW9uIHRoaXMgYmVpbmcgZXhwb3NlZCBhcyBhIG1lYW5zIG9mIGdldHRpbmcgY29tcHV0ZWQgc3R5
bGUgdmFsdWVzIGZvciBwYWlycyAoYm9yZGVyLXNwYWNpbmcvcmFkaXVzLCBiYWNrZ3JvdW5kLXBv
c2l0aW9uLCBldGMuKQogICAgICAgICBDU1NfREFTSEJPQVJEX1JFR0lPTiA9IDEwMSwgLy8gRklY
TUU6IERhc2hib2FyZCByZWdpb24gc2hvdWxkIG5vdCBiZSBhIHByaW1pdGl2ZSB2YWx1ZS4KICAg
ICAgICAgQ1NTX1VOSUNPREVfUkFOR0UgPSAxMDIsCi0gICAgICAgIAorCiAgICAgICAgIC8vIFRo
ZXNlIG5leHQgdHlwZXMgYXJlIGp1c3QgdXNlZCBpbnRlcm5hbGx5IHRvIGFsbG93IHVzIHRvIHRy
YW5zbGF0ZSBiYWNrIGFuZCBmb3J0aCBmcm9tIENTU1ByaW1pdGl2ZVZhbHVlcyB0byBDU1NQYXJz
ZXJWYWx1ZXMuCiAgICAgICAgIENTU19QQVJTRVJfT1BFUkFUT1IgPSAxMDMsCiAgICAgICAgIENT
U19QQVJTRVJfSU5URUdFUiA9IDEwNCwKICAgICAgICAgQ1NTX1BBUlNFUl9IRVhDT0xPUiA9IDEw
NSwKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciB1bmtu
b3duIGlkZW50aWZpZXJzIAorCisgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGZv
ciB1bmtub3duIGlkZW50aWZpZXJzCiAgICAgICAgIENTU19QQVJTRVJfSURFTlRJRklFUiA9IDEw
NiwKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlc2UgYXJlIGZyb20gQ1NTMyBWYWx1ZXMgYW5k
IFVuaXRzLCBidXQgdGhhdCBpc24ndCBhIGZpbmlzaGVkIHN0YW5kYXJkIHlldAogICAgICAgICBD
U1NfVFVSTiA9IDEwNywKICAgICAgICAgQ1NTX1JFTVMgPSAxMDgsCkBAIC0xMDEsMTEgKzEwMSwx
MSBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGJ5IHRoZSBDU1MgRXhjbHVz
aW9ucyBkcmFmdAogICAgICAgICBDU1NfU0hBUEUgPSAxMTAsCi0gICAgICAgIAorCiAgICAgICAg
IC8vIFVzZWQgYnkgYm9yZGVyIGltYWdlcy4KICAgICAgICAgQ1NTX1FVQUQgPSAxMTEKICAgICB9
OwotICAgIAorCiAgICAgLy8gVGhpcyBlbnVtIGZvbGxvd3MgdGhlIENTU1BhcnNlcjo6VW5pdHMg
ZW51bSBhdWdtZW50ZWQgd2l0aCBVTklUX0ZSRVFVRU5DWSBmb3IgZnJlcXVlbmNpZXMuCiAgICAg
ZW51bSBVbml0Q2F0ZWdvcnkgewogICAgICAgICBVTnVtYmVyLApAQCAtMTI2LDcgKzEyNiw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRl
Q29sb3IodW5zaWduZWQgcmdiVmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShyZ2JWYWx1ZSkpOyB9CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIHR5cGUpKTsgfQogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2YWx1ZSwg
VW5pdFR5cGVzIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSwgdHlwZSkpOyB9Ci0gICAgCisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKFQgdmFsdWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSk7CkBAIC0x
NjMsNyArMTYzLDcgQEAgcHVibGljOgogCiAgICAgLy8gdXNlIHdpdGggY2FyZSEhIQogICAgIHZv
aWQgc2V0UHJpbWl0aXZlVHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7
IH0KLSAgICAKKwogICAgIGRvdWJsZSBnZXREb3VibGVWYWx1ZSh1bnNpZ25lZCBzaG9ydCB1bml0
VHlwZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIGRvdWJsZSBnZXREb3VibGVWYWx1ZSh1
bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkgY29uc3Q7CiAgICAgZG91YmxlIGdldERvdWJsZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5udW07IH0KQEAgLTE5Myw3ICsxOTMsNyBAQCBwdWJs
aWM6CiAKICAgICBRdWFkKiBnZXRRdWFkVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IFF1YWQqIGdldFF1YWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUVVBRCA/
IDAgOiBtX3ZhbHVlLnF1YWQ7IH0KLSAgICAKKwogICAgIFBhc3NSZWZQdHI8UkdCQ29sb3I+IGdl
dFJHQkNvbG9yVmFsdWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIFJHQkEzMiBnZXRSR0JB
MzJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSAhPSBDU1NfUkdCQ09MT1IgPyAwIDogbV92
YWx1ZS5yZ2Jjb2xvcjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWVDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWVDYWNoZS5jcHAKaW5kZXggM2FkYWRmOC4uYTViNTg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmNwcApAQCAtNjUsNyArNjUsNyBAQCBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlOjpjcmVhdGVDb2xv
clZhbHVlKHVuc2lnbmVkCiAgICAgLy8gSnVzdCBiZWNhdXNlIGl0IGlzIGNvbW1vbi4KICAgICBp
ZiAocmdiVmFsdWUgPT0gQ29sb3I6OmJsYWNrKQogICAgICAgICByZXR1cm4gbV9jb2xvckJsYWNr
OwotICAgIAorCiAgICAgLy8gSnVzdCB3aXBlIG91dCB0aGUgY2FjaGUgYW5kIHN0YXJ0IHJlYnVp
bGRpbmcgaWYgaXQgZ2V0cyB0b28gYmlnLgogICAgIGNvbnN0IGludCBtYXhpbXVtQ29sb3JDYWNo
ZVNpemUgPSA1MTI7CiAgICAgaWYgKG1fY29sb3JWYWx1ZUNhY2hlLnNpemUoKSA+IG1heGltdW1D
b2xvckNhY2hlU2l6ZSkKQEAgLTg4LDcgKzg4LDcgQEAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZTo6Y3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLAog
ICAgIGludCBpbnRWYWx1ZSA9IHN0YXRpY19jYXN0PGludD4odmFsdWUpOwogICAgIGlmICh2YWx1
ZSAhPSBpbnRWYWx1ZSkKICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWUsIHR5cGUpOwotICAgIAorCiAgICAgSW50ZWdlclZhbHVlQ2FjaGUqIGNhY2hlOwogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5oCmluZGV4IDhiZTNiNTIu
LjYzMmFjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUu
aApAQCAtMjIsNyArMjIsNyBAQAogICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCi0gCisKICNpZm5kZWYgQ1NTUHJpbWl0aXZlVmFsdWVDYWNo
ZV9oCiAjZGVmaW5lIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGVfaAogCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisK
IGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWVDYWNoZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ByaW1p
dGl2ZVZhbHVlQ2FjaGUpOyB9CkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpOwogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNyZWF0ZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMgdHlwZSkgeyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlw
ZSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gY3JlYXRlVmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZSk7IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBDU1NQcmltaXRpdmVW
YWx1ZUNhY2hlKCk7CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IG1fY29sb3JUcmFuc3BhcmVudDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fY29sb3JXaGl0ZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
Y29sb3JCbGFjazsKLSAgICAKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gPiBJbnRlZ2VyVmFsdWVDYWNoZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fcGl4ZWxaZXJvOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9w
ZXJjZW50WmVybzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBw
aW5ncy5oCmluZGV4IDBiOWNjOGQuLjE0ZjgzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaApAQCAtOCwxMyArOCwxMyBAQAogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6Ci0gKiAKKyAqCiAgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1Ig
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgogICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogICogT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KQEAgLTI3MDgsNyArMjcwOCw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZShGb250U21vb3RoaW5nTW9kZSBzbW9vdGhp
CiAgICAgICAgIG1fdmFsdWUuaWRlbnQgPSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFsaWFzZWQ7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICBtX3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVBdXRvOwogfQpAQCAtMjcyNSw3ICsyNzI1LDcg
QEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIEZvbnRTbW9v
dGhpbmdNb2RlKCkgY29uc3QKICAgICBjYXNlIENTU1ZhbHVlU3VicGl4ZWxBbnRpYWxpYXNlZDoK
ICAgICAgICAgcmV0dXJuIFN1YnBpeGVsQW50aWFsaWFzZWQ7CiAgICAgfQotICAgIAorCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEF1dG9TbW9vdGhpbmc7CiB9CkBAIC0y
OTg1LDcgKzI5ODUsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
UHJpbWl0aXZlVmFsdWUoRVNwZWFrIGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KLSAgICAK
KwogdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFsdWU6Om9wZXJhdG9yIE9yZGVyKCkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdmFsdWUuaWRlbnQpIHsKQEAgLTM2MTAsNyArMzYxMCw3
IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBFVmVjdG9y
RWZmZWN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIFZFX05PTkU7CiAgICAgfQogfQotICAgIAor
CiAjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5jcHAKaW5kZXggMWUwNGRhNy4u
NjliMmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3BwCkBAIC00OCw3ICs0OCw3IEBA
IHN0YXRpYyBpbnQgcmVzb2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiwgV3JpdGluZ01vZGUgd3JpdGluCiAgICAgICAgICAgICAvLyBMZWZ0ID0gU3RhcnQsIFJp
Z2h0ID0gRW5kLCBCZWZvcmUgPSBUb3AsIEFmdGVyID0gQm90dG9tCiAgICAgICAgICAgICByZXR1
cm4gcHJvcGVydGllc1tsb2dpY2FsU2lkZV07CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKHdyaXRpbmdNb2RlID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUpIHsKICAgICAgICAg
ICAgIC8vIFN0YXJ0ID0gTGVmdCwgRW5kID0gUmlnaHQsIEJlZm9yZSA9IEJvdHRvbSwgQWZ0ZXIg
PSBUb3AuCiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxTaWRlKSB7CkBAIC02Miw3ICs2Miw3
IEBAIHN0YXRpYyBpbnQgcmVzb2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluCiAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3Bl
cnRpZXNbVG9wU2lkZV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgaWYgKHdyaXRpbmdNb2RlID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpIHsKICAgICAg
ICAgICAgIC8vIFN0YXJ0ID0gVG9wLCBFbmQgPSBCb3R0b20sIEJlZm9yZSA9IExlZnQsIEFmdGVy
ID0gUmlnaHQuCiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxTaWRlKSB7CkBAIC03Niw3ICs3
Niw3IEBAIHN0YXRpYyBpbnQgcmVzb2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBy
b3BlcnRpZXNbUmlnaHRTaWRlXTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICAvLyBTdGFydCA9IFRvcCwgRW5kID0gQm90dG9tLCBCZWZvcmUgPSBSaWdodCwg
QWZ0ZXIgPSBMZWZ0CiAgICAgICAgIHN3aXRjaCAobG9naWNhbFNpZGUpIHsKICAgICAgICAgY2Fz
ZSBTdGFydFNpZGU6CkBAIC0xMDMsNyArMTAzLDcgQEAgc3RhdGljIGludCByZXNvbHZlVG9QaHlz
aWNhbFByb3BlcnR5KFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW4K
ICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW0JvdHRvbVNpZGVdOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKHdyaXRpbmdNb2RlID09IEJvdHRvbVRvVG9wV3JpdGluZ01v
ZGUpIHsKICAgICAgICAgLy8gU3RhcnQgPSBSaWdodCwgRW5kID0gTGVmdCwgQmVmb3JlID0gQm90
dG9tLCBBZnRlciA9IFRvcAogICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxTaWRlKSB7CkBAIC0xMTcs
NyArMTE3LDcgQEAgc3RhdGljIGludCByZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5KFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW4KICAgICAgICAgICAgIHJldHVybiBw
cm9wZXJ0aWVzW1RvcFNpZGVdOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKHdy
aXRpbmdNb2RlID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGUpIHsKICAgICAgICAgLy8gU3RhcnQg
PSBCb3R0b20sIEVuZCA9IFRvcCwgQmVmb3JlID0gTGVmdCwgQWZ0ZXIgPSBSaWdodAogICAgICAg
ICBzd2l0Y2ggKGxvZ2ljYWxTaWRlKSB7CkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGljIGludCBy
ZXNvbHZlVG9QaHlzaWNhbFByb3BlcnR5KFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5n
TW9kZSB3cml0aW4KICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW1JpZ2h0U2lkZV07CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBTdGFydCA9IEJvdHRvbSwgRW5kID0gVG9w
LCBCZWZvcmUgPSBSaWdodCwgQWZ0ZXIgPSBMZWZ0CiAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkg
ewogICAgIGNhc2UgU3RhcnRTaWRlOgpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyBpbnQgcmVz
b2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgTG9naWNhbEV4
dGVudCBsb2dpCiAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzW2xvZ2ljYWxTaWRlXTsKICAgICBy
ZXR1cm4gbG9naWNhbFNpZGUgPT0gTG9naWNhbFdpZHRoID8gcHJvcGVydGllc1sxXSA6IHByb3Bl
cnRpZXNbMF07CiB9Ci0gICAgICAgIAorCiBpbnQgQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCiB7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxDU1NQ
cm9wZXJ0eUlEPihwcm9wZXJ0eUlEKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1Byb3BlcnR5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaAppbmRleCA0
YTQ2ZmMyLi4yN2M4NmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuaApAQCAtNTgsNyArNTgs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ltcGxpY2l0KCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
aWNpdDsgfQogCiAgICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5n
ZXQoKTsgfQotICAgIAorCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIHN0YXRp
YyBpbnQgcmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIFRleHRE
aXJlY3Rpb24sIFdyaXRpbmdNb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eUxvbmdoYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eUxv
bmdoYW5kLmNwcAppbmRleCA3MzcyYTU0Li43ZDE4MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHlMb25naGFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwCkBAIC0yMDYsMTMgKzIwNiwxMyBAQCBzdGF0aWMgdm9p
ZCBpbml0U2hvcnRoYW5kTWFwKFNob3J0aGFuZE1hcCYgc2hvcnRoYW5kTWFwKQogICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblkKICAgICB9OwogICAgIFNFVF9TSE9SVEhB
TkRfTUFQX0VOVFJZKHNob3J0aGFuZE1hcCwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW4sIHRyYW5zZm9ybU9yaWdpblByb3BlcnRpZXMpOwotICAgIAorCiAgICAgc3RhdGljIGNvbnN0
IGludCB0ZXh0RW1waGFzaXNQcm9wZXJ0aWVzW10gPSB7CiAgICAgICAgIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEVtcGhhc2lzQ29sb3IsCiAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhh
c2lzU3R5bGUKICAgICB9OwogICAgIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZKHNob3J0aGFuZE1h
cCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXMsIHRleHRFbXBoYXNpc1Byb3BlcnRpZXMp
OwotICAgIAorCiAgICAgI3VuZGVmIFNFVF9TSE9SVEhBTkRfTUFQX0VOVFJZCiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAKaW5kZXggYThjYTU5ZS4uZGRjM2NlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNTIsNyArNTIsNyBA
QCBTdHJpbmcgQ1NTUmVmbGVjdFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJlc3VsdCArPSBtX29m
ZnNldC0+Y3NzVGV4dCgpICsgIiAiOwogICAgIGlmIChtX21hc2spCiAgICAgICAgIHJlc3VsdCAr
PSBtX21hc2stPmNzc1RleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
ZWZsZWN0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAppbmRl
eCAxZGNiMWJlLi41ODA3NmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVm
bGVjdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCkBA
IC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTUmVmbGVj
dFZhbHVlX2gKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNSZWZsZWN0VmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCisKICAg
ICBDU1NSZWZsZWN0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV9vZmZzZXQ7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtX21hc2s7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3Rpb25EaXJlY3Rpb24uaAppbmRleCA1YTBjMjAzLi5l
MzBiYzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdGlvbkRpcmVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmgK
QEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NSZWZs
ZWN0aW9uRGlyZWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZh
Y2UuY3BwCmluZGV4IDgwOWY0YWIuLjRhNDU4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlZ21lbnRlZEZvbnRGYWNlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50
ZWRGb250RmFjZS5oCmluZGV4IDAzZWJlNGEuLjNlZmM0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpZm5kZWYgQ1NTU2VnbWVudGVkRm9udEZhY2VfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
ZWxlY3Rvci5jcHAKaW5kZXggNmJlYTk5Yi4uZTk1ZDI1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3IuY3BwCkBAIC0zNywxMCArMzcsMTAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLSAgICAKKwogdm9pZCBDU1NTZWxlY3Rvcjo6Y3JlYXRl
UmFyZURhdGEoKQogewotICAgIGlmIChtX2hhc1JhcmVEYXRhKSAKKyAgICBpZiAobV9oYXNSYXJl
RGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE1vdmUgdGhlIHZhbHVlIHRvIHRoZSByYXJl
IGRhdGEgc3R1Y3R1cmUuCiAgICAgbV9kYXRhLm1fcmFyZURhdGEgPSBuZXcgUmFyZURhdGEoYWRv
cHRSZWYobV9kYXRhLm1fdmFsdWUpKTsKQEAgLTE1MCw3ICsxNTAsNyBAQCBQc2V1ZG9JZCBDU1NT
ZWxlY3Rvcjo6cHNldWRvSWQoUHNldWRvVHlwZSB0eXBlKQogICAgIGNhc2UgUHNldWRvQW5pbWF0
aW5nRnVsbFNjcmVlblRyYW5zaXRpb246CiAgICAgICAgIHJldHVybiBBTklNQVRJTkdfRlVMTF9T
Q1JFRU5fVFJBTlNJVElPTjsKICNlbmRpZgotICAgICAgICAgICAgCisKICAgICBjYXNlIFBzZXVk
b0lucHV0TGlzdEJ1dHRvbjoKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgICAgIHJldHVybiBJ
TlBVVF9MSVNUX0JVVFRPTjsKQEAgLTY0MCwyMSArNjQwLDIxIEBAIFN0cmluZyBDU1NTZWxlY3Rv
cjo6c2VsZWN0b3JUZXh0KCkgY29uc3QKICAgICByZXR1cm4gc3RyOwogfQogCi12b2lkIENTU1Nl
bGVjdG9yOjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIAoteyAKLSAg
ICBjcmVhdGVSYXJlRGF0YSgpOyAKLSAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUg
PSB2YWx1ZTsgCit2b2lkIENTU1NlbGVjdG9yOjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdmFsdWUpCit7CisgICAgY3JlYXRlUmFyZURhdGEoKTsKKyAgICBtX2RhdGEubV9yYXJl
RGF0YS0+bV9hdHRyaWJ1dGUgPSB2YWx1ZTsKIH0KLSAgICAKLXZvaWQgQ1NTU2VsZWN0b3I6OnNl
dEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIAoteyAKLSAgICBjcmVhdGVSYXJl
RGF0YSgpOyAKLSAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1bWVudCA9IHZhbHVlOyAKKwor
dm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBjcmVhdGVSYXJlRGF0YSgpOworICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2FyZ3Vt
ZW50ID0gdmFsdWU7CiB9Ci0gICAgCisKIHZvaWQgQ1NTU2VsZWN0b3I6OnNldFNlbGVjdG9yTGlz
dChQYXNzT3duUHRyPENTU1NlbGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0KQogewotICAgIGNyZWF0
ZVJhcmVEYXRhKCk7IAorICAgIGNyZWF0ZVJhcmVEYXRhKCk7CiAgICAgbV9kYXRhLm1fcmFyZURh
dGEtPm1fc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3JMaXN0OwogfQogCkBAIC03MTMsMTUgKzcxMywx
NSBAQCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5SYXJlRGF0YSgpCiAgICAgaWYgKG1fdmFsdWUp
CiAgICAgICAgIG1fdmFsdWUtPmRlcmVmKCk7CiB9Ci0gICAgCisKIC8vIGEgaGVscGVyIGZ1bmN0
aW9uIGZvciBwYXJzaW5nIG50aC1hcmd1bWVudHMKIGJvb2wgQ1NTU2VsZWN0b3I6OlJhcmVEYXRh
OjpwYXJzZU50aCgpCiB7CiAgICAgU3RyaW5nIGFyZ3VtZW50ID0gbV9hcmd1bWVudC5sb3dlcigp
OwotICAgIAorCiAgICAgaWYgKGFyZ3VtZW50LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAorCiAgICAgbV9hID0gMDsKICAgICBtX2IgPSAwOwogICAgIGlmIChhcmd1bWVu
dCA9PSAib2RkIikgewpAQCAtNzQyLDcgKzc0Miw3IEBAIGJvb2wgQ1NTU2VsZWN0b3I6OlJhcmVE
YXRhOjpwYXJzZU50aCgpCiAgICAgICAgICAgICAgICAgbV9hID0gMTsgLy8gbiA9PSAxbgogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fYSA9IGFyZ3VtZW50LnN1YnN0cmluZygw
LCBuKS50b0ludCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHNpemVfdCBwID0gYXJn
dW1lbnQuZmluZCgnKycsIG4pOwogICAgICAgICAgICAgaWYgKHAgIT0gbm90Rm91bmQpCiAgICAg
ICAgICAgICAgICAgbV9iID0gYXJndW1lbnQuc3Vic3RyaW5nKHAgKyAxLCBhcmd1bWVudC5sZW5n
dGgoKSAtIHAgLSAxKS50b0ludCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAppbmRleCA2MTYx
YWY5Li5hZmQ1MmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaApAQCAtMjE1LDEyICsyMTUs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgYm9vbCBpc1Vua25vd25Q
c2V1ZG9UeXBlKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgICAgICBzdGF0aWMgUHNldWRvSWQg
cHNldWRvSWQoUHNldWRvVHlwZSk7CiAKLSAgICAgICAgLy8gU2VsZWN0b3JzIGFyZSBrZXB0IGlu
IGFuIGFycmF5IGJ5IENTU1NlbGVjdG9yTGlzdC4gVGhlIG5leHQgY29tcG9uZW50IG9mIHRoZSBz
ZWxlY3RvciBpcyAKKyAgICAgICAgLy8gU2VsZWN0b3JzIGFyZSBrZXB0IGluIGFuIGFycmF5IGJ5
IENTU1NlbGVjdG9yTGlzdC4gVGhlIG5leHQgY29tcG9uZW50IG9mIHRoZSBzZWxlY3RvciBpcwog
ICAgICAgICAvLyB0aGUgbmV4dCBpdGVtIGluIHRoZSBhcnJheS4KICAgICAgICAgQ1NTU2VsZWN0
b3IqIHRhZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2lzTGFzdEluVGFnSGlzdG9yeSA/IDAg
OiBjb25zdF9jYXN0PENTU1NlbGVjdG9yKj4odGhpcyArIDEpOyB9CiAKICAgICAgICAgYm9vbCBo
YXNUYWcoKSBjb25zdCB7IHJldHVybiBtX3RhZyAhPSBhbnlRTmFtZSgpOyB9Ci0gICAgICAgIAor
CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZygpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
OyB9CiAgICAgICAgIC8vIEF0b21pY1N0cmluZyBpcyByZWFsbHkganVzdCBhbiBBdG9taWNTdHJp
bmdJbXBsKiBzbyB0aGUgY2FzdCBiZWxvdyBpcyBzYWZlLgogICAgICAgICAvLyBGSVhNRTogUGVy
aGFwcyBjYWxsIHNpdGVzIGNvdWxkIGJlIGNoYW5nZWQgdG8gYWNjZXB0IEF0b21pY1N0cmluZ0lt
cGw/CkBAIC0yMzQsNyArMjM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgICAgIHZvaWQgc2V0QXJn
dW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0b3JMaXN0
KFBhc3NPd25QdHI8Q1NTU2VsZWN0b3JMaXN0Pik7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wg
cGFyc2VOdGgoKTsKICAgICAgICAgYm9vbCBtYXRjaE50aChpbnQgY291bnQpOwogCkBAIC0yNTgs
OSArMjU4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB1bnNpZ25lZCBtX3JlbGF0
aW9uICAgICAgICAgICA6IDM7IC8vIGVudW0gUmVsYXRpb24KICAgICAgICAgbXV0YWJsZSB1bnNp
Z25lZCBtX21hdGNoICAgICAgOiA0OyAvLyBlbnVtIE1hdGNoCiAgICAgICAgIG11dGFibGUgdW5z
aWduZWQgbV9wc2V1ZG9UeXBlIDogODsgLy8gUHNldWRvVHlwZQotICAgICAgICAKKwogICAgIHBy
aXZhdGU6Ci0gICAgICAgIGJvb2wgbV9wYXJzZWROdGggICAgICAgICAgICAgIDogMTsgLy8gVXNl
ZCBmb3IgOm50aC0qIAorICAgICAgICBib29sIG1fcGFyc2VkTnRoICAgICAgICAgICAgICA6IDE7
IC8vIFVzZWQgZm9yIDpudGgtKgogICAgICAgICBib29sIG1faXNMYXN0SW5TZWxlY3Rvckxpc3Qg
ICA6IDE7CiAgICAgICAgIGJvb2wgbV9pc0xhc3RJblRhZ0hpc3RvcnkgICAgIDogMTsKICAgICAg
ICAgYm9vbCBtX2hhc1JhcmVEYXRhICAgICAgICAgICAgOiAxOwpAQCAtMjg3LDI1ICsyODcsMjUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgT3duUHRyPENTU1NlbGVjdG9yTGlz
dD4gbV9zZWxlY3Rvckxpc3Q7IC8vIFVzZWQgZm9yIDotd2Via2l0LWFueSBhbmQgOm5vdAogICAg
ICAgICB9OwogICAgICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhKCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIHVuaW9uIERhdGFVbmlvbiB7CiAgICAgICAgICAgICBEYXRhVW5pb24oKSA6IG1fdmFsdWUo
MCkgeyB9CiAgICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOwogICAgICAgICAg
ICAgUmFyZURhdGEqIG1fcmFyZURhdGE7CiAgICAgICAgIH0gbV9kYXRhOwotICAgICAgICAKKwog
ICAgICAgICBRdWFsaWZpZWROYW1lIG1fdGFnOwogICAgIH07CiAKIGlubGluZSBjb25zdCBRdWFs
aWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6YXR0cmlidXRlKCkgY29uc3QKLXsgCit7CiAgICAgQVNT
RVJUKGlzQXR0cmlidXRlU2VsZWN0b3IoKSk7CiAgICAgQVNTRVJUKG1faGFzUmFyZURhdGEpOwog
ICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGU7CiB9Ci0gICAgCi1pbmxp
bmUgYm9vbCBDU1NTZWxlY3Rvcjo6bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBjb25zdCAKLXsgCisK
K2lubGluZSBib29sIENTU1NlbGVjdG9yOjptYXRjaGVzUHNldWRvRWxlbWVudCgpIGNvbnN0Cit7
CiAgICAgaWYgKG1fcHNldWRvVHlwZSA9PSBQc2V1ZG9Vbmtub3duKQogICAgICAgICBleHRyYWN0
UHNldWRvVHlwZSgpOwogICAgIHJldHVybiBtX21hdGNoID09IFBzZXVkb0VsZW1lbnQ7CkBAIC0z
NjEsNyArMzYxLDcgQEAgaW5saW5lIHZvaWQgQ1NTU2VsZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCiAgICAgbV9kYXRhLm1fdmFsdWUtPnJlZigpOwogfQogCi1pbmxp
bmUgdm9pZCBtb3ZlKFBhc3NPd25QdHI8Q1NTU2VsZWN0b3I+IGZyb20sIENTU1NlbGVjdG9yKiB0
bykgCitpbmxpbmUgdm9pZCBtb3ZlKFBhc3NPd25QdHI8Q1NTU2VsZWN0b3I+IGZyb20sIENTU1Nl
bGVjdG9yKiB0bykKIHsKICAgICBtZW1jcHkodG8sIGZyb20uZ2V0KCksIHNpemVvZihDU1NTZWxl
Y3RvcikpOwogICAgIC8vIFdlIHdhbnQgdG8gZnJlZSB0aGUgbWVtb3J5ICh3aGljaCB3YXMgYWxs
b2NhdGVkIHdpdGggZmFzdE5ldyksIGJ1dCB3ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JM
aXN0LmNwcAppbmRleCA4NGFjOWVjLi45YjBmYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3JMaXN0LmNwcApAQCAtMjEsNyArMjEsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCkBAIC0zMSwxMSArMzEsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DU1NTZWxlY3Rvckxpc3Q6On5DU1NTZWxlY3Rvckxpc3QoKSAKK0NTU1NlbGVjdG9y
TGlzdDo6fkNTU1NlbGVjdG9yTGlzdCgpCiB7CiAgICAgZGVsZXRlU2VsZWN0b3JzKCk7CiB9Ci0g
ICAgCisKIHZvaWQgQ1NTU2VsZWN0b3JMaXN0OjphZG9wdChDU1NTZWxlY3Rvckxpc3QmIGxpc3Qp
CiB7CiAgICAgZGVsZXRlU2VsZWN0b3JzKCk7CkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgQ1NTU2Vs
ZWN0b3JMaXN0OjphZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2Vs
ZWN0b3I+ID4mIHNlCiAgICAgZGVsZXRlU2VsZWN0b3JzKCk7CiAgICAgY29uc3Qgc2l6ZV90IHZl
Y3RvclNpemUgPSBzZWxlY3RvclZlY3Rvci5zaXplKCk7CiAgICAgc2l6ZV90IGZsYXR0ZW5lZFNp
emUgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yU2l6ZTsgKytpKSB7ICAg
ICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3RvclNpemU7ICsraSkgewogICAg
ICAgICBmb3IgKENTU1BhcnNlclNlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yVmVjdG9yW2ld
LmdldCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpKQogICAg
ICAgICAgICAgKytmbGF0dGVuZWRTaXplOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ckxpc3QuaAppbmRleCAyMTlkNzRlLi43ZDQ1YTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yTGlzdC5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5k
ZWYgQ1NTU2VsZWN0b3JMaXN0X2gKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlICJDU1NTZWxl
Y3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIENTU1BhcnNlclNl
bGVjdG9yOwotICAgIAorCiBjbGFzcyBDU1NTZWxlY3Rvckxpc3QgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENTU1NlbGVjdG9yTGlzdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkb3B0KENTU1NlbGVj
dG9yTGlzdCYgbGlzdCk7CiAgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVjdG9yKTsKLSAgICAKKwogICAgIENT
U1NlbGVjdG9yKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JBcnJheSA/IG1fc2Vs
ZWN0b3JBcnJheSA6IDA7IH0KICAgICBzdGF0aWMgQ1NTU2VsZWN0b3IqIG5leHQoQ1NTU2VsZWN0
b3IqKTsKICAgICBib29sIGhhc09uZVNlbGVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rv
ckFycmF5ICYmICFuZXh0KG1fc2VsZWN0b3JBcnJheSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKaW5kZXggZmJiMjNhYy4uMTc4Y2IzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlQXBwbHlQcm9wZXJ0eS5jcHAKQEAgLTI2NCw3ICsy
NjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIChzZWxlY3Rvci0+c3R5bGUoKS0+Km1f
dmlzaXRlZExpbmtTZXR0ZXIpKHNlbGVjdG9yLT5nZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShw
cmltaXRpdmVWYWx1ZSwgdHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdm9p
ZCBhcHBseUNvbG9yVmFsdWUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IENvbG9y
JiBjb2xvcikgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChzZWxlY3Rvci0+YXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24u
aAppbmRleCA0YzlmNjMwLi40NDc5NzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURl
Y2xhcmF0aW9uLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRQcm9w
ZXJ0eVByaW9yaXR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICBTdHJpbmcgZ2V0
UHJvcGVydHlTaG9ydGhhbmQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wg
aXNQcm9wZXJ0eUltcGxpY2l0KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKLSAgICAKKwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVydHlJRCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGdldFByb3BlcnR5VmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJvcGVy
dHlQcmlvcml0eShpbnQgcHJvcGVydHlJRCkgY29uc3QgPSAwOwpAQCAtNjcsNyArNjcsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGNvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBtYWtlTXV0YWJsZSgpID0gMDsKLSAKKwogICAgIHZvaWQgZGlmZihD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OwogCiAgICAgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNl
dCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAppbmRleCA5N2M1OTRhLi5hYjIxYThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAgaWYgKGlkID09IHByb3BJRCkgeyBc
CiAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnByb3AoKSk7IFwKICAgICBy
ZXR1cm47IFwKIH0KLSAgICAKKwogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9DT05EX1dJVEhfQkFD
S1VQKHByb3BJRCwgcHJvcCwgcHJvcEFsdCwgUHJvcCkgXAogaWYgKGlkID09IHByb3BJRCkgeyBc
CiAgICAgaWYgKG1fcGFyZW50U3R5bGUtPnByb3AoKS5pc1ZhbGlkKCkpIFwKQEAgLTE5MiwxOSAr
MTkyLDE5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpb247IH0KICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X3J1bGU7IH0KICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdG9yOyB9Ci0gICAgCisKICAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9CiAgICAgYm9vbCBoYXNN
dWx0aXBhcnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7
IH0KICAgICBib29sIGhhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaDsgfQogICAgIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7
IH0KICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNp
dHk7IH0KICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9saW5r
TWF0Y2hUeXBlOyB9Ci0gICAgCisKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9y
eSB1c2FnZSAodGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2Qg
ZmlsdGVyaW5nIHBlcmZvcm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVt
SWRlbnRpZmllckNvdW50ID0gNDsKICAgICBjb25zdCB1bnNpZ25lZCogZGVzY2VuZGFudFNlbGVj
dG9ySWRlbnRpZmllckhhc2hlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlczsgfQogCi1wcml2YXRlOiAgICAKK3ByaXZhdGU6CiAgICAgQ1NTU3R5
bGVSdWxlKiBtX3J1bGU7CiAgICAgQ1NTU2VsZWN0b3IqIG1fc2VsZWN0b3I7CiAgICAgdW5zaWdu
ZWQgbV9zcGVjaWZpY2l0eTsKQEAgLTIyMyw5ICsyMjMsOSBAQCBjbGFzcyBSdWxlU2V0IHsKIHB1
YmxpYzoKICAgICBSdWxlU2V0KCk7CiAgICAgflJ1bGVTZXQoKTsKLSAgICAKKwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPFJ1bGVEYXRhPio+IEF0b21SdWxl
TWFwOwotICAgIAorCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0Kiwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCk7CiAKICAg
ICB2b2lkIGFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIGl0ZW0pOwpAQCAtMjM3LDcgKzIzNyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1No
cmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CiAKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhD
U1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYpIGNvbnN0OwotICAgIAorCiAgICAgY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiogaWRSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGNs
YXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVs
ZXMuZ2V0KGtleSk7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiB0YWdSdWxlcyhBdG9t
aWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0K
QEAgLTI0Niw3ICsyNDYsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFz
c1J1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBj
b25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3BhZ2VSdWxlczsgfQotICAgIAor
CiBwdWJsaWM6CiAgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwogICAgIEF0b21SdWxlTWFwIG1f
Y2xhc3NSdWxlczsKQEAgLTI2NSw3ICsyNjUsNyBAQCBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1
aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIFJ1
bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CiBzdGF0aWMgQ1NTU3R5bGVTaGVldCogc2lt
cGxlRGVmYXVsdFN0eWxlU2hlZXQ7Ci0gICAgCisKIHN0YXRpYyBSdWxlU2V0KiBzaWJsaW5nUnVs
ZXNJbkRlZmF1bHRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiB1bmNvbW1vbkF0dHJpYnV0ZVJ1bGVz
SW5EZWZhdWx0U3R5bGU7CiAKQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YXNzZXJ0Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpCiAgICAgQVNTRVJUKCFzaWJsaW5n
UnVsZXNJbkRlZmF1bHRTdHlsZSk7CiAjZW5kaWYKIH0KLSAgICAKKwogc3RhdGljIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIHNjcmVlbkV2YWwoKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciwgc3RhdGljU2NyZWVuRXZhbCwgKCJzY3JlZW4i
KSk7CkBAIC00MTgsNyArNDE4LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rv
cihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAg
U3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZVNoZWV0cy0+aXRlbShpKTsKICAgICAgICAgaWYgKHNo
ZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpCiAgICAgICAgICAg
ICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMpOwotICAgIH0gICAgCisgICAgfQogICAgIC8v
IENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBzZWxlY3RvcnMgKDpmaXJz
dC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVudCBzZXQgb2Ygc3R5bGVz
aGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3JtYXRpb24gdG8gcmVqZWN0
CiAgICAgLy8gc2hhcmluZyBjYW5kaWRhdGVzLgpAQCAtNDU4LDggKzQ1OCw4IEBAIENTU1N0eWxl
U2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKICAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xlYXJE
b2N1bWVudCgpOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHMpOwogfQotICAgIAotQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXM6OkZlYXR1
cmVzKCkgCisKK0NTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzOjpGZWF0dXJlcygpCiAgICAgOiB1
c2VzRmlyc3RMaW5lUnVsZXMoZmFsc2UpCiAgICAgLCB1c2VzQmVmb3JlQWZ0ZXJSdWxlcyhmYWxz
ZSkKICAgICAsIHVzZXNMaW5rUnVsZXMoZmFsc2UpCkBAIC01MTUsNyArNTE1LDcgQEAgc3RhdGlj
IHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCiB7CiAgICAgQVNTRVJUKCFkZWZhdWx0U3R5
bGUpOwogICAgIEFTU0VSVCghc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQpOwotICAgIAorCiAgICAg
ZGVmYXVsdFN0eWxlID0gbmV3IFJ1bGVTZXQ7CiAgICAgLy8gVGhlcmUgYXJlIG5vIG1lZGlhLXNw
ZWNpZmljIHJ1bGVzIGluIHRoZSBzaW1wbGUgZGVmYXVsdCBzdHlsZS4KICAgICBkZWZhdWx0UHJp
bnRTdHlsZSA9IGRlZmF1bHRTdHlsZTsKQEAgLTUyMywxMCArNTIzLDEwIEBAIHN0YXRpYyB2b2lk
IGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKQogCiAgICAgc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQg
PSBwYXJzZVVBU2hlZXQoc2ltcGxlVXNlckFnZW50U3R5bGVTaGVldCwgc3RybGVuKHNpbXBsZVVz
ZXJBZ2VudFN0eWxlU2hlZXQpKTsKICAgICBkZWZhdWx0U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0LCBzY3JlZW5FdmFsKCkpOwotICAgIAorCiAgICAgLy8g
Tm8gbmVlZCB0byBpbml0aWFsaXplIHF1aXJrcyBzaGVldCB5ZXQgYXMgdGhlcmUgYXJlIG5vIHF1
aXJrIHJ1bGVzIGZvciBlbGVtZW50cyBhbGxvd2VkIGluIHNpbXBsZSBkZWZhdWx0IHN0eWxlLgog
fQotICAgIAorCiBzdGF0aWMgdm9pZCBsb2FkVmlld1NvdXJjZVN0eWxlKCkKIHsKICAgICBBU1NF
UlQoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHN0YXRpYyB2
b2lkIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkK
ICAgICAgICAgYXNzZXJ0Tm9TaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgICAgICBj
b2xsZWN0U3BlY2lhbFJ1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9Ci0gICAgCisKICNpZiBF
TkFCTEUoU1ZHKQogICAgIHN0YXRpYyBib29sIGxvYWRlZFNWR1VzZXJBZ2VudFNoZWV0OwogICAg
IGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiAhbG9hZGVkU1ZHVXNlckFnZW50U2hlZXQp
IHsKQEAgLTU1NCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVl
dHNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGNvbGxlY3RTcGVjaWFsUnVs
ZXNJbkRlZmF1bHRTdHlsZSgpOwogICAgIH0KICNlbmRpZgotICAgIAorCiAjaWYgRU5BQkxFKE1B
VEhNTCkKICAgICBzdGF0aWMgYm9vbCBsb2FkZWRNYXRoTUxVc2VyQWdlbnRTaGVldDsKICAgICBp
ZiAoZWxlbWVudC0+aXNNYXRoTUxFbGVtZW50KCkgJiYgIWxvYWRlZE1hdGhNTFVzZXJBZ2VudFNo
ZWV0KSB7CkBAIC01NjcsNyArNTY3LDcgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0eWxl
U2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBjb2xsZWN0U3BlY2lh
bFJ1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKLSAgICAKKwogI2lmIEVOQUJM
RShWSURFTykKICAgICBzdGF0aWMgYm9vbCBsb2FkZWRNZWRpYVN0eWxlU2hlZXQ7CiAgICAgaWYg
KCFsb2FkZWRNZWRpYVN0eWxlU2hlZXQgJiYgKGVsZW1lbnQtPmhhc1RhZ05hbWUodmlkZW9UYWcp
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkgewpAQCAtNTc5LDcgKzU3OSw3IEBA
IHN0YXRpYyB2b2lkIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKICAgICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAg
ICAgfQogI2VuZGlmCi0gICAgCisKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgc3Rh
dGljIGJvb2wgbG9hZGVkRnVsbFNjcmVlblN0eWxlU2hlZXQ7CiAgICAgaWYgKCFsb2FkZWRGdWxs
U2NyZWVuU3R5bGVTaGVldCAmJiBlbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3Jl
ZW4oKSkgewpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAKICAg
ICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAg
IC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQg
ZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBi
dWZmZXIuCiAgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKQEAgLTYyNywxNCArNjI3LDE0IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+dGFnUnVs
ZXMobV9lbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1
bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT51bml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIAorCiAgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxl
cywgd2UncmUgZG9uZS4KICAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICAvLyBTb3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4K
ICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgCisKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhl
IHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCiAgICAgaWYg
KCFtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkpIHsKICAgICAgICAgLy8gRklYTUU6
IFRoaXMgc3Vja3MsIHRoZSBpbnNwZWN0b3Igc2hvdWxkIGdldCB0aGUgc3R5bGUgZnJvbSB0aGUg
dmlzaXRlZCBzdHlsZSBpdHNlbGYuCkBAIC03MTIsOCArNzEyLDggQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywg
aW50JiBmaXIKICAgICAgICAgICAgIGlmICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFp
bmNsdWRlRW1wdHlSdWxlcykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBpZiAobV9zYW1lT3JpZ2luT25seSAmJiAhbV9jaGVja2VyLmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCktPmNhblJlcXVlc3QocnVsZS0+YmFzZVVSTCgpKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsgCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMs
IHNldCBhIHBzZXVkbyBiaXQgaWYgCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAvLyBJZiB3ZSdyZSBtYXRjaGluZyBub3JtYWwgcnVsZXMsIHNldCBhIHBzZXVkbyBiaXQg
aWYKICAgICAgICAgICAgIC8vIHdlIHJlYWxseSBqdXN0IG1hdGNoZWQgYSBwc2V1ZG8tZWxlbWVu
dC4KICAgICAgICAgICAgIGlmIChtX2R5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgbV9jaGVj
a2VyLnBzZXVkb1N0eWxlKCkgPT0gTk9QU0VVRE8pIHsKICAgICAgICAgICAgICAgICBpZiAobV9j
aGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKQpAQCAtNzM3LDE0ICs3MzcsMTQgQEAgc3Rh
dGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1
bGVEYXRhKiByMikKIHsKICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNp
dHkoKTsKICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAg
ICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkg
PCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCisgICAgcmV0
dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjIt
PnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7CiB9CiAKIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygpCiB7CiAgICAgc3RkOjpzb3J0KG1fbWF0
Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwog
fQotICAgIAorCiBpbmxpbmUgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0RWxlbWVudChFbGVt
ZW50KiBlKQogewogICAgIGlmIChtX2VsZW1lbnQgIT0gZSkgewpAQCAtODQyLDIyICs4NDIsMjIg
QEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShwcm9n
cmVzc1RhZykpIHsKICAgICAgICAgaWYgKCFtX2VsZW1lbnQtPmhhc1RhZ05hbWUocHJvZ3Jlc3NU
YWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBIVE1M
UHJvZ3Jlc3NFbGVtZW50KiB0aGlzUHJvZ3Jlc3NFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFBy
b2dyZXNzRWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBv
dGhlclByb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPiht
X2VsZW1lbnQpOwogICAgICAgICBpZiAodGhpc1Byb2dyZXNzRWxlbWVudC0+aXNEZXRlcm1pbmF0
ZSgpICE9IG90aGVyUHJvZ3Jlc3NFbGVtZW50LT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICNlbmRpZgotICAgIAorCiAgICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9
IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJ
bnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgCisKICAgICBp
ZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVk
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzQXV0b2ZpbGxlZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAh
PSBvdGhlcklucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFyQ2hlY2tlZCgpKQpAQCAtODY2LDMwICs4
NjYsMzAgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2wo
U3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICh0aGlzSW5wdXRFbGVtZW50LT5yZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5y
ZXF1aXJlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoZWxlbWVu
dC0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSAhPSBtX2VsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250
cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChlbGVtZW50LT5p
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gbV9lbGVtZW50LT5pc0RlZmF1bHRCdXR0b25Gb3JG
b3JtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9lbGVtZW50LT5kb2N1
bWVudCgpLT5jb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKICAgICBib29sIHdpbGxWYWxpZGF0ZSA9IGVsZW1lbnQtPndpbGxWYWxpZGF0
ZSgpOwotICAgIAorCiAgICAgaWYgKHdpbGxWYWxpZGF0ZSAhPSBtX2VsZW1lbnQtPndpbGxWYWxp
ZGF0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAod2lsbFZhbGlk
YXRlICYmIChlbGVtZW50LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkgIT0gbV9lbGVtZW50
LT5pc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCisKICAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gbV9lbGVtZW50LT5pc0luUmFu
Z2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKGVsZW1lbnQtPmlz
T3V0T2ZSYW5nZSgpICE9IG1fZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NzgsNyArOTc4LDcg
QEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSog
bm9kZSkgY29uc3QKIAogICAgIHJldHVybiB0cnVlOwogfQotICAgIAorCiBpbmxpbmUgTm9kZSog
Q1NTU3R5bGVTZWxlY3Rvcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwg
dW5zaWduZWQmIGNvdW50KSBjb25zdAogewogICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+
cHJldmlvdXNTaWJsaW5nKCkpIHsKQEAgLTk5NCw3ICs5OTQsNyBAQCBpbmxpbmUgTm9kZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSogbm9kZSwgdW5z
aWduZWQmCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhj
b25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7Ci0gICAgcmV0dXJuIHBhcmVudFN0eWxl
LT5jaGlsZHJlbkFmZmVjdGVkQnlQb3NpdGlvbmFsUnVsZXMoKSAKKyAgICByZXR1cm4gcGFyZW50
U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeVBvc2l0aW9uYWxSdWxlcygpCiAgICAgICAgIHx8IHBh
cmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMoKQogICAgICAgICB8
fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKIH0KQEAg
LTEwNTIsNyArMTA1Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hVQVJ1bGVzKGlu
dCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSkKICAgICAvLyBJbiBxdWlya3MgbW9kZSwg
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAgaWYg
KCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQogICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRR
dWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKLSAgICAgICAgCisK
ICAgICAvLyBJZiBkb2N1bWVudCB1c2VzIHZpZXcgc291cmNlIHN0eWxlcyAoaW4gdmlldyBzb3Vy
Y2UgbW9kZSBvciBpbiB4bWwgdmlld2VyIG1vZGUpLCB0aGVuIHdlIG1hdGNoIHJ1bGVzIGZyb20g
dGhlIHZpZXcgc291cmNlIHN0eWxlIHNoZWV0LgogICAgIGlmIChtX2NoZWNrZXIuZG9jdW1lbnQo
KS0+aXNWaWV3U291cmNlKCkpIHsKICAgICAgICAgaWYgKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxl
KQpAQCAtMTExMCw3ICsxMTEwLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAKICAgICBkb2N1
bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICBkb2N1
bWVudFN0eWxlLT5mb250KCkudXBkYXRlKDApOwotICAgICAgICAKKwogICAgIHJldHVybiBkb2N1
bWVudFN0eWxlLnJlbGVhc2UoKTsKIH0KIApAQCAtMTIxOCw3ICsxMjE4LDcgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
IGVsZW1lbnQsIFJlbmQKICAgICAgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9u
KHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRU
b0xlZnREZWNsYXJhdGlvbigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAorCiAg
ICAgICAgIC8vIDYuIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAg
ICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICAgICAgICAgIG1hdGNoUnVs
ZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwg
ZmFsc2UpOwpAQCAtMTIzNCw3ICsxMjM0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NT
U3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmQKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdyB3ZSBoYXZl
IGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuICBXYWxr
IHRoZSBydWxlcyBhbmQgYXBwbHkKICAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmly
c3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBv
bi4KICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwg
KDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKQEAg
LTEyNDYsNyArMTI0Niw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kCiAgICAgICAgIGFwcGx5
RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAg
ICAgfQogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0
VUFSdWxlKTsKLSAgICAKKwogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVh
ZCBhbmQgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVGb250KCk7CiAKQEAgLTEyNTYsMTAgKzEy
NTYsMTAgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVG
b3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmQKIAogICAgIC8vIE5vdyBkbyB0aGUgbm9y
bWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+
KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7Ci0gICAgCisKICAgICAvLyBDYWNoZSBv
dXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRl
ci4KICAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKLSAgICAKKwogICAgIC8vIE5vdyBk
byB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwg
dGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KICAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVs
dCkgewogICAgICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIGxhc3RVQVJ1bGUg
KyAxLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKQEAgLTEyNjksNyArMTI2OSw3IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBSZW5kCiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUs
IGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKIAogICAgIEFTU0VSVCghbV9mb250RGlydHkpOwot
ICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlh
bCBmb250IHByb3BzLCAKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2Yg
dGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRl
IGl0IGEgc2Vjb25kIHRpbWUuCiAgICAgdXBkYXRlRm9udCgpOwogCkBAIC0xMzQyLDI0ICsxMzQy
LDI0IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQqIGUsIGNvbnN0IFJlbmRlclN0eWxlKiBl
bGVtZW50U3R5bGUsIEtleWZyYW1lTGlzdCYgbGlzdCkKIHsKICAgICBsaXN0LmNsZWFyKCk7Ci0g
ICAgCisKICAgICAvLyBHZXQgdGhlIGtleWZyYW1lc1J1bGUgZm9yIHRoaXMgbmFtZQogICAgIGlm
ICghZSB8fCBsaXN0LmFuaW1hdGlvbk5hbWUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fa2V5ZnJhbWVzUnVsZU1hcC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAKKwogICAg
IGlmICghbV9rZXlmcmFtZXNSdWxlTWFwLmNvbnRhaW5zKGxpc3QuYW5pbWF0aW9uTmFtZSgpLmlt
cGwoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBjb25zdCBXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlKiBydWxlID0gbV9rZXlmcmFtZXNSdWxlTWFwLmZpbmQobGlzdC5hbmltYXRp
b25OYW1lKCkuaW1wbCgpKS5nZXQoKS0+c2Vjb25kLmdldCgpOwotICAgIAorCiAgICAgLy8gQ29u
c3RydWN0IGFuZCBwb3B1bGF0ZSB0aGUgc3R5bGUgZm9yIGVhY2gga2V5ZnJhbWUKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAvLyBB
cHBseSB0aGUgZGVjbGFyYXRpb24gdG8gdGhlIHN0eWxlLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIHRoZSBsb2dpYyBpbiBzdHlsZUZvckVsZW1lbnQKICAgICAgICAgaW5pdEVsZW1l
bnQoZSk7CiAgICAgICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSk7Ci0gICAgICAgIAorCiAgICAg
ICAgIGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVSdWxlID0gcnVsZS0+aXRl
bShpKTsKIAogICAgICAgICBLZXlmcmFtZVZhbHVlIGtleWZyYW1lKDAsIDApOwpAQCAtMTM3Myw3
ICsxMzczLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1h
dGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSoKICAgICAgICAgICAgIGxpc3QuaW5z
ZXJ0KGtleWZyYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIElmIHRoZSAw
JSBrZXlmcmFtZSBpcyBtaXNzaW5nLCBjcmVhdGUgaXQgKGJ1dCBvbmx5IGlmIHRoZXJlIGlzIGF0
IGxlYXN0IG9uZSBvdGhlciBrZXlmcmFtZSkKICAgICBpbnQgaW5pdGlhbExpc3RTaXplID0gbGlz
dC5zaXplKCk7CiAgICAgaWYgKGluaXRpYWxMaXN0U2l6ZSA+IDAgJiYgbGlzdFswXS5rZXkoKSAh
PSAwKSB7CkBAIC0xNDAzLDEzICsxNDAzLDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENT
U1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAK
ICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIHBhcmVudFN0eWxlLCBwc2V1ZG8pOwogICAgIG1f
c3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgCisKICAgICBpZiAobV9wYXJlbnRT
dHlsZSkKICAgICAgICAgbV9zdHlsZS0+aW5oZXJpdEZyb20obV9wYXJlbnRTdHlsZSk7CiAKICAg
ICAvLyBTaW5jZSB3ZSBkb24ndCB1c2UgcHNldWRvLWVsZW1lbnRzIGluIGFueSBvZiBvdXIgcXVp
cmsvcHJpbnQgdXNlciBhZ2VudCBydWxlcywgZG9uJ3Qgd2FzdGUgdGltZSB3YWxraW5nCiAgICAg
Ly8gdGhvc2UgcnVsZXMuCi0gICAgCisKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9y
IHJ1bGVzLgogICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxlID0gLTEsIGZpcnN0
VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTEsIGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBs
YXN0QXV0aG9yUnVsZSA9IC0xOwogICAgIG1hdGNoVUFSdWxlcyhmaXJzdFVBUnVsZSwgbGFzdFVB
UnVsZSk7CkBAIC0xNDIzLDcgKzE0MjMsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NT
dHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIG1fc3R5bGUtPnNldFN0eWxlVHlwZShwc2V1ZG8pOwotICAg
IAorCiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogCiAgICAgLy8gSGlnaC1wcmlvcml0eSBw
cm9wZXJ0aWVzLgpAQCAtMTQzMSwyNiArMTQzMSwyNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRv
LAogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFz
dEF1dGhvclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIGZpcnN0VXNl
clJ1bGUsIGxhc3RVc2VyUnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwg
Zmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAorCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290
IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgogICAgIHVwZGF0ZUZvbnQoKTsK
IAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZQogICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKICAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKLSAg
ICAKKwogICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMuCiAgICAg
YXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7
Ci0gICAgCisKICAgICAvLyBDYWNoZSBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQg
d2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KICAgICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQo
KTsKLSAgICAKKwogICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxzZSwgbGFzdFVBUnVs
ZSArIDEsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogICAgIGFwcGx5RGVjbGFyYXRpb25z
PGZhbHNlPih0cnVlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBs
eURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsK
ICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1
bGUpOwotICAgIAotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUg
bm9uLWVzc2VudGlhbCBmb250IHByb3BzLCAKKworICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0
aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3BzLAogICAgIC8vIGdvIGFo
ZWFkIGFuZCB1cGRhdGUgaXQgYSBzZWNvbmQgdGltZS4KICAgICB1cGRhdGVGb250KCk7CiAKQEAg
LTE0NTksNyArMTQ1OSw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAKICAgICAvLyBTdGFy
dCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCiAgICAgbG9hZFBlbmRp
bmdJbWFnZXMoKTsKLSAgICAgICAgCisKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KICAg
ICByZXR1cm4gbV9zdHlsZS5yZWxlYXNlKCk7CiB9CkBAIC0xNTAwLDcgKzE1MDAsNyBAQCBzdGF0
aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICAv
LyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgogICAgIGNvbnN0IGludCBpbnRyaW5zaWNNYXJnaW4g
PSAyICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBVc2lu
ZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgv
bWF4LXdpZHRoIGlzIGZsYXdlZC4KICAgICAvLyBGSVhNRTogVXNpbmcgInF1aXJrIiB0byBkZWNp
ZGUgdGhlIG1hcmdpbiB3YXNuJ3Qgc2V0IGlzIGtpbmQgb2YgbGFtZS4KICAgICBpZiAoc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgewpAQCAtMTU4NywxMiArMTU4NywxMiBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHBhcmVudAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAg
ICAvLyBGSVhNRTogRG9uJ3Qgc3VwcG9ydCB0aGlzIG11dGF0aW9uIGZvciBwc2V1ZG8gc3R5bGVz
IGxpa2UgZmlyc3QtbGV0dGVyIG9yIGZpcnN0LWxpbmUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRl
bHkKICAgICAgICAgLy8gY2xlYXIgaG93IHRoYXQgc2hvdWxkIHdvcmsuCiAgICAgICAgIGlmIChz
dHlsZS0+ZGlzcGxheSgpID09IElOTElORSAmJiBzdHlsZS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VV
RE8gJiYgcGFyZW50U3R5bGUgJiYgc3R5bGUtPndyaXRpbmdNb2RlKCkgIT0gcGFyZW50U3R5bGUt
PndyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxP
Q0spOwotICAgICAgICAKKwogICAgICAgICAvLyBBZnRlciBwZXJmb3JtaW5nIHRoZSBkaXNwbGF5
IG11dGF0aW9uLCBjaGVjayB0YWJsZSByb3dzLiAgV2UgZG8gbm90IGhvbm9yIHBvc2l0aW9uOnJl
bGF0aXZlIG9uCiAgICAgICAgIC8vIHRhYmxlIHJvd3Mgb3IgY2VsbHMuICBUaGlzIGhhcyBiZWVu
IGVzdGFibGlzaGVkIGluIENTUzIuMSAoYW5kIGNhdXNlZCBhIGNyYXNoIGluIGNvbnRhaW5pbmdC
bG9jaygpCiAgICAgICAgIC8vIG9uIHNvbWUgc2l0ZXMpLgpAQCAtMTYyMiw4ICsxNjIyLDggQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlclN0eWxlKiBwYXJlbnQKICAgICAvLyBBdXRvIHotaW5kZXggYmVjb21lcyAwIGZv
ciB0aGUgcm9vdCBlbGVtZW50IGFuZCB0cmFuc3BhcmVudCBvYmplY3RzLiAgVGhpcyBwcmV2ZW50
cwogICAgIC8vIGNhc2VzIHdoZXJlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUgYmxlbmRlZCBhcyBh
IHNpbmdsZSB1bml0IGVuZCB1cCB3aXRoIGEgbm9uLXRyYW5zcGFyZW50CiAgICAgLy8gb2JqZWN0
IHdlZGdlZCBpbiBiZXR3ZWVuIHRoZW0uICBBdXRvIHotaW5kZXggYWxzbyBiZWNvbWVzIDAgZm9y
IG9iamVjdHMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybXMvbWFza3MvcmVmbGVjdGlvbnMuCi0gICAg
aWYgKHN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpID09IGUpIHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmIHx8IAotICAgICAg
ICBzdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgfHwgc3R5bGUtPmhhc01hc2so
KSB8fCBzdHlsZS0+Ym94UmVmbGVjdCgpKSkKKyAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgo
KSAmJiAoKGUgJiYgZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gZSkgfHwgc3R5
bGUtPm9wYWNpdHkoKSA8IDEuMGYKKyAgICAgICAgfHwgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eSgpIHx8IHN0eWxlLT5oYXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3QoKSkp
CiAgICAgICAgIHN0eWxlLT5zZXRaSW5kZXgoMCk7CiAKICAgICAvLyBUZXh0YXJlYSBjb25zaWRl
cnMgb3ZlcmZsb3cgdmlzaWJsZSBhcyBhdXRvLgpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnQKICAgICAgICAgc3R5bGUtPnNldFRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKICAgICBlbHNlCiAgICAgICAgIHN0eWxlLT5h
ZGRUb1RleHREZWNvcmF0aW9uc0luRWZmZWN0KHN0eWxlLT50ZXh0RGVjb3JhdGlvbigpKTsKLSAg
ICAKKwogICAgIC8vIElmIGVpdGhlciBvdmVyZmxvdyB2YWx1ZSBpcyBub3QgdmlzaWJsZSwgY2hh
bmdlIHRvIGF1dG8uCiAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1goKSA9PSBPTUFSUVVFRSAmJiBz
dHlsZS0+b3ZlcmZsb3dZKCkgIT0gT01BUlFVRUUpCiAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxv
d1koT01BUlFVRUUpOwpAQCAtMTY1NCw5ICsxNjU0LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJl
bnQKICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSB0YWJsZSBzZWN0aW9ucyB3aWxsIHN1cHBvcnQg
YXV0byBhbmQgc2Nyb2xsLgogICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxFIHx8IHN0
eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5FX1RBQkxFIHx8CiAgICAgICAgIHN0eWxlLT5kaXNwbGF5
KCkgPT0gVEFCTEVfUk9XX0dST1VQIHx8IHN0eWxlLT5kaXNwbGF5KCkgPT0gVEFCTEVfUk9XKSB7
Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92
ZXJmbG93WCgpICE9IE9ISURERU4pIAorICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpICE9
IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1goKSAhPSBPSElEREVOKQogICAgICAgICAgICAg
c3R5bGUtPnNldE92ZXJmbG93WChPVklTSUJMRSk7Ci0gICAgICAgIGlmIChzdHlsZS0+b3ZlcmZs
b3dZKCkgIT0gT1ZJU0lCTEUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9ISURERU4pIAorICAg
ICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WSgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxv
d1koKSAhPSBPSElEREVOKQogICAgICAgICAgICAgc3R5bGUtPnNldE92ZXJmbG93WShPVklTSUJM
RSk7CiAgICAgfQogCkBAIC0xNzY3LDcgKzE3NjcsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBl
LAogICAgIH0KIAogICAgIG1fY2hlY2tlci5zZXRDb2xsZWN0aW5nUnVsZXNPbmx5KGZhbHNlKTsK
LSAgIAorCiAgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCkBAIC0xODQ5LDcg
KzE4NDksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcgogICAgICAgICBzZWxlY3RvciA9IHNl
bGVjdG9yLT50YWdIaXN0b3J5KCk7CiAgICAgfTsKIAotICAgIGZvciAoc2VsZWN0b3IgPSBzZWxl
Y3Rvci0+dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlz
dG9yeSgpKSB7ICAgICAgICAgICAgCisgICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsK
ICAgICAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKHNlbGVjdG9yTGlzdENvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcikpCkBAIC0xODc5LDcgKzE4NzksNyBAQCBSdWxlU2V0
OjpSdWxlU2V0KCkKIH0KIAogUnVsZVNldDo6flJ1bGVTZXQoKQoteyAKK3sKICAgICBkZWxldGVB
bGxWYWx1ZXMobV9pZFJ1bGVzKTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc1J1bGVzKTsK
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMpOwpAQCAtMjAw
OCw3ICsyMDA4LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBy
dWxlKQogICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKICAgICB9CiB9Ci0gICAgCisKIHN0
YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tU2VsZWN0b3IoQ1NTU3R5bGVTZWxl
Y3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7
CiAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCAmJiAhc2VsZWN0
b3ItPnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMjA1MywxMiArMjA1MywxMiBAQCBzdGF0aWMgdm9p
ZCBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVh
dHVyZXMsIGNvbnN0CiAgICAgICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikgewogICAgICAg
ICAgICAgaWYgKCFmZWF0dXJlcy5zaWJsaW5nUnVsZXMpCiAgICAgICAgICAgICAgICAgZmVhdHVy
ZXMuc2libGluZ1J1bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOwotICAgICAgICAgICAgZmVh
dHVyZXMuc2libGluZ1J1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2Vs
ZWN0b3IoKSk7ICAgCisgICAgICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMtPmFkZFJ1bGUo
cnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKICAg
ICAgICAgICAgIGlmICghZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcykKICAgICAgICAg
ICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzID0gYWRvcHRQdHIobmV3IFJ1
bGVTZXQpOwotICAgICAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcy0+YWRk
UnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpOyAKKyAgICAgICAgICAg
IGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMtPmFkZFJ1bGUocnVsZURhdGEucnVsZSgp
LCBydWxlRGF0YS5zZWxlY3RvcigpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTIwODEsMTQg
KzIwODEsMTQgQEAgdm9pZCBSdWxlU2V0Ojpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rv
cjo6RmVhdHVyZXMmIGZlYXR1cmVzKSBjb25zdAogICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0
KGZlYXR1cmVzLCBtX2ZvY3VzUHNldWRvQ2xhc3NSdWxlcyk7CiAgICAgY29sbGVjdEZlYXR1cmVz
RnJvbUxpc3QoZmVhdHVyZXMsIG1fdW5pdmVyc2FsUnVsZXMpOwogfQotICAgIAorCiBzdGF0aWMg
aW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBt
YXApCiB7CiAgICAgUnVsZVNldDo6QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQo
KTsKICAgICBmb3IgKFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7
CiB9Ci0gICAgCisKIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQogewogICAgIHNocmlua01h
cFZlY3RvcnNUb0ZpdChtX2lkUnVsZXMpOwpAQCAtMjExNSw3ICsyMTE1LDcgQEAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9MZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBS
ZW5kZXJTdHlsZSogc3QKICAgICAgICAgICAgICpvayA9IGZhbHNlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAg
ICAgCisKICAgICAgICAgaWYgKCFzdHlsZSAmJiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0VNUyB8fCB0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTIHx8IHR5cGUgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TKSkgewogICAgICAgICAgICAgaWYgKG9rKQogICAg
ICAgICAgICAgICAgICpvayA9IGZhbHNlOwpAQCAtMjEzNCw3ICsyMTM0LDcgQEAgc3RhdGljIExl
bmd0aCBjb252ZXJ0VG9MZW5ndGgoQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBS
ZW5kZXJTdHlsZSogc3QKICAgICB9CiAgICAgcmV0dXJuIGw7CiB9Ci0gICAgCisKIHN0YXRpYyBM
ZW5ndGggY29udmVydFRvSW50TGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVs
dGlwbGllciA9IDEsIGJvb2wgKm9rID0gMCkKIHsKICAgICByZXR1cm4gY29udmVydFRvTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCBmYWxzZSwgbXVsdGlwbGllciwgb2sp
OwpAQCAtMjE0NCwyNCArMjE0NCwyNCBAQCBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgUmVuZGVyU3R5bAogewogICAg
IHJldHVybiBjb252ZXJ0VG9MZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlLCByb290U3R5bGUs
IHRydWUsIG11bHRpcGxpZXIsIG9rKTsKIH0KLSAgICAKKwogdGVtcGxhdGUgPGJvb2wgYXBwbHlG
aXJzdD4KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwgYm9vbCBpc0ltcG9ydGFudCkKIHsK
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5
bGVEZWNsYXJhdGlvbi0+ZW5kKCk7CiAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZURlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIGN1cnJlbnQgPSAqaXQ7Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmIChpc0ltcG9ydGFudCAhPSBjdXJyZW50LmlzSW1wb3J0YW50
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCisKICAgICAgICAgaW50IHByb3Bl
cnR5ID0gY3VycmVudC5pZCgpOwotICAgICAgICAKKwogICAgICAgICBpZiAoYXBwbHlGaXJzdCkg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoZmlyc3RDU1NQcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eUNvbG9yLCBDU1NfY29sb3JfaXNfZmlyc3RfcHJvcGVydHkpOwogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoQ1NTUHJvcGVydHlab29tID09IENTU1Byb3BlcnR5Q29sb3IgKyAxNiwgQ1NT
X3pvb21faXNfZW5kX29mX2ZpcnN0X3Byb3BfcmFuZ2UpOwogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0ID09IENTU1Byb3BlcnR5Wm9vbSArIDEsIENTU19s
aW5lX2hlaWdodF9pc19hZnRlcl96b29tKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAv
LyBnaXZlIHNwZWNpYWwgcHJpb3JpdHkgdG8gZm9udC14eHgsIGNvbG9yIHByb3BlcnRpZXMsIGV0
YwogICAgICAgICAgICAgaWYgKHByb3BlcnR5ID4gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjE5MiwxMyArMjE5MiwxMyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb25zKGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFy
dEluZGV4LCBpbnQgZQogICAgICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUg
PSBsaW5rTWF0Y2hUeXBlICYgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbms7CiAgICAgICAgICAg
ICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBsaW5rTWF0Y2hUeXBlICYgU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7CiAKLSAgICAgICAgICAgIGFwcGx5RGVjbGFyYXRp
b248YXBwbHlGaXJzdD4oc3R5bGVEZWNsYXJhdGlvbiwgaXNJbXBvcnRhbnQpOyAgICAgICAgCisg
ICAgICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFwcGx5Rmlyc3Q+KHN0eWxlRGVjbGFyYXRpb24s
IGlzSW1wb3J0YW50KTsKICAgICAgICAgfQogICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSA9IHRydWU7CiAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGZvciAoaW50IGkgPSBzdGFy
dEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpICAgICAgICAKKyAgICBmb3IgKGludCBpID0gc3Rh
cnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKQogICAgICAgICBhcHBseURlY2xhcmF0aW9uPGFw
cGx5Rmlyc3Q+KG1fbWF0Y2hlZERlY2xzW2ldLnN0eWxlRGVjbGFyYXRpb24sIGlzSW1wb3J0YW50
KTsKIH0KIApAQCAtMjQwNSw3ICsyNDA1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSA6IDA7CiAKICAgICBmbG9hdCB6b29tRmFjdG9y
ID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIAorCiAgICAgLy8gV2hhdCBmb2xsb3dz
IGlzIGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVz
cG9uZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuICBTaG9ydGhhbmRz
IChlLmcuIGJvcmRlciwgYmFja2dyb3VuZCkgb2NjdXIgaW4gdGhpcyBsaXN0IGFzIHdlbGwgYW5k
CiAgICAgLy8gYXJlIG9ubHkgaGl0IHdoZW4gbWFwcGluZyAiaW5oZXJpdCIgb3IgImluaXRpYWwi
IGludG8gZnJvbnQtZW5kIHZhbHVlcy4KQEAgLTI0NDYsMTAgKzI0NDYsMTAgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAg
IGNhc2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5E
X0lOSVRJQUxfQU5EX1BSSU1JVElWRSh0YWJsZUxheW91dCwgVGFibGVMYXlvdXQpCiAgICAgICAg
IHJldHVybjsKLSAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6IAorICAgIGNhc2UgQ1NT
UHJvcGVydHlVbmljb2RlQmlkaToKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxf
QU5EX1BSSU1JVElWRSh1bmljb2RlQmlkaSwgVW5pY29kZUJpZGkpCiAgICAgICAgIHJldHVybjsK
LSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFRyYW5zZm9ybTogCisgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRUcmFuc2Zvcm06CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9Q
UklNSVRJVkUodGV4dFRyYW5zZm9ybSwgVGV4dFRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgpAQCAtMjUwMCw3ICsyNTAwLDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVl
KQogICAgICAgICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkg
PyBSRVNJWkVfQk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IHIgPSAqcHJpbWl0aXZlVmFsdWU7Ci0gICAgICAgICAgICAKKwogICAgICAgICBtX3N0eWxlLT5z
ZXRSZXNpemUocik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNTMyLDcgKzI1MzIsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAq
dmFsdWUpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKICAgICAg
ICAgZmxvYXQgb2xkU2l6ZSA9IDA7CiAgICAgICAgIGZsb2F0IHNpemUgPSAwOwotICAgICAgICAK
KwogICAgICAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7CiAgICAgICAgIGlm
IChtX3BhcmVudE5vZGUpIHsKICAgICAgICAgICAgIG9sZFNpemUgPSBtX3BhcmVudFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CkBAIC0yNTcwLDE2ICsyNTcwLDE2IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0
ZVNpemUgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTGFyZ2VyIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlU21hbGxlcikpOworICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTGFyZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlU21hbGxlcikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50IHR5cGUgPSBw
cmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgIT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMgJiYgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgIT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FWFMgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVMpKTsK
KyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fi
c29sdXRlU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8ICh0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfRU1TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FWFMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZSAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVMpKTsKICAgICAgICAgICAgIGlmIChDU1NQcmlt
aXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkKICAgICAgICAgICAgICAgICBzaXpl
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KG1fcGFyZW50U3R5bGUsIG1f
cm9vdEVsZW1lbnRTdHlsZSwgMS4wLCB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQpAQCAtMjY4NCw3ICsyNjg0LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUg
KnZhbHVlKQogICAgICAgICB9CiAgICAgICAgIG1fc3R5bGUtPnNldENsaXAodG9wLCByaWdodCwg
Ym90dG9tLCBsZWZ0KTsKICAgICAgICAgbV9zdHlsZS0+c2V0SGFzQ2xpcChoYXNDbGlwKTsKLSAg
ICAKKwogICAgICAgICAvLyByZWN0LCBpZGVudAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MjcwMCw3ICsyNzAwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJDb250ZW50
KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAg
aWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjgz
Myw3ICsyODMzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBp
ZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnRE
ZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IG1fc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwpAQCAtMjk5Niw3ICsyOTk2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlKSB7CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKICAgICAgICAgICAgIG1fbGluZUhl
aWdodFZhbHVlID0gMDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBGb250RGVzY3JpcHRp
b24gZm9udERlc2NyaXB0aW9uOwogICAgICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5zeXN0ZW1Gb250KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpLCBmb250RGVzY3JpcHRp
b24pOwogCkBAIC0zMDA5LDcgKzMwMDksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0UmVuZGVyaW5nTW9kZShz
ZXR0aW5ncy0+Zm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFVzZVByaW50ZXJGb250KG1fY2hlY2tlci5kb2N1bWVudCgpLT5wcmludGluZygp
KTsKLSAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIHpvb20gZmFj
dG9yLgogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0
Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUobV9jaGVja2VyLmRvY3VtZW50KCksIG1fc3R5
bGUuZ2V0KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkpOwogICAgICAgICAgICAgICAg
IHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwpAQCAtMzA4NSw3ICszMDg1LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUg
KnZhbHVlKQogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0aEJveCgpKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVh
ZCh2YWx1ZSkpOwotICAgICAgICAKKwogICAgICAgICBpZiAoaXNCb3JkZXJJbWFnZSkKICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdlKGltYWdlKTsKICAgICAgICAgZWxzZQpAQCAt
MzEwMyw3ICszMTAzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgaW1hZ2Uuc2V0VmVydGljYWxSdWxl
KFN0cmV0Y2hJbWFnZVJ1bGUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1hcE5pbmVQ
aWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChp
c0JvcmRlckltYWdlKQogICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2UoaW1hZ2Up
OwogICAgICAgICBlbHNlCkBAIC0zMTIyLDcgKzMxMjIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICBp
bWFnZS5zZXRGaWxsKGZhbHNlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtYXBOaW5l
UGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChp
c0JvcmRlckltYWdlKQogICAgICAgICAgICAgbV9zdHlsZS0+c2V0Qm9yZGVySW1hZ2UoaW1hZ2Up
OwogICAgICAgICBlbHNlCkBAIC0zMTkxLDcgKzMxOTEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICBt
X3N0eWxlLT5zZXRCb3hSZWZsZWN0KFJlbmRlclN0eWxlOjppbml0aWFsQm94UmVmbGVjdCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAo
IXZhbHVlLT5pc1JlZmxlY3RWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjA5
LDcgKzMyMDksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlk
LCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7CiAgICAg
ICAgIG1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCByZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFz
ayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7Ci0gICAgICAgIAorCiAgICAg
ICAgIG1fc3R5bGUtPnNldEJveFJlZmxlY3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzMxNSw3ICszMzE1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6IHsKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobWFycXVlZVNwZWVkLCBNYXJxdWVlU3Bl
ZWQpICAgICAgCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVTcGVl
ZCwgTWFycXVlZVNwZWVkKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKQEAg
LTMzNjUsNyArMzM2NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVN0eWxlOgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKG1hcnF1ZWVCZWhhdmlvciwgTWFycXVlZUJlaGF2aW9y
KSAgICAgIAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZF
KG1hcnF1ZWVCZWhhdmlvciwgTWFycXVlZUJlaGF2aW9yKQogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvOgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9B
TkRfSU5JVElBTChmbG93VGhyZWFkLCBGbG93VGhyZWFkKTsKQEAgLTMzODgsMTMgKzMzODgsMTMg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUg
KnZhbHVlKQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZF
KG1hcnF1ZWVEaXJlY3Rpb24sIE1hcnF1ZWVEaXJlY3Rpb24pCiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAgICAgIEhBTkRMRV9JTkhFUklU
X0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUodXNlckRyYWcsIFVzZXJEcmFnKSAgICAgIAorICAg
ICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJEcmFnLCBV
c2VyRHJhZykKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2Vy
TW9kaWZ5OgotICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZF
KHVzZXJNb2RpZnksIFVzZXJNb2RpZnkpICAgICAgCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMX0FORF9QUklNSVRJVkUodXNlck1vZGlmeSwgVXNlck1vZGlmeSkKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgotICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJTZWxlY3QsIFVzZXJT
ZWxlY3QpICAgICAgCisgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMX0FORF9QUklN
SVRJVkUodXNlclNlbGVjdCwgVXNlclNlbGVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzogewpAQCAtMzQ4MCw3ICszNDgwLDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQog
ICAgICAgICBEYXNoYm9hcmRSZWdpb24gKnJlZ2lvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREYXNo
Ym9hcmRSZWdpb25WYWx1ZSgpOwogICAgICAgICBpZiAoIXJlZ2lvbikKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIAorCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiAqZmlyc3QgPSBy
ZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKICAgICAgICAgICAgIExlbmd0aCB0b3Ag
PSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwgc3R5bGUoKSwgbV9yb290RWxlbWVu
dFN0eWxlKTsKQEAgLTM0OTMsMTIgKzM0OTMsMTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgICAgIG1f
c3R5bGUtPnNldERhc2hib2FyZFJlZ2lvbihTdHlsZURhc2hib2FyZFJlZ2lvbjo6UmVjdGFuZ2xl
LCByZWdpb24tPm1fbGFiZWwsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgcmVnaW9uID09IGZp
cnN0ID8gZmFsc2UgOiB0cnVlKTsKICAgICAgICAgICAgIHJlZ2lvbiA9IHJlZ2lvbi0+bV9uZXh0
LmdldCgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+c2V0SGFzRGFzaGJvYXJkUmVnaW9ucyh0cnVlKTsKLSAgICAgICAgCisKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSNlbmRpZiAgICAgICAgCisjZW5kaWYKICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0UnRsT3JkZXJpbmc6CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
X0FORF9QUklNSVRJVkUocnRsT3JkZXJpbmcsIFJUTE9yZGVyaW5nKQogICAgICAgICByZXR1cm47
CkBAIC0zNTQwLDcgKzM1NDAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRQZXJz
cGVjdGl2ZSgwKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBmbG9hdCBwZXJzcGVjdGl2ZVZhbHVlOwogICAgICAgICBpbnQgdHlwZSA9IHByaW1p
dGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgIGlmIChDU1NQcmltaXRpdmVWYWx1
ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkKQEAgLTM2ODIsMjAgKzM2ODIsMjAgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQog
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGluZUJveENvbnRhaW4oTGluZUJveENvbnRhaW5Ob25l
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBp
ZiAoIXZhbHVlLT5pc0NTU0xpbmVCb3hDb250YWluVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCisKICAgICAgICAgQ1NTTGluZUJveENvbnRhaW5WYWx1ZSogbGluZUJveENv
bnRhaW5WYWx1ZSA9IHN0YXRpY19jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWUqPih2YWx1ZSk7
CiAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKGxpbmVCb3hDb250YWluVmFsdWUt
PnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFdyYXBTaGFwZToKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwod3JhcFNoYXBlLCBXcmFwU2hhcGUpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKwogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgbV9zdHlsZS0+c2V0
V3JhcFNoYXBlKDApOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZl
VHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU0hBUEUpCkBAIC00MDg1LDcgKzQwODUs
NyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdQogICAgICAgICBsYXllci0+c2V0Q29tcG9zaXRl
KEZpbGxMYXllcjo6aW5pdGlhbEZpbGxDb21wb3NpdGUobGF5ZXItPnR5cGUoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQxNDIsNyArNDE0Miw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXll
ciwgQ1NTVmFsdWUqCiAgICAgICAgIGxheWVyLT5zZXRSZXBlYXRYKEZpbGxMYXllcjo6aW5pdGlh
bEZpbGxSZXBlYXRYKGxheWVyLT50eXBlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKKwogICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC00MTU2LDcgKzQxNTYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxS
ZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgICAg
ICBsYXllci0+c2V0UmVwZWF0WShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsUmVwZWF0WShsYXllci0+
dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDE3OCw5ICs0MTc4
LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBl
KENvdmVyKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTGVuZ3Ro
KTsKLSAgICAKKwogICAgIExlbmd0aFNpemUgYiA9IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXpl
TGVuZ3RoKGxheWVyLT50eXBlKCkpOwotICAgIAorCiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5
cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwgfHwgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVDb250YWluCiAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlQ292ZXIpIHsKICAgICAgICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7
CkBAIC00MTkxLDcgKzQxOTEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxTaXpl
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YQogCiAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gcGFpciA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4ocGFpci0+Zmlyc3QoKSkgOiBwcmltaXRpdmVWYWx1ZTsKICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogc2Vjb25kID0gcGFpciA/IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFp
ci0+c2Vjb25kKCkpIDogMDsKLSAgICAKKwogICAgIExlbmd0aCBmaXJzdExlbmd0aCwgc2Vjb25k
TGVuZ3RoOwogICAgIGludCBmaXJzdFR5cGUgPSBmaXJzdC0+cHJpbWl0aXZlVHlwZSgpOwogICAg
IGludCBzZWNvbmRUeXBlID0gc2Vjb25kID8gc2Vjb25kLT5wcmltaXRpdmVUeXBlKCkgOiAwOwpA
QCAtNDIxNSw3ICs0MjE1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsU2l6ZShD
U1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgc2Vj
b25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBiLnNldFdpZHRoKGZpcnN0TGVu
Z3RoKTsKICAgICBiLnNldEhlaWdodChzZWNvbmRMZW5ndGgpOwogICAgIGxheWVyLT5zZXRTaXpl
TGVuZ3RoKGIpOwpAQCAtNDIyNyw3ICs0MjI3LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHUK
ICAgICAgICAgbGF5ZXItPnNldFhQb3NpdGlvbihGaWxsTGF5ZXI6OmluaXRpYWxGaWxsWFBvc2l0
aW9uKGxheWVyLT50eXBlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
MjUxLDEyICs0MjUxLDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFlQb3NpdGlv
bihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1CiAgICAgICAgIGxheWVy
LT5zZXRZUG9zaXRpb24oRmlsbExheWVyOjppbml0aWFsRmlsbFlQb3NpdGlvbihsYXllci0+dHlw
ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZsb2F0IHpvb21GYWN0
b3IgPSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgCisKICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKICAgICBMZW5ndGggbDsKICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCk7CkBAIC00NDE4LDcgKzQ0MTgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZQogICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbjo6aW5pdGlh
bEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IAorCiAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkp
IHsKQEAgLTQ0NDYsNyArNDQ0Niw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2YWx1ZS0+aXNUaW1p
bmdGdW5jdGlvblZhbHVlKCkpIHsKICAgICAgICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSogdGlt
aW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUp
OwogICAgICAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKCkpIHsKQEAgLTQ0NjgsNyArNDQ2OCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVl
CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgogICAgIENTU0JvcmRl
ckltYWdlVmFsdWUqIGJvcmRlckltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTQm9yZGVySW1hZ2VWYWx1
ZSo+KHZhbHVlKTsKLSAgICAKKwogICAgIC8vIFNldCB0aGUgaW1hZ2UgKHRoaXMga2lja3Mgb2Zm
IHRoZSBsb2FkKS4KICAgICBDU1NQcm9wZXJ0eUlEIGltYWdlUHJvcGVydHk7CiAgICAgaWYgKHBy
b3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UgfHwgcHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlCb3JkZXJJbWFnZSkKQEAgLTQ0NzcsNyArNDQ3Nyw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFs
dWUqIHZhbHVlCiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tC
b3hJbWFnZVNvdXJjZTsKICAgICBlbHNlCiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0
eTsKLSAgICAgICAgCisKICAgICBpZiAoQ1NTVmFsdWUqIGltYWdlVmFsdWUgPSBib3JkZXJJbWFn
ZS0+aW1hZ2VWYWx1ZSgpKQogICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdl
UHJvcGVydHksIGltYWdlVmFsdWUpKTsKIApAQCAtNDQ4Nyw3ICs0NDg3LDcgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBD
U1NWYWx1ZSogdmFsdWUKICAgICAvLyBNYXAgaW4gdGhlIGJvcmRlciBzbGljZXMuCiAgICAgaWYg
KGJvcmRlckltYWdlLT5tX2JvcmRlclNsaWNlKQogICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGlj
ZXMobWFwTmluZVBpZWNlSW1hZ2VRdWFkKGJvcmRlckltYWdlLT5tX2JvcmRlclNsaWNlLmdldCgp
KSk7Ci0gICAgCisKICAgICAvLyBNYXAgaW4gdGhlIG91dHNldC4KICAgICBpZiAoYm9yZGVySW1h
Z2UtPm1fb3V0c2V0KQogICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VR
dWFkKGJvcmRlckltYWdlLT5tX291dHNldC5nZXQoKSkpOwpAQCAtNDU5Miw3ICs0NTkyLDcgQEAg
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSog
dmFsdWUsIE5pbmVQaWVjZUltYWdlJgogewogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7
CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKQEAg
LTQ2NDAsNyArNDY0MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3JUZXh0U2l6
ZUFkanVzdCgpCiB7CiAgICAgaWYgKG1fc3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAg
IHJldHVybjsKLSAKKwogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24obV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkpOwogICAgIG5ld0ZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUobmV3Rm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSk7CiAgICAgbV9zdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CkBAIC00NjUwLDcgKzQ2
NTAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbgogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpID09IHBhcmVudFN0eWxlLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICAKKwogICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUt
PmZvbnREZXNjcmlwdGlvbigpOwogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRp
b24oY2hpbGRGb250KTsKICAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIGNoaWxk
Rm9udC5zcGVjaWZpZWRTaXplKCkpOwpAQCAtNDY2MCw3ICs0NjYwLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja0Zvclpvb21DaGFuZ2UoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW4KIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5
Q2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewog
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgY2hpbGRGb250ID0gc3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpOwotICAKKwogICAgIGlmIChjaGlsZEZvbnQuaXNBYnNvbHV0ZVNpemUoKSB8fCAhcGFy
ZW50U3R5bGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDczMSw3ICs0NzMxLDcgQEAgZmxvYXQg
Q1NTU3R5bGVTZWxlY3Rvcjo6Z2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1l
bnQqIGRvY3VtZW50LCBmbG8KICAgICAvLyBXaXRoIHRoZSBzbWFydCBtaW5pbXVtLCB3ZSBuZXZl
ciB3YW50IHRvIGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmltdW0gZm9udCBzaXplIHRvIGtlZXAg
Zm9udHMgcmVhZGFibGUuCiAgICAgLy8gSG93ZXZlciB3ZSBhbHdheXMgYWxsb3cgdGhlIHBhZ2Ug
dG8gc2V0IGFuIGV4cGxpY2l0IHBpeGVsIHNpemUgdGhhdCBpcyBzbWFsbGVyLAogICAgIC8vIHNp
bmNlIHNpdGVzIHdpbGwgbWlzLXJlbmRlciBvdGhlcndpc2UgKGUuZy4sIGh0dHA6Ly93d3cuZ2Ft
ZXNwb3QuY29tIHdpdGggYSA5cHggbWluaW11bSkuCi0gICAgCisKICAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBkb2N1bWVudC0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzKQogICAgICAg
ICByZXR1cm4gMS4wZjsKQEAgLTQ3NTAsNyArNDc1MCw3IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0
b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKERvY3VtZW50KiBkb2N1bWVudCwg
ZmxvCiAgICAgLy8gZG9pbmcgc28gd29uJ3QgZGlzcnVwdCB0aGUgbGF5b3V0LgogICAgIGlmICh1
c2VTbWFydE1pbmltdW1Gb3JGb250U2l6ZSAmJiB6b29tZWRTaXplIDwgbWluTG9naWNhbFNpemUg
JiYgKHNwZWNpZmllZFNpemUgPj0gbWluTG9naWNhbFNpemUgfHwgIWlzQWJzb2x1dGVTaXplKSkK
ICAgICAgICAgem9vbWVkU2l6ZSA9IG1pbkxvZ2ljYWxTaXplOwotICAgIAorCiAgICAgLy8gQWxz
byBjbGFtcCB0byBhIHJlYXNvbmFibGUgbWF4aW11bSB0byBwcmV2ZW50IGluc2FuZSBmb250IHNp
emVzIGZyb20gY2F1c2luZyBjcmFzaGVzIG9uIHZhcmlvdXMKICAgICAvLyBwbGF0Zm9ybXMgKEkn
bSBsb29raW5nIGF0IHlvdSwgV2luZG93cy4pCiAgICAgcmV0dXJuIG1pbigxMDAwMDAwLjBmLCB6
b29tZWRTaXplKTsKQEAgLTQ4MTIsNyArNDgxMiw3IEBAIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6
OmZvbnRTaXplRm9yS2V5d29yZChEb2N1bWVudCogZG9jdW1lbnQsIGludCBrZXl3b3JkLCBib29s
CiAgICAgICAgIGludCBjb2wgPSAoa2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbCk7CiAgICAgICAg
IHJldHVybiBxdWlya3NNb2RlID8gcXVpcmtzRm9udFNpemVUYWJsZVtyb3ddW2NvbF0gOiBzdHJp
Y3RGb250U2l6ZVRhYmxlW3Jvd11bY29sXTsKICAgICB9Ci0gICAgCisKICAgICAvLyBWYWx1ZSBp
cyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgdGFibGUuIEFwcGx5IHRoZSBzY2FsZSBmYWN0b3Ig
aW5zdGVhZC4KICAgICBmbG9hdCBtaW5Mb2dpY2FsU2l6ZSA9IG1heChzZXR0aW5ncy0+bWluaW11
bUxvZ2ljYWxGb250U2l6ZSgpLCAxKTsKICAgICByZXR1cm4gbWF4KGZvbnRTaXplRmFjdG9yc1tr
ZXl3b3JkIC0gQ1NTVmFsdWVYeFNtYWxsXSptZWRpdW1TaXplLCBtaW5Mb2dpY2FsU2l6ZSk7CkBA
IC00ODQ4LDE0ICs0ODQ4LDE0IEBAIGludCBDU1NTdHlsZVNlbGVjdG9yOjpsZWdhY3lGb250U2l6
ZShEb2N1bWVudCogZG9jdW1lbnQsIGludCBwaXhlbEZvbnRTaXplLCBib29sCiBmbG9hdCBDU1NT
dHlsZVNlbGVjdG9yOjpsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2Vz
ICh4eC1zbWFsbCB0byB4eHgtbGFyZ2UpIGFuZCBzY2FsZSB1cCB0bwotICAgIC8vIHRoZSBuZXh0
IHNpemUgbGV2ZWwuICAKKyAgICAvLyB0aGUgbmV4dCBzaXplIGxldmVsLgogICAgIHJldHVybiBz
aXplICogMS4yZjsKIH0KIAogZmxvYXQgQ1NTU3R5bGVTZWxlY3Rvcjo6c21hbGxlckZvbnRTaXpl
KGZsb2F0IHNpemUsIGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hl
cmUgd2UgZmFsbCBpbiB0aGUgc2l6ZSByYW5nZXMgKHh4LXNtYWxsIHRvIHh4eC1sYXJnZSkgYW5k
IHNjYWxlIGRvd24gdG8KLSAgICAvLyB0aGUgbmV4dCBzaXplIGxldmVsLiAKKyAgICAvLyB0aGUg
bmV4dCBzaXplIGxldmVsLgogICAgIHJldHVybiBzaXplIC8gMS4yZjsKIH0KIApAQCAtNDk5NCw5
ICs0OTk0LDkgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAgICAgfQogICAgICAgICBp
ZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAorCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKSk7Ci0gICAgICAgICAKKwogICAgICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgogICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtNTAwNSwxMyArNTAwNSwx
MyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgIGRvdWJsZSBzeSA9
IDEuMDsKICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUo
KSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQog
ICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN5ID0gc3g7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBA
IC01MDI3LDcgKzUwMjcsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9y
bU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAg
ICAgICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQogICAgICAgICAgICAgICAg
ICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7IAorICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzeCA9
IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7CkBAIC01MDM3LDcgKzUwMzcsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUq
IGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTUwNTIsNyArNTA1Miw3IEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSog
aW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yLCAmb2spOwotICAgICAgICAg
ICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yLCAmb2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKQEAgLTUwNzgsNyArNTA3OCw3IEBAIGJvb2wgQ1NT
U3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1
ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKICAg
ICAgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQog
ICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUs
IHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZvayk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7IAorICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0eCA9IGNv
bnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0
b3IsICZvayk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3Jt
T3BlcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpID4gMikgewpAQCAtNTEwNiw3ICs1MTA2LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSoKICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVFVSTikKICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSB0dXJu
MmRlZyhhbmdsZSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
MCwgMCwgMSwgYW5nbGUsIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTUxMjEsNyArNTEyMSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAg
ICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfR1JBRCkKICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7Ci0g
ICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9y
bU9wZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgeCA9IDE7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKQEAgLTUyMTMsNyArNTIxMyw3
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUoKSk7CiAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUobWF0cml4KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9ICAgCisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAgICAgICAgICAg
ICAgIGJvb2wgb2sgPSB0cnVlOwogICAgICAgICAgICAgICAgIExlbmd0aCBwID0gTGVuZ3RoKDAs
IEZpeGVkKTsKQEAgLTUyMjUsNyArNTIyNSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3Jl
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAg
ICAgICAgICAgICAgICAgICAgIG9rID0gdmFsID49IDA7CiAgICAgICAgICAgICAgICAgICAgIHAg
PSBMZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKCFvaykKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MjgwLDcgKzUyODAsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmRlclN0eWxlKiBzdAogICAgICAgICBvdXRPcGVyYXRpb25zLmNsZWFyKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBmbG9hdCB6b29tRmFjdG9y
ID0gc3R5bGUgPyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKICAgICBGaWx0ZXJPcGVyYXRp
b25zIG9wZXJhdGlvbnM7CiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gaW5WYWx1
ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CkBAIC01NDExLDEzICs1NDExLDEzIEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogewogICAgIGlmIChtX3Bl
bmRpbmdJbWFnZVByb3BlcnRpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgICAg
IAorCiAgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdJbWFn
ZVByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PENT
U1Byb3BlcnR5SUQ+KCppdCk7CiAKICAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpOwotICAgICAgICAKKwogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewog
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZTogewogICAgICAgICAg
ICAgICAgIGZvciAoRmlsbExheWVyKiBiYWNrZ3JvdW5kTGF5ZXIgPSBtX3N0eWxlLT5hY2Nlc3NC
YWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFj
a2dyb3VuZExheWVyLT5uZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CmluZGV4IGIwMmIyMjkuLjY3ZTRiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaApAQCAtOTMsMTMgKzkzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgIENT
U1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICBib29s
IHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKICAgICB+Q1NT
U3R5bGVTZWxlY3RvcigpOwotICAgIAorCiAgICAgLy8gVXNpbmcgdGhlc2UgZHVyaW5nIHRyZWUg
d2FsayB3aWxsIGFsbG93IHN0eWxlIHNlbGVjdG9yIHRvIG9wdGltaXplIGNoaWxkIGFuZCBkZXNj
ZW5kYW50IHNlbGVjdG9yIGxvb2t1cHMuCiAgICAgdm9pZCBwdXNoUGFyZW50KEVsZW1lbnQqIHBh
cmVudCkgeyBtX2NoZWNrZXIucHVzaFBhcmVudChwYXJlbnQpOyB9CiAgICAgdm9pZCBwb3BQYXJl
bnQoRWxlbWVudCogcGFyZW50KSB7IG1fY2hlY2tlci5wb3BQYXJlbnQocGFyZW50KTsgfQogCiAg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0ID0gZmFsc2UpOwotICAgIAorCiAgICAgdm9pZCBrZXlmcmFt
ZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFt
ZUxpc3QmKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9yRWxl
bWVudChQc2V1ZG9JZCwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwpA
QCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHMpIHsgbV9zdHlsZSA9IHM7IH0gLy8gVXNlZCBieSB0aGUgZG9jdW1lbnQg
d2hlbiBzZXR0aW5nIHVwIGl0cyByb290IHN0eWxlLgogCiAgICAgdm9pZCBhcHBseVByb3BlcnR5
VG9TdHlsZShpbnQgaWQsIENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqKTsKLSAgICAKKwogICAgIHN0
YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZs
b2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUs
IEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsK
IAogcHJpdmF0ZToKQEAgLTIyOSw3ICsyMjksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgYm9vbCBm
YXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRN
YXRjaGVkUnVsZXMoKTsKLSAgICAKKwogICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxl
RGF0YSYpOwogCiAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgpAQCAtMjQzLDcgKzI0Myw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7
IHJldHVybiAhaXNMZWZ0UGFnZShwYWdlSW5kZXgpOyB9CiAgICAgYm9vbCBpc0ZpcnN0UGFnZShp
bnQgcGFnZUluZGV4KSBjb25zdDsKICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkg
Y29uc3Q7Ci0gICAgCisKICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKICAgICBP
d25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKQEAgLTI2NCw3ICsyNjQsNyBAQCBwdWJsaWM6
CiAKICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7
CiAgICAgU3R5bGVJbWFnZSogY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQs
IENTU0ltYWdlVmFsdWUqKTsKLSAgICAKKwogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGU7IH0K
ICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KIApAQCAtMzMwLDcgKzMzMCw3
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGNvbnN0IFJ1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1
bGVzOwogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwotICAgIAorCiAgICAg
SGFzaFNldDxpbnQ+IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllczsgLy8gSGFzaCBvZiBDU1NQcm9w
ZXJ0eUlEcwogCiAgICAgT3duUHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOwpAQCAt
MzUxLDcgKzM1MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2ZvbnREaXJ0eTsKICAgICBib29s
IG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzOwogICAgIGJvb2wgbV9zYW1lT3JpZ2luT25seTsK
LSAgICAKKwogICAgIFJlZlB0cjxDU1NGb250U2VsZWN0b3I+IG1fZm9udFNlbGVjdG9yOwogICAg
IFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+IG1fYWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlRGVjbHM7CiAgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1bHQqPiBtX3ZpZXdwb3J0RGVw
ZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CkBAIC0zNTksNyArMzU5LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlOwogICAgIGJvb2wgbV9hcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOwogICAgIGNvbnN0IENTU1N0eWxlQXBwbHlQcm9wZXJ0
eSYgbV9hcHBseVByb3BlcnR5OwotICAgIAorCiAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlQXBw
bHlQcm9wZXJ0eTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCA2
NjAxMDZiLi42ZDRlN2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC00
Niw3ICs0Niw3IEBAIHN0YXRpYyBib29sIGlzQWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQYXJlbnQo
Tm9kZSogcGFyZW50Tm9kZSkKICAgICAgICAgfHwgcGFyZW50Tm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN0eWxlVGFnKQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHx8IHBhcmVudE5vZGUt
Pmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN0eWxlVGFnKQotI2VuZGlmICAgIAorI2VuZGlmCiAgICAg
ICAgIHx8IHBhcmVudE5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVD
VElPTl9OT0RFOwogfQogI2VuZGlmCkBAIC0xNDcsOSArMTQ3LDkgQEAgdW5zaWduZWQgQ1NTU3R5
bGVTaGVldDo6aW5zZXJ0UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUsIHVuc2lnbmVkIGluZGV4LCBF
eGNlcHRpb24KICAgICBDU1NSdWxlKiBjID0gci5nZXQoKTsKICAgICBtX2NoaWxkcmVuLmluc2Vy
dChpbmRleCwgci5yZWxlYXNlKCkpOwogICAgIGMtPmluc2VydGVkSW50b1BhcmVudCgpOwotICAg
IAorCiAgICAgc3R5bGVTaGVldENoYW5nZWQoKTsKLSAgICAKKwogICAgIHJldHVybiBpbmRleDsK
IH0KIApAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6YWRkTmFtZXNwYWNl
KENTU1BhcnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fbmFtZXNwYWNlcyA9IGFkb3B0UHRyKG5ldyBDU1NOYW1lc3BhY2Uo
cHJlZml4LCB1cmksIG1fbmFtZXNwYWNlcy5yZWxlYXNlKCkpKTsKLSAgICAKKwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2lseS4KQEAgLTI4MSw3ICsy
ODEsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKICAgICB3aGls
ZSAoU3R5bGVCYXNlKiBwYXJlbnQgPSByb290LT5wYXJlbnQoKSkKICAgICAgICAgcm9vdCA9IHBh
cmVudDsKICAgICBEb2N1bWVudCogZG9jdW1lbnRUb1VwZGF0ZSA9IHJvb3QtPmlzQ1NTU3R5bGVT
aGVldCgpID8gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHJvb3QpLT5kb2N1bWVudCgpIDog
MDsKLSAgICAKKwogICAgIC8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRvIGRvIGV2ZXJ5dGhpbmcg
dXBkYXRlU3R5bGVTZWxlY3RvciBkb2VzLAogICAgICAqIGJhc2ljYWxseSB3ZSBqdXN0IG5lZWQg
dG8gcmVjcmVhdGUgdGhlIGRvY3VtZW50J3Mgc2VsZWN0b3Igd2l0aCB0aGUKICAgICAgKiBhbHJl
YWR5IGV4aXN0aW5nIHN0eWxlIHNoZWV0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmNwcAppbmRleCA5ZWVjYjJjLi5kMjljMmRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDI3ZTg5OWIuLmUzNjkxZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU1RpbWluZ0Z1bmN0
aW9uVmFsdWVfaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU0xpbmVhclRpbWluZ0Z1bmN0aW9uVmFsdWUpOwogICAgIH0KLSAg
ICAKKwogcHJpdmF0ZToKICAgICBDU1NMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVlKCkKICAgICB7
CkBAIC02Myw3ICs2Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMaW5lYXJU
aW1pbmdGdW5jdGlvblZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogfTsKLSAgICAKKwog
Y2xhc3MgQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlIDogcHVibGljIENTU1RpbWlu
Z0Z1bmN0aW9uVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4gY3JlYXRlKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBk
b3VibGUgeDIsIGRvdWJsZSB5MikKQEAgLTEwNCw3ICsxMDQsNyBAQCBwdWJsaWM6CiAKICAgICBp
bnQgbnVtYmVyT2ZTdGVwcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcHM7IH0KICAgICBib29sIHN0
ZXBBdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGVwQXRTdGFydDsgfQotICAgIAorCiBwcml2
YXRlOgogICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZShpbnQgc3RlcHMsIGJvb2wgc3Rl
cEF0U3RhcnQpCiAgICAgICAgIDogbV9zdGVwcyhzdGVwcykKQEAgLTExOSw3ICsxMTksNyBAQCBw
cml2YXRlOgogICAgIGludCBtX3N0ZXBzOwogICAgIGJvb2wgbV9zdGVwQXRTdGFydDsKIH07Ci0g
ICAgCisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NV
bmljb2RlUmFuZ2VWYWx1ZS5jcHAKaW5kZXggNTk5YzA3OC4uZjdiODc3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgKaW5kZXggMGJhMTk4MC4uMmYyYzAxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NVbmljb2RlUmFuZ2VWYWx1ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCmluZGV4IGM0ZDkxYjEuLjJlNGQ3YTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCkBAIC03MiwxMCArNzIsMTAgQEAgYm9vbCBDU1NW
YWx1ZUxpc3Q6OnJlbW92ZUFsbChDU1NWYWx1ZSogdmFsKQogICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZvdW5kOwogfQotICAg
IAorCiBib29sIENTU1ZhbHVlTGlzdDo6aGFzVmFsdWUoQ1NTVmFsdWUqIHZhbCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGJlIGltcGxlbWVudGluZyBvcGVyYXRvcj09IHRvIENT
U1ZhbHVlIGFuZCBpdHMgZGVyaXZlZCBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTV3JhcFNoYXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTV3JhcFNoYXBl
cy5jcHAKaW5kZXggNmNmMjgwOS4uZTVlOWY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1dyYXBTaGFwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hh
cGVzLmNwcApAQCAtMTIsNyArMTIsNyBAQAogICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwogICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCiAgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCkBAIC00MSw3ICs0MSw3IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVS
ZWN0Ojpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgcmVjdFBhcmVuLCAoInJlY3QoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKLSAgICAKKwogICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgIHJlc3VsdC5hcHBlbmQo
cmVjdFBhcmVuKTsKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIENTU1dyYXBTaGFwZVJlY3Q6OmNz
c1RleHQoKSBjb25zdAogICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogCiAgICAgcmVzdWx0LmFw
cGVuZChtX2hlaWdodC0+Y3NzVGV4dCgpKTsKLSAgICAKKwogICAgIGlmIChtX3JhZGl1c1guZ2V0
KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb21tYSk7CiAgICAgICAgIHJlc3VsdC5hcHBl
bmQobV9yYWRpdXNYLT5jc3NUZXh0KCkpOwpAQCAtNjYsOSArNjYsOSBAQCBTdHJpbmcgQ1NTV3Jh
cFNoYXBlUmVjdDo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1f
cmFkaXVzWS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJlc3Vs
dC5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIAorCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOwogfQogCkBAIC03Niw3ICs3Niw3IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVDaXJjbGU6OmNz
c1RleHQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBj
aXJjbGVQYXJlbiwgKCJjaXJjbGUoIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBjb21tYSwgKCIsICIpKTsKLSAgICAKKwogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0
OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAgIHJlc3VsdC5hcHBlbmQoY2ly
Y2xlUGFyZW4pOwpAQCAtODksNyArODksNyBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2lyY2xlOjpj
c3NUZXh0KCkgY29uc3QKIAogICAgIHJlc3VsdC5hcHBlbmQobV9yYWRpdXMtPmNzc1RleHQoKSk7
CiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwotICAgICAgICAgICAgCisKICAgICByZXR1cm4gcmVz
dWx0LnRvU3RyaW5nKCk7CiB9CiAKQEAgLTk3LDcgKzk3LDcgQEAgU3RyaW5nIENTU1dyYXBTaGFw
ZUVsbGlwc2U6OmNzc1RleHQoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgU3RyaW5nLCBlbGxpcHNlUGFyZW4sICgiZWxsaXBzZSgiKSk7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGNvbW1hLCAoIiwgIikpOwotICAgIAorCiAgICAgU3RyaW5n
QnVpbGRlciByZXN1bHQ7CiAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgzMik7CiAgICAgcmVz
dWx0LmFwcGVuZChlbGxpcHNlUGFyZW4pOwpAQCAtMTEzLDcgKzExMyw3IEBAIFN0cmluZyBDU1NX
cmFwU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkgY29uc3QKIAogICAgIHJlc3VsdC5hcHBlbmQobV9y
YWRpdXNZLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICAgICAgICAg
IAorCiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCkBAIC0xMjIsNyArMTIyLDcg
QEAgU3RyaW5nIENTU1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBwb2x5Z29uUGFyZW5FdmVuT2RkLCAoInBvbHln
b24oZXZlbm9kZCwgIikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBw
b2x5Z29uUGFyZW5Ob25aZXJvLCAoInBvbHlnb24obm9uemVybywgIikpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKLSAgICAKKwogICAgIFN0
cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwogICAg
IGlmIChtX3dpbmRSdWxlID09IFJVTEVfRVZFTk9ERCkKQEAgLTEzOSw5ICsxMzksOSBAQCBTdHJp
bmcgQ1NTV3JhcFNoYXBlUG9seWdvbjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY29tbWEpOwogICAgICAgICByZXN1bHQuYXBwZW5kKG1fdmFsdWVzLmF0KGkgKyAxKS0+
Y3NzVGV4dCgpKTsKICAgICB9Ci0gICAgCisKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAg
ICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NXcmFwU2hhcGVzLmgKaW5kZXggOTE3OGViYi4uM2ZmOWZhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTV3JhcFNoYXBlcy5oCkBAIC0xMiw3ICsxMiw3IEBACiAgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKKyAqCiAgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkK
ICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKQEAgLTQ1LDE1ICs0NSwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgIENTU19XUkFQX1NIQVBFX0NJUkNMRSA9IDIsCiAgICAgICAgIENTU19XUkFQX1NIQVBF
X0VMTElQU0UgPSAzLAogICAgICAgICBDU1NfV1JBUF9TSEFQRV9QT0xZR09OID0gNCwKLSAgICAg
ICAgQ1NTX1dSQVBfU0hBUEVfUEFUSCA9IDUgICAgICAgIAorICAgICAgICBDU1NfV1JBUF9TSEFQ
RV9QQVRIID0gNQogICAgIH07Ci0gICAgCisKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpID0gMDsK
ICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwogCiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+Q1NTV3JhcFNoYXBlKCkgeyB9Ci0gICAgCisKIHByb3RlY3RlZDoKICAgICBDU1NX
cmFwU2hhcGUoKSB7IH0KIH07CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7IH0KICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcmFkaXVzWCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWC5n
ZXQoKTsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXNZKCkgY29uc3QgeyByZXR1cm4g
bV9yYWRpdXNZLmdldCgpOyB9Ci0gICAgCisKICAgICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBsZWZ0OyB9CiAgICAgdm9pZCBzZXRU
b3AoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9wOyB9CiAg
ICAgdm9pZCBzZXRXaWR0aChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB3aWR0aCkgeyBt
X3dpZHRoID0gd2lkdGg7IH0KQEAgLTc4LDEwICs3OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIHsgcmV0dXJuIENTU19XUkFQX1NIQVBFX1JFQ1Q7IH0KICAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTV3Jh
cFNoYXBlUmVjdCgpIHsgfQotICAgIAorCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBt
X3RvcDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fd2lkdGg7CkBAIC05NywxNyArOTcsMTcgQEAgcHVibGljOgog
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0LmdldCgp
OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdl
dCgpOyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIG1f
cmFkaXVzLmdldCgpOyB9Ci0gICAgCisKICAgICB2b2lkIHNldExlZnQoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gbGVmdCkgeyBtX2xlZnQgPSBsZWZ0OyB9CiAgICAgdm9pZCBzZXRUb3Ao
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wKSB7IG1fdG9wID0gdG9wOyB9CiAgICAg
dm9pZCBzZXRSYWRpdXMoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzKSB7IG1f
cmFkaXVzID0gcmFkaXVzOyB9CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIHsgcmV0dXJuIENT
U19XUkFQX1NIQVBFX0NJUkNMRTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25z
dDsKLSAgICAKKwogcHJpdmF0ZToKICAgICBDU1NXcmFwU2hhcGVDaXJjbGUoKSB7IH0KLSAgICAK
KwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90b3A7CiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBtX2xlZnQ7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Jh
ZGl1czsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9wLmdldCgpOyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1guZ2V0KCk7IH0KICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcmFkaXVzWSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFkaXVzWS5nZXQoKTsg
fQotICAgIAorCiAgICAgdm9pZCBzZXRMZWZ0KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQogICAgIHZvaWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsgfQogICAgIHZvaWQgc2V0UmFkaXVz
WChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXNYKSB7IG1fcmFkaXVzWCA9IHJh
ZGl1c1g7IH0KQEAgLTEyOSwxMCArMTI5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVHlw
ZSB0eXBlKCkgeyByZXR1cm4gQ1NTX1dSQVBfU0hBUEVfRUxMSVBTRTsgfQogICAgIHZpcnR1YWwg
U3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICAKKwogcHJpdmF0ZToKICAgICBDU1NXcmFwU2hh
cGVFbGxpcHNlKCkgeyB9Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
dG9wOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OwogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbV9yYWRpdXNYOwpAQCAtMTQyLDMwICsxNDIsMzAgQEAgcHJpdmF0
ZToKIGNsYXNzIENTU1dyYXBTaGFwZVBvbHlnb24gOiBwdWJsaWMgQ1NTV3JhcFNoYXBlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGVQb2x5Z29uPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTV3JhcFNoYXBlUG9seWdvbik7IH0KLSAgICAKKwog
ICAgIHZvaWQgYXBwZW5kUG9pbnQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geSkKLSAgICB7IAorICAgIHsKICAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKHgpOwogICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoeSk7CiAgICAgfQotICAg
IAorCiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZ2V0WEF0KHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fdmFsdWVzLmF0KGkgKiAyKTsgfQogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGdldFlBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX3ZhbHVlcy5hdChpICogMiAr
IDEpOyB9Ci0gICAgCisKICAgICB2b2lkIHNldFdpbmRSdWxlKFdpbmRSdWxlIHcpIHsgbV93aW5k
UnVsZSA9IHc7IH0KICAgICBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZFJ1bGU7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgeyByZXR1cm4gQ1NTX1dS
QVBfU0hBUEVfUE9MWUdPTjsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LSAgICAKKwogcHJpdmF0ZToKICAgICBDU1NXcmFwU2hhcGVQb2x5Z29uKCkKICAgICAgICAgOiBt
X3dpbmRSdWxlKFJVTEVfTk9OWkVSTykKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgVmVjdG9y
PFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiBtX3ZhbHVlczsKLSAgICBXaW5kUnVsZSBtX3dp
bmRSdWxlOyAgICAKKyAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhbHVlLmNwcAppbmRleCA5OTFmYzZlLi42YjA5MmIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udFZhbHVlLmNwcApAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFN0cmluZyBGb250VmFsdWU6OmNzc1RleHQoKSBjb25zdAogewotICAgIC8v
IGZvbnQgdmFyaWFudCB3ZWlnaHQgc2l6ZSAvIGxpbmUtaGVpZ2h0IGZhbWlseSAKKyAgICAvLyBm
b250IHZhcmlhbnQgd2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkKIAogICAgIFN0cmlu
ZyByZXN1bHQoIiIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCmluZGV4IDVmZTA1MGEuLjg2
ZWUyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCkBAIC03Miw3ICs3Miw3IEBAIE1lZGlh
TGlzdDo6TWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQsIGNvbnN0IFN0
cmluZyYgbWVkaWEsIGJvb2wKICAgICAvLyBGSVhNRTogcGFyc2luZyBjYW4gZmFpbC4gVGhlIHBy
b2JsZW0gd2l0aCBmYWlsaW5nIGNvbnN0cnVjdG9yIGlzIHRoYXQKICAgICAvLyB3ZSB3b3VsZCBu
ZWVkIGFkZGl0aW9uYWwgZmxhZyBzYXlpbmcgTWVkaWFMaXN0IGlzIG5vdCB2YWxpZAogICAgIC8v
IFBhcnNlIGNhbiBmYWlsIG9ubHkgd2hlbiBmYWxsYmFja1RvRGVzY3JpcHRvciA9PSBmYWxzZSwg
aS5lIHdoZW4gSFRNTDQgbWVkaWEgZGVzY3JpcHRvcgotICAgIC8vIGZvcndhcmQtY29tcGF0aWJs
ZSBzeW50YXggaXMgbm90IGluIHVzZS4gCisgICAgLy8gZm9yd2FyZC1jb21wYXRpYmxlIHN5bnRh
eCBpcyBub3QgaW4gdXNlLgogICAgIC8vIERPTUltcGxlbWVudGF0aW9uQ1NTIHNlZW1zIHRvIG1h
bmRhdGUgdGhhdCBtZWRpYSBkZXNjcmlwdG9ycyBhcmUgdXNlZAogICAgIC8vIGZvciBib3RoIGh0
bWwgYW5kIHN2ZywgZXZlbiB0aG91Z2ggc3ZnOnN0eWxlIGRvZXNuJ3QgdXNlIG1lZGlhIGRlc2Ny
aXB0b3JzCiAgICAgLy8gQ3VycmVudGx5IHRoZSBvbmx5IHBsYWNlcyB3aGVyZSBwYXJzaW5nIGNh
biBmYWlsIGFyZQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRp
dW0oY29uc3QgU3RyaW5nJiBvbGRNZWRpdW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFlYykKICAgICAgICAgbm90
aWZ5Q2hhbmdlZCgpOwogfQpAQCAtMTkxLDExICsxOTEsMTEgQEAgdm9pZCBNZWRpYUxpc3Q6OnNl
dE1lZGlhVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAg
ICAgICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghbV9mYWxsYmFjaykgewogICAgICAgICAgICAgZWMg
PSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9ICAgICAgICAgICAg
CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gIiwsLCwiIGZhbGxzIHN0cmFpZ2h0IHRocm91Z2gs
IGJ1dCBpcyBub3QgdmFsaWQgdW5sZXNzIGZhbGxiYWNrCiAgICAgaWYgKCFtX2ZhbGxiYWNrICYm
IGxpc3QuYmVnaW4oKSA9PSBsaXN0LmVuZCgpKSB7CkBAIC0yMDUsNyArMjA1LDcgQEAgdm9pZCBN
ZWRpYUxpc3Q6OnNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IGVjID0gMDsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9xdWVyaWVzKTsKICAgICBtX3F1ZXJpZXMg
PSB0ZW1wTWVkaWFMaXN0LT5tX3F1ZXJpZXM7CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBNZWRp
YUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbmcmIG5ld01lZGl1bSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgICAgICBlYyA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAg
ICBpZiAoIWVjKQogICAgICAgICBub3RpZnlDaGFuZ2VkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeS5jcHAKaW5kZXggYzQ3NmEyMS4uOGZhNTgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
LmNwcApAQCAtMjMsNyArMjMsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCkBAIC02OSw3ICs2OSw3IEBAIFN0cmluZyBNZWRpYVF1ZXJ5OjpzZXJpYWxpemUo
KSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotc3RhdGljIGJvb2wg
ZXhwcmVzc2lvbkNvbXBhcmUoY29uc3QgT3duUHRyPE1lZGlhUXVlcnlFeHA+JiBhLCBjb25zdCBP
d25QdHI8TWVkaWFRdWVyeUV4cD4mIGIpIAorc3RhdGljIGJvb2wgZXhwcmVzc2lvbkNvbXBhcmUo
Y29uc3QgT3duUHRyPE1lZGlhUXVlcnlFeHA+JiBhLCBjb25zdCBPd25QdHI8TWVkaWFRdWVyeUV4
cD4mIGIpCiB7CiAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS0+c2VyaWFsaXplKCksIGIt
PnNlcmlhbGl6ZSgpKSA8IDA7CiB9CkBAIC05NSw3ICs5NSw3IEBAIE1lZGlhUXVlcnk6Ok1lZGlh
UXVlcnkoUmVzdHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgUGFzc093blB0cjxW
ZWN0b3I8CiAgICAgICAgIC8vIGlmIG5vdCBhbGwgb2YgdGhlIGV4cHJlc3Npb25zIGlzIHZhbGlk
IHRoZSBtZWRpYSBxdWVyeSBtdXN0IGJlIGlnbm9yZWQuCiAgICAgICAgIGlmICghbV9pZ25vcmVk
KQogICAgICAgICAgICAgbV9pZ25vcmVkID0gIW1fZXhwcmVzc2lvbnMtPmF0KGkpLT5pc1ZhbGlk
KCk7Ci0gCisKICAgICAgICAgaWYgKG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSA9
PSBrZXkpCiAgICAgICAgICAgICBtX2V4cHJlc3Npb25zLT5yZW1vdmUoaSk7CiAgICAgICAgIGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCmluZGV4IDRjYzM2NjUuLmNiMTQxNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnkuaApAQCAtMjMsNyArMjMsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIE1lZGlhUXVlcnlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmgKaW5kZXggMDVjOGRjOS4uYmE4MzhmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5oCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
ICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
ICNpZm5kZWYgTWVkaWFRdWVyeUV2YWx1YXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4
cC5jcHAKaW5kZXggZTk3MDQwMC4uMWY1MzIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFeHAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
RXhwLmNwcApAQCAtMjMsNyArMjMsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4
cC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuaAppbmRleCA3ZTRkNDc3Li5m
ZWI2MWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKQEAgLTIzLDcgKzIzLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBNZWRpYVF1ZXJ5RXhwX2gKQEAgLTU3LDE2
ICs1NywxNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBt
X2lzVmFsaWQ7IH0KIAotICAgIGJvb2wgaXNWaWV3cG9ydERlcGVuZGVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aE1lZGlhRmVhdHVy
ZSB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0TWVkaWFGZWF0dXJlIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlhRmVhdHVyZSB8fAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09
IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5faGVpZ2h0TWVkaWFGZWF0dXJlIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlhRmVhdHVyZSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om9yaWVudGF0aW9uTWVkaWFGZWF0dXJlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmU7ICB9CisgICAgYm9vbCBpc1ZpZXdwb3J0
RGVwZW5kZW50KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWln
aHRNZWRpYUZlYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlh
RmVhdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2hlaWdodE1lZGlhRmVhdHVy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3dpZHRoTWVkaWFGZWF0dXJlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlOyAgfQogCiAgICAgU3RyaW5nIHNl
cmlhbGl6ZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFpci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1BhaXIuaAppbmRleCBjNzZiZDgyLi5hOTUzNzBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUGFpci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9QYWlyLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHJpdmF0ZToKICAgICBQYWlyKCkgOiBtX2ZpcnN0
KDApLCBtX3NlY29uZCgwKSB7IH0KICAgICBQYWlyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGZpcnN0LCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmQpCiAgICAgICAg
IDogbV9maXJzdChmaXJzdCksIG1fc2Vjb25kKHNlY29uZCkgeyB9Ci0gICAgCisKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fZmlyc3Q7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3NlY29uZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDBjMmFhZmYuLjdlZjNiMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCkBAIC03MywxOSArNzMsMTkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRTVkdQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm8KICAgICBO
b2RlKiBub2RlID0gbV9ub2RlLmdldCgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCisKICAgICAvLyBNYWtlIHN1cmUgb3VyIGxheW91dCBpcyB1cCB0byBkYXRlIGJl
Zm9yZSB3ZSBhbGxvdyBhIHF1ZXJ5IG9uIHRoZXNlIGF0dHJpYnV0ZXMuCiAgICAgaWYgKHVwZGF0
ZUxheW91dCkKICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAg
ICAgIAorCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbm9kZS0+Y29tcHV0ZWRTdHlsZSgpOwog
ICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7CiAgICAgaWYgKCFzdmdT
dHlsZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5SUQpKSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlD
bGlwUnVsZToKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2
Z1N0eWxlLT5jbGlwUnVsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdD
U1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKaW5kZXgg
NmQ3MmIzNS4uNmI2MjNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKQEAgLTE0
NSw3ICsxNDUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5Q29s
b3JJbnRlcnBvbGF0aW9uOiAgIC8vIGF1dG8gfCBzUkdCIHwgbGluZWFyUkdCIHwgaW5oZXJpdAot
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAgCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6CiAgICAgICAgIGlmIChpZCA9
PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVTcmdiIHx8IGlkID09IENTU1ZhbHVlTGlu
ZWFycmdiKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CkBAIC0yMjcsNyArMjI3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgp
OwogCiAgICAgICAgIGJyZWFrOwotICAgICAgICAKKwogICAgIGNhc2UgQ1NTUHJvcGVydHlWZWN0
b3JFZmZlY3Q6IC8vIG5vbmUgfCBub24tc2NhbGluZy1zdHJva2UgfCBpbmhlcml0CiAgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZU5vbmUgfHwgaWQgPT0gQ1NTVmFsdWVOb25TY2FsaW5nU3Ryb2tl
KQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4N2E4NTIxLi5kZDRlNTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xMTEsNyArMTExLDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogCiAgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0gbV9zdHlsZS0+YWNj
ZXNzU1ZHU3R5bGUoKTsKICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZVR5cGUgPSB2YWx1ZS0+Y3Nz
VmFsdWVUeXBlKCk7Ci0gICAgCisKICAgICBib29sIGlzSW5oZXJpdCA9IG1fcGFyZW50Tm9kZSAm
JiB2YWx1ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTkhFUklUOwogICAgIGJvb2wg
aXNJbml0aWFsID0gdmFsdWVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU5JVElBTCB8
fCAoIW1fcGFyZW50Tm9kZSAmJiB2YWx1ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
TkhFUklUKTsKIApAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlTVkdQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKGFsaWdubWVudEJhc2VsaW5lLCBBbGlnbm1lbnRCYXNlbGlu
ZSkKICAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgc3Znc3R5bGUtPnNldEFsaWdubWVudEJh
c2VsaW5lKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjk5LDggKzI5OSw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9wZXJ0
eShpbnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKGZpbGxPcGFjaXR5LCBGaWxsT3BhY2l0eSkKICAgICAgICAgICAgIGlmICghcHJp
bWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
ICAgIGZsb2F0IGYgPSAwLjBmOyAgICAKKworICAgICAgICAgICAgZmxvYXQgZiA9IDAuMGY7CiAg
ICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
CiAgICAgICAgICAgICAgICAgZiA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgLyAx
MDAuMGY7CkBAIC0zMTcsOCArMzE3LDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNW
R1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoc3Ryb2tlT3BhY2l0eSwgU3Ryb2tlT3BhY2l0eSkKICAgICAgICAg
ICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgICAgIGZsb2F0IGYgPSAwLjBmOyAgICAKKworICAgICAgICAgICAgZmxvYXQg
ZiA9IDAuMGY7CiAgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRp
dmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UpCiAgICAgICAgICAgICAgICAgZiA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkgLyAxMDAuMGY7CkBAIC0zMzUsOCArMzM1LDggQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAg
ICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3RvcE9wYWNpdHksIFN0b3BPcGFjaXR5KQog
ICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICAgICAgZmxvYXQgZiA9IDAuMGY7ICAgIAorCisgICAgICAgICAg
ICBmbG9hdCBmID0gMC4wZjsKICAgICAgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUt
PnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBmID0gcHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wZjsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBzdmdzdHlsZS0+c2V0TWFza2VyUmVzb3VyY2UoU1ZHVVJJUmVmZXJlbmNlOjpm
cmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIG1fZWxlbWVudC0+ZG9jdW1lbnQoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU4Miw3ICs1ODIsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBzaG91bGQgbm90IGhh
dmUgYSBzcHJlYWQgb3Igc3R5bGUKICAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3ByZWFkKTsK
ICAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3R5bGUpOwotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBPd25QdHI8U2hhZG93RGF0YT4gc2hhZG93RGF0YSA9IGFkb3B0UHRyKG5ldyBT
aGFkb3dEYXRhKHgsIHksIGJsdXIsIDAsIE5vcm1hbCwgZmFsc2UsIGNvbG9yLmlzVmFsaWQoKSA/
IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0
U2hhZG93KHNoYWRvd0RhdGEucmVsZWFzZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggNGFiMTEwYy4uMjkyOTdhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTYyLDkgKzYyLDkgQEAKICNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Ci0gICAgCisKIHN0YXRpYyBib29sIGh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRp
dmVWYWx1ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyKTsKIAogU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCkBA
IC0xNzUsOCArMTc1LDggQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OmNvbGxlY3RJZGVudGlmaWVy
SGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWcKICAgICB1bnNpZ25lZCog
aGFzaCA9IGlkZW50aWZpZXJIYXNoZXM7CiAgICAgdW5zaWduZWQqIGVuZCA9IGlkZW50aWZpZXJI
YXNoZXMgKyBtYXhpbXVtSWRlbnRpZmllckNvdW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlv
biByZWxhdGlvbiA9IHNlbGVjdG9yLT5yZWxhdGlvbigpOwotICAgIAotICAgIC8vIFNraXAgdGhl
IHRvcG1vc3Qgc2VsZWN0b3IuIEl0IGlzIGhhbmRsZWQgcXVpY2tseSBieSB0aGUgcnVsZSBoYXNo
ZXMuICAgIAorCisgICAgLy8gU2tpcCB0aGUgdG9wbW9zdCBzZWxlY3Rvci4gSXQgaXMgaGFuZGxl
ZCBxdWlja2x5IGJ5IHRoZSBydWxlIGhhc2hlcy4KICAgICBib29sIHNraXBPdmVyU3Vic2VsZWN0
b3JzID0gdHJ1ZTsKICAgICBmb3IgKHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAv
LyBPbmx5IGNvbGxlY3QgaWRlbnRpZmllcnMgdGhhdCBtYXRjaCBhbmNlc3RvcnMuCkBAIC0yMDcs
MjQgKzIwNywyNCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyogbGlua0F0dHJp
YnV0ZShOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIAorCiAgICAgQVNTRVJUKG5vZGUtPmlzRWxlbWVudE5vZGUoKSk7CiAgICAg
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICBpZiAo
ZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwotICAgIAorCiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAo
ZWxlbWVudC0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAmZWxlbWVudC0+Z2V0QXR0
cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKICNlbmRpZgotICAgIAorCiAgICAgcmV0dXJu
IDA7CiB9CiAKIEVJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRl
U2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+
aXNMaW5rKCkpOwotICAgIAorCiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBhdHRyID0gbGlua0F0
dHJpYnV0ZShlbGVtZW50KTsKICAgICBpZiAoIWF0dHIgfHwgYXR0ci0+aXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOwpAQCAtMjQxLDEzICsyNDEsMTMgQEAgRUluc2lkZUxp
bmsgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIEluc2lkZVVudmlzaXRlZExpbms7Ci0gICAg
CisKICAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5rOwotICAgIAorCiAgICAgbV9saW5rc0NoZWNr
ZWRGb3JWaXNpdGVkU3RhdGUuYWRkKGhhc2gpOwotICAgIAorCiAjaWYgVVNFKFBMQVRGT1JNX1NU
UkFURUdJRVMpCiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT52aXNpdGVkTGlua1N0
cmF0ZWd5KCktPmlzTGlua1Zpc2l0ZWQocGFnZSwgaGFzaCwgbV9kb2N1bWVudC0+YmFzZVVSTCgp
LCAqYXR0cikgPyBJbnNpZGVWaXNpdGVkTGluayA6IEluc2lkZVVudmlzaXRlZExpbms7CiAjZWxz
ZQpAQCAtMjg5LDcgKzI4OSw3IEBAIGlubGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9y
KGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqCiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHRvcENoaWxkT3JTdWJzZWxlY3RvcikgewogICAgICAgICAgICAgLy8gQ2hp
bGQgb3Igc3Vic2VsZWN0b3IgY2hlY2sgZmFpbGVkLgotICAgICAgICAgICAgLy8gSWYgdGhlIG1h
dGNoIGVsZW1lbnQgaXMgbnVsbCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yIHdhcyBhbHNvIHRoZSB2
ZXJ5IHRvcG1vc3Qgc2VsZWN0b3IgYW5kIGhhZCB0byBtYXRjaCAKKyAgICAgICAgICAgIC8vIElm
IHRoZSBtYXRjaCBlbGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxz
byB0aGUgdmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2gKICAgICAgICAgICAg
IC8vIHRoZSBvcmlnaW5hbCBlbGVtZW50IHdlIHdlcmUgY2hlY2tpbmcuCiAgICAgICAgICAgICBp
ZiAoIXRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zMDQsMTIgKzMwNCwxMiBAQCBpbmxpbmUgYm9vbCBmYXN0Q2hlY2tT
aW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50
KgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNv
bnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlLCBjb25zdCBRdWFs
aWZpZWROYW1lJikgCitpbmxpbmUgYm9vbCBjaGVja0NsYXNzVmFsdWUoY29uc3QgRWxlbWVudCog
ZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmKQog
ewogICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0
eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHZhbHVlKTsKIH0K
IAotaW5saW5lIGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21p
Y1N0cmluZ0ltcGwqIHZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJikgCitpbmxpbmUgYm9vbCBj
aGVja0lEVmFsdWUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgQXRvbWljU3RyaW5nSW1wbCogdmFs
dWUsIGNvbnN0IFF1YWxpZmllZE5hbWUmKQogewogICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgp
ICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpID09IHZhbHVlOwogfQpA
QCAtMzIzLDcgKzMyMyw3IEBAIGlubGluZSBib29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVu
dCosIEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBRdWFsaWZpZWROYW1lCiB7CiAgICAgcmV0dXJu
IHRydWU7CiB9Ci0gICAgCisKIH0KIAogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0
Q2hlY2tSaWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkgY29u
c3QKQEAgLTM1OCwxMiArMzU4LDEyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lCiAgICAgY29u
c3QgRWxlbWVudCogdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50ID0gMDsKICAgICBp
ZiAoc2VsZWN0b3ItPnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkNoaWxkIHx8IHNlbGVjdG9y
LT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKICAgICAgICAgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgCisKICAgICBpZiAoc2VsZWN0b3ItPnJl
bGF0aW9uKCkgIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQogICAgICAgICBlbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgIAorCiAgICAgc2VsZWN0b3IgPSBzZWxlY3Rv
ci0+dGFnSGlzdG9yeSgpOwotICAgIAorCiAgICAgLy8gV2Uga25vdyB0aGlzIGNvbXBvdW5kIHNl
bGVjdG9yIGhhcyBkZXNjZW5kYW50LCBjaGlsZCBhbmQgc3Vic2VsZWN0b3IgY29tYmluYXRvcnMg
b25seSBhbmQgYWxsIGNvbXBvbmVudHMgYXJlIHNpbXBsZS4KICAgICB3aGlsZSAoc2VsZWN0b3Ip
IHsKICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRjaCkgewpAQCAtNDQyLDEwICs0NDIs
MTAgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0
byBtYXRjaAogICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8s
IGlzU3ViU2VsZWN0b3IsIHZpc2l0ZWRNYXRjaFR5cGUsIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBh
cmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwotICAgIAor
CiAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9ycyBoYXMgdG8gbWF0Y2gKICAgICBDU1NT
ZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb24gPSBzZWwtPnJlbGF0aW9uKCk7Ci0gICAgCisKICAg
ICAvLyBQcmVwYXJlIG5leHQgc2VsCiAgICAgc2VsID0gc2VsLT50YWdIaXN0b3J5KCk7CiAgICAg
aWYgKCFzZWwpCkBAIC00NTUsNyArNDU1LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1h
dGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAg
ICAgICAvLyBCYWlsLW91dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBw
c2V1ZG9TdHlsZQogICAgICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3Bz
ZXVkb1N0eWxlICE9IGR5bmFtaWNQc2V1ZG8pCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JG
YWlsc0NvbXBsZXRlbHk7Ci0gICAgCisKICAgICAgICAgLy8gRGlzYWJsZSA6dmlzaXRlZCBtYXRj
aGluZyB3aGVuIHdlIHNlZSB0aGUgZmlyc3QgbGluayBvciB0cnkgdG8gbWF0Y2ggYW55dGhpbmcg
ZWxzZSB0aGFuIGFuIGFuY2VzdG9ycy4KICAgICAgICAgaWYgKCFpc1N1YlNlbGVjdG9yICYmIChl
LT5pc0xpbmsoKSB8fCAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVs
YXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkKSkpCiAgICAgICAgICAgICB2aXNpdGVkTWF0Y2hU
eXBlID0gVmlzaXRlZE1hdGNoRGlzYWJsZWQ7CkBAIC00NzMsNyArNDczLDcgQEAgU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NT
ZWxlY3Rvciogc2VsLAogICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDogCisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6Q2hpbGQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIENvbnRhaW5lck5vZGUq
IG4gPSBlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVu
dE5vZGUoKSkKQEAgLTUzMSw3ICs1MzEsNyBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0
Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAg
ICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNl
LCB2aXNpdGVkTWF0Y2hUeXBlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKIH0KIApAQCAtNTQ1LDcgKzU0NSw3IEBAIHN0YXRp
YyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0
dHJpYnV0ZXNTZXQoKQogICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBI
VE1MIDQuMDEgd2l0aCB2YWx1ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZl
CiAgICAgLy8gTW96aWxsYSB0cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2
ZSwgdGh1cyBzbyBkbyB3ZS4KICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNl
dCA9IG5ldyBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPjsKLSAgICAKKwogICAgIGFkZExvY2Fs
TmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdF9jaGFyc2V0QXR0cik7CiAgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgYWNjZXB0QXR0cik7CiAgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgYWxpZ25BdHRyKTsKQEAgLTU5MSw3ICs1OTEsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4qIGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKICAg
ICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2YWxpZ25BdHRyKTsKICAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCB2YWx1ZXR5cGVBdHRyKTsKICAgICBhZGRMb2NhbE5hbWVUb1NldChh
dHRyU2V0LCB2bGlua0F0dHIpOwotICAgIAorCiAgICAgcmV0dXJuIGF0dHJTZXQ7CiB9CiAKQEAg
LTYwNyw3ICs2MDcsNyBAQCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmli
dXRlKiBhdHRyaWJ1dGVJdGVtLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbQogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBhdHRyaWJ1dGVJdGVtLT52YWx1ZSgpOwogICAgIGlmICh2YWx1ZS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgc3dpdGNoIChtYXRj
aCkgewogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgogICAgICAgICBpZiAoY2FzZVNlbnNp
dGl2ZSA/IHNlbGVjdG9yVmFsdWUgIT0gdmFsdWUgOiAhZXF1YWxJZ25vcmluZ0Nhc2Uoc2VsZWN0
b3JWYWx1ZSwgdmFsdWUpKQpAQCAtNjE4LDcgKzYxOCw3IEBAIHN0YXRpYyBib29sIGF0dHJpYnV0
ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpNYXRj
aCBtCiAgICAgICAgICAgICAvLyBJZ25vcmUgZW1wdHkgc2VsZWN0b3JzIG9yIHNlbGVjdG9ycyBj
b250YWluaW5nIHNwYWNlcwogICAgICAgICAgICAgaWYgKHNlbGVjdG9yVmFsdWUuY29udGFpbnMo
JyAnKSB8fCBzZWxlY3RvclZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRTZWFyY2hB
dCA9IDA7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAgICAgIHNpemVf
dCBmb3VuZFBvcyA9IHZhbHVlLmZpbmQoc2VsZWN0b3JWYWx1ZSwgc3RhcnRTZWFyY2hBdCwgY2Fz
ZVNlbnNpdGl2ZSk7CkBAIC02MjksNyArNjI5LDcgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFs
dWVNYXRjaGVzKEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1ZS5sZW5ndGgoKSB8fCB2YWx1
ZVtlbmRTdHJdID09ICcgJykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBXZSBm
b3VuZCBhIG1hdGNoLgogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgICAgIC8vIE5vIG1hdGNoLiBLZWVwIGxvb2tpbmcuCiAgICAgICAgICAgICAgICAg
c3RhcnRTZWFyY2hBdCA9IGZvdW5kUG9zICsgMTsKICAgICAgICAgICAgIH0KQEAgLTY2MSw3ICs2
NjEsNyBAQCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRy
aWJ1dGVJdGVtLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02NjksMTQgKzY2
OSwxNCBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVzKE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlcywgQ1NTU2VsZWN0b3I6Ok1hdGNoIG1hdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZUl0ZW0gPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAKKwog
ICAgICAgICBpZiAoIVNlbGVjdG9yQ2hlY2tlcjo6YXR0cmlidXRlTmFtZU1hdGNoZXMoYXR0cmli
dXRlSXRlbSwgc2VsZWN0b3JBdHRyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
KwogICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWVNYXRjaGVzKGF0dHJpYnV0ZUl0ZW0sIG1hdGNo
LCBzZWxlY3RvclZhbHVlLCBjYXNlU2Vuc2l0aXZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjg1LDI2ICs2ODUs
MjYgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
IHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICBBU1NFUlQoZSk7CiAgICAgaWYgKCFT
ZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoZSwgc2VsKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCiAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCiAg
ICAgICAgIHJldHVybiBlLT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlKS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbC0+dmFsdWUoKSk7Ci0gICAgCisKICAgICBp
ZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKICAgICAgICAgcmV0dXJuIGUtPmhh
c0lEKCkgJiYgZS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCk7Ci0gICAg
CisKICAgICBpZiAoc2VsLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmlidXRlKCk7Ci0gICAgICAgIAorCiAgICAg
ICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcyA9IGUtPmF0dHJpYnV0ZXModHJ1ZSk7CiAgICAg
ICAgIGlmICghYXR0cmlidXRlcykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
CisKICAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0
bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShhdHRyKTsKLSAgICAgICAgCisKICAg
ICAgICAgaWYgKCFhbnlBdHRyaWJ1dGVNYXRjaGVzKGF0dHJpYnV0ZXMsIHN0YXRpY19jYXN0PENT
U1NlbGVjdG9yOjpNYXRjaD4oc2VsLT5tX21hdGNoKSwgYXR0ciwgc2VsLT52YWx1ZSgpLCBjYXNl
U2Vuc2l0aXZlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICBpZiAoc2VsLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykgewogICAgICAg
ICAvLyBIYW5kbGUgOm5vdCB1cCBmcm9udC4KICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpIHsKQEAgLTcyOCw3ICs3MjgsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50
KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgpID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
IW1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gTm9ybWFsIGVsZW1lbnQgcHNldWRvIGNsYXNz
IGNoZWNraW5nLgogICAgICAgICBzd2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7CiAgICAgICAg
ICAgICAvLyBQc2V1ZG8gY2xhc3NlczoKQEAgLTg0OCw3ICs4NDgsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQ
c2V1ZG9JZCYgZAogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5w
YXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBib29sIGxhc3RDaGlsZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgTm9kZSogbiA9IGUtPnByZXZpb3VzU2libGluZygpOwog
ICAgICAgICAgICAgICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKQEAgLTkzMCw3ICs5MzAsNyBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2Vs
LCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5n
UnVsZXNPbmx5KSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxl
ID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFN0eWxlIDogZS0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTkz
OSw3ICs5MzksNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NT
ZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgICAg
ICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5Rm9yd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChzZWwtPm1h
dGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CkBAIC05NTYsMTMgKzk1NiwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAg
ICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgbiA9IG4t
PnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
KwogICAgICAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8g
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAg
cGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMo
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQpAQCAtMTA1OSw3ICsxMDU5LDcgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9BY3RpdmU6CiAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhl
biA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KLSAgICAgICAgICAg
IC8vIGhyZWYgYW5kICo6YWN0aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcuIAorICAgICAg
ICAgICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4KICAg
ICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5o
YXNUYWcoKSAmJiAhZS0+aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICBlbGVtZW50
U3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKQEAgLTEwODYsNyArMTA4Niw3
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBz
ZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlz
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgZS0+aXNSZWFkT25seUZv
cm1Db250cm9sKCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRXcml0ZTog
CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRXcml0ZToKICAgICAgICAgICAg
IGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gZS0+aXNUZXh0Rm9ybUNvbnRyb2woKSAm
JiAhZS0+aXNSZWFkT25seUZvcm1Db250cm9sKCk7CkBAIC0xMTUzLDkgKzExNTMsOSBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVt
ZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbjoKLSAgICAg
ICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4gc3RhdGUsIGFu
ZCB0aGUgZG9jdW1lbnQncyBjdXJyZW50IGZ1bGxzY3JlZW4gCi0gICAgICAgICAgICAvLyBlbGVt
ZW50IGlzIGFuIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50LCB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1
ZG9jbGFzcyBhcHBsaWVzIHRvIAotICAgICAgICAgICAgLy8gdGhhdCBlbGVtZW50LiBBbHNvLCBh
biA8aWZyYW1lPiwgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50IHdob3NlIGNoaWxkIGJyb3dz
aW5nIAorICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVl
biBzdGF0ZSwgYW5kIHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgZnVsbHNjcmVlbgorICAgICAgICAg
ICAgLy8gZWxlbWVudCBpcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwgdGhlICdmdWxsLXNj
cmVlbicgcHNldWRvY2xhc3MgYXBwbGllcyB0bworICAgICAgICAgICAgLy8gdGhhdCBlbGVtZW50
LiBBbHNvLCBhbiA8aWZyYW1lPiwgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50IHdob3NlIGNo
aWxkIGJyb3dzaW5nCiAgICAgICAgICAgICAvLyBjb250ZXh0J3MgRG9jdW1lbnQgaXMgaW4gdGhl
IGZ1bGxzY3JlZW4gc3RhdGUgaGFzIHRoZSAnZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxp
ZWQuCiAgICAgICAgICAgICBpZiAoZS0+aXNGcmFtZUVsZW1lbnRCYXNlKCkgJiYgc3RhdGljX2Nh
c3Q8SFRNTEZyYW1lRWxlbWVudEJhc2UqPihlKS0+Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE2OSw3ICsxMTY5LDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxl
bWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVs
bFNjcmVlbkFuY2VzdG9yOgogICAgICAgICAgICAgcmV0dXJuIGUtPmNvbnRhaW5zRnVsbFNjcmVl
bkVsZW1lbnQoKTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRnVsbFNjcmVlbkRv
Y3VtZW50OgotICAgICAgICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNj
cmVlbiBzdGF0ZSwgdGhlICdmdWxsLXNjcmVlbi1kb2N1bWVudCcgcHNldWRvY2xhc3MgYXBwbGll
cyAKKyAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1bGxzY3JlZW4g
c3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBzZXVkb2NsYXNzIGFwcGxpZXMKICAg
ICAgICAgICAgIC8vIHRvIGFsbCBlbGVtZW50cyBvZiB0aGF0IERvY3VtZW50LgogICAgICAgICAg
ICAgaWYgKCFlLT5kb2N1bWVudCgpLT53ZWJraXRJc0Z1bGxTY3JlZW4oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTk2LDEyICsxMTk2LDEyIEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkCiAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxl
bWVudCkgewogICAgICAgICBpZiAoIWVsZW1lbnRTdHlsZSAmJiAhbV9pc0NvbGxlY3RpbmdSdWxl
c09ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlm
IChzZWwtPmlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgbV9oYXNVbmtu
b3duUHNldWRvRWxlbWVudHMgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIGUtPnNoYWRvd1Bz
ZXVkb0lkKCkgPT0gc2VsLT52YWx1ZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IFBzZXVkb0lkIHBzZXVkb0lkID0gQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKHNlbC0+cHNldWRvVHlw
ZSgpKTsKICAgICAgICAgaWYgKHBzZXVkb0lkID09IEZJUlNUX0xFVFRFUikgewogICAgICAgICAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCkpCkBAIC0xMjE4LDE1ICsx
MjE4LDE1IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uCiB7CiAgICAgUmVuZGVyU2Nyb2xsYmFy
KiBzY3JvbGxiYXIgPSBSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgp
OwogICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0eWxl
UmVzb2x2ZSgpOwotICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFj
ayBmb3IgcmVzaXplcnMgYW5kIHNjcm9sbGJhciBjb3JuZXJzLiBFdmVudHVhbGx5IDp3aW5kb3ct
aW5hY3RpdmUgc2hvdWxkIGJlY29tZSBhIHJlYWwKICAgICAvLyBwc2V1ZG8gY2xhc3MgYW5kIGp1
c3QgYXBwbHkgdG8gZXZlcnl0aGluZy4KICAgICBpZiAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQogICAgICAgICByZXR1cm4gIW1fZG9jdW1l
bnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgCisKICAgICBp
ZiAoIXNjcm9sbGJhcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgQVNTRVJU
KHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwogICAgIHN3aXRjaCAo
c2VsLT5wc2V1ZG9UeXBlKCkpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmFibGVk
OgpAQCAtMTI2Myw3ICsxMjYzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xs
YmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRvSWQmKSBjb24KICAgICAgICAg
cmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0
b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrVHJhY2tQYXJ0OwogICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0VuZDoKICAgICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQg
fHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1Bh
cnQ7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRG91YmxlQnV0dG9uOiAKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Eb3VibGVCdXR0b246CiAgICAgICAgIHsKICAgICAgICAgICAg
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVudCA9IHNjcm9sbGJhci0+
dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwogICAgICAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBCYWNrVHJhY2tQYXJ0KQpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNlbCwgUHNldWRv
SWQmKSBjb24KICAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBh
cnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0KQog
ICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRv
bnNEb3VibGVFbmQgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
Qm90aDsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSAKKyAgICAgICAgfQog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1NpbmdsZUJ1dHRvbjoKICAgICAgICAgewogICAg
ICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50ID0gc2Ny
b2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7CkBAIC0xMzM2LDcgKzEzMzYsNyBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvck1hdGNoZXMo
Y29uc3QgRWxlbWVudCogZWxlbWVudCwgYwogdW5zaWduZWQgU2VsZWN0b3JDaGVja2VyOjpkZXRl
cm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlID0gTWF0Y2hBbGw7Ci0gICAgCisKICAgICAvLyBTdGF0aWNh
bGx5IGRldGVybWluZSBpZiB0aGlzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYSBsaW5rIGluIHZpc2l0
ZWQsIHVudmlzaXRlZCBvciBhbnkgc3RhdGUsIG9yIG5ldmVyLgogICAgIC8vIDp2aXNpdGVkIG5l
dmVyIG1hdGNoZXMgb3RoZXIgZWxlbWVudHMgdGhhbiB0aGUgaW5uZXJtb3N0IGxpbmsgZWxlbWVu
dC4KICAgICBmb3IgKDsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rvcnko
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IGY1OWI3NGEuLjc2MGJh
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTY3LDEwICs2NywxMCBA
QCBwdWJsaWM6CiAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqKSBj
b25zdDsKICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKICAgICB2b2lkIHZpc2l0
ZWRTdGF0ZUNoYW5nZWQoTGlua0hhc2ggdmlzaXRlZEhhc2gpOwotICAgIAorCiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogICAgIGJvb2wgc3Ry
aWN0UGFyc2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQotICAgIAorCiAg
ICAgYm9vbCBpc0NvbGxlY3RpbmdSdWxlc09ubHkoKSBjb25zdCB7IHJldHVybiBtX2lzQ29sbGVj
dGluZ1J1bGVzT25seTsgfQogICAgIHZvaWQgc2V0Q29sbGVjdGluZ1J1bGVzT25seShib29sIGIp
IHsgbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgPSBiOyB9CiAKQEAgLTc5LDE0ICs3OSwxNCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzOyB9CiAgICAgdm9pZCBjbGVhckhhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cygpIHsgbV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsg
fQotICAgIAorCiAgICAgc3RhdGljIGJvb2wgdGFnTWF0Y2hlcyhjb25zdCBFbGVtZW50KiwgY29u
c3QgQ1NTU2VsZWN0b3IqKTsKICAgICBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVOYW1lTWF0Y2hlcyhj
b25zdCBBdHRyaWJ1dGUqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CiAgICAgc3RhdGljIGJvb2wg
aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgYm9v
bCBtYXRjaGVzRm9jdXNQc2V1ZG9DbGFzcyhjb25zdCBFbGVtZW50KikgY29uc3Q7CiAgICAgc3Rh
dGljIGJvb2wgZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVu
dCosIGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgc3RhdGljIGJvb2wgY2hlY2tFeGFjdEF0dHJp
YnV0ZShjb25zdCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0b3JBdHRyaWJ1
dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSk7Ci0gICAgCisKICAgICBlbnVt
IExpbmtNYXRjaE1hc2sgeyBNYXRjaExpbmsgPSAxLCBNYXRjaFZpc2l0ZWQgPSAyLCBNYXRjaEFs
bCA9IE1hdGNoTGluayB8IE1hdGNoVmlzaXRlZCB9OwogICAgIHN0YXRpYyB1bnNpZ25lZCBkZXRl
cm1pbmVMaW5rTWF0Y2hUeXBlKGNvbnN0IENTU1NlbGVjdG9yKik7CiAKQEAgLTk0LDcgKzk0LDcg
QEAgcHJpdmF0ZToKICAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVt
ZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgVmlzaXRl
ZE1hdGNoVHlwZSwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxl
KSBjb25zdDsKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3Iq
LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGcmFt
ZUZvY3VzZWQoY29uc3QgRWxlbWVudCopOwotICAgIAorCiAgICAgYm9vbCBmYXN0Q2hlY2tSaWdo
dG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqLCBWaXNpdGVk
TWF0Y2hUeXBlKSBjb25zdDsKICAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JNYXRj
aGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciosIFZpc2l0ZWRNYXRjaFR5cGUp
IGNvbnN0OwogCkBAIC0xMzAsNyArMTMwLDcgQEAgaW5saW5lIEVJbnNpZGVMaW5rIFNlbGVjdG9y
Q2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBOb3RJbnNpZGVMaW5rOwogICAgIHJldHVybiBkZXRlcm1pbmVMaW5rU3RhdGVT
bG93Q2FzZShlbGVtZW50KTsKIH0KLSAgICAKKwogdGVtcGxhdGUgPHVuc2lnbmVkIG1heGltdW1J
ZGVudGlmaWVyQ291bnQ+CiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RSZWplY3RT
ZWxlY3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcykgY29uc3QKIHsKQEAgLTE0
MSw3ICsxNDEsNyBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmZhc3RSZWplY3RTZWxl
Y3Rvcihjb25zdCB1bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9Ci0gICAgCisKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNDb21tb25Q
c2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBp
ZiAoc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKQpAQCAtMTU5
LDcgKzE1OSw3IEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNl
dWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBlbGVtZW50LT5mb2N1c2VkKCkgJiYgaXNGcmFtZUZvY3VzZWQoZWxlbWVu
dCk7CiB9Ci0gICAgCisKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhj
b25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAg
ICAgaWYgKCFzZWxlY3Rvci0+aGFzVGFnKCkpCkBAIC0xNzAsMTQgKzE3MCwxNCBAQCBpbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OnRhZ01hdGNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQ1NTU2VsZWN0bwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJID0g
c2VsZWN0b3ItPnRhZygpLm5hbWVzcGFjZVVSSSgpOwogICAgIHJldHVybiBuYW1lc3BhY2VVUkkg
PT0gc3RhckF0b20gfHwgbmFtZXNwYWNlVVJJID09IGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOwog
fQotICAgIAorCiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmF0dHJpYnV0ZU5hbWVNYXRj
aGVzKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxl
Y3RvckF0dHJpYnV0ZU5hbWUpCiB7CiAgICAgaWYgKHNlbGVjdG9yQXR0cmlidXRlTmFtZS5sb2Nh
bE5hbWUoKSAhPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIHNlbGVjdG9yQXR0cmlidXRlTmFtZS5wcmVmaXgoKSA9PSBzdGFyQXRvbSB8
fCBzZWxlY3RvckF0dHJpYnV0ZU5hbWUubmFtZXNwYWNlVVJJKCkgPT0gYXR0cmlidXRlLT5uYW1l
c3BhY2VVUkkoKTsKIH0KLSAgICAKKwogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a0V4YWN0QXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHNlbGVjdG9yQXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUp
CiB7CiAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVN
YXAoKTsKQEAgLTE5MSw3ICsxOTEsNyBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrRXhhY3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUQogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrUmlnaHRtb3N0QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgfHwgc2VsZWN0b3ItPm1fbWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAKaW5kZXggYTdiNTM2Yi4uYTQy
ZDdiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQmFzZS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgS1VSTCBT
dHlsZUJhc2U6OmJhc2VVUkwoKSBjb25zdAogICAgICAgICByZXR1cm4gc2hlZXQtPmZpbmFsVVJM
KCk7CiAgICAgaWYgKHNoZWV0LT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHNoZWV0LT5wYXJl
bnQoKS0+YmFzZVVSTCgpOwotICAgIGlmICghc2hlZXQtPm93bmVyTm9kZSgpKSAKKyAgICBpZiAo
IXNoZWV0LT5vd25lck5vZGUoKSkKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKICAgICByZXR1cm4g
c2hlZXQtPm93bmVyTm9kZSgpLT5kb2N1bWVudCgpLT5iYXNlVVJMKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVNZWRpYS5jcHAKaW5kZXggZTBmZjQ0MC4uOTBiNTc0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZU1lZGlhLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRp
YS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuaAppbmRleCAzOThhMGIxLi4yMzlj
MzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAogI2lmbmRlZiBTdHlsZU1lZGlhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldExpc3QuY3BwCmluZGV4IDJjOTAyNTguLmJiZWZkMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXRMaXN0LmNwcApAQCAtNjUsNyArNjUsNyBAQCBIVE1MU3R5bGVFbGVtZW50KiBTdHls
ZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICAv
LyAjIyMgQmFkIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgcmV0dXJucyBhIHNpbmdsZSBlbGVtZW50
IChhcmUgSURzIGFsd2F5cyB1bmlxdWU/KQogICAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9yIG5h
bWUgYXR0cmlidXRlLgogICAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdv
b2QgcHJhY3RpY2UgYW55d2F5IDspCi0gICAgCisKICAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9k
b2MtPmdldEVsZW1lbnRCeUlkKG5hbWUpOwogICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhh
c1RhZ05hbWUoc3R5bGVUYWcpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFN0eWxl
RWxlbWVudCo+KGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAppbmRleCBh
MDE5NjkxLi40ZWI3ZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVl
dExpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaApAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9kb2M7CiAgICAgfQot
ICAgIAorCiBwcml2YXRlOgogICAgIFN0eWxlU2hlZXRMaXN0KERvY3VtZW50Kik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwCmluZGV4IGJmMWM5NTYuLjI1
MDU4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcApA
QCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCkBAIC04NCw3ICs4NCw3IEBAIFN0cmluZyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3NzVGV4
dCgpIGNvbnN0CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAg
ICAgcmV0dXJuIHJlc3VsdCArIENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpICsgIikiOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCmluZGV4IDhkNmVlODIuLmQ0
ZDA4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCkBAIC0y
MCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgV2ViS2l0Q1NTRmls
dGVyVmFsdWVfaApAQCAtNjAsOSArNjAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViS2l0
Q1NTRmlsdGVyVmFsdWUoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LSAKKwogICAgIEZpbHRlck9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIFdlYktpdENTU0ZpbHRlclZhbHVl
KEZpbHRlck9wZXJhdGlvblR5cGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuY3BwCmluZGV4IDhmM2Q2NzYuLmNkNmZkNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTcwLDExICs3MCwxMSBA
QCB2b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6cGFyc2VLZXlTdHJpbmcoY29uc3QgU3RyaW5n
JiBzLCBWZWN0b3I8ZmxvYXQ+JiBrZXlzKQogICAgIGtleXMuY2xlYXIoKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBzdHJpbmdzOwogICAgIHMuc3BsaXQoJywnLCBzdHJpbmdzKTsKLSAgICAKKwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RyaW5ncy5zaXplKCk7ICsraSkgewogICAgICAgICBm
bG9hdCBrZXkgPSAtMTsKICAgICAgICAgU3RyaW5nIGN1ciA9IHN0cmluZ3NbaV0uc3RyaXBXaGl0
ZVNwYWNlKCk7Ci0gICAgCisKICAgICAgICAgLy8gRm9yIG5vdyB0aGUgc3ludGF4IE1VU1QgYmUg
J3h4eCUnIG9yICdmcm9tJyBvciAndG8nLCB3aGVyZSB4eHggaXMgYSBsZWdhbCBmbG9hdGluZyBw
b2ludCBudW1iZXIKICAgICAgICAgaWYgKGN1ciA9PSAiZnJvbSIpCiAgICAgICAgICAgICBrZXkg
PSAwOwpAQCAtODUsNyArODUsNyBAQCB2b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6cGFyc2VL
ZXlTdHJpbmcoY29uc3QgU3RyaW5nJiBzLCBWZWN0b3I8ZmxvYXQ+JiBrZXlzKQogICAgICAgICAg
ICAgaWYgKGsgPj0gMCAmJiBrIDw9IDEwMCkKICAgICAgICAgICAgICAgICBrZXkgPSBrLzEwMDsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoa2V5IDwgMCkgewogICAgICAgICAg
ICAga2V5cy5jbGVhcigpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lUnVsZS5oCmluZGV4IGJkYmVhNjEuLmVmY2FmMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGVfaApA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcga2V5VGV4dCgpIGNvbnN0ICAg
ICAgICAgICAgICB7IHJldHVybiBtX2tleTsgfQogICAgIHZvaWQgc2V0S2V5VGV4dChjb25zdCBT
dHJpbmcmIHMpICAgIHsgbV9rZXkgPSBzOyB9Ci0gICAgCisKICAgICB2b2lkIGdldEtleXMoVmVj
dG9yPGZsb2F0PiYga2V5cykgY29uc3QgICB7IHBhcnNlS2V5U3RyaW5nKG1fa2V5LCBrZXlzKTsg
fQogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZS5nZXQoKTsgfQpAQCAtNjAsMTkgKzYwLDE5IEBAIHB1YmxpYzoKIAogICAgIC8v
IE5vdCBwYXJ0IG9mIHRoZSBDU1NPTQogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcmLCBib29sID0gZmFsc2UpOwotICAgIAorCiAgICAgdm9pZCBzZXREZWNsYXJhdGlv
bihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CiAKICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogICAgICAgICBkZWNsYXJhdGlvbigpICAgICAgIHsgcmV0dXJu
IG1fc3R5bGUuZ2V0KCk7IH0KICAgICBjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiog
ICBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICAKKwog
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1bGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgLy8gSW5oZXJpdGVkIGZyb20gQ1NTUnVsZQogICAgIHZpcnR1YWwgQ1NT
UnVsZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFdFQktJVF9LRVlGUkFNRV9SVUxFOyB9CiAK
ICAgICBzdGF0aWMgdm9pZCBwYXJzZUtleVN0cmluZyhjb25zdCBTdHJpbmcmIHMsIFZlY3Rvcjxm
bG9hdD4mIGtleXMpOwotICAgIAorCiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKENTU1N0eWxl
U2hlZXQqIHBhcmVudCk7CiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IG1fc3R5bGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5j
cHAKaW5kZXggYjdiMzczYy4uZTE3MWIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NLZXlmcmFtZXNSdWxlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01OCw3ICs1OCw3IEBAIFN0cmluZyBXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlOjpuYW1lKCkgY29uc3QKIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZTo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgbV9uYW1lID0gbmFtZTsK
LSAgICAKKwogICAgIC8vIFNpbmNlIHRoZSBuYW1lIGlzIHVzZWQgaW4gdGhlIGtleWZyYW1lIG1h
cCBsaXN0IGluIENTU1N0eWxlU2VsZWN0b3IsIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUg
dGhlIHN0eWxlIHNoZWV0IHRvIGdldCB0aGUgdXBkYXRlZCBuYW1lLgogICAgIGlmIChzdHlsZXNo
ZWV0KCkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6YXBw
ZW5kKFdlYktpdENTU0tleWZyYW1lUnVsZSogcnVsZSkKIAogICAgIG1fbHN0Q1NTUnVsZXMtPmFw
cGVuZChydWxlKTsKICAgICBydWxlLT5zZXRQYXJlbnQodGhpcyk7Ci0gICAgCisKICAgICBpZiAo
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gcnVsZS0+c3R5bGUoKSkKICAgICAg
ICAgc3R5bGUtPnNldFBhcmVudCh0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZS5oCmluZGV4IDBmNWI3YWMuLmU4N2NhZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaApAQCAtMjAsNyArMjAsNyBAQAogICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFdlYktpdENTU0tleWZyYW1lc1J1bGVfaApAQCAt
NTMsMTIgKzUzLDEyIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIAorCiAgICAgLy8gVGhpcyB2ZXJzaW9u
IG9mIHNldE5hbWUgZG9lcyBub3QgY2FsbCBzdHlsZVNoZWV0Q2hhbmdlZCB0byBhdm9pZAogICAg
IC8vIHVubmVjZXNzYXJ5IHdvcmsuIEl0IGFzc3VtZXMgY2FsbGVycyB3aWxsIGVpdGhlciBtYWtl
IHRoYXQgY2FsbAogICAgIC8vIHRoZW1zZWx2ZXMsIG9yIGtub3cgdGhhdCBpdCB3aWxsIGdldCBj
YWxsZWQgbGF0ZXIuCiAgICAgdm9pZCBzZXROYW1lSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1l
KQotICAgIHsgICAKKyAgICB7CiAgICAgICAgIG1fbmFtZSA9IEF0b21pY1N0cmluZyhuYW1lKTsK
ICAgICB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIENTU1J1bGVU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBXRUJLSVRfS0VZRlJBTUVTX1JVTEU7IH0KIAogICAg
IGludCBmaW5kUnVsZUluZGV4KGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKLSAgICAKKwogICAg
IFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9sc3RDU1NSdWxlczsKICAgICBBdG9taWNTdHJpbmcgbV9u
YW1lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKaW5kZXggMjZmZTI4
Ni4uZjYxNzE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJp
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKQEAgLTIw
LDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpA
QCAtNDEsNyArNDEsNyBAQCBXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIHsKIH0KIAotV2ViS2l0Q1NTTWF0cml4OjpXZWJLaXRD
U1NNYXRyaXgoY29uc3QgU3RyaW5nJiBzLCBFeGNlcHRpb25Db2RlJiBlYykgCitXZWJLaXRDU1NN
YXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBTdHJpbmcmIHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIHNldE1hdHJpeFZhbHVlKHMsIGVjKTsKIH0KQEAgLTU0LDcgKzU0LDcgQEAgdm9p
ZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IHN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCk7CiAgICAgaWYgKENTU1BhcnNlcjo6cGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgp
LCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgc3RyaW5nLCB0cnVlLCB0cnVlKSkgewotICAg
ICAgICAvLyBDb252ZXJ0IHRvIFRyYW5zZm9ybU9wZXJhdGlvbnMuIFRoaXMgY2FuIGZhaWwgaWYg
YSBwcm9wZXJ0eSAKKyAgICAgICAgLy8gQ29udmVydCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBU
aGlzIGNhbiBmYWlsIGlmIGEgcHJvcGVydHkKICAgICAgICAgLy8gcmVxdWlyZXMgc3R5bGUgKGku
ZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3IgJ2V4cycpCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
V2Via2l0VHJhbnNmb3JtKTsKIApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFdlYktpdENTU01hdHJp
eDo6c2V0TWF0cml4VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENvbnZlcnQgdHJhbnNmb3JtIG9wZXJhdGlv
bnMgdG8gYSBUcmFuc2Zvcm1hdGlvbk1hdHJpeC4gVGhpcyBjYW4gZmFpbAogICAgICAgICAvLyBp
ZiBhIHBhcmFtIGhhcyBhIHBlcmNlbnRhZ2UgKCclJykKICAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdDsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJp
eFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgLy8gc2V0IHRoZSBtYXRyaXgKICAgICAgICAgbV9tYXRyaXggPSB0OwogICAgIH0gZWxz
ZSBpZiAoIXN0cmluZy5pc0VtcHR5KCkpIC8vIFRoZXJlIGlzIHNvbWV0aGluZyB0aGVyZSBidXQg
cGFyc2luZyBmYWlsZWQKQEAgLTk5LDcgKzk5LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRy
aXg+IFdlYktpdENTU01hdHJpeDo6aW52ZXJzZShFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIFdlYktpdENTU01hdHJpeDo6Y3JlYXRlKG1fbWF0cml4LmludmVy
c2UoKSk7CiB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJp
eD4gV2ViS2l0Q1NTTWF0cml4Ojpyb3RhdGUoZG91YmxlIHJvdFgsIGRvdWJsZSByb3RZLCBkbwog
ewogICAgIGlmIChpc25hbihyb3RYKSkKICAgICAgICAgcm90WCA9IDA7Ci0gICAgICAgIAorCiAg
ICAgaWYgKGlzbmFuKHJvdFkpICYmIGlzbmFuKHJvdFopKSB7CiAgICAgICAgIHJvdFogPSByb3RY
OwogICAgICAgICByb3RYID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NNYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAppbmRl
eCAxMDdiZjhiLi40YTY3MzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5oCkBA
IC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgV2ViS2l0Q1NT
TWF0cml4X2gKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NNYXRyaXgocywgZWMpKTsKICAgICB9Ci0gICAgCisKICAg
ICB2aXJ0dWFsIH5XZWJLaXRDU1NNYXRyaXgoKTsKIAogICAgIGRvdWJsZSBhKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXguYSgpOyB9CkBAIC01MiwxNCArNTIsMTQgQEAgcHVibGljOgogICAgIGRv
dWJsZSBkKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXguZCgpOyB9CiAgICAgZG91YmxlIGUoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeC5lKCk7IH0KICAgICBkb3VibGUgZigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF0cml4LmYoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRBKGRvdWJsZSBmKSB7IG1f
bWF0cml4LnNldEEoZik7IH0KICAgICB2b2lkIHNldEIoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0
QihmKTsgfQogICAgIHZvaWQgc2V0Qyhkb3VibGUgZikgeyBtX21hdHJpeC5zZXRDKGYpOyB9CiAg
ICAgdm9pZCBzZXREKGRvdWJsZSBmKSB7IG1fbWF0cml4LnNldEQoZik7IH0KICAgICB2b2lkIHNl
dEUoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0RShmKTsgfQogICAgIHZvaWQgc2V0Rihkb3VibGUg
ZikgeyBtX21hdHJpeC5zZXRGKGYpOyB9Ci0gCisKICAgICBkb3VibGUgbTExKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRyaXgubTExKCk7IH0KICAgICBkb3VibGUgbTEyKCkgY29uc3QgeyByZXR1cm4g
bV9tYXRyaXgubTEyKCk7IH0KICAgICBkb3VibGUgbTEzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRy
aXgubTEzKCk7IH0KQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIGRvdWJsZSBtNDIoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeC5tNDIoKTsgfQogICAgIGRvdWJsZSBtNDMoKSBjb25zdCB7
IHJldHVybiBtX21hdHJpeC5tNDMoKTsgfQogICAgIGRvdWJsZSBtNDQoKSBjb25zdCB7IHJldHVy
biBtX21hdHJpeC5tNDQoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRNMTEoZG91YmxlIGYpIHsg
bV9tYXRyaXguc2V0TTExKGYpOyB9CiAgICAgdm9pZCBzZXRNMTIoZG91YmxlIGYpIHsgbV9tYXRy
aXguc2V0TTEyKGYpOyB9CiAgICAgdm9pZCBzZXRNMTMoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0
TTEzKGYpOyB9CkBAIC05MywyNiArOTMsMjYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TTQyKGRv
dWJsZSBmKSB7IG1fbWF0cml4LnNldE00MihmKTsgfQogICAgIHZvaWQgc2V0TTQzKGRvdWJsZSBm
KSB7IG1fbWF0cml4LnNldE00MyhmKTsgfQogICAgIHZvaWQgc2V0TTQ0KGRvdWJsZSBmKSB7IG1f
bWF0cml4LnNldE00NChmKTsgfQotIAorCiAgICAgdm9pZCBzZXRNYXRyaXhWYWx1ZShjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgCi0gICAgLy8gVGhlIGZvbGxvd2luZyBtYXRo
IGZ1bmN0aW9uIHJldHVybiBhIG5ldyBtYXRyaXggd2l0aCB0aGUgCisKKyAgICAvLyBUaGUgZm9s
bG93aW5nIG1hdGggZnVuY3Rpb24gcmV0dXJuIGEgbmV3IG1hdHJpeCB3aXRoIHRoZQogICAgIC8v
IHNwZWNpZmllZCBvcGVyYXRpb24gYXBwbGllZC4gVGhlIHRoaXMgdmFsdWUgaXMgbm90IG1vZGlm
aWVkLgotICAgIAorCiAgICAgLy8gTXVsdGlwbHkgdGhpcyBtYXRyaXggYnkgc2Vjb25kTWF0cml4
LCBvbiB0aGUgcmlnaHQgKHJlc3VsdCA9IHRoaXMgKiBzZWNvbmRNYXRyaXgpCiAgICAgUGFzc1Jl
ZlB0cjxXZWJLaXRDU1NNYXRyaXg+IG11bHRpcGx5KFdlYktpdENTU01hdHJpeCogc2Vjb25kTWF0
cml4KSBjb25zdDsKLSAgICAKKwogICAgIC8vIFJldHVybiB0aGUgaW52ZXJzZSBvZiB0aGlzIG1h
dHJpeC4gVGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBtYXRyaXggaXMgbm90IGludmVydGlibGUK
ICAgICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gaW52ZXJzZShFeGNlcHRpb25Db2RlJikg
Y29uc3Q7Ci0gICAgCisKICAgICAvLyBSZXR1cm4gdGhpcyBtYXRyaXggdHJhbnNsYXRlZCBieSB0
aGUgcGFzc2VkIHZhbHVlcy4KICAgICAvLyBQYXNzaW5nIGEgTmFOIHdpbGwgdXNlIGEgdmFsdWUg
b2YgMC4gVGhpcyBhbGxvd3MgdGhlIDNEIGZvcm0gdG8gdXNlZCBmb3IgMkQgb3BlcmF0aW9ucwog
ICAgIC8vIE9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYXMgdGhvdWdoIHRoZSB0aGlzIG1hdHJpeCBp
cyBtdWx0aXBsaWVkIGJ5IGEgbWF0cml4IHdpdGgKICAgICAvLyB0aGUgdHJhbnNsYXRpb24gdmFs
dWVzIG9uIHRoZSBsZWZ0IChyZXN1bHQgPSB0cmFuc2xhdGlvbih4LHkseikgKiB0aGlzKQogICAg
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiB0cmFuc2xhdGUoZG91YmxlIHgsIGRvdWJsZSB5
LCBkb3VibGUgeikgY29uc3Q7Ci0gICAgCisKICAgICAvLyBSZXR1cm5zIHRoaXMgbWF0cml4IHNj
YWxlZCBieSB0aGUgcGFzc2VkIHZhbHVlcy4KLSAgICAvLyBQYXNzaW5nIHNjYWxlWCBvciBzY2Fs
ZVogYXMgTmFOIHVzZXMgYSB2YWx1ZSBvZiAxLCBidXQgcGFzc2luZyBzY2FsZVkgb2YgTmFOIAor
ICAgIC8vIFBhc3Npbmcgc2NhbGVYIG9yIHNjYWxlWiBhcyBOYU4gdXNlcyBhIHZhbHVlIG9mIDEs
IGJ1dCBwYXNzaW5nIHNjYWxlWSBvZiBOYU4KICAgICAvLyBtYWtlcyBpdCB0aGUgc2FtZSBhcyBz
Y2FsZVguIFRoaXMgYWxsb3dzIHRoZSAzRCBmb3JtIHRvIHVzZWQgZm9yIDJEIG9wZXJhdGlvbnMK
ICAgICAvLyBPcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFzIHRob3VnaCB0aGUgdGhpcyBtYXRyaXgg
aXMgbXVsdGlwbGllZCBieSBhIG1hdHJpeCB3aXRoCiAgICAgLy8gdGhlIHNjYWxlIHZhbHVlcyBv
biB0aGUgbGVmdCAocmVzdWx0ID0gc2NhbGUoeCx5LHopICogdGhpcykKQEAgLTEyMCwxNyArMTIw
LDE3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdGhpcyBtYXRyaXggcm90YXRlZCBieSB0
aGUgcGFzc2VkIHZhbHVlcy4KICAgICAvLyBJZiByb3RZIGFuZCByb3RaIGFyZSBOYU4sIHJvdGF0
ZSBhYm91dCBaIChyb3RYPTAsIHJvdGF0ZVk9MCwgcm90YXRlWj1yb3RYKS4KLSAgICAvLyBPdGhl
cndpc2UgdXNlIGEgcm90YXRpb24gdmFsdWUgb2YgMCBmb3IgYW55IHBhc3NlZCBOYU4uICAgIAor
ICAgIC8vIE90aGVyd2lzZSB1c2UgYSByb3RhdGlvbiB2YWx1ZSBvZiAwIGZvciBhbnkgcGFzc2Vk
IE5hTi4KICAgICAvLyBPcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFzIHRob3VnaCB0aGUgdGhpcyBt
YXRyaXggaXMgbXVsdGlwbGllZCBieSBhIG1hdHJpeCB3aXRoCiAgICAgLy8gdGhlIHJvdGF0aW9u
IHZhbHVlcyBvbiB0aGUgbGVmdCAocmVzdWx0ID0gcm90YXRpb24oeCx5LHopICogdGhpcykKICAg
ICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gcm90YXRlKGRvdWJsZSByb3RYLCBkb3VibGUg
cm90WSwgZG91YmxlIHJvdFopIGNvbnN0OwotICAgIAorCiAgICAgLy8gUmV0dXJucyB0aGlzIG1h
dHJpeCByb3RhdGVkIGFib3V0IHRoZSBwYXNzZWQgYXhpcyBieSB0aGUgcGFzc2VkIGFuZ2xlLgog
ICAgIC8vIFBhc3NpbmcgYSBOYU4gd2lsbCB1c2UgYSB2YWx1ZSBvZiAwLiBJZiB0aGUgYXhpcyBp
cyAoMCwwLDApIHVzZSBhIHZhbHVlCiAgICAgLy8gT3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhcyB0
aG91Z2ggdGhlIHRoaXMgbWF0cml4IGlzIG11bHRpcGxpZWQgYnkgYSBtYXRyaXggd2l0aAogICAg
IC8vIHRoZSByb3RhdGlvbiB2YWx1ZXMgb24gdGhlIGxlZnQgKHJlc3VsdCA9IHJvdGF0aW9uKHgs
eSx6LGFuZ2xlKSAqIHRoaXMpCiAgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IHJvdGF0
ZUF4aXNBbmdsZShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgYW5nbGUpIGNv
bnN0OwotICAgIAorCiAgICAgLy8gUmV0dXJuIHRoaXMgbWF0cml4IHNrZXdlZCBhbG9uZyB0aGUg
WCBheGlzIGJ5IHRoZSBwYXNzZWQgdmFsdWVzLgogICAgIC8vIFBhc3NpbmcgYSBOYU4gd2lsbCB1
c2UgYSB2YWx1ZSBvZiAwLgogICAgIC8vIE9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgYXMgdGhvdWdo
IHRoZSB0aGlzIG1hdHJpeCBpcyBtdWx0aXBsaWVkIGJ5IGEgbWF0cml4IHdpdGgKQEAgLTE0NCw5
ICsxNDQsOSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IHNrZXdZ
KGRvdWJsZSBhbmdsZSkgY29uc3Q7CiAKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXg7IH0KLSAgICAKKwogICAgIFN0cmlu
ZyB0b1N0cmluZygpIGNvbnN0OwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgV2ViS2l0Q1NTTWF0
cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAgV2ViS2l0Q1NTTWF0cml4KGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCmluZGV4IDNiNDI4NmUuLjc2MjA0MjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC0x
MTIsOSArMTEyLDkgQEAgU3RyaW5nIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpjc3NUZXh0KCkg
Y29uc3QKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAK
KwogICAgIHJlc3VsdCArPSBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKTsKLSAgICAKKwogICAgIHJl
c3VsdCArPSAiKSI7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgKaW5kZXggMGMzYzAzOC4uODU4MDk2YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgKQEAgLTIwLDcgKzIw
LDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZV9oCkBAIC02OCw5ICs2OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSgpOwogCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0Owot
IAorCiAgICAgVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUoVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111599</attachid>
            <date>2011-10-19 05:26:19 -0700</date>
            <delta_ts>2011-10-19 06:20:05 -0700</delta_ts>
            <desc>[PATCH] Tab removed</desc>
            <filename>csswhitespace.patch</filename>
            <type>text/plain</type>
            <size>236875</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDc0Mzk3MDk4MDA0ZDE5NjJlYTEyZGQ3MGQ5MDQyY2FmZThiZjFiODUKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBXZWQgT2N0IDE5
IDEzOjA3OjM4IDIwMTEgKzA0MDAKCiAgICBGaXgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWZlNDRhYS4uYzAw
MGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMCBAQAorMjAxMS0xMC0xOSAgQWxleGFuZGVy
IFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHN0
cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gdGhlIGNzcy8gQysrIGNvZGUuCisKKyAgICAgICAg
T25seSBhZmZlY3RlZCBmaWxlIG5hbWVzIHJldGFpbmVkIGJlbG93IGZvciBicmV2aXR5LgorICAg
ICAgICBNdWx0aWxpbmUgYm9vbGVhbiBleHByZXNzaW9uIHdlcmUgZml4ZWQgd2hlcmUgbmVjZXNz
YXJ5IHRvIGF2b2lkIHBhdGNoIHN0eWxlIHZpb2xhdGlvbnMuCisKKyAgICAgICAgKiBjc3MvQ1NT
Qm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1Zh
bHVlLmg6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6Cisg
ICAgICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NG
b250RmFjZS5jcHA6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2Uu
aDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmg6CisgICAgICAgICogY3NzL0NTU0Z1
bmN0aW9uVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NGdW5jdGlvblZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVu
dFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwOgorICAg
ICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0lt
YWdlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVlLmg6CisgICAgICAgICog
Y3NzL0NTU0ltcG9ydFJ1bGUuY3BwOgorICAgICAgICAqIGNzcy9DU1NJbml0aWFsVmFsdWUuY3Bw
OgorICAgICAgICAqIGNzcy9DU1NJbml0aWFsVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmg6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKiBj
c3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5jcHA6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlQ2FjaGUuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
OgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eS5jcHA6CisgICAgICAgICogY3NzL0NTU1Byb3Bl
cnR5Lmg6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwOgorICAgICAgICAq
IGNzcy9DU1NSZWZsZWN0VmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NSZWZsZWN0VmFsdWUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oOgorICAgICAgICAqIGNz
cy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgICogY3NzL0NTU1NlZ21lbnRlZEZv
bnRGYWNlLmg6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmNwcDoKKyAgICAgICAgKiBjc3Mv
Q1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcDoKKyAgICAg
ICAgKiBjc3MvQ1NTU2VsZWN0b3JMaXN0Lmg6CisgICAgICAgICogY3NzL0NTU1N0eWxlQXBwbHlQ
cm9wZXJ0eS5jcHA6CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAg
ICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaDoKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgICogY3Nz
L0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NUaW1pbmdGdW5j
dGlvblZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcDoKKyAg
ICAgICAgKiBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFs
dWVMaXN0LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTV3JhcFNoYXBlcy5jcHA6CisgICAgICAgICog
Y3NzL0NTU1dyYXBTaGFwZXMuaDoKKyAgICAgICAgKiBjc3MvRm9udFZhbHVlLmNwcDoKKyAgICAg
ICAgKiBjc3MvTWVkaWFMaXN0LmNwcDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeS5jcHA6Cisg
ICAgICAgICogY3NzL01lZGlhUXVlcnkuaDoKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2YWx1
YXRvci5oOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmNwcDoKKyAgICAgICAgKiBjc3Mv
TWVkaWFRdWVyeUV4cC5oOgorICAgICAgICAqIGNzcy9QYWlyLmg6CisgICAgICAgICogY3NzL1NW
R0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgICogY3NzL1NWR0NTU1Bh
cnNlci5jcHA6CisgICAgICAgICogY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNr
ZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVCYXNlLmNwcDoKKyAgICAgICAgKiBjc3MvU3R5bGVN
ZWRpYS5jcHA6CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuaDoKKyAgICAgICAgKiBjc3MvU3R5
bGVTaGVldExpc3QuY3BwOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0TGlzdC5oOgorICAgICAg
ICAqIGNzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL1dlYktpdENT
U0ZpbHRlclZhbHVlLmg6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHA6
CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oOgorICAgICAgICAqIGNzcy9X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5oOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAgICAq
IGNzcy9XZWJLaXRDU1NNYXRyaXguaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgorCiAy
MDExLTEwLTE5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBN
ZWRpYUxpc3Q6IFJlbW92ZSBpbmhlcml0YW5jZSBmcm9tIFN0eWxlQmFzZS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKaW5kZXggMTVmZDkzOS4u
YmNlMzBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgpAQCAtNDUsNyArNDUsNyBAQCBTdHJpbmcgQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICAvLyBEdW1wIHRoZSBzbGljZXMgZmlyc3Qu
CiAgICAgU3RyaW5nIHRleHQgPSBtX3NsaWNlcy0+Y3NzVGV4dCgpOwotICAgIAorCiAgICAgLy8g
Tm93IHRoZSBmaWxsIGtleXdvcmRzIGlmIGl0IGlzIHByZXNlbnQuCiAgICAgaWYgKG1fZmlsbCkK
ICAgICAgICAgdGV4dCArPSAiIGZpbGwiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZS5oCmluZGV4IGQ3NGVhZDcuLmM2YWRiYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuY3BwCmluZGV4IGI3Nzg4
ZjcuLjgyNWQwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFn
ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5j
cHAKQEAgLTQ0LDcgKzQ0LDcgQEAgU3RyaW5nIENTU0JvcmRlckltYWdlVmFsdWU6OmNzc1RleHQo
KSBjb25zdAogewogICAgIC8vIEltYWdlIGZpcnN0LgogICAgIFN0cmluZyB0ZXh0OwotICAgIAor
CiAgICAgaWYgKG1faW1hZ2UpCiAgICAgICAgIHRleHQgKz0gbV9pbWFnZS0+Y3NzVGV4dCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAppbmRleCAzNDczOTYzLi43NmU3N2Y2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FudmFzVmFsdWUuaAppbmRleCAyN2I4ZjJiLi42ZjM4OTg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FudmFzVmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIENTU0NhbnZhc1ZhbHVlX2gKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50Kik7CiAKICAg
ICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCopOwotICAgICAKKwogICAgIC8v
IFRoZSBuYW1lIG9mIHRoZSBjYW52YXMuCiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICAvLyBUaGUg
ZG9jdW1lbnQgc3VwcGxpZXMgdGhlIGVsZW1lbnQgYW5kIG93bnMgaXQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDc3Njhm
ZjMuLmQwODVhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0zNTAsOCArMzUwLDggQEAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29u
c3QgTmkKICAgICAgICAgdG9wID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1h
Z2UuaW1hZ2VTbGljZXMoKS50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpOwogICAgIGVsc2UKICAgICAgICAgdG9wID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgCi0gICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCku
cmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpICYmIGltYWdlLmltYWdlU2xpY2Vz
KCkuYm90dG9tKCkgPT0gaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKSAKKworICAgIGlmIChpbWFn
ZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkgPT0gaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKSAmJiBp
bWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpID09IGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkK
ICAgICAgICAgJiYgaW1hZ2UuaW1hZ2VTbGljZXMoKS5sZWZ0KCkgPT0gaW1hZ2UuaW1hZ2VTbGlj
ZXMoKS50b3AoKSkgewogICAgICAgICByaWdodCA9IHRvcDsKICAgICAgICAgYm90dG9tID0gdG9w
OwpAQCAtMzYxLDcgKzM2MSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5pCiAgICAgICAgICAg
ICByaWdodCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xp
Y2VzKCkucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByaWdodCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUt
PmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAoaW1h
Z2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpICYm
IGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQo
KSkgewogICAgICAgICAgICAgYm90dG9tID0gdG9wOwogICAgICAgICAgICAgbGVmdCA9IHJpZ2h0
OwpAQCAtMzcwLDcgKzM3MCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5pCiAgICAgICAgICAg
ICAgICAgYm90dG9tID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1h
Z2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGJvdHRvbSA9IHByaW1p
dGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9tKCku
dmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIGlmIChpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSA9PSBpbWFnZS5pbWFn
ZVNsaWNlcygpLnJpZ2h0KCkpCiAgICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0OwogICAgICAg
ICAgICAgZWxzZSB7CkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEJveCYK
ICAgICAgICAgICAgIHJpZ2h0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoYm94
LnJpZ2h0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByaWdodCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZh
bHVlKGJveC5yaWdodCgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGJveC5ib3R0b20oKSA9
PSBib3gudG9wKCkgJiYgYm94LnJpZ2h0KCkgPT0gYm94LmxlZnQoKSkgewogICAgICAgICAgICAg
Ym90dG9tID0gdG9wOwogICAgICAgICAgICAgbGVmdCA9IHJpZ2h0OwpAQCAtNDIyLDcgKzQyMiw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVj
ZUltYWdlUXVhZChjb25zdCBMZW5ndGhCb3gmCiAgICAgICAgICAgICAgICAgYm90dG9tID0gcHJp
bWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUoYm94LmJvdHRvbSgpLnZhbHVlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBib3R0b20gPSBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZShib3guYm90dG9t
KCkpOwotICAgIAorCiAgICAgICAgICAgICBpZiAoYm94LmxlZnQoKSA9PSBib3gucmlnaHQoKSkK
ICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTQ0
Nyw3ICs0NDcsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZVJlcGVhdChjb25zdCBOaW5lUGllY2VJbWFnZSYgaQogewogICAgIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gaG9yaXpvbnRhbFJlcGVhdDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZlcnRpY2FsUmVwZWF0OwotICAgIAorCiAgICAgaG9yaXpvbnRhbFJlcGVhdCA9IHBy
aW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZUZvclJlcGVhdFJ1
bGUoaW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSkpOwogICAgIGlmIChpbWFnZS5ob3Jpem9udGFsUnVs
ZSgpID09IGltYWdlLnZlcnRpY2FsUnVsZSgpKQogICAgICAgICB2ZXJ0aWNhbFJlcGVhdCA9IGhv
cml6b250YWxSZXBlYXQ7CkBAIC00NjAsMTUgKzQ2MCwxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZShjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1h
Z2UsCiB7CiAgICAgaWYgKCFpbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gcHJpbWl0
aXZlVmFsdWVDYWNoZS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAg
CisKICAgICAvLyBJbWFnZSBmaXJzdC4KICAgICBSZWZQdHI8Q1NTVmFsdWU+IGltYWdlVmFsdWU7
CiAgICAgaWYgKGltYWdlLmltYWdlKCkpCiAgICAgICAgIGltYWdlVmFsdWUgPSBpbWFnZS5pbWFn
ZSgpLT5jc3NWYWx1ZSgpOwotICAgIAorCiAgICAgLy8gQ3JlYXRlIHRoZSBpbWFnZSBzbGljZS4K
ICAgICBSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiBpbWFnZVNsaWNlcyA9IHZhbHVl
Rm9yTmluZVBpZWNlSW1hZ2VTbGljZShpbWFnZSwgcHJpbWl0aXZlVmFsdWVDYWNoZSk7Ci0gICAg
CisKICAgICAvLyBDcmVhdGUgdGhlIGJvcmRlciBhcmVhIHNsaWNlcy4KICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGJvcmRlclNsaWNlcyA9IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGltYWdlLmJv
cmRlclNsaWNlcygpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKTsKIApAQCAtNTA4LDcgKzUwOCw3IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclJlZmxlY3Rpb24oY29uc3QgU3R5
bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uCiAgICAgICAgIG9mZnNldCA9IHByaW1pdGl2ZVZhbHVl
Q2FjaGUtPmNyZWF0ZVZhbHVlKHJlZmxlY3Rpb24tPm9mZnNldCgpLnBlcmNlbnQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICBlbHNlCiAgICAgICAgIG9mZnNldCA9
IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCkudmFsdWUoKSwgc3R5
bGUsIHByaW1pdGl2ZVZhbHVlQ2FjaGUpOwotICAgIAorCiAgICAgcmV0dXJuIENTU1JlZmxlY3RW
YWx1ZTo6Y3JlYXRlKHJlZmxlY3Rpb24tPmRpcmVjdGlvbigpLCBvZmZzZXQucmVsZWFzZSgpLCB2
YWx1ZUZvck5pbmVQaWVjZUltYWdlKHJlZmxlY3Rpb24tPm1hc2soKSwgcHJpbWl0aXZlVmFsdWVD
YWNoZSkpOwogfQogCkBAIC01ODIsNyArNTgyLDcgQEAgc3RhdGljIExheW91dFJlY3Qgc2l6aW5n
Qm94KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNCb3go
KSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKLSAgICAKKwogICAgIFJlbmRlckJveCog
Ym94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwogICAgIHJldHVybiBib3gtPnN0eWxlKCktPmJv
eFNpemluZygpID09IENPTlRFTlRfQk9YID8gYm94LT5jb250ZW50Qm94UmVjdCgpIDogYm94LT5i
b3JkZXJCb3hSZWN0KCk7CiB9CkBAIC01OTYsNyArNTk2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFJlbmQKIHsKICAgICBpZiAoIXJlbmRlcmVyIHx8IHN0eWxlLT50cmFuc2Zvcm0oKS5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgCisKICAgICBJbnRSZWN0IGJv
eCA9IHNpemluZ0JveChyZW5kZXJlcik7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CkBAIC02NTAsMTEgKzY1MCwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Y29tcHV0ZWRGaWx0ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyUwogewog
ICAgIGlmICghcmVuZGVyZXIgfHwgc3R5bGUtPmZpbHRlcigpLm9wZXJhdGlvbnMoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAKKwogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAKICAgICBSZWZQdHI8
V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IGZpbHRlclZhbHVlOwotICAgIAorCiAgICAgVmVjdG9yPFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5maWx0
ZXIoKS5vcGVyYXRpb25zKCkuZW5kKCk7CiAgICAgZm9yIChWZWN0b3I8UmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+ZmlsdGVyKCkub3BlcmF0aW9u
cygpLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlck9wZXJhdGlvbiA9ICgqaXQpLmdldCgpOwpAQCAtNzMwLDcgKzczMCw3IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZEZpbHRlcihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTCiAgICAgICAgIH0KICAgICAgICAgbGlzdC0+YXBwZW5kKGZpbHRl
clZhbHVlKTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAj
ZW5kaWYKQEAgLTg1MSw3ICs4NTEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldEZvbnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nSwogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9F
bGVtZW50U3BlY2lmaWVyKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICAKKwogICAgIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUqIHByaW1pdGl2ZVZhbHVlQ2FjaGUgPSBt
X25vZGUtPmRvY3VtZW50KCktPmNzc1ByaW1pdGl2ZVZhbHVlQ2FjaGUoKS5nZXQoKTsKIAogICAg
IGlmIChpbnQga2V5d29yZFNpemUgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNp
emUoKSkKQEAgLTEwMTYsNyArMTAxNiw3IEBAIHN0YXRpYyB2b2lkIGxvZ1VuaW1wbGVtZW50ZWRQ
cm9wZXJ0eUlEKGludCBwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CiAKICAgICBMT0dfRVJS
T1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IGdldENvbXB1dGVkU3R5bGUgZm9yICcl
cycuIiwgZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5
SUQpKSk7Ci19IAorfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZvbnRGYW1p
bHlGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBw
cmltaXRpdmVWYWx1ZUNhY2hlKQogewpAQCAtMTExMCw3ICsxMTEwLDcgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVl
KGludCBwcm9wZXIKIAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAor
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSogcHJpbWl0aXZlVmFsdWVDYWNoZSA9IG5vZGUt
PmRvY3VtZW50KCktPmNzc1ByaW1pdGl2ZVZhbHVlQ2FjaGUoKS5nZXQoKTsKIAogICAgIHByb3Bl
cnR5SUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkocHJvcGVy
dHlJRCwgc3R5bGUtPmRpcmVjdGlvbigpLCBzdHlsZS0+d3JpdGluZ01vZGUoKSk7CkBAIC0xMjA0
LDcgKzEyMDQsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAgICAgICAgIEVG
aWxsQm94IGJveCA9IGlzQ2xpcCA/IGxheWVycy0+Y2xpcCgpIDogbGF5ZXJzLT5vcmlnaW4oKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUo
Ym94KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OwogICAgICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1cnJMYXllciA9IGxheWVyczsg
Y3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAg
ICAgIEVGaWxsQm94IGJveCA9IGlzQ2xpcCA/IGN1cnJMYXllci0+Y2xpcCgpIDogY3VyckxheWVy
LT5vcmlnaW4oKTsKQEAgLTEyNjYsNyArMTI2Niw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVy
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+
aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIHByaW1pdGl2ZVZhbHVlQ2Fj
aGUpKTsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIHByaW1pdGl2ZVZhbHVl
Q2FjaGUpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKLSAgICAgICAgfSAg
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nOgogICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5
bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIHN0eWxlLmdldCgpLCBwcmltaXRpdmVWYWx1
ZUNhY2hlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3Bh
Y2luZzoKQEAgLTE4ODcsNyArMTg4Nyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCksIHN0eWxlLmdl
dCgpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2lu
WSgpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZlVmFsdWVDYWNoZSkpOwotICAgICAgICAgICAgICAg
IAorCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAg
ICAgICAgIH0KQEAgLTE4OTYsNyArMTg5Niw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRh
cEhpZ2hsaWdodENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2xvck9yVmFsaWRD
b2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPnRhcEhpZ2hsaWdodENvbG9yKCkpOwotI2VuZGlmICAg
ICAgICAgICAgCisjZW5kaWYKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFn
OgogICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKHN0
eWxlLT51c2VyRHJhZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxl
Y3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZGI5
MmE3NS4uMjRlZjhmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVl
LmNwcApAQCAtMTcsNyArMTcsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLyAKKyAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgpAQCAtMTE2LDcgKzExNiw3
IEBAIFN0eWxlQ2FjaGVkSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENh
Y2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgU3RyaW5nIHVybCA9IGdldFN0cmlu
Z1ZhbHVlKCk7CiAKLSNpZiBFTkFCTEUoU1ZHKSAKKyNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChp
c1NWR0N1cnNvcklkZW50aWZpZXIodXJsKSAmJiBsb2FkZXIgJiYgbG9hZGVyLT5kb2N1bWVudCgp
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgPGN1cnNvcj4gZWxl
bWVudCBpcyBpbiBhIHNoYWRvdyBET00gKGJ1ZyA1OTgyNykKICAgICAgICAgaWYgKFNWR0N1cnNv
ckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1l
bnQodXJsLCBsb2FkZXItPmRvY3VtZW50KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAK
aW5kZXggMmM1MGEwNC4uN2IxYjcwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuY3BwCkBA
IC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKaW5kZXggNTVlMDQ4Yy4uODUwMjNhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2lmbmRlZiBDU1NGb250RmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNl
U291cmNlLmNwcAppbmRleCA5NzAxODlhLi41ZDFiMTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250RmFjZVNvdXJjZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMjE1LDggKzIxNSw4IEBAIFNWR0ZvbnRGYWNl
RWxlbWVudCogQ1NTRm9udEZhY2VTb3VyY2U6OnN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fc3ZnRm9udEZhY2VFbGVtZW50LmdldCgpOwogfQogCi12b2lkIENTU0ZvbnRG
YWNlU291cmNlOjpzZXRTVkdGb250RmFjZUVsZW1lbnQoUGFzc1JlZlB0cjxTVkdGb250RmFjZUVs
ZW1lbnQ+IGVsZW1lbnQpIAoteyAKK3ZvaWQgQ1NTRm9udEZhY2VTb3VyY2U6OnNldFNWR0ZvbnRG
YWNlRWxlbWVudChQYXNzUmVmUHRyPFNWR0ZvbnRGYWNlRWxlbWVudD4gZWxlbWVudCkKK3sKICAg
ICBtX3N2Z0ZvbnRGYWNlRWxlbWVudCA9IGVsZW1lbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU291cmNlLmgKaW5kZXggNzAzZGFlYi4uOTlkYjU5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU291cmNlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBDU1NGb250RmFjZVNvdXJjZV9oCkBAIC01OCw5ICs1OCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldEZvbnRGYWNlKENTU0ZvbnRGYWNlKiBmYWNlKSB7IG1fZmFjZSA9
IGZhY2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQqKTsKLSAg
ICAKKwogICAgIFNpbXBsZUZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljLCBDU1NGb250U2Vs
ZWN0b3IqKTsKLSAgICAKKwogICAgIHZvaWQgcHJ1bmVUYWJsZSgpOwogCiAjaWYgRU5BQkxFKFNW
R19GT05UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1Zh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcAppbmRl
eCAwM2VkYmNiLi41YjRjMzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3Jj
VmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNyY1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCmlu
ZGV4IGE2YzhiYjkuLmJhZWZiNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNyY1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3Jj
VmFsdWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVm
IENTU0ZvbnRGYWNlU3JjVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNw
cAppbmRleCA1NjY1ZjFkLi41OGUyMTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmNwcApAQCAtMjEsNyArMjEsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKaW5kZXggNjFiYWE5
Zi4uZTdlYTAyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU0ZvbnRTZWxlY3Rvcl9o
CkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DU1NGb250U2VsZWN0b3Io
KTsKIAogICAgIHZpcnR1YWwgRm9udERhdGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpOwot
ICAgIAorCiAgICAgdm9pZCBjbGVhckRvY3VtZW50KCkgeyBtX2RvY3VtZW50ID0gMDsgfQogCiAg
ICAgdm9pZCBhZGRGb250RmFjZVJ1bGUoY29uc3QgQ1NTRm9udEZhY2VSdWxlKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAKaW5kZXggNTJhMjk1My4uZDMzZjIwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmNwcApAQCAtMjAsNyArMjAsNyBAQAog
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0Z1bmN0aW9uVmFsdWUuaAppbmRleCBiZTM4MjA2Li4wYTE4N2E5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBDU1NGdW5jdGlvblZhbHVlX2gKQEAgLTQxLDEyICs0MSwxMiBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q1NTRnVuY3Rpb25WYWx1ZSgpOwotICAgIAor
CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IENTU0Z1bmN0aW9uVmFsdWUoQ1NTUGFyc2VyRnVuY3Rpb24qKTsKLSAgICAKKwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbV9hcmdzOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCAyNjZlNGU5Li5jZGExNGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTU2LDcg
KzU2LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYKICAgICAgICAgaWYgKHJlc3VsdCkKICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIAorCiAgICAgLy8gV2UgbmVlZCB0
byBjcmVhdGUgYW4gaW1hZ2UuCiAgICAgUmVmUHRyPEltYWdlPiBuZXdJbWFnZSA9IEdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoY3JlYXRlR3JhZGllbnQocmVuZGVyZXIsIHNpemUpLCBzaXplKTsKICAg
ICBpZiAoY2FjaGVhYmxlKQpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29t
cGFyZVN0b3BzKGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBhLCBjb25zdCBDU1NHcmFkaWVu
dAogewogICAgIGRvdWJsZSBhVmFsID0gYS5tX3Bvc2l0aW9uLT5nZXREb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgZG91YmxlIGJWYWwgPSBiLm1fcG9zaXRp
b24tPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAK
KwogICAgIHJldHVybiBhVmFsIDwgYlZhbDsKIH0KIApAQCAtODUsNyArODUsNyBAQCB2b2lkIENT
U0dyYWRpZW50VmFsdWU6OnNvcnRTdG9wc0lmTmVlZGVkKCkKIH0KIAogc3RhdGljIGlubGluZSBp
bnQgYmxlbmQoaW50IGZyb20sIGludCB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17ICAKK3sKICAgICBy
ZXR1cm4gaW50KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKIH0KIApAQCAtMTAyLDcg
KzEwMiw3IEBAIHN0cnVjdCBHcmFkaWVudFN0b3AgewogICAgIENvbG9yIGNvbG9yOwogICAgIGZs
b2F0IG9mZnNldDsKICAgICBib29sIHNwZWNpZmllZDsKLSAgICAKKwogICAgIEdyYWRpZW50U3Rv
cCgpCiAgICAgICAgIDogb2Zmc2V0KDApCiAgICAgICAgICwgc3BlY2lmaWVkKGZhbHNlKQpAQCAt
MTEyLDcgKzExMiw3IEBAIHN0cnVjdCBHcmFkaWVudFN0b3Agewogdm9pZCBDU1NHcmFkaWVudFZh
bHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGZsb2F0IG1heExlbmd0aEZvclJlcGVhdCkKIHsKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICAKKwogICAgIGlm
IChtX2RlcHJlY2F0ZWRUeXBlKSB7CiAgICAgICAgIHNvcnRTdG9wc0lmTmVlZGVkKCk7CiAKQEAg
LTEyNiw3ICsxMjYsNyBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50
KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAgICAg
IG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpIC8gMTAwOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgIG9mZnNldCA9IHN0b3AubV9wb3NpdGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgZ3JhZGllbnQt
PmFkZENvbG9yU3RvcChvZmZzZXQsIGNvbG9yKTsKICAgICAgICAgfQogCkBAIC0xMzYsMTkgKzEz
NiwxOSBAQCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVu
dCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgIH0KIAogICAgIHNpemVfdCBudW1T
dG9wcyA9IG1fc3RvcHMuc2l6ZSgpOwotICAgIAorCiAgICAgVmVjdG9yPEdyYWRpZW50U3RvcD4g
c3RvcHMobnVtU3RvcHMpOwotICAgIAorCiAgICAgZmxvYXQgZ3JhZGllbnRMZW5ndGggPSAwOwog
ICAgIGJvb2wgY29tcHV0ZWRHcmFkaWVudExlbmd0aCA9IGZhbHNlOwotICAgIAorCiAgICAgRmxv
YXRQb2ludCBncmFkaWVudFN0YXJ0ID0gZ3JhZGllbnQtPnAwKCk7CiAgICAgRmxvYXRQb2ludCBn
cmFkaWVudEVuZDsKICAgICBpZiAoaXNMaW5lYXJHcmFkaWVudCgpKQogICAgICAgICBncmFkaWVu
dEVuZCA9IGdyYWRpZW50LT5wMSgpOwogICAgIGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnQoKSkK
ICAgICAgICAgZ3JhZGllbnRFbmQgPSBncmFkaWVudFN0YXJ0ICsgRmxvYXRTaXplKGdyYWRpZW50
LT5lbmRSYWRpdXMoKSwgMCk7Ci0gICAgICAgIAorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1TdG9wczsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU0dyYWRpZW50Q29sb3JTdG9wJiBz
dG9wID0gbV9zdG9wc1tpXTsKIApAQCAtMTkxLDE0ICsxOTEsMTQgQEAgdm9pZCBDU1NHcmFkaWVu
dFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmQKICAgICAgICAgICAgICAgICBpZiAoc3RvcHNbcHJldlNwZWNpZmllZEluZGV4XS5z
cGVjaWZpZWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChzdG9wc1tpXS5vZmZzZXQgPCBzdG9wc1twcmV2
U3BlY2lmaWVkSW5kZXhdLm9mZnNldCkKICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQg
PSBzdG9wc1twcmV2U3BlY2lmaWVkSW5kZXhdLm9mZnNldDsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIEFTU0VSVChzdG9wc1swXS5zcGVjaWZpZWQgJiYgc3RvcHNbbnVtU3RvcHMgLSAxXS5zcGVj
aWZpZWQpOwotICAgIAorCiAgICAgLy8gSWYgYW55IGNvbG9yLXN0b3Agc3RpbGwgZG9lcyBub3Qg
aGF2ZSBhIHBvc2l0aW9uLCB0aGVuLCBmb3IgZWFjaCBydW4gb2YgYWRqYWNlbnQKICAgICAvLyBj
b2xvci1zdG9wcyB3aXRob3V0IHBvc2l0aW9ucywgc2V0IHRoZWlyIHBvc2l0aW9ucyBzbyB0aGF0
IHRoZXkgYXJlIGV2ZW5seSBzcGFjZWQKICAgICAvLyBiZXR3ZWVuIHRoZSBwcmVjZWRpbmcgYW5k
IGZvbGxvd2luZyBjb2xvci1zdG9wcyB3aXRoIHBvc2l0aW9ucy4KQEAgLTIxNyw3ICsyMTcsNyBA
QCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZAogICAgICAgICAgICAgICAgICAgICBmbG9hdCBsYXN0
U3BlY2lmaWVkT2Zmc2V0ID0gc3RvcHNbdW5zcGVjaWZpZWRSdW5TdGFydCAtIDFdLm9mZnNldDsK
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbmV4dFNwZWNpZmllZE9mZnNldCA9IHN0b3BzW3Vu
c3BlY2lmaWVkUnVuRW5kXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRlbHRh
ID0gKG5leHRTcGVjaWZpZWRPZmZzZXQgLSBsYXN0U3BlY2lmaWVkT2Zmc2V0KSAvICh1bnNwZWNp
ZmllZFJ1bkVuZCAtIHVuc3BlY2lmaWVkUnVuU3RhcnQgKyAxKTsKLSAgICAgICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IHVuc3BlY2lmaWVkUnVu
U3RhcnQ7IGogPCB1bnNwZWNpZmllZFJ1bkVuZDsgKytqKQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RvcHNbal0ub2Zmc2V0ID0gbGFzdFNwZWNpZmllZE9mZnNldCArIChqIC0gdW5zcGVjaWZp
ZWRSdW5TdGFydCArIDEpICogZGVsdGE7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ5LDcgKzI0
OSw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50
LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICAgICAgICAgIEZsb2F0
U2l6ZSBncmFkaWVudFNpemUoZ3JhZGllbnRTdGFydCAtIGdyYWRpZW50RW5kKTsKICAgICAgICAg
ICAgICAgICAgICAgZ3JhZGllbnRMZW5ndGggPSBncmFkaWVudFNpemUuZGlhZ29uYWxMZW5ndGgo
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBpZiAobWF4TGVuZ3RoRm9yUmVwZWF0ID4gZ3JhZGllbnRMZW5ndGgpCiAgICAgICAgICAgICAg
ICAgICAgIG1heEV4dGVudCA9IG1heExlbmd0aEZvclJlcGVhdCAvIGdyYWRpZW50TGVuZ3RoOwog
ICAgICAgICAgICAgfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6
YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5k
CiAgICAgICAgICAgICBpZiAoZmlyc3RPZmZzZXQgPiAwKSB7CiAgICAgICAgICAgICAgICAgZmxv
YXQgY3Vyck9mZnNldCA9IGZpcnN0T2Zmc2V0OwogICAgICAgICAgICAgICAgIHNpemVfdCBzcmNT
dG9wT3JkaW5hbCA9IG9yaWdpbmFsTnVtU3RvcHMgLSAxOwotICAgICAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgR3JhZGll
bnRTdG9wIG5ld1N0b3AgPSBzdG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9y
ZGluYWxdOwogICAgICAgICAgICAgICAgICAgICBuZXdTdG9wLm9mZnNldCA9IGN1cnJPZmZzZXQ7
CkBAIC0yNzYsNyArMjc2LDcgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFk
aWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAg
ICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwgKyBvcmlnaW5hbE51bVN0
b3BzIC0gMSkgJSBvcmlnaW5hbE51bVN0b3BzOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBXb3JrIGZvcndhcmRzIGZyb20g
dGhlIGVuZCwgYWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYWZ0ZXIgMS4KICAgICAgICAg
ICAgIGZsb2F0IGxhc3RPZmZzZXQgPSBzdG9wc1tzdG9wcy5zaXplKCkgLSAxXS5vZmZzZXQ7CiAg
ICAgICAgICAgICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVudCkgewpAQCAtMjk3LDkgKzI5Nyw5
IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICBudW1TdG9wcyA9IHN0b3BzLnNpemUoKTsKLSAgICAKKwogICAgIC8v
IElmIHRoZSBncmFkaWVudCBnb2VzIG91dHNpZGUgdGhlIDAtMSByYW5nZSwgbm9ybWFsaXplIGl0
IGJ5IG1vdmluZyB0aGUgZW5kcG9pbnRzLCBhbmQgYWRqdXN0aW5nIHRoZSBzdG9wcy4KICAgICBp
ZiAobnVtU3RvcHMgPiAxICYmIChzdG9wc1swXS5vZmZzZXQgPCAwIHx8IHN0b3BzW251bVN0b3Bz
IC0gMV0ub2Zmc2V0ID4gMSkpIHsKICAgICAgICAgaWYgKGlzTGluZWFyR3JhZGllbnQoKSkgewpA
QCAtMzI4LDEyICszMjgsMTIgQEAgdm9pZCBDU1NHcmFkaWVudFZhbHVlOjphZGRTdG9wcyhHcmFk
aWVudCogZ3JhZGllbnQsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmQKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisKICAgICAgICAgICAgIGlmIChmaXJzdFplcm9PckdyZWF0ZXJJbmRleCA+IDApIHsK
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RaZXJvT3JHcmVhdGVySW5kZXggPCBudW1TdG9wcyAm
JiBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0ID4gMCkgewogICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBwcmV2T2Zmc2V0ID0gc3RvcHNbZmlyc3RaZXJvT3JHcmVhdGVySW5k
ZXggLSAxXS5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG5leHRPZmZzZXQgPSBz
dG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0ub2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBpbnRlclN0b3BQcm9wb3J0aW9uID0gLXBy
ZXZPZmZzZXQgLyAobmV4dE9mZnNldCAtIHByZXZPZmZzZXQpOwogICAgICAgICAgICAgICAgICAg
ICBDb2xvciBibGVuZGVkQ29sb3IgPSBibGVuZChzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRl
eCAtIDFdLmNvbG9yLCBzdG9wc1tmaXJzdFplcm9PckdyZWF0ZXJJbmRleF0uY29sb3IsIGludGVy
U3RvcFByb3BvcnRpb24pOwogCkBAIC0zNDgsMTUgKzM0OCwxNSBAQCB2b2lkIENTU0dyYWRpZW50
VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgUmVuZAogICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHNbaV0ub2Zmc2V0ID0gMDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1TdG9wczsgKytpKQogICAgICAgICAgICAgICAg
IHN0b3BzW2ldLm9mZnNldCAvPSBzY2FsZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBn
cmFkaWVudC0+c2V0U3RhcnRSYWRpdXMoZ3JhZGllbnQtPnN0YXJ0UmFkaXVzKCkgKiBzY2FsZSk7
CiAgICAgICAgICAgICBncmFkaWVudC0+c2V0RW5kUmFkaXVzKGdyYWRpZW50LT5lbmRSYWRpdXMo
KSAqIHNjYWxlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1TdG9wczsgaSsrKQogICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9w
KHN0b3BzW2ldLm9mZnNldCwgc3RvcHNbaV0uY29sb3IpOwogCkBAIC00MDQsNyArNDA0LDcgQEAg
RmxvYXRQb2ludCBDU1NHcmFkaWVudFZhbHVlOjpjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZl
VmFsdWUqIGZpcnN0LCBDU1NQcmltaXQKIAogICAgIGlmIChzZWNvbmQpCiAgICAgICAgIHJlc3Vs
dC5zZXRZKHBvc2l0aW9uRnJvbVZhbHVlKHNlY29uZCwgc3R5bGUsIHJvb3RTdHlsZSwgc2l6ZSwg
ZmFsc2UpKTsKLSAgICAgICAgCisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00MjQsNyAr
NDI0LDcgQEAgYm9vbCBDU1NHcmFkaWVudFZhbHVlOjppc0NhY2hlYWJsZSgpIGNvbnN0CiAgICAg
ICAgIGlmICh1bml0VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyB8fCB1bml0VHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUyB8fCB1bml0VHlwZSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1JFTVMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAg
IAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ4MywxMyArNDgzLDEzIEBAIHN0YXRpYyB2
b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmdsZURlZywgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRmxvYXRQb2ludCYKICAgICBhbmdsZURlZyA9IGZtb2RmKGFuZ2xlRGVnLCAzNjApOwogICAg
IGlmIChhbmdsZURlZyA8IDApCiAgICAgICAgIGFuZ2xlRGVnICs9IDM2MDsKLSAgICAKKwogICAg
IGlmICghYW5nbGVEZWcpIHsKICAgICAgICAgZmlyc3RQb2ludC5zZXQoMCwgMCk7CiAgICAgICAg
IHNlY29uZFBvaW50LnNldChzaXplLndpZHRoKCksIDApOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIAorCiAgICAgaWYgKGFuZ2xlRGVnID09IDkwKSB7CiAgICAgICAgIGZpcnN0UG9pbnQu
c2V0KDAsIHNpemUuaGVpZ2h0KCkpOwogICAgICAgICBzZWNvbmRQb2ludC5zZXQoMCwgMCk7CkBA
IC01MDEsNyArNTAxLDcgQEAgc3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFu
Z2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBGbG9hdFBvaW50JgogICAgICAgICBzZWNvbmRQ
b2ludC5zZXQoMCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
YW5nbGVEZWcgPT0gMjcwKSB7CiAgICAgICAgIGZpcnN0UG9pbnQuc2V0KDAsIDApOwogICAgICAg
ICBzZWNvbmRQb2ludC5zZXQoMCwgc2l6ZS5oZWlnaHQoKSk7CkBAIC01MTMsNyArNTEzLDcgQEAg
c3RhdGljIHZvaWQgZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRT
aXplJiBzaXplLCBGbG9hdFBvaW50JgogICAgIC8vIFdlIGZpbmQgdGhlIGVuZHBvaW50IGJ5IGNv
bXB1dGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBsaW5lIGZvcm1lZCBieSB0aGUgc2xvcGUs
CiAgICAgLy8gYW5kIGEgbGluZSBwZXJwZW5kaWN1bGFyIHRvIGl0IHRoYXQgaW50ZXJzZWN0cyB0
aGUgY29ybmVyLgogICAgIGZsb2F0IHBlcnBlbmRpY3VsYXJTbG9wZSA9IC0xIC8gc2xvcGU7Ci0g
ICAgCisKICAgICAvLyBDb21wdXRlIHN0YXJ0IGNvcm5lciByZWxhdGl2ZSB0byBjZW50ZXIuCiAg
ICAgZmxvYXQgaGFsZkhlaWdodCA9IHNpemUuaGVpZ2h0KCkgLyAyOwogICAgIGZsb2F0IGhhbGZX
aWR0aCA9IHNpemUud2lkdGgoKSAvIDI7CkBAIC01MzEsNyArNTMxLDcgQEAgc3RhdGljIHZvaWQg
ZW5kUG9pbnRzRnJvbUFuZ2xlKGZsb2F0IGFuZ2xlRGVnLCBjb25zdCBJbnRTaXplJiBzaXplLCBG
bG9hdFBvaW50JgogICAgIGZsb2F0IGMgPSBlbmRDb3JuZXIueSgpIC0gcGVycGVuZGljdWxhclNs
b3BlICogZW5kQ29ybmVyLngoKTsKICAgICBmbG9hdCBlbmRYID0gYyAvIChzbG9wZSAtIHBlcnBl
bmRpY3VsYXJTbG9wZSk7CiAgICAgZmxvYXQgZW5kWSA9IHBlcnBlbmRpY3VsYXJTbG9wZSAqIGVu
ZFggKyBjOwotICAgIAorCiAgICAgLy8gV2UgY29tcHV0ZWQgdGhlIGVuZCBwb2ludCwgc28gc2V0
IHRoZSBzZWNvbmQgcG9pbnQsIGZsaXBwaW5nIHRoZSBZIHRvIGFjY291bnQgZm9yIGFuZ2xlcyBn
b2luZyBhbnRpY2xvY2t3aXNlLgogICAgIHNlY29uZFBvaW50LnNldChoYWxmV2lkdGggKyBlbmRY
LCBzaXplLmhlaWdodCgpIC0gKGhhbGZIZWlnaHQgKyBlbmRZKSk7CiAgICAgLy8gUmVmbGVjdCBh
cm91bmQgdGhlIGNlbnRlciBmb3IgdGhlIHN0YXJ0IHBvaW50LgpAQCAtNTQxLDcgKzU0MSw3IEBA
IHN0YXRpYyB2b2lkIGVuZFBvaW50c0Zyb21BbmdsZShmbG9hdCBhbmdsZURlZywgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgRmxvYXRQb2ludCYKIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU0xpbmVhckdy
YWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IEludFNpemUmIHNpemUpCiB7CiAgICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7Ci0gICAgCisK
ICAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gcmVuZGVyZXItPmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpOwogCiAgICAgRmxvYXRQb2ludCBmaXJzdFBvaW50
OwpAQCAtNTUxLDcgKzU1MSw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU0xpbmVhckdyYWRp
ZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyCiAgICAgICAgIGVu
ZFBvaW50c0Zyb21BbmdsZShhbmdsZSwgc2l6ZSwgZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJz
dFguZ2V0KCksIG1fZmlyc3RZLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBz
aXplKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKG1fc2Vjb25kWCB8fCBtX3NlY29uZFkpCiAg
ICAgICAgICAgICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX3NlY29uZFguZ2V0KCks
IG1fc2Vjb25kWS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6ZSk7CiAg
ICAgICAgIGVsc2UgewpAQCAtNjUwLDcgKzY1MCw3IEBAIGZsb2F0IENTU1JhZGlhbEdyYWRpZW50
VmFsdWU6OnJlc29sdmVSYWRpdXMoQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1cywgUmVuZGVyU3R5
CiAgICAgICAgIHJlc3VsdCA9ICp3aWR0aE9ySGVpZ2h0ICogcmFkaXVzLT5nZXRGbG9hdFZhbHVl
KCkgLyAxMDA7CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSByYWRpdXMtPmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOwotIAorCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtNzM0LDcgKzczNCw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgaG9y
aXpvbnRhbEVsbGlwc2VSYWRpdXMoY29uc3QgRmxvYXRTaXplJiBwLCBmbG9hdCBhc3BlY3RSYXRp
CiBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFk
aWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOwotICAgIAorCiAgICAgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5
bGUoKTsKIAogICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290U3R5bGUs
IHNpemUpOwpAQCAtNzQ4LDcgKzc0OCw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlh
bEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyCiAgICAg
ICAgIHNlY29uZFBvaW50LnNldFgoc2l6ZS53aWR0aCgpIC8gMik7CiAgICAgaWYgKCFtX3NlY29u
ZFkpCiAgICAgICAgIHNlY29uZFBvaW50LnNldFkoc2l6ZS5oZWlnaHQoKSAvIDIpOwotICAgIAor
CiAgICAgZmxvYXQgZmlyc3RSYWRpdXMgPSAwOwogICAgIGlmIChtX2ZpcnN0UmFkaXVzKQogICAg
ICAgICBmaXJzdFJhZGl1cyA9IHJlc29sdmVSYWRpdXMobV9maXJzdFJhZGl1cy5nZXQoKSwgcmVu
ZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSk7CkBAIC03NjcsMTAgKzc2NywxMCBAQCBQYXNzUmVm
UHRyPEdyYWRpZW50PiBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5k
ZXJPYmplY3QqIHJlbmRlcgogICAgICAgICBHcmFkaWVudFNoYXBlIHNoYXBlID0gRWxsaXBzZTsK
ICAgICAgICAgaWYgKG1fc2hhcGUgJiYgbV9zaGFwZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgJiYgbV9zaGFwZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUNpcmNsZSkKICAgICAgICAgICAgIHNoYXBlID0gQ2lyY2xlOwotICAgICAgICAKKwogICAgICAg
ICBlbnVtIEdyYWRpZW50RmlsbCB7IENsb3Nlc3RTaWRlLCBDbG9zZXN0Q29ybmVyLCBGYXJ0aGVz
dFNpZGUsIEZhcnRoZXN0Q29ybmVyIH07CiAgICAgICAgIEdyYWRpZW50RmlsbCBmaWxsID0gRmFy
dGhlc3RDb3JuZXI7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX3NpemluZ0JlaGF2aW9yICYm
IG1fc2l6aW5nQmVoYXZpb3ItPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fc2l6aW5nQmVoYXZpb3ItPmdldElk
ZW50KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb250YWluOgpAQCAtNzg5LDkgKzc4
OSw5IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0
ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gTm93IGNvbXB1
dGUgdGhlIGVuZCByYWRpaSBiYXNlZCBvbiB0aGUgc2Vjb25kIHBvaW50LCBzaGFwZSBhbmQgZmls
bC4KLSAgICAgICAgCisKICAgICAgICAgLy8gSG9yaXpvbnRhbAogICAgICAgICBzd2l0Y2ggKGZp
bGwpIHsKICAgICAgICAgY2FzZSBDbG9zZXN0U2lkZTogewpAQCAtODI4LDcgKzgyOCw3IEBAIFBh
c3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50
KFJlbmRlck9iamVjdCogcmVuZGVyCiAgICAgICAgICAgICAgICAgLy8gdGhhdCBpdCB3b3VsZCBp
ZiBjbG9zZXN0LXNpZGUgb3IgZmFydGhlc3Qtc2lkZSB3ZXJlIHNwZWNpZmllZCwgYXMgYXBwcm9w
cmlhdGUuCiAgICAgICAgICAgICAgICAgZmxvYXQgeERpc3QgPSBtaW4oc2Vjb25kUG9pbnQueCgp
LCBzaXplLndpZHRoKCkgLSBzZWNvbmRQb2ludC54KCkpOwogICAgICAgICAgICAgICAgIGZsb2F0
IHlEaXN0ID0gbWluKHNlY29uZFBvaW50LnkoKSwgc2l6ZS5oZWlnaHQoKSAtIHNlY29uZFBvaW50
LnkoKSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBzZWNvbmRSYWRpdXMg
PSBob3Jpem9udGFsRWxsaXBzZVJhZGl1cyhjb3JuZXIgLSBzZWNvbmRQb2ludCwgeERpc3QgLyB5
RGlzdCk7CiAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8gPSB4RGlzdCAvIHlEaXN0OwogICAg
ICAgICAgICAgfQpAQCAtODQ1LDcgKzg0NSw3IEBAIFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCogcmVuZGVyCiAg
ICAgICAgICAgICAgICAgLy8gdGhhdCBpdCB3b3VsZCBpZiBjbG9zZXN0LXNpZGUgb3IgZmFydGhl
c3Qtc2lkZSB3ZXJlIHNwZWNpZmllZCwgYXMgYXBwcm9wcmlhdGUuCiAgICAgICAgICAgICAgICAg
ZmxvYXQgeERpc3QgPSBtYXgoc2Vjb25kUG9pbnQueCgpLCBzaXplLndpZHRoKCkgLSBzZWNvbmRQ
b2ludC54KCkpOwogICAgICAgICAgICAgICAgIGZsb2F0IHlEaXN0ID0gbWF4KHNlY29uZFBvaW50
LnkoKSwgc2l6ZS5oZWlnaHQoKSAtIHNlY29uZFBvaW50LnkoKSk7Ci0gICAgICAgICAgICAgICAg
CisKICAgICAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBob3Jpem9udGFsRWxsaXBzZVJhZGl1
cyhjb3JuZXIgLSBzZWNvbmRQb2ludCwgeERpc3QgLyB5RGlzdCk7CiAgICAgICAgICAgICAgICAg
YXNwZWN0UmF0aW8gPSB4RGlzdCAvIHlEaXN0OwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmgKaW5kZXggYjE5NTQ4ZS4uNDRlZTFjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKICNpZm5kZWYgQ1NTR3JhZGllbnRWYWx1ZV9oCkBAIC01MiwxNiArNTIsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Rmlyc3RZKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHZhbCkgeyBtX2ZpcnN0WSA9IHZhbDsgfQogICAgIHZvaWQgc2V0U2Vjb25kWChQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwpIHsgbV9zZWNvbmRYID0gdmFsOyB9CiAgICAgdm9pZCBz
ZXRTZWNvbmRZKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCkgeyBtX3NlY29uZFkg
PSB2YWw7IH0KLSAgICAKKwogICAgIHZvaWQgYWRkU3RvcChjb25zdCBDU1NHcmFkaWVudENvbG9y
U3RvcCYgc3RvcCkgeyBtX3N0b3BzLmFwcGVuZChzdG9wKTsgfQogCiAgICAgVmVjdG9yPENTU0dy
YWRpZW50Q29sb3JTdG9wPiYgc3RvcHMoKSB7IHJldHVybiBtX3N0b3BzOyB9CiAKICAgICB2b2lk
IHNvcnRTdG9wc0lmTmVlZGVkKCk7Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgaXNMaW5lYXJH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmFk
aWFsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIAorCiAgICAgYm9vbCBp
c1JlcGVhdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwZWF0aW5nOyB9CiAKICAgICBib29sIGRl
cHJlY2F0ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9kZXByZWNhdGVkVHlwZTsgfSAvLyBjYW1l
IGZyb20gLXdlYmtpdC1ncmFkaWVudApAQCAtNzMsNyArNzMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICwgbV9yZXBlYXRpbmcocmVwZWF0ID09IFJlcGVhdGluZykKICAgICB7CiAgICAgfQotICAg
IAorCiAgICAgdm9pZCBhZGRTdG9wcyhHcmFkaWVudCosIFJlbmRlck9iamVjdCosIFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGZsb2F0IG1heExlbmd0aEZvclJlcGVhdCA9IDApOwogCiAgICAgLy8g
Q3JlYXRlIHRoZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgpAQCAtODEsMTYgKzgxLDE2IEBA
IHByb3RlY3RlZDoKIAogICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2
YWx1ZXMuCiAgICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUq
LCBDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHls
ZSwgY29uc3QgSW50U2l6ZSYpOwotICAgIAorCiAgICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNvbnN0
OwogCiAgICAgLy8gUG9pbnRzLiBTb21lIG9mIHRoZXNlIG1heSBiZSBudWxsIGZvciBsaW5lYXIg
Z3JhZGllbnRzLgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFg7CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0WTsKLSAgICAKKwogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbV9zZWNvbmRYOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV9zZWNvbmRZOwotICAgIAorCiAgICAgLy8gU3RvcHMKICAgICBWZWN0b3I8Q1NTR3JhZGll
bnRDb2xvclN0b3A+IG1fc3RvcHM7CiAgICAgYm9vbCBtX3N0b3BzU29ydGVkOwpAQCAtMTUyLDEw
ICsxNTIsMTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIENyZWF0ZSB0aGUgZ3JhZGllbnQgZm9yIGEg
Z2l2ZW4gc2l6ZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhZGllbnQ+IGNyZWF0ZUdyYWRp
ZW50KFJlbmRlck9iamVjdCosIGNvbnN0IEludFNpemUmKTsKLSAgICAKKwogICAgIC8vIFJlc29s
dmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgZmxvYXQgcmVzb2x2ZVJh
ZGl1cyhDU1NQcmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgZmxvYXQqIHdpZHRoT3JIZWlnaHQgPSAwKTsKLSAgICAKKwogICAgIC8vIFRoZXNlIG1h
eSBiZSBudWxsIGZvciBub24tZGVwcmVjYXRlZCBncmFkaWVudHMuCiAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBtX2ZpcnN0UmFkaXVzOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV9zZWNvbmRSYWRpdXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5jcHAKaW5kZXggY2YxOGY2YS4uNDhmZGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaAppbmRleCBhNTNjOTY1Li5mZTM5MWY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKQEAgLTIwLDcgKzIwLDcg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
X2gKQEAgLTQ0LDEzICs0NCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElt
YWdlPiBpbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJikgPSAwOwogCiAgICAgU3R5
bGVHZW5lcmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1hZ2UoKTsKLSAgICAKKwogICAgIHZpcnR1YWwg
Ym9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBJ
bnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSB7IHJldHVybiBJbnRTaXplKCk7
IH0KLSAgICAKKwogcHJvdGVjdGVkOgogICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUoKTsKLSAg
ICAKKwogICAgIEltYWdlKiBnZXRJbWFnZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7
CiAgICAgdm9pZCBwdXRJbWFnZShjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxJbWFnZT4pOwog
ICAgIGNvbnN0IFJlbmRlck9iamVjdFNpemVDb3VudE1hcCYgY2xpZW50cygpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VDYWNoZS5jbGllbnRzKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVl
LmNwcAppbmRleCBmZmM2NzYzLi4wODM2YjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFs
dWUuY3BwCkBAIC03OCw3ICs3OCw3IEBAIFN0eWxlQ2FjaGVkSW1hZ2UqIENTU0ltYWdlVmFsdWU6
OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0CiAgICAgICAg
ICAgICBtX2ltYWdlID0gU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGNhY2hlZEltYWdlKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiAobV9pbWFnZSAmJiBtX2ltYWdlLT5p
c0NhY2hlZEltYWdlKCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KG1faW1hZ2Uu
Z2V0KCkpIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdl
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgKaW5kZXggNjQ1YTE3
My4uNzA5MWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0eWxlQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKENh
Y2hlZFJlc291cmNlTG9hZGVyKik7CiAgICAgLy8gUmV0dXJucyBhIFN0eWxlQ2FjaGVkSW1hZ2Ug
aWYgdGhlIGltYWdlIGlzIGNhY2hlZCBhbHJlYWR5LCBvdGhlcndpc2UgYSBTdHlsZVBlbmRpbmdJ
bWFnZS4KICAgICBTdHlsZUltYWdlKiBjYWNoZWRPclBlbmRpbmdJbWFnZSgpOwotICAgIAorCiBw
cm90ZWN0ZWQ6CiAgICAgQ1NTSW1hZ2VWYWx1ZShjb25zdCBTdHJpbmcmIHVybCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNwcAppbmRleCBhZGE5MWYwLi4wNjE0ODZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBDU1NJ
bXBvcnRSdWxlOjppbnNlcnRlZEludG9QYXJlbnQoKQogICAgIC8vIGluIG91ciBwYXJlbnQgY2hh
aW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWlsLgogICAgIFN0eWxlQmFzZSogcm9v
dCA9IHRoaXM7CiAgICAgZm9yIChTdHlsZUJhc2UqIGN1cnIgPSBwYXJlbnQoKTsgY3VycjsgY3Vy
ciA9IGN1cnItPnBhcmVudCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGlm
IHRoZSBmaW5hbFVSTCB3YXMgdXBkYXRlZCB2aWEgZG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwuIAor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBpZiB0aGUgZmluYWxVUkwgd2FzIHVwZGF0
ZWQgdmlhIGRvY3VtZW50Ojp1cGRhdGVCYXNlVVJMLgogICAgICAgICBpZiAoY3Vyci0+aXNDU1NT
dHlsZVNoZWV0KCkgJiYgYWJzSHJlZiA9PSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oY3Vy
ciktPmZpbmFsVVJMKCkuc3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJv
b3QgPSBjdXJyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmNwcAppbmRleCBjYmU3
NzZiLi4wZDBjNTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmNwcApAQCAt
MjYsOCArMjYsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1bnNpZ25lZCBzaG9ydCBDU1NJ
bml0aWFsVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0Ci17IAotICAgIHJldHVybiBDU1NfSU5J
VElBTDsgCit7CisgICAgcmV0dXJuIENTU19JTklUSUFMOwogfQogCiBTdHJpbmcgQ1NTSW5pdGlh
bFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbml0aWFsVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaApp
bmRleCA5ZWUyZjI5Li4wMWJiNjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW5pdGlhbFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1ZS5o
CkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7Ci0gICAgICAgIAorCiBwcml2YXRlOgogICAgIENTU0luaXRpYWxWYWx1
ZShib29sIGltcGxpY2l0KQogICAgICAgICA6IG1faW1wbGljaXQoaW1wbGljaXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAx
ZTZmZTIxLi41OGRjYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6fkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkKICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTTXV0YWJsZVZhbHVlKj4odmFsdWUpLT5zZXROb2RlKDApOwogICAgIH0KIH0KLSAK
KwogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIG90aGVyKQogewog
ICAgIEFTU0VSVCghbV9pdGVyYXRvckNvdW50KTsKQEAgLTE0MCwxNCArMTQwLDE0IEBAIFN0cmlu
ZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVy
dHlJRCkgY29uc3QKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZDogewogICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbOV0gPSB7IENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRYLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZ
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRBdHRhY2htZW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXRZLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUG9zaXRpb25YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB9OyAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRPcmlnaW4gfTsKICAgICAgICAgICAgIHJldHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFs
dWUocHJvcGVydGllcyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
cjogewpAQCAtMjQzLDcgKzI0Myw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Z2V0UHJvcGVydHlWYWx1ZShpbnQgcHJvcGVydHlJRCkgY29uc3QKICAgICAgICAgICAgIHJl
dHVybiBnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUocHJvcGVydGllcyk7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2s6IHsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tSZXBlYXQsIAorICAgICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9
IHsgQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVh
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Vi
a2l0TWFza0F0dGFjaG1lbnQsIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uLCBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDbGlwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luIH07CiAgICAgICAgICAgICByZXR1cm4gZ2V0
TGF5ZXJlZFNob3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwpAQCAtMzI3LDcgKzMyNyw3IEBAIFN0
cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVl
KGNvbnN0IGludCogcHJvcGVydGllCiAgICAgLy8gQmVnaW4gYnkgY29sbGVjdGluZyB0aGUgcHJv
cGVydGllcyBpbnRvIGFuIGFycmF5LgogICAgIFZlY3RvcjwgUmVmUHRyPENTU1ZhbHVlPiA+IHZh
bHVlcyhzaXplKTsKICAgICBzaXplX3QgbnVtTGF5ZXJzID0gMDsKLSAgICAKKwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIHZhbHVlc1tpXSA9IGdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydGllc1tpXSk7CiAgICAgICAgIGlmICh2YWx1ZXNbaV0pIHsK
QEAgLTMzOCw3ICszMzgsNyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Omdl
dExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZQogICAgICAgICAgICAg
ICAgIG51bUxheWVycyA9IG1heDxzaXplX3Q+KDFVLCBudW1MYXllcnMpOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgLy8gTm93IHN0aXRjaCB0aGUgcHJvcGVydGllcyB0b2dldGhlci4g
IEltcGxpY2l0IGluaXRpYWwgdmFsdWVzIGFyZSBmbGFnZ2VkIGFzIHN1Y2ggYW5kCiAgICAgLy8g
Y2FuIHNhZmVseSBiZSBvbWl0dGVkLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtTGF5
ZXJzOyBpKyspIHsKQEAgLTM1Myw3ICszNTMsNyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZQog
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZh
bHVlc1tqXS5nZXQoKSktPml0ZW0oaSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVzW2pdOwotICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICAvLyBDb2xvciBvbmx5IGJlbG9uZ3MgaW4gdGhlIGxhc3QgbGF5
ZXIuCiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBudW1M
YXllcnMgLSAxKQpAQCAtMzY1LDcgKzM2NSw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAK
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVwb3J0IGJhY2tncm91bmQtcmVwZWF0IGFzIGl0
IHdhcyB3cml0dGVuIGluIHRoZSBDU1MuIElmIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCwKICAg
ICAgICAgICAgIC8vIHRoZW4gaXQgd2FzIHdyaXR0ZW4gd2l0aCBvbmx5IG9uZSB2YWx1ZS4gSGVy
ZSB3ZSBmaWd1cmUgb3V0IHdoaWNoIHZhbHVlIHRoYXQgd2FzIHNvIHdlIGNhbgotICAgICAgICAg
ICAgLy8gcmVwb3J0IGJhY2sgY29ycmVjdGx5LiAKKyAgICAgICAgICAgIC8vIHJlcG9ydCBiYWNr
IGNvcnJlY3RseS4KICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2pdID09IENTU1Byb3BlcnR5
QmFja2dyb3VuZFJlcGVhdFggJiYgaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnRpZXNbal0pKSB7
CiAKICAgICAgICAgICAgICAgICAvLyBCVUcgNDkwNTU6IG1ha2Ugc3VyZSB0aGUgdmFsdWUgd2Fz
IG5vdCByZXNldCBpbiB0aGUgbGF5ZXIgY2hlY2sganVzdCBhYm92ZS4KQEAgLTM3Niw3ICszNzYs
NyBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldExheWVyZWRTaG9ydGhh
bmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZQogICAgICAgICAgICAgICAgICAgICAgICAgeVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4obmV4dFZhbHVlLmdldCgpKS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgeVZhbHVlID0gbmV4dFZhbHVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICAgICAgaW50IHhJZCA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5nZXRJZGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpbnQgeUlkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih5VmFsdWUuZ2V0KCkp
LT5nZXRJZGVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoeElkICE9IHlJZCkgewpAQCAt
MzkzLDcgKzM5Myw3IEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5
ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllCiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS0+aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFsYXllclJlcy5pc051bGwoKSkKICAgICAgICAgICAg
ICAgICAgICAgbGF5ZXJSZXMgKz0gIiAiOwpAQCAtNDEwLDcgKzQxMCw3IEBAIFN0cmluZyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IGlu
dCogcHJvcGVydGllCiAgICAgICAgICAgICAgICAgICAgIGxheWVyUmVzICs9IHZhbHVlLT5jc3NU
ZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYg
KCFsYXllclJlcy5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKCFyZXMuaXNOdWxsKCkpCiAg
ICAgICAgICAgICAgICAgcmVzICs9ICIsICI7CkBAIC00NjMsNyArNDYzLDcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnQKICAgICByZXR1cm4gcHJvcGVydHkgPyBwcm9wZXJ0eS0+dmFsdWUoKSA6
IDA7CiB9CiAKLWJvb2wgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVNob3J0aGFu
ZFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpIAorYm9vbCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlU2hvcnRoYW5kUHJvcGVydHkoaW50IHByb3Bl
cnR5SUQsIGJvb2wgbm90aWZ5Q2hhbmdlZCkKIHsKICAgICBDU1NQcm9wZXJ0eUxvbmdoYW5kIGxv
bmdoYW5kID0gbG9uZ2hhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKICAgICBpZiAobG9uZ2hh
bmQubGVuZ3RoKCkpIHsKQEAgLTQ4MSwxMSArNDgxLDExIEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGJvb2wgbm90aWZ5
Q2hhCiAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gYW4gZXF1aXZhbGVudCBzaG9ydGhhbmQgd2hl
biBwb3NzaWJsZS4KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KLSAgIAorCiAgICAg
Q1NTUHJvcGVydHkqIGZvdW5kUHJvcGVydHkgPSBmaW5kUHJvcGVydHlXaXRoSWQocHJvcGVydHlJ
RCk7CiAgICAgaWYgKCFmb3VuZFByb3BlcnR5KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgCisKICAgICBTdHJpbmcgdmFsdWUgPSByZXR1cm5UZXh0ID8gZm91bmRQcm9wZXJ0eS0+dmFs
dWUoKS0+Y3NzVGV4dCgpIDogU3RyaW5nKCk7CiAKICAgICAvLyBBIG1vcmUgZWZmaWNpZW50IHJl
bW92YWwgc3RyYXRlZ3kgd291bGQgaW52b2x2ZSBtYXJraW5nIGVudHJpZXMgYXMgZW1wdHkKQEAg
LTU4MCw3ICs1ODAsNyBAQCBib29sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiB2YWx1ZQogCiAgICAgcmV0dXJuIHN1
Y2Nlc3M7CiB9Ci0gICAgCisKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnNldFBy
b3BlcnR5SW50ZXJuYWwoY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eSog
c2xvdCkKIHsKICAgICBBU1NFUlQoIW1faXRlcmF0b3JDb3VudCk7CkBAIC02ODcsMTIgKzY4Nywx
MiBAQCBTdHJpbmcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkg
Y29uc3QKIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3NzVGV4dCgpIGNvbnN0
CiB7CiAgICAgU3RyaW5nIHJlc3VsdCA9ICIiOwotICAgIAorCiAgICAgY29uc3QgQ1NTUHJvcGVy
dHkqIHBvc2l0aW9uWFByb3AgPSAwOwogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBwb3NpdGlvbllQ
cm9wID0gMDsKICAgICBjb25zdCBDU1NQcm9wZXJ0eSogcmVwZWF0WFByb3AgPSAwOwogICAgIGNv
bnN0IENTU1Byb3BlcnR5KiByZXBlYXRZUHJvcCA9IDA7Ci0gICAgCisKICAgICB1bnNpZ25lZCBz
aXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
c2l6ZTsgKytuKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wID0gbV9wcm9wZXJ0
aWVzW25dOwpAQCAtNzA3LDIxICs3MDcsMjEgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0
ICs9IHByb3AuY3NzVGV4dCgpOwogICAgIH0KLSAgICAKKwogICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgbm90LXNvLW5pY2Ugd2F5IHRvIHR1cm4geC95IHBvc2l0aW9ucyBpbnRvIHNpbmdsZSBiYWNr
Z3JvdW5kLXBvc2l0aW9uIGluIG91dHB1dC4KLSAgICAvLyBJdCBpcyByZXF1aXJlZCBiZWNhdXNl
IGJhY2tncm91bmQtcG9zaXRpb24teC95IGFyZSBub24tc3RhbmRhcmQgcHJvcGVydGllcyBhbmQg
V2ViS2l0IGdlbmVyYXRlZCBvdXRwdXQgCisgICAgLy8gSXQgaXMgcmVxdWlyZWQgYmVjYXVzZSBi
YWNrZ3JvdW5kLXBvc2l0aW9uLXgveSBhcmUgbm9uLXN0YW5kYXJkIHByb3BlcnRpZXMgYW5kIFdl
YktpdCBnZW5lcmF0ZWQgb3V0cHV0CiAgICAgLy8gd291bGQgbm90IHdvcmsgaW4gRmlyZWZveCAo
PHJkYXI6Ly9wcm9ibGVtLzUxNDMxODM+KQogICAgIC8vIEl0IHdvdWxkIGJlIGEgYmV0dGVyIHNv
bHV0aW9uIGlmIGJhY2tncm91bmQtcG9zaXRpb24gd2FzIENTU19QQUlSLgogICAgIGlmIChwb3Np
dGlvblhQcm9wICYmIHBvc2l0aW9uWVByb3AgJiYgcG9zaXRpb25YUHJvcC0+aXNJbXBvcnRhbnQo
KSA9PSBwb3NpdGlvbllQcm9wLT5pc0ltcG9ydGFudCgpKSB7CiAgICAgICAgIFN0cmluZyBwb3Np
dGlvblZhbHVlOwogICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25YLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfTsK
LSAgICAgICAgaWYgKHBvc2l0aW9uWFByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcG9z
aXRpb25ZUHJvcC0+dmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkgCisgICAgICAgIGlmIChwb3NpdGlv
blhQcm9wLT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHBvc2l0aW9uWVByb3AtPnZhbHVlKCkt
PmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBwb3NpdGlvblZhbHVlID0gZ2V0TGF5ZXJlZFNo
b3J0aGFuZFZhbHVlKHByb3BlcnRpZXMpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3Np
dGlvblZhbHVlID0gcG9zaXRpb25YUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpICsgIiAiICsgcG9z
aXRpb25ZUHJvcC0+dmFsdWUoKS0+Y3NzVGV4dCgpOwogICAgICAgICByZXN1bHQgKz0gImJhY2tn
cm91bmQtcG9zaXRpb246ICIgKyBwb3NpdGlvblZhbHVlICsgKHBvc2l0aW9uWFByb3AtPmlzSW1w
b3J0YW50KCkgPyAiICFpbXBvcnRhbnQiIDogIiIpICsgIjsgIjsKICAgICB9IGVsc2UgewotICAg
ICAgICBpZiAocG9zaXRpb25YUHJvcCkgCisgICAgICAgIGlmIChwb3NpdGlvblhQcm9wKQogICAg
ICAgICAgICAgcmVzdWx0ICs9IHBvc2l0aW9uWFByb3AtPmNzc1RleHQoKTsKICAgICAgICAgaWYg
KHBvc2l0aW9uWVByb3ApCiAgICAgICAgICAgICByZXN1bHQgKz0gcG9zaXRpb25ZUHJvcC0+Y3Nz
VGV4dCgpOwpAQCAtNzMxLDEzICs3MzEsMTMgQEAgU3RyaW5nIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjc3NUZXh0KCkgY29uc3QKICAgICBpZiAocmVwZWF0WFByb3AgJiYgcmVwZWF0WVBy
b3AgJiYgcmVwZWF0WFByb3AtPmlzSW1wb3J0YW50KCkgPT0gcmVwZWF0WVByb3AtPmlzSW1wb3J0
YW50KCkpIHsKICAgICAgICAgU3RyaW5nIHJlcGVhdFZhbHVlOwogICAgICAgICBjb25zdCBpbnQg
cmVwZWF0UHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WCwgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0WSB9OwotICAgICAgICBpZiAocmVwZWF0WFByb3AtPnZh
bHVlKCktPmlzVmFsdWVMaXN0KCkgfHwgcmVwZWF0WVByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0
KCkpIAorICAgICAgICBpZiAocmVwZWF0WFByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgfHwg
cmVwZWF0WVByb3AtPnZhbHVlKCktPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXBlYXRW
YWx1ZSA9IGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShyZXBlYXRQcm9wZXJ0aWVzKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcmVwZWF0VmFsdWUgPSByZXBlYXRYUHJvcC0+dmFsdWUoKS0+
Y3NzVGV4dCgpICsgIiAiICsgcmVwZWF0WVByb3AtPnZhbHVlKCktPmNzc1RleHQoKTsKICAgICAg
ICAgcmVzdWx0ICs9ICJiYWNrZ3JvdW5kLXJlcGVhdDogIiArIHJlcGVhdFZhbHVlICsgKHJlcGVh
dFhQcm9wLT5pc0ltcG9ydGFudCgpID8gIiAhaW1wb3J0YW50IiA6ICIiKSArICI7ICI7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHJlcGVhdFhQcm9wKSAKKyAgICAgICAgaWYgKHJlcGVhdFhQ
cm9wKQogICAgICAgICAgICAgcmVzdWx0ICs9IHJlcGVhdFhQcm9wLT5jc3NUZXh0KCk7CiAgICAg
ICAgIGlmIChyZXBlYXRZUHJvcCkKICAgICAgICAgICAgIHJlc3VsdCArPSByZXBlYXRZUHJvcC0+
Y3NzVGV4dCgpOwpAQCAtODI1LDE4ICs4MjUsMTggQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OnJlbW92ZVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQg
bGVuZ3RoLCBib29sIG5vdGlmeUNoYW5nZWQpCiB7CiAgICAgQVNTRVJUKCFtX2l0ZXJhdG9yQ291
bnQpOwotICAgIAorCiAgICAgaWYgKG1fcHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyB1c2VkIHdpdGggc3Rh
dGljIHNldHMgYW5kIGluIHRoYXQgY2FzZSBjb25zdHJ1Y3RpbmcgdGhlIGhhc2ggcmVwZWF0ZWRs
eSBpcyBwcmV0dHkgcG9pbnRsZXNzLgogICAgIEhhc2hTZXQ8aW50PiB0b1JlbW92ZTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgIHRvUmVtb3ZlLmFk
ZChzZXRbaV0pOwotICAgIAorCiAgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBuZXdQcm9wZXJ0
aWVzOwogICAgIG5ld1Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3BlcnRp
ZXMuc2l6ZSgpKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRpZXMuc2l6
ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKICAgICAgICAg
Y29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wcm9wZXJ0aWVzW25dOwpAQCAtODUwLDcg
Kzg1MCw3IEBAIHZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnRp
ZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQKIAogICAgIGJvb2wgY2hhbmdlZCA9IG5l
d1Byb3BlcnRpZXMuc2l6ZSgpICE9IG1fcHJvcGVydGllcy5zaXplKCk7CiAgICAgbV9wcm9wZXJ0
aWVzID0gbmV3UHJvcGVydGllczsKLSAgICAKKwogICAgIGlmIChjaGFuZ2VkICYmIG5vdGlmeUNo
YW5nZWQpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KQEAgLTg2Niw3ICs4NjYs
NyBAQCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29weSgpIGNvbnN0CiB9CiAKIGNvbnN0IENTU1Byb3BlcnR5KiBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6ZmluZFByb3BlcnR5V2l0aElkKGludCBwcm9wZXJ0eUlE
KSBjb25zdAoteyAgICAKK3sKICAgICBmb3IgKGludCBuID0gbV9wcm9wZXJ0aWVzLnNpemUoKSAt
IDEgOyBuID49IDA7IC0tbikgewogICAgICAgICBpZiAocHJvcGVydHlJRCA9PSBtX3Byb3BlcnRp
ZXNbbl0ubV9pZCkKICAgICAgICAgICAgIHJldHVybiAmbV9wcm9wZXJ0aWVzW25dOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAppbmRleCBlYThh
YjNmLi4zMDkyMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaApAQCAtMzgsMTUgKzM4LDE1IEBAIHB1YmxpYzoKICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIGRlY2wsIENTU1Byb3BlcnR5KiBjdXJyZW50KTsKICAgICBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3IoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25D
b25zdEl0ZXJhdG9yJiBvKTsKICAgICB+Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0
ZXJhdG9yKCk7Ci0gICAgCisKICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gKm1fY3VycmVudDsgfQogICAgIGNvbnN0IENTU1Byb3BlcnR5KiBvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50OyB9Ci0gICAgCisKICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKSB7
IEFTU0VSVChtX2RlY2wgPT0gby5tX2RlY2wpOyByZXR1cm4gbV9jdXJyZW50ICE9IG8ubV9jdXJy
ZW50OyB9CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uQ29uc3RJdGVyYXRvciYgbykgeyBBU1NFUlQobV9kZWNsID09IG8ubV9kZWNsKTsgcmV0dXJu
IG1fY3VycmVudCA9PSBvLm1fY3VycmVudDsgfQotICAgIAorCiAgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBvKTsKLSAgICAKKwogICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpOwogICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgb3BlcmF0b3ItLSgpOwogCkBAIC03Nyw3ICs3
Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYg
b3BlcmF0b3I9KGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uJik7Ci0gICAgCisKICAg
ICB0eXBlZGVmIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKIAogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IodGhpcywgbV9wcm9wZXJ0aWVzLmJlZ2luKCkpOyB9CkBAIC0xMTMsNyArMTEzLDcgQEAg
cHVibGljOgogICAgIGJvb2wgc2V0UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRy
dWUpOwogCiAgICAgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5v
dGlmeUNoYW5nZWQgPSB0cnVlLCBib29sIHJldHVyblRleHQgPSBmYWxzZSk7Ci0gCisKICAgICAv
LyBzZXRMZW5ndGhQcm9wZXJ0eSB0cmVhdHMgaW50ZWdlcnMgYXMgcGl4ZWxzISAoTmVlZGVkIGZv
ciBjb252ZXJzaW9uIG9mIEhUTUwgYXR0cmlidXRlcy4pCiAgICAgdm9pZCBzZXRMZW5ndGhQcm9w
ZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQs
IGJvb2wgbXVsdGlMZW5ndGggPSBmYWxzZSk7CiAgICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShp
bnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcywgYm9vbCBpbXBvcnRhbnQgPSBmYWxzZSk7IC8vIHBhcnNlZCBzdHJpbmcgdmFsdWUK
QEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVz
KGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqLCBpbnQgbnVtUHJvcGVydGllcyk7CiAgICAgLy8g
VGhpcyBkb2VzIG5vIGNoYW5nZSBub3RpZmljYXRpb25zIHNpbmNlIGl0J3Mgb25seSBjYWxsZWQg
YnkgY3JlYXRlTWFya3VwLgogICAgIHZvaWQgYWRkUGFyc2VkUHJvcGVydHkoY29uc3QgQ1NTUHJv
cGVydHkmKTsKLSAKKwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGNvcHlCbG9ja1Byb3BlcnRpZXMoKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVy
dGllcygpOwogICAgIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1
bnNpZ25lZCBsZW5ndGgsIGJvb2wgbm90aWZ5Q2hhbmdlZCA9IHRydWUpOwpAQCAtMTM4LDcgKzEz
OCw3IEBAIHB1YmxpYzoKICAgICBib29sIHVzZVN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVy
biBtX3N0cmljdFBhcnNpbmc7IH0KIAogICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMo
TGlzdEhhc2hTZXQ8S1VSTD4mKTsKLSAgICAKKwogICAgIGJvb2wgcHJvcGVydGllc0VxdWFsKGNv
bnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBvKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXMgPT0gby0+bV9wcm9wZXJ0aWVzOyB9CiAKICAgICBib29sIGlzSW5saW5lU3R5bGVEZWNs
YXJhdGlvbigpOwpAQCAtMTgxLDEzICsxODEsMTMgQEAgcHJpdmF0ZToKIAogICAgIGZyaWVuZCBj
bGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I7CiB9OwotICAgIAot
aW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsLCBDU1NQcm9wZXJ0eSogY3VycmVudCkgCisKK2lubGluZSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Q29uc3RJdGVyYXRvcihjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCwgQ1NT
UHJvcGVydHkqIGN1cnJlbnQpCiA6IG1fZGVjbChkZWNsKQogLCBtX2N1cnJlbnQoY3VycmVudCkK
LXsgCit7CiAjaWZuZGVmIE5ERUJVRwotICAgIGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qPihtX2RlY2wpLT5tX2l0ZXJhdG9yQ291bnQrKzsgCisgICAgY29uc3RfY2FzdDxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3VudCsrOwog
I2VuZGlmCiB9CiAKQEAgLTE5NiwxMSArMTk2LDExIEBAIGlubGluZSBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3I6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJ
CiAsIG1fY3VycmVudChvLm1fY3VycmVudCkKIHsKICNpZm5kZWYgTkRFQlVHCi0gICAgY29uc3Rf
Y2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3Vu
dCsrOyAKKyAgICBjb25zdF9jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4obV9kZWNs
KS0+bV9pdGVyYXRvckNvdW50Kys7CiAjZW5kaWYKIH0KIAotaW5saW5lIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6fkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29u
c3RJdGVyYXRvcigpIAoraW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVy
YXRvcjo6fkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcigpCiB7CiAjaWZu
ZGVmIE5ERUJVRwogICAgIGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiht
X2RlY2wpLT5tX2l0ZXJhdG9yQ291bnQtLTsKQEAgLTIxMiwyMiArMjEyLDIyIEBAIGlubGluZSBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uQ29uc3RJCiAgICAgbV9kZWNsID0gby5tX2RlY2w7CiAgICAgbV9jdXJyZW50ID0g
by5tX2N1cnJlbnQ7CiAjaWZuZGVmIE5ERUJVRwotICAgIGNvbnN0X2Nhc3Q8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qPihtX2RlY2wpLT5tX2l0ZXJhdG9yQ291bnQrKzsgCisgICAgY29uc3Rf
Y2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1faXRlcmF0b3JDb3Vu
dCsrOwogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQotICAgIAotaW5saW5lIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvciYgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25Db25zdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgCi17IAorCitpbmxpbmUgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb25Db25zdEl0ZXJhdG9yJiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNv
bnN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQorewogICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gY29u
c3RfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+KG1fZGVjbCktPm1fcHJvcGVydGll
cy5lbmQoKSk7CiAgICAgKyttX2N1cnJlbnQ7Ci0gICAgcmV0dXJuICp0aGlzOyAKKyAgICByZXR1
cm4gKnRoaXM7CiB9CiAKLWlubGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRl
cmF0b3ImIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3It
LSgpIAoteyAKLSAgICAtLW1fY3VycmVudDsgCi0gICAgcmV0dXJuICp0aGlzOyAKK2lubGluZSBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkNvbnN0SXRlcmF0b3ImIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uQ29uc3RJdGVyYXRvcjo6b3BlcmF0b3ItLSgpCit7CisgICAgLS1tX2N1cnJlbnQ7
CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCmluZGV4IDMwNWIwY2YuLmMxOTQ0N2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC0zNjYsNyArMzY2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2ltcGxl
TGVuZ3RoUHJvcGVydHlJRChpbnQgcHJvcGVydHlJZCwgYm9vbCYgYWNjZXB0c05lZ2F0aXYKICAg
ICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdC
b3R0b206CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlQYWRkaW5nUmlnaHQ6IAorICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQ6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dExvZ2ljYWxXaWR0aDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TG9naWNhbEhlaWdodDoK
QEAgLTM4MSw4ICszODEsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9w
ZXJ0eUlEKGludCBwcm9wZXJ0eUlkLCBib29sJiBhY2NlcHRzTmVnYXRpdgogICAgIGNhc2UgQ1NT
UHJvcGVydHlCb3R0b206CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUxlZnQ6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbToKLSAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luTGVmdDogCi0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0OiAKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFy
Z2luTGVmdDoKKyAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eU1hcmdpblRvcDoKICAgICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6CiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHRJbmRlbnQ6CkBAIC02NDIsNyArNjQyLDcgQEAgdm9pZCBDU1NQYXJzZXI6
OmNsZWFyUHJvcGVydGllcygpCiAgICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2lu
Qm94ID0gSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJRVM7CiAgICAgbV9oYXNGb250RmFjZU9u
bHlWYWx1ZXMgPSBmYWxzZTsKIH0KLSAgICAKKwogdm9pZCBDU1NQYXJzZXI6OnNldFN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsKICAgICBtX3N0eWxlU2hlZXQgPSBzdHls
ZVNoZWV0OwpAQCAtMTI2MCwxMSArMTI2MCwxMSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1
ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOiAgICAg
ICAgICAgLy8gbm9uZSB8IG5vcm1hbCB8IHNwZWxsLW91dCB8IGRpZ2l0cyB8IGxpdGVyYWwtcHVu
Y3R1YXRpb24gfCBuby1wdW5jdHVhdGlvbiB8IGluaGVyaXQKLSAgICAgICAgaWYgKGlkID09IENT
U1ZhbHVlTm9uZSB8fCBpZCA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBpZCA9PSBDU1NWYWx1ZVNwZWxs
T3V0IHx8IGlkID09IENTU1ZhbHVlRGlnaXRzIAorICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVO
b25lIHx8IGlkID09IENTU1ZhbHVlTm9ybWFsIHx8IGlkID09IENTU1ZhbHVlU3BlbGxPdXQgfHwg
aWQgPT0gQ1NTVmFsdWVEaWdpdHMKICAgICAgICAgICAgIHx8IGlkID09IENTU1ZhbHVlTGl0ZXJh
bFB1bmN0dWF0aW9uIHx8IGlkID09IENTU1ZhbHVlTm9QdW5jdHVhdGlvbikKICAgICAgICAgICAg
IHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwog
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0SW5kZW50OiAgICAgICAgICAvLyA8bGVuZ3RoPiB8IDxw
ZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSAoIWlkICYmIHZh
bGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpOwogICAgICAgICBi
cmVhazsKQEAgLTE2MDIsNyArMTYwMiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGlu
dCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IGlkID09
IENTU1ZhbHVlU3RhcnQgfHwgaWQgPT0gQ1NTVmFsdWVFbmQgfHwgaWQgPT0gQ1NTVmFsdWVDZW50
ZXIgfHwgaWQgPT0gQ1NTVmFsdWVCYXNlbGluZSB8fCBpZCA9PSBDU1NWYWx1ZVN0cmV0Y2g7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4RmxvdzoKLSAgICAg
ICAgLy8gRklYTUU6IC13ZWJraXQtZmxleC1mbG93IHRha2VzIGEgc2Vjb25kICJ3cmFwIiB2YWx1
ZS4gICAgCisgICAgICAgIC8vIEZJWE1FOiAtd2Via2l0LWZsZXgtZmxvdyB0YWtlcyBhIHNlY29u
ZCAid3JhcCIgdmFsdWUuCiAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gaWQgPT0gQ1NTVmFsdWVS
b3cgfHwgaWQgPT0gQ1NTVmFsdWVSb3dSZXZlcnNlIHx8IGlkID09IENTU1ZhbHVlQ29sdW1uIHx8
IGlkID09IENTU1ZhbHVlQ29sdW1uUmV2ZXJzZTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKQEAg
LTIyNDYsNyArMjI0Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoaW50
IHByb3BJZCwgY29uc3QgaW50KiBwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvCiAgICAgICAgICAgICAg
ICAgICAgIGlmICgocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4g
fHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tPcmlnaW4pICYmICFwYXJz
ZWRQcm9wZXJ0eVtpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYmFja2dyb3Vu
ZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dyb3VuZC1jbGlwIGFsc28u
CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBDU1NJbml0
aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOwotICAgICAgICAgICAgICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwogICAgICAgICAgICAg
fQpAQCAtMzMzMiw3ICszMzMyLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKIAogICAgICAgICByZXR1cm4gQ1NTU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUobnVtU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKICAgICB9
Ci0gICAgCisKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPmZ1bmN0aW9uLT5uYW1l
LCAiY3ViaWMtYmV6aWVyKCIpKSB7CiAgICAgICAgIC8vIEZvciBjdWJpYyBiZXppZXIsIDQgdmFs
dWVzIG11c3QgYmUgc3BlY2lmaWVkLgogICAgICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgp
ICE9IDcpCkBAIC0zMzUyLDcgKzMzNTIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKQogCiAgICAgICAgIHJldHVybiBDU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU6OmNyZWF0ZSh4MSwgeTEsIHgyLCB5Mik7CiAg
ICAgfQotICAgIAorCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM3MDUsMjAgKzM3MDUsMjAgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhcGUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiBQ
YXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdyYXBTaGFwZVJlY3QoQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogewogICAgIEFTU0VSVChhcmdzKTsKLSAgICAKKwogICAg
IC8vIHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCwgW1tyeF0sIHJ5XSkKICAgICBpZiAoYXJncy0+
c2l6ZSgpICE9IDcgJiYgYXJncy0+c2l6ZSgpICE9IDkgJiYgYXJncy0+c2l6ZSgpICE9IDExKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0cjxDU1NXcmFwU2hhcGVSZWN0PiBz
aGFwZSA9IENTU1dyYXBTaGFwZVJlY3Q6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgdW5zaWduZWQg
YXJndW1lbnROdW1iZXIgPSAwOwogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mt
PmN1cnJlbnQoKTsKICAgICB3aGlsZSAoYXJndW1lbnQpIHsKICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnQsIEZMZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsIAorCisgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVWYWx1ZShhcmd1bWVudC0+ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZ3VtZW50LT51bml0KTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50TnVtYmVyIDwgNik7CiAgICAgICAgIHN3aXRjaCAoYXJndW1lbnROdW1iZXIpIHsKQEAg
LTM3NDUsMzQgKzM3NDUsMzQgQEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6
cGFyc2VXcmFwU2hhcGVSZWN0KENTU1BhcnNlclZhbHVlTGlzdCogYXJncykKICAgICAgICAgaWYg
KGFyZ3VtZW50KSB7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUGFyc2Vy
VmFsdWU6Ok9wZXJhdG9yIHx8IGFyZ3VtZW50LT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGFyZ3VtZW50ID0gYXJn
cy0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIGFyZ3VtZW50TnVtYmVyKys7CiAgICAgfQot
ICAgIAorCiAgICAgaWYgKGFyZ3VtZW50TnVtYmVyIDwgNCkKLSAgICAgICAgcmV0dXJuIDA7ICAg
IAorICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKIFBhc3NSZWZQdHI8
Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlQ2lyY2xlKENTU1BhcnNlclZh
bHVlTGlzdCogYXJncykKIHsKICAgICBBU1NFUlQoYXJncyk7Ci0gICAgCisKICAgICAvLyBjaXJj
bGUoeCwgeSwgcikKICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDUpCiAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAKKwogICAgIFJlZlB0cjxDU1NXcmFwU2hhcGVDaXJjbGU+IHNoYXBlID0gQ1NT
V3JhcFNoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKLSAgICAKKwogICAgIHVuc2lnbmVkIGFyZ3VtZW50
TnVtYmVyID0gMDsKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLT5jdXJyZW50
KCk7CiAgICAgd2hpbGUgKGFyZ3VtZW50KSB7CiAgICAgICAgIGlmICghdmFsaWRVbml0KGFyZ3Vt
ZW50LCBGTGVuZ3RoLCBtX3N0cmljdCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUoYXJndW1lbnQtPmZWYWx1ZSwgCisgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShh
cmd1bWVudC0+ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIGFyZ3VtZW50LT51bml0KTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50TnVtYmVyIDwgMyk7
CiAgICAgICAgIHN3aXRjaCAoYXJndW1lbnROdW1iZXIpIHsKQEAgLTM3ODYsMzcgKzM3ODYsMzcg
QEAgUGFzc1JlZlB0cjxDU1NXcmFwU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VXcmFwU2hhcGVDaXJj
bGUoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmcKICAgICAgICAgICAgIHNoYXBlLT5zZXRSYWRpdXMo
bGVuZ3RoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIGFyZ3VtZW50ID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIGlmIChhcmd1bWVudC0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3Ig
fHwgYXJndW1lbnQtPmlWYWx1ZSAhPSAnLCcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBhcmd1bWVu
dCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgfQogICAgICAgICBhcmd1bWVudE51bWJlcisrOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChhcmd1bWVudE51bWJlciA8IDMpCi0gICAgICAgIHJldHVy
biAwOyAgICAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHNoYXBlOwogfQogCiBQYXNz
UmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdyYXBTaGFwZUVsbGlwc2UoQ1NT
UGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogewogICAgIEFTU0VSVChhcmdzKTsKLSAgICAKKwogICAg
IC8vIGVsbGlwc2UoeCwgeSwgcngsIHJ5KQogICAgIGlmIChhcmdzLT5zaXplKCkgIT0gNykKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgUmVmUHRyPENTU1dyYXBTaGFwZUVsbGlw
c2U+IHNoYXBlID0gQ1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3JlYXRlKCk7CiAgICAgdW5zaWduZWQg
YXJndW1lbnROdW1iZXIgPSAwOwogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mt
PmN1cnJlbnQoKTsKICAgICB3aGlsZSAoYXJndW1lbnQpIHsKICAgICAgICAgaWYgKCF2YWxpZFVu
aXQoYXJndW1lbnQsIEZMZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3VtZW50LT5mVmFsdWUsIAorCisgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVWYWx1ZShhcmd1bWVudC0+ZlZhbHVlLAogICAgICAgICAgICAgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZ3VtZW50LT51bml0KTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50TnVtYmVyIDwgNCk7CiAgICAgICAgIHN3aXRjaCAoYXJndW1lbnROdW1iZXIpIHsKQEAg
LTM4MzMsNyArMzgzMyw3IEBAIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBh
cnNlV3JhcFNoYXBlRWxsaXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgICAgICAgICBz
aGFwZS0+c2V0UmFkaXVzWShsZW5ndGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgYXJndW1lbnQgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlm
IChhcmd1bWVudCkgewogICAgICAgICAgICAgaWYgKGFyZ3VtZW50LT51bml0ICE9IENTU1BhcnNl
clZhbHVlOjpPcGVyYXRvciB8fCBhcmd1bWVudC0+aVZhbHVlICE9ICcsJykKQEAgLTM4NDIsNyAr
Mzg0Miw3IEBAIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlPiBDU1NQYXJzZXI6OnBhcnNlV3JhcFNo
YXBlRWxsaXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyCiAgICAgICAgIH0KICAgICAgICAgYXJn
dW1lbnROdW1iZXIrKzsKICAgICB9Ci0gICAgCisKICAgICBpZiAoYXJndW1lbnROdW1iZXIgPCA0
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc2hhcGU7CkBAIC0zODU1LDcgKzM4NTUs
NyBAQCBQYXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZVdyYXBTaGFwZVBv
bHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcgogICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLT5z
aXplKCk7CiAgICAgaWYgKCFzaXplKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJl
ZlB0cjxDU1NXcmFwU2hhcGVQb2x5Z29uPiBzaGFwZSA9IENTU1dyYXBTaGFwZVBvbHlnb246OmNy
ZWF0ZSgpOwogCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50ID0gYXJncy0+Y3VycmVudCgp
OwpAQCAtMzg2OSwzNCArMzg2OSwzNCBAQCBQYXNzUmVmUHRyPENTU1dyYXBTaGFwZT4gQ1NTUGFy
c2VyOjpwYXJzZVdyYXBTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcgogICAgICAg
ICBhcmd1bWVudCA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgc2l6ZSAtPSAyOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIDxsZW5ndGg+LCA8bGVuZ3RoPiAuLi4gPGxlbmd0aD4sIDxsZW5ndGg+IC0+
IGVhY2ggcGFpciBoYXMgMyBlbGVtZW50cwogICAgIGlmICghc2l6ZSB8fCAoc2l6ZSAlIDMpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudFgg
PSBhcmd1bWVudDsKICAgICB3aGlsZSAoYXJndW1lbnRYKSB7CiAgICAgICAgIGlmICghdmFsaWRV
bml0KGFyZ3VtZW50WCwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIAorCiAgICAgICAgIENTU1BhcnNlclZhbHVlKiBjb21tYSA9IGFyZ3MtPm5leHQo
KTsKICAgICAgICAgaWYgKCFjb21tYSB8fCBjb21tYS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6
T3BlcmF0b3IgfHwgY29tbWEtPmlWYWx1ZSAhPSAnLCcpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgCisKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50WSA9IGFyZ3MtPm5l
eHQoKTsKICAgICAgICAgaWYgKCFhcmd1bWVudFkgfHwgIXZhbGlkVW5pdChhcmd1bWVudFksIEZM
ZW5ndGgsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVWYWx1ZShhcmd1bWVudFgtPmZWYWx1ZSwgCisKKyAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB4TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVW
YWx1ZShhcmd1bWVudFgtPmZWYWx1ZSwKICAgICAgICAgICAgIChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzKSBhcmd1bWVudFgtPnVuaXQpOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHlMZW5ndGggPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGFyZ3Vt
ZW50WS0+ZlZhbHVlLCAKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5TGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShhcmd1bWVudFktPmZWYWx1ZSwK
ICAgICAgICAgICAgIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBhcmd1bWVudFktPnVu
aXQpOwotICAgICAgICAKKwogICAgICAgICBzaGFwZS0+YXBwZW5kUG9pbnQoeExlbmd0aC5yZWxl
YXNlKCksIHlMZW5ndGgucmVsZWFzZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgYXJndW1lbnRY
ID0gYXJncy0+bmV4dCgpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzaGFwZTsKIH0KIApA
QCAtMzkwNyw5ICszOTA3LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBlKGJvb2wg
aW1wb3J0YW50KQogCiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
CisKICAgICBSZWZQdHI8Q1NTV3JhcFNoYXBlPiBzaGFwZTsKLSAgICAKKwogICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJyZWN0KCIpKQogICAgICAgICBz
aGFwZSA9IHBhcnNlV3JhcFNoYXBlUmVjdChhcmdzKTsKICAgICBlbHNlIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJjaXJjbGUoIikpCkBAIC01MTM5LDcgKzUx
MzksNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgICwgbV9hbGxvd1Jl
cGVhdCh0cnVlKQogICAgICwgbV9hbGxvd1NsYXNoKGZhbHNlKQogICAgICwgbV9yZXF1aXJlV2lk
dGgoZmFsc2UpCi0gICAgLCBtX3JlcXVpcmVPdXRzZXQoZmFsc2UpICAgIAorICAgICwgbV9yZXF1
aXJlT3V0c2V0KGZhbHNlKQogICAgIHt9CiAKICAgICBib29sIGNhbkFkdmFuY2UoKSBjb25zdCB7
IHJldHVybiBtX2NhbkFkdmFuY2U7IH0KQEAgLTUxNTMsNyArNTE1Myw3IEBAIHN0cnVjdCBCb3Jk
ZXJJbWFnZVBhcnNlQ29udGV4dCB7CiAKICAgICBib29sIHJlcXVpcmVXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVxdWlyZVdpZHRoOyB9CiAgICAgYm9vbCByZXF1aXJlT3V0c2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9yZXF1aXJlT3V0c2V0OyB9Ci0gICAgCisKICAgICB2b2lkIGNvbW1pdEltYWdl
KFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGltYWdlKQogICAgIHsKICAgICAgICAgbV9pbWFnZSA9IGlt
YWdlOwpAQCAtNTIxNyw3ICs1MjE3LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0
IHsKICAgICAgICAgLy8gTWFrZSBvdXIgbmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cuCiAgICAg
ICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVZhbHVlOjpjcmVhdGUobV9pbWFnZSwgbV9pbWFnZVNs
aWNlLCBtX2JvcmRlclNsaWNlLCBtX291dHNldCwgbV9yZXBlYXQpOwogICAgIH0KLSAgICAKKwog
ICAgIENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUqIG1fcHJpbWl0aXZlVmFsdWVDYWNoZTsKIAogICAg
IGJvb2wgbV9jYW5BZHZhbmNlOwpAQCAtNTIyNyw3ICs1MjI3LDcgQEAgc3RydWN0IEJvcmRlcklt
YWdlUGFyc2VDb250ZXh0IHsKICAgICBib29sIG1fYWxsb3dJbWFnZVNsaWNlOwogICAgIGJvb2wg
bV9hbGxvd1JlcGVhdDsKICAgICBib29sIG1fYWxsb3dTbGFzaDsKLSAgICAKKwogICAgIGJvb2wg
bV9yZXF1aXJlV2lkdGg7CiAgICAgYm9vbCBtX3JlcXVpcmVPdXRzZXQ7CiAKQEAgLTUyNDgsNyAr
NTI0OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIFJl
ZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKIAogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5j
ZSgpICYmIGNvbnRleHQuYWxsb3dTbGFzaCgpICYmIHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJy8nKQogICAgICAgICAgICAgY29udGV4dC5j
b21taXRTbGFzaCgpOwotICAgICAgICAKKwogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5j
ZSgpICYmIGNvbnRleHQuYWxsb3dJbWFnZSgpKSB7CiAgICAgICAgICAgICBpZiAodmFsLT51bml0
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJICYmIG1fc3R5bGVTaGVldCkgewogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29tcGxldGVVUkwgY2FsbCBzaG91bGQgYmUgZG9uZSB3
aGVuIHVzaW5nIHRoZSBDU1NJbWFnZVZhbHVlLApAQCAtNTI2MywzNCArNTI2MywzNCBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+
JiByZXN1bHQpCiAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVOb25l
KQogICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2UoQ1NTSW1hZ2VWYWx1ZTo6Y3Jl
YXRlKCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY29udGV4dC5jYW5B
ZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdlU2xpY2UoKSkgewogICAgICAgICAgICAgUmVm
UHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gaW1hZ2VTbGljZTsKICAgICAgICAgICAgIGlm
IChwYXJzZUJvcmRlckltYWdlU2xpY2UocHJvcElkLCBpbWFnZVNsaWNlKSkKICAgICAgICAgICAg
ICAgICBjb250ZXh0LmNvbW1pdEltYWdlU2xpY2UoaW1hZ2VTbGljZS5yZWxlYXNlKCkpOwotICAg
ICAgICB9IAotICAgICAgICAKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghY29udGV4dC5jYW5B
ZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd1JlcGVhdCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHJlcGVhdDsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlUmVwZWF0
KHJlcGVhdCkpCiAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRSZXBlYXQocmVwZWF0KTsK
ICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgp
ICYmIGNvbnRleHQucmVxdWlyZVdpZHRoKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gYm9yZGVyU2xpY2U7CiAgICAgICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFn
ZVdpZHRoKGJvcmRlclNsaWNlKSkKICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEJvcmRl
cldpZHRoKGJvcmRlclNsaWNlLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAg
ICAgICB9CisKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LnJl
cXVpcmVPdXRzZXQoKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBi
b3JkZXJPdXRzZXQ7CiAgICAgICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZU91dHNldChib3Jk
ZXJPdXRzZXQpKQogICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Qm9yZGVyT3V0c2V0KGJv
cmRlck91dHNldC5yZWxlYXNlKCkpOwotICAgICAgICB9IAotICAgICAgICAKKyAgICAgICAgfQor
CiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICB9CiAKQEAg
LTUzMTcsNyArNTMxNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0
KFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICAgICAgZmlyc3RWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgIGVsc2UK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgdmFsID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsKICAgICBpZiAodmFsKSB7CiAgICAgICAgIGlmIChpc0JvcmRlckltYWdlUmVwZWF0S2V5
d29yZCh2YWwtPmlkKSkKQEAgLTU0MDIsNyArNTQwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
TWFrZSBvdXIgbmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cuCiAgICAgICAgIHJldHVybiBDU1NC
b3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShtX3ByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0
ZVZhbHVlKHF1YWQucmVsZWFzZSgpKSwgbV9maWxsKTsKICAgICB9Ci0gICAgCisKIHByaXZhdGU6
CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZSogbV9wcmltaXRpdmVWYWx1ZUNhY2hlOwogCkBA
IC01NDE0LDcgKzU0MTQsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV9yaWdodDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYm90dG9tOwogICAg
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OwotICAgIAorCiAgICAgYm9vbCBtX2Zp
bGw7CiB9OwogCkBAIC01NDczLDcgKzU0NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2YWwg
PSBtX3ByaW1pdGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2LT5pZCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHZhbCA9IG1fcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3Jl
YXRlVmFsdWUodi0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2LT51bml0
KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCFtX3RvcCkKICAgICAgICAgICAgIG1fdG9wID0g
dmFsOwogICAgICAgICBlbHNlIGlmICghbV9yaWdodCkKQEAgLTU1MTgsNyArNTUxOCw3IEBAIHB1
YmxpYzoKICAgICAgICAgLy8gTWFrZSBvdXIgbmV3IHZhbHVlIG5vdy4KICAgICAgICAgcmV0dXJu
IG1fcHJpbWl0aXZlVmFsdWVDYWNoZS0+Y3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpOwogICAg
IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlKiBtX3ByaW1p
dGl2ZVZhbHVlQ2FjaGU7CiAKQEAgLTU2ODUsMTEgKzU2ODUsMTEgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFy
c2VyVmFsdWUKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKICAgICBp
ZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0gICAgICAgIGlm
ICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAibGVmdCIpICYmIGhvcml6b250YWwpIHx8
IAotICAgICAgICAgICAgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgInRvcCIpICYmICFo
b3Jpem9udGFsKSkKKyAgICAgICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJs
ZWZ0IikgJiYgaG9yaXpvbnRhbCkKKyAgICAgICAgICAgIHx8IChlcXVhbElnbm9yaW5nQ2FzZShh
LT5zdHJpbmcsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCiAgICAgICAgICAgICByZXN1bHQgPSBw
cmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKTsKLSAgICAgICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0
cmluZywgInJpZ2h0IikgJiYgaG9yaXpvbnRhbCkgfHwKLSAgICAgICAgICAgICAgICAgKGVxdWFs
SWdub3JpbmdDYXNlKGEtPnN0cmluZywgImJvdHRvbSIpICYmICFob3Jpem9udGFsKSkKKyAgICAg
ICAgZWxzZSBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgInJpZ2h0IikgJiYgaG9y
aXpvbnRhbCkKKyAgICAgICAgICAgICAgICAgfHwgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmlu
ZywgImJvdHRvbSIpICYmICFob3Jpem9udGFsKSkKICAgICAgICAgICAgIHJlc3VsdCA9IHByaW1p
dGl2ZVZhbHVlQ2FjaGUtPmNyZWF0ZVZhbHVlKDEwMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSk7CiAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmlu
ZywgImNlbnRlciIpKQogICAgICAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWVDYWNoZS0+
Y3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwpAQCAt
NTcxMiw4ICs1NzEyLDggQEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRDb2xv
clN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1MKICAgICBpZiAoIWFyZ3Mp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5m
dW5jdGlvbi0+bmFtZSwgImZyb20oIikgfHwgCi0gICAgICAgIGVxdWFsSWdub3JpbmdDYXNlKGEt
PmZ1bmN0aW9uLT5uYW1lLCAidG8oIikpIHsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+
ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIpCisgICAgICAgIHx8IGVxdWFsSWdub3JpbmdDYXNlKGEt
PmZ1bmN0aW9uLT5uYW1lLCAidG8oIikpIHsKICAgICAgICAgLy8gVGhlICJmcm9tIiBhbmQgInRv
IiBzdG9wcyBleHBlY3QgMSBhcmd1bWVudC4KICAgICAgICAgaWYgKGFyZ3MtPnNpemUoKSAhPSAx
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTkyNCw3ICs1OTI0LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29y
ZChDU1NQYXJzZXIqIHAsIEMKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KFJl
ZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXRpbmcpCiB7
CiAgICAgUmVmUHRyPENTU0xpbmVhckdyYWRpZW50VmFsdWU+IHJlc3VsdCA9IENTU0xpbmVhckdy
YWRpZW50VmFsdWU6OmNyZWF0ZShyZXBlYXRpbmcpOwotICAgIAorCiAgICAgLy8gV2FsayB0aGUg
YXJndW1lbnRzLgogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCktPmZ1bmN0aW9uLT5hcmdzLmdldCgpOwogICAgIGlmICghYXJncyB8fCAhYXJncy0+
c2l6ZSgpKQpAQCAtNTkzOCwxMyArNTkzOCwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VMaW5l
YXJHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQog
ICAgIC8vIExvb2sgZm9yIGFuZ2xlLgogICAgIGlmICh2YWxpZFVuaXQoYSwgRkFuZ2xlLCB0cnVl
KSkgewogICAgICAgICByZXN1bHQtPnNldEFuZ2xlKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShhKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGV4
cGVjdENvbW1hID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBMb29rIG9uZSBvciB0
d28gb3B0aW9uYWwga2V5d29yZHMgdGhhdCBpbmRpY2F0ZSBhIHNpZGUgb3IgY29ybmVyLgogICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHN0YXJ0WCwgc3RhcnRZOwotICAgICAgICAK
KwogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxvY2F0aW9uOwogICAgICAgICBi
b29sIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwogICAgICAgICBpZiAoKGxvY2F0aW9uID0gdmFsdWVG
cm9tU2lkZUtleXdvcmQoYSwgaXNIb3Jpem9udGFsLCBwcmltaXRpdmVWYWx1ZUNhY2hlKCkpKSkg
ewpAQCAtNTk1Miw3ICs1OTUyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGll
bnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICAgICAg
ICAgICAgICBzdGFydFggPSBsb2NhdGlvbjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBzdGFydFkgPSBsb2NhdGlvbjsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhID0g
YXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgICAgICBpZiAo
KGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoYSwgaXNIb3Jpem9udGFsLCBwcmltaXRp
dmVWYWx1ZUNhY2hlKCkpKSkgewpAQCAtNTk3MiwxMCArNTk3MiwxMCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VMaW5lYXJHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3Jh
ZGllbnRSZXBlYQogCiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgaWYgKCFzdGFydFggJiYgIXN0YXJ0WSkKICAgICAgICAgICAg
IHN0YXJ0WSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlVG9wKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RYKHN0
YXJ0WC5yZWxlYXNlKCkpOwogICAgICAgICByZXN1bHQtPnNldEZpcnN0WShzdGFydFkucmVsZWFz
ZSgpKTsKICAgICB9CkBAIC01OTk0LDcgKzU5OTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VM
aW5lYXJHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBl
YQogYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYg
Z3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdGluZykKIHsKICAgICBSZWZQdHI8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4gcmVzdWx0ID0gQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZTo6Y3Jl
YXRlKHJlcGVhdGluZyk7Ci0gICAgCisKICAgICAvLyBXYWxrIHRoZSBhcmd1bWVudHMuCiAgICAg
Q1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVuY3Rp
b24tPmFyZ3MuZ2V0KCk7CiAgICAgaWYgKCFhcmdzIHx8ICFhcmdzLT5zaXplKCkpCkBAIC02MDE0
LDcgKzYwMTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQogICAgIGEgPSBhcmdzLT5jdXJy
ZW50KCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBp
ZiAoY2VudGVyWCB8fCBjZW50ZXJZKSB7CiAgICAgICAgIC8vIENvbW1hCiAgICAgICAgIGlmIChh
LT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0gJywnKQpA
QCAtNjAyNCw3ICs2MDI0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQo
UmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICAgICAgaWYg
KCFhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VS
VCghY2VudGVyWCB8fCBjZW50ZXJYLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgIEFTU0VSVCgh
Y2VudGVyWSB8fCBjZW50ZXJZLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogCkBAIC02MDMzLDcgKzYw
MzMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChSZWZQdHI8Q1NTVmFs
dWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQogICAgIC8vIENTUzMgcmFkaWFsIGdyYWRp
ZW50cyBhbHdheXMgc2hhcmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBwb2ludC4KICAgICByZXN1
bHQtPnNldEZpcnN0WShzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGNlbnRlclkuZ2V0
KCkpKTsKICAgICByZXN1bHQtPnNldFNlY29uZFkoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihjZW50ZXJZLmdldCgpKSk7Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHNoYXBlVmFsdWU7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplVmFsdWU7
CiAKQEAgLTYwNDEsNyArNjA0MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRp
ZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgaWYgKGEtPnVuaXQgIT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCkKICAgICAgICAgICAgIGJyZWFrOwotICAgIAorCiAgICAg
ICAgIGJvb2wgZm91bmRWYWx1ZSA9IGZhbHNlOwogICAgICAgICBzd2l0Y2ggKGEtPmlkKSB7CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVDaXJjbGU6CkBAIC02MDY4LDEwICs2MDY4LDEwIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50
LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXN1bHQtPnNldFNoYXBlKHNoYXBlVmFsdWUpOwog
ICAgIHJlc3VsdC0+c2V0U2l6aW5nQmVoYXZpb3Ioc2l6ZVZhbHVlKTsKLSAgICAKKwogICAgIC8v
IE9yLCB0d28gbGVuZ3RocyBvciBwZXJjZW50YWdlcwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gaG9yaXpvbnRhbFNpemU7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2ZXJ0
aWNhbFNpemU7CkBAIC02MDk5LDcgKzYwOTksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRp
YWxHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCwgQ1NTR3JhZGllbnRSZXBlYQog
ICAgIC8vIE11c3QgaGF2ZSBuZWl0aGVyIG9yIGJvdGguCiAgICAgaWYgKCFob3Jpem9udGFsU2l6
ZSAhPSAhdmVydGljYWxTaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBy
ZXN1bHQtPnNldEVuZEhvcml6b250YWxTaXplKGhvcml6b250YWxTaXplKTsKICAgICByZXN1bHQt
PnNldEVuZFZlcnRpY2FsU2l6ZSh2ZXJ0aWNhbFNpemUpOwogCkBAIC02MTM5LDcgKzYxMzksNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVmFsdWVM
aXN0KiB2YWx1ZUxpc3QsIENTU0dyYWRpZQogICAgICAgICAgICAgICAgIGEgPSB2YWx1ZUxpc3Qt
Pm5leHQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBn
cmFkaWVudC0+YWRkU3RvcChzdG9wKTsKICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAg
IH0KQEAgLTY0MTcsNyArNjQxNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjppc1ZhbGlkRmlsdGVyQXJn
dW1lbnQoQ1NTUGFyc2VyVmFsdWUqIGFyZ3VtZW50LCBXZWJLaXRDU1NGaWx0ZXJWCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIGlmICghdmFsaWRVbml0KGFyZ3VtZW50LCBG
TnVtYmVyLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8gQ2hl
Y2sgcGFyYW1ldGVyIHZhbHVlcy4KICAgICBpZiAoZmlsdGVyVHlwZSA9PSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVyT3BlcmF0aW9uCiAgICAgICAgIHx8IGZpbHRlclR5cGUg
PT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uCkBAIC02NDY2LDEy
ICs2NDY2LDEyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRmls
dGVyKCkKICAgICAgICAgICAgIFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gcmVmZXJlbmNl
RmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRl
clZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKHJlZmVyZW5jZUZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIHJlZmVyZW5jZUZpbHRlclZh
bHVlLT5hcHBlbmQocHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3Ry
aW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwotICAgICAgICB9IGVsc2UgeyAg
ICAgICAgCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25zdCBDU1NQYXJzZXJTdHJp
bmcgbmFtZSA9IHZhbHVlLT5mdW5jdGlvbi0+bmFtZTsKICAgICAgICAgICAgIHVuc2lnbmVkIG1h
eGltdW1Bcmd1bWVudENvdW50ID0gMTsKIAogICAgICAgICAgICAgZmlsdGVySW5mb0Zvck5hbWUo
bmFtZSwgZmlsdGVyVHlwZSwgbWF4aW11bUFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIGlmIChmaWx0ZXJUeXBlID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpVbmtu
b3duRmlsdGVyT3BlcmF0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC02NDgy
LDcgKzY0ODIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZp
bHRlcigpCiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIG5ldyBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSBmb3IgdGhpcyBvcGVyYXRpb24gYW5kIGFkZCBpdCB0byBvdXIgbGlzdC4KICAgICAgICAgICAg
IFJlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6Y3JlYXRlKGZpbHRlclR5cGUpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGZp
bHRlclZhbHVlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dENvdW50ID0gMDsKIApAQCAtNjczNyw3ICs2NzM3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
TGluZUJveENvbnRhaW4oYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIGlmICghbGluZUJveENvbnRhaW4p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzI1MSw3ICs3MjUxLDcgQEAgQ1NTUnVsZSog
Q1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgICAgICAgICAgcHJvcGVydHktPm1f
dmFsdWUgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihwcm9wZXJ0eS0+dmFsdWUoKSktPmFwcGVuZCh2
YWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGlkID09IENTU1Byb3BlcnR5Rm9u
dEZhbWlseSAmJiAoIXByb3BlcnR5LT52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpIHx8IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHByb3BlcnR5LT52YWx1ZSgpKS0+bGVuZ3RoKCkgIT0gMSkpIHsK
LSAgICAgICAgICAgIC8vIFVubGlrZSBmb250LWZhbWlseSBwcm9wZXJ0eSwgZm9udC1mYW1pbHkg
ZGVzY3JpcHRvciBpbiBAZm9udC1mYWNlIHJ1bGUgCisgICAgICAgICAgICAvLyBVbmxpa2UgZm9u
dC1mYW1pbHkgcHJvcGVydHksIGZvbnQtZmFtaWx5IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBy
dWxlCiAgICAgICAgICAgICAvLyBoYXMgdG8gYmUgYSB2YWx1ZSBsaXN0IHdpdGggZXhhY3RseSBv
bmUgZmFtaWx5IG5hbWUuIEl0IGNhbm5vdCBoYXZlIGEKICAgICAgICAgICAgIC8vIGhhdmUgJ2lu
aXRpYWwnIHZhbHVlIGFuZCBjYW5ub3QgJ2luaGVyaXQnIGZyb20gcGFyZW50LgogICAgICAgICAg
ICAgLy8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2NzczMtZm9udHMvI2ZvbnQtZmFtaWx5
LWRlc2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBlMzkxYjM5Li5jODA0ZTRiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZUZpbGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0Kik7CiAgICAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGaWxsUG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlz
dCopOwogICAgIHZvaWQgcGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiwgUmVm
UHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKLSAgICAKKwogICAgIHZvaWQgcGFy
c2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VGaWxsU2l6ZShpbnQgcHJvcElkLCBib29sICZhbGxv
d0NvbW1hKTsKIApAQCAtMzA1LDcgKzMwNSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2
b2lkIHNldFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAgIAorCiAgICAgdm9pZCByZWNo
ZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4pOwogCiAgICAgdm9pZCBzZXR1
cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGNoYXIqIHN1
ZmZpeCk7CkBAIC0zODUsNyArMzg1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCB2YWxp
ZFVuaXQoQ1NTUGFyc2VyVmFsdWUqLCBVbml0cywgYm9vbCBzdHJpY3QpOwogCiAgICAgYm9vbCBw
YXJzZUJvcmRlckltYWdlUXVhZChVbml0cywgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiYpOwot
ICAgIAorCiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlKik7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAppbmRleCAzZTk3MDEzLi4wNjg4MzE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcApAQCAtMjcsNyArMjcsNyBA
QAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0g
ICAgICAgIAorCiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBDU1NQYXJzZXJWYWx1ZUxpc3Q6On5D
U1NQYXJzZXJWYWx1ZUxpc3QoKQpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIENTU1BhcnNlclZhbHVl
TGlzdDo6aW5zZXJ0VmFsdWVBdCh1bnNpZ25lZCBpLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdikK
IH0KIAogdm9pZCBDU1NQYXJzZXJWYWx1ZUxpc3Q6OmRlbGV0ZVZhbHVlQXQodW5zaWduZWQgaSkK
LXsgCit7CiAgICAgbV92YWx1ZXMucmVtb3ZlKGkpOwogfQogCkBAIC04NSw3ICs4NSw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlclZhbHVlOjpjcmVhdGVDU1NWYWx1ZSgpCiAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUFsbG93aW5nTWFyZ2lu
UXVpcmsoZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CiAgICAgcmV0dXJuIHBh
cnNlZFZhbHVlOwogfQotICAgIAorCiBDU1NQYXJzZXJTZWxlY3Rvcjo6Q1NTUGFyc2VyU2VsZWN0
b3IoKQogICAgIDogbV9zZWxlY3RvcihhZG9wdFB0cihmYXN0TmV3PENTU1NlbGVjdG9yPigpKSkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAppbmRleCA0OWYwMWQwLi5jYjVjOTAz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCkBAIC01Niw4ICs1Niw4IEBAIHN0
cnVjdCBDU1NQYXJzZXJWYWx1ZSB7CiAgICAgICAgIFFfRU1TICAgID0gMHgxMDAwMDIKICAgICB9
OwogICAgIGludCB1bml0OwotICAgIAotICAgIAorCisKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBjcmVhdGVDU1NWYWx1ZSgpOwogfTsKIApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgIH0KICAgICB+Q1NTUGFyc2VyVmFsdWVMaXN0KCk7Ci0gICAgCisKICAgICB2b2lkIGFk
ZFZhbHVlKGNvbnN0IENTU1BhcnNlclZhbHVlJik7CiAgICAgdm9pZCBpbnNlcnRWYWx1ZUF0KHVu
c2lnbmVkLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYpOwogICAgIHZvaWQgZGVsZXRlVmFsdWVBdCh1
bnNpZ25lZCk7CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDU1NQYXJz
ZXJWYWx1ZSogdmFsdWVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgbV92YWx1ZXMuc2l6ZSgp
ID8gJm1fdmFsdWVzW2ldIDogMDsgfQotICAgICAgICAKKwogICAgIHZvaWQgY2xlYXIoKSB7IG1f
dmFsdWVzLmNsZWFyKCk7IH0KIAogcHJpdmF0ZToKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6
CiAgICAgfkNTU1BhcnNlclNlbGVjdG9yKCk7CiAKICAgICBQYXNzT3duUHRyPENTU1NlbGVjdG9y
PiByZWxlYXNlU2VsZWN0b3IoKSB7IHJldHVybiBtX3NlbGVjdG9yLnJlbGVhc2UoKTsgfQotICAg
IAorCiAgICAgdm9pZCBzZXRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIHsgbV9zZWxl
Y3Rvci0+c2V0VGFnKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7IH0KICAgICB2b2lkIHNl
dEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRB
dHRyaWJ1dGUodmFsdWUpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAppbmRleCA0NTY0ZTMxLi41ZjlhNmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAKQEAgLTQxMiw3ICs0MTIsNyBAQCBkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6
OmNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcgog
ICAgIGRvdWJsZSByZXN1bHQgPSBnZXREb3VibGVWYWx1ZSgpICogZmFjdG9yOwogICAgIGlmICgh
YXBwbHlab29tTXVsdGlwbGllciB8fCBtdWx0aXBsaWVyID09IDEuMCkKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgCisKICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49
IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4gIFRoaXMga2VlcHMgYm9y
ZGVyIGxpbmVzIGZyb20KICAgICAvLyB2YW5pc2hpbmcuCiAgICAgZG91YmxlIHpvb21lZFJlc3Vs
dCA9IHJlc3VsdCAqIG11bHRpcGxpZXI7CkBAIC00MjMsNyArNDIzLDcgQEAgZG91YmxlIENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91YmxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHIKIAogdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRWYWx1ZSh1bnNp
Z25lZCBzaG9ydCwgZG91YmxlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBLZWVwaW5n
IHZhbHVlcyBpbW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNpZXIgYW5kIGFsbG93cyBz
aGFyaW5nIG9mIHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4gCisgICAgLy8gS2VlcGluZyB2
YWx1ZXMgaW1tdXRhYmxlIG1ha2VzIG9wdGltaXphdGlvbnMgZWFzaWVyIGFuZCBhbGxvd3Mgc2hh
cmluZyBvZiB0aGUgcHJpbWl0aXZlIHZhbHVlIG9iamVjdHMuCiAgICAgLy8gTm8gb3RoZXIgZW5n
aW5lIHN1cHBvcnRzIG11dGF0aW5nIHN0eWxlIHRocm91Z2ggdGhpcyBBUEkuIENvbXB1dGVkIHN0
eWxlIGlzIGFsd2F5cyByZWFkLW9ubHkgYW55d2F5LgogICAgIC8vIFN1cHBvcnRpbmcgc2V0dGVy
IHdvdWxkIHJlcXVpcmUgbWFraW5nIHByaW1pdGl2ZSB2YWx1ZSBjb3B5LW9uLXdyaXRlIGFuZCB0
YWtpbmcgY2FyZSBvZiBzdHlsZSBpbnZhbGlkYXRpb24uCiAgICAgZWMgPSBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI7CkBAIC01NjgsNyArNTY4LDcgQEAgYm9vbCBDU1NQcmltaXRpdmVWYWx1
ZTo6Z2V0RG91YmxlVmFsdWVJbnRlcm5hbChVbml0VHlwZXMgcmVxdWVzdGVkVW5pdFR5cGUsIGRv
dWIKIAogdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0U3RyaW5nVmFsdWUodW5zaWduZWQgc2hv
cnQsIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIC8vIEtlZXBpbmcg
dmFsdWVzIGltbXV0YWJsZSBtYWtlcyBvcHRpbWl6YXRpb25zIGVhc2llciBhbmQgYWxsb3dzIHNo
YXJpbmcgb2YgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvYmplY3RzLiAKKyAgICAvLyBLZWVwaW5nIHZh
bHVlcyBpbW11dGFibGUgbWFrZXMgb3B0aW1pemF0aW9ucyBlYXNpZXIgYW5kIGFsbG93cyBzaGFy
aW5nIG9mIHRoZSBwcmltaXRpdmUgdmFsdWUgb2JqZWN0cy4KICAgICAvLyBObyBvdGhlciBlbmdp
bmUgc3VwcG9ydHMgbXV0YXRpbmcgc3R5bGUgdGhyb3VnaCB0aGlzIEFQSS4gQ29tcHV0ZWQgc3R5
bGUgaXMgYWx3YXlzIHJlYWQtb25seSBhbnl3YXkuCiAgICAgLy8gU3VwcG9ydGluZyBzZXR0ZXIg
d291bGQgcmVxdWlyZSBtYWtpbmcgcHJpbWl0aXZlIHZhbHVlIGNvcHktb24td3JpdGUgYW5kIHRh
a2luZyBjYXJlIG9mIHN0eWxlIGludmFsaWRhdGlvbi4KICAgICBlYyA9IE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKaW5kZXgg
NmU1NjVhYi4uNDZmMzY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgK
QEAgLTgzLDE1ICs4MywxNSBAQCBwdWJsaWM6CiAgICAgICAgIENTU19QQUlSID0gMTAwLCAvLyBX
ZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFucyBvZiBnZXR0aW5nIGNvbXB1
dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFjaW5nL3JhZGl1cywgYmFja2dy
b3VuZC1wb3NpdGlvbiwgZXRjLikKICAgICAgICAgQ1NTX0RBU0hCT0FSRF9SRUdJT04gPSAxMDEs
IC8vIEZJWE1FOiBEYXNoYm9hcmQgcmVnaW9uIHNob3VsZCBub3QgYmUgYSBwcmltaXRpdmUgdmFs
dWUuCiAgICAgICAgIENTU19VTklDT0RFX1JBTkdFID0gMTAyLAotICAgICAgICAKKwogICAgICAg
ICAvLyBUaGVzZSBuZXh0IHR5cGVzIGFyZSBqdXN0IHVzZWQgaW50ZXJuYWxseSB0byBhbGxvdyB1
cyB0byB0cmFuc2xhdGUgYmFjayBhbmQgZm9ydGggZnJvbSBDU1NQcmltaXRpdmVWYWx1ZXMgdG8g
Q1NTUGFyc2VyVmFsdWVzLgogICAgICAgICBDU1NfUEFSU0VSX09QRVJBVE9SID0gMTAzLAogICAg
ICAgICBDU1NfUEFSU0VSX0lOVEVHRVIgPSAxMDQsCiAgICAgICAgIENTU19QQVJTRVJfSEVYQ09M
T1IgPSAxMDUsCi0gICAgICAgIAotICAgICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBm
b3IgdW5rbm93biBpZGVudGlmaWVycyAKKworICAgICAgICAvLyBUaGlzIGlzIHVzZWQgaW50ZXJu
YWxseSBmb3IgdW5rbm93biBpZGVudGlmaWVycwogICAgICAgICBDU1NfUEFSU0VSX0lERU5USUZJ
RVIgPSAxMDYsCi0gICAgICAgIAorCiAgICAgICAgIC8vIFRoZXNlIGFyZSBmcm9tIENTUzMgVmFs
dWVzIGFuZCBVbml0cywgYnV0IHRoYXQgaXNuJ3QgYSBmaW5pc2hlZCBzdGFuZGFyZCB5ZXQKICAg
ICAgICAgQ1NTX1RVUk4gPSAxMDcsCiAgICAgICAgIENTU19SRU1TID0gMTA4LApAQCAtMTAxLDEx
ICsxMDEsMTEgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBieSB0aGUgQ1NT
IEV4Y2x1c2lvbnMgZHJhZnQKICAgICAgICAgQ1NTX1NIQVBFID0gMTEwLAotICAgICAgICAKKwog
ICAgICAgICAvLyBVc2VkIGJ5IGJvcmRlciBpbWFnZXMuCiAgICAgICAgIENTU19RVUFEID0gMTEx
CiAgICAgfTsKLSAgICAKKwogICAgIC8vIFRoaXMgZW51bSBmb2xsb3dzIHRoZSBDU1NQYXJzZXI6
OlVuaXRzIGVudW0gYXVnbWVudGVkIHdpdGggVU5JVF9GUkVRVUVOQ1kgZm9yIGZyZXF1ZW5jaWVz
LgogICAgIGVudW0gVW5pdENhdGVnb3J5IHsKICAgICAgICAgVU51bWJlciwKQEAgLTEyNiw3ICsx
MjYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNyZWF0ZUNvbG9yKHVuc2lnbmVkIHJnYlZhbHVlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUocmdiVmFsdWUpKTsgfQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBVbml0VHlwZXMgdHlwZSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSk7IH0KICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dmFsdWUsIFVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUsIHR5cGUpKTsgfQotICAgIAorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShUIHZhbHVlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkp
OwpAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKIAogICAgIC8vIHVzZSB3aXRoIGNhcmUhISEK
ICAgICB2b2lkIHNldFByaW1pdGl2ZVR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUg
PSB0eXBlOyB9Ci0gICAgCisKICAgICBkb3VibGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hv
cnQgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBkb3VibGUgZ2V0RG91Ymxl
VmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpIGNvbnN0OwogICAgIGRvdWJsZSBnZXREb3Vi
bGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubnVtOyB9CkBAIC0xOTMsNyArMTkzLDcg
QEAgcHVibGljOgogCiAgICAgUXVhZCogZ2V0UXVhZFZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKICAgICBRdWFkKiBnZXRRdWFkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gQ1NT
X1FVQUQgPyAwIDogbV92YWx1ZS5xdWFkOyB9Ci0gICAgCisKICAgICBQYXNzUmVmUHRyPFJHQkNv
bG9yPiBnZXRSR0JDb2xvclZhbHVlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBSR0JBMzIg
Z2V0UkdCQTMyVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gQ1NTX1JHQkNPTE9SID8g
MCA6IG1fdmFsdWUucmdiY29sb3I7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlQ2FjaGUuY3BwCmluZGV4IDNhZGFkZjguLmE1YjU4OGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5jcHAKQEAgLTY1LDcgKzY1LDcgQEAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZTo6Y3Jl
YXRlQ29sb3JWYWx1ZSh1bnNpZ25lZAogICAgIC8vIEp1c3QgYmVjYXVzZSBpdCBpcyBjb21tb24u
CiAgICAgaWYgKHJnYlZhbHVlID09IENvbG9yOjpibGFjaykKICAgICAgICAgcmV0dXJuIG1fY29s
b3JCbGFjazsKLSAgICAKKwogICAgIC8vIEp1c3Qgd2lwZSBvdXQgdGhlIGNhY2hlIGFuZCBzdGFy
dCByZWJ1aWxkaW5nIGlmIGl0IGdldHMgdG9vIGJpZy4KICAgICBjb25zdCBpbnQgbWF4aW11bUNv
bG9yQ2FjaGVTaXplID0gNTEyOwogICAgIGlmIChtX2NvbG9yVmFsdWVDYWNoZS5zaXplKCkgPiBt
YXhpbXVtQ29sb3JDYWNoZVNpemUpCkBAIC04OCw3ICs4OCw3IEBAIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGU6OmNyZWF0ZVZhbHVlKGRvdWJsZSB2
YWx1ZSwKICAgICBpbnQgaW50VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKTsKICAgICBp
ZiAodmFsdWUgIT0gaW50VmFsdWUpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHZhbHVlLCB0eXBlKTsKLSAgICAKKwogICAgIEludGVnZXJWYWx1ZUNhY2hlKiBjYWNo
ZTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFg6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaAppbmRleCA4
YmUzYjUyLi42MzJhYzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWVDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZUNhY2hlLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwotIAorCiAjaWZuZGVmIENTU1ByaW1pdGl2ZVZh
bHVlQ2FjaGVfaAogI2RlZmluZSBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlX2gKIApAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAorCiBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZUNhY2hlIDogcHVibGljIFJlZkNvdW50ZWQ8
Q1NTUHJpbWl0aXZlVmFsdWVDYWNoZT4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlQ2FjaGU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
U1NQcmltaXRpdmVWYWx1ZUNhY2hlKTsgfQpAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlVmFsdWUoZG91YmxlIHZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBjcmVhdGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzIHR5cGUpIHsgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUsIHR5cGUpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVlKFQgdmFsdWUpIHsgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUpOyB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWVDYWNoZSgpOwogCkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2NvbG9yVHJhbnNwYXJlbnQ7CiAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX2NvbG9yV2hpdGU7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX2NvbG9yQmxhY2s7Ci0gICAgCisKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4gSW50ZWdlclZhbHVlQ2FjaGU7CiAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBtX3BpeGVsWmVybzsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IG1fcGVyY2VudFplcm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWVNYXBwaW5ncy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaAppbmRleCAwYjljYzhkLi4xNGY4MzUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKQEAgLTgsMTMgKzgsMTMgQEAKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAgKiBhcmUgbWV0OgotICogCisgKgogICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMK
ICAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuCkBAIC0yNzA4LDcgKzI3MDgsNyBAQCB0ZW1wbGF0ZTw+IGlubGlu
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTUHJpbWl0aXZlVmFsdWUoRm9udFNtb290aGluZ01vZGUg
c21vb3RoaQogICAgICAgICBtX3ZhbHVlLmlkZW50ID0gQ1NTVmFsdWVTdWJwaXhlbEFudGlhbGlh
c2VkOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgbV92YWx1ZS5pZGVudCA9IENTU1ZhbHVlQXV0bzsKIH0KQEAgLTI3MjUsNyAr
MjcyNSw3IEBAIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBG
b250U21vb3RoaW5nTW9kZSgpIGNvbnN0CiAgICAgY2FzZSBDU1NWYWx1ZVN1YnBpeGVsQW50aWFs
aWFzZWQ6CiAgICAgICAgIHJldHVybiBTdWJwaXhlbEFudGlhbGlhc2VkOwogICAgIH0KLSAgICAK
KwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBBdXRvU21vb3RoaW5nOwog
fQpAQCAtMjk4NSw3ICsyOTg1LDcgQEAgdGVtcGxhdGU8PiBpbmxpbmUgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU1ByaW1pdGl2ZVZhbHVlKEVTcGVhayBlKQogICAgICAgICBicmVhazsKICAgICB9CiB9
Ci0gICAgCisKIHRlbXBsYXRlPD4gaW5saW5lIENTU1ByaW1pdGl2ZVZhbHVlOjpvcGVyYXRvciBP
cmRlcigpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3ZhbHVlLmlkZW50KSB7CkBAIC0zNjEwLDcg
KzM2MTAsNyBAQCB0ZW1wbGF0ZTw+IGlubGluZSBDU1NQcmltaXRpdmVWYWx1ZTo6b3BlcmF0b3Ig
RVZlY3RvckVmZmVjdCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBWRV9OT05FOwogICAgIH0KIH0K
LSAgICAKKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cm9wZXJ0eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3BwCmluZGV4IDFl
MDRkYTcuLjY5YjJmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmNwcApAQCAtNDgsNyAr
NDgsNyBAQCBzdGF0aWMgaW50IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbgogICAgICAgICAgICAgLy8gTGVmdCA9IFN0
YXJ0LCBSaWdodCA9IEVuZCwgQmVmb3JlID0gVG9wLCBBZnRlciA9IEJvdHRvbQogICAgICAgICAg
ICAgcmV0dXJuIHByb3BlcnRpZXNbbG9naWNhbFNpZGVdOwogICAgICAgICB9Ci0gICAgICAgIAor
CiAgICAgICAgIGlmICh3cml0aW5nTW9kZSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlKSB7CiAg
ICAgICAgICAgICAvLyBTdGFydCA9IExlZnQsIEVuZCA9IFJpZ2h0LCBCZWZvcmUgPSBCb3R0b20s
IEFmdGVyID0gVG9wLgogICAgICAgICAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkgewpAQCAtNjIs
NyArNjIsNyBAQCBzdGF0aWMgaW50IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbgogICAgICAgICAgICAgICAgIHJldHVy
biBwcm9wZXJ0aWVzW1RvcFNpZGVdOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIGlmICh3cml0aW5nTW9kZSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlKSB7
CiAgICAgICAgICAgICAvLyBTdGFydCA9IFRvcCwgRW5kID0gQm90dG9tLCBCZWZvcmUgPSBMZWZ0
LCBBZnRlciA9IFJpZ2h0LgogICAgICAgICAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkgewpAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgaW50IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbgogICAgICAgICAgICAgICAgIHJl
dHVybiBwcm9wZXJ0aWVzW1JpZ2h0U2lkZV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgLy8gU3RhcnQgPSBUb3AsIEVuZCA9IEJvdHRvbSwgQmVmb3JlID0g
UmlnaHQsIEFmdGVyID0gTGVmdAogICAgICAgICBzd2l0Y2ggKGxvZ2ljYWxTaWRlKSB7CiAgICAg
ICAgIGNhc2UgU3RhcnRTaWRlOgpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBpbnQgcmVzb2x2
ZVRvUGh5c2ljYWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUg
d3JpdGluCiAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllc1tCb3R0b21TaWRlXTsKICAgICAg
ICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICh3cml0aW5nTW9kZSA9PSBCb3R0b21Ub1RvcFdy
aXRpbmdNb2RlKSB7CiAgICAgICAgIC8vIFN0YXJ0ID0gUmlnaHQsIEVuZCA9IExlZnQsIEJlZm9y
ZSA9IEJvdHRvbSwgQWZ0ZXIgPSBUb3AKICAgICAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkgewpA
QCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBpbnQgcmVzb2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluCiAgICAgICAgICAgICBy
ZXR1cm4gcHJvcGVydGllc1tUb3BTaWRlXTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAg
IGlmICh3cml0aW5nTW9kZSA9PSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlKSB7CiAgICAgICAgIC8v
IFN0YXJ0ID0gQm90dG9tLCBFbmQgPSBUb3AsIEJlZm9yZSA9IExlZnQsIEFmdGVyID0gUmlnaHQK
ICAgICAgICAgc3dpdGNoIChsb2dpY2FsU2lkZSkgewpAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRp
YyBpbnQgcmVzb2x2ZVRvUGh5c2ljYWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwg
V3JpdGluZ01vZGUgd3JpdGluCiAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllc1tSaWdodFNp
ZGVdOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gU3RhcnQgPSBCb3R0b20sIEVu
ZCA9IFRvcCwgQmVmb3JlID0gUmlnaHQsIEFmdGVyID0gTGVmdAogICAgIHN3aXRjaCAobG9naWNh
bFNpZGUpIHsKICAgICBjYXNlIFN0YXJ0U2lkZToKQEAgLTE1Myw3ICsxNTMsNyBAQCBzdGF0aWMg
aW50IHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExv
Z2ljYWxFeHRlbnQgbG9naQogICAgICAgICByZXR1cm4gcHJvcGVydGllc1tsb2dpY2FsU2lkZV07
CiAgICAgcmV0dXJuIGxvZ2ljYWxTaWRlID09IExvZ2ljYWxXaWR0aCA/IHByb3BlcnRpZXNbMV0g
OiBwcm9wZXJ0aWVzWzBdOwogfQotICAgICAgICAKKwogaW50IENTU1Byb3BlcnR5OjpyZXNvbHZl
RGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpbnQgcHJvcGVydHlJRCwgVGV4dERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8Q1NTUHJvcGVydHlJRD4ocHJvcGVydHlJRCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgK
aW5kZXggNGE0NmZjMi4uMjdjODZmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1Byb3BlcnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNJbXBsaWNpdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbGljaXQ7IH0KIAogICAgIENTU1ZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWUuZ2V0KCk7IH0KLSAgICAKKwogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKICAg
ICBzdGF0aWMgaW50IHJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGludCBwcm9wZXJ0eUlE
LCBUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlMb25naGFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlMb25naGFuZC5jcHAKaW5kZXggNzM3MmE1NC4uN2QxODI2MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TG9uZ2hhbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eUxvbmdoYW5kLmNwcApAQCAtMjA2LDEzICsyMDYsMTMgQEAgc3Rh
dGljIHZvaWQgaW5pdFNob3J0aGFuZE1hcChTaG9ydGhhbmRNYXAmIHNob3J0aGFuZE1hcCkKICAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZCiAgICAgfTsKICAgICBTRVRf
U0hPUlRIQU5EX01BUF9FTlRSWShzaG9ydGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNm
b3JtT3JpZ2luLCB0cmFuc2Zvcm1PcmlnaW5Qcm9wZXJ0aWVzKTsKLSAgICAKKwogICAgIHN0YXRp
YyBjb25zdCBpbnQgdGV4dEVtcGhhc2lzUHJvcGVydGllc1tdID0gewogICAgICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRFbXBoYXNpc0NvbG9yLAogICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRFbXBoYXNpc1N0eWxlCiAgICAgfTsKICAgICBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWShzaG9y
dGhhbmRNYXAsIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzLCB0ZXh0RW1waGFzaXNQcm9w
ZXJ0aWVzKTsKLSAgICAKKwogICAgICN1bmRlZiBTRVRfU0hPUlRIQU5EX01BUF9FTlRSWQogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCmluZGV4IGE4Y2E1OWUuLmRkYzNj
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCkBAIC0yMCw3ICsyMCw3
IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTUyLDcg
KzUyLDcgQEAgU3RyaW5nIENTU1JlZmxlY3RWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXN1bHQg
Kz0gbV9vZmZzZXQtPmNzc1RleHQoKSArICIgIjsKICAgICBpZiAobV9tYXNrKQogICAgICAgICBy
ZXN1bHQgKz0gbV9tYXNrLT5jc3NUZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUmVmbGVjdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVl
LmgKaW5kZXggMWRjYjFiZS4uNTgwNzZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1JlZmxlY3RWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFs
dWUuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENT
U1JlZmxlY3RWYWx1ZV9oCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAg
dmlydHVhbCBib29sIGlzUmVmbGVjdFZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IAorCiAgICAgQ1NTUmVmbGVjdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IG1fb2Zmc2V0OwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9tYXNr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3Rpb25EaXJlY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0aW9uRGlyZWN0aW9uLmgKaW5kZXggNWEw
YzIwMy4uZTMwYmMxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3Rp
b25EaXJlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdGlvbkRpcmVj
dGlvbi5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
Q1NTUmVmbGVjdGlvbkRpcmVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAppbmRleCA4MDlmNGFiLi40YTQ1OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VnbWVudGVkRm9udEZhY2UuaAppbmRleCAwM2ViZTRhLi4zZWZjNDdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaWZuZGVmIENTU1NlZ21lbnRlZEZvbnRGYWNlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU2VsZWN0b3IuY3BwCmluZGV4IDZiZWE5OWIuLmU5NWQyNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmNwcApAQCAtMzcsMTAgKzM3LDEwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0gICAgCisKIHZvaWQgQ1NTU2VsZWN0b3I6
OmNyZWF0ZVJhcmVEYXRhKCkKIHsKLSAgICBpZiAobV9oYXNSYXJlRGF0YSkgCisgICAgaWYgKG1f
aGFzUmFyZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBNb3ZlIHRoZSB2YWx1ZSB0byB0
aGUgcmFyZSBkYXRhIHN0dWN0dXJlLgogICAgIG1fZGF0YS5tX3JhcmVEYXRhID0gbmV3IFJhcmVE
YXRhKGFkb3B0UmVmKG1fZGF0YS5tX3ZhbHVlKSk7CkBAIC0xNTAsNyArMTUwLDcgQEAgUHNldWRv
SWQgQ1NTU2VsZWN0b3I6OnBzZXVkb0lkKFBzZXVkb1R5cGUgdHlwZSkKICAgICBjYXNlIFBzZXVk
b0FuaW1hdGluZ0Z1bGxTY3JlZW5UcmFuc2l0aW9uOgogICAgICAgICByZXR1cm4gQU5JTUFUSU5H
X0ZVTExfU0NSRUVOX1RSQU5TSVRJT047CiAjZW5kaWYKLSAgICAgICAgICAgIAorCiAgICAgY2Fz
ZSBQc2V1ZG9JbnB1dExpc3RCdXR0b246CiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgICAgICBy
ZXR1cm4gSU5QVVRfTElTVF9CVVRUT047CkBAIC02NDAsMjEgKzY0MCwyMSBAQCBTdHJpbmcgQ1NT
U2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0cjsKIH0KIAotdm9p
ZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSAK
LXsgCi0gICAgY3JlYXRlUmFyZURhdGEoKTsgCi0gICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXR0
cmlidXRlID0gdmFsdWU7IAordm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHZhbHVlKQoreworICAgIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgbV9kYXRh
Lm1fcmFyZURhdGEtPm1fYXR0cmlidXRlID0gdmFsdWU7CiB9Ci0gICAgCi12b2lkIENTU1NlbGVj
dG9yOjpzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSAKLXsgCi0gICAgY3Jl
YXRlUmFyZURhdGEoKTsgCi0gICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXJndW1lbnQgPSB2YWx1
ZTsgCisKK3ZvaWQgQ1NTU2VsZWN0b3I6OnNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCit7CisgICAgY3JlYXRlUmFyZURhdGEoKTsKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+
bV9hcmd1bWVudCA9IHZhbHVlOwogfQotICAgIAorCiB2b2lkIENTU1NlbGVjdG9yOjpzZXRTZWxl
Y3Rvckxpc3QoUGFzc093blB0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCkKIHsKLSAg
ICBjcmVhdGVSYXJlRGF0YSgpOyAKKyAgICBjcmVhdGVSYXJlRGF0YSgpOwogICAgIG1fZGF0YS5t
X3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdCA9IHNlbGVjdG9yTGlzdDsKIH0KIApAQCAtNzEzLDE1
ICs3MTMsMTUgQEAgQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEoKQogICAgIGlmICht
X3ZhbHVlKQogICAgICAgICBtX3ZhbHVlLT5kZXJlZigpOwogfQotICAgIAorCiAvLyBhIGhlbHBl
ciBmdW5jdGlvbiBmb3IgcGFyc2luZyBudGgtYXJndW1lbnRzCiBib29sIENTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6cGFyc2VOdGgoKQogewogICAgIFN0cmluZyBhcmd1bWVudCA9IG1fYXJndW1lbnQu
bG93ZXIoKTsKLSAgICAKKwogICAgIGlmIChhcmd1bWVudC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKKwogICAgIG1fYSA9IDA7CiAgICAgbV9iID0gMDsKICAgICBpZiAo
YXJndW1lbnQgPT0gIm9kZCIpIHsKQEAgLTc0Miw3ICs3NDIsNyBAQCBib29sIENTU1NlbGVjdG9y
OjpSYXJlRGF0YTo6cGFyc2VOdGgoKQogICAgICAgICAgICAgICAgIG1fYSA9IDE7IC8vIG4gPT0g
MW4KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2EgPSBhcmd1bWVudC5zdWJz
dHJpbmcoMCwgbikudG9JbnQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzaXplX3Qg
cCA9IGFyZ3VtZW50LmZpbmQoJysnLCBuKTsKICAgICAgICAgICAgIGlmIChwICE9IG5vdEZvdW5k
KQogICAgICAgICAgICAgICAgIG1fYiA9IGFyZ3VtZW50LnN1YnN0cmluZyhwICsgMSwgYXJndW1l
bnQubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKaW5k
ZXggNjE2MWFmOS4uYWZkNTJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKQEAgLTIxNSwx
MiArMjE1LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGJvb2wgaXNV
bmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICAgICAgc3RhdGljIFBz
ZXVkb0lkIHBzZXVkb0lkKFBzZXVkb1R5cGUpOwogCi0gICAgICAgIC8vIFNlbGVjdG9ycyBhcmUg
a2VwdCBpbiBhbiBhcnJheSBieSBDU1NTZWxlY3Rvckxpc3QuIFRoZSBuZXh0IGNvbXBvbmVudCBv
ZiB0aGUgc2VsZWN0b3IgaXMgCisgICAgICAgIC8vIFNlbGVjdG9ycyBhcmUga2VwdCBpbiBhbiBh
cnJheSBieSBDU1NTZWxlY3Rvckxpc3QuIFRoZSBuZXh0IGNvbXBvbmVudCBvZiB0aGUgc2VsZWN0
b3IgaXMKICAgICAgICAgLy8gdGhlIG5leHQgaXRlbSBpbiB0aGUgYXJyYXkuCiAgICAgICAgIENT
U1NlbGVjdG9yKiB0YWdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9pc0xhc3RJblRhZ0hpc3Rv
cnkgPyAwIDogY29uc3RfY2FzdDxDU1NTZWxlY3Rvcio+KHRoaXMgKyAxKTsgfQogCiAgICAgICAg
IGJvb2wgaGFzVGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWcgIT0gYW55UU5hbWUoKTsgfQotICAg
ICAgICAKKwogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcoKSBjb25zdCB7IHJldHVy
biBtX3RhZzsgfQogICAgICAgICAvLyBBdG9taWNTdHJpbmcgaXMgcmVhbGx5IGp1c3QgYW4gQXRv
bWljU3RyaW5nSW1wbCogc28gdGhlIGNhc3QgYmVsb3cgaXMgc2FmZS4KICAgICAgICAgLy8gRklY
TUU6IFBlcmhhcHMgY2FsbCBzaXRlcyBjb3VsZCBiZSBjaGFuZ2VkIHRvIGFjY2VwdCBBdG9taWNT
dHJpbmdJbXBsPwpAQCAtMjM0LDcgKzIzNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2b2lk
IHNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgICAgICB2b2lkIHNldFNlbGVj
dG9yTGlzdChQYXNzT3duUHRyPENTU1NlbGVjdG9yTGlzdD4pOwotICAgICAgICAKKwogICAgICAg
ICBib29sIHBhcnNlTnRoKCk7CiAgICAgICAgIGJvb2wgbWF0Y2hOdGgoaW50IGNvdW50KTsKIApA
QCAtMjU4LDkgKzI1OCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdW5zaWduZWQg
bV9yZWxhdGlvbiAgICAgICAgICAgOiAzOyAvLyBlbnVtIFJlbGF0aW9uCiAgICAgICAgIG11dGFi
bGUgdW5zaWduZWQgbV9tYXRjaCAgICAgIDogNDsgLy8gZW51bSBNYXRjaAogICAgICAgICBtdXRh
YmxlIHVuc2lnbmVkIG1fcHNldWRvVHlwZSA6IDg7IC8vIFBzZXVkb1R5cGUKLSAgICAgICAgCisK
ICAgICBwcml2YXRlOgotICAgICAgICBib29sIG1fcGFyc2VkTnRoICAgICAgICAgICAgICA6IDE7
IC8vIFVzZWQgZm9yIDpudGgtKiAKKyAgICAgICAgYm9vbCBtX3BhcnNlZE50aCAgICAgICAgICAg
ICAgOiAxOyAvLyBVc2VkIGZvciA6bnRoLSoKICAgICAgICAgYm9vbCBtX2lzTGFzdEluU2VsZWN0
b3JMaXN0ICAgOiAxOwogICAgICAgICBib29sIG1faXNMYXN0SW5UYWdIaXN0b3J5ICAgICA6IDE7
CiAgICAgICAgIGJvb2wgbV9oYXNSYXJlRGF0YSAgICAgICAgICAgIDogMTsKQEAgLTI4NywyNSAr
Mjg3LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE93blB0cjxDU1NTZWxl
Y3Rvckxpc3Q+IG1fc2VsZWN0b3JMaXN0OyAvLyBVc2VkIGZvciA6LXdlYmtpdC1hbnkgYW5kIDpu
b3QKICAgICAgICAgfTsKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YSgpOwotICAgICAgICAK
KwogICAgICAgICB1bmlvbiBEYXRhVW5pb24gewogICAgICAgICAgICAgRGF0YVVuaW9uKCkgOiBt
X3ZhbHVlKDApIHsgfQogICAgICAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogbV92YWx1ZTsKICAg
ICAgICAgICAgIFJhcmVEYXRhKiBtX3JhcmVEYXRhOwogICAgICAgICB9IG1fZGF0YTsKLSAgICAg
ICAgCisKICAgICAgICAgUXVhbGlmaWVkTmFtZSBtX3RhZzsKICAgICB9OwogCiBpbmxpbmUgY29u
c3QgUXVhbGlmaWVkTmFtZSYgQ1NTU2VsZWN0b3I6OmF0dHJpYnV0ZSgpIGNvbnN0Ci17IAorewog
ICAgIEFTU0VSVChpc0F0dHJpYnV0ZVNlbGVjdG9yKCkpOwogICAgIEFTU0VSVChtX2hhc1JhcmVE
YXRhKTsKICAgICByZXR1cm4gbV9kYXRhLm1fcmFyZURhdGEtPm1fYXR0cmlidXRlOwogfQotICAg
IAotaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6Om1hdGNoZXNQc2V1ZG9FbGVtZW50KCkgY29uc3Qg
Ci17IAorCitpbmxpbmUgYm9vbCBDU1NTZWxlY3Rvcjo6bWF0Y2hlc1BzZXVkb0VsZW1lbnQoKSBj
b25zdAorewogICAgIGlmIChtX3BzZXVkb1R5cGUgPT0gUHNldWRvVW5rbm93bikKICAgICAgICAg
ZXh0cmFjdFBzZXVkb1R5cGUoKTsKICAgICByZXR1cm4gbV9tYXRjaCA9PSBQc2V1ZG9FbGVtZW50
OwpAQCAtMzYxLDcgKzM2MSw3IEBAIGlubGluZSB2b2lkIENTU1NlbGVjdG9yOjpzZXRWYWx1ZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogICAgIG1fZGF0YS5tX3ZhbHVlLT5yZWYoKTsKIH0K
IAotaW5saW5lIHZvaWQgbW92ZShQYXNzT3duUHRyPENTU1NlbGVjdG9yPiBmcm9tLCBDU1NTZWxl
Y3RvciogdG8pIAoraW5saW5lIHZvaWQgbW92ZShQYXNzT3duUHRyPENTU1NlbGVjdG9yPiBmcm9t
LCBDU1NTZWxlY3RvciogdG8pCiB7CiAgICAgbWVtY3B5KHRvLCBmcm9tLmdldCgpLCBzaXplb2Yo
Q1NTU2VsZWN0b3IpKTsKICAgICAvLyBXZSB3YW50IHRvIGZyZWUgdGhlIG1lbW9yeSAod2hpY2gg
d2FzIGFsbG9jYXRlZCB3aXRoIGZhc3ROZXcpLCBidXQgd2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yTGlzdC5jcHAKaW5kZXggODRhYzllYy4uOWIwZmE4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yTGlzdC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtMzEsMTEgKzMxLDExIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQ1NTU2VsZWN0b3JMaXN0Ojp+Q1NTU2VsZWN0b3JMaXN0KCkgCitDU1NT
ZWxlY3Rvckxpc3Q6On5DU1NTZWxlY3Rvckxpc3QoKQogewogICAgIGRlbGV0ZVNlbGVjdG9ycygp
OwogfQotICAgIAorCiB2b2lkIENTU1NlbGVjdG9yTGlzdDo6YWRvcHQoQ1NTU2VsZWN0b3JMaXN0
JiBsaXN0KQogewogICAgIGRlbGV0ZVNlbGVjdG9ycygpOwpAQCAtNDgsNyArNDgsNyBAQCB2b2lk
IENTU1NlbGVjdG9yTGlzdDo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1Bh
cnNlclNlbGVjdG9yPiA+JiBzZQogICAgIGRlbGV0ZVNlbGVjdG9ycygpOwogICAgIGNvbnN0IHNp
emVfdCB2ZWN0b3JTaXplID0gc2VsZWN0b3JWZWN0b3Iuc2l6ZSgpOwogICAgIHNpemVfdCBmbGF0
dGVuZWRTaXplID0gMDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3RvclNpemU7ICsr
aSkgeyAgICAgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3JTaXplOyArK2kp
IHsKICAgICAgICAgZm9yIChDU1NQYXJzZXJTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3RvclZl
Y3RvcltpXS5nZXQoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3Rvcnko
KSkKICAgICAgICAgICAgICsrZmxhdHRlbmVkU2l6ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U2VsZWN0b3JMaXN0LmgKaW5kZXggMjE5ZDc0ZS4uN2Q0NWE2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWxlY3Rvckxpc3QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIENTU1NlbGVjdG9yTGlzdF9oCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSAi
Q1NTU2VsZWN0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBjbGFzcyBDU1NQ
YXJzZXJTZWxlY3RvcjsKLSAgICAKKwogY2xhc3MgQ1NTU2VsZWN0b3JMaXN0IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDU1NTZWxlY3Rvckxpc3QpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZG9wdChD
U1NTZWxlY3Rvckxpc3QmIGxpc3QpOwogICAgIHZvaWQgYWRvcHRTZWxlY3RvclZlY3RvcihWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3RvclZlY3Rvcik7Ci0gICAgCisK
ICAgICBDU1NTZWxlY3RvciogZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yQXJyYXkg
PyBtX3NlbGVjdG9yQXJyYXkgOiAwOyB9CiAgICAgc3RhdGljIENTU1NlbGVjdG9yKiBuZXh0KENT
U1NlbGVjdG9yKik7CiAgICAgYm9vbCBoYXNPbmVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0b3JBcnJheSAmJiAhbmV4dChtX3NlbGVjdG9yQXJyYXkpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVBcHBseVByb3BlcnR5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCmluZGV4IGZiYjIzYWMuLjE3OGNiMzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCkBAIC0y
NjQsNyArMjY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAoc2VsZWN0b3ItPnN0eWxl
KCktPiptX3Zpc2l0ZWRMaW5rU2V0dGVyKShzZWxlY3Rvci0+Z2V0Q29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUocHJpbWl0aXZlVmFsdWUsIHRydWUpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwog
ICAgIHZvaWQgYXBwbHlDb2xvclZhbHVlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25z
dCBDb2xvciYgY29sb3IpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc2VsZWN0b3ItPmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmgKaW5kZXggNGM5ZjYzMC4uNDQ3OTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
Z2V0UHJvcGVydHlQcmlvcml0eShjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAgU3Ry
aW5nIGdldFByb3BlcnR5U2hvcnRoYW5kKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKTsKICAg
ICBib29sIGlzUHJvcGVydHlJbXBsaWNpdChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSk7Ci0g
ICAgCisKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFByb3BlcnR5Q1NTVmFs
dWUoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRQcm9w
ZXJ0eVZhbHVlKGludCBwcm9wZXJ0eUlEKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdl
dFByb3BlcnR5UHJpb3JpdHkoaW50IHByb3BlcnR5SUQpIGNvbnN0ID0gMDsKQEAgLTY3LDcgKzY3
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBjb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKSA9IDA7Ci0gCisKICAgICB2b2lk
IGRpZmYoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKIAogICAgIFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNvcHlQcm9wZXJ0aWVzSW5TZXQoY29uc3Qg
aW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggOTdjNTk0YS4uYWIyMWE4YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIGlmIChpZCA9PSBwcm9w
SUQpIHsgXAogICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBc
CiAgICAgcmV0dXJuOyBcCiB9Ci0gICAgCisKICNkZWZpbmUgSEFORExFX0lOSEVSSVRfQ09ORF9X
SVRIX0JBQ0tVUChwcm9wSUQsIHByb3AsIHByb3BBbHQsIFByb3ApIFwKIGlmIChpZCA9PSBwcm9w
SUQpIHsgXAogICAgIGlmIChtX3BhcmVudFN0eWxlLT5wcm9wKCkuaXNWYWxpZCgpKSBcCkBAIC0x
OTIsMTkgKzE5MiwxOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ydWxlOyB9CiAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3RvcjsgfQotICAgIAorCiAgICAgYm9vbCBoYXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcjsgfQogICAgIGJv
b2wgaGFzTXVsdGlwYXJ0U2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc011bHRpcGFydFNl
bGVjdG9yOyB9CiAgICAgYm9vbCBoYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2Vk
T25SdWxlSGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGlu
Z0hUTUxCYXNlZE9uUnVsZUhhc2g7IH0KICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yOyB9CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nw
ZWNpZmljaXR5OyB9CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlua01hdGNoVHlwZTsgfQotICAgIAorCiAgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2Vl
biBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFu
ZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7CiAgICAgY29uc3QgdW5zaWduZWQqIGRlc2NlbmRh
bnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSBjb25zdCB7IHJldHVybiBtX2Rlc2NlbmRhbnRT
ZWxlY3RvcklkZW50aWZpZXJIYXNoZXM7IH0KIAotcHJpdmF0ZTogICAgCitwcml2YXRlOgogICAg
IENTU1N0eWxlUnVsZSogbV9ydWxlOwogICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwogICAg
IHVuc2lnbmVkIG1fc3BlY2lmaWNpdHk7CkBAIC0yMjMsOSArMjIzLDkgQEAgY2xhc3MgUnVsZVNl
dCB7CiBwdWJsaWM6CiAgICAgUnVsZVNldCgpOwogICAgIH5SdWxlU2V0KCk7Ci0gICAgCisKICAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFZlY3RvcjxSdWxlRGF0YT4qPiBB
dG9tUnVsZU1hcDsKLSAgICAKKwogICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVT
aGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDAp
OwogCiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVtKTsKQEAgLTIzNyw3
ICsyMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkgeyBt
X2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQogCiAgICAgdm9pZCBjb2xsZWN0RmVh
dHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmKSBjb25zdDsKLSAgICAKKwogICAgIGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIGlkUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25z
dCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiBjbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9j
bGFzc1J1bGVzLmdldChrZXkpOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdGFnUnVs
ZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChr
ZXkpOyB9CkBAIC0yNDYsNyArMjQ2LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIGZvY3VzUHNldWRvQ2xhc3NSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX2ZvY3VzUHNl
dWRvQ2xhc3NSdWxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHVuaXZlcnNhbFJ1
bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVyc2FsUnVsZXM7IH0KICAgICBjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBwYWdlUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV9wYWdlUnVsZXM7IH0K
LSAgICAKKwogcHVibGljOgogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBBdG9tUnVs
ZU1hcCBtX2NsYXNzUnVsZXM7CkBAIC0yNjUsNyArMjY1LDcgQEAgc3RhdGljIFJ1bGVTZXQqIGRl
ZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKIHN0
YXRpYyBSdWxlU2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlOwogc3RhdGljIENTU1N0eWxlU2hl
ZXQqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0OwotICAgIAorCiBzdGF0aWMgUnVsZVNldCogc2li
bGluZ1J1bGVzSW5EZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogdW5jb21tb25BdHRyaWJ1
dGVSdWxlc0luRGVmYXVsdFN0eWxlOwogCkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGFzc2VydE5vU2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKQogICAgIEFTU0VSVCgh
c2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUpOwogI2VuZGlmCiB9Ci0gICAgCisKIHN0YXRpYyBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBzY3JlZW5FdmFsKCkKIHsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3IsIHN0YXRpY1NjcmVlbkV2YWwsICgi
c2NyZWVuIikpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxl
U2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAg
ICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7CiAgICAgICAg
IGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQogICAg
ICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKLSAgICB9ICAgIAorICAgIH0K
ICAgICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3Jz
ICg6Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9m
IHN0eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRv
IHJlamVjdAogICAgIC8vIHNoYXJpbmcgY2FuZGlkYXRlcy4KQEAgLTQ1OCw4ICs0NTgsOCBAQCBD
U1NTdHlsZVNlbGVjdG9yOjp+Q1NTU3R5bGVTZWxlY3RvcigpCiAgICAgbV9mb250U2VsZWN0b3It
PmNsZWFyRG9jdW1lbnQoKTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV92aWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcnlSZXN1bHRzKTsKIH0KLSAgICAKLUNTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVz
OjpGZWF0dXJlcygpIAorCitDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlczo6RmVhdHVyZXMoKQog
ICAgIDogdXNlc0ZpcnN0TGluZVJ1bGVzKGZhbHNlKQogICAgICwgdXNlc0JlZm9yZUFmdGVyUnVs
ZXMoZmFsc2UpCiAgICAgLCB1c2VzTGlua1J1bGVzKGZhbHNlKQpAQCAtNTE1LDcgKzUxNSw3IEBA
IHN0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0U3R5bGUoKQogewogICAgIEFTU0VSVCghZGVm
YXVsdFN0eWxlKTsKICAgICBBU1NFUlQoIXNpbXBsZURlZmF1bHRTdHlsZVNoZWV0KTsKLSAgICAK
KwogICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBSdWxlU2V0OwogICAgIC8vIFRoZXJlIGFyZSBubyBt
ZWRpYS1zcGVjaWZpYyBydWxlcyBpbiB0aGUgc2ltcGxlIGRlZmF1bHQgc3R5bGUuCiAgICAgZGVm
YXVsdFByaW50U3R5bGUgPSBkZWZhdWx0U3R5bGU7CkBAIC01MjMsMTAgKzUyMywxMCBAQCBzdGF0
aWMgdm9pZCBsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKCkKIAogICAgIHNpbXBsZURlZmF1bHRTdHls
ZVNoZWV0ID0gcGFyc2VVQVNoZWV0KHNpbXBsZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHN0cmxlbihz
aW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgZGVmYXVsdFN0eWxlLT5hZGRSdWxlc0Zy
b21TaGVldChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCwgc2NyZWVuRXZhbCgpKTsKLSAgICAKKwog
ICAgIC8vIE5vIG5lZWQgdG8gaW5pdGlhbGl6ZSBxdWlya3Mgc2hlZXQgeWV0IGFzIHRoZXJlIGFy
ZSBubyBxdWlyayBydWxlcyBmb3IgZWxlbWVudHMgYWxsb3dlZCBpbiBzaW1wbGUgZGVmYXVsdCBz
dHlsZS4KIH0KLSAgICAKKwogc3RhdGljIHZvaWQgbG9hZFZpZXdTb3VyY2VTdHlsZSgpCiB7CiAg
ICAgQVNTRVJUKCFkZWZhdWx0Vmlld1NvdXJjZVN0eWxlKTsKQEAgLTU0MSw3ICs1NDEsNyBAQCBz
dGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgICAgIGFzc2VydE5vU2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAg
ICAgICAgY29sbGVjdFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQotICAgIAor
CiAjaWYgRU5BQkxFKFNWRykKICAgICBzdGF0aWMgYm9vbCBsb2FkZWRTVkdVc2VyQWdlbnRTaGVl
dDsKICAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVtZW50KCkgJiYgIWxvYWRlZFNWR1VzZXJBZ2Vu
dFNoZWV0KSB7CkBAIC01NTQsNyArNTU0LDcgQEAgc3RhdGljIHZvaWQgZW5zdXJlRGVmYXVsdFN0
eWxlU2hlZXRzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBjb2xsZWN0U3Bl
Y2lhbFJ1bGVzSW5EZWZhdWx0U3R5bGUoKTsKICAgICB9CiAjZW5kaWYKLSAgICAKKwogI2lmIEVO
QUJMRShNQVRITUwpCiAgICAgc3RhdGljIGJvb2wgbG9hZGVkTWF0aE1MVXNlckFnZW50U2hlZXQ7
CiAgICAgaWYgKGVsZW1lbnQtPmlzTWF0aE1MRWxlbWVudCgpICYmICFsb2FkZWRNYXRoTUxVc2Vy
QWdlbnRTaGVldCkgewpAQCAtNTY3LDcgKzU2Nyw3IEBAIHN0YXRpYyB2b2lkIGVuc3VyZURlZmF1
bHRTdHlsZVNoZWV0c0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgY29sbGVj
dFNwZWNpYWxSdWxlc0luRGVmYXVsdFN0eWxlKCk7CiAgICAgfQogI2VuZGlmCi0gICAgCisKICNp
ZiBFTkFCTEUoVklERU8pCiAgICAgc3RhdGljIGJvb2wgbG9hZGVkTWVkaWFTdHlsZVNoZWV0Owog
ICAgIGlmICghbG9hZGVkTWVkaWFTdHlsZVNoZWV0ICYmIChlbGVtZW50LT5oYXNUYWdOYW1lKHZp
ZGVvVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpIHsKQEAgLTU3OSw3ICs1
NzksNyBAQCBzdGF0aWMgdm9pZCBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGNvbGxlY3RTcGVjaWFsUnVsZXNJbkRlZmF1bHRTdHls
ZSgpOwogICAgIH0KICNlbmRpZgotICAgIAorCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQog
ICAgIHN0YXRpYyBib29sIGxvYWRlZEZ1bGxTY3JlZW5TdHlsZVNoZWV0OwogICAgIGlmICghbG9h
ZGVkRnVsbFNjcmVlblN0eWxlU2hlZXQgJiYgZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0SXNG
dWxsU2NyZWVuKCkpIHsKQEAgLTYwNCw3ICs2MDQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dAogCiAgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQogICAgICAgICByZXR1cm47Ci0gICAg
CisKICAgICAvLyBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRh
ZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29y
dCB0aGUgYnVmZmVyLgogICAgIGlmIChtX2VsZW1lbnQtPmhhc0lEKCkpCkBAIC02MjcsMTQgKzYy
NywxNCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMs
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdAogICAgICAgICBtYXRjaFJ1bGVzRm9yTGlz
dChydWxlcy0+Zm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVs
ZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMt
PnRhZ1J1bGVzKG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9yTGlz
dChydWxlcy0+dW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAKKwogICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBh
bnkgcnVsZXMsIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQg
cnVsZXMuCiAgICAgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIAorCiAgICAgLy8gTm93IHRyYW5z
ZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgog
ICAgIGlmICghbV9jaGVja2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHN1Y2tzLCB0aGUgaW5zcGVjdG9yIHNob3VsZCBnZXQgdGhlIHN0eWxlIGZy
b20gdGhlIHZpc2l0ZWQgc3R5bGUgaXRzZWxmLgpAQCAtNzEyLDggKzcxMiw4IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMsIGludCYgZmlyCiAgICAgICAgICAgICBpZiAoIWRlY2wgfHwgKCFkZWNsLT5sZW5ndGgo
KSAmJiAhaW5jbHVkZUVtcHR5UnVsZXMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgaWYgKG1fc2FtZU9yaWdpbk9ubHkgJiYgIW1fY2hlY2tlci5kb2N1bWVudCgpLT5z
ZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHJ1bGUtPmJhc2VVUkwoKSkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7IAotICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFs
IHJ1bGVzLCBzZXQgYSBwc2V1ZG8gYml0IGlmIAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgLy8gSWYgd2UncmUgbWF0Y2hpbmcgbm9ybWFsIHJ1bGVzLCBzZXQgYSBwc2V1
ZG8gYml0IGlmCiAgICAgICAgICAgICAvLyB3ZSByZWFsbHkganVzdCBtYXRjaGVkIGEgcHNldWRv
LWVsZW1lbnQuCiAgICAgICAgICAgICBpZiAobV9keW5hbWljUHNldWRvICE9IE5PUFNFVURPICYm
IG1fY2hlY2tlci5wc2V1ZG9TdHlsZSgpID09IE5PUFNFVURPKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fY2hlY2tlci5pc0NvbGxlY3RpbmdSdWxlc09ubHkoKSkKQEAgLTczNywxNCArNzM3LDE0
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJlUnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBj
b25zdCBSdWxlRGF0YSogcjIpCiB7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkxID0gcjEtPnNw
ZWNpZmljaXR5KCk7CiAgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkyID0gcjItPnNwZWNpZmljaXR5
KCk7Ci0gICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3Np
dGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7IAor
ICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24o
KSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOwogfQogCiB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMoKQogewogICAgIHN0ZDo6c29y
dChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1
bGVzKTsKIH0KLSAgICAKKwogaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1l
bnQoRWxlbWVudCogZSkKIHsKICAgICBpZiAobV9lbGVtZW50ICE9IGUpIHsKQEAgLTg0MiwyMiAr
ODQyLDIyIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9s
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05h
bWUocHJvZ3Jlc3NUYWcpKSB7CiAgICAgICAgIGlmICghbV9lbGVtZW50LT5oYXNUYWdOYW1lKHBy
b2dyZXNzVGFnKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAg
ICAgSFRNTFByb2dyZXNzRWxlbWVudCogdGhpc1Byb2dyZXNzRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlbGVtZW50KTsKICAgICAgICAgSFRNTFByb2dyZXNzRWxl
bWVudCogb3RoZXJQcm9ncmVzc0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUHJvZ3Jlc3NFbGVt
ZW50Kj4obV9lbGVtZW50KTsKICAgICAgICAgaWYgKHRoaXNQcm9ncmVzc0VsZW1lbnQtPmlzRGV0
ZXJtaW5hdGUoKSAhPSBvdGhlclByb2dyZXNzRWxlbWVudC0+aXNEZXRlcm1pbmF0ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKLSAgICAKKwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVs
ZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQq
IG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIAor
CiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzQXV0
b2ZpbGxlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVj
a2VkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKQEAgLTg2
NiwzMCArODY2LDMwIEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhD
b250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+cmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxl
bWVudC0+cmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYg
KGVsZW1lbnQtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgIT0gbV9lbGVtZW50LT5pc0VuYWJsZWRG
b3JtQ29udHJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoZWxl
bWVudC0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpICE9IG1fZWxlbWVudC0+aXNEZWZhdWx0QnV0
dG9uRm9yRm9ybSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+Y29udGFpbnNWYWxpZGl0eVN0eWxlUnVsZXMoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCiAgICAgYm9vbCB3aWxsVmFsaWRhdGUgPSBlbGVtZW50LT53aWxs
VmFsaWRhdGUoKTsKLSAgICAKKwogICAgIGlmICh3aWxsVmFsaWRhdGUgIT0gbV9lbGVtZW50LT53
aWxsVmFsaWRhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgaWYgKHdp
bGxWYWxpZGF0ZSAmJiAoZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpICE9IG1f
ZWxlbWVudC0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAorCiAgICAgaWYgKGVsZW1lbnQtPmlzSW5SYW5nZSgpICE9IG1fZWxlbWVudC0+
aXNJblJhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIGlmIChlbGVt
ZW50LT5pc091dE9mUmFuZ2UoKSAhPSBtX2VsZW1lbnQtPmlzT3V0T2ZSYW5nZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTc4LDcg
Kzk3OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogaW5saW5l
IE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUq
IG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKIHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CkBAIC05OTQsNyArOTk0LDcgQEAgaW5saW5lIE5v
ZGUqIENTU1N0eWxlU2VsZWN0b3I6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5v
ZGUsIHVuc2lnbmVkJgogCiBzdGF0aWMgaW5saW5lIGJvb2wgcGFyZW50U3R5bGVQcmV2ZW50c1No
YXJpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewotICAgIHJldHVybiBwYXJl
bnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5UG9zaXRpb25hbFJ1bGVzKCkgCisgICAgcmV0dXJu
IHBhcmVudFN0eWxlLT5jaGlsZHJlbkFmZmVjdGVkQnlQb3NpdGlvbmFsUnVsZXMoKQogICAgICAg
ICB8fCBwYXJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCkKICAg
ICAgICAgfHwgcGFyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7
CiB9CkBAIC0xMDUyLDcgKzEwNTIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFS
dWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUpCiAgICAgLy8gSW4gcXVpcmtz
IG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0Lgog
ICAgIGlmICghbV9jaGVja2VyLnN0cmljdFBhcnNpbmcoKSkKICAgICAgICAgbWF0Y2hSdWxlcyhk
ZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7Ci0gICAg
ICAgIAorCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZp
ZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxl
cyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAobV9jaGVja2VyLmRv
Y3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7CiAgICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3Vy
Y2VTdHlsZSkKQEAgLTExMTAsNyArMTExMCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENT
U1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogCiAg
ICAgZG9jdW1lbnRTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKLSAgICAgICAgCisKICAgICByZXR1
cm4gZG9jdW1lbnRTdHlsZS5yZWxlYXNlKCk7CiB9CiAKQEAgLTEyMTgsNyArMTIxOCw3IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBSZW5kCiAgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNs
YXJhdGlvbih0ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6
IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAKKwogICAgICAgICAvLyA2LiBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0
LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiAgICAgICAgICAgICBt
YXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhv
clJ1bGUsIGZhbHNlKTsKQEAgLTEyMzQsNyArMTIzNCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBS
ZW5kCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBOb3cg
d2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVy
LiAgV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5CiAgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0
aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBk
ZXBlbmQgb24uCiAgICAgLy8gVGhlIG9yZGVyIGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBv
cnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGltcG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0
YW50CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogICAgICAg
ICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1
bGUpOwogICAgIH0KICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdFVBUnVs
ZSwgbGFzdFVBUnVsZSk7Ci0gICAgCisKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwg
Z28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCiAgICAgdXBkYXRlRm9udCgpOwogCkBAIC0xMjU2
LDEwICsxMjU2LDEwIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5kCiAKICAgICAvLyBOb3cgZG8g
dGhlIG5vcm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgogICAgIGFwcGx5RGVjbGFyYXRpb25z
PGZhbHNlPihmYWxzZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAorCiAgICAgLy8g
Q2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRo
ZW0gbGF0ZXIuCiAgICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7Ci0gICAgCisKICAgICAv
LyBOb3cgZG8gdGhlIGF1dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBh
bmQgYWxsIHRoZSAhaW1wb3J0YW50IHByb3BlcnRpZXMuCiAgICAgaWYgKCFyZXNvbHZlRm9yUm9v
dERlZmF1bHQpIHsKICAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBsYXN0
VUFSdWxlICsgMSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CkBAIC0xMjY5LDcgKzEyNjks
NyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZAogICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNl
Pih0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7CiAKICAgICBBU1NFUlQoIW1fZm9udERp
cnR5KTsKLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1l
c3NlbnRpYWwgZm9udCBwcm9wcywgCisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkg
b25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsCiAgICAgLy8gZ28gYWhlYWQgYW5k
IHVwZGF0ZSBpdCBhIHNlY29uZCB0aW1lLgogICAgIHVwZGF0ZUZvbnQoKTsKIApAQCAtMTM0Miwy
NCArMTM0MiwyNCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiBlbAogdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJT
dHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCiB7CiAgICAgbGlzdC5jbGVh
cigpOwotICAgIAorCiAgICAgLy8gR2V0IHRoZSBrZXlmcmFtZXNSdWxlIGZvciB0aGlzIG5hbWUK
ICAgICBpZiAoIWUgfHwgbGlzdC5hbmltYXRpb25OYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2tleWZyYW1lc1J1bGVNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
CisKICAgICBpZiAoIW1fa2V5ZnJhbWVzUnVsZU1hcC5jb250YWlucyhsaXN0LmFuaW1hdGlvbk5h
bWUoKS5pbXBsKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgY29uc3QgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSA9IG1fa2V5ZnJhbWVzUnVsZU1hcC5maW5kKGxpc3Qu
YW5pbWF0aW9uTmFtZSgpLmltcGwoKSkuZ2V0KCktPnNlY29uZC5nZXQoKTsKLSAgICAKKwogICAg
IC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGUtPmxlbmd0aCgpOyArK2kpIHsKICAgICAg
ICAgLy8gQXBwbHkgdGhlIGRlY2xhcmF0aW9uIHRvIHRoZSBzdHlsZS4gVGhpcyBpcyBhIHNpbXBs
aWZpZWQgdmVyc2lvbiBvZiB0aGUgbG9naWMgaW4gc3R5bGVGb3JFbGVtZW50CiAgICAgICAgIGlu
aXRFbGVtZW50KGUpOwogICAgICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUpOwotICAgICAgICAK
KwogICAgICAgICBjb25zdCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZSA9IHJ1
bGUtPml0ZW0oaSk7CiAKICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZSgwLCAwKTsKQEAg
LTEzNzMsNyArMTM3Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICBs
aXN0Lmluc2VydChrZXlmcmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvLyBJ
ZiB0aGUgMCUga2V5ZnJhbWUgaXMgbWlzc2luZywgY3JlYXRlIGl0IChidXQgb25seSBpZiB0aGVy
ZSBpcyBhdCBsZWFzdCBvbmUgb3RoZXIga2V5ZnJhbWUpCiAgICAgaW50IGluaXRpYWxMaXN0U2l6
ZSA9IGxpc3Quc2l6ZSgpOwogICAgIGlmIChpbml0aWFsTGlzdFNpemUgPiAwICYmIGxpc3RbMF0u
a2V5KCkgIT0gMCkgewpAQCAtMTQwMywxMyArMTQwMywxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNl
dWRvLAogCiAgICAgaW5pdEZvclN0eWxlUmVzb2x2ZShlLCBwYXJlbnRTdHlsZSwgcHNldWRvKTsK
ICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgaWYgKG1f
cGFyZW50U3R5bGUpCiAgICAgICAgIG1fc3R5bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUp
OwogCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Yg
b3VyIHF1aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2lu
ZwogICAgIC8vIHRob3NlIHJ1bGVzLgotICAgIAorCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5k
IGF1dGhvciBydWxlcy4KICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVBUnVsZSA9IC0x
LCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xLCBmaXJzdEF1dGhvclJ1bGUg
PSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKICAgICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1bGUs
IGxhc3RVQVJ1bGUpOwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVk
bywKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBtX3N0eWxlLT5zZXRTdHlsZVR5cGUocHNldWRv
KTsKLSAgICAKKwogICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKIAogICAgIC8vIEhpZ2gtcHJp
b3JpdHkgcHJvcGVydGllcy4KQEAgLTE0MzEsMjYgKzE0MzEsMjYgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lk
IHBzZXVkbywKICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdEF1dGhvclJ1
bGUsIGxhc3RBdXRob3JSdWxlKTsKICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBm
aXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+
KHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKLSAgICAKKwogICAgIC8vIElmIG91ciBm
b250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KICAgICB1cGRhdGVG
b250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBk
ZWNpZGVkIG9uIHRoZSBmb250LXNpemUKICAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCiAgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1
ZSk7Ci0gICAgCisKICAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVz
LgogICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxzZSwgZmlyc3RVQVJ1bGUsIGxhc3RV
QVJ1bGUpOwotICAgIAorCiAgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBz
byB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCiAgICAgY2FjaGVCb3JkZXJBbmRCYWNr
Z3JvdW5kKCk7Ci0gICAgCisKICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIGxh
c3RVQVJ1bGUgKyAxLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKICAgICBhcHBseURlY2xh
cmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSk7CiAg
ICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2Vy
UnVsZSk7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0VUFSdWxlLCBs
YXN0VUFSdWxlKTsKLSAgICAKLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUg
b2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywgCisKKyAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywKICAgICAv
LyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCiAgICAgdXBkYXRlRm9udCgp
OwogCkBAIC0xNDU5LDcgKzE0NTksNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogCiAgICAg
Ly8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgogICAgIGxv
YWRQZW5kaW5nSW1hZ2VzKCk7Ci0gICAgICAgIAorCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5
bGUuCiAgICAgcmV0dXJuIG1fc3R5bGUucmVsZWFzZSgpOwogfQpAQCAtMTUwMCw3ICsxNTAwLDcg
QEAgc3RhdGljIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CiAgICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KICAgICBjb25zdCBpbnQgaW50cmluc2lj
TWFyZ2luID0gMiAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgCisKICAgICAvLyBGSVhN
RTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWlu
LXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCiAgICAgLy8gRklYTUU6IFVzaW5nICJxdWlyayIg
dG8gZGVjaWRlIHRoZSBtYXJnaW4gd2Fzbid0IHNldCBpcyBraW5kIG9mIGxhbWUuCiAgICAgaWYg
KHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKQEAgLTE1ODcsMTIgKzE1ODcs
MTIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgLy8gRklYTUU6IERvbid0IHN1cHBvcnQgdGhpcyBtdXRhdGlvbiBmb3IgcHNldWRv
IHN0eWxlcyBsaWtlIGZpcnN0LWxldHRlciBvciBmaXJzdC1saW5lLCBzaW5jZSBpdCdzIG5vdCBj
b21wbGV0ZWx5CiAgICAgICAgIC8vIGNsZWFyIGhvdyB0aGF0IHNob3VsZCB3b3JrLgogICAgICAg
ICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBJTkxJTkUgJiYgc3R5bGUtPnN0eWxlVHlwZSgpID09
IE5PUFNFVURPICYmIHBhcmVudFN0eWxlICYmIHN0eWxlLT53cml0aW5nTW9kZSgpICE9IHBhcmVu
dFN0eWxlLT53cml0aW5nTW9kZSgpKQogICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoSU5M
SU5FX0JMT0NLKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQWZ0ZXIgcGVyZm9ybWluZyB0aGUg
ZGlzcGxheSBtdXRhdGlvbiwgY2hlY2sgdGFibGUgcm93cy4gIFdlIGRvIG5vdCBob25vciBwb3Np
dGlvbjpyZWxhdGl2ZSBvbgogICAgICAgICAvLyB0YWJsZSByb3dzIG9yIGNlbGxzLiAgVGhpcyBo
YXMgYmVlbiBlc3RhYmxpc2hlZCBpbiBDU1MyLjEgKGFuZCBjYXVzZWQgYSBjcmFzaCBpbiBjb250
YWluaW5nQmxvY2soKQogICAgICAgICAvLyBvbiBzb21lIHNpdGVzKS4KQEAgLTE2MjIsOCArMTYy
Miw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50CiAgICAgLy8gQXV0byB6LWluZGV4IGJlY29t
ZXMgMCBmb3IgdGhlIHJvb3QgZWxlbWVudCBhbmQgdHJhbnNwYXJlbnQgb2JqZWN0cy4gIFRoaXMg
cHJldmVudHMKICAgICAvLyBjYXNlcyB3aGVyZSBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGJsZW5k
ZWQgYXMgYSBzaW5nbGUgdW5pdCBlbmQgdXAgd2l0aCBhIG5vbi10cmFuc3BhcmVudAogICAgIC8v
IG9iamVjdCB3ZWRnZWQgaW4gYmV0d2VlbiB0aGVtLiAgQXV0byB6LWluZGV4IGFsc28gYmVjb21l
cyAwIGZvciBvYmplY3RzIHRoYXQgc3BlY2lmeSB0cmFuc2Zvcm1zL21hc2tzL3JlZmxlY3Rpb25z
LgotICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoZSAmJiBlLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSA9PSBlKSB8fCBzdHlsZS0+b3BhY2l0eSgpIDwgMS4wZiB8fCAK
LSAgICAgICAgc3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpIHx8IHN0eWxlLT5o
YXNNYXNrKCkgfHwgc3R5bGUtPmJveFJlZmxlY3QoKSkpCisgICAgaWYgKHN0eWxlLT5oYXNBdXRv
WkluZGV4KCkgJiYgKChlICYmIGUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IGUp
IHx8IHN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCisgICAgICAgIHx8IHN0eWxlLT5oYXNUcmFuc2Zv
cm1SZWxhdGVkUHJvcGVydHkoKSB8fCBzdHlsZS0+aGFzTWFzaygpIHx8IHN0eWxlLT5ib3hSZWZs
ZWN0KCkpKQogICAgICAgICBzdHlsZS0+c2V0WkluZGV4KDApOwogCiAgICAgLy8gVGV4dGFyZWEg
Y29uc2lkZXJzIG92ZXJmbG93IHZpc2libGUgYXMgYXV0by4KQEAgLTE2MzksNyArMTYzOSw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50CiAgICAgICAgIHN0eWxlLT5zZXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7CiAgICAgZWxzZQogICAgICAgICBz
dHlsZS0+YWRkVG9UZXh0RGVjb3JhdGlvbnNJbkVmZmVjdChzdHlsZS0+dGV4dERlY29yYXRpb24o
KSk7Ci0gICAgCisKICAgICAvLyBJZiBlaXRoZXIgb3ZlcmZsb3cgdmFsdWUgaXMgbm90IHZpc2li
bGUsIGNoYW5nZSB0byBhdXRvLgogICAgIGlmIChzdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFV
RUUgJiYgc3R5bGUtPm92ZXJmbG93WSgpICE9IE9NQVJRVUVFKQogICAgICAgICBzdHlsZS0+c2V0
T3ZlcmZsb3dZKE9NQVJRVUVFKTsKQEAgLTE2NTQsOSArMTY1NCw5IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcGFyZW50CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgdGFibGUgc2VjdGlvbnMgd2lsbCBz
dXBwb3J0IGF1dG8gYW5kIHNjcm9sbC4KICAgICBpZiAoc3R5bGUtPmRpc3BsYXkoKSA9PSBUQUJM
RSB8fCBzdHlsZS0+ZGlzcGxheSgpID09IElOTElORV9UQUJMRSB8fAogICAgICAgICBzdHlsZS0+
ZGlzcGxheSgpID09IFRBQkxFX1JPV19HUk9VUCB8fCBzdHlsZS0+ZGlzcGxheSgpID09IFRBQkxF
X1JPVykgewotICAgICAgICBpZiAoc3R5bGUtPm92ZXJmbG93WCgpICE9IE9WSVNJQkxFICYmIHN0
eWxlLT5vdmVyZmxvd1goKSAhPSBPSElEREVOKSAKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxv
d1goKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+b3ZlcmZsb3dYKCkgIT0gT0hJRERFTikKICAgICAg
ICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1goT1ZJU0lCTEUpOwotICAgICAgICBpZiAoc3R5bGUt
Pm92ZXJmbG93WSgpICE9IE9WSVNJQkxFICYmIHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPSElEREVO
KSAKKyAgICAgICAgaWYgKHN0eWxlLT5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSAmJiBzdHlsZS0+
b3ZlcmZsb3dZKCkgIT0gT0hJRERFTikKICAgICAgICAgICAgIHN0eWxlLT5zZXRPdmVyZmxvd1ko
T1ZJU0lCTEUpOwogICAgIH0KIApAQCAtMTc2Nyw3ICsxNzY3LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwKICAgICB9CiAKICAgICBtX2NoZWNrZXIuc2V0Q29sbGVjdGluZ1J1bGVzT25seShm
YWxzZSk7Ci0gICAKKwogICAgIHJldHVybiBtX3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIApAQCAt
MTg0OSw3ICsxODQ5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IKICAgICAgICAgc2VsZWN0
b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9yeSgpOwogICAgIH07CiAKLSAgICBmb3IgKHNlbGVjdG9y
ID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3It
PnRhZ0hpc3RvcnkoKSkgeyAgICAgICAgICAgIAorICAgIGZvciAoc2VsZWN0b3IgPSBzZWxlY3Rv
ci0+dGFnSGlzdG9yeSgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBzZWxlY3Rvci0+dGFnSGlzdG9y
eSgpKSB7CiAgICAgICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChzZWxlY3Rvckxpc3RDb250YWluc1Vu
Y29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IpKQpAQCAtMTg3OSw3ICsxODc5LDcgQEAg
UnVsZVNldDo6UnVsZVNldCgpCiB9CiAKIFJ1bGVTZXQ6On5SdWxlU2V0KCkKLXsgCit7CiAgICAg
ZGVsZXRlQWxsVmFsdWVzKG1faWRSdWxlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fY2xhc3NS
dWxlcyk7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2hhZG93UHNldWRvRWxlbWVudFJ1bGVzKTsK
QEAgLTIwMDgsNyArMjAwOCw3IEBAIHZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSkKICAgICAgICAgICAgIGFkZFJ1bGUocnVsZSwgcyk7CiAgICAgfQogfQotICAg
IAorCiBzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENTU1N0
eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQogewogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYg
IXNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkKQEAgLTIwNTMsMTIgKzIwNTMsMTIgQEAgc3Rh
dGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmIGZlYXR1cmVzLCBjb25zdAogICAgICAgICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsK
ICAgICAgICAgICAgIGlmICghZmVhdHVyZXMuc2libGluZ1J1bGVzKQogICAgICAgICAgICAgICAg
IGZlYXR1cmVzLnNpYmxpbmdSdWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAgICAg
ICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+YWRkUnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVE
YXRhLnNlbGVjdG9yKCkpOyAgIAorICAgICAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLT5h
ZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcigp
KSB7CiAgICAgICAgICAgICBpZiAoIWZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVsZXMpCiAg
ICAgICAgICAgICAgICAgZmVhdHVyZXMudW5jb21tb25BdHRyaWJ1dGVSdWxlcyA9IGFkb3B0UHRy
KG5ldyBSdWxlU2V0KTsKLSAgICAgICAgICAgIGZlYXR1cmVzLnVuY29tbW9uQXR0cmlidXRlUnVs
ZXMtPmFkZFJ1bGUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpKTsgCisgICAg
ICAgICAgICBmZWF0dXJlcy51bmNvbW1vbkF0dHJpYnV0ZVJ1bGVzLT5hZGRSdWxlKHJ1bGVEYXRh
LnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0y
MDgxLDE0ICsyMDgxLDE0IEBAIHZvaWQgUnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKENTU1N0eWxl
U2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKICAgICBjb2xsZWN0RmVhdHVyZXNG
cm9tTGlzdChmZWF0dXJlcywgbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMpOwogICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21MaXN0KGZlYXR1cmVzLCBtX3VuaXZlcnNhbFJ1bGVzKTsKIH0KLSAgICAKKwog
c3RhdGljIGlubGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVs
ZU1hcCYgbWFwKQogewogICAgIFJ1bGVTZXQ6OkF0b21SdWxlTWFwOjppdGVyYXRvciBlbmQgPSBt
YXAuZW5kKCk7CiAgICAgZm9yIChSdWxlU2V0OjpBdG9tUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBt
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+c2Vjb25kLT5zaHJpbmtU
b0ZpdCgpOwogfQotICAgIAorCiB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKIHsKICAgICBz
aHJpbmtNYXBWZWN0b3JzVG9GaXQobV9pZFJ1bGVzKTsKQEAgLTIxMTUsNyArMjExNSw3IEBAIHN0
YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0CiAgICAgICAgICAgICAqb2sgPSBmYWxzZTsKICAgICB9IGVs
c2UgewogICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7
Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghc3R5bGUgJiYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19FTVMgfHwgdHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUyB8fCB0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUykpIHsKICAgICAgICAgICAgIGlmIChv
aykKICAgICAgICAgICAgICAgICAqb2sgPSBmYWxzZTsKQEAgLTIxMzQsNyArMjEzNCw3IEBAIHN0
YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0CiAgICAgfQogICAgIHJldHVybiBsOwogfQotICAgIAorCiBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIgPSAxLCBib29sICpvayA9IDApCiB7CiAgICAgcmV0dXJuIGNvbnZlcnRU
b0xlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgZmFsc2UsIG11bHRpcGxp
ZXIsIG9rKTsKQEAgLTIxNDQsMjQgKzIxNDQsMjQgQEAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9G
bG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlbmRlclN0eWwK
IHsKICAgICByZXR1cm4gY29udmVydFRvTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB0cnVlLCBtdWx0aXBsaWVyLCBvayk7CiB9Ci0gICAgCisKIHRlbXBsYXRlIDxib29s
IGFwcGx5Rmlyc3Q+CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5RGVjbGFyYXRpb24oQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24sIGJvb2wgaXNJbXBvcnRh
bnQpCiB7CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHN0eWxlRGVjbGFyYXRpb24tPmVuZCgpOwogICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGVEZWNsYXJhdGlvbi0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBjdXJyZW50ID0g
Kml0OwotICAgICAgICAKKwogICAgICAgICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0lt
cG9ydGFudCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnQuaWQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGFwcGx5
Rmlyc3QpIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKGZpcnN0Q1NTUHJvcGVydHkgPT0g
Q1NTUHJvcGVydHlDb2xvciwgQ1NTX2NvbG9yX2lzX2ZpcnN0X3Byb3BlcnR5KTsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5Wm9vbSA9PSBDU1NQcm9wZXJ0eUNvbG9yICsg
MTYsIENTU196b29tX2lzX2VuZF9vZl9maXJzdF9wcm9wX3JhbmdlKTsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5TGluZUhlaWdodCA9PSBDU1NQcm9wZXJ0eVpvb20gKyAx
LCBDU1NfbGluZV9oZWlnaHRfaXNfYWZ0ZXJfem9vbSk7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0
aWVzLCBldGMKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA+IENTU1Byb3BlcnR5TGluZUhlaWdo
dCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIxOTIsMTMgKzIxOTIsMTMgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseURlY2xhcmF0aW9ucyhib29sIGlzSW1wb3J0YW50LCBp
bnQgc3RhcnRJbmRleCwgaW50IGUKICAgICAgICAgICAgIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlID0gbGlua01hdGNoVHlwZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rOwogICAg
ICAgICAgICAgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlID0gbGlua01hdGNoVHlw
ZSAmIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOwogCi0gICAgICAgICAgICBhcHBseURl
Y2xhcmF0aW9uPGFwcGx5Rmlyc3Q+KHN0eWxlRGVjbGFyYXRpb24sIGlzSW1wb3J0YW50KTsgICAg
ICAgIAorICAgICAgICAgICAgYXBwbHlEZWNsYXJhdGlvbjxhcHBseUZpcnN0PihzdHlsZURlY2xh
cmF0aW9uLCBpc0ltcG9ydGFudCk7CiAgICAgICAgIH0KICAgICAgICAgbV9hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUgPSB0cnVlOwogICAgICAgICBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBmb3IgKGludCBp
ID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgKytpKSAgICAgICAgCisgICAgZm9yIChpbnQg
aSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkKICAgICAgICAgYXBwbHlEZWNsYXJh
dGlvbjxhcHBseUZpcnN0PihtX21hdGNoZWREZWNsc1tpXS5zdHlsZURlY2xhcmF0aW9uLCBpc0lt
cG9ydGFudCk7CiB9CiAKQEAgLTI0MDUsNyArMjQwNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkgOiAwOwogCiAgICAgZmxvYXQgem9v
bUZhY3RvciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAKKwogICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWly
IGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLiAgU2hv
cnRoYW5kcyAoZS5nLiBib3JkZXIsIGJhY2tncm91bmQpIG9jY3VyIGluIHRoaXMgbGlzdCBhcyB3
ZWxsIGFuZAogICAgIC8vIGFyZSBvbmx5IGhpdCB3aGVuIG1hcHBpbmcgImluaGVyaXQiIG9yICJp
bml0aWFsIiBpbnRvIGZyb250LWVuZCB2YWx1ZXMuCkBAIC0yNDQ2LDEwICsyNDQ2LDEwIEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1
ZSkKICAgICBjYXNlIENTU1Byb3BlcnR5VGFibGVMYXlvdXQ6CiAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMX0FORF9QUklNSVRJVkUodGFibGVMYXlvdXQsIFRhYmxlTGF5b3V0KQog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOiAKKyAgICBj
YXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMX0FORF9QUklNSVRJVkUodW5pY29kZUJpZGksIFVuaWNvZGVCaWRpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06IAorICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0VHJhbnNmb3JtOgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElB
TF9BTkRfUFJJTUlUSVZFKHRleHRUcmFuc2Zvcm0sIFRleHRUcmFuc2Zvcm0pCiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKQEAgLTI1MDAsNyArMjUwMCw3
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVl
ICp2YWx1ZSkKICAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6
YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOwotICAgICAgICAgICAgCisKICAgICAgICAgbV9z
dHlsZS0+c2V0UmVzaXplKHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjUzMiw3ICsy
NTMyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NT
VmFsdWUgKnZhbHVlKQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoMCk7
CiAgICAgICAgIGZsb2F0IG9sZFNpemUgPSAwOwogICAgICAgICBmbG9hdCBzaXplID0gMDsKLSAg
ICAgICAgCisKICAgICAgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwogICAg
ICAgICBpZiAobV9wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICBvbGRTaXplID0gbV9wYXJlbnRT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwpAQCAtMjU3MCwxNiArMjU3
MCwxNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50IGlkLCBDU1NW
YWx1ZSAqdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElz
QWJzb2x1dGVTaXplICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUxhcmdlciB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVNtYWxsZXIpKTsKKyAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUxhcmdlcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVNtYWxsZXIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCB0
eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1T
ICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19S
RU1TKSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFy
ZW50SXNBYnNvbHV0ZVNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAodHlwZSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZSAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RVhTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHR5cGUgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TKSk7CiAgICAgICAgICAgICBpZiAo
Q1NTUHJpbWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCiAgICAgICAgICAgICAg
ICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihtX3BhcmVudFN0
eWxlLCBtX3Jvb3RFbGVtZW50U3R5bGUsIDEuMCwgdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlm
ICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKQEAgLTI2ODQsNyAr
MjY4NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENT
U1ZhbHVlICp2YWx1ZSkKICAgICAgICAgfQogICAgICAgICBtX3N0eWxlLT5zZXRDbGlwKHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAgICAgICAgIG1fc3R5bGUtPnNldEhhc0NsaXAoaGFzQ2xp
cCk7Ci0gICAgCisKICAgICAgICAgLy8gcmVjdCwgaWRlbnQKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTI3MDAsNyArMjcwMCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIG1fc3R5bGUtPmNsZWFy
Q29udGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTI4MzMsNyArMjgzMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0
eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlv
bihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIAorCiAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBtX3N0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKQEAgLTI5OTYsNyArMjk5Niw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgbV9zdHlsZS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgICAgIFJlbmRlclRoZW1lOjpkZWZh
dWx0VGhlbWUoKS0+c3lzdGVtRm9udChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSwgZm9udERl
c2NyaXB0aW9uKTsKIApAQCAtMzAwOSw3ICszMDA5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmlu
Z01vZGUoc2V0dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgICAgICAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChtX2NoZWNrZXIuZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSk7Ci0gICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSB6
b29tIGZhY3Rvci4KICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRT
aXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXplKG1fY2hlY2tlci5kb2N1bWVudCgp
LCBtX3N0eWxlLmdldCgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgdXNlU1ZHWm9vbVJ1bGVzKCkpKTsKICAgICAgICAg
ICAgICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTMwODUsNyAr
MzA4NSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENT
U1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goKSk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGlzQm9yZGVySW1hZ2Up
CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRCb3JkZXJJbWFnZShpbWFnZSk7CiAgICAgICAgIGVs
c2UKQEAgLTMxMDMsNyArMzEwMyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAgIGltYWdlLnNldFZlcnRp
Y2FsUnVsZShTdHJldGNoSW1hZ2VSdWxlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBt
YXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAKKwogICAgICAg
ICBpZiAoaXNCb3JkZXJJbWFnZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdl
KGltYWdlKTsKICAgICAgICAgZWxzZQpAQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAg
ICAgICAgaW1hZ2Uuc2V0RmlsbChmYWxzZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAKKwogICAgICAg
ICBpZiAoaXNCb3JkZXJJbWFnZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEJvcmRlckltYWdl
KGltYWdlKTsKICAgICAgICAgZWxzZQpAQCAtMzE5MSw3ICszMTkxLDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAg
ICAgICAgbV9zdHlsZS0+c2V0Qm94UmVmbGVjdChSZW5kZXJTdHlsZTo6aW5pdGlhbEJveFJlZmxl
Y3QoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIApA
QCAtMzIwOSw3ICszMjA5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICBtYXNrLnNldE1hc2tEZWZhdWx0cygp
OwogICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgcmVmbGVjdFZhbHVlLT5tYXNr
KCksIG1hc2spOwogICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwotICAgICAgICAK
KwogICAgICAgICBtX3N0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzMTUsNyArMzMxNSw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVk
OiB7Ci0gICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKG1hcnF1ZWVTcGVlZCwgTWFy
cXVlZVNwZWVkKSAgICAgIAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChtYXJx
dWVlU3BlZWQsIE1hcnF1ZWVTcGVlZCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KSB7CkBAIC0zMzY1LDcgKzMzNjUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50IGlkLCBDU1NWYWx1ZSAqdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToKLSAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1ZWVC
ZWhhdmlvcikgICAgICAKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRShtYXJxdWVlQmVoYXZpb3IsIE1hcnF1ZWVCZWhhdmlvcikKICAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bzoKICAgICAgICAgSEFORExFX0lO
SEVSSVRfQU5EX0lOSVRJQUwoZmxvd1RocmVhZCwgRmxvd1RocmVhZCk7CkBAIC0zMzg4LDEzICsz
Mzg4LDEzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENT
U1ZhbHVlICp2YWx1ZSkKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRShtYXJxdWVlRGlyZWN0aW9uLCBNYXJxdWVlRGlyZWN0aW9uKQogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgICAgICBIQU5ETEVf
SU5IRVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJEcmFnLCBVc2VyRHJhZykgICAg
ICAKKyAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1c2Vy
RHJhZywgVXNlckRyYWcpCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VXNlck1vZGlmeToKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BS
SU1JVElWRSh1c2VyTW9kaWZ5LCBVc2VyTW9kaWZ5KSAgICAgIAorICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTF9BTkRfUFJJTUlUSVZFKHVzZXJNb2RpZnksIFVzZXJNb2RpZnkpCiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdDoKLSAg
ICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUxfQU5EX1BSSU1JVElWRSh1c2VyU2VsZWN0
LCBVc2VyU2VsZWN0KSAgICAgIAorICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTF9B
TkRfUFJJTUlUSVZFKHVzZXJTZWxlY3QsIFVzZXJTZWxlY3QpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3c6IHsKQEAgLTM0ODAsNyArMzQ4MCw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2
YWx1ZSkKICAgICAgICAgRGFzaGJvYXJkUmVnaW9uICpyZWdpb24gPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0RGFzaGJvYXJkUmVnaW9uVmFsdWUoKTsKICAgICAgICAgaWYgKCFyZWdpb24pCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAKKwogICAgICAgICBEYXNoYm9hcmRSZWdpb24gKmZp
cnN0ID0gcmVnaW9uOwogICAgICAgICB3aGlsZSAocmVnaW9uKSB7CiAgICAgICAgICAgICBMZW5n
dGggdG9wID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+dG9wKCksIHN0eWxlKCksIG1fcm9v
dEVsZW1lbnRTdHlsZSk7CkBAIC0zNDkzLDEyICszNDkzLDEyIEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2YWx1ZSkKICAgICAgICAgICAg
ICAgICBtX3N0eWxlLT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OlJl
Y3RhbmdsZSwgcmVnaW9uLT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lv
biA9PSBmaXJzdCA/IGZhbHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICByZWdpb24gPSByZWdpb24t
Pm1fbmV4dC5nZXQoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtX2VsZW1lbnQt
PmRvY3VtZW50KCktPnNldEhhc0Rhc2hib2FyZFJlZ2lvbnModHJ1ZSk7Ci0gICAgICAgIAorCiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYgICAgICAgIAorI2VuZGlmCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5nOgogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTF9BTkRfUFJJTUlUSVZFKHJ0bE9yZGVyaW5nLCBSVExPcmRlcmluZykKICAgICAgICAg
cmV0dXJuOwpAQCAtMzU0MCw3ICszNTQwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBs
eVByb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUgKnZhbHVlKQogICAgICAgICAgICAgbV9zdHlsZS0+
c2V0UGVyc3BlY3RpdmUoMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaW50IHR5cGUg
PSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICBpZiAoQ1NTUHJpbWl0
aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCkBAIC0zNjgyLDIwICszNjgyLDIwIEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlICp2
YWx1ZSkKICAgICAgICAgICAgIG1fc3R5bGUtPnNldExpbmVCb3hDb250YWluKExpbmVCb3hDb250
YWluTm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNDU1NMaW5lQm94Q29udGFpblZhbHVlKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgICAgIENTU0xpbmVCb3hDb250YWluVmFsdWUqIGxp
bmVCb3hDb250YWluVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVlKj4o
dmFsdWUpOwogICAgICAgICBtX3N0eWxlLT5zZXRMaW5lQm94Q29udGFpbihsaW5lQm94Q29udGFp
blZhbHVlLT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwU2hhcGU6CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHdyYXBTaGFwZSwgV3JhcFNoYXBlKTsKICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIG1fc3R5
bGUtPnNldFdyYXBTaGFwZSgwKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NIQVBFKQpAQCAtNDA4NSw3
ICs0MDg1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsQ29tcG9zaXRlKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHUKICAgICAgICAgbGF5ZXItPnNldENv
bXBvc2l0ZShGaWxsTGF5ZXI6OmluaXRpYWxGaWxsQ29tcG9zaXRlKGxheWVyLT50eXBlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MTQyLDcgKzQxNDIsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKgogICAgICAgICBsYXllci0+c2V0UmVwZWF0WChGaWxsTGF5ZXI6
OmluaXRpYWxGaWxsUmVwZWF0WChsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNDE1Niw3ICs0MTU2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoK
ICAgICAgICAgbGF5ZXItPnNldFJlcGVhdFkoRmlsbExheWVyOjppbml0aWFsRmlsbFJlcGVhdFko
bGF5ZXItPnR5cGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQxNzgs
OSArNDE3OCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNpemUoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAgICAgIGxheWVyLT5zZXRT
aXplVHlwZShDb3Zlcik7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoU2l6
ZUxlbmd0aCk7Ci0gICAgCisKICAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6OmluaXRpYWxG
aWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKLSAgICAKKwogICAgIGlmICh2YWx1ZS0+Y3Nz
VmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMIHx8IHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpID09IENTU1ZhbHVlQ29udGFpbgogICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUNvdmVyKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplTGVu
Z3RoKGIpOwpAQCAtNDE5MSw3ICs0MTkxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBG
aWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKIAog
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHBhaXIgPyBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHBhaXItPmZpcnN0KCkpIDogcHJpbWl0aXZlVmFsdWU7CiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZCA9IHBhaXIgPyBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHBhaXItPnNlY29uZCgpKSA6IDA7Ci0gICAgCisKICAgICBMZW5ndGggZmlyc3RMZW5ndGgs
IHNlY29uZExlbmd0aDsKICAgICBpbnQgZmlyc3RUeXBlID0gZmlyc3QtPnByaW1pdGl2ZVR5cGUo
KTsKICAgICBpbnQgc2Vjb25kVHlwZSA9IHNlY29uZCA/IHNlY29uZC0+cHJpbWl0aXZlVHlwZSgp
IDogMDsKQEAgLTQyMTUsNyArNDIxNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAg
ICAgIHNlY29uZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgYi5zZXRXaWR0aChm
aXJzdExlbmd0aCk7CiAgICAgYi5zZXRIZWlnaHQoc2Vjb25kTGVuZ3RoKTsKICAgICBsYXllci0+
c2V0U2l6ZUxlbmd0aChiKTsKQEAgLTQyMjcsNyArNDIyNyw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1CiAgICAgICAgIGxheWVyLT5zZXRYUG9zaXRpb24oRmlsbExheWVyOjppbml0aWFsRmls
bFhQb3NpdGlvbihsYXllci0+dHlwZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
CisKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNDI1MSwxMiArNDI1MSwxMiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZ
UG9zaXRpb24oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdQogICAgICAg
ICBsYXllci0+c2V0WVBvc2l0aW9uKEZpbGxMYXllcjo6aW5pdGlhbEZpbGxZUG9zaXRpb24obGF5
ZXItPnR5cGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBmbG9hdCB6
b29tRmFjdG9yID0gbV9zdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIAorCiAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWx1ZSk7CiAgICAgTGVuZ3RoIGw7CiAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpOwpAQCAtNDQxOCw3ICs0NDE4LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUKICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihBbmltYXRpb246
OmluaXRpYWxBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAKKwogICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpKSB7CkBAIC00NDQ2LDcgKzQ0NDYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZQog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmFsdWUt
PmlzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7CiAgICAgICAgIENTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUqIHRpbWluZ0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZSo+
KHZhbHVlKTsKICAgICAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZSgpKSB7CkBAIC00NDY4LDcgKzQ0NjgsNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
KiB2YWx1ZQogCiAgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KICAgICBD
U1NCb3JkZXJJbWFnZVZhbHVlKiBib3JkZXJJbWFnZSA9IHN0YXRpY19jYXN0PENTU0JvcmRlcklt
YWdlVmFsdWUqPih2YWx1ZSk7Ci0gICAgCisKICAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtp
Y2tzIG9mZiB0aGUgbG9hZCkuCiAgICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OwogICAg
IGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlIHx8IHByb3BlcnR5
ID09IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UpCkBAIC00NDc3LDcgKzQ0NzcsNyBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQm94SW1hZ2VTb3VyY2U7CiAgICAgZWxzZQogICAgICAgICBpbWFnZVByb3BlcnR5ID0g
cHJvcGVydHk7Ci0gICAgICAgIAorCiAgICAgaWYgKENTU1ZhbHVlKiBpbWFnZVZhbHVlID0gYm9y
ZGVySW1hZ2UtPmltYWdlVmFsdWUoKSkKICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uoc3R5bGVJbWFn
ZShpbWFnZVByb3BlcnR5LCBpbWFnZVZhbHVlKSk7CiAKQEAgLTQ0ODcsNyArNDQ4Nyw3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlCiAgICAgLy8gTWFwIGluIHRoZSBib3JkZXIgc2xpY2VzLgog
ICAgIGlmIChib3JkZXJJbWFnZS0+bV9ib3JkZXJTbGljZSkKICAgICAgICAgaW1hZ2Uuc2V0Qm9y
ZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChib3JkZXJJbWFnZS0+bV9ib3JkZXJTbGlj
ZS5nZXQoKSkpOwotICAgIAorCiAgICAgLy8gTWFwIGluIHRoZSBvdXRzZXQuCiAgICAgaWYgKGJv
cmRlckltYWdlLT5tX291dHNldCkKICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVj
ZUltYWdlUXVhZChib3JkZXJJbWFnZS0+bV9vdXRzZXQuZ2V0KCkpKTsKQEAgLTQ1OTIsNyArNDU5
Miw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NT
VmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJW
YWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25k
KCkpCkBAIC00NjQwLDcgKzQ2NDAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9y
VGV4dFNpemVBZGp1c3QoKQogewogICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQog
ICAgICAgICByZXR1cm47Ci0gCisKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0
aW9uKG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpKTsKICAgICBuZXdGb250RGVzY3JpcHRpb24u
c2V0Q29tcHV0ZWRTaXplKG5ld0ZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCkpOwogICAg
IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3JpcHRpb24pOwpAQCAtNDY1
MCw3ICs0NjUwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja0Zvclpvb21DaGFuZ2Uo
UmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW4KIHsKICAgICBpZiAoc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERl
c2NyaXB0aW9uKGNoaWxkRm9udCk7CiAgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9u
LCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKQEAgLTQ2NjAsNyArNDY2MCw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHBhcmVuCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrRm9yR2VuZXJp
Y0ZhbWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSkKIHsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKTsKLSAgCisKICAgICBpZiAoY2hpbGRGb250LmlzQWJzb2x1dGVTaXplKCkg
fHwgIXBhcmVudFN0eWxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ3MzEsNyArNDczMSw3IEBA
IGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OmdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXpl
KERvY3VtZW50KiBkb2N1bWVudCwgZmxvCiAgICAgLy8gV2l0aCB0aGUgc21hcnQgbWluaW11bSwg
d2UgbmV2ZXIgd2FudCB0byBnZXQgc21hbGxlciB0aGFuIHRoZSBtaW5pbXVtIGZvbnQgc2l6ZSB0
byBrZWVwIGZvbnRzIHJlYWRhYmxlLgogICAgIC8vIEhvd2V2ZXIgd2UgYWx3YXlzIGFsbG93IHRo
ZSBwYWdlIHRvIHNldCBhbiBleHBsaWNpdCBwaXhlbCBzaXplIHRoYXQgaXMgc21hbGxlciwKICAg
ICAvLyBzaW5jZSBzaXRlcyB3aWxsIG1pcy1yZW5kZXIgb3RoZXJ3aXNlIChlLmcuLCBodHRwOi8v
d3d3LmdhbWVzcG90LmNvbSB3aXRoIGEgOXB4IG1pbmltdW0pLgotICAgIAorCiAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykK
ICAgICAgICAgcmV0dXJuIDEuMGY7CkBAIC00NzUwLDcgKzQ3NTAsNyBAQCBmbG9hdCBDU1NTdHls
ZVNlbGVjdG9yOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9j
dW1lbnQsIGZsbwogICAgIC8vIGRvaW5nIHNvIHdvbid0IGRpc3J1cHQgdGhlIGxheW91dC4KICAg
ICBpZiAodXNlU21hcnRNaW5pbXVtRm9yRm9udFNpemUgJiYgem9vbWVkU2l6ZSA8IG1pbkxvZ2lj
YWxTaXplICYmIChzcGVjaWZpZWRTaXplID49IG1pbkxvZ2ljYWxTaXplIHx8ICFpc0Fic29sdXRl
U2l6ZSkpCiAgICAgICAgIHpvb21lZFNpemUgPSBtaW5Mb2dpY2FsU2l6ZTsKLSAgICAKKwogICAg
IC8vIEFsc28gY2xhbXAgdG8gYSByZWFzb25hYmxlIG1heGltdW0gdG8gcHJldmVudCBpbnNhbmUg
Zm9udCBzaXplcyBmcm9tIGNhdXNpbmcgY3Jhc2hlcyBvbiB2YXJpb3VzCiAgICAgLy8gcGxhdGZv
cm1zIChJJ20gbG9va2luZyBhdCB5b3UsIFdpbmRvd3MuKQogICAgIHJldHVybiBtaW4oMTAwMDAw
MC4wZiwgem9vbWVkU2l6ZSk7CkBAIC00ODEyLDcgKzQ4MTIsNyBAQCBmbG9hdCBDU1NTdHlsZVNl
bGVjdG9yOjpmb250U2l6ZUZvcktleXdvcmQoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQga2V5d29y
ZCwgYm9vbAogICAgICAgICBpbnQgY29sID0gKGtleXdvcmQgLSBDU1NWYWx1ZVh4U21hbGwpOwog
ICAgICAgICByZXR1cm4gcXVpcmtzTW9kZSA/IHF1aXJrc0ZvbnRTaXplVGFibGVbcm93XVtjb2xd
IDogc3RyaWN0Rm9udFNpemVUYWJsZVtyb3ddW2NvbF07CiAgICAgfQotICAgIAorCiAgICAgLy8g
VmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIHRhYmxlLiBBcHBseSB0aGUgc2NhbGUg
ZmFjdG9yIGluc3RlYWQuCiAgICAgZmxvYXQgbWluTG9naWNhbFNpemUgPSBtYXgoc2V0dGluZ3Mt
Pm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKSwgMSk7CiAgICAgcmV0dXJuIG1heChmb250U2l6ZUZh
Y3RvcnNba2V5d29yZCAtIENTU1ZhbHVlWHhTbWFsbF0qbWVkaXVtU2l6ZSwgbWluTG9naWNhbFNp
emUpOwpAQCAtNDg0OCwxNCArNDg0OCwxNCBAQCBpbnQgQ1NTU3R5bGVTZWxlY3Rvcjo6bGVnYWN5
Rm9udFNpemUoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQgcGl4ZWxGb250U2l6ZSwgYm9vbAogZmxv
YXQgQ1NTU3R5bGVTZWxlY3Rvcjo6bGFyZ2VyRm9udFNpemUoZmxvYXQgc2l6ZSwgYm9vbCkgY29u
c3QKIHsKICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGVyZSB3ZSBmYWxsIGluIHRoZSBzaXpl
IHJhbmdlcyAoeHgtc21hbGwgdG8geHh4LWxhcmdlKSBhbmQgc2NhbGUgdXAgdG8KLSAgICAvLyB0
aGUgbmV4dCBzaXplIGxldmVsLiAgCisgICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KICAgICBy
ZXR1cm4gc2l6ZSAqIDEuMmY7CiB9CiAKIGZsb2F0IENTU1N0eWxlU2VsZWN0b3I6OnNtYWxsZXJG
b250U2l6ZShmbG9hdCBzaXplLCBib29sKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBGaWd1cmUg
b3V0IHdoZXJlIHdlIGZhbGwgaW4gdGhlIHNpemUgcmFuZ2VzICh4eC1zbWFsbCB0byB4eHgtbGFy
Z2UpIGFuZCBzY2FsZSBkb3duIHRvCi0gICAgLy8gdGhlIG5leHQgc2l6ZSBsZXZlbC4gCisgICAg
Ly8gdGhlIG5leHQgc2l6ZSBsZXZlbC4KICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiB9CiAKQEAg
LTQ5OTQsOSArNDk5NCw5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3Jt
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKKwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCkpOwotICAgICAgICAgCisKICAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAgICAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKQEAgLTUwMDUsMTMg
KzUwMDUsMTMgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRp
b25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAgICAgICAgICAgICBkb3Vi
bGUgc3kgPSAxLjA7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRp
b25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJh
dGlvbikKICAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpOwotICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0g
c2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNTAyNyw3ICs1MDI3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAg
ICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKICAgICAgICAg
ICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMikgewpAQCAtNTAzNyw3ICs1MDM3
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENT
U1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSoKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC01MDUyLDcgKzUwNTIs
NyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgIExlbmd0aCB0eSA9
IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFu
c2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKLSAg
ICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5bGUsIHJv
b3RTdHlsZSwgem9vbUZhY3RvciwgJm9rKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CkBAIC01MDc4LDcgKzUwNzgsNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUq
IGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IsICZv
ayk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJh
dGlvbikKICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJz
dFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yLCAmb2spOwotICAgICAgICAgICAg
ICAgIGVsc2UgeyAKKyAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
dHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yLCAmb2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRy
YW5zZm9ybU9wZXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKQEAgLTUxMDYsNyArNTEwNiw3IEBAIGJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwg
UmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUp
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk4pCiAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
ID0gdHVybjJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
b3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKDAsIDAsIDEsIGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC01MTIxLDcgKzUxMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNy
ZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgog
ICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwogICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0dSQUQpCiAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5n
bGUpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhU
cmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgICAgIHggPSAxOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCkBAIC01MjEzLDcg
KzUyMTMsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE1KSktPmdldERvdWJsZVZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfSAgIAorICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAg
ICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBMZW5ndGggcCA9IExl
bmd0aCgwLCBGaXhlZCk7CkBAIC01MjI1LDcgKzUyMjUsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0
eWxlKgogICAgICAgICAgICAgICAgICAgICBvayA9IHZhbCA+PSAwOwogICAgICAgICAgICAgICAg
ICAgICBwID0gTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmICgh
b2spCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTI4MCw3ICs1Mjgw
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1Zh
bHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3QKICAgICAgICAgb3V0T3BlcmF0aW9ucy5jbGVh
cigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgZmxvYXQgem9v
bUZhY3RvciA9IHN0eWxlID8gc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA6IDE7CiAgICAgRmlsdGVy
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9
IGluVmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewpAQCAtNTQxMSwxMyArNTQxMSwx
MyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmxvYWRQZW5kaW5nSW1hZ2VzKCkKIHsKICAgICBp
ZiAobV9wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKKwogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5k
aW5nSW1hZ2VQcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fcGVuZGluZ0ltYWdlUHJvcGVydGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBjdXJyZW50UHJvcGVydHkgPSBzdGF0aWNf
Y2FzdDxDU1NQcm9wZXJ0eUlEPigqaXQpOwogCiAgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgc3dpdGNoIChjdXJyZW50UHJvcGVy
dHkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6IHsKICAg
ICAgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdHlsZS0+
YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXll
ciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuaAppbmRleCBiMDJiMjI5Li42N2U0YjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKQEAgLTkzLDEzICs5MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAogICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzdHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyk7CiAg
ICAgfkNTU1N0eWxlU2VsZWN0b3IoKTsKLSAgICAKKwogICAgIC8vIFVzaW5nIHRoZXNlIGR1cmlu
ZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRpbWl6ZSBjaGlsZCBh
bmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgogICAgIHZvaWQgcHVzaFBhcmVudChFbGVt
ZW50KiBwYXJlbnQpIHsgbV9jaGVja2VyLnB1c2hQYXJlbnQocGFyZW50KTsgfQogICAgIHZvaWQg
cG9wUGFyZW50KEVsZW1lbnQqIHBhcmVudCkgeyBtX2NoZWNrZXIucG9wUGFyZW50KHBhcmVudCk7
IH0KIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVl
LCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKLSAgICAKKwogICAgIHZvaWQg
a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwg
S2V5ZnJhbWVMaXN0Jik7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdHlsZShQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRv
Y3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KIAogICAgIHZvaWQgYXBwbHlQ
cm9wZXJ0eVRvU3R5bGUoaW50IGlkLCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7Ci0gICAgCisK
ICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1l
bnQqLCBmbG9hdCB6b29tRmFjdG9yLCBib29sIGlzQWJzb2x1dGVTaXplLCBmbG9hdCBzcGVjaWZp
ZWRTaXplLCBFU21hcnRNaW5pbXVtRm9yRm9udFNpemUgPSBVc2VTbWFydE1pbmltdW1Gb3JGb250
Rml6ZSk7CiAKIHByaXZhdGU6CkBAIC0yMjksNyArMjI5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAg
IGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgdm9p
ZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgCisKICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29u
c3QgUnVsZURhdGEmKTsKIAogICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KQEAgLTI0Myw3
ICsyNDMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkg
Y29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNGaXJz
dFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdl
SW5kZXgpIGNvbnN0OwotICAgIAorCiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7
CiAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fdXNlclN0eWxlOwogCkBAIC0yNjQsNyArMjY0LDcgQEAg
cHVibGljOgogCiAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSopOwogICAgIFN0eWxlSW1hZ2UqIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9w
ZXJ0eUlELCBDU1NJbWFnZVZhbHVlKik7Ci0gICAgCisKICAgICBib29sIGFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9CiAKQEAgLTMzMCw3
ICszMzAsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiBtX21h
dGNoZWRSdWxlczsKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKLSAgICAK
KwogICAgIEhhc2hTZXQ8aW50PiBtX3BlbmRpbmdJbWFnZVByb3BlcnRpZXM7IC8vIEhhc2ggb2Yg
Q1NTUHJvcGVydHlJRHMKIAogICAgIE93blB0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9yPiBtX21lZGl1
bTsKQEAgLTM1MSw3ICszNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mb250RGlydHk7CiAg
ICAgYm9vbCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlczsKICAgICBib29sIG1fc2FtZU9yaWdp
bk9ubHk7Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBtX2ZvbnRTZWxlY3Rv
cjsKICAgICBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiBtX2FkZGl0aW9uYWxB
dHRyaWJ1dGVTdHlsZURlY2xzOwogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0Kj4gbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwpAQCAtMzU5LDcgKzM1OSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsKICAgICBib29sIG1f
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsKICAgICBjb25zdCBDU1NTdHlsZUFwcGx5
UHJvcGVydHkmIG1fYXBwbHlQcm9wZXJ0eTsKLSAgICAKKwogICAgIGZyaWVuZCBjbGFzcyBDU1NT
dHlsZUFwcGx5UHJvcGVydHk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAK
aW5kZXggNjYwMTA2Yi4uNmQ0ZTdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cApAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgYm9vbCBpc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0
UGFyZW50KE5vZGUqIHBhcmVudE5vZGUpCiAgICAgICAgIHx8IHBhcmVudE5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzdHlsZVRhZykKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB8fCBwYXJl
bnROb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdHlsZVRhZykKLSNlbmRpZiAgICAKKyNlbmRp
ZgogICAgICAgICB8fCBwYXJlbnROb2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NFU1NJTkdf
SU5TVFJVQ1RJT05fTk9ERTsKIH0KICNlbmRpZgpAQCAtMTQ3LDkgKzE0Nyw5IEBAIHVuc2lnbmVk
IENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlLCB1bnNpZ25lZCBp
bmRleCwgRXhjZXB0aW9uCiAgICAgQ1NTUnVsZSogYyA9IHIuZ2V0KCk7CiAgICAgbV9jaGlsZHJl
bi5pbnNlcnQoaW5kZXgsIHIucmVsZWFzZSgpKTsKICAgICBjLT5pbnNlcnRlZEludG9QYXJlbnQo
KTsKLSAgICAKKwogICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci0gICAgCisKICAgICByZXR1cm4g
aW5kZXg7CiB9CiAKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmFkZE5h
bWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdAog
ICAgICAgICByZXR1cm47CiAKICAgICBtX25hbWVzcGFjZXMgPSBhZG9wdFB0cihuZXcgQ1NTTmFt
ZXNwYWNlKHByZWZpeCwgdXJpLCBtX25hbWVzcGFjZXMucmVsZWFzZSgpKSk7Ci0gICAgCisKICAg
ICBpZiAocHJlZml4LmlzRW1wdHkoKSkKICAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IG5hbWVz
cGFjZSBvbiB0aGUgcGFyc2VyIHNvIHRoYXQgc2VsZWN0b3JzIHRoYXQgb21pdCBuYW1lc3BhY2Ug
aW5mbyB3aWxsCiAgICAgICAgIC8vIGJlIGFibGUgdG8gcGljayBpdCB1cCBlYXNpbHkuCkBAIC0y
ODEsNyArMjgxLDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiAg
ICAgd2hpbGUgKFN0eWxlQmFzZSogcGFyZW50ID0gcm9vdC0+cGFyZW50KCkpCiAgICAgICAgIHJv
b3QgPSBwYXJlbnQ7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50VG9VcGRhdGUgPSByb290LT5pc0NT
U1N0eWxlU2hlZXQoKSA/IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihyb290KS0+ZG9jdW1l
bnQoKSA6IDA7Ci0gICAgCisKICAgICAvKiBGSVhNRTogV2UgZG9uJ3QgbmVlZCB0byBkbyBldmVy
eXRoaW5nIHVwZGF0ZVN0eWxlU2VsZWN0b3IgZG9lcywKICAgICAgKiBiYXNpY2FsbHkgd2UganVz
dCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBkb2N1bWVudCdzIHNlbGVjdG9yIHdpdGggdGhlCiAgICAg
ICogYWxyZWFkeSBleGlzdGluZyBzdHlsZSBzaGVldHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAKaW5kZXggOWVlY2IyYy4uZDI5YzJkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaAppbmRleCAyN2U4OTliLi5l
MzY5MWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgK
QEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBDU1NUaW1p
bmdGdW5jdGlvblZhbHVlX2gKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NMaW5lYXJUaW1pbmdGdW5jdGlvblZhbHVlKTsKICAg
ICB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTTGluZWFyVGltaW5nRnVuY3Rpb25WYWx1ZSgp
CiAgICAgewpAQCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlz
TGluZWFyVGltaW5nRnVuY3Rpb25WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIH07Ci0g
ICAgCisKIGNsYXNzIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSA6IHB1YmxpYyBD
U1NUaW1pbmdGdW5jdGlvblZhbHVlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+IGNyZWF0ZShkb3VibGUgeDEsIGRvdWJs
ZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgog
CiAgICAgaW50IG51bWJlck9mU3RlcHMoKSBjb25zdCB7IHJldHVybiBtX3N0ZXBzOyB9CiAgICAg
Ym9vbCBzdGVwQXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcEF0U3RhcnQ7IH0KLSAgICAK
KwogcHJpdmF0ZToKICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUoaW50IHN0ZXBzLCBi
b29sIHN0ZXBBdFN0YXJ0KQogICAgICAgICA6IG1fc3RlcHMoc3RlcHMpCkBAIC0xMTksNyArMTE5
LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zdGVwczsKICAgICBib29sIG1fc3RlcEF0U3RhcnQ7
CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwCmluZGV4IDU5OWMwNzguLmY3Yjg3NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcApAQCAtMjAsNyArMjAs
NyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCmluZGV4IDBiYTE5ODAuLjJmMmMwMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCkBAIC0yMCw3ICsy
MCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQ1NTVW5pY29kZVJhbmdlVmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAppbmRleCBjNGQ5MWIxLi4yZTRkN2Ew
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmNwcApAQCAtNzIsMTAgKzcyLDEwIEBAIGJv
b2wgQ1NTVmFsdWVMaXN0OjpyZW1vdmVBbGwoQ1NTVmFsdWUqIHZhbCkKICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmb3VuZDsK
IH0KLSAgICAKKwogYm9vbCBDU1NWYWx1ZUxpc3Q6Omhhc1ZhbHVlKENTU1ZhbHVlKiB2YWwpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBiZSBpbXBsZW1lbnRpbmcgb3BlcmF0b3I9
PSB0byBDU1NWYWx1ZSBhbmQgaXRzIGRlcml2ZWQgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1dyYXBTaGFwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1dy
YXBTaGFwZXMuY3BwCmluZGV4IDZjZjI4MDkuLmU1ZTlmOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
V3JhcFNoYXBlcy5jcHAKQEAgLTEyLDcgKzEyLDcgQEAKICAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCiAgKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKICAqICAgIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQog
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpAQCAtNDEsNyArNDEsNyBAQCBTdHJpbmcgQ1NTV3Jh
cFNoYXBlUmVjdDo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHJlY3RQYXJlbiwgKCJyZWN0KCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAgCisKICAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKICAgICByZXN1bHQu
YXBwZW5kKHJlY3RQYXJlbik7CkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVS
ZWN0Ojpjc3NUZXh0KCkgY29uc3QKICAgICByZXN1bHQuYXBwZW5kKGNvbW1hKTsKIAogICAgIHJl
c3VsdC5hcHBlbmQobV9oZWlnaHQtPmNzc1RleHQoKSk7Ci0gICAgCisKICAgICBpZiAobV9yYWRp
dXNYLmdldCgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29tbWEpOwogICAgICAgICByZXN1
bHQuYXBwZW5kKG1fcmFkaXVzWC0+Y3NzVGV4dCgpKTsKQEAgLTY2LDkgKzY2LDkgQEAgU3RyaW5n
IENTU1dyYXBTaGFwZVJlY3Q6OmNzc1RleHQoKSBjb25zdAogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChtX3JhZGl1c1ktPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAg
ICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAgICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQu
dG9TdHJpbmcoKTsKIH0KIApAQCAtNzYsNyArNzYsNyBAQCBTdHJpbmcgQ1NTV3JhcFNoYXBlQ2ly
Y2xlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgY2lyY2xlUGFyZW4sICgiY2lyY2xlKCIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAgCisKICAgICBTdHJpbmdCdWlsZGVy
IHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKICAgICByZXN1bHQuYXBw
ZW5kKGNpcmNsZVBhcmVuKTsKQEAgLTg5LDcgKzg5LDcgQEAgU3RyaW5nIENTU1dyYXBTaGFwZUNp
cmNsZTo6Y3NzVGV4dCgpIGNvbnN0CiAKICAgICByZXN1bHQuYXBwZW5kKG1fcmFkaXVzLT5jc3NU
ZXh0KCkpOwogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIAorCiAgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIFN0cmluZyBDU1NX
cmFwU2hhcGVFbGxpcHNlOjpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgZWxsaXBzZVBhcmVuLCAoImVsbGlwc2UoIikpOwogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBjb21tYSwgKCIsICIpKTsKLSAgICAKKwogICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwog
ICAgIHJlc3VsdC5hcHBlbmQoZWxsaXBzZVBhcmVuKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBTdHJp
bmcgQ1NTV3JhcFNoYXBlRWxsaXBzZTo6Y3NzVGV4dCgpIGNvbnN0CiAKICAgICByZXN1bHQuYXBw
ZW5kKG1fcmFkaXVzWS0+Y3NzVGV4dCgpKTsKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Ci0gICAg
ICAgICAgICAKKwogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIApAQCAtMTIyLDcg
KzEyMiw3IEBAIFN0cmluZyBDU1NXcmFwU2hhcGVQb2x5Z29uOjpjc3NUZXh0KCkgY29uc3QKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgcG9seWdvblBhcmVuRXZlbk9kZCwg
KCJwb2x5Z29uKGV2ZW5vZGQsICIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgcG9seWdvblBhcmVuTm9uWmVybywgKCJwb2x5Z29uKG5vbnplcm8sICIpKTsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgY29tbWEsICgiLCAiKSk7Ci0gICAgCisK
ICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMy
KTsKICAgICBpZiAobV93aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCkBAIC0xMzksOSArMTM5LDkg
QEAgU3RyaW5nIENTU1dyYXBTaGFwZVBvbHlnb246OmNzc1RleHQoKSBjb25zdAogICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNvbW1hKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChtX3ZhbHVlcy5hdChp
ICsgMSktPmNzc1RleHQoKSk7CiAgICAgfQotICAgIAorCiAgICAgcmVzdWx0LmFwcGVuZCgnKScp
OwotICAgICAgICAgICAgCisKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTV3JhcFNoYXBlcy5oCmluZGV4IDkxNzhlYmIuLjNmZjlmYWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NXcmFwU2hhcGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1dyYXBTaGFwZXMuaApAQCAtMTIsNyArMTIsNyBAQAogICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKICAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwog
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogCisgKgogICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBB
TkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQogICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgICAgICBDU1NfV1JBUF9TSEFQRV9DSVJDTEUgPSAyLAogICAgICAgICBDU1NfV1JB
UF9TSEFQRV9FTExJUFNFID0gMywKICAgICAgICAgQ1NTX1dSQVBfU0hBUEVfUE9MWUdPTiA9IDQs
Ci0gICAgICAgIENTU19XUkFQX1NIQVBFX1BBVEggPSA1ICAgICAgICAKKyAgICAgICAgQ1NTX1dS
QVBfU0hBUEVfUEFUSCA9IDUKICAgICB9OwotICAgIAorCiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKIAogcHVibGlj
OgogICAgIHZpcnR1YWwgfkNTU1dyYXBTaGFwZSgpIHsgfQotICAgIAorCiBwcm90ZWN0ZWQ6CiAg
ICAgQ1NTV3JhcFNoYXBlKCkgeyB9CiB9OwpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0LmdldCgp
OyB9CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1c1goKSBjb25zdCB7IHJldHVybiBtX3Jh
ZGl1c1guZ2V0KCk7IH0KICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmFkaXVzWSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmFkaXVzWS5nZXQoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRMZWZ0KFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQogICAgIHZv
aWQgc2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRv
cDsgfQogICAgIHZvaWQgc2V0V2lkdGgoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gd2lk
dGgpIHsgbV93aWR0aCA9IHdpZHRoOyB9CkBAIC03OCwxMCArNzgsMTAgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSB7IHJldHVybiBDU1NfV1JBUF9TSEFQRV9SRUNUOyB9CiAg
ICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotICAgIAorCiBwcml2YXRlOgogICAg
IENTU1dyYXBTaGFwZVJlY3QoKSB7IH0KLSAgICAKKwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gbV90b3A7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2xlZnQ7CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3dpZHRoOwpAQCAtOTcsMTcgKzk3LDE3IEBAIHB1
YmxpYzoKICAgICBDU1NQcmltaXRpdmVWYWx1ZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVm
dC5nZXQoKTsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBt
X3RvcC5nZXQoKTsgfQogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXMoKSBjb25zdCB7IHJl
dHVybiBtX3JhZGl1cy5nZXQoKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRMZWZ0KFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQogICAgIHZvaWQg
c2V0VG9wKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcCkgeyBtX3RvcCA9IHRvcDsg
fQogICAgIHZvaWQgc2V0UmFkaXVzKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1
cykgeyBtX3JhZGl1cyA9IHJhZGl1czsgfQogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSB7IHJl
dHVybiBDU1NfV1JBUF9TSEFQRV9DSVJDTEU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTV3JhcFNoYXBlQ2lyY2xlKCkgeyB9
Ci0gICAgCisKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdG9wOwogICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9sZWZ0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV9yYWRpdXM7CkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQogICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiByYWRpdXNYKCkgY29uc3QgeyByZXR1cm4gbV9yYWRpdXNYLmdldCgpOyB9CiAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJhZGl1c1koKSBjb25zdCB7IHJldHVybiBtX3JhZGl1c1ku
Z2V0KCk7IH0KLSAgICAKKwogICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBsZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KICAgICB2b2lkIHNldFRvcChQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3ApIHsgbV90b3AgPSB0b3A7IH0KICAgICB2b2lkIHNl
dFJhZGl1c1goUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzWCkgeyBtX3JhZGl1
c1ggPSByYWRpdXNYOyB9CkBAIC0xMjksMTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIHsgcmV0dXJuIENTU19XUkFQX1NIQVBFX0VMTElQU0U7IH0KICAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NT
V3JhcFNoYXBlRWxsaXBzZSgpIHsgfQotICAgIAorCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBtX3RvcDsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGVmdDsKICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fcmFkaXVzWDsKQEAgLTE0MiwzMCArMTQyLDMwIEBA
IHByaXZhdGU6CiBjbGFzcyBDU1NXcmFwU2hhcGVQb2x5Z29uIDogcHVibGljIENTU1dyYXBTaGFw
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTV3JhcFNoYXBlUG9seWdvbj4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1dyYXBTaGFwZVBvbHlnb24pOyB9Ci0g
ICAgCisKICAgICB2b2lkIGFwcGVuZFBvaW50KFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHgsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHkpCi0gICAgeyAKKyAgICB7CiAgICAg
ICAgIG1fdmFsdWVzLmFwcGVuZCh4KTsKICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHkpOwogICAg
IH0KLSAgICAKKwogICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGdldFhBdCh1bnNp
Z25lZCBpKSB7IHJldHVybiBtX3ZhbHVlcy5hdChpICogMik7IH0KICAgICBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBnZXRZQXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV92YWx1ZXMuYXQo
aSAqIDIgKyAxKTsgfQotICAgIAorCiAgICAgdm9pZCBzZXRXaW5kUnVsZShXaW5kUnVsZSB3KSB7
IG1fd2luZFJ1bGUgPSB3OyB9CiAgICAgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7IHJldHVy
biBtX3dpbmRSdWxlOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIHsgcmV0dXJu
IENTU19XUkFQX1NIQVBFX1BPTFlHT047IH0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3Q7Ci0gICAgCisKIHByaXZhdGU6CiAgICAgQ1NTV3JhcFNoYXBlUG9seWdvbigpCiAgICAg
ICAgIDogbV93aW5kUnVsZShSVUxFX05PTlpFUk8pCiAgICAgewogICAgIH0KLSAgICAKKwogICAg
IFZlY3RvcjxSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+ID4gbV92YWx1ZXM7Ci0gICAgV2luZFJ1
bGUgbV93aW5kUnVsZTsgICAgCisgICAgV2luZFJ1bGUgbV93aW5kUnVsZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Gb250VmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAKaW5kZXggOTkxZmM2ZS4u
NmIwOTJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgRm9udFZhbHVlOjpjc3NUZXh0KCkgY29uc3QKIHsK
LSAgICAvLyBmb250IHZhcmlhbnQgd2VpZ2h0IHNpemUgLyBsaW5lLWhlaWdodCBmYW1pbHkgCisg
ICAgLy8gZm9udCB2YXJpYW50IHdlaWdodCBzaXplIC8gbGluZS1oZWlnaHQgZmFtaWx5CiAKICAg
ICBTdHJpbmcgcmVzdWx0KCIiKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA1ZmUw
NTBhLi44NmVlMmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtNzIsNyArNzIsNyBA
QCBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0LCBj
b25zdCBTdHJpbmcmIG1lZGlhLCBib29sCiAgICAgLy8gRklYTUU6IHBhcnNpbmcgY2FuIGZhaWwu
IFRoZSBwcm9ibGVtIHdpdGggZmFpbGluZyBjb25zdHJ1Y3RvciBpcyB0aGF0CiAgICAgLy8gd2Ug
d291bGQgbmVlZCBhZGRpdGlvbmFsIGZsYWcgc2F5aW5nIE1lZGlhTGlzdCBpcyBub3QgdmFsaWQK
ICAgICAvLyBQYXJzZSBjYW4gZmFpbCBvbmx5IHdoZW4gZmFsbGJhY2tUb0Rlc2NyaXB0b3IgPT0g
ZmFsc2UsIGkuZSB3aGVuIEhUTUw0IG1lZGlhIGRlc2NyaXB0b3IKLSAgICAvLyBmb3J3YXJkLWNv
bXBhdGlibGUgc3ludGF4IGlzIG5vdCBpbiB1c2UuIAorICAgIC8vIGZvcndhcmQtY29tcGF0aWJs
ZSBzeW50YXggaXMgbm90IGluIHVzZS4KICAgICAvLyBET01JbXBsZW1lbnRhdGlvbkNTUyBzZWVt
cyB0byBtYW5kYXRlIHRoYXQgbWVkaWEgZGVzY3JpcHRvcnMgYXJlIHVzZWQKICAgICAvLyBmb3Ig
Ym90aCBodG1sIGFuZCBzdmcsIGV2ZW4gdGhvdWdoIHN2ZzpzdHlsZSBkb2Vzbid0IHVzZSBtZWRp
YSBkZXNjcmlwdG9ycwogICAgIC8vIEN1cnJlbnRseSB0aGUgb25seSBwbGFjZXMgd2hlcmUgcGFy
c2luZyBjYW4gZmFpbCBhcmUKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIE1lZGlhTGlzdDo6ZGVs
ZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgb2xkTWVkaXVtLCBFeGNlcHRpb25Db2RlJiBlYykKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICghZWMpCiAgICAg
ICAgIG5vdGlmeUNoYW5nZWQoKTsKIH0KQEAgLTE5MSwxMSArMTkxLDExIEBAIHZvaWQgTWVkaWFM
aXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgICAgICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gICAgICAgICAgCisg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fZmFsbGJhY2spIHsKICAgICAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSAgICAg
ICAgICAgIAorICAgICAgICB9CiAgICAgfQogICAgIC8vICIsLCwsIiBmYWxscyBzdHJhaWdodCB0
aHJvdWdoLCBidXQgaXMgbm90IHZhbGlkIHVubGVzcyBmYWxsYmFjawogICAgIGlmICghbV9mYWxs
YmFjayAmJiBsaXN0LmJlZ2luKCkgPT0gbGlzdC5lbmQoKSkgewpAQCAtMjA1LDcgKzIwNSw3IEBA
IHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAg
CisKICAgICBlYyA9IDA7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcXVlcmllcyk7CiAgICAgbV9x
dWVyaWVzID0gdGVtcE1lZGlhTGlzdC0+bV9xdWVyaWVzOwpAQCAtMjM2LDcgKzIzNiw3IEBAIHZv
aWQgTWVkaWFMaXN0OjphcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBuZXdNZWRpdW0sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgICAgICAgICAgZWMgPSAwOwogICAgICAgICB9CiAgICAgfQotICAg
IAorCiAgICAgaWYgKCFlYykKICAgICAgICAgbm90aWZ5Q2hhbmdlZCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnkuY3BwCmluZGV4IGM0NzZhMjEuLjhmYTU4MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeS5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgpAQCAtNjksNyArNjksNyBAQCBTdHJpbmcgTWVkaWFRdWVyeTo6c2Vy
aWFsaXplKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyBib29sIGV4cHJlc3Npb25Db21wYXJlKGNvbnN0IE93blB0cjxNZWRpYVF1ZXJ5RXhwPiYgYSwg
Y29uc3QgT3duUHRyPE1lZGlhUXVlcnlFeHA+JiBiKSAKK3N0YXRpYyBib29sIGV4cHJlc3Npb25D
b21wYXJlKGNvbnN0IE93blB0cjxNZWRpYVF1ZXJ5RXhwPiYgYSwgY29uc3QgT3duUHRyPE1lZGlh
UXVlcnlFeHA+JiBiKQogewogICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEtPnNlcmlhbGl6
ZSgpLCBiLT5zZXJpYWxpemUoKSkgPCAwOwogfQpAQCAtOTUsNyArOTUsNyBAQCBNZWRpYVF1ZXJ5
OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFBhc3NP
d25QdHI8VmVjdG9yPAogICAgICAgICAvLyBpZiBub3QgYWxsIG9mIHRoZSBleHByZXNzaW9ucyBp
cyB2YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgogICAgICAgICBpZiAoIW1f
aWdub3JlZCkKICAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25zLT5hdChpKS0+
aXNWYWxpZCgpOwotIAorCiAgICAgICAgIGlmIChtX2V4cHJlc3Npb25zLT5hdChpKS0+c2VyaWFs
aXplKCkgPT0ga2V5KQogICAgICAgICAgICAgbV9leHByZXNzaW9ucy0+cmVtb3ZlKGkpOwogICAg
ICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAppbmRleCA0Y2MzNjY1Li5jYjE0MTU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
ICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAogI2lmbmRlZiBNZWRpYVF1ZXJ5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oCmluZGV4IDA1YzhkYzkuLmJhODM4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuaApAQCAtMjIsNyArMjIsNyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaWZuZGVmIE1lZGlhUXVlcnlFdmFsdWF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFeHAuY3BwCmluZGV4IGU5NzA0MDAuLjFmNTMyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeUV4cC5jcHAKQEAgLTIzLDcgKzIzLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAog
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFeHAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKaW5kZXggN2U0
ZDQ3Ny4uZmViNjFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlF
eHAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCkBAIC0yMyw3ICsy
Myw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgTWVkaWFRdWVyeUV4cF9oCkBA
IC01NywxNiArNTcsMTYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1ZhbGlkOyB9CiAKLSAgICBib29sIGlzVmlld3BvcnREZXBlbmRlbnQoKSBjb25z
dCB7IHJldHVybiBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGhNZWRp
YUZlYXR1cmUgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhlaWdodE1lZGlhRmVhdHVy
ZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fd2lkdGhNZWRpYUZlYXR1cmUgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2hlaWdodE1lZGlhRmVhdHVyZSB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfd2lkdGhNZWRpYUZlYXR1cmUgfHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6bWF4X2hlaWdodE1lZGlhRmVhdHVyZSB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVyZSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjphc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6bWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZSB8fAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlOyAgfQorICAgIGJvb2wgaXNW
aWV3cG9ydERlcGVuZGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjp3aWR0aE1lZGlhRmVhdHVyZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6aGVpZ2h0TWVkaWFGZWF0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fd2lk
dGhNZWRpYUZlYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9oZWlnaHRNZWRp
YUZlYXR1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
bV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlhRmVhdHVy
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2hlaWdodE1lZGlhRmVhdHVyZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6OmFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWF4X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZTsgIH0KIAogICAgIFN0
cmluZyBzZXJpYWxpemUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1BhaXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9QYWlyLmgKaW5kZXggYzc2YmQ4Mi4uYTk1Mzcw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1BhaXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUGFpci5oCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAgICAgUGFpcigpIDog
bV9maXJzdCgwKSwgbV9zZWNvbmQoMCkgeyB9CiAgICAgUGFpcihQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBmaXJzdCwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2Vjb25kKQog
ICAgICAgICA6IG1fZmlyc3QoZmlyc3QpLCBtX3NlY29uZChzZWNvbmQpIHsgfQotICAgIAorCiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2ZpcnN0OwogICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV9zZWNvbmQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCAwYzJhYWZmLi43ZWYzYjA3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcApAQCAtNzMsMTkgKzczLDE5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0U1ZHUHJvcGVydHlDU1NWYWx1ZShpbnQgcHJv
CiAgICAgTm9kZSogbm9kZSA9IG1fbm9kZS5nZXQoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAorCiAgICAgLy8gTWFrZSBzdXJlIG91ciBsYXlvdXQgaXMgdXAgdG8g
ZGF0ZSBiZWZvcmUgd2UgYWxsb3cgYSBxdWVyeSBvbiB0aGVzZSBhdHRyaWJ1dGVzLgogICAgIGlm
ICh1cGRhdGVMYXlvdXQpCiAgICAgICAgIG5vZGUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgp
OwotICAgICAgICAKKwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG5vZGUtPmNvbXB1dGVkU3R5
bGUoKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOwogICAgIGlm
ICghc3ZnU3R5bGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wZXJ0eUlEKSkgewogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Q2xpcFJ1bGU6CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdmdTdHlsZS0+Y2xpcFJ1bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3Bw
CmluZGV4IDZkNzJiMzUuLjZiNjIzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
VkdDU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3Bw
CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUoaW50IHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbjogICAvLyBhdXRvIHwgc1JHQiB8IGxpbmVhclJHQiB8IGlu
aGVyaXQKLSAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogIAor
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJzOgogICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVBdXRvIHx8IGlkID09IENTU1ZhbHVlU3JnYiB8fCBpZCA9PSBDU1NW
YWx1ZUxpbmVhcnJnYikKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMjI3LDcgKzIyNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1Zh
bHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKIAogICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNlIENTU1Byb3Bl
cnR5VmVjdG9yRWZmZWN0OiAvLyBub25lIHwgbm9uLXNjYWxpbmctc3Ryb2tlIHwgaW5oZXJpdAog
ICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lIHx8IGlkID09IENTU1ZhbHVlTm9uU2NhbGlu
Z1N0cm9rZSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggODdhODUyMS4uZGQ0ZTU2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTExLDcg
KzExMSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9wZXJ0eShpbnQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgIFNWR1JlbmRlclN0eWxlKiBzdmdzdHlsZSA9IG1fc3R5
bGUtPmFjY2Vzc1NWR1N0eWxlKCk7CiAgICAgdW5zaWduZWQgc2hvcnQgdmFsdWVUeXBlID0gdmFs
dWUtPmNzc1ZhbHVlVHlwZSgpOwotICAgIAorCiAgICAgYm9vbCBpc0luaGVyaXQgPSBtX3BhcmVu
dE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSU5IRVJJVDsKICAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lO
SVRJQUwgfHwgKCFtX3BhcmVudE5vZGUgJiYgdmFsdWVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSU5IRVJJVCk7CiAKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5U1ZHUHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChhbGlnbm1lbnRCYXNlbGluZSwgQWxpZ25tZW50
QmFzZWxpbmUpCiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRBbGln
bm1lbnRCYXNlbGluZSgqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTI5OSw4ICsyOTksOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5U1ZH
UHJvcGVydHkoaW50IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmaWxsT3BhY2l0eSwgRmlsbE9wYWNpdHkpCiAgICAgICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgICAgICBmbG9hdCBmID0gMC4wZjsgICAgCisKKyAgICAgICAgICAgIGZsb2F0IGYgPSAw
LjBmOwogICAgICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFKQogICAgICAgICAgICAgICAgIGYgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1
ZSgpIC8gMTAwLjBmOwpAQCAtMzE3LDggKzMxNyw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlTVkdQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIEhB
TkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0cm9rZU9wYWNpdHksIFN0cm9rZU9wYWNpdHkpCiAg
ICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgICAgICAgICBmbG9hdCBmID0gMC4wZjsgICAgCisKKyAgICAgICAgICAg
IGZsb2F0IGYgPSAwLjBmOwogICAgICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICAgICAgICAgIGYgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBmOwpAQCAtMzM1LDggKzMzNSw4IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlTVkdQcm9wZXJ0eShpbnQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BPcGFjaXR5LCBTdG9wT3Bh
Y2l0eSkKICAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgICAgIGZsb2F0IGYgPSAwLjBmOyAgICAKKworICAg
ICAgICAgICAgZmxvYXQgZiA9IDAuMGY7CiAgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2
ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICAgICAgZiA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgLyAxMDAuMGY7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgICAgIHMgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUo
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgc3Znc3R5bGUtPnNldE1hc2tlclJlc291cmNlKFNWR1VSSVJlZmVy
ZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBtX2VsZW1lbnQtPmRvY3Vt
ZW50KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01ODIsNyArNTgyLDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVNWR1Byb3BlcnR5KGludCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxk
IG5vdCBoYXZlIGEgc3ByZWFkIG9yIHN0eWxlCiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNw
cmVhZCk7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnN0eWxlKTsKLSAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgT3duUHRyPFNoYWRvd0RhdGE+IHNoYWRvd0RhdGEgPSBhZG9wdFB0
cihuZXcgU2hhZG93RGF0YSh4LCB5LCBibHVyLCAwLCBOb3JtYWwsIGZhbHNlLCBjb2xvci5pc1Zh
bGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgc3Znc3R5
bGUtPnNldFNoYWRvdyhzaGFkb3dEYXRhLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IDRhYjExMGMuLjI5Mjk3
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCkBAIC02Miw5ICs2Miw5
IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwotICAgIAorCiBzdGF0aWMgYm9vbCBodG1sQXR0cmlidXRlSGFzQ2FzZUlu
c2Vuc2l0aXZlVmFsdWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cik7CiAKIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzdHJpY3RQYXJz
aW5nKQpAQCAtMTc1LDggKzE3NSw4IEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjpjb2xsZWN0SWRl
bnRpZmllckhhc2hlcyhjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnCiAgICAgdW5z
aWduZWQqIGhhc2ggPSBpZGVudGlmaWVySGFzaGVzOwogICAgIHVuc2lnbmVkKiBlbmQgPSBpZGVu
dGlmaWVySGFzaGVzICsgbWF4aW11bUlkZW50aWZpZXJDb3VudDsKICAgICBDU1NTZWxlY3Rvcjo6
UmVsYXRpb24gcmVsYXRpb24gPSBzZWxlY3Rvci0+cmVsYXRpb24oKTsKLSAgICAKLSAgICAvLyBT
a2lwIHRoZSB0b3Btb3N0IHNlbGVjdG9yLiBJdCBpcyBoYW5kbGVkIHF1aWNrbHkgYnkgdGhlIHJ1
bGUgaGFzaGVzLiAgICAKKworICAgIC8vIFNraXAgdGhlIHRvcG1vc3Qgc2VsZWN0b3IuIEl0IGlz
IGhhbmRsZWQgcXVpY2tseSBieSB0aGUgcnVsZSBoYXNoZXMuCiAgICAgYm9vbCBza2lwT3ZlclN1
YnNlbGVjdG9ycyA9IHRydWU7CiAgICAgZm9yIChzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKICAg
ICAgICAgLy8gT25seSBjb2xsZWN0IGlkZW50aWZpZXJzIHRoYXQgbWF0Y2ggYW5jZXN0b3JzLgpA
QCAtMjA3LDI0ICsyMDcsMjQgQEAgc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcqIGxp
bmtBdHRyaWJ1dGUoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmlzTGluaygpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkp
OwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAg
ICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuICZlbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsKLSAgICAKKwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gJmVsZW1lbnQt
PmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAjZW5kaWYKLSAgICAKKwogICAg
IHJldHVybiAwOwogfQogCiBFSW5zaWRlTGluayBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxp
bmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVs
ZW1lbnQtPmlzTGluaygpKTsKLSAgICAKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogYXR0ciA9
IGxpbmtBdHRyaWJ1dGUoZWxlbWVudCk7CiAgICAgaWYgKCFhdHRyIHx8IGF0dHItPmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKQEAgLTI0MSwxMyArMjQxLDEzIEBAIEVJ
bnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxl
bWVudCogZWxlbWVudCkgY29uc3QKICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBJbnNpZGVVbnZpc2l0ZWRMaW5r
OwotICAgIAorCiAgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm4gSW5zaWRlVW52aXNpdGVkTGluazsKLSAgICAKKwogICAgIG1fbGlu
a3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmFkZChoYXNoKTsKLSAgICAKKwogI2lmIFVTRShQTEFU
Rk9STV9TVFJBVEVHSUVTKQogICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+dmlzaXRl
ZExpbmtTdHJhdGVneSgpLT5pc0xpbmtWaXNpdGVkKHBhZ2UsIGhhc2gsIG1fZG9jdW1lbnQtPmJh
c2VVUkwoKSwgKmF0dHIpID8gSW5zaWRlVmlzaXRlZExpbmsgOiBJbnNpZGVVbnZpc2l0ZWRMaW5r
OwogI2Vsc2UKQEAgLTI4OSw3ICsyODksNyBAQCBpbmxpbmUgYm9vbCBmYXN0Q2hlY2tTaW5nbGVT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KgogICAg
ICAgICB9CiAgICAgICAgIGlmICh0b3BDaGlsZE9yU3Vic2VsZWN0b3IpIHsKICAgICAgICAgICAg
IC8vIENoaWxkIG9yIHN1YnNlbGVjdG9yIGNoZWNrIGZhaWxlZC4KLSAgICAgICAgICAgIC8vIElm
IHRoZSBtYXRjaCBlbGVtZW50IGlzIG51bGwsIHRvcENoaWxkT3JTdWJzZWxlY3RvciB3YXMgYWxz
byB0aGUgdmVyeSB0b3Btb3N0IHNlbGVjdG9yIGFuZCBoYWQgdG8gbWF0Y2ggCisgICAgICAgICAg
ICAvLyBJZiB0aGUgbWF0Y2ggZWxlbWVudCBpcyBudWxsLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3Ig
d2FzIGFsc28gdGhlIHZlcnkgdG9wbW9zdCBzZWxlY3RvciBhbmQgaGFkIHRvIG1hdGNoCiAgICAg
ICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZWxlbWVudCB3ZSB3ZXJlIGNoZWNraW5nLgogICAgICAg
ICAgICAgaWYgKCF0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzA0LDEyICszMDQsMTIgQEAgaW5saW5lIGJvb2wgZmFz
dENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3Qg
RWxlbWVudCoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBib29sIGNoZWNrQ2xhc3NW
YWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpIAoraW5saW5lIGJvb2wgY2hlY2tDbGFzc1ZhbHVlKGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0ltcGwqIHZhbHVlLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikKIHsKICAgICByZXR1cm4gZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmNsYXNzTmFtZXMoKS5jb250YWlucyh2YWx1
ZSk7CiB9CiAKLWlubGluZSBib29sIGNoZWNrSURWYWx1ZShjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIAoraW5saW5l
IGJvb2wgY2hlY2tJRFZhbHVlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIEF0b21pY1N0cmluZ0lt
cGwqIHZhbHVlLCBjb25zdCBRdWFsaWZpZWROYW1lJikKIHsKICAgICByZXR1cm4gZWxlbWVudC0+
aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSA9PSB2YWx1
ZTsKIH0KQEAgLTMyMyw3ICszMjMsNyBAQCBpbmxpbmUgYm9vbCBjaGVja1RhZ1ZhbHVlKGNvbnN0
IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgUXVhbGlmaWVkTmFtZQogewogICAg
IHJldHVybiB0cnVlOwogfQotICAgIAorCiB9CiAKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdENoZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5
cGUpIGNvbnN0CkBAIC0zNTgsMTIgKzM1OCwxMiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZmFz
dENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZQog
ICAgIGNvbnN0IEVsZW1lbnQqIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCA9IDA7
CiAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlvbigpID09IENTU1NlbGVjdG9yOjpDaGlsZCB8fCBz
ZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCiAgICAgICAg
IHRvcENoaWxkT3JTdWJzZWxlY3RvciA9IHNlbGVjdG9yOwotICAgIAorCiAgICAgaWYgKHNlbGVj
dG9yLT5yZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKICAgICAgICAgZWxl
bWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICAKKwogICAgIHNlbGVjdG9yID0g
c2VsZWN0b3ItPnRhZ0hpc3RvcnkoKTsKLSAgICAKKwogICAgIC8vIFdlIGtub3cgdGhpcyBjb21w
b3VuZCBzZWxlY3RvciBoYXMgZGVzY2VuZGFudCwgY2hpbGQgYW5kIHN1YnNlbGVjdG9yIGNvbWJp
bmF0b3JzIG9ubHkgYW5kIGFsbCBjb21wb25lbnRzIGFyZSBzaW1wbGUuCiAgICAgd2hpbGUgKHNl
bGVjdG9yKSB7CiAgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPm1fbWF0Y2gpIHsKQEAgLTQ0Miwx
MCArNDQyLDEwIEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICAgICAvLyBmaXJzdCBzZWxlY3Rv
ciBoYXMgdG8gbWF0Y2gKICAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWlj
UHNldWRvLCBpc1N1YlNlbGVjdG9yLCB2aXNpdGVkTWF0Y2hUeXBlLCBlbGVtZW50U3R5bGUsIGVs
ZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsK
LSAgICAKKwogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1hdGNoCiAg
ICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsLT5yZWxhdGlvbigpOwotICAg
IAorCiAgICAgLy8gUHJlcGFyZSBuZXh0IHNlbAogICAgIHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgp
OwogICAgIGlmICghc2VsKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwKICAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhpcyBzZWxlY3RvciBpcyBpcnJlbGV2YW50IGZv
ciB0aGUgcHNldWRvU3R5bGUKICAgICAgICAgaWYgKG1fcHNldWRvU3R5bGUgIT0gTk9QU0VVRE8g
JiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNldWRvKQogICAgICAgICAgICAgcmV0dXJuIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5OwotICAgIAorCiAgICAgICAgIC8vIERpc2FibGUgOnZpc2l0
ZWQgbWF0Y2hpbmcgd2hlbiB3ZSBzZWUgdGhlIGZpcnN0IGxpbmsgb3IgdHJ5IHRvIG1hdGNoIGFu
eXRoaW5nIGVsc2UgdGhhbiBhbiBhbmNlc3RvcnMuCiAgICAgICAgIGlmICghaXNTdWJTZWxlY3Rv
ciAmJiAoZS0+aXNMaW5rKCkgfHwgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50
ICYmIHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpDaGlsZCkpKQogICAgICAgICAgICAgdmlzaXRl
ZE1hdGNoVHlwZSA9IFZpc2l0ZWRNYXRjaERpc2FibGVkOwpAQCAtNDczLDcgKzQ3Myw3IEBAIFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwKICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6IAorICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OkNoaWxkOgogICAgICAgICB7CiAgICAgICAgICAgICBDb250YWlu
ZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5p
c0VsZW1lbnROb2RlKCkpCkBAIC01MzEsNyArNTMxLDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2Vs
LAogICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRv
LCBmYWxzZSwgdmlzaXRlZE1hdGNoVHlwZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAg
ICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiB9CiAKQEAgLTU0NSw3ICs1NDUsNyBA
QCBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4qIGNyZWF0ZUh0bWxDYXNlSW5zZW5z
aXRpdmVBdHRyaWJ1dGVzU2V0KCkKICAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGF0dHJpYnV0
ZXMgaW4gSFRNTCA0LjAxIHdpdGggdmFsdWVzIG1hcmtlZCBhcyAiW0NJXSIgb3IgY2FzZS1pbnNl
bnNpdGl2ZQogICAgIC8vIE1vemlsbGEgdHJlYXRzIGFsbCBvdGhlciB2YWx1ZXMgYXMgY2FzZS1z
ZW5zaXRpdmUsIHRodXMgc28gZG8gd2UuCiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4q
IGF0dHJTZXQgPSBuZXcgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj47Ci0gICAgCisKICAgICBh
ZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCBhY2NlcHRfY2hhcnNldEF0dHIpOwogICAgIGFkZExv
Y2FsTmFtZVRvU2V0KGF0dHJTZXQsIGFjY2VwdEF0dHIpOwogICAgIGFkZExvY2FsTmFtZVRvU2V0
KGF0dHJTZXQsIGFsaWduQXR0cik7CkBAIC01OTEsNyArNTkxLDcgQEAgc3RhdGljIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+KiBjcmVhdGVIdG1sQ2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlc1Nl
dCgpCiAgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmFsaWduQXR0cik7CiAgICAgYWRk
TG9jYWxOYW1lVG9TZXQoYXR0clNldCwgdmFsdWV0eXBlQXR0cik7CiAgICAgYWRkTG9jYWxOYW1l
VG9TZXQoYXR0clNldCwgdmxpbmtBdHRyKTsKLSAgICAKKwogICAgIHJldHVybiBhdHRyU2V0Owog
fQogCkBAIC02MDcsNyArNjA3LDcgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVz
KEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0KICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlSXRlbS0+dmFsdWUoKTsKICAgICBpZiAo
dmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIHN3aXRj
aCAobWF0Y2gpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKICAgICAgICAgaWYgKGNh
c2VTZW5zaXRpdmUgPyBzZWxlY3RvclZhbHVlICE9IHZhbHVlIDogIWVxdWFsSWdub3JpbmdDYXNl
KHNlbGVjdG9yVmFsdWUsIHZhbHVlKSkKQEAgLTYxOCw3ICs2MTgsNyBAQCBzdGF0aWMgYm9vbCBh
dHRyaWJ1dGVWYWx1ZU1hdGNoZXMoQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtLCBDU1NTZWxlY3Rv
cjo6TWF0Y2ggbQogICAgICAgICAgICAgLy8gSWdub3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxl
Y3RvcnMgY29udGFpbmluZyBzcGFjZXMKICAgICAgICAgICAgIGlmIChzZWxlY3RvclZhbHVlLmNv
bnRhaW5zKCcgJykgfHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0
U2VhcmNoQXQgPSAwOwogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAg
ICBzaXplX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbGVjdG9yVmFsdWUsIHN0YXJ0U2VhcmNo
QXQsIGNhc2VTZW5zaXRpdmUpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIHN0YXRpYyBib29sIGF0dHJp
YnV0ZVZhbHVlTWF0Y2hlcyhBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0sIENTU1NlbGVjdG9yOjpN
YXRjaCBtCiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRTdHIgPT0gdmFsdWUubGVuZ3RoKCkg
fHwgdmFsdWVbZW5kU3RyXSA9PSAnICcpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsg
Ly8gV2UgZm91bmQgYSBtYXRjaC4KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
CisKICAgICAgICAgICAgICAgICAvLyBObyBtYXRjaC4gS2VlcCBsb29raW5nLgogICAgICAgICAg
ICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7CiAgICAgICAgICAgICB9CkBAIC02
NjEsNyArNjYxLDcgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKEF0dHJpYnV0
ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0KICAgICBkZWZhdWx0OgogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjY5
LDE0ICs2NjksMTQgQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXQKIHsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQXR0cmli
dXRlKiBhdHRyaWJ1dGVJdGVtID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAg
ICAgCisKICAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmF0dHJpYnV0ZU5hbWVNYXRjaGVz
KGF0dHJpYnV0ZUl0ZW0sIHNlbGVjdG9yQXR0cikpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyhhdHRyaWJ1dGVJdGVt
LCBtYXRjaCwgc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY4NSwy
NiArNjg1LDI2IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgQVNTRVJUKGUpOwogICAg
IGlmICghU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGUsIHNlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKwogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNs
YXNzKQogICAgICAgICByZXR1cm4gZS0+aGFzQ2xhc3MoKSAmJiBzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4oZSktPmNsYXNzTmFtZXMoKS5jb250YWlucyhzZWwtPnZhbHVlKCkpOwotICAgIAor
CiAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCiAgICAgICAgIHJldHVy
biBlLT5oYXNJRCgpICYmIGUtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsLT52YWx1ZSgp
OwotICAgIAorCiAgICAgaWYgKHNlbC0+aXNBdHRyaWJ1dGVTZWxlY3RvcigpKSB7CiAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWwtPmF0dHJpYnV0ZSgpOwotICAgICAgICAK
KwogICAgICAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlLT5hdHRyaWJ1dGVzKHRydWUp
OwogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAorCiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50SXNIVE1M
IHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7Ci0gICAgICAg
IAorCiAgICAgICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhhdHRyaWJ1dGVzLCBzdGF0aWNf
Y2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNlbC0+bV9tYXRjaCksIGF0dHIsIHNlbC0+dmFsdWUo
KSwgY2FzZVNlbnNpdGl2ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsK
ICAgICAgICAgLy8gSGFuZGxlIDpub3QgdXAgZnJvbnQuCiAgICAgICAgIGlmIChzZWwtPnBzZXVk
b1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvTm90KSB7CkBAIC03MjgsNyArNzI4LDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwg
RWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGlmIChzZWwtPnBzZXVkb1R5cGUo
KSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvV2luZG93SW5hY3RpdmUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuICFtX2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgp
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE5vcm1hbCBlbGVtZW50IHBzZXVk
byBjbGFzcyBjaGVja2luZy4KICAgICAgICAgc3dpdGNoIChzZWwtPnBzZXVkb1R5cGUoKSkgewog
ICAgICAgICAgICAgLy8gUHNldWRvIGNsYXNzZXM6CkBAIC04NDgsNyArODQ4LDcgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxk
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYm9vbCBsYXN0Q2hpbGQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBlLT5wcmV2aW91c1NpYmxp
bmcoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAobiAmJiAhbi0+aXNFbGVtZW50Tm9kZSgpKQog
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CkBAIC05MzAsNyAr
OTMwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29s
bGVjdGluZ1J1bGVzT25seSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hp
bGRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CkBAIC05MzksNyArOTM5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAo
c2VsLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgfQpAQCAtOTU2LDEzICs5NTYsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQm
IGQKICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAg
IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7
CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGVsZW1lbnRT
dHlsZSA/IGVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlGb3J3YXJkUG9zaXRpb25h
bFJ1bGVzKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAgICAgaWYgKHNlbC0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTEwNTksNyArMTA1OSw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQq
IGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1v
ZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCi0gICAg
ICAgICAgICAvLyBocmVmIGFuZCAqOmFjdGl2ZSBzaG91bGQgbm90IG1hdGNoIGFueXRoaW5nLiAK
KyAgICAgICAgICAgIC8vIGhyZWYgYW5kICo6YWN0aXZlIHNob3VsZCBub3QgbWF0Y2ggYW55dGhp
bmcuCiAgICAgICAgICAgICBpZiAobV9zdHJpY3RQYXJzaW5nIHx8IGlzU3ViU2VsZWN0b3IgfHwg
KHNlbC0+aGFzVGFnKCkgJiYgIWUtPmhhc1RhZ05hbWUoYVRhZykpIHx8IGUtPmlzTGluaygpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudFN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7CkBAIC0xMDg2LDcg
KzEwODYsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgaWYgKCFlIHx8
ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIHJldHVybiBlLT5pc1RleHRGb3JtQ29udHJvbCgpICYmIGUtPmlzUmVh
ZE9ubHlGb3JtQ29udHJvbCgpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFk
V3JpdGU6IAorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9SZWFkV3JpdGU6CiAgICAg
ICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250
cm9sKCkgJiYgIWUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOwpAQCAtMTE1Myw5ICsxMTUzLDkg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIH0KICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxTY3JlZW46
Ci0gICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBmdWxsc2NyZWVuIHN0
YXRlLCBhbmQgdGhlIGRvY3VtZW50J3MgY3VycmVudCBmdWxsc2NyZWVuIAotICAgICAgICAgICAg
Ly8gZWxlbWVudCBpcyBhbiBlbGVtZW50IGluIHRoZSBkb2N1bWVudCwgdGhlICdmdWxsLXNjcmVl
bicgcHNldWRvY2xhc3MgYXBwbGllcyB0byAKLSAgICAgICAgICAgIC8vIHRoYXQgZWxlbWVudC4g
QWxzbywgYW4gPGlmcmFtZT4sIDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudCB3aG9zZSBjaGls
ZCBicm93c2luZyAKKyAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhlIGZ1
bGxzY3JlZW4gc3RhdGUsIGFuZCB0aGUgZG9jdW1lbnQncyBjdXJyZW50IGZ1bGxzY3JlZW4KKyAg
ICAgICAgICAgIC8vIGVsZW1lbnQgaXMgYW4gZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQsIHRoZSAn
ZnVsbC1zY3JlZW4nIHBzZXVkb2NsYXNzIGFwcGxpZXMgdG8KKyAgICAgICAgICAgIC8vIHRoYXQg
ZWxlbWVudC4gQWxzbywgYW4gPGlmcmFtZT4sIDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudCB3
aG9zZSBjaGlsZCBicm93c2luZwogICAgICAgICAgICAgLy8gY29udGV4dCdzIERvY3VtZW50IGlz
IGluIHRoZSBmdWxsc2NyZWVuIHN0YXRlIGhhcyB0aGUgJ2Z1bGwtc2NyZWVuJyBwc2V1ZG9jbGFz
cyBhcHBsaWVkLgogICAgICAgICAgICAgaWYgKGUtPmlzRnJhbWVFbGVtZW50QmFzZSgpICYmIHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZSktPmNvbnRhaW5zRnVsbFNjcmVlbkVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExNjksNyArMTE2OSw3
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBz
ZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0Z1bGxTY3JlZW5BbmNlc3RvcjoKICAgICAgICAgICAgIHJldHVybiBlLT5jb250YWluc0Z1
bGxTY3JlZW5FbGVtZW50KCk7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Z1bGxT
Y3JlZW5Eb2N1bWVudDoKLSAgICAgICAgICAgIC8vIFdoaWxlIGEgRG9jdW1lbnQgaXMgaW4gdGhl
IGZ1bGxzY3JlZW4gc3RhdGUsIHRoZSAnZnVsbC1zY3JlZW4tZG9jdW1lbnQnIHBzZXVkb2NsYXNz
IGFwcGxpZXMgCisgICAgICAgICAgICAvLyBXaGlsZSBhIERvY3VtZW50IGlzIGluIHRoZSBmdWxs
c2NyZWVuIHN0YXRlLCB0aGUgJ2Z1bGwtc2NyZWVuLWRvY3VtZW50JyBwc2V1ZG9jbGFzcyBhcHBs
aWVzCiAgICAgICAgICAgICAvLyB0byBhbGwgZWxlbWVudHMgb2YgdGhhdCBEb2N1bWVudC4KICAg
ICAgICAgICAgIGlmICghZS0+ZG9jdW1lbnQoKS0+d2Via2l0SXNGdWxsU2NyZWVuKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTE5NiwxMiArMTE5NiwxMiBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50
KiBlLCBQc2V1ZG9JZCYgZAogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnQpIHsKICAgICAgICAgaWYgKCFlbGVtZW50U3R5bGUgJiYgIW1faXNDb2xsZWN0
aW5nUnVsZXNPbmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKICAgICAgICAgICAgIG1f
aGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiBlLT5z
aGFkb3dQc2V1ZG9JZCgpID09IHNlbC0+dmFsdWUoKTsKICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9JZCA9IENTU1NlbGVjdG9yOjpwc2V1ZG9JZChzZWwtPnBz
ZXVkb1R5cGUoKSk7CiAgICAgICAgIGlmIChwc2V1ZG9JZCA9PSBGSVJTVF9MRVRURVIpIHsKICAg
ICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBlLT5kb2N1bWVudCgpKQpAQCAtMTIx
OCwxNSArMTIxOCwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1
ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbgogewogICAgIFJlbmRlclNj
cm9sbGJhciogc2Nyb2xsYmFyID0gUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJl
c29sdmUoKTsKICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSBSZW5kZXJTY3JvbGxiYXI6OnBhcnRG
b3JTdHlsZVJlc29sdmUoKTsKLSAgICAKKwogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IGhhY2sgZm9yIHJlc2l6ZXJzIGFuZCBzY3JvbGxiYXIgY29ybmVycy4gRXZlbnR1YWxseSA6
d2luZG93LWluYWN0aXZlIHNob3VsZCBiZWNvbWUgYSByZWFsCiAgICAgLy8gcHNldWRvIGNsYXNz
IGFuZCBqdXN0IGFwcGx5IHRvIGV2ZXJ5dGhpbmcuCiAgICAgaWYgKHNlbC0+cHNldWRvVHlwZSgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkKICAgICAgICAgcmV0dXJuICFt
X2RvY3VtZW50LT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwotICAgIAor
CiAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IEFTU0VSVChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKICAgICBz
d2l0Y2ggKHNlbC0+cHNldWRvVHlwZSgpKSB7CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
RW5hYmxlZDoKQEAgLTEyNjMsNyArMTI2Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVj
a1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uCiAg
ICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3
YXJkQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9FbmQ6CiAgICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25F
bmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJk
VHJhY2tQYXJ0OwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogCisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRG91YmxlQnV0dG9uOgogICAgICAgICB7CiAgICAg
ICAgICAgICBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3Jv
bGxiYXItPnRoZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChwYXJ0
ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0
IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCkKQEAgLTEyNzEsNyArMTI3MSw3IEBAIGJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWws
IFBzZXVkb0lkJikgY29uCiAgICAgICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uRW5kUGFy
dCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZFRyYWNr
UGFydCkKICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxi
YXJCdXR0b25zRG91YmxlRW5kIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9u
c0RvdWJsZUJvdGg7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gCisgICAg
ICAgIH0KICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TaW5nbGVCdXR0b246CiAgICAgICAg
IHsKICAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9uc1BsYWNlbWVu
dCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwpAQCAtMTMzNiw3ICsx
MzM2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGMKIHVuc2lnbmVkIFNlbGVjdG9yQ2hlY2tl
cjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7
CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IE1hdGNoQWxsOwotICAgIAorCiAgICAgLy8g
U3RhdGljYWxseSBkZXRlcm1pbmUgaWYgdGhpcyBzZWxlY3RvciB3aWxsIG1hdGNoIGEgbGluayBp
biB2aXNpdGVkLCB1bnZpc2l0ZWQgb3IgYW55IHN0YXRlLCBvciBuZXZlci4KICAgICAvLyA6dmlz
aXRlZCBuZXZlciBtYXRjaGVzIG90aGVyIGVsZW1lbnRzIHRoYW4gdGhlIGlubmVybW9zdCBsaW5r
IGVsZW1lbnQuCiAgICAgZm9yICg7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdI
aXN0b3J5KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCBmNTliNzRh
Li43NjBiYTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC02NywxMCAr
NjcsMTAgQEAgcHVibGljOgogICAgIEVJbnNpZGVMaW5rIGRldGVybWluZUxpbmtTdGF0ZShFbGVt
ZW50KikgY29uc3Q7CiAgICAgdm9pZCBhbGxWaXNpdGVkU3RhdGVDaGFuZ2VkKCk7CiAgICAgdm9p
ZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKExpbmtIYXNoIHZpc2l0ZWRIYXNoKTsKLSAgICAKKwogICAg
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICBi
b29sIHN0cmljdFBhcnNpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmljdFBhcnNpbmc7IH0KLSAg
ICAKKwogICAgIGJvb2wgaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9p
c0NvbGxlY3RpbmdSdWxlc09ubHk7IH0KICAgICB2b2lkIHNldENvbGxlY3RpbmdSdWxlc09ubHko
Ym9vbCBiKSB7IG1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ID0gYjsgfQogCkBAIC03OSwxNCArNzks
MTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50czsgfQogICAgIHZvaWQgY2xlYXJI
YXNVbmtub3duUHNldWRvRWxlbWVudHMoKSB7IG1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0g
ZmFsc2U7IH0KLSAgICAKKwogICAgIHN0YXRpYyBib29sIHRhZ01hdGNoZXMoY29uc3QgRWxlbWVu
dCosIGNvbnN0IENTU1NlbGVjdG9yKik7CiAgICAgc3RhdGljIGJvb2wgYXR0cmlidXRlTmFtZU1h
dGNoZXMoY29uc3QgQXR0cmlidXRlKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHN0YXRp
YyBib29sIGlzQ29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwog
ICAgIGJvb2wgbWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCopIGNvbnN0Owog
ICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0
IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciopOwogICAgIHN0YXRpYyBib29sIGNoZWNrRXhh
Y3RBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdG9y
QXR0cmlidXRlTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nSW1wbCogdmFsdWUpOwotICAgIAorCiAg
ICAgZW51bSBMaW5rTWF0Y2hNYXNrIHsgTWF0Y2hMaW5rID0gMSwgTWF0Y2hWaXNpdGVkID0gMiwg
TWF0Y2hBbGwgPSBNYXRjaExpbmsgfCBNYXRjaFZpc2l0ZWQgfTsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgZGV0ZXJtaW5lTGlua01hdGNoVHlwZShjb25zdCBDU1NTZWxlY3RvciopOwogCkBAIC05NCw3
ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9y
KiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3Is
IFZpc2l0ZWRNYXRjaFR5cGUsIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJl
bnRTdHlsZSkgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1Nl
bGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgIHN0YXRpYyBib29s
IGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKLSAgICAKKwogICAgIGJvb2wgZmFzdENo
ZWNrUmlnaHRtb3N0U2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kiwg
VmlzaXRlZE1hdGNoVHlwZSkgY29uc3Q7CiAgICAgYm9vbCBjb21tb25Qc2V1ZG9DbGFzc1NlbGVj
dG9yTWF0Y2hlcyhjb25zdCBFbGVtZW50KiwgY29uc3QgQ1NTU2VsZWN0b3IqLCBWaXNpdGVkTWF0
Y2hUeXBlKSBjb25zdDsKIApAQCAtMTMwLDcgKzEzMCw3IEBAIGlubGluZSBFSW5zaWRlTGluayBT
ZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25z
dAogICAgICAgICByZXR1cm4gTm90SW5zaWRlTGluazsKICAgICByZXR1cm4gZGV0ZXJtaW5lTGlu
a1N0YXRlU2xvd0Nhc2UoZWxlbWVudCk7CiB9Ci0gICAgCisKIHRlbXBsYXRlIDx1bnNpZ25lZCBt
YXhpbXVtSWRlbnRpZmllckNvdW50PgogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0CiB7
CkBAIC0xNDEsNyArMTQxLDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0UmVq
ZWN0U2VsZWN0b3IoY29uc3QgdW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQotICAgIAorCiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6Omlz
Q29tbW9uUHNldWRvQ2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7
CiAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykK
QEAgLTE1OSw3ICsxNTksNyBAQCBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6Om1hdGNoZXNG
b2N1c1BzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNvbgogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICByZXR1cm4gZWxlbWVudC0+Zm9jdXNlZCgpICYmIGlzRnJhbWVGb2N1c2Vk
KGVsZW1lbnQpOwogfQotICAgIAorCiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OnRhZ01h
dGNoZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
KQogewogICAgIGlmICghc2VsZWN0b3ItPmhhc1RhZygpKQpAQCAtMTcwLDE0ICsxNzAsMTQgQEAg
aW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjp0YWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IENTU1NlbGVjdG8KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSA9IHNlbGVjdG9yLT50YWcoKS5uYW1lc3BhY2VVUkkoKTsKICAgICByZXR1cm4gbmFtZXNw
YWNlVVJJID09IHN0YXJBdG9tIHx8IG5hbWVzcGFjZVVSSSA9PSBlbGVtZW50LT5uYW1lc3BhY2VV
UkkoKTsKIH0KLSAgICAKKwogaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjphdHRyaWJ1dGVO
YW1lTWF0Y2hlcyhjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lKQogewogICAgIGlmIChzZWxlY3RvckF0dHJpYnV0ZU5h
bWUubG9jYWxOYW1lKCkgIT0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBzZWxlY3RvckF0dHJpYnV0ZU5hbWUucHJlZml4KCkgPT0gc3Rh
ckF0b20gfHwgc2VsZWN0b3JBdHRyaWJ1dGVOYW1lLm5hbWVzcGFjZVVSSSgpID09IGF0dHJpYnV0
ZS0+bmFtZXNwYWNlVVJJKCk7CiB9Ci0gICAgCisKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tFeGFjdEF0dHJpYnV0ZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBzZWxlY3RvckF0dHJpYnV0ZU5hbWUsIGNvbnN0IEF0b21pY1N0cmluZ0ltcGwq
IHZhbHVlKQogewogICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gZWxlbWVudC0+YXR0
cmlidXRlTWFwKCk7CkBAIC0xOTEsNyArMTkxLDcgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja0V4YWN0QXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFEK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAorCiBpbmxpbmUgYm9vbCBTZWxlY3Rv
ckNoZWNrZXI6OmZhc3RDaGVja1JpZ2h0bW9zdEF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBpZiAoc2Vs
ZWN0b3ItPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0IHx8IHNlbGVjdG9yLT5tX21hdGNo
ID09IENTU1NlbGVjdG9yOjpTZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3BwCmluZGV4IGE3YjUz
NmIuLmE0MmQ3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJhc2UuY3BwCkBAIC03Miw3ICs3Miw3IEBA
IEtVUkwgU3R5bGVCYXNlOjpiYXNlVVJMKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHNoZWV0LT5m
aW5hbFVSTCgpOwogICAgIGlmIChzaGVldC0+cGFyZW50KCkpCiAgICAgICAgIHJldHVybiBzaGVl
dC0+cGFyZW50KCktPmJhc2VVUkwoKTsKLSAgICBpZiAoIXNoZWV0LT5vd25lck5vZGUoKSkgCisg
ICAgaWYgKCFzaGVldC0+b3duZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiBLVVJMKCk7CiAgICAg
cmV0dXJuIHNoZWV0LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlTWVkaWEuY3BwCmluZGV4IGUwZmY0NDAuLjkwYjU3NDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVNZWRpYS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlTWVkaWEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmgKaW5kZXggMzk4YTBi
MS4uMjM5YzM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5oCkBAIC0yMSw3ICsyMSw3IEBACiAg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgU3R5bGVNZWRpYV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2hlZXRMaXN0LmNwcAppbmRleCAyYzkwMjU4Li5iYmVmZDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgSFRNTFN0eWxlRWxlbWVu
dCogU3R5bGVTaGVldExpc3Q6OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiAgICAgLy8gIyMjIEJhZCBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHJldHVybnMgYSBzaW5nbGUg
ZWxlbWVudCAoYXJlIElEcyBhbHdheXMgdW5pcXVlPykKICAgICAvLyBhbmQgZG9lc24ndCBsb29r
IGZvciBuYW1lIGF0dHJpYnV0ZS4KICAgICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlk
cyBpcyBnb29kIHByYWN0aWNlIGFueXdheSA7KQotICAgIAorCiAgICAgRWxlbWVudCogZWxlbWVu
dCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChuYW1lKTsKICAgICBpZiAoZWxlbWVudCAmJiBlbGVt
ZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmgK
aW5kZXggYTAxOTY5MS4uNGViN2Q2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXRMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmgK
QEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZG9jOwog
ICAgIH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBTdHlsZVNoZWV0TGlzdChEb2N1bWVudCopOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcAppbmRleCBiZjFj
OTU2Li4yNTA1ODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgpAQCAtODQsNyArODQsNyBAQCBTdHJpbmcgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OmNzc1RleHQoKSBjb25zdAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiByZXN1bHQgKyBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKSArICIpIjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaAppbmRleCA4ZDZl
ZTgyLi5kNGQwOGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUu
aApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFdlYktp
dENTU0ZpbHRlclZhbHVlX2gKQEAgLTYwLDkgKzYwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
fldlYktpdENTU0ZpbHRlclZhbHVlKCk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3Q7Ci0gCisKICAgICBGaWx0ZXJPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZShGaWx0ZXJPcGVyYXRpb25UeXBlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAppbmRleCA4ZjNkNjc2Li5jZDZmZDYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcApAQCAtMjAsNyArMjAsNyBA
QAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC03MCwxMSAr
NzAsMTEgQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnBhcnNlS2V5U3RyaW5nKGNvbnN0
IFN0cmluZyYgcywgVmVjdG9yPGZsb2F0PiYga2V5cykKICAgICBrZXlzLmNsZWFyKCk7CiAgICAg
VmVjdG9yPFN0cmluZz4gc3RyaW5nczsKICAgICBzLnNwbGl0KCcsJywgc3RyaW5ncyk7Ci0gICAg
CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZ3Muc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgZmxvYXQga2V5ID0gLTE7CiAgICAgICAgIFN0cmluZyBjdXIgPSBzdHJpbmdzW2ldLnN0
cmlwV2hpdGVTcGFjZSgpOwotICAgIAorCiAgICAgICAgIC8vIEZvciBub3cgdGhlIHN5bnRheCBN
VVNUIGJlICd4eHglJyBvciAnZnJvbScgb3IgJ3RvJywgd2hlcmUgeHh4IGlzIGEgbGVnYWwgZmxv
YXRpbmcgcG9pbnQgbnVtYmVyCiAgICAgICAgIGlmIChjdXIgPT0gImZyb20iKQogICAgICAgICAg
ICAga2V5ID0gMDsKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OnBhcnNlS2V5U3RyaW5nKGNvbnN0IFN0cmluZyYgcywgVmVjdG9yPGZsb2F0PiYga2V5cykKICAg
ICAgICAgICAgIGlmIChrID49IDAgJiYgayA8PSAxMDApCiAgICAgICAgICAgICAgICAga2V5ID0g
ay8xMDA7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGtleSA8IDApIHsKICAg
ICAgICAgICAgIGtleXMuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAppbmRleCBiZGJlYTYxLi5lZmNhZjI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCkBAIC0yMCw3ICsy
MCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlX2gKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGtleVRleHQoKSBj
b25zdCAgICAgICAgICAgICAgeyByZXR1cm4gbV9rZXk7IH0KICAgICB2b2lkIHNldEtleVRleHQo
Y29uc3QgU3RyaW5nJiBzKSAgICB7IG1fa2V5ID0gczsgfQotICAgIAorCiAgICAgdm9pZCBnZXRL
ZXlzKFZlY3RvcjxmbG9hdD4mIGtleXMpIGNvbnN0ICAgeyBwYXJzZUtleVN0cmluZyhtX2tleSwg
a2V5cyk7IH0KIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KQEAgLTYwLDE5ICs2MCwxOSBAQCBwdWJsaWM6CiAK
ICAgICAvLyBOb3QgcGFydCBvZiB0aGUgQ1NTT00KICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJp
bmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZhbHNlKTsKLSAgICAKKwogICAgIHZvaWQgc2V0RGVj
bGFyYXRpb24oUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4pOwogCiAgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qICAgICAgICAgZGVjbGFyYXRpb24oKSAgICAgICB7
IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qICAgZGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0g
ICAgCisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzS2V5ZnJhbWVSdWxlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1bGUKICAgICB2aXJ0
dWFsIENTU1J1bGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBXRUJLSVRfS0VZRlJBTUVfUlVM
RTsgfQogCiAgICAgc3RhdGljIHZvaWQgcGFyc2VLZXlTdHJpbmcoY29uc3QgU3RyaW5nJiBzLCBW
ZWN0b3I8ZmxvYXQ+JiBrZXlzKTsKLSAgICAKKwogICAgIFdlYktpdENTU0tleWZyYW1lUnVsZShD
U1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBtX3N0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lc1J1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
c1J1bGUuY3BwCmluZGV4IGI3YjM3M2MuLmUxNzFiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgpAQCAtNTgsNyArNTgsNyBAQCBTdHJp
bmcgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6bmFtZSgpIGNvbnN0CiB2b2lkIFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIG1fbmFtZSA9
IG5hbWU7Ci0gICAgCisKICAgICAvLyBTaW5jZSB0aGUgbmFtZSBpcyB1c2VkIGluIHRoZSBrZXlm
cmFtZSBtYXAgbGlzdCBpbiBDU1NTdHlsZVNlbGVjdG9yLCB3ZSBuZWVkCiAgICAgLy8gdG8gcmVj
b21wdXRlIHRoZSBzdHlsZSBzaGVldCB0byBnZXQgdGhlIHVwZGF0ZWQgbmFtZS4KICAgICBpZiAo
c3R5bGVzaGVldCgpKQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1
bGU6OmFwcGVuZChXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIHJ1bGUpCiAKICAgICBtX2xzdENTU1J1
bGVzLT5hcHBlbmQocnVsZSk7CiAgICAgcnVsZS0+c2V0UGFyZW50KHRoaXMpOwotICAgIAorCiAg
ICAgaWYgKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHJ1bGUtPnN0eWxlKCkp
CiAgICAgICAgIHN0eWxlLT5zZXRQYXJlbnQodGhpcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0tleWZyYW1lc1J1bGUuaAppbmRleCAwZjViN2FjLi5lODdjYWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKQEAgLTIwLDcgKzIwLDcg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
X2gKQEAgLTUzLDEyICs1MywxMiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICAKKwogICAgIC8vIFRoaXMg
dmVyc2lvbiBvZiBzZXROYW1lIGRvZXMgbm90IGNhbGwgc3R5bGVTaGVldENoYW5nZWQgdG8gYXZv
aWQKICAgICAvLyB1bm5lY2Vzc2FyeSB3b3JrLiBJdCBhc3N1bWVzIGNhbGxlcnMgd2lsbCBlaXRo
ZXIgbWFrZSB0aGF0IGNhbGwKICAgICAvLyB0aGVtc2VsdmVzLCBvciBrbm93IHRoYXQgaXQgd2ls
bCBnZXQgY2FsbGVkIGxhdGVyLgogICAgIHZvaWQgc2V0TmFtZUludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLSAgICB7ICAgCisgICAgewogICAgICAgICBtX25hbWUgPSBBdG9taWNTdHJpbmco
bmFtZSk7CiAgICAgfQogCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBD
U1NSdWxlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FU19SVUxFOyB9
CiAKICAgICBpbnQgZmluZFJ1bGVJbmRleChjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7Ci0gICAg
CisKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1fbHN0Q1NTUnVsZXM7CiAgICAgQXRvbWljU3Ry
aW5nIG1fbmFtZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmluZGV4
IDI2ZmUyODYuLmY2MTcxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3Bw
CkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKQEAgLTQxLDcgKzQxLDcgQEAgV2ViS2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiB7CiB9CiAKLVdlYktpdENTU01hdHJpeDo6
V2ViS2l0Q1NTTWF0cml4KGNvbnN0IFN0cmluZyYgcywgRXhjZXB0aW9uQ29kZSYgZWMpIAorV2Vi
S2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgoY29uc3QgU3RyaW5nJiBzLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBzZXRNYXRyaXhWYWx1ZShzLCBlYyk7CiB9CkBAIC01NCw3ICs1NCw3
IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0
cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZURlY2xhcmF0aW9uID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZSgpOwogICAgIGlmIChDU1NQYXJzZXI6OnBhcnNlVmFsdWUoc3R5bGVEZWNsYXJhdGlv
bi5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIHN0cmluZywgdHJ1ZSwgdHJ1ZSkp
IHsKLSAgICAgICAgLy8gQ29udmVydCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNhbiBm
YWlsIGlmIGEgcHJvcGVydHkgCisgICAgICAgIC8vIENvbnZlcnQgdG8gVHJhbnNmb3JtT3BlcmF0
aW9ucy4gVGhpcyBjYW4gZmFpbCBpZiBhIHByb3BlcnR5CiAgICAgICAgIC8vIHJlcXVpcmVzIHN0
eWxlIChpLmUuLCBwYXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBXZWJLaXRD
U1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBDb252ZXJ0IHRyYW5zZm9ybSBv
cGVyYXRpb25zIHRvIGEgVHJhbnNmb3JtYXRpb25NYXRyaXguIFRoaXMgY2FuIGZhaWwKICAgICAg
ICAgLy8gaWYgYSBwYXJhbSBoYXMgYSBwZXJjZW50YWdlICgnJScpCiAgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHQ7CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4Ojpz
ZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIC8vIHNldCB0aGUgbWF0cml4CiAgICAgICAgIG1fbWF0cml4ID0gdDsKICAg
ICB9IGVsc2UgaWYgKCFzdHJpbmcuaXNFbXB0eSgpKSAvLyBUaGVyZSBpcyBzb21ldGhpbmcgdGhl
cmUgYnV0IHBhcnNpbmcgZmFpbGVkCkBAIC05OSw3ICs5OSw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0
Q1NTTWF0cml4PiBXZWJLaXRDU1NNYXRyaXg6OmludmVyc2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiBXZWJLaXRDU1NNYXRyaXg6OmNyZWF0ZShtX21hdHJp
eC5pbnZlcnNlKCkpOwogfQogCkBAIC0xMjksNyArMTI5LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRD
U1NNYXRyaXg+IFdlYktpdENTU01hdHJpeDo6cm90YXRlKGRvdWJsZSByb3RYLCBkb3VibGUgcm90
WSwgZG8KIHsKICAgICBpZiAoaXNuYW4ocm90WCkpCiAgICAgICAgIHJvdFggPSAwOwotICAgICAg
ICAKKwogICAgIGlmIChpc25hbihyb3RZKSAmJiBpc25hbihyb3RaKSkgewogICAgICAgICByb3Ra
ID0gcm90WDsKICAgICAgICAgcm90WCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4
LmgKaW5kZXggMTA3YmY4Yi4uNGE2NzMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU01hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRy
aXguaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIFdl
YktpdENTU01hdHJpeF9oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NTTWF0cml4KHMsIGVjKSk7CiAgICAgfQotICAg
IAorCiAgICAgdmlydHVhbCB+V2ViS2l0Q1NTTWF0cml4KCk7CiAKICAgICBkb3VibGUgYSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF0cml4LmEoKTsgfQpAQCAtNTIsMTQgKzUyLDE0IEBAIHB1YmxpYzoK
ICAgICBkb3VibGUgZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4LmQoKTsgfQogICAgIGRvdWJs
ZSBlKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXguZSgpOyB9CiAgICAgZG91YmxlIGYoKSBjb25z
dCB7IHJldHVybiBtX21hdHJpeC5mKCk7IH0KLSAgICAKKwogICAgIHZvaWQgc2V0QShkb3VibGUg
ZikgeyBtX21hdHJpeC5zZXRBKGYpOyB9CiAgICAgdm9pZCBzZXRCKGRvdWJsZSBmKSB7IG1fbWF0
cml4LnNldEIoZik7IH0KICAgICB2b2lkIHNldEMoZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0Qyhm
KTsgfQogICAgIHZvaWQgc2V0RChkb3VibGUgZikgeyBtX21hdHJpeC5zZXREKGYpOyB9CiAgICAg
dm9pZCBzZXRFKGRvdWJsZSBmKSB7IG1fbWF0cml4LnNldEUoZik7IH0KICAgICB2b2lkIHNldEYo
ZG91YmxlIGYpIHsgbV9tYXRyaXguc2V0RihmKTsgfQotIAorCiAgICAgZG91YmxlIG0xMSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0xMSgpOyB9CiAgICAgZG91YmxlIG0xMigpIGNvbnN0IHsg
cmV0dXJuIG1fbWF0cml4Lm0xMigpOyB9CiAgICAgZG91YmxlIG0xMygpIGNvbnN0IHsgcmV0dXJu
IG1fbWF0cml4Lm0xMygpOyB9CkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBkb3VibGUg
bTQyKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTQyKCk7IH0KICAgICBkb3VibGUgbTQzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTQzKCk7IH0KICAgICBkb3VibGUgbTQ0KCkgY29uc3Qg
eyByZXR1cm4gbV9tYXRyaXgubTQ0KCk7IH0KLSAgICAKKwogICAgIHZvaWQgc2V0TTExKGRvdWJs
ZSBmKSB7IG1fbWF0cml4LnNldE0xMShmKTsgfQogICAgIHZvaWQgc2V0TTEyKGRvdWJsZSBmKSB7
IG1fbWF0cml4LnNldE0xMihmKTsgfQogICAgIHZvaWQgc2V0TTEzKGRvdWJsZSBmKSB7IG1fbWF0
cml4LnNldE0xMyhmKTsgfQpAQCAtOTMsMjYgKzkzLDI2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dE00Mihkb3VibGUgZikgeyBtX21hdHJpeC5zZXRNNDIoZik7IH0KICAgICB2b2lkIHNldE00Myhk
b3VibGUgZikgeyBtX21hdHJpeC5zZXRNNDMoZik7IH0KICAgICB2b2lkIHNldE00NChkb3VibGUg
ZikgeyBtX21hdHJpeC5zZXRNNDQoZik7IH0KLSAKKwogICAgIHZvaWQgc2V0TWF0cml4VmFsdWUo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIAotICAgIC8vIFRoZSBmb2xsb3dp
bmcgbWF0aCBmdW5jdGlvbiByZXR1cm4gYSBuZXcgbWF0cml4IHdpdGggdGhlIAorCisgICAgLy8g
VGhlIGZvbGxvd2luZyBtYXRoIGZ1bmN0aW9uIHJldHVybiBhIG5ldyBtYXRyaXggd2l0aCB0aGUK
ICAgICAvLyBzcGVjaWZpZWQgb3BlcmF0aW9uIGFwcGxpZWQuIFRoZSB0aGlzIHZhbHVlIGlzIG5v
dCBtb2RpZmllZC4KLSAgICAKKwogICAgIC8vIE11bHRpcGx5IHRoaXMgbWF0cml4IGJ5IHNlY29u
ZE1hdHJpeCwgb24gdGhlIHJpZ2h0IChyZXN1bHQgPSB0aGlzICogc2Vjb25kTWF0cml4KQogICAg
IFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4PiBtdWx0aXBseShXZWJLaXRDU1NNYXRyaXgqIHNl
Y29uZE1hdHJpeCkgY29uc3Q7Ci0gICAgCisKICAgICAvLyBSZXR1cm4gdGhlIGludmVyc2Ugb2Yg
dGhpcyBtYXRyaXguIFRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgbWF0cml4IGlzIG5vdCBpbnZl
cnRpYmxlCiAgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IGludmVyc2UoRXhjZXB0aW9u
Q29kZSYpIGNvbnN0OwotICAgIAorCiAgICAgLy8gUmV0dXJuIHRoaXMgbWF0cml4IHRyYW5zbGF0
ZWQgYnkgdGhlIHBhc3NlZCB2YWx1ZXMuCiAgICAgLy8gUGFzc2luZyBhIE5hTiB3aWxsIHVzZSBh
IHZhbHVlIG9mIDAuIFRoaXMgYWxsb3dzIHRoZSAzRCBmb3JtIHRvIHVzZWQgZm9yIDJEIG9wZXJh
dGlvbnMKICAgICAvLyBPcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFzIHRob3VnaCB0aGUgdGhpcyBt
YXRyaXggaXMgbXVsdGlwbGllZCBieSBhIG1hdHJpeCB3aXRoCiAgICAgLy8gdGhlIHRyYW5zbGF0
aW9uIHZhbHVlcyBvbiB0aGUgbGVmdCAocmVzdWx0ID0gdHJhbnNsYXRpb24oeCx5LHopICogdGhp
cykKICAgICBQYXNzUmVmUHRyPFdlYktpdENTU01hdHJpeD4gdHJhbnNsYXRlKGRvdWJsZSB4LCBk
b3VibGUgeSwgZG91YmxlIHopIGNvbnN0OwotICAgIAorCiAgICAgLy8gUmV0dXJucyB0aGlzIG1h
dHJpeCBzY2FsZWQgYnkgdGhlIHBhc3NlZCB2YWx1ZXMuCi0gICAgLy8gUGFzc2luZyBzY2FsZVgg
b3Igc2NhbGVaIGFzIE5hTiB1c2VzIGEgdmFsdWUgb2YgMSwgYnV0IHBhc3Npbmcgc2NhbGVZIG9m
IE5hTiAKKyAgICAvLyBQYXNzaW5nIHNjYWxlWCBvciBzY2FsZVogYXMgTmFOIHVzZXMgYSB2YWx1
ZSBvZiAxLCBidXQgcGFzc2luZyBzY2FsZVkgb2YgTmFOCiAgICAgLy8gbWFrZXMgaXQgdGhlIHNh
bWUgYXMgc2NhbGVYLiBUaGlzIGFsbG93cyB0aGUgM0QgZm9ybSB0byB1c2VkIGZvciAyRCBvcGVy
YXRpb25zCiAgICAgLy8gT3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhcyB0aG91Z2ggdGhlIHRoaXMg
bWF0cml4IGlzIG11bHRpcGxpZWQgYnkgYSBtYXRyaXggd2l0aAogICAgIC8vIHRoZSBzY2FsZSB2
YWx1ZXMgb24gdGhlIGxlZnQgKHJlc3VsdCA9IHNjYWxlKHgseSx6KSAqIHRoaXMpCkBAIC0xMjAs
MTcgKzEyMCwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoaXMgbWF0cml4IHJvdGF0
ZWQgYnkgdGhlIHBhc3NlZCB2YWx1ZXMuCiAgICAgLy8gSWYgcm90WSBhbmQgcm90WiBhcmUgTmFO
LCByb3RhdGUgYWJvdXQgWiAocm90WD0wLCByb3RhdGVZPTAsIHJvdGF0ZVo9cm90WCkuCi0gICAg
Ly8gT3RoZXJ3aXNlIHVzZSBhIHJvdGF0aW9uIHZhbHVlIG9mIDAgZm9yIGFueSBwYXNzZWQgTmFO
LiAgICAKKyAgICAvLyBPdGhlcndpc2UgdXNlIGEgcm90YXRpb24gdmFsdWUgb2YgMCBmb3IgYW55
IHBhc3NlZCBOYU4uCiAgICAgLy8gT3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhcyB0aG91Z2ggdGhl
IHRoaXMgbWF0cml4IGlzIG11bHRpcGxpZWQgYnkgYSBtYXRyaXggd2l0aAogICAgIC8vIHRoZSBy
b3RhdGlvbiB2YWx1ZXMgb24gdGhlIGxlZnQgKHJlc3VsdCA9IHJvdGF0aW9uKHgseSx6KSAqIHRo
aXMpCiAgICAgUGFzc1JlZlB0cjxXZWJLaXRDU1NNYXRyaXg+IHJvdGF0ZShkb3VibGUgcm90WCwg
ZG91YmxlIHJvdFksIGRvdWJsZSByb3RaKSBjb25zdDsKLSAgICAKKwogICAgIC8vIFJldHVybnMg
dGhpcyBtYXRyaXggcm90YXRlZCBhYm91dCB0aGUgcGFzc2VkIGF4aXMgYnkgdGhlIHBhc3NlZCBh
bmdsZS4KICAgICAvLyBQYXNzaW5nIGEgTmFOIHdpbGwgdXNlIGEgdmFsdWUgb2YgMC4gSWYgdGhl
IGF4aXMgaXMgKDAsMCwwKSB1c2UgYSB2YWx1ZQogICAgIC8vIE9wZXJhdGlvbiBpcyBwZXJmb3Jt
ZWQgYXMgdGhvdWdoIHRoZSB0aGlzIG1hdHJpeCBpcyBtdWx0aXBsaWVkIGJ5IGEgbWF0cml4IHdp
dGgKICAgICAvLyB0aGUgcm90YXRpb24gdmFsdWVzIG9uIHRoZSBsZWZ0IChyZXN1bHQgPSByb3Rh
dGlvbih4LHkseixhbmdsZSkgKiB0aGlzKQogICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4
PiByb3RhdGVBeGlzQW5nbGUoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFu
Z2xlKSBjb25zdDsKLSAgICAKKwogICAgIC8vIFJldHVybiB0aGlzIG1hdHJpeCBza2V3ZWQgYWxv
bmcgdGhlIFggYXhpcyBieSB0aGUgcGFzc2VkIHZhbHVlcy4KICAgICAvLyBQYXNzaW5nIGEgTmFO
IHdpbGwgdXNlIGEgdmFsdWUgb2YgMC4KICAgICAvLyBPcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFz
IHRob3VnaCB0aGUgdGhpcyBtYXRyaXggaXMgbXVsdGlwbGllZCBieSBhIG1hdHJpeCB3aXRoCkBA
IC0xNDQsOSArMTQ0LDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8V2ViS2l0Q1NTTWF0cml4
PiBza2V3WShkb3VibGUgYW5nbGUpIGNvbnN0OwogCiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4OyB9Ci0gICAgCisKICAg
ICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLSAgICAKKwogcHJvdGVjdGVkOgogICAgIFdlYktp
dENTU01hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIFdlYktpdENTU01h
dHJpeChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcAppbmRleCAzYjQyODZlLi43NjIwNDI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAKQEAg
LTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgpAQCAtMTEyLDkgKzExMiw5IEBAIFN0cmluZyBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnN0CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgCisKICAgICByZXN1bHQgKz0gQ1NTVmFsdWVMaXN0Ojpjc3NUZXh0KCk7Ci0gICAgCisK
ICAgICByZXN1bHQgKz0gIikiOwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCmluZGV4IDBjM2MwMzguLjg1ODA5NmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCkBAIC0y
MCw3ICsyMCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWVfaApAQCAtNjgsOSArNjgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKLSAKKwogICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9wZXJhdGlvblR5cGUpOwogCg==
</data>
<flag name="review"
          id="109465"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>