<?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>70636</bug_id>
          
          <creation_ts>2011-10-21 13:11:23 -0700</creation_ts>
          <short_desc>Event.h has too many virtual isMumbleEvent() functions</short_desc>
          <delta_ts>2011-10-24 01:50:43 -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>New Bugs</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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yosin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488590</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:11:23 -0700</bug_when>
    <thetext>Event.h has too many virtual isMumbleEvent() functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488591</commentid>
    <comment_count>1</comment_count>
      <attachid>112006</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:12:32 -0700</bug_when>
    <thetext>Created attachment 112006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488594</commentid>
    <comment_count>2</comment_count>
      <attachid>112006</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-10-21 13:16:50 -0700</bug_when>
    <thetext>Comment on attachment 112006
Patch

Whoa, this is freakishly cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488596</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:17:25 -0700</bug_when>
    <thetext>It doesn&apos;t quite compile yet, but soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488618</commentid>
    <comment_count>4</comment_count>
      <attachid>112012</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:38:51 -0700</bug_when>
    <thetext>Created attachment 112012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488619</commentid>
    <comment_count>5</comment_count>
      <attachid>112006</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-10-21 13:41:44 -0700</bug_when>
    <thetext>Comment on attachment 112006
Patch

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

&gt; Source/WebCore/bindings/js/JSErrorHandler.cpp:56
&gt; +    if (event-&gt;interfaceName() != eventNames().interfaceForErrorEvent)

I think you want a .hasInterfaceName() instead.

&gt; Source/WebCore/bindings/objc/DOMEvents.mm:70
&gt; +    if (desiredInterface == eventNames().interfaceForMessageEvent)

soooooo verbose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488620</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:42:29 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 112006 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112006&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/objc/DOMEvents.mm:70
&gt; &gt; +    if (desiredInterface == eventNames().interfaceForMessageEvent)
&gt; 
&gt; soooooo verbose.

Yes.  The actually-maintained bindings have this code autogenerated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488622</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 13:45:25 -0700</bug_when>
    <thetext>&gt; I think you want a .hasInterfaceName() instead.

I&apos;m happy to add that, but I&apos;d like to do that in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488646</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-21 14:06:13 -0700</bug_when>
    <thetext>Committed r98146: &lt;http://trac.webkit.org/changeset/98146&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112006</attachid>
            <date>2011-10-21 13:12:32 -0700</date>
            <delta_ts>2011-10-21 13:41:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70636-20111021131231.patch</filename>
            <type>text/plain</type>
            <size>34547</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MTMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMTAtMjEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBFdmVudC5oIGhhcyB0b28gbWFueSB2
