<?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>53565</bug_id>
          
          <creation_ts>2011-02-01 18:11:40 -0800</creation_ts>
          <short_desc>Refactor IDBRequest and IDBTransaction a bit</short_desc>
          <delta_ts>2011-02-04 12:02:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>eric</cc>
    
    <cc>hans</cc>
    
    <cc>japhet</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>343739</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:11:40 -0800</bug_when>
    <thetext>Refactor IDBRequest and IDBTransaction a bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343742</commentid>
    <comment_count>1</comment_count>
      <attachid>80868</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:14:17 -0800</bug_when>
    <thetext>Created attachment 80868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343744</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:15:26 -0800</bug_when>
    <thetext>Mihai, this modifies EventQueue so I added you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343767</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-02-01 18:44:30 -0800</bug_when>
    <thetext>Looks great.

&gt;  if (m_transaction)
&gt;        IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());

Not sure I fully understand this. When can m_transaction be 0? Seems like this wasn&apos;t possible before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343771</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 18:49:57 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Looks great.
&gt; 
&gt; &gt;  if (m_transaction)
&gt; &gt;        IDBPendingTransactionMonitor::removePendingTransaction(m_transaction.get());
&gt; 
&gt; Not sure I fully understand this. When can m_transaction be 0? Seems like this wasn&apos;t possible before?

You&apos;re right.  That was a mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343795</commentid>
    <comment_count>5</comment_count>
      <attachid>80877</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 19:58:48 -0800</bug_when>
    <thetext>Created attachment 80877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344380</commentid>
    <comment_count>6</comment_count>
      <attachid>80877</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-02 16:22:38 -0800</bug_when>
    <thetext>Comment on attachment 80877
Patch

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

&gt; Source/WebCore/dom/EventQueue.cpp:84
&gt; +        eventTarget-&gt;dispatchEvent(event);

This is the same as the initial toNode() branch. I think you should be able to just remove that and get the same behavior (turning this into if (..toDOMWindow) {..} else {...}).

&gt; Source/WebCore/storage/IDBRequest.cpp:161
&gt; +    ASSERT(scriptExecutionContext()-&gt;isDocument());

I thought the IndexedDB API was going to be available from workers too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344402</commentid>
    <comment_count>7</comment_count>
      <attachid>80877</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-02 16:42:09 -0800</bug_when>
    <thetext>Comment on attachment 80877
Patch

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

&gt;&gt; Source/WebCore/dom/EventQueue.cpp:84
&gt;&gt; +        eventTarget-&gt;dispatchEvent(event);
&gt; 
&gt; This is the same as the initial toNode() branch. I think you should be able to just remove that and get the same behavior (turning this into if (..toDOMWindow) {..} else {...}).

Will do.

&gt;&gt; Source/WebCore/storage/IDBRequest.cpp:161
&gt;&gt; +    ASSERT(scriptExecutionContext()-&gt;isDocument());
&gt; 
&gt; I thought the IndexedDB API was going to be available from workers too.

It will be.  But I think this is the best way to go for now.  We&apos;ll re-evaluate when we add to workers (which is probably at least a month or two away).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345210</commentid>
    <comment_count>8</comment_count>
      <attachid>81155</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-03 17:27:49 -0800</bug_when>
    <thetext>Created attachment 81155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345212</commentid>
    <comment_count>9</comment_count>
      <attachid>81156</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-03 17:29:53 -0800</bug_when>
    <thetext>Created attachment 81156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345214</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-03 17:30:56 -0800</bug_when>
    <thetext>I rebased this patch and fixed the issue Mihai pointed out.

Nate, can you please review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345307</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 20:56:17 -0800</bug_when>
    <thetext>Attachment 81156 did not build on chromium:
Build output: http://queues.webkit.org/results/7692729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345381</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-03 23:18:32 -0800</bug_when>
    <thetext>Attachment 81156 did not build on chromium:
Build output: http://queues.webkit.org/results/7692789</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345642</commentid>
    <comment_count>13</comment_count>
      <attachid>81156</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-02-04 11:32:51 -0800</bug_when>
    <thetext>Comment on attachment 81156
Patch

I like it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345658</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-04 11:53:04 -0800</bug_when>
    <thetext>landed
http://trac.webkit.org/changeset/77650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345673</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-04 12:02:07 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77650 might have broken Chromium Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80868</attachid>
            <date>2011-02-01 18:14:17 -0800</date>
            <delta_ts>2011-02-01 19:58:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53565-20110201181416.patch</filename>
            <type>text/plain</type>
            <size>22381</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li4z
