<?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>72949</bug_id>
          
          <creation_ts>2011-11-22 06:24:21 -0800</creation_ts>
          <short_desc>[GTK] Add WebKitDownload to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-01-24 00:50:08 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>72946</dependson>
          <blocked>72952</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507560</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 06:24:21 -0800</bug_when>
    <thetext>To represent a download operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507568</commentid>
    <comment_count>1</comment_count>
      <attachid>116215</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 06:32:44 -0800</bug_when>
    <thetext>Created attachment 116215
Patch

This is part for the download client implementation, reported as a separate bug report to make it easier to review. It doesn&apos;t include unit tests, because they will be added by following patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507575</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-22 06:36:25 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511001</commentid>
    <comment_count>3</comment_count>
      <attachid>117022</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-29 12:30:16 -0800</bug_when>
    <thetext>Created attachment 117022
New patch

I moved most of the signals from the download client object to this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513789</commentid>
    <comment_count>4</comment_count>
      <attachid>117631</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-02 08:34:25 -0800</bug_when>
    <thetext>Created attachment 117631
Updated patch

Fixed a bug in the progress notification when downloading more than one file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538802</commentid>
    <comment_count>5</comment_count>
      <attachid>117631</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-19 10:52:29 -0800</bug_when>
    <thetext>Comment on attachment 117631
Updated patch

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

Look nice! r- only because finished isn&apos;t emitted during failure.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:125
&gt; +     * The URI where the download will be saved.

Might want to be a bit more explicit: The local URI to where the download...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:138
&gt; +     * The response of the download.

How about: The #WebKitURIResponse associated with this download. ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:193
&gt; +     * This signal is emitted when download completes. In case of errors,
&gt; +     * the download finishes when #WebKitDownload::failed signal is emitted.

The loader client emits a finished message as well as a failed message. Let&apos;s copy that behavior here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:260
&gt; +     * This signal is emitted after #WebKitDownload::decide-destination to
&gt; +     * notify that destination file has been created successfully at @destination.

Might want to mention that this happens when the file is empty and not when the file is finished downloading.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:312
&gt; +    // in more then 0.7 secs from now, or the last notified progress

&quot;more than 0.7 seconds ago&quot; is slightly clearer here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:319
&gt; +        &amp;&amp; (currentElapsed - priv-&gt;lastElapsed) &lt; 0.7

Why 0.7 seconds? Wouldn&apos;t it be better to use a value like 60 frames a second? That will ensure that download progress bars animate smoothly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539400</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-20 03:45:24 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 117631 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117631&amp;action=review
&gt; 
&gt; Look nice! r- only because finished isn&apos;t emitted during failure.

Thanks for reviewing!

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:125
&gt; &gt; +     * The URI where the download will be saved.
&gt; 
&gt; Might want to be a bit more explicit: The local URI to where the download...

Sure.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:138
&gt; &gt; +     * The response of the download.
&gt; 
&gt; How about: The #WebKitURIResponse associated with this download. ?

Better.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:193
&gt; &gt; +     * This signal is emitted when download completes. In case of errors,
&gt; &gt; +     * the download finishes when #WebKitDownload::failed signal is emitted.
&gt; 
&gt; The loader client emits a finished message as well as a failed message. Let&apos;s copy that behavior here.

Right, this patch was written before the loader client simplification, no it makes sense to follow the same approach. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:260
&gt; &gt; +     * This signal is emitted after #WebKitDownload::decide-destination to
&gt; &gt; +     * notify that destination file has been created successfully at @destination.
&gt; 
&gt; Might want to mention that this happens when the file is empty and not when the file is finished downloading.

Good point.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:312
&gt; &gt; +    // in more then 0.7 secs from now, or the last notified progress
&gt; 
&gt; &quot;more than 0.7 seconds ago&quot; is slightly clearer here.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:319
&gt; &gt; +        &amp;&amp; (currentElapsed - priv-&gt;lastElapsed) &lt; 0.7
&gt; 
&gt; Why 0.7 seconds? Wouldn&apos;t it be better to use a value like 60 frames a second? That will ensure that download progress bars animate smoothly.

I have no idea, I copied this from wk1 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539516</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-20 08:02:05 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:319
&gt; &gt; &gt; +        &amp;&amp; (currentElapsed - priv-&gt;lastElapsed) &lt; 0.7
&gt; &gt; 
&gt; &gt; Why 0.7 seconds? Wouldn&apos;t it be better to use a value like 60 frames a second? That will ensure that download progress bars animate smoothly.
&gt; 
&gt; I have no idea, I copied this from wk1 code.

I think 30-60 frames per second might be the way to go here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540513</commentid>
    <comment_count>8</comment_count>
      <attachid>123551</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-23 06:39:04 -0800</bug_when>
    <thetext>Created attachment 123551
Updated patch according to review

Updated to apply on current git master and addressed review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540831</commentid>
    <comment_count>9</comment_count>
      <attachid>123551</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-01-23 14:15:02 -0800</bug_when>
    <thetext>Comment on attachment 123551
Updated patch according to review

Attachment 123551 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11275070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540915</commentid>
    <comment_count>10</comment_count>
      <attachid>123551</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 15:56:07 -0800</bug_when>
    <thetext>Comment on attachment 123551
Updated patch according to review

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

Nice!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:215
&gt; +     * after an error and ##WebKitDownload::finished signal is emitted after this one.

You have two ## here instead of just one. I&apos;m not sure if that&apos;s reponsible for making the doc build fail or not. Might want to double-check it before you land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541165</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-24 00:46:57 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 123551 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123551&amp;action=review
&gt; 
&gt; Nice!
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitDownload.cpp:215
&gt; &gt; +     * after an error and ##WebKitDownload::finished signal is emitted after this one.
&gt; 
&gt; You have two ## here instead of just one. I&apos;m not sure if that&apos;s reponsible for making the doc build fail or not. Might want to double-check it before you land.

Nop, the problem is that I forgot to add the &lt;SECTION&gt; tag for WebKitDownload in webkit2gtk-sections.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541166</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-24 00:50:08 -0800</bug_when>
    <thetext>Committed r105704: &lt;http://trac.webkit.org/changeset/105704&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116215</attachid>
            <date>2011-11-22 06:32:44 -0800</date>
            <delta_ts>2011-11-29 12:30:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-download.diff</filename>
            <type>text/plain</type>
            <size>23184</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDc2MDJkMjkuLjIwNTZlMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTExLTIyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0
RG93bmxvYWQgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dPd25QdHIuY3BwOgorICAgICAgICAo
V1RGOjpHVGltZXIpOiBVc2UgZ190aW1lcl9kZXN0cm95KCkgdG8gZnJlZSBhIEdUaW1lci4KKyAg
ICAgICAgKiB3dGYvZ29iamVjdC9HT3duUHRyLmg6IEFkZCBHVGltZXIgdGVtcGxhdGUuCisgICAg
ICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6IEFkZCBHVGltZXIgZm9yd2FyZCBkZWNsYXJh
dGlvbi4KKwogMjAxMS0xMS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyBzaG91bGQgaGF2ZSByaWNoZXIgZGVidWcgb3V0cHV0IGZvciBDRkEgYW5kIHBo
aSBwcm9jZXNzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGU5OGFhNy4uN2RjYTE1ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQzIEBACisyMDExLTExLTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0RG93bmxvYWQgdG8gV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXREb3dubG9hZEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdERvd25sb2FkR2V0
UHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2luaXQpOgorICAgICAgICAod2Vi
a2l0X2Rvd25sb2FkX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0RG93bmxvYWRDcmVhdGUp
OiBDcmVhdGUgYSBuZXcgV2ViS2l0RG93bmxvYWQgZm9yIGEgZ2l2ZW4KKyAgICAgICAgV0tEb3du
bG9hZFJlZi4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkU2V0UmVzcG9uc2UpOiBTZXQgdGhlIG5l
dHdvcmsgcmVzcG9uc2Ugb2YgdGhlCisgICAgICAgIGRvd25sb2FkLgorICAgICAgICAod2Via2l0
RG93bmxvYWRJc0NhbmNlbGxlZCk6IFdoZXRoZXIgdGhlIGRvd25sb2FkIGhhcyBiZWVuCisgICAg
ICAgIGNhbmNlbGxlZCBieSB0aGUgdXNlci4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkU3RhcnRl
ZCk6IFN0YXJ0IHRoZSB0aW1lciB3aGVuIHRoZSBkb3dubG9hZCBzYXJ0cy4KKyAgICAgICAgKHdl
YmtpdERvd25sb2FkRmluaXNoZWQpOiBTdG9wIHRoZSB0aW1lciB3aGVuIHRoZSBkb3dubG9hZCBm
aW5pc2hlcy4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MpOiBFbWl0IG5v
dGlmeTo6ZXN0aW1hdGVkLXByb2dyZXNzIGlmCisgICAgICAgIG5lZWRlZC4KKyAgICAgICAgKHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24pOiBSZXR1cm4gdGhlIGRlc3RpbmF0aW9uIFVS
SSBvZgorICAgICAgICB0aGUgZG93bmxvYWQuCisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfc2V0
X2Rlc3RpbmF0aW9uKTogU2V0IHRoZSBkZXN0aW5hdGlvbiBVUkkgb2YgdGhlCisgICAgICAgIGRv
d25sb2FkLgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZSk6IFJldHVybiB0
aGUgbmV0d29yayByZXNwb25zZQorICAgICAgICByZWNlaXZlZCBieSB0aGUgc2VydmVyLgorICAg
ICAgICAod2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6IENhbmNlbCB0aGUgZG93bmxvYWQuCisgICAg
ICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyk6IFJldHVybiB0aGUg
ZXN0aW1hdGVkCisgICAgICAgIHByb2dyZXNzLgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dl
dF9lbGFwc2VkX3RpbWUpOiBSZXR1cm4gdGhlIHRpbWUgZWxhcHNlZCBzaW5jZQorICAgICAgICB0
aGUgZG93bmxvYWQgc3RhcnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkIHdlYmtpdF9kb3dubG9hZF9n
ZXRfdHlwZSgpLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkIFdl
YktpdERvd25sb2FkLmguCisKIDIwMTEtMTEtMjEgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVu
YXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIFJFR1JFU1NJT04oMTAwNDgz
KTogSXQgbWFkZSAyIEFQSSB0ZXN0cyBmYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2dvYmplY3QvR093blB0ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2dvYmplY3QvR093blB0ci5jcHAKaW5kZXggNTBjN2I5Zi4uNDE1ODY4OSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmNwcApAQCAtNDksNiArNDksMTIg
QEAgdGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdEaXI+KEdEaXIqIHB0cikKICAgICAg
ICAgZ19kaXJfY2xvc2UocHRyKTsKIH0KIAordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRy
PEdUaW1lcj4oR1RpbWVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ190aW1lcl9k
ZXN0cm95KHB0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxF
KEdMSUJfU1VQUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdC9HT3duUHRyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0
ci5oCmluZGV4IDlmZjg1YzUuLjU5M2I4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9nb2JqZWN0L0dPd25QdHIuaApAQCAtMzcsNiArMzcsNyBAQCB0ZW1wbGF0ZTw+IHZvaWQgZnJl
ZU93bmVkR1B0cjxHRXJyb3I+KEdFcnJvciopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQ
dHI8R0xpc3Q+KEdMaXN0Kik7CiB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkR1B0cjxHUGF0dGVy
blNwZWM+KEdQYXR0ZXJuU3BlYyopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R0Rp
cj4oR0RpciopOwordGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R1RpbWVyPihHVGltZXIq
KTsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIEdPd25QdHIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEdPd25QdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2Jq
ZWN0L0dUeXBlZGVmcy5oCmluZGV4IDY2Y2VkZDYuLjIyYTBhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKQEAgLTU4LDYgKzU4LDcgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0dTb2NrZXRDb25uZWN0aW9uIEdTb2NrZXRDb25uZWN0aW9uOwogdHlwZWRl
ZiBzdHJ1Y3QgX0dTb3VyY2UgR1NvdXJjZTsKIHR5cGVkZWYgc3RydWN0IF9HVmFyaWFudCBHVmFy
aWFudDsKIHR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3Qg
X0dUaW1lciBHVGltZXI7CiAKICNpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9f
c3VyZmFjZSBjYWlyb19zdXJmYWNlX3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGJlZjA0YjYu
Ljg3MmVlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC03OCw2ICs3OCw3IEBAIHdlYmtpdDJn
dGtfaGVhZGVycyA9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tG
b3J3YXJkTGlzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
ZWZpbmVzLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQu
aCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5ldHdvcmtSZXF1ZXN0LmggXAogCSQoV2Vi
S2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmV0d29ya1Jlc3BvbnNlLmggXApAQCAtNTAx
LDYgKzUwMiw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgXAorCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5ldHdvcmtSZXF1ZXN0LmNwcCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0ODRhNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcApA
QCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKworI2luY2x1
ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIK
KyNpbmNsdWRlIDxXZWJLaXQyL1dLRG93bmxvYWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51
bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9FU1RJTUFURURfUFJPR1JFU1MKK307CisKK3N0
cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS0Rvd25sb2Fk
UmVmPiB3a0Rvd25sb2FkOworCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrUmVzcG9uc2U+IHJl
c3BvbnNlOworICAgIENTdHJpbmcgZGVzdGluYXRpb25VUkk7CisgICAgZ3VpbnQ2NCBjdXJyZW50
U2l6ZTsKKyAgICBib29sIGlzQ2FuY2VsbGVkOworICAgIEdPd25QdHI8R1RpbWVyPiB0aW1lcjsK
K307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RG93bmxvYWQsIHdlYmtpdF9kb3dubG9hZCwgR19U
WVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0RG93bmxvYWRGaW5hbGl6ZShHT2JqZWN0
KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0RPV05MT0FEKG9iamVjdCktPnByaXYtPn5XZWJLaXRE
b3dubG9hZFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG93bmxvYWRfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RG93
bmxvYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsK
KyAgICBjYXNlIFBST1BfRVNUSU1BVEVEX1BST0dSRVNTOgorICAgICAgICBnX3ZhbHVlX3NldF9k
b3VibGUodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25s
b2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9pbml0KFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoZG93bmxvYWQsIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXRE
b3dubG9hZFByaXZhdGUpOworICAgIGRvd25sb2FkLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdERvd25sb2FkUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93
bmxvYWRfY2xhc3NfaW5pdChXZWJLaXREb3dubG9hZENsYXNzKiBkb3dubG9hZENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRD
bGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdERvd25sb2Fk
R2V0UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdERvd25sb2Fk
RmluYWxpemU7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDplc3RpbWF0ZWQtcHJv
Z3Jlc3M6CisgICAgICoKKyAgICAgKiBBbiBlc3RpbWF0ZSBvZiB0aGUgcGVyY2VudCBjb21wbGV0
aW9uIGZvciB0aGUgZG93bmxvYWQgb3BlcmF0aW9uLgorICAgICAqIFRoaXMgdmFsdWUgd2lsbCBy
YW5nZSBmcm9tIDAuMCB0byAxLjAuIFRoZSB2YWx1ZSBpcyBhbiBlc3RpbWF0ZQorICAgICAqIGJh
c2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQg
Zm9yCisgICAgICogYSBkb3dubG9hZC4KKyAgICAgKiBJZiB5b3UgbmVlZCBhIG1vcmUgYWNjdXJh
dGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24geW91IGNhbiBjb25uZWN0IHRvCisgICAgICogI1dlYktp
dERvd25sb2FkQ2xpZW50OjpyZWNlaXZlZC1kYXRhIHNpZ25hbCB0byB0cmFjayB0aGUgcHJvZ3Jl
c3MuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0VTVElNQVRF
RF9QUk9HUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19kb3VibGUoImVzdGltYXRlZC1wcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVzdGltYXRlZCBQcm9ncmVzcyIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjAsIDEuMCwgMS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNzLCBzaXplb2YoV2ViS2l0RG93bmxvYWRQcml2YXRl
KSk7Cit9CisKK1dlYktpdERvd25sb2FkKiB3ZWJraXREb3dubG9hZENyZWF0ZShXS0Rvd25sb2Fk
UmVmIHdrRG93bmxvYWQpCit7CisgICAgQVNTRVJUKHdrRG93bmxvYWQpOworICAgIFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfRE9XTkxPQUQsIE5VTEwpKTsKKyAgICBkb3dubG9hZC0+cHJpdi0+d2tEb3dubG9hZCA9IHdr
RG93bmxvYWQ7CisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCit2b2lkIHdlYmtpdERvd25sb2Fk
U2V0UmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJLaXROZXR3b3JrUmVzcG9u
c2UqIHJlc3BvbnNlKQoreworICAgIGRvd25sb2FkLT5wcml2LT5yZXNwb25zZSA9IHJlc3BvbnNl
OworfQorCitib29sIHdlYmtpdERvd25sb2FkSXNDYW5jZWxsZWQoV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkKQoreworICAgIHJldHVybiBkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQ7Cit9CisK
K3ZvaWQgd2Via2l0RG93bmxvYWRTdGFydGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sK
KyAgICBpZiAoIWRvd25sb2FkLT5wcml2LT50aW1lcikKKyAgICAgICAgZG93bmxvYWQtPnByaXYt
PnRpbWVyLnNldChnX3RpbWVyX25ldygpKTsKKyAgICBlbHNlCisgICAgICAgIGdfdGltZXJfc3Rh
cnQoZG93bmxvYWQtPnByaXYtPnRpbWVyLmdldCgpKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9h
ZEZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBBU1NFUlQoZG93bmxv
YWQtPnByaXYtPnRpbWVyKTsKKyAgICBnX3RpbWVyX3N0b3AoZG93bmxvYWQtPnByaXYtPnRpbWVy
LmdldCgpKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQoreworICAgIFdlYktpdERv
d25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworCisgICAgcHJpdi0+Y3VycmVu
dFNpemUgKz0gYnl0ZXNSZWNlaXZlZDsKKworICAgIC8vIFRocm90dGxlIHByb2dyZXNzIG5vdGlm
aWNhdGlvbiB0byBub3QgY29uc3VtZSBoaWdoIGFtb3VudHMgb2YKKyAgICAvLyBDUFUgb24gZmFz
dCBsaW5rcywgZXhjZXB0IHdoZW4gdGhlIGxhc3Qgbm90aWZpY2F0aW9uIG9jY3VyZWQKKyAgICAv
LyBpbiBtb3JlIHRoZW4gMC43IHNlY3MgZnJvbSBub3csIG9yIHRoZSBsYXN0IG5vdGlmaWVkIHBy
b2dyZXNzCisgICAgLy8gaXMgcGFzc2VkIGluIDElIG9yIHdlIHJlYWNoZWQgdGhlIGVuZC4KKyAg
ICBzdGF0aWMgZ2RvdWJsZSBsYXN0UHJvZ3Jlc3MgPSAwOworICAgIHN0YXRpYyBnZG91YmxlIGxh
c3RFbGFwc2VkID0gMDsKKyAgICBnZG91YmxlIGN1cnJlbnRFbGFwc2VkID0gZ190aW1lcl9lbGFw
c2VkKHByaXYtPnRpbWVyLmdldCgpLCAwKTsKKyAgICBnZG91YmxlIGN1cnJlbnRQcm9ncmVzcyA9
IHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkKTsKKworICAg
IGlmIChsYXN0RWxhcHNlZAorICAgICAgICAmJiBsYXN0UHJvZ3Jlc3MKKyAgICAgICAgJiYgKGN1
cnJlbnRFbGFwc2VkIC0gbGFzdEVsYXBzZWQpIDwgMC43CisgICAgICAgICYmIChjdXJyZW50UHJv
Z3Jlc3MgLSBsYXN0UHJvZ3Jlc3MpIDwgMC4wMQorICAgICAgICAmJiBjdXJyZW50UHJvZ3Jlc3Mg
PCAxLjApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsYXN0RWxhcHNlZCA9IGN1cnJl
bnRFbGFwc2VkOworICAgIGxhc3RQcm9ncmVzcyA9IGN1cnJlbnRQcm9ncmVzczsKKyAgICBnX29i
amVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiZXN0aW1hdGVkLXByb2dyZXNzIik7Cit9
CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbjoKKyAqIEBkb3dubG9h
ZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBPYnRhaW5zIHRoZSBVUkkgdG8gd2hpY2ggdGhl
IGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uIFlvdQorICogY2FuIGNvbm5lY3QgdG8g
I1dlYktpdERvd25sb2FkQ2xpZW50OjpjcmVhdGVkLWRlc3RpbmF0aW9uIHRvIG1ha2UKKyAqIHN1
cmUgdGhpcyBtZXRob2QgcmV0dXJucyBhIHZhbGlkIGRlc3RpbmF0aW9uLgorICoKKyAqIFJldHVy
bnM6IHRoZSBkZXN0aW5hdGlvbiBVUkkgb3IgJU5VTEwKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtp
dF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDAp
OworCisgICAgcmV0dXJuIGRvd25sb2FkLT5wcml2LT5kZXN0aW5hdGlvblVSSS5kYXRhKCk7Cit9
CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbjoKKyAqIEBkb3dubG9h
ZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqIEB1cmk6IHRoZSBkZXN0aW5hdGlvbiBVUkkKKyAqCisg
KiBTZXRzIHRoZSBVUkkgdG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0
ZW4uCisgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZG93bmxvYWQg
dHJhbnNmZXIKKyAqIHN0YXJ0cyBvciBpdCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhl
IG9uZ29pbmcgZG93bmxvYWQKKyAqIG9wZXJhdGlvbi4gVG8gc2V0IHRoZSBkZXN0aW5hdGlvbiB1
c2luZyB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkCisgKiBieSB0aGUgc2VydmVyIGNvbm5lY3QgdG8g
I1dlYktpdERvd25sb2FkQ2xpZW50OjpkZWNpZGUtZGVzdGluYXRpb24KKyAqIHNpZ25hbCBhbmQg
Y2FsbCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKCkuIElmIHlvdSB3YW50IHRvCisg
KiBzZXQgYSBmaXhlZCBkZXN0aW5hdGlvbiBVUkkgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUg
c3VnZ2VzdGVkCisgKiBmaWxlbmFtZSB5b3UgY2FuIGNvbm5lY3QgdG8gI1dlYktpdERvd25sb2Fk
Q2xpZW50OjpyZWNlaXZlZC1yZXNwb25zZQorICogc2lnbmFsIGFuZCBjYWxsIHdlYmtpdF9kb3du
bG9hZF9zZXRfZGVzdGluYXRpb24oKS4KKyAqIElmICNXZWJLaXREb3dubG9hZENsaWVudDo6ZGVj
aWRlLWRlc3RpbmF0aW9uIHNpZ25hbCBpcyBub3QgaGFuZGxlZAorICogYW5kIGRlc3RpbmF0aW9u
IFVSSSBpcyBub3Qgc2V0IHdoZW4gdGhlIGRvd25sb2FkIHN0YXJ0cywgdGhlIGZpbGUKKyAqIHdp
bGwgYmUgc2F2ZWQgd2l0aCB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGJ5IHRoZSBzZXJ2ZXIgaW4K
KyAqICVHX1VTRVJfRElSRUNUT1JZX0RPV05MT0FEIGRpcmVjdG9yeS4KKyAqLwordm9pZCB3ZWJr
aXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29u
c3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9B
RChkb3dubG9hZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKKworICAgIFdlYktpdERv
d25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmIChwcml2LT5kZXN0
aW5hdGlvblVSSSA9PSB1cmkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmRlc3RpbmF0
aW9uVVJJID0gdXJpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2U6
CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0cmlldmVzIHRoZSAj
V2ViS2l0TmV0d29ya1Jlc3BvbnNlIG9iamVjdCB0aGF0IGJhY2tzIHRoZSBkb3dubG9hZAorICog
cHJvY2Vzcy4gVGhpcyBtZXRob2QgcmV0dXJucyAlTlVMTCBpZiBjYWxsZWQgYmVmb3JlCisgKiAj
V2ViS2l0RG93bmxvYWRDbGllbnQ6OnJlY2VpdmVkLXJlc3BvbnNlIHNpZ25hbCBpcyBlbWl0dGVk
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXROZXR3b3JrUmVz
cG9uc2UsIG9yICVOVUxMIGlmCisgKiAgICAgdGhlIHJlc3BvbnNlIGhhc24ndCBiZWVuIHJlY2Vp
dmVkIHlldC4KKyAqLworV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiB3ZWJraXRfZG93bmxvYWRfZ2V0
X3Jlc3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIHJldHVybiBk
b3dubG9hZC0+cHJpdi0+cmVzcG9uc2UuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25s
b2FkX2NhbmNlbDoKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBDYW5j
ZWxzIHRoZSBkb3dubG9hZC4gV2hlbiB0aGUgb25nb2luZyBkb3dubG9hZAorICogb3BlcmF0aW9u
IGlzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZCB0aGUgc2lnbmFsCisgKiAjV2ViS2l0RG93bmxvYWRD
bGllbnQ6OmZhaWxlZCBpcyBlbWl0dGVkIHdpdGgKKyAqICVXRUJLSVRfRE9XTkxPQURfRVJST1Jf
Q0FOQ0VMTEVEX0JZX1VTRVIgZXJyb3IuCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX2NhbmNl
bChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIGRvd25sb2FkLT5wcml2LT5pc0NhbmNl
bGxlZCA9IHRydWU7CisgICAgV0tEb3dubG9hZENhbmNlbChkb3dubG9hZC0+cHJpdi0+d2tEb3du
bG9hZC5nZXQoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3M6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogR2V0cyB0
aGUgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDplc3RpbWF0ZWQtcHJvZ3Jlc3MgcHJvcGVy
dHkuCisgKiBZb3UgY2FuIG1vbml0b3IgdGhlIGVzdGltYXRlZCBwcm9ncmVzcyBvZiB0aGUgZG93
bmxvYWQgb3BlcmF0aW9uIGJ5CisgKiBjb25uZWN0aW5nIHRvIHRoZSBub3RpZnk6OmVzdGltYXRl
ZC1wcm9ncmVzcyBzaWduYWwgb2YgQGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6IGFuIGVzdGlt
YXRlIG9mIHRoZSBvZiB0aGUgcGVyY2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAg
IGFzIGEgcmFuZ2UgZnJvbSAwLjAgdG8gMS4wLgorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9h
ZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsK
KworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAg
IGlmICghcHJpdi0+cmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ3VpbnQ2NCBj
b250ZW50TGVuZ3RoID0gd2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X2NvbnRlbnRfbGVuZ3Ro
KHByaXYtPnJlc3BvbnNlLmdldCgpKTsKKyAgICBpZiAoIWNvbnRlbnRMZW5ndGgpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KHByaXYtPmN1cnJl
bnRTaXplKSAvIHN0YXRpY19jYXN0PGdkb3VibGU+KGNvbnRlbnRMZW5ndGgpOworfQorCisvKioK
KyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lOgorICogQGRvd25sb2FkOiBhICNX
ZWJLaXREb3dubG9hZAorICoKKyAqIEdldHMgdGhlIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzLCBp
bmNsdWRpbmcgYW55IGZyYWN0aW9uYWwgcGFydC4KKyAqIElmIHRoZSBkb3dubG9hZCBmaW5pc2hl
ZCwgaGFkIGFuIGVycm9yIG9yIHdhcyBjYW5jZWxsZWQgdGhpcyBpcworICogdGhlIHRpbWUgYmV0
d2VlbiBpdHMgc3RhcnQgYW5kIHRoZSBldmVudC4KKyAqCisgKiBSZXR1cm5zOiBzZWNvbmRzIHNp
bmNlIHRoZSBkb3dubG9hZCB3YXMgc3RhcnRlZAorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9h
ZF9nZXRfZWxhcHNlZF90aW1lKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAg
IFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmICgh
cHJpdi0+dGltZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfdGltZXJfZWxh
cHNlZChwcml2LT50aW1lci5nZXQoKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xNTllYzdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9J
TlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8
d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKwor
I2lmbmRlZiBXZWJLaXREb3dubG9hZF9oCisjZGVmaW5lIFdlYktpdERvd25sb2FkX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXROZXR3b3JrUmVzcG9uc2UuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPV05MT0FEICAgICAgICAgICAgKHdlYmtpdF9k
b3dubG9hZF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQUQob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxP
QUQsIFdlYktpdERvd25sb2FkKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEKG9iaikgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05M
T0FEKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3du
bG9hZENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FEKSkKKyNk
ZWZpbmUgV0VCS0lUX0RPV05MT0FEX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZENsYXNz
KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkICAgICAgICBXZWJLaXREb3dubG9h
ZDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzICAgV2ViS2l0RG93bmxvYWRD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZFByaXZhdGUgV2ViS2l0RG93bmxv
YWRQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkIHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2Vi
S2l0RG93bmxvYWRDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfdHlwZSAgICAgICAgICAgICAg
ICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfZG93bmxvYWRfZ2V0
X2Rlc3RpbmF0aW9uICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKKworV0VCS0lU
X0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uICAgICAgICAoV2ViS2l0
RG93bmxvYWQgKmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICAgICp1cmkpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdvcmtSZXNw
b25zZSoKK3dlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UgICAgICAgICAgIChXZWJLaXREb3du
bG9hZCAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3dubG9hZF9jYW5j
ZWwgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOworCitXRUJLSVRf
QVBJIGdkb3VibGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzIChXZWJL
aXREb3dubG9hZCAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb3du
bG9hZF9nZXRfZWxhcHNlZF90aW1lICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWVhOTZkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJLaXREb3dubG9hZFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXREb3dubG9hZFBy
aXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKyNpbmNsdWRlIDxXZWJLaXQy
L1dLRG93bmxvYWQuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworV2ViS2l0RG93bmxv
YWQqIHdlYmtpdERvd25sb2FkQ3JlYXRlKFdLRG93bmxvYWRSZWYpOwordm9pZCB3ZWJraXREb3du
bG9hZFNldFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKik7
Citib29sIHdlYmtpdERvd25sb2FkSXNDYW5jZWxsZWQoV2ViS2l0RG93bmxvYWQqKTsKK3ZvaWQg
d2Via2l0RG93bmxvYWRTdGFydGVkKFdlYktpdERvd25sb2FkKik7Cit2b2lkIHdlYmtpdERvd25s
b2FkRmluaXNoZWQoV2ViS2l0RG93bmxvYWQqKTsKK3ZvaWQgd2Via2l0RG93bmxvYWROb3RpZnlQ
cm9ncmVzcyhXZWJLaXREb3dubG9hZCosIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCk7CisKKyNlbmRp
ZiAvLyBXZWJLaXREb3dubG9hZFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5k
ZXggZmJiM2ZmOC4uZjVmZmIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0yNzEs
NiArMjcxLDMwIEBAIHdlYmtpdF9uZXR3b3JrX3Jlc3BvbnNlX2dldF90eXBlCiA8L1NFQ1RJT04+
CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RG93bmxvYWQ8L0ZJTEU+CitXZWJLaXREb3dubG9h
ZAord2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2FkX3NldF9k
ZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZQord2Via2l0X2Rvd25sb2Fk
X2NhbmNlbAord2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MKK3dlYmtpdF9k
b3dubG9hZF9nZXRfZWxhcHNlZF90aW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RG93bmxvYWRDbGFzcworV0VCS0lUX1RZUEVfRE9XTkxPQUQKK1dFQktJVF9ET1dOTE9BRAorV0VC
S0lUX0lTX0RPV05MT0FECitXRUJLSVRfRE9XTkxPQURfQ0xBU1MKK1dFQktJVF9JU19ET1dOTE9B
RF9DTEFTUworV0VCS0lUX0RPV05MT0FEX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
PgorV2ViS2l0RG93bmxvYWRQcml2YXRlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdFQktJVF9ORVRX
T1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggZjY4NDI1Ny4u
ZjUyNTQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtNywzICs3LDQgQEAgd2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF90eXBlCiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRfdHlwZQog
d2Via2l0X3NldHRpbmdzX2dldF90eXBlCiB3ZWJraXRfbmV0d29ya19yZXNwb25zZV9nZXRfdHlw
ZQord2Via2l0X2Rvd25sb2FkX2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay93ZWJraXQyLmgKaW5kZXggODIxMWU1Yi4uMmNhODdjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRCYWNrRm9yd2FyZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVz
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmV0d29ya1JlcXVlc3QuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117022</attachid>
            <date>2011-11-29 12:30:16 -0800</date>
            <delta_ts>2011-12-02 08:34:25 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-download-2.diff</filename>
            <type>text/plain</type>
            <size>34204</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRhMTEzZDMuLmNjY2NmYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTExLTI5ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0
