<?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>104890</bug_id>
          
          <creation_ts>2012-12-13 01:08:00 -0800</creation_ts>
          <short_desc>Attempt to rationalize and simplify WTF::binarySearch</short_desc>
          <delta_ts>2012-12-26 05:52:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</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>
          
          <blocked>105767</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>oliver</cc>
    
    <cc>pdr</cc>
    
    <cc>philn</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>790391</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 01:08:00 -0800</bug_when>
    <thetext>Currently the WTF::binarySearch API is a bit of a mess.  Here are the things that are wrong with it:

1) Three versions of binarySearch(), one that uses template specialization to determine the key extractor, one that uses a functor, and one that accepts array-like types that support operator[] but not operator++/--.

2) Inability to easily attempt a binary search an return some &quot;error code&quot; when the element is not found.  Instead the only mode like this returns an adjacent element, so then you have to do more checks to validate whether the element belonged to the array.

3) Inaccurate description of the approximate search.  To do an approximate search you pass WTF::KeyMustNotBePresentInArray, which to me implies that you want to assert that the key *is not* present.  In fact this mode instead asking the search to *not assert* that the key *is* present in the array.  That&apos;s kind of a bid difference.

We should fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790393</commentid>
    <comment_count>1</comment_count>
      <attachid>179226</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 01:13:36 -0800</bug_when>
    <thetext>Created attachment 179226
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790395</commentid>
    <comment_count>2</comment_count>
      <attachid>179227</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 01:14:38 -0800</bug_when>
    <thetext>Created attachment 179227
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790400</commentid>
    <comment_count>3</comment_count>
      <attachid>179227</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-13 01:21:44 -0800</bug_when>
    <thetext>Comment on attachment 179227
the patch

Attachment 179227 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15316198</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790418</commentid>
    <comment_count>4</comment_count>
      <attachid>179231</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 01:58:13 -0800</bug_when>
    <thetext>Created attachment 179231
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790422</commentid>
    <comment_count>5</comment_count>
      <attachid>179232</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 02:05:21 -0800</bug_when>
    <thetext>Created attachment 179232
StdLibExtras.h

Diff really did a poor job of showing what I changed.  Uploading my copy of StdLibExtras.h for clarity.  For most purposes, the code relating to binarySearch was just completely changed so this might make for easier reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790423</commentid>
    <comment_count>6</comment_count>
      <attachid>179231</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-12-13 02:05:57 -0800</bug_when>
    <thetext>Comment on attachment 179231
the patch

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

Here&apos;s review comments on the implementation, looking at call sites now.

&gt; Source/WTF/ChangeLog:16
&gt; +        Binary search now has three modes:
&gt; +
&gt; +        The default, aka KeyMustBePresentInArray: assert that the key was found, but return
&gt; +        an adjacent element if it wasn&apos;t found, if asserts are turned off.
&gt; +        
&gt; +        KeyMightNotBePresentInArray, aka tryBinarySearch: return 0 if the key wasn&apos;t found.
&gt; +        
&gt; +        ReturnAdjacentElementIfKeyIsNotPresent, aka approximateBinarySearch: if the key is
&gt; +        not found, return an adjacent element (either the left or right; no guarantee which).

This comment reflects the older version more. You should probably mention the three public interface functions, and as a side note maybe the corresponding flags passed to binarySearchImpl

&gt; Source/WTF/wtf/StdLibExtras.h:188
&gt; +    // The array must contain at least one element (pre-condition, array does conatin key).

tyop - should be &quot;contain&quot;, not &quot;contain&quot;

&gt; Source/WTF/wtf/StdLibExtras.h:228
&gt; +// If the element is not found, crash if asserts are enabled, and behave like AlwaysReturnAdjacentElement in release builds.

Should probably say &quot;behave like tryBinarySearch&quot; instead of &quot;behave like AlwaysReturnAdjacentElement&quot; (especially since the actual name is ReturnAdjacentElementIfKeyIsNotPresent)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790425</commentid>
    <comment_count>7</comment_count>
      <attachid>179231</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-13 02:09:50 -0800</bug_when>
    <thetext>Comment on attachment 179231
the patch

Attachment 179231 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15316213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790429</commentid>
    <comment_count>8</comment_count>
      <attachid>179233</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 02:12:52 -0800</bug_when>
    <thetext>Created attachment 179233
the patch

Build fixes, and style fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790434</commentid>
    <comment_count>9</comment_count>
      <attachid>179233</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2012-12-13 02:23:54 -0800</bug_when>
    <thetext>Comment on attachment 179233
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790448</commentid>
    <comment_count>10</comment_count>
      <attachid>179233</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-13 02:50:39 -0800</bug_when>
    <thetext>Comment on attachment 179233
the patch

Attachment 179233 did not pass win-ews (win):
Output: http://queues.webkit.org/results/15314201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791125</commentid>
    <comment_count>11</comment_count>
      <attachid>179378</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 17:00:21 -0800</bug_when>
    <thetext>Created attachment 179378
patch for landing

Attempting to work around VS weirdness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>791288</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-12-13 20:43:07 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/137709</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179226</attachid>
            <date>2012-12-13 01:13:36 -0800</date>
            <delta_ts>2012-12-13 01:14:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>binarysearch.patch</filename>
            <type>text/plain</type>
            <size>27629</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEyLTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXR0ZW1wdCB0byByYXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1
c2luZyB0aGUgbmV3IGJpbmFyeVNlYXJjaCgpIEFQSS4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdp
bkZvclJldHVybik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdl
dEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICog
ZGZnL0RGR01pbmlmaWVkR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBo
OjphdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhGb3JCeXRlY29kZUluZGV4KToKKwogMjAx
Mi0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9TUiBl
eGl0IGNvbXBpbGVyIHNob3VsZCBlbWl0IGNvZGUgZm9yIHJlc2V0dGluZyB0aGUgZXhlY3V0aW9u
IGNvdW50ZXIgdGhhdCBtYXRjaGVzIHRoZSBsb2dpYyBvZiBFeGVjdXRpb25Db3VudGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxLDcgKzI3OTEsOCBAQCB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KEV4ZWNTCiAgICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVj
dXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKICAgICAg
ICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9m
ZnNldCogcmVzdWx0ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxJbmRp
Y2VzLmJlZ2luKCksIGNhbGxJbmRpY2VzLnNpemUoKSwgY2FsbFJldHVybk9mZnNldCk7CisgICAg
ICAgICAgICBiaW5hcnlTZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgICAgICBjYWxsSW5kaWNlcy5iZWdpbigpLCBjYWxsSW5kaWNl
cy5zaXplKCksIGNhbGxSZXR1cm5PZmZzZXQsIGdldENhbGxSZXR1cm5PZmZzZXQpOwogICAgICAg
ICBBU1NFUlQocmVzdWx0LT5jYWxsUmV0dXJuT2Zmc2V0ID09IGNhbGxSZXR1cm5PZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0LT5ieXRlY29kZU9mZnNldDsKICAgICB9CkBAIC0yODE2LDgg
KzI4MTcsMTEgQEAgYm9vbCBDb2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4oUmV0dQogICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBl
bnRyeSA9IGJpbmFyeVNlYXJjaDxDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0LCB1bnNpZ25l
ZCwgZ2V0Q2FsbFJldHVybk9mZnNldEZvckNvZGVPcmlnaW4+KGNvZGVPcmlnaW5zKCkuYmVnaW4o
KSwgY29kZU9yaWdpbnMoKS5zaXplKCksIG9mZnNldCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50
SW5BcnJheSk7Ci0gICAgaWYgKGVudHJ5LT5jYWxsUmV0dXJuT2Zmc2V0ICE9IG9mZnNldCkKKyAg
ICBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBlbnRyeSA9CisgICAgICAgIHRyeUJpbmFy
eVNlYXJjaDxDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0LCB1bnNpZ25lZD4oCisgICAgICAg
ICAgICBjb2RlT3JpZ2lucygpLmJlZ2luKCksIGNvZGVPcmlnaW5zKCkuc2l6ZSgpLCBvZmZzZXQs
CisgICAgICAgICAgICBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbik7CisgICAgaWYg
KCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvZGVPcmlnaW4gPSBlbnRyeS0+
Y29kZU9yaWdpbjsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDMw
ICsyMzgsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IGdldFN0dWJJbmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lk
KiwgZ2V0U3RydWN0dXJlU3R1YkluZm9SZXR1cm5Mb2NhdGlvbj4obV9zdHJ1Y3R1cmVTdHViSW5m
b3MuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxTdHJ1Y3R1cmVTdHVi
SW5mbywgdm9pZCo+KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJlU3R1
YkluZm9zLnNpemUoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRTdHJ1Y3R1cmVTdHViSW5m
b1JldHVybkxvY2F0aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgZ2V0U3R1YkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB1bnNpZ25lZCwg
Z2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4PihtX3N0cnVjdHVyZVN0dWJJbmZvcy5i
ZWdpbigpLCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWdu
ZWQ+KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJlU3R1YkluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4KSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgICAgIAogICAgICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKihiaW5h
cnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4o
bV9ieVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgp
KTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVk
PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRl
eCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICB9CiAKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8Q2FsbExpbmtJ
bmZvLCB2b2lkKiwgZ2V0Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24+KG1fY2FsbExpbmtJbmZv
cy5iZWdpbigpLCBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQq
PihtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKSwgbV9jYWxsTGlua0luZm9zLnNpemUoKSwgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbikpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gKihi
aW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNv
ZGVJbmRleD4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCks
IGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxs
TGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKSwgbV9jYWxsTGlua0lu
Zm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleCkp
OwogICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMzU5LDE1ICszNTksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5v
c3JFbnRyeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICBERkc6Ok9TUkVudHJ5RGF0YSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPAotICAgICAgICAgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFCeXRl
Y29kZUluZGV4PigKLSAgICAgICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdp
bigpLCBtX2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgYnl0
ZWNvZGVJbmRleCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0LT5tX2J5dGVjb2RlSW5kZXggIT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZD4oCisg
ICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdpbigpLCBtX2RmZ0RhdGEtPm9z
ckVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgICAgICBERkc6OmdldE9T
UkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1
bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNvbnN0IERGRzo6T1NSRXhpdCYgb3NyRXhpdCkKQEAgLTY3
OCw3ICs2NzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkK
ICAgICAgICAgewotICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBXVEY6OmdlbmVy
aWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBpbnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2Rl
T2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gZ2VuZXJpY0JpbmFy
eVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludD4oCisgICAgICAgICAgICAgICAgbV92YWx1ZVByb2Zp
bGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAg
ICAgICBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldDxWYWx1ZVByb2ZpbGU+KTsKICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwogICAgICAgICAg
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAog
ICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRPcGNv
ZGVJRCgKQEAgLTcxMSw3ICs3MDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmFyZUNh
c2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9yYXJlQ2Fz
ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUs
IGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fcmFyZUNhc2VQcm9maWxl
cywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludD4o
CisgICAgICAgICAgICAgICAgbV9yYXJlQ2FzZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMu
c2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAgICAgICBnZXRSYXJlQ2FzZVByb2Zp
bGVCeXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNzM5LDcgKzczNyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHNwZWNpYWxGYXN0Q2Fz
ZVByb2ZpbGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlc1tp
bmRleF07IH0KICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50
LCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV9zcGVjaWFsRmFzdENhc2VQcm9m
aWxlcywgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybiBnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwg
aW50PigKKyAgICAgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNp
YWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAg
ICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVP
ZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
Mzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc2OSw3ICs3NjksNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlu
a2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6
OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2NrSW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFy
Z2V0cy5iZWdpbigpLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6
S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykp
OworICAgIHJldHVybiAqV1RGOjpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxp
bmtpbmdUYXJnZXRzLmJlZ2luKCksIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdp
biwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWRHcmFwaC5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDggQEAgcHVi
bGljOgogCiAgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsK
LSAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQotICAgICAgICAgICAgYmluYXJ5U2VhcmNoPE1pbmlm
aWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKLSAgICAgICAgICAg
ICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBXVEY6OktleU11
c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKLSAgICAgICAgaWYgKGVudHJ5LT5pbmRleCgpICE9IG5v
ZGVJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gZW50cnk7Cisg
ICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXg+KAor
ICAgICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1fbGlzdC5zaXplKCksIG5vZGVJbmRleCwgTWlu
aWZpZWROb2RlOjpnZXRJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0
IE1pbmlmaWVkTm9kZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMzc0MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRD
b2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAg
ICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6
OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFw
LnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQs
IHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCks
IHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgICAgIEFT
U0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CkBA
IC03NDksNyArNzQ5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVC
bG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxp
bmVDb2RlQmxvY2spOwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2Vh
cmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4KTsKICAgICAK
ICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRl
eCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lv
biAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7Ci0gICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAg
ICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7CkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNl
bGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBG
b3IoYmFzZWxpbmVDb2RlQmxvY2spOwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2ln
bmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRD
b2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRD
b2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4
KTsKICAgICAKICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0
ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQogICAgIAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
IG1hcDsKICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKG1hcCk7Ci0gICAgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0
ZWNvZGVJbmRleD4obWFwLmJlZ2luKCksIG1hcC5zaXplKCksIHBjIC0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpKTsKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZD4obWFw
LmJlZ2luKCksIG1hcC5zaXplKCksIHBjIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwogICAgIEFT
U0VSVChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Qnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDEzNzQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIEJ5dGVjb2RlU2VxdWVuY2U6
On5CeXRlY29kZVNlcXVlbmNlKCkKIAogdW5zaWduZWQgQnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhG
b3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGJpbmFyeVNlYXJjaDxCeXRlY29kZSwgdW5zaWduZWQsIGdldEJ5dGVjb2RlSW5kZXhGb3JC
eXRlY29kZT4oY29uc3RfY2FzdDxCeXRlY29kZSo+KG1fc2VxdWVuY2UuYmVnaW4oKSksIG1fc2Vx
dWVuY2Uuc2l6ZSgpLCBieXRlY29kZUluZGV4KSAtIG1fc2VxdWVuY2UuYmVnaW4oKTsKKyAgICBy
ZXR1cm4gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlLCB1bnNpZ25lZD4oY29uc3RfY2FzdDxCeXRlY29k
ZSo+KG1fc2VxdWVuY2UuYmVnaW4oKSksIG1fc2VxdWVuY2Uuc2l6ZSgpLCBieXRlY29kZUluZGV4
LCBnZXRCeXRlY29kZUluZGV4Rm9yQnl0ZWNvZGUpIC0gbV9zZXF1ZW5jZS5iZWdpbigpOwogfQog
CiBjb25zdCBCeXRlY29kZSYgQnl0ZWNvZGVTZXF1ZW5jZTo6Zm9yQnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBieXRlY29kZUluZGV4KSBjb25zdApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzU3MykKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTIt
MTItMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRlbXB0
IHRvIHJhdGlvbmFsaXplIGFuZCBzaW1wbGlmeSBXVEY6OmJpbmFyeVNlYXJjaAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmluYXJ5IHNlYXJjaCBub3cg
aGFzIHRocmVlIG1vZGVzOgorCisgICAgICAgIFRoZSBkZWZhdWx0LCBha2EgS2V5TXVzdEJlUHJl
c2VudEluQXJyYXk6IGFzc2VydCB0aGF0IHRoZSBrZXkgd2FzIGZvdW5kLCBidXQgcmV0dXJuCisg
ICAgICAgIGFuIGFkamFjZW50IGVsZW1lbnQgaWYgaXQgd2Fzbid0IGZvdW5kLCBpZiBhc3NlcnRz
IGFyZSB0dXJuZWQgb2ZmLgorICAgICAgICAKKyAgICAgICAgS2V5TWlnaHROb3RCZVByZXNlbnRJ
bkFycmF5LCBha2EgdHJ5QmluYXJ5U2VhcmNoOiByZXR1cm4gMCBpZiB0aGUga2V5IHdhc24ndCBm
b3VuZC4KKyAgICAgICAgCisgICAgICAgIFJldHVybkFkamFjZW50RWxlbWVudElmS2V5SXNOb3RQ
cmVzZW50LCBha2EgYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g6IGlmIHRoZSBrZXkgaXMKKyAgICAg
ICAgbm90IGZvdW5kLCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCAoZWl0aGVyIHRoZSBsZWZ0
IG9yIHJpZ2h0OyBubyBndWFyYW50ZWUgd2hpY2gpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
bHNvIG1ha2VzIGFsbCB2YXJpYW50cyBvZiBiaW5hcnlTZWFyY2ggdXNlIGZ1bmN0b3JzLCBhbmQg
cmVtb3ZlcyB0aGUgcHJldmlvdXMKKyAgICAgICAgZnVuY3RvciB2YXJpYW50LgorCisgICAgICAg
ICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpiaW5hcnlTZWFyY2gpOgorICAg
ICAgICAoV1RGOjp0cnlCaW5hcnlTZWFyY2gpOgorICAgICAgICAoV1RGOjphcHByb3hpbWF0ZUJp
bmFyeVNlYXJjaCk6CisgICAgICAgIChXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2gpOgorICAgICAg
ICAoV1RGOjp0cnlHZW5lcmljQmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdURjo6YXBwcm94aW1h
dGVHZW5lcmljQmluYXJ5U2VhcmNoKToKKwogMjAxMi0xMi0xMiAgSWx5YSBUaWtob25vdnNreSAg
PGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1l
bW9yeSBJbnN0cnVtZW50YXRpb246IHJlbW92ZSBmYWtlIHJvb3QgTWVtb3J5T2JqZWN0SW5mby4K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDE0ICsxNzcsMTUgQEAg
dGVtcGxhdGU8c2l6ZV90IGRpdmlzb3I+IGlubGluZSBzaXplX3QgcgogfQogCiBlbnVtIEJpbmFy
eVNlYXJjaE1vZGUgewotICAgIEtleU11c3RCZVByZXNlbnRJbkFycmF5LAotICAgIEtleU11c3RO
b3RCZVByZXNlbnRJbkFycmF5CisgICAgS2V5TXVzdEJlUHJlc2VudEluQXJyYXksIC8vIElmIHRo
ZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYW5k
IGJlaGF2ZSBsaWtlIEFsd2F5c1JldHVybkFkamFjZW50RWxlbWVudCBpbiByZWxlYXNlIGJ1aWxk
cy4KKyAgICBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXksIC8vIFJldHVybiB6ZXJvIGlmIHRo
ZSBlbGVtZW50IGlzIG5vdCBmb3VuZC4KKyAgICBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlz
Tm90UHJlc2VudCAvLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhlIGxl
ZnQsIG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVuIGZv
dW5kLgogfTsKIAogLy8gQmluYXJ5IHNlYXJjaCBhbGdvcml0aG0sIGNhbGxzIGV4dHJhY3RLZXkg
b24gcHJlLXNvcnRlZCBlbGVtZW50cyBpbiBhcnJheSwKIC8vIGNvbXBhcmVzIHJlc3VsdCB3aXRo
IGtleSAoS2V5VHlwZXMgc2hvdWxkIGJlIGNvbXBhcmFibGUgd2l0aCAnPT0nLCBhbmQgJzwnKS4K
LXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtl
eVR5cGUoKmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXpl
LCBLZXlUeXBlIGtleSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudElu
QXJyYXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlNdXN0
QmVQcmVzZW50SW5BcnJheT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2go
QXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3Qg
RXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICAvLyBUaGUgYXJy
YXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJh
eSBkb2VzIGNvbnRhaW4ga2V5KS4KICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBv
bmUgZWxlbWVudCwgbm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KQEAgLTIxMCw2MyArMjEx
LDQ2IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXIKICAgICAgICAg
aWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpCiAgICAgICAgICAgICBBU1NFUlQo
c2l6ZSk7CiAgICAgfQorICAgIAorICAgIC8vIFdlIGRyb3Agb3V0IG9mIHRoZSBsb29wIGZvciBv
bmUgb2YgdHdvIHJlYXNvbnM6CisgICAgLy8gMSkgV2UndmUgY2hvcHBlZCBkb3duIHRvIG9uZSBl
bGVtZW50LCBzbyBzaXplID09IDEuCisgICAgLy8gMikgV2UndmUgZmFsbGVuIG9mZiB0aGUgZW5k
IG9mIHRoZSBzdWJhcnJheSB3ZSB3ZXJlIHNlYXJjaGluZywgdGhlcmVieSBzZXR0aW5nCisgICAg
Ly8gICAgdGhlIHNpemUgdG8gMC4KKyAgICBBU1NFUlQoc2l6ZSA8PSAxKTsKKyAgICAKKyAgICBB
cnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlbMF07CisKKyAgICBpZiAobW9kZSA9PSBL
ZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXkgJiYgKCFzaXplIHx8IGtleSAhPSBleHRyYWN0S2V5
KHJlc3VsdCkpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5
U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNoIHRoaXMgcG9p
bnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8g
Y2hlY2sgaXQgbWF0Y2hlcwogICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFycmF5
KSB7CisgICAgICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVBy
ZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNoIHRoaXMgcG9pbnQKKyAgICAgICAgLy8gd2UndmUgY2hv
cHBlZCBkb3duIHRvIG9uZSBlbGVtZW50LCBhbmQgdGhhdCBlbGVtZW50IG11c3QgYmUgdGhlIG9u
ZSB3ZSdyZSBsb29raW5nCisgICAgICAgIC8vIGZvci4KICAgICAgICAgQVNTRVJUKHNpemUgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVChrZXkgPT0gZXh0cmFjdEtleSgmYXJyYXlbMF0pKTsKKyAgICAg
ICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVy
biAmYXJyYXlbMF07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gTW9kaWZpZWQgYmluYXJ5
IHNlYXJjaCBhbGdvcml0aG0gdGhhdCB1c2VzIGEgZnVuY3Rvci4gTm90ZSB0aGF0IHRoaXMgaXMg
c3RyaWN0bHkKLS8vIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgYWJvdmUsIGJ1dCByZXN1bHRzIGlu
IHNvbWV3aGF0IGxlc3MgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uCi0vLyBIZW5jZSwgZGVwZW5k
aW5nIG9uIGlubGluaW5nIGhldXJpc3RpY3MsIGl0IG1pZ2h0IGJlIHNsb3dlci4KIHRlbXBsYXRl
PHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEV4
dHJhY3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoV2l0aEZ1bmN0
b3IoQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgQmlu
YXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXksIGNvbnN0IEV4dHJh
Y3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlw
ZSogdHJ5QmluYXJ5U2VhcmNoKEFycmF5RWxlbWVudFR5cGUqIGFycmF5LCBzaXplX3Qgc2l6ZSwg
S2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkp
CiB7Ci0gICAgLy8gVGhlIGFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZWxlbWVudCAo
cHJlLWNvbmRpdGlvbiwgYXJyYXkgZG9lcyBjb250YWluIGtleSkuCi0gICAgLy8gSWYgdGhlIGFy
cmF5IGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8gZG8gdGhlIGNvbXBhcmlz
b24uCi0gICAgd2hpbGUgKHNpemUgPiAxKSB7Ci0gICAgICAgIC8vIFBpY2sgYW4gZWxlbWVudCB0
byBjaGVjaywgaGFsZiB3YXkgdGhyb3VnaCB0aGUgYXJyYXksIGFuZCByZWFkIHRoZSB2YWx1ZS4K
LSAgICAgICAgaW50IHBvcyA9IChzaXplIC0gMSkgPj4gMTsKLSAgICAgICAgS2V5VHlwZSB2YWwg
PSBleHRyYWN0S2V5KCZhcnJheVtwb3NdKTsKLQotICAgICAgICAvLyBJZiB0aGUga2V5IG1hdGNo
ZXMsIHN1Y2Nlc3MhCi0gICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJu
ICZhcnJheVtwb3NdOwotICAgICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMg
c21hbGxlciB0aGFuIHRoZSBpdGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdz
aXplJywKLSAgICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhl
IGFycmF5LgotICAgICAgICBlbHNlIGlmIChrZXkgPCB2YWwpCi0gICAgICAgICAgICBzaXplID0g
cG9zOwotICAgICAgICAvLyBEaXNjYXJkIGFsbCB2YWx1ZXMgaW4gdGhlIGxlZnQgaGFuZCBoYWxm
IG9mIHRoZSBhcnJheSwgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgaXRlbSBhdCBwb3MuCi0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc2l6ZSAtPSAocG9zICsgMSk7Ci0gICAgICAgICAgICBh
cnJheSArPSAocG9zICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbiBjYXNlIG9mIEJp
bmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSAnc2l6ZScgc2hvdWxkIG5l
dmVyIHJlYWNoIHplcm8uCi0gICAgICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFy
cmF5KQotICAgICAgICAgICAgQVNTRVJUKHNpemUpOwotICAgIH0KLQotICAgIC8vIEluIGNhc2Ug
b2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNo
IHRoaXMgcG9pbnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1lbnQsIG5v
IG5lZWQgdG8gY2hlY2sgaXQgbWF0Y2hlcwotICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNl
bnRJbkFycmF5KSB7Ci0gICAgICAgIEFTU0VSVChzaXplID09IDEpOwotICAgICAgICBBU1NFUlQo
a2V5ID09IGV4dHJhY3RLZXkoJmFycmF5WzBdKSk7Ci0gICAgfQorICAgIHJldHVybiBiaW5hcnlT
ZWFyY2g8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgRXh0cmFjdEtleSwgS2V5TWlnaHROb3RC
ZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKK30KIAotICAg
IHJldHVybiAmYXJyYXlbMF07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIEFycmF5RWxlbWVu
dFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5RWxlbWVudFR5cGUqIGFycmF5LCBz
aXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBF
eHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRUeXBl
LCBLZXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJl
c2VudD4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7CiB9CiAKIC8vIE1vZGlmaWVkIGJp
bmFyeVNlYXJjaCgpIGFsZ29yaXRobSBkZXNpZ25lZCBmb3IgYXJyYXktbGlrZSBjbGFzc2VzIHRo
YXQgc3VwcG9ydAogLy8gb3BlcmF0b3JbXSBidXQgbm90IG9wZXJhdG9yKz0uIE9uZSBleGFtcGxl
IG9mIGEgY2xhc3MgdGhhdCBxdWFsaWZpZXMgaXMKIC8vIFNlZ21lbnRlZFZlY3Rvci4KLXRlbXBs
YXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtleVR5cGUo
KmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKSwgdHlwZW5hbWUgQXJyYXlUeXBlPgotaW5s
aW5lIEFycmF5RWxlbWVudFR5cGUqIGdlbmVyaWNCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJh
eSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVt
ZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBF
eHRyYWN0S2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJh
eT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBnZW5lcmljQmluYXJ5U2VhcmNoKEFycmF5VHlw
ZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0
cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICAvLyBUaGUgYXJyYXkgbXVzdCBjb250YWlu
IGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNvbmF0aW4g
a2V5KS4KICAgICAvLyBJZiB0aGUgYXJyYXkgb25seSBjb250YWlucyBvbmUgZWxlbWVudCwgbm8g
bmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KQEAgLTI5MywxMCArMjc3LDM4IEBAIGlubGluZSBB
cnJheUVsZW1lbnRUeXBlKiBnZW5lcmljQmluYXJ5U2UKICAgICAgICAgQVNTRVJUKHNpemUpOwog
ICAgIH0KICAgICAKLSAgICAvLyBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IHdlJ3ZlIGNob3BwZWQg
ZG93biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVjayBpdCBtYXRjaGVzCi0gICAgQVNT
RVJUKHNpemUgPT0gMSk7Ci0gICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KCZhcnJheVtvZmZz
ZXRdKSk7Ci0gICAgcmV0dXJuICZhcnJheVtvZmZzZXRdOworICAgIC8vIFdlIGRyb3Agb3V0IG9m
IHRoZSBsb29wIGZvciBvbmUgb2YgdHdvIHJlYXNvbnM6CisgICAgLy8gMSkgV2UndmUgY2hvcHBl
ZCBkb3duIHRvIG9uZSBlbGVtZW50LCBzbyBzaXplID09IDEuCisgICAgLy8gMikgV2UndmUgZmFs
bGVuIG9mZiB0aGUgZW5kIG9mIHRoZSBzdWJhcnJheSB3ZSB3ZXJlIHNlYXJjaGluZywgdGhlcmVi
eSBzZXR0aW5nCisgICAgLy8gICAgdGhlIHNpemUgdG8gMC4KKyAgICBBU1NFUlQoc2l6ZSA8PSAx
KTsKKyAgICAKKyAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlbb2Zmc2V0XTsK
KworICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAoIXNpemUg
fHwga2V5ICE9IGV4dHJhY3RLZXkocmVzdWx0KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpIHsKKyAgICAgICAgLy8gSW4gY2Fz
ZSBvZiBCaW5hcnlTZWFyY2hNb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkgaWYgd2UgcmVh
Y2ggdGhpcyBwb2ludAorICAgICAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1l
bnQsIGFuZCB0aGF0IGVsZW1lbnQgbXVzdCBiZSB0aGUgb25lIHdlJ3JlIGxvb2tpbmcKKyAgICAg
ICAgLy8gZm9yLgorICAgICAgICBBU1NFUlQoc2l6ZSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKGtl
eSA9PSBleHRyYWN0S2V5KHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KK2lubGluZSBBcnJheUVs
ZW1lbnRUeXBlKiB0cnlHZW5lcmljQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVf
dCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJh
Y3RLZXkoKSkKK3sKKyAgICByZXR1cm4gZ2VuZXJpY0JpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRU
eXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU1pZ2h0Tm90QmVQcmVzZW50
SW5BcnJheT4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEV4dHJh
Y3RLZXksIHR5cGVuYW1lIEFycmF5VHlwZT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHBy
b3hpbWF0ZUdlbmVyaWNCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUs
IEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQoreworICAgIHJldHVybiBnZW5lcmljQmluYXJ5U2VhcmNoPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJ
c05vdFByZXNlbnQ+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKQEAgLTMxNCw2ICszMjYsMTEgQEAgdXNpbmcgV1RGOjpNQjsKIHVzaW5nIFdU
Rjo6aXNQb2ludGVyQWxpZ25lZDsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7CiB1c2luZyBX
VEY6OmJpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwordXNpbmcgV1RG
OjphcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDsKK3VzaW5nIFdURjo6dHJ5R2VuZXJpY0JpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6YXBwcm94
aW1hdGVHZW5lcmljQmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2lu
ZyBXVEY6OnNhZmVDYXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEF0
dGVtcHQgdG8gcmF0aW9uYWxpemUgYW5kIHNpbXBsaWZ5IFdURjo6YmluYXJ5U2VhcmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ4OTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdG8gdXNp
bmcgdGhlIG5ldyBiaW5hcnlTZWFyY2goKSBBUEkuIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZmluZEluc3RhbmNlVGltZSk6
CisKIDIwMTItMTItMTIgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENy
YXNoIGluIFBsdWdJbk9yaWdpbkhhc2ggd2l0aCBlbXB0eSBNSU1FIHR5cGUgKDEwNDg4MikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw3IEBAIFNNSUxUaW1l
IFNWR1NNSUxFbGVtZW50OjpmaW5kSW5zdGFuY2VUaW0KICAgICBpZiAoIXNpemVPZkxpc3QpCiAg
ICAgICAgIHJldHVybiBiZWdpbk9yRW5kID09IEJlZ2luID8gU01JTFRpbWU6OnVucmVzb2x2ZWQo
KSA6IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CiAKLSAgICBjb25zdCBTTUlMVGltZVdpdGhPcmln
aW4qIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxjb25zdCBTTUlMVGltZVdpdGhPcmlnaW4sIFNNSUxU
aW1lLCBleHRyYWN0VGltZUZyb21WZWN0b3I+KGxpc3QuYmVnaW4oKSwgc2l6ZU9mTGlzdCwgbWlu
aW11bVRpbWUsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgIGNvbnN0IFNN
SUxUaW1lV2l0aE9yaWdpbiogcmVzdWx0ID0gZmluZFNtYWxsZXN0R3JlYXRlclRoYW5PckVxdWFs
VXNpbmdCaW5hcnlTZWFyY2g8Y29uc3QgU01JTFRpbWVXaXRoT3JpZ2luLCBTTUlMVGltZSwgZXh0
cmFjdFRpbWVGcm9tVmVjdG9yPihsaXN0LmJlZ2luKCksIHNpemVPZkxpc3QsIG1pbmltdW1UaW1l
KTsKICAgICBpbnQgaW5kZXhPZlJlc3VsdCA9IHJlc3VsdCAtIGxpc3QuYmVnaW4oKTsKICAgICBB
U1NFUlQoaW5kZXhPZlJlc3VsdCA8IHNpemVPZkxpc3QpOwogICAgIGNvbnN0IFNNSUxUaW1lJiBj
dXJyZW50VGltZSA9IGxpc3RbaW5kZXhPZlJlc3VsdF0udGltZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179227</attachid>
            <date>2012-12-13 01:14:38 -0800</date>
            <delta_ts>2012-12-13 01:58:13 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>binarysearch.patch</filename>
            <type>text/plain</type>
            <size>27605</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEyLTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXR0ZW1wdCB0byByYXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1