ZWE4ZjI0ZTE1NjU5YWZmNDA0NjI5ZWViNWEyZjVhNWRkMzg5NGRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTEtMDItMDEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3IgSURCUmVxdWVzdCBhbmQgSURCVHJhbnNhY3Rpb24gYSBiaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTY1CisKKyAgICAgICAgVGhlcmUg
d2VyZSBhIGxvdCBvZiBzdWJ0bGUgaXNzdWVzIHdpdGggdGhlIHdheSBJREJUcmFuc2FjdGlvbgor
ICAgICAgICBhbmQgSURCUmVxdWVzdCB1c2VkIHRvIGJlIHdyaXR0ZW4uIFRoaXMgY2xlYW5zIGEg
bG90IG9mIHRoZW0gdXAKKyAgICAgICAgYW5kIGxhcmdlbHkgc2ltcGxpZmllcyB0aGUgbG9naWMu
IFVzaW5nIEV2ZW50UXVldWUgcmF0aGVyIHRoYW4KKyAgICAgICAgdGltZXJzIGlzIG9uZSBleGFt
cGxlIG9mIHRoZSBzaW1wbGlmaWNhdGlvbi4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uVGltZW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAxLTI0
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZjQxOGViNTIwYzA3NDdlYzE1YWM2NmRkZjU5
MjU1OTg4MjY4Mjg3Zi4uZmEwNDZkODUyMGNkOGFlMDdiYTE5MTliOTEyMzA5MGY1NjBmNzEzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KQEAgLTI1NjUsNiArMjU2NSw3IEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiV29ya2VyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2hh
cmVkV29ya2VyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIklEQlRyYW5zYWN0aW9uIjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiRmlsZVJlYWRlciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0
ZXIiOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3BwCmluZGV4IGE0Mzky
OWU3NWU5MzQxMTc5OTE0YTY1YThkNjQ4MGQ3Yjc0ZjMzZjEuLmYzZTlmYzNlYjkzZmVhYzBhMTFi
OWQ1NmI2MjNmYjQ1ZTEzYWMyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAKQEAgLTQx
LDcgKzQxLDcgQEAgRXZlbnRRdWV1ZTo6RXZlbnRRdWV1ZSgpCiAKIHZvaWQgRXZlbnRRdWV1ZTo6
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpIHx8IGV2ZW50LT50YXJnZXQoKS0+dG9ET01XaW5kb3coKSk7
CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5k
KGV2ZW50KTsKICAgICAKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXIuaXNBY3RpdmUoKSkK
QEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQogICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygp
KQogICAgICAgICBldmVudFRhcmdldC0+dG9ET01XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChldmVu
dCwgMCk7CiAgICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvci5jcHAKaW5kZXggNDQ0YzEwOWExZDU2NTg0YTIzNDY1OTRkNjViMTc1MTlj
Mjg1YjQ3Ny4uNGJlNmY0YTU1MjQ4NTk1NDY4M2I5MTY4NTc3YTI0MmIzMTI5MmNlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lkIElEQkN1
cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlv
bi5nZXQoKSkpCiAgICAgICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVx
dWVzdCwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKIH0KIAogUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAKaW5kZXggY2JkNjM1Y2Y5NjcxMmVhMTZmZWQ0YzBhOThhMjgzZTM4
NjE1ZTRlMy4uMzZkYzVmMzJhZTgzZWNkMWZlNmYyMmY5ZTg5NzJmYmNkMjk2YTU5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0zMSwxMCArMzEsMTEgQEAKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJJREJJbmRleC5oIgpAQCAtNDIsMTUgKzQzLDE4IEBACiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgi
CiAjaW5jbHVkZSAiSURCU3VjY2Vzc0V2ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRl
eHQsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKK30KKwogSURCUmVxdWVzdDo6SURCUmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogICAgIDogQWN0
aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV90aW1lcih0aGlzLCAmSURCUmVx
dWVzdDo6dGltZXJGaXJlZCkKICAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5HKQogewogICAgIGlm
IChtX3RyYW5zYWN0aW9uKQpAQCAtNjMsNTIgKzY3LDU5IEBAIElEQlJlcXVlc3Q6On5JREJSZXF1
ZXN0KCkKIAogYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IERPTkUpOwotICAgIG1fcmVhZHlTdGF0ZSA9IExPQURJTkc7Ci0gICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAobV9yZWFkeVN0YXRlICE9IERPTkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIG1f
dHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25p
dG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24obV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAg
bV9yZWFkeVN0YXRlID0gTE9BRElORzsKKworICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAg
ICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24o
bV90cmFuc2FjdGlvbi5nZXQoKSk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJREJS
ZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiB7Ci0g
ICAgc2NoZWR1bGVFdmVudCgwLCBlcnJvcik7CisgICAgZW5xdWV1ZUV2ZW50KElEQkVycm9yRXZl
bnQ6OmNyZWF0ZShtX3NvdXJjZSwgKmVycm9yKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25T
dWNjZXNzKCkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlTnVsbCgpLCAwKTsK
KyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIElEQkFu
eTo6Y3JlYXRlTnVsbCgpKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKLSAgICBzY2hlZHVs
ZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpKSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlN1Y2Nlc3NFdmVu
dDo6Y3JlYXRlKG1fc291cmNlLCBJREJBbnk6OmNyZWF0ZShJREJDdXJzb3I6OmNyZWF0ZShiYWNr
ZW5kLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKSkpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tl
bmQpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJEYXRhYmFzZTo6Y3Jl
YXRlKGJhY2tlbmQpKSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3Jl
YXRlKG1fc291cmNlLCBJREJBbnk6OmNyZWF0ZShJREJEYXRhYmFzZTo6Y3JlYXRlKGJhY2tlbmQp
KSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6
Y3JlYXRlKElEQkluZGV4OjpjcmVhdGUoYmFja2VuZCwgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAw
KTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3Vs
ZCBnbyBhd2F5LgogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElE
QktleT4gaWRiS2V5KQogewotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoaWRiS2V5
KSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1fc291cmNl
LCBJREJBbnk6OmNyZWF0ZShpZGJLZXkpKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQog
ewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBhd2F5IG9uY2UgY3JlYXRl
T2JqZWN0U3RvcmUgaXMgc3luYy4KLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElE
Qk9iamVjdFN0b3JlOjpjcmVhdGUoYmFja2VuZCwgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBn
byBhd2F5LgogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZCkKIHsKKyAgICBpZiAoIXNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCA9IHBycEJhY2tlbmQ7CiAgICAgLy8g
VGhpcyBpcyBvbmx5IHVzZWQgYnkgc2V0VmVyc2lvbiB3aGljaCB3aWxsIGFsd2F5cyBoYXZlIGEg
c291cmNlIHRoYXQncyBhbiBJREJEYXRhYmFzZS4KICAgICBtX3NvdXJjZS0+aWRiRGF0YWJhc2Uo
KS0+c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKGJhY2tlbmQuZ2V0KCkpOwpAQCAtMTE2LDEyICsx
MjcsMTIgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycEJhY2tlbmQKICAgICBiYWNrZW5kLT5zZXRDYWxsYmFj
a3MoZnJvbnRlbmQuZ2V0KCkpOwogICAgIG1fdHJhbnNhY3Rpb24gPSBiYWNrZW5kOwogICAgIElE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKGZyb250
ZW5kLnJlbGVhc2UoKSksIDApOworICAgIGVucXVldWVFdmVudChJREJTdWNjZXNzRXZlbnQ6OmNy
ZWF0ZShtX3NvdXJjZSwgSURCQW55OjpjcmVhdGUoZnJvbnRlbmQucmVsZWFzZSgpKSkpOwogfQog
CiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplZFNjcmlwdFZhbHVlKQogewotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55
OjpjcmVhdGUoc2VyaWFsaXplZFNjcmlwdFZhbHVlKSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElE
QlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1fc291cmNlLCBJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVk
U2NyaXB0VmFsdWUpKSk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlJlcXVlc3Q6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdApAQCAtMTI5LDc2ICsxNDAsMzkgQEAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
IGNvbnN0CiAgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogfQogCi1ib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmQoKSBjb25zdAorYm9vbCBJREJS
ZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIC8v
IElEQlRyYW5zYWN0aW9ucyBjYW5ub3QgYmUgc3VzcGVuZGVkIGF0IHRoZSBtb21lbnQuIFdlIHRo
ZXJlZm9yZQotICAgIC8vIGRpc2FsbG93IHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUgZm9yIHBhZ2Vz
IHRoYXQgdXNlIEluZGV4ZWREYXRhYmFzZS4KLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA8IERPTkUpOworICAgIG1fcmVhZHlTdGF0ZSA9IERPTkU7CiAKLUV2
ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1
cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQorICAgIGJvb2wgcmV0ID0gRXZlbnRUYXJnZXQ6OmRp
c3BhdGNoRXZlbnQoZXZlbnQpOwogCi1FdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKKyAg
ICBpZiAobV90cmFuc2FjdGlvbikKKyAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVU
YXNrRXZlbnRzKCk7CisKKyAgICByZXR1cm4gcmV0OwogfQogCi12b2lkIElEQlJlcXVlc3Q6OnRp
bWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4qKQordm9pZCBJREJSZXF1ZXN0OjplbnF1ZXVlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7Ci0gICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0g
ICAgQVNTRVJUKG1fcGVuZGluZ0V2ZW50cy5zaXplKCkpOwotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgaGFuZGxlIHRoZSBzdG9wIGV2ZW50IGFuZCBzdG9wIGFueSB0aW1lcnMgd2hlbiB3ZSBzZWUg
aXQuIFdlIGNhbiB0aGVuIGFzc2VydCBoZXJlIHRoYXQgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCBp
cyBub24tbnVsbC4KLQotICAgIC8vIFdlIG5lZWQgdG8ga2VlcCBzZWxmLXJlZmVyZW5jaW5nIG91
cnNlbGYsIG90aGVyd2lzZSBpdCdzIHBvc3NpYmxlIHdlJ2xsIGJlIGRlbGV0ZWQuCi0gICAgLy8g
QnV0IGluIHNvbWUgY2FzZXMsIHN1c3BlbmQoKSBjb3VsZCBiZSBjYWxsZWQgd2hpbGUgd2UncmUg
ZGlzcGF0Y2hpbmcgYW4gZXZlbnQsIHNvIHdlCi0gICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhh
dCByZXN1bWUoKSBkb2Vzbid0IHJlLXN0YXJ0IHRoZSB0aW1lciBiYXNlZCBvbiBtX3NlbGZSZWYg
YmVpbmcgc2V0LgotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBzZWxmUmVmID0gbV9zZWxmUmVmLnJl
bGVhc2UoKTsKLQotICAgIC8vIHJlYWR5U3RhdGVSZXNldCBjYW4gYmUgY2FsbGVkIHN5bmNocm9u
b3VzbHkgd2hpbGUgd2UncmUgZGlzcGF0Y2hpbmcgdGhlIGV2ZW50LgotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbjsK
LSAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7Ci0KLSAgICBWZWN0b3I8UGVuZGluZ0V2ZW50PiBw
ZW5kaW5nRXZlbnRzOwotICAgIHBlbmRpbmdFdmVudHMuc3dhcChtX3BlbmRpbmdFdmVudHMpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGVuZGluZ0V2ZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHdlJ3ZlIG5hdmlnYXRlZCBpbiB3aGljaCBjYXNlIHdl
J2xsIGNyYXNoLgotICAgICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7CisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAocGVuZGluZ0V2ZW50c1tpXS5tX2Vycm9yKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIXBlbmRp
bmdFdmVudHNbaV0ubV9yZXN1bHQpOwotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChJREJFcnJv
ckV2ZW50OjpjcmVhdGUobV9zb3VyY2UsICpwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChwZW5kaW5nRXZlbnRzW2ldLm1fcmVz
dWx0LT50eXBlKCkgIT0gSURCQW55OjpVbmRlZmluZWRUeXBlKTsKLSAgICAgICAgICAgIGRpc3Bh
dGNoRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIHBlbmRpbmdFdmVudHNb
aV0ubV9yZXN1bHQpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodHJhbnNhY3Rpb24pIHsK
LSAgICAgICAgLy8gTm93IHRoYXQgd2UgcHJvY2Vzc2VkIGFsbCBwZW5kaW5nIGV2ZW50cywgbGV0
IHRoZSB0cmFuc2FjdGlvbiBtb25pdG9yIGNoZWNrIGlmCi0gICAgICAgIC8vIGl0IGNhbiBjb21t
aXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gb3IgaWYgdGhlcmUncyBhbnl0aGluZyBuZXcgcGVu
ZGluZy4KLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgd29ya2VycyBjYXNlLgotICAgICAg
ICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7Ci0gICAgfQorICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgRXZlbnRRdWV1
ZSogZXZlbnRRdWV1ZSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKS0+ZXZlbnRRdWV1ZSgpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAg
ZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKIH0KIAotdm9pZCBJREJSZXF1ZXN0Ojpz
Y2hlZHVsZUV2ZW50KFBhc3NSZWZQdHI8SURCQW55PiByZXN1bHQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VFcnJvcj4gZXJyb3IpCitFdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmV2ZW50VGFy
Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA8IERPTkUpOwotICAgIEFTU0VS
VCghIW1fc2VsZlJlZiA9PSBtX3RpbWVyLmlzQWN0aXZlKCkpOwotCi0gICAgUGVuZGluZ0V2ZW50
IHBlbmRpbmdFdmVudDsKLSAgICBwZW5kaW5nRXZlbnQubV9yZXN1bHQgPSByZXN1bHQ7Ci0gICAg
cGVuZGluZ0V2ZW50Lm1fZXJyb3IgPSBlcnJvcjsKLSAgICBtX3BlbmRpbmdFdmVudHMuYXBwZW5k
KHBlbmRpbmdFdmVudCk7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKK30KIAotICAg
IG1fcmVhZHlTdGF0ZSA9IERPTkU7Ci0gICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgbV9zZWxmUmVmID0gdGhpczsKLSAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7
Ci0gICAgfQorRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjplbnN1cmVFdmVudFRhcmdldERh
dGEoKQoreworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVz
dC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKaW5kZXggZmE2ODIwOGNj
NTg1OTFkYmY3NjMzMWVhM2MxMDRmYzFkMzZkNGU2Mi4uODUyZmVlMDhiYWUwMTI4OGM2YmZkMThl
MTMwNDRkMTZhZWYwMjE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJS
ZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmgKQEAgLTM3
LDggKzM3LDYgQEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIklEQkFueS5o
IgogI2luY2x1ZGUgIklEQkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDcgKzQ0LDcg
QEAgY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOwogCiBjbGFzcyBJREJSZXF1
ZXN0IDogcHVibGljIElEQkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJB
bnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikg
eyByZXR1cm4gYWRvcHRSZWYobmV3IElEQlJlcXVlc3QoY29udGV4dCwgc291cmNlLCB0cmFuc2Fj
dGlvbikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7CiAKICAg
ICAvLyBEZWZpbmVkIGluIHRoZSBJREwKQEAgLTczLDEwICs3MSw5IEBAIHB1YmxpYzoKIAogICAg
IC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBJREJSZXF1ZXN0KiB0b0lEQlJlcXVlc3QoKSB7
IHJldHVybiB0aGlzOyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBFdmVudFRh
cmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCwgZWMpOyB9CiAKICAgICB1c2luZyBUaHJlYWRTYWZl
U2hhcmVkPElEQkNhbGxiYWNrcz46OnJlZjsKICAgICB1c2luZyBUaHJlYWRTYWZlU2hhcmVkPElE
QkNhbGxiYWNrcz46OmRlcmVmOwpAQCAtODQsOCArODEsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIElEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55
PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pOwog
Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+Kik7Ci0gICAgdm9pZCBzY2hl
ZHVsZUV2ZW50KFBhc3NSZWZQdHI8SURCQW55PiByZXN1bHQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pOworICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAog
ICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQpAQCAtOTYsMTcgKzkyLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQW55PiBt
X3NvdXJjZTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3Ry
YW5zYWN0aW9uOwogCi0gICAgc3RydWN0IFBlbmRpbmdFdmVudCB7Ci0gICAgICAgIFJlZlB0cjxJ
REJBbnk+IG1fcmVzdWx0OwotICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gbV9lcnJv
cjsKLSAgICB9OwotICAgIFZlY3RvcjxQZW5kaW5nRXZlbnQ+IG1fcGVuZGluZ0V2ZW50czsKLQot
ICAgIC8vIFVzZWQgdG8gZmlyZSBldmVudHMgYXN5bmNocm9ub3VzbHkuCi0gICAgVGltZXI8SURC
UmVxdWVzdD4gbV90aW1lcjsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gbV9zZWxmUmVmOyAvLyBU
aGlzIGlzIHNldCB0byB1cyBpZmYgdGhlcmUncyBhbiBldmVudCBwZW5kaW5nLgotCiAgICAgUmVh
ZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CisKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdl
dERhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCmlu
ZGV4IGUzNjI1ZDRiNWJkN2Q3NDFmOWQ5OTk0YTQyZWQ0ODQ0OWZiMGJkNjYuLjgyZWJjY2E3MWJk
MzZlNTNmOGJmNTY3MTk2NmU0ZWU1N2M2M2Q5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yOCw4ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKICNp
bmNsdWRlICJJREJBYm9ydEV2ZW50LmgiCiAjaW5jbHVkZSAiSURCQ29tcGxldGVFdmVudC5oIgog
I2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCkBAIC0zOSwxOCArNDAsMTkgQEAKICNpbmNsdWRlICJJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nVHJh
bnNhY3Rpb25Nb25pdG9yLmgiCiAjaW5jbHVkZSAiSURCVGltZW91dEV2ZW50LmgiCi0jaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQlRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFiYXNlKiBkYikKK3sgCisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNrZW5kLCBkYikpOworfQorCiBJREJU
cmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElE
QkRhdGFiYXNlKiBkYikKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAg
ICwgbV9iYWNrZW5kKGJhY2tlbmQpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwgbV9tb2Rl
KG1fYmFja2VuZC0+bW9kZSgpKQotICAgICwgbV9vbkFib3J0VGltZXIodGhpcywgJklEQlRyYW5z
YWN0aW9uOjpvbkFib3J0VGltZXJGaXJlZCkKLSAgICAsIG1fb25Db21wbGV0ZVRpbWVyKHRoaXMs
ICZJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZVRpbWVyRmlyZWQpCi0gICAgLCBtX29uVGltZW91
dFRpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbjo6b25UaW1lb3V0VGltZXJGaXJlZCkKIHsKICAg
ICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGRQZW5kaW5nVHJhbnNhY3Rpb24obV9i
YWNrZW5kLmdldCgpKTsKIH0KQEAgLTcxLDYgKzczLDcgQEAgSURCRGF0YWJhc2UqIElEQlRyYW5z
YWN0aW9uOjpkYigpCiAKIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9u
OjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIC8vIEZJWE1FOiBJdCdkIGJlIGJldHRlciAoYmVjYXVzZSBpdCdzIG1vcmUgZGV0ZXJtaW5p
c3RpYykgaWYgd2UgZGlkbid0IHN0YXJ0IHRocm93aW5nIHRoaXMgdW50aWwgdGhlIGNvbXBsZXRl
IG9yIGFib3J0IGV2ZW50IGZpcmVzLgogICAgIGlmICghbV9iYWNrZW5kKSB7CiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC04Niw2ICs4OSw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAKIHZvaWQgSURC
VHJhbnNhY3Rpb246OmFib3J0KCkKIHsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZS
ZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAgICAgIG1fYmFja2VuZC0+YWJvcnQo
KTsKIH0KQEAgLTk3LDY5ICsxMDEsNTYgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCVHJh
bnNhY3Rpb246OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAogCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpvbkFib3J0KCkKIHsKLSAgICBBU1NFUlQoIW1fb25BYm9ydFRpbWVyLmlzQWN0aXZl
KCkpOwotICAgIEFTU0VSVCghbV9vbkNvbXBsZXRlVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNT
RVJUKCFtX29uVGltZW91dFRpbWVyLmlzQWN0aXZlKCkpOwotICAgIG1fc2VsZlJlZiA9IHRoaXM7
Ci0gICAgbV9vbkFib3J0VGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIG1fYmFja2VuZC5jbGVh
cigpOyAvLyBSZWxlYXNlIHRoZSBiYWNrZW5kIGFzIGl0IGhvbGRzIGEgKGNpcmN1bGFyKSByZWZl
cmVuY2UgYmFjayB0byB1cy4KKyAgICBlbnF1ZXVlRXZlbnQoSURCQWJvcnRFdmVudDo6Y3JlYXRl
KCkpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKIHsKLSAgICBBU1NF
UlQoIW1fb25BYm9ydFRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vbkNvbXBsZXRl
VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uVGltZW91dFRpbWVyLmlzQWN0aXZl
KCkpOwotICAgIG1fc2VsZlJlZiA9IHRoaXM7Ci0gICAgbV9vbkNvbXBsZXRlVGltZXIuc3RhcnRP
bmVTaG90KDApOwotICAgIG1fYmFja2VuZC5jbGVhcigpOyAvLyBSZWxlYXNlIHRoZSBiYWNrZW5k
IGFzIGl0IGhvbGRzIGEgKGNpcmN1bGFyKSByZWZlcmVuY2UgYmFjayB0byB1cy4KKyAgICBlbnF1
ZXVlRXZlbnQoSURCQ29tcGxldGVFdmVudDo6Y3JlYXRlKCkpOwogfQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpvblRpbWVvdXQoKQogewotICAgIEFTU0VSVCghbV9vbkFib3J0VGltZXIuaXNBY3Rp
dmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uQ29tcGxldGVUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBB
U1NFUlQoIW1fb25UaW1lb3V0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9zZWxmUmVmID0gdGhp
czsKLSAgICBtX29uVGltZW91dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICBtX2JhY2tlbmQu
Y2xlYXIoKTsgLy8gUmVsZWFzZSB0aGUgYmFja2VuZCBhcyBpdCBob2xkcyBhIChjaXJjdWxhcikg
cmVmZXJlbmNlIGJhY2sgdG8gdXMuCisgICAgZW5xdWV1ZUV2ZW50KElEQlRpbWVvdXRFdmVudDo6
Y3JlYXRlKCkpOwogfQogCiBib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kKCkgY29uc3QK
IHsKLSAgICAvLyBXZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zYWN0aW9uIHNvIHdl
IGNhbm5vdCBzdXNwZW5kIG91ciBvYmplY3QuCi0gICAgLy8gSW5zdGVhZCwgd2Ugc2ltcGx5IGRv
bid0IGFsbG93IHRoZSBvd25lciBwYWdlIHRvIGdvIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNo
ZS4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX2JhY2tlbmQ7CiB9CiAKIHZvaWQg
SURCVHJhbnNhY3Rpb246OnN0b3AoKQogeworICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOyAv
LyBOdWxsaW5nIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgbm93IGtlZXBzIHVzIGZyb20gZmlyaW5n
IGFuIGFib3J0IGV2ZW50LgorCisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0g
dGhpczsKICAgICBpZiAobV9iYWNrZW5kKQogICAgICAgICBtX2JhY2tlbmQtPmFib3J0KCk7Cisg
ICAgbV9iYWNrZW5kLmNsZWFyKCk7CiB9CiAKLUV2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rp
b246OmV2ZW50VGFyZ2V0RGF0YSgpCit2b2lkIElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0
YTsKLX0KKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OwogCi1FdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERh
dGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CisgICAgQVNTRVJUKG1fYmFj
a2VuZCk7CisgICAgbV9iYWNrZW5kLmNsZWFyKCk7CisgICAgCisgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1
ZXVlID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5l
dmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVl
LT5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0
VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qIHRyYW5zYWN0aW9uKQorRXZlbnRUYXJn
ZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICBBU1NFUlQo
bV9zZWxmUmVmKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSBtX3NlbGZS
ZWYucmVsZWFzZSgpOwotICAgIGRpc3BhdGNoRXZlbnQoSURCQWJvcnRFdmVudDo6Y3JlYXRlKCkp
OworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rp
b246Om9uQ29tcGxldGVUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiogdHJhbnNhY3Rp
b24pCitFdmVudFRhcmdldERhdGEqIElEQlRyYW5zYWN0aW9uOjplbnN1cmVFdmVudFRhcmdldERh
dGEoKQogewotICAgIEFTU0VSVChtX3NlbGZSZWYpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bj4gc2VsZlJlZiA9IG1fc2VsZlJlZi5yZWxlYXNlKCk7Ci0gICAgZGlzcGF0Y2hFdmVudChJREJD
b21wbGV0ZUV2ZW50OjpjcmVhdGUoKSk7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsK
IH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggZDBhOWYw
ZmQ2ZjE5MDAyMDZhNDY1MWQ3N2Y0ZWMzZTYxNjJmOWZhNC4uYzBlNWFhYzUyOTc2MTBhNjMyNjE2
YjI5YzM1NWQxMjU0Y2U1YzI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNh
Y3Rpb25DYWxsYmFja3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDEwICs0NCw3IEBAIGNsYXNz
IElEQk9iamVjdFN0b3JlOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbiA6IHB1YmxpYyBJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcywgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2Jq
ZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCi0gICAgeyAK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbihjb250ZXh0LCBiYWNr
ZW5kLCBkYikpOyAKLSAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFzZSopOwogICAgIHZpcnR1YWwgfklEQlRyYW5z
YWN0aW9uKCk7CiAKICAgICBlbnVtIE1vZGUgewpAQCAtNzMsOSArNjksOSBAQCBwdWJsaWM6CiAK
ICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgSURCVHJhbnNhY3Rpb24qIHRvSURCVHJh
bnNhY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAvLyBBY3RpdmVE
T01PYmplY3QKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKQEAgLTg1LDI1ICs4MSwxOSBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7
CiAKKyAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisKICAgICAvLyBF
dmVudFRhcmdldAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2
ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAKLSAgICB2b2lkIG9uQWJv
cnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiopOwotICAgIHZvaWQgb25Db21wbGV0
ZVRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7Ci0gICAgdm9pZCBvblRpbWVvdXRU
aW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiopOwotCi0gICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAg
ICAgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwogCi0gICAgVGltZXI8SURCVHJhbnNhY3Rpb24+IG1f
b25BYm9ydFRpbWVyOwotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBtX29uQ29tcGxldGVUaW1l
cjsKLSAgICBUaW1lcjxJREJUcmFuc2FjdGlvbj4gbV9vblRpbWVvdXRUaW1lcjsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IG1fc2VsZlJlZjsgLy8gVGhpcyBpcyBzZXQgdG8gdXMgaWZmIHRo
ZXJlJ3MgYW4gZXZlbnQgcGVuZGluZy4KKyAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdl
dERhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80877</attachid>
            <date>2011-02-01 19:58:48 -0800</date>
            <delta_ts>2011-02-03 17:27:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53565-20110201195847.patch</filename>
            <type>text/plain</type>
            <size>22490</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTE3MDRjM2FhMzJkNWNlMGJlZmMzM2Q1NWViODNhMTdiZjE3OTg4Li4z