RG93bmxvYWQgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dPd25QdHIuY3BwOgorICAgICAgICAo
V1RGOjpHVGltZXIpOiBVc2UgZ190aW1lcl9kZXN0cm95KCkgdG8gZnJlZSBhIEdUaW1lci4KKyAg
ICAgICAgKiB3dGYvZ29iamVjdC9HT3duUHRyLmg6IEFkZCBHVGltZXIgdGVtcGxhdGUuCisgICAg
ICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6IEFkZCBHVGltZXIgZm9yd2FyZCBkZWNsYXJh
dGlvbi4KKwogMjAxMS0xMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyBkZWJ1Z0NhbGwoKSBtZWNoYW5pc20gb25seSB3b3JrcyBvbiBYODYgYW5kIFg4
Ni02NApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDM4NmYzODUuLmYzYTQ3YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSw1NSBAQAogMjAxMS0xMS0yOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKKyAgICAgICAgW0dUS10gQWRkIFdlYktpdERvd25sb2FkIHRvIFdlYktpdDIgR1RL
KyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcy
OTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHA6IEFkZGVkLgorICAgICAgICAod2Vi
a2l0RG93bmxvYWRGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdldFByb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRpb24pOgorICAgICAgICAo
d2Via2l0X2Rvd25sb2FkX2luaXQpOgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2NsYXNzX2lu
aXQpOgorICAgICAgICAod2Via2l0RG93bmxvYWRDcmVhdGUpOiBDcmVhdGUgYSBuZXcgV2ViS2l0
RG93bmxvYWQgZm9yIGEgZ2l2ZW4KKyAgICAgICAgV0tEb3dubG9hZFJlZi4KKyAgICAgICAgKHdl
YmtpdERvd25sb2FkU2V0UmVzcG9uc2UpOiBTZXQgdGhlIG5ldHdvcmsgcmVzcG9uc2Ugb2YgdGhl
CisgICAgICAgIGRvd25sb2FkLgorICAgICAgICAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZCk6
IFdoZXRoZXIgdGhlIGRvd25sb2FkIGhhcyBiZWVuCisgICAgICAgIGNhbmNlbGxlZCBieSB0aGUg
dXNlci4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MpOiBFbWl0IG5vdGlm
eTo6ZXN0aW1hdGVkLXByb2dyZXNzIGlmCisgICAgICAgIG5lZWRlZC4KKyAgICAgICAgKHdlYmtp
dERvd25sb2FkRmFpbGVkKTogRW1pdCBXZWJLaXREb3dubG9hZDo6ZmFpbGVkIHdpdGggdGhlIGdp
dmVuCisgICAgICAgIGVycm9yLgorICAgICAgICAod2Via2l0RG93bmxvYWRDYW5jZWxsZWQpOiBF
bWl0IFdlYktpdERvd25sb2FkOjpmYWlsZWQgd2l0aAorICAgICAgICBjYW5jZWxsZWQgZXJyb3Iu
CisgICAgICAgICh3ZWJraXREb3dubG9hZEZpbmlzaGVkKTogRW1pdCBXZWJLaXREb3dubG9hZDo6
ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKTogRW1pdAorICAgICAgICBXZWJLaXREb3dubG9hZDo6ZGVjaWRlLWRl
c3RpbmF0aW9uLgorICAgICAgICAod2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQpOiBF
bWl0CisgICAgICAgIFdlYktpdERvd25sb2FkOjpjcmVhdGVkLWRlc3RpbmF0aW9uLgorICAgICAg
ICAod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbik6IFJldHVybiB0aGUgZGVzdGluYXRp
b24gVVJJIG9mCisgICAgICAgIHRoZSBkb3dubG9hZC4KKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9zZXRfZGVzdGluYXRpb24pOiBTZXQgdGhlIGRlc3RpbmF0aW9uIFVSSSBvZiB0aGUKKyAgICAg
ICAgZG93bmxvYWQuCisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKTogUmV0
dXJuIHRoZSByZXNwb25zZSByZWNlaXZlZCBieQorICAgICAgICB0aGUgc2VydmVyLgorICAgICAg
ICAod2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6IENhbmNlbCB0aGUgZG93bmxvYWQuCisgICAgICAg
ICh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyk6IFJldHVybiB0aGUgZXN0
aW1hdGVkCisgICAgICAgIHByb2dyZXNzLgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF9l
bGFwc2VkX3RpbWUpOiBSZXR1cm4gdGhlIHRpbWUgZWxhcHNlZCBzaW5jZQorICAgICAgICB0aGUg
ZG93bmxvYWQgc3RhcnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9h
ZFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkCisgICAgICAgIHdlYmtpdF9kb3du
bG9hZF9nZXRfdHlwZSgpLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDog
QWRkIFdlYktpdERvd25sb2FkLmgKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0OgorCisyMDExLTExLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBVbnJldmlld2VkLiBGaXggdGhlIEdUSysgcG9ydCBi
dWlsZCBhZnRlciByMTAxMzA3LgogCiAgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBtaXNz
aW5nIGZpbGVzIHRvIGNvbXBpbGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9n
b2JqZWN0L0dPd25QdHIuY3BwCmluZGV4IDUwYzdiOWYuLjQxNTg2ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0ci5jcHAKQEAgLTQ5LDYgKzQ5LDEyIEBA
IHRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGlyPihHRGlyKiBwdHIpCiAgICAgICAg
IGdfZGlyX2Nsb3NlKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxH
VGltZXI+KEdUaW1lciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfdGltZXJfZGVz
dHJveShwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShH
TElCX1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmpl
Y3QvR093blB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIu
aAppbmRleCA5ZmY4NWM1Li41OTNiODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2dvYmplY3QvR093blB0ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Z29iamVjdC9HT3duUHRyLmgKQEAgLTM3LDYgKzM3LDcgQEAgdGVtcGxhdGU8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R0Vycm9yPihHRXJyb3IqKTsKIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRy
PEdMaXN0PihHTGlzdCopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R1BhdHRlcm5T
cGVjPihHUGF0dGVyblNwZWMqKTsKIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdEaXI+
KEdEaXIqKTsKK3RlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdUaW1lcj4oR1RpbWVyKik7
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHT3duUHRyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHT3duUHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HVHlwZWRlZnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVj
dC9HVHlwZWRlZnMuaAppbmRleCA2NmNlZGQ2Li4yMmEwYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCkBAIC01OCw2ICs1OCw3IEBAIHR5cGVk
ZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVkZWYg
c3RydWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1Zhcmlh
bnQ7CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9H
VGltZXIgR1RpbWVyOwogCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1
cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBkYzFiZjNkLi4w
YzE1NDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODEsNiArODEsNyBAQCB3ZWJraXQyZ3Rr
X2hlYWRlcnMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVm
aW5lcy5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXApAQCAtNTExLDYgKzUx
Miw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJ
VEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWI2ZTVhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcApAQCAtMCwwICsxLDUxMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKworI2luY2x1ZGUgIldlYktpdERvd25s
b2FkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlICJXZWJL
aXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8Z2xp
Yi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0geworICAgIFJFQ0VJVkVEX0RBVEEsCisgICAg
RklOSVNIRUQsCisgICAgRkFJTEVELAorICAgIERFQ0lERV9ERVNUSU5BVElPTiwKKyAgICBDUkVB
VEVEX0RFU1RJTkFUSU9OLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAgIFBS
T1BfMCwKKworICAgIFBST1BfREVTVElOQVRJT04sCisgICAgUFJPUF9SRVNQT05TRSwKKyAgICBQ
Uk9QX0VTVElNQVRFRF9QUk9HUkVTUworfTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZFByaXZh
dGUgeworICAgIFdLUmV0YWluUHRyPFdLRG93bmxvYWRSZWY+IHdrRG93bmxvYWQ7CisKKyAgICBH
UmVmUHRyPFdlYktpdFVSSVJlc3BvbnNlPiByZXNwb25zZTsKKyAgICBDU3RyaW5nIGRlc3RpbmF0
aW9uVVJJOworICAgIGd1aW50NjQgY3VycmVudFNpemU7CisgICAgYm9vbCBpc0NhbmNlbGxlZDsK
KyAgICBHT3duUHRyPEdUaW1lcj4gdGltZXI7Cit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tM
QVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RG93bmxvYWQsIHdl
YmtpdF9kb3dubG9hZCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0RG93bmxv
YWRGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0RPV05MT0FEKG9iamVj
dCktPnByaXYtPn5XZWJLaXREb3dubG9hZFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG93bmxvYWRfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0RG93bmxvYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdl
YktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT046CisgICAgICAgIGdf
dmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihk
b3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVTUE9OU0U6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25z
ZShkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVNUSU1BVEVEX1BS
T0dSRVNTOgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb3dubG9h
ZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29u
c3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIGlmICghZG93bmxvYWQtPnByaXYt
PmRlc3RpbmF0aW9uVVJJLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgR093
blB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfc3BlY2lh
bF9kaXIoR19VU0VSX0RJUkVDVE9SWV9ET1dOTE9BRCksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxM
KSk7CisgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVuYW1lX3RvX3VyaShk
ZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgIGRvd25sb2FkLT5wcml2LT5kZXN0aW5hdGlv
blVSSSA9IGRlc3RpbmF0aW9uVVJJLmdldCgpOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChkb3dubG9hZCksICJkZXN0aW5hdGlvbiIpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKGRvd25sb2FkLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRQcml2
YXRlKTsKKyAgICBkb3dubG9hZC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRE
b3dubG9hZFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2NsYXNz
X2luaXQoV2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRDbGFzcyk7CisgICAg
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdERvd25sb2FkR2V0UHJvcGVydHk7Cisg
ICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RG93bmxvYWRGaW5hbGl6ZTsKKworICAg
IGRvd25sb2FkQ2xhc3MtPmRlY2lkZV9kZXN0aW5hdGlvbiA9IHdlYmtpdERvd25sb2FkRGVjaWRl
RGVzdGluYXRpb247CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlv
bjoKKyAgICAgKgorICAgICAqIFRoZSBVUkkgd2hlcmUgdGhlIGRvd25sb2FkIHdpbGwgYmUgc2F2
ZWQuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVTVElOQVRJ
T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKCJkZXN0aW5hdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkRlc3RpbmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBVUkkgd2hlcmUgdGhl
IGRvd25sb2FkIHdpbGwgYmUgc2F2ZWQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6cmVzcG9uc2U6CisgICAgICoKKyAgICAg
KiBUaGUgcmVzcG9uc2Ugb2YgdGhlIGRvd25sb2FkLgorICAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgicmVzcG9uc2UiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJSZXNwb25zZSIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgcmVzcG9uc2Ugb2YgdGhlIGRvd25sb2FkIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1VSSV9SRVNQT05T
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3du
bG9hZDplc3RpbWF0ZWQtcHJvZ3Jlc3M6CisgICAgICoKKyAgICAgKiBBbiBlc3RpbWF0ZSBvZiB0
aGUgcGVyY2VudCBjb21wbGV0aW9uIGZvciB0aGUgZG93bmxvYWQgb3BlcmF0aW9uLgorICAgICAq
IFRoaXMgdmFsdWUgd2lsbCByYW5nZSBmcm9tIDAuMCB0byAxLjAuIFRoZSB2YWx1ZSBpcyBhbiBl
c3RpbWF0ZQorICAgICAqIGJhc2VkIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgZXhwZWN0
ZWQgdG8gYmUgcmVjZWl2ZWQgZm9yCisgICAgICogYSBkb3dubG9hZC4KKyAgICAgKiBJZiB5b3Ug
bmVlZCBhIG1vcmUgYWNjdXJhdGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24geW91IGNhbiBjb25uZWN0
IHRvCisgICAgICogI1dlYktpdERvd25sb2FkOjpyZWNlaXZlZC1kYXRhIHNpZ25hbCB0byB0cmFj
ayB0aGUgcHJvZ3Jlc3MuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfRVNUSU1BVEVEX1BST0dSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX2RvdWJsZSgiZXN0aW1hdGVkLXByb2dyZXNzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRXN0aW1hdGVk
IFByb2dyZXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGRv
d25sb2FkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMCwgMS4wLCAxLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
LyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OnJlY2VpdmVkLWRhdGE6CisgICAgICogQGRvd25s
b2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICogQGRhdGFfbGVuZ3RoOiB0aGUgbGVuZ3Ro
IG9mIGRhdGEgcmVjZWl2ZWQgaW4gYnl0ZXMKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQgYWZ0ZXIgcmVzcG9uc2UgaXMgcmVjZWl2ZWQsCisgICAgICogZXZlcnkgdGltZSBu
ZXcgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBkZXN0aW5hdGlvbi4gSXQncworICAgICAq
IHVzZWZ1bCB0byBrbm93IHRoZSBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQgb3BlcmF0aW9uLgor
ICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9t
IGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdh
dGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tSRUNFSVZFRF9EQVRB
XSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicmVjZWl2ZWQtZGF0YSIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09G
RlNFVChXZWJLaXREb3dubG9hZENsYXNzLCByZWNlaXZlZF9kYXRhKSwKKyAgICAgICAgICAgICAg
ICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAg
ICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1VJTlQ2NCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X1VJTlQ2NCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDo6ZmluaXNoZWQ6Cisg
ICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICoKKyAgICAgKiBUaGlz
IHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gZG93bmxvYWQgY29tcGxldGVzLiBJbiBjYXNlIG9mIGVy
cm9ycywKKyAgICAgKiB0aGUgZG93bmxvYWQgZmluaXNoZXMgd2hlbiAjV2ViS2l0RG93bmxvYWQ6
OmZhaWxlZCBzaWduYWwgaXMgZW1pdHRlZC4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVF
IHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQu
CisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAq
LworICAgIHNpZ25hbHNbRklOSVNIRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmaW5pc2hl
ZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyks
CisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBmaW5pc2hlZCksCisg
ICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5V
TEwsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOworCisgICAgLyoqCisgICAg
ICogV2ViS2l0RG93bmxvYWQ6OmZhaWxlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0
RG93bmxvYWQKKyAgICAgKiBAZXJyb3I6IHRoZSAjR0Vycm9yIHRoYXQgd2FzIHRyaWdnZXJlZAor
ICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3Vy
cyBkdXJpbmcgdGhlIGRvd25sb2FkCisgICAgICogb3BlcmF0aW9uLiBUaGUgZ2l2ZW4gQGVycm9y
LCBvZiB0aGUgZG9tYWluICVXRUJLSVRfRE9XTkxPQURfRVJST1IsCisgICAgICogY29udGFpbnMg
ZnVydGhlciBkZXRhaWxzIG9mIHRoZSBmYWlsdXJlLiBJZiB0aGUgZG93bmxvYWQgaXMgY2FuY2Vs
bGVkCisgICAgICogd2l0aCB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKCksIHRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQgd2l0aCBlcnJvcgorICAgICAqICVXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VM
TEVEX0JZX1VTRVIuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVy
IGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZB
TFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxz
W0ZBSUxFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZhaWxlZCIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09G
RlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBmYWlsZWQpLAorICAgICAgICAgICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BPSU5U
RVIpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OmRlY2lkZS1kZXN0aW5hdGlv
bjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAgICAgKiBAc3VnZ2Vz
dGVkX2ZpbGVuYW1lOiB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGZvciB0aGUgZG93bmxvYWQKKyAg
ICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYWZ0ZXIgcmVzcG9uc2UgaXMgcmVj
ZWl2ZWQgdG8KKyAgICAgKiBkZWNpZGUgYSBkZXN0aW5hdGlvbiBVUkkgZm9yIHRoZSBkb3dubG9h
ZC4gSWYgdGhpcyBzaWduYWwgaXMgbm90CisgICAgICogaGFuZGxlZCB0aGUgZmlsZSB3aWxsIGJl
IGRvd25sb2FkZWQgdG8gJUdfVVNFUl9ESVJFQ1RPUllfRE9XTkxPQUQKKyAgICAgKiBkaXJlY3Rv
cnkgdXNpbmcgQHN1Z2dlc3RlZF9maWxlbmFtZS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVU
UlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZl
bnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAg
ICAqLworICAgIHNpZ25hbHNbREVDSURFX0RFU1RJTkFUSU9OXSA9CisgICAgICAgIGdfc2lnbmFs
X25ldygiZGVjaWRlLWRlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JV
Tl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25s
b2FkQ2xhc3MsIGRlY2lkZV9kZXN0aW5hdGlvbiksCisgICAgICAgICAgICAgICAgICAgICBnX3Np
Z25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OmNyZWF0ZWQtZGVzdGluYXRpb246Cisg
ICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICogQGRlc3RpbmF0aW9u
OiB0aGUgZGVzdGluYXRpb24gVVJJCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0
dGVkIGFmdGVyICNXZWJLaXREb3dubG9hZDo6ZGVjaWRlLWRlc3RpbmF0aW9uIHRvCisgICAgICog
bm90aWZ5IHRoYXQgZGVzdGluYXRpb24gZmlsZSBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxs
eSBhdCBAZGVzdGluYXRpb24uCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9w
IG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAq
ICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBz
aWduYWxzW0NSRUFURURfREVTVElOQVRJT05dID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjcmVh
dGVkLWRlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xhc3Ms
IGNyZWF0ZWRfZGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNj
dW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfQk9PTEVBTl9fU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JP
T0xFQU4sIDEsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShkb3dubG9hZENsYXNzLCBzaXplb2YoV2ViS2l0RG93bmxv
YWRQcml2YXRlKSk7Cit9CisKK1dlYktpdERvd25sb2FkKiB3ZWJraXREb3dubG9hZENyZWF0ZShX
S0Rvd25sb2FkUmVmIHdrRG93bmxvYWQpCit7CisgICAgQVNTRVJUKHdrRG93bmxvYWQpOworICAg
IFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfRE9XTkxPQUQsIE5VTEwpKTsKKyAgICBkb3dubG9hZC0+cHJpdi0+d2tEb3du
bG9hZCA9IHdrRG93bmxvYWQ7CisgICAgcmV0dXJuIGRvd25sb2FkOworfQorCit2b2lkIHdlYmtp
dERvd25sb2FkU2V0UmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJLaXRVUklS
ZXNwb25zZSogcmVzcG9uc2UpCit7CisgICAgZG93bmxvYWQtPnByaXYtPnJlc3BvbnNlID0gcmVz
cG9uc2U7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgInJlc3BvbnNl
Iik7Cit9CisKK2Jvb2wgd2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgcmV0dXJuIGRvd25sb2FkLT5wcml2LT5pc0NhbmNlbGxlZDsKK30K
Kwordm9pZCB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQoreworICAgIFdlYktpdERvd25sb2FkUHJpdmF0
ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmIChwcml2LT5pc0NhbmNlbGxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFkb3dubG9hZC0+cHJpdi0+dGltZXIpCisgICAgICAg
IGRvd25sb2FkLT5wcml2LT50aW1lci5zZXQoZ190aW1lcl9uZXcoKSk7CisKKyAgICBwcml2LT5j
dXJyZW50U2l6ZSArPSBieXRlc1JlY2VpdmVkOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOwor
ICAgIGdfc2lnbmFsX2VtaXQoZG93bmxvYWQsIHNpZ25hbHNbUkVDRUlWRURfREFUQV0sIDAsIGJ5
dGVzUmVjZWl2ZWQsICZyZXR1cm5WYWx1ZSk7CisKKyAgICAvLyBUaHJvdHRsZSBwcm9ncmVzcyBu
b3RpZmljYXRpb24gdG8gbm90IGNvbnN1bWUgaGlnaCBhbW91bnRzIG9mCisgICAgLy8gQ1BVIG9u
IGZhc3QgbGlua3MsIGV4Y2VwdCB3aGVuIHRoZSBsYXN0IG5vdGlmaWNhdGlvbiBvY2N1cmVkCisg
ICAgLy8gaW4gbW9yZSB0aGVuIDAuNyBzZWNzIGZyb20gbm93LCBvciB0aGUgbGFzdCBub3RpZmll
ZCBwcm9ncmVzcworICAgIC8vIGlzIHBhc3NlZCBpbiAxJSBvciB3ZSByZWFjaGVkIHRoZSBlbmQu
CisgICAgc3RhdGljIGdkb3VibGUgbGFzdFByb2dyZXNzID0gMDsKKyAgICBzdGF0aWMgZ2RvdWJs
ZSBsYXN0RWxhcHNlZCA9IDA7CisgICAgZ2RvdWJsZSBjdXJyZW50RWxhcHNlZCA9IGdfdGltZXJf
ZWxhcHNlZChwcml2LT50aW1lci5nZXQoKSwgMCk7CisgICAgZ2RvdWJsZSBjdXJyZW50UHJvZ3Jl
c3MgPSB3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZCk7CisK
KyAgICBpZiAobGFzdEVsYXBzZWQKKyAgICAgICAgJiYgbGFzdFByb2dyZXNzCisgICAgICAgICYm
IChjdXJyZW50RWxhcHNlZCAtIGxhc3RFbGFwc2VkKSA8IDAuNworICAgICAgICAmJiAoY3VycmVu
dFByb2dyZXNzIC0gbGFzdFByb2dyZXNzKSA8IDAuMDEKKyAgICAgICAgJiYgY3VycmVudFByb2dy
ZXNzIDwgMS4wKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGFzdEVsYXBzZWQgPSBj
dXJyZW50RWxhcHNlZDsKKyAgICBsYXN0UHJvZ3Jlc3MgPSBjdXJyZW50UHJvZ3Jlc3M7CisgICAg
Z19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGRvd25sb2FkKSwgImVzdGltYXRlZC1wcm9ncmVzcyIp
OworfQorCit2b2lkIHdlYmtpdERvd25sb2FkRmFpbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3sKKyAgICBHT3duUHRyPEdF
cnJvcj4gd2ViRXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJhbChnX3F1YXJrX2Zyb21fc3RyaW5nKHJl
c291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5lcnJvckNvZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJj
ZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRmOCgpLmRhdGEoKSkpOworICAgIGlmIChk
b3dubG9hZC0+cHJpdi0+dGltZXIpCisgICAgICAgIGdfdGltZXJfc3RvcChkb3dubG9hZC0+cHJp
di0+dGltZXIuZ2V0KCkpOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFs
X2VtaXQoZG93bmxvYWQsIHNpZ25hbHNbRkFJTEVEXSwgMCwgd2ViRXJyb3IuZ2V0KCksICZyZXR1
cm5WYWx1ZSk7Cit9CisKK3ZvaWQgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25s
b2FkLT5wcml2OworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gcHJpdi0+cmVzcG9uc2UgPyB3
ZWJraXRVUklSZXNwb25zZUdldFNvdXBNZXNzYWdlKHByaXYtPnJlc3BvbnNlLmdldCgpKSA6IDA7
CisgICAgd2Via2l0RG93bmxvYWRGYWlsZWQoZG93bmxvYWQsIGRvd25sb2FkQ2FuY2VsbGVkQnlV
c2VyRXJyb3IobWVzc2FnZSA/IFJlc291cmNlUmVzcG9uc2UobWVzc2FnZSkgOiBSZXNvdXJjZVJl
c3BvbnNlKCkpKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9hZEZpbmlzaGVkKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBpZiAoZG93bmxvYWQtPnByaXYtPmlzQ2FuY2VsbGVkKSB7
CisgICAgICAgIC8vIFNpbmNlIGNhbmNlbGxhdGlvbiBpcyBhc3luY2hyb25vdXMsIGRpZEZpbmlz
aCBtaWdodCBiZSBjYWxsZWQgZXZlbgorICAgICAgICAvLyBpZiB0aGUgZG93bmxvYWQgd2FzIGNh
bmNlbGxlZC4gVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2FkLAorICAgICAgICAvLyBzbyB3ZSBz
aG91bGQgZmFpbCB3aXRoIGNhbmNlbGxlZCBlcnJvciBldmVuIGlmIHRoZSBkb3dubG9hZAorICAg
ICAgICAvLyBhY3R1YWxseSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgICAgICAgIHdlYmtpdERv
d25sb2FkQ2FuY2VsbGVkKGRvd25sb2FkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoZG93bmxvYWQtPnByaXYtPnRpbWVyKQorICAgICAgICBnX3RpbWVyX3N0b3AoZG93bmxvYWQt
PnByaXYtPnRpbWVyLmdldCgpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3Np
Z25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0ZJTklTSEVEXSwgMCwgJnJldHVyblZhbHVlKTsK
K30KKworQ1N0cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgQ1N0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUpCit7CisgICAgaWYgKGRvd25sb2FkLT5wcml2LT5pc0NhbmNlbGxlZCkKKyAg
ICAgICAgcmV0dXJuICIiOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFs
X2VtaXQoZG93bmxvYWQsIHNpZ25hbHNbREVDSURFX0RFU1RJTkFUSU9OXSwgMCwgc3VnZ2VzdGVk
RmlsZW5hbWUuZGF0YSgpLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBkb3dubG9hZC0+cHJp
di0+ZGVzdGluYXRpb25VUkk7Cit9CisKK3ZvaWQgd2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNy
ZWF0ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBDU3RyaW5nJiBkZXN0aW5hdGlv
blVSSSkKK3sKKyAgICBpZiAoZG93bmxvYWQtPnByaXYtPmlzQ2FuY2VsbGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChkb3du
bG9hZCwgc2lnbmFsc1tDUkVBVEVEX0RFU1RJTkFUSU9OXSwgMCwgZGVzdGluYXRpb25VUkkuZGF0
YSgpLCAmcmV0dXJuVmFsdWUpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVz
dGluYXRpb246CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogT2J0YWlu
cyB0aGUgVVJJIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZpbGUgd2lsbCBiZSB3cml0dGVuLiBZ
b3UKKyAqIGNhbiBjb25uZWN0IHRvICNXZWJLaXREb3dubG9hZDo6Y3JlYXRlZC1kZXN0aW5hdGlv
biB0byBtYWtlCisgKiBzdXJlIHRoaXMgbWV0aG9kIHJldHVybnMgYSB2YWxpZCBkZXN0aW5hdGlv
bi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVzdGluYXRpb24gVVJJIG9yICVOVUxMCisgKi8KK2Nv
bnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxP
QUQoZG93bmxvYWQpLCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+cHJpdi0+ZGVzdGluYXRp
b25VUkkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRp
b246CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKiBAdXJpOiB0aGUgZGVzdGlu
YXRpb24gVVJJCisgKgorICogU2V0cyB0aGUgVVJJIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZp
bGUgd2lsbCBiZSB3cml0dGVuLgorICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBiZWZv
cmUgdGhlIGRvd25sb2FkIHRyYW5zZmVyCisgKiBzdGFydHMgb3IgaXQgd2lsbCBub3QgaGF2ZSBh
bnkgZWZmZWN0IG9uIHRoZSBvbmdvaW5nIGRvd25sb2FkCisgKiBvcGVyYXRpb24uIFRvIHNldCB0
aGUgZGVzdGluYXRpb24gdXNpbmcgdGhlIGZpbGVuYW1lIHN1Z2dlc3RlZAorICogYnkgdGhlIHNl
cnZlciBjb25uZWN0IHRvICNXZWJLaXREb3dubG9hZDo6ZGVjaWRlLWRlc3RpbmF0aW9uCisgKiBz
aWduYWwgYW5kIGNhbGwgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbigpLiBJZiB5b3Ug
d2FudCB0bworICogc2V0IGEgZml4ZWQgZGVzdGluYXRpb24gVVJJIHRoYXQgZG9lc24ndCBkZXBl
bmQgb24gdGhlIHN1Z2dlc3RlZAorICogZmlsZW5hbWUgeW91IGNhbiBjb25uZWN0IHRvIG5vdGlm
eTo6cmVzcG9uc2Ugc2lnbmFsIGFuZCBjYWxsCisgKiB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3Rp
bmF0aW9uKCkuCisgKiBJZiAjV2ViS2l0RG93bmxvYWQ6OmRlY2lkZS1kZXN0aW5hdGlvbiBzaWdu
YWwgaXMgbm90IGhhbmRsZWQKKyAqIGFuZCBkZXN0aW5hdGlvbiBVUkkgaXMgbm90IHNldCB3aGVu
IHRoZSBkb3dubG9hZCB0cmFuZmVyIHN0YXJ0cywKKyAqIHRoZSBmaWxlIHdpbGwgYmUgc2F2ZWQg
d2l0aCB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGJ5IHRoZSBzZXJ2ZXIgaW4KKyAqICVHX1VTRVJf
RElSRUNUT1JZX0RPV05MT0FEIGRpcmVjdG9yeS4KKyAqLwordm9pZCB3ZWJraXRfZG93bmxvYWRf
c2V0X2Rlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHVy
aSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCkp
OworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0
ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmIChwcml2LT5kZXN0aW5hdGlvblVSSSA9
PSB1cmkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPmRlc3RpbmF0aW9uVVJJID0gdXJp
OworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJkZXN0aW5hdGlvbiIp
OworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2U6CisgKiBAZG93bmxv
YWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0cmlldmVzIHRoZSAjV2ViS2l0VVJJUmVz
cG9uc2Ugb2JqZWN0IHRoYXQgYmFja3MgdGhlIGRvd25sb2FkCisgKiBwcm9jZXNzLiBUaGlzIG1l
dGhvZCByZXR1cm5zICVOVUxMIGlmIGNhbGxlZCBiZWZvcmUgdGhlIHJlc3BvbnNlCisgKiBpcyBy
ZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuIFlvdSBjYW4gY29ubmVjdCB0byBub3RpZnk6OnJlc3Bv
bnNlCisgKiBzaWduYWwgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2
ZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFVSSVJlc3Bv
bnNlLCBvciAlTlVMTCBpZgorICogICAgIHRoZSByZXNwb25zZSBoYXNuJ3QgYmVlbiByZWNlaXZl
ZCB5ZXQuCisgKi8KK1dlYktpdFVSSVJlc3BvbnNlKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3Bv
bnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIHJldHVybiBkb3dubG9h
ZC0+cHJpdi0+cmVzcG9uc2UuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2Nh
bmNlbDoKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxvYWQKKyAqCisgKiBDYW5jZWxzIHRo
ZSBkb3dubG9hZC4gV2hlbiB0aGUgb25nb2luZyBkb3dubG9hZAorICogb3BlcmF0aW9uIGlzIGVm
ZmVjdGl2ZWx5IGNhbmNlbGxlZCB0aGUgc2lnbmFsCisgKiAjV2ViS2l0RG93bmxvYWQ6OmZhaWxl
ZCBpcyBlbWl0dGVkIHdpdGgKKyAqICVXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZ
X1VTRVIgZXJyb3IuCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChXZWJLaXREb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxP
QUQoZG93bmxvYWQpKTsKKworICAgIGRvd25sb2FkLT5wcml2LT5pc0NhbmNlbGxlZCA9IHRydWU7
CisgICAgV0tEb3dubG9hZENhbmNlbChkb3dubG9hZC0+cHJpdi0+d2tEb3dubG9hZC5nZXQoKSk7
Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3M6Cisg
KiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogR2V0cyB0aGUgdmFsdWUgb2Yg
dGhlICNXZWJLaXREb3dubG9hZDplc3RpbWF0ZWQtcHJvZ3Jlc3MgcHJvcGVydHkuCisgKiBZb3Ug
Y2FuIG1vbml0b3IgdGhlIGVzdGltYXRlZCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQgb3BlcmF0
aW9uIGJ5CisgKiBjb25uZWN0aW5nIHRvIHRoZSBub3RpZnk6OmVzdGltYXRlZC1wcm9ncmVzcyBz
aWduYWwgb2YgQGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6IGFuIGVzdGltYXRlIG9mIHRoZSBv
ZiB0aGUgcGVyY2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAgIGFzIGEgcmFuZ2Ug
ZnJvbSAwLjAgdG8gMS4wLgorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktp
dERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmICghcHJpdi0+
cmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgZ3VpbnQ2NCBjb250ZW50TGVuZ3Ro
ID0gd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfY29udGVudF9sZW5ndGgocHJpdi0+cmVzcG9uc2Uu
Z2V0KCkpOworICAgIGlmICghY29udGVudExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4ocHJpdi0+Y3VycmVudFNpemUpIC8gc3RhdGlj
X2Nhc3Q8Z2RvdWJsZT4oY29udGVudExlbmd0aCk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25s
b2FkX2dldF9lbGFwc2VkX3RpbWU6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisg
KgorICogR2V0cyB0aGUgZWxhcHNlZCB0aW1lIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJh
Y3Rpb25hbCBwYXJ0LgorICogSWYgdGhlIGRvd25sb2FkIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Ig
b3Igd2FzIGNhbmNlbGxlZCB0aGlzIGlzCisgKiB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBh
bmQgdGhlIGV2ZW50LgorICoKKyAqIFJldHVybnM6IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2Fk
IHdhcyBzdGFydGVkCisgKi8KK2dkb3VibGUgd2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3Rp
bWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDApOworCisgICAgV2ViS2l0RG93bmxvYWRQ
cml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKCFwcml2LT50aW1lcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ190aW1lcl9lbGFwc2VkKHByaXYtPnRpbWVy
LmdldCgpLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NTNh
ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVm
aW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIu
aD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERv
d25sb2FkX2gKKyNkZWZpbmUgV2ViS2l0RG93bmxvYWRfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9ET1dOTE9BRCAgICAgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUoKSkK
KyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FELCBXZWJLaXREb3dubG9hZCkp
CisjZGVmaW5lIFdFQktJVF9JU19ET1dOTE9BRChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJ
VF9ET1dOTE9BRF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRDbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19ET1dOTE9BRF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9B
RF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXREb3dubG9hZCAgICAgICAgV2ViS2l0RG93bmxvYWQ7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RG93bmxvYWRDbGFzcyAgIFdlYktpdERvd25sb2FkQ2xhc3M7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RG93bmxvYWRQcml2YXRlIFdlYktpdERvd25sb2FkUHJpdmF0ZTsKKworc3RydWN0
IF9XZWJLaXREb3dubG9hZCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXREb3du
bG9hZFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkQ2xhc3Mgewor
ICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICBnYm9vbGVhbiAoKiByZWNlaXZl
ZF9kYXRhKSAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICAgZGF0YV9sZW5ndGgpOworICAg
IGdib29sZWFuICgqIGZpbmlzaGVkKSAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxv
YWQpOworICAgIGdib29sZWFuICgqIGZhaWxlZCkgICAgICAgICAgICAgIChXZWJLaXREb3dubG9h
ZCAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv
ciAgICAgICAgICplcnJvcik7CisgICAgZ2Jvb2xlYW4gKCogZGVjaWRlX2Rlc3RpbmF0aW9uKSAg
KFdlYktpdERvd25sb2FkICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIgICAgKnN1Z2dlc3RlZF9maWxlbmFtZSk7CisgICAgZ2Jvb2xl
YW4gKCogY3JlYXRlZF9kZXN0aW5hdGlvbikgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKmRlc3Rp
bmF0aW9uKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfdHlw
ZSAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJr
aXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25s
b2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9u
ICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICp1cmkpOworCitXRUJLSVRfQVBJIFdl
YktpdFVSSVJlc3BvbnNlKgord2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZSAgICAgICAgICAg
KFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
d25sb2FkX2NhbmNlbCAgICAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7
CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJv
Z3Jlc3MgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQor
d2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUgICAgICAgKFdlYktpdERvd25sb2FkICpk
b3dubG9hZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGRiNDAzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmgK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYktpdERvd25sb2FkUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktp
dERvd25sb2FkUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tEb3dubG9h
ZC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworV2ViS2l0RG93bmxvYWQqIHdlYmtpdERvd25sb2FkQ3JlYXRlKFdLRG93bmxvYWRS
ZWYpOworYm9vbCB3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKFdlYktpdERvd25sb2FkKik7Cit2
b2lkIHdlYmtpdERvd25sb2FkU2V0UmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqLCBXZWJLaXRVUklS
ZXNwb25zZSopOwordm9pZCB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKFdlYktpdERvd25s
b2FkKiwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKTsKK3ZvaWQgd2Via2l0RG93bmxvYWRGYWlsZWQo
V2ViS2l0RG93bmxvYWQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Cit2b2lkIHdl
YmtpdERvd25sb2FkQ2FuY2VsbGVkKFdlYktpdERvd25sb2FkKik7Cit2b2lkIHdlYmtpdERvd25s
b2FkRmluaXNoZWQoV2ViS2l0RG93bmxvYWQqKTsKK0NTdHJpbmcgd2Via2l0RG93bmxvYWREZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJLaXREb3dubG9hZCosIGNvbnN0
IENTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKTsKK3ZvaWQgd2Via2l0RG93bmxvYWREZXN0aW5h
dGlvbkNyZWF0ZWQoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBkZXN0aW5hdGlvblVS
SSk7CisKKyNlbmRpZiAvLyBXZWJLaXREb3dubG9hZFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKaW5kZXggYjQ5NTU1NS4uYWRiZmQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0CkBAIC0yNzEsNiArMjcxLDMwIEBAIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3R5cGUKIDwv
U0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXREb3dubG9hZDwvRklMRT4KK1dlYktp
dERvd25sb2FkCit3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uCit3ZWJraXRfZG93bmxv
YWRfc2V0X2Rlc3RpbmF0aW9uCit3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlCit3ZWJraXRf
ZG93bmxvYWRfY2FuY2VsCit3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcwor
d2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+
CitXZWJLaXREb3dubG9hZENsYXNzCitXRUJLSVRfVFlQRV9ET1dOTE9BRAorV0VCS0lUX0RPV05M
T0FECitXRUJLSVRfSVNfRE9XTkxPQUQKK1dFQktJVF9ET1dOTE9BRF9DTEFTUworV0VCS0lUX0lT
X0RPV05MT0FEX0NMQVNTCitXRUJLSVRfRE9XTkxPQURfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9O
IFByaXZhdGU+CitXZWJLaXREb3dubG9hZFByaXZhdGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfdHlw
ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEVycm9yPC9GSUxFPgogV0VC
S0lUX05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJST1IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRleCBh
MTk2YjljLi5jNjYzMDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC03LDMgKzcsNSBAQCB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X3R5cGUKIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX2dl
dF90eXBlCiB3ZWJraXRfc2V0dGluZ3NfZ2V0X3R5cGUKIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0
X3R5cGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggYzUwODhhZC4uYzNiMTljZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRE
ZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFcnJv
ci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IGI3
MDY5YTcuLjlkZmUyNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAtMSw1ICsxLDggQEAKIEJPT0xFQU46T0JKRUNU
LFNUUklORyxQT0lOVEVSCiBCT09MRUFOOk9CSkVDVAorQk9PTEVBTjpQT0lOVEVSCitCT09MRUFO
OlNUUklORworQk9PTEVBTjpVSU5UNjQKIEJPT0xFQU46Vk9JRAogVk9JRDpPQkpFQ1QsUE9JTlRF
UgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117631</attachid>
            <date>2011-12-02 08:34:25 -0800</date>
            <delta_ts>2012-01-23 06:39:04 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-download3.diff</filename>
            <type>text/plain</type>
            <size>34202</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGMzNmNlNDguLjFmYzUyYjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDExLTEyLTAyICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgV2ViS2l0
