<?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>96043</bug_id>
          
          <creation_ts>2012-09-06 17:16:56 -0700</creation_ts>
          <short_desc>Combine MarkStack and SlotVisitor into single class</short_desc>
          <delta_ts>2012-09-10 11:41:05 -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>JavaScriptCore</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="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713879</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-09-06 17:16:56 -0700</bug_when>
    <thetext>MarkStack and SlotVisitor are pretty much the same thing. We should combine them to make the GC code slightly more sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713902</commentid>
    <comment_count>1</comment_count>
      <attachid>162629</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-09-06 17:31:47 -0700</bug_when>
    <thetext>Created attachment 162629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713906</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 17:33:21 -0700</bug_when>
    <thetext>Attachment 162629 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/heap/SlotVisitor.cpp:172:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 22 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>713908</commentid>
    <comment_count>3</comment_count>
      <attachid>162629</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-06 17:33:40 -0700</bug_when>
    <thetext>Comment on attachment 162629
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713949</commentid>
    <comment_count>4</comment_count>
      <attachid>162635</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-09-06 18:08:06 -0700</bug_when>
    <thetext>Created attachment 162635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713950</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 18:09:46 -0700</bug_when>
    <thetext>Attachment 162635 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/heap/SlotVisitor.cpp:172:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 22 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>714001</commentid>
    <comment_count>6</comment_count>
      <attachid>162635</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-06 19:06:45 -0700</bug_when>
    <thetext>Comment on attachment 162635
Patch