ZWE4ZjI0ZTE1NjU5YWZmNDA0NjI5ZWViNWEyZjVhNWRkMzg5NGRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTEtMDItMDEgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3IgSURCUmVxdWVzdCBhbmQgSURCVHJhbnNhY3Rpb24gYSBiaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTY1CisKKyAgICAgICAgVGhlcmUg
d2VyZSBhIGxvdCBvZiBzdWJ0bGUgaXNzdWVzIHdpdGggdGhlIHdheSBJREJUcmFuc2FjdGlvbgor
ICAgICAgICBhbmQgSURCUmVxdWVzdCB1c2VkIHRvIGJlIHdyaXR0ZW4uIFRoaXMgY2xlYW5zIGEg
bG90IG9mIHRoZW0gdXAKKyAgICAgICAgYW5kIGxhcmdlbHkgc2ltcGxpZmllcyB0aGUgbG9naWMu
IFVzaW5nIEV2ZW50UXVldWUgcmF0aGVyIHRoYW4KKyAgICAgICAgdGltZXJzIGlzIG9uZSBleGFt
cGxlIG9mIHRoZSBzaW1wbGlmaWNhdGlvbi4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uVGltZW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAxLTI0
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggZjQxOGViNTIwYzA3NDdlYzE1YWM2NmRkZjU5
MjU1OTg4MjY4Mjg3Zi4uZmEwNDZkODUyMGNkOGFlMDdiYTE5MTliOTEyMzA5MGY1NjBmNzEzYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KQEAgLTI1NjUsNiArMjU2NSw3IEBAIHN1YiBJc0FjdGl2ZURvbVR5cGUKICAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiV29ya2VyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2hh
cmVkV29ya2VyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCUmVxdWVzdCI7CisgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIklEQlRyYW5zYWN0aW9uIjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiRmlsZVJlYWRlciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0
ZXIiOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuY3BwCmluZGV4IGE0Mzky
OWU3NWU5MzQxMTc5OTE0YTY1YThkNjQ4MGQ3Yjc0ZjMzZjEuLmYzZTlmYzNlYjkzZmVhYzBhMTFi
OWQ1NmI2MjNmYjQ1ZTEzYWMyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAKQEAgLTQx
LDcgKzQxLDcgQEAgRXZlbnRRdWV1ZTo6RXZlbnRRdWV1ZSgpCiAKIHZvaWQgRXZlbnRRdWV1ZTo6
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpIHx8IGV2ZW50LT50YXJnZXQoKS0+dG9ET01XaW5kb3coKSk7
CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5k
KGV2ZW50KTsKICAgICAKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXIuaXNBY3RpdmUoKSkK
QEAgLTgxLDcgKzgxLDcgQEAgdm9pZCBFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQogICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRvdygp
KQogICAgICAgICBldmVudFRhcmdldC0+dG9ET01XaW5kb3coKS0+ZGlzcGF0Y2hFdmVudChldmVu
dCwgMCk7CiAgICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkN1cnNvci5jcHAKaW5kZXggNDQ0YzEwOWExZDU2NTg0YTIzNDY1OTRkNjViMTc1MTlj
Mjg1YjQ3Ny4uNGJlNmY0YTU1MjQ4NTk1NDY4M2I5MTY4NTc3YTI0MmIzMTI5MmNlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lkIElEQkN1
cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25D
b2RlJiBlYykKICAgICBpZiAobV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlv
bi5nZXQoKSkpCiAgICAgICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVx
dWVzdCwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKIH0KIAogUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAKaW5kZXggY2JkNjM1Y2Y5NjcxMmVhMTZmZWQ0YzBhOThhMjgzZTM4
NjE1ZTRlMy4uMjcyODYxNjU4NTE4ZDU4Y2RhY2Y3NmNmMDZkNzg4OTMwNzk2MDkyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0zMSwxMCArMzEsMTEgQEAKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJJREJJbmRleC5oIgpAQCAtNDIsMTUgKzQzLDE4IEBACiAjaW5jbHVkZSAiSURC
T2JqZWN0U3RvcmUuaCIKICNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgi
CiAjaW5jbHVkZSAiSURCU3VjY2Vzc0V2ZW50LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCUmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRl
eHQsIHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKK30KKwogSURCUmVxdWVzdDo6SURCUmVxdWVzdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNl
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogICAgIDogQWN0
aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAgLCBtX3NvdXJjZShzb3VyY2UpCiAgICAg
LCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV90aW1lcih0aGlzLCAmSURCUmVx
dWVzdDo6dGltZXJGaXJlZCkKICAgICAsIG1fcmVhZHlTdGF0ZShMT0FESU5HKQogewogICAgIGlm
IChtX3RyYW5zYWN0aW9uKQpAQCAtNjMsNTIgKzY3LDU4IEBAIElEQlJlcXVlc3Q6On5JREJSZXF1
ZXN0KCkKIAogYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IERPTkUpOwotICAgIG1fcmVhZHlTdGF0ZSA9IExPQURJTkc7Ci0gICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uKTsKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAobV9yZWFkeVN0YXRlICE9IERPTkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIG1f
dHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKKyAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5HOwor
CiAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0
aW9uKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
SURCUmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQog
ewotICAgIHNjaGVkdWxlRXZlbnQoMCwgZXJyb3IpOworICAgIGVucXVldWVFdmVudChJREJFcnJv
ckV2ZW50OjpjcmVhdGUobV9zb3VyY2UsICplcnJvcikpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcygpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZU51bGwoKSwg
MCk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1fc291cmNlLCBJ
REJBbnk6OmNyZWF0ZU51bGwoKSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7Ci0gICAgc2No
ZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShJREJDdXJzb3I6OmNyZWF0ZShiYWNrZW5kLCB0aGlz
LCBtX3RyYW5zYWN0aW9uLmdldCgpKSksIDApOworICAgIGVucXVldWVFdmVudChJREJTdWNjZXNz
RXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yOjpjcmVhdGUo
YmFja2VuZCwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSkpKSk7CiB9CiAKIHZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiBi
YWNrZW5kKQogewotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURCRGF0YWJhc2U6
OmNyZWF0ZShiYWNrZW5kKSksIDApOworICAgIGVucXVldWVFdmVudChJREJTdWNjZXNzRXZlbnQ6
OmNyZWF0ZShtX3NvdXJjZSwgSURCQW55OjpjcmVhdGUoSURCRGF0YWJhc2U6OmNyZWF0ZShiYWNr
ZW5kKSkpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJB
bnk6OmNyZWF0ZShJREJJbmRleDo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
KSwgMCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBz
aG91bGQgZ28gYXdheS4KIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJLZXk+IGlkYktleSkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKGlk
YktleSksIDApOworICAgIGVucXVldWVFdmVudChJREJTdWNjZXNzRXZlbnQ6OmNyZWF0ZShtX3Nv
dXJjZSwgSURCQW55OjpjcmVhdGUoaWRiS2V5KSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9u
U3VjY2VzcyhQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCkKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZ28gYXdheSBvbmNlIGNy
ZWF0ZU9iamVjdFN0b3JlIGlzIHN5bmMuCi0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0
ZShJREJPYmplY3RTdG9yZTo6Y3JlYXRlKGJhY2tlbmQsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSwg
MCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91
bGQgZ28gYXdheS4KIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHBycEJhY2tlbmQpCiB7CisgICAgaWYgKCFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQgPSBwcnBCYWNrZW5kOwogICAg
IC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5IHNldFZlcnNpb24gd2hpY2ggd2lsbCBhbHdheXMgaGF2
ZSBhIHNvdXJjZSB0aGF0J3MgYW4gSURCRGF0YWJhc2UuCiAgICAgbV9zb3VyY2UtPmlkYkRhdGFi
YXNlKCktPnNldFNldFZlcnNpb25UcmFuc2FjdGlvbihiYWNrZW5kLmdldCgpKTsKQEAgLTExNiwx
MiArMTI2LDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kCiAgICAgYmFja2VuZC0+c2V0Q2Fs
bGJhY2tzKGZyb250ZW5kLmdldCgpKTsKICAgICBtX3RyYW5zYWN0aW9uID0gYmFja2VuZDsKICAg
ICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjpyZW1vdmVQZW5kaW5nVHJhbnNhY3Rpb24o
bV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShm
cm9udGVuZC5yZWxlYXNlKCkpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50
OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKGZyb250ZW5kLnJlbGVhc2UoKSkpKTsK
IH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElE
QkFueTo6Y3JlYXRlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSksIDApOworICAgIGVucXVldWVFdmVu
dChJREJTdWNjZXNzRXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgSURCQW55OjpjcmVhdGUoc2VyaWFs
aXplZFNjcmlwdFZhbHVlKSkpOwogfQogCiBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1
ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKQEAgLTEyOSw3NiArMTM5LDM5IEBA
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlJlcXVlc3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSBjb25zdAogICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKIH0KIAotYm9vbCBJREJSZXF1ZXN0OjpjYW5TdXNwZW5kKCkgY29uc3QKK2Jvb2wg
SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAg
ICAvLyBJREJUcmFuc2FjdGlvbnMgY2Fubm90IGJlIHN1c3BlbmRlZCBhdCB0aGUgbW9tZW50LiBX
ZSB0aGVyZWZvcmUKLSAgICAvLyBkaXNhbGxvdyB0aGUgYmFjay9mb3J3YXJkIGNhY2hlIGZvciBw
YWdlcyB0aGF0IHVzZSBJbmRleGVkRGF0YWJhc2UuCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAg
IEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKyAgICBtX3JlYWR5U3RhdGUgPSBET05FOwog
Ci1FdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAg
cmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKLX0KKyAgICBib29sIHJldCA9IEV2ZW50VGFyZ2V0
OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIAotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0Ojpl
bnN1cmVFdmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7
CisgICAgaWYgKG1fdHJhbnNhY3Rpb24pCisgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRpZENvbXBs
ZXRlVGFza0V2ZW50cygpOworCisgICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCBJREJSZXF1ZXN0
Ojp0aW1lckZpcmVkKFRpbWVyPElEQlJlcXVlc3Q+KikKK3ZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVChtX3NlbGZSZWYp
OwotICAgIEFTU0VSVChtX3BlbmRpbmdFdmVudHMuc2l6ZSgpKTsKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhbmRsZSB0aGUgc3RvcCBldmVudCBhbmQgc3RvcCBhbnkgdGltZXJzIHdoZW4gd2Ug
c2VlIGl0LiBXZSBjYW4gdGhlbiBhc3NlcnQgaGVyZSB0aGF0IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgaXMgbm9uLW51bGwuCi0KLSAgICAvLyBXZSBuZWVkIHRvIGtlZXAgc2VsZi1yZWZlcmVuY2lu
ZyBvdXJzZWxmLCBvdGhlcndpc2UgaXQncyBwb3NzaWJsZSB3ZSdsbCBiZSBkZWxldGVkLgotICAg
IC8vIEJ1dCBpbiBzb21lIGNhc2VzLCBzdXNwZW5kKCkgY291bGQgYmUgY2FsbGVkIHdoaWxlIHdl
J3JlIGRpc3BhdGNoaW5nIGFuIGV2ZW50LCBzbyB3ZQotICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgcmVzdW1lKCkgZG9lc24ndCByZS1zdGFydCB0aGUgdGltZXIgYmFzZWQgb24gbV9zZWxm
UmVmIGJlaW5nIHNldC4KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gc2VsZlJlZiA9IG1fc2VsZlJl
Zi5yZWxlYXNlKCk7Ci0KLSAgICAvLyByZWFkeVN0YXRlUmVzZXQgY2FuIGJlIGNhbGxlZCBzeW5j
aHJvbm91c2x5IHdoaWxlIHdlJ3JlIGRpc3BhdGNoaW5nIHRoZSBldmVudC4KLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rp
b247Ci0gICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwotCi0gICAgVmVjdG9yPFBlbmRpbmdFdmVu
dD4gcGVuZGluZ0V2ZW50czsKLSAgICBwZW5kaW5nRXZlbnRzLnN3YXAobV9wZW5kaW5nRXZlbnRz
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBlbmRpbmdFdmVudHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB3ZSd2ZSBuYXZpZ2F0ZWQgaW4gd2hpY2ggY2Fz
ZSB3ZSdsbCBjcmFzaC4KLSAgICAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA8IERPTkUpOworICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgaWYgKHBlbmRpbmdFdmVudHNbaV0ubV9lcnJvcikgewotICAgICAgICAgICAgQVNTRVJUKCFw
ZW5kaW5nRXZlbnRzW2ldLm1fcmVzdWx0KTsKLSAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoSURC
RXJyb3JFdmVudDo6Y3JlYXRlKG1fc291cmNlLCAqcGVuZGluZ0V2ZW50c1tpXS5tX2Vycm9yKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocGVuZGluZ0V2ZW50c1tpXS5t
X3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6VW5kZWZpbmVkVHlwZSk7Ci0gICAgICAgICAgICBk
aXNwYXRjaEV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1fc291cmNlLCBwZW5kaW5nRXZl
bnRzW2ldLm1fcmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHRyYW5zYWN0aW9u
KSB7Ci0gICAgICAgIC8vIE5vdyB0aGF0IHdlIHByb2Nlc3NlZCBhbGwgcGVuZGluZyBldmVudHMs
IGxldCB0aGUgdHJhbnNhY3Rpb24gbW9uaXRvciBjaGVjayBpZgotICAgICAgICAvLyBpdCBjYW4g
Y29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIG9yIGlmIHRoZXJlJ3MgYW55dGhpbmcgbmV3
IHBlbmRpbmcuCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIHdvcmtlcnMgY2FzZS4KLSAg
ICAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgIH0KKyAgICBB
U1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOworICAgIEV2ZW50
UXVldWUqIGV2ZW50UXVldWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSktPmV2ZW50UXVldWUoKTsKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwor
ICAgIGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudCk7CiB9CiAKLXZvaWQgSURCUmVxdWVz
dDo6c2NoZWR1bGVFdmVudChQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0LCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQorRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVu
dFRhcmdldERhdGEoKQogewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKLSAgICBB
U1NFUlQoISFtX3NlbGZSZWYgPT0gbV90aW1lci5pc0FjdGl2ZSgpKTsKLQotICAgIFBlbmRpbmdF
dmVudCBwZW5kaW5nRXZlbnQ7Ci0gICAgcGVuZGluZ0V2ZW50Lm1fcmVzdWx0ID0gcmVzdWx0Owot
ICAgIHBlbmRpbmdFdmVudC5tX2Vycm9yID0gZXJyb3I7Ci0gICAgbV9wZW5kaW5nRXZlbnRzLmFw
cGVuZChwZW5kaW5nRXZlbnQpOworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Cit9CiAK
LSAgICBtX3JlYWR5U3RhdGUgPSBET05FOwotICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIG1fc2VsZlJlZiA9IHRoaXM7Ci0gICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KDApOwotICAgIH0KK0V2ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJn
ZXREYXRhKCkKK3sKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJl
cXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCmluZGV4IGZhNjgy
MDhjYzU4NTkxZGJmNzYzMzFlYTNjMTA0ZmMxZDM2ZDRlNjIuLjg1MmZlZTA4YmFlMDEyODhjNmJm
ZDE4ZTEzMDQ0ZDE2YWVmMDIxNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5oCkBA
IC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJREJB
bnkuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw3ICs0
NCw3IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsKIAogY2xhc3MgSURC
UmVxdWVzdCA6IHB1YmxpYyBJREJDYWxsYmFja3MsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGlj
IEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24pIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJSZXF1ZXN0KGNvbnRleHQsIHNvdXJjZSwgdHJh
bnNhY3Rpb24pKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwog
CiAgICAgLy8gRGVmaW5lZCBpbiB0aGUgSURMCkBAIC03MywxMCArNzEsOSBAQCBwdWJsaWM6CiAK
ICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgSURCUmVxdWVzdCogdG9JREJSZXF1ZXN0
KCkgeyByZXR1cm4gdGhpczsgfQotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CisgICAgYm9vbCBkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gRXZl
bnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQogCiAgICAgdXNpbmcgVGhyZWFk
U2FmZVNoYXJlZDxJREJDYWxsYmFja3M+OjpyZWY7CiAgICAgdXNpbmcgVGhyZWFkU2FmZVNoYXJl
ZDxJREJDYWxsYmFja3M+OjpkZXJlZjsKQEAgLTg0LDggKzgxLDcgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
KTsKIAotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxJREJSZXF1ZXN0PiopOwotICAgIHZvaWQg
c2NoZWR1bGVFdmVudChQYXNzUmVmUHRyPElEQkFueT4gcmVzdWx0LCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+KTsKKyAgICB2b2lkIGVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7
CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KQEAgLTk2LDE3ICs5Miw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkFu
eT4gbV9zb3VyY2U7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
bV90cmFuc2FjdGlvbjsKIAotICAgIHN0cnVjdCBQZW5kaW5nRXZlbnQgewotICAgICAgICBSZWZQ
dHI8SURCQW55PiBtX3Jlc3VsdDsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IG1f
ZXJyb3I7Ci0gICAgfTsKLSAgICBWZWN0b3I8UGVuZGluZ0V2ZW50PiBtX3BlbmRpbmdFdmVudHM7
Ci0KLSAgICAvLyBVc2VkIHRvIGZpcmUgZXZlbnRzIGFzeW5jaHJvbm91c2x5LgotICAgIFRpbWVy
PElEQlJlcXVlc3Q+IG1fdGltZXI7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IG1fc2VsZlJlZjsg
Ly8gVGhpcyBpcyBzZXQgdG8gdXMgaWZmIHRoZXJlJ3MgYW4gZXZlbnQgcGVuZGluZy4KLQogICAg
IFJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOworCiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRU
YXJnZXREYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cAppbmRleCBlMzYyNWQ0YjViZDdkNzQxZjlkOTk5NGE0MmVkNDg0NDlmYjBiZDY2Li40ZDg0ODA1
OGI5MmU0MjJmMGU4NDU4NGRkODNlNDA4MGFhZGY0MDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMjgsOCArMjgsOSBAQAogCiAjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJFdmVudFF1ZXVlLmgi
CiAjaW5jbHVkZSAiSURCQWJvcnRFdmVudC5oIgogI2luY2x1ZGUgIklEQkNvbXBsZXRlRXZlbnQu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgpAQCAtMzksMTggKzQwLDE5IEBACiAjaW5jbHVk
ZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCUGVuZGlu
Z1RyYW5zYWN0aW9uTW9uaXRvci5oIgogI2luY2x1ZGUgIklEQlRpbWVvdXRFdmVudC5oIgotI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kLCBJREJEYXRhYmFzZSogZGIpCit7IAorICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwgZGIpKTsKK30KKwog
SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5k
LCBJREJEYXRhYmFzZSogZGIpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykK
ICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1f
bW9kZShtX2JhY2tlbmQtPm1vZGUoKSkKLSAgICAsIG1fb25BYm9ydFRpbWVyKHRoaXMsICZJREJU
cmFuc2FjdGlvbjo6b25BYm9ydFRpbWVyRmlyZWQpCi0gICAgLCBtX29uQ29tcGxldGVUaW1lcih0
aGlzLCAmSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGVUaW1lckZpcmVkKQotICAgICwgbV9vblRp
bWVvdXRUaW1lcih0aGlzLCAmSURCVHJhbnNhY3Rpb246Om9uVGltZW91dFRpbWVyRmlyZWQpCiB7
CiAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6YWRkUGVuZGluZ1RyYW5zYWN0aW9u
KG1fYmFja2VuZC5nZXQoKSk7CiB9CkBAIC03MSw2ICs3Myw3IEBAIElEQkRhdGFiYXNlKiBJREJU
cmFuc2FjdGlvbjo6ZGIoKQogCiBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2Fj
dGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKKyAgICAvLyBGSVhNRTogSXQnZCBiZSBiZXR0ZXIgKGJlY2F1c2UgaXQncyBtb3JlIGRldGVy
bWluaXN0aWMpIGlmIHdlIGRpZG4ndCBzdGFydCB0aHJvd2luZyB0aGlzIHVudGlsIHRoZSBjb21w
bGV0ZSBvciBhYm9ydCBldmVudCBmaXJlcy4KICAgICBpZiAoIW1fYmFja2VuZCkgewogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpAQCAtODYsNiArODksNyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJU
cmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAogCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCiB7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBz
ZWxmUmVmID0gdGhpczsKICAgICBpZiAobV9iYWNrZW5kKQogICAgICAgICBtX2JhY2tlbmQtPmFi
b3J0KCk7CiB9CkBAIC05Nyw3NyArMTAxLDU2IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElE
QlRyYW5zYWN0aW9uOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKIAogdm9pZCBJREJU
cmFuc2FjdGlvbjo6b25BYm9ydCgpCiB7Ci0gICAgQVNTRVJUKCFtX29uQWJvcnRUaW1lci5pc0Fj
dGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25Db21wbGV0ZVRpbWVyLmlzQWN0aXZlKCkpOwotICAg
IEFTU0VSVCghbV9vblRpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBtX3NlbGZSZWYgPSB0
aGlzOwotICAgIG1fb25BYm9ydFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICBtX2JhY2tlbmQu
Y2xlYXIoKTsgLy8gUmVsZWFzZSB0aGUgYmFja2VuZCBhcyBpdCBob2xkcyBhIChjaXJjdWxhcikg
cmVmZXJlbmNlIGJhY2sgdG8gdXMuCisgICAgZW5xdWV1ZUV2ZW50KElEQkFib3J0RXZlbnQ6OmNy
ZWF0ZSgpKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCiB7Ci0gICAg
QVNTRVJUKCFtX29uQWJvcnRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25Db21w
bGV0ZVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vblRpbWVvdXRUaW1lci5pc0Fj
dGl2ZSgpKTsKLSAgICBtX3NlbGZSZWYgPSB0aGlzOwotICAgIG1fb25Db21wbGV0ZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKLSAgICBtX2JhY2tlbmQuY2xlYXIoKTsgLy8gUmVsZWFzZSB0aGUgYmFj
a2VuZCBhcyBpdCBob2xkcyBhIChjaXJjdWxhcikgcmVmZXJlbmNlIGJhY2sgdG8gdXMuCisgICAg
ZW5xdWV1ZUV2ZW50KElEQkNvbXBsZXRlRXZlbnQ6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBJREJU
cmFuc2FjdGlvbjo6b25UaW1lb3V0KCkKIHsKLSAgICBBU1NFUlQoIW1fb25BYm9ydFRpbWVyLmlz
QWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vbkNvbXBsZXRlVGltZXIuaXNBY3RpdmUoKSk7Ci0g
ICAgQVNTRVJUKCFtX29uVGltZW91dFRpbWVyLmlzQWN0aXZlKCkpOwotICAgIG1fc2VsZlJlZiA9
IHRoaXM7Ci0gICAgbV9vblRpbWVvdXRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgbV9iYWNr
ZW5kLmNsZWFyKCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMgYSAoY2lyY3Vs
YXIpIHJlZmVyZW5jZSBiYWNrIHRvIHVzLgorICAgIGVucXVldWVFdmVudChJREJUaW1lb3V0RXZl
bnQ6OmNyZWF0ZSgpKTsKIH0KIAogYm9vbCBJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCgpIGNv
bnN0CiB7Ci0gICAgLy8gV2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSB0cmFuc2FjdGlvbiBz
byB3ZSBjYW5ub3Qgc3VzcGVuZCBvdXIgb2JqZWN0LgotICAgIC8vIEluc3RlYWQsIHdlIHNpbXBs
eSBkb24ndCBhbGxvdyB0aGUgb3duZXIgcGFnZSB0byBnbyBpbnRvIHRoZSBiYWNrL2ZvcndhcmQg
Y2FjaGUuCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAhbV9iYWNrZW5kOwogfQogCiB2
b2lkIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkKIHsKKyAgICBBY3RpdmVET01PYmplY3Q6OnN0b3Ao
KTsgLy8gTnVsbGluZyBzY3JpcHRFeGVjdXRpb25Db250ZXh0IG5vdyBrZWVwcyB1cyBmcm9tIGZp
cmluZyBhbiBhYm9ydCBldmVudC4KKworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2VsZlJl
ZiA9IHRoaXM7CiAgICAgaWYgKG1fYmFja2VuZCkKICAgICAgICAgbV9iYWNrZW5kLT5hYm9ydCgp
OworICAgIG1fYmFja2VuZC5jbGVhcigpOwogfQogCi1FdmVudFRhcmdldERhdGEqIElEQlRyYW5z
YWN0aW9uOjpldmVudFRhcmdldERhdGEoKQordm9pZCBJREJUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2
ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIHJldHVybiAmbV9ldmVudFRhcmdl
dERhdGE7Ci19CisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJl
dHVybjsKIAotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZW5zdXJlRXZlbnRUYXJn
ZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworICAgIEFTU0VSVCht
X2JhY2tlbmQpOworICAgIG1fYmFja2VuZC5jbGVhcigpOworICAgIAorICAgIEFTU0VSVChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgRXZlbnRRdWV1ZSogZXZl
bnRRdWV1ZSA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KS0+ZXZlbnRRdWV1ZSgpOworICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CisgICAgZXZlbnRR
dWV1ZS0+ZW5xdWV1ZUV2ZW50KGV2ZW50KTsKIH0KIAotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25B
Ym9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0cmFuc2FjdGlvbikKLXsKLSAg
ICBBU1NFUlQobV9zZWxmUmVmKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYg
PSBtX3NlbGZSZWYucmVsZWFzZSgpOwotICAgIGRpc3BhdGNoRXZlbnQoSURCQWJvcnRFdmVudDo6
Y3JlYXRlKCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlVGltZXJGaXJl
ZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qIHRyYW5zYWN0aW9uKQorRXZlbnRUYXJnZXREYXRhKiBJ
REJUcmFuc2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICBBU1NFUlQobV9zZWxmUmVm
KTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSBtX3NlbGZSZWYucmVsZWFz
ZSgpOwotICAgIGRpc3BhdGNoRXZlbnQoSURCQ29tcGxldGVFdmVudDo6Y3JlYXRlKCkpOworICAg
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6
b25UaW1lb3V0VGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qIHRyYW5zYWN0aW9uKQor
RXZlbnRUYXJnZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkK
IHsKLSAgICBBU1NFUlQobV9zZWxmUmVmKTsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNl
bGZSZWYgPSBtX3NlbGZSZWYucmVsZWFzZSgpOwotICAgIGRpc3BhdGNoRXZlbnQoSURCVGltZW91
dEV2ZW50OjpjcmVhdGUoKSk7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oCmluZGV4IGQwYTlmMGZkNmYx
OTAwMjA2YTQ2NTFkNzdmNGVjM2U2MTYyZjlmYTQuLmMwZTVhYWM1Mjk3NjEwYTYzMjYxNmIyOWMz
NTVkMTI1NGNlNWMyNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgK
QEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSwxMCArNDQsNyBAQCBjbGFzcyBJREJP
YmplY3RTdG9yZTsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb24gOiBwdWJsaWMgSURCVHJhbnNhY3Rp
b25DYWxsYmFja3MsIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQotICAgIHsgCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb24oY29udGV4dCwgYmFja2VuZCwg
ZGIpKTsgCi0gICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlv
bigpOwogCiAgICAgZW51bSBNb2RlIHsKQEAgLTczLDkgKzY5LDkgQEAgcHVibGljOgogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIElEQlRyYW5zYWN0aW9uKiB0b0lEQlRyYW5zYWN0
aW9uKCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwogCkBAIC04NSwyNSArODEsMTkgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+LCBJREJEYXRhYmFzZSopOwogCisg
ICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworCiAgICAgLy8gRXZlbnRU
YXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CiAgICAg
dmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KICAgICB2aXJ0dWFs
IEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCi0gICAgdm9pZCBvbkFib3J0VGlt
ZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsKLSAgICB2b2lkIG9uQ29tcGxldGVUaW1l
ckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiopOwotICAgIHZvaWQgb25UaW1lb3V0VGltZXJG
aXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsKLQotICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiBtX2JhY2tlbmQ7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlPiBtX2RhdGFiYXNlOwogICAgIHVu
c2lnbmVkIHNob3J0IG1fbW9kZTsKIAotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBtX29uQWJv
cnRUaW1lcjsKLSAgICBUaW1lcjxJREJUcmFuc2FjdGlvbj4gbV9vbkNvbXBsZXRlVGltZXI7Ci0g
ICAgVGltZXI8SURCVHJhbnNhY3Rpb24+IG1fb25UaW1lb3V0VGltZXI7Ci0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiBtX3NlbGZSZWY7IC8vIFRoaXMgaXMgc2V0IHRvIHVzIGlmZiB0aGVyZSdz
IGFuIGV2ZW50IHBlbmRpbmcuCisgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRh
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81155</attachid>
            <date>2011-02-03 17:27:49 -0800</date>
            <delta_ts>2011-02-03 17:29:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53565-20110203172748.patch</filename>
            <type>text/plain</type>
            <size>22293</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZDQ3MmQ3ZjRhZjE0MTc2MWFlZWQ1M2UxMzU0ZmM3NzA4MzYzMzBmLi5h