c2luZyB0aGUgbmV3IGJpbmFyeVNlYXJjaCgpIEFQSS4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdp
bkZvclJldHVybik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdl
dEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICog
ZGZnL0RGR01pbmlmaWVkR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBo
OjphdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhGb3JCeXRlY29kZUluZGV4KToKKwogMjAx
Mi0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9TUiBl
eGl0IGNvbXBpbGVyIHNob3VsZCBlbWl0IGNvZGUgZm9yIHJlc2V0dGluZyB0aGUgZXhlY3V0aW9u
IGNvdW50ZXIgdGhhdCBtYXRjaGVzIHRoZSBsb2dpYyBvZiBFeGVjdXRpb25Db3VudGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxLDcgKzI3OTEsOCBAQCB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KEV4ZWNTCiAgICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVj
dXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKICAgICAg
ICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9m
ZnNldCogcmVzdWx0ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxJbmRp
Y2VzLmJlZ2luKCksIGNhbGxJbmRpY2VzLnNpemUoKSwgY2FsbFJldHVybk9mZnNldCk7CisgICAg
ICAgICAgICBiaW5hcnlTZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgICAgICBjYWxsSW5kaWNlcy5iZWdpbigpLCBjYWxsSW5kaWNl
cy5zaXplKCksIGNhbGxSZXR1cm5PZmZzZXQsIGdldENhbGxSZXR1cm5PZmZzZXQpOwogICAgICAg
ICBBU1NFUlQocmVzdWx0LT5jYWxsUmV0dXJuT2Zmc2V0ID09IGNhbGxSZXR1cm5PZmZzZXQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0LT5ieXRlY29kZU9mZnNldDsKICAgICB9CkBAIC0yODE2LDgg
KzI4MTcsMTEgQEAgYm9vbCBDb2RlQmxvY2s6OmNvZGVPcmlnaW5Gb3JSZXR1cm4oUmV0dQogICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCBvZmZzZXQgPSBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBl
bnRyeSA9IGJpbmFyeVNlYXJjaDxDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0LCB1bnNpZ25l
ZCwgZ2V0Q2FsbFJldHVybk9mZnNldEZvckNvZGVPcmlnaW4+KGNvZGVPcmlnaW5zKCkuYmVnaW4o
KSwgY29kZU9yaWdpbnMoKS5zaXplKCksIG9mZnNldCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50
SW5BcnJheSk7Ci0gICAgaWYgKGVudHJ5LT5jYWxsUmV0dXJuT2Zmc2V0ICE9IG9mZnNldCkKKyAg
ICBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBlbnRyeSA9CisgICAgICAgIHRyeUJpbmFy
eVNlYXJjaDxDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0LCB1bnNpZ25lZD4oCisgICAgICAg
ICAgICBjb2RlT3JpZ2lucygpLmJlZ2luKCksIGNvZGVPcmlnaW5zKCkuc2l6ZSgpLCBvZmZzZXQs
CisgICAgICAgICAgICBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbik7CisgICAgaWYg
KCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvZGVPcmlnaW4gPSBlbnRyeS0+
Y29kZU9yaWdpbjsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDMw
ICsyMzgsMzAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8m
IGdldFN0dWJJbmZvKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lk
KiwgZ2V0U3RydWN0dXJlU3R1YkluZm9SZXR1cm5Mb2NhdGlvbj4obV9zdHJ1Y3R1cmVTdHViSW5m
b3MuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxTdHJ1Y3R1cmVTdHVi
SW5mbywgdm9pZCo+KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJlU3R1
YkluZm9zLnNpemUoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRTdHJ1Y3R1cmVTdHViSW5m
b1JldHVybkxvY2F0aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5m
byYgZ2V0U3R1YkluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB1bnNpZ25lZCwg
Z2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4PihtX3N0cnVjdHVyZVN0dWJJbmZvcy5i
ZWdpbigpLCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWdu
ZWQ+KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJlU3R1YkluZm9zLnNp
emUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0U3RydWN0dXJlU3R1YkluZm9CeXRlY29kZUluZGV4KSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0
dWJJbmZvJik7CiAgICAgICAgIAogICAgICAgICBCeVZhbEluZm8mIGdldEJ5VmFsSW5mbyh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKihiaW5h
cnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleD4o
bV9ieVZhbEluZm9zLmJlZ2luKCksIG1fYnlWYWxJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgp
KTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxCeVZhbEluZm8sIHVuc2lnbmVk
PihtX2J5VmFsSW5mb3MuYmVnaW4oKSwgbV9ieVZhbEluZm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRl
eCwgZ2V0QnlWYWxJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICB9CiAKICAgICAgICAgQ2Fs
bExpbmtJbmZvJiBnZXRDYWxsTGlua0luZm8oUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKihiaW5hcnlTZWFyY2g8Q2FsbExpbmtJ
bmZvLCB2b2lkKiwgZ2V0Q2FsbExpbmtJbmZvUmV0dXJuTG9jYXRpb24+KG1fY2FsbExpbmtJbmZv
cy5iZWdpbigpLCBtX2NhbGxMaW5rSW5mb3Muc2l6ZSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQq
PihtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKSwgbV9jYWxsTGlua0luZm9zLnNpemUoKSwgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbikpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoSklUQ29k
ZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gKihi
aW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNv
ZGVJbmRleD4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCks
IGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNlYXJjaDxDYWxs
TGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5mb3MuYmVnaW4oKSwgbV9jYWxsTGlua0lu
Zm9zLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Q2FsbExpbmtJbmZvQnl0ZWNvZGVJbmRleCkp
OwogICAgICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIApAQCAtMzU5LDE1ICszNTksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5v
c3JFbnRyeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAg
ICBERkc6Ok9TUkVudHJ5RGF0YSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPAotICAgICAgICAgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRPU1JFbnRyeURhdGFCeXRl
Y29kZUluZGV4PigKLSAgICAgICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdp
bigpLCBtX2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgYnl0
ZWNvZGVJbmRleCwgV1RGOjpLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheSk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0LT5tX2J5dGVjb2RlSW5kZXggIT0gYnl0ZWNvZGVJbmRleCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZD4oCisg
ICAgICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFbnRyeS5iZWdpbigpLCBtX2RmZ0RhdGEtPm9z
ckVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgICAgICBERkc6OmdldE9T
UkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1
bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNvbnN0IERGRzo6T1NSRXhpdCYgb3NyRXhpdCkKQEAgLTY3
OCw3ICs2NzIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkK
ICAgICAgICAgewotICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBXVEY6OmdlbmVy
aWNCaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBpbnQsIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2Rl
T2Zmc2V0PihtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2Rl
T2Zmc2V0KTsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gZ2VuZXJpY0JpbmFy
eVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludD4oCisgICAgICAgICAgICAgICAgbV92YWx1ZVByb2Zp
bGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAg
ICAgICBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9mZnNldDxWYWx1ZVByb2ZpbGU+KTsKICAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwogICAgICAgICAg
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAog
ICAgICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbERhdGEtPmludGVycHJldGVyLT5nZXRPcGNv
ZGVJRCgKQEAgLTcxMSw3ICs3MDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmFyZUNh
c2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9yYXJlQ2Fz
ZVByb2ZpbGVzW2luZGV4XTsgfQogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUs
IGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fcmFyZUNhc2VQcm9maWxl
cywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludD4o
CisgICAgICAgICAgICAgICAgbV9yYXJlQ2FzZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMu
c2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgICAgICAgICBnZXRSYXJlQ2FzZVByb2Zp
bGVCeXRlY29kZU9mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNzM5LDcgKzczNyw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHNwZWNpYWxGYXN0Q2Fz
ZVByb2ZpbGUoaW50IGluZGV4KSB7IHJldHVybiAmbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlc1tp
bmRleF07IH0KICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50
LCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV9zcGVjaWFsRmFzdENhc2VQcm9m
aWxlcywgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybiBnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwg
aW50PigKKyAgICAgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNp
YWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAg
ICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVP
ZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAx
Mzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc2OSw3ICs3NjksNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlu
a2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6
OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2NrSW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFy
Z2V0cy5iZWdpbigpLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6
S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykp
OworICAgIHJldHVybiAqV1RGOjpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxp
bmtpbmdUYXJnZXRzLmJlZ2luKCksIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdp
biwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWRHcmFwaC5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDggQEAgcHVi
bGljOgogCiAgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsK
LSAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQotICAgICAgICAgICAgYmluYXJ5U2VhcmNoPE1pbmlm
aWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKLSAgICAgICAgICAg
ICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBXVEY6OktleU11
c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKLSAgICAgICAgaWYgKGVudHJ5LT5pbmRleCgpICE9IG5v
ZGVJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gZW50cnk7Cisg
ICAgICAgIHJldHVybiB0cnlCaW5hcnlTZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXg+KAor
ICAgICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1fbGlzdC5zaXplKCksIG5vZGVJbmRleCwgTWlu
aWZpZWROb2RlOjpnZXRJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0
IE1pbmlmaWVkTm9kZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMzc0MzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRD
b2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxs
ZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAg
ICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6
OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFw
LnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQs
IHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCks
IHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNv
ZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgICAgIEFT
U0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CkBA
IC03NDksNyArNzQ5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVC
bG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxp
bmVDb2RlQmxvY2spOwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2Vh
cmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4KTsKICAgICAK
ICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRl
eCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lv
biAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA4LDcgKzYwOCw3IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2tGb3JDYWxsZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCk7Ci0gICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAg
ICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7CkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNl
bGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBG
b3IoYmFzZWxpbmVDb2RlQmxvY2spOwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2ln
bmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRD
b2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRD
b2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4
KTsKICAgICAKICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0
ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQogICAgIAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
IG1hcDsKICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKG1hcCk7Ci0gICAgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0
ZWNvZGVJbmRleD4obWFwLmJlZ2luKCksIG1hcC5zaXplKCksIHBjIC0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpKTsKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZD4obWFw
LmJlZ2luKCksIG1hcC5zaXplKCksIHBjIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwogICAgIEFT
U0VSVChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSkpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVy
Qnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDEzNzQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIEJ5dGVjb2RlU2VxdWVuY2U6
On5CeXRlY29kZVNlcXVlbmNlKCkKIAogdW5zaWduZWQgQnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhG
b3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGJpbmFyeVNlYXJjaDxCeXRlY29kZSwgdW5zaWduZWQsIGdldEJ5dGVjb2RlSW5kZXhGb3JC
eXRlY29kZT4oY29uc3RfY2FzdDxCeXRlY29kZSo+KG1fc2VxdWVuY2UuYmVnaW4oKSksIG1fc2Vx
dWVuY2Uuc2l6ZSgpLCBieXRlY29kZUluZGV4KSAtIG1fc2VxdWVuY2UuYmVnaW4oKTsKKyAgICBy
ZXR1cm4gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlLCB1bnNpZ25lZD4oY29uc3RfY2FzdDxCeXRlY29k
ZSo+KG1fc2VxdWVuY2UuYmVnaW4oKSksIG1fc2VxdWVuY2Uuc2l6ZSgpLCBieXRlY29kZUluZGV4
LCBnZXRCeXRlY29kZUluZGV4Rm9yQnl0ZWNvZGUpIC0gbV9zZXF1ZW5jZS5iZWdpbigpOwogfQog
CiBjb25zdCBCeXRlY29kZSYgQnl0ZWNvZGVTZXF1ZW5jZTo6Zm9yQnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBieXRlY29kZUluZGV4KSBjb25zdApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzU3MykKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTIt
MTItMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRlbXB0
IHRvIHJhdGlvbmFsaXplIGFuZCBzaW1wbGlmeSBXVEY6OmJpbmFyeVNlYXJjaAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQmluYXJ5IHNlYXJjaCBub3cg
aGFzIHRocmVlIG1vZGVzOgorCisgICAgICAgIFRoZSBkZWZhdWx0LCBha2EgS2V5TXVzdEJlUHJl
c2VudEluQXJyYXk6IGFzc2VydCB0aGF0IHRoZSBrZXkgd2FzIGZvdW5kLCBidXQgcmV0dXJuCisg
ICAgICAgIGFuIGFkamFjZW50IGVsZW1lbnQgaWYgaXQgd2Fzbid0IGZvdW5kLCBpZiBhc3NlcnRz
IGFyZSB0dXJuZWQgb2ZmLgorICAgICAgICAKKyAgICAgICAgS2V5TWlnaHROb3RCZVByZXNlbnRJ
bkFycmF5LCBha2EgdHJ5QmluYXJ5U2VhcmNoOiByZXR1cm4gMCBpZiB0aGUga2V5IHdhc24ndCBm
b3VuZC4KKyAgICAgICAgCisgICAgICAgIFJldHVybkFkamFjZW50RWxlbWVudElmS2V5SXNOb3RQ
cmVzZW50LCBha2EgYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g6IGlmIHRoZSBrZXkgaXMKKyAgICAg
ICAgbm90IGZvdW5kLCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCAoZWl0aGVyIHRoZSBsZWZ0
IG9yIHJpZ2h0OyBubyBndWFyYW50ZWUgd2hpY2gpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBh
bHNvIG1ha2VzIGFsbCB2YXJpYW50cyBvZiBiaW5hcnlTZWFyY2ggdXNlIGZ1bmN0b3JzLCBhbmQg
cmVtb3ZlcyB0aGUgcHJldmlvdXMKKyAgICAgICAgZnVuY3RvciB2YXJpYW50LgorCisgICAgICAg
ICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpiaW5hcnlTZWFyY2gpOgorICAg
ICAgICAoV1RGOjp0cnlCaW5hcnlTZWFyY2gpOgorICAgICAgICAoV1RGOjphcHByb3hpbWF0ZUJp
bmFyeVNlYXJjaCk6CisgICAgICAgIChXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2gpOgorICAgICAg
ICAoV1RGOjp0cnlHZW5lcmljQmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdURjo6YXBwcm94aW1h
dGVHZW5lcmljQmluYXJ5U2VhcmNoKToKKwogMjAxMi0xMi0xMiAgSWx5YSBUaWtob25vdnNreSAg
PGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTmF0aXZlIE1l
bW9yeSBJbnN0cnVtZW50YXRpb246IHJlbW92ZSBmYWtlIHJvb3QgTWVtb3J5T2JqZWN0SW5mby4K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDE0ICsxNzcsMTUgQEAg
dGVtcGxhdGU8c2l6ZV90IGRpdmlzb3I+IGlubGluZSBzaXplX3QgcgogfQogCiBlbnVtIEJpbmFy
eVNlYXJjaE1vZGUgewotICAgIEtleU11c3RCZVByZXNlbnRJbkFycmF5LAotICAgIEtleU11c3RO
b3RCZVByZXNlbnRJbkFycmF5CisgICAgS2V5TXVzdEJlUHJlc2VudEluQXJyYXksIC8vIElmIHRo
ZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYW5k
IGJlaGF2ZSBsaWtlIEFsd2F5c1JldHVybkFkamFjZW50RWxlbWVudCBpbiByZWxlYXNlIGJ1aWxk
cy4KKyAgICBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXksIC8vIFJldHVybiB6ZXJvIGlmIHRo
ZSBlbGVtZW50IGlzIG5vdCBmb3VuZC4KKyAgICBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlz
Tm90UHJlc2VudCAvLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhlIGxl
ZnQsIG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVuIGZv
dW5kLgogfTsKIAogLy8gQmluYXJ5IHNlYXJjaCBhbGdvcml0aG0sIGNhbGxzIGV4dHJhY3RLZXkg
b24gcHJlLXNvcnRlZCBlbGVtZW50cyBpbiBhcnJheSwKIC8vIGNvbXBhcmVzIHJlc3VsdCB3aXRo
IGtleSAoS2V5VHlwZXMgc2hvdWxkIGJlIGNvbXBhcmFibGUgd2l0aCAnPT0nLCBhbmQgJzwnKS4K
LXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtl
eVR5cGUoKmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXpl
LCBLZXlUeXBlIGtleSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudElu
QXJyYXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlNdXN0
QmVQcmVzZW50SW5BcnJheT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2go
QXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3Qg
RXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICAvLyBUaGUgYXJy
YXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJh
eSBkb2VzIGNvbnRhaW4ga2V5KS4KICAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBv
bmUgZWxlbWVudCwgbm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KQEAgLTIxMCw2MyArMjEx
LDQ2IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXIKICAgICAgICAg
aWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpCiAgICAgICAgICAgICBBU1NFUlQo
c2l6ZSk7CiAgICAgfQorICAgIAorICAgIC8vIFdlIGRyb3Agb3V0IG9mIHRoZSBsb29wIGZvciBv
bmUgb2YgdHdvIHJlYXNvbnM6CisgICAgLy8gMSkgV2UndmUgY2hvcHBlZCBkb3duIHRvIG9uZSBl
bGVtZW50LCBzbyBzaXplID09IDEuCisgICAgLy8gMikgV2UndmUgZmFsbGVuIG9mZiB0aGUgZW5k
IG9mIHRoZSBzdWJhcnJheSB3ZSB3ZXJlIHNlYXJjaGluZywgdGhlcmVieSBzZXR0aW5nCisgICAg
Ly8gICAgdGhlIHNpemUgdG8gMC4KKyAgICBBU1NFUlQoc2l6ZSA8PSAxKTsKKyAgICAKKyAgICBB
cnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlbMF07CisKKyAgICBpZiAobW9kZSA9PSBL
ZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXkgJiYgKCFzaXplIHx8IGtleSAhPSBleHRyYWN0S2V5
KHJlc3VsdCkpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5
U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNoIHRoaXMgcG9p
bnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8g
Y2hlY2sgaXQgbWF0Y2hlcwogICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFycmF5
KSB7CisgICAgICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVBy
ZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNoIHRoaXMgcG9pbnQKKyAgICAgICAgLy8gd2UndmUgY2hv
cHBlZCBkb3duIHRvIG9uZSBlbGVtZW50LCBhbmQgdGhhdCBlbGVtZW50IG11c3QgYmUgdGhlIG9u
ZSB3ZSdyZSBsb29raW5nCisgICAgICAgIC8vIGZvci4KICAgICAgICAgQVNTRVJUKHNpemUgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVChrZXkgPT0gZXh0cmFjdEtleSgmYXJyYXlbMF0pKTsKKyAgICAg
ICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVy
biAmYXJyYXlbMF07CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8gTW9kaWZpZWQgYmluYXJ5
IHNlYXJjaCBhbGdvcml0aG0gdGhhdCB1c2VzIGEgZnVuY3Rvci4gTm90ZSB0aGF0IHRoaXMgaXMg
c3RyaWN0bHkKLS8vIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgYWJvdmUsIGJ1dCByZXN1bHRzIGlu
IHNvbWV3aGF0IGxlc3MgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uCi0vLyBIZW5jZSwgZGVwZW5k
aW5nIG9uIGlubGluaW5nIGhldXJpc3RpY3MsIGl0IG1pZ2h0IGJlIHNsb3dlci4KIHRlbXBsYXRl
PHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEV4
dHJhY3RLZXk+Ci1pbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoV2l0aEZ1bmN0
b3IoQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgQmlu
YXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXksIGNvbnN0IEV4dHJh
Y3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCitpbmxpbmUgQXJyYXlFbGVtZW50VHlw
ZSogdHJ5QmluYXJ5U2VhcmNoKEFycmF5RWxlbWVudFR5cGUqIGFycmF5LCBzaXplX3Qgc2l6ZSwg
S2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkp
CiB7Ci0gICAgLy8gVGhlIGFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZWxlbWVudCAo
cHJlLWNvbmRpdGlvbiwgYXJyYXkgZG9lcyBjb250YWluIGtleSkuCi0gICAgLy8gSWYgdGhlIGFy
cmF5IGNvbnRhaW5zIG9ubHkgb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8gZG8gdGhlIGNvbXBhcmlz
b24uCi0gICAgd2hpbGUgKHNpemUgPiAxKSB7Ci0gICAgICAgIC8vIFBpY2sgYW4gZWxlbWVudCB0
byBjaGVjaywgaGFsZiB3YXkgdGhyb3VnaCB0aGUgYXJyYXksIGFuZCByZWFkIHRoZSB2YWx1ZS4K
LSAgICAgICAgaW50IHBvcyA9IChzaXplIC0gMSkgPj4gMTsKLSAgICAgICAgS2V5VHlwZSB2YWwg
PSBleHRyYWN0S2V5KCZhcnJheVtwb3NdKTsKLQotICAgICAgICAvLyBJZiB0aGUga2V5IG1hdGNo
ZXMsIHN1Y2Nlc3MhCi0gICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJu
ICZhcnJheVtwb3NdOwotICAgICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMg
c21hbGxlciB0aGFuIHRoZSBpdGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdz
aXplJywKLSAgICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhl
IGFycmF5LgotICAgICAgICBlbHNlIGlmIChrZXkgPCB2YWwpCi0gICAgICAgICAgICBzaXplID0g
cG9zOwotICAgICAgICAvLyBEaXNjYXJkIGFsbCB2YWx1ZXMgaW4gdGhlIGxlZnQgaGFuZCBoYWxm
IG9mIHRoZSBhcnJheSwgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgaXRlbSBhdCBwb3MuCi0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc2l6ZSAtPSAocG9zICsgMSk7Ci0gICAgICAgICAgICBh
cnJheSArPSAocG9zICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbiBjYXNlIG9mIEJp
bmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSAnc2l6ZScgc2hvdWxkIG5l
dmVyIHJlYWNoIHplcm8uCi0gICAgICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFy
cmF5KQotICAgICAgICAgICAgQVNTRVJUKHNpemUpOwotICAgIH0KLQotICAgIC8vIEluIGNhc2Ug
b2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlmIHdlIHJlYWNo
IHRoaXMgcG9pbnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1lbnQsIG5v
IG5lZWQgdG8gY2hlY2sgaXQgbWF0Y2hlcwotICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNl
bnRJbkFycmF5KSB7Ci0gICAgICAgIEFTU0VSVChzaXplID09IDEpOwotICAgICAgICBBU1NFUlQo
a2V5ID09IGV4dHJhY3RLZXkoJmFycmF5WzBdKSk7Ci0gICAgfQorICAgIHJldHVybiBiaW5hcnlT
ZWFyY2g8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgRXh0cmFjdEtleSwgS2V5TWlnaHROb3RC
ZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKK30KIAotICAg
IHJldHVybiAmYXJyYXlbMF07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0
eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIEFycmF5RWxlbWVu
dFR5cGUqIGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKEFycmF5RWxlbWVudFR5cGUqIGFycmF5LCBz
aXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBF
eHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRUeXBl
LCBLZXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJl
c2VudD4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7CiB9CiAKIC8vIE1vZGlmaWVkIGJp
bmFyeVNlYXJjaCgpIGFsZ29yaXRobSBkZXNpZ25lZCBmb3IgYXJyYXktbGlrZSBjbGFzc2VzIHRo
YXQgc3VwcG9ydAogLy8gb3BlcmF0b3JbXSBidXQgbm90IG9wZXJhdG9yKz0uIE9uZSBleGFtcGxl
IG9mIGEgY2xhc3MgdGhhdCBxdWFsaWZpZXMgaXMKIC8vIFNlZ21lbnRlZFZlY3Rvci4KLXRlbXBs
YXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtleVR5cGUo
KmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKSwgdHlwZW5hbWUgQXJyYXlUeXBlPgotaW5s
aW5lIEFycmF5RWxlbWVudFR5cGUqIGdlbmVyaWNCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJh
eSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5KQordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVt
ZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBF
eHRyYWN0S2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJh
eT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBnZW5lcmljQmluYXJ5U2VhcmNoKEFycmF5VHlw
ZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0
cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKICAgICAvLyBUaGUgYXJyYXkgbXVzdCBjb250YWlu
IGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNvbmF0aW4g
a2V5KS4KICAgICAvLyBJZiB0aGUgYXJyYXkgb25seSBjb250YWlucyBvbmUgZWxlbWVudCwgbm8g
bmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KQEAgLTI5MywxMCArMjc3LDM4IEBAIGlubGluZSBB
cnJheUVsZW1lbnRUeXBlKiBnZW5lcmljQmluYXJ5U2UKICAgICAgICAgQVNTRVJUKHNpemUpOwog
ICAgIH0KICAgICAKLSAgICAvLyBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IHdlJ3ZlIGNob3BwZWQg
ZG93biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVjayBpdCBtYXRjaGVzCi0gICAgQVNT
RVJUKHNpemUgPT0gMSk7Ci0gICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KCZhcnJheVtvZmZz
ZXRdKSk7Ci0gICAgcmV0dXJuICZhcnJheVtvZmZzZXRdOworICAgIC8vIFdlIGRyb3Agb3V0IG9m
IHRoZSBsb29wIGZvciBvbmUgb2YgdHdvIHJlYXNvbnM6CisgICAgLy8gMSkgV2UndmUgY2hvcHBl
ZCBkb3duIHRvIG9uZSBlbGVtZW50LCBzbyBzaXplID09IDEuCisgICAgLy8gMikgV2UndmUgZmFs
bGVuIG9mZiB0aGUgZW5kIG9mIHRoZSBzdWJhcnJheSB3ZSB3ZXJlIHNlYXJjaGluZywgdGhlcmVi
eSBzZXR0aW5nCisgICAgLy8gICAgdGhlIHNpemUgdG8gMC4KKyAgICBBU1NFUlQoc2l6ZSA8PSAx
KTsKKyAgICAKKyAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlbb2Zmc2V0XTsK
KworICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAoIXNpemUg
fHwga2V5ICE9IGV4dHJhY3RLZXkocmVzdWx0KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpIHsKKyAgICAgICAgLy8gSW4gY2Fz
ZSBvZiBCaW5hcnlTZWFyY2hNb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkgaWYgd2UgcmVh
Y2ggdGhpcyBwb2ludAorICAgICAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1l
bnQsIGFuZCB0aGF0IGVsZW1lbnQgbXVzdCBiZSB0aGUgb25lIHdlJ3JlIGxvb2tpbmcKKyAgICAg
ICAgLy8gZm9yLgorICAgICAgICBBU1NFUlQoc2l6ZSA9PSAxKTsKKyAgICAgICAgQVNTRVJUKGtl
eSA9PSBleHRyYWN0S2V5KHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KK2lubGluZSBBcnJheUVs
ZW1lbnRUeXBlKiB0cnlHZW5lcmljQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVf
dCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJh
Y3RLZXkoKSkKK3sKKyAgICByZXR1cm4gZ2VuZXJpY0JpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRU
eXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXksIEtleU1pZ2h0Tm90QmVQcmVzZW50
SW5BcnJheT4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEV4dHJh
Y3RLZXksIHR5cGVuYW1lIEFycmF5VHlwZT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBhcHBy
b3hpbWF0ZUdlbmVyaWNCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUs
IEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQoreworICAgIHJldHVybiBnZW5lcmljQmluYXJ5U2VhcmNoPEFycmF5RWxlbWVudFR5cGUsIEtl
eVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJ
c05vdFByZXNlbnQ+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKQEAgLTMxNCw2ICszMjYsMTEgQEAgdXNpbmcgV1RGOjpNQjsKIHVzaW5nIFdU
Rjo6aXNQb2ludGVyQWxpZ25lZDsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7CiB1c2luZyBX
VEY6OmJpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwordXNpbmcgV1RG
OjphcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDsKK3VzaW5nIFdURjo6dHJ5R2VuZXJpY0JpbmFyeVNlYXJjaDsKK3VzaW5nIFdURjo6YXBwcm94
aW1hdGVHZW5lcmljQmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2lu
ZyBXVEY6OnNhZmVDYXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxMi0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEF0
dGVtcHQgdG8gcmF0aW9uYWxpemUgYW5kIHNpbXBsaWZ5IFdURjo6YmluYXJ5U2VhcmNoCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ4OTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdG8gdXNp
bmcgdGhlIG5ldyBiaW5hcnlTZWFyY2goKSBBUEkuIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28g
bm8gbmV3IHRlc3RzLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZmluZEluc3RhbmNlVGltZSk6
CisKIDIwMTItMTItMTIgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENy
YXNoIGluIFBsdWdJbk9yaWdpbkhhc2ggd2l0aCBlbXB0eSBNSU1FIHR5cGUgKDEwNDg4MikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw3IEBAIFNNSUxUaW1l
IFNWR1NNSUxFbGVtZW50OjpmaW5kSW5zdGFuY2VUaW0KICAgICBpZiAoIXNpemVPZkxpc3QpCiAg
ICAgICAgIHJldHVybiBiZWdpbk9yRW5kID09IEJlZ2luID8gU01JTFRpbWU6OnVucmVzb2x2ZWQo
KSA6IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CiAKLSAgICBjb25zdCBTTUlMVGltZVdpdGhPcmln
aW4qIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxjb25zdCBTTUlMVGltZVdpdGhPcmlnaW4sIFNNSUxU
aW1lLCBleHRyYWN0VGltZUZyb21WZWN0b3I+KGxpc3QuYmVnaW4oKSwgc2l6ZU9mTGlzdCwgbWlu
aW11bVRpbWUsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgIGNvbnN0IFNN
SUxUaW1lV2l0aE9yaWdpbiogcmVzdWx0ID0gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8Y29uc3Qg
U01JTFRpbWVXaXRoT3JpZ2luLCBTTUlMVGltZSwgZXh0cmFjdFRpbWVGcm9tVmVjdG9yPihsaXN0
LmJlZ2luKCksIHNpemVPZkxpc3QsIG1pbmltdW1UaW1lKTsKICAgICBpbnQgaW5kZXhPZlJlc3Vs
dCA9IHJlc3VsdCAtIGxpc3QuYmVnaW4oKTsKICAgICBBU1NFUlQoaW5kZXhPZlJlc3VsdCA8IHNp
emVPZkxpc3QpOwogICAgIGNvbnN0IFNNSUxUaW1lJiBjdXJyZW50VGltZSA9IGxpc3RbaW5kZXhP
ZlJlc3VsdF0udGltZSgpOwo=
</data>
<flag name="commit-queue"
          id="196008"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179231</attachid>
            <date>2012-12-13 01:58:13 -0800</date>
            <delta_ts>2012-12-13 02:12:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>binarysearch.patch</filename>
            <type>text/plain</type>
            <size>28725</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEyLTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXR0ZW1wdCB0byByYXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1