Attachment 162635 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13769574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714047</commentid>
    <comment_count>7</comment_count>
      <attachid>162661</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-09-06 20:34:18 -0700</bug_when>
    <thetext>Created attachment 162661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714051</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 20:37:40 -0700</bug_when>
    <thetext>Attachment 162661 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/heap/SlotVisitor.cpp:172:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 23 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>716323</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-09-10 11:40:46 -0700</bug_when>
    <thetext>Committed r128084: &lt;http://trac.webkit.org/changeset/128084&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162629</attachid>
            <date>2012-09-06 17:31:47 -0700</date>
            <delta_ts>2012-09-06 18:08:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96043-20120906173128.patch</filename>
            <type>text/plain</type>
            <size>65785</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxMi0wOS0wNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvbWJpbmUgTWFya1N0YWNrIGFuZCBTbG90VmlzaXRvciBpbnRvIHNpbmdsZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYw
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IGFsbCBvZiBNYXJrU3RhY2sgaW50byBTbG90VmlzaXRvci4gVGhlIHJlbWFpbmluZyBzdHVmZiBp
biBNYXJrU3RhY2suY3BwIGFjdHVhbGx5IGhhcyB0byBkbyAKKyAgICAgICAgd2l0aCBNYXJrU3Rh
Y2sgbWFuYWdlbWVudC9hbGxvY2F0aW9uLiBDbGVhbmVkIHVwIGEgZmV3IG9mIHRoZSBoZWFkZXIg
ZmlsZXMgd2hpbGUgSSB3YXMgYXQgaXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbi5oOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAg
ICAgKiBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWRE
YXRhKToKKyAgICAgICAgKiBoZWFwL0hlYXBSb290VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAv
TWFya1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChNYXJrU3RhY2tTZWdtZW50KToKKyAgICAgICAg
KEpTQzo6TWFya1N0YWNrU2VnbWVudDo6ZGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1Nl
Z21lbnQ6OmNhcGFjaXR5RnJvbVNpemUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50
OjpzaXplRnJvbUNhcGFjaXR5KToKKyAgICAgICAgKE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3Ip
OgorICAgICAgICAoTWFya1N0YWNrQXJyYXkpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrSW5s
aW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cG9zdEluY1RvcCk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cHJlRGVjVG9w
KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckVtcHR5U2VnbWVudCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5Ojp0b3ApOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cyk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6Y2FuUmVtb3ZlTGFzdCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KToKKyAgICAgICAgKEpT
Qzo6TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJh
eTo6c2l6ZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdl
T3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VPclBpbik6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnJlbGVhc2VIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNob3VsZFRy
eUhhc2hDb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZhbGlkYXRlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c2hh
cmVkRGF0YSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXRDaGlsZENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNoaWxkQ291
bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW5jcmVtZW50Q2hpbGRDb3VudCk6Cisg
ICAgICAgIChQYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKEpTQzo6UGFyYWxsZWxNb2Rl
RW5hYmxlcjo6UGFyYWxsZWxNb2RlRW5hYmxlcik6CisgICAgICAgIChKU0M6OlBhcmFsbGVsTW9k
ZUVuYWJsZXI6On5QYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6b3BhcXVlUm9vdENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9w
YXF1ZVJvb3RzSWZQcm9maXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAg
ICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBw
ZW5kKToKKyAgICAgICAgKiBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVl
cyk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKwogMjAxMi0wOS0wNiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgSlMgdGVzdCBzdWl0
ZSBwdXRzIGluY29ycmVjdCBsaW1pdGF0aW9ucyBvbiBGdW5jdGlvbi50b1N0cmluZygpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjc3NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvTWFya2Vk
QmxvY2suY3BwCiAgICAgaGVhcC9NYXJrZWRTcGFjZS5jcHAKICAgICBoZWFwL01hcmtTdGFjay5j
cHAKKyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKICAgICBo
ZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKICAgICBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFj
ay5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyNzc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBc
CiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAgXAogICAgIGhlYXAvTWFya2VkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAg
XAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogICAgIGRlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg2LDYgKzIzODYsMTAg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
aGVhcFxTbG90VmlzaXRvci5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcU3Ryb25nLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDggQEAKIAkJQzIxMTIyRTExNUREOUFCMzAw
NzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJERTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJl
YWRTaGFyZWREYXRhLmNwcCAqLzsgfTsKIAkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdD
VGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMTEy
MkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJFMDE1REQ5QUIzMDA3
OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBT
bG90VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklu
bGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyNTQ5NDIxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsgfTsKIAkJQzIyQjMxQjkxNDA1NzdENzAw
REI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjQwMzA1MzE0QjQwNEM5MDA3OUVC
NjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9OwogCQlDMjVGOEJDRDE1NzU0NEE5MDAyNDVCNzEg
LyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwICovOyB9OwpAQCAtMTQ1NSw2ICsxNDU3LDcgQEAKIAkJQzIxMTIyREUxNUREOUFC
MzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjExMjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWRE
YXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0
YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBF
M0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXJrU3RhY2tJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRT
cGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRTcGFj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0
NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5jcmVtZW50YWxTd2VlcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmNyZW1lbnRhbFN3ZWVwZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODQsNiArMTc4Nyw3IEBACiAJCTE0MkUz
MTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0
b3IuY3BwICovLAogCQkJCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJl
ZERhdGEuY3BwICovLAogCQkJCUMyMTEyMkRGMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNo
YXJlZERhdGEuaCAqLywKIAkJCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNr
SW5saW5lTWV0aG9kcy5oICovLApAQCAtMjUyNyw2ICsyNTMxLDcgQEAKIAkJCQlDMkI5MTZDMjE0
REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQzIxNjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhE
IC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkw
RTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUY4
QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtMzUwMyw2ICszNTA4LDcgQEAKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyog
SlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIg
LyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyNTQ5NDMxNUY3
REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEy
Nzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnBy
ZXRlci5oIgogI2luY2x1ZGUgIk1ldGhvZENhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2lu
Y2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiAvKiBERkdfRU5BQkxFKCkgLSB0dXJuIG9uIGEg
c3BlY2lmaWMgZmVhdHVyZXMgaW4gdGhlIERGRyBKSVQgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkocmV2aXNpb24gMTI3
NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0
YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDEyIEBACiAjaWZuZGVmIEdDVGhyZWFkU2hhcmVkRGF0YV9oCiAjZGVm
aW5lIEdDVGhyZWFkU2hhcmVkRGF0YV9oCiAKKyNpbmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIK
ICNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmgiCisjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00OCw3ICs1Myw2IEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwogICAgIGZyaWVu
ZCBjbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKQEAgLTY0LDcg
KzY4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OwogCiAgICAgVmVj
dG9yPFRocmVhZElkZW50aWZpZXI+IG1fbWFya2luZ1RocmVhZHM7Ci0gICAgVmVjdG9yPE1hcmtT
dGFjayo+IG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2s7CisgICAgVmVjdG9yPFNsb3RWaXNpdG9y
Kj4gbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsKICAgICAKICAgICBNdXRleCBtX21hcmtpbmdM
b2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBtX21hcmtpbmdDb25kaXRpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9vdFZpc2l0b3IuaAkocmV2aXNpb24gMTI3
NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgSGVhcFJvb3RWaXNpdG9yX2gK
IAogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVN
ZXRob2RzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw0MDIgKzIy
Myw0IEBAIHZvaWQgTWFya1N0YWNrQXJyYXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAg
YXBwZW5kKG90aGVyLnJlbW92ZUxhc3QoKSk7CiB9CiAKLU1hcmtTdGFjazo6TWFya1N0YWNrKEdD
VGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQotICAgIDogbV9zdGFjayhzaGFyZWQubV9zZWdtZW50
QWxsb2NhdG9yKQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAsIG1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQotICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQotI2Vu
ZGlmCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKLSAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxz
ZSkKLSAgICAsIG1fc2hhcmVkKHNoYXJlZCkKLSAgICAsIG1fc2hvdWxkSGFzaENvbnN0KGZhbHNl
KQotewotfQotCi1NYXJrU3RhY2s6On5NYXJrU3RhY2soKQotewotICAgIEFTU0VSVChtX3N0YWNr
LmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgTWFya1N0YWNrOjpzZXR1cCgpCi17Ci0gICAgbV9zaGFy
ZWQubV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX2dsb2JhbERhdGEtPmhhdmVFbm91Z2hO
ZXdTdHJpbmdzVG9IYXNoQ29uc3QoKTsKLSAgICBtX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVk
Lm1fc2hvdWxkSGFzaENvbnN0OwotI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFja1tpXS0+
bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKLSNlbmRpZgot
fQotCi12b2lkIE1hcmtTdGFjazo6cmVzZXQoKQotewotICAgIG1fdmlzaXRDb3VudCA9IDA7Ci0g
ICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0g
ICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2Vk
IGJ5IG5vdy4KLSNlbHNlCi0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotI2VuZGlmCi0gICAg
aWYgKG1fc2hvdWxkSGFzaENvbnN0KSB7Ci0gICAgICAgIG1fdW5pcXVlU3RyaW5ncy5jbGVhcigp
OwotICAgICAgICBtX3Nob3VsZEhhc2hDb25zdCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBN
YXJrU3RhY2s6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCi17
Ci0gICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOwotICAgIHNp
emVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBpbnRlcm5hbEFwcGVuZChyb290c1tpXSk7Ci19
Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYg
dmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQotewotI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9Q
Uk9GSUxJTkcpCi0gICAgbV92aXNpdGVkVHlwZUNvdW50cy5jb3VudChjZWxsKTsKLSNlbmRpZgot
Ci0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKLSAgICAKLSAgICBpZiAoaXNKU1N0
cmluZyhjZWxsKSkgewotICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0
PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChpc0pTRmluYWxPYmplY3QoY2VsbCkpIHsKLSAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0pTQXJyYXkoY2VsbCkpIHsKLSAgICAgICAgSlNB
cnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0
Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7Ci19Ci0KLXZvaWQg
U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQotewotICAgIC8vIE5PVEU6IEJlY2F1
c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5k
Ci0gICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCi0KLSAgICAv
LyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBv
YmplY3QgZ3JhcGguCi0gICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVw
LCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQotICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBp
cyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suc2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRo
ZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKLSAgICAvLyB0
aHJlYWQgaXMgYWxyZWFkeSBkb25hdGluZy4KLSAgICBNdXRleFRyeUxvY2tlciBsb2NrZXIobV9z
aGFyZWQubV9tYXJraW5nTG9jayk7Ci0gICAgaWYgKCFsb2NrZXIubG9ja2VkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBn
byBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyht
X3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjayk7Ci0KLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCi0g
ICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKLX0KLQotdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQotewotICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUp
OwotICAgCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIGlmIChPcHRpb25zOjpudW1iZXJP
ZkdDTWFya2VycygpID4gMSkgewotICAgICAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAg
ICAgICAgIHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAg
ICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0jZW5kaWYKLSAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIHdoaWxlIChtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSkKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWRE
cmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQotewotICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1v
ZGUpOwotICAgIAotICAgIEFTU0VSVChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKLSAg
ICAKLSAgICBib29sIHNob3VsZEJlUGFyYWxsZWw7Ci0KLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0Mp
Ci0gICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAx
OwotI2Vsc2UKLSAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKTsK
LSAgICBzaG91bGRCZVBhcmFsbGVsID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAoIXNo
b3VsZEJlUGFyYWxsZWwpIHsKLSAgICAgICAgLy8gVGhpcyBjYWxsIHNob3VsZCBiZSBhIG5vLW9w
LgotICAgICAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZERyYWluTW9kZSwgc2hhcmVkRHJhaW5Nb2Rl
ID09IE1hc3RlckRyYWluKTsKLSAgICAgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAg
ICAgICAgQVNTRVJUKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHsK
LSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOwotICAg
ICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7Ci0gICAgfQot
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKLSAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKLQotICAgICAgICAgICAgLy8gSG93IHdlIHdh
aXQgZGlmZmVycyBkZXBlbmRpbmcgb24gZHJhaW4gbW9kZS4KLSAgICAgICAgICAgIGlmIChzaGFy
ZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKLSAgICAgICAgICAgICAgICAvLyBXYWl0IHVu
dGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBpcyByZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21l
IHdvcmsKLSAgICAgICAgICAgICAgICAvLyBmb3IgdXMgdG8gZG8uCi0gICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1p
bmF0aW9uPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBr
bm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byBnaXZlIHRoZWlyIHByaXZhdGUgQ29waWVkQmxvY2tz
IGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlv
bi5icm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0Nv
bmRpdGlvbi53YWl0KG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWlu
TW9kZSA9PSBTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
LyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4K
LSAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29weWluZygpOwotICAgICAgICAgICAgICAgICAg
ICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2Nr
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gSXMgdGhlIFZNIGV4aXRpbmc/IElmIHNvLCBleGl0IHRoaXMgdGhyZWFkLgotICAgICAgICAg
ICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgCi0gICAgICAg
ICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMo
KSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7Ci0gICAgICAgICAg
ICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaywg
aWRsZVRocmVhZENvdW50KTsKLSAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnMrKzsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHMoKQot
ewotICAgIEFTU0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBi
ZSBjYWxsZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX29wYXF1ZVJvb3RzTG9jayk7Ci0gICAgICAg
IEhhc2hTZXQ8dm9pZCo+OjppdGVyYXRvciBiZWdpbiA9IG1fb3BhcXVlUm9vdHMuYmVnaW4oKTsK
LSAgICAgICAgSGFzaFNldDx2b2lkKj46Oml0ZXJhdG9yIGVuZCA9IG1fb3BhcXVlUm9vdHMuZW5k
KCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDx2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsg
aXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMu
YWRkKCppdGVyKTsKLSAgICB9Ci0gICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotfQotCi12b2lk
IFNsb3RWaXNpdG9yOjpzdGFydENvcHlpbmcoKQotewotICAgIEFTU0VSVCghbV9jb3BpZWRBbGxv
Y2F0b3IuaXNWYWxpZCgpKTsKLX0KLQotdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3Bh
Y2VTbG93KHNpemVfdCBieXRlcykKLXsKLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25l
RmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwotICAg
IG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkpOwotCi0gICAgdm9pZCogcmVzdWx0ID0g
MDsKLSAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5
QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOwotICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZU9y
UGluKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQotewotICAgIGlmICghY2hlY2tJZlNob3VsZENv
cHlBbmRQaW5PdGhlcndpc2UocHRyLCBieXRlcykpCi0gICAgICAgIHJldHVybiAwOwotICAgIAot
ICAgIHJldHVybiBhbGxvY2F0ZU5ld1NwYWNlKGJ5dGVzKTsKLX0KLQotQUxXQVlTX0lOTElORSBi
b29sIEpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCi0gICAgdW5zaWduZWQgY3VycmVudEZsYWdzID0gbV9mbGFnczsKLQotICAgIGlmIChjdXJy
ZW50RmxhZ3MgJiBIYXNoQ29uc3RMb2NrKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1
bnNpZ25lZCBuZXdGbGFncyA9IGN1cnJlbnRGbGFncyB8IEhhc2hDb25zdExvY2s7Ci0KLSAgICBp
ZiAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2ZsYWdzLCBjdXJyZW50RmxhZ3MsIG5ld0Zs
YWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV1RGOjptZW1vcnlCYXJyaWVyQWZ0
ZXJMb2NrKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIGlmIChpc0hhc2hDb25zdFNp
bmdsZXRvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2ZsYWdzIHw9IEhhc2hD
b25zdExvY2s7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSlNTdHJpbmc6OnJlbGVhc2VIYXNoQ29uc3RMb2NrKCkKLXsKLSNpZiBFTkFCTEUoUEFS
QUxMRUxfR0MpCi0gICAgV1RGOjptZW1vcnlCYXJyaWVyQmVmb3JlVW5sb2NrKCk7Ci0jZW5kaWYK
LSAgICBtX2ZsYWdzICY9IH5IYXNoQ29uc3RMb2NrOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wg
SlNTdHJpbmc6OnNob3VsZFRyeUhhc2hDb25zdCgpCi17Ci0gICAgcmV0dXJuICgobGVuZ3RoKCkg
PiAxKSAmJiAhaXNSb3BlKCkgJiYgIWlzSGFzaENvbnN0U2luZ2xldG9uKCkpOwotfQotCi1BTFdB
WVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQot
ewotICAgIC8vIFRoaXMgaW50ZXJuYWxBcHBlbmQgaXMgb25seSBpbnRlbmRlZCBmb3IgdmlzaXRz
IHRvIG9iamVjdCBhbmQgYXJyYXkgYmFja2luZyBzdG9yZXMuCi0gICAgLy8gYXMgaXQgY2FuIGNo
YW5nZSB0aGUgSlNWYWx1ZSBwb2ludGVkIHRvIGJlIHRoZSBhcmd1bWVudCB3aGVuIHRoZSBvcmln
aW5hbCBKU1ZhbHVlCi0gICAgLy8gaXMgYSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgc2FtZSBj
b250ZW50cyBhcyBhbm90aGVyIHN0cmluZy4KLQotICAgIEFTU0VSVChzbG90KTsKLSAgICBKU1Zh
bHVlIHZhbHVlID0gKnNsb3Q7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBpZiAoIXZhbHVlLmlz
Q2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0Nl
bGwoKTsKLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3Nob3Vs
ZEhhc2hDb25zdCAmJiBjZWxsLT5pc1N0cmluZygpKSB7Ci0gICAgICAgIEpTU3RyaW5nKiBzdHJp
bmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsKLSAgICAgICAgaWYgKHN0cmluZy0+c2hvdWxk
VHJ5SGFzaENvbnN0KCkgJiYgc3RyaW5nLT50cnlIYXNoQ29uc3RMb2NrKCkpIHsKLSAgICAgICAg
ICAgIFVuaXF1ZVN0cmluZ01hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fdW5pcXVlU3RyaW5n
cy5hZGQoc3RyaW5nLT5zdHJpbmcoKS5pbXBsKCksIHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdHJpbmctPnNldEhhc2hDb25z
dFNpbmdsZXRvbigpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgIT0gZXhpc3RpbmdKU1ZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBqc0Nhc3Q8SlNTdHJpbmcqPihleGlzdGluZ0pTVmFsdWUuYXNDZWxsKCkpLT5jbGVhckhhc2hD
b25zdFNpbmdsZXRvbigpOwotICAgICAgICAgICAgICAgICpzbG90ID0gZXhpc3RpbmdKU1ZhbHVl
OwotICAgICAgICAgICAgICAgIHN0cmluZy0+cmVsZWFzZUhhc2hDb25zdExvY2soKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHJpbmctPnJl
bGVhc2VIYXNoQ29uc3RMb2NrKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnRlcm5hbEFw
cGVuZChjZWxsKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiog
cHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQotewot
ICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0gICAgdm9pZCogbmV3UHRyID0gYWxsb2NhdGVOZXdT
cGFjZU9yUGluKG9sZFB0ciwgYnl0ZXMpOwotICAgIGlmIChuZXdQdHIpIHsKLSAgICAgICAgc2l6
ZV90IGpzVmFsdWVzT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWludGVycHJldF9jYXN0
PGNoYXIqPih2YWx1ZXMpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9sZFB0cikpOwotCi0gICAgICAg
IEpTVmFsdWUqIG5ld1ZhbHVlcyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEpTVmFsdWUqPihzdGF0
aWNfY2FzdDxjaGFyKj4obmV3UHRyKSArIGpzVmFsdWVzT2Zmc2V0KTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlJiB2
YWx1ZSA9IHZhbHVlc1tpXTsKLSAgICAgICAgICAgIG5ld1ZhbHVlc1tpXSA9IHZhbHVlOwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGludGVybmFsQXBwZW5kKCZuZXdWYWx1ZXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
bWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBqc1ZhbHVlc09mZnNldCk7Ci0gICAgICAgICpwdHIgPSBu
ZXdQdHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFwcGVuZCh2YWx1ZXMsIGxlbmd0aCk7Ci19Ci0g
ICAgCi12b2lkIFNsb3RWaXNpdG9yOjpkb25lQ29weWluZygpCi17Ci0gICAgaWYgKCFtX2NvcGll
ZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJy
ZW50QmxvY2soKSk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNl
cygpCi17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0gbV9zaGFy
ZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0KCkpCi0gICAgICAgIGN1cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKnRo
aXMpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCkKLXsKLSAgICB3aGlsZSAobV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5o
YXNOZXh0KCkpCi0gICAgICAgIG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVt
b3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwotfQotCi0jaWYgRU5BQkxFKEdD
X1ZBTElEQVRJT04pCi12b2lkIE1hcmtTdGFjazo6dmFsaWRhdGUoSlNDZWxsKiBjZWxsKQotewot
ICAgIGlmICghY2VsbCkgewotICAgICAgICBkYXRhTG9nKCJjZWxsIGlzIE5VTExcbiIpOwotICAg
ICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIGlmICghY2VsbC0+c3RydWN0dXJlKCkpIHsKLSAg
ICAgICAgZGF0YUxvZygiY2VsbCBhdCAlcCBoYXMgYSBudWxsIHN0cnVjdHVyZVxuIiAsIGNlbGwp
OwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIC8vIEJvdGggdGhlIGNlbGwncyBzdHJ1
Y3R1cmUsIGFuZCB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0cnVjdHVyZSBzaG91bGQgYmUgdGhl
IFN0cnVjdHVyZSBTdHJ1Y3R1cmUuCi0gICAgLy8gSSBoYXRlIHRoaXMgc2VudGVuY2UuCi0gICAg
aWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSAh
PSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSkgewotICAgICAgICBjb25z
dCBjaGFyKiBwYXJlbnRDbGFzc05hbWUgPSAwOwotICAgICAgICBjb25zdCBjaGFyKiBvdXJDbGFz
c05hbWUgPSAwOwotICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpICYm
IGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSkKLSAg
ICAgICAgICAgIHBhcmVudENsYXNzTmFtZSA9IGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUo
KS0+SlNDZWxsOjpjbGFzc0luZm8oKS0+Y2xhc3NOYW1lOwotICAgICAgICBpZiAoY2VsbC0+c3Ry
dWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkpCi0gICAgICAgICAgICBvdXJDbGFzc05hbWUg
PSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKS0+Y2xhc3NOYW1lOwotICAg
ICAgICBkYXRhTG9nKCJwYXJlbnQgc3RydWN0dXJlICglcCA8JXM+KSBvZiBjZWxsIGF0ICVwIGRv
ZXNuJ3QgbWF0Y2ggY2VsbCdzIHN0cnVjdHVyZSAoJXAgPCVzPilcbiIsCi0gICAgICAgICAgICAg
ICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBwYXJlbnRDbGFzc05hbWUsIGNlbGws
IGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOwotICAgICAgICBDUkFTSCgpOwotICAg
IH0KLX0KLSNlbHNlCi12b2lkIE1hcmtTdGFjazo6dmFsaWRhdGUoSlNDZWxsKikKLXsKLX0KLSNl
bmRpZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjUgKzI2LDYgQEAKICNpZm5k
ZWYgTWFya1N0YWNrX2gKICNkZWZpbmUgTWFya1N0YWNrX2gKIAotI2luY2x1ZGUgIkNvcGllZFNw
YWNlLmgiCi0jaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0j
aW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1ZGUgIlZUYWJsZVNwZWN0cnVtLmgiCi0jaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1BhZ2VCbG9jay5oPgotI2lu
Y2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQogI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dH
SU5HKQogI2RlZmluZSBNQVJLX0xPR19NRVNTQUdFMChtZXNzYWdlKSBkYXRhTG9nKG1lc3NhZ2Up
CiAjZGVmaW5lIE1BUktfTE9HX01FU1NBR0UxKG1lc3NhZ2UsIGFyZzEpIGRhdGFMb2cobWVzc2Fn
ZSwgYXJnMSkKQEAgLTY5LDI3NiArNTAsODYgQEAKICNkZWZpbmUgTUFSS19MT0dfQ0hJTEQodmlz
aXRvciwgY2hpbGQpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAotbmFtZXNwYWNlIEpT
QyB7Ci0KLSAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKLSAgICBjbGFzcyBKU0dsb2JhbERh
dGE7Ci0gICAgY2xhc3MgTWFya1N0YWNrOwotICAgIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsK
LSAgICBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwotICAgIGNsYXNzIFJlZ2lzdGVyOwotICAg
IGNsYXNzIFNsb3RWaXNpdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdyaXRl
QmFycmllckJhc2U7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSklUV3JpdGVCYXJy
aWVyOwotICAgIAotICAgIHN0cnVjdCBNYXJrU3RhY2tTZWdtZW50IHsKLSAgICAgICAgTWFya1N0
YWNrU2VnbWVudCogbV9wcmV2aW91czsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHNp
emVfdCBtX3RvcDsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgY29uc3QgSlNDZWxsKiogZGF0
YSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgSlND
ZWxsKio+KHRoaXMgKyAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIHNp
emVfdCBjYXBhY2l0eUZyb21TaXplKHNpemVfdCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gKHNpemUgLSBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0
IEpTQ2VsbCopOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgc2l6ZV90IHNp
emVGcm9tQ2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKE1hcmtTdGFja1NlZ21lbnQpICsgY2FwYWNpdHkgKiBzaXplb2YoY29uc3Qg
SlNDZWxsKik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgY2xhc3MgTWFya1N0YWNrU2VnbWVu
dEFsbG9jYXRvciB7Ci0gICAgcHVibGljOgotICAgICAgICBNYXJrU3RhY2tTZWdtZW50QWxsb2Nh
dG9yKCk7Ci0gICAgICAgIH5NYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yKCk7Ci0gICAgICAgIAot
ICAgICAgICBNYXJrU3RhY2tTZWdtZW50KiBhbGxvY2F0ZSgpOwotICAgICAgICB2b2lkIHJlbGVh
c2UoTWFya1N0YWNrU2VnbWVudCopOwotICAgICAgICAKLSAgICAgICAgdm9pZCBzaHJpbmtSZXNl
cnZlKCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFNwaW5Mb2NrIG1fbG9jazsK
LSAgICAgICAgTWFya1N0YWNrU2VnbWVudCogbV9uZXh0RnJlZVNlZ21lbnQ7Ci0gICAgfTsKLQot
ICAgIGNsYXNzIE1hcmtTdGFja0FycmF5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1hcmtTdGFj
a0FycmF5KE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3ImKTsKLSAgICAgICAgfk1hcmtTdGFja0Fy
cmF5KCk7Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQoY29uc3QgSlNDZWxsKik7Ci0KLSAgICAgICAg
Ym9vbCBjYW5SZW1vdmVMYXN0KCk7Ci0gICAgICAgIGNvbnN0IEpTQ2VsbCogcmVtb3ZlTGFzdCgp
OwotICAgICAgICBib29sIHJlZmlsbCgpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0VtcHR5
KCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0Fy
cmF5JiBvdGhlcik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShN
YXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwotCi0gICAgICAg
IHNpemVfdCBzaXplKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNYXJrU3RhY2tTZWdtZW50
KiBtX3RvcFNlZ21lbnQ7Ci0gICAgICAgIAotICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGV4cGFuZCgpOwotICAgICAgICAKLSAgICAgICAgTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciYg
bV9hbGxvY2F0b3I7Ci0KLSAgICAgICAgc2l6ZV90IG1fc2VnbWVudENhcGFjaXR5OwotICAgICAg
ICBzaXplX3QgbV90b3A7Ci0gICAgICAgIHNpemVfdCBtX251bWJlck9mUHJldmlvdXNTZWdtZW50
czsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBwb3N0SW5jVG9wKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9wKys7Ci0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3ArKyk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgcHJlRGVjVG9wKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgc2l6ZV90IHJlc3VsdCA9IC0tbV90b3A7Ci0gICAgICAgICAgICBB
U1NFUlQocmVzdWx0ID09IC0tbV90b3BTZWdtZW50LT5tX3RvcCk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldFRvcEZvckZ1
bGxTZWdtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+
bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNpdHkpOwotICAgICAgICAgICAgbV90b3AgPSBtX3NlZ21l
bnRDYXBhY2l0eTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRUb3BGb3JF
bXB0eVNlZ21lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdG9wU2VnbWVu
dC0+bV90b3ApOwotICAgICAgICAgICAgbV90b3AgPSAwOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzaXplX3QgdG9wKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fdG9w
ID09IG1fdG9wU2VnbWVudC0+bV90b3ApOwotICAgICAgICAgICAgcmV0dXJuIG1fdG9wOwotICAg
ICAgICB9Ci0gICAgICAgIAotI2lmIEFTU0VSVF9ESVNBQkxFRAotICAgICAgICB2b2lkIHZhbGlk
YXRlUHJldmlvdXMoKSB7IH0KLSNlbHNlCi0gICAgICAgIHZvaWQgdmFsaWRhdGVQcmV2aW91cygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgICAg
IGZvciAoTWFya1N0YWNrU2VnbWVudCogY3VycmVudCA9IG1fdG9wU2VnbWVudC0+bV9wcmV2aW91
czsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fcHJldmlvdXMpCi0gICAgICAgICAgICAg
ICAgY291bnQrKzsKLSAgICAgICAgICAgIEFTU0VSVChjb3VudCA9PSBtX251bWJlck9mUHJldmlv
dXNTZWdtZW50cyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH07Ci0KLSAgICBjbGFzcyBNYXJr
U3RhY2sgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYXJrU3RhY2spOwotICAgICAg
ICBmcmllbmQgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOyAvLyBBbGxvd2VkIHRvIG1hcmsgYSBKU1Zh
bHVlKiBvciBKU0NlbGwqKiBkaXJlY3RseS4KLQotICAgIHB1YmxpYzoKLSAgICAgICAgTWFya1N0
YWNrKEdDVGhyZWFkU2hhcmVkRGF0YSYpOwotICAgICAgICB+TWFya1N0YWNrKCk7Ci0KLSAgICAg
ICAgdm9pZCBhcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAgICAgICAgCi0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+
Kik7Ci0gICAgICAgIHZvaWQgYXBwZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
LCBzaXplX3QgY291bnQpOwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoqKTsKLSAgICAgICAgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqKTsKLSAgICAgICAgCi0gICAgICAgIHZv
aWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7Ci0gICAgICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290
KHZvaWQqKTsKLSAgICAgICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwotCi0gICAgICAgIEdDVGhy
ZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9Ci0gICAgICAg
IGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9Ci0KLSAgICAgICAg
dm9pZCBzZXR1cCgpOwotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICAgICAgc2l6ZV90IHZp
c2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KLQotI2lmIEVOQUJMRShT
SU1QTEVfSEVBUF9QUk9GSUxJTkcpCi0gICAgICAgIFZUYWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5
cGVDb3VudHM7Ci0jZW5kaWYKLQotICAgICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciopOwotICAgICAgICB2b2lkIGFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciopOworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5oPgogCi0jaWYgRU5BQkxFKE9C
SkVDVF9NQVJLX0xPR0dJTkcpCi0gICAgICAgIGlubGluZSB2b2lkIHJlc2V0Q2hpbGRDb3VudCgp
IHsgbV9sb2dDaGlsZENvdW50ID0gMDsgfQotICAgICAgICBpbmxpbmUgdW5zaWduZWQgY2hpbGRD
b3VudCgpIHsgcmV0dXJuIG1fbG9nQ2hpbGRDb3VudDsgfQotICAgICAgICBpbmxpbmUgdm9pZCBp
bmNyZW1lbnRDaGlsZENvdW50KCkgeyBtX2xvZ0NoaWxkQ291bnQrKzsgfQotI2VuZGlmCituYW1l
c3BhY2UgSlNDIHsKIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKik7CitjbGFzcyBKU0NlbGw7CiAKLSAgICAgICAg
dm9pZCBhcHBlbmQoSlNWYWx1ZSopOwotICAgICAgICB2b2lkIGFwcGVuZChKU1ZhbHVlKiwgc2l6
ZV90IGNvdW50KTsKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNDZWxsKiopOwotCi0gICAgICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQoSlNDZWxsKik7Ci0gICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQo
SlNWYWx1ZSk7Ci0gICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSopOwotICAgICAg
ICAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0g
ICAgICAgIAotICAgICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFx
dWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOwotICAg
ICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEg
c3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCi0gICAgICAg
IAorc3RydWN0IE1hcmtTdGFja1NlZ21lbnQgeworICAgIE1hcmtTdGFja1NlZ21lbnQqIG1fcHJl
dmlvdXM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKLSAgICAgICAgYm9vbCBtX2lzRHJh
aW5pbmc7CisgICAgc2l6ZV90IG1fdG9wOwogI2VuZGlmCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAgICAgCi0gICAgICAgIHNp
emVfdCBtX3Zpc2l0Q291bnQ7Ci0gICAgICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwotICAg
ICAgICAKLSAgICAgICAgR0NUaHJlYWRTaGFyZWREYXRhJiBtX3NoYXJlZDsKLQotICAgICAgICBi
b29sIG1fc2hvdWxkSGFzaENvbnN0OyAvLyBMb2NhbCBwZXItdGhyZWFkIGNvcHkgb2Ygc2hhcmVk
IGZsYWcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZ0ltcGwqLCBKU1ZhbHVlPiBVbmlxdWVTdHJpbmdNYXA7Ci0gICAgICAgIFVuaXF1ZVN0cmlu
Z01hcCBtX3VuaXF1ZVN0cmluZ3M7Ci0KLSNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykK
LSAgICAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwotI2VuZGlmCi0gICAgfTsKLQotICAg
IGlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjphcHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQor
ICAgIGNvbnN0IEpTQ2VsbCoqIGRhdGEoKQogICAgIHsKLSAgICAgICAgaWYgKG1fdG9wID09IG1f
c2VnbWVudENhcGFjaXR5KQotICAgICAgICAgICAgZXhwYW5kKCk7Ci0gICAgICAgIG1fdG9wU2Vn
bWVudC0+ZGF0YSgpW3Bvc3RJbmNUb3AoKV0gPSBjZWxsOworICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGNvbnN0IEpTQ2VsbCoqPih0aGlzICsgMSk7CiAgICAgfQotCi0gICAgaW5saW5lIGJv
b2wgTWFya1N0YWNrQXJyYXk6OmNhblJlbW92ZUxhc3QoKQorICAgIAorICAgIHN0YXRpYyBzaXpl
X3QgY2FwYWNpdHlGcm9tU2l6ZShzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
IW1fdG9wOworICAgICAgICByZXR1cm4gKHNpemUgLSBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkp
IC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwogICAgIH0KLQotICAgIGlubGluZSBjb25zdCBKU0Nl
bGwqIE1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KCkKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90
IHNpemVGcm9tQ2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1RvcCgpXTsKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihNYXJrU3RhY2tTZWdtZW50KSArIGNhcGFjaXR5ICogc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwog
ICAgIH0KK307CiAKLSAgICBpbmxpbmUgYm9vbCBNYXJrU3RhY2tBcnJheTo6aXNFbXB0eSgpCi0g
ICAgewotICAgICAgICBpZiAobV90b3ApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X3RvcFNlZ21lbnQtPm1fcHJldmlvdXMtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CitjbGFzcyBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yKCk7CisgICAgfk1hcmtTdGFja1NlZ21lbnRBbGxvY2F0
b3IoKTsKKyAgICAKKyAgICBNYXJrU3RhY2tTZWdtZW50KiBhbGxvY2F0ZSgpOworICAgIHZvaWQg
cmVsZWFzZShNYXJrU3RhY2tTZWdtZW50Kik7CisgICAgCisgICAgdm9pZCBzaHJpbmtSZXNlcnZl
KCk7CisgICAgCitwcml2YXRlOgorICAgIFNwaW5Mb2NrIG1fbG9jazsKKyAgICBNYXJrU3RhY2tT
ZWdtZW50KiBtX25leHRGcmVlU2VnbWVudDsKK307CisKK2NsYXNzIE1hcmtTdGFja0FycmF5IHsK
K3B1YmxpYzoKKyAgICBNYXJrU3RhY2tBcnJheShNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yJik7
CisgICAgfk1hcmtTdGFja0FycmF5KCk7CisKKyAgICB2b2lkIGFwcGVuZChjb25zdCBKU0NlbGwq
KTsKKworICAgIGJvb2wgY2FuUmVtb3ZlTGFzdCgpOworICAgIGNvbnN0IEpTQ2VsbCogcmVtb3Zl
TGFzdCgpOworICAgIGJvb2wgcmVmaWxsKCk7CisgICAgCisgICAgdm9pZCBkb25hdGVTb21lQ2Vs
bHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOworICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9t
KE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiAKLSAgICBp
bmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3RvcCArIG1fc2VnbWVudENhcGFjaXR5ICogbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHM7
Ci0gICAgfQorICAgIHNpemVfdCBzaXplKCk7CisgICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICBj
bGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIoTWFya1N0YWNrJiBzdGFjaykKLSAgICAgICAgICAgIDogbV9zdGFjayhzdGFj
aykKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFtX3N0YWNrLm1faXNJblBhcmFsbGVs
TW9kZSk7Ci0gICAgICAgICAgICBtX3N0YWNrLm1faXNJblBhcmFsbGVsTW9kZSA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5QYXJhbGxlbE1vZGVFbmFibGVyKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2RlKTsKLSAg
ICAgICAgICAgIG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2RlID0gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgTWFya1N0YWNrJiBtX3N0YWNrOwotICAg
IH07Citwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZXhwYW5kKCk7CisgICAg
CisgICAgc2l6ZV90IHBvc3RJbmNUb3AoKTsKKyAgICBzaXplX3QgcHJlRGVjVG9wKCk7CisgICAg
dm9pZCBzZXRUb3BGb3JGdWxsU2VnbWVudCgpOworICAgIHZvaWQgc2V0VG9wRm9yRW1wdHlTZWdt
ZW50KCk7CisgICAgc2l6ZV90IHRvcCgpOworICAgIAorICAgIHZvaWQgdmFsaWRhdGVQcmV2aW91
cygpOworCisgICAgTWFya1N0YWNrU2VnbWVudCogbV90b3BTZWdtZW50OworICAgIE1hcmtTdGFj
a1NlZ21lbnRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOworCisgICAgc2l6ZV90IG1fc2VnbWVudENh
cGFjaXR5OworICAgIHNpemVfdCBtX3RvcDsKKyAgICBzaXplX3QgbV9udW1iZXJPZlByZXZpb3Vz
U2VnbWVudHM7CisgICAKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oCShy
ZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJ
bmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDk0ICszMSw4MSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFs
dWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnBv
c3RJbmNUb3AoKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewot
ICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHNsb3RbaV07Ci0gICAgICAgIGludGVybmFsQXBwZW5k
KHZhbHVlKTsKLSAgICB9CisgICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9wKys7CisgICAgQVNTRVJU
KHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9wKyspOworICAgIHJldHVybiByZXN1bHQ7CiB9
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZFVu
YmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkKKyAgICAgICAgCitpbmxpbmUgc2l6ZV90IE1hcmtT
dGFja0FycmF5OjpwcmVEZWNUb3AoKQogewotICAgIEFTU0VSVChzbG90KTsKLSAgICBKU0NlbGwq
IGNlbGwgPSAqc2xvdDsKLSAgICBpbnRlcm5hbEFwcGVuZChjZWxsKTsKKyAgICBzaXplX3QgcmVz
dWx0ID0gLS1tX3RvcDsKKyAgICBBU1NFUlQocmVzdWx0ID09IC0tbV90b3BTZWdtZW50LT5tX3Rv
cCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KLQotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFj
azo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCisgICAgICAgIAoraW5saW5lIHZvaWQgTWFya1N0YWNr
QXJyYXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KCkKIHsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAg
aW50ZXJuYWxBcHBlbmQoKnNsb3QpOworICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09
IG1fc2VnbWVudENhcGFjaXR5KTsKKyAgICBtX3RvcCA9IG1fc2VnbWVudENhcGFjaXR5OwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpT
VmFsdWUqIHNsb3QpCitpbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6c2V0VG9wRm9yRW1wdHlT
ZWdtZW50KCkKIHsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3Qp
OworICAgIEFTU0VSVCghbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgbV90b3AgPSAwOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNDZWxsKiogc2xvdCkKK2lu
bGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnRvcCgpCiB7Ci0gICAgQVNTRVJUKHNsb3QpOwot
ICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKKyAgICBBU1NFUlQobV90b3AgPT0gbV90b3BTZWdt
ZW50LT5tX3RvcCk7CisgICAgcmV0dXJuIG1fdG9wOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
TWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlIHZhbHVlKQorI2lmIEFTU0VSVF9ESVNB
QkxFRAoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMoKSB7IH0K
KyNlbHNlCitpbmxpbmUgdm9pZCBNYXJrU3RhY2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cygpCiB7
Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgdW5zaWduZWQgY291bnQgPSAw
OworICAgIGZvciAoTWFya1N0YWNrU2VnbWVudCogY3VycmVudCA9IG1fdG9wU2VnbWVudC0+bV9w
cmV2aW91czsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm1fcHJldmlvdXMpCisgICAgICAg
IGNvdW50Kys7CisgICAgQVNTRVJUKGNvdW50ID09IG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRz
KTsKIH0KKyNlbmRpZgogCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkZFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikK
K2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjphcHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQog
ewotICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKKyAgICBpZiAobV90b3AgPT0gbV9zZWdtZW50Q2FwYWNp
dHkpCisgICAgICAgIGV4cGFuZCgpOworICAgIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3Bvc3RJbmNU
b3AoKV0gPSBjZWxsOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciogdW5jb25kaXRpb25hbEZpbmFsaXpl
cikKK2lubGluZSBib29sIE1hcmtTdGFja0FycmF5OjpjYW5SZW1vdmVMYXN0KCkKIHsKLSAgICBt
X3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodW5jb25kaXRp
b25hbEZpbmFsaXplcik7CisgICAgcmV0dXJuICEhbV90b3A7CiB9CiAKLWlubGluZSB2b2lkIE1h
cmtTdGFjazo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQoraW5saW5lIGNvbnN0IEpTQ2VsbCog
TWFya1N0YWNrQXJyYXk6OnJlbW92ZUxhc3QoKQogewotI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
LSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7Ci0gICAgICAgIC8v
IFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KLSAgICAgICAgbV9zaGFyZWQu
bV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8g
UHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZl
cnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNl
dHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJs
ZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwotI2Vsc2UKLSAgICBtX29wYXF1ZVJv
b3RzLmFkZChyb290KTsKLSNlbmRpZgorICAgIHJldHVybiBtX3RvcFNlZ21lbnQtPmRhdGEoKVtw
cmVEZWNUb3AoKV07CiB9CiAKLWlubGluZSBib29sIE1hcmtTdGFjazo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHJvb3QpCitpbmxpbmUgYm9vbCBNYXJrU3RhY2tBcnJheTo6aXNFbXB0eSgpCiB7
Ci0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotI2lmIEVOQUJMRShQQVJBTExFTF9H
QykKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX3No
YXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwotI2Vsc2UKLSAgICByZXR1cm4gbV9v
cGFxdWVSb290cy5jb250YWlucyhyb290KTsKLSNlbmRpZgorICAgIGlmIChtX3RvcCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKKyAg
ICAgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV9wcmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50
Q2FwYWNpdHkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OwogfQogCi1pbmxpbmUgaW50IE1hcmtTdGFjazo6b3BhcXVlUm9vdENvdW50KCkKK2lubGluZSBz
aXplX3QgTWFya1N0YWNrQXJyYXk6OnNpemUoKQogewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxs
ZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9v
dHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5zaXplKCk7
Ci0jZWxzZQotICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLnNpemUoKTsKLSNlbmRpZgorICAgIHJl
dHVybiBtX3RvcCArIG1fc2VnbWVudENhcGFjaXR5ICogbV9udW1iZXJPZlByZXZpb3VzU2VnbWVu
dHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTIgQEAK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorCisjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1
ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitTbG90VmlzaXRvcjo6U2xvdFZpc2l0
b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQpCisgICAgOiBtX3N0YWNrKHNoYXJlZC5tX3Nl
Z21lbnRBbGxvY2F0b3IpCisgICAgLCBtX3Zpc2l0Q291bnQoMCkKKyAgICAsIG1faXNJblBhcmFs
bGVsTW9kZShmYWxzZSkKKyAgICAsIG1fc2hhcmVkKHNoYXJlZCkKKyAgICAsIG1fc2hvdWxkSGFz
aENvbnN0KGZhbHNlKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAsIG1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQorICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQor
I2VuZGlmCit7Cit9CisKK1Nsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQoreworICAgIEFTU0VS
VChtX3N0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OnNldHVwKCkKK3sK
KyAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fZ2xvYmFsRGF0YS0+
aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zdCgpOworICAgIG1fc2hvdWxkSGFzaENvbnN0
ID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NoYXJlZC5tX21hcmtpbmdUaHJlYWRzTWFy
a1N0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdUaHJlYWRzTWFy
a1N0YWNrW2ldLT5tX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0
OworI2VuZGlmCit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0
Q291bnQgPSAwOworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisjaWYgRU5BQkxFKFBB
UkFMTEVMX0dDKQorICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3Vs
ZCBoYXZlIG1lcmdlZCBieSBub3cuCisjZWxzZQorICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsK
KyNlbmRpZgorICAgIGlmIChtX3Nob3VsZEhhc2hDb25zdCkgeworICAgICAgICBtX3VuaXF1ZVN0
cmluZ3MuY2xlYXIoKTsKKyAgICAgICAgbV9zaG91bGRIYXNoQ29uc3QgPSBmYWxzZTsKKyAgICB9
Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2Vy
dmF0aXZlUm9vdHMpCit7CisgICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5y
b290cygpOworICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpbnRlcm5hbEFwcGVu
ZChyb290c1tpXSk7Cit9CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQoreworI2lmIEVOQUJM
RShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCisgICAgbV92aXNpdGVkVHlwZUNvdW50cy5jb3VudChj
ZWxsKTsKKyNlbmRpZgorCisgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKKyAgICAK
KyAgICBpZiAoaXNKU1N0cmluZyhjZWxsKSkgeworICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGls
ZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpc0pTRmluYWxPYmplY3QoY2VsbCkpIHsKKyAgICAgICAgSlNG
aW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNp
dG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0pTQXJyYXkoY2VsbCkp
IHsKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpLCB2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNlbGwtPm1ldGhv
ZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRv
cik7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAg
IC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNv
bnNlcnZhdGl2ZSwgYW5kCisgICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2Zp
dGFibGUuCisKKyAgICAvLyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRl
YWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCisgICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVk
IHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQorICAgIC8vIHRoYXQg
ZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KKyAgICBpZiAobV9zaGFyZWQubV9zaGFy
ZWRNYXJrU3RhY2suc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSdyZSBj
b250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFu
b3RoZXIKKyAgICAvLyB0aHJlYWQgaXMgYWxyZWFkeSBkb25hdGluZy4KKyAgICBNdXRleFRyeUxv
Y2tlciBsb2NrZXIobV9zaGFyZWQubV9tYXJraW5nTG9jayk7CisgICAgaWYgKCFsb2NrZXIubG9j
a2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQg
YSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCisgICAgbV9zdGFjay5kb25h
dGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjayk7CisKKyAgICBpZiAobV9z
aGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkpCisgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNh
c3QoKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQoreworICAgIEFTU0VSVChtX2lz
SW5QYXJhbGxlbE1vZGUpOworICAgCisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMSkgeworICAgICAgICB3aGlsZSAoIW1fc3Rh
Y2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fu
c0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3du
LS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3Zl
TGFzdCgpKTsKKyAgICAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0
eSgpKSB7CisgICAgICAgIG1fc3RhY2sucmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChtX3N0YWNr
LmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3Rh
Y2sucmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJv
bVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQoreworICAgIEFTU0VSVCht
X2lzSW5QYXJhbGxlbE1vZGUpOworICAgIAorICAgIEFTU0VSVChPcHRpb25zOjpudW1iZXJPZkdD
TWFya2VycygpKTsKKyAgICAKKyAgICBib29sIHNob3VsZEJlUGFyYWxsZWw7CisKKyNpZiBFTkFC
TEUoUEFSQUxMRUxfR0MpCisgICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9wdGlvbnM6Om51bWJlck9m
R0NNYXJrZXJzKCkgPiAxOworI2Vsc2UKKyAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01h
cmtlcnMoKSA9PSAxKTsKKyAgICBzaG91bGRCZVBhcmFsbGVsID0gZmFsc2U7CisjZW5kaWYKKyAg
ICAKKyAgICBpZiAoIXNob3VsZEJlUGFyYWxsZWwpIHsKKyAgICAgICAgLy8gVGhpcyBjYWxsIHNo
b3VsZCBiZSBhIG5vLW9wLgorICAgICAgICBBU1NFUlRfVU5VU0VEKHNoYXJlZERyYWluTW9kZSwg
c2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2su
aXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlz
RW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFy
a2luZ0xvY2spOworICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzKys7CisgICAgfQorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHsKKyAgICAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAg
IG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsKKworICAgICAgICAg
ICAgLy8gSG93IHdlIHdhaXQgZGlmZmVycyBkZXBlbmRpbmcgb24gZHJhaW4gbW9kZS4KKyAgICAg
ICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsKKyAgICAgICAgICAg
ICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBpcyByZWFjaGVkLCBvciB1bnRp
bCB0aGVyZSBpcyBzb21lIHdvcmsKKyAgICAgICAgICAgICAgICAvLyBmb3IgdXMgdG8gZG8uCisg
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRGlk
IHdlIHJlYWNoIHRlcm1pbmF0aW9uPworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVk
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNs
ZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byBnaXZlIHRoZWlyIHByaXZh
dGUgQ29waWVkQmxvY2tzIGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1f
bWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCisgICAgICAgICAgICAgICAgICAgIG1fc2hh
cmVkLm1fbWFya2luZ0NvbmRpdGlvbi53YWl0KG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRo
ZSBtYXN0ZXIga25vdy4KKyAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJv
YWRjYXN0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgd2hpbGUgKG1fc2hh
cmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQubV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9zaGFyZWQubV9u
dW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29weWluZygpOworICAg
ICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJl
ZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gSXMgdGhlIFZNIGV4aXRpbmc/IElmIHNvLCBleGl0IHRoaXMgdGhy
ZWFkLgorICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgCisgICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVt
YmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtl
cnM7CisgICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbShtX3NoYXJlZC5tX3No
YXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50KTsKKyAgICAgICAgICAgIG1fc2hhcmVkLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZHJhaW4oKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBTbG90VmlzaXRvcjo6bWVy
Z2VPcGFxdWVSb290cygpCit7CisgICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7
IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5
LgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fb3BhcXVlUm9v
dHNMb2NrKTsKKyAgICAgICAgSGFzaFNldDx2b2lkKj46Oml0ZXJhdG9yIGJlZ2luID0gbV9vcGFx
dWVSb290cy5iZWdpbigpOworICAgICAgICBIYXNoU2V0PHZvaWQqPjo6aXRlcmF0b3IgZW5kID0g
bV9vcGFxdWVSb290cy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PHZvaWQqPjo6aXRlcmF0
b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgbV9zaGFy
ZWQubV9vcGFxdWVSb290cy5hZGQoKml0ZXIpOworICAgIH0KKyAgICBtX29wYXF1ZVJvb3RzLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OnN0YXJ0Q29weWluZygpCit7CisgICAgQVNT
RVJUKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpOworfQorCit2b2lkKiBTbG90VmlzaXRv
cjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90IGJ5dGVzKQoreworICAgIG1fc2hhcmVkLm1f
Y29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2sobV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJy
ZW50QmxvY2soKSk7CisgICAgbV9jb3BpZWRBbGxvY2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hh
cmVkLm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxvY2tGb3JDb3B5aW5nUGhhc2UoKSk7CisKKyAg
ICB2b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNrZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2Nv
cGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRlcywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRp
ZFN1Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIFNsb3RWaXNpdG9yOjph
bGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCogcHRyLCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYg
KCFjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZShwdHIsIGJ5dGVzKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFsbG9jYXRlTmV3U3BhY2UoYnl0ZXMpOworfQor
CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQoreworI2lm
IEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1bnNpZ25lZCBjdXJyZW50RmxhZ3MgPSBtX2ZsYWdz
OworCisgICAgaWYgKGN1cnJlbnRGbGFncyAmIEhhc2hDb25zdExvY2spCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHVuc2lnbmVkIG5ld0ZsYWdzID0gY3VycmVudEZsYWdzIHwgSGFzaENv
bnN0TG9jazsKKworICAgIGlmICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoJm1fZmxhZ3MsIGN1
cnJlbnRGbGFncywgbmV3RmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXVEY6
Om1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAg
aWYgKGlzSGFzaENvbnN0U2luZ2xldG9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fZmxhZ3MgfD0gSGFzaENvbnN0TG9jazsKKworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmluZzo6cmVsZWFzZUhhc2hDb25zdExvY2soKQor
eworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBXVEY6Om1lbW9yeUJhcnJpZXJCZWZvcmVV
bmxvY2soKTsKKyNlbmRpZgorICAgIG1fZmxhZ3MgJj0gfkhhc2hDb25zdExvY2s7Cit9CisKK0FM
V0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENvbnN0KCkKK3sKKyAgICBy
ZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1JvcGUoKSAmJiAhaXNIYXNoQ29uc3RTaW5nbGV0
b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBl
bmQoSlNWYWx1ZSogc2xvdCkKK3sKKyAgICAvLyBUaGlzIGludGVybmFsQXBwZW5kIGlzIG9ubHkg
aW50ZW5kZWQgZm9yIHZpc2l0cyB0byBvYmplY3QgYW5kIGFycmF5IGJhY2tpbmcgc3RvcmVzLgor
ICAgIC8vIGFzIGl0IGNhbiBjaGFuZ2UgdGhlIEpTVmFsdWUgcG9pbnRlZCB0byBiZSB0aGUgYXJn
dW1lbnQgd2hlbiB0aGUgb3JpZ2luYWwgSlNWYWx1ZQorICAgIC8vIGlzIGEgc3RyaW5nIHRoYXQg
Y29udGFpbnMgdGhlIHNhbWUgY29udGVudHMgYXMgYW5vdGhlciBzdHJpbmcuCisKKyAgICBBU1NF
UlQoc2xvdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9ICpzbG90OworICAgIEFTU0VSVCh2YWx1ZSk7
CisgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNDZWxs
KiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgaWYgKCFjZWxsKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAobV9zaG91bGRIYXNoQ29uc3QgJiYgY2VsbC0+aXNTdHJpbmcoKSkgeworICAg
ICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oY2VsbCk7CisgICAgICAg
IGlmIChzdHJpbmctPnNob3VsZFRyeUhhc2hDb25zdCgpICYmIHN0cmluZy0+dHJ5SGFzaENvbnN0
TG9jaygpKSB7CisgICAgICAgICAgICBVbmlxdWVTdHJpbmdNYXA6OkFkZFJlc3VsdCBhZGRSZXN1
bHQgPSBtX3VuaXF1ZVN0cmluZ3MuYWRkKHN0cmluZy0+c3RyaW5nKCkuaW1wbCgpLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAg
c3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0b24oKTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAganNDYXN0PEpTU3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFz
Q2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKTsKKyAgICAgICAgICAgICAgICAqc2xv
dCA9IGV4aXN0aW5nSlNWYWx1ZTsKKyAgICAgICAgICAgICAgICBzdHJpbmctPnJlbGVhc2VIYXNo
Q29uc3RMb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAgICB9CisgICAg
fQorCisgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmNv
cHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90IGJ5dGVzLCBKU1ZhbHVlKiB2YWx1ZXMsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICB2b2lkKiBvbGRQdHIgPSAqcHRyOworICAgIHZvaWQqIG5l
d1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihvbGRQdHIsIGJ5dGVzKTsKKyAgICBpZiAobmV3
UHRyKSB7CisgICAgICAgIHNpemVfdCBqc1ZhbHVlc09mZnNldCA9IHN0YXRpY19jYXN0PHNpemVf
dD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFsdWVzKSAtIHN0YXRpY19jYXN0PGNoYXIqPihv
bGRQdHIpKTsKKworICAgICAgICBKU1ZhbHVlKiBuZXdWYWx1ZXMgPSByZWludGVycHJldF9jYXN0
X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1B0cikgKyBqc1ZhbHVlc09mZnNl
dCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNbaV07CisgICAgICAgICAgICBuZXdWYWx1
ZXNbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQp
OworICAgICAgICAqcHRyID0gbmV3UHRyOworICAgIH0gZWxzZQorICAgICAgICBhcHBlbmQodmFs
dWVzLCBsZW5ndGgpOworfQorICAgIAordm9pZCBTbG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQor
eworICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVk
QWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQoreworICAgIGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQorICAgICAgICBjdXJyZW50LT52aXNp
dFdlYWtSZWZlcmVuY2VzKCp0aGlzKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsRmluYWxpemVycygpCit7CisgICAgd2hpbGUgKG1fc2hhcmVkLm1fdW5jb25k
aXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKQorICAgICAgICBtX3NoYXJlZC5tX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsK
K30KKworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQordm9pZCBTbG90VmlzaXRvcjo6dmFsaWRh
dGUoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbCkgeworICAgICAgICBkYXRhTG9nKCJj
ZWxsIGlzIE5VTExcbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGlmICghY2Vs
bC0+c3RydWN0dXJlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiY2VsbCBhdCAlcCBoYXMgYSBudWxs
IHN0cnVjdHVyZVxuIiAsIGNlbGwpOworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIC8v
IEJvdGggdGhlIGNlbGwncyBzdHJ1Y3R1cmUsIGFuZCB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0
cnVjdHVyZSBzaG91bGQgYmUgdGhlIFN0cnVjdHVyZSBTdHJ1Y3R1cmUuCisgICAgLy8gSSBoYXRl
IHRoaXMgc2VudGVuY2UuCisgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+
SlNDZWxsOjpjbGFzc0luZm8oKSAhPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0lu
Zm8oKSkgeworICAgICAgICBjb25zdCBjaGFyKiBwYXJlbnRDbGFzc05hbWUgPSAwOworICAgICAg
ICBjb25zdCBjaGFyKiBvdXJDbGFzc05hbWUgPSAwOworICAgICAgICBpZiAoY2VsbC0+c3RydWN0
dXJlKCktPnN0cnVjdHVyZSgpICYmIGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlND
ZWxsOjpjbGFzc0luZm8oKSkKKyAgICAgICAgICAgIHBhcmVudENsYXNzTmFtZSA9IGNlbGwtPnN0
cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKS0+Y2xhc3NOYW1lOwor
ICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkpCisgICAg
ICAgICAgICBvdXJDbGFzc05hbWUgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0lu
Zm8oKS0+Y2xhc3NOYW1lOworICAgICAgICBkYXRhTG9nKCJwYXJlbnQgc3RydWN0dXJlICglcCA8
JXM+KSBvZiBjZWxsIGF0ICVwIGRvZXNuJ3QgbWF0Y2ggY2VsbCdzIHN0cnVjdHVyZSAoJXAgPCVz
PilcbiIsCisgICAgICAgICAgICAgICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBw
YXJlbnRDbGFzc05hbWUsIGNlbGwsIGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOwor
ICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKyNlbHNlCit2b2lkIFNsb3RWaXNpdG9yOjp2YWxp
ZGF0ZShKU0NlbGwqKQoreworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywzNSArMjcsNTIgQEAKICNkZWZpbmUgU2xvdFZpc2l0b3JfaAogCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNsdWRlICJIYW5k
bGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFja0lubGluZU1ldGhvZHMuaCIKIAorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEhl
YXA7CitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsK
K2NsYXNzIEhlYXA7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNl
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSklUV3JpdGVCYXJyaWVyOworCitjbGFzcyBT
bG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2xvdFZpc2l0b3IpOworICAg
IGZyaWVuZCBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7IC8vIEFsbG93ZWQgdG8gbWFyayBhIEpTVmFs
dWUqIG9yIEpTQ2VsbCoqIGRpcmVjdGx5LgogCi1jbGFzcyBTbG90VmlzaXRvciA6IHB1YmxpYyBN
YXJrU3RhY2sgewotICAgIGZyaWVuZCBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7CiBwdWJsaWM6CiAg
ICAgU2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJik7CisgICAgflNsb3RWaXNpdG9yKCk7
CiAKLSAgICB2b2lkIGRvbmF0ZSgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9pc0luUGFyYWxs
ZWxNb2RlKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGRvbmF0ZUtub3duUGFyYWxs
ZWwoKTsKLSAgICB9CisgICAgdm9pZCBhcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICAK
LSAgICB2b2lkIGRyYWluKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQo
SklUV3JpdGVCYXJyaWVyPFQ+Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBl
bmQoV3JpdGVCYXJyaWVyQmFzZTxUPiopOworICAgIHZvaWQgYXBwZW5kVmFsdWVzKFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291bnQpOwogICAgIAotICAgIHZvaWQgZG9uYXRl
QW5kRHJhaW4oKQotICAgIHsKLSAgICAgICAgZG9uYXRlKCk7Ci0gICAgICAgIGRyYWluKCk7Ci0g
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZFBvaW50ZXIoVCoqKTsKKyAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkVmFsdWUoSlNWYWx1ZSop
OworICAgIAorICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CisgICAgYm9vbCBjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCopOworICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKKworICAgIEdD
VGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9CisgICAg
Ym9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQg
c2V0dXAoKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQorCisgICAgdm9pZCBkb25hdGUoKTsKKyAgICB2
b2lkIGRyYWluKCk7CisgICAgdm9pZCBkb25hdGVBbmREcmFpbigpOwogICAgIAogICAgIGVudW0g
U2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJhaW4gfTsKICAgICB2b2lkIGRy
YWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOwpAQCAtNzgsMTkgKzk1LDg0IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGRvbmVDb3B5aW5nKCk7IAogICAgICAgICAKKyNpZiBFTkFCTEUo
U0lNUExFX0hFQVBfUFJPRklMSU5HKQorICAgIFZUYWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5cGVD
b3VudHM7CisjZW5kaWYKKworICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKik7CisgICAgdm9pZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVy
KFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqKTsKKworI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dH
SU5HKQorICAgIGlubGluZSB2b2lkIHJlc2V0Q2hpbGRDb3VudCgpIHsgbV9sb2dDaGlsZENvdW50
ID0gMDsgfQorICAgIGlubGluZSB1bnNpZ25lZCBjaGlsZENvdW50KCkgeyByZXR1cm4gbV9sb2dD
aGlsZENvdW50OyB9CisgICAgaW5saW5lIHZvaWQgaW5jcmVtZW50Q2hpbGRDb3VudCgpIHsgbV9s
b2dDaGlsZENvdW50Kys7IH0KKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
YXJhbGxlbE1vZGVFbmFibGVyOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2
b2lkIHZhbGlkYXRlKEpTQ2VsbCopOworCisgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSopOworICAg
IHZvaWQgYXBwZW5kKEpTVmFsdWUqLCBzaXplX3QgY291bnQpOworICAgIHZvaWQgYXBwZW5kKEpT
Q2VsbCoqKTsKKworICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNDZWxsKik7CisgICAgdm9pZCBp
bnRlcm5hbEFwcGVuZChKU1ZhbHVlKTsKKyAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUq
KTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsK
KyAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgbWVyZ2VP
cGFxdWVSb290c0lmUHJvZml0YWJsZSgpOworICAgIAogICAgIHZvaWQqIGFsbG9jYXRlTmV3U3Bh
Y2VPclBpbih2b2lkKiwgc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhz
aXplX3QpOwogCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAKKyAgICBNYXJrU3Rh
Y2tBcnJheSBtX3N0YWNrOworICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9vdHM7IC8vIEhh
bmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNv
bGxlY3Rvci4KKyAgICAKKyAgICBzaXplX3QgbV92aXNpdENvdW50OworICAgIGJvb2wgbV9pc0lu
UGFyYWxsZWxNb2RlOworICAgIAorICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CisK
KyAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OyAvLyBMb2NhbCBwZXItdGhyZWFkIGNvcHkgb2Yg
c2hhcmVkIGZsYWcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nSW1wbCosIEpTVmFsdWU+IFVuaXF1ZVN0cmluZ01hcDsKKyAgICBVbmlxdWVTdHJpbmdN
YXAgbV91bmlxdWVTdHJpbmdzOworCisjaWYgRU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCisg
ICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OworI2VuZGlmCisKICAgICBDb3BpZWRBbGxvY2F0
b3IgbV9jb3BpZWRBbGxvY2F0b3I7CisKK3B1YmxpYzoKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyAgICBib29sIG1f
aXNEcmFpbmluZzsKKyNlbmRpZgogfTsKIAotaW5saW5lIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRv
cihHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCkKLSAgICA6IE1hcmtTdGFjayhzaGFyZWQpCi17
Ci19CitjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyIHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbE1v
ZGVFbmFibGVyKFNsb3RWaXNpdG9yJiBzdGFjaykKKyAgICAgICAgOiBtX3N0YWNrKHN0YWNrKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YWNrLm1faXNJblBhcmFsbGVsTW9kZSk7CisgICAg
ICAgIG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2RlID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
flBhcmFsbGVsTW9kZUVuYWJsZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2subV9p
c0luUGFyYWxsZWxNb2RlKTsKKyAgICAgICAgbV9zdGFjay5tX2lzSW5QYXJhbGxlbE1vZGUgPSBm
YWxzZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOwor
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjc3
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhv
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDExNSBAQAogI2RlZmluZSBTbG90Vmlz
aXRvcklubGluZU1ldGhvZHNfaAogCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2Rz
LmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChK
U1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUmIHZhbHVlID0gc2xvdFtpXTsKKyAgICAg
ICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoq
IHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTQ2VsbCogY2VsbCA9ICpzbG90Owor
ICAgIGludGVybmFsQXBwZW5kKGNlbGwpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBp
bnRlcm5hbEFwcGVuZCgqc2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShKU1ZhbHVlKiBzbG90KQoreworICAgIEFTU0VSVChz
bG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2VsbCoqIHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3Qp
OworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm47CisgICAgaW50ZXJuYWxBcHBl
bmQodmFsdWUuYXNDZWxsKCkpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNl
SGFydmVzdGVyKQoreworICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRk
VGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKK30KKworaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXpl
ciogdW5jb25kaXRpb25hbEZpbmFsaXplcikKK3sKKyAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9u
YWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodW5jb25kaXRpb25hbEZpbmFsaXplcik7Cit9CisK
K2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7Cisj
aWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vy
cygpID09IDEpIHsKKyAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNo
U2V0LgorICAgICAgICBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBQdXQgaW50byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ug
d2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNlIGluCisgICAgLy8gYSB3aGlsZSB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24ndCBncm93IHRvbyBsYXJnZS4KKyAgICBtZXJn
ZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CisgICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7
CisjZWxzZQorICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworI2VuZGlmCit9CisKK2lubGlu
ZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAg
ICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQor
ICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVk
Lm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CisjZWxzZQorICAgIHJldHVybiBtX29wYXF1
ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworI2VuZGlmCit9CisKK2lubGluZSBpbnQgU2xvdFZpc2l0
b3I6Om9wYXF1ZVJvb3RDb3VudCgpCit7CisgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUp
OworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0Vt
cHR5KCkpOworICAgIHJldHVybiBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKKyNlbHNl
CisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6ZSgpOworI2VuZGlmCit9CisKK2lubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQoreworICAgIGlm
IChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1lcmdlT3Bh
cXVlUm9vdHMoKTsKK30KKyAgICAKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1
ZVJvb3RzSWZQcm9maXRhYmxlKCkKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
b3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbWVyZ2VPcGFxdWVSb290cygpOworfQorICAgIAogQUxX
QVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjpjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVy
d2lzZSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRlcykKIHsKICAgICBpZiAoQ29waWVkU3BhY2U6
OmlzT3ZlcnNpemUoYnl0ZXMpKSB7CkBAIC01NSw2ICsxNjAsMjEgQEAgQUxXQVlTX0lOTElORSB2
b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdAogICAgIHJldHVybiByZXN1bHQ7CiB9ICAgICAgIAog
CitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKK3sKKyAgICBBU1NFUlQobV9pc0lu
UGFyYWxsZWxNb2RlKTsKKyAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAx
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOworfQor
CitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQoreworICAgIGRvbmF0
ZSgpOworICAgIGRyYWluKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
U2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUV3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgot
I2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTM1LDcgKzEzNSw3IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBN
YXJrU3RhY2s6OmFwcGVuZChKSVRXcml0ZUJhcnJpZXI8VD4qIHNsb3QpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpJVFdyaXRlQmFycmllcjxU
Piogc2xvdCkKIHsKICAgICBpbnRlcm5hbEFwcGVuZChzbG90LT5nZXQoKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0
Y2hwb2ludC5jcHAJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2Rz
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZU1ldGhvZHMuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiBtX2NsYXNzSW5mbzsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU0NlbGwqIGNlbGwpCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU0NlbGwqIGNl
bGwpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uKTsKICAgICAgICAgaWYgKCFjZWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjUsMTQgKzIyNSwxNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gaW5saW5l
CiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMuZ2V0KCk7CiB9CiAKLS8vIE1hcmtTdGFjayBm
dW5jdGlvbnMKKy8vIFNsb3RWaXNpdG9yIGZ1bmN0aW9ucwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChX
cml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQogewogICAgIGludGVybmFsQXBwZW5kKCpzbG90LT5z
bG90KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmRWYWx1ZXMo
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK0FMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCiB7CiAgICAgYXBwZW5kKGJhcnJpZXJz
LT5zbG90KCksIGNvdW50KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJK
SVQuY3BwCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8
d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3B0
aW9ucy5oIgogI2luY2x1ZGUgIllhcnIuaCIKICNpbmNsdWRlICJZYXJyQ2Fub25pY2FsaXplVUNT
Mi5oIgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162635</attachid>
            <date>2012-09-06 18:08:06 -0700</date>
            <delta_ts>2012-09-06 20:34:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96043-20120906180746.patch</filename>
            <type>text/plain</type>
            <size>66560</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxMi0wOS0wNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvbWJpbmUgTWFya1N0YWNrIGFuZCBTbG90VmlzaXRvciBpbnRvIHNpbmdsZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYw
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IGFsbCBvZiBNYXJrU3RhY2sgaW50byBTbG90VmlzaXRvci4gVGhlIHJlbWFpbmluZyBzdHVmZiBp
biBNYXJrU3RhY2suY3BwIGFjdHVhbGx5IGhhcyB0byBkbyAKKyAgICAgICAgd2l0aCBNYXJrU3Rh
Y2sgbWFuYWdlbWVudC9hbGxvY2F0aW9uLiBDbGVhbmVkIHVwIGEgZmV3IG9mIHRoZSBoZWFkZXIg
ZmlsZXMgd2hpbGUgSSB3YXMgYXQgaXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbi5oOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAg
ICAgKiBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWRE
YXRhKToKKyAgICAgICAgKiBoZWFwL0hlYXBSb290VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAv
TWFya1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChNYXJrU3RhY2tTZWdtZW50KToKKyAgICAgICAg
KEpTQzo6TWFya1N0YWNrU2VnbWVudDo6ZGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1Nl
Z21lbnQ6OmNhcGFjaXR5RnJvbVNpemUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50
OjpzaXplRnJvbUNhcGFjaXR5KToKKyAgICAgICAgKE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3Ip
OgorICAgICAgICAoTWFya1N0YWNrQXJyYXkpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrSW5s
aW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cG9zdEluY1RvcCk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cHJlRGVjVG9w
KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckVtcHR5U2VnbWVudCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5Ojp0b3ApOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cyk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6Y2FuUmVtb3ZlTGFzdCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KToKKyAgICAgICAgKEpT
Qzo6TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJh
eTo6c2l6ZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdl
T3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VPclBpbik6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnJlbGVhc2VIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNob3VsZFRy
eUhhc2hDb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZhbGlkYXRlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c2hh
cmVkRGF0YSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXRDaGlsZENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNoaWxkQ291
bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW5jcmVtZW50Q2hpbGRDb3VudCk6Cisg
ICAgICAgIChQYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKEpTQzo6UGFyYWxsZWxNb2Rl
RW5hYmxlcjo6UGFyYWxsZWxNb2RlRW5hYmxlcik6CisgICAgICAgIChKU0M6OlBhcmFsbGVsTW9k
ZUVuYWJsZXI6On5QYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6b3BhcXVlUm9vdENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9w
YXF1ZVJvb3RzSWZQcm9maXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAg
ICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBw
ZW5kKToKKyAgICAgICAgKiBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVl
cyk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKwogMjAxMi0wOS0wNiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgSlMgdGVzdCBzdWl0
ZSBwdXRzIGluY29ycmVjdCBsaW1pdGF0aW9ucyBvbiBGdW5jdGlvbi50b1N0cmluZygpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjc3NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvTWFya2Vk
QmxvY2suY3BwCiAgICAgaGVhcC9NYXJrZWRTcGFjZS5jcHAKICAgICBoZWFwL01hcmtTdGFjay5j
cHAKKyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKICAgICBo
ZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKICAgICBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFj
ay5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyNzc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBc
CiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAgXAogICAgIGhlYXAvTWFya2VkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAg
XAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogICAgIGRlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsNyArMzY2LDYgQEAgRVhQT1JUUwog
ICAgID91bmxvY2tATXV0ZXhAV1RGQEBRQUVYWFoKICAgICA/dW5sb2NrQXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgogICAgID91bnByb3RlY3RASGVhcEBKU0NAQFFB
RV9OVkpTVmFsdWVAMkBAWgotICAgID92YWxpZGF0ZUBNYXJrU3RhY2tASlNDQEBLQVhQQVZKU0Nl
bGxAMkBAWgogICAgID92aXNpdENoaWxkcmVuQEpTR2xvYmFsT2JqZWN0QEpTQ0BAU0FYUEFWSlND
ZWxsQDJAQUFWU2xvdFZpc2l0b3JAMkBAWgogICAgID92aXNpdENoaWxkcmVuQEpTR2xvYmFsVGhp
c0BKU0NAQEtBWFBBVkpTQ2VsbEAyQEFBVlNsb3RWaXNpdG9yQDJAQFoKICAgICA/dmlzaXRDaGls
ZHJlbkBKU09iamVjdEBKU0NAQFNBWFBBVkpTQ2VsbEAyQEFBVlNsb3RWaXNpdG9yQDJAQFoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjM4Niw2ICsyMzg2LDEwIEBACiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcU2xvdFZpc2l0b3IuY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFw
XFN0cm9uZy5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjkz
LDYgKzY5Myw4IEBACiAJCUMyMTEyMkUxMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJl
ZERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAgKi87IH07
CiAJCUMyMTEyMkUyMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTEyMkRGMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjExMjJFMzE1REQ5QUIzMDA3OTBFM0EgLyog
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzIxMTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGlu
ZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2Rz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNCNDA4
NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyNTQ5NDMxNUY3REJB
QTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRv
ci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVC
NjQgLyogQ29waWVkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAq
LzsgfTsKIAkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjVGOEJD
QjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLzsgfTsKQEAgLTE0
NTUsNiArMTQ1Nyw3IEBACiAJCUMyMTEyMkRFMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNo
YXJlZERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJl
YWRTaGFyZWREYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMTIyREYx
NUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZFNoYXJlZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzIxMTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1l
dGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya1N0YWNrSW5saW5l
TWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjI1NDk0MjE1RjdEQkFB
MDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29waWVkU3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluY3JlbWVudGFs
U3dlZXBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNUY4QkNDMTU3NTQ0
QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5jcmVtZW50YWxTd2VlcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNzg0LDYgKzE3ODcsNyBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIy
NTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQlDMjExMjJE
RTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLywKIAkJCQlDMjEx
MjJERjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8sCiAJCQkJQzIx
MTIyRTAxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMuaCAqLywKQEAg
LTI1MjcsNiArMjUzMSw3IEBACiAJCQkJQzJCOTE2QzIxNERBMDE0RTAwQ0JBQzg2IC8qIE1hcmtl
ZEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMTEyMkUyMTVERDlBQjMwMDc5
MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMTYwRkU3
MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3RhY2tJbmxpbmVN
ZXRob2RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVGOEJDRTE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM1MDMsNiArMzUwOCw3IEBA
CiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90Vmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQAogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJNZXRo
b2RDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTI3NzU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZU9y
aWdpbi5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIu
aCIKIAogLyogREZHX0VOQUJMRSgpIC0gdHVybiBvbiBhIHNwZWNpZmljIGZlYXR1cmVzIGluIHRo
ZSBERkcgSklUICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNo
YXJlZERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkU2hhcmVkRGF0YS5jcHAJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJNYXJrU3Rh
Y2suaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFyZWREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRTaGFy
ZWREYXRhLmgJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDVGhyZWFkU2hhcmVkRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiwxMiBAQAog
I2lmbmRlZiBHQ1RocmVhZFNoYXJlZERhdGFfaAogI2RlZmluZSBHQ1RocmVhZFNoYXJlZERhdGFf
aAogCisjaW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgi
CisjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgorI2luY2x1ZGUgIldlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDgsNyArNTMsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKIHByaXZhdGU6Ci0gICAg
ZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
ICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCkBAIC02NCw3ICs2OCw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3VsZEhhc2hDb25zdDsKIAogICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBt
X21hcmtpbmdUaHJlYWRzOwotICAgIFZlY3RvcjxNYXJrU3RhY2sqPiBtX21hcmtpbmdUaHJlYWRz
TWFya1N0YWNrOworICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fbWFya2luZ1RocmVhZHNNYXJr
U3RhY2s7CiAgICAgCiAgICAgTXV0ZXggbV9tYXJraW5nTG9jazsKICAgICBUaHJlYWRDb25kaXRp
b24gbV9tYXJraW5nQ29uZGl0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcFJvb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFJvb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBSb290VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjZGVmaW5lIEhlYXBSb290VmlzaXRvcl9oCiAKICNpbmNsdWRlICJTbG90VmlzaXRv
ci5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNDAyICsyMjMsNCBAQCB2b2lkIE1hcmtTdGFja0Fy
cmF5OjpzdGVhbFNvbWVDZWxsc0Zyb20oCiAgICAgICAgIGFwcGVuZChvdGhlci5yZW1vdmVMYXN0
KCkpOwogfQogCi1NYXJrU3RhY2s6Ok1hcmtTdGFjayhHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJl
ZCkKLSAgICA6IG1fc3RhY2soc2hhcmVkLm1fc2VnbWVudEFsbG9jYXRvcikKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihmYWxz
ZSkKLSAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV92aXNpdENvdW50
KDApCi0gICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCi0gICAgLCBtX3NoYXJlZChzaGFy
ZWQpCi0gICAgLCBtX3Nob3VsZEhhc2hDb25zdChmYWxzZSkKLXsKLX0KLQotTWFya1N0YWNrOjp+
TWFya1N0YWNrKCkKLXsKLSAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotfQotCi12b2lk
IE1hcmtTdGFjazo6c2V0dXAoKQotewotICAgIG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ID0g
bV9zaGFyZWQubV9nbG9iYWxEYXRhLT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCk7
Ci0gICAgbV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKLSNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2hh
cmVkLm1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fc2hh
cmVkLm1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPm1fc2hvdWxkSGFzaENvbnN0ID0gbV9z
aGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7Ci0jZW5kaWYKLX0KLQotdm9pZCBNYXJrU3RhY2s6OnJl
c2V0KCkKLXsKLSAgICBtX3Zpc2l0Q291bnQgPSAwOwotICAgIEFTU0VSVChtX3N0YWNrLmlzRW1w
dHkoKSk7Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCi0jZWxzZQotICAgIG1f
b3BhcXVlUm9vdHMuY2xlYXIoKTsKLSNlbmRpZgotICAgIGlmIChtX3Nob3VsZEhhc2hDb25zdCkg
ewotICAgICAgICBtX3VuaXF1ZVN0cmluZ3MuY2xlYXIoKTsKLSAgICAgICAgbV9zaG91bGRIYXNo
Q29uc3QgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2Vy
dmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQotewotICAgIEpTQ2VsbCoqIHJvb3RzID0g
Y29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IGNvbnNlcnZhdGl2
ZVJvb3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAg
ICAgICAgaW50ZXJuYWxBcHBlbmQocm9vdHNbaV0pOwotfQotCi1BTFdBWVNfSU5MSU5FIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCog
Y2VsbCkKLXsKLSNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQotICAgIG1fdmlzaXRl
ZFR5cGVDb3VudHMuY291bnQoY2VsbCk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChIZWFwOjppc01h
cmtlZChjZWxsKSk7Ci0gICAgCi0gICAgaWYgKGlzSlNTdHJpbmcoY2VsbCkpIHsKLSAgICAgICAg
SlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KGNl
bGwpKSB7Ci0gICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKSwgdmlzaXRvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoaXNKU0FycmF5KGNlbGwpKSB7Ci0gICAgICAgIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oY29u
c3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT52aXNpdENoaWxkcmVuKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCksIHZpc2l0b3IpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKCkKLXsKLSAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2Ug
Y2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAotICAgIC8vIGFzc3VtZSB0aGF0IGRv
bmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgotCi0gICAgLy8gQXZvaWQgbG9ja2luZyB3aGVuIGEg
dGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlmICht
X3N0YWNrLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZXJlJ3Mg
YWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBh
c3N1bWUKLSAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAg
aWYgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZl
IGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCi0gICAgLy8gdGhyZWFkIGlzIGFscmVhZHkgZG9uYXRp
bmcuCi0gICAgTXV0ZXhUcnlMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOwot
ICAgIGlmICghbG9ja2VyLmxvY2tlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPdGhl
cndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29uLCBhbmQgZG9uYXRl
LgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQubV9zaGFyZWRNYXJrU3Rh
Y2spOwotCi0gICAgaWYgKG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMg
PCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKQotICAgICAgICBtX3NoYXJlZC5tX21hcmtp
bmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkK
LXsKLSAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgIAotI2lmIEVOQUJMRShQQVJB
TExFTF9HQykKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDEpIHsKLSAg
ICAgICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgbV9zdGFjay5y
ZWZpbGwoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6
bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3Zl
TGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKCp0
aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7Ci0gICAgICAgICAgICBkb25hdGVLbm93blBhcmFs
bGVsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1lcmdlT3BhcXVlUm9vdHNJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgd2hp
bGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAg
ICAgICB3aGlsZSAobV9zdGFjay5jYW5SZW1vdmVMYXN0KCkpCi0gICAgICAgICAgICB2aXNpdENo
aWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7Ci0gICAgfQotfQotCi12b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9k
ZSkKLXsKLSAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICAKLSAgICBBU1NFUlQo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRCZVBh
cmFsbGVsOwotCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHNob3VsZEJlUGFyYWxsZWwg
PSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMTsKLSNlbHNlCi0gICAgQVNTRVJUKE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSk7Ci0gICAgc2hvdWxkQmVQYXJhbGxlbCA9
IGZhbHNlOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKCFzaG91bGRCZVBhcmFsbGVsKSB7Ci0gICAg
ICAgIC8vIFRoaXMgY2FsbCBzaG91bGQgYmUgYSBuby1vcC4KLSAgICAgICAgQVNTRVJUX1VOVVNF
RChzaGFyZWREcmFpbk1vZGUsIHNoYXJlZERyYWluTW9kZSA9PSBNYXN0ZXJEcmFpbik7Ci0gICAg
ICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIEFTU0VSVChtX3NoYXJlZC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKLSAgICAgICAgbV9zaGFyZWQubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwotICAgIH0KLSAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICB7Ci0gICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV9tYXJraW5n
TG9jayk7Ci0gICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzLS07Ci0KLSAgICAgICAgICAgIC8vIEhvdyB3ZSB3YWl0IGRpZmZlcnMgZGVwZW5kaW5nIG9u
IGRyYWluIG1vZGUuCi0gICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRy
YWluKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24g
aXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCi0gICAgICAgICAgICAgICAg
Ly8gZm9yIHVzIHRvIGRvLgotICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0g
dG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUg
ZG9uZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAgICAg
ICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJlZC5t
X21hcmtpbmdMb2NrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRGlkIHdlIGRldGVjdCB0ZXJtaW5h
dGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCi0gICAgICAgICAgICAgICAgaWYgKCFt
X3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1fc2hh
cmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9t
YXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkgJiYgIW1f
c2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFy
ZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZG9uZUNvcHlpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29u
ZGl0aW9uLndhaXQobV9zaGFyZWQubV9tYXJraW5nTG9jayk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElzIHRoZSBWTSBleGl0aW5nPyBJ
ZiBzbywgZXhpdCB0aGlzIHRocmVhZC4KLSAgICAgICAgICAgICAgICBpZiAobV9zaGFyZWQubV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmVDb3B5
aW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRD
b3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzOwotICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxs
c0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2ssIGlkbGVUaHJlYWRDb3VudCk7Ci0gICAg
ICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRyYWluKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZv
aWQgTWFya1N0YWNrOjptZXJnZU9wYXF1ZVJvb3RzKCkKLXsKLSAgICBBU1NFUlQoIW1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJv
b3RzIGFyZSBub24tZW1wdHkuCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9z
aGFyZWQubV9vcGFxdWVSb290c0xvY2spOwotICAgICAgICBIYXNoU2V0PHZvaWQqPjo6aXRlcmF0
b3IgYmVnaW4gPSBtX29wYXF1ZVJvb3RzLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8dm9pZCo+
OjppdGVyYXRvciBlbmQgPSBtX29wYXF1ZVJvb3RzLmVuZCgpOwotICAgICAgICBmb3IgKEhhc2hT
ZXQ8dm9pZCo+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgICAgICBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmFkZCgqaXRlcik7Ci0gICAgfQotICAg
IG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6c3RhcnRDb3B5
aW5nKCkKLXsKLSAgICBBU1NFUlQoIW1fY29waWVkQWxsb2NhdG9yLmlzVmFsaWQoKSk7Ci19Ci0K
LXZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QgYnl0ZXMpCi17
Ci0gICAgbV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFs
bG9jYXRvci5yZXNldEN1cnJlbnRCbG9jaygpKTsKLSAgICBtX2NvcGllZEFsbG9jYXRvci5zZXRD
dXJyZW50QmxvY2sobV9zaGFyZWQubV9jb3BpZWRTcGFjZS0+YWxsb2NhdGVCbG9ja0ZvckNvcHlp
bmdQaGFzZSgpKTsKLQotICAgIHZvaWQqIHJlc3VsdCA9IDA7Ci0gICAgQ2hlY2tlZEJvb2xlYW4g
ZGlkU3VjY2VlZCA9IG1fY29waWVkQWxsb2NhdG9yLnRyeUFsbG9jYXRlKGJ5dGVzLCAmcmVzdWx0
KTsKLSAgICBBU1NFUlQoZGlkU3VjY2VlZCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9p
ZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiBwdHIsIHNpemVfdCBi
eXRlcykKLXsKLSAgICBpZiAoIWNoZWNrSWZTaG91bGRDb3B5QW5kUGluT3RoZXJ3aXNlKHB0ciwg
Ynl0ZXMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gYWxsb2NhdGVOZXdT
cGFjZShieXRlcyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6dHJ5SGFzaENv
bnN0TG9jaygpCi17Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHVuc2lnbmVkIGN1cnJl
bnRGbGFncyA9IG1fZmxhZ3M7Ci0KLSAgICBpZiAoY3VycmVudEZsYWdzICYgSGFzaENvbnN0TG9j
aykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgbmV3RmxhZ3MgPSBjdXJy
ZW50RmxhZ3MgfCBIYXNoQ29uc3RMb2NrOwotCi0gICAgaWYgKCFXVEY6OndlYWtDb21wYXJlQW5k
U3dhcCgmbV9mbGFncywgY3VycmVudEZsYWdzLCBuZXdGbGFncykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFdURjo6bWVtb3J5QmFycmllckFmdGVyTG9jaygpOwotICAgIHJldHVybiB0
cnVlOwotI2Vsc2UKLSAgICBpZiAoaXNIYXNoQ29uc3RTaW5nbGV0b24oKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbV9mbGFncyB8PSBIYXNoQ29uc3RMb2NrOwotCi0gICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpTU3RyaW5nOjpyZWxlYXNl
SGFzaENvbnN0TG9jaygpCi17Ci0jaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIFdURjo6bWVt
b3J5QmFycmllckJlZm9yZVVubG9jaygpOwotI2VuZGlmCi0gICAgbV9mbGFncyAmPSB+SGFzaENv
bnN0TG9jazsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpzaG91bGRUcnlIYXNo
Q29uc3QoKQotewotICAgIHJldHVybiAoKGxlbmd0aCgpID4gMSkgJiYgIWlzUm9wZSgpICYmICFp
c0hhc2hDb25zdFNpbmdsZXRvbigpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFj
azo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKLXsKLSAgICAvLyBUaGlzIGludGVybmFs
QXBwZW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHZpc2l0cyB0byBvYmplY3QgYW5kIGFycmF5IGJh
Y2tpbmcgc3RvcmVzLgotICAgIC8vIGFzIGl0IGNhbiBjaGFuZ2UgdGhlIEpTVmFsdWUgcG9pbnRl
ZCB0byBiZSB0aGUgYXJndW1lbnQgd2hlbiB0aGUgb3JpZ2luYWwgSlNWYWx1ZQotICAgIC8vIGlz
IGEgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgY29udGVudHMgYXMgYW5vdGhlciBzdHJp
bmcuCi0KLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9ICpzbG90OwotICAg
IEFTU0VSVCh2YWx1ZSk7Ci0gICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgaWYgKCFjZWxsKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zaG91bGRIYXNoQ29uc3QgJiYgY2VsbC0+aXNT
dHJpbmcoKSkgewotICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4o
Y2VsbCk7Ci0gICAgICAgIGlmIChzdHJpbmctPnNob3VsZFRyeUhhc2hDb25zdCgpICYmIHN0cmlu
Zy0+dHJ5SGFzaENvbnN0TG9jaygpKSB7Ci0gICAgICAgICAgICBVbmlxdWVTdHJpbmdNYXA6OkFk
ZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3VuaXF1ZVN0cmluZ3MuYWRkKHN0cmluZy0+c3RyaW5nKCku
aW1wbCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0g
ICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0b24oKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRk
UmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGV4
aXN0aW5nSlNWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAganNDYXN0PEpTU3RyaW5nKj4oZXhp
c3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKTsKLSAgICAg
ICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKLSAgICAgICAgICAgICAgICBzdHJp
bmctPnJlbGVhc2VIYXNoQ29uc3RMb2NrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7Ci19Ci0KLXZvaWQg
U2xvdFZpc2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90IGJ5dGVzLCBKU1Zh
bHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICB2b2lkKiBvbGRQdHIgPSAqcHRy
OwotICAgIHZvaWQqIG5ld1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihvbGRQdHIsIGJ5dGVz
KTsKLSAgICBpZiAobmV3UHRyKSB7Ci0gICAgICAgIHNpemVfdCBqc1ZhbHVlc09mZnNldCA9IHN0
YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFsdWVzKSAtIHN0YXRp
Y19jYXN0PGNoYXIqPihvbGRQdHIpKTsKLQotICAgICAgICBKU1ZhbHVlKiBuZXdWYWx1ZXMgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hhcio+KG5ld1B0cikg
KyBqc1ZhbHVlc09mZnNldCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1ZXNbaV07Ci0gICAg
ICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCgmbmV3
VmFsdWVzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwg
anNWYWx1ZXNPZmZzZXQpOwotICAgICAgICAqcHRyID0gbmV3UHRyOwotICAgIH0gZWxzZQotICAg
ICAgICBhcHBlbmQodmFsdWVzLCBsZW5ndGgpOwotfQotICAgIAotdm9pZCBTbG90VmlzaXRvcjo6
ZG9uZUNvcHlpbmcoKQotewotICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGlu
Z0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOwotfQotCi12b2lk
IFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQotewotICAgIGZvciAoV2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZl
c3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKQotICAgICAg
ICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCp0aGlzKTsKLX0KLQotdm9pZCBTbG90Vmlz
aXRvcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCi17Ci0gICAgd2hpbGUgKG1f
c2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKQotICAgICAgICBtX3No
YXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKTsKLX0KLQotI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQotdm9pZCBNYXJr
U3RhY2s6OnZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBpZiAoIWNlbGwpIHsKLSAgICAg
ICAgZGF0YUxvZygiY2VsbCBpcyBOVUxMXG4iKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0K
LSAgICBpZiAoIWNlbGwtPnN0cnVjdHVyZSgpKSB7Ci0gICAgICAgIGRhdGFMb2coImNlbGwgYXQg
JXAgaGFzIGEgbnVsbCBzdHJ1Y3R1cmVcbiIgLCBjZWxsKTsKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICB9Ci0KLSAgICAvLyBCb3RoIHRoZSBjZWxsJ3Mgc3RydWN0dXJlLCBhbmQgdGhlIGNlbGwncyBz
dHJ1Y3R1cmUncyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHRoZSBTdHJ1Y3R1cmUgU3RydWN0dXJlLgot
ICAgIC8vIEkgaGF0ZSB0aGlzIHNlbnRlbmNlLgotICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+
c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkgIT0gY2VsbC0+c3RydWN0dXJlKCktPkpT
Q2VsbDo6Y2xhc3NJbmZvKCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGFyZW50Q2xhc3NOYW1l
ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciogb3VyQ2xhc3NOYW1lID0gMDsKLSAgICAgICAgaWYg
KGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKSAmJiBjZWxsLT5zdHJ1Y3R1cmUoKS0+c3Ry
dWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkpCi0gICAgICAgICAgICBwYXJlbnRDbGFzc05h
bWUgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkt
PmNsYXNzTmFtZTsKLSAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5KU0NlbGw6OmNsYXNz
SW5mbygpKQotICAgICAgICAgICAgb3VyQ2xhc3NOYW1lID0gY2VsbC0+c3RydWN0dXJlKCktPkpT
Q2VsbDo6Y2xhc3NJbmZvKCktPmNsYXNzTmFtZTsKLSAgICAgICAgZGF0YUxvZygicGFyZW50IHN0
cnVjdHVyZSAoJXAgPCVzPikgb2YgY2VsbCBhdCAlcCBkb2Vzbid0IG1hdGNoIGNlbGwncyBzdHJ1
Y3R1cmUgKCVwIDwlcz4pXG4iLAotICAgICAgICAgICAgICAgIGNlbGwtPnN0cnVjdHVyZSgpLT5z
dHJ1Y3R1cmUoKSwgcGFyZW50Q2xhc3NOYW1lLCBjZWxsLCBjZWxsLT5zdHJ1Y3R1cmUoKSwgb3Vy
Q2xhc3NOYW1lKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci19Ci0jZWxzZQotdm9pZCBNYXJr
U3RhY2s6OnZhbGlkYXRlKEpTQ2VsbCopCi17Ci19Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24g
MTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDI1ICsyNiw2IEBACiAjaWZuZGVmIE1hcmtTdGFja19oCiAjZGVmaW5l
IE1hcmtTdGFja19oCiAKLSNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgotI2luY2x1ZGUgIkhhbmRs
ZVR5cGVzLmgiCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNp
bmNsdWRlICJSZWdpc3Rlci5oIgotI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIK
LSNpbmNsdWRlICJWVGFibGVTcGVjdHJ1bS5oIgotI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9PU0FsbG9jYXRvci5o
PgotI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KLSNpbmNsdWRlIDx3dGYvVENTcGluTG9jay5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KICNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKICNkZWZpbmUgTUFSS19MT0df
TUVTU0FHRTAobWVzc2FnZSkgZGF0YUxvZyhtZXNzYWdlKQogI2RlZmluZSBNQVJLX0xPR19NRVNT
QUdFMShtZXNzYWdlLCBhcmcxKSBkYXRhTG9nKG1lc3NhZ2UsIGFyZzEpCkBAIC02OSwyNzYgKzUw
LDg2IEBACiAjZGVmaW5lIE1BUktfTE9HX0NISUxEKHZpc2l0b3IsIGNoaWxkKSBkbyB7IH0gd2hp
bGUgKGZhbHNlKQogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0MgewotCi0gICAgY2xhc3MgQ29uc2Vy
dmF0aXZlUm9vdHM7Ci0gICAgY2xhc3MgSlNHbG9iYWxEYXRhOwotICAgIGNsYXNzIE1hcmtTdGFj
azsKLSAgICBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7Ci0gICAgY2xhc3MgUGFyYWxsZWxNb2Rl
RW5hYmxlcjsKLSAgICBjbGFzcyBSZWdpc3RlcjsKLSAgICBjbGFzcyBTbG90VmlzaXRvcjsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKLSAgICAKLSAgICBzdHJ1Y3Qg
TWFya1N0YWNrU2VnbWVudCB7Ci0gICAgICAgIE1hcmtTdGFja1NlZ21lbnQqIG1fcHJldmlvdXM7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBzaXplX3QgbV90b3A7Ci0jZW5kaWYKLSAg
ICAgICAgCi0gICAgICAgIGNvbnN0IEpTQ2VsbCoqIGRhdGEoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IEpTQ2VsbCoqPih0aGlzICsgMSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBzaXplX3QgY2FwYWNpdHlGcm9tU2l6ZShz
aXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChzaXplIC0gc2l6ZW9m
KE1hcmtTdGFja1NlZ21lbnQpKSAvIHNpemVvZihjb25zdCBKU0NlbGwqKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHNpemVfdCBzaXplRnJvbUNhcGFjaXR5KHNpemVfdCBj
YXBhY2l0eSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNpemVvZihNYXJrU3RhY2tT
ZWdtZW50KSArIGNhcGFjaXR5ICogc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGNsYXNzIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3IgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvcigpOwotICAgICAgICB+TWFya1N0
YWNrU2VnbWVudEFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgTWFya1N0YWNrU2VnbWVu
dCogYWxsb2NhdGUoKTsKLSAgICAgICAgdm9pZCByZWxlYXNlKE1hcmtTdGFja1NlZ21lbnQqKTsK
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc2hyaW5rUmVzZXJ2ZSgpOwotICAgICAgICAKLSAgICBw
cml2YXRlOgotICAgICAgICBTcGluTG9jayBtX2xvY2s7Ci0gICAgICAgIE1hcmtTdGFja1NlZ21l
bnQqIG1fbmV4dEZyZWVTZWdtZW50OwotICAgIH07Ci0KLSAgICBjbGFzcyBNYXJrU3RhY2tBcnJh
eSB7Ci0gICAgcHVibGljOgotICAgICAgICBNYXJrU3RhY2tBcnJheShNYXJrU3RhY2tTZWdtZW50
QWxsb2NhdG9yJik7Ci0gICAgICAgIH5NYXJrU3RhY2tBcnJheSgpOwotCi0gICAgICAgIHZvaWQg
YXBwZW5kKGNvbnN0IEpTQ2VsbCopOwotCi0gICAgICAgIGJvb2wgY2FuUmVtb3ZlTGFzdCgpOwot
ICAgICAgICBjb25zdCBKU0NlbGwqIHJlbW92ZUxhc3QoKTsKLSAgICAgICAgYm9vbCByZWZpbGwo
KTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNFbXB0eSgpOwotICAgICAgICAKLSAgICAgICAg
dm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgICAgICAK
LSAgICAgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBz
aXplX3QgaWRsZVRocmVhZENvdW50KTsKLQotICAgICAgICBzaXplX3Qgc2l6ZSgpOwotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWFya1N0YWNrU2VnbWVudCogbV90b3BTZWdtZW50OwotICAgICAg
ICAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBleHBhbmQoKTsKLSAgICAgICAgCi0g
ICAgICAgIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwotCi0gICAgICAg
IHNpemVfdCBtX3NlZ21lbnRDYXBhY2l0eTsKLSAgICAgICAgc2l6ZV90IG1fdG9wOwotICAgICAg
ICBzaXplX3QgbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHM7Ci0gICAgICAgIAotICAgICAgICBz
aXplX3QgcG9zdEluY1RvcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNpemVfdCByZXN1bHQg
PSBtX3RvcCsrOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1f
dG9wKyspOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc2l6ZV90IHByZURlY1RvcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNpemVf
dCByZXN1bHQgPSAtLW1fdG9wOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAtLW1fdG9w
U2VnbWVudC0+bV90b3ApOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRUb3BGb3JGdWxsU2VnbWVudCgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09IG1fc2VnbWVudENhcGFj
aXR5KTsKLSAgICAgICAgICAgIG1fdG9wID0gbV9zZWdtZW50Q2FwYWNpdHk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VG9wRm9yRW1wdHlTZWdtZW50KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKCFtX3RvcFNlZ21lbnQtPm1fdG9wKTsKLSAgICAgICAgICAg
IG1fdG9wID0gMDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IHRvcCgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3RvcCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9w
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3RvcDsKLSAgICAgICAgfQotICAgICAgICAKLSNpZiBB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgdm9pZCB2YWxpZGF0ZVByZXZpb3VzKCkgeyB9Ci0jZWxz
ZQotICAgICAgICB2b2lkIHZhbGlkYXRlUHJldmlvdXMoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKE1hcmtTdGFja1NlZ21lbnQq
IGN1cnJlbnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5tX3ByZXZpb3VzKQotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAg
ICBBU1NFUlQoY291bnQgPT0gbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHMpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICB9OwotCi0gICAgY2xhc3MgTWFya1N0YWNrIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTWFya1N0YWNrKTsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXBSb290
VmlzaXRvcjsgLy8gQWxsb3dlZCB0byBtYXJrIGEgSlNWYWx1ZSogb3IgSlNDZWxsKiogZGlyZWN0
bHkuCi0KLSAgICBwdWJsaWM6Ci0gICAgICAgIE1hcmtTdGFjayhHQ1RocmVhZFNoYXJlZERhdGEm
KTsKLSAgICAgICAgfk1hcmtTdGFjaygpOwotCi0gICAgICAgIHZvaWQgYXBwZW5kKENvbnNlcnZh
dGl2ZVJvb3RzJik7Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFwcGVuZChKSVRXcml0ZUJhcnJpZXI8VD4qKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBhcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiopOwotICAgICAgICB2b2lkIGFwcGVu
ZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICAg
ICAgCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHZvaWQgYXBwZW5kVW5i
YXJyaWVyZWRQb2ludGVyKFQqKik7Ci0gICAgICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRWYWx1
ZShKU1ZhbHVlKik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCop
OwotICAgICAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7Ci0gICAgICAgIGludCBv
cGFxdWVSb290Q291bnQoKTsKLQotICAgICAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQotICAgICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX3N0YWNrLmlzRW1wdHkoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0dXAoKTsKLSAgICAgICAg
dm9pZCByZXNldCgpOwotCi0gICAgICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXNpdENvdW50OyB9Ci0KLSNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQot
ICAgICAgICBWVGFibGVTcGVjdHJ1bSBtX3Zpc2l0ZWRUeXBlQ291bnRzOwotI2VuZGlmCi0KLSAg
ICAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIqKTsKLSAgICAgICAgdm9pZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIqKTsKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL1RDU3BpbkxvY2suaD4KIAotI2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQotICAg
ICAgICBpbmxpbmUgdm9pZCByZXNldENoaWxkQ291bnQoKSB7IG1fbG9nQ2hpbGRDb3VudCA9IDA7
IH0KLSAgICAgICAgaW5saW5lIHVuc2lnbmVkIGNoaWxkQ291bnQoKSB7IHJldHVybiBtX2xvZ0No
aWxkQ291bnQ7IH0KLSAgICAgICAgaW5saW5lIHZvaWQgaW5jcmVtZW50Q2hpbGRDb3VudCgpIHsg
bV9sb2dDaGlsZENvdW50Kys7IH0KLSNlbmRpZgorbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpT
Q2VsbCopOworY2xhc3MgSlNDZWxsOwogCi0gICAgICAgIHZvaWQgYXBwZW5kKEpTVmFsdWUqKTsK
LSAgICAgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSosIHNpemVfdCBjb3VudCk7Ci0gICAgICAgIHZv
aWQgYXBwZW5kKEpTQ2VsbCoqKTsKLQotICAgICAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTQ2Vs
bCopOwotICAgICAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUpOwotICAgICAgICB2b2lk
IGludGVybmFsQXBwZW5kKEpTVmFsdWUqKTsKLSAgICAgICAgCi0gICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotICAgICAgICAKLSAgICAgICAgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2
b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlv
bnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKLSAgICAgICAgSGFzaFNldDx2b2lkKj4gbV9v
cGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUg
dG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgotICAgICAgICAKK3N0cnVjdCBNYXJrU3RhY2tTZWdt
ZW50IHsKKyAgICBNYXJrU3RhY2tTZWdtZW50KiBtX3ByZXZpb3VzOwogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBwdWJsaWM6Ci0gICAgICAgIGJvb2wgbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247Ci0gICAgICAgIGJvb2wgbV9pc0RyYWluaW5nOworICAgIHNpemVfdCBtX3Rv
cDsKICNlbmRpZgotICAgIHByb3RlY3RlZDoKLSAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVs
TW9kZUVuYWJsZXI7CiAgICAgICAgIAotICAgICAgICBzaXplX3QgbV92aXNpdENvdW50OwotICAg
ICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKLSAgICAgICAgCi0gICAgICAgIEdDVGhyZWFk
U2hhcmVkRGF0YSYgbV9zaGFyZWQ7Ci0KLSAgICAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zdDsg
Ly8gTG9jYWwgcGVyLXRocmVhZCBjb3B5IG9mIHNoYXJlZCBmbGFnIGZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zCi0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgSlNWYWx1ZT4gVW5p
cXVlU3RyaW5nTWFwOwotICAgICAgICBVbmlxdWVTdHJpbmdNYXAgbV91bmlxdWVTdHJpbmdzOwot
Ci0jaWYgRU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCi0gICAgICAgIHVuc2lnbmVkIG1fbG9n
Q2hpbGRDb3VudDsKLSNlbmRpZgotICAgIH07Ci0KLSAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2tB
cnJheTo6YXBwZW5kKGNvbnN0IEpTQ2VsbCogY2VsbCkKKyAgICBjb25zdCBKU0NlbGwqKiBkYXRh
KCkKICAgICB7Ci0gICAgICAgIGlmIChtX3RvcCA9PSBtX3NlZ21lbnRDYXBhY2l0eSkKLSAgICAg
ICAgICAgIGV4cGFuZCgpOwotICAgICAgICBtX3RvcFNlZ21lbnQtPmRhdGEoKVtwb3N0SW5jVG9w
KCldID0gY2VsbDsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjb25zdCBKU0NlbGwqKj4o
dGhpcyArIDEpOwogICAgIH0KLQotICAgIGlubGluZSBib29sIE1hcmtTdGFja0FycmF5OjpjYW5S
ZW1vdmVMYXN0KCkKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGNhcGFjaXR5RnJvbVNpemUoc2l6
ZV90IHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX3RvcDsKKyAgICAgICAgcmV0dXJu
IChzaXplIC0gc2l6ZW9mKE1hcmtTdGFja1NlZ21lbnQpKSAvIHNpemVvZihjb25zdCBKU0NlbGwq
KTsKICAgICB9Ci0KLSAgICBpbmxpbmUgY29uc3QgSlNDZWxsKiBNYXJrU3RhY2tBcnJheTo6cmVt
b3ZlTGFzdCgpCisgICAgCisgICAgc3RhdGljIHNpemVfdCBzaXplRnJvbUNhcGFjaXR5KHNpemVf
dCBjYXBhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvcFNlZ21lbnQtPmRhdGEoKVtw
cmVEZWNUb3AoKV07CisgICAgICAgIHJldHVybiBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkgKyBj
YXBhY2l0eSAqIHNpemVvZihjb25zdCBKU0NlbGwqKTsKICAgICB9Cit9OwogCi0gICAgaW5saW5l
IGJvb2wgTWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgaWYgKG1fdG9w
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV90b3BTZWdtZW50LT5t
X3ByZXZpb3VzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3ByZXZpb3Vz
LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBhY2l0eSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorY2xhc3MgTWFya1N0YWNr
U2VnbWVudEFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgTWFya1N0YWNrU2VnbWVudEFsbG9jYXRv
cigpOworICAgIH5NYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yKCk7CisgICAgCisgICAgTWFya1N0
YWNrU2VnbWVudCogYWxsb2NhdGUoKTsKKyAgICB2b2lkIHJlbGVhc2UoTWFya1N0YWNrU2VnbWVu
dCopOworICAgIAorICAgIHZvaWQgc2hyaW5rUmVzZXJ2ZSgpOworICAgIAorcHJpdmF0ZToKKyAg
ICBTcGluTG9jayBtX2xvY2s7CisgICAgTWFya1N0YWNrU2VnbWVudCogbV9uZXh0RnJlZVNlZ21l
bnQ7Cit9OworCitjbGFzcyBNYXJrU3RhY2tBcnJheSB7CitwdWJsaWM6CisgICAgTWFya1N0YWNr
QXJyYXkoTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciYpOworICAgIH5NYXJrU3RhY2tBcnJheSgp
OworCisgICAgdm9pZCBhcHBlbmQoY29uc3QgSlNDZWxsKik7CisKKyAgICBib29sIGNhblJlbW92
ZUxhc3QoKTsKKyAgICBjb25zdCBKU0NlbGwqIHJlbW92ZUxhc3QoKTsKKyAgICBib29sIHJlZmls
bCgpOworICAgIAorICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90
aGVyKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIs
IHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwogCi0gICAgaW5saW5lIHNpemVfdCBNYXJrU3RhY2tB
cnJheTo6c2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV90b3AgKyBtX3NlZ21lbnRDYXBh
Y2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOwotICAgIH0KKyAgICBzaXplX3Qgc2l6
ZSgpOworICAgIGJvb2wgaXNFbXB0eSgpOwogCi0gICAgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxl
ciB7Ci0gICAgcHVibGljOgotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyKE1hcmtTdGFjayYg
c3RhY2spCi0gICAgICAgICAgICA6IG1fc3RhY2soc3RhY2spCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9zdGFjay5tX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgICAgICAgICAgbV9z
dGFjay5tX2lzSW5QYXJhbGxlbE1vZGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICB+UGFyYWxsZWxNb2RlRW5hYmxlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX3N0YWNrLm1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgICAgICAgICBtX3N0YWNrLm1faXNJ
blBhcmFsbGVsTW9kZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIE1hcmtTdGFjayYgbV9zdGFjazsKLSAgICB9OworcHJpdmF0ZToKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGV4cGFuZCgpOworICAgIAorICAgIHNpemVfdCBwb3N0SW5jVG9w
KCk7CisgICAgc2l6ZV90IHByZURlY1RvcCgpOworICAgIHZvaWQgc2V0VG9wRm9yRnVsbFNlZ21l
bnQoKTsKKyAgICB2b2lkIHNldFRvcEZvckVtcHR5U2VnbWVudCgpOworICAgIHNpemVfdCB0b3Ao
KTsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUHJldmlvdXMoKTsKKworICAgIE1hcmtTdGFja1Nl
Z21lbnQqIG1fdG9wU2VnbWVudDsKKyAgICBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yJiBtX2Fs
bG9jYXRvcjsKKworICAgIHNpemVfdCBtX3NlZ21lbnRDYXBhY2l0eTsKKyAgICBzaXplX3QgbV90
b3A7CisgICAgc2l6ZV90IG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOworICAgCit9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFja0lubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw5NCArMzEsODEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQp
CitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpwb3N0SW5jVG9wKCkKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgSlNWYWx1ZSYgdmFsdWUg
PSBzbG90W2ldOwotICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7Ci0gICAgfQorICAgIHNp
emVfdCByZXN1bHQgPSBtX3RvcCsrOworICAgIEFTU0VSVChyZXN1bHQgPT0gbV90b3BTZWdtZW50
LT5tX3RvcCsrKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIHZvaWQgTWFya1N0YWNrOjphcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoqIHNs
b3QpCisgICAgICAgIAoraW5saW5lIHNpemVfdCBNYXJrU3RhY2tBcnJheTo6cHJlRGVjVG9wKCkK
IHsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgSlNDZWxsKiBjZWxsID0gKnNsb3Q7Ci0gICAgaW50
ZXJuYWxBcHBlbmQoY2VsbCk7CisgICAgc2l6ZV90IHJlc3VsdCA9IC0tbV90b3A7CisgICAgQVNT
RVJUKHJlc3VsdCA9PSAtLW1fdG9wU2VnbWVudC0+bV90b3ApOworICAgIHJldHVybiByZXN1bHQ7
CiB9Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKU1ZhbHVlKiBzbG90
KQorICAgICAgICAKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5OjpzZXRUb3BGb3JGdWxsU2Vn
bWVudCgpCiB7Ci0gICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsK
KyAgICBBU1NFUlQobV90b3BTZWdtZW50LT5tX3RvcCA9PSBtX3NlZ21lbnRDYXBhY2l0eSk7Cisg
ICAgbV90b3AgPSBtX3NlZ21lbnRDYXBhY2l0eTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1h
cmtTdGFjazo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShKU1ZhbHVlKiBzbG90KQoraW5saW5lIHZv
aWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckVtcHR5U2VnbWVudCgpCiB7Ci0gICAgQVNTRVJU
KHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKKyAgICBBU1NFUlQoIW1fdG9wU2Vn
bWVudC0+bV90b3ApOworICAgIG1fdG9wID0gMDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1h
cmtTdGFjazo6YXBwZW5kKEpTQ2VsbCoqIHNsb3QpCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0Fy
cmF5Ojp0b3AoKQogewotICAgIEFTU0VSVChzbG90KTsKLSAgICBpbnRlcm5hbEFwcGVuZCgqc2xv
dCk7CisgICAgQVNTRVJUKG1fdG9wID09IG1fdG9wU2VnbWVudC0+bV90b3ApOworICAgIHJldHVy
biBtX3RvcDsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6aW50ZXJuYWxBcHBl
bmQoSlNWYWx1ZSB2YWx1ZSkKKyNpZiBBU1NFUlRfRElTQUJMRUQKK2lubGluZSB2b2lkIE1hcmtT
dGFja0FycmF5Ojp2YWxpZGF0ZVByZXZpb3VzKCkgeyB9CisjZWxzZQoraW5saW5lIHZvaWQgTWFy
a1N0YWNrQXJyYXk6OnZhbGlkYXRlUHJldmlvdXMoKQogewotICAgIGlmICghdmFsdWUgfHwgIXZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaW50ZXJuYWxBcHBlbmQodmFsdWUu
YXNDZWxsKCkpOworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBmb3IgKE1hcmtTdGFja1Nl
Z21lbnQqIGN1cnJlbnQgPSBtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXM7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5tX3ByZXZpb3VzKQorICAgICAgICBjb3VudCsrOworICAgIEFTU0VSVChj
b3VudCA9PSBtX251bWJlck9mUHJldmlvdXNTZWdtZW50cyk7CiB9CisjZW5kaWYKIAotaW5saW5l
IHZvaWQgTWFya1N0YWNrOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpCitpbmxpbmUgdm9pZCBNYXJrU3RhY2tB
cnJheTo6YXBwZW5kKGNvbnN0IEpTQ2VsbCogY2VsbCkKIHsKLSAgICBtX3NoYXJlZC5tX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7
CisgICAgaWYgKG1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KQorICAgICAgICBleHBhbmQoKTsK
KyAgICBtX3RvcFNlZ21lbnQtPmRhdGEoKVtwb3N0SW5jVG9wKCldID0gY2VsbDsKIH0KIAotaW5s
aW5lIHZvaWQgTWFya1N0YWNrOjphZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIqIHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpCitpbmxpbmUgYm9vbCBNYXJrU3Rh
Y2tBcnJheTo6Y2FuUmVtb3ZlTGFzdCgpCiB7Ci0gICAgbV9zaGFyZWQubV91bmNvbmRpdGlvbmFs
RmluYWxpemVycy5hZGRUaHJlYWRTYWZlKHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworICAgIHJl
dHVybiAhIW1fdG9wOwogfQogCi1pbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3Qo
dm9pZCogcm9vdCkKK2lubGluZSBjb25zdCBKU0NlbGwqIE1hcmtTdGFja0FycmF5OjpyZW1vdmVM
YXN0KCkKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgaWYgKE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCkgPT0gMSkgewotICAgICAgICAvLyBQdXQgZGlyZWN0bHkgaW50byB0aGUg
c2hhcmVkIEhhc2hTZXQuCi0gICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFB1dCBpbnRvIHRoZSBsb2NhbCBzZXQs
IGJ1dCBtZXJnZSB3aXRoIHRoZSBzaGFyZWQgb25lIGV2ZXJ5IG9uY2UgaW4KLSAgICAvLyBhIHdo
aWxlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NhbCBzZXRzIGRvbid0IGdyb3cgdG9vIGxhcmdl
LgotICAgIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKLSAgICBtX29wYXF1ZVJvb3Rz
LmFkZChyb290KTsKLSNlbHNlCi0gICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0jZW5kaWYK
KyAgICByZXR1cm4gbV90b3BTZWdtZW50LT5kYXRhKClbcHJlRGVjVG9wKCldOwogfQogCi1pbmxp
bmUgYm9vbCBNYXJrU3RhY2s6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KQoraW5saW5l
IGJvb2wgTWFya1N0YWNrQXJyYXk6OmlzRW1wdHkoKQogewotICAgIEFTU0VSVCghbV9pc0luUGFy
YWxsZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9zaGFyZWQubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCk7Ci0jZW5kaWYKKyAgICBpZiAobV90b3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV90b3BTZWdtZW50LT5tX3ByZXZpb3VzKSB7CisgICAgICAgIEFTU0VSVChtX3RvcFNlZ21l
bnQtPm1fcHJldmlvdXMtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGludCBNYXJr
U3RhY2s6Om9wYXF1ZVJvb3RDb3VudCgpCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpz
aXplKCkKIHsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0jaWYgRU5BQkxFKFBB
UkFMTEVMX0dDKQotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0
dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gbV9v
cGFxdWVSb290cy5zaXplKCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gbV90b3AgKyBtX3NlZ21lbnRD
YXBhY2l0eSAqIG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEyIEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgi
CisjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKKyNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZU1l
dGhvZHMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgi
CisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEdDVGhyZWFkU2hhcmVkRGF0YSYg
c2hhcmVkKQorICAgIDogbV9zdGFjayhzaGFyZWQubV9zZWdtZW50QWxsb2NhdG9yKQorICAgICwg
bV92aXNpdENvdW50KDApCisgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCisgICAgLCBt
X3NoYXJlZChzaGFyZWQpCisgICAgLCBtX3Nob3VsZEhhc2hDb25zdChmYWxzZSkKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgLCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbihm
YWxzZSkKKyAgICAsIG1faXNEcmFpbmluZyhmYWxzZSkKKyNlbmRpZgoreworfQorCitTbG90Vmlz
aXRvcjo6flNsb3RWaXNpdG9yKCkKK3sKKyAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwor
fQorCit2b2lkIFNsb3RWaXNpdG9yOjpzZXR1cCgpCit7CisgICAgbV9zaGFyZWQubV9zaG91bGRI
YXNoQ29uc3QgPSBtX3NoYXJlZC5tX2dsb2JhbERhdGEtPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9I
YXNoQ29uc3QoKTsKKyAgICBtX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFz
aENvbnN0OworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV9zaGFyZWQubV9tYXJraW5nVGhyZWFkc01hcmtTdGFja1tpXS0+bV9zaG91bGRIYXNo
Q29uc3QgPSBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdDsKKyNlbmRpZgorfQorCit2b2lkIFNs
b3RWaXNpdG9yOjpyZXNldCgpCit7CisgICAgbV92aXNpdENvdW50ID0gMDsKKyAgICBBU1NFUlQo
bV9zdGFjay5pc0VtcHR5KCkpOworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBBU1NFUlQo
bV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93Lgor
I2Vsc2UKKyAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisjZW5kaWYKKyAgICBpZiAobV9zaG91
bGRIYXNoQ29uc3QpIHsKKyAgICAgICAgbV91bmlxdWVTdHJpbmdzLmNsZWFyKCk7CisgICAgICAg
IG1fc2hvdWxkSGFzaENvbnN0ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQoreworICAgIEpT
Q2VsbCoqIHJvb3RzID0gY29uc2VydmF0aXZlUm9vdHMucm9vdHMoKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGNvbnNlcnZhdGl2ZVJvb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQocm9vdHNbaV0pOworfQorCitBTFdB
WVNfSU5MSU5FIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Is
IGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5H
KQorICAgIG1fdmlzaXRlZFR5cGVDb3VudHMuY291bnQoY2VsbCk7CisjZW5kaWYKKworICAgIEFT
U0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CisgICAgCisgICAgaWYgKGlzSlNTdHJpbmcoY2Vs
bCkpIHsKKyAgICAgICAgSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwq
PihjZWxsKSwgdmlzaXRvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNK
U0ZpbmFsT2JqZWN0KGNlbGwpKSB7CisgICAgICAgIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoaXNKU0FycmF5KGNlbGwpKSB7CisgICAgICAgIEpTQXJyYXk6OnZp
c2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT52aXNpdENoaWxkcmVu
KGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCksIHZpc2l0b3IpOworfQorCit2b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sKKyAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJl
LXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAorICAgIC8v
IGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgorCisgICAgLy8gQXZvaWQg
bG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdy
YXBoLgorICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29u
c2VydmF0aXZlIGFuZCBhc3N1bWUKKyAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHBy
b2ZpdGFibGUuCisgICAgaWYgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywg
YmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCisgICAgLy8gdGhyZWFkIGlz
IGFscmVhZHkgZG9uYXRpbmcuCisgICAgTXV0ZXhUcnlMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1f
bWFya2luZ0xvY2spOworICAgIGlmICghbG9ja2VyLmxvY2tlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBz
b29uLCBhbmQgZG9uYXRlLgorICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQu
bV9zaGFyZWRNYXJrU3RhY2spOworCisgICAgaWYgKG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnMgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKQorICAgICAgICBt
X3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7Cit9CisKK3ZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluKCkKK3sKKyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgIAor
I2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSA+IDEpIHsKKyAgICAgICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgbV9zdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRk
b3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1f
c3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgICAgICBk
b25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1lcmdl
T3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisgICAgCisgICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBtX3N0YWNr
LnJlZmlsbCgpOworICAgICAgICB3aGlsZSAobV9zdGFjay5jYW5SZW1vdmVMYXN0KCkpCisgICAg
ICAgICAgICB2aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAg
fQorfQorCit2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2Rl
IHNoYXJlZERyYWluTW9kZSkKK3sKKyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAg
ICAKKyAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7CisgICAgCisgICAg
Ym9vbCBzaG91bGRCZVBhcmFsbGVsOworCisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIHNo
b3VsZEJlUGFyYWxsZWwgPSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMTsKKyNlbHNl
CisgICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSk7CisgICAgc2hv
dWxkQmVQYXJhbGxlbCA9IGZhbHNlOworI2VuZGlmCisgICAgCisgICAgaWYgKCFzaG91bGRCZVBh
cmFsbGVsKSB7CisgICAgICAgIC8vIFRoaXMgY2FsbCBzaG91bGQgYmUgYSBuby1vcC4KKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChzaGFyZWREcmFpbk1vZGUsIHNoYXJlZERyYWluTW9kZSA9PSBNYXN0
ZXJEcmFpbik7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIEFT
U0VSVChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB7CisgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgbV9z
aGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOworICAgIH0KKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9z
aGFyZWQubV9tYXJraW5nTG9jayk7CisgICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzLS07CisKKyAgICAgICAgICAgIC8vIEhvdyB3ZSB3YWl0IGRpZmZl
cnMgZGVwZW5kaW5nIG9uIGRyYWluIG1vZGUuCisgICAgICAgICAgICBpZiAoc2hhcmVkRHJhaW5N
b2RlID09IE1hc3RlckRyYWluKSB7CisgICAgICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBlaXRo
ZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCisg
ICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgorICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8K
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzICYmIG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdz
IHRpbWUgZm9yIHRoZW0gdG8gZ2l2ZSB0aGVpciBwcml2YXRlIENvcGllZEJsb2NrcyBiYWNrCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRj
YXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElzIHRo
ZXJlIHdvcmsgdG8gYmUgZG9uZT8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NoYXJlZC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSB3YWl0LgorICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24u
d2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0g
U2xhdmVEcmFpbik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRGlkIHdl
IGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCisgICAgICAg
ICAgICAgICAgaWYgKCFtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzICYm
IG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHdoaWxlIChtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5p
c0VtcHR5KCkgJiYgIW1fc2hhcmVkLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zaGFy
ZWQubV9tYXJraW5nQ29uZGl0aW9uLndhaXQobV9zaGFyZWQubV9tYXJraW5nTG9jayk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIElzIHRo
ZSBWTSBleGl0aW5nPyBJZiBzbywgZXhpdCB0aGlzIHRocmVhZC4KKyAgICAgICAgICAgICAgICBp
ZiAobV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7CisgICAgICAgICAgICAg
ICAgICAgIGRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgIAorICAgICAgICAgICAgc2l6
ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSBtX3No
YXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOworICAgICAgICAgICAgbV9zdGFj
ay5zdGVhbFNvbWVDZWxsc0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2ssIGlkbGVUaHJl
YWRDb3VudCk7CisgICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzKys7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRyYWluKCk7CisgICAgfQor
I2VuZGlmCit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQoreworICAg
IEFTU0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxs
ZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX29wYXF1ZVJvb3RzTG9jayk7CisgICAgICAgIEhhc2hT
ZXQ8dm9pZCo+OjppdGVyYXRvciBiZWdpbiA9IG1fb3BhcXVlUm9vdHMuYmVnaW4oKTsKKyAgICAg
ICAgSGFzaFNldDx2b2lkKj46Oml0ZXJhdG9yIGVuZCA9IG1fb3BhcXVlUm9vdHMuZW5kKCk7Cisg
ICAgICAgIGZvciAoSGFzaFNldDx2b2lkKj46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKCpp
dGVyKTsKKyAgICB9CisgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOworfQorCit2b2lkIFNsb3RW
aXNpdG9yOjpzdGFydENvcHlpbmcoKQoreworICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3Iu
aXNWYWxpZCgpKTsKK30KKwordm9pZCogU2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93
KHNpemVfdCBieXRlcykKK3sKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGlu
Z0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkpOworICAgIG1fY29w
aWVkQWxsb2NhdG9yLnNldEN1cnJlbnRCbG9jayhtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxv
Y2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNlKCkpOworCisgICAgdm9pZCogcmVzdWx0ID0gMDsKKyAg
ICBDaGVja2VkQm9vbGVhbiBkaWRTdWNjZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2Nh
dGUoYnl0ZXMsICZyZXN1bHQpOworICAgIEFTU0VSVChkaWRTdWNjZWVkKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZU9yUGluKHZv
aWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmICghY2hlY2tJZlNob3VsZENvcHlBbmRQ
aW5PdGhlcndpc2UocHRyLCBieXRlcykpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBhbGxvY2F0ZU5ld1NwYWNlKGJ5dGVzKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIEpT
U3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisg
ICAgdW5zaWduZWQgY3VycmVudEZsYWdzID0gbV9mbGFnczsKKworICAgIGlmIChjdXJyZW50Rmxh
Z3MgJiBIYXNoQ29uc3RMb2NrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25l
ZCBuZXdGbGFncyA9IGN1cnJlbnRGbGFncyB8IEhhc2hDb25zdExvY2s7CisKKyAgICBpZiAoIVdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX2ZsYWdzLCBjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV1RGOjptZW1vcnlCYXJyaWVyQWZ0ZXJMb2Nr
KCk7CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIGlmIChpc0hhc2hDb25zdFNpbmdsZXRv
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2ZsYWdzIHw9IEhhc2hDb25zdExv
Y2s7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SlNTdHJpbmc6OnJlbGVhc2VIYXNoQ29uc3RMb2NrKCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgV1RGOjptZW1vcnlCYXJyaWVyQmVmb3JlVW5sb2NrKCk7CisjZW5kaWYKKyAgICBt
X2ZsYWdzICY9IH5IYXNoQ29uc3RMb2NrOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJp
bmc6OnNob3VsZFRyeUhhc2hDb25zdCgpCit7CisgICAgcmV0dXJuICgobGVuZ3RoKCkgPiAxKSAm
JiAhaXNSb3BlKCkgJiYgIWlzSGFzaENvbnN0U2luZ2xldG9uKCkpOworfQorCitBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7Cisg
ICAgLy8gVGhpcyBpbnRlcm5hbEFwcGVuZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8g
b2JqZWN0IGFuZCBhcnJheSBiYWNraW5nIHN0b3Jlcy4KKyAgICAvLyBhcyBpdCBjYW4gY2hhbmdl
IHRoZSBKU1ZhbHVlIHBvaW50ZWQgdG8gYmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFs
IEpTVmFsdWUKKyAgICAvLyBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGNvbnRl
bnRzIGFzIGFub3RoZXIgc3RyaW5nLgorCisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUg
dmFsdWUgPSAqc2xvdDsKKyAgICBBU1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OworICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2hvdWxkSGFz
aENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9
IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOworICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRUcnlI
YXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgeworICAgICAgICAgICAg
VW5pcXVlU3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV91bmlxdWVTdHJpbmdzLmFk
ZChzdHJpbmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0U2lu
Z2xldG9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4
aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGpz
Q2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENvbnN0
U2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7Cisg
ICAgICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZy0+cmVsZWFz
ZUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsQXBwZW5k
KGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwdHIs
IHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
dm9pZCogb2xkUHRyID0gKnB0cjsKKyAgICB2b2lkKiBuZXdQdHIgPSBhbGxvY2F0ZU5ld1NwYWNl
T3JQaW4ob2xkUHRyLCBieXRlcyk7CisgICAgaWYgKG5ld1B0cikgeworICAgICAgICBzaXplX3Qg
anNWYWx1ZXNPZmZzZXQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHZhbHVlcykgLSBzdGF0aWNfY2FzdDxjaGFyKj4ob2xkUHRyKSk7CisKKyAgICAgICAgSlNW
YWx1ZSogbmV3VmFsdWVzID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SlNWYWx1ZSo+KHN0YXRpY19j
YXN0PGNoYXIqPihuZXdQdHIpICsganNWYWx1ZXNPZmZzZXQpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUmIHZhbHVl
ID0gdmFsdWVzW2ldOworICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aW50ZXJuYWxBcHBlbmQoJm5ld1ZhbHVlc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBtZW1j
cHkobmV3UHRyLCBvbGRQdHIsIGpzVmFsdWVzT2Zmc2V0KTsKKyAgICAgICAgKnB0ciA9IG5ld1B0
cjsKKyAgICB9IGVsc2UKKyAgICAgICAgYXBwZW5kKHZhbHVlcywgbGVuZ3RoKTsKK30KKyAgICAK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKCkKK3sKKyAgICBpZiAoIW1fY29waWVkQWxs
b2NhdG9yLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaGFyZWQubV9jb3Bp
ZWRTcGFjZS0+ZG9uZUZpbGxpbmdCbG9jayhtX2NvcGllZEFsbG9jYXRvci5yZXNldEN1cnJlbnRC
bG9jaygpKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkK
K3sKKyAgICBmb3IgKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3NoYXJlZC5t
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPm5leHQoKSkKKyAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJlbmNlcygqdGhpcyk7
Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KQoreworICAgIHdoaWxlIChtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmhhc05l
eHQoKSkKKyAgICAgICAgbV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVO
ZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7Cit9CisKKyNpZiBFTkFCTEUoR0NfVkFM
SURBVElPTikKK3ZvaWQgU2xvdFZpc2l0b3I6OnZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBpZiAoIWNlbGwpIHsKKyAgICAgICAgZGF0YUxvZygiY2VsbCBpcyBOVUxMXG4iKTsKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBpZiAoIWNlbGwtPnN0cnVjdHVyZSgpKSB7CisgICAg
ICAgIGRhdGFMb2coImNlbGwgYXQgJXAgaGFzIGEgbnVsbCBzdHJ1Y3R1cmVcbiIgLCBjZWxsKTsK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICAvLyBCb3RoIHRoZSBjZWxsJ3Mgc3RydWN0
dXJlLCBhbmQgdGhlIGNlbGwncyBzdHJ1Y3R1cmUncyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHRoZSBT
dHJ1Y3R1cmUgU3RydWN0dXJlLgorICAgIC8vIEkgaGF0ZSB0aGlzIHNlbnRlbmNlLgorICAgIGlm
IChjZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkgIT0g
Y2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkpIHsKKyAgICAgICAgY29uc3Qg
Y2hhciogcGFyZW50Q2xhc3NOYW1lID0gMDsKKyAgICAgICAgY29uc3QgY2hhciogb3VyQ2xhc3NO
YW1lID0gMDsKKyAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKSAmJiBj
ZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkpCisgICAg
ICAgICAgICBwYXJlbnRDbGFzc05hbWUgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+c3RydWN0dXJlKCkt
PkpTQ2VsbDo6Y2xhc3NJbmZvKCktPmNsYXNzTmFtZTsKKyAgICAgICAgaWYgKGNlbGwtPnN0cnVj
dHVyZSgpLT5KU0NlbGw6OmNsYXNzSW5mbygpKQorICAgICAgICAgICAgb3VyQ2xhc3NOYW1lID0g
Y2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCktPmNsYXNzTmFtZTsKKyAgICAg
ICAgZGF0YUxvZygicGFyZW50IHN0cnVjdHVyZSAoJXAgPCVzPikgb2YgY2VsbCBhdCAlcCBkb2Vz
bid0IG1hdGNoIGNlbGwncyBzdHJ1Y3R1cmUgKCVwIDwlcz4pXG4iLAorICAgICAgICAgICAgICAg
IGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKSwgcGFyZW50Q2xhc3NOYW1lLCBjZWxsLCBj
ZWxsLT5zdHJ1Y3R1cmUoKSwgb3VyQ2xhc3NOYW1lKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9
Cit9CisjZWxzZQordm9pZCBTbG90VmlzaXRvcjo6dmFsaWRhdGUoSlNDZWxsKikKK3sKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzUgKzI3LDUyIEBA
CiAjZGVmaW5lIFNsb3RWaXNpdG9yX2gKIAogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5j
bHVkZSAiTWFya1N0YWNrLmgiCisjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJN
YXJrU3RhY2tJbmxpbmVNZXRob2RzLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CisKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBIZWFwOworY2xhc3MgQ29uc2VydmF0aXZl
Um9vdHM7CiBjbGFzcyBHQ1RocmVhZFNoYXJlZERhdGE7CitjbGFzcyBIZWFwOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKKworY2xhc3MgU2xvdFZpc2l0b3IgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNsb3RWaXNpdG9yKTsKKyAgICBmcmllbmQgY2xhc3MgSGVhcFJvb3RW
aXNpdG9yOyAvLyBBbGxvd2VkIHRvIG1hcmsgYSBKU1ZhbHVlKiBvciBKU0NlbGwqKiBkaXJlY3Rs
eS4KIAotY2xhc3MgU2xvdFZpc2l0b3IgOiBwdWJsaWMgTWFya1N0YWNrIHsKLSAgICBmcmllbmQg
Y2xhc3MgSGVhcFJvb3RWaXNpdG9yOwogcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEdDVGhyZWFk
U2hhcmVkRGF0YSYpOworICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgdm9pZCBkb25hdGUoKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7Ci0gICAgfQorICAgIHZvaWQg
YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgCi0gICAgdm9pZCBkcmFpbigpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKFdyaXRlQmFycmllckJhc2U8VD4q
KTsKKyAgICB2b2lkIGFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kiwgc2l6
ZV90IGNvdW50KTsKICAgICAKLSAgICB2b2lkIGRvbmF0ZUFuZERyYWluKCkKLSAgICB7Ci0gICAg
ICAgIGRvbmF0ZSgpOwotICAgICAgICBkcmFpbigpOwotICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKFQqKik7CisgICAgdm9p
ZCBhcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqKTsKKyAgICAKKyAgICB2b2lkIGFkZE9w
YXF1ZVJvb3Qodm9pZCopOworICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKTsKKyAg
ICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CisKKyAgICBHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJl
ZERhdGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJu
IG1fc3RhY2suaXNFbXB0eSgpOyB9CisKKyAgICB2b2lkIHNldHVwKCk7CisgICAgdm9pZCByZXNl
dCgpOworCisgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KKworICAgIHZvaWQgZG9uYXRlKCk7CisgICAgdm9pZCBkcmFpbigpOworICAgIHZvaWQg
ZG9uYXRlQW5kRHJhaW4oKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7IFNsYXZl
RHJhaW4sIE1hc3RlckRyYWluIH07CiAgICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJh
aW5Nb2RlKTsKQEAgLTc4LDE5ICs5NSw4NCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkb25l
Q29weWluZygpOyAKICAgICAgICAgCisjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykK
KyAgICBWVGFibGVTcGVjdHJ1bSBtX3Zpc2l0ZWRUeXBlQ291bnRzOworI2VuZGlmCisKKyAgICB2
b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciopOwor
ICAgIHZvaWQgYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihVbmNvbmRpdGlvbmFsRmluYWxpemVy
Kik7CisKKyNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKKyAgICBpbmxpbmUgdm9pZCBy
ZXNldENoaWxkQ291bnQoKSB7IG1fbG9nQ2hpbGRDb3VudCA9IDA7IH0KKyAgICBpbmxpbmUgdW5z
aWduZWQgY2hpbGRDb3VudCgpIHsgcmV0dXJuIG1fbG9nQ2hpbGRDb3VudDsgfQorICAgIGlubGlu
ZSB2b2lkIGluY3JlbWVudENoaWxkQ291bnQoKSB7IG1fbG9nQ2hpbGRDb3VudCsrOyB9CisjZW5k
aWYKKwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqKTsK
KworICAgIHZvaWQgYXBwZW5kKEpTVmFsdWUqKTsKKyAgICB2b2lkIGFwcGVuZChKU1ZhbHVlKiwg
c2l6ZV90IGNvdW50KTsKKyAgICB2b2lkIGFwcGVuZChKU0NlbGwqKik7CisKKyAgICB2b2lkIGlu
dGVybmFsQXBwZW5kKEpTQ2VsbCopOworICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7
CisgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1ZhbHVlKik7CisgICAgCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CisgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUo
KTsKKyAgICAKICAgICB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCosIHNpemVfdCk7
CiAgICAgdm9pZCogYWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90KTsKIAogICAgIHZvaWQgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwogCisgICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBI
YXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0
dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisgICAgCisgICAgc2l6
ZV90IG1fdmlzaXRDb3VudDsKKyAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKKyAgICAKKyAg
ICBHQ1RocmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOworCisgICAgYm9vbCBtX3Nob3VsZEhhc2hD
b25zdDsgLy8gTG9jYWwgcGVyLXRocmVhZCBjb3B5IG9mIHNoYXJlZCBmbGFnIGZvciBwZXJmb3Jt
YW5jZSByZWFzb25zCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1ZhbHVlPiBV
bmlxdWVTdHJpbmdNYXA7CisgICAgVW5pcXVlU3RyaW5nTWFwIG1fdW5pcXVlU3RyaW5nczsKKwor
I2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQorICAgIHVuc2lnbmVkIG1fbG9nQ2hpbGRD
b3VudDsKKyNlbmRpZgorCiAgICAgQ29waWVkQWxsb2NhdG9yIG1fY29waWVkQWxsb2NhdG9yOwor
CitwdWJsaWM6CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJvb2wgbV9pc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgYm9vbCBtX2lzRHJhaW5pbmc7CisjZW5kaWYKIH07
CiAKLWlubGluZSBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBz
aGFyZWQpCi0gICAgOiBNYXJrU3RhY2soc2hhcmVkKQotewotfQorY2xhc3MgUGFyYWxsZWxNb2Rl
RW5hYmxlciB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxNb2RlRW5hYmxlcihTbG90VmlzaXRvciYg
c3RhY2spCisgICAgICAgIDogbV9zdGFjayhzdGFjaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9zdGFjay5tX2lzSW5QYXJhbGxlbE1vZGUpOworICAgICAgICBtX3N0YWNrLm1faXNJblBhcmFs
bGVsTW9kZSA9IHRydWU7CisgICAgfQorICAgIAorICAgIH5QYXJhbGxlbE1vZGVFbmFibGVyKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3N0YWNrLm1faXNJblBhcmFsbGVsTW9kZSk7CisgICAg
ICAgIG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2RlID0gZmFsc2U7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBTbG90VmlzaXRvciYgbV9zdGFjazsKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZU1l
dGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDEwICsyNywxMTUgQEAKICNkZWZpbmUgU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKIAog
I2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5oIgorI2luY2x1ZGUgIk9wdGlvbnMu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorQUxXQVlT
X0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSogc2xvdCwgc2l6ZV90IGNv
dW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAg
ICBKU1ZhbHVlJiB2YWx1ZSA9IHNsb3RbaV07CisgICAgICAgIGludGVybmFsQXBwZW5kKHZhbHVl
KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKFQqKiBzbG90KQoreworICAgIEFTU0VSVChz
bG90KTsKKyAgICBKU0NlbGwqIGNlbGwgPSAqc2xvdDsKKyAgICBpbnRlcm5hbEFwcGVuZChjZWxs
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoSlNWYWx1ZSog
c2xvdCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFVuYmFycmllcmVkVmFs
dWUoSlNWYWx1ZSogc2xvdCkKK3sKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgaW50ZXJuYWxBcHBl
bmQoKnNsb3QpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChK
U0NlbGwqKiBzbG90KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgq
c2xvdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBl
bmQoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGludGVybmFsQXBwZW5kKHZhbHVlLmFzQ2VsbCgpKTsKK30K
KworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKK3sKKyAgICBtX3No
YXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5j
ZUhhcnZlc3Rlcik7Cit9CisKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlv
bmFsRmluYWxpemVyKFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqIHVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIpCit7CisgICAgbV9zaGFyZWQubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5hZGRUaHJlYWRT
YWZlKHVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
KyAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKSB7CisgICAgICAgIC8v
IFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4KKyAgICAgICAgbV9zaGFyZWQu
bV9vcGFxdWVSb290cy5hZGQocm9vdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
UHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1lcmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZl
cnkgb25jZSBpbgorICAgIC8vIGEgd2hpbGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNl
dHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCisgICAgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJs
ZSgpOworICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOworI2Vsc2UKKyAgICBtX29wYXF1ZVJv
b3RzLmFkZChyb290KTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTbG90VmlzaXRvcjo6Y29u
dGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxl
bE1vZGUpOworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBBU1NFUlQobV9vcGFxdWVSb290
cy5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5z
KHJvb3QpOworI2Vsc2UKKyAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsK
KyNlbmRpZgorfQorCitpbmxpbmUgaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQor
eworICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKKyNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCisgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gbV9z
aGFyZWQubV9vcGFxdWVSb290cy5zaXplKCk7CisjZWxzZQorICAgIHJldHVybiBtX29wYXF1ZVJv
b3RzLnNpemUoKTsKKyNlbmRpZgorfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtZXJnZU9wYXF1ZVJvb3RzKCk7Cit9CisgICAgCitp
bmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpCit7
CisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBP
cHRpb25zOjpvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1lcmdlT3BhcXVlUm9vdHMoKTsKK30KKyAgICAKIEFMV0FZU19JTkxJTkUgYm9vbCBTbG90Vmlz
aXRvcjo6Y2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2Uodm9pZCogb2xkUHRyLCBzaXpl
X3QgYnl0ZXMpCiB7CiAgICAgaWYgKENvcGllZFNwYWNlOjppc092ZXJzaXplKGJ5dGVzKSkgewpA
QCAtNTUsNiArMTYwLDIxIEBAIEFMV0FZU19JTkxJTkUgdm9pZCogU2xvdFZpc2l0b3I6OmFsbG9j
YXQKICAgICByZXR1cm4gcmVzdWx0OwogfSAgICAgICAKIAoraW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmRvbmF0ZSgpCit7CisgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CisgICAgaWYg
KE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmRvbmF0ZUFuZERyYWluKCkKK3sKKyAgICBkb25hdGUoKTsKKyAgICBkcmFpbigpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9k
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgJ
KHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVC
YXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklU
KQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJNYXJrU3RhY2suaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKQEAgLTEzNSw3ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSklUV3Jp
dGVCYXJyaWVyPFQ+KiBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZChKSVRXcml0ZUJhcnJpZXI8VD4qIHNsb3QpCiB7CiAgICAgaW50ZXJu
YWxBcHBlbmQoc2xvdC0+Z2V0KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAx
Mjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJ
VCkKIAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0xvY2su
aCIKICNpbmNsdWRlICJKU1ZhbHVlSW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTY0LDcgKzU2NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
bV9jbGFzc0luZm87CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6
aW50ZXJuYWxBcHBlbmQoSlNDZWxsKiBjZWxsKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgQVNT
RVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CiAgICAgICAgIGlmICgh
Y2VsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmll
ci5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
cml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE0ICsyMjUsMTQgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGlubGluZQogICAgIHJldHVybiBsaHMuZ2V0KCkg
PT0gcmhzLmdldCgpOwogfQogCi0vLyBNYXJrU3RhY2sgZnVuY3Rpb25zCisvLyBTbG90VmlzaXRv
ciBmdW5jdGlvbnMKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgTWFya1N0YWNr
OjphcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xv
dCkKIHsKICAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdC0+c2xvdCgpKTsKIH0KIAotQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93
bj4qIGJhcnJpZXJzLCBzaXplX3QgY291bnQpCitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV90IGNvdW50KQogewogICAgIGFwcGVuZChiYXJyaWVycy0+c2xvdCgpLCBjb3VudCk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMTI3NzU0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJZYXJy
LmgiCiAjaW5jbHVkZSAiWWFyckNhbm9uaWNhbGl6ZVVDUzIuaCIKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162661</attachid>
            <date>2012-09-06 20:34:18 -0700</date>
            <delta_ts>2012-09-10 11:41:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96043-20120906203358.patch</filename>
            <type>text/plain</type>
            <size>66610</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBA
