<?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>89802</bug_id>
          
          <creation_ts>2012-06-22 21:57:19 -0700</creation_ts>
          <short_desc>Value profiling should use tier-up threshold randomization to get more coverage</short_desc>
          <delta_ts>2012-06-26 00:42:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89953</dependson>
          <blocked>89940</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>656017</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-22 21:57:19 -0700</bug_when>
    <thetext>Currently we often end up optimizing code with incomplete value profiling coverage - as in, the typical predicted type will be based on only one recorded value.  We&apos;re pretty good at making reasonable guesses even with incomplete information, but the fact that the code relies on this is kind of sad.  It would be better if we could reliably get multiple recorded values.

We can do this, if we LUB (least-upper-bound, or ValueProfile::computeUpdatedPrediction()) all value profiles a few times between when profiling starts and when OSR is triggered.  One way to make that happen is to make the execution counter have some random value that is smaller than the required threshold for OSR.  This will cause each function to take an OSR slow path without actually triggering optimization, which will in turn give us an opportunity to LUB all value profiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656019</commentid>
    <comment_count>1</comment_count>
      <attachid>149162</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-22 22:00:53 -0700</bug_when>
    <thetext>Created attachment 149162
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656020</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-22 22:04:23 -0700</bug_when>
    <thetext>Attachment 149162 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/JSGlobalObject.h:178:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSGlobalObject.h:178:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/JSGlobalObject.h:178:  The parameter name &quot;globalObjectMethodTable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656022</commentid>
    <comment_count>3</comment_count>
      <attachid>149162</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-22 22:24:12 -0700</bug_when>
    <thetext>Comment on attachment 149162
the patch

Attachment 149162 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13025585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656023</commentid>
    <comment_count>4</comment_count>
      <attachid>149163</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-22 22:38:03 -0700</bug_when>
    <thetext>Created attachment 149163
the patch

Fix style, attempt to fix Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656028</commentid>
    <comment_count>5</comment_count>
      <attachid>149163</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-22 23:00:43 -0700</bug_when>
    <thetext>Comment on attachment 149163
the patch

Attachment 149163 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13027636</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656953</commentid>
    <comment_count>6</comment_count>
      <attachid>149377</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-25 15:56:56 -0700</bug_when>
    <thetext>Created attachment 149377
patch for landing, hopefully

Already reviewed by Gavin.  Now I&apos;m just trying to get Win to build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656989</commentid>
    <comment_count>7</comment_count>
      <attachid>149377</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-25 16:27:23 -0700</bug_when>
    <thetext>Comment on attachment 149377
patch for landing, hopefully

Attachment 149377 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13103207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656993</commentid>
    <comment_count>8</comment_count>
      <attachid>149387</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-25 16:29:29 -0700</bug_when>
    <thetext>Created attachment 149387
moar fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656994</commentid>
    <comment_count>9</comment_count>
      <attachid>149388</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-25 16:30:28 -0700</bug_when>
    <thetext>Created attachment 149388
and now, with a ChangeLog!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657170</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-06-25 19:14:52 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/121215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657362</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-26 00:42:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Landed in http://trac.webkit.org/changeset/121215

The new test introduced in it fails on 32 bit platforms. (GTK, Qt)
I filed a new bug report for it: https://bugs.webkit.org/show_bug.cgi?id=89953</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149162</attachid>
            <date>2012-06-22 22:00:53 -0700</date>
            <delta_ts>2012-06-22 22:38:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>randomlub_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22927</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxMDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTA2LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VmFsdWUgcHJvZmlsaW5nIHNob3VsZCB1c2UgdGllci11cCB0aHJlc2hvbGQgcmFuZG9taXphdGlv
biB0byBnZXQgbW9yZSBjb3ZlcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk4MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGJvdGggTExJbnQgYW5kIEJh
c2VsaW5lIEpJVCBjb2RlIHRvIHRha2UgdGhlIE9TUiBzbG93IHBhdGggc2V2ZXJhbAorICAgICAg
ICB0aW1lcyBiZWZvcmUgYWN0dWFsbHkgZG9pbmcgT1NSLiBJZiB3ZSB0YWtlIHRoZSBPU1Igc2xv
dyBwYXRoIGJlZm9yZSB0aGUgZXhlY3V0aW9uCisgICAgICAgIGNvdW50IHRocmVzaG9sZCBpcyBy
ZWFjaGVkLCB0aGVuIHdlIGp1c3QgY2FsbCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCkgdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgY3VycmVudCBsYXRlc3QgbGVhc3QtdXBwZXItYm91
bmQgU3BlY1R5cGUgb2YgYWxsIHZhbHVlcyBzZWVuIGluIGVhY2gKKyAgICAgICAgVmFsdWVQcm9m
aWxlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGludEV4
ZWN1dGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVjdXRlQ291bnRl
cik6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c3RhdHVzKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjb3VudCk6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxMSW50
OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OndlYWtS
YW5kb21JbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAo
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemVPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha1JhbmRvbS5oOgorICAgICAgICAoV2Vha1JhbmRvbSk6CisgICAgICAgIChK
U0M6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorCiAyMDEyLTA2LTIyICBBbGV4YW5kcnUgQ2hp
Y3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIFJlLWVu
YWJsZSB0aGUgQ1NTIFNoYWRlcnMgY29tcGlsZSB0aW1lIGZsYWcgb24gU2FmYXJpIE1hYwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA0LDI2ICsyMTA0LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKGhhc0NvZGVPcmlnaW5zKCkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgZXhlY3V0YWJsZXMgdGhhdCB3ZSBoYXZlIGlubGluZWQgZG9uJ3QgZGllLgotICAgICAg
ICAvLyBGSVhNRTogSWYgdGhleSB3b3VsZCBoYXZlIG90aGVyd2lzZSBkaWVkLCB3ZSBzaG91bGQg
cHJvYmFibHkgdHJpZ2dlciByZWNvbXBpbGF0aW9uLgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlubGluZUNhbGxGcmFtZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lJiBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWVzKClbaV07Ci0g
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUpOwot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFtZS5jYWxsZWUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbnMoQ29sbGVjdGlvbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKLSAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2Zp
bGVJbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmlsZUluZGV4
KQotICAgICAgICB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChwcm9maWxlSW5kZXgpLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0gICAgZm9yICh1bnNpZ25lZCBwcm9maWxl
SW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9m
aWxlSW5kZXgpCi0gICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0jZW5kaWYKKyAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucyhDb2xsZWN0aW9uKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTI1NzQsMjEgKzI1NTUsMTEgQEAg
Ym9vbCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3co
KQordm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcygK
KyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiwgdW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpCiB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBvcHRpbWl6aW5nICVwLi4uXG4iLCB0aGlzKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKLSAgICBkdW1wVmFsdWVQcm9maWxlcygpOwotI2VuZGlm
Ci0KLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11
bU9wdGltaXphdGlvbkRlbGF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIHVuc2ln
bmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkg
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxl
cygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCisgICAgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0g
MDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVx
dWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxs
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxl
cygpOyArK2kpIHsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMoaSk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNhbXBsZXMgPSBwcm9maWxlLT50
b3RhbE51bWJlck9mU2FtcGxlcygpOwpAQCAtMjU5NiwxMyArMjU2Nyw0MSBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgICAgICAgICAgbnVtU2FtcGxlcyA9IFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50IHByb2ZpbGVzIHRoYXQg
YXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQuCiAgICAgICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKICAgICAgICAgaWYgKHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihvcGVyYXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7
CiAgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fbGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMob3BlcmF0aW9uKTsKKyNlbmRpZgor
fQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9n
cmVzcyBvcGVyYXRpb24pCit7CisgICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZh
bHVlMjsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3Mob3BlcmF0aW9u
LCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKK3sKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIGRh
dGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIsIHRoaXMpOworI2VuZGlmCisK
KyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgIGR1bXBWYWx1ZVByb2ZpbGVz
KCk7CisjZW5kaWYKKworICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRp
b25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHVuc2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOworICAgIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyhOb09wZXJhdGlvbiwgbnVtYmVyT2ZMaXZlTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiUHJvZmlsZSBob3RuZXNzOiAlbGYsICVs
ZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxMyw5ICs5MTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGludDMyX3QgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CisgICAgICAgIGNvbnN0IEV4ZWN1
dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKKyAgICAgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRp
b24ga2lja3MgaW4uIFRoaXMKQEAgLTk3MSw3ICs5NzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fYWN0aXZlVGhyZXNob2xk
KTsgfQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxD
b3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNv
dW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fdG90YWxDb3VudCk7
IH0KIAotICAgICAgICBpbnQzMl90IGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9qaXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7IH0KKyAgICAgICAgY29uc3QgRXhlY3V0aW9u
Q291bnRlciYgaml0RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVD
b3VudGVyOyB9CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAg
ICAgICAKQEAgLTExMDAsOCArMTEwMCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAg
ICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbik7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25J
blByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQogI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJM
RShKSVQpCkBAIC0xMTM0LDYgKzExMzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAg
ICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQogI2VuZGlmCisjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQorICAgICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyhPcGVyYXRpb25JblByb2dyZXNzLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0
cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDEyMTA3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRl
cjo6c2V0VGhyZXNob2xkKENvZGUKICAgICBBU1NFUlQoIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29k
ZUJsb2NrKSk7CiAgICAgICAgIAogICAgIC8vIENvbXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQu
Ci0gICAgZG91YmxlIHRydWVUb3RhbENvdW50ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFs
Q291bnQpICsgbV9jb3VudGVyOworICAgIGRvdWJsZSB0cnVlVG90YWxDb3VudCA9IGNvdW50KCk7
CiAgICAgICAgIAogICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBtZW1v
cnkgdXNhZ2UuCiAgICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzKG1fYWN0aXZlVGhyZXNob2xkLCBjb2RlQmxvY2spOwpAQCAtMTQzLDkgKzE0MywxMSBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZChDb2RlCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmICh0aHJlc2hvbGQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSkKLSAgICAgICAgdGhyZXNob2xkID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIAorICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0KKyAg
ICAgICAgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbUludGVnZXIoKSAlIE9w
dGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7CisgICAgaWYg
KHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKKyAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOworICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hv
bGQpOwogICAgICAgICAKICAgICBtX3RvdGFsQ291bnQgPSB0cnVlVG90YWxDb3VudCArIHRocmVz
aG9sZDsKQEAgLTE2MCw1ICsxNjIsMTIgQEAgdm9pZCBFeGVjdXRpb25Db3VudGVyOjpyZXNldCgp
CiAgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSAwOwogfQogCitjb25zdCBjaGFyKiBFeGVjdXRpb25D
b3VudGVyOjpzdGF0dXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjaGFyIHJlc3VsdFs4MF07Cisg
ICAgc25wcmludGYocmVzdWx0LCBzaXplb2YocmVzdWx0KSwgIiVsZi8lbGYsICVkIiwgY291bnQo
KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2FjdGl2ZVRocmVzaG9sZCksIG1fY291bnRlcik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2
aXNpb24gMTIxMDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlv
bkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICB2b2lk
IHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBkZWZlckluZGVmaW5pdGVseSgpOworICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQorICAgIGNv
bnN0IGNoYXIqIHN0YXR1cygpIGNvbnN0OwogICAgIHN0YXRpYyBkb3VibGUgYXBwbHlNZW1vcnlV
c2FnZUhldXJpc3RpY3MoaW50MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CiAgICAgc3RhdGljIGlu
dDMyX3QgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoaW50MzJfdCB2
YWx1ZSwgQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTIxMDczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5
Miw3ICsxMzkyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKICAgICAgICAgLy8gRklY
TUU6IFR1cm4gQ2hlY2tTdHJ1Y3R1cmUgaW50byBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCB3aGVuIHBvc3NpYmxlIQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxh
dGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJv
dmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJl
IGJhZC4KICAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOwogICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjEwNzMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjM4LDEyICsxMjM4LDEyIEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlv
blByaW50U3AKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0
YXRpY19jYXN0PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKICAgICBDb2Rl
QmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gJXAgYXQgQCV1IHdpdGggZXhlY3V0ZUNvdW50ZXIg
PSAlZCwgIgorICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gJXAgYXQgQCV1IHdp
dGggZXhlY3V0ZUNvdW50ZXIgPSAlcywgIgogICAgICAgICAgICAgInJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1LCAiCiAgICAgICAg
ICAgICAic3VjY2Vzcy9mYWlsICV1LygldSsldSlcbiIsCiAgICAgICAgICAgICBjb2RlQmxvY2ss
CiAgICAgICAgICAgICBkZWJ1Z0luZm8tPm5vZGVJbmRleCwKLSAgICAgICAgICAgIGFsdGVybmF0
aXZlID8gYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCkgOiAwLAorICAgICAgICAgICAg
YWx0ZXJuYXRpdmUgPyBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSA6
IDAsCiAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA/IGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpIDogMCwKICAgICAgICAgICAgIGFsdGVybmF0aXZlID8gYWx0ZXJuYXRp
dmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIDogMCwKICAgICAgICAgICAgIGNvZGVCbG9j
ay0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyMTA3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05ODYsMTMgKzk4Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
QmFzaWNCbG9jayYKICAgICBtX2ppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogCiAg
ICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSB8fCBtX2ppdC5jb2RlQmxvY2soKS0+YXJndW1lbnRJc0NhcHR1cmVkKGkpKQotICAgICAgICAg
ICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9y
U3BlY3VsYXRpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7CiAgICAgbV9zdGF0ZS5iZWdp
bkJhc2ljQmxvY2soJmJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOCwxMSArMTkyOCwxMyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRl
eCA9ICV1LCBleGVjdXRlQ291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9
ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLCBieXRlY29k
ZUluZGV4LCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoKSk7CisgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29kZUlu
ZGV4ID0gJXUsIGV4ZWN1dGVDb3VudGVyID0gJXMsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSwgY29kZUJs
b2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlv
bkRlbGF5Q291bnRlcigpKTsKICNlbmRpZgogCi0gICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpCisgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgY29kZUJsb2NrLT51
cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYg
KGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQs
OCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgCiAgICAgaWYgKCFjb2Rl
QmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQogICAgICAgICBkYXRhTG9nKCIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUg
bGlmdGVkLlxuIik7CkBAIC0zMDAsNyArMzAyLDggQEAgZW51bSBFbnRyeUtpbmQgeyBQcm9sb2d1
ZSwgQXJpdHlDaGVjayB9Owogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVj
U3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgJXMgd2l0aCBleGVjdXRlQ291bnRlciA9ICVk
XG4iLCBjb2RlQmxvY2ssIG5hbWUsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKTsK
KyAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCAlcyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIs
IGNvZGVCbG9jaywgbmFtZSwKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291
bnRlcigpLnN0YXR1cygpKTsKICNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMp
KSB7CkBAIC0zNDYsNyArMzQ5LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKICNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIGxvb3Bfb3Ny
IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZFxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKSk7CisgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgbG9vcF9vc3Igd2l0
aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssCisgICAgICAgICAgICBjb2RlQmxv
Y2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CiAjZW5kaWYKICAgICAKICAgICBp
ZiAoIXNob3VsZEpJVChleGVjKSkgewpAQCAtMzc2LDcgKzM4MCw4IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHJlcGxhY2UpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIiVw
OiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxvY2ss
IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDogRW50
ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlc1xuIiwgY29kZUJsb2NrLAorICAg
ICAgICAgICAgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkuc3RhdHVzKCkpOwogI2Vu
ZGlmCiAgICAgCiAgICAgaWYgKHNob3VsZEpJVChleGVjKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMTA3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RhdGljIGlubGluZSB2b2lkCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHYpOwogfQogCitKU0ds
b2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKQorICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQorICAgICwgbV9nbG9iYWxTY29wZUNoYWlu
KCkKKyAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkID8gT3B0
aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9t
TnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkp
CisgICAgLCBtX2V2YWxFbmFibGVkKHRydWUpCisgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAm
c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK3sKK30KKwogSlNHbG9iYWxPYmplY3Q6On5KU0ds
b2JhbE9iamVjdCgpCiB7CiAgICAgaWYgKG1fZGVidWdnZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyMTA3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE3NSwxNCArMTc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IDApCi0gICAgICAgICAgICA6IEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKLSAg
ICAgICAgICAgICwgbV9nbG9iYWxTY29wZUNoYWluKCkKLSAgICAgICAgICAgICwgbV93ZWFrUmFu
ZG9tKHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKLSAgICAgICAgICAgICwgbV9ldmFsRW5h
YmxlZCh0cnVlKQotICAgICAgICAgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBn
bG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IDApOwogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CkBAIC0zMjgsNiArMzIxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBkb3VibGUgd2Vha1JhbmRv
bU51bWJlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXQoKTsgfQorICAgICAgICB1bnNpZ25l
ZCB3ZWFrUmFuZG9tSW50ZWdlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXRVaW50MzIoKTsg
fQogICAgIHByb3RlY3RlZDoKIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3Q6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGlu
dDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVy
SW5jcmVtZW50Rm9yTG9vcDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHVybjsKIAoraW50MzJfdCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
OworCiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCiBkb3Vi
bGUgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CkBAIC05NSw2ICs5Nyw5IEBAIHVuc2ln
bmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7CiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsK
IHVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKIAorYm9vbCBmb3JjZVdlYWtSYW5k
b21TZWVkOwordW5zaWduZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7CisKICNpZiBFTkFCTEUoUlVO
X1RJTUVfSEVVUklTVElDUykKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywg
Ym9vbCYgdmFsdWUpCiB7CkBAIC0xODQsNiArMTg5LDggQEAgdm9pZCBpbml0aWFsaXplT3B0aW9u
cygpCiAKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsICAgMSk7CiAg
ICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KTsKKyAgICAKKyAg
ICBTRVQobWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCk7CiAK
ICAgICBTRVQoZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbywgNik7CiAgICAgCkBA
IC0yMjcsNiArMjM0LDkgQEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCiAgICAgCiAgICAgQVNT
RVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CiAgICAgQVNTRVJU
KChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CisgICAgCisgICAgU0VU
KGZvcmNlV2Vha1JhbmRvbVNlZWQsIGZhbHNlKTsKKyAgICBTRVQoZm9yY2VkV2Vha1JhbmRvbVNl
ZWQsIDApOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIxMDczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw4IEBAIGV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEkKIGV4
dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGlu
dDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKIAorZXh0ZXJuIGludDMy
X3QgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKKwogZXh0ZXJuIHVu
c2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CiAKIGV4dGVybiBkb3Vi
bGUgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CkBAIC04MSw2ICs4Myw5IEBAIGV4dGVy
biB1bnNpZ25lZCBnY01hcmtTdGFja1NlZ21lbnRTaXplOwogSlNfRVhQT1JUREFUQSBleHRlcm4g
dW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7CiBKU19FWFBPUlREQVRBIGV4dGVybiB1bnNpZ25l
ZCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQ7CiAKK2V4dGVybiBib29sIGZvcmNlV2Vha1JhbmRv
bVNlZWQ7CitleHRlcm4gdW5zaWduZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7CisKIHZvaWQgaW5p
dGlhbGl6ZU9wdGlvbnMoKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgJKHJldmlzaW9uIDEy
MTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9oaWdoKHNl
ZWQpCiAgICAgewogICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBzZWVkIHByb3ZpZGVk
IHRoYXQgeW91J3ZlIG5ldmVyIGNhbGxlZCBnZXQoKSBvciBnZXRVaW50MzIoKS4KKyAgICB1bnNp
Z25lZCBzZWVkVW5zYWZlKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CiAKICAgICBkb3VibGUg
Z2V0KCkKICAgICB7Cg==
</data>
<flag name="commit-queue"
          id="157102"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149163</attachid>
            <date>2012-06-22 22:38:03 -0700</date>
            <delta_ts>2012-06-25 15:56:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>randomlub_patch_2.diff</filename>
            <type>text/plain</type>
            <size>23001</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxMDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTA2LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VmFsdWUgcHJvZmlsaW5nIHNob3VsZCB1c2UgdGllci11cCB0aHJlc2hvbGQgcmFuZG9taXphdGlv