c2luZyB0aGUgbmV3IGJpbmFyeVNlYXJjaCgpIEFQSS4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdp
bkZvclJldHVybik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdl
dEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICog
ZGZnL0RGR01pbmlmaWVkR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBo
OjphdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhGb3JCeXRlY29kZUluZGV4KToKKwogMjAx
Mi0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9TUiBl
eGl0IGNvbXBpbGVyIHNob3VsZCBlbWl0IGNvZGUgZm9yIHJlc2V0dGluZyB0aGUgZXhlY3V0aW9u
IGNvdW50ZXIgdGhhdCBtYXRjaGVzIHRoZSBsb2dpYyBvZiBFeGVjdXRpb25Db3VudGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxLDcgKzI3OTEsOCBAQCB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KEV4ZWNTCiAgICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVj
dXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKICAgICAg
ICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9m
ZnNldCogcmVzdWx0ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxJbmRp
Y2VzLmJlZ2luKCksIGNhbGxJbmRpY2VzLnNpemUoKSwgY2FsbFJldHVybk9mZnNldCk7CisgICAg
ICAgICAgICBiaW5hcnlTZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgICAgICBjYWxsSW5kaWNlcywgY2FsbEluZGljZXMuc2l6ZSgp
LCBjYWxsUmV0dXJuT2Zmc2V0LCBnZXRDYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAgICAgQVNTRVJU
KHJlc3VsdC0+Y2FsbFJldHVybk9mZnNldCA9PSBjYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdC0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgfQpAQCAtMjgxNiw4ICsyODE3LDEx
IEBAIGJvb2wgQ29kZUJsb2NrOjpjb2RlT3JpZ2luRm9yUmV0dXJuKFJldHUKICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJl
c3MudmFsdWUoKSk7Ci0gICAgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkgPSBi
aW5hcnlTZWFyY2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQsIGdldENh
bGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luPihjb2RlT3JpZ2lucygpLmJlZ2luKCksIGNvZGVP
cmlnaW5zKCkuc2l6ZSgpLCBvZmZzZXQsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkp
OwotICAgIGlmIChlbnRyeS0+Y2FsbFJldHVybk9mZnNldCAhPSBvZmZzZXQpCisgICAgQ29kZU9y
aWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkgPQorICAgICAgICB0cnlCaW5hcnlTZWFyY2g8
Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQ+KAorICAgICAgICAgICAgY29k
ZU9yaWdpbnMoKSwgY29kZU9yaWdpbnMoKS5zaXplKCksIG9mZnNldCwKKyAgICAgICAgICAgIGdl
dENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luKTsKKyAgICBpZiAoIWVudHJ5KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgY29kZU9yaWdpbiA9IGVudHJ5LT5jb2RlT3JpZ2luOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMzAgKzIzOCwzMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8oUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKihiaW5hcnlTZWFyY2g8U3RydWN0dXJlU3R1YkluZm8sIHZvaWQqLCBnZXRTdHJ1Y3R1cmVT
dHViSW5mb1JldHVybkxvY2F0aW9uPihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0
cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgICAg
ICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lkKj4obV9z
dHJ1Y3R1cmVTdHViSW5mb3MsIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgcmV0dXJuQWRk
cmVzcy52YWx1ZSgpLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8odW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2Vh
cmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB1bnNpZ25lZCwgZ2V0U3RydWN0dXJlU3R1YkluZm9CeXRl
Y29kZUluZGV4PihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0cnVjdHVyZVN0dWJJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWduZWQ+KG1fc3RydWN0dXJlU3R1YkluZm9z
LCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldFN0cnVjdHVy
ZVN0dWJJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgICAgICAKICAgICAgICAgQnlW
YWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWduZWQsIGdl
dEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBtX2J5VmFsSW5m
b3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9ieVZhbEluZm9zLCBtX2J5VmFsSW5mb3Muc2l6
ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KSk7CiAgICAgICAg
IH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQqLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlv
bj4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPENh
bGxMaW5rSW5mbywgdm9pZCo+KG1fY2FsbExpbmtJbmZvcywgbV9jYWxsTGlua0luZm9zLnNpemUo
KSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbikp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5r
SW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gKihiaW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZCwgZ2V0Q2FsbExpbmtJ
bmZvQnl0ZWNvZGVJbmRleD4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZv
cy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNl
YXJjaDxDYWxsTGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5mb3MsIG1fY2FsbExpbmtJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXgp
KTsKICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTM1OSwxNSArMzU5LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZmdEYXRh
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+
b3NyRW50cnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDwKLSAgICAgICAgICAg
ICAgICBERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRhQnl0
ZWNvZGVJbmRleD4oCi0gICAgICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnkuYmVn
aW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIGJ5
dGVjb2RlSW5kZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+bV9ieXRlY29kZUluZGV4ICE9IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQ+KAor
ICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnksIG1fZGZnRGF0YS0+b3NyRW50cnku
c2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgICAgIERGRzo6Z2V0T1NSRW50cnlE
YXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVk
IGFwcGVuZE9TUkV4aXQoY29uc3QgREZHOjpPU1JFeGl0JiBvc3JFeGl0KQpAQCAtNjc4LDcgKzY3
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJpY0JpbmFy
eVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+
KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFsdWVQ
cm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVBy
b2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0VmFsdWVQ
cm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKICAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKICAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCkBAIC03MTEs
NyArNzA3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFy
ZUNhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fcmFyZUNhc2VQcm9maWxlc1tpbmRl
eF07IH0KICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdldFJhcmVD
YXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQ
cm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBiaW5h
cnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fcmFyZUNh
c2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisg
ICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKQEAgLTczOSw3ICs3MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
UmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1
cm4gJm1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgICAgIFJhcmVDYXNl
UHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRl
Y29kZU9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0Jp
bmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNv
ZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKKyAgICAgICAgICAgICAgICBtX3NwZWNpYWxG
YXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNv
ZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZz
ZXQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNp
YWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2OSw3ICs3NjksNyBAQCBwcml2YXRl
OgogCiBpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVn
aW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2NrSW5k
ZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cy5iZWdpbigpLCBsaW5raW5nVGFyZ2V0cy5zaXpl
KCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVj
b2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJsb2Nr
SW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgpLCBi
eXRlY29kZUJlZ2luLCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNaW5pZmllZEdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNCAr
NDMsOCBAQCBwdWJsaWM6CiAKICAgICBNaW5pZmllZE5vZGUqIGF0KE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBpZiAoIW1fbGlzdC5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgTWluaWZpZWROb2RlKiBlbnRyeSA9Ci0gICAgICAgICAgICBiaW5hcnlT
ZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXgsIE1pbmlmaWVkTm9kZTo6Z2V0SW5kZXg+KAot
ICAgICAgICAgICAgICAgIG1fbGlzdC5iZWdpbigpLCBtX2xpc3Quc2l6ZSgpLCBub2RlSW5kZXgs
IFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAgICBpZiAoZW50cnktPmlu
ZGV4KCkgIT0gbm9kZUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBlbnRyeTsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxNaW5pZmllZE5vZGUsIE5v
ZGVJbmRleD4oCisgICAgICAgICAgICBtX2xpc3QsIG1fbGlzdC5zaXplKCksIG5vZGVJbmRleCwg
TWluaWZpZWROb2RlOjpnZXRJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKGNv
bnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMzc0MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29k
ZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0g
ICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2Rl
TWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1
cm5CeXRlY29kZUluZGV4LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgICAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOwpAQCAtNzQ5
LDcgKzc0OSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tG
b3IoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29k
ZUJsb2NrKTsKICAgICAKLSAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBi
aW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigp
LCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVjb2Rl
ZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVCht
YXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEzNzQzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIp
OwogICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVN
YXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7
CiAgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0
Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6
ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5z
aWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5dGVj
b2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgICAgIEFTU0VSVChtYXBwaW5n
LT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CkBAIC02OTYsNyArNjk2
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0
Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRl
Y29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2sp
OwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1hcHBpbmcp
OwogICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw3
ICszNzgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAKICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBtYXA7CiAgICAgY29kZUJsb2NrLT5qaXRDb2Rl
TWFwKCktPmRlY29kZShtYXApOwotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KG1hcC5iZWdpbigpLCBtYXAu
c2l6ZSgpLCBwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CisgICAgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KG1hcCwgbWFwLnNpemUoKSwgcGMgLSBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmJlZ2luKCksIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0
ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgIEFTU0VSVChtYXBwaW5nLT5t
X2J5dGVjb2RlSW5kZXggPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBjIC0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgQnl0ZWNvZGVTZXF1ZW5jZTo6fkJ5dGVjb2RlU2VxdWVuY2UoKQogCiB1bnNpZ25lZCBCeXRl
Y29kZVNlcXVlbmNlOjppbmRleEZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlLCB1bnNpZ25lZCwg
Z2V0Qnl0ZWNvZGVJbmRleEZvckJ5dGVjb2RlPihjb25zdF9jYXN0PEJ5dGVjb2RlKj4obV9zZXF1
ZW5jZS5iZWdpbigpKSwgbV9zZXF1ZW5jZS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpIC0gbV9zZXF1
ZW5jZS5iZWdpbigpOworICAgIHJldHVybiBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGUsIHVuc2lnbmVk
PihtX3NlcXVlbmNlLCBtX3NlcXVlbmNlLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Qnl0ZWNv
ZGVJbmRleEZvckJ5dGVjb2RlKSAtIG1fc2VxdWVuY2UuYmVnaW4oKTsKIH0KIAogY29uc3QgQnl0
ZWNvZGUmIEJ5dGVjb2RlU2VxdWVuY2U6OmZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzYpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEyLTEzICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0ZW1wdCB0byByYXRpb25h
bGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpbmFyeSBzZWFyY2ggbm93IGhhcyB0aHJlZSBt
b2RlczoKKworICAgICAgICBUaGUgZGVmYXVsdCwgYWthIEtleU11c3RCZVByZXNlbnRJbkFycmF5
OiBhc3NlcnQgdGhhdCB0aGUga2V5IHdhcyBmb3VuZCwgYnV0IHJldHVybgorICAgICAgICBhbiBh
ZGphY2VudCBlbGVtZW50IGlmIGl0IHdhc24ndCBmb3VuZCwgaWYgYXNzZXJ0cyBhcmUgdHVybmVk
IG9mZi4KKyAgICAgICAgCisgICAgICAgIEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSwgYWth
IHRyeUJpbmFyeVNlYXJjaDogcmV0dXJuIDAgaWYgdGhlIGtleSB3YXNuJ3QgZm91bmQuCisgICAg
ICAgIAorICAgICAgICBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJlc2VudCwgYWth
IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoOiBpZiB0aGUga2V5IGlzCisgICAgICAgIG5vdCBmb3Vu
ZCwgcmV0dXJuIGFuIGFkamFjZW50IGVsZW1lbnQgKGVpdGhlciB0aGUgbGVmdCBvciByaWdodDsg
bm8gZ3VhcmFudGVlIHdoaWNoKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyByZWR1Y2Vz
IHRoZSBudW1iZXIgb2YgdmFyaWFudHMgb2YgYmluYXJ5U2VhcmNoLiBUaGUgZnVuY3RvciB2YXJp
YW50IGlzIG5vdworICAgICAgICBnb25lIGJlY2F1c2UgYmluYXJ5U2VhcmNoIG5vdyBhbHdheXMg
dXNlcyBhIGZ1bmN0b3IgZm9yIHRoZSBrZXkgZXh0cmFjdG9yLiBUaGUKKyAgICAgICAgZ2VuZXJp
YyB2YXJpYW50IGlzIG5vdyBnb25lIGJlY2F1c2UgYmluYXJ5U2VhcmNoIGFsd2F5cyBleHBlY3Rz
IGFuIGFycmF5IHR5cGUgdGhhdAorICAgICAgICBjYW4gZG8gb3BlcmF0b3JbXS4KKworICAgICAg
ICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoSW1wbCk6
CisgICAgICAgIChXVEY6OmJpbmFyeVNlYXJjaCk6CisgICAgICAgIChXVEY6OnRyeUJpbmFyeVNl
YXJjaCk6CisgICAgICAgIChXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoKToKKwogMjAxMi0x
Mi0xMiAgSWx5YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViIEluc3BlY3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50YXRpb246IHJlbW92ZSBmYWtl
IHJvb3QgTWVtb3J5T2JqZWN0SW5mby4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lv
biAxMzc0MzMpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTc4LDEyNSArMTc4LDg5IEBAIHRlbXBsYXRlPHNpemVfdCBkaXZpc29yPiBpbmxpbmUg
c2l6ZV90IHIKIAogZW51bSBCaW5hcnlTZWFyY2hNb2RlIHsKICAgICBLZXlNdXN0QmVQcmVzZW50
SW5BcnJheSwKLSAgICBLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheQorICAgIEtleU1pZ2h0Tm90
QmVQcmVzZW50SW5BcnJheSwKKyAgICBSZXR1cm5BZGphY2VudEVsZW1lbnRJZktleUlzTm90UHJl
c2VudAogfTsKIAotLy8gQmluYXJ5IHNlYXJjaCBhbGdvcml0aG0sIGNhbGxzIGV4dHJhY3RLZXkg
b24gcHJlLXNvcnRlZCBlbGVtZW50cyBpbiBhcnJheSwKLS8vIGNvbXBhcmVzIHJlc3VsdCB3aXRo
IGtleSAoS2V5VHlwZXMgc2hvdWxkIGJlIGNvbXBhcmFibGUgd2l0aCAnPT0nLCBhbmQgJzwnKS4K
LXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtl
eVR5cGUoKmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKT4KLWlubGluZSBBcnJheUVsZW1l
bnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXpl
LCBLZXlUeXBlIGtleSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudElu
QXJyYXkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXksIEJpbmFyeVNlYXJj
aE1vZGUgbW9kZT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2hJbXBsKEFy
cmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtl
eSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKLSAgICAvLyBUaGUgYXJyYXkgbXVzdCBj
b250YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNv
bnRhaW4ga2V5KS4KLSAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBvbmUgZWxlbWVu
dCwgbm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KKyAgICAvLyBUaGUgYXJyYXkgbXVzdCBj
b250YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNv
bmF0aW4ga2V5KS4KKyAgICAvLyBJZiB0aGUgYXJyYXkgb25seSBjb250YWlucyBvbmUgZWxlbWVu
dCwgbm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KKyAgICBzaXplX3Qgb2Zmc2V0ID0gMDsK
ICAgICB3aGlsZSAoc2l6ZSA+IDEpIHsKICAgICAgICAgLy8gUGljayBhbiBlbGVtZW50IHRvIGNo
ZWNrLCBoYWxmIHdheSB0aHJvdWdoIHRoZSBhcnJheSwgYW5kIHJlYWQgdGhlIHZhbHVlLgogICAg
ICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+PiAxOwotICAgICAgICBLZXlUeXBlIHZhbCA9IGV4
dHJhY3RLZXkoJmFycmF5W3Bvc10pOwotCisgICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtl
eSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7CisgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUga2V5
IG1hdGNoZXMsIHN1Y2Nlc3MhCiAgICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAgICAg
cmV0dXJuICZhcnJheVtwb3NdOworICAgICAgICAgICAgcmV0dXJuICZhcnJheVtvZmZzZXQgKyBw
b3NdOwogICAgICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMgc21hbGxlciB0
aGFuIHRoZSBpdGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdzaXplJywKICAg
ICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5Lgot
ICAgICAgICBlbHNlIGlmIChrZXkgPCB2YWwpCisgICAgICAgIGlmIChrZXkgPCB2YWwpCiAgICAg
ICAgICAgICBzaXplID0gcG9zOwogICAgICAgICAvLyBEaXNjYXJkIGFsbCB2YWx1ZXMgaW4gdGhl
IGxlZnQgaGFuZCBoYWxmIG9mIHRoZSBhcnJheSwgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgaXRl
bSBhdCBwb3MuCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc2l6ZSAtPSAocG9zICsgMSk7
Ci0gICAgICAgICAgICBhcnJheSArPSAocG9zICsgMSk7CisgICAgICAgICAgICBvZmZzZXQgKz0g
KHBvcyArIDEpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSW4gY2FzZSBvZiBCaW5hcnlTZWFy
Y2hNb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkgJ3NpemUnIHNob3VsZCBuZXZlciByZWFj
aCB6ZXJvLgotICAgICAgICBpZiAobW9kZSA9PSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSkKLSAg
ICAgICAgICAgIEFTU0VSVChzaXplKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgIT0gS2V5TXVzdEJl
UHJlc2VudEluQXJyYXkgfHwgc2l6ZSk7CiAgICAgfQorICAgIAorICAgIGlmIChtb2RlID09IEtl
eU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiAhc2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgQXJyYXlFbGVtZW50VHlwZSogcmVzdWx0ID0gJmFycmF5W29mZnNldF07CisKKyAg
ICBpZiAobW9kZSA9PSBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXkgJiYga2V5ICE9IGV4dHJh
Y3RLZXkocmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBJbiBjYXNlIG9mIEJp
bmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSBpZiB3ZSByZWFjaCB0aGlz
IHBvaW50Ci0gICAgLy8gd2UndmUgY2hvcHBlZCBkb3duIHRvIG9uZSBlbGVtZW50LCBubyBuZWVk
IHRvIGNoZWNrIGl0IG1hdGNoZXMKICAgICBpZiAobW9kZSA9PSBLZXlNdXN0QmVQcmVzZW50SW5B
cnJheSkgewogICAgICAgICBBU1NFUlQoc2l6ZSA9PSAxKTsKLSAgICAgICAgQVNTRVJUKGtleSA9
PSBleHRyYWN0S2V5KCZhcnJheVswXSkpOworICAgICAgICBBU1NFUlQoa2V5ID09IGV4dHJhY3RL
ZXkocmVzdWx0KSk7CiAgICAgfQogCi0gICAgcmV0dXJuICZhcnJheVswXTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCi0vLyBNb2RpZmllZCBiaW5hcnkgc2VhcmNoIGFsZ29yaXRobSB0aGF0IHVz
ZXMgYSBmdW5jdG9yLiBOb3RlIHRoYXQgdGhpcyBpcyBzdHJpY3RseQotLy8gbW9yZSBwb3dlcmZ1
bCB0aGFuIHRoZSBhYm92ZSwgYnV0IHJlc3VsdHMgaW4gc29tZXdoYXQgbGVzcyB0ZW1wbGF0ZSBz
cGVjaWFsaXphdGlvbi4KLS8vIEhlbmNlLCBkZXBlbmRpbmcgb24gaW5saW5pbmcgaGV1cmlzdGlj
cywgaXQgbWlnaHQgYmUgc2xvd2VyLgotdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlw
ZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleT4KLWlubGluZSBBcnJheUVs
ZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcihBcnJheUVsZW1lbnRUeXBlKiBhcnJh
eSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlN
dXN0QmVQcmVzZW50SW5BcnJheSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJh
Y3RLZXkoKSkKKy8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBmb3VuZCwgY3Jhc2ggaWYgYXNzZXJ0
cyBhcmUgZW5hYmxlZCwgYW5kIGJlaGF2ZSBsaWtlIEFsd2F5c1JldHVybkFkamFjZW50RWxlbWVu
dCBpbiByZWxlYXNlIGJ1aWxkcy4KK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUs
IHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtl
eT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBiaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJh
eSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5
ID0gRXh0cmFjdEtleSgpKQogewotICAgIC8vIFRoZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVh
c3Qgb25lIGVsZW1lbnQgKHByZS1jb25kaXRpb24sIGFycmF5IGRvZXMgY29udGFpbiBrZXkpLgot
ICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBvbmx5IG9uZSBlbGVtZW50LCBubyBuZWVkIHRv
IGRvIHRoZSBjb21wYXJpc29uLgotICAgIHdoaWxlIChzaXplID4gMSkgewotICAgICAgICAvLyBQ
aWNrIGFuIGVsZW1lbnQgdG8gY2hlY2ssIGhhbGYgd2F5IHRocm91Z2ggdGhlIGFycmF5LCBhbmQg
cmVhZCB0aGUgdmFsdWUuCi0gICAgICAgIGludCBwb3MgPSAoc2l6ZSAtIDEpID4+IDE7Ci0gICAg
ICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbcG9zXSk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIGtleSBtYXRjaGVzLCBzdWNjZXNzIQotICAgICAgICBpZiAodmFsID09IGtleSkKLSAg
ICAgICAgICAgIHJldHVybiAmYXJyYXlbcG9zXTsKLSAgICAgICAgLy8gVGhlIGl0ZW0gd2UgYXJl
IGxvb2tpbmcgZm9yIGlzIHNtYWxsZXIgdGhhbiB0aGUgaXRlbSBiZWluZyBjaGVjazsgcmVkdWNl
IHRoZSB2YWx1ZSBvZiAnc2l6ZScsCi0gICAgICAgIC8vIGNob3BwaW5nIG9mZiB0aGUgcmlnaHQg
aGFuZCBoYWxmIG9mIHRoZSBhcnJheS4KLSAgICAgICAgZWxzZSBpZiAoa2V5IDwgdmFsKQotICAg
ICAgICAgICAgc2l6ZSA9IHBvczsKLSAgICAgICAgLy8gRGlzY2FyZCBhbGwgdmFsdWVzIGluIHRo
ZSBsZWZ0IGhhbmQgaGFsZiBvZiB0aGUgYXJyYXksIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGl0
ZW0gYXQgcG9zLgotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemUgLT0gKHBvcyArIDEp
OwotICAgICAgICAgICAgYXJyYXkgKz0gKHBvcyArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gSW4gY2FzZSBvZiBCaW5hcnlTZWFyY2hNb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkg
J3NpemUnIHNob3VsZCBuZXZlciByZWFjaCB6ZXJvLgotICAgICAgICBpZiAobW9kZSA9PSBLZXlN
dXN0QmVQcmVzZW50SW5BcnJheSkKLSAgICAgICAgICAgIEFTU0VSVChzaXplKTsKLSAgICB9Ci0K
LSAgICAvLyBJbiBjYXNlIG9mIEJpbmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5B
cnJheSBpZiB3ZSByZWFjaCB0aGlzIHBvaW50Ci0gICAgLy8gd2UndmUgY2hvcHBlZCBkb3duIHRv
IG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGNoZWNrIGl0IG1hdGNoZXMKLSAgICBpZiAobW9kZSA9
PSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSkgewotICAgICAgICBBU1NFUlQoc2l6ZSA9PSAxKTsK
LSAgICAgICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KCZhcnJheVswXSkpOwotICAgIH0KKyAg
ICByZXR1cm4gYmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJh
eVR5cGUsIEV4dHJhY3RLZXksIEtleU11c3RCZVByZXNlbnRJbkFycmF5PihhcnJheSwgc2l6ZSwg
a2V5LCBleHRyYWN0S2V5KTsKK30KIAotICAgIHJldHVybiAmYXJyYXlbMF07CisvLyBSZXR1cm4g
emVybyBpZiB0aGUgZWxlbWVudCBpcyBub3QgZm91bmQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJh
eUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVu
YW1lIEV4dHJhY3RLZXk+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNo
KEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFj
dEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK3sKKyAgICByZXR1cm4gYmluYXJ5U2Vh
cmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXks
IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheT4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtl
eSk7CiB9CiAKLS8vIE1vZGlmaWVkIGJpbmFyeVNlYXJjaCgpIGFsZ29yaXRobSBkZXNpZ25lZCBm
b3IgYXJyYXktbGlrZSBjbGFzc2VzIHRoYXQgc3VwcG9ydAotLy8gb3BlcmF0b3JbXSBidXQgbm90
IG9wZXJhdG9yKz0uIE9uZSBleGFtcGxlIG9mIGEgY2xhc3MgdGhhdCBxdWFsaWZpZXMgaXMKLS8v
IFNlZ21lbnRlZFZlY3Rvci4KLXRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5
cGVuYW1lIEtleVR5cGUsIEtleVR5cGUoKmV4dHJhY3RLZXkpKEFycmF5RWxlbWVudFR5cGUqKSwg
dHlwZW5hbWUgQXJyYXlUeXBlPgotaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGdlbmVyaWNCaW5h
cnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5KQorLy8g
UmV0dXJuIHRoZSBlbGVtZW50IHRoYXQgaXMgZWl0aGVyIHRvIHRoZSBsZWZ0LCBvciB0aGUgcmln
aHQsIG9mIHdoZXJlIHRoZSBlbGVtZW50IHdvdWxkIGhhdmUgYmVlbiBmb3VuZC4KK3RlbXBsYXRl
PHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEV4
dHJhY3RLZXksIHR5cGVuYW1lIEFycmF5VHlwZT4KK2lubGluZSBBcnJheUVsZW1lbnRUeXBlKiBh
cHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5
VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCiB7
Ci0gICAgLy8gVGhlIGFycmF5IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgZWxlbWVudCAocHJl
LWNvbmRpdGlvbiwgYXJyYXkgZG9lcyBjb25hdGluIGtleSkuCi0gICAgLy8gSWYgdGhlIGFycmF5
IG9ubHkgY29udGFpbnMgb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8gZG8gdGhlIGNvbXBhcmlzb24u
Ci0gICAgc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKHNpemUgPiAxKSB7Ci0gICAgICAg
IC8vIFBpY2sgYW4gZWxlbWVudCB0byBjaGVjaywgaGFsZiB3YXkgdGhyb3VnaCB0aGUgYXJyYXks
IGFuZCByZWFkIHRoZSB2YWx1ZS4KLSAgICAgICAgaW50IHBvcyA9IChzaXplIC0gMSkgPj4gMTsK
LSAgICAgICAgS2V5VHlwZSB2YWwgPSBleHRyYWN0S2V5KCZhcnJheVtvZmZzZXQgKyBwb3NdKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBrZXkgbWF0Y2hlcywgc3VjY2VzcyEKLSAgICAg
ICAgaWYgKHZhbCA9PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4gJmFycmF5W29mZnNldCArIHBv
c107Ci0gICAgICAgIC8vIFRoZSBpdGVtIHdlIGFyZSBsb29raW5nIGZvciBpcyBzbWFsbGVyIHRo
YW4gdGhlIGl0ZW0gYmVpbmcgY2hlY2s7IHJlZHVjZSB0aGUgdmFsdWUgb2YgJ3NpemUnLAotICAg
ICAgICAvLyBjaG9wcGluZyBvZmYgdGhlIHJpZ2h0IGhhbmQgaGFsZiBvZiB0aGUgYXJyYXkuCi0g
ICAgICAgIGlmIChrZXkgPCB2YWwpCi0gICAgICAgICAgICBzaXplID0gcG9zOwotICAgICAgICAv
LyBEaXNjYXJkIGFsbCB2YWx1ZXMgaW4gdGhlIGxlZnQgaGFuZCBoYWxmIG9mIHRoZSBhcnJheSwg
dXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgaXRlbSBhdCBwb3MuCi0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgc2l6ZSAtPSAocG9zICsgMSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gKHBvcyAr
IDEpOwotICAgICAgICB9CisgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50
VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBSZXR1cm5BZGphY2VudEVsZW1l
bnRJZktleUlzTm90UHJlc2VudD4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9CiAK
LSAgICAgICAgLy8gJ3NpemUnIHNob3VsZCBuZXZlciByZWFjaCB6ZXJvLgotICAgICAgICBBU1NF
UlQoc2l6ZSk7Ci0gICAgfQotICAgIAotICAgIC8vIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQgd2Un
dmUgY2hvcHBlZCBkb3duIHRvIG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGNoZWNrIGl0IG1hdGNo
ZXMKLSAgICBBU1NFUlQoc2l6ZSA9PSAxKTsKLSAgICBBU1NFUlQoa2V5ID09IGV4dHJhY3RLZXko
JmFycmF5W29mZnNldF0pKTsKLSAgICByZXR1cm4gJmFycmF5W29mZnNldF07CisvLyBWYXJpYW50
cyBvZiB0aGUgYWJvdmUgdGhhdCB1c2UgY29uc3QuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVs
ZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1l
IEV4dHJhY3RLZXk+CitpbmxpbmUgY29uc3QgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNo
KGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3Qg
RXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK3sKKyAgICByZXR1cm4gYmlu
YXJ5U2VhcmNoPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtl
eT4oY29uc3RfY2FzdDxBcnJheVR5cGUmPihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7
Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBl
LCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+CitpbmxpbmUgY29uc3Qg
QXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5VHlwZSYgYXJyYXks
IHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9
IEV4dHJhY3RLZXkoKSkKK3sKKyAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPEFycmF5RWxlbWVu
dFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleT4oY29uc3RfY2FzdDxBcnJheVR5
cGUmPihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUs
IHR5cGVuYW1lIEV4dHJhY3RLZXk+CitpbmxpbmUgY29uc3QgQXJyYXlFbGVtZW50VHlwZSogYXBw
cm94aW1hdGVCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUs
IEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQoreworICAgIHJldHVybiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRUeXBl
LCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4o
YXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
QEAgLTMxNCw2ICsyNzgsOCBAQCB1c2luZyBXVEY6Ok1COwogdXNpbmcgV1RGOjppc1BvaW50ZXJB
bGlnbmVkOwogdXNpbmcgV1RGOjppczhCeXRlQWxpZ25lZDsKIHVzaW5nIFdURjo6YmluYXJ5U2Vh
cmNoOwordXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7Cit1c2luZyBXVEY6OmFwcHJveGltYXRl
QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVD
YXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0xMi0xMyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEF0dGVtcHQgdG8gcmF0
aW9uYWxpemUgYW5kIHNpbXBsaWZ5IFdURjo6YmluYXJ5U2VhcmNoCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ4OTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2l0Y2ggdG8gdXNpbmcgdGhlIG5ldyBi
aW5hcnlTZWFyY2goKSBBUEkuIE5vIGNoYW5nZSBpbiBiZWhhdmlvciwgc28gbm8gbmV3IHRlc3Rz
LgorCisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZmluZEluc3RhbmNlVGltZSk6CisKIDIwMTItMTIt
MTIgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFBsdWdJ
bk9yaWdpbkhhc2ggd2l0aCBlbXB0eSBNSU1FIHR5cGUgKDEwNDg4MikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
Mzc0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw3IEBAIFNNSUxUaW1lIFNWR1NNSUxFbGVt
ZW50OjpmaW5kSW5zdGFuY2VUaW0KICAgICBpZiAoIXNpemVPZkxpc3QpCiAgICAgICAgIHJldHVy
biBiZWdpbk9yRW5kID09IEJlZ2luID8gU01JTFRpbWU6OnVucmVzb2x2ZWQoKSA6IFNNSUxUaW1l
OjppbmRlZmluaXRlKCk7CiAKLSAgICBjb25zdCBTTUlMVGltZVdpdGhPcmlnaW4qIHJlc3VsdCA9
IGJpbmFyeVNlYXJjaDxjb25zdCBTTUlMVGltZVdpdGhPcmlnaW4sIFNNSUxUaW1lLCBleHRyYWN0
VGltZUZyb21WZWN0b3I+KGxpc3QuYmVnaW4oKSwgc2l6ZU9mTGlzdCwgbWluaW11bVRpbWUsIFdU
Rjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgIGNvbnN0IFNNSUxUaW1lV2l0aE9y
aWdpbiogcmVzdWx0ID0gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8Y29uc3QgU01JTFRpbWVXaXRo
T3JpZ2luLCBTTUlMVGltZSwgZXh0cmFjdFRpbWVGcm9tVmVjdG9yPihsaXN0LCBzaXplT2ZMaXN0
LCBtaW5pbXVtVGltZSk7CiAgICAgaW50IGluZGV4T2ZSZXN1bHQgPSByZXN1bHQgLSBsaXN0LmJl
Z2luKCk7CiAgICAgQVNTRVJUKGluZGV4T2ZSZXN1bHQgPCBzaXplT2ZMaXN0KTsKICAgICBjb25z
dCBTTUlMVGltZSYgY3VycmVudFRpbWUgPSBsaXN0W2luZGV4T2ZSZXN1bHRdLnRpbWUoKTsK
</data>
<flag name="commit-queue"
          id="196017"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>179232</attachid>
            <date>2012-12-13 02:05:21 -0800</date>
            <delta_ts>2012-12-13 02:12:52 -0800</delta_ts>
            <desc>StdLibExtras.h</desc>
            <filename>StdLibExtras.h</filename>
            <type>text/plain</type>
            <size>11203</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpZm5kZWYgV1RGX1N0ZExpYkV4dHJhc19oCiNkZWZpbmUg
