<?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>82656</bug_id>
          
          <creation_ts>2012-03-29 14:18:16 -0700</creation_ts>
          <short_desc>DFG should optimize a==b for a being an object and b being either an object or null/undefined, and vice versa</short_desc>
          <delta_ts>2012-03-30 19:27:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591550</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-29 14:18:16 -0700</bug_when>
    <thetext>V8-raytrace does this.  I figure others might want to do that as well, since it seems like a sensible thing to do.

This bug doesn&apos;t extend to going all out and optimizing the case where in a==b both a and b can be either null or object, since I don&apos;t yet have evidence that there are enough hot spots in the code out there that do that.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591562</commentid>
    <comment_count>1</comment_count>
      <attachid>134666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-29 14:24:45 -0700</bug_when>
    <thetext>Created attachment 134666
work in progress

Almost done, but still need to do 32-bit and run some more tests.  Putting up for EWS to see that my 64-bit code doesn&apos;t make non-Mac ports sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591626</commentid>
    <comment_count>2</comment_count>
      <attachid>134666</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 15:17:35 -0700</bug_when>
    <thetext>Comment on attachment 134666
work in progress

Attachment 134666 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12194493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591629</commentid>
    <comment_count>3</comment_count>
      <attachid>134666</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-29 15:23:43 -0700</bug_when>
    <thetext>Comment on attachment 134666
work in progress

Attachment 134666 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12212042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591682</commentid>
    <comment_count>4</comment_count>
      <attachid>134666</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-29 16:13:09 -0700</bug_when>
    <thetext>Comment on attachment 134666
work in progress

Attachment 134666 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12206020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591792</commentid>
    <comment_count>5</comment_count>
      <attachid>134708</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-29 18:34:08 -0700</bug_when>
    <thetext>Created attachment 134708
the patch

It appears to work now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591810</commentid>
    <comment_count>6</comment_count>
      <attachid>134708</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-03-29 18:54:09 -0700</bug_when>
    <thetext>Comment on attachment 134708
the patch

CompareEq should always predict bool shouldn&apos;t it?  It would seem easier to just do a single forNode(nodeIndex).set(PredictBoolean); in the AbstractState logic for it?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591813</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-29 19:05:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 134708 [details])
&gt; CompareEq should always predict bool shouldn&apos;t it?  It would seem easier to just do a single forNode(nodeIndex).set(PredictBoolean); in the AbstractState logic for it?

You might have a point there. ;-)

I will make the change that you speak of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592743</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-30 19:27:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/112762</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134666</attachid>
            <date>2012-03-29 14:24:45 -0700</date>
            <delta_ts>2012-03-29 18:34:08 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cmpeq_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22413</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDEyLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhPT1iIGZvciBhIGJlaW5nIGFuIG9iamVjdCBhbmQgYiBiZWlu