aXJ0dWFsIGlzTXVtYmxlRXZlbnQoKSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2hvdWxkIHVzZSB0aGUgbmV3IGludGVyZmFjZU5h
bWUoKSB3YXkgb2YgZG9pbmcgcnVuLXRpbWUgdHlwZSBpbmZlcmVuY2UuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9y
SGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudDo6Y2xpcGJvYXJkRGF0YSk6CisgICAg
ICAgICogYmluZGluZ3Mvb2JqYy9ET01FdmVudHMubW06CisgICAgICAgIChraXRDbGFzcyk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhXaW5kb3dFcnJvckhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhXaW5kb3dFcnJvckhhbmRsZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyOjpjYWxsTGlzdGVuZXJG
dW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudDo6Y2xpcGJvYXJkRGF0YUFjY2Vzc29yR2V0dGVy
KToKKyAgICAgICAgKiBkb20vQmVmb3JlTG9hZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpC
ZWZvcmVMb2FkRXZlbnQ6OmludGVyZmFjZU5hbWUpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudC5oOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRFdmVudC5jcHA6CisgICAg
ICAgICogZG9tL0NsaXBib2FyZEV2ZW50Lmg6CisgICAgICAgICogZG9tL0NvbXBvc2l0aW9uRXZl
bnQuY3BwOgorICAgICAgICAqIGRvbS9Db21wb3NpdGlvbkV2ZW50Lmg6CisgICAgICAgICogZG9t
L0Vycm9yRXZlbnQuY3BwOgorICAgICAgICAqIGRvbS9FcnJvckV2ZW50Lmg6CisgICAgICAgICog
ZG9tL0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpzdG9yZXNSZXN1bHRBc1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6c3RvcmVSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAqIGRvbS9FdmVudC5oOgor
ICAgICAgICAqIGRvbS9FdmVudC5pZGw6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRldGVybWluZURpc3BhdGNo
QmVoYXZpb3IpOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuY3BwOgorICAgICAgICAqIGRv
bS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTXV0YXRpb25FdmVudC5jcHA6CisgICAg
ICAgICogZG9tL011dGF0aW9uRXZlbnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBkb20v
T3ZlcmZsb3dFdmVudC5jcHA6CisgICAgICAgICogZG9tL092ZXJmbG93RXZlbnQuaDoKKyAgICAg
ICAgKiBkb20vUGFnZVRyYW5zaXRpb25FdmVudC5oOgorICAgICAgICAqIGRvbS9Qcm9ncmVzc0V2
ZW50Lmg6CisgICAgICAgICogZG9tL1RleHRFdmVudC5jcHA6CisgICAgICAgICogZG9tL1RleHRF
dmVudC5oOgorICAgICAgICAqIGRvbS9XaGVlbEV2ZW50LmNwcDoKKyAgICAgICAgKiBkb20vV2hl
ZWxFdmVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAg
ICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRU
eXBlOjpmb3J3YXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBl
OjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5l
clRleHRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBzdmcvU1ZHWm9v
bUV2ZW50LmNwcDoKKyAgICAgICAgKiBzdmcvU1ZHWm9vbUV2ZW50Lmg6CisKIDIwMTEtMTAtMjEg
IFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogQWR2YW5jZWQgc2VhcmNoIHJlc3VsdHMgc2hvdWxkIGJlIGNsZWFyZWQgb24gbmF2
aWdhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFu
ZGxlci5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNp
bmNsdWRlICJFcnJvckV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CiAKQEAgLTUyLDcgKzUzLDcgQEAgSlNFcnJvckhhbmRsZXI6On5KU0Vycm9ySGFuZGxlcigp
CiAKIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAoIWV2
ZW50LT5pc0Vycm9yRXZlbnQoKSkKKyAgICBpZiAoZXZlbnQtPmludGVyZmFjZU5hbWUoKSAhPSBl
dmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudCkKICAgICAgICAgcmV0dXJuIEpTRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZXZlbnQpOwog
CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU1ZhbHVlIEpTRXZl
bnQ6OmNsaXBib2FyZERhdGEoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBp
bXBsKCktPmlzQ2xpcGJvYXJkRXZlbnQoKSA/IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGlt
cGwoKS0+Y2xpcGJvYXJkRGF0YSgpKSA6IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGltcGwo
KS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDbGlwYm9hcmRF
dmVudCA/IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGltcGwoKS0+Y2xpcGJvYXJkRGF0YSgp
KSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZB
Q0UoaW50ZXJmYWNlTmFtZSkgXApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T01FdmVudHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T01FdmVudHMubW0JKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01FdmVudHMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbXBv
cnQgIkRPTVRleHRFdmVudC5oIgogI2ltcG9ydCAiRE9NV2hlZWxFdmVudC5oIgogI2ltcG9ydCAi
RXZlbnQuaCIKKyNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKIAogI2lmIEVOQUJMRShTVkdfRE9NX09C
SkNfQklORElOR1MpCiAjaW1wb3J0ICJET01TVkdab29tRXZlbnQuaCIKQEAgLTQ1LDMwICs0Niwz
MiBAQAogCiBDbGFzcyBraXRDbGFzcyhXZWJDb3JlOjpFdmVudCogaW1wbCkKIHsKKyAgICBBdG9t
aWNTdHJpbmcgZGVzaXJlZEludGVyZmFjZSA9IGltcGwtPmludGVyZmFjZU5hbWUoKTsKKwogICAg
IGlmIChpbXBsLT5pc1VJRXZlbnQoKSkgewogICAgICAgICBpZiAoaW1wbC0+aXNLZXlib2FyZEV2
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gW0RPTUtleWJvYXJkRXZlbnQgY2xhc3NdOwotICAg
ICAgICBpZiAoaW1wbC0+aXNUZXh0RXZlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBbRE9NVGV4
dEV2ZW50IGNsYXNzXTsKICAgICAgICAgaWYgKGltcGwtPmlzTW91c2VFdmVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIFtET01Nb3VzZUV2ZW50IGNsYXNzXTsKLSAgICAgICAgaWYgKGltcGwtPmlz
V2hlZWxFdmVudCgpKQorICAgICAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBldmVudE5hbWVz
KCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50KQorICAgICAgICAgICAgcmV0dXJuIFtET01UZXh0RXZl
bnQgY2xhc3NdOworICAgICAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yV2hlZWxFdmVudCkKICAgICAgICAgICAgIHJldHVybiBbRE9NV2hlZWxFdmVu
dCBjbGFzc107ICAgICAgICAKICNpZiBFTkFCTEUoU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKQotICAg
ICAgICBpZiAoaW1wbC0+aXNTVkdab29tRXZlbnQoKSkKKyAgICAgICAgaWYgKGRlc2lyZWRJbnRl
cmZhY2UgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclNWR1pvb21FdmVudCkKICAgICAgICAg
ICAgIHJldHVybiBbRE9NU1ZHWm9vbUV2ZW50IGNsYXNzXTsKICNlbmRpZgogICAgICAgICByZXR1
cm4gW0RPTVVJRXZlbnQgY2xhc3NdOwogICAgIH0KLSAgICBpZiAoaW1wbC0+aXNNdXRhdGlvbkV2
ZW50KCkpCisgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gZXZlbnROYW1lcygpLmludGVyZmFj
ZUZvck11dGF0aW9uRXZlbnQpCiAgICAgICAgIHJldHVybiBbRE9NTXV0YXRpb25FdmVudCBjbGFz
c107Ci0gICAgaWYgKGltcGwtPmlzT3ZlcmZsb3dFdmVudCgpKQorICAgIGlmIChkZXNpcmVkSW50
ZXJmYWNlID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JPdmVyZmxvd0V2ZW50KQogICAgICAg
ICByZXR1cm4gW0RPTU92ZXJmbG93RXZlbnQgY2xhc3NdOwotICAgIGlmIChpbXBsLT5pc01lc3Nh
Z2VFdmVudCgpKQorICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09IGV2ZW50TmFtZXMoKS5pbnRl
cmZhY2VGb3JNZXNzYWdlRXZlbnQpCiAgICAgICAgIHJldHVybiBbRE9NTWVzc2FnZUV2ZW50IGNs
YXNzXTsKLSAgICBpZiAoaW1wbC0+aXNQcm9ncmVzc0V2ZW50KCkpCisgICAgaWYgKGRlc2lyZWRJ
bnRlcmZhY2UgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclByb2dyZXNzRXZlbnQgfHwgZGVz
aXJlZEludGVyZmFjZSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50KQogICAgICAgICByZXR1cm4gW0RPTVByb2dyZXNzRXZlbnQgY2xhc3NdOwot
ICAgIGlmIChpbXBsLT5pc0JlZm9yZUxvYWRFdmVudCgpKQorICAgIGlmIChkZXNpcmVkSW50ZXJm
YWNlID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVMb2FkRXZlbnQpCiAgICAgICAg
IHJldHVybiBbRE9NQmVmb3JlTG9hZEV2ZW50IGNsYXNzXTsKICAgICByZXR1cm4gW0RPTUV2ZW50
IGNsYXNzXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V2luZG93RXJy
b3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFdpbmRvd0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhXaW5kb3dFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJWOFdpbmRvd0Vycm9ySGFuZGxlci5oIgogCisj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkVycm9yRXZlbnQuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKIApAQCAtNDQsOSArNDUsOSBAQCBWOFdpbmRvd0Vycm9ySGFuZGxlcjo6
VjhXaW5kb3dFcnJvckhhbmRsCiAKIHY4OjpMb2NhbDx2ODo6VmFsdWU+IFY4V2luZG93RXJyb3JI
YW5kbGVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqIGV2ZW50KQogewotICAg
IGlmICghZXZlbnQtPmlzRXJyb3JFdmVudCgpKQorICAgIGlmIChldmVudC0+aW50ZXJmYWNlTmFt
ZSgpICE9IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JFcnJvckV2ZW50KQogICAgICAgICByZXR1
cm4gVjhFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbihjb250ZXh0LCBqc0V2ZW50
LCBldmVudCk7Ci0gICAgCisKICAgICBFcnJvckV2ZW50KiBlcnJvckV2ZW50ID0gc3RhdGljX2Nh
c3Q8RXJyb3JFdmVudCo+KGV2ZW50KTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVu
ZXIgPSBnZXRMaXN0ZW5lck9iamVjdChjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiByZXR1cm5WYWx1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4V29ya2Vy
Q29udGV4dEVycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyLmNwcAkocmV2aXNpb24gOTgxMDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFcnJvckhhbmRs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJWOFdv
cmtlckNvbnRleHRFcnJvckhhbmRsZXIuaCIKIAorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNp
bmNsdWRlICJFcnJvckV2ZW50LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAKQEAgLTQ2LDcg
KzQ3LDcgQEAgVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyOjpWOFdvcmtlckNvbgogCiB2ODo6
TG9jYWw8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXI6OmNhbGxMaXN0ZW5l
ckZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBqc0V2ZW50LCBFdmVudCogZXZlbnQpCiB7Ci0gICAgQVNTRVJUKGV2ZW50LT5pc0Vy
cm9yRXZlbnQoKSk7CisgICAgQVNTRVJUKGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkgPT0gZXZlbnRO
YW1lcygpLmludGVyZmFjZUZvckVycm9yRXZlbnQpOwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBsaXN0ZW5lciA9IGdldExpc3RlbmVyT2JqZWN0KGNvbnRleHQpOwogICAgIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHJldHVyblZhbHVlOwogICAgIGlmICghbGlzdGVuZXIuSXNFbXB0eSgpICYmIGxp
c3RlbmVyLT5Jc0Z1bmN0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEV2ZW50
OjpjbGlwYm9hcmQKIHsKICAgICBFdmVudCogZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKIAotICAgIGlmIChldmVudC0+aXNDbGlwYm9hcmRFdmVudCgpKQorICAgIGlm
IChldmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDbGlw
Ym9hcmRFdmVudCkKICAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkRXZl
bnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5oCShyZXZpc2lvbiA5ODEwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX3VybDsgfQogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVy
ZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3Jl
TG9hZEV2ZW50OyB9Ci0gICAgdmlydHVhbCBib29sIGlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIEJlZm9yZUxvYWRFdmVudCgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaAkocmV2aXNp
b24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVkRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsg
fQogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHMpIHsgbV90ZXh0ID0gczsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCShyZXZpc2lvbiA5ODEwNykKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDkgKzQ2LDQgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBDbGlwYm9hcmRFdmVudDo6aW50ZQog
ICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQ7CiB9CiAKLWJvb2wgQ2xp
cGJvYXJkRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q2xpcGJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkRXZlbnQuaAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIENsaXBib2FyZCogY2xpcGJvYXJkKCkgY29uc3QgeyByZXR1cm4gbV9j
bGlwYm9hcmQuZ2V0KCk7IH0KIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
aW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwYm9hcmRF
dmVudCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2xpcGJvYXJkRXZlbnQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDk4
MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw5ICs2MCw0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQ29tcG9zaXRpb25F
dmVudDo6aW4KICAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckNvbXBvc2l0aW9u
RXZlbnQ7CiB9CiAKLWJvb2wgQ29tcG9zaXRpb25FdmVudDo6aXNDb21wb3NpdGlvbkV2ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5oCShyZXZpc2lvbiA5ODEwNykK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBp
c0NvbXBvc2l0aW9uRXZlbnQoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENvbXBv
c2l0aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHJldmlzaW9u
IDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCwxMSArNzgsNiBAQCB2b2lkIEVycm9yRXZlbnQ6OmluaXRFcnJvckV2ZW50KGNv
bnN0IEF0CiAgICAgbV9saW5lTnVtYmVyID0gbGluZU51bWJlcjsKIH0KIAotYm9vbCBFcnJvckV2
ZW50Ojppc0Vycm9yRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBjb25z
dCBBdG9taWNTdHJpbmcmIEVycm9yRXZlbnQ6OmludGVyZmFjZU5hbWUoKSBjb25zdAogewogICAg
IHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuaAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RXJyb3JFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBsaW5lbm8oKSBjb25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KIAogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzRXJyb3JFdmVudCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEVycm9y
RXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsOTAgKzExMiwy
OCBAQCBib29sIEV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBFdmVudDo6aXNNdXRhdGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KIGJvb2wgRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEV2ZW50Ojppc1RleHRFdmVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0NvbXBvc2l0aW9uRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBFdmVudDo6aXNEcmFnRXZlbnQo
KSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBFdmVudDo6aXNDbGlwYm9h
cmRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojpp
c1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVu
dDo6aXNNZXNzYWdlRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBFdmVudDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc092ZXJmbG93RXZlbnQoKSBjb25zdAotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNQYWdlVHJhbnNpdGlvbkV2ZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzUHJvZ3Jlc3NF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc0Jl
Zm9yZUxvYWRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5B
QkxFKFNWRykKLWJvb2wgRXZlbnQ6OmlzU1ZHWm9vbUV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBFdmVudDo6aXNFcnJvckV2ZW50KCkgY29uc3QK
K2Jvb2wgRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKK3Zv
aWQgRXZlbnQ6OnN0b3JlUmVzdWx0KGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEV2ZW50OjpzdG9yZVJlc3VsdChjb25zdCBTdHJpbmcmKQorQ2xpcGJvYXJk
KiBFdmVudDo6Y2xpcGJvYXJkRGF0YSgpIGNvbnN0CiB7CisgICAgcmV0dXJuIGludGVyZmFjZU5h
bWUoKSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQ2xpcGJvYXJkRXZlbnQgPyBjbGlwYm9h
cmQoKSA6IDA7CiB9CiAKIHZvaWQgRXZlbnQ6OnNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFy
Z2V0PiB0YXJnZXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDM0ICsxMTAsMTYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJldHVyblZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gIWRlZmF1bHRQcmV2ZW50ZWQoKTsgfQogICAgICAgICB2b2lkIHNldFJldHVyblZh
bHVlKGJvb2wgcmV0dXJuVmFsdWUpIHsgc2V0RGVmYXVsdFByZXZlbnRlZCghcmV0dXJuVmFsdWUp
OyB9CiAKLSAgICAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmREYXRhKCkgY29uc3QgeyByZXR1cm4g
aXNDbGlwYm9hcmRFdmVudCgpID8gY2xpcGJvYXJkKCkgOiAwOyB9CisgICAgICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkRGF0YSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgLy8gVGhlc2UgYXJlIG5l
ZWRlZCBmb3IgdGhlIENQUCBiaW5kaW5ncy4KICAgICAgICAgdmlydHVhbCBib29sIGlzVUlFdmVu
dCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUV2ZW50KCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0RyYWdFdmVudCgpIGNvbnN0OyAvLyBhIHN1YnNldCBvZiBtb3VzZSBldmVudHMKIAotICAg
ICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlISBDYWxsZXJzIHNob3VsZCB1c2UgaW50ZXJmYWNl
TmFtZSgpIGluc3RlYWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQoKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dEV2ZW50KCkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc0NvbXBvc2l0aW9uRXZlbnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIGlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlz
TWVzc2FnZUV2ZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1doZWVsRXZlbnQo
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzT3ZlcmZsb3dFdmVudCgpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlVHJhbnNpdGlvbkV2ZW50KCkgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyZXNzRXZlbnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBib29sIGlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3Q7Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAg
ICAgdmlydHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAgICAg
dmlydHVhbCBib29sIGlzRXJyb3JFdmVudCgpIGNvbnN0OwotCiAgICAgICAgIGJvb2wgcHJvcGFn
YXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQgfHwgbV9p
bW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ7IH0KICAgICAgICAgYm9vbCBpbW1lZGlhdGVQcm9w
YWdhdGlvblN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX2ltbWVkaWF0ZVByb3BhZ2F0aW9uU3Rv
cHBlZDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwJKHJldmlzaW9uIDk4MTA3KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNiBA
QCBtb2R1bGUgZXZlbnRzIHsKIAogI2lmIGRlZmluZWQoTEFOR1VBR0VfQ1BQKSAmJiBMQU5HVUFH
RV9DUFAKICAgICAgICAgLy8gRXh0cmEgV2ViQ29yZSBtZXRob2RzIGV4cG9zZWQgdG8gYWxsb3cg
Y29tcGlsZS10aW1lIGNhc3RpbmcgaW4gQysrCi0gICAgICAgIGJvb2xlYW4gaXNNdXRhdGlvbkV2
ZW50KCk7CiAgICAgICAgIGJvb2xlYW4gaXNNb3VzZUV2ZW50KCk7CiAgICAgICAgIGJvb2xlYW4g
aXNVSUV2ZW50KCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNo
ZXIuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3Bh
dGNoZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgRXZlbnREaXNwYXRj
aEJlaGF2aW9yIEV2ZW50RGlzcGF0Y2hlcjo6ZAogCiAgICAgLy8gUGVyIFhCTCAyLjAgc3BlYywg
bXV0YXRpb24gZXZlbnRzIHNob3VsZCBuZXZlciBjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJ5Ogog
ICAgIC8vIGh0dHA6Ly9kZXYudzMub3JnLzIwMDYveGJsMi8jZXZlbnQtZmxvdy1hbmQtdGFyZ2V0
aW5nLWFjcm9zcy1zaGFkb3ctcwotICAgIGlmIChldmVudC0+aXNNdXRhdGlvbkV2ZW50KCkpCisg
ICAgaWYgKGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ck11dGF0aW9uRXZlbnQpCiAgICAgICAgIHJldHVybiBTdGF5SW5zaWRlU2hhZG93RE9NOwogCiAg
ICAgLy8gV2ViS2l0IG5ldmVyIGFsbG93ZWQgc2VsZWN0c3RhcnQgZXZlbnQgdG8gY3Jvc3MgdGhl
IHRoZSBzaGFkb3cgRE9NIGJvdW5kYXJ5LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3Nh
Z2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw5ICsxNjksNCBAQCBjb25zdCBBdG9taWNTdHJp
bmcmIE1lc3NhZ2VFdmVudDo6aW50ZXJmCiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JNZXNzYWdlRXZlbnQ7CiB9CiAKLWJvb2wgTWVzc2FnZUV2ZW50Ojppc01lc3NhZ2VFdmVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJldmlzaW9uIDk4MTA3KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNlLCBNZXNzYWdlUG9ydCopOwog
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlRXZlbnQoKSBjb25zdDsKIAogICAgIGVudW0gRGF0
YVR5cGUgewogICAgICAgICBEYXRhVHlwZVNjcmlwdFZhbHVlLApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL011dGF0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9NdXRhdGlvbkV2ZW50LmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTXV0YXRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDkgKzY5LDQgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBNdXRhdGlvbkV2ZW50OjppbnRlcgogICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yTXV0YXRpb25FdmVudDsKIH0KIAotYm9vbCBNdXRhdGlvbkV2ZW50
Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHJl
dmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJDaGFuZ2U7
IH0KIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgogICAgICAgICBNdXRhdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg3Miw3ICsyODcyLDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldgogICAgICAgICAgICAgICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5oYW5kbGVDb250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICNlbmRpZgogICAgIH0gZWxz
ZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCkgewotICAgICAg
ICBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50KCkpCisgICAgICAgIGlmIChldmVudC0+aW50ZXJmYWNl
TmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0RXZlbnQpCiAgICAgICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgICAg
ICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoc3Rh
dGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykK
QEAgLTI4OTIsNyArMjg5Miw3IEBAIHZvaWQgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0gICAgfSBlbHNlIGlmIChl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCAmJiBldmVudC0+aXNXaGVl
bEV2ZW50KCkpIHsKKyAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91
c2V3aGVlbEV2ZW50ICYmIGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkgPT0gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvcldoZWVsRXZlbnQpIHsKICAgICAgICAgV2hlZWxFdmVudCogd2hlZWxFdmVudCA9
IHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCk7CiAgICAgICAgIAogICAgICAgICAvLyBJ
ZiB3ZSBkb24ndCBoYXZlIGEgcmVuZGVyZXIsIHNlbmQgdGhlIHdoZWVsIGV2ZW50IHRvIHRoZSBm
aXJzdCBub2RlIHdlIGZpbmQgd2l0aCBhIHJlbmRlcmVyLgpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL092ZXJmbG93RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9P
dmVyZmxvd0V2ZW50LmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
T3ZlcmZsb3dFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDExICs3Myw2IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgT3ZlcmZsb3dFdmVudDo6aW50ZXIKICAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvck92ZXJmbG93RXZlbnQ7CiB9CiAKLWJvb2wgT3ZlcmZsb3dFdmVudDo6
aXNPdmVyZmxvd0V2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBP
dmVyZmxvd0V2ZW50Ojppbml0T3ZlcmZsb3dFdmVudCh1bnNpZ25lZCBzaG9ydCBvcmllbnQsIGJv
b2wgaG9yaXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpCiB7CiAgICAgaWYg
KGRpc3BhdGNoZWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQuaAkocmV2aXNp
b24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vT3ZlcmZsb3dFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICBib29sIHZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsT3ZlcmZsb3c7IH0KIAogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzT3ZlcmZsb3dFdmVudCgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIE92ZXJmbG93RXZl
bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaAkocmV2
aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcGVyc2lzdGVkKTsKIAogICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlz
UGFnZVRyYW5zaXRpb25FdmVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wg
cGVyc2lzdGVkKCkgY29uc3QgeyByZXR1cm4gbV9wZXJzaXN0ZWQ7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1Byb2dyZXNzRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vUHJvZ3Jlc3NFdmVudC5oCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qcm9ncmVzc0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDYgQEAgcHJv
dGVjdGVkOgogICAgIFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwgY29uc3QgUHJv
Z3Jlc3NFdmVudEluaXQmKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVz
c0V2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAogICAgIGJvb2wgbV9sZW5ndGhD
b21wdXRhYmxlOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX2xvYWRlZDsKICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbV90b3RhbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCShyZXZp
c2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsOSArMTA0LDQgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0RXZlbnQ6
OmludGVyZmFjZQogICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yVGV4dEV2ZW50
OwogfQogCi1ib29sIFRleHRFdmVudDo6aXNUZXh0RXZlbnQoKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRF
dmVudC5oCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIFN0cmluZyBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKICAgICAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBib29sIGlzVGV4dEV2ZW50KCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBpc0xp
bmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRUeXBlID09IFRleHRFdmVudElucHV0TGlu
ZUJyZWFrOyB9CiAgICAgICAgIGJvb2wgaXNDb21wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5wdXRUeXBlID09IFRleHRFdmVudElucHV0Q29tcG9zaXRpb247IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vV2hlZWxFdmVudC5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1doZWVsRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMSArODksNiBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIFdoZWVsRXZlbnQ6OmludGVyZmFjCiAgICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50OwogfQogCi1ib29sIFdoZWVsRXZlbnQ6OmlzV2hlZWxF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSBzdGF0aWMgV2hl
ZWxFdmVudDo6R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBldmVudCkKIHsKICAgICByZXR1cm4gZXZlbnQuZ3JhbnVsYXJpdHkoKSA9PSBTY3JvbGxCeVBh
Z2VXaGVlbEV2ZW50ID8gV2hlZWxFdmVudDo6UGFnZSA6IFdoZWVsRXZlbnQ6OlBpeGVsOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBzY3Jl
ZW5Mb2NhdGlvbiwgY29uc3QgSW50UG9pbnQmIHBhZ2VMb2NhdGlvbiwKICAgICAgICAgICAgICAg
ICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFL
ZXksIGJvb2wgZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlKTsKIAotICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7Ci0KICAgICAgICAgSW50UG9pbnQgbV93aGVlbERl
bHRhOwogICAgICAgICBJbnRQb2ludCBtX3Jhd0RlbHRhOwogICAgICAgICBHcmFudWxhcml0eSBt
X2dyYW51bGFyaXR5OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjYsMTAgKzEyNjYsMTAgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGV2dC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKQorICAgIGlmIChldnQt
PmludGVyZmFjZU5hbWUoKSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQpCiAgICAgICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudChzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2dCkpOwogCi0g
ICAgaWYgKGV2dC0+aXNXaGVlbEV2ZW50KCkpIHsKKyAgICBpZiAoZXZ0LT5pbnRlcmZhY2VOYW1l
KCkgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQpIHsKICAgICAgICAgbV9p
bnB1dFR5cGUtPmhhbmRsZVdoZWVsRXZlbnQoc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGV2dCkp
OwogICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSw5ICsyMTEsOSBAQCB2b2lkIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwCiAKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkgJiYg
KGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+
aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50
KSkKKyAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50
LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkgPT0gZXZlbnROYW1lcygp
LmludGVyZmFjZUZvcldoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Ymx1ckV2ZW50KSkKICAgICAgICAgZm9yd2FyZEV2ZW50KGV2ZW50KTsKLSAgICBlbHNlIGlmIChy
ZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkpCisgICAgZWxz
ZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCkKICAgICAgICAgaGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQq
PihldmVudCkpOwogCiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lk
IFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlV2hlZWxFdmVuCiAKIHZvaWQgVGV4dEZpZWxkSW5w
dXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChlbGVtZW50KCkt
PnJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZl
bnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZl
bnQpKSB7CisgICAgaWYgKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VF
dmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkg
PT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmZvY3VzRXZlbnQpKSB7CiAgICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVu
ZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCkt
PnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
Ymx1ckV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclRleHRSZW5kZXJl
ciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCkpIHsKQEAgLTE2MCw3ICsxNjAsNyBA
QCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2CiAKIGJvb2wgVGV4dEZp
ZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIHsKLSAg
ICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50ICYm
IGV2ZW50LT5pc1RleHRFdmVudCgpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KS0+
ZGF0YSgpID09ICJcbiIpIHx8IElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRseShldmVu
dCk7CisgICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRF
dmVudCAmJiBldmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JUZXh0RXZlbnQgJiYgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpLT5kYXRhKCkgPT0g
IlxuIikgfHwgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50KTsKIH0KIAog
UmVuZGVyT2JqZWN0KiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCShyZXZp
c2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBUZXh0
Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmRlZmF1bAogICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0
dXJlLCB3ZSBzaG91bGQgYWRkIGEgd2F5IHRvIGhhdmUgZGVmYXVsdCBldmVudCBsaXN0ZW5lcnMu
CiAgICAgLy8gVGhlbiB3ZSB3b3VsZCBhZGQgb25lIHRvIHRoZSB0ZXh0IGZpZWxkJ3MgaW5uZXIg
ZGl2LCBhbmQgd2Ugd291bGRuJ3QgbmVlZCB0aGlzIHN1YmNsYXNzLgogICAgIC8vIE9yIHBvc3Np
Ymx5IHdlIGNvdWxkIGp1c3QgdXNlIGEgbm9ybWFsIGV2ZW50IGxpc3RlbmVyLgotICAgIGlmIChl
dmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLndlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVudCkgeworICAgIGlmIChl
dmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS53ZWJraXRF
ZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQpIHsKICAgICAgICAgTm9kZSogc2hhZG93QW5jZXN0
b3IgPSBzaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICAgICAgLy8gQSBUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQgY2FuIGJlIGl0cyBvd24gc2hhZG93IGFuY2VzdG9yIGlmIGl0cyBiZWVuIGRl
dGFjaGVkLCBidXQga2VwdCBhbGl2ZSBieSBhbiBFZGl0Q29tbWFuZC4KICAgICAgICAgLy8gSW4g
dGhpcyBjYXNlLCBhbiB1bmRvL3JlZG8gY2FuIGNhdXNlIGV2ZW50cyB0byBiZSBzZW50IHRvIHRo
ZSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQuICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdab29tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkda
b29tRXZlbnQuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkda
b29tRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMSArNjksNiBAQCBGbG9hdFBvaW50
IFNWR1pvb21FdmVudDo6bmV3VHJhbnNsYXRlKCkgCiAgICAgcmV0dXJuIG1fbmV3VHJhbnNsYXRl
OwogfQogCi1ib29sIFNWR1pvb21FdmVudDo6aXNTVkdab29tRXZlbnQoKSBjb25zdAotewotICAg
IHJldHVybiB0cnVlOwotfQotCiBjb25zdCBBdG9taWNTdHJpbmcmIFNWR1pvb21FdmVudDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JTVkdab29tRXZlbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZpc2lv
biA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29tRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsOCArNTAsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNWR1pvb21FdmVu
dCgpOwogCi0gICAgdmlydHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7Ci0KICAgICBm
bG9hdCBtX25ld1NjYWxlOwogICAgIGZsb2F0IG1fcHJldmlvdXNTY2FsZTsKIApJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MTMzKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0x
MC0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIEV2ZW50Lmgg
aGFzIHRvbyBtYW55IHZpcnR1YWwgaXNNdW1ibGVFdmVudCgpIGZ1bmN0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA2MzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlc2UgY2FsbHNp
dGVzIHRvIHRoZSBuZXcgQVBJLgorCisgICAgICAgICogc3JjL1dlYkRPTUV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRE9NRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRPTUV2ZW50Ojppc011dGF0aW9uRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJET01FdmVudDo6aXNUZXh0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6
aXNDb21wb3NpdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRE9NRXZlbnQ6OmlzQ2xp
cGJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNNZXNzYWdlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNXaGVlbEV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRE9NRXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNPdmVyZmxvd0V2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRE9NRXZlbnQ6OmlzUGFnZVRyYW5zaXRpb25FdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRPTUV2ZW50Ojppc1Byb2dyZXNzRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
T01FdmVudDo6aXNCZWZvcmVMb2FkRXZlbnQpOgorCiAyMDExLTEwLTIwICBaaGVueWFvIE1vICA8
em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IG1lY2hhbmlzbSB0byBlbmFibGUg
cHJpdmlsZWdlZCB3ZWJnbCBleHRlbnNpb25zCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJET01FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRE9NRXZlbnQuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDI4ICsx
MTUsMjggQEAgYm9vbCBXZWJET01FdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKICAgICByZXR1
cm4gbV9wcml2YXRlLT5pc01vdXNlRXZlbnQoKTsKIH0KIAotYm9vbCBXZWJET01FdmVudDo6aXNN
dXRhdGlvbkV2ZW50KCkgY29uc3QKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
aXNNdXRhdGlvbkV2ZW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNLZXlib2FyZEV2ZW50
KCk7CiB9CiAKLWJvb2wgV2ViRE9NRXZlbnQ6OmlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0Citib29s
IFdlYkRPTUV2ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX3By
aXZhdGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzS2V5Ym9hcmRFdmVudCgpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmludGVyZmFjZU5hbWUoKSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yTXV0YXRpb25FdmVudDsKIH0KIAogYm9vbCBXZWJET01FdmVudDo6aXNUZXh0RXZlbnQoKSBj
b25zdAogewogICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmlz
VGV4dEV2ZW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2
ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0RXZlbnQ7CiB9CiAKIGJvb2wgV2ViRE9NRXZlbnQ6
OmlzQ29tcG9zaXRpb25FdmVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNDb21wb3NpdGlvbkV2ZW50KCk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JDb21w
b3NpdGlvbkV2ZW50OwogfQogCiBib29sIFdlYkRPTUV2ZW50Ojppc0RyYWdFdmVudCgpIGNvbnN0
CkBAIC0xNDgsMzcgKzE0OCwzNyBAQCBib29sIFdlYkRPTUV2ZW50Ojppc0RyYWdFdmVudCgpIGNv
bnN0CiBib29sIFdlYkRPTUV2ZW50Ojppc0NsaXBib2FyZEV2ZW50KCkgY29uc3QKIHsKICAgICBB
U1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NsaXBib2FyZEV2ZW50
KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JDbGlwYm9hcmRFdmVudDsKIH0KIAogYm9vbCBXZWJET01FdmVudDo6aXNN
ZXNzYWdlRXZlbnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzTWVzc2FnZUV2ZW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50
ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JNZXNzYWdlRXZlbnQ7CiB9
CiAKIGJvb2wgV2ViRE9NRXZlbnQ6OmlzV2hlZWxFdmVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNXaGVlbEV2ZW50KCk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZh
Y2VGb3JXaGVlbEV2ZW50OwogfQogCiBib29sIFdlYkRPTUV2ZW50Ojppc0JlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCk7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudDsKIH0KIAogYm9vbCBXZWJET01FdmVudDo6aXNPdmVyZmxvd0V2ZW50
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT5pc092ZXJmbG93RXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pbnRlcmZhY2VOYW1l
KCkgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvck92ZXJmbG93RXZlbnQ7CiB9CiAKIGJvb2wg
V2ViRE9NRXZlbnQ6OmlzUGFnZVRyYW5zaXRpb25FdmVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNQYWdlVHJhbnNpdGlvbkV2ZW50
KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JQYWdlVHJhbnNpdGlvbkV2ZW50OwogfQogCiBib29sIFdlYkRPTUV2ZW50
Ojppc1BvcFN0YXRlRXZlbnQoKSBjb25zdApAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgV2ViRE9N
RXZlbnQ6OmlzUG9wU3RhdGVFdmVudCgpIGNvbnMKIGJvb2wgV2ViRE9NRXZlbnQ6OmlzUHJvZ3Jl
c3NFdmVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXNQcm9ncmVzc0V2ZW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJm
YWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQcm9ncmVzc0V2ZW50OwogfQog
CiBib29sIFdlYkRPTUV2ZW50Ojppc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgpIGNvbnN0
CkBAIC0yMTQsNyArMjE0LDcgQEAgYm9vbCBXZWJET01FdmVudDo6aXNXZWJLaXRUcmFuc2l0aW9u
RXZlbgogYm9vbCBXZWJET01FdmVudDo6aXNCZWZvcmVMb2FkRXZlbnQoKSBjb25zdAogewogICAg
IEFTU0VSVChtX3ByaXZhdGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQmVmb3JlTG9hZEV2
ZW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFt
ZXMoKS5pbnRlcmZhY2VGb3JCZWZvcmVMb2FkRXZlbnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112012</attachid>
            <date>2011-10-21 13:38:51 -0700</date>
            <delta_ts>2011-10-21 13:57:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70636-20111021133850.patch</filename>
            <type>text/plain</type>
            <size>30873</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4MTMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMTAtMjEgIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBFdmVudC5oIGhhcyB0b28gbWFueSB2