biB0byBnZXQgbW9yZSBjb3ZlcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk4MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGJvdGggTExJbnQgYW5kIEJh
c2VsaW5lIEpJVCBjb2RlIHRvIHRha2UgdGhlIE9TUiBzbG93IHBhdGggc2V2ZXJhbAorICAgICAg
ICB0aW1lcyBiZWZvcmUgYWN0dWFsbHkgZG9pbmcgT1NSLiBJZiB3ZSB0YWtlIHRoZSBPU1Igc2xv
dyBwYXRoIGJlZm9yZSB0aGUgZXhlY3V0aW9uCisgICAgICAgIGNvdW50IHRocmVzaG9sZCBpcyBy
ZWFjaGVkLCB0aGVuIHdlIGp1c3QgY2FsbCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCkgdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgY3VycmVudCBsYXRlc3QgbGVhc3QtdXBwZXItYm91
bmQgU3BlY1R5cGUgb2YgYWxsIHZhbHVlcyBzZWVuIGluIGVhY2gKKyAgICAgICAgVmFsdWVQcm9m
aWxlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGludEV4
ZWN1dGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVjdXRlQ291bnRl
cik6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c3RhdHVzKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjb3VudCk6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxMSW50
OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OndlYWtS
YW5kb21JbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAo
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemVPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha1JhbmRvbS5oOgorICAgICAgICAoV2Vha1JhbmRvbSk6CisgICAgICAgIChK
U0M6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorCiAyMDEyLTA2LTIyICBBbGV4YW5kcnUgQ2hp
Y3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIFJlLWVu
YWJsZSB0aGUgQ1NTIFNoYWRlcnMgY29tcGlsZSB0aW1lIGZsYWcgb24gU2FmYXJpIE1hYwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA0LDI2ICsyMTA0LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKGhhc0NvZGVPcmlnaW5zKCkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgZXhlY3V0YWJsZXMgdGhhdCB3ZSBoYXZlIGlubGluZWQgZG9uJ3QgZGllLgotICAgICAg
ICAvLyBGSVhNRTogSWYgdGhleSB3b3VsZCBoYXZlIG90aGVyd2lzZSBkaWVkLCB3ZSBzaG91bGQg
cHJvYmFibHkgdHJpZ2dlciByZWNvbXBpbGF0aW9uLgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlubGluZUNhbGxGcmFtZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lJiBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWVzKClbaV07Ci0g
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUpOwot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFtZS5jYWxsZWUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbnMoQ29sbGVjdGlvbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKLSAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2Zp
bGVJbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmlsZUluZGV4
KQotICAgICAgICB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChwcm9maWxlSW5kZXgpLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0gICAgZm9yICh1bnNpZ25lZCBwcm9maWxl
SW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9m
aWxlSW5kZXgpCi0gICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0jZW5kaWYKKyAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucyhDb2xsZWN0aW9uKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTI1NzQsMjEgKzI1NTUsMTEgQEAg
Ym9vbCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3co
KQordm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcygK
KyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiwgdW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpCiB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBvcHRpbWl6aW5nICVwLi4uXG4iLCB0aGlzKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKLSAgICBkdW1wVmFsdWVQcm9maWxlcygpOwotI2VuZGlm
Ci0KLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11
bU9wdGltaXphdGlvbkRlbGF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIHVuc2ln
bmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkg
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxl
cygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCisgICAgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0g
MDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVx
dWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxs
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxl
cygpOyArK2kpIHsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMoaSk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNhbXBsZXMgPSBwcm9maWxlLT50
b3RhbE51bWJlck9mU2FtcGxlcygpOwpAQCAtMjU5NiwxMyArMjU2Nyw0MSBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgICAgICAgICAgbnVtU2FtcGxlcyA9IFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50IHByb2ZpbGVzIHRoYXQg
YXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQuCiAgICAgICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKICAgICAgICAgaWYgKHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihvcGVyYXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7
CiAgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fbGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMob3BlcmF0aW9uKTsKKyNlbmRpZgor
fQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9n
cmVzcyBvcGVyYXRpb24pCit7CisgICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZh
bHVlMjsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3Mob3BlcmF0aW9u
LCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKK3sKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIGRh
dGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIsIHRoaXMpOworI2VuZGlmCisK
KyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgIGR1bXBWYWx1ZVByb2ZpbGVz
KCk7CisjZW5kaWYKKworICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRp
b25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHVuc2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOworICAgIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyhOb09wZXJhdGlvbiwgbnVtYmVyT2ZMaXZlTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiUHJvZmlsZSBob3RuZXNzOiAlbGYsICVs
ZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxMyw5ICs5MTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGludDMyX3QgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CisgICAgICAgIGNvbnN0IEV4ZWN1
dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKKyAgICAgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRp
b24ga2lja3MgaW4uIFRoaXMKQEAgLTk3MSw3ICs5NzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fYWN0aXZlVGhyZXNob2xk
KTsgfQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxD
b3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNv
dW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fdG90YWxDb3VudCk7
IH0KIAotICAgICAgICBpbnQzMl90IGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9qaXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7IH0KKyAgICAgICAgY29uc3QgRXhlY3V0aW9u
Q291bnRlciYgaml0RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVD
b3VudGVyOyB9CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAg
ICAgICAKQEAgLTExMDAsOCArMTEwMCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAg
ICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbik7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25J
blByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQogI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJM
RShKSVQpCkBAIC0xMTM0LDYgKzExMzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAg
ICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQogI2VuZGlmCisjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQorICAgICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyhPcGVyYXRpb25JblByb2dyZXNzLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0
cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDEyMTA3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMjUsNyArMTI2LDcgQEAgYm9vbCBFeGVjdXRpb25D
b3VudGVyOjpzZXRUaHJlc2hvbGQoQ29kZQogICAgIEFTU0VSVCghaGFzQ3Jvc3NlZFRocmVzaG9s
ZChjb2RlQmxvY2spKTsKICAgICAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgdHJ1ZSB0b3RhbCBj
b3VudC4KLSAgICBkb3VibGUgdHJ1ZVRvdGFsQ291bnQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1f
dG90YWxDb3VudCkgKyBtX2NvdW50ZXI7CisgICAgZG91YmxlIHRydWVUb3RhbENvdW50ID0gY291
bnQoKTsKICAgICAgICAgCiAgICAgLy8gQ29ycmVjdCB0aGUgdGhyZXNob2xkIGZvciBjdXJyZW50
IG1lbW9yeSB1c2FnZS4KICAgICBkb3VibGUgdGhyZXNob2xkID0gYXBwbHlNZW1vcnlVc2FnZUhl
dXJpc3RpY3MobV9hY3RpdmVUaHJlc2hvbGQsIGNvZGVCbG9jayk7CkBAIC0xNDMsOSArMTQ0LDEx
IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKENvZGUKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKHRocmVzaG9sZCA+IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1heCgpKQotICAgICAgICB0aHJlc2hvbGQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptYXgoKTsKLSAgICAgICAgCisgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQg
PQorICAgICAgICBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT53ZWFrUmFuZG9tSW50ZWdlcigp
ICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKKyAg
ICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQorICAgICAgICB0aHJlc2hvbGQgPSBtYXhU
aHJlc2hvbGQ7CisgICAgCiAgICAgbV9jb3VudGVyID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXRo
cmVzaG9sZCk7CiAgICAgICAgIAogICAgIG1fdG90YWxDb3VudCA9IHRydWVUb3RhbENvdW50ICsg
dGhyZXNob2xkOwpAQCAtMTYwLDUgKzE2MywxMiBAQCB2b2lkIEV4ZWN1dGlvbkNvdW50ZXI6OnJl
c2V0KCkKICAgICBtX2FjdGl2ZVRocmVzaG9sZCA9IDA7CiB9CiAKK2NvbnN0IGNoYXIqIEV4ZWN1
dGlvbkNvdW50ZXI6OnN0YXR1cygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNoYXIgcmVzdWx0Wzgw
XTsKKyAgICBzbnByaW50ZihyZXN1bHQsIHNpemVvZihyZXN1bHQpLCAiJWxmLyVsZiwgJWQiLCBj
b3VudCgpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhyZXNob2xkKSwgbV9jb3VudGVy
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5o
CShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENvZGVCbG9jayopOwogICAg
IHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBDb2RlQmxvY2sqKTsKICAg
ICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgZG91YmxlIGNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsgbV9jb3VudGVyOyB9Cisg
ICAgY29uc3QgY2hhciogc3RhdHVzKCkgY29uc3Q7CiAgICAgc3RhdGljIGRvdWJsZSBhcHBseU1l
bW9yeVVzYWdlSGV1cmlzdGljcyhpbnQzMl90IHZhbHVlLCBDb2RlQmxvY2sqKTsKICAgICBzdGF0
aWMgaW50MzJfdCBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENvbnZlcnRUb0ludChpbnQz
Ml90IHZhbHVlLCBDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzkyLDcgKzEzOTIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewogICAgICAgICAv
LyBGSVhNRTogVHVybiBDaGVja1N0cnVjdHVyZSBpbnRvIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50IHdoZW4gcG9zc2libGUhCiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkpOworICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVhcigpIHx8IGlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBiZSBjbGVhciBpZiB3ZSd2
ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0YXRpY2FsbHkga25vd24g
dG8gYmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDEyMTA3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMzgsMTIgKzEyMzgsMTIgQEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3Bl
cmF0aW9uUHJpbnRTcAogICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZv
ID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKj4oZGVidWdJbmZvUmF3
KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5mby0+Y29kZUJsb2NrOwogICAg
IENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7Ci0gICAg
ZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAlcCBhdCBAJXUgd2l0aCBleGVjdXRlQ291
bnRlciA9ICVkLCAiCisgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAlcCBhdCBA
JXUgd2l0aCBleGVjdXRlQ291bnRlciA9ICVzLCAiCiAgICAgICAgICAgICAicmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXUsICIKICAg
ICAgICAgICAgICJzdWNjZXNzL2ZhaWwgJXUvKCV1KyV1KVxuIiwKICAgICAgICAgICAgIGNvZGVC
bG9jaywKICAgICAgICAgICAgIGRlYnVnSW5mby0+bm9kZUluZGV4LAotICAgICAgICAgICAgYWx0
ZXJuYXRpdmUgPyBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSA6IDAsCisgICAgICAg
ICAgICBhbHRlcm5hdGl2ZSA/IGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpLnN0YXR1
cygpIDogMCwKICAgICAgICAgICAgIGFsdGVybmF0aXZlID8gYWx0ZXJuYXRpdmUtPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgOiAwLAogICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPyBhbHRl
cm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgOiAwLAogICAgICAgICAgICAgY29k
ZUJsb2NrLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTIxMDcz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk4NiwxMyArOTg2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShCYXNpY0Jsb2NrJgogICAgIG1faml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7
CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7Ci0gICAgICAgIGlmIChub2RlSW5kZXggPT0g
Tm9Ob2RlIHx8IG1faml0LmNvZGVCbG9jaygpLT5hcmd1bWVudElzQ2FwdHVyZWQoaSkpCi0gICAg
ICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNl
Ojpmb3JTcGVjdWxhdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCkpOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRz
LnNpemUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5SZWdpc3RlckZpbGUpOwogICAgIAogICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICBtX3N0YXRl
LmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTI4LDExICsxOTI4LDEzIEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAogI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29k
ZUluZGV4ID0gJXUsIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2ssIGJ5
dGVjb2RlSW5kZXgsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCBvcHRpbWl6ZSB3aXRoIGJ5dGVj
b2RlSW5kZXggPSAldSwgZXhlY3V0ZUNvdW50ZXIgPSAlcywgcmVvcHRpbWl6YXRpb25SZXRyeUNv
dW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jaywg
Ynl0ZWNvZGVJbmRleCwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLnN0YXR1cygpLCBj
b2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoIWNvZGVCbG9jay0+Y2hl
Y2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkKKyAgICBpZiAoIWNvZGVCbG9jay0+
Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgeworICAgICAgICBjb2RlQmxv
Y2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTIxMDczKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0LDYg
KzI2NCw4IEBAIGlubGluZSBib29sIHNob3VsZEpJVChFeGVjU3RhdGUqIGV4ZWMpCiAvLyBSZXR1
cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCiBpbmxpbmUgYm9vbCBqaXRDb21waWxl
QW5kU2V0SGV1cmlzdGljcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRXhlY1N0YXRlKiBleGVjKQog
eworICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKKyAgICAKICAgICBpZiAo
IWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewogI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFMb2coIiAgICBKSVQgdGhyZXNob2xkIHNob3Vs
ZCBiZSBsaWZ0ZWQuXG4iKTsKQEAgLTMwMCw3ICszMDIsOCBAQCBlbnVtIEVudHJ5S2luZCB7IFBy
b2xvZ3VlLCBBcml0eUNoZWNrIH07CiBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGVudHJ5T1NS
KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Y29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKLSAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCAlcyB3aXRoIGV4ZWN1dGVDb3VudGVy
ID0gJWRcbiIsIGNvZGVCbG9jaywgbmFtZSwgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVy
KCkpOworICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkICVzIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAl
c1xuIiwgY29kZUJsb2NrLCBuYW1lLAorICAgICAgICAgICAgY29kZUJsb2NrLT5sbGludEV4ZWN1
dGVDb3VudGVyKCkuc3RhdHVzKCkpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKCFzaG91bGRKSVQo
ZXhlYykpIHsKQEAgLTM0Niw3ICszNDksOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChsb29wX29z
cikKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgbG9v
cF9vc3Igd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+
bGxpbnRFeGVjdXRlQ291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCBsb29wX29z
ciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNvZGVCbG9jaywKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLnN0YXR1cygpKTsKICNlbmRpZgogICAgIAog
ICAgIGlmICghc2hvdWxkSklUKGV4ZWMpKSB7CkBAIC0zNzYsNyArMzgwLDggQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0wocmVwbGFjZSkKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxv
ZygiJXA6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWRcbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpOworICAgIGRhdGFMb2coIiVw
OiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ss
CisgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7
CiAjZW5kaWYKICAgICAKICAgICBpZiAoc2hvdWxkSklUKGV4ZWMpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTIxMDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDE1IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQKICAgICAgICAgdmlzaXRvci5hcHBlbmQodik7CiB9CiAK
K0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCisgICAgLCBtX2dsb2JhbFNjb3Bl
Q2hhaW4oKQorICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQg
PyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAx
LjApKSkKKyAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQoreworfQorCiBKU0dsb2JhbE9iamVjdDo6
fkpTR2xvYmFsT2JqZWN0KCkKIHsKICAgICBpZiAobV9kZWJ1Z2dlcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTIx
MDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTc1LDE0ICsxNzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUqIGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0gMCkKLSAgICAgICAgICAgIDogSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxl
KQotICAgICAgICAgICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQotICAgICAgICAgICAgLCBtX3dl
YWtSYW5kb20oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQotICAgICAgICAgICAgLCBtX2V2
YWxFbmFibGVkKHRydWUpCi0gICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUo
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2ds
b2JhbE9iamVjdE1ldGhvZFRhYmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKICAgICAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsK
QEAgLTMyOCw2ICszMjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IGRvdWJsZSB3ZWFrUmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9
CisgICAgICAgIHVuc2lnbmVkIHdlYWtSYW5kb21JbnRlZ2VyKCkgeyByZXR1cm4gbV93ZWFrUmFu
ZG9tLmdldFVpbnQzMigpOyB9CiAgICAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTIxMDczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDYgKzY3LDggQEAgaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb247CiBpbnQzMl90
IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwogaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVySW5jcmVtZW50Rm9yUmV0dXJuOwogCitpbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHM7CisKIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NG
YWlsUmF0aW87CiAKIGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKQEAgLTk1
LDYgKzk3LDkgQEAgdW5zaWduZWQgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZTsKIHVuc2lnbmVkIG51
bWJlck9mR0NNYXJrZXJzOwogdW5zaWduZWQgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkOwogCiti
b29sIGZvcmNlV2Vha1JhbmRvbVNlZWQ7Cit1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9tU2VlZDsK
KwogI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNTKQogc3RhdGljIGJvb2wgcGFyc2UoY29u
c3QgY2hhciogc3RyaW5nLCBib29sJiB2YWx1ZSkKIHsKQEAgLTE4NCw2ICsxODksOCBAQCB2b2lk
IGluaXRpYWxpemVPcHRpb25zKCkKIAogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yTG9vcCwgICAxKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVy
biwgMTUpOworICAgIAorICAgIFNFVChtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzLCAxMDAwKTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJh
dGlvLCA2KTsKICAgICAKQEAgLTIyNyw2ICsyMzQsOSBAQCB2b2lkIGluaXRpYWxpemVPcHRpb25z
KCkKICAgICAKICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkg
PiAwKTsKICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkp
KTsKKyAgICAKKyAgICBTRVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOworICAgIFNFVChm
b3JjZWRXZWFrUmFuZG9tU2VlZCwgMCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpPcHRp
b25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lv
biAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgZXh0ZXJuIGludDMyX3QgdGhyZXNob2xkRm9y
T3B0aW1pemVOZXh0SQogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
ckxvb3A7CiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJu
OwogCitleHRlcm4gaW50MzJfdCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9p
bnRzOworCiBleHRlcm4gdW5zaWduZWQgZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRp
bzsKIAogZXh0ZXJuIGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKQEAgLTgx
LDYgKzgzLDkgQEAgZXh0ZXJuIHVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7CiBKU19F
WFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKIEpTX0VYUE9SVERB
VEEgZXh0ZXJuIHVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKIAorZXh0ZXJuIGJv
b2wgZm9yY2VXZWFrUmFuZG9tU2VlZDsKK2V4dGVybiB1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9t
U2VlZDsKKwogdm9pZCBpbml0aWFsaXplT3B0aW9ucygpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6T3B0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5k
b20uaAkocmV2aXNpb24gMTIxMDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX2hpZ2goc2VlZCkKICAgICB7CiAgICAgfQorICAgIAorICAgIC8vIFJldHVybnMg
dGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdldFVp
bnQzMigpLgorICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2g7
IH0KIAogICAgIGRvdWJsZSBnZXQoKQogICAgIHsK
</data>
<flag name="review"
          id="157103"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="157106"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149377</attachid>
            <date>2012-06-25 15:56:56 -0700</date>
            <delta_ts>2012-06-25 16:29:29 -0700</delta_ts>
            <desc>patch for landing, hopefully</desc>
            <filename>randomlub_patch_3.diff</filename>
            <type>text/plain</type>
            <size>23012</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxMDg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTA2LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VmFsdWUgcHJvZmlsaW5nIHNob3VsZCB1c2UgdGllci11cCB0aHJlc2hvbGQgcmFuZG9taXphdGlv