QAorMjAxMi0wOS0wNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIENvbWJpbmUgTWFya1N0YWNrIGFuZCBTbG90VmlzaXRvciBpbnRvIHNpbmdsZSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYw
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IGFsbCBvZiBNYXJrU3RhY2sgaW50byBTbG90VmlzaXRvci4gVGhlIHJlbWFpbmluZyBzdHVmZiBp
biBNYXJrU3RhY2suY3BwIGFjdHVhbGx5IGhhcyB0byBkbyAKKyAgICAgICAgd2l0aCBNYXJrU3Rh
Y2sgbWFuYWdlbWVudC9hbGxvY2F0aW9uLiBDbGVhbmVkIHVwIGEgZmV3IG9mIHRoZSBoZWFkZXIg
ZmlsZXMgd2hpbGUgSSB3YXMgYXQgaXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUYXJnZXQu
cHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbi5oOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcDoKKyAgICAg
ICAgKiBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0YS5oOgorICAgICAgICAoR0NUaHJlYWRTaGFyZWRE
YXRhKToKKyAgICAgICAgKiBoZWFwL0hlYXBSb290VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAv
TWFya1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2su
aDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChNYXJrU3RhY2tTZWdtZW50KToKKyAgICAgICAg
KEpTQzo6TWFya1N0YWNrU2VnbWVudDo6ZGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1Nl
Z21lbnQ6OmNhcGFjaXR5RnJvbVNpemUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50
OjpzaXplRnJvbUNhcGFjaXR5KToKKyAgICAgICAgKE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3Ip
OgorICAgICAgICAoTWFya1N0YWNrQXJyYXkpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrSW5s
aW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cG9zdEluY1RvcCk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6cHJlRGVjVG9w
KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckVtcHR5U2VnbWVudCk6Cisg
ICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5Ojp0b3ApOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dmFsaWRhdGVQcmV2aW91cyk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6Y2FuUmVtb3ZlTGFzdCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0KToKKyAgICAgICAgKEpT
Qzo6TWFya1N0YWNrQXJyYXk6OmlzRW1wdHkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJh
eTo6c2l6ZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpzZXR1cCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAoSlNDOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdl
T3BhcXVlUm9vdHMpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c3RhcnRDb3B5aW5nKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VPclBpbik6CisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OnJlbGVhc2VIYXNoQ29uc3RMb2NrKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNob3VsZFRy
eUhhc2hDb25zdCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmRvbmVDb3B5aW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpmaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OnZhbGlkYXRlKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6c2hh
cmVkRGF0YSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OnZpc2l0Q291bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXRDaGlsZENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNoaWxkQ291
bnQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW5jcmVtZW50Q2hpbGRDb3VudCk6Cisg
ICAgICAgIChQYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKEpTQzo6UGFyYWxsZWxNb2Rl
RW5hYmxlcjo6UGFyYWxsZWxNb2RlRW5hYmxlcik6CisgICAgICAgIChKU0M6OlBhcmFsbGVsTW9k
ZUVuYWJsZXI6On5QYXJhbGxlbE1vZGVFbmFibGVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kKToK
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRVbmJhcnJp
ZXJlZFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVy
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZCk6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6b3BhcXVlUm9vdENvdW50KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjptZXJnZU9w
YXF1ZVJvb3RzSWZQcm9maXRhYmxlKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAg
ICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBw
ZW5kKToKKyAgICAgICAgKiBqaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuaDoKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQpOgorICAgICAgICAqIHJ1
bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVl
cyk6CisgICAgICAgICogeWFyci9ZYXJySklULmNwcDoKKwogMjAxMi0wOS0wNiAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgSlMgdGVzdCBzdWl0
ZSBwdXRzIGluY29ycmVjdCBsaW1pdGF0aW9ucyBvbiBGdW5jdGlvbi50b1N0cmluZygpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjc3NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvTWFya2Vk
QmxvY2suY3BwCiAgICAgaGVhcC9NYXJrZWRTcGFjZS5jcHAKICAgICBoZWFwL01hcmtTdGFjay5j
cHAKKyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKICAgICBo
ZWFwL1dlYWtIYW5kbGVPd25lci5jcHAKICAgICBoZWFwL1dlYWtCbG9jay5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBUaW1lci5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lTWV0aG9kcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFj
ay5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyNzc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcCBc
CiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAgXAogICAgIGhlYXAvTWFya2VkU3BhY2UuY3BwIFwK
KyAgICBoZWFwL1Nsb3RWaXNpdG9yLmNwcCBcCiAgICAgaGVhcC9WVGFibGVTcGVjdHJ1bS5jcHAg
XAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogICAgIGRlYnVnZ2VyL0RlYnVn
Z2VyQWN0aXZhdGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYsNyArMzY2LDcgQEAgRVhQT1JUUwog
ICAgID91bmxvY2tATXV0ZXhAV1RGQEBRQUVYWFoKICAgICA/dW5sb2NrQXRvbWljYWxseUluaXRp
YWxpemVkU3RhdGljTXV0ZXhAV1RGQEBZQVhYWgogICAgID91bnByb3RlY3RASGVhcEBKU0NAQFFB
RV9OVkpTVmFsdWVAMkBAWgotICAgID92YWxpZGF0ZUBNYXJrU3RhY2tASlNDQEBLQVhQQVZKU0Nl
bGxAMkBAWgorICAgID92YWxpZGF0ZUBTbG90VmlzaXRvckBKU0NAQENBWFBBVkpTQ2VsbEAyQEBa
CiAgICAgP3Zpc2l0Q2hpbGRyZW5ASlNHbG9iYWxPYmplY3RASlNDQEBTQVhQQVZKU0NlbGxAMkBB
QVZTbG90VmlzaXRvckAyQEBaCiAgICAgP3Zpc2l0Q2hpbGRyZW5ASlNHbG9iYWxUaGlzQEpTQ0BA
S0FYUEFWSlNDZWxsQDJAQUFWU2xvdFZpc2l0b3JAMkBAWgogICAgID92aXNpdENoaWxkcmVuQEpT
T2JqZWN0QEpTQ0BAU0FYUEFWSlNDZWxsQDJAQUFWU2xvdFZpc2l0b3JAMkBAWgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzg2LDYgKzIzODYsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxTbG90VmlzaXRvci5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGhlYXBcU3Ryb25n
LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkz
LDggQEAKIAkJQzIxMTIyRTExNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjExMjJE
RTE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmNwcCAqLzsgfTsKIAkJQzIx
MTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMTIyREYxNUREOUFCMzAwNzkw
RTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyMTEyMkUzMTVERDlBQjMwMDc5MEUzQSAvKiBNYXJrU3Rh
Y2tJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9k
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMy
MTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0I0MDg1MTVDMEEz
QzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4
OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAq
LzsgfTsKIAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAy
RkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBD
b3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9Owog
CQlDMjVGOEJDRDE1NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNUY4QkNCMTU3NTQ0
QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwICovOyB9OwpAQCAtMTQ1NSw2ICsx
NDU3LDcgQEAKIAkJQzIxMTIyREUxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZFNoYXJl
ZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjExMjJERjE1REQ5QUIz
MDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDVGhyZWFkU2hhcmVkRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjExMjJFMDE1REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrU3RhY2tJbmxpbmVNZXRob2Rz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5
OCAvKiBTbG90VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTbG90VmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUz
MTRCNDA0QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb3BpZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5jcmVtZW50YWxTd2VlcGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI1RjhCQ0MxNTc1NDRBOTAwMjQ1
QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbmNyZW1lbnRhbFN3ZWVwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3ODQsNiArMTc4Nyw3IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjI1NDk0MjE1
RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCUMyMTEyMkRFMTVERDlB
QjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuY3BwICovLAogCQkJCUMyMTEyMkRGMTVE
RDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCAqLywKIAkJCQlDMjExMjJFMDE1
REQ5QUIzMDA3OTBFM0EgLyogTWFya1N0YWNrSW5saW5lTWV0aG9kcy5oICovLApAQCAtMjUyNyw2
ICsyNTMxLDcgQEAKIAkJCQlDMkI5MTZDMjE0REEwMTRFMDBDQkFDODYgLyogTWFya2VkQWxsb2Nh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8q
IEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIxNjBGRTcxNUY3RTk1
RTAwOTQyREZDIC8qIFNsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIxMTIyRTMxNUREOUFCMzAwNzkwRTNBIC8qIE1hcmtTdGFja0lubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1l
bnRhbFN3ZWVwZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzUwMyw2ICszNTA4LDcgQEAKIAkJCQkx
NDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBA
CiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk1ldGhvZENhbGxM
aW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lTWV0aG9kcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgi
CisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCiAv
KiBERkdfRU5BQkxFKCkgLSB0dXJuIG9uIGEgc3BlY2lmaWMgZmVhdHVyZXMgaW4gdGhlIERGRyBK
SVQgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkU2hhcmVkRGF0
YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWRT
aGFyZWREYXRhLmNwcAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIEpTQyB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEu
aAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJl
YWRTaGFyZWREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDEyIEBACiAjaWZuZGVm
IEdDVGhyZWFkU2hhcmVkRGF0YV9oCiAjZGVmaW5lIEdDVGhyZWFkU2hhcmVkRGF0YV9oCiAKKyNp
bmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKKyNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCisjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00
OCw3ICs1Myw2IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgTWFya1N0YWNrOwogICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKIAogI2lmIEVO
QUJMRShQQVJBTExFTF9HQykKQEAgLTY0LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c2hvdWxkSGFzaENvbnN0OwogCiAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fbWFya2lu
Z1RocmVhZHM7Ci0gICAgVmVjdG9yPE1hcmtTdGFjayo+IG1fbWFya2luZ1RocmVhZHNNYXJrU3Rh
Y2s7CisgICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjazsK
ICAgICAKICAgICBNdXRleCBtX21hcmtpbmdMb2NrOwogICAgIFRocmVhZENvbmRpdGlvbiBtX21h
cmtpbmdDb25kaXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUm9v
dFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
Um9vdFZpc2l0b3IuaAkocmV2aXNpb24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcFJvb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNkZWZpbmUgSGVhcFJvb3RWaXNpdG9yX2gKIAogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzLmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9u
IDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMyw0MDIgKzIyMyw0IEBAIHZvaWQgTWFya1N0YWNrQXJyYXk6OnN0
ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAgYXBwZW5kKG90aGVyLnJlbW92ZUxhc3QoKSk7CiB9
CiAKLU1hcmtTdGFjazo6TWFya1N0YWNrKEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkKQotICAg
IDogbV9zdGFjayhzaGFyZWQubV9zZWdtZW50QWxsb2NhdG9yKQotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQotICAg
ICwgbV9pc0RyYWluaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Zpc2l0Q291bnQoMCkKLSAg
ICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKLSAgICAsIG1fc2hhcmVkKHNoYXJlZCkKLSAg
ICAsIG1fc2hvdWxkSGFzaENvbnN0KGZhbHNlKQotewotfQotCi1NYXJrU3RhY2s6On5NYXJrU3Rh
Y2soKQotewotICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci19Ci0KLXZvaWQgTWFya1N0
YWNrOjpzZXR1cCgpCi17Ci0gICAgbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJl
ZC5tX2dsb2JhbERhdGEtPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3QoKTsKLSAgICBt
X3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OwotI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaGFyZWQubV9t
YXJraW5nVGhyZWFkc01hcmtTdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgbV9zaGFyZWQubV9t
YXJraW5nVGhyZWFkc01hcmtTdGFja1tpXS0+bV9zaG91bGRIYXNoQ29uc3QgPSBtX3NoYXJlZC5t
X3Nob3VsZEhhc2hDb25zdDsKLSNlbmRpZgotfQotCi12b2lkIE1hcmtTdGFjazo6cmVzZXQoKQot
ewotICAgIG1fdmlzaXRDb3VudCA9IDA7Ci0gICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsK
LSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0
eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KLSNlbHNlCi0gICAgbV9vcGFxdWVS
b290cy5jbGVhcigpOwotI2VuZGlmCi0gICAgaWYgKG1fc2hvdWxkSGFzaENvbnN0KSB7Ci0gICAg
ICAgIG1fdW5pcXVlU3RyaW5ncy5jbGVhcigpOwotICAgICAgICBtX3Nob3VsZEhhc2hDb25zdCA9
IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChDb25zZXJ2YXRpdmVS
b290cyYgY29uc2VydmF0aXZlUm9vdHMpCi17Ci0gICAgSlNDZWxsKiogcm9vdHMgPSBjb25zZXJ2
YXRpdmVSb290cy5yb290cygpOwotICAgIHNpemVfdCBzaXplID0gY29uc2VydmF0aXZlUm9vdHMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBp
bnRlcm5hbEFwcGVuZChyb290c1tpXSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQot
ewotI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCi0gICAgbV92aXNpdGVkVHlwZUNv
dW50cy5jb3VudChjZWxsKTsKLSNlbmRpZgotCi0gICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkKGNl
bGwpKTsKLSAgICAKLSAgICBpZiAoaXNKU1N0cmluZyhjZWxsKSkgewotICAgICAgICBKU1N0cmlu
Zzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0pTRmluYWxPYmplY3QoY2VsbCkpIHsK
LSAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+
KGNlbGwpLCB2aXNpdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc0pT
QXJyYXkoY2VsbCkpIHsKLSAgICAgICAgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0
PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3RfY2FzdDxKU0NlbGwqPihj
ZWxsKSwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxs
ZWwoKQotewotICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4gYWZm
b3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCi0gICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRpbmcg
aXMgbm90IHByb2ZpdGFibGUuCi0KLSAgICAvLyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJlYWQg
cmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgaWYgKG1fc3RhY2su
c2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5
IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQot
ICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9z
aGFyZWQubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFz
c3VtZSB0aGF0IGFub3RoZXIKLSAgICAvLyB0aHJlYWQgaXMgYWxyZWFkeSBkb25hdGluZy4KLSAg
ICBNdXRleFRyeUxvY2tlciBsb2NrZXIobV9zaGFyZWQubV9tYXJraW5nTG9jayk7Ci0gICAgaWYg
KCFsb2NrZXIubG9ja2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE90aGVyd2lzZSwg
YXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAg
bV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjayk7Ci0K
LSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCi0gICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRp
dGlvbi5icm9hZGNhc3QoKTsKLX0KLQotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQotewotICAg
IEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgCi0jaWYgRU5BQkxFKFBBUkFMTEVMX0dD
KQotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMSkgewotICAgICAgICB3
aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3N0YWNrLnJlZmlsbCgp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVt
TnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkg
JiYgY291bnRkb3duLS07KQotICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1f
c3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICAKLSAgICB3aGlsZSAoIW1f
c3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIHdo
aWxlIChtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSkKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4o
KnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2xvdFZpc2l0
b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQotewot
ICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIAotICAgIEFTU0VSVChPcHRpb25z
OjpudW1iZXJPZkdDTWFya2VycygpKTsKLSAgICAKLSAgICBib29sIHNob3VsZEJlUGFyYWxsZWw7
Ci0KLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAxOwotI2Vsc2UKLSAgICBBU1NFUlQoT3B0aW9uczo6
bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKTsKLSAgICBzaG91bGRCZVBhcmFsbGVsID0gZmFsc2U7
Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAoIXNob3VsZEJlUGFyYWxsZWwpIHsKLSAgICAgICAgLy8g
VGhpcyBjYWxsIHNob3VsZCBiZSBhIG5vLW9wLgotICAgICAgICBBU1NFUlRfVU5VU0VEKHNoYXJl
ZERyYWluTW9kZSwgc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWluKTsKLSAgICAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUKG1fc2hhcmVkLm1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0jaWYg
RU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
c2hhcmVkLm1fbWFya2luZ0xvY2spOwotICAgICAgICBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzKys7Ci0gICAgfQotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsK
LSAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMtLTsK
LQotICAgICAgICAgICAgLy8gSG93IHdlIHdhaXQgZGlmZmVycyBkZXBlbmRpbmcgb24gZHJhaW4g
bW9kZS4KLSAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0gTWFzdGVyRHJhaW4pIHsK
LSAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBpcyByZWFj
aGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKLSAgICAgICAgICAgICAgICAvLyBmb3Ig
dXMgdG8gZG8uCi0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQu
bV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byBnaXZl
IHRoZWlyIHByaXZhdGUgQ29waWVkQmxvY2tzIGJhY2sKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAg
ICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi53YWl0KG1fc2hhcmVkLm1fbWFya2lu
Z0xvY2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJ
ZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KLSAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVk
Lm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdD
b25kaXRpb24uYnJvYWRjYXN0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
d2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSAmJiAhbV9zaGFyZWQu
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
bV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAmJiBtX3NoYXJlZC5tX3No
YXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb25lQ29w
eWluZygpOwotICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21hcmtpbmdDb25kaXRpb24u
d2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSXMgdGhlIFZNIGV4aXRpbmc/IElmIHNvLCBl
eGl0IHRoaXMgdGhyZWFkLgotICAgICAgICAgICAgICAgIGlmIChtX3NoYXJlZC5tX3BhcmFsbGVs
TWFya2Vyc1Nob3VsZEV4aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9uZUNvcHlpbmcoKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0g
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnM7Ci0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSht
X3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50KTsKLSAgICAgICAgICAg
IG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBNYXJr
U3RhY2s6Om1lcmdlT3BhcXVlUm9vdHMoKQotewotICAgIEFTU0VSVCghbV9vcGFxdWVSb290cy5p
c0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJl
IG5vbi1lbXB0eS4KLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5t
X29wYXF1ZVJvb3RzTG9jayk7Ci0gICAgICAgIEhhc2hTZXQ8dm9pZCo+OjppdGVyYXRvciBiZWdp
biA9IG1fb3BhcXVlUm9vdHMuYmVnaW4oKTsKLSAgICAgICAgSGFzaFNldDx2b2lkKj46Oml0ZXJh
dG9yIGVuZCA9IG1fb3BhcXVlUm9vdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDx2b2lk
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
ICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKCppdGVyKTsKLSAgICB9Ci0gICAgbV9vcGFx
dWVSb290cy5jbGVhcigpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjpzdGFydENvcHlpbmcoKQot
ewotICAgIEFTU0VSVCghbV9jb3BpZWRBbGxvY2F0b3IuaXNWYWxpZCgpKTsKLX0KLQotdm9pZCog
U2xvdFZpc2l0b3I6OmFsbG9jYXRlTmV3U3BhY2VTbG93KHNpemVfdCBieXRlcykKLXsKLSAgICBt
X3NoYXJlZC5tX2NvcGllZFNwYWNlLT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9y
LnJlc2V0Q3VycmVudEJsb2NrKCkpOwotICAgIG1fY29waWVkQWxsb2NhdG9yLnNldEN1cnJlbnRC
bG9jayhtX3NoYXJlZC5tX2NvcGllZFNwYWNlLT5hbGxvY2F0ZUJsb2NrRm9yQ29weWluZ1BoYXNl
KCkpOwotCi0gICAgdm9pZCogcmVzdWx0ID0gMDsKLSAgICBDaGVja2VkQm9vbGVhbiBkaWRTdWNj
ZWVkID0gbV9jb3BpZWRBbGxvY2F0b3IudHJ5QWxsb2NhdGUoYnl0ZXMsICZyZXN1bHQpOwotICAg
IEFTU0VSVChkaWRTdWNjZWVkKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBTbG90
VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZU9yUGluKHZvaWQqIHB0ciwgc2l6ZV90IGJ5dGVzKQot
ewotICAgIGlmICghY2hlY2tJZlNob3VsZENvcHlBbmRQaW5PdGhlcndpc2UocHRyLCBieXRlcykp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIHJldHVybiBhbGxvY2F0ZU5ld1NwYWNlKGJ5
dGVzKTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjp0cnlIYXNoQ29uc3RMb2Nr
KCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgdW5zaWduZWQgY3VycmVudEZsYWdz
ID0gbV9mbGFnczsKLQotICAgIGlmIChjdXJyZW50RmxhZ3MgJiBIYXNoQ29uc3RMb2NrKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBuZXdGbGFncyA9IGN1cnJlbnRGbGFn
cyB8IEhhc2hDb25zdExvY2s7Ci0KLSAgICBpZiAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZt
X2ZsYWdzLCBjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgV1RGOjptZW1vcnlCYXJyaWVyQWZ0ZXJMb2NrKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0j
ZWxzZQotICAgIGlmIChpc0hhc2hDb25zdFNpbmdsZXRvbigpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX2ZsYWdzIHw9IEhhc2hDb25zdExvY2s7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LSNlbmRpZgotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmc6OnJlbGVhc2VIYXNoQ29u
c3RMb2NrKCkKLXsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgV1RGOjptZW1vcnlCYXJy
aWVyQmVmb3JlVW5sb2NrKCk7Ci0jZW5kaWYKLSAgICBtX2ZsYWdzICY9IH5IYXNoQ29uc3RMb2Nr
OwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnNob3VsZFRyeUhhc2hDb25zdCgp
Ci17Ci0gICAgcmV0dXJuICgobGVuZ3RoKCkgPiAxKSAmJiAhaXNSb3BlKCkgJiYgIWlzSGFzaENv
bnN0U2luZ2xldG9uKCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRl
cm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQotewotICAgIC8vIFRoaXMgaW50ZXJuYWxBcHBlbmQg
aXMgb25seSBpbnRlbmRlZCBmb3IgdmlzaXRzIHRvIG9iamVjdCBhbmQgYXJyYXkgYmFja2luZyBz
dG9yZXMuCi0gICAgLy8gYXMgaXQgY2FuIGNoYW5nZSB0aGUgSlNWYWx1ZSBwb2ludGVkIHRvIGJl
IHRoZSBhcmd1bWVudCB3aGVuIHRoZSBvcmlnaW5hbCBKU1ZhbHVlCi0gICAgLy8gaXMgYSBzdHJp
bmcgdGhhdCBjb250YWlucyB0aGUgc2FtZSBjb250ZW50cyBhcyBhbm90aGVyIHN0cmluZy4KLQot
ICAgIEFTU0VSVChzbG90KTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gKnNsb3Q7Ci0gICAgQVNTRVJU
KHZhbHVlKTsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICBpZiAoIWNlbGwpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX3Nob3VsZEhhc2hDb25zdCAmJiBjZWxsLT5pc1N0cmluZygp
KSB7Ci0gICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihjZWxsKTsK
LSAgICAgICAgaWYgKHN0cmluZy0+c2hvdWxkVHJ5SGFzaENvbnN0KCkgJiYgc3RyaW5nLT50cnlI
YXNoQ29uc3RMb2NrKCkpIHsKLSAgICAgICAgICAgIFVuaXF1ZVN0cmluZ01hcDo6QWRkUmVzdWx0
IGFkZFJlc3VsdCA9IG1fdW5pcXVlU3RyaW5ncy5hZGQoc3RyaW5nLT5zdHJpbmcoKS5pbXBsKCks
IHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAg
ICAgICAgICBzdHJpbmctPnNldEhhc2hDb25zdFNpbmdsZXRvbigpOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBleGlzdGluZ0pTVmFsdWUgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZXhpc3RpbmdK
U1ZhbHVlKQotICAgICAgICAgICAgICAgICAgICBqc0Nhc3Q8SlNTdHJpbmcqPihleGlzdGluZ0pT
VmFsdWUuYXNDZWxsKCkpLT5jbGVhckhhc2hDb25zdFNpbmdsZXRvbigpOwotICAgICAgICAgICAg
ICAgICpzbG90ID0gZXhpc3RpbmdKU1ZhbHVlOwotICAgICAgICAgICAgICAgIHN0cmluZy0+cmVs
ZWFzZUhhc2hDb25zdExvY2soKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBzdHJpbmctPnJlbGVhc2VIYXNoQ29uc3RMb2NrKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpbnRlcm5hbEFwcGVuZChjZWxsKTsKLX0KLQotdm9pZCBTbG90Vmlz
aXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZh
bHVlcywgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7Ci0gICAg
dm9pZCogbmV3UHRyID0gYWxsb2NhdGVOZXdTcGFjZU9yUGluKG9sZFB0ciwgYnl0ZXMpOwotICAg
IGlmIChuZXdQdHIpIHsKLSAgICAgICAgc2l6ZV90IGpzVmFsdWVzT2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihyZWludGVycHJldF9jYXN0PGNoYXIqPih2YWx1ZXMpIC0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG9sZFB0cikpOwotCi0gICAgICAgIEpTVmFsdWUqIG5ld1ZhbHVlcyA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPEpTVmFsdWUqPihzdGF0aWNfY2FzdDxjaGFyKj4obmV3UHRyKSArIGpzVmFs
dWVzT2Zmc2V0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHZhbHVlc1tpXTsKLSAgICAgICAgICAg
IG5ld1ZhbHVlc1tpXSA9IHZhbHVlOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludGVybmFsQXBwZW5kKCZuZXdWYWx1ZXNb
aV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgbWVtY3B5KG5ld1B0ciwgb2xkUHRyLCBqc1ZhbHVl
c09mZnNldCk7Ci0gICAgICAgICpwdHIgPSBuZXdQdHI7Ci0gICAgfSBlbHNlCi0gICAgICAgIGFw
cGVuZCh2YWx1ZXMsIGxlbmd0aCk7Ci19Ci0gICAgCi12b2lkIFNsb3RWaXNpdG9yOjpkb25lQ29w
eWluZygpCi17Ci0gICAgaWYgKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7Ci19Ci0KLXZvaWQgU2xvdFZp
c2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCi17Ci0gICAgZm9yIChXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKiBjdXJyZW50ID0gbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5o
ZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0KCkpCi0gICAgICAgIGN1cnJl
bnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKnRoaXMpOwotfQotCi12b2lkIFNsb3RWaXNpdG9yOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKLXsKLSAgICB3aGlsZSAobV9zaGFyZWQu
bV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5oYXNOZXh0KCkpCi0gICAgICAgIG1fc2hhcmVkLm1f
dW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpOwotfQotCi0jaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCi12b2lkIE1hcmtTdGFjazo6
dmFsaWRhdGUoSlNDZWxsKiBjZWxsKQotewotICAgIGlmICghY2VsbCkgewotICAgICAgICBkYXRh
TG9nKCJjZWxsIGlzIE5VTExcbiIpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIGlm
ICghY2VsbC0+c3RydWN0dXJlKCkpIHsKLSAgICAgICAgZGF0YUxvZygiY2VsbCBhdCAlcCBoYXMg
YSBudWxsIHN0cnVjdHVyZVxuIiAsIGNlbGwpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLQot
ICAgIC8vIEJvdGggdGhlIGNlbGwncyBzdHJ1Y3R1cmUsIGFuZCB0aGUgY2VsbCdzIHN0cnVjdHVy
ZSdzIHN0cnVjdHVyZSBzaG91bGQgYmUgdGhlIFN0cnVjdHVyZSBTdHJ1Y3R1cmUuCi0gICAgLy8g
SSBoYXRlIHRoaXMgc2VudGVuY2UuCi0gICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1
cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSAhPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpj
bGFzc0luZm8oKSkgewotICAgICAgICBjb25zdCBjaGFyKiBwYXJlbnRDbGFzc05hbWUgPSAwOwot
ICAgICAgICBjb25zdCBjaGFyKiBvdXJDbGFzc05hbWUgPSAwOwotICAgICAgICBpZiAoY2VsbC0+
c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpICYmIGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUo
KS0+SlNDZWxsOjpjbGFzc0luZm8oKSkKLSAgICAgICAgICAgIHBhcmVudENsYXNzTmFtZSA9IGNl
bGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKS0+Y2xhc3NO
YW1lOwotICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPkpTQ2VsbDo6Y2xhc3NJbmZvKCkp
Ci0gICAgICAgICAgICBvdXJDbGFzc05hbWUgPSBjZWxsLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpj
bGFzc0luZm8oKS0+Y2xhc3NOYW1lOwotICAgICAgICBkYXRhTG9nKCJwYXJlbnQgc3RydWN0dXJl
ICglcCA8JXM+KSBvZiBjZWxsIGF0ICVwIGRvZXNuJ3QgbWF0Y2ggY2VsbCdzIHN0cnVjdHVyZSAo
JXAgPCVzPilcbiIsCi0gICAgICAgICAgICAgICAgY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVy
ZSgpLCBwYXJlbnRDbGFzc05hbWUsIGNlbGwsIGNlbGwtPnN0cnVjdHVyZSgpLCBvdXJDbGFzc05h
bWUpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLX0KLSNlbHNlCi12b2lkIE1hcmtTdGFjazo6
dmFsaWRhdGUoSlNDZWxsKikKLXsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjc3NTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMjUgKzI2LDYgQEAKICNpZm5kZWYgTWFya1N0YWNrX2gKICNkZWZpbmUgTWFya1N0
YWNrX2gKIAotI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCi0jaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUg
IlJlZ2lzdGVyLmgiCi0jaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgotI2luY2x1
ZGUgIlZUYWJsZVNwZWN0cnVtLmgiCi0jaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5o
IgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL09TQWxsb2NhdG9yLmg+Ci0jaW5j
bHVkZSA8d3RmL1BhZ2VCbG9jay5oPgotI2luY2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQog
I2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQogI2RlZmluZSBNQVJLX0xPR19NRVNTQUdF
MChtZXNzYWdlKSBkYXRhTG9nKG1lc3NhZ2UpCiAjZGVmaW5lIE1BUktfTE9HX01FU1NBR0UxKG1l
c3NhZ2UsIGFyZzEpIGRhdGFMb2cobWVzc2FnZSwgYXJnMSkKQEAgLTY5LDI3NiArNTAsODYgQEAK
ICNkZWZpbmUgTUFSS19MT0dfQ0hJTEQodmlzaXRvciwgY2hpbGQpIGRvIHsgfSB3aGlsZSAoZmFs
c2UpCiAjZW5kaWYKIAotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICBjbGFzcyBDb25zZXJ2YXRpdmVS
b290czsKLSAgICBjbGFzcyBKU0dsb2JhbERhdGE7Ci0gICAgY2xhc3MgTWFya1N0YWNrOwotICAg
IGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKLSAgICBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVy
OwotICAgIGNsYXNzIFJlZ2lzdGVyOwotICAgIGNsYXNzIFNsb3RWaXNpdG9yOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdyaXRlQmFycmllckJhc2U7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY2xhc3MgSklUV3JpdGVCYXJyaWVyOwotICAgIAotICAgIHN0cnVjdCBNYXJrU3Rh
Y2tTZWdtZW50IHsKLSAgICAgICAgTWFya1N0YWNrU2VnbWVudCogbV9wcmV2aW91czsKLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHNpemVfdCBtX3RvcDsKLSNlbmRpZgotICAgICAgICAK
LSAgICAgICAgY29uc3QgSlNDZWxsKiogZGF0YSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgSlNDZWxsKio+KHRoaXMgKyAxKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHNpemVfdCBjYXBhY2l0eUZyb21TaXplKHNpemVfdCBz
aXplKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKHNpemUgLSBzaXplb2YoTWFya1N0
YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzdGF0aWMgc2l6ZV90IHNpemVGcm9tQ2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc2l6ZW9mKE1hcmtTdGFja1NlZ21lbnQp
ICsgY2FwYWNpdHkgKiBzaXplb2YoY29uc3QgSlNDZWxsKik7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgY2xhc3MgTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciB7Ci0gICAgcHVibGljOgotICAg
ICAgICBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yKCk7Ci0gICAgICAgIH5NYXJrU3RhY2tTZWdt
ZW50QWxsb2NhdG9yKCk7Ci0gICAgICAgIAotICAgICAgICBNYXJrU3RhY2tTZWdtZW50KiBhbGxv
Y2F0ZSgpOwotICAgICAgICB2b2lkIHJlbGVhc2UoTWFya1N0YWNrU2VnbWVudCopOwotICAgICAg
ICAKLSAgICAgICAgdm9pZCBzaHJpbmtSZXNlcnZlKCk7Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIFNwaW5Mb2NrIG1fbG9jazsKLSAgICAgICAgTWFya1N0YWNrU2VnbWVudCogbV9u
ZXh0RnJlZVNlZ21lbnQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIE1hcmtTdGFja0FycmF5IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIE1hcmtTdGFja0FycmF5KE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0
b3ImKTsKLSAgICAgICAgfk1hcmtTdGFja0FycmF5KCk7Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQo
Y29uc3QgSlNDZWxsKik7Ci0KLSAgICAgICAgYm9vbCBjYW5SZW1vdmVMYXN0KCk7Ci0gICAgICAg
IGNvbnN0IEpTQ2VsbCogcmVtb3ZlTGFzdCgpOwotICAgICAgICBib29sIHJlZmlsbCgpOwotICAg
ICAgICAKLSAgICAgICAgYm9vbCBpc0VtcHR5KCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGRv
bmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcik7Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBp
ZGxlVGhyZWFkQ291bnQpOwotCi0gICAgICAgIHNpemVfdCBzaXplKCk7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBNYXJrU3RhY2tTZWdtZW50KiBtX3RvcFNlZ21lbnQ7Ci0gICAgICAgIAotICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGV4cGFuZCgpOwotICAgICAgICAKLSAgICAgICAg
TWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciYgbV9hbGxvY2F0b3I7Ci0KLSAgICAgICAgc2l6ZV90
IG1fc2VnbWVudENhcGFjaXR5OwotICAgICAgICBzaXplX3QgbV90b3A7Ci0gICAgICAgIHNpemVf
dCBtX251bWJlck9mUHJldmlvdXNTZWdtZW50czsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBw
b3N0SW5jVG9wKCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IHJlc3VsdCA9IG1fdG9w
Kys7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fdG9wU2VnbWVudC0+bV90b3ArKyk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBzaXplX3QgcHJlRGVjVG9wKCkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZV90IHJlc3Vs
dCA9IC0tbV90b3A7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IC0tbV90b3BTZWdtZW50
LT5tX3RvcCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICB2b2lkIHNldFRvcEZvckZ1bGxTZWdtZW50KCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNpdHkpOwot
ICAgICAgICAgICAgbV90b3AgPSBtX3NlZ21lbnRDYXBhY2l0eTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdm9pZCBzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlQoIW1fdG9wU2VnbWVudC0+bV90b3ApOwotICAgICAgICAgICAgbV90b3Ag
PSAwOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgdG9wKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKG1fdG9wID09IG1fdG9wU2VnbWVudC0+bV90b3ApOwotICAg
ICAgICAgICAgcmV0dXJuIG1fdG9wOwotICAgICAgICB9Ci0gICAgICAgIAotI2lmIEFTU0VSVF9E
SVNBQkxFRAotICAgICAgICB2b2lkIHZhbGlkYXRlUHJldmlvdXMoKSB7IH0KLSNlbHNlCi0gICAg
ICAgIHZvaWQgdmFsaWRhdGVQcmV2aW91cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZvciAoTWFya1N0YWNrU2VnbWVudCogY3VycmVu
dCA9IG1fdG9wU2VnbWVudC0+bV9wcmV2aW91czsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm1fcHJldmlvdXMpCi0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIEFTU0VS
VChjb3VudCA9PSBtX251bWJlck9mUHJldmlvdXNTZWdtZW50cyk7Ci0gICAgICAgIH0KLSNlbmRp
ZgotICAgIH07Ci0KLSAgICBjbGFzcyBNYXJrU3RhY2sgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYXJrU3RhY2spOwotICAgICAgICBmcmllbmQgY2xhc3MgSGVhcFJvb3RWaXNpdG9y
OyAvLyBBbGxvd2VkIHRvIG1hcmsgYSBKU1ZhbHVlKiBvciBKU0NlbGwqKiBkaXJlY3RseS4KLQot
ICAgIHB1YmxpYzoKLSAgICAgICAgTWFya1N0YWNrKEdDVGhyZWFkU2hhcmVkRGF0YSYpOwotICAg
ICAgICB+TWFya1N0YWNrKCk7Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQoQ29uc2VydmF0aXZlUm9v
dHMmKTsKLSAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5k
KEpJVFdyaXRlQmFycmllcjxUPiopOwotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lk
IGFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+Kik7Ci0gICAgICAgIHZvaWQgYXBwZW5kVmFsdWVz
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291bnQpOwotICAgICAgICAKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZFBvaW50ZXIoVCoqKTsKLSAgICAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFs
dWUqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7Ci0gICAg
ICAgIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKTsKLSAgICAgICAgaW50IG9wYXF1ZVJv
b3RDb3VudCgpOwotCi0gICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsg
cmV0dXJuIG1fc2hhcmVkOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3Rh
Y2suaXNFbXB0eSgpOyB9Ci0KLSAgICAgICAgdm9pZCBzZXR1cCgpOwotICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0KLSAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KLQotI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCi0gICAgICAg
IFZUYWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5cGVDb3VudHM7Ci0jZW5kaWYKLQotICAgICAgICB2
b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciopOwot
ICAgICAgICB2b2lkIGFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFs
aXplciopOworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVENT
cGluTG9jay5oPgogCi0jaWYgRU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCi0gICAgICAgIGlu
bGluZSB2b2lkIHJlc2V0Q2hpbGRDb3VudCgpIHsgbV9sb2dDaGlsZENvdW50ID0gMDsgfQotICAg
ICAgICBpbmxpbmUgdW5zaWduZWQgY2hpbGRDb3VudCgpIHsgcmV0dXJuIG1fbG9nQ2hpbGRDb3Vu
dDsgfQotICAgICAgICBpbmxpbmUgdm9pZCBpbmNyZW1lbnRDaGlsZENvdW50KCkgeyBtX2xvZ0No
aWxkQ291bnQrKzsgfQotI2VuZGlmCituYW1lc3BhY2UgSlNDIHsKIAotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKik7
CitjbGFzcyBKU0NlbGw7CiAKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNWYWx1ZSopOwotICAgICAg
ICB2b2lkIGFwcGVuZChKU1ZhbHVlKiwgc2l6ZV90IGNvdW50KTsKLSAgICAgICAgdm9pZCBhcHBl
bmQoSlNDZWxsKiopOwotCi0gICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNDZWxsKik7Ci0g
ICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7Ci0gICAgICAgIHZvaWQgaW50ZXJu
YWxBcHBlbmQoSlNWYWx1ZSopOwotICAgICAgICAKLSAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIG1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX29wYXF1
ZVJvb3RzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBt
ZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgbWVy
Z2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6b3Bh
cXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBN
YXJrU3RhY2tBcnJheSBtX3N0YWNrOwotICAgICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJv
b3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUg
Z2FyYmFnZSBjb2xsZWN0b3IuCi0gICAgICAgIAorc3RydWN0IE1hcmtTdGFja1NlZ21lbnQgewor
ICAgIE1hcmtTdGFja1NlZ21lbnQqIG1fcHJldmlvdXM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKLSAgICAgICAgYm9vbCBtX2lzRHJhaW5pbmc7CisgICAgc2l6ZV90IG1fdG9wOwogI2Vu
ZGlmCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5h
YmxlcjsKICAgICAgICAgCi0gICAgICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7Ci0gICAgICAgIGJv
b2wgbV9pc0luUGFyYWxsZWxNb2RlOwotICAgICAgICAKLSAgICAgICAgR0NUaHJlYWRTaGFyZWRE
YXRhJiBtX3NoYXJlZDsKLQotICAgICAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OyAvLyBMb2Nh
bCBwZXItdGhyZWFkIGNvcHkgb2Ygc2hhcmVkIGZsYWcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMK
LSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1ZhbHVlPiBVbmlxdWVTdHJp
bmdNYXA7Ci0gICAgICAgIFVuaXF1ZVN0cmluZ01hcCBtX3VuaXF1ZVN0cmluZ3M7Ci0KLSNpZiBF
TkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKLSAgICAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENv
dW50OwotI2VuZGlmCi0gICAgfTsKLQotICAgIGlubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojph
cHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQorICAgIGNvbnN0IEpTQ2VsbCoqIGRhdGEoKQogICAg
IHsKLSAgICAgICAgaWYgKG1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KQotICAgICAgICAgICAg
ZXhwYW5kKCk7Ci0gICAgICAgIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3Bvc3RJbmNUb3AoKV0gPSBj
ZWxsOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNvbnN0IEpTQ2VsbCoqPih0aGlzICsg
MSk7CiAgICAgfQotCi0gICAgaW5saW5lIGJvb2wgTWFya1N0YWNrQXJyYXk6OmNhblJlbW92ZUxh
c3QoKQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgY2FwYWNpdHlGcm9tU2l6ZShzaXplX3Qgc2l6
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fdG9wOworICAgICAgICByZXR1cm4gKHNpemUg
LSBzaXplb2YoTWFya1N0YWNrU2VnbWVudCkpIC8gc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwogICAg
IH0KLQotICAgIGlubGluZSBjb25zdCBKU0NlbGwqIE1hcmtTdGFja0FycmF5OjpyZW1vdmVMYXN0
KCkKKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHNpemVGcm9tQ2FwYWNpdHkoc2l6ZV90IGNhcGFj
aXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG9wU2VnbWVudC0+ZGF0YSgpW3ByZURlY1Rv
cCgpXTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihNYXJrU3RhY2tTZWdtZW50KSArIGNhcGFjaXR5
ICogc2l6ZW9mKGNvbnN0IEpTQ2VsbCopOwogICAgIH0KK307CiAKLSAgICBpbmxpbmUgYm9vbCBN
YXJrU3RhY2tBcnJheTo6aXNFbXB0eSgpCi0gICAgewotICAgICAgICBpZiAobV90b3ApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3RvcFNlZ21lbnQtPm1fcHJldmlv
dXMpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3RvcFNlZ21lbnQtPm1fcHJldmlvdXMtPm1fdG9w
ID09IG1fc2VnbWVudENhcGFjaXR5KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CitjbGFzcyBNYXJrU3RhY2tTZWdtZW50
QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yKCk7Cisg
ICAgfk1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3IoKTsKKyAgICAKKyAgICBNYXJrU3RhY2tTZWdt
ZW50KiBhbGxvY2F0ZSgpOworICAgIHZvaWQgcmVsZWFzZShNYXJrU3RhY2tTZWdtZW50Kik7Cisg
ICAgCisgICAgdm9pZCBzaHJpbmtSZXNlcnZlKCk7CisgICAgCitwcml2YXRlOgorICAgIFNwaW5M
b2NrIG1fbG9jazsKKyAgICBNYXJrU3RhY2tTZWdtZW50KiBtX25leHRGcmVlU2VnbWVudDsKK307
CisKK2NsYXNzIE1hcmtTdGFja0FycmF5IHsKK3B1YmxpYzoKKyAgICBNYXJrU3RhY2tBcnJheShN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yJik7CisgICAgfk1hcmtTdGFja0FycmF5KCk7CisKKyAg
ICB2b2lkIGFwcGVuZChjb25zdCBKU0NlbGwqKTsKKworICAgIGJvb2wgY2FuUmVtb3ZlTGFzdCgp
OworICAgIGNvbnN0IEpTQ2VsbCogcmVtb3ZlTGFzdCgpOworICAgIGJvb2wgcmVmaWxsKCk7Cisg
ICAgCisgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOwor
ICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90
IGlkbGVUaHJlYWRDb3VudCk7CiAKLSAgICBpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5Ojpz
aXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvcCArIG1fc2VnbWVudENhcGFjaXR5ICog
bV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHM7Ci0gICAgfQorICAgIHNpemVfdCBzaXplKCk7Cisg
ICAgYm9vbCBpc0VtcHR5KCk7CiAKLSAgICBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIoTWFya1N0YWNrJiBzdGFjaykK
LSAgICAgICAgICAgIDogbV9zdGFjayhzdGFjaykKLSAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKCFtX3N0YWNrLm1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgICAgICAgICBtX3N0YWNrLm1f
aXNJblBhcmFsbGVsTW9kZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIH5Q
YXJhbGxlbE1vZGVFbmFibGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fc3Rh
Y2subV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICAgICAgICAgIG1fc3RhY2subV9pc0luUGFyYWxs
ZWxNb2RlID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgTWFya1N0YWNrJiBtX3N0YWNrOwotICAgIH07Citwcml2YXRlOgorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZXhwYW5kKCk7CisgICAgCisgICAgc2l6ZV90IHBvc3RJbmNUb3AoKTsKKyAg
ICBzaXplX3QgcHJlRGVjVG9wKCk7CisgICAgdm9pZCBzZXRUb3BGb3JGdWxsU2VnbWVudCgpOwor
ICAgIHZvaWQgc2V0VG9wRm9yRW1wdHlTZWdtZW50KCk7CisgICAgc2l6ZV90IHRvcCgpOworICAg
IAorICAgIHZvaWQgdmFsaWRhdGVQcmV2aW91cygpOworCisgICAgTWFya1N0YWNrU2VnbWVudCog
bV90b3BTZWdtZW50OworICAgIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3ImIG1fYWxsb2NhdG9y
OworCisgICAgc2l6ZV90IG1fc2VnbWVudENhcGFjaXR5OworICAgIHNpemVfdCBtX3RvcDsKKyAg
ICBzaXplX3QgbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHM7CisgICAKK307CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJ
bmxpbmVNZXRob2RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2tJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDk0ICszMSw4MSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotQUxXQVlTX0lOTElORSB2
b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUqIHNsb3QsIHNpemVfdCBjb3VudCkKK2lubGlu
ZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnBvc3RJbmNUb3AoKQogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBKU1ZhbHVlJiB2YWx1ZSA9IHNsb3Rb
aV07Ci0gICAgICAgIGludGVybmFsQXBwZW5kKHZhbHVlKTsKLSAgICB9CisgICAgc2l6ZV90IHJl
c3VsdCA9IG1fdG9wKys7CisgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3RvcFNlZ21lbnQtPm1fdG9w
KyspOworICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxp
bmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcihUKiogc2xvdCkKKyAg
ICAgICAgCitpbmxpbmUgc2l6ZV90IE1hcmtTdGFja0FycmF5OjpwcmVEZWNUb3AoKQogewotICAg
IEFTU0VSVChzbG90KTsKLSAgICBKU0NlbGwqIGNlbGwgPSAqc2xvdDsKLSAgICBpbnRlcm5hbEFw
cGVuZChjZWxsKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gLS1tX3RvcDsKKyAgICBBU1NFUlQocmVz
dWx0ID09IC0tbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KLQot
QUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUqIHNsb3QpCisgICAg
ICAgIAoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJyYXk6OnNldFRvcEZvckZ1bGxTZWdtZW50KCkK
IHsKLSAgICBBU1NFUlQoc2xvdCk7Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworICAgIEFT
U0VSVChtX3RvcFNlZ21lbnQtPm1fdG9wID09IG1fc2VnbWVudENhcGFjaXR5KTsKKyAgICBtX3Rv
cCA9IG1fc2VnbWVudENhcGFjaXR5OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNr
OjphcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqIHNsb3QpCitpbmxpbmUgdm9pZCBNYXJr
U3RhY2tBcnJheTo6c2V0VG9wRm9yRW1wdHlTZWdtZW50KCkKIHsKLSAgICBBU1NFUlQoc2xvdCk7
Ci0gICAgaW50ZXJuYWxBcHBlbmQoKnNsb3QpOworICAgIEFTU0VSVCghbV90b3BTZWdtZW50LT5t
X3RvcCk7CisgICAgbV90b3AgPSAwOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNr
OjphcHBlbmQoSlNDZWxsKiogc2xvdCkKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnRv
cCgpCiB7Ci0gICAgQVNTRVJUKHNsb3QpOwotICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsKKyAg
ICBBU1NFUlQobV90b3AgPT0gbV90b3BTZWdtZW50LT5tX3RvcCk7CisgICAgcmV0dXJuIG1fdG9w
OwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5hbEFwcGVuZChKU1Zh
bHVlIHZhbHVlKQorI2lmIEFTU0VSVF9ESVNBQkxFRAoraW5saW5lIHZvaWQgTWFya1N0YWNrQXJy
YXk6OnZhbGlkYXRlUHJldmlvdXMoKSB7IH0KKyNlbHNlCitpbmxpbmUgdm9pZCBNYXJrU3RhY2tB
cnJheTo6dmFsaWRhdGVQcmV2aW91cygpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXND
ZWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwo
KSk7CisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGZvciAoTWFya1N0YWNrU2VnbWVudCog
Y3VycmVudCA9IG1fdG9wU2VnbWVudC0+bV9wcmV2aW91czsgY3VycmVudDsgY3VycmVudCA9IGN1
cnJlbnQtPm1fcHJldmlvdXMpCisgICAgICAgIGNvdW50Kys7CisgICAgQVNTRVJUKGNvdW50ID09
IG1fbnVtYmVyT2ZQcmV2aW91c1NlZ21lbnRzKTsKIH0KKyNlbmRpZgogCi1pbmxpbmUgdm9pZCBN
YXJrU3RhY2s6OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKK2lubGluZSB2b2lkIE1hcmtTdGFja0FycmF5Ojph
cHBlbmQoY29uc3QgSlNDZWxsKiBjZWxsKQogewotICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKKyAgICBp
ZiAobV90b3AgPT0gbV9zZWdtZW50Q2FwYWNpdHkpCisgICAgICAgIGV4cGFuZCgpOworICAgIG1f
dG9wU2VnbWVudC0+ZGF0YSgpW3Bvc3RJbmNUb3AoKV0gPSBjZWxsOwogfQogCi1pbmxpbmUgdm9p
ZCBNYXJrU3RhY2s6OmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoVW5jb25kaXRpb25hbEZpbmFs
aXplciogdW5jb25kaXRpb25hbEZpbmFsaXplcikKK2lubGluZSBib29sIE1hcmtTdGFja0FycmF5
OjpjYW5SZW1vdmVMYXN0KCkKIHsKLSAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzLmFkZFRocmVhZFNhZmUodW5jb25kaXRpb25hbEZpbmFsaXplcik7CisgICAgcmV0dXJuICEh
bV90b3A7CiB9CiAKLWlubGluZSB2b2lkIE1hcmtTdGFjazo6YWRkT3BhcXVlUm9vdCh2b2lkKiBy
b290KQoraW5saW5lIGNvbnN0IEpTQ2VsbCogTWFya1N0YWNrQXJyYXk6OnJlbW92ZUxhc3QoKQog
ewotI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01h
cmtlcnMoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQg
SGFzaFNldC4KLSAgICAgICAgbV9zaGFyZWQubV9vcGFxdWVSb290cy5hZGQocm9vdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gUHV0IGludG8gdGhlIGxvY2FsIHNldCwgYnV0IG1l
cmdlIHdpdGggdGhlIHNoYXJlZCBvbmUgZXZlcnkgb25jZSBpbgotICAgIC8vIGEgd2hpbGUgdG8g
bWFrZSBzdXJlIHRoYXQgdGhlIGxvY2FsIHNldHMgZG9uJ3QgZ3JvdyB0b28gbGFyZ2UuCi0gICAg
bWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwotICAgIG1fb3BhcXVlUm9vdHMuYWRkKHJv
b3QpOwotI2Vsc2UKLSAgICBtX29wYXF1ZVJvb3RzLmFkZChyb290KTsKLSNlbmRpZgorICAgIHJl
dHVybiBtX3RvcFNlZ21lbnQtPmRhdGEoKVtwcmVEZWNUb3AoKV07CiB9CiAKLWlubGluZSBib29s
IE1hcmtTdGFjazo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpCitpbmxpbmUgYm9vbCBN
YXJrU3RhY2tBcnJheTo6aXNFbXB0eSgpCiB7Ci0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1v
ZGUpOwotI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBtX3NoYXJlZC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJv
b3QpOwotI2Vsc2UKLSAgICByZXR1cm4gbV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKLSNl
bmRpZgorICAgIGlmIChtX3RvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Rv
cFNlZ21lbnQtPm1fcHJldmlvdXMpIHsKKyAgICAgICAgQVNTRVJUKG1fdG9wU2VnbWVudC0+bV9w
cmV2aW91cy0+bV90b3AgPT0gbV9zZWdtZW50Q2FwYWNpdHkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgaW50IE1hcmtTdGFjazo6
b3BhcXVlUm9vdENvdW50KCkKK2lubGluZSBzaXplX3QgTWFya1N0YWNrQXJyYXk6OnNpemUoKQog
ewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSNpZiBFTkFCTEUoUEFSQUxMRUxf
R0MpCi0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9z
aGFyZWQubV9vcGFxdWVSb290cy5zaXplKCk7Ci0jZWxzZQotICAgIHJldHVybiBtX29wYXF1ZVJv
b3RzLnNpemUoKTsKLSNlbmRpZgorICAgIHJldHVybiBtX3RvcCArIG1fc2VnbWVudENhcGFjaXR5
ICogbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MTIgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgorCisjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKKyNpbmNs
dWRlICJDb3BpZWRTcGFjZS5oIgorI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lTWV0aG9kcy5o
IgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKKyNpbmNs
dWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWREYXRhJiBzaGFyZWQp
CisgICAgOiBtX3N0YWNrKHNoYXJlZC5tX3NlZ21lbnRBbGxvY2F0b3IpCisgICAgLCBtX3Zpc2l0
Q291bnQoMCkKKyAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKKyAgICAsIG1fc2hhcmVk
KHNoYXJlZCkKKyAgICAsIG1fc2hvdWxkSGFzaENvbnN0KGZhbHNlKQorI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQor
ICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQorI2VuZGlmCit7Cit9CisKK1Nsb3RWaXNpdG9yOjp+
U2xvdFZpc2l0b3IoKQoreworICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Cit9CisKK3Zv
aWQgU2xvdFZpc2l0b3I6OnNldHVwKCkKK3sKKyAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25z
dCA9IG1fc2hhcmVkLm1fZ2xvYmFsRGF0YS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25z
dCgpOworICAgIG1fc2hvdWxkSGFzaENvbnN0ID0gbV9zaGFyZWQubV9zaG91bGRIYXNoQ29uc3Q7
CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3NoYXJlZC5tX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLnNpemUoKTsgKytpKQorICAgICAgICBt
X3NoYXJlZC5tX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrW2ldLT5tX3Nob3VsZEhhc2hDb25zdCA9
IG1fc2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0OworI2VuZGlmCit9CisKK3ZvaWQgU2xvdFZpc2l0
b3I6OnJlc2V0KCkKK3sKKyAgICBtX3Zpc2l0Q291bnQgPSAwOworICAgIEFTU0VSVChtX3N0YWNr
LmlzRW1wdHkoKSk7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFTU0VSVChtX29wYXF1
ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCisjZWxzZQor
ICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyNlbmRpZgorICAgIGlmIChtX3Nob3VsZEhhc2hD
b25zdCkgeworICAgICAgICBtX3VuaXF1ZVN0cmluZ3MuY2xlYXIoKTsKKyAgICAgICAgbV9zaG91
bGRIYXNoQ29uc3QgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCit7CisgICAgSlNDZWxsKiog
cm9vdHMgPSBjb25zZXJ2YXRpdmVSb290cy5yb290cygpOworICAgIHNpemVfdCBzaXplID0gY29u
c2VydmF0aXZlUm9vdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQorICAgICAgICBpbnRlcm5hbEFwcGVuZChyb290c1tpXSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3Qg
SlNDZWxsKiBjZWxsKQoreworI2lmIEVOQUJMRShTSU1QTEVfSEVBUF9QUk9GSUxJTkcpCisgICAg
bV92aXNpdGVkVHlwZUNvdW50cy5jb3VudChjZWxsKTsKKyNlbmRpZgorCisgICAgQVNTRVJUKEhl
YXA6OmlzTWFya2VkKGNlbGwpKTsKKyAgICAKKyAgICBpZiAoaXNKU1N0cmluZyhjZWxsKSkgewor
ICAgICAgICBKU1N0cmluZzo6dmlzaXRDaGlsZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwp
LCB2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0pTRmluYWxP
YmplY3QoY2VsbCkpIHsKKyAgICAgICAgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihjb25z
dF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChpc0pTQXJyYXkoY2VsbCkpIHsKKyAgICAgICAgSlNBcnJheTo6dmlzaXRDaGls
ZHJlbihjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpLCB2aXNpdG9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPnZpc2l0Q2hpbGRyZW4oY29uc3Rf
Y2FzdDxKU0NlbGwqPihjZWxsKSwgdmlzaXRvcik7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9m
dGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCisgICAgLy8gYXNzdW1l
IHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCisKKyAgICAvLyBBdm9pZCBsb2NraW5n
IHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCisg
ICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYg
dGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRp
dmUgYW5kIGFzc3VtZQorICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJs
ZS4KKyAgICBpZiAobV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25z
ZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKKyAgICAvLyB0aHJlYWQgaXMgYWxyZWFk
eSBkb25hdGluZy4KKyAgICBNdXRleFRyeUxvY2tlciBsb2NrZXIobV9zaGFyZWQubV9tYXJraW5n
TG9jayk7CisgICAgaWYgKCFsb2NrZXIubG9ja2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFu
ZCBkb25hdGUuCisgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjayk7CisKKyAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpCisgICAgICAgIG1fc2hhcmVk
Lm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6
ZHJhaW4oKQoreworICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOworICAgCisjaWYgRU5B
QkxFKFBBUkFMTEVMX0dDKQorICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID4g
MSkgeworICAgICAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBt
X3N0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBP
cHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5j
YW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgICAgIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbWVyZ2VPcGFxdWVS
b290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAK
KyAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIG1fc3RhY2sucmVmaWxs
KCk7CisgICAgICAgIHdoaWxlIChtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgICAg
IHZpc2l0Q2hpbGRyZW4oKnRoaXMsIG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVk
RHJhaW5Nb2RlKQoreworICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOworICAgIAorICAg
IEFTU0VSVChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKKyAgICAKKyAgICBib29sIHNo
b3VsZEJlUGFyYWxsZWw7CisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgc2hvdWxkQmVQ
YXJhbGxlbCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAxOworI2Vsc2UKKyAgICBB
U1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKTsKKyAgICBzaG91bGRCZVBh
cmFsbGVsID0gZmFsc2U7CisjZW5kaWYKKyAgICAKKyAgICBpZiAoIXNob3VsZEJlUGFyYWxsZWwp
IHsKKyAgICAgICAgLy8gVGhpcyBjYWxsIHNob3VsZCBiZSBhIG5vLW9wLgorICAgICAgICBBU1NF
UlRfVU5VU0VEKHNoYXJlZERyYWluTW9kZSwgc2hhcmVkRHJhaW5Nb2RlID09IE1hc3RlckRyYWlu
KTsKKyAgICAgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1f
c2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIHsKKyAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fbWFya2luZ0xvY2spOworICAgICAgICBtX3NoYXJlZC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CisgICAgfQorICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NoYXJlZC5t
X21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMtLTsKKworICAgICAgICAgICAgLy8gSG93IHdlIHdhaXQgZGlmZmVycyBkZXBl
bmRpbmcgb24gZHJhaW4gbW9kZS4KKyAgICAgICAgICAgIGlmIChzaGFyZWREcmFpbk1vZGUgPT0g
TWFzdGVyRHJhaW4pIHsKKyAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJt
aW5hdGlvbiBpcyByZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKKyAgICAgICAg
ICAgICAgICAvLyBmb3IgdXMgdG8gZG8uCisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtl
cnMgJiYgbV9zaGFyZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBm
b3IgdGhlbSB0byBnaXZlIHRoZWlyIHByaXZhdGUgQ29waWVkQmxvY2tzIGJhY2sKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29y
ayB0byBiZSBkb25lPworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fc2hhcmVkLm1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQu
CisgICAgICAgICAgICAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi53YWl0KG1f
c2hhcmVkLm1fbWFya2luZ0xvY2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURy
YWluKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0
IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KKyAgICAgICAgICAgICAg
ICBpZiAoIW1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgJiYgbV9zaGFy
ZWQubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBtX3No
YXJlZC5tX21hcmtpbmdDb25kaXRpb24uYnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgd2hpbGUgKG1fc2hhcmVkLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHko
KSAmJiAhbV9zaGFyZWQubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyAm
JiBtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBkb25lQ29weWluZygpOworICAgICAgICAgICAgICAgICAgICBtX3NoYXJlZC5tX21h
cmtpbmdDb25kaXRpb24ud2FpdChtX3NoYXJlZC5tX21hcmtpbmdMb2NrKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gSXMgdGhlIFZNIGV4
aXRpbmc/IElmIHNvLCBleGl0IHRoaXMgdGhyZWFkLgorICAgICAgICAgICAgICAgIGlmIChtX3No
YXJlZC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZUNvcHlpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgaWRs
ZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1f
bnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CisgICAgICAgICAgICBtX3N0YWNrLnN0ZWFs
U29tZUNlbGxzRnJvbShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50
KTsKKyAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZHJhaW4oKTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCit7CisgICAgQVNTRVJU
KCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVu
IG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fc2hhcmVkLm1fb3BhcXVlUm9vdHNMb2NrKTsKKyAgICAgICAgSGFzaFNldDx2b2lk
Kj46Oml0ZXJhdG9yIGJlZ2luID0gbV9vcGFxdWVSb290cy5iZWdpbigpOworICAgICAgICBIYXNo
U2V0PHZvaWQqPjo6aXRlcmF0b3IgZW5kID0gbV9vcGFxdWVSb290cy5lbmQoKTsKKyAgICAgICAg
Zm9yIChIYXNoU2V0PHZvaWQqPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsg
KytpdGVyKQorICAgICAgICAgICAgbV9zaGFyZWQubV9vcGFxdWVSb290cy5hZGQoKml0ZXIpOwor
ICAgIH0KKyAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6
OnN0YXJ0Q29weWluZygpCit7CisgICAgQVNTRVJUKCFtX2NvcGllZEFsbG9jYXRvci5pc1ZhbGlk
KCkpOworfQorCit2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZVNsb3coc2l6ZV90
IGJ5dGVzKQoreworICAgIG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmRvbmVGaWxsaW5nQmxvY2so
bV9jb3BpZWRBbGxvY2F0b3IucmVzZXRDdXJyZW50QmxvY2soKSk7CisgICAgbV9jb3BpZWRBbGxv
Y2F0b3Iuc2V0Q3VycmVudEJsb2NrKG1fc2hhcmVkLm1fY29waWVkU3BhY2UtPmFsbG9jYXRlQmxv
Y2tGb3JDb3B5aW5nUGhhc2UoKSk7CisKKyAgICB2b2lkKiByZXN1bHQgPSAwOworICAgIENoZWNr
ZWRCb29sZWFuIGRpZFN1Y2NlZWQgPSBtX2NvcGllZEFsbG9jYXRvci50cnlBbGxvY2F0ZShieXRl
cywgJnJlc3VsdCk7CisgICAgQVNTRVJUKGRpZFN1Y2NlZWQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQqIFNsb3RWaXNpdG9yOjphbGxvY2F0ZU5ld1NwYWNlT3JQaW4odm9pZCogcHRy
LCBzaXplX3QgYnl0ZXMpCit7CisgICAgaWYgKCFjaGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVy
d2lzZShwdHIsIGJ5dGVzKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGFs
bG9jYXRlTmV3U3BhY2UoYnl0ZXMpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6
OnRyeUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1bnNp
Z25lZCBjdXJyZW50RmxhZ3MgPSBtX2ZsYWdzOworCisgICAgaWYgKGN1cnJlbnRGbGFncyAmIEhh
c2hDb25zdExvY2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIG5ld0Zs
YWdzID0gY3VycmVudEZsYWdzIHwgSGFzaENvbnN0TG9jazsKKworICAgIGlmICghV1RGOjp3ZWFr
Q29tcGFyZUFuZFN3YXAoJm1fZmxhZ3MsIGN1cnJlbnRGbGFncywgbmV3RmxhZ3MpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBXVEY6Om1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgaWYgKGlzSGFzaENvbnN0U2luZ2xldG9uKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZmxhZ3MgfD0gSGFzaENvbnN0TG9jazsKKwor
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmlu
Zzo6cmVsZWFzZUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAg
ICBXVEY6Om1lbW9yeUJhcnJpZXJCZWZvcmVVbmxvY2soKTsKKyNlbmRpZgorICAgIG1fZmxhZ3Mg
Jj0gfkhhc2hDb25zdExvY2s7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hv
dWxkVHJ5SGFzaENvbnN0KCkKK3sKKyAgICByZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1Jv
cGUoKSAmJiAhaXNIYXNoQ29uc3RTaW5nbGV0b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBTbG90VmlzaXRvcjo6aW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSogc2xvdCkKK3sKKyAgICAvLyBU
aGlzIGludGVybmFsQXBwZW5kIGlzIG9ubHkgaW50ZW5kZWQgZm9yIHZpc2l0cyB0byBvYmplY3Qg
YW5kIGFycmF5IGJhY2tpbmcgc3RvcmVzLgorICAgIC8vIGFzIGl0IGNhbiBjaGFuZ2UgdGhlIEpT
VmFsdWUgcG9pbnRlZCB0byBiZSB0aGUgYXJndW1lbnQgd2hlbiB0aGUgb3JpZ2luYWwgSlNWYWx1
ZQorICAgIC8vIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgY29udGVudHMgYXMg
YW5vdGhlciBzdHJpbmcuCisKKyAgICBBU1NFUlQoc2xvdCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
ICpzbG90OworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAg
aWYgKCFjZWxsKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRIYXNoQ29uc3Qg
JiYgY2VsbC0+aXNTdHJpbmcoKSkgeworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0
PEpTU3RyaW5nKj4oY2VsbCk7CisgICAgICAgIGlmIChzdHJpbmctPnNob3VsZFRyeUhhc2hDb25z
dCgpICYmIHN0cmluZy0+dHJ5SGFzaENvbnN0TG9jaygpKSB7CisgICAgICAgICAgICBVbmlxdWVT
dHJpbmdNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3VuaXF1ZVN0cmluZ3MuYWRkKHN0cmlu
Zy0+c3RyaW5nKCkuaW1wbCgpLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0b24o
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdK
U1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAganNDYXN0PEpT
U3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0
b24oKTsKKyAgICAgICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKKyAgICAgICAg
ICAgICAgICBzdHJpbmctPnJlbGVhc2VIYXNoQ29uc3RMb2NrKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENv
bnN0TG9jaygpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50ZXJuYWxBcHBlbmQoY2VsbCk7
Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmNvcHlBbmRBcHBlbmQodm9pZCoqIHB0ciwgc2l6ZV90
IGJ5dGVzLCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICB2b2lkKiBv
bGRQdHIgPSAqcHRyOworICAgIHZvaWQqIG5ld1B0ciA9IGFsbG9jYXRlTmV3U3BhY2VPclBpbihv
bGRQdHIsIGJ5dGVzKTsKKyAgICBpZiAobmV3UHRyKSB7CisgICAgICAgIHNpemVfdCBqc1ZhbHVl
c09mZnNldCA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odmFs
dWVzKSAtIHN0YXRpY19jYXN0PGNoYXIqPihvbGRQdHIpKTsKKworICAgICAgICBKU1ZhbHVlKiBu
ZXdWYWx1ZXMgPSByZWludGVycHJldF9jYXN0X3B0cjxKU1ZhbHVlKj4oc3RhdGljX2Nhc3Q8Y2hh
cio+KG5ld1B0cikgKyBqc1ZhbHVlc09mZnNldCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgSlNWYWx1ZSYgdmFsdWUgPSB2YWx1
ZXNbaV07CisgICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnRlcm5h
bEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShuZXdQ
dHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOworICAgICAgICAqcHRyID0gbmV3UHRyOworICAg
IH0gZWxzZQorICAgICAgICBhcHBlbmQodmFsdWVzLCBsZW5ndGgpOworfQorICAgIAordm9pZCBT
bG90VmlzaXRvcjo6ZG9uZUNvcHlpbmcoKQoreworICAgIGlmICghbV9jb3BpZWRBbGxvY2F0b3Iu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NoYXJlZC5tX2NvcGllZFNwYWNl
LT5kb25lRmlsbGluZ0Jsb2NrKG1fY29waWVkQWxsb2NhdG9yLnJlc2V0Q3VycmVudEJsb2NrKCkp
OworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQoreworICAg
IGZvciAoV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3VycmVudCA9IG1fc2hhcmVkLm1fd2Vha1Jl
ZmVyZW5jZUhhcnZlc3RlcnMuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4
dCgpKQorICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCp0aGlzKTsKK30KKwor
dm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCit7Cisg
ICAgd2hpbGUgKG1fc2hhcmVkLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMuaGFzTmV4dCgpKQor
ICAgICAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKK30KKworI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQordm9pZCBTbG90VmlzaXRvcjo6dmFsaWRhdGUoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICgh
Y2VsbCkgeworICAgICAgICBkYXRhTG9nKCJjZWxsIGlzIE5VTExcbiIpOworICAgICAgICBDUkFT
SCgpOworICAgIH0KKworICAgIGlmICghY2VsbC0+c3RydWN0dXJlKCkpIHsKKyAgICAgICAgZGF0
YUxvZygiY2VsbCBhdCAlcCBoYXMgYSBudWxsIHN0cnVjdHVyZVxuIiAsIGNlbGwpOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KKworICAgIC8vIEJvdGggdGhlIGNlbGwncyBzdHJ1Y3R1cmUsIGFu
ZCB0aGUgY2VsbCdzIHN0cnVjdHVyZSdzIHN0cnVjdHVyZSBzaG91bGQgYmUgdGhlIFN0cnVjdHVy
ZSBTdHJ1Y3R1cmUuCisgICAgLy8gSSBoYXRlIHRoaXMgc2VudGVuY2UuCisgICAgaWYgKGNlbGwt
PnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSAhPSBjZWxsLT5z
dHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSkgeworICAgICAgICBjb25zdCBjaGFyKiBw
YXJlbnRDbGFzc05hbWUgPSAwOworICAgICAgICBjb25zdCBjaGFyKiBvdXJDbGFzc05hbWUgPSAw
OworICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpICYmIGNlbGwtPnN0
cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKSkKKyAgICAgICAgICAg
IHBhcmVudENsYXNzTmFtZSA9IGNlbGwtPnN0cnVjdHVyZSgpLT5zdHJ1Y3R1cmUoKS0+SlNDZWxs
OjpjbGFzc0luZm8oKS0+Y2xhc3NOYW1lOworICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCkt
PkpTQ2VsbDo6Y2xhc3NJbmZvKCkpCisgICAgICAgICAgICBvdXJDbGFzc05hbWUgPSBjZWxsLT5z
dHJ1Y3R1cmUoKS0+SlNDZWxsOjpjbGFzc0luZm8oKS0+Y2xhc3NOYW1lOworICAgICAgICBkYXRh
TG9nKCJwYXJlbnQgc3RydWN0dXJlICglcCA8JXM+KSBvZiBjZWxsIGF0ICVwIGRvZXNuJ3QgbWF0
Y2ggY2VsbCdzIHN0cnVjdHVyZSAoJXAgPCVzPilcbiIsCisgICAgICAgICAgICAgICAgY2VsbC0+
c3RydWN0dXJlKCktPnN0cnVjdHVyZSgpLCBwYXJlbnRDbGFzc05hbWUsIGNlbGwsIGNlbGwtPnN0
cnVjdHVyZSgpLCBvdXJDbGFzc05hbWUpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKyNl
bHNlCit2b2lkIFNsb3RWaXNpdG9yOjp2YWxpZGF0ZShKU0NlbGwqKQoreworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywzNSArMjcsNTIgQEAKICNkZWZp
bmUgU2xvdFZpc2l0b3JfaAogCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKLSNpbmNsdWRlICJN
YXJrU3RhY2suaCIKKyNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFj
a0lubGluZU1ldGhvZHMuaCIKIAorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwog
bmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEhlYXA7CitjbGFzcyBDb25zZXJ2YXRpdmVSb290czsK
IGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKK2NsYXNzIEhlYXA7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
SklUV3JpdGVCYXJyaWVyOworCitjbGFzcyBTbG90VmlzaXRvciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2xvdFZpc2l0b3IpOworICAgIGZyaWVuZCBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7
IC8vIEFsbG93ZWQgdG8gbWFyayBhIEpTVmFsdWUqIG9yIEpTQ2VsbCoqIGRpcmVjdGx5LgogCi1j
bGFzcyBTbG90VmlzaXRvciA6IHB1YmxpYyBNYXJrU3RhY2sgewotICAgIGZyaWVuZCBjbGFzcyBI
ZWFwUm9vdFZpc2l0b3I7CiBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoR0NUaHJlYWRTaGFyZWRE
YXRhJik7CisgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICB2b2lkIGRvbmF0ZSgpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6
Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKLSAgICB9CisgICAgdm9pZCBhcHBlbmQo
Q29uc2VydmF0aXZlUm9vdHMmKTsKICAgICAKLSAgICB2b2lkIGRyYWluKCk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVyPFQ+Kik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiopOworICAg
IHZvaWQgYXBwZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291
bnQpOwogICAgIAotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oKQotICAgIHsKLSAgICAgICAgZG9u
YXRlKCk7Ci0gICAgICAgIGRyYWluKCk7Ci0gICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoqKTsKKyAgICB2b2lkIGFwcGVu
ZFVuYmFycmllcmVkVmFsdWUoSlNWYWx1ZSopOworICAgIAorICAgIHZvaWQgYWRkT3BhcXVlUm9v
dCh2b2lkKik7CisgICAgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopOworICAgIGludCBv
cGFxdWVSb290Q291bnQoKTsKKworICAgIEdDVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgp
IHsgcmV0dXJuIG1fc2hhcmVkOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFj
ay5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgc2V0dXAoKTsKKyAgICB2b2lkIHJlc2V0KCk7CisK
KyAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQor
CisgICAgdm9pZCBkb25hdGUoKTsKKyAgICB2b2lkIGRyYWluKCk7CisgICAgdm9pZCBkb25hdGVB
bmREcmFpbigpOwogICAgIAogICAgIGVudW0gU2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwg
TWFzdGVyRHJhaW4gfTsKICAgICB2b2lkIGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUp
OwpAQCAtNzgsMTkgKzk1LDg0IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGRvbmVDb3B5aW5n
KCk7IAogICAgICAgICAKKyNpZiBFTkFCTEUoU0lNUExFX0hFQVBfUFJPRklMSU5HKQorICAgIFZU
YWJsZVNwZWN0cnVtIG1fdmlzaXRlZFR5cGVDb3VudHM7CisjZW5kaWYKKworICAgIHZvaWQgYWRk
V2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKik7CisgICAgdm9p
ZCBhZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIqKTsKKwor
I2lmIEVOQUJMRShPQkpFQ1RfTUFSS19MT0dHSU5HKQorICAgIGlubGluZSB2b2lkIHJlc2V0Q2hp
bGRDb3VudCgpIHsgbV9sb2dDaGlsZENvdW50ID0gMDsgfQorICAgIGlubGluZSB1bnNpZ25lZCBj
aGlsZENvdW50KCkgeyByZXR1cm4gbV9sb2dDaGlsZENvdW50OyB9CisgICAgaW5saW5lIHZvaWQg
aW5jcmVtZW50Q2hpbGRDb3VudCgpIHsgbV9sb2dDaGlsZENvdW50Kys7IH0KKyNlbmRpZgorCiBw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOworICAgIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCopOworCisgICAg
dm9pZCBhcHBlbmQoSlNWYWx1ZSopOworICAgIHZvaWQgYXBwZW5kKEpTVmFsdWUqLCBzaXplX3Qg
Y291bnQpOworICAgIHZvaWQgYXBwZW5kKEpTQ2VsbCoqKTsKKworICAgIHZvaWQgaW50ZXJuYWxB
cHBlbmQoSlNDZWxsKik7CisgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1ZhbHVlKTsKKyAgICB2
b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUqKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKKyAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5l
Y2Vzc2FyeSgpOworICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOworICAg
IAogICAgIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2VPclBpbih2b2lkKiwgc2l6ZV90KTsKICAgICB2
b2lkKiBhbGxvY2F0ZU5ld1NwYWNlU2xvdyhzaXplX3QpOwogCiAgICAgdm9pZCBkb25hdGVLbm93
blBhcmFsbGVsKCk7CiAKKyAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOworICAgIEhhc2hTZXQ8
dm9pZCo+IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5v
dCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKyAgICAKKyAgICBzaXplX3QgbV92
aXNpdENvdW50OworICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOworICAgIAorICAgIEdDVGhy
ZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CisKKyAgICBib29sIG1fc2hvdWxkSGFzaENvbnN0OyAv
LyBMb2NhbCBwZXItdGhyZWFkIGNvcHkgb2Ygc2hhcmVkIGZsYWcgZm9yIHBlcmZvcm1hbmNlIHJl
YXNvbnMKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTVmFsdWU+IFVuaXF1ZVN0
cmluZ01hcDsKKyAgICBVbmlxdWVTdHJpbmdNYXAgbV91bmlxdWVTdHJpbmdzOworCisjaWYgRU5B
QkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCisgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50Owor
I2VuZGlmCisKICAgICBDb3BpZWRBbGxvY2F0b3IgbV9jb3BpZWRBbGxvY2F0b3I7CisKK3B1Ymxp
YzoKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbjsKKyAgICBib29sIG1faXNEcmFpbmluZzsKKyNlbmRpZgogfTsKIAotaW5s
aW5lIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihHQ1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZCkK
LSAgICA6IE1hcmtTdGFjayhzaGFyZWQpCi17Ci19CitjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVy
IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbE1vZGVFbmFibGVyKFNsb3RWaXNpdG9yJiBzdGFjaykK
KyAgICAgICAgOiBtX3N0YWNrKHN0YWNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N0YWNr
Lm1faXNJblBhcmFsbGVsTW9kZSk7CisgICAgICAgIG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2Rl
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgflBhcmFsbGVsTW9kZUVuYWJsZXIoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fc3RhY2subV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgICAgICAgbV9z
dGFjay5tX2lzSW5QYXJhbGxlbE1vZGUgPSBmYWxzZTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIFNsb3RWaXNpdG9yJiBtX3N0YWNrOworfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lTWV0aG9kcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAg
KzI3LDExNSBAQAogI2RlZmluZSBTbG90VmlzaXRvcklubGluZU1ldGhvZHNfaAogCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVNZXRob2RzLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitBTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90LCBzaXplX3QgY291bnQpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIEpTVmFs
dWUmIHZhbHVlID0gc2xvdFtpXTsKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOworICAg
IH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRVbmJhcnJpZXJlZFBvaW50ZXIoVCoqIHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOwor
ICAgIEpTQ2VsbCogY2VsbCA9ICpzbG90OworICAgIGludGVybmFsQXBwZW5kKGNlbGwpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlKiBzbG90KQor
eworICAgIEFTU0VSVChzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgqc2xvdCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVW5iYXJyaWVyZWRWYWx1ZShKU1Zh
bHVlKiBzbG90KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBpbnRlcm5hbEFwcGVuZCgqc2xv
dCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKEpTQ2VsbCoq
IHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIGludGVybmFsQXBwZW5kKCpzbG90KTsK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjppbnRlcm5hbEFwcGVuZChKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICByZXR1cm47CisgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUuYXNDZWxsKCkpOworfQorCitpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQoreworICAgIG1fc2hhcmVkLm1f
d2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVz
dGVyKTsKK30KKworaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIoVW5jb25kaXRpb25hbEZpbmFsaXplciogdW5jb25kaXRpb25hbEZpbmFsaXplcikKK3sK
KyAgICBtX3NoYXJlZC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodW5j
b25kaXRpb25hbEZpbmFsaXplcik7Cit9CisKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRP
cGFxdWVSb290KHZvaWQqIHJvb3QpCit7CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIGlm
IChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpIHsKKyAgICAgICAgLy8gUHV0IGRp
cmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgorICAgICAgICBtX3NoYXJlZC5tX29wYXF1
ZVJvb3RzLmFkZChyb290KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBQdXQgaW50
byB0aGUgbG9jYWwgc2V0LCBidXQgbWVyZ2Ugd2l0aCB0aGUgc2hhcmVkIG9uZSBldmVyeSBvbmNl
IGluCisgICAgLy8gYSB3aGlsZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbG9jYWwgc2V0cyBkb24n
dCBncm93IHRvbyBsYXJnZS4KKyAgICBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7Cisg
ICAgbV9vcGFxdWVSb290cy5hZGQocm9vdCk7CisjZWxzZQorICAgIG1fb3BhcXVlUm9vdHMuYWRk
KHJvb3QpOworI2VuZGlmCit9CisKK2lubGluZSBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09w
YXF1ZVJvb3Qodm9pZCogcm9vdCkKK3sKKyAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7
CisjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1w
dHkoKSk7CisgICAgcmV0dXJuIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7
CisjZWxzZQorICAgIHJldHVybiBtX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOworI2VuZGlm
Cit9CisKK2lubGluZSBpbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCit7CisgICAg
QVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAg
ICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOworICAgIHJldHVybiBtX3NoYXJlZC5t
X29wYXF1ZVJvb3RzLnNpemUoKTsKKyNlbHNlCisgICAgcmV0dXJuIG1fb3BhcXVlUm9vdHMuc2l6
ZSgpOworI2VuZGlmCit9CisKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsKK30KKyAgICAKK2lubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCkKK3sKKyAgICBp
ZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6
Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQorICAgICAgICByZXR1cm47CisgICAgbWVyZ2VP
cGFxdWVSb290cygpOworfQorICAgIAogQUxXQVlTX0lOTElORSBib29sIFNsb3RWaXNpdG9yOjpj
aGVja0lmU2hvdWxkQ29weUFuZFBpbk90aGVyd2lzZSh2b2lkKiBvbGRQdHIsIHNpemVfdCBieXRl
cykKIHsKICAgICBpZiAoQ29waWVkU3BhY2U6OmlzT3ZlcnNpemUoYnl0ZXMpKSB7CkBAIC01NSw2
ICsxNjAsMjEgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdAogICAg
IHJldHVybiByZXN1bHQ7CiB9ICAgICAgIAogCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlKCkKK3sKKyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKKyAgICBpZiAoT3B0aW9u
czo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
ZG9uYXRlS25vd25QYXJhbGxlbCgpOworfQorCitpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlQW5kRHJhaW4oKQoreworICAgIGRvbmF0ZSgpOworICAgIGRyYWluKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU2xvdFZpc2l0b3JJbmxpbmVNZXRob2RzX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAkocmV2aXNp
b24gMTI3NzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lmIEVOQUJMRShKSVQpCiAKICNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIk1hcmtTdGFjay5oIgorI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKSVRXcml0ZUJhcnJp
ZXI8VD4qIHNsb3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kKEpJVFdyaXRlQmFycmllcjxUPiogc2xvdCkKIHsKICAgICBpbnRlcm5hbEFwcGVu
ZChzbG90LT5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBS
ZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDEyNzc1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZp
c2lvbiAxMjc3NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkpTTG9jay5oIgogI2lu
Y2x1ZGUgIkpTVmFsdWVJbmxpbmVNZXRob2RzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
KyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDEyNzc1NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NjQsNyArNTY0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX2NsYXNz
SW5mbzsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRlcm5h
bEFwcGVuZChKU0NlbGwqIGNlbGwpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
OjppbnRlcm5hbEFwcGVuZChKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKTsKICAgICAgICAgaWYgKCFjZWxsKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgJKHJl
dmlzaW9uIDEyNzc1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFy
cmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTQgKzIyNSwxNCBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgVj4gaW5saW5lCiAgICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMu
Z2V0KCk7CiB9CiAKLS8vIE1hcmtTdGFjayBmdW5jdGlvbnMKKy8vIFNsb3RWaXNpdG9yIGZ1bmN0
aW9ucwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVu
ZChXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQogewog
ICAgIGludGVybmFsQXBwZW5kKCpzbG90LT5zbG90KCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgTWFya1N0YWNrOjphcHBlbmRWYWx1ZXMoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFy
cmllcnMsIHNpemVfdCBjb3VudCkKK0FMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kVmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGJhcnJpZXJzLCBzaXplX3QgY291
bnQpCiB7CiAgICAgYXBwZW5kKGJhcnJpZXJzLT5zbG90KCksIGNvdW50KTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAxMjc3NTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIllhcnIuaCIKICNp
bmNsdWRlICJZYXJyQ2Fub25pY2FsaXplVUNTMi5oIgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>