V1RGX1N0ZExpYkV4dHJhc19oCgojaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgoKLy8gVXNlIHRoZXNlIHRvIGRlY2xhcmUgYW5kIGRl
ZmluZSBhIHN0YXRpYyBsb2NhbCB2YXJpYWJsZSAoc3RhdGljIFQ7KSBzbyB0aGF0Ci8vICBpdCBp
cyBsZWFrZWQgc28gdGhhdCBpdHMgZGVzdHJ1Y3RvcnMgYXJlIG5vdCBjYWxsZWQgYXQgZXhpdC4g
VXNpbmcgdGhpcwovLyAgbWFjcm8gYWxzbyBhbGxvd3Mgd29ya2Fyb3VuZHMgYSBjb21waWxlciBi
dWcgcHJlc2VudCBpbiBBcHBsZSdzIHZlcnNpb24gb2YgR0NDIDQuMC4xLgojaWZuZGVmIERFRklO
RV9TVEFUSUNfTE9DQUwKI2lmIENPTVBJTEVSKEdDQykgJiYgZGVmaW5lZChfX0FQUExFX0NDX18p
ICYmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMCAmJiBfX0dOVUNfUEFUQ0hM
RVZFTF9fID09IDEKI2RlZmluZSBERUZJTkVfU1RBVElDX0xPQ0FMKHR5cGUsIG5hbWUsIGFyZ3Vt
ZW50cykgXAogICAgc3RhdGljIHR5cGUqIG5hbWUjI1B0ciA9IG5ldyB0eXBlIGFyZ3VtZW50czsg
XAogICAgdHlwZSYgbmFtZSA9ICpuYW1lIyNQdHIKI2Vsc2UKI2RlZmluZSBERUZJTkVfU1RBVElD
X0xPQ0FMKHR5cGUsIG5hbWUsIGFyZ3VtZW50cykgXAogICAgc3RhdGljIHR5cGUmIG5hbWUgPSAq
bmV3IHR5cGUgYXJndW1lbnRzCiNlbmRpZgojZW5kaWYKCi8vIFVzZSB0aGlzIG1hY3JvIHRvIGRl
Y2xhcmUgYW5kIGRlZmluZSBhIGRlYnVnLW9ubHkgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgbWF5IGhh
dmUgYQovLyBub24tdHJpdmlhbCBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4gV2hlbiBidWls
ZGluZyB3aXRoIGNsYW5nLCB0aGlzIHdpbGwgc3VwcHJlc3MKLy8gd2FybmluZ3MgYWJvdXQgZ2xv
YmFsIGNvbnN0cnVjdG9ycyBhbmQgZXhpdC10aW1lIGRlc3RydWN0b3JzLgojaWZuZGVmIE5ERUJV
RwojaWYgQ09NUElMRVIoQ0xBTkcpCiNkZWZpbmUgREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKHR5
cGUsIG5hbWUsIGFyZ3VtZW50cykgXAogICAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBwdXNo
IikgXAogICAgX1ByYWdtYSgiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdnbG9iYWwtY29u
c3RydWN0b3JzXCIiKSBcCiAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCIt
V2V4aXQtdGltZS1kZXN0cnVjdG9yc1wiIikgXAogICAgc3RhdGljIHR5cGUgbmFtZSBhcmd1bWVu
dHM7IFwKICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcG9wIikKI2Vsc2UKI2RlZmluZSBE
RUZJTkVfREVCVUdfT05MWV9HTE9CQUwodHlwZSwgbmFtZSwgYXJndW1lbnRzKSBcCiAgICBzdGF0
aWMgdHlwZSBuYW1lIGFyZ3VtZW50czsKI2VuZGlmIC8vIENPTVBJTEVSKENMQU5HKQojZWxzZQoj
ZGVmaW5lIERFRklORV9ERUJVR19PTkxZX0dMT0JBTCh0eXBlLCBuYW1lLCBhcmd1bWVudHMpCiNl
bmRpZiAvLyBOREVCVUcKCi8vIE9CSkVDVF9PRkZTRVRPRjogTGlrZSB0aGUgQysrIG9mZnNldG9m
IG1hY3JvLCBidXQgeW91IGNhbiB1c2UgaXQgd2l0aCBjbGFzc2VzLgovLyBUaGUgbWFnaWMgbnVt
YmVyIDB4NDAwMCBpcyBpbnNpZ25pZmljYW50LiBXZSB1c2UgaXQgdG8gYXZvaWQgdXNpbmcgTlVM
TCwgc2luY2UKLy8gTlVMTCBjYW4gY2F1c2UgY29tcGlsZXIgcHJvYmxlbXMsIGVzcGVjaWFsbHkg
aW4gY2FzZXMgb2YgbXVsdGlwbGUgaW5oZXJpdGFuY2UuCiNkZWZpbmUgT0JKRUNUX09GRlNFVE9G
KGNsYXNzLCBmaWVsZCkgKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PigmKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2xhc3MqPigweDQwMDApLT5maWVsZCkpIC0gMHg0MDAwKQoKLy8gU1RSSU5HSVpFOiBD
YW4gY29udmVydCBhbnkgdmFsdWUgdG8gcXVvdGVkIHN0cmluZywgZXZlbiBleHBhbmRhYmxlIG1h
Y3JvcwojZGVmaW5lIFNUUklOR0laRShleHApICNleHAKI2RlZmluZSBTVFJJTkdJWkVfVkFMVUVf
T0YoZXhwKSBTVFJJTkdJWkUoZXhwKQoKLyoKICogVGhlIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZTEq
PihbcG9pbnRlciB0byBUeXBlMl0pIGV4cHJlc3Npb25zIC0gd2hlcmUKICogc2l6ZW9mKFR5cGUx
KSA+IHNpemVvZihUeXBlMikgLSBjYXVzZSB0aGUgZm9sbG93aW5nIHdhcm5pbmcgb24gQVJNIHdp
dGggR0NDOgogKiBpbmNyZWFzZXMgcmVxdWlyZWQgYWxpZ25tZW50IG9mIHRhcmdldCB0eXBlLgog
KgogKiBBbiBpbXBsaWNpdCBvciBhbiBleHRyYSBzdGF0aWNfY2FzdDx2b2lkKj4gYnlwYXNzZXMg
dGhlIHdhcm5pbmcuCiAqIEZvciBtb3JlIGluZm8gc2VlIHRoZSBmb2xsb3dpbmcgYnVnemlsbGEg
ZW50cmllczoKICogLSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzgw
NDUKICogLSBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzOTc2
CiAqLwojaWYgKENQVShBUk0pIHx8IENQVShNSVBTKSkgJiYgQ09NUElMRVIoR0NDKQp0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgpib29sIGlzUG9pbnRlclR5cGVBbGlnbm1lbnRPa2F5KFR5cGUqIHB0
cikKewogICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRyKSAlIF9fYWxp
Z25vZl9fKFR5cGUpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVHlwZVB0cj4KVHlwZVB0ciByZWlu
dGVycHJldF9jYXN0X3B0cih2b2lkKiBwdHIpCnsKICAgIEFTU0VSVChpc1BvaW50ZXJUeXBlQWxp
Z25tZW50T2theShyZWludGVycHJldF9jYXN0PFR5cGVQdHI+KHB0cikpKTsKICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFR5cGVQdHI+KHB0cik7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFR5cGVQ
dHI+ClR5cGVQdHIgcmVpbnRlcnByZXRfY2FzdF9wdHIoY29uc3Qgdm9pZCogcHRyKQp7CiAgICBB
U1NFUlQoaXNQb2ludGVyVHlwZUFsaWdubWVudE9rYXkocmVpbnRlcnByZXRfY2FzdDxUeXBlUHRy
PihwdHIpKSk7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUeXBlUHRyPihwdHIpOwp9CiNl
bHNlCnRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CmJvb2wgaXNQb2ludGVyVHlwZUFsaWdubWVudE9r
YXkoVHlwZSopCnsKICAgIHJldHVybiB0cnVlOwp9CiNkZWZpbmUgcmVpbnRlcnByZXRfY2FzdF9w
dHIgcmVpbnRlcnByZXRfY2FzdAojZW5kaWYKCm5hbWVzcGFjZSBXVEYgewoKc3RhdGljIGNvbnN0
IHNpemVfdCBLQiA9IDEwMjQ7CnN0YXRpYyBjb25zdCBzaXplX3QgTUIgPSAxMDI0ICogMTAyNDsK
CmlubGluZSBib29sIGlzUG9pbnRlckFsaWduZWQodm9pZCogcCkKewogICAgcmV0dXJuICEoKGlu
dHB0cl90KShwKSAmIChzaXplb2YoY2hhciopIC0gMSkpOwp9CgppbmxpbmUgYm9vbCBpczhCeXRl
QWxpZ25lZCh2b2lkKiBwKQp7CiAgICByZXR1cm4gISgodWludHB0cl90KShwKSAmIChzaXplb2Yo
ZG91YmxlKSAtIDEpKTsKfQoKLyoKICogQysrJ3MgaWRlYSBvZiBhIHJlaW50ZXJwcmV0X2Nhc3Qg
bGFja3Mgc3VmZmljaWVudCBjb2pvbmVzLgogKi8KdGVtcGxhdGU8dHlwZW5hbWUgVE8sIHR5cGVu
YW1lIEZST00+CmlubGluZSBUTyBiaXR3aXNlX2Nhc3QoRlJPTSBmcm9tKQp7CiAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoVE8pID09IHNpemVvZihGUk9NKSwgV1RGX2JpdHdpc2VfY2FzdF9zaXpl
b2ZfY2FzdGVkX3R5cGVzX2lzX2VxdWFsKTsKICAgIHVuaW9uIHsKICAgICAgICBGUk9NIGZyb207
CiAgICAgICAgVE8gdG87CiAgICB9IHU7CiAgICB1LmZyb20gPSBmcm9tOwogICAgcmV0dXJuIHUu
dG87Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgppbmxpbmUgVG8gc2Fm
ZUNhc3QoRnJvbSB2YWx1ZSkKewogICAgQVNTRVJUKGlzSW5Cb3VuZHM8VG8+KHZhbHVlKSk7CiAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+KHZhbHVlKTsKfQoKLy8gUmV0dXJucyBhIGNvdW50IG9m
IHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gJ2JpdHMnLgppbmxpbmUgc2l6ZV90IGJpdENvdW50
KHVuc2lnbmVkIGJpdHMpCnsKICAgIGJpdHMgPSBiaXRzIC0gKChiaXRzID4+IDEpICYgMHg1NTU1
NTU1NSk7CiAgICBiaXRzID0gKGJpdHMgJiAweDMzMzMzMzMzKSArICgoYml0cyA+PiAyKSAmIDB4
MzMzMzMzMzMpOwogICAgcmV0dXJuICgoKGJpdHMgKyAoYml0cyA+PiA0KSkgJiAweEYwRjBGMEYp
ICogMHgxMDEwMTAxKSA+PiAyNDsKfQoKLy8gTWFjcm8gdGhhdCByZXR1cm5zIGEgY29tcGlsZSB0
aW1lIGNvbnN0YW50IHdpdGggdGhlIGxlbmd0aCBvZiBhbiBhcnJheSwgYnV0IGdpdmVzIGFuIGVy
cm9yIGlmIHBhc3NlZCBhIG5vbi1hcnJheS4KdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IFNp
emU+IGNoYXIgKCZBcnJheUxlbmd0aEhlbHBlckZ1bmN0aW9uKFQgKCYpW1NpemVdKSlbU2l6ZV07
Ci8vIEdDQyBuZWVkcyBzb21lIGhlbHAgdG8gZGVkdWNlIGEgMCBsZW5ndGggYXJyYXkuCiNpZiBD
T01QSUxFUihHQ0MpCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNoYXIgKCZBcnJheUxlbmd0aEhlbHBl
ckZ1bmN0aW9uKFQgKCYpWzBdKSlbMF07CiNlbmRpZgojZGVmaW5lIFdURl9BUlJBWV9MRU5HVEgo
YXJyYXkpIHNpemVvZig6OldURjo6QXJyYXlMZW5ndGhIZWxwZXJGdW5jdGlvbihhcnJheSkpCgov
LyBFZmZpY2llbnQgaW1wbGVtZW50YXRpb24gdGhhdCB0YWtlcyBhZHZhbnRhZ2Ugb2YgcG93ZXJz
IG9mIHR3by4KaW5saW5lIHNpemVfdCByb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVfdCBkaXZpc29y
LCBzaXplX3QgeCkKewogICAgQVNTRVJUKGRpdmlzb3IgJiYgIShkaXZpc29yICYgKGRpdmlzb3Ig
LSAxKSkpOwogICAgc2l6ZV90IHJlbWFpbmRlck1hc2sgPSBkaXZpc29yIC0gMTsKICAgIHJldHVy
biAoeCArIHJlbWFpbmRlck1hc2spICYgfnJlbWFpbmRlck1hc2s7Cn0KdGVtcGxhdGU8c2l6ZV90
IGRpdmlzb3I+IGlubGluZSBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCkKewog
ICAgQ09NUElMRV9BU1NFUlQoZGl2aXNvciAmJiAhKGRpdmlzb3IgJiAoZGl2aXNvciAtIDEpKSwg
ZGl2aXNvcl9pc19hX3Bvd2VyX29mX3R3byk7CiAgICByZXR1cm4gcm91bmRVcFRvTXVsdGlwbGVP
ZihkaXZpc29yLCB4KTsKfQoKZW51bSBCaW5hcnlTZWFyY2hNb2RlIHsKICAgIEtleU11c3RCZVBy
ZXNlbnRJbkFycmF5LAogICAgS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5LAogICAgUmV0dXJu
QWRqYWNlbnRFbGVtZW50SWZLZXlJc05vdFByZXNlbnQKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIEFy
cmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlw
ZW5hbWUgRXh0cmFjdEtleSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlPgppbmxpbmUgQXJyYXlFbGVt
ZW50VHlwZSogYmluYXJ5U2VhcmNoSW1wbChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwg
S2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkp
CnsKICAgIC8vIFRoZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQgKHBy
ZS1jb25kaXRpb24sIGFycmF5IGRvZXMgY29uYXRpbiBrZXkpLgogICAgLy8gSWYgdGhlIGFycmF5
IG9ubHkgY29udGFpbnMgb25lIGVsZW1lbnQsIG5vIG5lZWQgdG8gZG8gdGhlIGNvbXBhcmlzb24u
CiAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKICAgIHdoaWxlIChzaXplID4gMSkgewogICAgICAgIC8v
IFBpY2sgYW4gZWxlbWVudCB0byBjaGVjaywgaGFsZiB3YXkgdGhyb3VnaCB0aGUgYXJyYXksIGFu
ZCByZWFkIHRoZSB2YWx1ZS4KICAgICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+PiAxOwogICAg
ICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9zXSk7CiAgICAg
ICAgCiAgICAgICAgLy8gSWYgdGhlIGtleSBtYXRjaGVzLCBzdWNjZXNzIQogICAgICAgIGlmICh2
YWwgPT0ga2V5KQogICAgICAgICAgICByZXR1cm4gJmFycmF5W29mZnNldCArIHBvc107CiAgICAg
ICAgLy8gVGhlIGl0ZW0gd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHNtYWxsZXIgdGhhbiB0aGUgaXRl
bSBiZWluZyBjaGVjazsgcmVkdWNlIHRoZSB2YWx1ZSBvZiAnc2l6ZScsCiAgICAgICAgLy8gY2hv
cHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LgogICAgICAgIGlmIChr
ZXkgPCB2YWwpCiAgICAgICAgICAgIHNpemUgPSBwb3M7CiAgICAgICAgLy8gRGlzY2FyZCBhbGwg
dmFsdWVzIGluIHRoZSBsZWZ0IGhhbmQgaGFsZiBvZiB0aGUgYXJyYXksIHVwIHRvIGFuZCBpbmNs
dWRpbmcgdGhlIGl0ZW0gYXQgcG9zLgogICAgICAgIGVsc2UgewogICAgICAgICAgICBzaXplIC09
IChwb3MgKyAxKTsKICAgICAgICAgICAgb2Zmc2V0ICs9IChwb3MgKyAxKTsKICAgICAgICB9Cgog
ICAgICAgIEFTU0VSVChtb2RlICE9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IHx8IHNpemUpOwog
ICAgfQogICAgCiAgICBpZiAobW9kZSA9PSBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXkgJiYg
IXNpemUpCiAgICAgICAgcmV0dXJuIDA7CiAgICAKICAgIEFycmF5RWxlbWVudFR5cGUqIHJlc3Vs
dCA9ICZhcnJheVtvZmZzZXRdOwoKICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50
SW5BcnJheSAmJiBrZXkgIT0gZXh0cmFjdEtleShyZXN1bHQpKQogICAgICAgIHJldHVybiAwOwoK
ICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFycmF5KSB7CiAgICAgICAgQVNTRVJU
KHNpemUgPT0gMSk7CiAgICAgICAgQVNTRVJUKGtleSA9PSBleHRyYWN0S2V5KHJlc3VsdCkpOwog
ICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KCi8vIElmIHRoZSBlbGVtZW50IGlzIG5vdCBmb3Vu
ZCwgY3Jhc2ggaWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYW5kIGJlaGF2ZSBsaWtlIEFsd2F5c1Jl
dHVybkFkamFjZW50RWxlbWVudCBpbiByZWxlYXNlIGJ1aWxkcy4KdGVtcGxhdGU8dHlwZW5hbWUg
QXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0
eXBlbmFtZSBFeHRyYWN0S2V5PgppbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNo
KEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFj
dEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKewogICAgcmV0dXJuIGJpbmFyeVNlYXJj
aEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBL
ZXlNdXN0QmVQcmVzZW50SW5BcnJheT4oYXJyYXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cn0K
Ci8vIFJldHVybiB6ZXJvIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBmb3VuZC4KdGVtcGxhdGU8dHlw
ZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgppbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5Qmlu
YXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29u
c3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKewogICAgcmV0dXJuIGJp
bmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRy
YWN0S2V5LCBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4
dHJhY3RLZXkpOwp9CgovLyBSZXR1cm4gdGhlIGVsZW1lbnQgdGhhdCBpcyBlaXRoZXIgdG8gdGhl
IGxlZnQsIG9yIHRoZSByaWdodCwgb2Ygd2hlcmUgdGhlIGVsZW1lbnQgd291bGQgaGF2ZSBiZWVu
IGZvdW5kLgp0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5LCB0eXBlbmFtZSBBcnJheVR5cGU+CmlubGluZSBBcnJh
eUVsZW1lbnRUeXBlKiBhcHByb3hpbWF0ZUJpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBz
aXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBF
eHRyYWN0S2V5KCkpCnsKICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5
cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50
SWZLZXlJc05vdFByZXNlbnQ+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwp9CgovLyBW
YXJpYW50cyBvZiB0aGUgYWJvdmUgdGhhdCB1c2UgY29uc3QuCnRlbXBsYXRlPHR5cGVuYW1lIEFy
cmF5RWxlbWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlw
ZW5hbWUgRXh0cmFjdEtleT4KaW5saW5lIGNvbnN0IEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNl
YXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNv
bnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCnsKICAgIHJldHVybiBi
aW5hcnlTZWFyY2g8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0
S2V5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5
KTsKfQp0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBl
LCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJhY3RLZXk+CmlubGluZSBjb25zdCBB
cnJheUVsZW1lbnRUeXBlKiB0cnlCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwg
c2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0g
RXh0cmFjdEtleSgpKQp7CiAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPEFycmF5RWxlbWVudFR5
cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleT4oY29uc3RfY2FzdDxBcnJheVR5cGUm
PihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cn0KdGVtcGxhdGU8dHlwZW5hbWUgQXJy
YXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBl
bmFtZSBFeHRyYWN0S2V5PgppbmxpbmUgY29uc3QgQXJyYXlFbGVtZW50VHlwZSogYXBwcm94aW1h
dGVCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5
cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQp7CiAg
ICByZXR1cm4gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlw
ZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5Pihjb25zdF9jYXN0PEFycmF5VHlwZSY+KGFycmF5KSwg
c2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKfQoKfSAvLyBuYW1lc3BhY2UgV1RGCgovLyBUaGlzIHZl
cnNpb24gb2YgcGxhY2VtZW50IG5ldyBvbWl0cyBhIDAgY2hlY2suCmVudW0gTm90TnVsbFRhZyB7
IE5vdE51bGwgfTsKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxUYWcs
IHZvaWQqIGxvY2F0aW9uKQp7CiAgICBBU1NFUlQobG9jYXRpb24pOwogICAgcmV0dXJuIGxvY2F0
aW9uOwp9Cgp1c2luZyBXVEY6OktCOwp1c2luZyBXVEY6Ok1COwp1c2luZyBXVEY6OmlzUG9pbnRl
ckFsaWduZWQ7CnVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7CnVzaW5nIFdURjo6YmluYXJ5U2Vh
cmNoOwp1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKdXNpbmcgV1RGOjphcHByb3hpbWF0ZUJp
bmFyeVNlYXJjaDsKdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CnVzaW5nIFdURjo6c2FmZUNhc3Q7
CgojZW5kaWYgLy8gV1RGX1N0ZExpYkV4dHJhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179233</attachid>
            <date>2012-12-13 02:12:52 -0800</date>
            <delta_ts>2012-12-13 17:00:21 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>binarysearch.patch</filename>
            <type>text/plain</type>
            <size>28444</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEyLTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXR0ZW1wdCB0byByYXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCB0byB1