ZyBlaXRoZXIgYW4gb2JqZWN0IG9yCisgICAgICAgIG51bGwvdW5kZWZpbmVkLCBhbmQgdmljZSB2
ZXJzYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI2
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIEltcGxlbWVudHMgYWRkaXRpb25hbCBvYmplY3QgZXF1YWxpdHkgb3B0aW1pemF0aW9ucyBm
b3IgdGhlIGNhc2UgdGhhdCBvbmUKKyAgICAgICAgb3BlcmFuZCBpcyBwcmVkaWN0ZWQgdG8gYmUg
YW4gZWFzaWx5IHNwZWN1bGF0ZWQgb2JqZWN0IChsaWtlIEZpbmFsT2JqZWN0IG9yCisgICAgICAg
IEFycmF5KSBhbmQgdGhlIG90aGVyIGlzIGVpdGhlciBhbiBlYXNpbHkgc3BlY3VsYXRlZCBvYmpl
Y3Qgb3IgT3RoZXIsIGkuZS4KKyAgICAgICAgTnVsbCBvciBVbmRlZmluZWQuCisgICAgICAgIAor
ICAgICAgICAyLjUlIHNwZWVkLXVwIG9uIFY4L3JheXRyYWNlLCBuZXV0cmFsIGVsc2V3aGVyZSBh
cyBmYXIgYXMgSSBjYW4gdGVsbC4KKyAgICAgICAgCisgICAgICAgIEkgYWxzbyB0b29rIHRoZSBv
cHBvcnR1bml0eSB0byBjbGVhbiB1cCB0aGUgY29udHJvbCBmbG93IGZvciB0aGUgc3BlY3VsYXRp
b24KKyAgICAgICAgZGVjaXNpb25zIGluIHRoZSB2YXJpb3VzIENvbXBhcmUgb3Bjb2Rlcy4KKyAg
ICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MsIHNpbmNlIHRoaXMgZG9lcyBub3QgeWV0
IGltcGxlbWVudCB0aGUgMzItYml0IHNpZGUgb2YgdGhlIGNvZGUKKyAgICAgICAgYW5kIEkgaGF2
ZW4ndCBxdWl0ZSBkb25lIGFsbCBvZiB0aGUgdGVzdHMgdGhhdCBJIG5vcm1hbGx5IGRvLgorCisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmpl
Y3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6CisKIDIwMTItMDMtMjkgIEdhdmluIEJhcnJhY2xv
dWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgYnVpbGQgZml4
IHAyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCShyZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsMTEgKzQxNiwzNiBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBmaWx0
ZXIgPSBQcmVkaWN0SW50MzI7CiAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZU51bWJlcihsZWZ0LCByaWdodCkpCiAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0TnVtYmVy
OwotICAgICAgICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKLSAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RGaW5hbE9iamVjdDsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBh
cmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCi0gICAgICAg
ICAgICBmaWx0ZXIgPSBQcmVkaWN0QXJyYXk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBlbHNl
IGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgIGZp
bHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBQcmVkaWN0QXJyYXk7CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0
ZUZpbmFsT2JqZWN0KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVy
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0RmluYWxPYmplY3QpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkg
eworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RG
aW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheSgp
ICYmIHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxP
YmplY3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChyaWdodC5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIGxlZnQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9i
amVjdCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9v
bGVhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CisgICAgICAgICAgICAgICAgY2xvYmJl
clN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CiAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDExMjUwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2NCw5ICszNjQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAg
IAotICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxvZygiZ2V0QnlJZCglcywgJXMpXG4iLCBK
U1ZhbHVlOjpkZWNvZGUoYmFzZSkuZGVzY3JpcHRpb24oKSwgcHJvcGVydHlOYW1lLT5hc2NpaSgp
LmRhdGEoKSk7Ci0gICAgCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
YmFzZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCkpOwpA
QCAtNzQ2LDI4ICs3NDMsMTEgQEAgc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFy
ZUdyZQogICAgIHJldHVybiBqc0xlc3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCi1zdGF0aWMgY29u
c3QgY2hhciAqY2xhc3NOYW1lU3BhY2UoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFs
dWUuaXNDZWxsKCkgPyAiICIgOiAiIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGNsYXNzTmFt
ZShKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJl
dHVybiAiIjsKLSAgICByZXR1cm4gdmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpLT5jbGFzc05h
bWU7Ci19Ci0KIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMp
OwogICAgIAotICAgIGlmIChmYWxzZSkgewotICAgICAgICBkYXRhTG9nKCJjb21wYXJlRXEoJXMl
cyVzLCAiLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkuZGVzY3JpcHRpb24oKSwgY2xhc3NO
YW1lU3BhY2UoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpKSwgY2xhc3NOYW1lKEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AxKSkpOwotICAgICAgICBkYXRhTG9nKCIlcyVzJXMpXG4iLCBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMikuZGVzY3JpcHRpb24oKSwgY2xhc3NOYW1lU3BhY2UoSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpKSwgY2xhc3NOYW1lKEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKSkpOwotICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVxdWFsU2xv
d0Nhc2VJbmxpbmUoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMikpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExMjUwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTczOSw2ICs3MzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgfQogCiAgICAganVtcChub3RUYWtlbik7CisgICAgCisg
ICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7CisgICAgbV9jb21waWxlSW5k
ZXggPSBicmFuY2hOb2RlSW5kZXg7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTEyNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEzLDYgKzcxMyw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICB9CiAKICAgICBq
dW1wKG5vdFRha2VuKTsKKworICAgIG1faW5kZXhJbkJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS0+c2l6ZSgpIC0gMTsKKyAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5v
ZGVJbmRleDsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQpAQCAtMTQ4NSw2ICsx
NDg4LDE0NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JP
dGhlckVxdWFsaXR5KAorICAgIEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsCisgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25D
aGVjaykKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsK
KyAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAKKyAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwor
ICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5v
ZGUobGVmdENoaWxkKS5tX3R5cGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgfQorICAgIAorICAg
IC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0g
YiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKKyAgICAvLyBvciBhbiBvYmpl
Y3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2Ug
dGhhdCBjYXNlIGZhc3QuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0K
KyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3Ay
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIAorICAgIC8vIFdlIGtub3cgdGhh
dCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIElmIHRoZSBD
RkEgY2FuIHRlbGwgdXMgdGhhdCB0aGUKKyAgICAvLyBwcm9vZiwgd2hlbiBmaWx0ZXJlZCBvbiBj
ZWxsLCBkZW1vbnN0cmF0ZXMgdGhhdCB3ZSBoYXZlIGFuIG9iamVjdCBvZiB0aGUgZGVzaXJlZCB0
eXBlCisgICAgLy8gKHByZWRpY3Rpb25DaGVjaygpIHdpbGwgdGVzdCBmb3IgRmluYWxPYmplY3Qg
b3IgQXJyYXksIGN1cnJlbnRseSksIHRoZW4gd2UgY2FuIHNraXAgdGhlCisgICAgLy8gc3BlY3Vs
YXRpb24uCisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hp
bGQpLm1fdHlwZSAmIFByZWRpY3RDZWxsKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5pbmRl
eCgpLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICB9CisgICAg
CisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBzdHJh
aWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBhcmlzb24gb24gcG9pbnRlcgorICAgIC8vIHZhbHVl
cyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmlnaHQgYXJlIHBvaW50ZXJzIHRvIG9iamVjdHMgdGhh
dCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkKKyAgICAvLyBwcm90b2NvbHMuCisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHRy
dWVDYXNlID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIHJpZ2h0Tm90Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgCisgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRD
aGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCisgICAg
Ly8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCisgICAgaWYgKCFp
c090aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflBy
ZWRpY3RDZWxsKSkgeworICAgICAgICBtX2ppdC5tb3ZlKG9wMkdQUiwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVu
ZGVmaW5lZCksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgcmlnaHRDaGlsZC5p
bmRleCgpLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgfQorICAgIAorICAgIGZhbHNlQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICB0cnVlQ2FzZS5saW5rKCZt
X2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BS
KTsKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0
eSgKKyAgICBFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLCBOb2RlSW5kZXggYnJhbmNo
Tm9kZUluZGV4LAorICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBQcmVkaWN0aW9uQ2hl
Y2tlciBwcmVkaWN0aW9uQ2hlY2spCit7CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5j
aE5vZGVJbmRleCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CisgICAgCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxl
ZnRDaGlsZCk7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgCisgICAgR1BSUmVnIG9wMUdQUiA9IG9w
MS5ncHIoKTsKKyAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOworICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9z
dGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCkubV90eXBlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxk
LmluZGV4KCksCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgIH0K
KyAgICAKKyAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFt
cyBkbyBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCisgICAgLy8g
b3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hl
cyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0LgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0
Tm90Q2VsbCA9CisgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMkdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBX
ZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxs
LiBJZiB0aGUgQ0ZBIGNhbiB0ZWxsIHVzIHRoYXQgdGhlCisgICAgLy8gcHJvb2YsIHdoZW4gZmls
dGVyZWQgb24gY2VsbCwgZGVtb25zdHJhdGVzIHRoYXQgd2UgaGF2ZSBhbiBvYmplY3Qgb2YgdGhl
IGRlc2lyZWQgdHlwZQorICAgIC8vIChwcmVkaWN0aW9uQ2hlY2soKSB3aWxsIHRlc3QgZm9yIEZp
bmFsT2JqZWN0IG9yIEFycmF5LCBjdXJyZW50bHkpLCB0aGVuIHdlIGNhbiBza2lwIHRoZQorICAg
IC8vIHNwZWN1bGF0aW9uLgorICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9k
ZShyaWdodENoaWxkKS5tX3R5cGUgJiBQcmVkaWN0Q2VsbCkpIHsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKKyAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0
Q2hpbGQuaW5kZXgoKSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJm
b3JtIGEgc3RyYWlnaHQtZm9yd2FyZCBlcXVhbGl0eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKKyAg
ICAvLyB2YWx1ZXMgYmVjYXVzZSBib3RoIGxlZnQgYW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBv
YmplY3RzIHRoYXQgaGF2ZSBubyBzcGVjaWFsIGVxdWFsaXR5CisgICAgLy8gcHJvdG9jb2xzLgor
ICAgIGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIG9wMUdQUiwgb3AyR1BSLCB0YWtl
bik7CisgICAgCisgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRD
aGlsZCBtdXN0IG5vdCBiZSBhIGNlbGwuIENoZWNrIGlmIHRoYXQgaXMgZW5vdWdoIHRvCisgICAg
Ly8gcHJvdmUgdGhhdCBpdCBpcyBlaXRoZXIgbnVsbCBvciB1bmRlZmluZWQuCisgICAgaWYgKGlz
T3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+UHJl
ZGljdENlbGwpKQorICAgICAgICByaWdodE5vdENlbGwubGluaygmbV9qaXQpOworICAgIGVsc2Ug
eworICAgICAgICBqdW1wKG5vdFRha2VuLCBGb3JjZUp1bXApOworICAgICAgICAKKyAgICAgICAg
cmlnaHROb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiks
IHJpZ2h0Q2hpbGQuaW5kZXgoKSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihWYWx1ZU51bGwpKSkpOworICAgIH0KKyAgICAKKyAgICBqdW1wKG5vdFRha2VuKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUmIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBT
cGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTEyNTA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1NywyNSArODU3LDUyIEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGlu
dGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKICAgICAgICAg
QVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxk
MigpKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9k
ZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKICAgICAgICAgICAgIGNvbXBpbGVQZWVw
SG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kaXRpb24pOwotICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQy
KCkpOwotICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihhdChu
b2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgICAgIGVsc2UgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGls
ZDIoKSkpKQogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJy
YW5jaE5vZGVJbmRleCwgZG91YmxlQ29uZGl0aW9uKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgfSBlbHNl
IGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
JkpTRmluYWxPYmplY3Q6OnNfaW5mbywgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwotICAgICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AoKSA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hv
dWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkg
ewotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNo
Tm9kZUluZGV4LCAmSlNBcnJheTo6c19pbmZvLCBpc0FycmF5UHJlZGljdGlvbik7Ci0gICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIH0gZWxzZQorICAgICAgICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVx
KSB7CisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoCisg
ICAgICAgICAgICAgICAgICAgIGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkp
IHsKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwgYnJhbmNoTm9kZUluZGV4LCAmSlNGaW5hbE9iamVjdDo6c19p
bmZvLAorICAgICAgICAgICAgICAgICAgICBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkg
eworICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KAorICAgICAg
ICAgICAgICAgICAgICBub2RlLCBicmFuY2hOb2RlSW5kZXgsICZKU0FycmF5OjpzX2luZm8sCisg
ICAgICAgICAgICAgICAgICAgIGlzQXJyYXlQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKQorICAg
ICAgICAgICAgICAgICAgICAgICAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICAgICAgICAgICAgICBub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpLCBicmFuY2hOb2RlSW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8sIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3RPck90aGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgYXQobm9kZS5jaGls
ZDIoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIGNv
bXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICAgICAg
ICAgICAgICBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCBicmFuY2hOb2RlSW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8sIGlzRmluYWxPYmplY3RQ
cmVkaWN0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlQXJyYXkoKQorICAgICAgICAgICAgICAgICAgICAgICAmJiBhdChub2RlLmNo
aWxkMigpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICAg
ICAgICAgICAgICBub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCBicmFuY2hOb2RlSW5kZXgs
CisgICAgICAgICAgICAgICAgICAgICZKU0FycmF5OjpzX2luZm8sIGlzQXJyYXlQcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlQXJyYXlPck90aGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgYXQobm9kZS5jaGls
ZDIoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICAgICAgICAgICAg
ICBub2RlLmNoaWxkMigpLCBub2RlLmNoaWxkMSgpLCBicmFuY2hOb2RlSW5kZXgsCisgICAgICAg
ICAgICAgICAgICAgICZKU0FycmF5OjpzX2luZm8sIGlzQXJyYXlQcmVkaWN0aW9uKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJhbmNoTm9k
ZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQogCisgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgdXNlKG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBtX2luZGV4SW5CbG9jayA9IGJyYW5jaEluZGV4SW5CbG9j
azsKICAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjcxOSwxNyArMjc0Niw2MSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21wYXJlKE5vZGUmIG5vZGUsCiAgICAgaWYgKGNvbXBpbGVQZWVwSG9sZUJyYW5jaChub2RlLCBj
b25kaXRpb24sIGRvdWJsZUNvbmRpdGlvbiwgb3BlcmF0aW9uKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxk
MSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQorICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAgICAgICAg
Y29tcGlsZUludGVnZXJDb21wYXJlKG5vZGUsIGNvbmRpdGlvbik7Ci0gICAgZWxzZSBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxk
MigpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIo
KSkpKSB7CiAgICAgICAgIGNvbXBpbGVEb3VibGVDb21wYXJlKG5vZGUsIGRvdWJsZUNvbmRpdGlv
bik7Ci0gICAgZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRT
cGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
KQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgJkpTRmluYWxPYmplY3Q6OnNf
aW5mbywgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwotICAgIGVsc2UgaWYgKG5vZGUub3AoKSA9
PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEo
KSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5v
ZGUsICZKU0FycmF5OjpzX2luZm8sIGlzQXJyYXlQcmVkaWN0aW9uKTsKLSAgICBlbHNlCi0gICAg
ICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAobm9k
ZS5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgeworICAg
ICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsICZKU0ZpbmFsT2JqZWN0OjpzX2lu
Zm8sIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFy
cmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICAgICAgICAg
IGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCAmSlNBcnJheTo6c19pbmZvLCBpc0FycmF5UHJl
ZGljdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpCisgICAgICAgICAgICAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JP
dGhlckVxdWFsaXR5KAorICAgICAgICAgICAgICAgIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQy
KCksICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8sCisgICAgICAgICAgICAgICAgaXNGaW5hbE9iamVj
dFByZWRpY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3RPck90aGVyKCkKKyAgICAgICAgICAgICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICBub2RlLmNoaWxkMigpLCBub2RlLmNo
aWxkMSgpLCAmSlNGaW5hbE9iamVjdDo6c19pbmZvLAorICAgICAgICAgICAgICAgIGlzRmluYWxP
YmplY3RQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFy
cmF5KCkKKyAgICAgICAgICAgICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUFy
cmF5T3JPdGhlcigpKSB7CisgICAgICAgICAgICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkoCisgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwg
JkpTQXJyYXk6OnNfaW5mbywKKyAgICAgICAgICAgICAgICBpc0FycmF5UHJlZGljdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKQorICAgICAg
ICAgICAgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXkoKSkgeworICAg
ICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICAg
ICAgICAgIG5vZGUuY2hpbGQyKCksIG5vZGUuY2hpbGQxKCksICZKU0FycmF5OjpzX2luZm8sCisg
ICAgICAgICAgICAgICAgaXNBcnJheVByZWRpY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQogICAgIAorICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcxNCw3ICsxNzE0LDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24pOwogICAgIHZvaWQg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsKKyAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAgICAgICBFZGdl
IGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBj
b25zdCBDbGFzc0luZm8qLCBQcmVkaWN0aW9uQ2hlY2tlcik7CiAgICAgdm9pZCBjb21waWxlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSYsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsK
KyAgICB2b2lkIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAg
RWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgY29uc3QgQ2xhc3NJbmZvKiwgUHJlZGlj
dGlvbkNoZWNrZXIpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUmKTsKICAgICB2b2lk
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlLCBjb25zdCBDbGFzc0lu
Zm8qLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2Fs
Tm90KE5vZGUmKTsK
</data>
<flag name="commit-queue"
          id="138994"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134708</attachid>
            <date>2012-03-29 18:34:08 -0700</date>
            <delta_ts>2012-03-29 18:54:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cmpeq_patch_2.diff</filename>
            <type>text/plain</type>
            <size>30265</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDEyLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhPT1iIGZvciBhIGJlaW5nIGFuIG9iamVjdCBhbmQgYiBiZWlu