MjM0ZjBlOGQ1MDU4YWVmYTU1NmVkN2I0YTAxYWE5NmZmYzUxYTNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTEtMDItMDMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3IgSURCUmVxdWVzdCBhbmQgSURCVHJhbnNhY3Rpb24gYSBiaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTY1CisKKyAgICAgICAgVGhlcmUg
d2VyZSBhIGxvdCBvZiBzdWJ0bGUgaXNzdWVzIHdpdGggdGhlIHdheSBJREJUcmFuc2FjdGlvbgor
ICAgICAgICBhbmQgSURCUmVxdWVzdCB1c2VkIHRvIGJlIHdyaXR0ZW4uIFRoaXMgY2xlYW5zIGEg
bG90IG9mIHRoZW0gdXAKKyAgICAgICAgYW5kIGxhcmdlbHkgc2ltcGxpZmllcyB0aGUgbG9naWMu
IFVzaW5nIEV2ZW50UXVldWUgcmF0aGVyIHRoYW4KKyAgICAgICAgdGltZXJzIGlzIG9uZSBleGFt
cGxlIG9mIHRoZSBzaW1wbGlmaWNhdGlvbi4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uVGltZW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAyLTAz
ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcXQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBjMThlZjEwMWYzZmU4NTY1Mzg5YWM2M2FiZTdi
MTEwNjQ2NjU0MWMxLi5mMzkzMjMwOGY0MDM1MWI4OWIzZGFhZWE0NDJhZmNiYTdjODY0NTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtMjU2NSw2ICsyNTY1LDcgQEAgc3ViIElzQWN0aXZlRG9tVHlwZQogICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJXb3JrZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFy
ZWRXb3JrZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJREJSZXF1ZXN0IjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCVHJhbnNhY3Rpb24iOwogICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJGaWxlUmVhZGVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRl
ciI7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAKaW5kZXggYTNkYWFl
NjRjOTMwN2ZjNDc5MTMxMDMyZDBjZmZlMzk1ZjQ4NTMwYi4uNWExYWJlOGFkMTVlYjVjZmRlYWU0
YzJiYjdjZTE0NWIwMDI1YjYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmNwcApAQCAtNTgs
NyArNTgsNyBAQCBFdmVudFF1ZXVlOjp+RXZlbnRRdWV1ZSgpCiAKIHZvaWQgRXZlbnRRdWV1ZTo6
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpIHx8IGV2ZW50LT50YXJnZXQoKS0+dG9ET01XaW5kb3coKSk7
CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5k
KGV2ZW50KTsKICAgICAKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkp
CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiBldmVudCkKICAgICBlbHNlIGlmIChldmVudFRhcmdldC0+dG9ET01XaW5kb3co
KSkKICAgICAgICAgZXZlbnRUYXJnZXQtPnRvRE9NV2luZG93KCktPmRpc3BhdGNoRXZlbnQoZXZl
bnQsIDApOwogICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGV2ZW50VGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3IuY3BwCmluZGV4IDQ0NGMxMDlhMWQ1NjU4NGEyMzQ2NTk0ZDY1YjE3NTE5
YzI4NWI0NzcuLjRiZTZmNGE1NTI0ODU5NTQ2ODNiOTE2ODU3N2EyNDJiMzEyOTJjZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBJREJD
dXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgaWYgKG1fcmVxdWVzdC0+cmVzZXRSZWFkeVN0YXRlKG1fdHJhbnNhY3Rp
b24uZ2V0KCkpKQogICAgICAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3Jl
cXVlc3QsIGVjKTsKICAgICBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiB9CiAKIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlJlcXVlc3QuY3BwCmluZGV4IDE1Nzg0NmQ5ZTgxYjdkNmRhMWE0Y2NmNGY4YWQ4MmYw
ZDZhZTNiYTMuLmEzYTA0ZjI2ZmYwYTkyMTgxOWQzMjY5YTE0NDQzNmJiYTIyOTI0NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcApAQCAtMzEsMTAgKzMxLDExIEBACiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRR
dWV1ZS5oIgogI2luY2x1ZGUgIklEQkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgi
CiAjaW5jbHVkZSAiSURCSW5kZXguaCIKQEAgLTQyLDE1ICs0MywxOCBAQAogI2luY2x1ZGUgIklE
Qk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5o
IgogI2luY2x1ZGUgIklEQlN1Y2Nlc3NFdmVudC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQlJlcXVlc3Q6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250
ZXh0LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7Cit9CisKIElEQlJlcXVlc3Q6OklEQlJlcXVlc3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJj
ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKICAgICA6IEFj
dGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAg
ICwgbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fdGltZXIodGhpcywgJklEQlJl
cXVlc3Q6OnRpbWVyRmlyZWQpCiAgICAgLCBtX3JlYWR5U3RhdGUoTE9BRElORykKIHsKICAgICBp
ZiAobV90cmFuc2FjdGlvbikKQEAgLTYzLDQ3ICs2Nyw1MyBAQCBJREJSZXF1ZXN0Ojp+SURCUmVx
dWVzdCgpCiAKIGJvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0
ZSA9PSBET05FKTsKLSAgICBtX3JlYWR5U3RhdGUgPSBMT0FESU5HOwotICAgIEFTU0VSVCghbV90
cmFuc2FjdGlvbik7CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSAhPSBET05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBt
X3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CisgICAgbV9yZWFkeVN0YXRlID0gTE9BRElORzsK
KwogICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2Fj
dGlvbihtX3RyYW5zYWN0aW9uLmdldCgpKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikK
IHsKLSAgICBzY2hlZHVsZUV2ZW50KDAsIGVycm9yKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCRXJy
b3JFdmVudDo6Y3JlYXRlKG1fc291cmNlLCAqZXJyb3IpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0
OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5k
KQogewotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yOjpjcmVhdGUo
YmFja2VuZCwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKKyAgICBlbnF1ZXVlRXZl
bnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKElEQkN1
cnNvcjo6Y3JlYXRlKGJhY2tlbmQsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSkpOwogfQog
CiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZT4gYmFja2VuZCkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRl
KElEQkRhdGFiYXNlOjpjcmVhdGUoYmFja2VuZCkpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURC
U3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKElEQkRhdGFiYXNl
OjpjcmVhdGUoYmFja2VuZCkpKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewotICAgIHNjaGVk
dWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURCSW5kZXg6OmNyZWF0ZShiYWNrZW5kLCBtX3RyYW5z
YWN0aW9uLmdldCgpKSksIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTog
VGhpcyBtZXRob2Qgc2hvdWxkIGdvIGF3YXkuCiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8SURCS2V5PiBpZGJLZXkpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJB
bnk6OmNyZWF0ZShpZGJLZXkpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50
OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKGlkYktleSkpKTsKIH0KIAogdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IGJhY2tlbmQpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdv
IGF3YXkgb25jZSBjcmVhdGVPYmplY3RTdG9yZSBpcyBzeW5jLgotICAgIHNjaGVkdWxlRXZlbnQo
SURCQW55OjpjcmVhdGUoSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShiYWNrZW5kLCBtX3RyYW5zYWN0
aW9uLmdldCgpKSksIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogVGhp
cyBtZXRob2Qgc2hvdWxkIGdvIGF3YXkuCiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNz
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kKQog
eworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kID0gcHJw
QmFja2VuZDsKICAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSBzZXRWZXJzaW9uIHdoaWNoIHdp
bGwgYWx3YXlzIGhhdmUgYSBzb3VyY2UgdGhhdCdzIGFuIElEQkRhdGFiYXNlLgogICAgIG1fc291
cmNlLT5pZGJEYXRhYmFzZSgpLT5zZXRTZXRWZXJzaW9uVHJhbnNhY3Rpb24oYmFja2VuZC5nZXQo
KSk7CkBAIC0xMTEsMTIgKzEyMSwxMiBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZAogICAgIGJh
Y2tlbmQtPnNldENhbGxiYWNrcyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlvbiA9
IGJhY2tlbmQ7CiAgICAgSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGlu
Z1RyYW5zYWN0aW9uKG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHNjaGVkdWxlRXZlbnQoSURC
QW55OjpjcmVhdGUoZnJvbnRlbmQucmVsZWFzZSgpKSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElE
QlN1Y2Nlc3NFdmVudDo6Y3JlYXRlKG1fc291cmNlLCBJREJBbnk6OmNyZWF0ZShmcm9udGVuZC5y
ZWxlYXNlKCkpKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7Ci0gICAgc2No
ZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpLCAwKTsKKyAg
ICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6
Y3JlYXRlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkpKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogSURCUmVxdWVzdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0xMjQs
NzYgKzEzNCwzOSBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6Y2FuU3VzcGVuZCgp
IGNvbnN0Citib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4g
ZXZlbnQpCiB7Ci0gICAgLy8gSURCVHJhbnNhY3Rpb25zIGNhbm5vdCBiZSBzdXNwZW5kZWQgYXQg
dGhlIG1vbWVudC4gV2UgdGhlcmVmb3JlCi0gICAgLy8gZGlzYWxsb3cgdGhlIGJhY2svZm9yd2Fy
ZCBjYWNoZSBmb3IgcGFnZXMgdGhhdCB1c2UgSW5kZXhlZERhdGFiYXNlLgotICAgIHJldHVybiBm
YWxzZTsKLX0KKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7CisgICAgbV9yZWFkeVN0
YXRlID0gRE9ORTsKIAotRXZlbnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERh
dGEoKQotewotICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7Ci19CisgICAgYm9vbCByZXQg
PSBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CiAKLUV2ZW50VGFyZ2V0RGF0YSog
SURCUmVxdWVzdDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZl
bnRUYXJnZXREYXRhOworICAgIGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0
aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKKworICAgIHJldHVybiByZXQ7CiB9CiAKLXZv
aWQgSURCUmVxdWVzdDo6dGltZXJGaXJlZChUaW1lcjxJREJSZXF1ZXN0PiopCit2b2lkIElEQlJl
cXVlc3Q6OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICBBU1NF
UlQobV9zZWxmUmVmKTsKLSAgICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzLnNpemUoKSk7Ci0gICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgdGhlIHN0b3AgZXZlbnQgYW5kIHN0b3AgYW55IHRp
bWVycyB3aGVuIHdlIHNlZSBpdC4gV2UgY2FuIHRoZW4gYXNzZXJ0IGhlcmUgdGhhdCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0IGlzIG5vbi1udWxsLgotCi0gICAgLy8gV2UgbmVlZCB0byBrZWVwIHNl
bGYtcmVmZXJlbmNpbmcgb3Vyc2VsZiwgb3RoZXJ3aXNlIGl0J3MgcG9zc2libGUgd2UnbGwgYmUg
ZGVsZXRlZC4KLSAgICAvLyBCdXQgaW4gc29tZSBjYXNlcywgc3VzcGVuZCgpIGNvdWxkIGJlIGNh
bGxlZCB3aGlsZSB3ZSdyZSBkaXNwYXRjaGluZyBhbiBldmVudCwgc28gd2UKLSAgICAvLyBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGF0IHJlc3VtZSgpIGRvZXNuJ3QgcmUtc3RhcnQgdGhlIHRpbWVyIGJh
c2VkIG9uIG1fc2VsZlJlZiBiZWluZyBzZXQuCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHNlbGZS
ZWYgPSBtX3NlbGZSZWYucmVsZWFzZSgpOwotCi0gICAgLy8gcmVhZHlTdGF0ZVJlc2V0IGNhbiBi
ZSBjYWxsZWQgc3luY2hyb25vdXNseSB3aGlsZSB3ZSdyZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQu
Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9uOwotICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKLQotICAgIFZlY3Rv
cjxQZW5kaW5nRXZlbnQ+IHBlbmRpbmdFdmVudHM7Ci0gICAgcGVuZGluZ0V2ZW50cy5zd2FwKG1f
cGVuZGluZ0V2ZW50cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nRXZlbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIEl0J3MgcG9zc2libGUgd2UndmUgbmF2aWdhdGVk
IGluIHdoaWNoIGNhc2Ugd2UnbGwgY3Jhc2guCi0gICAgICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PCBET05FKTsKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGlmIChwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCk7Ci0gICAgICAgICAgICBkaXNw
YXRjaEV2ZW50KElEQkVycm9yRXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgKnBlbmRpbmdFdmVudHNb
aV0ubV9lcnJvcikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHBlbmRp
bmdFdmVudHNbaV0ubV9yZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6OlVuZGVmaW5lZFR5cGUpOwot
ICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChJREJTdWNjZXNzRXZlbnQ6OmNyZWF0ZShtX3NvdXJj
ZSwgcGVuZGluZ0V2ZW50c1tpXS5tX3Jlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICh0cmFuc2FjdGlvbikgewotICAgICAgICAvLyBOb3cgdGhhdCB3ZSBwcm9jZXNzZWQgYWxsIHBl
bmRpbmcgZXZlbnRzLCBsZXQgdGhlIHRyYW5zYWN0aW9uIG1vbml0b3IgY2hlY2sgaWYKLSAgICAg
ICAgLy8gaXQgY2FuIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBvciBpZiB0aGVyZSdz
IGFueXRoaW5nIG5ldyBwZW5kaW5nLgotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSB3b3Jr
ZXJzIGNhc2UuCi0gICAgICAgIHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsK
LSAgICB9CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgp
KTsKKyAgICBFdmVudFF1ZXVlKiBldmVudFF1ZXVlID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRh
cmdldCh0aGlzKTsKKyAgICBldmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCi12
b2lkIElEQlJlcXVlc3Q6OnNjaGVkdWxlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdCwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKK0V2ZW50VGFyZ2V0RGF0YSogSURC
UmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKCkKIHsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwg
RE9ORSk7Ci0gICAgQVNTRVJUKCEhbV9zZWxmUmVmID09IG1fdGltZXIuaXNBY3RpdmUoKSk7Ci0K
LSAgICBQZW5kaW5nRXZlbnQgcGVuZGluZ0V2ZW50OwotICAgIHBlbmRpbmdFdmVudC5tX3Jlc3Vs
dCA9IHJlc3VsdDsKLSAgICBwZW5kaW5nRXZlbnQubV9lcnJvciA9IGVycm9yOwotICAgIG1fcGVu
ZGluZ0V2ZW50cy5hcHBlbmQocGVuZGluZ0V2ZW50KTsKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOworfQogCi0gICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKLSAgICBpZiAoIW1fdGltZXIu
aXNBY3RpdmUoKSkgewotICAgICAgICBtX3NlbGZSZWYgPSB0aGlzOwotICAgICAgICBtX3RpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9CitFdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmVu
c3VyZUV2ZW50VGFyZ2V0RGF0YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3Qu
aAppbmRleCA1NDg4MDBkYmQyOWNjZmI0YjE4NjRmYzBjM2VmNzAxNzMxY2I5MjlmLi5mMzliOGY2
YWMxN2VmYzc4MGQ0MTliNmJhODc1ZjFmZGEyNjIzNjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlJlcXVlc3QuaApAQCAtMzcsOCArMzcsNiBAQAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAj
aW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAi
VGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDYsNyArNDQsNyBAQCBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7
CiAKIGNsYXNzIElEQlJlcXVlc3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRU
YXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkFueT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0
LCBzb3VyY2UsIHRyYW5zYWN0aW9uKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBz
b3VyY2UsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgfklE
QlJlcXVlc3QoKTsKIAogICAgIC8vIERlZmluZWQgaW4gdGhlIElETApAQCAtNzIsMTAgKzcwLDkg
QEAgcHVibGljOgogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIElEQlJlcXVlc3Qq
IHRvSURCUmVxdWVzdCgpIHsgcmV0dXJuIHRoaXM7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVj
dAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wg
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KIAogICAg
IHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8SURCQ2FsbGJhY2tzPjo6cmVmOwogICAgIHVzaW5nIFRo
cmVhZFNhZmVTaGFyZWQ8SURCQ2FsbGJhY2tzPjo6ZGVyZWY7CkBAIC04Myw4ICs4MCw3IEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbik7CiAKLSAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4q
KTsKLSAgICB2b2lkIHNjaGVkdWxlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdCwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1Jl
ZlB0cjxFdmVudD4pOwogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVm
RXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CkBAIC05NSwxNyArOTEsOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IG1fdHJhbnNhY3Rpb247CiAKLSAgICBzdHJ1Y3QgUGVuZGluZ0V2ZW50IHsK
LSAgICAgICAgUmVmUHRyPElEQkFueT4gbV9yZXN1bHQ7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRh
YmFzZUVycm9yPiBtX2Vycm9yOwotICAgIH07Ci0gICAgVmVjdG9yPFBlbmRpbmdFdmVudD4gbV9w
ZW5kaW5nRXZlbnRzOwotCi0gICAgLy8gVXNlZCB0byBmaXJlIGV2ZW50cyBhc3luY2hyb25vdXNs
eS4KLSAgICBUaW1lcjxJREJSZXF1ZXN0PiBtX3RpbWVyOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiBtX3NlbGZSZWY7IC8vIFRoaXMgaXMgc2V0IHRvIHVzIGlmZiB0aGVyZSdzIGFuIGV2ZW50IHBl
bmRpbmcuCi0KICAgICBSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKKwogICAgIEV2ZW50VGFyZ2V0
RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAKaW5kZXggZjY5MDJkYTY0Y2U5OGJlODMxMzcxYjcxM2Q0NmY5YzE1NGI1
Y2MwYi4uNmFjMzFkMmE2MGQyNDM3YmIwNDY1ZTEyZDlhOTA3MDkzOWEzNDNlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTI4LDggKzI4LDkgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAi
RXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUgIklEQkFib3J0RXZlbnQuaCIKICNpbmNsdWRlICJJREJD
b21wbGV0ZUV2ZW50LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKQEAgLTM5LDE4ICs0MCwx
OSBAQAogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1
ZGUgIklEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCIKICNpbmNsdWRlICJJREJUaW1lb3V0
RXZlbnQuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246
OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQoreyAK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uKGNvbnRleHQsIGJhY2tlbmQs
IGRiKSk7Cit9CisKIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNv
bnRleHQsIHRoaXMpCiAgICAgLCBtX2JhY2tlbmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2Uo
ZGIpCiAgICAgLCBtX21vZGUobV9iYWNrZW5kLT5tb2RlKCkpCi0gICAgLCBtX29uQWJvcnRUaW1l
cih0aGlzLCAmSURCVHJhbnNhY3Rpb246Om9uQWJvcnRUaW1lckZpcmVkKQotICAgICwgbV9vbkNv
bXBsZXRlVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlVGltZXJGaXJlZCkK
LSAgICAsIG1fb25UaW1lb3V0VGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uOjpvblRpbWVvdXRU
aW1lckZpcmVkKQogewogICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRp
bmdUcmFuc2FjdGlvbihtX2JhY2tlbmQuZ2V0KCkpOwogfQpAQCAtNzEsNiArNzMsNyBAQCBJREJE
YXRhYmFzZSogSURCVHJhbnNhY3Rpb246OmRiKCkKIAogUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CisgICAgLy8gRklYTUU6IEl0J2QgYmUgYmV0dGVyIChiZWNhdXNlIGl0
J3MgbW9yZSBkZXRlcm1pbmlzdGljKSBpZiB3ZSBkaWRuJ3Qgc3RhcnQgdGhyb3dpbmcgdGhpcyB1
bnRpbCB0aGUgY29tcGxldGUgb3IgYWJvcnQgZXZlbnQgZmlyZXMuCiAgICAgaWYgKCFtX2JhY2tl
bmQpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJS
OwogICAgICAgICByZXR1cm4gMDsKQEAgLTg2LDYgKzg5LDcgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXAKIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7CiAgICAgaWYgKG1fYmFja2VuZCkKICAgICAgICAg
bV9iYWNrZW5kLT5hYm9ydCgpOwogfQpAQCAtOTcsNzggKzEwMSw1NiBAQCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBJREJUcmFuc2FjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQWJvcnQoKQogewotICAgIEFTU0VSVCghbV9vbkFi
b3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uQ29tcGxldGVUaW1lci5pc0Fj
dGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25UaW1lb3V0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAg
bV9zZWxmUmVmID0gdGhpczsKLSAgICBtX29uQWJvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0g
ICAgbV9iYWNrZW5kLmNsZWFyKCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMg
YSAoY2lyY3VsYXIpIHJlZmVyZW5jZSBiYWNrIHRvIHVzLgorICAgIGVucXVldWVFdmVudChJREJB
Ym9ydEV2ZW50OjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxl
dGUoKQogewotICAgIEFTU0VSVCghbV9vbkFib3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNT
RVJUKCFtX29uQ29tcGxldGVUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25UaW1l
b3V0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9zZWxmUmVmID0gdGhpczsKLSAgICBtX29uQ29t
cGxldGVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgbV9iYWNrZW5kLmNsZWFyKCk7IC8vIFJl
bGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMgYSAoY2lyY3VsYXIpIHJlZmVyZW5jZSBiYWNr
IHRvIHVzLgorICAgIGVucXVldWVFdmVudChJREJDb21wbGV0ZUV2ZW50OjpjcmVhdGUoKSk7CiB9
CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uVGltZW91dCgpCiB7Ci0gICAgQVNTRVJUKCFtX29u
QWJvcnRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25Db21wbGV0ZVRpbWVyLmlz
QWN0aXZlKCkpOwotICAgIEFTU0VSVCghbV9vblRpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKTsKLSAg
ICBtX3NlbGZSZWYgPSB0aGlzOwotICAgIG1fb25UaW1lb3V0VGltZXIuc3RhcnRPbmVTaG90KDAp
OwotICAgIG1fYmFja2VuZC5jbGVhcigpOyAvLyBSZWxlYXNlIHRoZSBiYWNrZW5kIGFzIGl0IGhv
bGRzIGEgKGNpcmN1bGFyKSByZWZlcmVuY2UgYmFjayB0byB1cy4KKyAgICBlbnF1ZXVlRXZlbnQo
SURCVGltZW91dEV2ZW50OjpjcmVhdGUoKSk7CiB9CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246OmNh
blN1c3BlbmQoKSBjb25zdAogewotICAgIC8vIFdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEg
dHJhbnNhY3Rpb24gc28gd2UgY2Fubm90IHN1c3BlbmQgb3VyIG9iamVjdC4KLSAgICAvLyBJbnN0
ZWFkLCB3ZSBzaW1wbHkgZG9uJ3QgYWxsb3cgdGhlIG93bmVyIHBhZ2UgdG8gZ28gaW50byB0aGUg
YmFjay9mb3J3YXJkIGNhY2hlLgotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1fYmFj
a2VuZDsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29udGV4dERlc3Ryb3llZCgpCiB7CiAg
ICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250ZXh0RGVzdHJveWVkKCk7CisKKyAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAgICAg
IG1fYmFja2VuZC0+YWJvcnQoKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKIH0KIAotRXZlbnRU
YXJnZXREYXRhKiBJREJUcmFuc2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKK3ZvaWQgSURCVHJh
bnNhY3Rpb246OmVucXVldWVFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICBy
ZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwotfQorICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm47CiAKLUV2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rp
b246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0
RGF0YTsKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKKyAg
ICAKKyAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOwor
ICAgIEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSktPmV2ZW50UXVldWUoKTsKKyAgICBldmVudC0+c2V0VGFyZ2V0
KHRoaXMpOworICAgIGV2ZW50UXVldWUtPmVucXVldWVFdmVudChldmVudCk7CiB9CiAKLXZvaWQg
SURCVHJhbnNhY3Rpb246Om9uQWJvcnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiog
dHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLSAgICBkaXNwYXRjaEV2
ZW50KElEQkFib3J0RXZlbnQ6OmNyZWF0ZSgpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6
b25Db21wbGV0ZVRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0cmFuc2FjdGlvbikK
K0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0g
ICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVm
ID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLSAgICBkaXNwYXRjaEV2ZW50KElEQkNvbXBsZXRlRXZl
bnQ6OmNyZWF0ZSgpKTsKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCi0KLXZv
aWQgSURCVHJhbnNhY3Rpb246Om9uVGltZW91dFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rp
b24+KiB0cmFuc2FjdGlvbikKK0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3Vy
ZUV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0gICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLSAgICBkaXNw
YXRjaEV2ZW50KElEQlRpbWVvdXRFdmVudDo6Y3JlYXRlKCkpOworICAgIHJldHVybiAmbV9ldmVu
dFRhcmdldERhdGE7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24u
aAppbmRleCAyOWUzMGZhNGVhNWFjMTI0YjZmNTg2ODJlZmVlZGE5YTk2YTFjNzAyLi4yMTVjMmIx
YzIwYzUxZTNkYjkwYmZmZWFhMzc0OWNmOGZmNDQxZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5oCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiRXZlbnRUYXJn
ZXQuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNs
dWRlICJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTAg
KzQ0LDcgQEAgY2xhc3MgSURCT2JqZWN0U3RvcmU7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uIDog
cHVibGljIElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFiYXNl
KiBkYikKLSAgICB7IAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9u
KGNvbnRleHQsIGJhY2tlbmQsIGRiKSk7IAotICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7CiAgICAgdmly
dHVhbCB+SURCVHJhbnNhY3Rpb24oKTsKIAogICAgIGVudW0gTW9kZSB7CkBAIC03Myw5ICs2OSw5
IEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBJREJUcmFuc2Fj
dGlvbiogdG9JREJUcmFuc2FjdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAog
ICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5T
dXNwZW5kKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKIApA
QCAtODUsMjUgKzgxLDE5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiwgSURCRGF0YWJhc2UqKTsKIAorICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+KTsKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgeyBkZXJlZigpOyB9CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFy
Z2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdl
dERhdGEoKTsKIAotICAgIHZvaWQgb25BYm9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rp
b24+Kik7Ci0gICAgdm9pZCBvbkNvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlv
bj4qKTsKLSAgICB2b2lkIG9uVGltZW91dFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+
Kik7Ci0KLSAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJ
REJEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICB1bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAKLSAg
ICBUaW1lcjxJREJUcmFuc2FjdGlvbj4gbV9vbkFib3J0VGltZXI7Ci0gICAgVGltZXI8SURCVHJh
bnNhY3Rpb24+IG1fb25Db21wbGV0ZVRpbWVyOwotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBt
X29uVGltZW91dFRpbWVyOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV9zZWxmUmVmOyAv
LyBUaGlzIGlzIHNldCB0byB1cyBpZmYgdGhlcmUncyBhbiBldmVudCBwZW5kaW5nLgorICAgIEV2
ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81156</attachid>
            <date>2011-02-03 17:29:53 -0800</date>
            <delta_ts>2011-02-04 11:32:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53565-20110203172952.patch</filename>
            <type>text/plain</type>
            <size>22503</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZDQ3MmQ3ZjRhZjE0MTc2MWFlZWQ1M2UxMzU0ZmM3NzA4MzYzMzBmLi5h