c2luZyB0aGUgbmV3IGJpbmFyeVNlYXJjaCgpIEFQSS4gTm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdp
bkZvclJldHVybik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omdl
dEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChK
U0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICog
ZGZnL0RGR01pbmlmaWVkR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBo
OjphdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAg
KiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhGb3JCeXRlY29kZUluZGV4KToKKwogMjAx
Mi0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9TUiBl
eGl0IGNvbXBpbGVyIHNob3VsZCBlbWl0IGNvZGUgZm9yIHJlc2V0dGluZyB0aGUgZXhlY3V0aW9u
IGNvdW50ZXIgdGhhdCBtYXRjaGVzIHRoZSBsb2dpYyBvZiBFeGVjdXRpb25Db3VudGVyLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxLDcgKzI3OTEsOCBAQCB1bnNpZ25lZCBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KEV4ZWNTCiAgICAgaWYgKGdldEpJVENvZGUoKS5nZXRFeGVj
dXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKICAgICAg
ICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9m
ZnNldCogcmVzdWx0ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxJbmRp
Y2VzLmJlZ2luKCksIGNhbGxJbmRpY2VzLnNpemUoKSwgY2FsbFJldHVybk9mZnNldCk7CisgICAg
ICAgICAgICBiaW5hcnlTZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkPigKKyAgICAgICAgICAgICAgICBjYWxsSW5kaWNlcywgY2FsbEluZGljZXMuc2l6ZSgp
LCBjYWxsUmV0dXJuT2Zmc2V0LCBnZXRDYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAgICAgQVNTRVJU
KHJlc3VsdC0+Y2FsbFJldHVybk9mZnNldCA9PSBjYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdC0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgfQpAQCAtMjgxNiw4ICsyODE3LDEx
IEBAIGJvb2wgQ29kZUJsb2NrOjpjb2RlT3JpZ2luRm9yUmV0dXJuKFJldHUKICAgICB9CiAgICAg
CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJl
c3MudmFsdWUoKSk7Ci0gICAgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkgPSBi
aW5hcnlTZWFyY2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQsIGdldENh
bGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luPihjb2RlT3JpZ2lucygpLmJlZ2luKCksIGNvZGVP
cmlnaW5zKCkuc2l6ZSgpLCBvZmZzZXQsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkp
OwotICAgIGlmIChlbnRyeS0+Y2FsbFJldHVybk9mZnNldCAhPSBvZmZzZXQpCisgICAgQ29kZU9y
aWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkgPQorICAgICAgICB0cnlCaW5hcnlTZWFyY2g8
Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQ+KAorICAgICAgICAgICAgY29k
ZU9yaWdpbnMoKSwgY29kZU9yaWdpbnMoKS5zaXplKCksIG9mZnNldCwKKyAgICAgICAgICAgIGdl
dENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luKTsKKyAgICBpZiAoIWVudHJ5KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgY29kZU9yaWdpbiA9IGVudHJ5LT5jb2RlT3JpZ2luOwogICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMzAgKzIzOCwzMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8oUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gKihiaW5hcnlTZWFyY2g8U3RydWN0dXJlU3R1YkluZm8sIHZvaWQqLCBnZXRTdHJ1Y3R1cmVT
dHViSW5mb1JldHVybkxvY2F0aW9uPihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0
cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgICAg
ICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lkKj4obV9z
dHJ1Y3R1cmVTdHViSW5mb3MsIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgcmV0dXJuQWRk
cmVzcy52YWx1ZSgpLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8odW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2Vh
cmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB1bnNpZ25lZCwgZ2V0U3RydWN0dXJlU3R1YkluZm9CeXRl
Y29kZUluZGV4PihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0cnVjdHVyZVN0dWJJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWduZWQ+KG1fc3RydWN0dXJlU3R1YkluZm9z
LCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldFN0cnVjdHVy
ZVN0dWJJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgICAgICAKICAgICAgICAgQnlW
YWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWduZWQsIGdl
dEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBtX2J5VmFsSW5m
b3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gKihiaW5hcnlT
ZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9ieVZhbEluZm9zLCBtX2J5VmFsSW5mb3Muc2l6
ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KSk7CiAgICAgICAg
IH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQqLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlv
bj4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPENh
bGxMaW5rSW5mbywgdm9pZCo+KG1fY2FsbExpbmtJbmZvcywgbV9jYWxsTGlua0luZm9zLnNpemUo
KSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlvbikp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5r
SW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gKihiaW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZCwgZ2V0Q2FsbExpbmtJ
bmZvQnl0ZWNvZGVJbmRleD4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZv
cy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFyeVNl
YXJjaDxDYWxsTGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5mb3MsIG1fY2FsbExpbmtJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldENhbGxMaW5rSW5mb0J5dGVjb2RlSW5kZXgp
KTsKICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTM1OSwxNSArMzU5LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZmdEYXRh
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+
b3NyRW50cnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDwKLSAgICAgICAgICAg
ICAgICBERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRhQnl0
ZWNvZGVJbmRleD4oCi0gICAgICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnkuYmVn
aW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIGJ5
dGVjb2RlSW5kZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+bV9ieXRlY29kZUluZGV4ICE9IGJ5dGVjb2RlSW5kZXgpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQ+KAor
ICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnksIG1fZGZnRGF0YS0+b3NyRW50cnku
c2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgICAgIERGRzo6Z2V0T1NSRW50cnlE
YXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVk
IGFwcGVuZE9TUkV4aXQoY29uc3QgREZHOjpPU1JFeGl0JiBvc3JFeGl0KQpAQCAtNjc4LDcgKzY3
Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIFZhbHVlUHJvZmlsZSog
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJpY0JpbmFy
eVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+
KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQp
OworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFsdWVQ
cm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVBy
b2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0VmFsdWVQ
cm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKICAgICAgICAgICAgIEFTU0VSVChpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKICAgICAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCkBAIC03MTEs
NyArNzA3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFy
ZUNhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fcmFyZUNhc2VQcm9maWxlc1tpbmRl
eF07IH0KICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdldFJhcmVD
YXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQ
cm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBiaW5h
cnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fcmFyZUNh
c2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisg
ICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKQEAgLTczOSw3ICs3MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
UmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1
cm4gJm1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgICAgIFJhcmVDYXNl
UHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRl
Y29kZU9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0Jp
bmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNv
ZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKKyAgICAgICAgICAgICAgICBtX3NwZWNpYWxG
YXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNv
ZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZz
ZXQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNp
YWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2OSw3ICs3NjksNyBAQCBwcml2YXRl
OgogCiBpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVn
aW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2NrSW5k
ZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cy5iZWdpbigpLCBsaW5raW5nVGFyZ2V0cy5zaXpl
KCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVj
b2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJsb2Nr
SW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgpLCBi
eXRlY29kZUJlZ2luLCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNaW5pZmllZEdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNCAr
NDMsOCBAQCBwdWJsaWM6CiAKICAgICBNaW5pZmllZE5vZGUqIGF0KE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBpZiAoIW1fbGlzdC5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgTWluaWZpZWROb2RlKiBlbnRyeSA9Ci0gICAgICAgICAgICBiaW5hcnlT
ZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXgsIE1pbmlmaWVkTm9kZTo6Z2V0SW5kZXg+KAot
ICAgICAgICAgICAgICAgIG1fbGlzdC5iZWdpbigpLCBtX2xpc3Quc2l6ZSgpLCBub2RlSW5kZXgs
IFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAgICBpZiAoZW50cnktPmlu
ZGV4KCkgIT0gbm9kZUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJldHVy
biBlbnRyeTsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxNaW5pZmllZE5vZGUsIE5v
ZGVJbmRleD4oCisgICAgICAgICAgICBtX2xpc3QsIG1fbGlzdC5zaXplKCksIG5vZGVJbmRleCwg
TWluaWZpZWROb2RlOjpnZXRJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5kKGNv
bnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMzc0MzMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29k
ZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0g
ICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2Rl
TWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1
cm5CeXRlY29kZUluZGV4LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5k
ZXgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgICAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOwpAQCAtNzQ5
LDcgKzc0OSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tG
b3IoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29k
ZUJsb2NrKTsKICAgICAKLSAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBi
aW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigp
LCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
OworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVjb2Rl
ZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVCht
YXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEzNzQzMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIp
OwogICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVN
YXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7
CiAgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0
Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6
ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5z
aWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5dGVj
b2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgICAgIEFTU0VSVChtYXBwaW5n
LT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CkBAIC02OTYsNyArNjk2
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0
Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRl
Y29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2sp
OwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNl
YXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29k
ZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1hcHBpbmcp
OwogICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OCw3
ICszNzgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAKICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBtYXA7CiAgICAgY29kZUJsb2NrLT5qaXRDb2Rl
TWFwKCktPmRlY29kZShtYXApOwotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KG1hcC5iZWdpbigpLCBtYXAu
c2l6ZSgpLCBwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CisgICAgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KG1hcCwgbWFwLnNpemUoKSwgcGMgLSBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLmJlZ2luKCksIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0
ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgIEFTU0VSVChtYXBwaW5nLT5t
X2J5dGVjb2RlSW5kZXggPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBjIC0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgQnl0ZWNvZGVTZXF1ZW5jZTo6fkJ5dGVjb2RlU2VxdWVuY2UoKQogCiB1bnNpZ25lZCBCeXRl
Y29kZVNlcXVlbmNlOjppbmRleEZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlLCB1bnNpZ25lZCwg
Z2V0Qnl0ZWNvZGVJbmRleEZvckJ5dGVjb2RlPihjb25zdF9jYXN0PEJ5dGVjb2RlKj4obV9zZXF1
ZW5jZS5iZWdpbigpKSwgbV9zZXF1ZW5jZS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpIC0gbV9zZXF1
ZW5jZS5iZWdpbigpOworICAgIHJldHVybiBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGUsIHVuc2lnbmVk
PihtX3NlcXVlbmNlLCBtX3NlcXVlbmNlLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Qnl0ZWNv
ZGVJbmRleEZvckJ5dGVjb2RlKSAtIG1fc2VxdWVuY2UuYmVnaW4oKTsKIH0KIAogY29uc3QgQnl0
ZWNvZGUmIEJ5dGVjb2RlU2VxdWVuY2U6OmZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzYpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEyLTEzICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0ZW1wdCB0byByYXRpb25h
bGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpbmFyeSBzZWFyY2ggbm93IGhhcyB0aHJlZSBt
b2RlczoKKworICAgICAgICBUaGUgZGVmYXVsdDogYXNzZXJ0IHRoYXQgdGhlIGtleSB3YXMgZm91
bmQsIGJ1dCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCBpZiBpdAorICAgICAgICB3YXNuJ3Qg
Zm91bmQsIGlmIGFzc2VydHMgYXJlIHR1cm5lZCBvZmYuCisgICAgICAgIAorICAgICAgICB0cnlC
aW5hcnlTZWFyY2g6IHJldHVybiAwIGlmIHRoZSBrZXkgd2Fzbid0IGZvdW5kLgorICAgICAgICAK
KyAgICAgICAgYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g6IGlmIHRoZSBrZXkgaXMgbm90IGZvdW5k
LCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCAoZWl0aGVyCisgICAgICAgIHRoZSBsZWZ0IG9y
IHJpZ2h0OyBubyBndWFyYW50ZWUgd2hpY2gpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNv
IHJlZHVjZXMgdGhlIG51bWJlciBvZiB2YXJpYW50cyBvZiBiaW5hcnlTZWFyY2guIFRoZSBmdW5j
dG9yIHZhcmlhbnQgaXMgbm93CisgICAgICAgIGdvbmUgYmVjYXVzZSBiaW5hcnlTZWFyY2ggbm93
IGFsd2F5cyB1c2VzIGEgZnVuY3RvciBmb3IgdGhlIGtleSBleHRyYWN0b3IuIFRoZQorICAgICAg
ICBnZW5lcmljIHZhcmlhbnQgaXMgbm93IGdvbmUgYmVjYXVzZSBiaW5hcnlTZWFyY2ggYWx3YXlz
IGV4cGVjdHMgYW4gYXJyYXkgdHlwZSB0aGF0CisgICAgICAgIGNhbiBkbyBvcGVyYXRvcltdLgor
CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpiaW5hcnlTZWFy
Y2hJbXBsKToKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdURjo6dHJ5
QmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdURjo6YXBwcm94aW1hdGVCaW5hcnlTZWFyY2gpOgor
CiAyMDEyLTEyLTEyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1lbnRhdGlvbjogcmVt
b3ZlIGZha2Ugcm9vdCBNZW1vcnlPYmplY3RJbmZvLgpJbmRleDogU291cmNlL1dURi93dGYvU3Rk
TGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJ
KHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsMTI1ICsxNzgsODUgQEAgdGVtcGxhdGU8c2l6ZV90IGRpdmlzb3I+
IGlubGluZSBzaXplX3QgcgogCiBlbnVtIEJpbmFyeVNlYXJjaE1vZGUgewogICAgIEtleU11c3RC
ZVByZXNlbnRJbkFycmF5LAotICAgIEtleU11c3ROb3RCZVByZXNlbnRJbkFycmF5CisgICAgS2V5
TWlnaHROb3RCZVByZXNlbnRJbkFycmF5LAorICAgIFJldHVybkFkamFjZW50RWxlbWVudElmS2V5
SXNOb3RQcmVzZW50CiB9OwogCi0vLyBCaW5hcnkgc2VhcmNoIGFsZ29yaXRobSwgY2FsbHMgZXh0
cmFjdEtleSBvbiBwcmUtc29ydGVkIGVsZW1lbnRzIGluIGFycmF5LAotLy8gY29tcGFyZXMgcmVz
dWx0IHdpdGgga2V5IChLZXlUeXBlcyBzaG91bGQgYmUgY29tcGFyYWJsZSB3aXRoICc9PScsIGFu
ZCAnPCcpLgotdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5
VHlwZSwgS2V5VHlwZSgqZXh0cmFjdEtleSkoQXJyYXlFbGVtZW50VHlwZSopPgotaW5saW5lIEFy
cmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaChBcnJheUVsZW1lbnRUeXBlKiBhcnJheSwgc2l6
ZV90IHNpemUsIEtleVR5cGUga2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlNdXN0QmVQ
cmVzZW50SW5BcnJheSkKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUsIHR5cGVu
YW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtleSwgQmlu
YXJ5U2VhcmNoTW9kZSBtb2RlPgoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJj
aEltcGwoQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBF
eHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewotICAgIC8vIFRoZSBhcnJh
eSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQgKHByZS1jb25kaXRpb24sIGFycmF5
IGRvZXMgY29udGFpbiBrZXkpLgotICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBvbmx5IG9u
ZSBlbGVtZW50LCBubyBuZWVkIHRvIGRvIHRoZSBjb21wYXJpc29uLgorICAgIHNpemVfdCBvZmZz
ZXQgPSAwOwogICAgIHdoaWxlIChzaXplID4gMSkgewotICAgICAgICAvLyBQaWNrIGFuIGVsZW1l
bnQgdG8gY2hlY2ssIGhhbGYgd2F5IHRocm91Z2ggdGhlIGFycmF5LCBhbmQgcmVhZCB0aGUgdmFs
dWUuCiAgICAgICAgIGludCBwb3MgPSAoc2l6ZSAtIDEpID4+IDE7Ci0gICAgICAgIEtleVR5cGUg
dmFsID0gZXh0cmFjdEtleSgmYXJyYXlbcG9zXSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGtleSBt
YXRjaGVzLCBzdWNjZXNzIQorICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5
W29mZnNldCArIHBvc10pOworICAgICAgICAKICAgICAgICAgaWYgKHZhbCA9PSBrZXkpCi0gICAg
ICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107CisgICAgICAgICAgICByZXR1cm4gJmFycmF5W29m
ZnNldCArIHBvc107CiAgICAgICAgIC8vIFRoZSBpdGVtIHdlIGFyZSBsb29raW5nIGZvciBpcyBz
bWFsbGVyIHRoYW4gdGhlIGl0ZW0gYmVpbmcgY2hlY2s7IHJlZHVjZSB0aGUgdmFsdWUgb2YgJ3Np
emUnLAogICAgICAgICAvLyBjaG9wcGluZyBvZmYgdGhlIHJpZ2h0IGhhbmQgaGFsZiBvZiB0aGUg
YXJyYXkuCi0gICAgICAgIGVsc2UgaWYgKGtleSA8IHZhbCkKKyAgICAgICAgaWYgKGtleSA8IHZh
bCkKICAgICAgICAgICAgIHNpemUgPSBwb3M7CiAgICAgICAgIC8vIERpc2NhcmQgYWxsIHZhbHVl
cyBpbiB0aGUgbGVmdCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LCB1cCB0byBhbmQgaW5jbHVkaW5n
IHRoZSBpdGVtIGF0IHBvcy4KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzaXplIC09IChw
b3MgKyAxKTsKLSAgICAgICAgICAgIGFycmF5ICs9IChwb3MgKyAxKTsKKyAgICAgICAgICAgIG9m
ZnNldCArPSAocG9zICsgMSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJbiBjYXNlIG9mIEJp
bmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSAnc2l6ZScgc2hvdWxkIG5l
dmVyIHJlYWNoIHplcm8uCi0gICAgICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNlbnRJbkFy
cmF5KQotICAgICAgICAgICAgQVNTRVJUKHNpemUpOworICAgICAgICBBU1NFUlQobW9kZSAhPSBL
ZXlNdXN0QmVQcmVzZW50SW5BcnJheSB8fCBzaXplKTsKICAgICB9CisgICAgCisgICAgaWYgKG1v
ZGUgPT0gS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5ICYmICFzaXplKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlbb2Zmc2V0
XTsKKworICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAmJiBrZXkg
IT0gZXh0cmFjdEtleShyZXN1bHQpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIEluIGNh
c2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlmIHdlIHJl
YWNoIHRoaXMgcG9pbnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVsZW1lbnQs
IG5vIG5lZWQgdG8gY2hlY2sgaXQgbWF0Y2hlcwogICAgIGlmIChtb2RlID09IEtleU11c3RCZVBy
ZXNlbnRJbkFycmF5KSB7CiAgICAgICAgIEFTU0VSVChzaXplID09IDEpOwotICAgICAgICBBU1NF
UlQoa2V5ID09IGV4dHJhY3RLZXkoJmFycmF5WzBdKSk7CisgICAgICAgIEFTU0VSVChrZXkgPT0g
ZXh0cmFjdEtleShyZXN1bHQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gJmFycmF5WzBdOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIE1vZGlmaWVkIGJpbmFyeSBzZWFyY2ggYWxnb3JpdGht
IHRoYXQgdXNlcyBhIGZ1bmN0b3IuIE5vdGUgdGhhdCB0aGlzIGlzIHN0cmljdGx5Ci0vLyBtb3Jl
IHBvd2VyZnVsIHRoYW4gdGhlIGFib3ZlLCBidXQgcmVzdWx0cyBpbiBzb21ld2hhdCBsZXNzIHRl
bXBsYXRlIHNwZWNpYWxpemF0aW9uLgotLy8gSGVuY2UsIGRlcGVuZGluZyBvbiBpbmxpbmluZyBo
ZXVyaXN0aWNzLCBpdCBtaWdodCBiZSBzbG93ZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVs
ZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgotaW5saW5l
IEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yKEFycmF5RWxlbWVudFR5
cGUqIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEJpbmFyeVNlYXJjaE1vZGUgbW9k
ZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5
ID0gRXh0cmFjdEtleSgpKQorLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kLCBjcmFzaCBp
ZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbmQgYmVoYXZlIGxpa2UgYXBwcm94aW1hdGVCaW5hcnlT
ZWFyY2ggaW4gcmVsZWFzZSBidWlsZHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRU
eXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1lIEV4dHJh
Y3RLZXk+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKEFycmF5VHlwZSYg
YXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFj
dEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKLSAgICAvLyBUaGUgYXJyYXkgbXVzdCBjb250YWluIGF0
IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNvbnRhaW4ga2V5
KS4KLSAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCwgbm8gbmVl
ZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KLSAgICB3aGlsZSAoc2l6ZSA+IDEpIHsKLSAgICAgICAg
Ly8gUGljayBhbiBlbGVtZW50IHRvIGNoZWNrLCBoYWxmIHdheSB0aHJvdWdoIHRoZSBhcnJheSwg
YW5kIHJlYWQgdGhlIHZhbHVlLgotICAgICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+PiAxOwot
ICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W3Bvc10pOwotCi0gICAgICAg
IC8vIElmIHRoZSBrZXkgbWF0Y2hlcywgc3VjY2VzcyEKLSAgICAgICAgaWYgKHZhbCA9PSBrZXkp
Ci0gICAgICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107Ci0gICAgICAgIC8vIFRoZSBpdGVtIHdl
IGFyZSBsb29raW5nIGZvciBpcyBzbWFsbGVyIHRoYW4gdGhlIGl0ZW0gYmVpbmcgY2hlY2s7IHJl
ZHVjZSB0aGUgdmFsdWUgb2YgJ3NpemUnLAotICAgICAgICAvLyBjaG9wcGluZyBvZmYgdGhlIHJp
Z2h0IGhhbmQgaGFsZiBvZiB0aGUgYXJyYXkuCi0gICAgICAgIGVsc2UgaWYgKGtleSA8IHZhbCkK
LSAgICAgICAgICAgIHNpemUgPSBwb3M7Ci0gICAgICAgIC8vIERpc2NhcmQgYWxsIHZhbHVlcyBp
biB0aGUgbGVmdCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LCB1cCB0byBhbmQgaW5jbHVkaW5nIHRo
ZSBpdGVtIGF0IHBvcy4KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplIC09IChwb3Mg
KyAxKTsKLSAgICAgICAgICAgIGFycmF5ICs9IChwb3MgKyAxKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFy
cmF5ICdzaXplJyBzaG91bGQgbmV2ZXIgcmVhY2ggemVyby4KLSAgICAgICAgaWYgKG1vZGUgPT0g
S2V5TXVzdEJlUHJlc2VudEluQXJyYXkpCi0gICAgICAgICAgICBBU1NFUlQoc2l6ZSk7Ci0gICAg
fQotCi0gICAgLy8gSW4gY2FzZSBvZiBCaW5hcnlTZWFyY2hNb2RlID0gS2V5TXVzdEJlUHJlc2Vu
dEluQXJyYXkgaWYgd2UgcmVhY2ggdGhpcyBwb2ludAotICAgIC8vIHdlJ3ZlIGNob3BwZWQgZG93
biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVjayBpdCBtYXRjaGVzCi0gICAgaWYgKG1v
ZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpIHsKLSAgICAgICAgQVNTRVJUKHNpemUgPT0g
MSk7Ci0gICAgICAgIEFTU0VSVChrZXkgPT0gZXh0cmFjdEtleSgmYXJyYXlbMF0pKTsKLSAgICB9
CisgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwg
QXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlNdXN0QmVQcmVzZW50SW5BcnJheT4oYXJyYXksIHNp
emUsIGtleSwgZXh0cmFjdEtleSk7Cit9CiAKLSAgICByZXR1cm4gJmFycmF5WzBdOworLy8gUmV0
dXJuIHplcm8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kLgordGVtcGxhdGU8dHlwZW5hbWUg
QXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0
eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNl
YXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4
dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJuIGJpbmFy
eVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0
S2V5LCBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXksIGV4dHJh
Y3RLZXkpOwogfQogCi0vLyBNb2RpZmllZCBiaW5hcnlTZWFyY2goKSBhbGdvcml0aG0gZGVzaWdu
ZWQgZm9yIGFycmF5LWxpa2UgY2xhc3NlcyB0aGF0IHN1cHBvcnQKLS8vIG9wZXJhdG9yW10gYnV0
IG5vdCBvcGVyYXRvcis9LiBPbmUgZXhhbXBsZSBvZiBhIGNsYXNzIHRoYXQgcXVhbGlmaWVzIGlz
Ci0vLyBTZWdtZW50ZWRWZWN0b3IuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBl
LCB0eXBlbmFtZSBLZXlUeXBlLCBLZXlUeXBlKCpleHRyYWN0S2V5KShBcnJheUVsZW1lbnRUeXBl
KiksIHR5cGVuYW1lIEFycmF5VHlwZT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBnZW5lcmlj
QmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSkK
Ky8vIFJldHVybiB0aGUgZWxlbWVudCB0aGF0IGlzIGVpdGhlciB0byB0aGUgbGVmdCwgb3IgdGhl
IHJpZ2h0LCBvZiB3aGVyZSB0aGUgZWxlbWVudCB3b3VsZCBoYXZlIGJlZW4gZm91bmQuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFt
ZSBFeHRyYWN0S2V5LCB0eXBlbmFtZSBBcnJheVR5cGU+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlw
ZSogYXBwcm94aW1hdGVCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUs
IEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgp
KQogewotICAgIC8vIFRoZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQg
KHByZS1jb25kaXRpb24sIGFycmF5IGRvZXMgY29uYXRpbiBrZXkpLgotICAgIC8vIElmIHRoZSBh
cnJheSBvbmx5IGNvbnRhaW5zIG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGRvIHRoZSBjb21wYXJp
c29uLgotICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAgIHdoaWxlIChzaXplID4gMSkgewotICAg
ICAgICAvLyBQaWNrIGFuIGVsZW1lbnQgdG8gY2hlY2ssIGhhbGYgd2F5IHRocm91Z2ggdGhlIGFy
cmF5LCBhbmQgcmVhZCB0aGUgdmFsdWUuCi0gICAgICAgIGludCBwb3MgPSAoc2l6ZSAtIDEpID4+
IDE7Ci0gICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0ICsgcG9z
XSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUga2V5IG1hdGNoZXMsIHN1Y2Nlc3MhCi0g
ICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuICZhcnJheVtvZmZzZXQg
KyBwb3NdOwotICAgICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMgc21hbGxl
ciB0aGFuIHRoZSBpdGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdzaXplJywK
LSAgICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5
LgotICAgICAgICBpZiAoa2V5IDwgdmFsKQotICAgICAgICAgICAgc2l6ZSA9IHBvczsKLSAgICAg
ICAgLy8gRGlzY2FyZCBhbGwgdmFsdWVzIGluIHRoZSBsZWZ0IGhhbmQgaGFsZiBvZiB0aGUgYXJy
YXksIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGl0ZW0gYXQgcG9zLgotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHNpemUgLT0gKHBvcyArIDEpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IChw
b3MgKyAxKTsKLSAgICAgICAgfQorICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxl
bWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRF
bGVtZW50SWZLZXlJc05vdFByZXNlbnQ+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOwor
fQogCi0gICAgICAgIC8vICdzaXplJyBzaG91bGQgbmV2ZXIgcmVhY2ggemVyby4KLSAgICAgICAg
QVNTRVJUKHNpemUpOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiB3ZSByZWFjaCB0aGlzIHBvaW50
IHdlJ3ZlIGNob3BwZWQgZG93biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVjayBpdCBt
YXRjaGVzCi0gICAgQVNTRVJUKHNpemUgPT0gMSk7Ci0gICAgQVNTRVJUKGtleSA9PSBleHRyYWN0
S2V5KCZhcnJheVtvZmZzZXRdKSk7Ci0gICAgcmV0dXJuICZhcnJheVtvZmZzZXRdOworLy8gVmFy
aWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0LgordGVtcGxhdGU8dHlwZW5hbWUgQXJy
YXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBl
bmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIGNvbnN0IEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNl
YXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNv
bnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJu
IGJpbmFyeVNlYXJjaDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJh
Y3RLZXk+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RL
ZXkpOworfQordGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5
VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIGNv
bnN0IEFycmF5RWxlbWVudFR5cGUqIHRyeUJpbmFyeVNlYXJjaChjb25zdCBBcnJheVR5cGUmIGFy
cmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNvbnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RL
ZXkgPSBFeHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxBcnJheUVs
ZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4dHJhY3RLZXk+KGNvbnN0X2Nhc3Q8QXJy
YXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RLZXkpOworfQordGVtcGxhdGU8dHlw
ZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIGNvbnN0IEFycmF5RWxlbWVudFR5cGUq
IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoKGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBz
aXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RL
ZXkoKSkKK3sKKyAgICByZXR1cm4gYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g8QXJyYXlFbGVtZW50
VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5Pihjb25zdF9jYXN0PEFycmF5VHlw
ZSY+KGFycmF5KSwgc2l6ZSwga2V5LCBleHRyYWN0S2V5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V1RGCkBAIC0zMTQsNiArMjc0LDggQEAgdXNpbmcgV1RGOjpNQjsKIHVzaW5nIFdURjo6aXNQb2lu
dGVyQWxpZ25lZDsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7CiB1c2luZyBXVEY6OmJpbmFy
eVNlYXJjaDsKK3VzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwordXNpbmcgV1RGOjphcHByb3hp
bWF0ZUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwogdXNpbmcgV1RGOjpz
YWZlQ2FzdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTIt
MTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRlbXB0IHRv
IHJhdGlvbmFsaXplIGFuZCBzaW1wbGlmeSBXVEY6OmJpbmFyeVNlYXJjaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODkwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3dpdGNoIHRvIHVzaW5nIHRoZSBu
ZXcgYmluYXJ5U2VhcmNoKCkgQVBJLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OmZpbmRJbnN0YW5jZVRpbWUpOgorCiAyMDEy
LTEyLTEyICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBQ
bHVnSW5PcmlnaW5IYXNoIHdpdGggZW1wdHkgTUlNRSB0eXBlICgxMDQ4ODIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM3NDMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0Miw3ICs3NDIsNyBAQCBTTUlMVGltZSBTVkdTTUlM
RWxlbWVudDo6ZmluZEluc3RhbmNlVGltCiAgICAgaWYgKCFzaXplT2ZMaXN0KQogICAgICAgICBy
ZXR1cm4gYmVnaW5PckVuZCA9PSBCZWdpbiA/IFNNSUxUaW1lOjp1bnJlc29sdmVkKCkgOiBTTUlM
VGltZTo6aW5kZWZpbml0ZSgpOwogCi0gICAgY29uc3QgU01JTFRpbWVXaXRoT3JpZ2luKiByZXN1
bHQgPSBiaW5hcnlTZWFyY2g8Y29uc3QgU01JTFRpbWVXaXRoT3JpZ2luLCBTTUlMVGltZSwgZXh0
cmFjdFRpbWVGcm9tVmVjdG9yPihsaXN0LmJlZ2luKCksIHNpemVPZkxpc3QsIG1pbmltdW1UaW1l
LCBXVEY6OktleU11c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKKyAgICBjb25zdCBTTUlMVGltZVdp
dGhPcmlnaW4qIHJlc3VsdCA9IGFwcHJveGltYXRlQmluYXJ5U2VhcmNoPGNvbnN0IFNNSUxUaW1l
V2l0aE9yaWdpbiwgU01JTFRpbWU+KGxpc3QsIHNpemVPZkxpc3QsIG1pbmltdW1UaW1lLCBleHRy
YWN0VGltZUZyb21WZWN0b3IpOwogICAgIGludCBpbmRleE9mUmVzdWx0ID0gcmVzdWx0IC0gbGlz
dC5iZWdpbigpOwogICAgIEFTU0VSVChpbmRleE9mUmVzdWx0IDwgc2l6ZU9mTGlzdCk7CiAgICAg
Y29uc3QgU01JTFRpbWUmIGN1cnJlbnRUaW1lID0gbGlzdFtpbmRleE9mUmVzdWx0XS50aW1lKCk7
Cg==
</data>
<flag name="review"
          id="196018"
          type_id="1"
          status="+"
          setter="mjs"
    />
    <flag name="commit-queue"
          id="196024"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179378</attachid>
            <date>2012-12-13 17:00:21 -0800</date>
            <delta_ts>2012-12-13 17:00:21 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>binarysearch.patch</filename>
            <type>text/plain</type>
            <size>28527</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3NTczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDEyLTEyLTEzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QXR0ZW1wdCB0byByYXRpb25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgorCisgICAgICAgIFN3aXRjaCB0