biB0byBnZXQgbW9yZSBjb3ZlcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk4MDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGJvdGggTExJbnQgYW5kIEJh
c2VsaW5lIEpJVCBjb2RlIHRvIHRha2UgdGhlIE9TUiBzbG93IHBhdGggc2V2ZXJhbAorICAgICAg
ICB0aW1lcyBiZWZvcmUgYWN0dWFsbHkgZG9pbmcgT1NSLiBJZiB3ZSB0YWtlIHRoZSBPU1Igc2xv
dyBwYXRoIGJlZm9yZSB0aGUgZXhlY3V0aW9uCisgICAgICAgIGNvdW50IHRocmVzaG9sZCBpcyBy
ZWFjaGVkLCB0aGVuIHdlIGp1c3QgY2FsbCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25z
KCkgdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgY3VycmVudCBsYXRlc3QgbGVhc3QtdXBwZXItYm91
bmQgU3BlY1R5cGUgb2YgYWxsIHZhbHVlcyBzZWVuIGluIGVhY2gKKyAgICAgICAgVmFsdWVQcm9m
aWxlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAgICAg
ICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGludEV4
ZWN1dGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVjdXRlQ291bnRl
cik6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c3RhdHVzKToKKyAgICAgICAgKEpTQyk6CisgICAg
ICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRp
b25Db3VudGVyOjpjb3VudCk6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxMSW50
OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAg
ICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OndlYWtS
YW5kb21JbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAo
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemVPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKE9wdGlvbnMpOgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha1JhbmRvbS5oOgorICAgICAgICAoV2Vha1JhbmRvbSk6CisgICAgICAgIChK
U0M6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorCiAyMDEyLTA2LTIyICBBbGV4YW5kcnUgQ2hp
Y3VsaXRhICA8YWNoaWN1QGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIFJlLWVu
YWJsZSB0aGUgQ1NTIFNoYWRlcnMgY29tcGlsZSB0aW1lIGZsYWcgb24gU2FmYXJpIE1hYwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA0LDI2ICsyMTA0LDcgQEAgdm9pZCBDb2RlQmxvY2s6
OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogICAgIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgaWYgKGhhc0NvZGVPcmlnaW5zKCkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgZXhlY3V0YWJsZXMgdGhhdCB3ZSBoYXZlIGlubGluZWQgZG9uJ3QgZGllLgotICAgICAg
ICAvLyBGSVhNRTogSWYgdGhleSB3b3VsZCBoYXZlIG90aGVyd2lzZSBkaWVkLCB3ZSBzaG91bGQg
cHJvYmFibHkgdHJpZ2dlciByZWNvbXBpbGF0aW9uLgotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlubGluZUNhbGxGcmFtZXMoKS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lJiBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWVzKClbaV07Ci0g
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUpOwot
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFtZS5jYWxsZWUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbnMoQ29sbGVjdGlvbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShW
QUxVRV9QUk9GSUxFUikKLSAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2Zp
bGVJbmRleCA8IG51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmlsZUluZGV4
KQotICAgICAgICB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChwcm9maWxlSW5kZXgpLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0gICAgZm9yICh1bnNpZ25lZCBwcm9maWxl
SW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9m
aWxlSW5kZXgpCi0gICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oQ29sbGVjdGlvbik7Ci0jZW5kaWYKKyAgICB1cGRhdGVBbGxQcmVkaWN0
aW9ucyhDb2xsZWN0aW9uKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTI1NzQsMjEgKzI1NTUsMTEgQEAg
Ym9vbCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3co
KQordm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcygK
KyAgICBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiwgdW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpCiB7Ci0jaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBvcHRpbWl6aW5nICVwLi4uXG4iLCB0aGlzKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKLSAgICBkdW1wVmFsdWVQcm9maWxlcygpOwotI2VuZGlm
Ci0KLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11
bU9wdGltaXphdGlvbkRlbGF5KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPSAwOwotICAgIHVuc2ln
bmVkIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRpdmlkZWQgYnkg
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFsdWVQcm9maWxl
cygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCisgICAgbnVtYmVyT2ZMaXZlTm9uQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKKyAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0g
MDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVx
dWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxs
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxl
cygpOyArK2kpIHsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0RnJvbUFsbFZh
bHVlUHJvZmlsZXMoaSk7CiAgICAgICAgIHVuc2lnbmVkIG51bVNhbXBsZXMgPSBwcm9maWxlLT50
b3RhbE51bWJlck9mU2FtcGxlcygpOwpAQCAtMjU5NiwxMyArMjU2Nyw0MSBAQCBib29sIENvZGVC
bG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgICAgICAgICAgbnVtU2FtcGxlcyA9IFZhbHVl
UHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50IHByb2ZpbGVzIHRoYXQg
YXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQuCiAgICAgICAgIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKICAgICAgICAgaWYgKHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihvcGVyYXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7
CiAgICAgfQorICAgIAorI2lmIEVOQUJMRShERkdfSklUKQorICAgIG1fbGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMob3BlcmF0aW9uKTsKKyNlbmRpZgor
fQorCit2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9n
cmVzcyBvcGVyYXRpb24pCit7CisgICAgdW5zaWduZWQgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZh
bHVlMjsKKyAgICB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3Mob3BlcmF0aW9u
LCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyKTsKK30KKworYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKK3sKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIGRh
dGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXppbmcgJXAuLi5cbiIsIHRoaXMpOworI2VuZGlmCisK
KyNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQorICAgIGR1bXBWYWx1ZVByb2ZpbGVz
KCk7CisjZW5kaWYKKworICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRp
b25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHVuc2lnbmVkIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzOworICAgIHVwZGF0ZUFsbFByZWRp
Y3Rpb25zQW5kQ291bnRMaXZlbmVzcyhOb09wZXJhdGlvbiwgbnVtYmVyT2ZMaXZlTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzLCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCiAgICAgZGF0YUxvZygiUHJvZmlsZSBob3RuZXNzOiAlbGYsICVs
ZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8g
VmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxMyw5ICs5MTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6
dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGludDMyX3QgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CisgICAgICAgIGNvbnN0IEV4ZWN1
dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyLm1fY291bnRlcjsKKyAgICAgICAg
ICAgIHJldHVybiBtX2xsaW50RXhlY3V0ZUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRp
b24ga2lja3MgaW4uIFRoaXMKQEAgLTk3MSw3ICs5NzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvbkFjdGl2ZVRocmVzaG9s
ZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNvdW50
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fYWN0aXZlVGhyZXNob2xk
KTsgfQogICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uVG90YWxD
b3VudCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1faml0RXhlY3V0ZUNv
dW50ZXIpICsgT0JKRUNUX09GRlNFVE9GKEV4ZWN1dGlvbkNvdW50ZXIsIG1fdG90YWxDb3VudCk7
IH0KIAotICAgICAgICBpbnQzMl90IGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9qaXRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7IH0KKyAgICAgICAgY29uc3QgRXhlY3V0aW9u
Q291bnRlciYgaml0RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVD
b3VudGVyOyB9CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQogICAg
ICAgICAKQEAgLTExMDAsOCArMTEwMCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJM
RShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAg
ICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbik7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25J
blByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQogI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJM
RShKSVQpCkBAIC0xMTM0LDYgKzExMzYsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbHNlCiAgICAg
ICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpIHsgfQogI2VuZGlmCisjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQorICAgICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyhPcGVyYXRpb25JblByb2dyZXNzLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyk7CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25z
dCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0
cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAJKHJldmlzaW9uIDEyMTA3
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEyNSw3ICsxMjYsNyBAQCBib29s
IEV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZChDb2RlCiAgICAgQVNTRVJUKCFoYXNDcm9z
c2VkVGhyZXNob2xkKGNvZGVCbG9jaykpOwogICAgICAgICAKICAgICAvLyBDb21wdXRlIHRoZSB0
cnVlIHRvdGFsIGNvdW50LgotICAgIGRvdWJsZSB0cnVlVG90YWxDb3VudCA9IHN0YXRpY19jYXN0
PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsKKyAgICBkb3VibGUgdHJ1ZVRvdGFs
Q291bnQgPSBjb3VudCgpOwogICAgICAgICAKICAgICAvLyBDb3JyZWN0IHRoZSB0aHJlc2hvbGQg
Zm9yIGN1cnJlbnQgbWVtb3J5IHVzYWdlLgogICAgIGRvdWJsZSB0aHJlc2hvbGQgPSBhcHBseU1l
bW9yeVVzYWdlSGV1cmlzdGljcyhtX2FjdGl2ZVRocmVzaG9sZCwgY29kZUJsb2NrKTsKQEAgLTE0
Myw5ICsxNDQsMTEgQEAgYm9vbCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQoQ29kZQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAodGhyZXNob2xkID4gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAgIHRocmVzaG9sZCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpOwotICAgICAgICAKKyAgICBpbnQzMl90IG1h
eFRocmVzaG9sZCA9CisgICAgICAgIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPndlYWtSYW5k
b21JbnRlZ2VyKCkgJSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzOworICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCisgICAgICAgIHRocmVz
aG9sZCA9IG1heFRocmVzaG9sZDsKKyAgICAKICAgICBtX2NvdW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PigtdGhyZXNob2xkKTsKICAgICAgICAgCiAgICAgbV90b3RhbENvdW50ID0gdHJ1ZVRv
dGFsQ291bnQgKyB0aHJlc2hvbGQ7CkBAIC0xNjAsNSArMTYzLDEyIEBAIHZvaWQgRXhlY3V0aW9u
Q291bnRlcjo6cmVzZXQoKQogICAgIG1fYWN0aXZlVGhyZXNob2xkID0gMDsKIH0KIAorY29uc3Qg
Y2hhciogRXhlY3V0aW9uQ291bnRlcjo6c3RhdHVzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY2hh
ciByZXN1bHRbODBdOworICAgIHNucHJpbnRmKHJlc3VsdCwgc2l6ZW9mKHJlc3VsdCksICIlbGYv
JWxmLCAlZCIsIGNvdW50KCksIHN0YXRpY19jYXN0PGRvdWJsZT4obV9hY3RpdmVUaHJlc2hvbGQp
LCBtX2NvdW50ZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRp
b25Db3VudGVyLmgJKHJldmlzaW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDgg
QEAgcHVibGljOgogICAgIGJvb2wgY2hlY2tJZlRocmVzaG9sZENyb3NzZWRBbmRTZXQoQ29kZUJs
b2NrKik7CiAgICAgdm9pZCBzZXROZXdUaHJlc2hvbGQoaW50MzJfdCB0aHJlc2hvbGQsIENvZGVC
bG9jayopOwogICAgIHZvaWQgZGVmZXJJbmRlZmluaXRlbHkoKTsKKyAgICBkb3VibGUgY291bnQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2Nv
dW50ZXI7IH0KKyAgICBjb25zdCBjaGFyKiBzdGF0dXMoKSBjb25zdDsKICAgICBzdGF0aWMgZG91
YmxlIGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzKGludDMyX3QgdmFsdWUsIENvZGVCbG9jayop
OwogICAgIHN0YXRpYyBpbnQzMl90IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVy
dFRvSW50KGludDMyX3QgdmFsdWUsIENvZGVCbG9jayopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEyMTA3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7
CiAgICAgICAgIC8vIEZJWE1FOiBUdXJuIENoZWNrU3RydWN0dXJlIGludG8gU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQgd2hlbiBwb3NzaWJsZSEKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBBU1NFUlQoaXNDZWxsU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NsZWFyKCkg
fHwgaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSk7IC8vIFZhbHVlIGNvdWxkIGJlIGNs
ZWFyIGlmIHdlJ3ZlIHByb3ZlbiBtdXN0LWV4aXQgZHVlIHRvIGEgc3BlY3VsYXRpb24gc3RhdGlj
YWxseSBrbm93biB0byBiZSBiYWQuCiAgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLnN0cnVjdHVy
ZSgpKTsKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTIxMDczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzOCwxMiArMTIzOCwxMiBAQCB2b2lkIERGR19PUEVSQVRJ
T04gZGVidWdPcGVyYXRpb25QcmludFNwCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
KiBkZWJ1Z0luZm8gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qPihk
ZWJ1Z0luZm9SYXcpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZGVidWdJbmZvLT5jb2Rl
QmxvY2s7CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSA9IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKTsKLSAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICVwIGF0IEAldSB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gJWQsICIKKyAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJl
IGluICVwIGF0IEAldSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXMsICIKICAgICAgICAgICAgICJy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIg
PSAldSwgIgogICAgICAgICAgICAgInN1Y2Nlc3MvZmFpbCAldS8oJXUrJXUpXG4iLAogICAgICAg
ICAgICAgY29kZUJsb2NrLAogICAgICAgICAgICAgZGVidWdJbmZvLT5ub2RlSW5kZXgsCi0gICAg
ICAgICAgICBhbHRlcm5hdGl2ZSA/IGFsdGVybmF0aXZlLT5qaXRFeGVjdXRlQ291bnRlcigpIDog
MCwKKyAgICAgICAgICAgIGFsdGVybmF0aXZlID8gYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3Vu
dGVyKCkuc3RhdHVzKCkgOiAwLAogICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPyBhbHRlcm5hdGl2
ZS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSA6IDAsCiAgICAgICAgICAgICBhbHRlcm5h
dGl2ZSA/IGFsdGVybmF0aXZlLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSA6IDAsCiAgICAg
ICAgICAgICBjb2RlQmxvY2stPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg2LDEzICs5ODYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9qaXQuaml0QXNzZXJ0SGFzVmFsaWRD
YWxsRnJhbWUoKTsKIAogICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKTsKLSAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQuY29kZUJsb2NrKCktPmFyZ3VtZW50SXNDYXB0dXJl
ZChpKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
VmFsdWVTb3VyY2U6OmZvclNwZWN1bGF0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVT
b3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwog
ICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTIxMDczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjgsMTEgKzE5
MjgsMTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCiAjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCBvcHRpbWl6ZSB3
aXRoIGJ5dGVjb2RlSW5kZXggPSAldSwgZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNv
ZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRlcigpLCBj
b2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKCkpOworICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIG9wdGltaXpl
IHdpdGggYnl0ZWNvZGVJbmRleCA9ICV1LCBleGVjdXRlQ291bnRlciA9ICVzLCByZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwg
Y29kZUJsb2NrLCBieXRlY29kZUluZGV4LCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCku
c3RhdHVzKCksIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJs
b2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CiAjZW5kaWYKIAotICAgIGlmICghY29k
ZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKQorICAgIGlmICgh
Y29kZUJsb2NrLT5jaGVja0lmT3B0aW1pemF0aW9uVGhyZXNob2xkUmVhY2hlZCgpKSB7CisgICAg
ICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsK
ICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQsNiArMjY0LDggQEAgaW5saW5lIGJvb2wgc2hvdWxkSklUKEV4ZWNTdGF0ZSogZXhl
YykKIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgdHJ5IHRvIE9TUi4KIGlubGluZSBib29s
IGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKENvZGVCbG9jayogY29kZUJsb2NrLCBFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgY29kZUJsb2NrLT51cGRhdGVBbGxQcmVkaWN0aW9ucygpOworICAg
IAogICAgIGlmICghY29kZUJsb2NrLT5jaGVja0lmSklUVGhyZXNob2xkUmVhY2hlZCgpKSB7CiAj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgZGF0YUxvZygiICAgIEpJVCB0aHJl
c2hvbGQgc2hvdWxkIGJlIGxpZnRlZC5cbiIpOwpAQCAtMzAwLDcgKzMwMiw4IEBAIGVudW0gRW50
cnlLaW5kIHsgUHJvbG9ndWUsIEFyaXR5Q2hlY2sgfTsKIHN0YXRpYyBTbG93UGF0aFJldHVyblR5
cGUgZW50cnlPU1IoRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBjb25zdCBjaGFyICpuYW1lLCBFbnRyeUtpbmQga2luZCkKIHsKICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkICVzIHdpdGggZXhl
Y3V0ZUNvdW50ZXIgPSAlZFxuIiwgY29kZUJsb2NrLCBuYW1lLCBjb2RlQmxvY2stPmxsaW50RXhl
Y3V0ZUNvdW50ZXIoKSk7CisgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgJXMgd2l0aCBleGVjdXRl
Q291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssIG5hbWUsCisgICAgICAgICAgICBjb2RlQmxvY2st
PmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAo
IXNob3VsZEpJVChleGVjKSkgewpAQCAtMzQ2LDcgKzM0OSw4IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKGxvb3Bfb3NyKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCIlcDog
RW50ZXJlZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWRcbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpOworICAgIGRhdGFMb2coIiVwOiBFbnRl
cmVkIGxvb3Bfb3NyIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlc1xuIiwgY29kZUJsb2NrLAorICAg
ICAgICAgICAgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkuc3RhdHVzKCkpOwogI2Vu
ZGlmCiAgICAgCiAgICAgaWYgKCFzaG91bGRKSVQoZXhlYykpIHsKQEAgLTM3Niw3ICszODAsOCBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChyZXBsYWNlKQogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
LSAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAl
ZFxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKSk7CisgICAg
ZGF0YUxvZygiJXA6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIs
IGNvZGVCbG9jaywKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigp
LnN0YXR1cygpKTsKICNlbmRpZgogICAgIAogICAgIGlmIChzaG91bGRKSVQoZXhlYykpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsMTUgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgdm9pZAogICAgICAgICB2aXNpdG9yLmFwcGVu
ZCh2KTsKIH0KIAorSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICA6IEpTU2VnbWVudGVkVmFyaWFi
bGVPYmplY3QoZ2xvYmFsRGF0YSwgc3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKKyAgICAsIG1f
Z2xvYmFsU2NvcGVDaGFpbigpCisgICAgLCBtX3dlYWtSYW5kb20oT3B0aW9uczo6Zm9yY2VXZWFr
UmFuZG9tU2VlZCA/IE9wdGlvbnM6OmZvcmNlZFdlYWtSYW5kb21TZWVkIDogc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSArIDEuMCkpKQorICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQorICAgICwgbV9nbG9i
YWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVj
dE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCit7Cit9CisKIEpTR2xv
YmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QoKQogewogICAgIGlmIChtX2RlYnVnZ2VyKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShy
ZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsMTQgKzE3NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZv
OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxP
YmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSAwKQotICAgICAgICAg
ICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1f
c3ltYm9sVGFibGUpCi0gICAgICAgICAgICAsIG1fZ2xvYmFsU2NvcGVDaGFpbigpCi0gICAgICAg
ICAgICAsIG1fd2Vha1JhbmRvbShzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9tTnVtYmVyKCkg
KiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkpCi0gICAgICAg
ICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgfQor
ICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0dsb2JhbE9iamVjdChKU0dsb2Jh
bERhdGEmLCBTdHJ1Y3R1cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwKTsK
IAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
ICAgICAgICAgewpAQCAtMzI4LDYgKzMyMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICAgICAgZG91YmxlIHdlYWtSYW5kb21OdW1iZXIoKSB7IHJldHVybiBtX3dlYWtSYW5k
b20uZ2V0KCk7IH0KKyAgICAgICAgdW5zaWduZWQgd2Vha1JhbmRvbUludGVnZXIoKSB7IHJldHVy
biBtX3dlYWtSYW5kb20uZ2V0VWludDMyKCk7IH0KICAgICBwcm90ZWN0ZWQ6CiAKICAgICAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IE92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxMjEw
NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29v
bjsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3A7CiBpbnQzMl90IGV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm47CiAKK2ludDMyX3QgbWF4aW11bUV4ZWN1
dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKKwogdW5zaWduZWQgZGVzaXJlZFNwZWN1bGF0
aXZlU3VjY2Vzc0ZhaWxSYXRpbzsKIAogZG91YmxlIGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNo
b2xkOwpAQCAtOTUsNiArOTcsOSBAQCB1bnNpZ25lZCBnY01hcmtTdGFja1NlZ21lbnRTaXplOwog
dW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7CiB1bnNpZ25lZCBvcGFxdWVSb290TWVyZ2VUaHJl
c2hvbGQ7CiAKK2Jvb2wgZm9yY2VXZWFrUmFuZG9tU2VlZDsKK3Vuc2lnbmVkIGZvcmNlZFdlYWtS
YW5kb21TZWVkOworCiAjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCiBzdGF0aWMgYm9v
bCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wmIHZhbHVlKQogewpAQCAtMTg0LDYgKzE4
OSw4IEBAIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQogCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50
ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVt
ZW50Rm9yUmV0dXJuLCAxNSk7CisgICAgCisgICAgU0VUKG1heGltdW1FeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHMsIDEwMDApOwogCiAgICAgU0VUKGRlc2lyZWRTcGVjdWxhdGl2ZVN1
Y2Nlc3NGYWlsUmF0aW8sIDYpOwogICAgIApAQCAtMjI3LDYgKzIzNCw5IEBAIHZvaWQgaW5pdGlh
bGl6ZU9wdGlvbnMoKQogICAgIAogICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhy
ZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXApIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyTWF4KSA+IDApOwogICAgIEFTU0VSVCgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXApIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4KSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMy
X3Q+OjptYXgoKSkpOworICAgIAorICAgIFNFVChmb3JjZVdlYWtSYW5kb21TZWVkLCBmYWxzZSk7
CisgICAgU0VUKGZvcmNlZFdlYWtSYW5kb21TZWVkLCAwKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Ok9wdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHJldmlzaW9uIDEyMTA3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBleHRlcm4gaW50MzJfdCB0
aHJlc2hvbGRGb3JPcHRpbWl6ZU5leHRJCiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVy
SW5jcmVtZW50Rm9yTG9vcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JSZXR1cm47CiAKK2V4dGVybiBpbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHM7CisKIGV4dGVybiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNj
ZXNzRmFpbFJhdGlvOwogCiBleHRlcm4gZG91YmxlIGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNo
b2xkOwpAQCAtODEsNiArODMsOSBAQCBleHRlcm4gdW5zaWduZWQgZ2NNYXJrU3RhY2tTZWdtZW50
U2l6ZTsKIEpTX0VYUE9SVERBVEEgZXh0ZXJuIHVuc2lnbmVkIG51bWJlck9mR0NNYXJrZXJzOwog
SlNfRVhQT1JUREFUQSBleHRlcm4gdW5zaWduZWQgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkOwog
CitleHRlcm4gYm9vbCBmb3JjZVdlYWtSYW5kb21TZWVkOworZXh0ZXJuIHVuc2lnbmVkIGZvcmNl
ZFdlYWtSYW5kb21TZWVkOworCiB2b2lkIGluaXRpYWxpemVPcHRpb25zKCk7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpPcHRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9XZWFrUmFuZG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha1JhbmRvbS5oCShyZXZpc2lvbiAxMjEwNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9XZWFrUmFuZG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAg
cHVibGljOgogICAgICAgICAsIG1faGlnaChzZWVkKQogICAgIHsKICAgICB9CisgICAgCisgICAg
Ly8gUmV0dXJucyB0aGUgc2VlZCBwcm92aWRlZCB0aGF0IHlvdSd2ZSBuZXZlciBjYWxsZWQgZ2V0
KCkgb3IgZ2V0VWludDMyKCkuCisgICAgdW5zaWduZWQgc2VlZFVuc2FmZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGlnaDsgfQogCiAgICAgZG91YmxlIGdldCgpCiAgICAgewo=
</data>
<flag name="commit-queue"
          id="157401"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149387</attachid>
            <date>2012-06-25 16:29:29 -0700</date>
            <delta_ts>2012-06-25 16:30:28 -0700</delta_ts>
            <desc>moar fixes</desc>
            <filename>randomlub_patch_4.diff</filename>
            <type>text/plain</type>
            <size>21202</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCShyZXZpc2lvbiAxMjExOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkod29ya2lu