MjM0ZjBlOGQ1MDU4YWVmYTU1NmVkN2I0YTAxYWE5NmZmYzUxYTNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTEtMDItMDMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3IgSURCUmVxdWVzdCBhbmQgSURCVHJhbnNhY3Rpb24gYSBiaXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzNTY1CisKKyAgICAgICAgVGhlcmUg
d2VyZSBhIGxvdCBvZiBzdWJ0bGUgaXNzdWVzIHdpdGggdGhlIHdheSBJREJUcmFuc2FjdGlvbgor
ICAgICAgICBhbmQgSURCUmVxdWVzdCB1c2VkIHRvIGJlIHdyaXR0ZW4uIFRoaXMgY2xlYW5zIGEg
bG90IG9mIHRoZW0gdXAKKyAgICAgICAgYW5kIGxhcmdlbHkgc2ltcGxpZmllcyB0aGUgbG9naWMu
IFVzaW5nIEV2ZW50UXVldWUgcmF0aGVyIHRoYW4KKyAgICAgICAgdGltZXJzIGlzIG9uZSBleGFt
cGxlIG9mIHRoZSBzaW1wbGlmaWNhdGlvbi4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGRvbS9FdmVudFF1ZXVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50UXVldWU6OmVucXVldWVFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFF1ZXVlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6SURCUmVxdWVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjplbnF1ZXVlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQWJvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9uVGltZW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbjo6Y2FuU3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpldmVudFRhcmdldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSk6CisgICAgICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAyLTAz
ICBBYmhpc2hlayBBcnlhICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcXQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBjMThlZjEwMWYzZmU4NTY1Mzg5YWM2M2FiZTdi
MTEwNjQ2NjU0MWMxLi5mMzkzMjMwOGY0MDM1MWI4OWIzZGFhZWE0NDJhZmNiYTdjODY0NTlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtMjU2NSw2ICsyNTY1LDcgQEAgc3ViIElzQWN0aXZlRG9tVHlwZQogICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJXb3JrZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTaGFy
ZWRXb3JrZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJREJSZXF1ZXN0IjsKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCVHJhbnNhY3Rpb24iOwogICAgIHJldHVybiAxIGlmICR0
eXBlIGVxICJGaWxlUmVhZGVyIjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRl
ciI7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRR
dWV1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRRdWV1ZS5jcHAKaW5kZXggYTNkYWFl
NjRjOTMwN2ZjNDc5MTMxMDMyZDBjZmZlMzk1ZjQ4NTMwYi4uM2Y4MTk0ZjlmNTk4OWY3ZTBkMzE2
OTUxMGZiZjQ3Y2M3YzFkYzY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
UXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFF1ZXVlLmNwcApAQCAtNTgs
NyArNTgsNyBAQCBFdmVudFF1ZXVlOjp+RXZlbnRRdWV1ZSgpCiAKIHZvaWQgRXZlbnRRdWV1ZTo6
ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVChldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpIHx8IGV2ZW50LT50YXJnZXQoKS0+dG9ET01XaW5kb3coKSk7
CisgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQoKSk7CiAgICAgbV9xdWV1ZWRFdmVudHMuYXBwZW5k
KGV2ZW50KTsKICAgICAKICAgICBpZiAoIW1fcGVuZGluZ0V2ZW50VGltZXItPmlzQWN0aXZlKCkp
CkBAIC05MywxMiArOTMsMTAgQEAgdm9pZCBFdmVudFF1ZXVlOjpwZW5kaW5nRXZlbnRUaW1lckZp
cmVkKCkKIHZvaWQgRXZlbnRRdWV1ZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCkKIHsKICAgICBFdmVudFRhcmdldCogZXZlbnRUYXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7
Ci0gICAgaWYgKGV2ZW50VGFyZ2V0LT50b05vZGUoKSkKLSAgICAgICAgZXZlbnRUYXJnZXQtPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOwotICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LT50b0RPTVdpbmRv
dygpKQorICAgIGlmIChldmVudFRhcmdldC0+dG9ET01XaW5kb3coKSkKICAgICAgICAgZXZlbnRU
YXJnZXQtPnRvRE9NV2luZG93KCktPmRpc3BhdGNoRXZlbnQoZXZlbnQsIDApOwogICAgIGVsc2UK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGV2ZW50VGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KGV2ZW50KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuY3Bw
CmluZGV4IDQ0NGMxMDlhMWQ1NjU4NGEyMzQ2NTk0ZDY1YjE3NTE5YzI4NWI0NzcuLjRiZTZmNGE1
NTI0ODU5NTQ2ODNiOTE2ODU3N2EyNDJiMzEyOTJjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYg
KG1fcmVxdWVzdC0+cmVzZXRSZWFkeVN0YXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKQogICAgICAg
ICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsKICAgICBl
bHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3Bw
CmluZGV4IDE1Nzg0NmQ5ZTgxYjdkNmRhMWE0Y2NmNGY4YWQ4MmYwZDZhZTNiYTMuLmEzYTA0ZjI2
ZmYwYTkyMTgxOWQzMjY5YTE0NDQzNmJiYTIyOTI0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJSZXF1ZXN0LmNwcApAQCAtMzEsMTAgKzMxLDExIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAotI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgogI2luY2x1ZGUg
IklEQkN1cnNvci5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCSW5k
ZXguaCIKQEAgLTQyLDE1ICs0MywxOCBAQAogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAj
aW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgogI2luY2x1ZGUgIklEQlN1
Y2Nlc3NFdmVudC5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQlJlcXVlc3Q6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFueT4g
c291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRyYW5z
YWN0aW9uKSk7Cit9CisKIElEQlJlcXVlc3Q6OklEQlJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJjZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKICAgICA6IEFjdGl2ZURPTU9iamVjdChjb250
ZXh0LCB0aGlzKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICwgbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKLSAgICAsIG1fdGltZXIodGhpcywgJklEQlJlcXVlc3Q6OnRpbWVyRmlyZWQp
CiAgICAgLCBtX3JlYWR5U3RhdGUoTE9BRElORykKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbikK
QEAgLTYzLDQ3ICs2Nyw1MyBAQCBJREJSZXF1ZXN0Ojp+SURCUmVxdWVzdCgpCiAKIGJvb2wgSURC
UmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKLSAgICBt
X3JlYWR5U3RhdGUgPSBMT0FESU5HOwotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbik7CisgICAg
QVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAh
PSBET05FKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBtX3RyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb247CisgICAgbV9yZWFkeVN0YXRlID0gTE9BRElORzsKKwogICAgIElEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3I6OnJlbW92ZVBlbmRpbmdUcmFuc2FjdGlvbihtX3RyYW5zYWN0aW9u
LmdldCgpKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6Om9uRXJy
b3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKIHsKLSAgICBzY2hlZHVsZUV2
ZW50KDAsIGVycm9yKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCRXJyb3JFdmVudDo6Y3JlYXRlKG1f
c291cmNlLCAqZXJyb3IpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewotICAgIHNjaGVkdWxl
RXZlbnQoSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yOjpjcmVhdGUoYmFja2VuZCwgdGhpcywgbV90
cmFuc2FjdGlvbi5nZXQoKSkpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50
OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKElEQkN1cnNvcjo6Y3JlYXRlKGJhY2tl
bmQsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSkpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZT4gYmFja2Vu
ZCkKIHsKLSAgICBzY2hlZHVsZUV2ZW50KElEQkFueTo6Y3JlYXRlKElEQkRhdGFiYXNlOjpjcmVh
dGUoYmFja2VuZCkpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVh
dGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKElEQkRhdGFiYXNlOjpjcmVhdGUoYmFja2VuZCkp
KSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55Ojpj
cmVhdGUoSURCSW5kZXg6OmNyZWF0ZShiYWNrZW5kLCBtX3RyYW5zYWN0aW9uLmdldCgpKSksIDAp
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxk
IGdvIGF3YXkuCiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURC
S2V5PiBpZGJLZXkpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6OmNyZWF0ZShpZGJLZXkp
LCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURCU3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2Us
IElEQkFueTo6Y3JlYXRlKGlkYktleSkpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7
Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdvIGF3YXkgb25jZSBjcmVhdGVP
YmplY3RTdG9yZSBpcyBzeW5jLgotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoSURC
T2JqZWN0U3RvcmU6OmNyZWF0ZShiYWNrZW5kLCBtX3RyYW5zYWN0aW9uLmdldCgpKSksIDApOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogVGhpcyBtZXRob2Qgc2hvdWxkIGdv
IGF3YXkuCiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBwcnBCYWNrZW5kKQogeworICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKICAgICAvLyBU
aGlzIGlzIG9ubHkgdXNlZCBieSBzZXRWZXJzaW9uIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUgYSBz
b3VyY2UgdGhhdCdzIGFuIElEQkRhdGFiYXNlLgogICAgIG1fc291cmNlLT5pZGJEYXRhYmFzZSgp
LT5zZXRTZXRWZXJzaW9uVHJhbnNhY3Rpb24oYmFja2VuZC5nZXQoKSk7CkBAIC0xMTEsMTIgKzEy
MSwxMiBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZAogICAgIGJhY2tlbmQtPnNldENhbGxiYWNr
cyhmcm9udGVuZC5nZXQoKSk7CiAgICAgbV90cmFuc2FjdGlvbiA9IGJhY2tlbmQ7CiAgICAgSURC
UGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvcjo6cmVtb3ZlUGVuZGluZ1RyYW5zYWN0aW9uKG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwotICAgIHNjaGVkdWxlRXZlbnQoSURCQW55OjpjcmVhdGUoZnJvbnRl
bmQucmVsZWFzZSgpKSwgMCk7CisgICAgZW5xdWV1ZUV2ZW50KElEQlN1Y2Nlc3NFdmVudDo6Y3Jl
YXRlKG1fc291cmNlLCBJREJBbnk6OmNyZWF0ZShmcm9udGVuZC5yZWxlYXNlKCkpKSk7CiB9CiAK
IHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7Ci0gICAgc2NoZWR1bGVFdmVudChJREJBbnk6
OmNyZWF0ZShzZXJpYWxpemVkU2NyaXB0VmFsdWUpLCAwKTsKKyAgICBlbnF1ZXVlRXZlbnQoSURC
U3VjY2Vzc0V2ZW50OjpjcmVhdGUobV9zb3VyY2UsIElEQkFueTo6Y3JlYXRlKHNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSkpKTsKIH0KIAogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSURCUmVxdWVzdDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkBAIC0xMjQsNzYgKzEzNCwzOSBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6Y2FuU3VzcGVuZCgpIGNvbnN0Citib29sIElEQlJl
cXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiB7Ci0gICAgLy8g
SURCVHJhbnNhY3Rpb25zIGNhbm5vdCBiZSBzdXNwZW5kZWQgYXQgdGhlIG1vbWVudC4gV2UgdGhl
cmVmb3JlCi0gICAgLy8gZGlzYWxsb3cgdGhlIGJhY2svZm9yd2FyZCBjYWNoZSBmb3IgcGFnZXMg
dGhhdCB1c2UgSW5kZXhlZERhdGFiYXNlLgotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBBU1NF
UlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7CisgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsKIAotRXZl
bnRUYXJnZXREYXRhKiBJREJSZXF1ZXN0OjpldmVudFRhcmdldERhdGEoKQotewotICAgIHJldHVy
biAmbV9ldmVudFRhcmdldERhdGE7Ci19CisgICAgYm9vbCByZXQgPSBFdmVudFRhcmdldDo6ZGlz
cGF0Y2hFdmVudChldmVudCk7CiAKLUV2ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVzdDo6ZW5zdXJl
RXZlbnRUYXJnZXREYXRhKCkKLXsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworICAg
IGlmIChtX3RyYW5zYWN0aW9uKQorICAgICAgICBtX3RyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRh
c2tFdmVudHMoKTsKKworICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6dGlt
ZXJGaXJlZChUaW1lcjxJREJSZXF1ZXN0PiopCit2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICBBU1NFUlQobV9zZWxmUmVmKTsKLSAg
ICBBU1NFUlQobV9wZW5kaW5nRXZlbnRzLnNpemUoKSk7Ci0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoYW5kbGUgdGhlIHN0b3AgZXZlbnQgYW5kIHN0b3AgYW55IHRpbWVycyB3aGVuIHdlIHNlZSBp
dC4gV2UgY2FuIHRoZW4gYXNzZXJ0IGhlcmUgdGhhdCBzY3JpcHRFeGVjdXRpb25Db250ZXh0IGlz
IG5vbi1udWxsLgotCi0gICAgLy8gV2UgbmVlZCB0byBrZWVwIHNlbGYtcmVmZXJlbmNpbmcgb3Vy
c2VsZiwgb3RoZXJ3aXNlIGl0J3MgcG9zc2libGUgd2UnbGwgYmUgZGVsZXRlZC4KLSAgICAvLyBC
dXQgaW4gc29tZSBjYXNlcywgc3VzcGVuZCgpIGNvdWxkIGJlIGNhbGxlZCB3aGlsZSB3ZSdyZSBk
aXNwYXRjaGluZyBhbiBldmVudCwgc28gd2UKLSAgICAvLyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0
IHJlc3VtZSgpIGRvZXNuJ3QgcmUtc3RhcnQgdGhlIHRpbWVyIGJhc2VkIG9uIG1fc2VsZlJlZiBi
ZWluZyBzZXQuCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHNlbGZSZWYgPSBtX3NlbGZSZWYucmVs
ZWFzZSgpOwotCi0gICAgLy8gcmVhZHlTdGF0ZVJlc2V0IGNhbiBiZSBjYWxsZWQgc3luY2hyb25v
dXNseSB3aGlsZSB3ZSdyZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQuCi0gICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uOwot
ICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKLQotICAgIFZlY3RvcjxQZW5kaW5nRXZlbnQ+IHBl
bmRpbmdFdmVudHM7Ci0gICAgcGVuZGluZ0V2ZW50cy5zd2FwKG1fcGVuZGluZ0V2ZW50cyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwZW5kaW5nRXZlbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIC8vIEl0J3MgcG9zc2libGUgd2UndmUgbmF2aWdhdGVkIGluIHdoaWNoIGNhc2Ugd2Un
bGwgY3Jhc2guCi0gICAgICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPCBET05FKTsKKyAgICBpZiAo
IXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
IChwZW5kaW5nRXZlbnRzW2ldLm1fZXJyb3IpIHsKLSAgICAgICAgICAgIEFTU0VSVCghcGVuZGlu
Z0V2ZW50c1tpXS5tX3Jlc3VsdCk7Ci0gICAgICAgICAgICBkaXNwYXRjaEV2ZW50KElEQkVycm9y
RXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgKnBlbmRpbmdFdmVudHNbaV0ubV9lcnJvcikpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHBlbmRpbmdFdmVudHNbaV0ubV9yZXN1
bHQtPnR5cGUoKSAhPSBJREJBbnk6OlVuZGVmaW5lZFR5cGUpOwotICAgICAgICAgICAgZGlzcGF0
Y2hFdmVudChJREJTdWNjZXNzRXZlbnQ6OmNyZWF0ZShtX3NvdXJjZSwgcGVuZGluZ0V2ZW50c1tp
XS5tX3Jlc3VsdCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICh0cmFuc2FjdGlvbikgewot
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBwcm9jZXNzZWQgYWxsIHBlbmRpbmcgZXZlbnRzLCBsZXQg
dGhlIHRyYW5zYWN0aW9uIG1vbml0b3IgY2hlY2sgaWYKLSAgICAgICAgLy8gaXQgY2FuIGNvbW1p
dCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBvciBpZiB0aGVyZSdzIGFueXRoaW5nIG5ldyBwZW5k
aW5nLgotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSB3b3JrZXJzIGNhc2UuCi0gICAgICAg
IHRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLSAgICB9CisgICAgQVNTRVJU
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICBFdmVudFF1ZXVl
KiBldmVudFF1ZXVlID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpLT5ldmVudFF1ZXVlKCk7CisgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICBl
dmVudFF1ZXVlLT5lbnF1ZXVlRXZlbnQoZXZlbnQpOwogfQogCi12b2lkIElEQlJlcXVlc3Q6OnNj
aGVkdWxlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdCwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPiBlcnJvcikKK0V2ZW50VGFyZ2V0RGF0YSogSURCUmVxdWVzdDo6ZXZlbnRUYXJn
ZXREYXRhKCkKIHsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlIDwgRE9ORSk7Ci0gICAgQVNTRVJU
KCEhbV9zZWxmUmVmID09IG1fdGltZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICBQZW5kaW5nRXZlbnQg
cGVuZGluZ0V2ZW50OwotICAgIHBlbmRpbmdFdmVudC5tX3Jlc3VsdCA9IHJlc3VsdDsKLSAgICBw
ZW5kaW5nRXZlbnQubV9lcnJvciA9IGVycm9yOwotICAgIG1fcGVuZGluZ0V2ZW50cy5hcHBlbmQo
cGVuZGluZ0V2ZW50KTsKKyAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOworfQogCi0gICAg
bV9yZWFkeVN0YXRlID0gRE9ORTsKLSAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkgewotICAg
ICAgICBtX3NlbGZSZWYgPSB0aGlzOwotICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
LSAgICB9CitFdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSgpCit7CisgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaAppbmRleCA1NDg4MDBkYmQy
OWNjZmI0YjE4NjRmYzBjM2VmNzAxNzMxY2I5MjlmLi5mMzliOGY2YWMxN2VmYzc4MGQ0MTliNmJh
ODc1ZjFmZGEyNjIzNjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJl
cXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuaApAQCAtMzcs
OCArMzcsNiBAQAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiSURCQW55Lmgi
CiAjaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsNyArNDQsNyBA
QCBjbGFzcyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U7CiAKIGNsYXNzIElEQlJlcXVl
c3QgOiBwdWJsaWMgSURCQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3Rp
dmVET01PYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQkFu
eT4gc291cmNlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgSURCUmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRyYW5zYWN0
aW9uKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQW55PiBzb3VyY2UsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAogICAg
IC8vIERlZmluZWQgaW4gdGhlIElETApAQCAtNzIsMTAgKzcwLDkgQEAgcHVibGljOgogCiAgICAg
Ly8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIElEQlJlcXVlc3QqIHRvSURCUmVxdWVzdCgpIHsg
cmV0dXJuIHRoaXM7IH0KLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFy
Z2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0KIAogICAgIHVzaW5nIFRocmVhZFNhZmVT
aGFyZWQ8SURCQ2FsbGJhY2tzPjo6cmVmOwogICAgIHVzaW5nIFRocmVhZFNhZmVTaGFyZWQ8SURC
Q2FsbGJhY2tzPjo6ZGVyZWY7CkBAIC04Myw4ICs4MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJBbnk+
IHNvdXJjZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbik7CiAK
LSAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8SURCUmVxdWVzdD4qKTsKLSAgICB2b2lkIHNjaGVk
dWxlRXZlbnQoUGFzc1JlZlB0cjxJREJBbnk+IHJlc3VsdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik7CisgICAgdm9pZCBlbnF1ZXVlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogCiAg
ICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CkBAIC05NSwxNyArOTEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJBbnk+IG1f
c291cmNlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fdHJh
bnNhY3Rpb247CiAKLSAgICBzdHJ1Y3QgUGVuZGluZ0V2ZW50IHsKLSAgICAgICAgUmVmUHRyPElE
QkFueT4gbV9yZXN1bHQ7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBtX2Vycm9y
OwotICAgIH07Ci0gICAgVmVjdG9yPFBlbmRpbmdFdmVudD4gbV9wZW5kaW5nRXZlbnRzOwotCi0g
ICAgLy8gVXNlZCB0byBmaXJlIGV2ZW50cyBhc3luY2hyb25vdXNseS4KLSAgICBUaW1lcjxJREJS
ZXF1ZXN0PiBtX3RpbWVyOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3NlbGZSZWY7IC8vIFRo
aXMgaXMgc2V0IHRvIHVzIGlmZiB0aGVyZSdzIGFuIGV2ZW50IHBlbmRpbmcuCi0KICAgICBSZWFk
eVN0YXRlIG1fcmVhZHlTdGF0ZTsKKwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKaW5k
ZXggZjY5MDJkYTY0Y2U5OGJlODMxMzcxYjcxM2Q0NmY5YzE1NGI1Y2MwYi4uNmFjMzFkMmE2MGQy
NDM3YmIwNDY1ZTEyZDlhOTA3MDkzOWEzNDNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5jcHAKQEAgLTI4LDggKzI4LDkgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgogI2lu
Y2x1ZGUgIklEQkFib3J0RXZlbnQuaCIKICNpbmNsdWRlICJJREJDb21wbGV0ZUV2ZW50LmgiCiAj
aW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKQEAgLTM5LDE4ICs0MCwxOSBAQAogI2luY2x1ZGUgIklE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuaCIKICNpbmNsdWRlICJJREJUaW1lb3V0RXZlbnQuaCIKLSNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gYmFja2VuZCwgSURCRGF0YWJhc2UqIGRiKQoreyAKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IElEQlRyYW5zYWN0aW9uKGNvbnRleHQsIGJhY2tlbmQsIGRiKSk7Cit9CisKIElEQlRy
YW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gYmFja2VuZCwgSURC
RGF0YWJhc2UqIGRiKQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCiAgICAg
LCBtX2JhY2tlbmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX21vZGUo
bV9iYWNrZW5kLT5tb2RlKCkpCi0gICAgLCBtX29uQWJvcnRUaW1lcih0aGlzLCAmSURCVHJhbnNh
Y3Rpb246Om9uQWJvcnRUaW1lckZpcmVkKQotICAgICwgbV9vbkNvbXBsZXRlVGltZXIodGhpcywg
JklEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlVGltZXJGaXJlZCkKLSAgICAsIG1fb25UaW1lb3V0
VGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uOjpvblRpbWVvdXRUaW1lckZpcmVkKQogewogICAg
IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3I6OmFkZFBlbmRpbmdUcmFuc2FjdGlvbihtX2Jh
Y2tlbmQuZ2V0KCkpOwogfQpAQCAtNzEsNiArNzMsNyBAQCBJREJEYXRhYmFzZSogSURCVHJhbnNh
Y3Rpb246OmRiKCkKIAogUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Cisg
ICAgLy8gRklYTUU6IEl0J2QgYmUgYmV0dGVyIChiZWNhdXNlIGl0J3MgbW9yZSBkZXRlcm1pbmlz
dGljKSBpZiB3ZSBkaWRuJ3Qgc3RhcnQgdGhyb3dpbmcgdGhpcyB1bnRpbCB0aGUgY29tcGxldGUg
b3IgYWJvcnQgZXZlbnQgZmlyZXMuCiAgICAgaWYgKCFtX2JhY2tlbmQpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm4g
MDsKQEAgLTg2LDYgKzg5LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKIAogdm9pZCBJREJU
cmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2VsZlJl
ZiA9IHRoaXM7CiAgICAgaWYgKG1fYmFja2VuZCkKICAgICAgICAgbV9iYWNrZW5kLT5hYm9ydCgp
OwogfQpAQCAtOTcsNzggKzEwMSw1NiBAQCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBJREJUcmFu
c2FjdGlvbjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CiAKIHZvaWQgSURCVHJhbnNh
Y3Rpb246Om9uQWJvcnQoKQogewotICAgIEFTU0VSVCghbV9vbkFib3J0VGltZXIuaXNBY3RpdmUo
KSk7Ci0gICAgQVNTRVJUKCFtX29uQ29tcGxldGVUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NF
UlQoIW1fb25UaW1lb3V0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgbV9zZWxmUmVmID0gdGhpczsK
LSAgICBtX29uQWJvcnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgbV9iYWNrZW5kLmNsZWFy
KCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQgYXMgaXQgaG9sZHMgYSAoY2lyY3VsYXIpIHJlZmVy
ZW5jZSBiYWNrIHRvIHVzLgorICAgIGVucXVldWVFdmVudChJREJBYm9ydEV2ZW50OjpjcmVhdGUo
KSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQ29tcGxldGUoKQogewotICAgIEFTU0VS
VCghbV9vbkFib3J0VGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgQVNTRVJUKCFtX29uQ29tcGxldGVU
aW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25UaW1lb3V0VGltZXIuaXNBY3RpdmUo
KSk7Ci0gICAgbV9zZWxmUmVmID0gdGhpczsKLSAgICBtX29uQ29tcGxldGVUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci0gICAgbV9iYWNrZW5kLmNsZWFyKCk7IC8vIFJlbGVhc2UgdGhlIGJhY2tlbmQg
YXMgaXQgaG9sZHMgYSAoY2lyY3VsYXIpIHJlZmVyZW5jZSBiYWNrIHRvIHVzLgorICAgIGVucXVl
dWVFdmVudChJREJDb21wbGV0ZUV2ZW50OjpjcmVhdGUoKSk7CiB9CiAKIHZvaWQgSURCVHJhbnNh
Y3Rpb246Om9uVGltZW91dCgpCiB7Ci0gICAgQVNTRVJUKCFtX29uQWJvcnRUaW1lci5pc0FjdGl2
ZSgpKTsKLSAgICBBU1NFUlQoIW1fb25Db21wbGV0ZVRpbWVyLmlzQWN0aXZlKCkpOwotICAgIEFT
U0VSVCghbV9vblRpbWVvdXRUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBtX3NlbGZSZWYgPSB0aGlz
OwotICAgIG1fb25UaW1lb3V0VGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIG1fYmFja2VuZC5j
bGVhcigpOyAvLyBSZWxlYXNlIHRoZSBiYWNrZW5kIGFzIGl0IGhvbGRzIGEgKGNpcmN1bGFyKSBy
ZWZlcmVuY2UgYmFjayB0byB1cy4KKyAgICBlbnF1ZXVlRXZlbnQoSURCVGltZW91dEV2ZW50Ojpj
cmVhdGUoKSk7CiB9CiAKIGJvb2wgSURCVHJhbnNhY3Rpb246OmNhblN1c3BlbmQoKSBjb25zdAog
ewotICAgIC8vIFdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNhY3Rpb24gc28gd2Ug
Y2Fubm90IHN1c3BlbmQgb3VyIG9iamVjdC4KLSAgICAvLyBJbnN0ZWFkLCB3ZSBzaW1wbHkgZG9u
J3QgYWxsb3cgdGhlIG93bmVyIHBhZ2UgdG8gZ28gaW50byB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1fYmFja2VuZDsKIH0KIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6Y29udGV4dERlc3Ryb3llZCgpCiB7CiAgICAgQWN0aXZlRE9NT2JqZWN0
Ojpjb250ZXh0RGVzdHJveWVkKCk7CisKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHNlbGZS
ZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAgICAgIG1fYmFja2VuZC0+YWJvcnQo
KTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKIH0KIAotRXZlbnRUYXJnZXREYXRhKiBJREJUcmFu
c2FjdGlvbjo6ZXZlbnRUYXJnZXREYXRhKCkKK3ZvaWQgSURCVHJhbnNhY3Rpb246OmVucXVldWVF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICByZXR1cm4gJm1fZXZlbnRUYXJn
ZXREYXRhOwotfQorICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm47CiAKLUV2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFy
Z2V0RGF0YSgpCi17Ci0gICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKKyAgICBBU1NFUlQo
bV9iYWNrZW5kKTsKKyAgICBtX2JhY2tlbmQuY2xlYXIoKTsKKyAgICAKKyAgICBBU1NFUlQoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOworICAgIEV2ZW50UXVldWUqIGV2
ZW50UXVldWUgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSktPmV2ZW50UXVldWUoKTsKKyAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgIGV2ZW50
UXVldWUtPmVucXVldWVFdmVudChldmVudCk7CiB9CiAKLXZvaWQgSURCVHJhbnNhY3Rpb246Om9u
QWJvcnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uPiogdHJhbnNhY3Rpb24pCi17Ci0g
ICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVm
ID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLSAgICBkaXNwYXRjaEV2ZW50KElEQkFib3J0RXZlbnQ6
OmNyZWF0ZSgpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbjo6b25Db21wbGV0ZVRpbWVyRmly
ZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0cmFuc2FjdGlvbikKK0V2ZW50VGFyZ2V0RGF0YSog
SURCVHJhbnNhY3Rpb246OmV2ZW50VGFyZ2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1fc2VsZlJl
Zik7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBzZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVh
c2UoKTsKLSAgICBkaXNwYXRjaEV2ZW50KElEQkNvbXBsZXRlRXZlbnQ6OmNyZWF0ZSgpKTsKKyAg
ICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCi0KLXZvaWQgSURCVHJhbnNhY3Rpb246
Om9uVGltZW91dFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+KiB0cmFuc2FjdGlvbikK
K0V2ZW50VGFyZ2V0RGF0YSogSURCVHJhbnNhY3Rpb246OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgp
CiB7Ci0gICAgQVNTRVJUKG1fc2VsZlJlZik7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBz
ZWxmUmVmID0gbV9zZWxmUmVmLnJlbGVhc2UoKTsKLSAgICBkaXNwYXRjaEV2ZW50KElEQlRpbWVv
dXRFdmVudDo6Y3JlYXRlKCkpOworICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAppbmRleCAyOWUzMGZhNGVh
NWFjMTI0YjZmNTg2ODJlZmVlZGE5YTk2YTFjNzAyLi4yMTVjMmIxYzIwYzUxZTNkYjkwYmZmZWFh
Mzc0OWNmOGZmNDQxZWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5o
CkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMTAgKzQ0LDcgQEAgY2xhc3MgSURC
T2JqZWN0U3RvcmU7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uIDogcHVibGljIElEQlRyYW5zYWN0
aW9uQ2FsbGJhY2tzLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQsIElEQkRhdGFiYXNlKiBkYikKLSAgICB7IAotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uKGNvbnRleHQsIGJhY2tlbmQs
IGRiKSk7IAotICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gY3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4sIElEQkRhdGFiYXNlKik7CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rp
b24oKTsKIAogICAgIGVudW0gTW9kZSB7CkBAIC03Myw5ICs2OSw5IEBAIHB1YmxpYzoKIAogICAg
IC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBJREJUcmFuc2FjdGlvbiogdG9JREJUcmFuc2Fj
dGlvbigpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAogICAgIC8vIEFjdGl2ZURPTU9i
amVjdAotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKIApAQCAtODUsMjUgKzgxLDE5IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiwgSURCRGF0
YWJhc2UqKTsKIAorICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKwog
ICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyBy
ZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9
CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotICAgIHZv
aWQgb25BYm9ydFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7Ci0gICAgdm9pZCBv
bkNvbXBsZXRlVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbj4qKTsKLSAgICB2b2lkIG9u
VGltZW91dFRpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb24+Kik7Ci0KLSAgICBFdmVudFRh
cmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJEYXRhYmFzZT4gbV9kYXRh
YmFzZTsKICAgICB1bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAKLSAgICBUaW1lcjxJREJUcmFuc2Fj
dGlvbj4gbV9vbkFib3J0VGltZXI7Ci0gICAgVGltZXI8SURCVHJhbnNhY3Rpb24+IG1fb25Db21w
bGV0ZVRpbWVyOwotICAgIFRpbWVyPElEQlRyYW5zYWN0aW9uPiBtX29uVGltZW91dFRpbWVyOwot
ICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV9zZWxmUmVmOyAvLyBUaGlzIGlzIHNldCB0byB1
cyBpZmYgdGhlcmUncyBhbiBldmVudCBwZW5kaW5nLgorICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="72706"
          type_id="1"
          status="+"
          setter="japhet"
    />
          </attachment>
      

    </bug>

</bugzilla>