byB1c2luZyB0aGUgbmV3IGJpbmFyeVNlYXJjaCgpIEFQSS4gTm8gY2hhbmdlIGluIGJlaGF2aW9y
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9y
aWdpbkZvclJldHVybik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Z2V0U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmdldEJ5VmFsSW5mbyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Q2FsbExpbmtJbmZv
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
ICogZGZnL0RGR01pbmlmaWVkR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdy
YXBoOjphdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6aW5kZXhGb3JCeXRlY29kZUluZGV4KToKKwog
MjAxMi0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9T
UiBleGl0IGNvbXBpbGVyIHNob3VsZCBlbWl0IGNvZGUgZm9yIHJlc2V0dGluZyB0aGUgZXhlY3V0
aW9uIGNvdW50ZXIgdGhhdCBtYXRjaGVzIHRoZSBsb2dpYyBvZiBFeGVjdXRpb25Db3VudGVyLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzkxLDcgKzI3OTEsOCBAQCB1bnNpZ25lZCBD
b2RlQmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KEV4ZWNTCiAgICAgaWYgKGdldEpJVENvZGUoKS5nZXRF
eGVjdXRhYmxlTWVtb3J5KCktPmNvbnRhaW5zKHJldHVybkFkZHJlc3MudmFsdWUoKSkpIHsKICAg
ICAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldCA9IGdldEpJVENvZGUoKS5vZmZzZXRPZihy
ZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgICAgICBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29k
ZU9mZnNldCogcmVzdWx0ID0KLSAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxJ
bmRpY2VzLmJlZ2luKCksIGNhbGxJbmRpY2VzLnNpemUoKSwgY2FsbFJldHVybk9mZnNldCk7Cisg
ICAgICAgICAgICBiaW5hcnlTZWFyY2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQs
IHVuc2lnbmVkPigKKyAgICAgICAgICAgICAgICBjYWxsSW5kaWNlcywgY2FsbEluZGljZXMuc2l6
ZSgpLCBjYWxsUmV0dXJuT2Zmc2V0LCBnZXRDYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAgICAgQVNT
RVJUKHJlc3VsdC0+Y2FsbFJldHVybk9mZnNldCA9PSBjYWxsUmV0dXJuT2Zmc2V0KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgfQpAQCAtMjgxNiw4ICsyODE3
LDExIEBAIGJvb2wgQ29kZUJsb2NrOjpjb2RlT3JpZ2luRm9yUmV0dXJuKFJldHUKICAgICB9CiAg
ICAgCiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFk
ZHJlc3MudmFsdWUoKSk7Ci0gICAgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkg
PSBiaW5hcnlTZWFyY2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQsIGdl
dENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luPihjb2RlT3JpZ2lucygpLmJlZ2luKCksIGNv
ZGVPcmlnaW5zKCkuc2l6ZSgpLCBvZmZzZXQsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJy
YXkpOwotICAgIGlmIChlbnRyeS0+Y2FsbFJldHVybk9mZnNldCAhPSBvZmZzZXQpCisgICAgQ29k
ZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZW50cnkgPQorICAgICAgICB0cnlCaW5hcnlTZWFy
Y2g8Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCwgdW5zaWduZWQ+KAorICAgICAgICAgICAg
Y29kZU9yaWdpbnMoKSwgY29kZU9yaWdpbnMoKS5zaXplKCksIG9mZnNldCwKKyAgICAgICAgICAg
IGdldENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luKTsKKyAgICBpZiAoIWVudHJ5KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgY29kZU9yaWdpbiA9IGVudHJ5LT5jb2RlT3JpZ2luOwog
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsMzAgKzIzOCwzMCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8o
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKihiaW5hcnlTZWFyY2g8U3RydWN0dXJlU3R1YkluZm8sIHZvaWQqLCBnZXRTdHJ1Y3R1
cmVTdHViSW5mb1JldHVybkxvY2F0aW9uPihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBt
X3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAg
ICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB2b2lkKj4o
bV9zdHJ1Y3R1cmVTdHViSW5mb3MsIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKSwgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpLCBnZXRTdHJ1Y3R1cmVTdHViSW5mb1JldHVybkxvY2F0aW9uKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgZ2V0U3R1YkluZm8odW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5
U2VhcmNoPFN0cnVjdHVyZVN0dWJJbmZvLCB1bnNpZ25lZCwgZ2V0U3RydWN0dXJlU3R1YkluZm9C
eXRlY29kZUluZGV4PihtX3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0cnVjdHVyZVN0
dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJp
bmFyeVNlYXJjaDxTdHJ1Y3R1cmVTdHViSW5mbywgdW5zaWduZWQ+KG1fc3RydWN0dXJlU3R1Yklu
Zm9zLCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldFN0cnVj
dHVyZVN0dWJJbmZvQnl0ZWNvZGVJbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB2b2lkIHJlc2V0U3R1YihTdHJ1Y3R1cmVTdHViSW5mbyYpOwogICAgICAgICAKICAgICAgICAg
QnlWYWxJbmZvJiBnZXRCeVZhbEluZm8odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNoPEJ5VmFsSW5mbywgdW5zaWduZWQs
IGdldEJ5VmFsSW5mb0J5dGVjb2RlSW5kZXg+KG1fYnlWYWxJbmZvcy5iZWdpbigpLCBtX2J5VmFs
SW5mb3Muc2l6ZSgpLCBieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICByZXR1cm4gKihiaW5h
cnlTZWFyY2g8QnlWYWxJbmZvLCB1bnNpZ25lZD4obV9ieVZhbEluZm9zLCBtX2J5VmFsSW5mb3Mu
c2l6ZSgpLCBieXRlY29kZUluZGV4LCBnZXRCeVZhbEluZm9CeXRlY29kZUluZGV4KSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxMaW5rSW5mbyhSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAqKGJp
bmFyeVNlYXJjaDxDYWxsTGlua0luZm8sIHZvaWQqLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2Nh
dGlvbj4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJbmZvcy5zaXplKCksIHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuICooYmluYXJ5U2VhcmNo
PENhbGxMaW5rSW5mbywgdm9pZCo+KG1fY2FsbExpbmtJbmZvcywgbV9jYWxsTGlua0luZm9zLnNp
emUoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpLCBnZXRDYWxsTGlua0luZm9SZXR1cm5Mb2NhdGlv
bikpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBDYWxsTGlua0luZm8mIGdldENhbGxM
aW5rSW5mbyh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoZ2V0SklUVHlwZSgpKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gKihiaW5hcnlTZWFyY2g8Q2FsbExpbmtJbmZvLCB1bnNpZ25lZCwgZ2V0Q2FsbExp
bmtJbmZvQnl0ZWNvZGVJbmRleD4obV9jYWxsTGlua0luZm9zLmJlZ2luKCksIG1fY2FsbExpbmtJ
bmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiAqKGJpbmFy
eVNlYXJjaDxDYWxsTGlua0luZm8sIHVuc2lnbmVkPihtX2NhbGxMaW5rSW5mb3MsIG1fY2FsbExp
bmtJbmZvcy5zaXplKCksIGJ5dGVjb2RlSW5kZXgsIGdldENhbGxMaW5rSW5mb0J5dGVjb2RlSW5k
ZXgpKTsKICAgICAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKQEAgLTM1OSwxNSArMzU5
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZmdE
YXRhKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKG1fZGZnRGF0
YS0+b3NyRW50cnkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDwKLSAgICAgICAg
ICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRh
Qnl0ZWNvZGVJbmRleD4oCi0gICAgICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnku
YmVnaW4oKSwgbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlSW5kZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAg
ICAgICAgaWYgKHJlc3VsdC0+bV9ieXRlY29kZUluZGV4ICE9IGJ5dGVjb2RlSW5kZXgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQ+
KAorICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnksIG1fZGZnRGF0YS0+b3NyRW50
cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgICAgIERGRzo6Z2V0T1NSRW50
cnlEYXRhQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIGFwcGVuZE9TUkV4aXQoY29uc3QgREZHOjpPU1JFeGl0JiBvc3JFeGl0KQpAQCAtNjc4LDcg
KzY3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIFZhbHVlUHJvZmls
ZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IFdURjo6Z2VuZXJpY0Jp
bmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludCwgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZz
ZXQ+KG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZz
ZXQpOworICAgICAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFs
dWVQcm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fdmFsdWVQcm9maWxlcywgbV92YWx1
ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0VmFs
dWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CiAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0ICE9IC0xKTsKICAgICAgICAgICAgIEFTU0VSVChp
bnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKICAgICAgICAgICAg
ICAgICAgICAgICAgbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCkBAIC03
MTEsNyArNzA3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSog
cmFyZUNhc2VQcm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fcmFyZUNhc2VQcm9maWxlc1tp
bmRleF07IH0KICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdldFJh
cmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNh
c2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBi
aW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAorICAgICAgICAgICAgICAgIG1fcmFy
ZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQs
CisgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNlKGludCBi
eXRlY29kZU9mZnNldCkKQEAgLTczOSw3ICs3MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUmFyZUNhc2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGludCBpbmRleCkgeyBy
ZXR1cm4gJm1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXNbaW5kZXhdOyB9CiAgICAgICAgIFJhcmVD
YXNlUHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBi
eXRlY29kZU9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJp
Y0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0
ZWNvZGVPZmZzZXQ+KG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNl
UHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYmlu
YXJ5U2VhcmNoPFJhcmVDYXNlUHJvZmlsZSwgaW50PigKKyAgICAgICAgICAgICAgICBtX3NwZWNp
YWxGYXN0Q2FzZVByb2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0
ZWNvZGVPZmZzZXQsCisgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNw
ZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2OSw3ICs3NjksNyBAQCBwcml2
YXRlOgogCiBpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2Nr
SW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cy5iZWdpbigpLCBsaW5raW5nVGFyZ2V0cy5z
aXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5
dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJs
b2NrSW5kZXgsIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgp
LCBieXRlY29kZUJlZ2luLCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZEdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNaW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Mywx
NCArNDMsOCBAQCBwdWJsaWM6CiAKICAgICBNaW5pZmllZE5vZGUqIGF0KE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgewotICAgICAgICBpZiAoIW1fbGlzdC5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgTWluaWZpZWROb2RlKiBlbnRyeSA9Ci0gICAgICAgICAgICBiaW5h
cnlTZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXgsIE1pbmlmaWVkTm9kZTo6Z2V0SW5kZXg+
KAotICAgICAgICAgICAgICAgIG1fbGlzdC5iZWdpbigpLCBtX2xpc3Quc2l6ZSgpLCBub2RlSW5k
ZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOwotICAgICAgICBpZiAoZW50cnkt
PmluZGV4KCkgIT0gbm9kZUluZGV4KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHJl
dHVybiBlbnRyeTsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxNaW5pZmllZE5vZGUs
IE5vZGVJbmRleD4oCisgICAgICAgICAgICBtX2xpc3QsIG1fbGlzdC5zaXplKCksIG5vZGVJbmRl
eCwgTWluaWZpZWROb2RlOjpnZXRJbmRleCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYXBwZW5k
KGNvbnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMzc0
MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQwLDcgKzY0MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9ja0ZvckNhbGxlciA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyKTsKICAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRl
Y29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIpOwogICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7
Ci0gICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJj
aDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRD
b2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBy
ZXR1cm5CeXRlY29kZUluZGV4LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgICAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOwpAQCAt
NzQ5LDcgKzc0OSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAK
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5l
Q29kZUJsb2NrKTsKICAgICAKLSAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcg
PSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdp
bigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJj
aDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29kZU1hcCwgZGVj
b2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VS
VChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQu
bV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDEzNzQzMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MDgsNyArNjA4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIpOwogICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENv
ZGVNYXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
cik7CiAgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAu
c2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwg
dW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5
dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobWFwcGluZyk7CiAgICAgICAgIEFTU0VSVChtYXBw
aW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CkBAIC02OTYsNyAr
Njk2LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihl
eGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2spOwogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFy
eVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRl
Y29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29k
ZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1hcHBp
bmcpOwogICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
OCw3ICszNzgsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29zcikKICAgICAKICAgICBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBtYXA7CiAgICAgY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCktPmRlY29kZShtYXApOwotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFw
cGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KG1hcC5iZWdpbigpLCBt
YXAuc2l6ZSgpLCBwYyAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSk7CisgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KG1hcCwgbWFwLnNpemUoKSwgcGMgLSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmJlZ2luKCksIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0
Qnl0ZWNvZGVJbmRleCk7CiAgICAgQVNTRVJUKG1hcHBpbmcpOwogICAgIEFTU0VSVChtYXBwaW5n
LT5tX2J5dGVjb2RlSW5kZXggPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBjIC0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNl
LmNwcAkocmV2aXNpb24gMTM3NDMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgQnl0ZWNvZGVTZXF1ZW5jZTo6fkJ5dGVjb2RlU2VxdWVuY2UoKQogCiB1bnNpZ25lZCBC
eXRlY29kZVNlcXVlbmNlOjppbmRleEZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlLCB1bnNpZ25l
ZCwgZ2V0Qnl0ZWNvZGVJbmRleEZvckJ5dGVjb2RlPihjb25zdF9jYXN0PEJ5dGVjb2RlKj4obV9z
ZXF1ZW5jZS5iZWdpbigpKSwgbV9zZXF1ZW5jZS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpIC0gbV9z
ZXF1ZW5jZS5iZWdpbigpOworICAgIHJldHVybiBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGUsIHVuc2ln
bmVkPihtX3NlcXVlbmNlLCBtX3NlcXVlbmNlLnNpemUoKSwgYnl0ZWNvZGVJbmRleCwgZ2V0Qnl0
ZWNvZGVJbmRleEZvckJ5dGVjb2RlKSAtIG1fc2VxdWVuY2UuYmVnaW4oKTsKIH0KIAogY29uc3Qg
Qnl0ZWNvZGUmIEJ5dGVjb2RlU2VxdWVuY2U6OmZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzc1NzYpCisrKyBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTEyLTEzICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0ZW1wdCB0byByYXRp
b25hbGl6ZSBhbmQgc2ltcGxpZnkgV1RGOjpiaW5hcnlTZWFyY2gKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDg5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1hY2llaiBTdGFjaG93aWFrLgorCisgICAgICAgIEJpbmFyeSBzZWFyY2ggbm93IGhhcyB0
aHJlZSBtb2RlczoKKworICAgICAgICBUaGUgZGVmYXVsdDogYXNzZXJ0IHRoYXQgdGhlIGtleSB3
YXMgZm91bmQsIGJ1dCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCBpZiBpdAorICAgICAgICB3
YXNuJ3QgZm91bmQsIGlmIGFzc2VydHMgYXJlIHR1cm5lZCBvZmYuCisgICAgICAgIAorICAgICAg
ICB0cnlCaW5hcnlTZWFyY2g6IHJldHVybiAwIGlmIHRoZSBrZXkgd2Fzbid0IGZvdW5kLgorICAg
ICAgICAKKyAgICAgICAgYXBwcm94aW1hdGVCaW5hcnlTZWFyY2g6IGlmIHRoZSBrZXkgaXMgbm90
IGZvdW5kLCByZXR1cm4gYW4gYWRqYWNlbnQgZWxlbWVudCAoZWl0aGVyCisgICAgICAgIHRoZSBs
ZWZ0IG9yIHJpZ2h0OyBubyBndWFyYW50ZWUgd2hpY2gpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhbHNvIHJlZHVjZXMgdGhlIG51bWJlciBvZiB2YXJpYW50cyBvZiBiaW5hcnlTZWFyY2guIFRo
ZSBmdW5jdG9yIHZhcmlhbnQgaXMgbm93CisgICAgICAgIGdvbmUgYmVjYXVzZSBiaW5hcnlTZWFy
Y2ggbm93IGFsd2F5cyB1c2VzIGEgZnVuY3RvciBmb3IgdGhlIGtleSBleHRyYWN0b3IuIFRoZQor
ICAgICAgICBnZW5lcmljIHZhcmlhbnQgaXMgbm93IGdvbmUgYmVjYXVzZSBiaW5hcnlTZWFyY2gg
YWx3YXlzIGV4cGVjdHMgYW4gYXJyYXkgdHlwZSB0aGF0CisgICAgICAgIGNhbiBkbyBvcGVyYXRv
cltdLgorCisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpiaW5h
cnlTZWFyY2hJbXBsKToKKyAgICAgICAgKFdURjo6YmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdU
Rjo6dHJ5QmluYXJ5U2VhcmNoKToKKyAgICAgICAgKFdURjo6YXBwcm94aW1hdGVCaW5hcnlTZWFy
Y2gpOgorCiAyMDEyLTEyLTEyICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOYXRpdmUgTWVtb3J5IEluc3RydW1lbnRhdGlv
bjogcmVtb3ZlIGZha2Ugcm9vdCBNZW1vcnlPYmplY3RJbmZvLgpJbmRleDogU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0
cmFzLmgJKHJldmlzaW9uIDEzNzQzMykKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsMTI1ICsxNzgsODUgQEAgdGVtcGxhdGU8c2l6ZV90IGRp
dmlzb3I+IGlubGluZSBzaXplX3QgcgogCiBlbnVtIEJpbmFyeVNlYXJjaE1vZGUgewogICAgIEtl
eU11c3RCZVByZXNlbnRJbkFycmF5LAotICAgIEtleU11c3ROb3RCZVByZXNlbnRJbkFycmF5Cisg
ICAgS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5LAorICAgIFJldHVybkFkamFjZW50RWxlbWVu
dElmS2V5SXNOb3RQcmVzZW50CiB9OwogCi0vLyBCaW5hcnkgc2VhcmNoIGFsZ29yaXRobSwgY2Fs
bHMgZXh0cmFjdEtleSBvbiBwcmUtc29ydGVkIGVsZW1lbnRzIGluIGFycmF5LAotLy8gY29tcGFy
ZXMgcmVzdWx0IHdpdGgga2V5IChLZXlUeXBlcyBzaG91bGQgYmUgY29tcGFyYWJsZSB3aXRoICc9
PScsIGFuZCAnPCcpLgotdGVtcGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5h
bWUgS2V5VHlwZSwgS2V5VHlwZSgqZXh0cmFjdEtleSkoQXJyYXlFbGVtZW50VHlwZSopPgotaW5s
aW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaChBcnJheUVsZW1lbnRUeXBlKiBhcnJh
eSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBCaW5hcnlTZWFyY2hNb2RlIG1vZGUgPSBLZXlN
dXN0QmVQcmVzZW50SW5BcnJheSkKK3RlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxlbWVudFR5cGUs
IHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIEFycmF5VHlwZSwgdHlwZW5hbWUgRXh0cmFjdEtl
eSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlPgoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFy
eVNlYXJjaEltcGwoQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5cGUga2V5LCBj
b25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQogewotICAgIC8vIFRo
ZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVsZW1lbnQgKHByZS1jb25kaXRpb24s
IGFycmF5IGRvZXMgY29udGFpbiBrZXkpLgotICAgIC8vIElmIHRoZSBhcnJheSBjb250YWlucyBv
bmx5IG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGRvIHRoZSBjb21wYXJpc29uLgorICAgIHNpemVf
dCBvZmZzZXQgPSAwOwogICAgIHdoaWxlIChzaXplID4gMSkgewotICAgICAgICAvLyBQaWNrIGFu
IGVsZW1lbnQgdG8gY2hlY2ssIGhhbGYgd2F5IHRocm91Z2ggdGhlIGFycmF5LCBhbmQgcmVhZCB0
aGUgdmFsdWUuCiAgICAgICAgIGludCBwb3MgPSAoc2l6ZSAtIDEpID4+IDE7Ci0gICAgICAgIEtl
eVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbcG9zXSk7Ci0KLSAgICAgICAgLy8gSWYgdGhl
IGtleSBtYXRjaGVzLCBzdWNjZXNzIQorICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXko
JmFycmF5W29mZnNldCArIHBvc10pOworICAgICAgICAKICAgICAgICAgaWYgKHZhbCA9PSBrZXkp
Ci0gICAgICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107CisgICAgICAgICAgICByZXR1cm4gJmFy
cmF5W29mZnNldCArIHBvc107CiAgICAgICAgIC8vIFRoZSBpdGVtIHdlIGFyZSBsb29raW5nIGZv
ciBpcyBzbWFsbGVyIHRoYW4gdGhlIGl0ZW0gYmVpbmcgY2hlY2s7IHJlZHVjZSB0aGUgdmFsdWUg
b2YgJ3NpemUnLAogICAgICAgICAvLyBjaG9wcGluZyBvZmYgdGhlIHJpZ2h0IGhhbmQgaGFsZiBv
ZiB0aGUgYXJyYXkuCi0gICAgICAgIGVsc2UgaWYgKGtleSA8IHZhbCkKKyAgICAgICAgaWYgKGtl
eSA8IHZhbCkKICAgICAgICAgICAgIHNpemUgPSBwb3M7CiAgICAgICAgIC8vIERpc2NhcmQgYWxs
IHZhbHVlcyBpbiB0aGUgbGVmdCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LCB1cCB0byBhbmQgaW5j
bHVkaW5nIHRoZSBpdGVtIGF0IHBvcy4KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzaXpl
IC09IChwb3MgKyAxKTsKLSAgICAgICAgICAgIGFycmF5ICs9IChwb3MgKyAxKTsKKyAgICAgICAg
ICAgIG9mZnNldCArPSAocG9zICsgMSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBJbiBjYXNl
IG9mIEJpbmFyeVNlYXJjaE1vZGUgPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSAnc2l6ZScgc2hv
dWxkIG5ldmVyIHJlYWNoIHplcm8uCi0gICAgICAgIGlmIChtb2RlID09IEtleU11c3RCZVByZXNl
bnRJbkFycmF5KQotICAgICAgICAgICAgQVNTRVJUKHNpemUpOworICAgICAgICBBU1NFUlQobW9k
ZSAhPSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSB8fCBzaXplKTsKICAgICB9CisgICAgCisgICAg
aWYgKG1vZGUgPT0gS2V5TWlnaHROb3RCZVByZXNlbnRJbkFycmF5ICYmICFzaXplKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBBcnJheUVsZW1lbnRUeXBlKiByZXN1bHQgPSAmYXJyYXlb
b2Zmc2V0XTsKKworICAgIGlmIChtb2RlID09IEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheSAm
JiBrZXkgIT0gZXh0cmFjdEtleShyZXN1bHQpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIC8v
IEluIGNhc2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5IGlm
IHdlIHJlYWNoIHRoaXMgcG9pbnQKLSAgICAvLyB3ZSd2ZSBjaG9wcGVkIGRvd24gdG8gb25lIGVs
ZW1lbnQsIG5vIG5lZWQgdG8gY2hlY2sgaXQgbWF0Y2hlcwogICAgIGlmIChtb2RlID09IEtleU11
c3RCZVByZXNlbnRJbkFycmF5KSB7CiAgICAgICAgIEFTU0VSVChzaXplID09IDEpOwotICAgICAg
ICBBU1NFUlQoa2V5ID09IGV4dHJhY3RLZXkoJmFycmF5WzBdKSk7CisgICAgICAgIEFTU0VSVChr
ZXkgPT0gZXh0cmFjdEtleShyZXN1bHQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gJmFycmF5WzBd
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS8vIE1vZGlmaWVkIGJpbmFyeSBzZWFyY2ggYWxn
b3JpdGhtIHRoYXQgdXNlcyBhIGZ1bmN0b3IuIE5vdGUgdGhhdCB0aGlzIGlzIHN0cmljdGx5Ci0v
LyBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGFib3ZlLCBidXQgcmVzdWx0cyBpbiBzb21ld2hhdCBs
ZXNzIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLgotLy8gSGVuY2UsIGRlcGVuZGluZyBvbiBpbmxp
bmluZyBoZXVyaXN0aWNzLCBpdCBtaWdodCBiZSBzbG93ZXIuCi10ZW1wbGF0ZTx0eXBlbmFtZSBB
cnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5Pgot
aW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yKEFycmF5RWxl
bWVudFR5cGUqIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIEJpbmFyeVNlYXJjaE1v
ZGUgbW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRy
YWN0S2V5ID0gRXh0cmFjdEtleSgpKQorLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kLCBj
cmFzaCBpZiBhc3NlcnRzIGFyZSBlbmFibGVkLCBhbmQgYmVoYXZlIGxpa2UgYXBwcm94aW1hdGVC
aW5hcnlTZWFyY2ggaW4gcmVsZWFzZSBidWlsZHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVs
ZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5cGVuYW1l
IEV4dHJhY3RLZXk+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYmluYXJ5U2VhcmNoKEFycmF5
VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29uc3QgRXh0cmFjdEtleSYg
ZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKIHsKLSAgICAvLyBUaGUgYXJyYXkgbXVzdCBjb250
YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50IChwcmUtY29uZGl0aW9uLCBhcnJheSBkb2VzIGNvbnRh
aW4ga2V5KS4KLSAgICAvLyBJZiB0aGUgYXJyYXkgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCwg
bm8gbmVlZCB0byBkbyB0aGUgY29tcGFyaXNvbi4KLSAgICB3aGlsZSAoc2l6ZSA+IDEpIHsKLSAg
ICAgICAgLy8gUGljayBhbiBlbGVtZW50IHRvIGNoZWNrLCBoYWxmIHdheSB0aHJvdWdoIHRoZSBh
cnJheSwgYW5kIHJlYWQgdGhlIHZhbHVlLgotICAgICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+
PiAxOwotICAgICAgICBLZXlUeXBlIHZhbCA9IGV4dHJhY3RLZXkoJmFycmF5W3Bvc10pOwotCi0g
ICAgICAgIC8vIElmIHRoZSBrZXkgbWF0Y2hlcywgc3VjY2VzcyEKLSAgICAgICAgaWYgKHZhbCA9
PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107Ci0gICAgICAgIC8vIFRoZSBp
dGVtIHdlIGFyZSBsb29raW5nIGZvciBpcyBzbWFsbGVyIHRoYW4gdGhlIGl0ZW0gYmVpbmcgY2hl
Y2s7IHJlZHVjZSB0aGUgdmFsdWUgb2YgJ3NpemUnLAotICAgICAgICAvLyBjaG9wcGluZyBvZmYg
dGhlIHJpZ2h0IGhhbmQgaGFsZiBvZiB0aGUgYXJyYXkuCi0gICAgICAgIGVsc2UgaWYgKGtleSA8
IHZhbCkKLSAgICAgICAgICAgIHNpemUgPSBwb3M7Ci0gICAgICAgIC8vIERpc2NhcmQgYWxsIHZh
bHVlcyBpbiB0aGUgbGVmdCBoYW5kIGhhbGYgb2YgdGhlIGFycmF5LCB1cCB0byBhbmQgaW5jbHVk
aW5nIHRoZSBpdGVtIGF0IHBvcy4KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplIC09
IChwb3MgKyAxKTsKLSAgICAgICAgICAgIGFycmF5ICs9IChwb3MgKyAxKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIEluIGNhc2Ugb2YgQmluYXJ5U2VhcmNoTW9kZSA9IEtleU11c3RCZVByZXNl
bnRJbkFycmF5ICdzaXplJyBzaG91bGQgbmV2ZXIgcmVhY2ggemVyby4KLSAgICAgICAgaWYgKG1v
ZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpCi0gICAgICAgICAgICBBU1NFUlQoc2l6ZSk7
Ci0gICAgfQotCi0gICAgLy8gSW4gY2FzZSBvZiBCaW5hcnlTZWFyY2hNb2RlID0gS2V5TXVzdEJl
UHJlc2VudEluQXJyYXkgaWYgd2UgcmVhY2ggdGhpcyBwb2ludAotICAgIC8vIHdlJ3ZlIGNob3Bw
ZWQgZG93biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVjayBpdCBtYXRjaGVzCi0gICAg
aWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJlc2VudEluQXJyYXkpIHsKLSAgICAgICAgQVNTRVJUKHNp
emUgPT0gMSk7Ci0gICAgICAgIEFTU0VSVChrZXkgPT0gZXh0cmFjdEtleSgmYXJyYXlbMF0pKTsK
LSAgICB9CisgICAgcmV0dXJuIGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5
VHlwZSwgQXJyYXlUeXBlLCBFeHRyYWN0S2V5LCBLZXlNdXN0QmVQcmVzZW50SW5BcnJheT4oYXJy
YXksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9CiAKLSAgICByZXR1cm4gJmFycmF5WzBdOwor
Ly8gUmV0dXJuIHplcm8gaWYgdGhlIGVsZW1lbnQgaXMgbm90IGZvdW5kLgordGVtcGxhdGU8dHlw
ZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlU
eXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIHRyeUJp
bmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNv
bnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJu
IGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBF
eHRyYWN0S2V5LCBLZXlNaWdodE5vdEJlUHJlc2VudEluQXJyYXk+KGFycmF5LCBzaXplLCBrZXks
IGV4dHJhY3RLZXkpOwogfQogCi0vLyBNb2RpZmllZCBiaW5hcnlTZWFyY2goKSBhbGdvcml0aG0g
ZGVzaWduZWQgZm9yIGFycmF5LWxpa2UgY2xhc3NlcyB0aGF0IHN1cHBvcnQKLS8vIG9wZXJhdG9y
W10gYnV0IG5vdCBvcGVyYXRvcis9LiBPbmUgZXhhbXBsZSBvZiBhIGNsYXNzIHRoYXQgcXVhbGlm
aWVzIGlzCi0vLyBTZWdtZW50ZWRWZWN0b3IuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1l
bnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCBLZXlUeXBlKCpleHRyYWN0S2V5KShBcnJheUVsZW1l
bnRUeXBlKiksIHR5cGVuYW1lIEFycmF5VHlwZT4KLWlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBn
ZW5lcmljQmluYXJ5U2VhcmNoKEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBl
IGtleSkKKy8vIFJldHVybiB0aGUgZWxlbWVudCB0aGF0IGlzIGVpdGhlciB0byB0aGUgbGVmdCwg
b3IgdGhlIHJpZ2h0LCBvZiB3aGVyZSB0aGUgZWxlbWVudCB3b3VsZCBoYXZlIGJlZW4gZm91bmQu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0
eXBlbmFtZSBFeHRyYWN0S2V5LCB0eXBlbmFtZSBBcnJheVR5cGU+CitpbmxpbmUgQXJyYXlFbGVt
ZW50VHlwZSogYXBwcm94aW1hdGVCaW5hcnlTZWFyY2goQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90
IHNpemUsIEtleVR5cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFj
dEtleSgpKQogewotICAgIC8vIFRoZSBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGVs
ZW1lbnQgKHByZS1jb25kaXRpb24sIGFycmF5IGRvZXMgY29uYXRpbiBrZXkpLgotICAgIC8vIElm
IHRoZSBhcnJheSBvbmx5IGNvbnRhaW5zIG9uZSBlbGVtZW50LCBubyBuZWVkIHRvIGRvIHRoZSBj
b21wYXJpc29uLgotICAgIHNpemVfdCBvZmZzZXQgPSAwOwotICAgIHdoaWxlIChzaXplID4gMSkg
ewotICAgICAgICAvLyBQaWNrIGFuIGVsZW1lbnQgdG8gY2hlY2ssIGhhbGYgd2F5IHRocm91Z2gg
dGhlIGFycmF5LCBhbmQgcmVhZCB0aGUgdmFsdWUuCi0gICAgICAgIGludCBwb3MgPSAoc2l6ZSAt
IDEpID4+IDE7Ci0gICAgICAgIEtleVR5cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbb2Zmc2V0
ICsgcG9zXSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB0aGUga2V5IG1hdGNoZXMsIHN1Y2Nl
c3MhCi0gICAgICAgIGlmICh2YWwgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuICZhcnJheVtv
ZmZzZXQgKyBwb3NdOwotICAgICAgICAvLyBUaGUgaXRlbSB3ZSBhcmUgbG9va2luZyBmb3IgaXMg
c21hbGxlciB0aGFuIHRoZSBpdGVtIGJlaW5nIGNoZWNrOyByZWR1Y2UgdGhlIHZhbHVlIG9mICdz
aXplJywKLSAgICAgICAgLy8gY2hvcHBpbmcgb2ZmIHRoZSByaWdodCBoYW5kIGhhbGYgb2YgdGhl
IGFycmF5LgotICAgICAgICBpZiAoa2V5IDwgdmFsKQotICAgICAgICAgICAgc2l6ZSA9IHBvczsK
LSAgICAgICAgLy8gRGlzY2FyZCBhbGwgdmFsdWVzIGluIHRoZSBsZWZ0IGhhbmQgaGFsZiBvZiB0
aGUgYXJyYXksIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGl0ZW0gYXQgcG9zLgotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHNpemUgLT0gKHBvcyArIDEpOwotICAgICAgICAgICAgb2Zmc2V0
ICs9IChwb3MgKyAxKTsKLSAgICAgICAgfQorICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFy
cmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFycmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRq
YWNlbnRFbGVtZW50SWZLZXlJc05vdFByZXNlbnQ+KGFycmF5LCBzaXplLCBrZXksIGV4dHJhY3RL
ZXkpOworfQogCi0gICAgICAgIC8vICdzaXplJyBzaG91bGQgbmV2ZXIgcmVhY2ggemVyby4KLSAg
ICAgICAgQVNTRVJUKHNpemUpOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiB3ZSByZWFjaCB0aGlz
IHBvaW50IHdlJ3ZlIGNob3BwZWQgZG93biB0byBvbmUgZWxlbWVudCwgbm8gbmVlZCB0byBjaGVj
ayBpdCBtYXRjaGVzCi0gICAgQVNTRVJUKHNpemUgPT0gMSk7Ci0gICAgQVNTRVJUKGtleSA9PSBl
eHRyYWN0S2V5KCZhcnJheVtvZmZzZXRdKSk7Ci0gICAgcmV0dXJuICZhcnJheVtvZmZzZXRdOwor
Ly8gVmFyaWFudHMgb2YgdGhlIGFib3ZlIHRoYXQgdXNlIGNvbnN0LgordGVtcGxhdGU8dHlwZW5h
bWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgQXJyYXlUeXBl
LCB0eXBlbmFtZSBFeHRyYWN0S2V5PgoraW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNl
YXJjaChjb25zdCBBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXksIGNv
bnN0IEV4dHJhY3RLZXkmIGV4dHJhY3RLZXkgPSBFeHRyYWN0S2V5KCkpCit7CisgICAgcmV0dXJu
IGJpbmFyeVNlYXJjaEltcGw8QXJyYXlFbGVtZW50VHlwZSwgS2V5VHlwZSwgQXJyYXlUeXBlLCBF
eHRyYWN0S2V5LCBLZXlNdXN0QmVQcmVzZW50SW5BcnJheT4oY29uc3RfY2FzdDxBcnJheVR5cGUm
PihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBB
cnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBBcnJheVR5cGUsIHR5
cGVuYW1lIEV4dHJhY3RLZXk+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogdHJ5QmluYXJ5U2Vh
cmNoKGNvbnN0IEFycmF5VHlwZSYgYXJyYXksIHNpemVfdCBzaXplLCBLZXlUeXBlIGtleSwgY29u
c3QgRXh0cmFjdEtleSYgZXh0cmFjdEtleSA9IEV4dHJhY3RLZXkoKSkKK3sKKyAgICByZXR1cm4g
YmluYXJ5U2VhcmNoSW1wbDxBcnJheUVsZW1lbnRUeXBlLCBLZXlUeXBlLCBBcnJheVR5cGUsIEV4
dHJhY3RLZXksIEtleU1pZ2h0Tm90QmVQcmVzZW50SW5BcnJheT4oY29uc3RfY2FzdDxBcnJheVR5
cGUmPihhcnJheSksIHNpemUsIGtleSwgZXh0cmFjdEtleSk7Cit9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBFeHRyYWN0S2V5
LCB0eXBlbmFtZSBBcnJheVR5cGU+CitpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogYXBwcm94aW1h
dGVCaW5hcnlTZWFyY2goY29uc3QgQXJyYXlUeXBlJiBhcnJheSwgc2l6ZV90IHNpemUsIEtleVR5
cGUga2V5LCBjb25zdCBFeHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQorewor
ICAgIHJldHVybiBiaW5hcnlTZWFyY2hJbXBsPEFycmF5RWxlbWVudFR5cGUsIEtleVR5cGUsIEFy
cmF5VHlwZSwgRXh0cmFjdEtleSwgUmV0dXJuQWRqYWNlbnRFbGVtZW50SWZLZXlJc05vdFByZXNl
bnQ+KGNvbnN0X2Nhc3Q8QXJyYXlUeXBlJj4oYXJyYXkpLCBzaXplLCBrZXksIGV4dHJhY3RLZXkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKQEAgLTMxNCw2ICsyNzQsOCBAQCB1c2luZyBXVEY6
Ok1COwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwogdXNpbmcgV1RGOjppczhCeXRlQWxp
Z25lZDsKIHVzaW5nIFdURjo6YmluYXJ5U2VhcmNoOwordXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFy
Y2g7Cit1c2luZyBXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3
aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMzc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEF0dGVtcHQgdG8gcmF0aW9uYWxpemUgYW5kIHNpbXBsaWZ5IFdURjo6Ymlu
YXJ5U2VhcmNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDQ4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KKworICAg
ICAgICBTd2l0Y2ggdG8gdXNpbmcgdGhlIG5ldyBiaW5hcnlTZWFyY2goKSBBUEkuIE5vIGNoYW5n
ZSBpbiBiZWhhdmlvciwgc28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6
ZmluZEluc3RhbmNlVGltZSk6CisKIDIwMTItMTItMTIgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUu
Y29tPgogCiAgICAgICAgIENyYXNoIGluIFBsdWdJbk9yaWdpbkhhc2ggd2l0aCBlbXB0eSBNSU1F
IHR5cGUgKDEwNDg4MikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzc0MzMpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcg
Kzc0Miw3IEBAIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50OjpmaW5kSW5zdGFuY2VUaW0KICAgICBp
ZiAoIXNpemVPZkxpc3QpCiAgICAgICAgIHJldHVybiBiZWdpbk9yRW5kID09IEJlZ2luID8gU01J
TFRpbWU6OnVucmVzb2x2ZWQoKSA6IFNNSUxUaW1lOjppbmRlZmluaXRlKCk7CiAKLSAgICBjb25z
dCBTTUlMVGltZVdpdGhPcmlnaW4qIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxjb25zdCBTTUlMVGlt
ZVdpdGhPcmlnaW4sIFNNSUxUaW1lLCBleHRyYWN0VGltZUZyb21WZWN0b3I+KGxpc3QuYmVnaW4o
KSwgc2l6ZU9mTGlzdCwgbWluaW11bVRpbWUsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJy
YXkpOworICAgIGNvbnN0IFNNSUxUaW1lV2l0aE9yaWdpbiogcmVzdWx0ID0gYXBwcm94aW1hdGVC
aW5hcnlTZWFyY2g8Y29uc3QgU01JTFRpbWVXaXRoT3JpZ2luLCBTTUlMVGltZT4obGlzdCwgc2l6
ZU9mTGlzdCwgbWluaW11bVRpbWUsIGV4dHJhY3RUaW1lRnJvbVZlY3Rvcik7CiAgICAgaW50IGlu
ZGV4T2ZSZXN1bHQgPSByZXN1bHQgLSBsaXN0LmJlZ2luKCk7CiAgICAgQVNTRVJUKGluZGV4T2ZS
ZXN1bHQgPCBzaXplT2ZMaXN0KTsKICAgICBjb25zdCBTTUlMVGltZSYgY3VycmVudFRpbWUgPSBs
aXN0W2luZGV4T2ZSZXN1bHRdLnRpbWUoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>