RG93bmxvYWQgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dPd25QdHIuY3BwOgorICAgICAgICAo
V1RGOjpHVGltZXIpOiBVc2UgZ190aW1lcl9kZXN0cm95KCkgdG8gZnJlZSBhIEdUaW1lci4KKyAg
ICAgICAgKiB3dGYvZ29iamVjdC9HT3duUHRyLmg6IEFkZCBHVGltZXIgdGVtcGxhdGUuCisgICAg
ICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6IEFkZCBHVGltZXIgZm9yd2FyZCBkZWNsYXJh
dGlvbi4KKwogMjAxMS0xMi0wMSAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBKU19JTkxJTkUgYW5kIFdURl9JTkxJTkUgc2hvdWxkIGJlIHZpc2libGUg
ZnJvbSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWFiNzJhZS4uYzcwOWFmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSw1ICsxLDU1IEBACiAyMDExLTEyLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBBZGQgV2ViS2l0RG93bmxvYWQgdG8gV2Vi
S2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXREb3dubG9hZEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdERvd25sb2FkR2V0
UHJvcGVydHkpOgorICAgICAgICAod2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbik6Cisg
ICAgICAgICh3ZWJraXRfZG93bmxvYWRfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXREb3dubG9hZENyZWF0ZSk6IENyZWF0ZSBhIG5l
dyBXZWJLaXREb3dubG9hZCBmb3IgYSBnaXZlbgorICAgICAgICBXS0Rvd25sb2FkUmVmLgorICAg
ICAgICAod2Via2l0RG93bmxvYWRTZXRSZXNwb25zZSk6IFNldCB0aGUgbmV0d29yayByZXNwb25z
ZSBvZiB0aGUKKyAgICAgICAgZG93bmxvYWQuCisgICAgICAgICh3ZWJraXREb3dubG9hZElzQ2Fu
Y2VsbGVkKTogV2hldGhlciB0aGUgZG93bmxvYWQgaGFzIGJlZW4KKyAgICAgICAgY2FuY2VsbGVk
IGJ5IHRoZSB1c2VyLgorICAgICAgICAod2Via2l0RG93bmxvYWROb3RpZnlQcm9ncmVzcyk6IEVt
aXQgbm90aWZ5Ojplc3RpbWF0ZWQtcHJvZ3Jlc3MgaWYKKyAgICAgICAgbmVlZGVkLgorICAgICAg
ICAod2Via2l0RG93bmxvYWRGYWlsZWQpOiBFbWl0IFdlYktpdERvd25sb2FkOjpmYWlsZWQgd2l0
aCB0aGUgZ2l2ZW4KKyAgICAgICAgZXJyb3IuCisgICAgICAgICh3ZWJraXREb3dubG9hZENhbmNl
bGxlZCk6IEVtaXQgV2ViS2l0RG93bmxvYWQ6OmZhaWxlZCB3aXRoCisgICAgICAgIGNhbmNlbGxl
ZCBlcnJvci4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkRmluaXNoZWQpOiBFbWl0IFdlYktpdERv
d25sb2FkOjpmaW5pc2hlZC4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUpOiBFbWl0CisgICAgICAgIFdlYktpdERvd25sb2FkOjpk
ZWNpZGUtZGVzdGluYXRpb24uCisgICAgICAgICh3ZWJraXREb3dubG9hZERlc3RpbmF0aW9uQ3Jl
YXRlZCk6IEVtaXQKKyAgICAgICAgV2ViS2l0RG93bmxvYWQ6OmNyZWF0ZWQtZGVzdGluYXRpb24u
CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKTogUmV0dXJuIHRoZSBk
ZXN0aW5hdGlvbiBVUkkgb2YKKyAgICAgICAgdGhlIGRvd25sb2FkLgorICAgICAgICAod2Via2l0
X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbik6IFNldCB0aGUgZGVzdGluYXRpb24gVVJJIG9mIHRo
ZQorICAgICAgICBkb3dubG9hZC4KKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9u
c2UpOiBSZXR1cm4gdGhlIHJlc3BvbnNlIHJlY2VpdmVkIGJ5CisgICAgICAgIHRoZSBzZXJ2ZXIu
CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfY2FuY2VsKTogQ2FuY2VsIHRoZSBkb3dubG9hZC4K
KyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKTogUmV0dXJu
IHRoZSBlc3RpbWF0ZWQKKyAgICAgICAgcHJvZ3Jlc3MuCisgICAgICAgICh3ZWJraXRfZG93bmxv
YWRfZ2V0X2VsYXBzZWRfdGltZSk6IFJldHVybiB0aGUgdGltZSBlbGFwc2VkIHNpbmNlCisgICAg
ICAgIHRoZSBkb3dubG9hZCBzdGFydGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Vi
a2l0X2Rvd25sb2FkX2dldF90eXBlKCkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oOiBBZGQgV2ViS2l0RG93bmxvYWQuaAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisKKzIwMTEtMTItMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBHVEsrIGJ1
aWxkIGFmdGVyIHIxMDE3NTAuCiAKICAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG1pc3Np
bmcgZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R093blB0ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0ci5j
cHAKaW5kZXggNTBjN2I5Zi4uNDE1ODY4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HT3duUHRyLmNwcApAQCAtNDksNiArNDksMTIgQEAgdGVtcGxhdGUgPD4gdm9p
ZCBmcmVlT3duZWRHUHRyPEdEaXI+KEdEaXIqIHB0cikKICAgICAgICAgZ19kaXJfY2xvc2UocHRy
KTsKIH0KIAordGVtcGxhdGUgPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdUaW1lcj4oR1RpbWVyKiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ190aW1lcl9kZXN0cm95KHB0cik7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEdMSUJfU1VQUE9SVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0ci5oCmluZGV4IDlmZjg1YzUu
LjU5M2I4MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9H
T3duUHRyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIu
aApAQCAtMzcsNiArMzcsNyBAQCB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRXJyb3I+
KEdFcnJvciopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R0xpc3Q+KEdMaXN0Kik7
CiB0ZW1wbGF0ZTw+IHZvaWQgZnJlZU93bmVkR1B0cjxHUGF0dGVyblNwZWM+KEdQYXR0ZXJuU3Bl
YyopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R0Rpcj4oR0RpciopOwordGVtcGxh
dGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R1RpbWVyPihHVGltZXIqKTsKIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGNsYXNzIEdPd25QdHIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdPd25Q
dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBl
ZGVmcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCmlu
ZGV4IDY2Y2VkZDYuLjIyYTBhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HVHlwZWRlZnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dv
YmplY3QvR1R5cGVkZWZzLmgKQEAgLTU4LDYgKzU4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dTb2Nr
ZXRDb25uZWN0aW9uIEdTb2NrZXRDb25uZWN0aW9uOwogdHlwZWRlZiBzdHJ1Y3QgX0dTb3VyY2Ug
R1NvdXJjZTsKIHR5cGVkZWYgc3RydWN0IF9HVmFyaWFudCBHVmFyaWFudDsKIHR5cGVkZWYgdW5p
b24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dUaW1lciBHVGltZXI7CiAK
ICNpZiBVU0UoQ0FJUk8pCiB0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJm
YWNlX3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDRjYTQ5NzcuLmUyYTYyYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCkBAIC04MSw2ICs4MSw3IEBAIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAorCSQoV2Vi
S2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQyKS9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaCBcCkBAIC01MTMsNiArNTE0LDkgQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEVycm9yLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpdmF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42MGNiMGEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsNTEwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXREb3dubG9hZC5oIgorCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRVUklSZXNwb25zZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Vy
cm9yc0d0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworZW51bSB7CisgICAgUkVDRUlWRURfREFUQSwKKyAgICBGSU5JU0hFRCwKKyAgICBG
QUlMRUQsCisgICAgREVDSURFX0RFU1RJTkFUSU9OLAorICAgIENSRUFURURfREVTVElOQVRJT04s
CisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9ERVNUSU5BVElPTiwKKyAgICBQUk9QX1JFU1BPTlNFLAorICAgIFBST1BfRVNUSU1BVEVEX1BS
T0dSRVNTCit9OworCitzdHJ1Y3QgX1dlYktpdERvd25sb2FkUHJpdmF0ZSB7CisgICAgV0tSZXRh
aW5QdHI8V0tEb3dubG9hZFJlZj4gd2tEb3dubG9hZDsKKworICAgIEdSZWZQdHI8V2ViS2l0VVJJ
UmVzcG9uc2U+IHJlc3BvbnNlOworICAgIENTdHJpbmcgZGVzdGluYXRpb25VUkk7CisgICAgZ3Vp
bnQ2NCBjdXJyZW50U2l6ZTsKKyAgICBib29sIGlzQ2FuY2VsbGVkOworICAgIEdPd25QdHI8R1Rp
bWVyPiB0aW1lcjsKKyAgICBnZG91YmxlIGxhc3RQcm9ncmVzczsKKyAgICBnZG91YmxlIGxhc3RF
bGFwc2VkOworfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9
OworCitHX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkLCB3ZWJraXRfZG93bmxvYWQsIEdfVFlQ
RV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkRmluYWxpemUoR09iamVjdCog
b2JqZWN0KQoreworICAgIFdFQktJVF9ET1dOTE9BRChvYmplY3QpLT5wcml2LT5+V2ViS2l0RG93
bmxvYWRQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Rvd25sb2FkX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdERvd25s
b2FkR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXREb3dubG9hZCogZG93bmxv
YWQgPSBXRUJLSVRfRE9XTkxPQUQob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7Cisg
ICAgY2FzZSBQUk9QX0RFU1RJTkFUSU9OOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFs
dWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX1JFU1BPTlNFOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0VTVElNQVRFRF9QUk9HUkVTUzoKKyAgICAgICAgZ192
YWx1ZV9zZXRfZG91YmxlKHZhbHVlLCB3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9n
cmVzcyhkb3dubG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3Bl
Yyk7CisgICAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0RG93bmxvYWREZWNpZGVEZXN0
aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRG
aWxlbmFtZSkKK3sKKyAgICBpZiAoIWRvd25sb2FkLT5wcml2LT5kZXN0aW5hdGlvblVSSS5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRp
b24oZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX3NwZWNpYWxfZGlyKEdfVVNFUl9ESVJFQ1RP
UllfRE9XTkxPQUQpLCBzdWdnZXN0ZWRGaWxlbmFtZSwgTlVMTCkpOworICAgIEdPd25QdHI8Y2hh
cj4gZGVzdGluYXRpb25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAs
IDApKTsKKyAgICBkb3dubG9hZC0+cHJpdi0+ZGVzdGluYXRpb25VUkkgPSBkZXN0aW5hdGlvblVS
SS5nZXQoKTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiZGVzdGlu
YXRpb24iKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25s
b2FkX2luaXQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIFdlYktpdERvd25sb2Fk
UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShkb3dubG9hZCwgV0VC
S0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkUHJpdmF0ZSk7CisgICAgZG93bmxvYWQt
PnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0RG93bmxvYWRQcml2YXRlKCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGFzc19pbml0KFdlYktpdERvd25sb2Fk
Q2xhc3MqIGRvd25sb2FkQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGRvd25sb2FkQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXREb3dubG9hZEdldFByb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdERvd25sb2FkRmluYWxpemU7CisKKyAgICBkb3dubG9hZENsYXNzLT5kZWNp
ZGVfZGVzdGluYXRpb24gPSB3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0aW9uOworCisgICAg
LyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6ZGVzdGluYXRpb246CisgICAgICoKKyAgICAgKiBU
aGUgVVJJIHdoZXJlIHRoZSBkb3dubG9hZCB3aWxsIGJlIHNhdmVkLgorICAgICAqLworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU1RJTkFUSU9OLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiZGVzdGluYXRpb24iLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJEZXN0aW5hdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJUaGUgVVJJIHdoZXJlIHRoZSBkb3dubG9hZCB3aWxsIGJlIHNh
dmVkLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdERvd25sb2FkOnJlc3BvbnNlOgorICAgICAqCisgICAgICogVGhlIHJlc3BvbnNlIG9mIHRo
ZSBkb3dubG9hZC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9S
RVNQT05TRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoInJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiUmVzcG9uc2UiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHJlc3BvbnNlIG9mIHRo
ZSBkb3dubG9hZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9VUklfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6ZXN0aW1hdGVkLXByb2dy
ZXNzOgorICAgICAqCisgICAgICogQW4gZXN0aW1hdGUgb2YgdGhlIHBlcmNlbnQgY29tcGxldGlv
biBmb3IgdGhlIGRvd25sb2FkIG9wZXJhdGlvbi4KKyAgICAgKiBUaGlzIHZhbHVlIHdpbGwgcmFu
Z2UgZnJvbSAwLjAgdG8gMS4wLiBUaGUgdmFsdWUgaXMgYW4gZXN0aW1hdGUKKyAgICAgKiBiYXNl
ZCBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkIGZv
cgorICAgICAqIGEgZG93bmxvYWQuCisgICAgICogSWYgeW91IG5lZWQgYSBtb3JlIGFjY3VyYXRl
IHByb2dyZXNzIGluZm9ybWF0aW9uIHlvdSBjYW4gY29ubmVjdCB0bworICAgICAqICNXZWJLaXRE
b3dubG9hZDo6cmVjZWl2ZWQtZGF0YSBzaWduYWwgdG8gdHJhY2sgdGhlIHByb2dyZXNzLgorICAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0VTVElNQVRFRF9QUk9HUkVT
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19kb3Vi
bGUoImVzdGltYXRlZC1wcm9ncmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkVzdGltYXRlZCBQcm9ncmVzcyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRl
cm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwg
MS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERv
d25sb2FkOjpyZWNlaXZlZC1kYXRhOgorICAgICAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3du
bG9hZAorICAgICAqIEBkYXRhX2xlbmd0aDogdGhlIGxlbmd0aCBvZiBkYXRhIHJlY2VpdmVkIGlu
IGJ5dGVzCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGFmdGVyIHJlc3Bv
bnNlIGlzIHJlY2VpdmVkLAorICAgICAqIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgaGFzIGJlZW4gd3Jp
dHRlbiB0byB0aGUgZGVzdGluYXRpb24uIEl0J3MKKyAgICAgKiB1c2VmdWwgdG8ga25vdyB0aGUg
cHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqIFJldHVy
bnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0
aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVy
LgorICAgICAqLworICAgIHNpZ25hbHNbUkVDRUlWRURfREFUQV0gPQorICAgICAgICBnX3NpZ25h
bF9uZXcoInJlY2VpdmVkLWRhdGEiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0RG93bmxvYWRD
bGFzcywgcmVjZWl2ZWRfZGF0YSksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1
bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRf
bWFyc2hhbF9CT09MRUFOX19VSU5UNjQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9P
TEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9VSU5UNjQpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RG93bmxvYWQ6OmZpbmlzaGVkOgorICAgICAqIEBkb3dubG9hZDogdGhl
ICNXZWJLaXREb3dubG9hZAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3
aGVuIGRvd25sb2FkIGNvbXBsZXRlcy4gSW4gY2FzZSBvZiBlcnJvcnMsCisgICAgICogdGhlIGRv
d25sb2FkIGZpbmlzaGVzIHdoZW4gI1dlYktpdERvd25sb2FkOjpmYWlsZWQgc2lnbmFsIGlzIGVt
aXR0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRs
ZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRv
IHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZJTklT
SEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmluaXNoZWQiLAorICAgICAgICAgICAgICAg
ICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0RG93bmxvYWRDbGFzcywgZmluaXNoZWQpLAorICAgICAgICAgICAgICAgICAgICAg
Z19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAg
IEdfVFlQRV9CT09MRUFOLCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2FkOjpm
YWlsZWQ6CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICogQGVy
cm9yOiB0aGUgI0dFcnJvciB0aGF0IHdhcyB0cmlnZ2VyZWQKKyAgICAgKgorICAgICAqIFRoaXMg
c2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBkb3dubG9h
ZAorICAgICAqIG9wZXJhdGlvbi4gVGhlIGdpdmVuIEBlcnJvciwgb2YgdGhlIGRvbWFpbiAlV0VC
S0lUX0RPV05MT0FEX0VSUk9SLAorICAgICAqIGNvbnRhaW5zIGZ1cnRoZXIgZGV0YWlscyBvZiB0
aGUgZmFpbHVyZS4gSWYgdGhlIGRvd25sb2FkIGlzIGNhbmNlbGxlZAorICAgICAqIHdpdGggd2Vi
a2l0X2Rvd25sb2FkX2NhbmNlbCgpLCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdpdGggZXJyb3IK
KyAgICAgKiAlV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLgorICAgICAq
CisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5n
IGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhl
IGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tGQUlMRURdID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0RG93bmxvYWRD
bGFzcywgZmFpbGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X0JPT0xFQU5fX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwg
MSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIC8qKgorICAg
ICAqIFdlYktpdERvd25sb2FkOjpkZWNpZGUtZGVzdGluYXRpb246CisgICAgICogQGRvd25sb2Fk
OiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICogQHN1Z2dlc3RlZF9maWxlbmFtZTogdGhlIGZp
bGVuYW1lIHN1Z2dlc3RlZCBmb3IgdGhlIGRvd25sb2FkCisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIGFmdGVyIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHRvCisgICAgICogZGVj
aWRlIGEgZGVzdGluYXRpb24gVVJJIGZvciB0aGUgZG93bmxvYWQuIElmIHRoaXMgc2lnbmFsIGlz
IG5vdAorICAgICAqIGhhbmRsZWQgdGhlIGZpbGUgd2lsbCBiZSBkb3dubG9hZGVkIHRvICVHX1VT
RVJfRElSRUNUT1JZX0RPV05MT0FECisgICAgICogZGlyZWN0b3J5IHVzaW5nIEBzdWdnZXN0ZWRf
ZmlsZW5hbWUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhh
bmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNF
IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW0RF
Q0lERV9ERVNUSU5BVElPTl0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImRlY2lkZS1kZXN0aW5h
dGlvbiIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFz
cyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBkZWNpZGVfZGVz
dGluYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1
ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9P
TEVBTl9fU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdERvd25sb2FkOjpjcmVhdGVkLWRlc3RpbmF0aW9uOgorICAgICAqIEBkb3dubG9hZDogdGhl
ICNXZWJLaXREb3dubG9hZAorICAgICAqIEBkZXN0aW5hdGlvbjogdGhlIGRlc3RpbmF0aW9uIFVS
SQorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2ViS2l0RG93
bmxvYWQ6OmRlY2lkZS1kZXN0aW5hdGlvbiB0bworICAgICAqIG5vdGlmeSB0aGF0IGRlc3RpbmF0
aW9uIGZpbGUgaGFzIGJlZW4gY3JlYXRlZCBzdWNjZXNzZnVsbHkgYXQgQGRlc3RpbmF0aW9uLgor
ICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9t
IGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdh
dGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2lnbmFsc1tDUkVBVEVEX0RFU1RJ
TkFUSU9OXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY3JlYXRlZC1kZXN0aW5hdGlvbiIsCisg
ICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAg
ICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAg
IEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBjcmVhdGVkX2Rlc3RpbmF0aW9u
KSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxl
ZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1NU
UklORywKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUoZG93bmxvYWRDbGFzcywgc2l6ZW9mKFdlYktpdERvd25sb2FkUHJpdmF0ZSkpOworfQorCitX
ZWJLaXREb3dubG9hZCogd2Via2l0RG93bmxvYWRDcmVhdGUoV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkKQoreworICAgIEFTU0VSVCh3a0Rvd25sb2FkKTsKKyAgICBXZWJLaXREb3dubG9hZCogZG93
bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPV05MT0FE
LCBOVUxMKSk7CisgICAgZG93bmxvYWQtPnByaXYtPndrRG93bmxvYWQgPSB3a0Rvd25sb2FkOwor
ICAgIHJldHVybiBkb3dubG9hZDsKK30KKwordm9pZCB3ZWJraXREb3dubG9hZFNldFJlc3BvbnNl
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlKQor
eworICAgIGRvd25sb2FkLT5wcml2LT5yZXNwb25zZSA9IHJlc3BvbnNlOworICAgIGdfb2JqZWN0
X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJyZXNwb25zZSIpOworfQorCitib29sIHdlYmtp
dERvd25sb2FkSXNDYW5jZWxsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIHJl
dHVybiBkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQ7Cit9CisKK3ZvaWQgd2Via2l0RG93bmxv
YWROb3RpZnlQcm9ncmVzcyhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgYnl0ZXNS
ZWNlaXZlZCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+
cHJpdjsKKyAgICBpZiAocHJpdi0+aXNDYW5jZWxsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghZG93bmxvYWQtPnByaXYtPnRpbWVyKQorICAgICAgICBkb3dubG9hZC0+cHJpdi0+dGlt
ZXIuc2V0KGdfdGltZXJfbmV3KCkpOworCisgICAgcHJpdi0+Y3VycmVudFNpemUgKz0gYnl0ZXNS
ZWNlaXZlZDsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KGRv
d25sb2FkLCBzaWduYWxzW1JFQ0VJVkVEX0RBVEFdLCAwLCBieXRlc1JlY2VpdmVkLCAmcmV0dXJu
VmFsdWUpOworCisgICAgLy8gVGhyb3R0bGUgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIHRvIG5vdCBj
b25zdW1lIGhpZ2ggYW1vdW50cyBvZgorICAgIC8vIENQVSBvbiBmYXN0IGxpbmtzLCBleGNlcHQg
d2hlbiB0aGUgbGFzdCBub3RpZmljYXRpb24gb2NjdXJlZAorICAgIC8vIGluIG1vcmUgdGhlbiAw
Ljcgc2VjcyBmcm9tIG5vdywgb3IgdGhlIGxhc3Qgbm90aWZpZWQgcHJvZ3Jlc3MKKyAgICAvLyBp
cyBwYXNzZWQgaW4gMSUgb3Igd2UgcmVhY2hlZCB0aGUgZW5kLgorICAgIGdkb3VibGUgY3VycmVu
dEVsYXBzZWQgPSBnX3RpbWVyX2VsYXBzZWQocHJpdi0+dGltZXIuZ2V0KCksIDApOworICAgIGdk
b3VibGUgY3VycmVudFByb2dyZXNzID0gd2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJv
Z3Jlc3MoZG93bmxvYWQpOworCisgICAgaWYgKHByaXYtPmxhc3RFbGFwc2VkCisgICAgICAgICYm
IHByaXYtPmxhc3RQcm9ncmVzcworICAgICAgICAmJiAoY3VycmVudEVsYXBzZWQgLSBwcml2LT5s
YXN0RWxhcHNlZCkgPCAwLjcKKyAgICAgICAgJiYgKGN1cnJlbnRQcm9ncmVzcyAtIHByaXYtPmxh
c3RQcm9ncmVzcykgPCAwLjAxCisgICAgICAgICYmIGN1cnJlbnRQcm9ncmVzcyA8IDEuMCkgewor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIHByaXYtPmxhc3RFbGFwc2VkID0gY3VycmVudEVs
YXBzZWQ7CisgICAgcHJpdi0+bGFzdFByb2dyZXNzID0gY3VycmVudFByb2dyZXNzOworICAgIGdf
b2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJlc3RpbWF0ZWQtcHJvZ3Jlc3MiKTsK
K30KKwordm9pZCB3ZWJraXREb3dubG9hZEZhaWxlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit7CisgICAgR093blB0cjxHRXJy
b3I+IHdlYkVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19xdWFya19mcm9tX3N0cmluZyhyZXNv
dXJjZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VF
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBpZiAoZG93
bmxvYWQtPnByaXYtPnRpbWVyKQorICAgICAgICBnX3RpbWVyX3N0b3AoZG93bmxvYWQtPnByaXYt
PnRpbWVyLmdldCgpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9l
bWl0KGRvd25sb2FkLCBzaWduYWxzW0ZBSUxFRF0sIDAsIHdlYkVycm9yLmdldCgpLCAmcmV0dXJu
VmFsdWUpOworfQorCit2b2lkIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9h
ZC0+cHJpdjsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZSA9IHByaXYtPnJlc3BvbnNlID8gd2Vi
a2l0VVJJUmVzcG9uc2VHZXRTb3VwTWVzc2FnZShwcml2LT5yZXNwb25zZS5nZXQoKSkgOiAwOwor
ICAgIHdlYmtpdERvd25sb2FkRmFpbGVkKGRvd25sb2FkLCBkb3dubG9hZENhbmNlbGxlZEJ5VXNl
ckVycm9yKG1lc3NhZ2UgPyBSZXNvdXJjZVJlc3BvbnNlKG1lc3NhZ2UpIDogUmVzb3VyY2VSZXNw
b25zZSgpKSk7Cit9CisKK3ZvaWQgd2Via2l0RG93bmxvYWRGaW5pc2hlZChXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgaWYgKGRvd25sb2FkLT5wcml2LT5pc0NhbmNlbGxlZCkgewor
ICAgICAgICAvLyBTaW5jZSBjYW5jZWxsYXRpb24gaXMgYXN5bmNocm9ub3VzLCBkaWRGaW5pc2gg
bWlnaHQgYmUgY2FsbGVkIGV2ZW4KKyAgICAgICAgLy8gaWYgdGhlIGRvd25sb2FkIHdhcyBjYW5j
ZWxsZWQuIFVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCwKKyAgICAgICAgLy8gc28gd2Ugc2hv
dWxkIGZhaWwgd2l0aCBjYW5jZWxsZWQgZXJyb3IgZXZlbiBpZiB0aGUgZG93bmxvYWQKKyAgICAg
ICAgLy8gYWN0dWFsbHkgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICB3ZWJraXREb3du
bG9hZENhbmNlbGxlZChkb3dubG9hZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGRvd25sb2FkLT5wcml2LT50aW1lcikKKyAgICAgICAgZ190aW1lcl9zdG9wKGRvd25sb2FkLT5w
cml2LT50aW1lci5nZXQoKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWdu
YWxfZW1pdChkb3dubG9hZCwgc2lnbmFsc1tGSU5JU0hFRF0sIDAsICZyZXR1cm5WYWx1ZSk7Cit9
CisKK0NTdHJpbmcgd2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IENTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQoreworICAgIGlmIChkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQpCisgICAg
ICAgIHJldHVybiAiIjsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9l
bWl0KGRvd25sb2FkLCBzaWduYWxzW0RFQ0lERV9ERVNUSU5BVElPTl0sIDAsIHN1Z2dlc3RlZEZp
bGVuYW1lLmRhdGEoKSwgJnJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gZG93bmxvYWQtPnByaXYt
PmRlc3RpbmF0aW9uVVJJOworfQorCit2b2lkIHdlYmtpdERvd25sb2FkRGVzdGluYXRpb25DcmVh
dGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgQ1N0cmluZyYgZGVzdGluYXRpb25V
UkkpCit7CisgICAgaWYgKGRvd25sb2FkLT5wcml2LT5pc0NhbmNlbGxlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoZG93bmxv
YWQsIHNpZ25hbHNbQ1JFQVRFRF9ERVNUSU5BVElPTl0sIDAsIGRlc3RpbmF0aW9uVVJJLmRhdGEo
KSwgJnJldHVyblZhbHVlKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIE9idGFpbnMg
dGhlIFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBmaWxlIHdpbGwgYmUgd3JpdHRlbi4gWW91
CisgKiBjYW4gY29ubmVjdCB0byAjV2ViS2l0RG93bmxvYWQ6OmNyZWF0ZWQtZGVzdGluYXRpb24g
dG8gbWFrZQorICogc3VyZSB0aGlzIG1ldGhvZCByZXR1cm5zIGEgdmFsaWQgZGVzdGluYXRpb24u
CisgKgorICogUmV0dXJuczogdGhlIGRlc3RpbmF0aW9uIFVSSSBvciAlTlVMTAorICovCitjb25z
dCBnY2hhciogd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FE
KGRvd25sb2FkKSwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmRlc3RpbmF0aW9u
VVJJLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9u
OgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICogQHVyaTogdGhlIGRlc3RpbmF0
aW9uIFVSSQorICoKKyAqIFNldHMgdGhlIFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBmaWxl
IHdpbGwgYmUgd3JpdHRlbi4KKyAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYmVmb3Jl
IHRoZSBkb3dubG9hZCB0cmFuc2ZlcgorICogc3RhcnRzIG9yIGl0IHdpbGwgbm90IGhhdmUgYW55
IGVmZmVjdCBvbiB0aGUgb25nb2luZyBkb3dubG9hZAorICogb3BlcmF0aW9uLiBUbyBzZXQgdGhl
IGRlc3RpbmF0aW9uIHVzaW5nIHRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQKKyAqIGJ5IHRoZSBzZXJ2
ZXIgY29ubmVjdCB0byAjV2ViS2l0RG93bmxvYWQ6OmRlY2lkZS1kZXN0aW5hdGlvbgorICogc2ln
bmFsIGFuZCBjYWxsIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oKS4gSWYgeW91IHdh
bnQgdG8KKyAqIHNldCBhIGZpeGVkIGRlc3RpbmF0aW9uIFVSSSB0aGF0IGRvZXNuJ3QgZGVwZW5k
IG9uIHRoZSBzdWdnZXN0ZWQKKyAqIGZpbGVuYW1lIHlvdSBjYW4gY29ubmVjdCB0byBub3RpZnk6
OnJlc3BvbnNlIHNpZ25hbCBhbmQgY2FsbAorICogd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5h
dGlvbigpLgorICogSWYgI1dlYktpdERvd25sb2FkOjpkZWNpZGUtZGVzdGluYXRpb24gc2lnbmFs
IGlzIG5vdCBoYW5kbGVkCisgKiBhbmQgZGVzdGluYXRpb24gVVJJIGlzIG5vdCBzZXQgd2hlbiB0
aGUgZG93bmxvYWQgdHJhbmZlciBzdGFydHMsCisgKiB0aGUgZmlsZSB3aWxsIGJlIHNhdmVkIHdp
dGggdGhlIGZpbGVuYW1lIHN1Z2dlc3RlZCBieSB0aGUgc2VydmVyIGluCisgKiAlR19VU0VSX0RJ
UkVDVE9SWV9ET1dOTE9BRCBkaXJlY3RvcnkuCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25sb2FkX3Nl
dF9kZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiB1cmkp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsK
KyAgICBnX3JldHVybl9pZl9mYWlsKHVyaSk7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUq
IHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAocHJpdi0+ZGVzdGluYXRpb25VUkkgPT0g
dXJpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5kZXN0aW5hdGlvblVSSSA9IHVyaTsK
KyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAiZGVzdGluYXRpb24iKTsK
K30KKworLyoqCisgKiB3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlOgorICogQGRvd25sb2Fk
OiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIFJldHJpZXZlcyB0aGUgI1dlYktpdFVSSVJlc3Bv
bnNlIG9iamVjdCB0aGF0IGJhY2tzIHRoZSBkb3dubG9hZAorICogcHJvY2Vzcy4gVGhpcyBtZXRo
b2QgcmV0dXJucyAlTlVMTCBpZiBjYWxsZWQgYmVmb3JlIHRoZSByZXNwb25zZQorICogaXMgcmVj
ZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiBZb3UgY2FuIGNvbm5lY3QgdG8gbm90aWZ5OjpyZXNwb25z
ZQorICogc2lnbmFsIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVk
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRVUklSZXNwb25z
ZSwgb3IgJU5VTEwgaWYKKyAqICAgICB0aGUgcmVzcG9uc2UgaGFzbid0IGJlZW4gcmVjZWl2ZWQg
eWV0LgorICovCitXZWJLaXRVUklSZXNwb25zZSogd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25z
ZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQt
PnByaXYtPnJlc3BvbnNlLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9jYW5j
ZWw6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogQ2FuY2VscyB0aGUg
ZG93bmxvYWQuIFdoZW4gdGhlIG9uZ29pbmcgZG93bmxvYWQKKyAqIG9wZXJhdGlvbiBpcyBlZmZl
Y3RpdmVseSBjYW5jZWxsZWQgdGhlIHNpZ25hbAorICogI1dlYktpdERvd25sb2FkOjpmYWlsZWQg
aXMgZW1pdHRlZCB3aXRoCisgKiAlV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9V
U0VSIGVycm9yLgorICovCit2b2lkIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FE
KGRvd25sb2FkKSk7CisKKyAgICBkb3dubG9hZC0+cHJpdi0+aXNDYW5jZWxsZWQgPSB0cnVlOwor
ICAgIFdLRG93bmxvYWRDYW5jZWwoZG93bmxvYWQtPnByaXYtPndrRG93bmxvYWQuZ2V0KCkpOwor
fQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzOgorICog
QGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoKKyAqIEdldHMgdGhlIHZhbHVlIG9mIHRo
ZSAjV2ViS2l0RG93bmxvYWQ6ZXN0aW1hdGVkLXByb2dyZXNzIHByb3BlcnR5LgorICogWW91IGNh
biBtb25pdG9yIHRoZSBlc3RpbWF0ZWQgcHJvZ3Jlc3Mgb2YgdGhlIGRvd25sb2FkIG9wZXJhdGlv
biBieQorICogY29ubmVjdGluZyB0byB0aGUgbm90aWZ5Ojplc3RpbWF0ZWQtcHJvZ3Jlc3Mgc2ln
bmFsIG9mIEBkb3dubG9hZC4KKyAqCisgKiBSZXR1cm5zOiBhbiBlc3RpbWF0ZSBvZiB0aGUgb2Yg
dGhlIHBlcmNlbnQgY29tcGxldGUgZm9yIGEgZG93bmxvYWQKKyAqICAgICBhcyBhIHJhbmdlIGZy
b20gMC4wIHRvIDEuMC4KKyAqLworZ2RvdWJsZSB3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRl
ZF9wcm9ncmVzcyhXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0RPV05MT0FEKGRvd25sb2FkKSwgMCk7CisKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICBpZiAoIXByaXYtPnJl
c3BvbnNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGd1aW50NjQgY29udGVudExlbmd0aCA9
IHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X2NvbnRlbnRfbGVuZ3RoKHByaXYtPnJlc3BvbnNlLmdl
dCgpKTsKKyAgICBpZiAoIWNvbnRlbnRMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGdkb3VibGU+KHByaXYtPmN1cnJlbnRTaXplKSAvIHN0YXRpY19j
YXN0PGdkb3VibGU+KGNvbnRlbnRMZW5ndGgpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9h
ZF9nZXRfZWxhcHNlZF90aW1lOgorICogQGRvd25sb2FkOiBhICNXZWJLaXREb3dubG9hZAorICoK
KyAqIEdldHMgdGhlIGVsYXBzZWQgdGltZSBpbiBzZWNvbmRzLCBpbmNsdWRpbmcgYW55IGZyYWN0
aW9uYWwgcGFydC4KKyAqIElmIHRoZSBkb3dubG9hZCBmaW5pc2hlZCwgaGFkIGFuIGVycm9yIG9y
IHdhcyBjYW5jZWxsZWQgdGhpcyBpcworICogdGhlIHRpbWUgYmV0d2VlbiBpdHMgc3RhcnQgYW5k
IHRoZSBldmVudC4KKyAqCisgKiBSZXR1cm5zOiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9hZCB3
YXMgc3RhcnRlZAorICovCitnZG91YmxlIHdlYmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1l
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJp
dmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmICghcHJpdi0+dGltZXIpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdfdGltZXJfZWxhcHNlZChwcml2LT50aW1lci5n
ZXQoKSwgMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjUzYWQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWQuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXREb3du
bG9hZF9oCisjZGVmaW5lIFdlYktpdERvd25sb2FkX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRVUklSZXNwb25zZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRE9XTkxPQUQgICAgICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET1dOTE9BRChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWQpKQor
I2RlZmluZSBXRUJLSVRfSVNfRE9XTkxPQUQob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRf
RE9XTkxPQURfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfRE9XTkxPQURfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfRE9XTkxPQUQsIFdlYktpdERvd25sb2FkQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RG93bmxvYWQgICAgICAgIFdlYktpdERvd25sb2FkOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdERvd25sb2FkQ2xhc3MgICBXZWJLaXREb3dubG9hZENsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERvd25sb2FkUHJpdmF0ZSBXZWJLaXREb3dubG9hZFByaXZhdGU7CisKK3N0cnVjdCBf
V2ViS2l0RG93bmxvYWQgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0RG93bmxv
YWRQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZENsYXNzIHsKKyAg
ICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgZ2Jvb2xlYW4gKCogcmVjZWl2ZWRf
ZGF0YSkgICAgICAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICAgIGRhdGFfbGVuZ3RoKTsKKyAgICBn
Ym9vbGVhbiAoKiBmaW5pc2hlZCkgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2Fk
KTsKKyAgICBnYm9vbGVhbiAoKiBmYWlsZWQpICAgICAgICAgICAgICAoV2ViS2l0RG93bmxvYWQg
KmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3Ig
ICAgICAgICAqZXJyb3IpOworICAgIGdib29sZWFuICgqIGRlY2lkZV9kZXN0aW5hdGlvbikgIChX
ZWJLaXREb3dubG9hZCAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICpzdWdnZXN0ZWRfZmlsZW5hbWUpOworICAgIGdib29sZWFu
ICgqIGNyZWF0ZWRfZGVzdGluYXRpb24pIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICpkZXN0aW5h
dGlvbik7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUg
ICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0
X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbiAgICAgICAgKFdlYktpdERvd25sb2FkICpkb3dubG9h
ZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbiAg
ICAgICAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAqdXJpKTsKKworV0VCS0lUX0FQSSBXZWJL
aXRVUklSZXNwb25zZSoKK3dlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UgICAgICAgICAgIChX
ZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb3du
bG9hZF9jYW5jZWwgICAgICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOwor
CitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dl
YmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93
bmxvYWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJLaXREb3dubG9hZFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRE
b3dubG9hZFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLRG93bmxvYWQu
aD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK1dlYktpdERvd25sb2FkKiB3ZWJraXREb3dubG9hZENyZWF0ZShXS0Rvd25sb2FkUmVm
KTsKK2Jvb2wgd2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChXZWJLaXREb3dubG9hZCopOwordm9p
ZCB3ZWJraXREb3dubG9hZFNldFJlc3BvbnNlKFdlYktpdERvd25sb2FkKiwgV2ViS2l0VVJJUmVz
cG9uc2UqKTsKK3ZvaWQgd2Via2l0RG93bmxvYWROb3RpZnlQcm9ncmVzcyhXZWJLaXREb3dubG9h
ZCosIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCk7Cit2b2lkIHdlYmtpdERvd25sb2FkRmFpbGVkKFdl
YktpdERvd25sb2FkKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwordm9pZCB3ZWJr
aXREb3dubG9hZENhbmNlbGxlZChXZWJLaXREb3dubG9hZCopOwordm9pZCB3ZWJraXREb3dubG9h
ZEZpbmlzaGVkKFdlYktpdERvd25sb2FkKik7CitDU3RyaW5nIHdlYmtpdERvd25sb2FkRGVjaWRl
RGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBD
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSk7Cit2b2lkIHdlYmtpdERvd25sb2FkRGVzdGluYXRp
b25DcmVhdGVkKFdlYktpdERvd25sb2FkKiwgY29uc3QgQ1N0cmluZyYgZGVzdGluYXRpb25VUkkp
OworCisjZW5kaWYgLy8gV2ViS2l0RG93bmxvYWRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0CmluZGV4IGI0OTU1NTUuLmFkYmZkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dApAQCAtMjcxLDYgKzI3MSwzMCBAQCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90eXBlCiA8L1NF
Q1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RG93bmxvYWQ8L0ZJTEU+CitXZWJLaXRE
b3dubG9hZAord2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2Fk
X3NldF9kZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZQord2Via2l0X2Rv
d25sb2FkX2NhbmNlbAord2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MKK3dl
YmtpdF9kb3dubG9hZF9nZXRfZWxhcHNlZF90aW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgor
V2ViS2l0RG93bmxvYWRDbGFzcworV0VCS0lUX1RZUEVfRE9XTkxPQUQKK1dFQktJVF9ET1dOTE9B
RAorV0VCS0lUX0lTX0RPV05MT0FECitXRUJLSVRfRE9XTkxPQURfQ0xBU1MKK1dFQktJVF9JU19E
T1dOTE9BRF9DTEFTUworV0VCS0lUX0RPV05MT0FEX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQ
cml2YXRlPgorV2ViS2l0RG93bmxvYWRQcml2YXRlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUK
KzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdFQktJ
VF9ORVRXT1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggYTE5
NmI5Yy4uYzY2MzAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtNywzICs3LDUgQEAgd2Via2l0X2JhY2tf
Zm9yd2FyZF9saXN0X2dldF90eXBlCiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9nZXRf
dHlwZQogd2Via2l0X3NldHRpbmdzX2dldF90eXBlCiB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90
eXBlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IGM1MDg4YWQuLmMzYjE5Y2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93bmxvYWQuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJyb3Iu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAppbmRleCBiNzA2
OWE3Li45ZGZlMjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEsNSArMSw4IEBACiBCT09MRUFOOk9CSkVDVCxT
VFJJTkcsUE9JTlRFUgogQk9PTEVBTjpPQkpFQ1QKK0JPT0xFQU46UE9JTlRFUgorQk9PTEVBTjpT
VFJJTkcKK0JPT0xFQU46VUlOVDY0CiBCT09MRUFOOlZPSUQKIFZPSUQ6T0JKRUNULFBPSU5URVIK
IAo=
</data>
<flag name="review"
          id="117123"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123551</attachid>
            <date>2012-01-23 06:39:04 -0800</date>
            <delta_ts>2012-01-23 15:56:07 -0800</delta_ts>
            <desc>Updated patch according to review</desc>
            <filename>wk2-downloads4.diff</filename>
            <type>text/plain</type>
            <size>35183</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDU5ZDlmNDYuLmRhZDE0NWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE3IEBACiAyMDEyLTAxLTIzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBBZGQgV2ViS2l0