ZyBjb3B5KQpAQCAtOSw2ICs5LDcgQEAgRVhQT1JUUwogICAgID8/MERyb3BBbGxMb2Nrc0BKU0xv
Y2tASlNDQEBRQUVAVzRKU0xvY2tCZWhhdmlvckAyQEBaCiAgICAgPz8wRHluYW1pY0dsb2JhbE9i
amVjdFNjb3BlQEpTQ0BAUUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFA
QFogCiAgICAgPz8wSW50ZXJuYWxGdW5jdGlvbkBKU0NAQElBRUBQQVZKU0dsb2JhbE9iamVjdEAx
QFBBVlN0cnVjdHVyZUAxQEBaCisgICAgPz8wSlNHbG9iYWxPYmplY3RASlNDQEBJQUVAQUFWSlNH
bG9iYWxEYXRhQDFAUEFWU3RydWN0dXJlQDFAUEJVR2xvYmFsT2JqZWN0TWV0aG9kVGFibGVAMUBA
WgogICAgID8/MEpTTG9ja0BKU0NAQFFBRUBQQVZFeGVjU3RhdGVAMUBAWgogICAgID8/ME1ENUBX
VEZAQFFBRUBYWgogICAgID8/ME11dGV4QFdURkBAUUFFQFhaCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMDQsMjYgKzIxMDQsNyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0
cm9uZ1JlZmVyCiAgICAgfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAo
aGFzQ29kZU9yaWdpbnMoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBleGVjdXRhYmxl
cyB0aGF0IHdlIGhhdmUgaW5saW5lZCBkb24ndCBkaWUuCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0
aGV5IHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGRpZWQsIHdlIHNob3VsZCBwcm9iYWJseSB0cmlnZ2Vy
IHJlY29tcGlsYXRpb24uCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lQ2Fs
bEZyYW1lcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUmIGlu
bGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZXMoKVtpXTsKLSAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZpbmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmaW5saW5lQ2FsbEZyYW1lLmNhbGxlZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9ucyhDb2xsZWN0aW9uKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQot
ICAgIGZvciAodW5zaWduZWQgcHJvZmlsZUluZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVtYmVy
T2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgKytwcm9maWxlSW5kZXgpCi0gICAgICAgIHZhbHVl
UHJvZmlsZUZvckFyZ3VtZW50KHByb2ZpbGVJbmRleCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihDb2xsZWN0aW9uKTsKLSAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2Zp
bGVJbmRleCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRleCkKLSAgICAg
ICAgdmFsdWVQcm9maWxlKHByb2ZpbGVJbmRleCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihD
b2xsZWN0aW9uKTsKLSNlbmRpZgorICAgIHVwZGF0ZUFsbFByZWRpY3Rpb25zKENvbGxlY3Rpb24p
OwogfQogCiB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpAQCAtMjU3NCwyMSArMjU1NSwxMSBAQCBib29sIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqaXRDb21waWxlSW1wbChFCiAjZW5kaWYKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKLWJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCit2b2lkIENvZGVCbG9j
azo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKAorICAgIE9wZXJhdGlvbklu
UHJvZ3Jlc3Mgb3BlcmF0aW9uLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKLSNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIG9wdGltaXpp
bmcgJXAuLi5cbiIsIHRoaXMpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9Q
Uk9GSUxFKQotICAgIGR1bXBWYWx1ZVByb2ZpbGVzKCk7Ci0jZW5kaWYKLQotICAgIGlmIChtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVs
YXkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIHVuc2lnbmVkIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1w
bGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBw
cm9maWxlcyBhcmUgZnVsbC4KKyAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmls
ZXMgPSAwOworICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgPSAwOyAvLyBJZiB0aGlzIGRp
dmlkZWQgYnkgVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgZXF1YWxzIG51bWJlck9mVmFs
dWVQcm9maWxlcygpIHRoZW4gdmFsdWUgcHJvZmlsZXMgYXJlIGZ1bGwuCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewogICAg
ICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBnZXRGcm9tQWxsVmFsdWVQcm9maWxlcyhpKTsK
ICAgICAgICAgdW5zaWduZWQgbnVtU2FtcGxlcyA9IHByb2ZpbGUtPnRvdGFsTnVtYmVyT2ZTYW1w
bGVzKCk7CkBAIC0yNTk2LDEzICsyNTY3LDQxIEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAgICAgICAgICAgICBudW1TYW1wbGVzID0gVmFsdWVQcm9maWxlOjpudW1iZXJP
ZkJ1Y2tldHM7IC8vIFdlIGRvbid0IHdhbnQgcHJvZmlsZXMgdGhhdCBhcmUgZXh0cmVtZWx5IGhv
dCB0byBiZSBnaXZlbiBtb3JlIHdlaWdodC4KICAgICAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyArPSBudW1TYW1wbGVzOwogICAgICAgICBpZiAocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCA8IDApIHsKLSAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigp
OworICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlv
bik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAocHJvZmls
ZS0+bnVtYmVyT2ZTYW1wbGVzKCkgfHwgcHJvZmlsZS0+bV9wcmVkaWN0aW9uICE9IFNwZWNOb25l
KQogICAgICAgICAgICAgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7Ci0g
ICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICBwcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKICAgICB9CisgICAgCisj
aWYgRU5BQkxFKERGR19KSVQpCisgICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9ucyhvcGVyYXRpb24pOworI2VuZGlmCit9CisKK3ZvaWQgQ29kZUJs
b2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikK
K3sKKyAgICB1bnNpZ25lZCBpZ25vcmVkVmFsdWUxLCBpZ25vcmVkVmFsdWUyOworICAgIHVwZGF0
ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyhvcGVyYXRpb24sIGlnbm9yZWRWYWx1ZTEs
IGlnbm9yZWRWYWx1ZTIpOworfQorCitib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3co
KQoreworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgZGF0YUxvZygiQ29uc2lkZXJp
bmcgb3B0aW1pemluZyAlcC4uLlxuIiwgdGhpcyk7CisjZW5kaWYKKworI2lmIEVOQUJMRShWRVJC
T1NFX1ZBTFVFX1BST0ZJTEUpCisgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKKyNlbmRpZgorCisg
ICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1heGltdW1PcHRp
bWl6YXRpb25EZWxheSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOworICAgIHVuc2lnbmVkIG51bWJl
ck9mU2FtcGxlc0luUHJvZmlsZXM7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExp
dmVuZXNzKE5vT3BlcmF0aW9uLCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMs
IG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICBkYXRhTG9nKCJQcm9maWxlIGhvdG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpLCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEyMTE5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtOTEzLDkgKzkxMyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRT
b29uLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50MzJfdCBsbGludEV4
ZWN1dGVDb3VudGVyKCkgY29uc3QKKyAgICAgICAgY29uc3QgRXhlY3V0aW9uQ291bnRlciYgbGxp
bnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2xsaW50RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOworICAgICAgICAgICAgcmV0dXJuIG1fbGxp
bnRFeGVjdXRlQ291bnRlcjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gRnVuY3Rp
b25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBraWNrcyBpbi4gVGhp
cwpAQCAtOTcxLDcgKzk3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgcHRy
ZGlmZl90IG9mZnNldE9mSklURXhlY3V0aW9uQWN0aXZlVGhyZXNob2xkKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1RfT0ZG
U0VUT0YoRXhlY3V0aW9uQ291bnRlciwgbV9hY3RpdmVUaHJlc2hvbGQpOyB9CiAgICAgICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25Ub3RhbENvdW50KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9qaXRFeGVjdXRlQ291bnRlcikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRXhlY3V0aW9uQ291bnRlciwgbV90b3RhbENvdW50KTsgfQogCi0gICAgICAgIGlu
dDMyX3Qgaml0RXhlY3V0ZUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX2ppdEV4ZWN1dGVDb3Vu
dGVyLm1fY291bnRlcjsgfQorICAgICAgICBjb25zdCBFeGVjdXRpb25Db3VudGVyJiBqaXRFeGVj
dXRlQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1faml0RXhlY3V0ZUNvdW50ZXI7IH0KICAgICAg
ICAgCiAgICAgICAgIHVuc2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsg
cmV0dXJuIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyOyB9CiAgICAgICAgIApAQCAtMTEwMCw4
ICsxMTAwLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCk7CisgICAgICAgIHZvaWQgdXBkYXRl
QWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKTsKICNlbHNl
CiAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbikgeyB9CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTExMzQs
NiArMTEzNiw5IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vsc2UKICAgICAgICAgdm9pZCB0YWxseUZy
ZXF1ZW50RXhpdFNpdGVzKCkgeyB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
CisgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKE9wZXJh
dGlvbkluUHJvZ3Jlc3MsIHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKKyNlbmRpZgogICAg
ICAgICAKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJbnN0cnVj
dGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3Rf
aXRlcmF0b3ImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1
dGlvbkNvdW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJF
eGVjdXRhYmxlQWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMTI1LDcgKzEyNiw3IEBAIGJvb2wgRXhlY3V0aW9uQ291bnRl
cjo6c2V0VGhyZXNob2xkKENvZGUKICAgICBBU1NFUlQoIWhhc0Nyb3NzZWRUaHJlc2hvbGQoY29k
ZUJsb2NrKSk7CiAgICAgICAgIAogICAgIC8vIENvbXB1dGUgdGhlIHRydWUgdG90YWwgY291bnQu
Ci0gICAgZG91YmxlIHRydWVUb3RhbENvdW50ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFs
Q291bnQpICsgbV9jb3VudGVyOworICAgIGRvdWJsZSB0cnVlVG90YWxDb3VudCA9IGNvdW50KCk7
CiAgICAgICAgIAogICAgIC8vIENvcnJlY3QgdGhlIHRocmVzaG9sZCBmb3IgY3VycmVudCBtZW1v
cnkgdXNhZ2UuCiAgICAgZG91YmxlIHRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0
aWNzKG1fYWN0aXZlVGhyZXNob2xkLCBjb2RlQmxvY2spOwpAQCAtMTQzLDkgKzE0NCwxMSBAQCBi
b29sIEV4ZWN1dGlvbkNvdW50ZXI6OnNldFRocmVzaG9sZChDb2RlCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmICh0aHJlc2hvbGQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptYXgoKSkKLSAgICAgICAgdGhyZXNob2xkID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQzMl90Pjo6bWF4KCk7Ci0gICAgICAgIAorICAgIGludDMyX3QgbWF4VGhyZXNob2xkID0KKyAg
ICAgICAgY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbUludGVnZXIoKSAlIE9w
dGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7CisgICAgaWYg
KHRocmVzaG9sZCA+IG1heFRocmVzaG9sZCkKKyAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOworICAgIAogICAgIG1fY291bnRlciA9IHN0YXRpY19jYXN0PGludDMyX3Q+KC10aHJlc2hv
bGQpOwogICAgICAgICAKICAgICBtX3RvdGFsQ291bnQgPSB0cnVlVG90YWxDb3VudCArIHRocmVz
aG9sZDsKQEAgLTE2MCw1ICsxNjMsMTIgQEAgdm9pZCBFeGVjdXRpb25Db3VudGVyOjpyZXNldCgp
CiAgICAgbV9hY3RpdmVUaHJlc2hvbGQgPSAwOwogfQogCitjb25zdCBjaGFyKiBFeGVjdXRpb25D
b3VudGVyOjpzdGF0dXMoKSBjb25zdAoreworICAgIHN0YXRpYyBjaGFyIHJlc3VsdFs4MF07Cisg
ICAgc25wcmludGYocmVzdWx0LCBzaXplb2YocmVzdWx0KSwgIiVsZi8lbGYsICVkIiwgY291bnQo
KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2FjdGl2ZVRocmVzaG9sZCksIG1fY291bnRlcik7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2
aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlv
bkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBjaGVja0lmVGhyZXNob2xkQ3Jvc3NlZEFuZFNldChDb2RlQmxvY2sqKTsKICAgICB2b2lk
IHNldE5ld1RocmVzaG9sZChpbnQzMl90IHRocmVzaG9sZCwgQ29kZUJsb2NrKik7CiAgICAgdm9p
ZCBkZWZlckluZGVmaW5pdGVseSgpOworICAgIGRvdWJsZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4obV90b3RhbENvdW50KSArIG1fY291bnRlcjsgfQorICAgIGNv
bnN0IGNoYXIqIHN0YXR1cygpIGNvbnN0OwogICAgIHN0YXRpYyBkb3VibGUgYXBwbHlNZW1vcnlV
c2FnZUhldXJpc3RpY3MoaW50MzJfdCB2YWx1ZSwgQ29kZUJsb2NrKik7CiAgICAgc3RhdGljIGlu
dDMyX3QgYXBwbHlNZW1vcnlVc2FnZUhldXJpc3RpY3NBbmRDb252ZXJ0VG9JbnQoaW50MzJfdCB2
YWx1ZSwgQ29kZUJsb2NrKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5
Miw3ICsxMzkyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKICAgICAgICAgLy8gRklY
TUU6IFR1cm4gQ2hlY2tTdHJ1Y3R1cmUgaW50byBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCB3aGVuIHBvc3NpYmxlIQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEFTU0VSVChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpKTsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2xlYXIoKSB8fCBpc0NlbGxTcGVjdWxh
dGlvbih2YWx1ZS5tX3R5cGUpKTsgLy8gVmFsdWUgY291bGQgYmUgY2xlYXIgaWYgd2UndmUgcHJv
dmVuIG11c3QtZXhpdCBkdWUgdG8gYSBzcGVjdWxhdGlvbiBzdGF0aWNhbGx5IGtub3duIHRvIGJl
IGJhZC4KICAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlKCkpOwogICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMjExOTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjM4LDEyICsxMjM4LDEyIEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlv
blByaW50U3AKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IHN0
YXRpY19jYXN0PFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyo+KGRlYnVnSW5mb1Jhdyk7CiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBkZWJ1Z0luZm8tPmNvZGVCbG9jazsKICAgICBDb2Rl
QmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwotICAgIGRhdGFM
b2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gJXAgYXQgQCV1IHdpdGggZXhlY3V0ZUNvdW50ZXIg
PSAlZCwgIgorICAgIGRhdGFMb2coIlNwZWN1bGF0aW9uIGZhaWx1cmUgaW4gJXAgYXQgQCV1IHdp
dGggZXhlY3V0ZUNvdW50ZXIgPSAlcywgIgogICAgICAgICAgICAgInJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1LCAiCiAgICAgICAg
ICAgICAic3VjY2Vzcy9mYWlsICV1LygldSsldSlcbiIsCiAgICAgICAgICAgICBjb2RlQmxvY2ss
CiAgICAgICAgICAgICBkZWJ1Z0luZm8tPm5vZGVJbmRleCwKLSAgICAgICAgICAgIGFsdGVybmF0
aXZlID8gYWx0ZXJuYXRpdmUtPmppdEV4ZWN1dGVDb3VudGVyKCkgOiAwLAorICAgICAgICAgICAg
YWx0ZXJuYXRpdmUgPyBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSA6
IDAsCiAgICAgICAgICAgICBhbHRlcm5hdGl2ZSA/IGFsdGVybmF0aXZlLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpIDogMCwKICAgICAgICAgICAgIGFsdGVybmF0aXZlID8gYWx0ZXJuYXRp
dmUtPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIDogMCwKICAgICAgICAgICAgIGNvZGVCbG9j
ay0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEyMTE5MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05ODYsMTMgKzk4Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
QmFzaWNCbG9jayYKICAgICBtX2ppdC5qaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogCiAg
ICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSB8fCBtX2ppdC5jb2RlQmxvY2soKS0+YXJndW1lbnRJc0NhcHR1cmVkKGkpKQotICAgICAgICAg
ICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9y
U3BlY3VsYXRpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpKTsKLSAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7CiAgICAgbV9zdGF0ZS5iZWdp
bkJhc2ljQmxvY2soJmJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxMjExOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyOCwxMSArMTkyOCwxMyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQotICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIG9wdGltaXplIHdpdGggYnl0ZWNvZGVJbmRl
eCA9ICV1LCBleGVjdXRlQ291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9
ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLCBieXRlY29k
ZUluZGV4LCBjb2RlQmxvY2stPmppdEV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIoKSk7CisgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0aW1pemUgd2l0aCBieXRlY29kZUlu
ZGV4ID0gJXUsIGV4ZWN1dGVDb3VudGVyID0gJXMsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2ssIGJ5dGVj
b2RlSW5kZXgsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSwgY29kZUJs
b2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlv
bkRlbGF5Q291bnRlcigpKTsKICNlbmRpZgogCi0gICAgaWYgKCFjb2RlQmxvY2stPmNoZWNrSWZP
cHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpCisgICAgaWYgKCFjb2RlQmxvY2stPmNoZWNr
SWZPcHRpbWl6YXRpb25UaHJlc2hvbGRSZWFjaGVkKCkpIHsKKyAgICAgICAgY29kZUJsb2NrLT51
cGRhdGVBbGxQcmVkaWN0aW9ucygpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYg
KGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQs
OCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CisgICAgCiAgICAgaWYgKCFjb2Rl
QmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQogICAgICAgICBkYXRhTG9nKCIgICAgSklUIHRocmVzaG9sZCBzaG91bGQgYmUg
bGlmdGVkLlxuIik7CkBAIC0zMDAsNyArMzAyLDggQEAgZW51bSBFbnRyeUtpbmQgeyBQcm9sb2d1
ZSwgQXJpdHlDaGVjayB9Owogc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBlbnRyeU9TUihFeGVj
U3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IGNoYXIgKm5hbWUsIEVudHJ5S2luZCBraW5kKQogewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgJXMgd2l0aCBleGVjdXRlQ291bnRlciA9ICVk
XG4iLCBjb2RlQmxvY2ssIG5hbWUsIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKTsK
KyAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCAlcyB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIs
IGNvZGVCbG9jaywgbmFtZSwKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291
bnRlcigpLnN0YXR1cygpKTsKICNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMp
KSB7CkBAIC0zNDYsNyArMzQ5LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wobG9vcF9vc3IpCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKICNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIGxvb3Bfb3Ny
IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZFxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmxsaW50
RXhlY3V0ZUNvdW50ZXIoKSk7CisgICAgZGF0YUxvZygiJXA6IEVudGVyZWQgbG9vcF9vc3Igd2l0
aCBleGVjdXRlQ291bnRlciA9ICVzXG4iLCBjb2RlQmxvY2ssCisgICAgICAgICAgICBjb2RlQmxv
Y2stPmxsaW50RXhlY3V0ZUNvdW50ZXIoKS5zdGF0dXMoKSk7CiAjZW5kaWYKICAgICAKICAgICBp
ZiAoIXNob3VsZEpJVChleGVjKSkgewpAQCAtMzc2LDcgKzM4MCw4IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHJlcGxhY2UpCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgIGRhdGFMb2coIiVw
OiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxvY2ss
IGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDogRW50
ZXJlZCByZXBsYWNlIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlc1xuIiwgY29kZUJsb2NrLAorICAg
ICAgICAgICAgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkuc3RhdHVzKCkpOwogI2Vu
ZGlmCiAgICAgCiAgICAgaWYgKHNob3VsZEpJVChleGVjKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMTE5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RhdGljIGlubGluZSB2b2lkCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHYpOwogfQogCitKU0ds
b2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKQorICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdChnbG9iYWxE
YXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQorICAgICwgbV9nbG9iYWxTY29wZUNoYWlu
KCkKKyAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkID8gT3B0
aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZG9t
TnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSkp
CisgICAgLCBtX2V2YWxFbmFibGVkKHRydWUpCisgICAgLCBtX2dsb2JhbE9iamVjdE1ldGhvZFRh
YmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgOiAm
c19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKK3sKK30KKwogSlNHbG9iYWxPYmplY3Q6On5KU0ds
b2JhbE9iamVjdCgpCiB7CiAgICAgQVNTRVJUKEpTTG9jazo6Y3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSwxNCArMTc1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENs
YXNzSW5mbyBzX2luZm87CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGV4cGxpY2l0IEpTR2xv
YmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA9
IDApCi0gICAgICAgICAgICA6IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlLCAmbV9zeW1ib2xUYWJsZSkKLSAgICAgICAgICAgICwgbV9nbG9iYWxTY29wZUNo
YWluKCkKLSAgICAgICAgICAgICwgbV93ZWFrUmFuZG9tKHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAx
LjApKSkKLSAgICAgICAgICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQotICAgICAgICAgICAgLCBt
X2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKLSAgICAgICAg
ewotICAgICAgICB9CisgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IEpTR2xvYmFs
T2JqZWN0KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKiA9IDApOwogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgICAgICB7CkBAIC0zMjgsNiArMzIxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogICAgICAgICBkb3VibGUgd2Vha1JhbmRvbU51bWJlcigpIHsgcmV0
dXJuIG1fd2Vha1JhbmRvbS5nZXQoKTsgfQorICAgICAgICB1bnNpZ25lZCB3ZWFrUmFuZG9tSW50
ZWdlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXRVaW50MzIoKTsgfQogICAgIHByb3RlY3Rl
ZDoKIAogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJp
ZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OlN0cnVjdHVy
ZUZsYWdzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJ
KHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVTb29uOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9v
cDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKIAoraW50MzJf
dCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOworCiB1bnNpZ25lZCBk
ZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCiBkb3VibGUgbGlrZWx5VG9UYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CkBAIC05NSw2ICs5Nyw5IEBAIHVuc2lnbmVkIGdjTWFya1N0YWNr
U2VnbWVudFNpemU7CiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKIHVuc2lnbmVkIG9wYXF1
ZVJvb3RNZXJnZVRocmVzaG9sZDsKIAorYm9vbCBmb3JjZVdlYWtSYW5kb21TZWVkOwordW5zaWdu
ZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7CisKICNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElD
UykKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7
CkBAIC0xODQsNiArMTg5LDggQEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCiAKICAgICBTRVQo
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsICAgMSk7CiAgICAgU0VUKGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KTsKKyAgICAKKyAgICBTRVQobWF4aW11bUV4
ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCk7CiAKICAgICBTRVQoZGVzaXJl
ZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbywgNik7CiAgICAgCkBAIC0yMjcsNiArMjM0LDkg
QEAgdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCiAgICAgCiAgICAgQVNTRVJUKChzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxp
bnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7CisgICAgCisgICAgU0VUKGZvcmNlV2Vha1JhbmRv
bVNlZWQsIGZhbHNlKTsKKyAgICBTRVQoZm9yY2VkV2Vha1JhbmRvbVNlZWQsIDApOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGV4
dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEkKIGV4dGVybiBpbnQzMl90IGV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvclJldHVybjsKIAorZXh0ZXJuIGludDMyX3QgbWF4aW11bUV4ZWN1
dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKKwogZXh0ZXJuIHVuc2lnbmVkIGRlc2lyZWRT
cGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CiAKIGV4dGVybiBkb3VibGUgbGlrZWx5VG9UYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CkBAIC04MSw2ICs4Myw5IEBAIGV4dGVybiB1bnNpZ25lZCBnY01h
cmtTdGFja1NlZ21lbnRTaXplOwogSlNfRVhQT1JUREFUQSBleHRlcm4gdW5zaWduZWQgbnVtYmVy
T2ZHQ01hcmtlcnM7CiBKU19FWFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBvcGFxdWVSb290TWVy
Z2VUaHJlc2hvbGQ7CiAKK2V4dGVybiBib29sIGZvcmNlV2Vha1JhbmRvbVNlZWQ7CitleHRlcm4g
dW5zaWduZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7CisKIHZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMo
KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgJKHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9oaWdoKHNlZWQpCiAgICAgewogICAg
IH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBzZWVkIHByb3ZpZGVkIHRoYXQgeW91J3ZlIG5l
dmVyIGNhbGxlZCBnZXQoKSBvciBnZXRVaW50MzIoKS4KKyAgICB1bnNpZ25lZCBzZWVkVW5zYWZl
KCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CiAKICAgICBkb3VibGUgZ2V0KCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149388</attachid>
            <date>2012-06-25 16:30:28 -0700</date>
            <delta_ts>2012-06-25 16:30:28 -0700</delta_ts>
            <desc>and now, with a ChangeLog!</desc>
            <filename>randomlub_patch_5.diff</filename>
            <type>text/plain</type>
            <size>23787</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTA2LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VmFsdWUgcHJvZmlsaW5nIHNob3VsZCB1c2UgdGllci11cCB0aHJlc2hvbGQgcmFuZG9taXphdGlv