aXJ0dWFsIGlzTXVtYmxlRXZlbnQoKSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2Ugc2hvdWxkIHVzZSB0aGUgbmV3IGludGVyZmFjZU5h
bWUoKSB3YXkgb2YgZG9pbmcgcnVuLXRpbWUgdHlwZSBpbmZlcmVuY2UuCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0Vycm9y
SGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudDo6Y2xpcGJvYXJkRGF0YSk6CisgICAg
ICAgICogYmluZGluZ3Mvb2JqYy9ET01FdmVudHMubW06CisgICAgICAgIChraXRDbGFzcyk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhXaW5kb3dFcnJvckhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhXaW5kb3dFcnJvckhhbmRsZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyOjpjYWxsTGlzdGVuZXJG
dW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudDo6Y2xpcGJvYXJkRGF0YUFjY2Vzc29yR2V0dGVy
KToKKyAgICAgICAgKiBkb20vQmVmb3JlTG9hZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpC
ZWZvcmVMb2FkRXZlbnQ6OmludGVyZmFjZU5hbWUpOgorICAgICAgICAqIGRvbS9CZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudC5oOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmRFdmVudC5jcHA6CisgICAg
ICAgICogZG9tL0NsaXBib2FyZEV2ZW50Lmg6CisgICAgICAgICogZG9tL0NvbXBvc2l0aW9uRXZl
bnQuY3BwOgorICAgICAgICAqIGRvbS9Db21wb3NpdGlvbkV2ZW50Lmg6CisgICAgICAgICogZG9t
L0Vycm9yRXZlbnQuY3BwOgorICAgICAgICAqIGRvbS9FcnJvckV2ZW50Lmg6CisgICAgICAgICog
ZG9tL0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpzdG9yZXNSZXN1bHRBc1N0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6c3RvcmVSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnQ6OmNsaXBib2FyZERhdGEpOgorICAgICAgICAqIGRvbS9FdmVudC5oOgor
ICAgICAgICAqIGRvbS9FdmVudC5pZGw6CisgICAgICAgICAgICAtIFJlbW92ZSB0aGlzIGludGVy
ZmFjZSBmcm9tIHRoZSBDUFAgYmluZGluZ3MgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uCisgICAgICAg
ICAgICAgIG5vIGxvbmdlciBleGlzdHMuICBJdCdzIHVuY2xlYXIgdG8gbWUgaG93IHN0cm9uZyBv
dXIgQVBJCisgICAgICAgICAgICAgIGNvbW1pdG1lbnRzIGFyZSBpbiB0aGUgQ1BQIGJpbmRpbmdz
LgorICAgICAgICAqIGRvbS9FdmVudERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKToKKyAgICAgICAgKiBk
b20vTWVzc2FnZUV2ZW50LmNwcDoKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50Lmg6CisgICAg
ICAgICogZG9tL011dGF0aW9uRXZlbnQuY3BwOgorICAgICAgICAqIGRvbS9NdXRhdGlvbkV2ZW50
Lmg6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogZG9tL092ZXJmbG93RXZlbnQuY3BwOgorICAg
ICAgICAqIGRvbS9PdmVyZmxvd0V2ZW50Lmg6CisgICAgICAgICogZG9tL1BhZ2VUcmFuc2l0aW9u
RXZlbnQuaDoKKyAgICAgICAgKiBkb20vUHJvZ3Jlc3NFdmVudC5oOgorICAgICAgICAqIGRvbS9U
ZXh0RXZlbnQuY3BwOgorICAgICAgICAqIGRvbS9UZXh0RXZlbnQuaDoKKyAgICAgICAgKiBkb20v
V2hlZWxFdmVudC5jcHA6CisgICAgICAgICogZG9tL1doZWVsRXZlbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGljaXRs
eSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcik6CisgICAgICAgICogc3ZnL1NWR1pvb21FdmVudC5jcHA6CisgICAgICAgICog
c3ZnL1NWR1pvb21FdmVudC5oOgorCiAyMDExLTEwLTIxICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2
aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkdmFuY2VkIHNlYXJj
aCByZXN1bHRzIHNob3VsZCBiZSBjbGVhcmVkIG9uIG5hdmlnYXRpb24uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiA5ODEw
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiRXJyb3JFdmVudC5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkpT
RXZlbnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC01Miw3ICs1Myw3IEBA
IEpTRXJyb3JIYW5kbGVyOjp+SlNFcnJvckhhbmRsZXIoKQogCiB2b2lkIEpTRXJyb3JIYW5kbGVy
OjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKCFldmVudC0+aXNFcnJvckV2ZW50KCkpCisg
ICAgaWYgKGV2ZW50LT5pbnRlcmZhY2VOYW1lKCkgIT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZv
ckVycm9yRXZlbnQpCiAgICAgICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50KTsKIAogICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NRXZl
bnRzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NRXZl
bnRzLm1tCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NRXZlbnRzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW1wb3J0ICJE
T01UZXh0RXZlbnQuaCIKICNpbXBvcnQgIkRPTVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIkV2ZW50
LmgiCisjaW1wb3J0ICJFdmVudE5hbWVzLmgiCiAKICNpZiBFTkFCTEUoU1ZHX0RPTV9PQkpDX0JJ
TkRJTkdTKQogI2ltcG9ydCAiRE9NU1ZHWm9vbUV2ZW50LmgiCkBAIC00NSwzMCArNDYsMzIgQEAK
IAogQ2xhc3Mga2l0Q2xhc3MoV2ViQ29yZTo6RXZlbnQqIGltcGwpCiB7CisgICAgQXRvbWljU3Ry
aW5nIGRlc2lyZWRJbnRlcmZhY2UgPSBpbXBsLT5pbnRlcmZhY2VOYW1lKCk7CisKICAgICBpZiAo
aW1wbC0+aXNVSUV2ZW50KCkpIHsKICAgICAgICAgaWYgKGltcGwtPmlzS2V5Ym9hcmRFdmVudCgp
KQogICAgICAgICAgICAgcmV0dXJuIFtET01LZXlib2FyZEV2ZW50IGNsYXNzXTsKLSAgICAgICAg
aWYgKGltcGwtPmlzVGV4dEV2ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gW0RPTVRleHRFdmVu
dCBjbGFzc107CiAgICAgICAgIGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkKICAgICAgICAgICAg
IHJldHVybiBbRE9NTW91c2VFdmVudCBjbGFzc107Ci0gICAgICAgIGlmIChpbXBsLT5pc1doZWVs
RXZlbnQoKSkKKyAgICAgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclRleHRFdmVudCkKKyAgICAgICAgICAgIHJldHVybiBbRE9NVGV4dEV2ZW50IGNs
YXNzXTsKKyAgICAgICAgaWYgKGRlc2lyZWRJbnRlcmZhY2UgPT0gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvcldoZWVsRXZlbnQpCiAgICAgICAgICAgICByZXR1cm4gW0RPTVdoZWVsRXZlbnQgY2xh
c3NdOyAgICAgICAgCiAjaWYgRU5BQkxFKFNWR19ET01fT0JKQ19CSU5ESU5HUykKLSAgICAgICAg
aWYgKGltcGwtPmlzU1ZHWm9vbUV2ZW50KCkpCisgICAgICAgIGlmIChkZXNpcmVkSW50ZXJmYWNl
ID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JTVkdab29tRXZlbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gW0RPTVNWR1pvb21FdmVudCBjbGFzc107CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIFtE
T01VSUV2ZW50IGNsYXNzXTsKICAgICB9Ci0gICAgaWYgKGltcGwtPmlzTXV0YXRpb25FdmVudCgp
KQorICAgIGlmIChkZXNpcmVkSW50ZXJmYWNlID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JN
dXRhdGlvbkV2ZW50KQogICAgICAgICByZXR1cm4gW0RPTU11dGF0aW9uRXZlbnQgY2xhc3NdOwot
ICAgIGlmIChpbXBsLT5pc092ZXJmbG93RXZlbnQoKSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFj
ZSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yT3ZlcmZsb3dFdmVudCkKICAgICAgICAgcmV0
dXJuIFtET01PdmVyZmxvd0V2ZW50IGNsYXNzXTsKLSAgICBpZiAoaW1wbC0+aXNNZXNzYWdlRXZl
bnQoKSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yTWVzc2FnZUV2ZW50KQogICAgICAgICByZXR1cm4gW0RPTU1lc3NhZ2VFdmVudCBjbGFzc107
Ci0gICAgaWYgKGltcGwtPmlzUHJvZ3Jlc3NFdmVudCgpKQorICAgIGlmIChkZXNpcmVkSW50ZXJm
YWNlID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JQcm9ncmVzc0V2ZW50IHx8IGRlc2lyZWRJ
bnRlcmZhY2UgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudCkKICAgICAgICAgcmV0dXJuIFtET01Qcm9ncmVzc0V2ZW50IGNsYXNzXTsKLSAgICBp
ZiAoaW1wbC0+aXNCZWZvcmVMb2FkRXZlbnQoKSkKKyAgICBpZiAoZGVzaXJlZEludGVyZmFjZSA9
PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yQmVmb3JlTG9hZEV2ZW50KQogICAgICAgICByZXR1
cm4gW0RPTUJlZm9yZUxvYWRFdmVudCBjbGFzc107CiAgICAgcmV0dXJuIFtET01FdmVudCBjbGFz
c107CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdpbmRvd0Vycm9ySGFu
ZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXaW5k
b3dFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4V2luZG93RXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogCiAjaW5jbHVkZSAiVjhXaW5kb3dFcnJvckhhbmRsZXIuaCIKIAorI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFcnJvckV2ZW50LmgiCiAjaW5jbHVkZSAiVjhC
aW5kaW5nLmgiCiAKQEAgLTQ0LDkgKzQ1LDkgQEAgVjhXaW5kb3dFcnJvckhhbmRsZXI6OlY4V2lu
ZG93RXJyb3JIYW5kbAogCiB2ODo6TG9jYWw8djg6OlZhbHVlPiBWOFdpbmRvd0Vycm9ySGFuZGxl
cjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAo
IWV2ZW50LT5pc0Vycm9yRXZlbnQoKSkKKyAgICBpZiAoZXZlbnQtPmludGVyZmFjZU5hbWUoKSAh
PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXJyb3JFdmVudCkKICAgICAgICAgcmV0dXJuIFY4
RXZlbnRMaXN0ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24oY29udGV4dCwganNFdmVudCwgZXZl
bnQpOwotICAgIAorCiAgICAgRXJyb3JFdmVudCogZXJyb3JFdmVudCA9IHN0YXRpY19jYXN0PEVy
cm9yRXZlbnQqPihldmVudCk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyID0g
Z2V0TGlzdGVuZXJPYmplY3QoY29udGV4dCk7CiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmV0
dXJuVmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRl
eHRFcnJvckhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4V29ya2VyQ29udGV4dEVycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiVjhXb3JrZXJD
b250ZXh0RXJyb3JIYW5kbGVyLmgiCiAKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVk
ZSAiRXJyb3JFdmVudC5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogCkBAIC00Niw3ICs0Nyw3
IEBAIFY4V29ya2VyQ29udGV4dEVycm9ySGFuZGxlcjo6VjhXb3JrZXJDb24KIAogdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0RXJyb3JIYW5kbGVyOjpjYWxsTGlzdGVuZXJGdW5j
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4ganNFdmVudCwgRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VSVChldmVudC0+aXNFcnJvckV2
ZW50KCkpOworICAgIEFTU0VSVChldmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JFcnJvckV2ZW50KTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlz
dGVuZXIgPSBnZXRMaXN0ZW5lck9iamVjdChjb250ZXh0KTsKICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiByZXR1cm5WYWx1ZTsKICAgICBpZiAoIWxpc3RlbmVyLklzRW1wdHkoKSAmJiBsaXN0ZW5l
ci0+SXNGdW5jdGlvbigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQmVmb3JlTG9hZEV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0JlZm9yZUxvYWRFdmVudC5o
CShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9CZWZvcmVMb2FkRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3Ry
aW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogCiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCB7IHJldHVybiBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yQmVmb3JlTG9hZEV2ZW50OyB9Ci0gICAgdmlydHVhbCBib29sIGlzQmVmb3Jl
TG9hZEV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIEJlZm9y
ZUxvYWRFdmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuY3Bw
CShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsOSArNjAsNCBAQCBjb25zdCBBdG9taWNTdHJpbmcm
IENvbXBvc2l0aW9uRXZlbnQ6OmluCiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JDb21wb3NpdGlvbkV2ZW50OwogfQogCi1ib29sIENvbXBvc2l0aW9uRXZlbnQ6OmlzQ29tcG9z
aXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NpdGlvbkV2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbXBvc2l0aW9uRXZlbnQuaAkocmV2
aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tcG9zaXRpb25FdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAogICAgICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNDb21wb3NpdGlvbkV2ZW50KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBDb21wb3NpdGlvbkV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJy
b3JFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQu
Y3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTEgKzc4LDYgQEAgdm9pZCBFcnJvckV2ZW50Ojppbml0
RXJyb3JFdmVudChjb25zdCBBdAogICAgIG1fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7CiB9CiAK
LWJvb2wgRXJyb3JFdmVudDo6aXNFcnJvckV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBFcnJvckV2ZW50OjppbnRlcmZhY2VOYW1lKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvckVycm9yRXZlbnQ7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FcnJvckV2ZW50LmgJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNiBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGluZW5vKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVt
YmVyOyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yRXZlbnQoKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBFcnJvckV2ZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHJldmlzaW9uIDk4
MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDI2ICsxMTIsMTEgQEAgYm9vbCBFdmVudDo6aXNNb3VzZUV2ZW50KCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIEV2ZW50Ojppc0tleWJvYXJkRXZlbnQoKSBj
b25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBFdmVudDo6aXNUZXh0RXZlbnQo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVudDo6aXNDb21wb3Np
dGlvbkV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgRXZlbnQ6
OmlzRHJhZ0V2ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDIsMTIgKzEy
Nyw3IEBAIGJvb2wgRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBFdmVudDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnQ6OmlzTWVzc2FnZUV2ZW50KCkgY29uc3QKK2Jvb2wg
RXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7
CiB9CkBAIC0xNTcsNDMgKzEzNyw2IEBAIGJvb2wgRXZlbnQ6OmlzQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoKSAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnQ6OmlzT3ZlcmZsb3dF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEV2ZW50Ojppc1Bh
Z2VUcmFuc2l0aW9uRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBFdmVudDo6aXNQcm9ncmVzc0V2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgRXZlbnQ6OmlzQmVmb3JlTG9hZEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoU1ZHKQotYm9vbCBFdmVudDo6aXNTVkdab29tRXZlbnQo
KSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi1ib29sIEV2ZW50Ojpp
c0Vycm9yRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBFdmVu
dDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQogdm9pZCBFdmVudDo6c3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJikKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudC5oCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjkgKzExNCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBj
b25zdDsKIAotICAgICAgICAvLyBUaGVzZSBhcmUgbmVlZGVkIGZvciB0aGUgQ1BQIGJpbmRpbmdz
LgorICAgICAgICAvLyBUaGVzZSBldmVudHMgYXJlIGdlbmVyYWwgY2xhc3NlcyBvZiBldmVudHMu
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1VJRXZlbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBib29sIGlzTW91c2VFdmVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNdXRh
dGlvbkV2ZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRXZlbnQo
KSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEcmFnRXZlbnQoKSBjb25zdDsgLy8g
YSBzdWJzZXQgb2YgbW91c2UgZXZlbnRzCisgICAgICAgIC8vIERyYWcgZXZlbnRzIGFyZSBhIHN1
YnNldCBvZiBtb3VzZSBldmVudHMuCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0RyYWdFdmVudCgp
IGNvbnN0OwogCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UhIENhbGxlcnMgc2hvdWxk
IHVzZSBpbnRlcmZhY2VOYW1lKCkgaW5zdGVhZC4KLSAgICAgICAgdmlydHVhbCBib29sIGlzS2V5
Ym9hcmRFdmVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RXZlbnQoKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzQ29tcG9zaXRpb25FdmVudCgpIGNvbnN0Owor
ICAgICAgICAvLyBUaGVzZSBldmVudHMgbGFjayBhIERPTSBpbnRlcmZhY2UuCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2
ZW50KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc092ZXJmbG93RXZlbnQoKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzUGFnZVRyYW5zaXRpb25FdmVudCgpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0V2ZW50KCkgY29uc3Q7Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBpc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0OwotI2lmIEVOQUJMRShTVkcpCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR1pvb21FdmVudCgpIGNvbnN0OwotI2VuZGlmCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yRXZlbnQoKSBjb25zdDsKIAogICAgICAgICBib29sIHBy
b3BhZ2F0aW9uU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGFnYXRpb25TdG9wcGVkIHx8
IG1faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOyB9CiAgICAgICAgIGJvb2wgaW1tZWRpYXRl
UHJvcGFnYXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9pbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmlkbAkocmV2aXNpb24gOTgxMDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw2
IEBAIG1vZHVsZSBldmVudHMgewogCiAjaWYgZGVmaW5lZChMQU5HVUFHRV9DUFApICYmIExBTkdV
QUdFX0NQUAogICAgICAgICAvLyBFeHRyYSBXZWJDb3JlIG1ldGhvZHMgZXhwb3NlZCB0byBhbGxv
dyBjb21waWxlLXRpbWUgY2FzdGluZyBpbiBDKysKLSAgICAgICAgYm9vbGVhbiBpc011dGF0aW9u
RXZlbnQoKTsKICAgICAgICAgYm9vbGVhbiBpc01vdXNlRXZlbnQoKTsKICAgICAgICAgYm9vbGVh
biBpc1VJRXZlbnQoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0
Y2hlci5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlz
cGF0Y2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Niw3ICszOTYsNyBAQCBFdmVudERpc3Bh
dGNoQmVoYXZpb3IgRXZlbnREaXNwYXRjaGVyOjpkCiAKICAgICAvLyBQZXIgWEJMIDIuMCBzcGVj
LCBtdXRhdGlvbiBldmVudHMgc2hvdWxkIG5ldmVyIGNyb3NzIHNoYWRvdyBET00gYm91bmRhcnk6
CiAgICAgLy8gaHR0cDovL2Rldi53My5vcmcvMjAwNi94YmwyLyNldmVudC1mbG93LWFuZC10YXJn
ZXRpbmctYWNyb3NzLXNoYWRvdy1zCi0gICAgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkK
KyAgICBpZiAoZXZlbnQtPmludGVyZmFjZU5hbWUoKSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNl
Rm9yTXV0YXRpb25FdmVudCkKICAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dET007CiAK
ICAgICAvLyBXZWJLaXQgbmV2ZXIgYWxsb3dlZCBzZWxlY3RzdGFydCBldmVudCB0byBjcm9zcyB0
aGUgdGhlIHNoYWRvdyBET00gYm91bmRhcnkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDkgKzE2OSw0IEBAIGNvbnN0IEF0b21pY1N0
cmluZyYgTWVzc2FnZUV2ZW50OjppbnRlcmYKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmludGVy
ZmFjZUZvck1lc3NhZ2VFdmVudDsKIH0KIAotYm9vbCBNZXNzYWdlRXZlbnQ6OmlzTWVzc2FnZUV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gOTgxMDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDcgKzk4LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhLCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgRE9NV2luZG93KiBzb3VyY2UsIE1lc3NhZ2VQb3J0Kik7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBpc01lc3NhZ2VFdmVudCgpIGNvbnN0OwogCiAgICAgZW51bSBE
YXRhVHlwZSB7CiAgICAgICAgIERhdGFUeXBlU2NyaXB0VmFsdWUsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTXV0YXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL011dGF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9NdXRhdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksNCBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIE11dGF0aW9uRXZlbnQ6OmludGVyCiAgICAgcmV0dXJuIGV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JNdXRhdGlvbkV2ZW50OwogfQogCi1ib29sIE11dGF0aW9uRXZl
bnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NdXRhdGlvbkV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL011dGF0aW9uRXZlbnQuaAko
cmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ckNoYW5n
ZTsgfQogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc011dGF0aW9uRXZlbnQoKSBjb25zdDsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIE11dGF0aW9uRXZlbnQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODcyLDcgKzI4NzIsNyBAQCB2b2lkIE5vZGU6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2CiAgICAgICAgICAgICAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250
cm9sbGVyKCktPmhhbmRsZUNvbnRleHRNZW51RXZlbnQoZXZlbnQpOwogI2VuZGlmCiAgICAgfSBl
bHNlIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1dEV2ZW50KSB7Ci0gICAg
ICAgIGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKKyAgICAgICAgaWYgKGV2ZW50LT5pbnRlcmZh
Y2VOYW1lKCkgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRFdmVudCkKICAgICAgICAg
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQogICAgICAgICAgICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZGVmYXVsdFRleHRJbnB1dEV2ZW50SGFuZGxlcihz
dGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkpOwogI2lmIEVOQUJMRShQQU5fU0NST0xMSU5H
KQpAQCAtMjg5Miw3ICsyODkyLDcgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50KiBldgogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50ICYmIGV2ZW50LT5pc1do
ZWVsRXZlbnQoKSkgeworICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5t
b3VzZXdoZWVsRXZlbnQgJiYgZXZlbnQtPmludGVyZmFjZU5hbWUoKSA9PSBldmVudE5hbWVzKCku
aW50ZXJmYWNlRm9yV2hlZWxFdmVudCkgewogICAgICAgICBXaGVlbEV2ZW50KiB3aGVlbEV2ZW50
ID0gc3RhdGljX2Nhc3Q8V2hlZWxFdmVudCo+KGV2ZW50KTsKICAgICAgICAgCiAgICAgICAgIC8v
IElmIHdlIGRvbid0IGhhdmUgYSByZW5kZXJlciwgc2VuZCB0aGUgd2hlZWwgZXZlbnQgdG8gdGhl
IGZpcnN0IG5vZGUgd2UgZmluZCB3aXRoIGEgcmVuZGVyZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vT3ZlcmZsb3dFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L092ZXJmbG93RXZlbnQuY3BwCShyZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9PdmVyZmxvd0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTEgKzczLDYgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBPdmVyZmxvd0V2ZW50OjppbnRlcgogICAgIHJldHVybiBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yT3ZlcmZsb3dFdmVudDsKIH0KIAotYm9vbCBPdmVyZmxvd0V2ZW50
Ojppc092ZXJmbG93RXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lk
IE92ZXJmbG93RXZlbnQ6OmluaXRPdmVyZmxvd0V2ZW50KHVuc2lnbmVkIHNob3J0IG9yaWVudCwg
Ym9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdykKIHsKICAgICBp
ZiAoZGlzcGF0Y2hlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL092ZXJmbG93RXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vT3ZlcmZsb3dFdmVudC5oCShyZXZp
c2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgcHVibGljOgogICAgIGJvb2wgdmVydGljYWxPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxPdmVyZmxvdzsgfQogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNPdmVyZmxvd0V2ZW50KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgT3ZlcmZsb3dF
dmVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BhZ2VUcmFuc2l0aW9uRXZlbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUGFnZVRyYW5zaXRpb25FdmVudC5oCShy
ZXZpc2lvbiA5ODEwNykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9QYWdlVHJhbnNpdGlvbkV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBwZXJzaXN0ZWQpOwogCiAgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNQYWdlVHJhbnNpdGlvbkV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9v
bCBwZXJzaXN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlZDsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qcm9ncmVzc0V2ZW50LmgJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1Byb2dyZXNzRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgUHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBQ
cm9ncmVzc0V2ZW50SW5pdCYpOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dy
ZXNzRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCiAgICAgYm9vbCBtX2xlbmd0
aENvbXB1dGFibGU7CiAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fbG9hZGVkOwogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBtX3RvdGFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHJl
dmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCw5ICsxMDQsNCBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFRleHRFdmVu
dDo6aW50ZXJmYWNlCiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JUZXh0RXZl
bnQ7CiB9CiAKLWJvb2wgVGV4dEV2ZW50Ojppc1RleHRFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4
dEV2ZW50LmgJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHRFdmVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgU3RyaW5nIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RXZlbnQoKSBjb25zdDsKIAogICAgICAgICBib29sIGlz
TGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXRM
aW5lQnJlYWs7IH0KICAgICAgICAgYm9vbCBpc0NvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9pbnB1dFR5cGUgPT0gVGV4dEV2ZW50SW5wdXRDb21wb3NpdGlvbjsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9XaGVlbEV2ZW50LmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vV2hlZWxFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDExICs4OSw2IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgV2hlZWxFdmVudDo6aW50ZXJmYWMKICAgICByZXR1cm4gZXZlbnROYW1l
cygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQ7CiB9CiAKLWJvb2wgV2hlZWxFdmVudDo6aXNXaGVl
bEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIHN0YXRpYyBX
aGVlbEV2ZW50OjpHcmFudWxhcml0eSBncmFudWxhcml0eShjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmIGV2ZW50KQogewogICAgIHJldHVybiBldmVudC5ncmFudWxhcml0eSgpID09IFNjcm9sbEJ5
UGFnZVdoZWVsRXZlbnQgPyBXaGVlbEV2ZW50OjpQYWdlIDogV2hlZWxFdmVudDo6UGl4ZWw7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL1doZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsOCArNzgsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UG9pbnQmIHNj
cmVlbkxvY2F0aW9uLCBjb25zdCBJbnRQb2ludCYgcGFnZUxvY2F0aW9uLAogICAgICAgICAgICAg
ICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0
YUtleSwgYm9vbCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UpOwogCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc1doZWVsRXZlbnQoKSBjb25zdDsKLQogICAgICAgICBJbnRQb2ludCBtX3doZWVs
RGVsdGE7CiAgICAgICAgIEludFBvaW50IG1fcmF3RGVsdGE7CiAgICAgICAgIEdyYW51bGFyaXR5
IG1fZ3JhbnVsYXJpdHk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgIGlmIChldnQtPmlzQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoKSkKICAgICAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZ0KSk7
CiAKLSAgICBpZiAoZXZ0LT5pc1doZWVsRXZlbnQoKSkgeworICAgIGlmIChldnQtPmludGVyZmFj
ZU5hbWUoKSA9PSBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCkgewogICAgICAg
ICBtX2lucHV0VHlwZS0+aGFuZGxlV2hlZWxFdmVudChzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4o
ZXZ0KSk7CiAgICAgICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSFRNTFRl
eHRBcmVhRWxlbWVudDo6dXBkYXRlRm9jdXNBcHAKIAogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAocmVuZGVyZXIo
KSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2
ZW50LT5pc1doZWVsRXZlbnQoKSB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVy
RXZlbnQpKQorICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50KCkgfHwg
ZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmludGVyZmFjZU5hbWUoKSA9PSBldmVudE5h
bWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5ibHVyRXZlbnQpKQogICAgICAgICBmb3J3YXJkRXZlbnQoZXZlbnQpOwogICAgIGVsc2Ug
aWYgKHJlbmRlcmVyKCkgJiYgZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSkKICAg
ICAgICAgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoc3RhdGljX2Nhc3Q8QmVmb3JlVGV4
dEluc2VydGVkRXZlbnQqPihldmVudCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIs
NyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlV2hlZWxFdmVuCiAKIHZvaWQgVGV4
dEZpZWxkSW5wdXRUeXBlOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChl
bGVtZW50KCktPnJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSB8fCBldmVudC0+
aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
LmZvY3VzRXZlbnQpKSB7CisgICAgaWYgKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSAmJiAoZXZlbnQt
PmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pbnRlcmZh
Y2VOYW1lKCkgPT0gZXZlbnROYW1lcygpLmludGVyZmFjZUZvcldoZWVsRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmZvY3VzRXZlbnQpKSB7CiAgICAgICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZSogcmVuZGVyVGV4dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShl
bGVtZW50KCktPnJlbmRlcmVyKCkpOwogICAgICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuYmx1ckV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclRl
eHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCkpIHsKQEAgLTE2MCw3
ICsxNjAsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6Zm9yd2FyZEV2ZW50KEV2CiAKIGJv
b2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVu
dCkKIHsKLSAgICByZXR1cm4gKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnRleHRJbnB1
dEV2ZW50ICYmIGV2ZW50LT5pc1RleHRFdmVudCgpICYmIHN0YXRpY19jYXN0PFRleHRFdmVudCo+
KGV2ZW50KS0+ZGF0YSgpID09ICJcbiIpIHx8IElucHV0VHlwZTo6c2hvdWxkU3VibWl0SW1wbGlj
aXRseShldmVudCk7CisgICAgcmV0dXJuIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50
ZXh0SW5wdXRFdmVudCAmJiBldmVudC0+aW50ZXJmYWNlTmFtZSgpID09IGV2ZW50TmFtZXMoKS5p
bnRlcmZhY2VGb3JUZXh0RXZlbnQgJiYgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpLT5k
YXRhKCkgPT0gIlxuIikgfHwgSW5wdXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KGV2ZW50
KTsKIH0KIAogUmVuZGVyT2JqZWN0KiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1pvb21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1pvb21FdmVudC5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1pvb21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSw2IEBAIEZs
b2F0UG9pbnQgU1ZHWm9vbUV2ZW50OjpuZXdUcmFuc2xhdGUoKSAKICAgICByZXR1cm4gbV9uZXdU
cmFuc2xhdGU7CiB9CiAKLWJvb2wgU1ZHWm9vbUV2ZW50Ojppc1NWR1pvb21FdmVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHWm9vbUV2
ZW50OjppbnRlcmZhY2VOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclNWR1pvb21FdmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdab29t
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHWm9vbUV2ZW50LmgJ
KHJldmlzaW9uIDk4MTA3KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZH
Wm9vbUV2ZW50KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdab29tRXZlbnQoKSBjb25zdDsK
LQogICAgIGZsb2F0IG1fbmV3U2NhbGU7CiAgICAgZmxvYXQgbV9wcmV2aW91c1NjYWxlOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxMzMpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDExLTEwLTIxICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
RXZlbnQuaCBoYXMgdG9vIG1hbnkgdmlydHVhbCBpc011bWJsZUV2ZW50KCkgZnVuY3Rpb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYzNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0aGVz
ZSBjYWxsc2l0ZXMgdG8gdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBzcmMvV2ViRE9NRXZlbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNLZXlib2FyZEV2ZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRE9NRXZlbnQ6OmlzTXV0YXRpb25FdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRPTUV2ZW50Ojppc1RleHRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRP
TUV2ZW50Ojppc0NvbXBvc2l0aW9uRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVu
dDo6aXNDbGlwYm9hcmRFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRPTUV2ZW50Ojppc01l
c3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRPTUV2ZW50Ojppc1doZWVsRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRPTUV2ZW50Ojppc092ZXJmbG93RXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJET01FdmVudDo6aXNQYWdlVHJhbnNpdGlvbkV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRE9NRXZlbnQ6OmlzUHJvZ3Jlc3NFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRPTUV2ZW50Ojppc0JlZm9yZUxvYWRFdmVudCk6CisKIDIwMTEtMTAtMjAgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgbWVjaGFuaXNtIHRv
IGVuYWJsZSBwcml2aWxlZ2VkIHdlYmdsIGV4dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkRPTUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJET01FdmVudC5jcHAJKHJldmlzaW9uIDk4MTA3KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRE9NRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsMjggKzExNSwyOCBAQCBib29sIFdlYkRPTUV2ZW50Ojppc01vdXNlRXZlbnQoKSBjb25zdAog
ICAgIHJldHVybiBtX3ByaXZhdGUtPmlzTW91c2VFdmVudCgpOwogfQogCi1ib29sIFdlYkRPTUV2
ZW50Ojppc011dGF0aW9uRXZlbnQoKSBjb25zdAorYm9vbCBXZWJET01FdmVudDo6aXNLZXlib2Fy
ZEV2ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5pc011dGF0aW9uRXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0tleWJv
YXJkRXZlbnQoKTsKIH0KIAotYm9vbCBXZWJET01FdmVudDo6aXNLZXlib2FyZEV2ZW50KCkgY29u
c3QKK2Jvb2wgV2ViRE9NRXZlbnQ6OmlzTXV0YXRpb25FdmVudCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNLZXlib2FyZEV2ZW50KCk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aW50ZXJmYWNlTmFtZSgpID09IFdlYkNvcmU6OmV2ZW50
TmFtZXMoKS5pbnRlcmZhY2VGb3JNdXRhdGlvbkV2ZW50OwogfQogCiBib29sIFdlYkRPTUV2ZW50
Ojppc1RleHRFdmVudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aXNUZXh0RXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pbnRl
cmZhY2VOYW1lKCkgPT0gV2ViQ29yZTo6ZXZlbnROYW1lcygpLmludGVyZmFjZUZvclRleHRFdmVu
dDsKIH0KIAogYm9vbCBXZWJET01FdmVudDo6aXNDb21wb3NpdGlvbkV2ZW50KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc0NvbXBvc2l0
aW9uRXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pbnRlcmZhY2VOYW1lKCkgPT0gV2Vi
Q29yZTo6ZXZlbnROYW1lcygpLmludGVyZmFjZUZvckNvbXBvc2l0aW9uRXZlbnQ7CiB9CiAKIGJv
b2wgV2ViRE9NRXZlbnQ6OmlzRHJhZ0V2ZW50KCkgY29uc3QKQEAgLTE1NCwxMyArMTU0LDEzIEBA
IGJvb2wgV2ViRE9NRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb24KIGJvb2wgV2ViRE9NRXZl
bnQ6OmlzTWVzc2FnZUV2ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc01lc3NhZ2VFdmVudCgpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPmludGVyZmFjZU5hbWUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9y
TWVzc2FnZUV2ZW50OwogfQogCiBib29sIFdlYkRPTUV2ZW50Ojppc1doZWVsRXZlbnQoKSBjb25z
dAogewogICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzV2hl
ZWxFdmVudCgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmludGVyZmFjZU5hbWUoKSA9PSBXZWJD
b3JlOjpldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yV2hlZWxFdmVudDsKIH0KIAogYm9vbCBXZWJE
T01FdmVudDo6aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0CkBAIC0xNzIsMTMgKzE3
MiwxMyBAQCBib29sIFdlYkRPTUV2ZW50Ojppc0JlZm9yZVRleHRJbnNlcnRlZEV2CiBib29sIFdl
YkRPTUV2ZW50Ojppc092ZXJmbG93RXZlbnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX3ByaXZh
dGUpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzT3ZlcmZsb3dFdmVudCgpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPmludGVyZmFjZU5hbWUoKSA9PSBXZWJDb3JlOjpldmVudE5hbWVzKCkuaW50
ZXJmYWNlRm9yT3ZlcmZsb3dFdmVudDsKIH0KIAogYm9vbCBXZWJET01FdmVudDo6aXNQYWdlVHJh
bnNpdGlvbkV2ZW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5pc1BhZ2VUcmFuc2l0aW9uRXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5pbnRlcmZhY2VOYW1lKCkgPT0gV2ViQ29yZTo6ZXZlbnROYW1lcygpLmludGVyZmFjZUZv
clBhZ2VUcmFuc2l0aW9uRXZlbnQ7CiB9CiAKIGJvb2wgV2ViRE9NRXZlbnQ6OmlzUG9wU3RhdGVF
dmVudCgpIGNvbnN0CkBAIC0xOTAsNyArMTkwLDcgQEAgYm9vbCBXZWJET01FdmVudDo6aXNQb3BT
dGF0ZUV2ZW50KCkgY29ucwogYm9vbCBXZWJET01FdmVudDo6aXNQcm9ncmVzc0V2ZW50KCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1By
b2dyZXNzRXZlbnQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pbnRlcmZhY2VOYW1lKCkgPT0g
V2ViQ29yZTo6ZXZlbnROYW1lcygpLmludGVyZmFjZUZvclByb2dyZXNzRXZlbnQ7CiB9CiAKIGJv
b2wgV2ViRE9NRXZlbnQ6OmlzWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KCkgY29uc3QKQEAg
LTIxNCw3ICsyMTQsNyBAQCBib29sIFdlYkRPTUV2ZW50Ojppc1dlYktpdFRyYW5zaXRpb25FdmVu
CiBib29sIFdlYkRPTUV2ZW50Ojppc0JlZm9yZUxvYWRFdmVudCgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG1fcHJpdmF0ZSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNCZWZvcmVMb2FkRXZlbnQo
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pbnRlcmZhY2VOYW1lKCkgPT0gV2ViQ29yZTo6ZXZl
bnROYW1lcygpLmludGVyZmFjZUZvckJlZm9yZUxvYWRFdmVudDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250
YWluZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gOTgxMDcpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6aGFuZGxl
RXZlbnQKICAgICAvLyB3aGVyZSBtb3ppbGxhIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiB0aGUg
c3BlYy4KICAgICBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQogICAgICAgICBoYW5kbGVNb3Vz
ZUV2ZW50KHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkpOwotICAgIGVsc2UgaWYgKGV2
ZW50LT5pc1doZWVsRXZlbnQoKSkKKyAgICBlbHNlIGlmIChldmVudC0+aW50ZXJmYWNlTmFtZSgp
ID09IGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KQogICAgICAgICBoYW5kbGVX
aGVlbEV2ZW50KHN0YXRpY19jYXN0PFdoZWVsRXZlbnQqPihldmVudCkpOwogICAgIGVsc2UgaWYg
KGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKICAgICAgICAgaGFuZGxlS2V5Ym9hcmRFdmVudChz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQpKTsK
</data>
<flag name="review"
          id="109987"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>