RG93bmxvYWQgdG8gV2ViS2l0MiBHVEsrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9nb2JqZWN0L0dPd25QdHIuY3BwOgorICAgICAgICAo
V1RGOjpHVGltZXIpOiBVc2UgZ190aW1lcl9kZXN0cm95KCkgdG8gZnJlZSBhIEdUaW1lci4KKyAg
ICAgICAgKiB3dGYvZ29iamVjdC9HT3duUHRyLmg6IEFkZCBHVGltZXIgdGVtcGxhdGUuCisgICAg
ICAgICogd3RmL2dvYmplY3QvR1R5cGVkZWZzLmg6IEFkZCBHVGltZXIgZm9yd2FyZCBkZWNsYXJh
dGlvbi4KKworMjAxMi0wMS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrLgogCiAgICAg
ICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG1pc3NpbmcgZmlsZXMsIHJlbW92ZSBkZWxl
dGVkIGZpbGVzIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGIxMWNmZmMuLmRhYTZhOGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1NiBAQAorMjAxMi0wMS0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIFdlYktpdERvd25sb2FkIHRvIFdl
YktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcyOTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHA6IEFkZGVkLgorICAg
ICAgICAod2Via2l0RG93bmxvYWRGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXREb3dubG9hZEdl
dFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRpb24pOgor
ICAgICAgICAod2Via2l0X2Rvd25sb2FkX2luaXQpOgorICAgICAgICAod2Via2l0X2Rvd25sb2Fk
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0RG93bmxvYWRDcmVhdGUpOiBDcmVhdGUgYSBu
ZXcgV2ViS2l0RG93bmxvYWQgZm9yIGEgZ2l2ZW4KKyAgICAgICAgV0tEb3dubG9hZFJlZi4KKyAg
ICAgICAgKHdlYmtpdERvd25sb2FkU2V0UmVzcG9uc2UpOiBTZXQgdGhlIG5ldHdvcmsgcmVzcG9u
c2Ugb2YgdGhlCisgICAgICAgIGRvd25sb2FkLgorICAgICAgICAod2Via2l0RG93bmxvYWRJc0Nh
bmNlbGxlZCk6IFdoZXRoZXIgdGhlIGRvd25sb2FkIGhhcyBiZWVuCisgICAgICAgIGNhbmNlbGxl
ZCBieSB0aGUgdXNlci4KKyAgICAgICAgKHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MpOiBF
bWl0IG5vdGlmeTo6ZXN0aW1hdGVkLXByb2dyZXNzIGlmCisgICAgICAgIG5lZWRlZC4KKyAgICAg
ICAgKHdlYmtpdERvd25sb2FkRmFpbGVkKTogRW1pdCBXZWJLaXREb3dubG9hZDo6ZmFpbGVkIHdp
dGggdGhlIGdpdmVuCisgICAgICAgIGVycm9yLgorICAgICAgICAod2Via2l0RG93bmxvYWRDYW5j
ZWxsZWQpOiBFbWl0IFdlYktpdERvd25sb2FkOjpmYWlsZWQgd2l0aAorICAgICAgICBjYW5jZWxs
ZWQgZXJyb3IuCisgICAgICAgICh3ZWJraXREb3dubG9hZEZpbmlzaGVkKTogRW1pdCBXZWJLaXRE
b3dubG9hZDo6ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXREb3dubG9hZERlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogRW1pdAorICAgICAgICBXZWJLaXREb3dubG9hZDo6
ZGVjaWRlLWRlc3RpbmF0aW9uLgorICAgICAgICAod2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNy
ZWF0ZWQpOiBFbWl0CisgICAgICAgIFdlYktpdERvd25sb2FkOjpjcmVhdGVkLWRlc3RpbmF0aW9u
LgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbik6IFJldHVybiB0aGUg
ZGVzdGluYXRpb24gVVJJIG9mCisgICAgICAgIHRoZSBkb3dubG9hZC4KKyAgICAgICAgKHdlYmtp
dF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24pOiBTZXQgdGhlIGRlc3RpbmF0aW9uIFVSSSBvZiB0
aGUKKyAgICAgICAgZG93bmxvYWQuCisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3Bv
bnNlKTogUmV0dXJuIHRoZSByZXNwb25zZSByZWNlaXZlZCBieQorICAgICAgICB0aGUgc2VydmVy
LgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2NhbmNlbCk6IENhbmNlbCB0aGUgZG93bmxvYWQu
CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyk6IFJldHVy
biB0aGUgZXN0aW1hdGVkCisgICAgICAgIHByb2dyZXNzLgorICAgICAgICAod2Via2l0X2Rvd25s
b2FkX2dldF9lbGFwc2VkX3RpbWUpOiBSZXR1cm4gdGhlIHRpbWUgZWxhcHNlZCBzaW5jZQorICAg
ICAgICB0aGUgZG93bmxvYWQgc3RhcnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJl
c3BvbnNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFVSSVJlc3BvbnNlR2V0UmVzb3VyY2VSZXNwb25z
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25z
LnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlczogQWRkCisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZSgp
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRE
b3dubG9hZC5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxp
c3Q6CisKIDIwMTItMDEtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgV2ViS2l0MiByZW1lbWJlciB0aGUgaGVpZ2h0IG9mIHRoZSBXZWIgSW5z
cGVjdG9yIHdoZW4gaXQgaXMgZG9ja2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9n
b2JqZWN0L0dPd25QdHIuY3BwCmluZGV4IDUwYzdiOWYuLjQxNTg2ODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0ci5jcHAKQEAgLTQ5LDYgKzQ5LDEyIEBA
IHRlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxHRGlyPihHRGlyKiBwdHIpCiAgICAgICAg
IGdfZGlyX2Nsb3NlKHB0cik7CiB9CiAKK3RlbXBsYXRlIDw+IHZvaWQgZnJlZU93bmVkR1B0cjxH
VGltZXI+KEdUaW1lciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfdGltZXJfZGVz
dHJveShwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIEVOQUJMRShH
TElCX1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2dvYmpl
Y3QvR093blB0ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIu
aAppbmRleCA5ZmY4NWM1Li41OTNiODM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2dvYmplY3QvR093blB0ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Z29iamVjdC9HT3duUHRyLmgKQEAgLTM3LDYgKzM3LDcgQEAgdGVtcGxhdGU8PiB2b2lkIGZyZWVP
d25lZEdQdHI8R0Vycm9yPihHRXJyb3IqKTsKIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRy
PEdMaXN0PihHTGlzdCopOwogdGVtcGxhdGU8PiB2b2lkIGZyZWVPd25lZEdQdHI8R1BhdHRlcm5T
cGVjPihHUGF0dGVyblNwZWMqKTsKIHRlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdEaXI+
KEdEaXIqKTsKK3RlbXBsYXRlPD4gdm9pZCBmcmVlT3duZWRHUHRyPEdUaW1lcj4oR1RpbWVyKik7
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBHT3duUHRyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHT3duUHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZ29iamVjdC9HVHlwZWRlZnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZ29iamVj
dC9HVHlwZWRlZnMuaAppbmRleCA2NmNlZGQ2Li4yMmEwYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR1R5cGVkZWZzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dUeXBlZGVmcy5oCkBAIC01OCw2ICs1OCw3IEBAIHR5cGVk
ZWYgc3RydWN0IF9HU29ja2V0Q29ubmVjdGlvbiBHU29ja2V0Q29ubmVjdGlvbjsKIHR5cGVkZWYg
c3RydWN0IF9HU291cmNlIEdTb3VyY2U7CiB0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1Zhcmlh
bnQ7CiB0eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9H
VGltZXIgR1RpbWVyOwogCiAjaWYgVVNFKENBSVJPKQogdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1
cmZhY2UgY2Fpcm9fc3VyZmFjZV90OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAyY2IxY2U3Li5i
NWY1NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODMsNiArODMsNyBAQCBsaWJ3ZWJraXQy
Z3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERlZmluZXMuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXApAQCAtNTIxLDYg
KzUyMiw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5YmE3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcApAQCAtMCwwICsxLDUx
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKworI2luY2x1ZGUgIldlYktpdERv
d25sb2FkUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlICJX
ZWJLaXRVUklSZXNwb25zZVByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPGdsaWIv
Z2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsKKyAgICBSRUNFSVZFRF9EQVRBLAorICAgIEZJ
TklTSEVELAorICAgIEZBSUxFRCwKKyAgICBERUNJREVfREVTVElOQVRJT04sCisgICAgQ1JFQVRF
RF9ERVNUSU5BVElPTiwKKworICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKKyAgICBQUk9Q
XzAsCisKKyAgICBQUk9QX0RFU1RJTkFUSU9OLAorICAgIFBST1BfUkVTUE9OU0UsCisgICAgUFJP
UF9FU1RJTUFURURfUFJPR1JFU1MKK307CisKK3N0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRl
IHsKKyAgICBXS1JldGFpblB0cjxXS0Rvd25sb2FkUmVmPiB3a0Rvd25sb2FkOworCisgICAgR1Jl
ZlB0cjxXZWJLaXRVUklSZXNwb25zZT4gcmVzcG9uc2U7CisgICAgQ1N0cmluZyBkZXN0aW5hdGlv
blVSSTsKKyAgICBndWludDY0IGN1cnJlbnRTaXplOworICAgIGJvb2wgaXNDYW5jZWxsZWQ7Cisg
ICAgR093blB0cjxHVGltZXI+IHRpbWVyOworICAgIGdkb3VibGUgbGFzdFByb2dyZXNzOworICAg
IGdkb3VibGUgbGFzdEVsYXBzZWQ7Cit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJ
R05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RG93bmxvYWQsIHdlYmtpdF9k
b3dubG9hZCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0RG93bmxvYWRGaW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0RPV05MT0FEKG9iamVjdCktPnBy
aXYtPn5XZWJLaXREb3dubG9hZFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
ZG93bmxvYWRfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0RG93bmxvYWRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
ZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfREVTVElOQVRJT046CisgICAgICAgIGdfdmFsdWVf
c2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9h
ZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVTUE9OU0U6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShkb3du
bG9hZCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRVNUSU1BVEVEX1BST0dSRVNT
OgorICAgICAgICBnX3ZhbHVlX3NldF9kb3VibGUodmFsdWUsIHdlYmtpdF9kb3dubG9hZF9nZXRf
ZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXREb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2No
YXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIGlmICghZG93bmxvYWQtPnByaXYtPmRlc3Rp
bmF0aW9uVVJJLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgR093blB0cjxj
aGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfc3BlY2lhbF9kaXIo
R19VU0VSX0RJUkVDVE9SWV9ET1dOTE9BRCksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7Cisg
ICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5h
dGlvbi5nZXQoKSwgMCwgMCkpOworICAgIGRvd25sb2FkLT5wcml2LT5kZXN0aW5hdGlvblVSSSA9
IGRlc3RpbmF0aW9uVVJJLmdldCgpOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3du
bG9hZCksICJkZXN0aW5hdGlvbiIpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZG93bmxvYWRfaW5pdChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAg
V2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KGRvd25sb2FkLCBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRQcml2YXRlKTsK
KyAgICBkb3dubG9hZC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXREb3dubG9h
ZFByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2NsYXNzX2luaXQo
V2ViS2l0RG93bmxvYWRDbGFzcyogZG93bmxvYWRDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3Mq
IG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZG93bmxvYWRDbGFzcyk7CisgICAgb2JqZWN0
Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdERvd25sb2FkR2V0UHJvcGVydHk7CisgICAgb2Jq
ZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RG93bmxvYWRGaW5hbGl6ZTsKKworICAgIGRvd25s
b2FkQ2xhc3MtPmRlY2lkZV9kZXN0aW5hdGlvbiA9IHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGlu
YXRpb247CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDpkZXN0aW5hdGlvbjoKKyAg
ICAgKgorICAgICAqIFRoZSBsb2NhbCBVUkkgdG8gd2hlcmUgdGhlIGRvd25sb2FkIHdpbGwgYmUg
c2F2ZWQuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVTVElO
QVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
c3RyaW5nKCJkZXN0aW5hdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIkRlc3RpbmF0aW9uIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBsb2NhbCBVUkkg
dG8gd2hlcmUgdGhlIGRvd25sb2FkIHdpbGwgYmUgc2F2ZWQiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZDpyZXNwb25zZToKKyAg
ICAgKgorICAgICAqIFRoZSAjV2ViS2l0VVJJUmVzcG9uc2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
ZG93bmxvYWQuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkVT
UE9OU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
b2JqZWN0KCJyZXNwb25zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlJlc3BvbnNlIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSByZXNwb25zZSBvZiB0aGUg
ZG93bmxvYWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVJJX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2FkOmVzdGltYXRlZC1wcm9ncmVz
czoKKyAgICAgKgorICAgICAqIEFuIGVzdGltYXRlIG9mIHRoZSBwZXJjZW50IGNvbXBsZXRpb24g
Zm9yIHRoZSBkb3dubG9hZCBvcGVyYXRpb24uCisgICAgICogVGhpcyB2YWx1ZSB3aWxsIHJhbmdl
IGZyb20gMC4wIHRvIDEuMC4gVGhlIHZhbHVlIGlzIGFuIGVzdGltYXRlCisgICAgICogYmFzZWQg
b24gdGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBmb3IK
KyAgICAgKiBhIGRvd25sb2FkLgorICAgICAqIElmIHlvdSBuZWVkIGEgbW9yZSBhY2N1cmF0ZSBw
cm9ncmVzcyBpbmZvcm1hdGlvbiB5b3UgY2FuIGNvbm5lY3QgdG8KKyAgICAgKiAjV2ViS2l0RG93
bmxvYWQ6OnJlY2VpdmVkLWRhdGEgc2lnbmFsIHRvIHRyYWNrIHRoZSBwcm9ncmVzcy4KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9FU1RJTUFURURfUFJPR1JFU1Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZG91Ymxl
KCJlc3RpbWF0ZWQtcHJvZ3Jlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJFc3RpbWF0ZWQgUHJvZ3Jlc3MiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJt
aW5lcyB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgZG93bmxvYWQiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLCAxLjAsIDEu
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3du
bG9hZDo6cmVjZWl2ZWQtZGF0YToKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxv
YWQKKyAgICAgKiBAZGF0YV9sZW5ndGg6IHRoZSBsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBpbiBi
eXRlcworICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciByZXNwb25z
ZSBpcyByZWNlaXZlZCwKKyAgICAgKiBldmVyeSB0aW1lIG5ldyBkYXRhIGhhcyBiZWVuIHdyaXR0
ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLiBJdCdzCisgICAgICogdXNlZnVsIHRvIGtub3cgdGhlIHBy
b2dyZXNzIG9mIHRoZSBkb3dubG9hZCBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKiBSZXR1cm5z
OiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhl
IGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4K
KyAgICAgKi8KKyAgICBzaWduYWxzW1JFQ0VJVkVEX0RBVEFdID0KKyAgICAgICAgZ19zaWduYWxf
bmV3KCJyZWNlaXZlZC1kYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNU
LAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xh
c3MsIHJlY2VpdmVkX2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11
bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfQk9PTEVBTl9fVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xF
QU4sIDEsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0KTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdERvd25sb2FkOjpmaW5pc2hlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAj
V2ViS2l0RG93bmxvYWQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hl
biBkb3dubG9hZCBmaW5pc2hlcyBzdWNjZXNzZnVsbHkgb3IgZHVlIHRvIGFuIGVycm9yLgorICAg
ICAqIEluIGNhc2Ugb2YgZXJyb3JzICNXZWJLaXREb3dubG9hZDo6ZmFpbGVkIHNpZ25hbCBpcyBl
bWl0dGVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRv
IHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisg
ICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLwor
ICAgIHNpZ25hbHNbRklOSVNIRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmaW5pc2hlZCIs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisg
ICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBmaW5pc2hlZCksCisgICAg
ICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOworCisgICAgLyoqCisgICAgICog
V2ViS2l0RG93bmxvYWQ6OmZhaWxlZDoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93
bmxvYWQKKyAgICAgKiBAZXJyb3I6IHRoZSAjR0Vycm9yIHRoYXQgd2FzIHRyaWdnZXJlZAorICAg
ICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBk
dXJpbmcgdGhlIGRvd25sb2FkCisgICAgICogb3BlcmF0aW9uLiBUaGUgZ2l2ZW4gQGVycm9yLCBv
ZiB0aGUgZG9tYWluICVXRUJLSVRfRE9XTkxPQURfRVJST1IsCisgICAgICogY29udGFpbnMgZnVy
dGhlciBkZXRhaWxzIG9mIHRoZSBmYWlsdXJlLiBJZiB0aGUgZG93bmxvYWQgaXMgY2FuY2VsbGVk
CisgICAgICogd2l0aCB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKCksIHRoaXMgc2lnbmFsIGlzIGVt
aXR0ZWQgd2l0aCBlcnJvcgorICAgICAqICVXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVE
X0JZX1VTRVIuIFRoZSBkb3dubG9hZCBvcGVyYXRpb24gZmluaXNoZXMKKyAgICAgKiBhZnRlciBh
biBlcnJvciBhbmQgIyNXZWJLaXREb3dubG9hZDo6ZmluaXNoZWQgc2lnbmFsIGlzIGVtaXR0ZWQg
YWZ0ZXIgdGhpcyBvbmUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90
aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAg
JUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWdu
YWxzW0ZBSUxFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZhaWxlZCIsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXREb3dubG9hZENsYXNzLCBmYWlsZWQpLAorICAgICAgICAgICAgICAgICAg
ICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fUE9JTlRFUiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BP
SU5URVIpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OmRlY2lkZS1kZXN0aW5h
dGlvbjoKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQKKyAgICAgKiBAc3Vn
Z2VzdGVkX2ZpbGVuYW1lOiB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGZvciB0aGUgZG93bmxvYWQK
KyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYWZ0ZXIgcmVzcG9uc2UgaXMg
cmVjZWl2ZWQgdG8KKyAgICAgKiBkZWNpZGUgYSBkZXN0aW5hdGlvbiBVUkkgZm9yIHRoZSBkb3du
bG9hZC4gSWYgdGhpcyBzaWduYWwgaXMgbm90CisgICAgICogaGFuZGxlZCB0aGUgZmlsZSB3aWxs
IGJlIGRvd25sb2FkZWQgdG8gJUdfVVNFUl9ESVJFQ1RPUllfRE9XTkxPQUQKKyAgICAgKiBkaXJl
Y3RvcnkgdXNpbmcgQHN1Z2dlc3RlZF9maWxlbmFtZS4KKyAgICAgKgorICAgICAqIFJldHVybnM6
ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUg
ZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgor
ICAgICAqLworICAgIHNpZ25hbHNbREVDSURFX0RFU1RJTkFUSU9OXSA9CisgICAgICAgIGdfc2ln
bmFsX25ldygiZGVjaWRlLWRlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFM
X1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERv
d25sb2FkQ2xhc3MsIGRlY2lkZV9kZXN0aW5hdGlvbiksCisgICAgICAgICAgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19TVFJJTkcsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWQ6OmNyZWF0ZWQtZGVzdGluYXRpb246
CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkCisgICAgICogQGRlc3RpbmF0
aW9uOiB0aGUgZGVzdGluYXRpb24gVVJJCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIGFmdGVyICNXZWJLaXREb3dubG9hZDo6ZGVjaWRlLWRlc3RpbmF0aW9uIGFuZCBiZWZv
cmUKKyAgICAgKiAjV2ViS2l0RG93bmxvYWQ6OnJlY2VpdmVkLWRhdGEgdG8gbm90aWZ5IHRoYXQg
ZGVzdGluYXRpb24gZmlsZSBoYXMgYmVlbgorICAgICAqIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IGF0
IEBkZXN0aW5hdGlvbi4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3Ro
ZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAl
RkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25h
bHNbQ1JFQVRFRF9ERVNUSU5BVElPTl0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZWQt
ZGVzdGluYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2Jq
ZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0RG93bmxvYWRDbGFzcywgY3Jl
YXRlZF9kZXN0aW5hdGlvbiksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVs
YXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFy
c2hhbF9CT09MRUFOX19TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVB
TiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworCisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKGRvd25sb2FkQ2xhc3MsIHNpemVvZihXZWJLaXREb3dubG9hZFBy
aXZhdGUpKTsKK30KKworV2ViS2l0RG93bmxvYWQqIHdlYmtpdERvd25sb2FkQ3JlYXRlKFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCkKK3sKKyAgICBBU1NFUlQod2tEb3dubG9hZCk7CisgICAgV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkID0gV0VCS0lUX0RPV05MT0FEKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9ET1dOTE9BRCwgTlVMTCkpOworICAgIGRvd25sb2FkLT5wcml2LT53a0Rvd25sb2Fk
ID0gd2tEb3dubG9hZDsKKyAgICByZXR1cm4gZG93bmxvYWQ7Cit9CisKK3ZvaWQgd2Via2l0RG93
bmxvYWRTZXRSZXNwb25zZShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYktpdFVSSVJlc3Bv
bnNlKiByZXNwb25zZSkKK3sKKyAgICBkb3dubG9hZC0+cHJpdi0+cmVzcG9uc2UgPSByZXNwb25z
ZTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoZG93bmxvYWQpLCAicmVzcG9uc2UiKTsK
K30KKworYm9vbCB3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCkKK3sKKyAgICByZXR1cm4gZG93bmxvYWQtPnByaXYtPmlzQ2FuY2VsbGVkOworfQorCit2
b2lkIHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBw
cml2ID0gZG93bmxvYWQtPnByaXY7CisgICAgaWYgKHByaXYtPmlzQ2FuY2VsbGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIWRvd25sb2FkLT5wcml2LT50aW1lcikKKyAgICAgICAgZG93
bmxvYWQtPnByaXYtPnRpbWVyLnNldChnX3RpbWVyX25ldygpKTsKKworICAgIHByaXYtPmN1cnJl
bnRTaXplICs9IGJ5dGVzUmVjZWl2ZWQ7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAg
Z19zaWduYWxfZW1pdChkb3dubG9hZCwgc2lnbmFsc1tSRUNFSVZFRF9EQVRBXSwgMCwgYnl0ZXNS
ZWNlaXZlZCwgJnJldHVyblZhbHVlKTsKKworICAgIC8vIFRocm90dGxlIHByb2dyZXNzIG5vdGlm
aWNhdGlvbiB0byBub3QgY29uc3VtZSBoaWdoIGFtb3VudHMgb2YKKyAgICAvLyBDUFUgb24gZmFz
dCBsaW5rcywgZXhjZXB0IHdoZW4gdGhlIGxhc3Qgbm90aWZpY2F0aW9uIG9jY3VyZWQKKyAgICAv
LyBtb3JlIHRoYW4gMC4wMTYgc2VjcyBhZ28gKDYwIEZQUyksIG9yIHRoZSBsYXN0IG5vdGlmaWVk
IHByb2dyZXNzCisgICAgLy8gaXMgcGFzc2VkIGluIDElIG9yIHdlIHJlYWNoZWQgdGhlIGVuZC4K
KyAgICBnZG91YmxlIGN1cnJlbnRFbGFwc2VkID0gZ190aW1lcl9lbGFwc2VkKHByaXYtPnRpbWVy
LmdldCgpLCAwKTsKKyAgICBnZG91YmxlIGN1cnJlbnRQcm9ncmVzcyA9IHdlYmtpdF9kb3dubG9h
ZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkKTsKKworICAgIGlmIChwcml2LT5sYXN0
RWxhcHNlZAorICAgICAgICAmJiBwcml2LT5sYXN0UHJvZ3Jlc3MKKyAgICAgICAgJiYgKGN1cnJl
bnRFbGFwc2VkIC0gcHJpdi0+bGFzdEVsYXBzZWQpIDwgMC4wMTYKKyAgICAgICAgJiYgKGN1cnJl
bnRQcm9ncmVzcyAtIHByaXYtPmxhc3RQcm9ncmVzcykgPCAwLjAxCisgICAgICAgICYmIGN1cnJl
bnRQcm9ncmVzcyA8IDEuMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHByaXYtPmxh
c3RFbGFwc2VkID0gY3VycmVudEVsYXBzZWQ7CisgICAgcHJpdi0+bGFzdFByb2dyZXNzID0gY3Vy
cmVudFByb2dyZXNzOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3dubG9hZCksICJl
c3RpbWF0ZWQtcHJvZ3Jlc3MiKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9hZEZhaWxlZChXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3Ip
Cit7CisgICAgR093blB0cjxHRXJyb3I+IHdlYkVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19x
dWFya19mcm9tX3N0cmluZyhyZXNvdXJjZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNl
RXJyb3IuZXJyb3JDb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICBpZiAoZG93bmxvYWQtPnByaXYtPnRpbWVyKQorICAgICAgICBnX3RpbWVy
X3N0b3AoZG93bmxvYWQtPnByaXYtPnRpbWVyLmdldCgpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5W
YWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0ZBSUxFRF0sIDAsIHdl
YkVycm9yLmdldCgpLCAmcmV0dXJuVmFsdWUpOworICAgIGdfc2lnbmFsX2VtaXQoZG93bmxvYWQs
IHNpZ25hbHNbRklOSVNIRURdLCAwLCAmcmV0dXJuVmFsdWUpOworfQorCit2b2lkIHdlYmtpdERv
d25sb2FkQ2FuY2VsbGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXRE
b3dubG9hZFByaXZhdGUqIHByaXYgPSBkb3dubG9hZC0+cHJpdjsKKyAgICB3ZWJraXREb3dubG9h
ZEZhaWxlZChkb3dubG9hZCwgZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihwcml2LT5yZXNw
b25zZSA/IHdlYmtpdFVSSVJlc3BvbnNlR2V0UmVzb3VyY2VSZXNwb25zZShwcml2LT5yZXNwb25z
ZS5nZXQoKSkgOiBSZXNvdXJjZVJlc3BvbnNlKCkpKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9h
ZEZpbmlzaGVkKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBpZiAoZG93bmxvYWQt
PnByaXYtPmlzQ2FuY2VsbGVkKSB7CisgICAgICAgIC8vIFNpbmNlIGNhbmNlbGxhdGlvbiBpcyBh
c3luY2hyb25vdXMsIGRpZEZpbmlzaCBtaWdodCBiZSBjYWxsZWQgZXZlbgorICAgICAgICAvLyBp
ZiB0aGUgZG93bmxvYWQgd2FzIGNhbmNlbGxlZC4gVXNlciBjYW5jZWxsZWQgdGhlIGRvd25sb2Fk
LAorICAgICAgICAvLyBzbyB3ZSBzaG91bGQgZmFpbCB3aXRoIGNhbmNlbGxlZCBlcnJvciBldmVu
IGlmIHRoZSBkb3dubG9hZAorICAgICAgICAvLyBhY3R1YWxseSBmaW5pc2hlZCBzdWNjZXNzZnVs
bHkuCisgICAgICAgIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKGRvd25sb2FkKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoZG93bmxvYWQtPnByaXYtPnRpbWVyKQorICAgICAgICBn
X3RpbWVyX3N0b3AoZG93bmxvYWQtPnByaXYtPnRpbWVyLmdldCgpKTsKKyAgICBnYm9vbGVhbiBy
ZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KGRvd25sb2FkLCBzaWduYWxzW0ZJTklTSEVE
XSwgMCwgJnJldHVyblZhbHVlKTsKK30KKworQ1N0cmluZyB3ZWJraXREb3dubG9hZERlY2lkZURl
c3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwg
Y29uc3QgQ1N0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7CisgICAgaWYgKGRvd25sb2FkLT5w
cml2LT5pc0NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuICIiOworICAgIGdib29sZWFuIHJldHVy
blZhbHVlOworICAgIGdfc2lnbmFsX2VtaXQoZG93bmxvYWQsIHNpZ25hbHNbREVDSURFX0RFU1RJ
TkFUSU9OXSwgMCwgc3VnZ2VzdGVkRmlsZW5hbWUuZGF0YSgpLCAmcmV0dXJuVmFsdWUpOworICAg
IHJldHVybiBkb3dubG9hZC0+cHJpdi0+ZGVzdGluYXRpb25VUkk7Cit9CisKK3ZvaWQgd2Via2l0
RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25z
dCBDU3RyaW5nJiBkZXN0aW5hdGlvblVSSSkKK3sKKyAgICBpZiAoZG93bmxvYWQtPnByaXYtPmlz
Q2FuY2VsbGVkKQorICAgICAgICByZXR1cm47CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7Cisg
ICAgZ19zaWduYWxfZW1pdChkb3dubG9hZCwgc2lnbmFsc1tDUkVBVEVEX0RFU1RJTkFUSU9OXSwg
MCwgZGVzdGluYXRpb25VUkkuZGF0YSgpLCAmcmV0dXJuVmFsdWUpOworfQorCisvKioKKyAqIHdl
YmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb246CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERv
d25sb2FkCisgKgorICogT2J0YWlucyB0aGUgVVJJIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZp
bGUgd2lsbCBiZSB3cml0dGVuLiBZb3UKKyAqIGNhbiBjb25uZWN0IHRvICNXZWJLaXREb3dubG9h
ZDo6Y3JlYXRlZC1kZXN0aW5hdGlvbiB0byBtYWtlCisgKiBzdXJlIHRoaXMgbWV0aG9kIHJldHVy
bnMgYSB2YWxpZCBkZXN0aW5hdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGVzdGluYXRpb24g
VVJJIG9yICVOVUxMCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsKKworICAgIHJldHVybiBkb3du
bG9hZC0+cHJpdi0+ZGVzdGluYXRpb25VUkkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9k
b3dubG9hZF9zZXRfZGVzdGluYXRpb246CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2Fk
CisgKiBAdXJpOiB0aGUgZGVzdGluYXRpb24gVVJJCisgKgorICogU2V0cyB0aGUgVVJJIHRvIHdo
aWNoIHRoZSBkb3dubG9hZGVkIGZpbGUgd2lsbCBiZSB3cml0dGVuLgorICogVGhpcyBtZXRob2Qg
c2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRvd25sb2FkIHRyYW5zZmVyCisgKiBzdGFydHMg
b3IgaXQgd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBvbmdvaW5nIGRvd25sb2FkCisg
KiBvcGVyYXRpb24uIFRvIHNldCB0aGUgZGVzdGluYXRpb24gdXNpbmcgdGhlIGZpbGVuYW1lIHN1
Z2dlc3RlZAorICogYnkgdGhlIHNlcnZlciBjb25uZWN0IHRvICNXZWJLaXREb3dubG9hZDo6ZGVj
aWRlLWRlc3RpbmF0aW9uCisgKiBzaWduYWwgYW5kIGNhbGwgd2Via2l0X2Rvd25sb2FkX3NldF9k
ZXN0aW5hdGlvbigpLiBJZiB5b3Ugd2FudCB0bworICogc2V0IGEgZml4ZWQgZGVzdGluYXRpb24g
VVJJIHRoYXQgZG9lc24ndCBkZXBlbmQgb24gdGhlIHN1Z2dlc3RlZAorICogZmlsZW5hbWUgeW91
IGNhbiBjb25uZWN0IHRvIG5vdGlmeTo6cmVzcG9uc2Ugc2lnbmFsIGFuZCBjYWxsCisgKiB3ZWJr
aXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKCkuCisgKiBJZiAjV2ViS2l0RG93bmxvYWQ6OmRl
Y2lkZS1kZXN0aW5hdGlvbiBzaWduYWwgaXMgbm90IGhhbmRsZWQKKyAqIGFuZCBkZXN0aW5hdGlv
biBVUkkgaXMgbm90IHNldCB3aGVuIHRoZSBkb3dubG9hZCB0cmFuZmVyIHN0YXJ0cywKKyAqIHRo
ZSBmaWxlIHdpbGwgYmUgc2F2ZWQgd2l0aCB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGJ5IHRoZSBz
ZXJ2ZXIgaW4KKyAqICVHX1VTRVJfRElSRUNUT1JZX0RPV05MT0FEIGRpcmVjdG9yeS4KKyAqLwor
dm9pZCB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgY29uc3QgZ2NoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19ET1dOTE9BRChkb3dubG9hZCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodXJpKTsKKworICAg
IFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OworICAgIGlmIChw
cml2LT5kZXN0aW5hdGlvblVSSSA9PSB1cmkpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYt
PmRlc3RpbmF0aW9uVVJJID0gdXJpOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChkb3du
bG9hZCksICJkZXN0aW5hdGlvbiIpOworfQorCisvKioKKyAqIHdlYmtpdF9kb3dubG9hZF9nZXRf
cmVzcG9uc2U6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgorICogUmV0cmll
dmVzIHRoZSAjV2ViS2l0VVJJUmVzcG9uc2Ugb2JqZWN0IHRoYXQgYmFja3MgdGhlIGRvd25sb2Fk
CisgKiBwcm9jZXNzLiBUaGlzIG1ldGhvZCByZXR1cm5zICVOVUxMIGlmIGNhbGxlZCBiZWZvcmUg
dGhlIHJlc3BvbnNlCisgKiBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuIFlvdSBjYW4gY29u
bmVjdCB0byBub3RpZnk6OnJlc3BvbnNlCisgKiBzaWduYWwgdG8gYmUgbm90aWZpZWQgd2hlbiB0
aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUp
OiB0aGUgI1dlYktpdFVSSVJlc3BvbnNlLCBvciAlTlVMTCBpZgorICogICAgIHRoZSByZXNwb25z
ZSBoYXNuJ3QgYmVlbiByZWNlaXZlZCB5ZXQuCisgKi8KK1dlYktpdFVSSVJlc3BvbnNlKiB3ZWJr
aXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpLCAwKTsK
KworICAgIHJldHVybiBkb3dubG9hZC0+cHJpdi0+cmVzcG9uc2UuZ2V0KCk7Cit9CisKKy8qKgor
ICogd2Via2l0X2Rvd25sb2FkX2NhbmNlbDoKKyAqIEBkb3dubG9hZDogYSAjV2ViS2l0RG93bmxv
YWQKKyAqCisgKiBDYW5jZWxzIHRoZSBkb3dubG9hZC4gV2hlbiB0aGUgb25nb2luZyBkb3dubG9h
ZAorICogb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZCB0aGUgc2lnbmFsCisgKiAj
V2ViS2l0RG93bmxvYWQ6OmZhaWxlZCBpcyBlbWl0dGVkIHdpdGgKKyAqICVXRUJLSVRfRE9XTkxP
QURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIgZXJyb3IuCisgKi8KK3ZvaWQgd2Via2l0X2Rvd25s
b2FkX2NhbmNlbChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxvYWQpKTsKKworICAgIGRvd25sb2FkLT5wcml2
LT5pc0NhbmNlbGxlZCA9IHRydWU7CisgICAgV0tEb3dubG9hZENhbmNlbChkb3dubG9hZC0+cHJp
di0+d2tEb3dubG9hZC5nZXQoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9l
c3RpbWF0ZWRfcHJvZ3Jlc3M6CisgKiBAZG93bmxvYWQ6IGEgI1dlYktpdERvd25sb2FkCisgKgor
ICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlICNXZWJLaXREb3dubG9hZDplc3RpbWF0ZWQtcHJvZ3Jl
c3MgcHJvcGVydHkuCisgKiBZb3UgY2FuIG1vbml0b3IgdGhlIGVzdGltYXRlZCBwcm9ncmVzcyBv
ZiB0aGUgZG93bmxvYWQgb3BlcmF0aW9uIGJ5CisgKiBjb25uZWN0aW5nIHRvIHRoZSBub3RpZnk6
OmVzdGltYXRlZC1wcm9ncmVzcyBzaWduYWwgb2YgQGRvd25sb2FkLgorICoKKyAqIFJldHVybnM6
IGFuIGVzdGltYXRlIG9mIHRoZSBvZiB0aGUgcGVyY2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9h
ZAorICogICAgIGFzIGEgcmFuZ2UgZnJvbSAwLjAgdG8gMS4wLgorICovCitnZG91YmxlIHdlYmtp
dF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRE9XTkxPQUQoZG93bmxv
YWQpLCAwKTsKKworICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5w
cml2OworICAgIGlmICghcHJpdi0+cmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Z3VpbnQ2NCBjb250ZW50TGVuZ3RoID0gd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfY29udGVudF9s
ZW5ndGgocHJpdi0+cmVzcG9uc2UuZ2V0KCkpOworICAgIGlmICghY29udGVudExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4ocHJpdi0+
Y3VycmVudFNpemUpIC8gc3RhdGljX2Nhc3Q8Z2RvdWJsZT4oY29udGVudExlbmd0aCk7Cit9CisK
Ky8qKgorICogd2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWU6CisgKiBAZG93bmxvYWQ6
IGEgI1dlYktpdERvd25sb2FkCisgKgorICogR2V0cyB0aGUgZWxhcHNlZCB0aW1lIGluIHNlY29u
ZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbCBwYXJ0LgorICogSWYgdGhlIGRvd25sb2FkIGZp
bmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNlbGxlZCB0aGlzIGlzCisgKiB0aGUgdGlt
ZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50LgorICoKKyAqIFJldHVybnM6IHNlY29u
ZHMgc2luY2UgdGhlIGRvd25sb2FkIHdhcyBzdGFydGVkCisgKi8KK2dkb3VibGUgd2Via2l0X2Rv
d25sb2FkX2dldF9lbGFwc2VkX3RpbWUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ET1dOTE9BRChkb3dubG9hZCksIDApOwor
CisgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CisgICAg
aWYgKCFwcml2LT50aW1lcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZ190aW1l
cl9lbGFwc2VkKHByaXYtPnRpbWVyLmdldCgpLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUyMDBmZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oCkBAIC0wLDAgKzEsODggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lU
Ml9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJP
bmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRp
ZgorCisjaWZuZGVmIFdlYktpdERvd25sb2FkX2gKKyNkZWZpbmUgV2ViS2l0RG93bmxvYWRfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9ET1dOTE9BRCAgICAgICAgICAgICh3ZWJraXRf
ZG93bmxvYWRfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPV05M
T0FELCBXZWJLaXREb3dubG9hZCkpCisjZGVmaW5lIFdFQktJVF9JU19ET1dOTE9BRChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET1dO
TE9BRCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9BRF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93
bmxvYWRDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ET1dOTE9BRF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCkpCisj
ZGVmaW5lIFdFQktJVF9ET1dOTE9BRF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwgV2ViS2l0RG93bmxvYWRDbGFz
cykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3dubG9hZCAgICAgICAgV2ViS2l0RG93bmxv
YWQ7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGFzcyAgIFdlYktpdERvd25sb2Fk
Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RG93bmxvYWRQcml2YXRlIFdlYktpdERvd25s
b2FkUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZCB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICBXZWJLaXREb3dubG9hZFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dl
YktpdERvd25sb2FkQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAg
ICBnYm9vbGVhbiAoKiByZWNlaXZlZF9kYXRhKSAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25s
b2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAg
ICAgZGF0YV9sZW5ndGgpOworICAgIGdib29sZWFuICgqIGZpbmlzaGVkKSAgICAgICAgICAgIChX
ZWJLaXREb3dubG9hZCAqZG93bmxvYWQpOworICAgIGdib29sZWFuICgqIGZhaWxlZCkgICAgICAg
ICAgICAgIChXZWJLaXREb3dubG9hZCAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICplcnJvcik7CisgICAgZ2Jvb2xlYW4gKCog
ZGVjaWRlX2Rlc3RpbmF0aW9uKSAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgKnN1Z2dlc3RlZF9m
aWxlbmFtZSk7CisgICAgZ2Jvb2xlYW4gKCogY3JlYXRlZF9kZXN0aW5hdGlvbikgKFdlYktpdERv
d25sb2FkICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgKmRlc3RpbmF0aW9uKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dl
YmtpdF9kb3dubG9hZF9nZXRfdHlwZSAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBjb25zdCBnY2hhciAqCit3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uICAgICAgICAo
V2ViS2l0RG93bmxvYWQgKmRvd25sb2FkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG93
bmxvYWRfc2V0X2Rlc3RpbmF0aW9uICAgICAgICAoV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICp1
cmkpOworCitXRUJLSVRfQVBJIFdlYktpdFVSSVJlc3BvbnNlKgord2Via2l0X2Rvd25sb2FkX2dl
dF9yZXNwb25zZSAgICAgICAgICAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2Rvd25sb2FkX2NhbmNlbCAgICAgICAgICAgICAgICAgKFdlYktp
dERvd25sb2FkICpkb3dubG9hZCk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25s
b2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CisK
K1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X2Rvd25sb2FkX2dldF9lbGFwc2VkX3RpbWUgICAg
ICAgKFdlYktpdERvd25sb2FkICpkb3dubG9hZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxv
YWRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRiNTM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RG93bmxvYWRQcml2YXRlLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERvd25sb2FkUHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERvd25sb2FkUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZC5o
IgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
RXJyb3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK1dlYktpdERvd25sb2Fk
KiB3ZWJraXREb3dubG9hZENyZWF0ZShXS0Rvd25sb2FkUmVmKTsKK2Jvb2wgd2Via2l0RG93bmxv
YWRJc0NhbmNlbGxlZChXZWJLaXREb3dubG9hZCopOwordm9pZCB3ZWJraXREb3dubG9hZFNldFJl
c3BvbnNlKFdlYktpdERvd25sb2FkKiwgV2ViS2l0VVJJUmVzcG9uc2UqKTsKK3ZvaWQgd2Via2l0
RG93bmxvYWROb3RpZnlQcm9ncmVzcyhXZWJLaXREb3dubG9hZCosIGd1aW50NjQgYnl0ZXNSZWNl
aXZlZCk7Cit2b2lkIHdlYmtpdERvd25sb2FkRmFpbGVkKFdlYktpdERvd25sb2FkKiwgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwordm9pZCB3ZWJraXREb3dubG9hZENhbmNlbGxlZChX
ZWJLaXREb3dubG9hZCopOwordm9pZCB3ZWJraXREb3dubG9hZEZpbmlzaGVkKFdlYktpdERvd25s
b2FkKik7CitDU3RyaW5nIHdlYmtpdERvd25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoV2ViS2l0RG93bmxvYWQqLCBjb25zdCBDU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSk7Cit2b2lkIHdlYmtpdERvd25sb2FkRGVzdGluYXRpb25DcmVhdGVkKFdlYktpdERvd25s
b2FkKiwgY29uc3QgQ1N0cmluZyYgZGVzdGluYXRpb25VUkkpOworCisjZW5kaWYgLy8gV2ViS2l0
RG93bmxvYWRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFByaXZhdGUuaAppbmRleCAzYWQ2YzE1Li4zZGI2MWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIFdlYktpdFByaXZhdGVfaAogCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNh
c3QuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLRG93bmxvYWQuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8
Z2xpYi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VVJJUmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VVJJUmVzcG9uc2UuY3BwCmluZGV4IGJmOGI5YjMuLjE3NGJmMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5jcHAK
QEAgLTE3NiwzICsxNzYsOCBAQCBXZWJLaXRVUklSZXNwb25zZSogd2Via2l0VVJJUmVzcG9uc2VD
cmVhdGVGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlcwogICAgIHVyaVJlc3Bv
bnNlLT5wcml2LT5yZXNvdXJjZVJlc3BvbnNlID0gcmVzb3VyY2VSZXNwb25zZTsKICAgICByZXR1
cm4gdXJpUmVzcG9uc2U7CiB9CisKK2NvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHdl
YmtpdFVSSVJlc3BvbnNlR2V0UmVzb3VyY2VSZXNwb25zZShXZWJLaXRVUklSZXNwb25zZSogdXJp
UmVzcG9uc2UpCit7CisgICAgcmV0dXJuIHVyaVJlc3BvbnNlLT5wcml2LT5yZXNvdXJjZVJlc3Bv
bnNlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggMGQ2NjY0ZC4uNjkxMzE3ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0yODYsNiArMjg2LDI5IEBAIFdlYktpdFdp
bmRvd1Byb3BlcnRpZXNQcml2YXRlCiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUK
IDwvU0VDVElPTj4KIAorPEZJTEU+V2ViS2l0RG93bmxvYWQ8L0ZJTEU+CitXZWJLaXREb3dubG9h
ZAord2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2FkX3NldF9k
ZXN0aW5hdGlvbgord2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZQord2Via2l0X2Rvd25sb2Fk
X2NhbmNlbAord2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MKK3dlYmtpdF9k
b3dubG9hZF9nZXRfZWxhcHNlZF90aW1lCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RG93bmxvYWRDbGFzcworV0VCS0lUX1RZUEVfRE9XTkxPQUQKK1dFQktJVF9ET1dOTE9BRAorV0VC
S0lUX0lTX0RPV05MT0FECitXRUJLSVRfRE9XTkxPQURfQ0xBU1MKK1dFQktJVF9JU19ET1dOTE9B
RF9DTEFTUworV0VCS0lUX0RPV05MT0FEX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRl
PgorV2ViS2l0RG93bmxvYWRQcml2YXRlCit3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KKwogPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdFQktJVF9ORVRX
T1JLX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggNDBhODQxYy4uY2JhMmRmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cwpAQCAtOCwzICs4LDUgQEAgd2Via2l0X3NldHRpbmdzX2dldF90eXBlCiB3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF90eXBlCiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfdHlwZQord2Via2l0X2Rvd25sb2FkX2dldF90eXBlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBhYjBlMGE4Li5lOWQ4
OTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25s
b2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEVycm9yLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJz
aGFsLmxpc3QKaW5kZXggODljMjUwZS4uZTZkZGExMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xLDcgKzEsMTIg
QEAKIEJPT0xFQU46RU5VTSxTVFJJTkcsUE9JTlRFUgorQk9PTEVBTjpPQkpFQ1QKK0JPT0xFQU46
T0JKRUNULFNUUklORyxQT0lOVEVSCitCT09MRUFOOlBPSU5URVIKIEJPT0xFQU46U1RSSU5HCiBC
T09MRUFOOlNUUklORyxQT0lOVEVSCiBCT09MRUFOOlNUUklORyxTVFJJTkcsUE9JTlRFUgorQk9P
TEVBTjpVSU5UNjQKK0JPT0xFQU46Vk9JRAogT0JKRUNUOlZPSUQKIFZPSUQ6RU5VTQogVk9JRDpP
QkpFQ1QsUE9JTlRFUgo=
</data>
<flag name="review"
          id="124620"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="124694"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
      

    </bug>

</bugzilla>