ZyBlaXRoZXIgYW4gb2JqZWN0IG9yCisgICAgICAgIG51bGwvdW5kZWZpbmVkLCBhbmQgdmljZSB2
ZXJzYQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI2
NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIEltcGxlbWVudHMgYWRkaXRpb25hbCBvYmplY3QgZXF1YWxpdHkgb3B0aW1pemF0aW9ucyBm
b3IgdGhlIGNhc2UgdGhhdCBvbmUKKyAgICAgICAgb3BlcmFuZCBpcyBwcmVkaWN0ZWQgdG8gYmUg
YW4gZWFzaWx5IHNwZWN1bGF0ZWQgb2JqZWN0IChsaWtlIEZpbmFsT2JqZWN0IG9yCisgICAgICAg
IEFycmF5KSBhbmQgdGhlIG90aGVyIGlzIGVpdGhlciBhbiBlYXNpbHkgc3BlY3VsYXRlZCBvYmpl
Y3Qgb3IgT3RoZXIsIGkuZS4KKyAgICAgICAgTnVsbCBvciBVbmRlZmluZWQuCisgICAgICAgIAor
ICAgICAgICAyLTUlIHNwZWVkLXVwIG9uIFY4L3JheXRyYWNlLCBsZWFkaW5nIHRvIGEgc3ViLTEl
IHByb2dyZXNzaW9uIG9uIFY4LgorICAgICAgICAKKyAgICAgICAgSSBhbHNvIHRvb2sgdGhlIG9w
cG9ydHVuaXR5IHRvIGNsZWFuIHVwIHRoZSBjb250cm9sIGZsb3cgZm9yIHRoZSBzcGVjdWxhdGlv
bgorICAgICAgICBkZWNpc2lvbnMgaW4gdGhlIHZhcmlvdXMgQ29tcGFyZSBvcGNvZGVzLiBBbmQg
dG8gZml4IGEgYnVpbGQgYnVnIGluIFNhbXBsaW5nVG9vbC4KKyAgICAgICAgQW5kIHRvIHJlbW92
ZSBkZWJ1ZyBjcnVmdCBJIHN0dXBpZGx5IGNvbW1pdHRlZCBpbiBteSBsYXN0IHBhdGNoLgorICAg
ICAgICAKKyAgICAgICAgKiBieXRlY29kZS9TYW1wbGluZ1Rvb2wuaDoKKyAgICAgICAgKFNhbXBs
aW5nUmVnaW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVh
bGl0eSk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5
KToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKwogMjAxMi0wMy0y
OSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
ZmFjdG9yIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkgdG8gYmUgbGVzcyBleHBlbnNpdmUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmgJKHJl
dmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGlu
Z1Rvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAKICAgICAgICAgc3RhdGljIHZvaWQgc2FtcGxlKCk7CiAgICAgICAgIAotICAg
ICAgICBzdGF0aWMgdm9pZCBkdW1wKCk7CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIGR1bXAoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hh
ciogbV9uYW1lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTYsMTEgKzQxNiw0
NSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBmaWx0ZXIgPSBQcmVkaWN0SW50MzI7CiAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpCiAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0
TnVtYmVyOwotICAgICAgICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxICYmIE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKLSAgICAgICAgICAgIGZp
bHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKLSAgICAgICAgZWxzZSBpZiAobm9kZS5vcCgpID09
IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCi0g
ICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0QXJyYXk7Ci0gICAgICAgIGVsc2UgeworICAgICAg
ICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICBpZiAoKG1f
Z3JhcGguaXNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpCisgICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICB8fCAobV9ncmFwaC5pc0NvbnN0YW50KG5vZGUuY2hpbGQy
KCkuaW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpLmlzTnVsbCgpKSkgeworICAgICAgICAgICAgICAg
IC8vIFdlIGtub3cgdGhhdCB0aGlzIHdvbid0IGNsb2JiZXIgdGhlIHdvcmxkLiBCdXQgdGhhdCdz
IGFsbCB3ZSBrbm93LgorICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEJvb2xlYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9i
amVjdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGxl
ZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0QXJyYXk7CisgICAg
ICAgICAgICBlbHNlIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgcmln
aHQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOworICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9i
amVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgbGVmdC5z
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RP
dGhlcik7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIHJpZ2h0LnNob3VsZFNwZWN1
bGF0ZUFycmF5T3JPdGhlcigpKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIp
OworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4p
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodC5z
aG91bGRTcGVjdWxhdGVBcnJheSgpICYmIGxlZnQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVy
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RUb3A7CisgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbHRl
ciA9IFByZWRpY3RUb3A7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxv
Y2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw5ICszNjQsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIGlmIChmYWxzZSkKLSAg
ICAgICAgZGF0YUxvZygiZ2V0QnlJZCglcywgJXMpXG4iLCBKU1ZhbHVlOjpkZWNvZGUoYmFzZSku
ZGVzY3JpcHRpb24oKSwgcHJvcGVydHlOYW1lLT5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgCiAgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAgUHJvcGVydHlT
bG90IHNsb3QoYmFzZVZhbHVlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1
ZS5nZXQoZXhlYywgKnByb3BlcnR5TmFtZSwgc2xvdCkpOwpAQCAtNzQ2LDI4ICs3NDMsMTEgQEAg
c2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUdyZQogICAgIHJldHVybiBqc0xl
c3NFcTxmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSkpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqY2xhc3NOYW1lU3Bh
Y2UoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUuaXNDZWxsKCkgPyAiICIgOiAi
IjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGNsYXNzTmFtZShKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4g
dmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpLT5jbGFzc05hbWU7Ci19Ci0KIHNpemVfdCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBhcmVFcShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIGlmIChmYWxz
ZSkgewotICAgICAgICBkYXRhTG9nKCJjb21wYXJlRXEoJXMlcyVzLCAiLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSkuZGVzY3JpcHRpb24oKSwgY2xhc3NOYW1lU3BhY2UoSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpKSwgY2xhc3NOYW1lKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKSkp
OwotICAgICAgICBkYXRhTG9nKCIlcyVzJXMpXG4iLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MikuZGVzY3JpcHRpb24oKSwgY2xhc3NOYW1lU3BhY2UoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDIpKSwgY2xhc3NOYW1lKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKSkpOwotICAgIH0KLSAg
ICAgICAgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
OSw2ICs3MzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAg
ICAgfQogCiAgICAganVtcChub3RUYWtlbik7CisgICAgCisgICAgbV9pbmRleEluQmxvY2sgPSBt
X2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5zaXplKCkgLSAxOworICAgIG1fY29tcGls
ZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pCkBAIC0xMzk5LDYgKzE0MDIsMTQ3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RFcXVhbGkKICAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGls
ZUluZGV4KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0
T3JPdGhlckVxdWFsaXR5KAorICAgIEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsCisg
ICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rp
b25DaGVjaykKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxk
KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAKKyAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigp
OworICAgIEdQUlJlZyBvcDJUYWdHUFIgPSBvcDIudGFnR1BSKCk7CisgICAgR1BSUmVnIG9wMlBh
eWxvYWRHUFIgPSBvcDIucGF5bG9hZEdQUigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisgICAgCisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2Rl
KGxlZnRDaGlsZCkubV90eXBlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbGVmdENo
aWxkLmluZGV4KCksCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAg
IH0KKyAgICAKKyAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9n
cmFtcyBkbyBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCisgICAg
Ly8gb3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFu
Y2hlcyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0LgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJp
Z2h0Tm90Q2VsbCA9CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgb3AyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIAor
ICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBi
ZSBhIGNlbGwuIElmIHRoZSBDRkEgY2FuIHRlbGwgdXMgdGhhdCB0aGUKKyAgICAvLyBwcm9vZiwg
d2hlbiBmaWx0ZXJlZCBvbiBjZWxsLCBkZW1vbnN0cmF0ZXMgdGhhdCB3ZSBoYXZlIGFuIG9iamVj
dCBvZiB0aGUgZGVzaXJlZCB0eXBlCisgICAgLy8gKHByZWRpY3Rpb25DaGVjaygpIHdpbGwgdGVz
dCBmb3IgRmluYWxPYmplY3Qgb3IgQXJyYXksIGN1cnJlbnRseSksIHRoZW4gd2UgY2FuIHNraXAg
dGhlCisgICAgLy8gc3BlY3VsYXRpb24uCisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0
ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIFByZWRpY3RDZWxsKSkgeworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFn
R1BSLCBvcDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAorICAgICAgICAgICAgbV9q
aXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJQYXlsb2FkR1BSLCBK
U0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRo
aXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgc3RyYWlnaHQtZm9yd2FyZCBl
cXVhbGl0eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKKyAgICAvLyB2YWx1ZXMgYmVjYXVzZSBib3Ro
IGxlZnQgYW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBvYmplY3RzIHRoYXQgaGF2ZSBubyBzcGVj
aWFsIGVxdWFsaXR5CisgICAgLy8gcHJvdG9jb2xzLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9w
MUdQUiwgb3AyUGF5bG9hZEdQUik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgdHJ1ZUNhc2Ug
PSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgcmlnaHROb3RDZWxsLmxpbmsoJm1faml0KTsKKyAg
ICAKKyAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11
c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sgaWYgdGhhdCBpcyBlbm91Z2ggdG8KKyAgICAvLyBwcm92
ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxsIG9yIHVuZGVmaW5lZC4KKyAgICBpZiAoIWlzT3RoZXJQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiB+UHJlZGljdENl
bGwpKSB7CisgICAgICAgIG1faml0Lm1vdmUob3AyVGFnR1BSLCByZXN1bHRHUFIpOworICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhv
cDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpLCByaWdodENoaWxkLmluZGV4KCksCisgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlc3VsdEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgfQorICAgIAorICAgIGZhbHNlQ2FzZS5saW5r
KCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICB0cnVlQ2Fz
ZS5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgYm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoCisgICAgRWRnZSBsZWZ0Q2hp
bGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwKKyAgICBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbywgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGljdGlvbkNoZWNr
KQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOworICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIAor
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOworICAgIEpTVmFs
dWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgIAorICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVn
IG9wMlRhZ0dQUiA9IG9wMi50YWdHUFIoKTsKKyAgICBHUFJSZWcgb3AyUGF5bG9hZEdQUiA9IG9w
Mi5wYXlsb2FkR1BSKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobGVmdENoaWxkKS5t
X3R5cGUpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBsZWZ0Q2hpbGQuaW5kZXgoKSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgfQorICAgIAorICAg
IC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0g
YiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKKyAgICAvLyBvciBhbiBvYmpl
Y3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2Ug
dGhhdCBjYXNlIGZhc3QuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0K
KyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgCisgICAgLy8gV2Uga25v
dyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gSWYg
dGhlIENGQSBjYW4gdGVsbCB1cyB0aGF0IHRoZQorICAgIC8vIHByb29mLCB3aGVuIGZpbHRlcmVk
IG9uIGNlbGwsIGRlbW9uc3RyYXRlcyB0aGF0IHdlIGhhdmUgYW4gb2JqZWN0IG9mIHRoZSBkZXNp
cmVkIHR5cGUKKyAgICAvLyAocHJlZGljdGlvbkNoZWNrKCkgd2lsbCB0ZXN0IGZvciBGaW5hbE9i
amVjdCBvciBBcnJheSwgY3VycmVudGx5KSwgdGhlbiB3ZSBjYW4gc2tpcCB0aGUKKyAgICAvLyBz
cGVjdWxhdGlvbi4KKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUocmln
aHRDaGlsZCkubV90eXBlICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJUYWdHUFIsIG9wMlBheWxv
YWRHUFIpLCByaWdodENoaWxkLmluZGV4KCksCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMlBheWxvYWRHUFIsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGNsYXNzSW5mbykpKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBr
bm93IHRoYXQgd2UgY2FuIHBlcmZvcm0gYSBzdHJhaWdodC1mb3J3YXJkIGVxdWFsaXR5IGNvbXBh
cmlzb24gb24gcG9pbnRlcgorICAgIC8vIHZhbHVlcyBiZWNhdXNlIGJvdGggbGVmdCBhbmQgcmln
aHQgYXJlIHBvaW50ZXJzIHRvIG9iamVjdHMgdGhhdCBoYXZlIG5vIHNwZWNpYWwgZXF1YWxpdHkK
KyAgICAvLyBwcm90b2NvbHMuCisgICAgYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBv
cDFHUFIsIG9wMlBheWxvYWRHUFIsIHRha2VuKTsKKyAgICAKKyAgICAvLyBXZSBrbm93IHRoYXQg
d2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3Qgbm90IGJlIGEgY2VsbC4gQ2hlY2sg
aWYgdGhhdCBpcyBlbm91Z2ggdG8KKyAgICAvLyBwcm92ZSB0aGF0IGl0IGlzIGVpdGhlciBudWxs
IG9yIHVuZGVmaW5lZC4KKyAgICBpZiAoaXNPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5QcmVkaWN0Q2VsbCkpCisgICAgICAgIHJpZ2h0Tm90Q2Vs
bC5saW5rKCZtX2ppdCk7CisgICAgZWxzZSB7CisgICAgICAgIGp1bXAobm90VGFrZW4sIEZvcmNl
SnVtcCk7CisgICAgICAgIAorICAgICAgICByaWdodE5vdENlbGwubGluaygmbV9qaXQpOworICAg
ICAgICBtX2ppdC5tb3ZlKG9wMlRhZ0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AyVGFnR1BSLCBv
cDJQYXlsb2FkR1BSKSwgcmlnaHRDaGlsZC5pbmRleCgpLAorICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRH
UFIsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSkpOworICAgIH0KKyAgICAKKyAgICBqdW1wKG5vdFRha2VuKTsKK30KKwogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDExMjUwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMyw2ICs3MTMsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgfQogCiAgICAganVtcChub3RUYWtlbik7
CisKKyAgICBtX2luZGV4SW5CbG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PnNpemUoKSAtIDE7CisgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5v
ZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKQEAgLTE0ODUsNiArMTQ4OCwxNDUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgK
KyAgICBFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLAorICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0aW9uQ2hlY2spCit7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgCisgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICBHUFJSZWcgb3Ay
R1BSID0gb3AyLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgCisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKGxlZnRDaGlsZCku
bV90eXBlKSkgeworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbGVmdENoaWxkLmluZGV4KCksCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxs
OjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBJdCBzZWVtcyB0
aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBkbyBhID09IGIgd2hlcmUgYiBtYXkg
YmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCisgICAgLy8gb3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFs
bHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0
LgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90Q2VsbCA9CisgICAgICAgIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMkdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMg
YnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiBJZiB0aGUgQ0ZBIGNhbiB0ZWxsIHVz
IHRoYXQgdGhlCisgICAgLy8gcHJvb2YsIHdoZW4gZmlsdGVyZWQgb24gY2VsbCwgZGVtb25zdHJh
dGVzIHRoYXQgd2UgaGF2ZSBhbiBvYmplY3Qgb2YgdGhlIGRlc2lyZWQgdHlwZQorICAgIC8vIChw
cmVkaWN0aW9uQ2hlY2soKSB3aWxsIHRlc3QgZm9yIEZpbmFsT2JqZWN0IG9yIEFycmF5LCBjdXJy
ZW50bHkpLCB0aGVuIHdlIGNhbiBza2lwIHRoZQorICAgIC8vIHNwZWN1bGF0aW9uLgorICAgIGlm
ICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShyaWdodENoaWxkKS5tX3R5cGUgJiBQ
cmVkaWN0Q2VsbCkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSLCBK
U0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRo
aXMgcG9pbnQgd2Uga25vdyB0aGF0IHdlIGNhbiBwZXJmb3JtIGEgc3RyYWlnaHQtZm9yd2FyZCBl
cXVhbGl0eSBjb21wYXJpc29uIG9uIHBvaW50ZXIKKyAgICAvLyB2YWx1ZXMgYmVjYXVzZSBib3Ro
IGxlZnQgYW5kIHJpZ2h0IGFyZSBwb2ludGVycyB0byBvYmplY3RzIHRoYXQgaGF2ZSBubyBzcGVj
aWFsIGVxdWFsaXR5CisgICAgLy8gcHJvdG9jb2xzLgorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9w
MUdQUiwgb3AyR1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB0cnVlQ2FzZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAKKyAgICByaWdodE5vdENlbGwubGluaygmbV9qaXQpOworICAgIAorICAg
IC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3Qg
YmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bworICAgIC8vIHByb3ZlIHRoYXQg
aXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgorICAgIGlmICghaXNPdGhlclByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKHJpZ2h0Q2hpbGQpLm1fdHlwZSAmIH5QcmVkaWN0Q2VsbCkpIHsK
KyAgICAgICAgbV9qaXQubW92ZShvcDJHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmFu
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
IEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIHJpZ2h0Q2hpbGQuaW5kZXgoKSwKKyAgICAg
ICAgICAgIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHJlc3VsdEdQUiwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIH0K
KyAgICAKKyAgICBmYWxzZUNhc2UubGluaygmbV9qaXQpOworICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOworICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CisgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoCisgICAgRWRnZSBs
ZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwKKyAg
ICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGljdGlv
bkNoZWNrKQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwor
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAg
IEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwor
ICAgIAorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOworICAg
IEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkKTsKKyAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgIAorICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAg
R1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0
LmdwcigpOworICAgIAorICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShs
ZWZ0Q2hpbGQpLm1fdHlwZSkpIHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMUdQUiksIGxlZnRDaGlsZC5pbmRleCgpLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFH
UFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNsYXNzSW5mbykpKTsKKyAgICB9CisgICAgCisgICAgLy8g
SXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHdoZW4gcHJvZ3JhbXMgZG8gYSA9PSBiIHdo
ZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3VuZGVmaW5lZAorICAgIC8vIG9yIGFuIG9iamVjdCwg
YiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFsYW5jZSB0aGUgYnJhbmNoZXMgdG8gbWFrZSB0aGF0
IGNhc2UgZmFzdC4KKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByaWdodE5vdENlbGwgPQorICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgLy8gV2Uga25vdyB0aGF0IHdp
dGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gSWYgdGhlIENGQSBj
YW4gdGVsbCB1cyB0aGF0IHRoZQorICAgIC8vIHByb29mLCB3aGVuIGZpbHRlcmVkIG9uIGNlbGws
IGRlbW9uc3RyYXRlcyB0aGF0IHdlIGhhdmUgYW4gb2JqZWN0IG9mIHRoZSBkZXNpcmVkIHR5cGUK
KyAgICAvLyAocHJlZGljdGlvbkNoZWNrKCkgd2lsbCB0ZXN0IGZvciBGaW5hbE9iamVjdCBvciBB
cnJheSwgY3VycmVudGx5KSwgdGhlbiB3ZSBjYW4gc2tpcCB0aGUKKyAgICAvLyBzcGVjdWxhdGlv
bi4KKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCku
bV90eXBlICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAg
ICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLmluZGV4KCks
CisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMkdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2xhc3NJbmZvKSkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3ZSBjYW4gcGVyZm9ybSBhIHN0cmFpZ2h0
LWZvcndhcmQgZXF1YWxpdHkgY29tcGFyaXNvbiBvbiBwb2ludGVyCisgICAgLy8gdmFsdWVzIGJl
Y2F1c2UgYm90aCBsZWZ0IGFuZCByaWdodCBhcmUgcG9pbnRlcnMgdG8gb2JqZWN0cyB0aGF0IGhh
dmUgbm8gc3BlY2lhbCBlcXVhbGl0eQorICAgIC8vIHByb3RvY29scy4KKyAgICBicmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFHUFIsIG9wMkdQUiwgdGFrZW4pOworICAgIAorICAg
IC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0Q2hpbGQgbXVzdCBub3Qg
YmUgYSBjZWxsLiBDaGVjayBpZiB0aGF0IGlzIGVub3VnaCB0bworICAgIC8vIHByb3ZlIHRoYXQg
aXQgaXMgZWl0aGVyIG51bGwgb3IgdW5kZWZpbmVkLgorICAgIGlmIChpc090aGVyUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUocmlnaHRDaGlsZCkubV90eXBlICYgflByZWRpY3RDZWxsKSkKKyAg
ICAgICAgcmlnaHROb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBlbHNlIHsKKyAgICAgICAganVt
cChub3RUYWtlbiwgRm9yY2VKdW1wKTsKKyAgICAgICAgCisgICAgICAgIHJpZ2h0Tm90Q2VsbC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUob3AyR1BSLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5k
ZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
CisgICAgICAgICAgICBCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCByaWdodENoaWxkLmlu
ZGV4KCksCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSkpKTsKKyAgICB9CisgICAgCisgICAganVtcChub3RUYWtlbik7Cit9CisKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExMjUwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NTcsMjUgKzg1Nyw1MiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVCcmFuCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2Rl
cyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCiAgICAgICAgIEFTU0VSVChub2RlLmFk
anVzdGVkUmVmQ291bnQoKSA9PSAxKTsKIAotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBh
dChub2RlLmNoaWxkMigpKSkpCiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZGl0aW9uKTsKLSAgICAgICAgICAgIHVzZShu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAg
fSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSks
IGF0KG5vZGUuY2hpbGQyKCkpKSkgeworICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKICAgICAg
ICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgs
IGRvdWJsZUNvbmRpdGlvbik7Ci0gICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgp
ID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2Rl
LmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsICZKU0ZpbmFsT2JqZWN0
OjpzX2luZm8sIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKLSAgICAgICAgICAgIHVzZShub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgfSBl
bHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFy
cmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgJkpT
QXJyYXk6OnNfaW5mbywgaXNBcnJheVByZWRpY3Rpb24pOwotICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICB9IGVs
c2UKKyAgICAgICAgZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgeworICAgICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KAorICAgICAgICAgICAgICAg
ICAgICBhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoCisgICAgICAgICAgICAgICAgICAg
IG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgJkpTRmluYWxPYmplY3Q6OnNfaW5mbywKKyAgICAgICAg
ICAgICAgICAgICAgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOworICAgICAgICAgICAgfSBlbHNl
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCAmSlNBcnJheTo6c19pbmZvLAorICAgICAgICAgICAgICAg
ICAgICBpc0FycmF5UHJlZGljdGlvbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90
aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9y
T3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDEoKSwgbm9kZS5j
aGlsZDIoKSwgYnJhbmNoTm9kZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAmSlNGaW5hbE9i
amVjdDo6c19pbmZvLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpCisgICAgICAgICAgICAgICAgICAgICAgICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVP
YmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5j
aGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgYnJhbmNoTm9kZUluZGV4LAorICAgICAgICAgICAgICAg
ICAgICAmSlNGaW5hbE9iamVjdDo6c19pbmZvLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFy
cmF5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgYnJhbmNoTm9kZUluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAmSlNBcnJheTo6c19pbmZvLCBpc0FycmF5UHJlZGljdGlvbik7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhl
cigpCisgICAgICAgICAgICAgICAgICAgICAgICYmIGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZUFycmF5KCkpIHsKKyAgICAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RU
b09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDIo
KSwgbm9kZS5jaGlsZDEoKSwgYnJhbmNoTm9kZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAm
SlNBcnJheTo6c19pbmZvLCBpc0FycmF5UHJlZGljdGlvbik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwgYnJh
bmNoTm9kZUluZGV4LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZGl0
aW9uLCBvcGVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAor
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgbV9pbmRleEluQmxvY2sgPSBicmFuY2hJbmRleEluQmxvY2s7CiAgICAgICAgIG1f
Y29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI3MTksMTcgKzI3NDYsNjEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBu
b2RlLAogICAgIGlmIChjb21waWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29uZGl0aW9uLCBkb3Vi
bGVDb25kaXRpb24sIG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUu
Y2hpbGQyKCkpKSkKKyAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2Rl
LmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CiAgICAgICAgIGNvbXBpbGVJbnRlZ2Vy
Q29tcGFyZShub2RlLCBjb25kaXRpb24pOwotICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZU51bWJlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAg
ICBjb21waWxlRG91YmxlQ29tcGFyZShub2RlLCBkb3VibGVDb25kaXRpb24pOwotICAgIGVsc2Ug
aWYgKG5vZGUub3AoKSA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29t
cGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8sIGlzRmluYWxP
YmplY3RQcmVkaWN0aW9uKTsKLSAgICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxICYm
IE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNo
aWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCAmSlNBcnJheTo6
c19pbmZvLCBpc0FycmF5UHJlZGljdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUub3AoKSA9PSBDb21w
YXJlRXEpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKKyAgICAgICAgICAgIGNvbXBp
bGVPYmplY3RFcXVhbGl0eShub2RlLCAmSlNGaW5hbE9iamVjdDo6c19pbmZvLCBpc0ZpbmFsT2Jq
ZWN0UHJlZGljdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CisgICAgICAgICAgICBjb21waWxlT2JqZWN0
RXF1YWxpdHkobm9kZSwgJkpTQXJyYXk6OnNfaW5mbywgaXNBcnJheVByZWRpY3Rpb24pOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKQorICAgICAgICAg
ICAgJiYgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVy
KCkpIHsKKyAgICAgICAgICAgIGNvbXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgK
KyAgICAgICAgICAgICAgICBub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpLCAmSlNGaW5hbE9i
amVjdDo6c19pbmZvLAorICAgICAgICAgICAgICAgIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigp
CisgICAgICAgICAgICAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdCgpKSB7CisgICAgICAgICAgICBjb21waWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkoCisgICAgICAgICAgICAgICAgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDEoKSwgJkpTRmlu
YWxPYmplY3Q6OnNfaW5mbywKKyAgICAgICAgICAgICAgICBpc0ZpbmFsT2JqZWN0UHJlZGljdGlv
bik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheSgpCisgICAgICAg
ICAgICAmJiBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkg
eworICAgICAgICAgICAgY29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KAorICAg
ICAgICAgICAgICAgIG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCksICZKU0FycmF5OjpzX2lu
Zm8sCisgICAgICAgICAgICAgICAgaXNBcnJheVByZWRpY3Rpb24pOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkKKyAgICAgICAgICAgICYmIGF0KG5v
ZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkpIHsKKyAgICAgICAgICAgIGNvbXBp
bGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgICAgICAgICBub2RlLmNo
aWxkMigpLCBub2RlLmNoaWxkMSgpLCAmSlNBcnJheTo6c19pbmZvLAorICAgICAgICAgICAgICAg
IGlzQXJyYXlQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KICAgICAKKyAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2Rl
LCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxMTI1MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MTQsNyArMTcxNCwxMSBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5v
ZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29t
cGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBjb25zdCBD
bGFzc0luZm8qLCBQcmVkaWN0aW9uQ2hlY2tlcik7CisgICAgdm9pZCBjb21waWxlUGVlcEhvbGVP
YmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSgKKyAgICAgICAgRWRnZSBsZWZ0Q2hpbGQsIEVk
Z2UgcmlnaHRDaGlsZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgY29uc3QgQ2xhc3NJbmZv
KiwgUHJlZGljdGlvbkNoZWNrZXIpOwogICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5v
ZGUmLCBjb25zdCBDbGFzc0luZm8qLCBQcmVkaWN0aW9uQ2hlY2tlcik7CisgICAgdm9pZCBjb21w
aWxlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoCisgICAgICAgIEVkZ2UgbGVmdENoaWxk
LCBFZGdlIHJpZ2h0Q2hpbGQsIGNvbnN0IENsYXNzSW5mbyosIFByZWRpY3Rpb25DaGVja2VyKTsK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSB2YWx1ZSwgY29uc3QgQ2xhc3NJbmZvKiwgYm9vbCBuZWVk
U3BlY3VsYXRpb25DaGVjayk7CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChOb2RlJik7Cg==
</data>
<flag name="review"
          id="139031"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>