biB0byBnZXQgbW9yZSBjb3ZlcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODk4MDIKKworICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNs
b3VnaC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggY2F1c2VzIGJvdGggTExJbnQgYW5k
IEJhc2VsaW5lIEpJVCBjb2RlIHRvIHRha2UgdGhlIE9TUiBzbG93IHBhdGggc2V2ZXJhbAorICAg
ICAgICB0aW1lcyBiZWZvcmUgYWN0dWFsbHkgZG9pbmcgT1NSLiBJZiB3ZSB0YWtlIHRoZSBPU1Ig
c2xvdyBwYXRoIGJlZm9yZSB0aGUgZXhlY3V0aW9uCisgICAgICAgIGNvdW50IHRocmVzaG9sZCBp
cyByZWFjaGVkLCB0aGVuIHdlIGp1c3QgY2FsbCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rp
b25zKCkgdG8KKyAgICAgICAgY29tcHV0ZSB0aGUgY3VycmVudCBsYXRlc3QgbGVhc3QtdXBwZXIt
Ym91bmQgU3BlY1R5cGUgb2YgYWxsIHZhbHVlcyBzZWVuIGluIGVhY2gKKyAgICAgICAgVmFsdWVQ
cm9maWxlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlv
bnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KToKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsbGlu
dEV4ZWN1dGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRFeGVjdXRlQ291
bnRlcik6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVw
ZGF0ZUFsbFByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9FeGVjdXRpb25Db3VudGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0aW9uQ291bnRlcjo6c3RhdHVzKToKKyAgICAgICAgKEpTQyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oOgorICAgICAgICAoSlNDOjpFeGVj
dXRpb25Db3VudGVyOjpjb3VudCk6CisgICAgICAgIChFeGVjdXRpb25Db3VudGVyKToKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBsbGludC9MTEludFNs
b3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjplbnRyeU9TUik6CisgICAgICAgIChKU0M6OkxM
SW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdCk6
CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKEpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Ondl
YWtSYW5kb21JbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAg
ICAoT3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemVPcHRpb25zKToK
KyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKE9wdGlvbnMpOgorICAgICAg
ICAqIHJ1bnRpbWUvV2Vha1JhbmRvbS5oOgorICAgICAgICAoV2Vha1JhbmRvbSk6CisgICAgICAg
IChKU0M6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorCiAyMDEyLTA2LTIzICBTaGVyaWZmIEJv
dCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTIxMDU4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQCBFWFBPUlRTCiAgICAg
Pz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBXNEpTTG9ja0JlaGF2aW9yQDJAQFoKICAg
ICA/PzBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGVASlNDQEBRQUVAQUFWSlNHbG9iYWxEYXRhQDFA
UEFWSlNHbG9iYWxPYmplY3RAMUBAWiAKICAgICA/PzBJbnRlcm5hbEZ1bmN0aW9uQEpTQ0BASUFF
QFBBVkpTR2xvYmFsT2JqZWN0QDFAUEFWU3RydWN0dXJlQDFAQFoKKyAgICA/PzBKU0dsb2JhbE9i
amVjdEBKU0NAQElBRUBBQVZKU0dsb2JhbERhdGFAMUBQQVZTdHJ1Y3R1cmVAMUBQQlVHbG9iYWxP
YmplY3RNZXRob2RUYWJsZUAxQEBaCiAgICAgPz8wSlNMb2NrQEpTQ0BAUUFFQFBBVkV4ZWNTdGF0
ZUAxQEBaCiAgICAgPz8wTUQ1QFdURkBAUUFFQFhaCiAgICAgPz8wTXV0ZXhAV1RGQEBRQUVAWFoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxMjExOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwNCwyNiArMjEwNCw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKICAgICB9CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShERkdfSklUKQotICAgIGlmIChoYXNDb2RlT3JpZ2lucygpKSB7Ci0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IGV4ZWN1dGFibGVzIHRoYXQgd2UgaGF2ZSBpbmxpbmVkIGRvbid0IGRpZS4KLSAg
ICAgICAgLy8gRklYTUU6IElmIHRoZXkgd291bGQgaGF2ZSBvdGhlcndpc2UgZGllZCwgd2Ugc2hv
dWxkIHByb2JhYmx5IHRyaWdnZXIgcmVjb21waWxhdGlvbi4KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmxpbmVDYWxsRnJhbWVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSYgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lcygpW2ld
OwotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxl
KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbmxpbmVDYWxsRnJhbWUuY2FsbGVlKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlcy5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKENvbGxlY3Rpb24pOwotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCi0gICAgZm9yICh1bnNpZ25lZCBwcm9maWxlSW5kZXggPSAwOyBw
cm9maWxlSW5kZXggPCBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJ
bmRleCkKLSAgICAgICAgdmFsdWVQcm9maWxlRm9yQXJndW1lbnQocHJvZmlsZUluZGV4KS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKENvbGxlY3Rpb24pOwotICAgIGZvciAodW5zaWduZWQgcHJv
ZmlsZUluZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsr
cHJvZmlsZUluZGV4KQotICAgICAgICB2YWx1ZVByb2ZpbGUocHJvZmlsZUluZGV4KS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKENvbGxlY3Rpb24pOwotI2VuZGlmCisgICAgdXBkYXRlQWxsUHJl
ZGljdGlvbnMoQ29sbGVjdGlvbik7CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0yNTc0LDIxICsyNTU1LDEx
IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEUKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXpl
Tm93KCkKK3ZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3MoCisgICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24sIHVuc2lnbmVkJiBudW1iZXJP
ZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzKQogewotI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygi
Q29uc2lkZXJpbmcgb3B0aW1pemluZyAlcC4uLlxuIiwgdGhpcyk7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCi0gICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKLSNl
bmRpZgotCi0gICAgaWYgKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1h
eGltdW1PcHRpbWl6YXRpb25EZWxheSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAg
dW5zaWduZWQgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKLSAgICB1
bnNpZ25lZCBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVk
IGJ5IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKSB0aGVuIHZhbHVlIHByb2ZpbGVzIGFyZSBmdWxsLgorICAgIG51bWJlck9mTGl2ZU5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CisgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0
cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUg
ZnVsbC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGdldEZyb21B
bGxWYWx1ZVByb2ZpbGVzKGkpOwogICAgICAgICB1bnNpZ25lZCBudW1TYW1wbGVzID0gcHJvZmls
ZS0+dG90YWxOdW1iZXJPZlNhbXBsZXMoKTsKQEAgLTI1OTYsMTMgKzI1NjcsNDEgQEAgYm9vbCBD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICAgICAgICAgIG51bVNhbXBsZXMgPSBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgLy8gV2UgZG9uJ3Qgd2FudCBwcm9maWxlcyB0
aGF0IGFyZSBleHRyZW1lbHkgaG90IHRvIGJlIGdpdmVuIG1vcmUgd2VpZ2h0LgogICAgICAgICBu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzICs9IG51bVNhbXBsZXM7CiAgICAgICAgIGlmIChwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAgICAgICAgIGlmIChwcm9maWxlLT5udW1iZXJPZlNhbXBsZXMoKSB8fCBwcm9maWxlLT5tX3By
ZWRpY3Rpb24gIT0gU3BlY05vbmUpCiAgICAgICAgICAgICBudW1iZXJPZkxpdmVOb25Bcmd1bWVu
dFZhbHVlUHJvZmlsZXMrKzsKLSAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKCk7CisgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihvcGVyYXRp
b24pOwogICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBtX2xhenlPcGVyYW5k
VmFsdWVQcm9maWxlcy5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKG9wZXJhdGlvbik7CisjZW5k
aWYKK30KKwordm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbklu
UHJvZ3Jlc3Mgb3BlcmF0aW9uKQoreworICAgIHVuc2lnbmVkIGlnbm9yZWRWYWx1ZTEsIGlnbm9y
ZWRWYWx1ZTI7CisgICAgdXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKG9wZXJh
dGlvbiwgaWdub3JlZFZhbHVlMSwgaWdub3JlZFZhbHVlMik7Cit9CisKK2Jvb2wgQ29kZUJsb2Nr
OjpzaG91bGRPcHRpbWl6ZU5vdygpCit7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAg
ICBkYXRhTG9nKCJDb25zaWRlcmluZyBvcHRpbWl6aW5nICVwLi4uXG4iLCB0aGlzKTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKKyAgICBkdW1wVmFsdWVQcm9m
aWxlcygpOworI2VuZGlmCisKKyAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0g
T3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkRlbGF5KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXM7
CisgICAgdW5zaWduZWQgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlczsKKyAgICB1cGRhdGVBbGxQ
cmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoTm9PcGVyYXRpb24sIG51bWJlck9mTGl2ZU5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcywgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKICNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIGRhdGFMb2coIlByb2ZpbGUgaG90bmVzczogJWxm
LCAlbGZcbiIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCksIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsOSArOTEzLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlv
bnM6OnRocmVzaG9sZEZvckpJVFNvb24sIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpbnQzMl90IGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdAorICAgICAgICBjb25zdCBF
eGVjdXRpb25Db3VudGVyJiBsbGludEV4ZWN1dGVDb3VudGVyKCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fbGxpbnRFeGVjdXRlQ291bnRlci5tX2NvdW50ZXI7CisgICAg
ICAgICAgICByZXR1cm4gbV9sbGludEV4ZWN1dGVDb3VudGVyOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBp
bGF0aW9uIGtpY2tzIGluLiBUaGlzCkBAIC05NzEsNyArOTcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKSVRFeGVjdXRpb25BY3RpdmVUaHJl
c2hvbGQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1dGVD
b3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX2FjdGl2ZVRocmVz
aG9sZCk7IH0KICAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpJVEV4ZWN1dGlvblRv
dGFsQ291bnQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2ppdEV4ZWN1
dGVDb3VudGVyKSArIE9CSkVDVF9PRkZTRVRPRihFeGVjdXRpb25Db3VudGVyLCBtX3RvdGFsQ291
bnQpOyB9CiAKLSAgICAgICAgaW50MzJfdCBqaXRFeGVjdXRlQ291bnRlcigpIGNvbnN0IHsgcmV0
dXJuIG1faml0RXhlY3V0ZUNvdW50ZXIubV9jb3VudGVyOyB9CisgICAgICAgIGNvbnN0IEV4ZWN1
dGlvbkNvdW50ZXImIGppdEV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9qaXRFeGVj
dXRlQ291bnRlcjsgfQogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0K
ICAgICAgICAgCkBAIC0xMTAwLDggKzExMDAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKTsK
KyAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzID0g
Tm9PcGVyYXRpb24pOwogI2Vsc2UKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoT3BlcmF0
aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKSB7IH0KICNlbmRpZgogICAgICAgICAKICNpZiBF
TkFCTEUoSklUKQpAQCAtMTEzNCw2ICsxMTM2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZWxzZQog
ICAgICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KICNlbmRpZgorI2lmIEVO
QUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9uc0Fu
ZENvdW50TGl2ZW5lc3MoT3BlcmF0aW9uSW5Qcm9ncmVzcywgdW5zaWduZWQmIG51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMpOworI2VuZGlmCiAgICAgICAgIAogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwCShyZXZpc2lvbiAx
MjExOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMjUsNyArMTI2LDcgQEAg
Ym9vbCBFeGVjdXRpb25Db3VudGVyOjpzZXRUaHJlc2hvbGQoQ29kZQogICAgIEFTU0VSVCghaGFz
Q3Jvc3NlZFRocmVzaG9sZChjb2RlQmxvY2spKTsKICAgICAgICAgCiAgICAgLy8gQ29tcHV0ZSB0
aGUgdHJ1ZSB0b3RhbCBjb3VudC4KLSAgICBkb3VibGUgdHJ1ZVRvdGFsQ291bnQgPSBzdGF0aWNf
Y2FzdDxkb3VibGU+KG1fdG90YWxDb3VudCkgKyBtX2NvdW50ZXI7CisgICAgZG91YmxlIHRydWVU
b3RhbENvdW50ID0gY291bnQoKTsKICAgICAgICAgCiAgICAgLy8gQ29ycmVjdCB0aGUgdGhyZXNo
b2xkIGZvciBjdXJyZW50IG1lbW9yeSB1c2FnZS4KICAgICBkb3VibGUgdGhyZXNob2xkID0gYXBw
bHlNZW1vcnlVc2FnZUhldXJpc3RpY3MobV9hY3RpdmVUaHJlc2hvbGQsIGNvZGVCbG9jayk7CkBA
IC0xNDMsOSArMTQ0LDExIEBAIGJvb2wgRXhlY3V0aW9uQ291bnRlcjo6c2V0VGhyZXNob2xkKENv
ZGUKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKHRocmVzaG9sZCA+IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKQotICAgICAgICB0aHJlc2hvbGQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKTsKLSAgICAgICAgCisgICAgaW50MzJf
dCBtYXhUaHJlc2hvbGQgPQorICAgICAgICBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT53ZWFr
UmFuZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50czsKKyAgICBpZiAodGhyZXNob2xkID4gbWF4VGhyZXNob2xkKQorICAgICAgICB0
aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CisgICAgCiAgICAgbV9jb3VudGVyID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oLXRocmVzaG9sZCk7CiAgICAgICAgIAogICAgIG1fdG90YWxDb3VudCA9IHRy
dWVUb3RhbENvdW50ICsgdGhyZXNob2xkOwpAQCAtMTYwLDUgKzE2MywxMiBAQCB2b2lkIEV4ZWN1
dGlvbkNvdW50ZXI6OnJlc2V0KCkKICAgICBtX2FjdGl2ZVRocmVzaG9sZCA9IDA7CiB9CiAKK2Nv
bnN0IGNoYXIqIEV4ZWN1dGlvbkNvdW50ZXI6OnN0YXR1cygpIGNvbnN0Cit7CisgICAgc3RhdGlj
IGNoYXIgcmVzdWx0WzgwXTsKKyAgICBzbnByaW50ZihyZXN1bHQsIHNpemVvZihyZXN1bHQpLCAi
JWxmLyVsZiwgJWQiLCBjb3VudCgpLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1fYWN0aXZlVGhyZXNo
b2xkKSwgbV9jb3VudGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNv
dW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5oCShyZXZpc2lvbiAxMjExOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICsz
OCw4IEBAIHB1YmxpYzoKICAgICBib29sIGNoZWNrSWZUaHJlc2hvbGRDcm9zc2VkQW5kU2V0KENv
ZGVCbG9jayopOwogICAgIHZvaWQgc2V0TmV3VGhyZXNob2xkKGludDMyX3QgdGhyZXNob2xkLCBD
b2RlQmxvY2sqKTsKICAgICB2b2lkIGRlZmVySW5kZWZpbml0ZWx5KCk7CisgICAgZG91YmxlIGNv
dW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3RvdGFsQ291bnQpICsg
bV9jb3VudGVyOyB9CisgICAgY29uc3QgY2hhciogc3RhdHVzKCkgY29uc3Q7CiAgICAgc3RhdGlj
IGRvdWJsZSBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljcyhpbnQzMl90IHZhbHVlLCBDb2RlQmxv
Y2sqKTsKICAgICBzdGF0aWMgaW50MzJfdCBhcHBseU1lbW9yeVVzYWdlSGV1cmlzdGljc0FuZENv
bnZlcnRUb0ludChpbnQzMl90IHZhbHVlLCBDb2RlQmxvY2sqKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMjEx
OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDogewogICAgICAgICAvLyBGSVhNRTogVHVybiBDaGVja1N0cnVjdHVyZSBpbnRvIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50IHdoZW4gcG9zc2libGUhCiAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgQVNTRVJUKGlzQ2Vs
bFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOworICAgICAgICBBU1NFUlQodmFsdWUuaXNDbGVh
cigpIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpOyAvLyBWYWx1ZSBjb3VsZCBi
ZSBjbGVhciBpZiB3ZSd2ZSBwcm92ZW4gbXVzdC1leGl0IGR1ZSB0byBhIHNwZWN1bGF0aW9uIHN0
YXRpY2FsbHkga25vd24gdG8gYmUgYmFkLgogICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS5zdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzgsMTIgKzEyMzgsMTIgQEAgdm9pZCBERkdfT1BF
UkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyogZGVidWdJbmZvID0gc3RhdGljX2Nhc3Q8U3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZv
Kj4oZGVidWdJbmZvUmF3KTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGRlYnVnSW5mby0+
Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7Ci0gICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFpbHVyZSBpbiAlcCBhdCBAJXUg
d2l0aCBleGVjdXRlQ291bnRlciA9ICVkLCAiCisgICAgZGF0YUxvZygiU3BlY3VsYXRpb24gZmFp
bHVyZSBpbiAlcCBhdCBAJXUgd2l0aCBleGVjdXRlQ291bnRlciA9ICVzLCAiCiAgICAgICAgICAg
ICAicmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3Vu
dGVyID0gJXUsICIKICAgICAgICAgICAgICJzdWNjZXNzL2ZhaWwgJXUvKCV1KyV1KVxuIiwKICAg
ICAgICAgICAgIGNvZGVCbG9jaywKICAgICAgICAgICAgIGRlYnVnSW5mby0+bm9kZUluZGV4LAot
ICAgICAgICAgICAgYWx0ZXJuYXRpdmUgPyBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIo
KSA6IDAsCisgICAgICAgICAgICBhbHRlcm5hdGl2ZSA/IGFsdGVybmF0aXZlLT5qaXRFeGVjdXRl
Q291bnRlcigpLnN0YXR1cygpIDogMCwKICAgICAgICAgICAgIGFsdGVybmF0aXZlID8gYWx0ZXJu
YXRpdmUtPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkgOiAwLAogICAgICAgICAgICAgYWx0
ZXJuYXRpdmUgPyBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgOiAwLAog
ICAgICAgICAgICAgY29kZUJsb2NrLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4NiwxMyArOTg2LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIG1faml0LmppdEFzc2VydEhhc1Zh
bGlkQ2FsbEZyYW1lKCk7CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2Nr
LnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7Ci0gICAgICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IG1faml0LmNvZGVCbG9jaygpLT5hcmd1bWVudElzQ2Fw
dHVyZWQoaSkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5SZWdpc3RlckZpbGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IFZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwotICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgIAogICAgIG1fc3RhdGUucmVzZXQo
KTsKICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEyMTE5MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTI4LDEx
ICsxOTI4LDEzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAogI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgb3B0aW1p
emUgd2l0aCBieXRlY29kZUluZGV4ID0gJXUsIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4i
LCBjb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgsIGNvZGVCbG9jay0+aml0RXhlY3V0ZUNvdW50ZXIo
KSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9w
dGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCBvcHRp
bWl6ZSB3aXRoIGJ5dGVjb2RlSW5kZXggPSAldSwgZXhlY3V0ZUNvdW50ZXIgPSAlcywgcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVc
biIsIGNvZGVCbG9jaywgYnl0ZWNvZGVJbmRleCwgY29kZUJsb2NrLT5qaXRFeGVjdXRlQ291bnRl
cigpLnN0YXR1cygpLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNv
ZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOwogI2VuZGlmCiAKLSAgICBpZiAo
IWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkKKyAgICBp
ZiAoIWNvZGVCbG9jay0+Y2hlY2tJZk9wdGltaXphdGlvblRocmVzaG9sZFJlYWNoZWQoKSkgewor
ICAgICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFByZWRpY3Rpb25zKCk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgp
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjY0LDYgKzI2NCw4IEBAIGlubGluZSBib29sIHNob3VsZEpJVChFeGVjU3RhdGUq
IGV4ZWMpCiAvLyBSZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCiBpbmxpbmUg
Ym9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIGNvZGVCbG9jay0+dXBkYXRlQWxsUHJlZGljdGlvbnMoKTsK
KyAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkg
ewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIGRhdGFMb2coIiAgICBKSVQg
dGhyZXNob2xkIHNob3VsZCBiZSBsaWZ0ZWQuXG4iKTsKQEAgLTMwMCw3ICszMDIsOCBAQCBlbnVt
IEVudHJ5S2luZCB7IFByb2xvZ3VlLCBBcml0eUNoZWNrIH07CiBzdGF0aWMgU2xvd1BhdGhSZXR1
cm5UeXBlIGVudHJ5T1NSKEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgY29uc3QgY2hhciAqbmFtZSwgRW50cnlLaW5kIGtpbmQpCiB7CiAjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICBkYXRhTG9nKCIlcDogRW50ZXJlZCAlcyB3aXRo
IGV4ZWN1dGVDb3VudGVyID0gJWRcbiIsIGNvZGVCbG9jaywgbmFtZSwgY29kZUJsb2NrLT5sbGlu
dEV4ZWN1dGVDb3VudGVyKCkpOworICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkICVzIHdpdGggZXhl
Y3V0ZUNvdW50ZXIgPSAlc1xuIiwgY29kZUJsb2NrLCBuYW1lLAorICAgICAgICAgICAgY29kZUJs
b2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkuc3RhdHVzKCkpOwogI2VuZGlmCiAgICAgCiAgICAg
aWYgKCFzaG91bGRKSVQoZXhlYykpIHsKQEAgLTM0Niw3ICszNDksOCBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChsb29wX29zcikKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgZGF0YUxvZygi
JXA6IEVudGVyZWQgbG9vcF9vc3Igd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxv
Y2ssIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpKTsKKyAgICBkYXRhTG9nKCIlcDog
RW50ZXJlZCBsb29wX29zciB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJXNcbiIsIGNvZGVCbG9jaywK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+bGxpbnRFeGVjdXRlQ291bnRlcigpLnN0YXR1cygpKTsK
ICNlbmRpZgogICAgIAogICAgIGlmICghc2hvdWxkSklUKGV4ZWMpKSB7CkBAIC0zNzYsNyArMzgw
LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wocmVwbGFjZSkKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCi0gICAgZGF0YUxvZygiJXA6IEVudGVyZWQgcmVwbGFjZSB3aXRoIGV4ZWN1dGVDb3VudGVy
ID0gJWRcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5sbGludEV4ZWN1dGVDb3VudGVyKCkpOwor
ICAgIGRhdGFMb2coIiVwOiBFbnRlcmVkIHJlcGxhY2Ugd2l0aCBleGVjdXRlQ291bnRlciA9ICVz
XG4iLCBjb2RlQmxvY2ssCisgICAgICAgICAgICBjb2RlQmxvY2stPmxsaW50RXhlY3V0ZUNvdW50
ZXIoKS5zdGF0dXMoKSk7CiAjZW5kaWYKICAgICAKICAgICBpZiAoc2hvdWxkSklUKGV4ZWMpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDE1IEBAIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQKICAgICAgICAgdmlzaXRvci5h
cHBlbmQodik7CiB9CiAKK0pTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgOiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCisgICAg
LCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQorICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNl
V2Vha1JhbmRvbVNlZWQgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCA6IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgKyAxLjApKSkKKyAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKKyAgICAsIG1f
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxP
YmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQoreworfQorCiBK
U0dsb2JhbE9iamVjdDo6fkpTR2xvYmFsT2JqZWN0KCkKIHsKICAgICBBU1NFUlQoSlNMb2NrOjpj
dXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTIxMTkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTc1LDE0ICsxNzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqIGdsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlID0gMCkKLSAgICAgICAgICAgIDogSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQotICAgICAgICAg
ICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQotICAgICAgICAgICAgLCBtX3dlYWtSYW5kb20oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQotICAgICAgICAgICAgLCBtX2V2YWxFbmFibGVkKHRy
dWUpCi0gICAgICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiwgY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUqID0gMCk7CiAKICAgICAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKQEAgLTMyOCw2ICsz
MjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIGRvdWJsZSB3ZWFr
UmFuZG9tTnVtYmVyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldCgpOyB9CisgICAgICAgIHVu
c2lnbmVkIHdlYWtSYW5kb21JbnRlZ2VyKCkgeyByZXR1cm4gbV93ZWFrUmFuZG9tLmdldFVpbnQz
MigpOyB9CiAgICAgcHJvdGVjdGVkOgogCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdDo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDgg
QEAgaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb247CiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuOwogCitpbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHM7CisKIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CiAK
IGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKQEAgLTk1LDYgKzk3LDkgQEAg
dW5zaWduZWQgZ2NNYXJrU3RhY2tTZWdtZW50U2l6ZTsKIHVuc2lnbmVkIG51bWJlck9mR0NNYXJr
ZXJzOwogdW5zaWduZWQgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkOwogCitib29sIGZvcmNlV2Vh
a1JhbmRvbVNlZWQ7Cit1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9tU2VlZDsKKwogI2lmIEVOQUJM
RShSVU5fVElNRV9IRVVSSVNUSUNTKQogc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3Ry
aW5nLCBib29sJiB2YWx1ZSkKIHsKQEAgLTE4NCw2ICsxODksOCBAQCB2b2lkIGluaXRpYWxpemVP
cHRpb25zKCkKIAogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgICAx
KTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpOworICAg
IAorICAgIFNFVChtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCAxMDAw
KTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvLCA2KTsKICAg
ICAKQEAgLTIyNyw2ICsyMzQsOSBAQCB2b2lkIGluaXRpYWxpemVPcHRpb25zKCkKICAgICAKICAg
ICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPiAwKTsKICAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKKyAgICAKKyAg
ICBTRVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOworICAgIFNFVChmb3JjZWRXZWFrUmFu
ZG9tU2VlZCwgMCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpPcHRpb25zCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMjExOTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDggQEAgZXh0ZXJuIGludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVOZXh0
SQogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3A7CiBleHRl
cm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuOwogCitleHRlcm4g
aW50MzJfdCBtYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOworCiBleHRl
cm4gdW5zaWduZWQgZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbzsKIAogZXh0ZXJu
IGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKQEAgLTgxLDYgKzgzLDkgQEAg
ZXh0ZXJuIHVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7CiBKU19FWFBPUlREQVRBIGV4
dGVybiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKIEpTX0VYUE9SVERBVEEgZXh0ZXJuIHVu
c2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKIAorZXh0ZXJuIGJvb2wgZm9yY2VXZWFr
UmFuZG9tU2VlZDsKK2V4dGVybiB1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9tU2VlZDsKKwogdm9p
ZCBpbml0aWFsaXplT3B0aW9ucygpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkocmV2aXNp
b24gMTIxMTkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2hp
Z2goc2VlZCkKICAgICB7CiAgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJv
dmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdldFVpbnQzMigpLgorICAg
IHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2g7IH0KIAogICAgIGRv
dWJsZSBnZXQoKQogICAgIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>