<?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>33875</bug_id>
          
          <creation_ts>2010-01-19 16:46:18 -0800</creation_ts>
          <short_desc>[Qt] QWebPage::userAgentForUrl is terrible API</short_desc>
          <delta_ts>2010-05-20 02:04:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Performance, Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>34208</blocked>
    
    <blocked>35784</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Holger Freyther">zecke</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>s.mathur</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182521</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-01-19 16:46:18 -0800</bug_when>
    <thetext>To call this method from the FrameLoaderClientQt we will have to convert KURL to QUrl for every network request we are making. The only good usecase is to set a new user agent or have a site specific user agent. Both of these usecases can be done with a setUserAgent call...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182523</commentid>
    <comment_count>1</comment_count>
      <attachid>46962</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-01-19 16:47:58 -0800</bug_when>
    <thetext>Created attachment 46962
Add a QWebPage::setUserAgent which will allow us to not call userAgentForUrl and avoid the KURL -&gt; QUrl conversion

Proposal for a new API avoiding the KURl -&gt; QUrl conversion in all cases when a user agent is set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183789</commentid>
    <comment_count>2</comment_count>
      <attachid>46962</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-22 13:52:12 -0800</bug_when>
    <thetext>Comment on attachment 46962
Add a QWebPage::setUserAgent which will allow us to not call userAgentForUrl and avoid the KURL -&gt; QUrl conversion


Very nice catch!

&gt; +    static QString defaultUserAgent(const QLocale&amp; locale);

Shouldn&apos;t the locale parameter have a default constructed QLocale() as default value?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185111</commentid>
    <comment_count>3</comment_count>
      <attachid>46962</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-27 08:32:08 -0800</bug_when>
    <thetext>Comment on attachment 46962
Add a QWebPage::setUserAgent which will allow us to not call userAgentForUrl and avoid the KURL -&gt; QUrl conversion

Apart from the default argument this patch looks good to me. A nice speed-up and API convenience :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186651</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:12:29 -0800</bug_when>
    <thetext>Attachment 46962 was posted by a committer and has review+, assigning to Holger Freyther for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188129</commentid>
    <comment_count>5</comment_count>
      <attachid>48217</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-02-05 02:57:34 -0800</bug_when>
    <thetext>Created attachment 48217
Second attempt with a unit test.

Same patch with a unit test for the new API. The unit tests tests:
     1.) That the old behaviour is default
     2.) Setting a user agent is effective
     3.) Setting an empty user agent goes back to the old behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188782</commentid>
    <comment_count>6</comment_count>
      <attachid>46962</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-08 15:11:53 -0800</bug_when>
    <thetext>Comment on attachment 46962
Add a QWebPage::setUserAgent which will allow us to not call userAgentForUrl and avoid the KURL -&gt; QUrl conversion

Cleared Simon Hausmann&apos;s review+ from obsolete attachment 46962 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197582</commentid>
    <comment_count>7</comment_count>
      <attachid>48217</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-09 07:45:46 -0800</bug_when>
    <thetext>Comment on attachment 48217
Second attempt with a unit test.

I&apos;m not qualified to review Qt API changes, but the API change was already r+ed previously.  This patch just adds unit tests.  Why has this patch been sitting up for review for over a month?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198570</commentid>
    <comment_count>8</comment_count>
      <attachid>50491</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-03-11 05:41:38 -0800</bug_when>
    <thetext>Created attachment 50491
Just cache the result of QWebPage::userAgentForUrl()

I am not in favor of the API change. From the numbers I have, the conversion KUrl-&gt;QUrl needed for QWebPage::userAgentForUrl().

From the benchs I have, the time spent in QWebPage::userAgentForUrl() is mostly taken by playing with the QString. I have attached a patch to make QWebPage::userAgentForUrl() disappear under 0.1% of the time consumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198574</commentid>
    <comment_count>9</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-03-11 05:56:25 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=50491) [details]
&gt; Just cache the result of QWebPage::userAgentForUrl()

&gt; From the benchs I have, the time spent in QWebPage::userAgentForUrl() is mostly
&gt; taken by playing with the QString. I have attached a patch to make
&gt; QWebPage::userAgentForUrl() disappear under 0.1% of the time consumption.

This assumes caching is an acceptable change. Currently when I change the QLocale of the QWebView, or use QSettings to set another application name.. starting from the next request I do have the right locale and app name set. If we decide that it does not matter for us this change is great and we should get it landed.

Did you measure this on a N900? I assume using the loading test? Could you do me a favor, pick any website from your test set, run the test for this site, and upload the result of opreport -c. I hope/assume you have frame pointers in your binary by now. It would be really awesome if you could do that.

Otherwise I will upload the profile from speedprof (memprof frontend) from my macbook, but having a result from the N900 would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198604</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-03-11 07:19:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; This assumes caching is an acceptable change. Currently when I change the
&gt; QLocale of the QWebView, or use QSettings to set another application name..
&gt; starting from the next request I do have the right locale and app name set. If
&gt; we decide that it does not matter for us this change is great and we should get
&gt; it landed.

For the locale modification, we can just reset the cache when receiving QEvent::LocaleChange.

The application name is a problem. We will have to update the documentation if we go that way.

&gt; Did you measure this on a N900? I assume using the loading test? Could you do
&gt; me a favor, pick any website from your test set, run the test for this site,
&gt; and upload the result of opreport -c. I hope/assume you have frame pointers in
&gt; your binary by now. It would be really awesome if you could do that.
&gt; 
&gt; Otherwise I will upload the profile from speedprof (memprof frontend) from my
&gt; macbook, but having a result from the N900 would be better.

You can upload the profile from your macbook. If the improvement is important on a laptop, it will definitely improves the performance of the N900.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198833</commentid>
    <comment_count>11</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-03-11 16:34:23 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)

&gt; For the locale modification, we can just reset the cache when receiving
&gt; QEvent::LocaleChange.
&gt; 
&gt; The application name is a problem. We will have to update the documentation if
&gt; we go that way.

I would like to see your patch modified in the following way. The current userAgentForUrl method is using the view() pointer and different QWidgets can have different QLocales (probably an uncommon usecase). I would like to cache the userAgent in the private data of the QWebPage and add an invalidateCaches() method to QWebPagePrivate that will throw away whatever we have cached, currently this would be the ua string. Does this sound sensible?


&gt; &gt; Otherwise I will upload the profile from speedprof (memprof frontend) from my
&gt; &gt; macbook, but having a result from the N900 would be better.
&gt; 
&gt; You can upload the profile from your macbook. If the improvement is important
&gt; on a laptop, it will definitely improves the performance of the N900.

Okay, I will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198951</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-03-12 00:09:38 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I would like to see your patch modified in the following way. The current
&gt; userAgentForUrl method is using the view() pointer and different QWidgets can
&gt; have different QLocales (probably an uncommon usecase). I would like to cache
&gt; the userAgent in the private data of the QWebPage and add an invalidateCaches()
&gt; method to QWebPagePrivate that will throw away whatever we have cached,
&gt; currently this would be the ua string. Does this sound sensible?

Yep, sounds like a plan :)

Since the time is mostly spent getting the locale, and creating the string with QString::arg(), it makes sense to cache the locale (+ QWebPagePrivete::invalidateCaches() called on LocaleChange), and use QString builder instead of QString::arg().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204558</commentid>
    <comment_count>13</comment_count>
      <attachid>48217</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-03-26 07:16:04 -0700</bug_when>
    <thetext>Comment on attachment 48217
Second attempt with a unit test.

I&apos;m withdrawing the patch. I still believe there is a underlying issue but I lack the time to work on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219509</commentid>
    <comment_count>14</comment_count>
      <attachid>54809</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-04-30 09:46:13 -0700</bug_when>
    <thetext>Created attachment 54809
Better timing on the userAgentForUrl()

This version avoid some allocations/reallocation of memory, most of the string being static now.

With this patch, the time of QUrl::setEncodedUrl() is the bottleneck.
Together QUrl::setEncodedUrl() and QWebPage::userAgentForUrl() take 0.02% of the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219512</commentid>
    <comment_count>15</comment_count>
      <attachid>54809</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-04-30 09:50:53 -0700</bug_when>
    <thetext>Comment on attachment 54809
Better timing on the userAgentForUrl()


WebKit/qt/Api/qwebpage.cpp:3059
 +      // spliting the string in three and user QStringBuilder is better than using QString::arg()
splitting

WebKit/qt/tests/qwebpage/tst_qwebpage.cpp:1795
 +      const QString markerString = QString::fromLatin1(&quot; nn-NO)&quot;);
why two newlines here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219518</commentid>
    <comment_count>16</comment_count>
      <attachid>54811</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-04-30 10:15:59 -0700</bug_when>
    <thetext>Created attachment 54811
Better timing on the userAgentForUrl()

Addressed the comments of Kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219521</commentid>
    <comment_count>17</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-04-30 10:29:36 -0700</bug_when>
    <thetext>It should be safe to put this patch in the release.

Medium risk is a wrong string being produced.
Worst case WebKit not compiling on an exotic platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219800</commentid>
    <comment_count>18</comment_count>
      <attachid>54811</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-02 01:55:13 -0700</bug_when>
    <thetext>Comment on attachment 54811
Better timing on the userAgentForUrl()

Clearing flags on attachment: 54811

Committed r58648: &lt;http://trac.webkit.org/changeset/58648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219801</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-02 01:55:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219871</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-05-02 09:21:42 -0700</bug_when>
    <thetext>Revision r58648 cherry-picked into qtwebkit-2.0 with commit bbc4af4deb39c80ed9f5cbbe13dba96b44a1124d</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228127</commentid>
    <comment_count>21</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2010-05-19 18:19:10 -0700</bug_when>
    <thetext>The committed patch does indeed changes the user Agent string (and breaks some business assumptions), which should have been part of a separate patch. 

For example this patch adds &quot;SymbianOS&quot; twice to the User Agent string. Fixing it as part of bug 38389.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228277</commentid>
    <comment_count>22</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2010-05-20 02:04:56 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; The committed patch does indeed changes the user Agent string (and breaks some business assumptions), which should have been part of a separate patch. 
&gt; For example this patch adds &quot;SymbianOS&quot; twice to the User Agent string. Fixing it as part of bug 38389.

My apologies, I messed the platform and OS for symbian when rewriting the function.
Thanks for fixing it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46962</attachid>
            <date>2010-01-19 16:47:58 -0800</date>
            <delta_ts>2010-02-08 15:11:53 -0800</delta_ts>
            <desc>Add a QWebPage::setUserAgent which will allow us to not call userAgentForUrl and avoid the KURL -&gt; QUrl conversion</desc>
            <filename>0003-Qt-Avoid-calling-QWebPage-userAgentForUrl-const-QUrl.patch</filename>
            <type>text/plain</type>
            <size>8794</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">RnJvbSAwZjI3ZmM2Mjc2NGI1MjQ4NDM0OWZlYWRlMmQwMzlhZjNjZTg4Y2E5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CkRhdGU6IE1vbiwgMTggSmFuIDIwMTAgMTQ6MzQ6NTQgKzAxMDAKU3ViamVjdDog
W1BBVENIIDMvNF0gW1F0XSBBdm9pZCBjYWxsaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwo
Y29uc3QgUVVybCYpCgpBZGQgYSBuZXcgQVBJIHRoYXQgd2lsbCBkaXNhYmxlIHRoZSBjYWxscyB0
byB0aGUgdXNlckFnZW50Rm9yVXJsCm1ldGhvZCBhbmQgdGhlIEtVUkwgdG8gUVVybCBjb252ZXJz
aW9uIHJlcXVpcmVkIGZvciB0aGlzLiBUaGUKbmV3IEFQSSBzdGlsbCBhbGxvd3MgdGhlIHVzZWNh
c2UgdG8gaGF2ZSBhIHNpdGUgc3BlY2lmaWMgc3Bvb2ZpbmcuCi0tLQogV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArKysrKysrKysrKysrKysr
KystLS0KIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDUgKystCiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaCAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAyICsKIFdlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMjEgKysrKysrKysrKwogV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwIHwgICAxMiArKystLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArKysrKysrCiBXZWJLaXRUb29scy9RdExhdW5j
aGVyL21haW4uY3BwICAgICAgICAgICAgICAgICAgfCAgICA4ICsrKy0KIDcgZmlsZXMgY2hhbmdl
ZCwgOTIgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCA1
OThkN2Q2Li5mZmNmYzI1IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAor
KysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gICAg
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAgICBDb3B5cmlnaHQgKEMpIDIwMDcgU3RhaWtv
cyBDb21wdXRpbmcgU2VydmljZXMgSW5jLgogICAgIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuCiAKQEAgLTMwNTgsMTAgKzMwNTgsNDEgQEAgUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdl
OjpwbHVnaW5GYWN0b3J5KCkgY29uc3QKIH0KIAogLyohCisgICAgVGhpcyBmdW5jdGlvbiBzZXRz
IHRoZSB1c2VyIGFnZW50IHRvIGJlIHVzZWQgZm9yIEhUVFAgcmVxdWVzdHMuIElmIHRoZSB1c2Vy
CisgICAgYWdlbnQgc3RyaW5nIGlzIG5vdCBlbXB0eSBpdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCBm
b2xsb3dpbmcgSFRUUCByZXF1ZXN0cyBhbmQKKyAgICBhcyBhIHNpZGUgZWZmZWN0IHRoZSB2aXJ0
dWFsIGZ1bmN0aW9uIFxzYSB1c2VyQWdlbnRGb3JVcmwgd2lsbCBub3QgYmUgY2FsbGVkLgorCisg
ICAgXHNpbmNlIDQuNworICAgIFxzYSBkZWZhdWx0VXNlckFnZW50KCksIHVzZXJBZ2VudEZvclVy
bCgpCisqLwordm9pZCBRV2ViUGFnZTo6c2V0VXNlckFnZW50KGNvbnN0IFFTdHJpbmcmIGFnZW50
KQoreworICAgIGQtPnVzZXJBZ2VudCA9IGFnZW50OworfQorCisvKiEKICAgICBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aGVuIGEgdXNlciBhZ2VudCBmb3IgSFRUUCByZXF1ZXN0cyBpcyBuZWVk
ZWQuIFlvdSBjYW4gcmVpbXBsZW1lbnQgdGhpcwogICAgIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5
IHJldHVybiBkaWZmZXJlbnQgdXNlciBhZ2VudHMgZm9yIGRpZmZlcmVudCBVUkxzLCBiYXNlZCBv
biB0aGUgXGEgdXJsIHBhcmFtZXRlci4KIAotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u
IHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZToKKyAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBcc2EgZGVmYXVsdFVzZXJBZ2VudCgpCisKKyovCitR
U3RyaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYgdXJsKSBjb25zdAor
eworICAgIFFfVU5VU0VEKHVybCkKKyAgICBRTG9jYWxlIGxvY2FsZTsKKyAgICBpZiAodmlldygp
KQorICAgICAgICBsb2NhbGUgPSB2aWV3KCktPmxvY2FsZSgpOworICAgIHJldHVybiBkZWZhdWx0
VXNlckFnZW50KGxvY2FsZSk7Cit9CisKKy8qIQorICAgIFxzaW5jZSA0LjcKKworICAgIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgZGVmYXVsdCB1c2VyIGFnZW50IHVzZWQgd2l0aCBIVFRQIHJl
cXVlc3RzIGZvciBRdFdlYktpdC4gSXQgY2FuCisgICAgYmUgdXNlZCB0byBpbXBsZW1lbnQgdGhl
IFxzYSB1c2VyQWdlbnRGb3JVcmwgZnVuY3Rpb24gb3Igd2l0aCB0aGUgXHNhIHNldFVzZXJBZ2Vu
dC4KKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZm9sbG93aW5nIHZhbHVlOgogCiAg
ICAgIk1vemlsbGEvNS4wICglUGxhdGZvcm0lOyAlU2VjdXJpdHklOyAlU3VicGxhdGZvcm0lOyAl
TG9jYWxlJSkgQXBwbGVXZWJLaXQvJVdlYktpdFZlcnNpb24lIChLSFRNTCwgbGlrZSBHZWNrbykg
JUFwcFZlcnNpb24gU2FmYXJpLyVXZWJLaXRWZXJzaW9uJSIKIApAQCAtMzA3NCwxMCArMzEwNSwx
MiBAQCBRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6OnBsdWdpbkZhY3RvcnkoKSBjb25zdAog
ICAgIFxvICVXZWJLaXRWZXJzaW9uJSBpcyB0aGUgdmVyc2lvbiBvZiBXZWJLaXQgdGhlIGFwcGxp
Y2F0aW9uIHdhcyBjb21waWxlZCBhZ2FpbnN0LgogICAgIFxvICVBcHBWZXJzaW9uJSBleHBhbmRz
IHRvIFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uTmFtZSgpL1FDb3JlQXBwbGljYXRpb246
OmFwcGxpY2F0aW9uVmVyc2lvbigpIGlmIHRoZXkncmUgc2V0OyBvdGhlcndpc2UgZGVmYXVsdGlu
ZyB0byBRdCBhbmQgdGhlIGN1cnJlbnQgUXQgdmVyc2lvbi4KICAgICBcZW5kbGlzdAorCisgICAg
XHNhIHVzZXJBZ2VudEZvclVybCgpLCBzZXRVc2VyQWdlbnQoKQorCiAqLwotUVN0cmluZyBRV2Vi
UGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmIHVybCkgY29uc3QKK1FTdHJpbmcgUVdl
YlBhZ2U6OmRlZmF1bHRVc2VyQWdlbnQoY29uc3QgUUxvY2FsZSYgbG9jYWxlKQogewotICAgIFFf
VU5VU0VEKHVybCkKICAgICBRU3RyaW5nIHVhID0gUUxhdGluMVN0cmluZygiTW96aWxsYS81LjAg
KCIKIAogICAgIC8vIFBsYXRmb3JtCkBAIC0zMjcxLDkgKzMzMDQsNiBAQCBRU3RyaW5nIFFXZWJQ
YWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYgdXJsKSBjb25zdAogICAgIHVhID0gdWEu
YXJnKHN1YlBsYXRmb3JtVmVyKTsKIAogICAgIC8vIExhbmd1YWdlCi0gICAgUUxvY2FsZSBsb2Nh
bGU7Ci0gICAgaWYgKHZpZXcoKSkKLSAgICAgICAgbG9jYWxlID0gdmlldygpLT5sb2NhbGUoKTsK
ICAgICBRU3RyaW5nIG5hbWUgPSBsb2NhbGUubmFtZSgpOwogICAgIG5hbWVbMl0gPSBRTGF0aW4x
Q2hhcignLScpOwogICAgIHVhLmFwcGVuZChuYW1lKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCA0NzY2Y2JkLi5h
ZTUzZDlkIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAg
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQogICAgIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNl
cyBJbmMuCiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOTksNiArMjk5LDkgQEAgcHVibGljOgogCiAgICAgaW5s
aW5lIFFXZWJQYWdlUHJpdmF0ZSogaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gZDsgfQogCisgICAg
dm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOworICAgIHN0YXRpYyBRU3RyaW5nIGRl
ZmF1bHRVc2VyQWdlbnQoY29uc3QgUUxvY2FsZSYgbG9jYWxlKTsKKwogcHVibGljIFFfU0xPVFM6
CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCk7CiAKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKaW5k
ZXggZGJjOTgxZS4uNWU2MmZiZiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9w
LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKQEAgLTE4Miw2ICsxODIsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpbnNwZWN0b3JJc0ludGVybmFsT25seTsgLy8gVHJ1ZSBpZiBjcmVh
dGVkIHRocm91Z2ggdGhlIEluc3BlY3QgY29udGV4dCBtZW51IGFjdGlvbgogICAgIFF0OjpEcm9w
QWN0aW9uIG1fbGFzdERyb3BBY3Rpb247CiAKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXNlckFnZW50
OworCiAgICAgc3RhdGljIGJvb2wgZHJ0UnVuOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0
L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNjJmMmI2NC4uNWQ2ZWZkNyAx
MDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEtMTggIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1F0XSBBdm9pZCBjYWxsaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JV
cmwoY29uc3QgUVVybCYpCisgICAgICAgIAorICAgICAgICBBZGQgYSBuZXcgQVBJIHRoYXQgd2ls
bCBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgdXNlckFnZW50Rm9yVXJsCisgICAgICAgIG1ldGhv
ZCBhbmQgdGhlIEtVUkwgdG8gUVVybCBjb252ZXJzaW9uIHJlcXVpcmVkIGZvciB0aGlzLiBUaGUK
KyAgICAgICAgbmV3IEFQSSBzdGlsbCBhbGxvd3MgdGhlIHVzZWNhc2UgdG8gaGF2ZSBhIHNpdGUg
c3BlY2lmaWMgc3Bvb2ZpbmcuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFu
ZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAg
IChRV2ViUGFnZTo6c2V0VXNlckFnZW50KToKKyAgICAgICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRG
b3JVcmwpOgorICAgICAgICAoUVdlYlBhZ2U6OmRlZmF1bHRVc2VyQWdlbnQpOgorICAgICAgICAq
IEFwaS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZV9wLmg6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudFF0Ojp1c2VyQWdlbnQpOgorCiAyMDEwLTAxLTE0ICBCcmlhbiBX
ZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIFJvYmVuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwCmluZGV4IDc2MGUzN2UuLmEyMWM3NmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEg
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ295cHJpZ2h0IChDKSAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCiAgKiBDb3lwcmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlz
aG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgpAQCAtNTg5LDEwICs1ODksMTIgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudFF0OjpzZXRUaXRsZShjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJikK
IAogU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwp
CiB7Ci0gICAgaWYgKG1fd2ViRnJhbWUpIHsKLSAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBh
Z2UoKS0+dXNlckFnZW50Rm9yVXJsKHVybCk7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICBpZiAoIW1fd2ViRnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlm
ICghbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51c2VyQWdlbnQuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbV93ZWJGcmFtZS0+cGFnZSgpLT5kLT51c2VyQWdlbnQ7CisgICAgcmV0dXJuIG1fd2Vi
RnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50Rm9yVXJsKHVybCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggMjI5YmQ0ZC4uZDNh
ZTRiOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEwLTAxLTE4ICBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gQXZvaWQgY2FsbGluZyBRV2ViUGFnZTo6dXNl
ckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmKQorICAgICAgICAKKyAgICAgICAgQWRkIGEgbmV3IEFQ
SSB0aGF0IHdpbGwgZGlzYWJsZSB0aGUgY2FsbHMgdG8gdGhlIHVzZXJBZ2VudEZvclVybAorICAg
ICAgICBtZXRob2QgYW5kIHRoZSBLVVJMIHRvIFFVcmwgY29udmVyc2lvbiByZXF1aXJlZCBmb3Ig
dGhpcy4gVGhlCisgICAgICAgIG5ldyBBUEkgc3RpbGwgYWxsb3dzIHRoZSB1c2VjYXNlIHRvIGhh
dmUgYSBzaXRlIHNwZWNpZmljIHNwb29maW5nLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBRdExhdW5jaGVyL21haW4u
Y3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisKIDIwMTAtMDEtMTUgIEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdExhdW5jaGVy
L21haW4uY3BwIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcAppbmRleCA2YzcxZjg2
Li5kOWE3ZTVjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3BwCisr
KyBiL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA5IEdpcmlzaCBSYW1h
a3Jpc2huYW4gPGdpcmlzaEBmb3J3YXJkYmlhcy5pbj4KICAqIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgpAQCAtMTE1LDcgKzExNSwxMSBAQCBwdWJsaWM6
CiAKIGNsYXNzIFdlYlBhZ2UgOiBwdWJsaWMgUVdlYlBhZ2UgewogcHVibGljOgotICAgIFdlYlBh
Z2UoUVdpZGdldCAqcGFyZW50KSA6IFFXZWJQYWdlKHBhcmVudCkge30KKyAgICBXZWJQYWdlKFFX
aWRnZXQqIHBhcmVudCkKKyAgICAgICAgOiBRV2ViUGFnZShwYXJlbnQpCisgICAgeworICAgICAg
ICBzZXRVc2VyQWdlbnQoUVdlYlBhZ2U6OmRlZmF1bHRVc2VyQWdlbnQoUUxvY2FsZSgpKSk7Cisg
ICAgfQogCiAgICAgdmlydHVhbCBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFFXZWJQYWdlOjpXZWJX
aW5kb3dUeXBlKTsKICAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZVBsdWdpbihjb25zdCBRU3Ry
aW5nJiwgY29uc3QgUVVybCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmluZ0xpc3Qm
KTsKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48217</attachid>
            <date>2010-02-05 02:57:34 -0800</date>
            <delta_ts>2010-03-26 07:16:04 -0700</delta_ts>
            <desc>Second attempt with a unit test.</desc>
            <filename>user-agent.patch</filename>
            <type>text/plain</type>
            <size>10844</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">Y29tbWl0IDMzNjFhMzc1NjViNjk3YWU2Njk2ZWM2NjE4N2M5ZGY5MmYzNWVjMTQKQXV0aG9yOiBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CkRhdGU6ICAgTW9u
IEphbiAxOCAxNDozNDo1NCAyMDEwICswMTAwCgogICAgW1F0XSBBdm9pZCBjYWxsaW5nIFFXZWJQ
YWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpCiAgICAKICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg3NQogICAgCiAgICBBZGQgYSBuZXcgQVBJIHRo
YXQgd2lsbCBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgdXNlckFnZW50Rm9yVXJsCiAgICBtZXRo
b2QgYW5kIHRoZSBLVVJMIHRvIFFVcmwgY29udmVyc2lvbiByZXF1aXJlZCBmb3IgdGhpcy4gVGhl
CiAgICBuZXcgQVBJIHN0aWxsIGFsbG93cyB0aGUgdXNlY2FzZSB0byBoYXZlIGEgc2l0ZSBzcGVj
aWZpYyBzcG9vZmluZy4KCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBi
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGVhMjQwMWIuLjM5M2I2YTkgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgICAgQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQogICAgIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJ
bmMuCiAgICAgQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KIApAQCAtMzA3NiwxMCArMzA3
Niw0MSBAQCBRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6OnBsdWdpbkZhY3RvcnkoKSBjb25z
dAogfQogCiAvKiEKKyAgICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHVzZXIgYWdlbnQgdG8gYmUg
dXNlZCBmb3IgSFRUUCByZXF1ZXN0cy4gSWYgdGhlIHVzZXIKKyAgICBhZ2VudCBzdHJpbmcgaXMg
bm90IGVtcHR5IGl0IHdpbGwgYmUgdXNlZCBmb3IgYWxsIGZvbGxvd2luZyBIVFRQIHJlcXVlc3Rz
IGFuZAorICAgIGFzIGEgc2lkZSBlZmZlY3QgdGhlIHZpcnR1YWwgZnVuY3Rpb24gXHNhIHVzZXJB
Z2VudEZvclVybCB3aWxsIG5vdCBiZSBjYWxsZWQuCisKKyAgICBcc2luY2UgNC43CisgICAgXHNh
IGRlZmF1bHRVc2VyQWdlbnQoKSwgdXNlckFnZW50Rm9yVXJsKCkKKyovCit2b2lkIFFXZWJQYWdl
OjpzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYgYWdlbnQpCit7CisgICAgZC0+dXNlckFnZW50
ID0gYWdlbnQ7Cit9CisKKy8qIQogICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSB1
c2VyIGFnZW50IGZvciBIVFRQIHJlcXVlc3RzIGlzIG5lZWRlZC4gWW91IGNhbiByZWltcGxlbWVu
dCB0aGlzCiAgICAgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgcmV0dXJuIGRpZmZlcmVudCB1c2Vy
IGFnZW50cyBmb3IgZGlmZmVyZW50IFVSTHMsIGJhc2VkIG9uIHRoZSBcYSB1cmwgcGFyYW1ldGVy
LgogCi0gICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyB0aGUgZm9sbG93aW5n
IHZhbHVlOgorICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgdGhlIHZhbHVl
IG9mIFxzYSBkZWZhdWx0VXNlckFnZW50KCkKKworKi8KK1FTdHJpbmcgUVdlYlBhZ2U6OnVzZXJB
Z2VudEZvclVybChjb25zdCBRVXJsJiB1cmwpIGNvbnN0Cit7CisgICAgUV9VTlVTRUQodXJsKQor
ICAgIFFMb2NhbGUgbG9jYWxlOworICAgIGlmICh2aWV3KCkpCisgICAgICAgIGxvY2FsZSA9IHZp
ZXcoKS0+bG9jYWxlKCk7CisgICAgcmV0dXJuIGRlZmF1bHRVc2VyQWdlbnQobG9jYWxlKTsKK30K
KworLyohCisgICAgXHNpbmNlIDQuNworCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBk
ZWZhdWx0IHVzZXIgYWdlbnQgdXNlZCB3aXRoIEhUVFAgcmVxdWVzdHMgZm9yIFF0V2ViS2l0LiBJ
dCBjYW4KKyAgICBiZSB1c2VkIHRvIGltcGxlbWVudCB0aGUgXHNhIHVzZXJBZ2VudEZvclVybCBm
dW5jdGlvbiBvciB3aXRoIHRoZSBcc2Egc2V0VXNlckFnZW50LgorCisgICAgVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRoZSBmb2xsb3dpbmcgdmFsdWU6CiAKICAgICAiTW96aWxsYS81LjAgKCVQbGF0
Zm9ybSU7ICVTZWN1cml0eSU7ICVTdWJwbGF0Zm9ybSU7ICVMb2NhbGUlKSBBcHBsZVdlYktpdC8l
V2ViS2l0VmVyc2lvbiUgKEtIVE1MLCBsaWtlIEdlY2tvKSAlQXBwVmVyc2lvbiBTYWZhcmkvJVdl
YktpdFZlcnNpb24lIgogCkBAIC0zMDkyLDEwICszMTIzLDEyIEBAIFFXZWJQbHVnaW5GYWN0b3J5
ICpRV2ViUGFnZTo6cGx1Z2luRmFjdG9yeSgpIGNvbnN0CiAgICAgXG8gJVdlYktpdFZlcnNpb24l
IGlzIHRoZSB2ZXJzaW9uIG9mIFdlYktpdCB0aGUgYXBwbGljYXRpb24gd2FzIGNvbXBpbGVkIGFn
YWluc3QuCiAgICAgXG8gJUFwcFZlcnNpb24lIGV4cGFuZHMgdG8gUUNvcmVBcHBsaWNhdGlvbjo6
YXBwbGljYXRpb25OYW1lKCkvUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25WZXJzaW9uKCkg
aWYgdGhleSdyZSBzZXQ7IG90aGVyd2lzZSBkZWZhdWx0aW5nIHRvIFF0IGFuZCB0aGUgY3VycmVu
dCBRdCB2ZXJzaW9uLgogICAgIFxlbmRsaXN0CisKKyAgICBcc2EgdXNlckFnZW50Rm9yVXJsKCks
IHNldFVzZXJBZ2VudCgpCisKICovCi1RU3RyaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwo
Y29uc3QgUVVybCYgdXJsKSBjb25zdAorUVN0cmluZyBRV2ViUGFnZTo6ZGVmYXVsdFVzZXJBZ2Vu
dChjb25zdCBRTG9jYWxlJiBsb2NhbGUpCiB7Ci0gICAgUV9VTlVTRUQodXJsKQogICAgIFFTdHJp
bmcgdWEgPSBRTGF0aW4xU3RyaW5nKCJNb3ppbGxhLzUuMCAoIgogCiAgICAgLy8gUGxhdGZvcm0K
QEAgLTMyODksOSArMzMyMiw2IEBAIFFTdHJpbmcgUVdlYlBhZ2U6OnVzZXJBZ2VudEZvclVybChj
b25zdCBRVXJsJiB1cmwpIGNvbnN0CiAgICAgdWEgPSB1YS5hcmcoc3ViUGxhdGZvcm1WZXIpOwog
CiAgICAgLy8gTGFuZ3VhZ2UKLSAgICBRTG9jYWxlIGxvY2FsZTsKLSAgICBpZiAodmlldygpKQot
ICAgICAgICBsb2NhbGUgPSB2aWV3KCktPmxvY2FsZSgpOwogICAgIFFTdHJpbmcgbmFtZSA9IGxv
Y2FsZS5uYW1lKCk7CiAgICAgbmFtZVsyXSA9IFFMYXRpbjFDaGFyKCctJyk7CiAgICAgdWEuYXBw
ZW5kKG5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IDQ3NjZjYmQuLmRkYzk0MzAgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgICAgQ29weXJpZ2h0
IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+CiAjaW5jbHVkZSA8
UXRDb3JlL3F1cmwuaD4KKyNpbmNsdWRlIDxRdENvcmUvcWxvY2FsZS5oPgogI2luY2x1ZGUgPFF0
R3VpL3F3aWRnZXQuaD4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCkBAIC0yOTksNiArMzAwLDkgQEAg
cHVibGljOgogCiAgICAgaW5saW5lIFFXZWJQYWdlUHJpdmF0ZSogaGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gZDsgfQogCisgICAgdm9pZCBzZXRVc2VyQWdlbnQoY29uc3QgUVN0cmluZyYpOworICAg
IHN0YXRpYyBRU3RyaW5nIGRlZmF1bHRVc2VyQWdlbnQoY29uc3QgUUxvY2FsZSYgbG9jYWxlID0g
UUxvY2FsZSgpKTsKKwogcHVibGljIFFfU0xPVFM6CiAgICAgYm9vbCBzaG91bGRJbnRlcnJ1cHRK
YXZhU2NyaXB0KCk7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oIGIv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKaW5kZXggZGJjOTgxZS4uNWU2MmZiZiAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZV9wLmgKQEAgLTE4Miw2ICsxODIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbnNwZWN0b3JJ
c0ludGVybmFsT25seTsgLy8gVHJ1ZSBpZiBjcmVhdGVkIHRocm91Z2ggdGhlIEluc3BlY3QgY29u
dGV4dCBtZW51IGFjdGlvbgogICAgIFF0OjpEcm9wQWN0aW9uIG1fbGFzdERyb3BBY3Rpb247CiAK
KyAgICBXZWJDb3JlOjpTdHJpbmcgdXNlckFnZW50OworCiAgICAgc3RhdGljIGJvb2wgZHJ0UnVu
OwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFu
Z2VMb2cKaW5kZXggZTYzZWU4Ni4uZTU2MjFiOCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDEt
MTggIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBdm9pZCBj
YWxsaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg3NQorCisgICAgICAgIEFk
ZCBhIG5ldyBBUEkgdGhhdCB3aWxsIGRpc2FibGUgdGhlIGNhbGxzIHRvIHRoZSB1c2VyQWdlbnRG
b3JVcmwKKyAgICAgICAgbWV0aG9kIGFuZCB0aGUgS1VSTCB0byBRVXJsIGNvbnZlcnNpb24gcmVx
dWlyZWQgZm9yIHRoaXMuIFRoZQorICAgICAgICBuZXcgQVBJIHN0aWxsIGFsbG93cyB0aGUgdXNl
Y2FzZSB0byBoYXZlIGEgc2l0ZSBzcGVjaWZpYyBzcG9vZmluZy4KKworICAgICAgICAqIEFwaS9x
d2VicGFnZS5jcHA6IEFkZCBuZXcgQVBJCisgICAgICAgIChRV2ViUGFnZTo6c2V0VXNlckFnZW50
KToKKyAgICAgICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwpOgorICAgICAgICAoUVdlYlBh
Z2U6OmRlZmF1bHRVc2VyQWdlbnQpOgorICAgICAgICAqIEFwaS9xd2VicGFnZS5oOgorICAgICAg
ICAqIEFwaS9xd2VicGFnZV9wLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojp1
c2VyQWdlbnQpOgorICAgICAgICAqIHRlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6IE5l
dyB0ZXN0IGNhc2UKKyAgICAgICAgKFVzZXJBZ2VudE5ldHdvcmtNYW5hZ2VyOjp1c2VyQWdlbnRT
ZWVuKToKKyAgICAgICAgKFVzZXJBZ2VudE5ldHdvcmtNYW5hZ2VyOjpjcmVhdGVSZXF1ZXN0KToK
KyAgICAgICAgKFVzZXJBZ2VudFdlYlBhZ2U6OlVzZXJBZ2VudFdlYlBhZ2UpOgorICAgICAgICAo
VXNlckFnZW50V2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKToKKyAgICAgICAgKHRzdF9RV2ViUGFn
ZTo6dGVzdFVzZXJBZ2VudCk6CisKIDIwMTAtMDItMDMgIEFuZHJhcyBCZWNzaSAgPGFiZWNzaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IDc2MGUzN2Uu
LmEyMWM3NmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRRdC5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
ICAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ295cHJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBD
b3lwcmlnaHQgKEMpIDIwMDkgR2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFz
LmluPgpAQCAtNTg5LDEwICs1ODksMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRU
aXRsZShjb25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJikKIAogU3RyaW5nIEZyYW1lTG9hZGVyQ2xp
ZW50UXQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgaWYgKG1fd2ViRnJhbWUp
IHsKLSAgICAgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50Rm9yVXJsKHVy
bCk7Ci0gICAgfQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIW1fd2ViRnJhbWUpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghbV93ZWJGcmFtZS0+cGFnZSgpLT5k
LT51c2VyQWdlbnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV93ZWJGcmFtZS0+cGFnZSgp
LT5kLT51c2VyQWdlbnQ7CisgICAgcmV0dXJuIG1fd2ViRnJhbWUtPnBhZ2UoKS0+dXNlckFnZW50
Rm9yVXJsKHVybCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZGlzcGF0Y2hEaWRS
ZWNlaXZlSWNvbigpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3
ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCmlu
ZGV4IGY0OGZiNzMuLjRmMmI0ODcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC90ZXN0cy9xd2VicGFn
ZS90c3RfcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdl
YnBhZ2UuY3BwCkBAIC0xMTAsNiArMTEwLDcgQEAgcHJpdmF0ZSBzbG90czoKIAogICAgIHZvaWQg
b3JpZ2luYXRpbmdPYmplY3RJbk5ldHdvcmtSZXF1ZXN0cygpOwogICAgIHZvaWQgdGVzdEpTUHJv
bXB0KCk7CisgICAgdm9pZCB0ZXN0VXNlckFnZW50KCk7CiAKIHByaXZhdGU6CiAgICAgUVdlYlZp
ZXcqIG1fdmlldzsKQEAgLTE4MjgsNSArMTgyOSw2OSBAQCB2b2lkIHRzdF9RV2ViUGFnZTo6dGVz
dEpTUHJvbXB0KCkKICAgICBRVkVSSUZZKHJlcyk7CiB9CiAKKy8qKgorICogVGhpcyBpcyBhIHRl
c3QgZm9yIHRoZSBRV2ViUGFnZTo6c2V0VXNlckFnZW50IGNhbGxzLgorICovCitjbGFzcyBVc2Vy
QWdlbnROZXR3b3JrTWFuYWdlciA6IHB1YmxpYyBRTmV0d29ya0FjY2Vzc01hbmFnZXIgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVN0cmluZyB1c2VyQWdlbnRTZWVuKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3VzZXJBZ2VudDsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAg
UU5ldHdvcmtSZXBseSogY3JlYXRlUmVxdWVzdChPcGVyYXRpb24gb3AsIGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxLCBRSU9EZXZpY2UqIG91dCkKKyAgICB7CisgICAgICAgIG1fdXNlckFnZW50
ID0gUVN0cmluZzo6ZnJvbUFzY2lpKHJlcS5yYXdIZWFkZXIoInVzZXItYWdlbnQiKSk7CisgICAg
ICAgIHJldHVybiBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OmNyZWF0ZVJlcXVlc3Qob3AsIHJlcSwg
b3V0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyBtX3VzZXJBZ2VudDsKK307CisK
K2NsYXNzIFVzZXJBZ2VudFdlYlBhZ2UgOiBwdWJsaWMgUVdlYlBhZ2UgeworcHVibGljOgorICAg
IG11dGFibGUgaW50IG1fY2FsbGVkOworCisgICAgVXNlckFnZW50V2ViUGFnZSgpCisgICAgICAg
IDogbV9jYWxsZWQoMCkKKyAgICB7fQorCitwcm90ZWN0ZWQ6CisgICAgUVN0cmluZyB1c2VyQWdl
bnRGb3JVcmwoY29uc3QgUVVybCYgdXJsKSBjb25zdAorICAgIHsKKyAgICAgICAgKyttX2NhbGxl
ZDsKKyAgICAgICAgcmV0dXJuICJVc2VyQWdlbnRWaXJ0dWFsIjsKKyAgICB9Cit9OworCit2b2lk
IHRzdF9RV2ViUGFnZTo6dGVzdFVzZXJBZ2VudCgpCit7CisgICAgVXNlckFnZW50TmV0d29ya01h
bmFnZXIgbmV0d29yazsKKyAgICBVc2VyQWdlbnRXZWJQYWdlIHBhZ2U7CisgICAgcGFnZS5zZXRO
ZXR3b3JrQWNjZXNzTWFuYWdlcigmbmV0d29yayk7CisKKyAgICAvLyAxLiB0ZXN0IHRoZSB2aXJ0
dWFsIG1ldGhvZCBpcyBjYWxsZWQuCisgICAgcGFnZS5tX2NhbGxlZCA9IDA7CisgICAgcGFnZS5t
YWluRnJhbWUoKS0+bG9hZChRVXJsKCJodHRwOi8vc29tZXRoaW5nLnF0Lm5va2lhLmNvbSIpKTsK
KyAgICBRVkVSSUZZKHBhZ2UubV9jYWxsZWQgPiAwKTsKKyAgICBRQ09NUEFSRShuZXR3b3JrLnVz
ZXJBZ2VudFNlZW4oKSwgUVN0cmluZygiVXNlckFnZW50VmlydHVhbCIpKTsKKworICAgIC8vIDIu
IHRlc3QgdGhlIG92ZXJyaWRlIGNhbGwKKyAgICBwYWdlLm1fY2FsbGVkID0gMDsKKyAgICBwYWdl
LnNldFVzZXJBZ2VudCgiU2luZ2xlQ2FsbCIpOworICAgIHBhZ2UubWFpbkZyYW1lKCktPmxvYWQo
UVVybCgiaHR0cDovL3NvbWV0aGluZy5xdC5ub2tpYS5jb20iKSk7CisgICAgUVZFUklGWShwYWdl
Lm1fY2FsbGVkID09IDApOworICAgIFFDT01QQVJFKG5ldHdvcmsudXNlckFnZW50U2VlbigpLCBR
U3RyaW5nKCJTaW5nbGVDYWxsIikpOworCisgICAgLy8gMy4gdmVyaWZ5IHRoYXQgd2UgY2FuIGdv
IGJhY2sgdG8gdGhlIG9sZCBiZWhhdmlvcgorICAgIHBhZ2UubV9jYWxsZWQgPSAwOworICAgIHBh
Z2Uuc2V0VXNlckFnZW50KFFTdHJpbmcoKSk7CisgICAgcGFnZS5tYWluRnJhbWUoKS0+bG9hZChR
VXJsKCJodHRwOi8vc29tZXRoaW5nLnF0Lm5va2lhLmNvbSIpKTsKKyAgICBRVkVSSUZZKHBhZ2Uu
bV9jYWxsZWQgPiAwKTsKKyAgICBRQ09NUEFSRShuZXR3b3JrLnVzZXJBZ2VudFNlZW4oKSwgUVN0
cmluZygiVXNlckFnZW50VmlydHVhbCIpKTsKK30KKwogUVRFU1RfTUFJTih0c3RfUVdlYlBhZ2Up
CiAjaW5jbHVkZSAidHN0X3F3ZWJwYWdlLm1vYyIKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0No
YW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA3YzBlZDMzLi5hMGQyMGM4IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDEtMTggIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW1F0XSBBdm9pZCBjYWxsaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRG
b3JVcmwoY29uc3QgUVVybCYpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMzg3NQorCisgICAgICAgIEFkZCBhIG5ldyBBUEkgdGhhdCB3aWxsIGRpc2Fi
bGUgdGhlIGNhbGxzIHRvIHRoZSB1c2VyQWdlbnRGb3JVcmwKKyAgICAgICAgbWV0aG9kIGFuZCB0
aGUgS1VSTCB0byBRVXJsIGNvbnZlcnNpb24gcmVxdWlyZWQgZm9yIHRoaXMuIFRoZQorICAgICAg
ICBuZXcgQVBJIHN0aWxsIGFsbG93cyB0aGUgdXNlY2FzZSB0byBoYXZlIGEgc2l0ZSBzcGVjaWZp
YyBzcG9vZmluZy4KKworICAgICAgICAqIFF0TGF1bmNoZXIvbWFpbndpbmRvdy5jcHA6CisgICAg
ICAgIChNYWluV2luZG93OjpNYWluV2luZG93KToKKwogMjAxMC0wMi0wMyAgRGlyayBQcmFua2Ug
IDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBFcmlj
IFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbndpbmRvdy5j
cHAgYi9XZWJLaXRUb29scy9RdExhdW5jaGVyL21haW53aW5kb3cuY3BwCmluZGV4IDI2NjJmNWUu
LjJjZTE4NTggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1F0TGF1bmNoZXIvbWFpbndpbmRvdy5j
cHAKKysrIGIvV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWlud2luZG93LmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R2lyaXNoIFJhbWFrcmlzaG5hbiA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogICogQ29weXJpZ2h0
IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CkBAIC00NCw2ICs0NCw3IEBA
IE1haW5XaW5kb3c6Ok1haW5XaW5kb3coY29uc3QgUVN0cmluZyYgdXJsKQogICAgICAgICBzZXRB
dHRyaWJ1dGUoUXQ6OldBX1RyYW5zbHVjZW50QmFja2dyb3VuZCk7CiAjZW5kaWYKIAorICAgIG1f
cGFnZS0+c2V0VXNlckFnZW50KFFXZWJQYWdlOjpkZWZhdWx0VXNlckFnZW50KCkpOwogICAgIGJ1
aWxkVUkoKTsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="30861"
          type_id="3"
          status="-"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50491</attachid>
            <date>2010-03-11 05:41:38 -0800</date>
            <delta_ts>2010-03-11 05:41:38 -0800</delta_ts>
            <desc>Just cache the result of QWebPage::userAgentForUrl()</desc>
            <filename>just_cache_useragent.patch</filename>
            <type>text/plain</type>
            <size>710</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKaW5kZXggMmE4YWNlZC4uOThkODQ3NSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTMx
NDIsNiArMzE0MiwxMiBAQCBRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6OnBsdWdpbkZhY3Rv
cnkoKSBjb25zdAogUVN0cmluZyBRV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwm
IHVybCkgY29uc3QKIHsKICAgICBRX1VOVVNFRCh1cmwpCisgICAgc3RhdGljIFFTdHJpbmcgdXNl
ckFnZW50OworCisgICAgaWYgKCF1c2VyQWdlbnQuaXNOdWxsKCkpIHsKKyAgICAgICAgcmV0dXJu
IHVzZXJBZ2VudDsKKyAgICB9CisKICAgICBRU3RyaW5nIHVhID0gUUxhdGluMVN0cmluZygiTW96
aWxsYS81LjAgKCIKIAogICAgIC8vIFBsYXRmb3JtCkBAIC0zMzYzLDYgKzMzNjksNyBAQCBRU3Ry
aW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYgdXJsKSBjb25zdAogICAg
IHVhLmFwcGVuZChRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIiBTYWZhcmkvJTEiKSkKICAgICAgICAg
ICAgICAgICAgICAgICAuYXJnKHFXZWJLaXRWZXJzaW9uKCkpKTsKIAorICAgIHVzZXJBZ2VudCA9
IHVhOwogICAgIHJldHVybiB1YTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54809</attachid>
            <date>2010-04-30 09:46:13 -0700</date>
            <delta_ts>2010-04-30 10:15:59 -0700</delta_ts>
            <desc>Better timing on the userAgentForUrl()</desc>
            <filename>33875.patch</filename>
            <type>text/plain</type>
            <size>16617</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKaW5kZXggNWM1Zjc5Zi4uZTFiNGRkNSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTMw
NTQsMTAgKzMwNTQsMTcgQEAgUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdlOjpwbHVnaW5GYWN0
b3J5KCkgY29uc3QKICAgICBcbyAlQXBwVmVyc2lvbiUgZXhwYW5kcyB0byBRQ29yZUFwcGxpY2F0
aW9uOjphcHBsaWNhdGlvbk5hbWUoKS9RQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvblZlcnNp
b24oKSBpZiB0aGV5J3JlIHNldDsgb3RoZXJ3aXNlIGRlZmF1bHRpbmcgdG8gUXQgYW5kIHRoZSBj
dXJyZW50IFF0IHZlcnNpb24uCiAgICAgXGVuZGxpc3QKICovCi1RU3RyaW5nIFFXZWJQYWdlOjp1
c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYgdXJsKSBjb25zdAorUVN0cmluZyBRV2ViUGFnZTo6
dXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmKSBjb25zdAogewotICAgIFFfVU5VU0VEKHVybCkK
LSAgICBRU3RyaW5nIHVhID0gUUxhdGluMVN0cmluZygiTW96aWxsYS81LjAgKCIKKyAgICAvLyBz
cGxpdGluZyB0aGUgc3RyaW5nIGluIHRocmVlIGFuZCB1c2VyIFFTdHJpbmdCdWlsZGVyIGlzIGJl
dHRlciB0aGFuIHVzaW5nIFFTdHJpbmc6OmFyZygpCisgICAgc3RhdGljIFFTdHJpbmcgZmlyc3RQ
YXJ0OworICAgIHN0YXRpYyBRU3RyaW5nIHNlY29uZFBhcnQ7CisgICAgc3RhdGljIFFTdHJpbmcg
dGhpcmRQYXJ0OworCisgICAgaWYgKGZpcnN0UGFydC5pc051bGwoKSB8fCBzZWNvbmRQYXJ0Lmlz
TnVsbCgpIHx8IHRoaXJkUGFydC5pc051bGwoKSkgeworICAgICAgICBRU3RyaW5nIGZpcnN0UGFy
dFRlbXA7CisgICAgICAgIGZpcnN0UGFydFRlbXAucmVzZXJ2ZSgxNTApOworICAgICAgICBmaXJz
dFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIk1vemlsbGEvNS4wICgiCiAKICAgICAv
LyBQbGF0Zm9ybQogI2lmZGVmIFFfV1NfTUFDCkBAIC0zMDczLDIxNCArMzA4MCwyMjkgQEAgUVN0
cmluZyBRV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmIHVybCkgY29uc3QKICNl
bHNlCiAgICAgIlVua25vd24iCiAjZW5kaWYKLSAgICAvLyBQbGFjZWhvbGRlciBmb3IgUGxhdGZv
cm0gVmVyc2lvbgotICAgICIlMTsgIgorICAgICk7CisKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCI7ICIpOwogCi0gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHNl
Y3VyaXR5IHN0cmVuZ3RoIChOIG9yIFUpCi0gICAgIiUyOyAiCisgICAgICAgIC8vIFNTTCBzdXBw
b3J0CisjaWYgIWRlZmluZWQoUVRfTk9fT1BFTlNTTCkKKyAgICAgICAgLy8gd2UgY291bGQgY2hl
Y2sgUVNzbFNvY2tldDo6c3VwcG9ydHNTc2woKSBoZXJlLCBidXQgdGhpcyBtYWtlcworICAgICAg
ICAvLyBPcGVuU1NMLCBjZXJ0aWZpY2F0ZXMgZXRjIGJlaW5nIGxvYWRlZCBpbiBhbGwgY2FzZXMg
d2VyZSBRV2ViUGFnZQorICAgICAgICAvLyBpcyB1c2VkLiBUaGlzIGxvYWRpbmcgaXMgbm90IG5l
ZWRlZCBmb3Igbm9uLWh0dHBzLgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoIlU7ICIpOworICAgICAgICAvLyB0aGlzIG1heSBsZWFkIHRvIGEgZmFsc2UgcG9z
aXRpdmU6IFdlIGluZGljYXRlIFNTTCBzaW5jZSBpdCBpcworICAgICAgICAvLyBjb21waWxlZCBp
biBldmVuIHRob3VnaCBzdXBwb3J0c1NzbCgpIG1pZ2h0IHJldHVybiBmYWxzZQorI2Vsc2UKKyAg
ICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJOOyAiKTsKKyNlbmRp
ZgogCi0gICAgLy8gU3VicGxhdGZvcm0iCisgICAgICAgIC8vIE9wZXJhdGluZyBzeXN0ZW0KICNp
ZmRlZiBRX09TX0FJWAotICAgICJBSVgiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiQUlYIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfV0lOMzIKLSAgICAiJTMi
CisKKyAgICAgICAgc3dpdGNoIChRU3lzSW5mbzo6V2luZG93c1ZlcnNpb24pIHsKKyAgICAgICAg
Y2FzZSBRU3lzSW5mbzo6V1ZfMzJzOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDMuMSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgUVN5c0luZm86OldWXzk1OgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIDk1Iik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfOTg6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgOTgiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9NZToKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAg
Kz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyA5ODsgV2luIDl4IDQuOTAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9OVDoKKyAgICAgICAgICAg
IGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luTlQ0LjAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl8yMDAwOgorICAgICAgICAg
ICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIE5UIDUuMCIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVN5c0luZm86OldWX1hQOgorICAg
ICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIE5U
IDUuMSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUVN5c0luZm86OldWXzIw
MDM6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldp
bmRvd3MgTlQgNS4yIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRU3lzSW5m
bzo6V1ZfVklTVEE6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIldpbmRvd3MgTlQgNi4wIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNh
c2UgUVN5c0luZm86OldWX1dJTkRPV1M3OgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIE5UIDYuMSIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRToKKyAgICAgICAgICAgIGZpcnN0UGFydFRl
bXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRU5FVDoKKyAgICAgICAgICAgIGZpcnN0
UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSAuTkVUIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NFXzU6CisgICAgICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgQ0UgNS54
Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NFXzY6
CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRv
d3MgQ0UgNi54Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAjZWxpZiBkZWZp
bmVkIFFfT1NfREFSV0lOCiAjaWZkZWYgX19pMzg2X18gfHwgX194ODZfNjRfXwotICAgICJJbnRl
bCBNYWMgT1MgWCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJJbnRlbCBNYWMgT1MgWCIpOwogI2Vsc2UKLSAgICAiUFBDIE1hYyBPUyBYIgorICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIlBQQyBNYWMgT1MgWCIpOwogI2Vu
ZGlmCiAKICNlbGlmIGRlZmluZWQgUV9PU19CU0RJCi0gICAgIkJTRCIKKyAgICAgICAgZmlyc3RQ
YXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJCU0QiKTsKICNlbGlmIGRlZmluZWQgUV9P
U19CU0Q0Ci0gICAgIkJTRCBGb3VyIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6
OmZyb21MYXRpbjEoIkJTRCBGb3VyIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfQ1lHV0lOCi0gICAg
IkN5Z3dpbiIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJD
eWd3aW4iKTsKICNlbGlmIGRlZmluZWQgUV9PU19ER1VYCi0gICAgIkRHL1VYIgorICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkRHL1VYIik7CiAjZWxpZiBkZWZp
bmVkIFFfT1NfRFlOSVgKLSAgICAiRFlOSVgvcHR4IgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIkRZTklYL3B0eCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX0ZS
RUVCU0QKLSAgICAiRnJlZUJTRCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJGcmVlQlNEIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfSFBVWAotICAgICJIUC1V
WCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJIUC1VWCIp
OwogI2VsaWYgZGVmaW5lZCBRX09TX0hVUkQKLSAgICAiR05VIEh1cmQiCisgICAgICAgIGZpcnN0
UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiR05VIEh1cmQiKTsKICNlbGlmIGRlZmlu
ZWQgUV9PU19JUklYCi0gICAgIlNHSSBJcml4IgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIlNHSSBJcml4Iik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfTElOVVgK
LSAgICAiTGludXgiCisKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiTGludXggeDg2XzY0Iik7CisjZWxpZiBkZWZp
bmVkKF9faTM4Nl9fKQorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRp
bjEoIkxpbnV4IGk2ODYiKTsKKyNlbHNlCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiTGludXgiKTsKKyNlbmRpZgorCiAjZWxpZiBkZWZpbmVkIFFfT1NfTFlO
WAotICAgICJMeW54T1MiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxh
dGluMSgiTHlueE9TIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfTkVUQlNECi0gICAgIk5ldEJTRCIK
KyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJOZXRCU0QiKTsK
ICNlbGlmIGRlZmluZWQgUV9PU19PUzIKLSAgICAiT1MvMiIKKyAgICAgICAgZmlyc3RQYXJ0VGVt
cCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJPUy8yIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfT1BF
TkJTRAotICAgICJPcGVuQlNEIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoIk9wZW5CU0QiKTsKICNlbGlmIGRlZmluZWQgUV9PU19PUzJFTVgKLSAgICAiT1Mv
MiIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJPUy8yIik7
CiAjZWxpZiBkZWZpbmVkIFFfT1NfT1NGCi0gICAgIkhQIFRydTY0IFVOSVgiCisgICAgICAgIGZp
cnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiSFAgVHJ1NjQgVU5JWCIpOwogI2Vs
aWYgZGVmaW5lZCBRX09TX1FOWDYKLSAgICAiUU5YIFJUUCBTaXgiCisgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiUU5YIFJUUCBTaXgiKTsKICNlbGlmIGRlZmlu
ZWQgUV9PU19RTlgKLSAgICAiUU5YIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6
OmZyb21MYXRpbjEoIlFOWCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX1JFTElBTlQKLSAgICAiUmVs
aWFudCBVTklYIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEo
IlJlbGlhbnQgVU5JWCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX1NDTwotICAgICJTQ08gT3BlblNl
cnZlciIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJTQ08g
T3BlblNlcnZlciIpOwogI2VsaWYgZGVmaW5lZCBRX09TX1NPTEFSSVMKLSAgICAiU3VuIFNvbGFy
aXMiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiU3VuIFNv
bGFyaXMiKTsKICNlbGlmIGRlZmluZWQgUV9PU19VTFRSSVgKLSAgICAiREVDIFVsdHJpeCIKLSNl
bGlmIGRlZmluZWQgUV9XU19TNjAKLSAgICAiU2VyaWVzNjAiCi0jZWxpZiBkZWZpbmVkIFFfT1Nf
VU5JWAotICAgICJVTklYIEJTRC9TWVNWIHN5c3RlbSIKLSNlbGlmIGRlZmluZWQgUV9PU19VTklY
V0FSRQotICAgICJVbml4V2FyZSBTZXZlbiwgT3BlbiBVTklYIEVpZ2h0IgotI2Vsc2UKLSAgICAi
VW5rbm93biIKLSNlbmRpZgotICAgIC8vIFBsYWNlaG9sZGVyIGZvciBTdWJQbGF0Zm9ybSBWZXJz
aW9uCi0gICAgIiU0OyAiKTsKLQotICAgIC8vIFBsYXRmb3JtIFZlcnNpb24KLSAgICBRU3RyaW5n
IG9zVmVyOwotI2lmZGVmIFFfT1NfU1lNQklBTgotICAgIFFTeXNJbmZvOjpTeW1iaWFuVmVyc2lv
biBzeW1iaWFuVmVyc2lvbiA9IFFTeXNJbmZvOjpzeW1iaWFuVmVyc2lvbigpOwotICAgIHN3aXRj
aCAoc3ltYmlhblZlcnNpb24pIHsKLSAgICBjYXNlIFFTeXNJbmZvOjpTVl85XzI6Ci0gICAgICAg
IG9zVmVyID0gIi85LjIiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFTeXNJbmZvOjpTVl85
XzM6Ci0gICAgICAgIG9zVmVyID0gIi85LjMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFT
eXNJbmZvOjpTVl85XzQ6Ci0gICAgICAgIG9zVmVyID0gIi85LjQiOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OiAKLSAgICAgICAgb3NWZXIgPSAiVW5rbm93biI7Ci0gICAgfQotI2VuZGlm
Ci0gICAgdWEgPSB1YS5hcmcob3NWZXIpOwotCi0gICAgUUNoYXIgc2VjdXJpdHlTdHJlbmd0aChR
TGF0aW4xQ2hhcignTicpKTsKLSNpZiAhZGVmaW5lZChRVF9OT19PUEVOU1NMKQotICAgIC8vIHdl
IGNvdWxkIGNoZWNrIFFTc2xTb2NrZXQ6OnN1cHBvcnRzU3NsKCkgaGVyZSwgYnV0IHRoaXMgbWFr
ZXMKLSAgICAvLyBPcGVuU1NMLCBjZXJ0aWZpY2F0ZXMgZXRjIGJlaW5nIGxvYWRlZCBpbiBhbGwg
Y2FzZXMgd2VyZSBRV2ViUGFnZQotICAgIC8vIGlzIHVzZWQuIFRoaXMgbG9hZGluZyBpcyBub3Qg
bmVlZGVkIGZvciBub24taHR0cHMuCi0gICAgc2VjdXJpdHlTdHJlbmd0aCA9IFFMYXRpbjFDaGFy
KCdVJyk7Ci0gICAgLy8gdGhpcyBtYXkgbGVhZCB0byBhIGZhbHNlIHBvc2l0aXZlOiBXZSBpbmRp
Y2F0ZSBTU0wgc2luY2UgaXQgaXMKLSAgICAvLyBjb21waWxlZCBpbiBldmVuIHRob3VnaCBzdXBw
b3J0c1NzbCgpIG1pZ2h0IHJldHVybiBmYWxzZQotI2VuZGlmCi0gICAgdWEgPSB1YS5hcmcoc2Vj
dXJpdHlTdHJlbmd0aCk7Ci0KLSNpZiBkZWZpbmVkIFFfT1NfV0lOMzIKLSAgICBRU3RyaW5nIHZl
cjsKLSAgICBzd2l0Y2ggKFFTeXNJbmZvOjpXaW5kb3dzVmVyc2lvbikgewotICAgICAgICBjYXNl
IFFTeXNJbmZvOjpXVl8zMnM6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93cyAzLjEiOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWXzk1OgotICAgICAgICAg
ICAgdmVyID0gIldpbmRvd3MgOTUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVN5c0luZm86OldWXzk4OgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgOTgiOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX01lOgotICAgICAgICAgICAg
dmVyID0gIldpbmRvd3MgOTg7IFdpbiA5eCA0LjkwIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFFTeXNJbmZvOjpXVl9OVDoKLSAgICAgICAgICAgIHZlciA9ICJXaW5OVDQuMCI7
CisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiREVDIFVsdHJp
eCIpOworI2VsaWYgZGVmaW5lZCBRX09TX1NZTUJJQU4KKyAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJTeW1iaWFuT1MiKTsKKyAgICAgICAgUVN5c0luZm86OlN5
bWJpYW5WZXJzaW9uIHN5bWJpYW5WZXJzaW9uID0gUVN5c0luZm86OnN5bWJpYW5WZXJzaW9uKCk7
CisgICAgICAgIHN3aXRjaCAoc3ltYmlhblZlcnNpb24pIHsKKyAgICAgICAgY2FzZSBRU3lzSW5m
bzo6U1ZfOV8yOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0
aW4xKCIvOS4yIik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6
V1ZfMjAwMDoKLSAgICAgICAgICAgIHZlciA9ICJXaW5kb3dzIE5UIDUuMCI7CisgICAgICAgIGNh
c2UgUVN5c0luZm86OlNWXzlfMzoKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiLzkuMyIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVN5c0luZm86OldWX1hQOgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgTlQgNS4xIjsKKyAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6U1ZfOV80OgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIvOS40Iik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAwMzoKLSAgICAgICAgICAgIHZlciA9ICJXaW5kb3dzIE5U
IDUuMiI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIi9Vbmtub3duIik7CisgICAgICAgIH0KKworI2lmIGRlZmluZWQg
UV9XU19TNjAKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRTGF0aW4xQ2hhcignICcpOworICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIlNlcmllczYwIik7Cisg
ICAgICAgIFFTeXNJbmZvOjpTNjBWZXJzaW9uIHM2MFZlcnNpb24gPSBRU3lzSW5mbzo6czYwVmVy
c2lvbigpOworICAgICAgICBzd2l0Y2ggKHM2MFZlcnNpb24pIHsKKyAgICAgICAgY2FzZSBRU3lz
SW5mbzo6U1ZfUzYwXzNfMToKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMSgiLzMuMSIpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5
c0luZm86OldWX1ZJU1RBOgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgTlQgNi4wIjsKKyAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6U1ZfUzYwXzNfMjoKKyAgICAgICAgICAgIGZpcnN0UGFydFRl
bXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiLzMuMiIpOwogICAgICAgICAgICAgYnJlYWs7Ci0j
aWYgUVRfVkVSU0lPTiA+IDB4MDQwNTAwCi0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX1dJTkRP
V1M3OgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgTlQgNi4xIjsKKyAgICAgICAgY2FzZSBR
U3lzSW5mbzo6U1ZfUzYwXzVfMDoKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiLzUuMCIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIi9V
bmtub3duIik7CisgICAgICAgIH0KICNlbmRpZgotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9D
RToKLSAgICAgICAgICAgIHZlciA9ICJXaW5kb3dzIENFIjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9DRU5FVDoKLSAgICAgICAgICAgIHZlciA9ICJXaW5k
b3dzIENFIC5ORVQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86
OldWX0NFXzU6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93cyBDRSA1LngiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NFXzY6Ci0gICAgICAgICAgICB2
ZXIgPSAiV2luZG93cyBDRSA2LngiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHVh
ID0gUVN0cmluZyh1YSkuYXJnKHZlcik7CisKKyNlbGlmIGRlZmluZWQgUV9PU19VTklYCisgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiVU5JWCBCU0QvU1lTViBz
eXN0ZW0iKTsKKyNlbGlmIGRlZmluZWQgUV9PU19VTklYV0FSRQorICAgICAgICBmaXJzdFBhcnRU
ZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIlVuaXhXYXJlIFNldmVuLCBPcGVuIFVOSVggRWln
aHQiKTsKKyNlbHNlCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgiVW5rbm93biIpOwogI2VuZGlmCiAKLSAgICAvLyBTdWJQbGF0Zm9ybSBWZXJzaW9uCi0gICAg
UVN0cmluZyBzdWJQbGF0Zm9ybVZlcjsKLSNpZmRlZiBRX09TX1NZTUJJQU4KLSAgICBRU3lzSW5m
bzo6UzYwVmVyc2lvbiBzNjBWZXJzaW9uID0gUVN5c0luZm86OnM2MFZlcnNpb24oKTsKLSAgICBz
d2l0Y2ggKHM2MFZlcnNpb24pIHsKLSAgICBjYXNlIFFTeXNJbmZvOjpTVl9TNjBfM18xOgotICAg
ICAgICBzdWJQbGF0Zm9ybVZlciA9ICIvMy4xIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBR
U3lzSW5mbzo6U1ZfUzYwXzNfMjoKLSAgICAgICAgc3ViUGxhdGZvcm1WZXIgPSAiLzMuMiI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVN5c0luZm86OlNWX1M2MF81XzA6Ci0gICAgICAgIHN1
YlBsYXRmb3JtVmVyID0gIi81LjAiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAKLSAg
ICAgICAgc3ViUGxhdGZvcm1WZXIgPSAiIFVua25vd24iOwotICAgIH0KKyAgICAgICAgLy8gbGFu
Z3VhZ2UgaXMgdGhlIHNwbGl0CisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJv
bUxhdGluMSgiOyAiKTsKKyAgICAgICAgZmlyc3RQYXJ0VGVtcC5zcXVlZXplKCk7CisgICAgICAg
IGZpcnN0UGFydCA9IGZpcnN0UGFydFRlbXA7CisKKyAgICAgICAgUVN0cmluZyBzZWNvbmRQYXJ0
VGVtcDsKKyAgICAgICAgc2Vjb25kUGFydFRlbXAucmVzZXJ2ZSgxNTApOworICAgICAgICBzZWNv
bmRQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIpICIpOworCisgICAgICAgIC8vIHdl
YmtpdC9xdCB2ZXJzaW9uCisgICAgICAgIHNlY29uZFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIkFwcGxlV2ViS2l0LyIpOworICAgICAgICBzZWNvbmRQYXJ0VGVtcCArPSBxV2ViS2l0
VmVyc2lvbigpOworICAgICAgICBzZWNvbmRQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCIgKEtIVE1MLCBsaWtlIEdlY2tvKSAiKTsKKworCisgICAgICAgIC8vIEFwcGxpY2F0aW9uIG5h
bWUgc3BsaXQgdGhlIHRoaXJkIHBhcnQKKyAgICAgICAgc2Vjb25kUGFydFRlbXAuc3F1ZWV6ZSgp
OworICAgICAgICBzZWNvbmRQYXJ0ID0gc2Vjb25kUGFydFRlbXA7CisKKyAgICAgICAgUVN0cmlu
ZyB0aGlyZFBhcnRUZW1wOworICAgICAgICB0aGlyZFBhcnRUZW1wLnJlc2VydmUoMTUwKTsKKyNp
ZiBkZWZpbmVkKFFfV1NfUzYwKSB8fCBkZWZpbmVkKFFfV1NfTUFFTU9fNSkKKyAgICAgICAgdGhp
cmRQYXJ0VGVtcCArIFFMYXRpbjFTdHJpbmcoIiBNb2JpbGUgU2FmYXJpLyIpOworI2Vsc2UKKyAg
ICAgICAgdGhpcmRQYXJ0VGVtcCArPSBRTGF0aW4xU3RyaW5nKCIgU2FmYXJpLyIpOwogI2VuZGlm
Ci0gICAgdWEgPSB1YS5hcmcoc3ViUGxhdGZvcm1WZXIpOworICAgICAgICB0aGlyZFBhcnRUZW1w
ICs9IHFXZWJLaXRWZXJzaW9uKCk7CisgICAgICAgIHRoaXJkUGFydFRlbXAuc3F1ZWV6ZSgpOwor
ICAgICAgICB0aGlyZFBhcnQgPSB0aGlyZFBhcnRUZW1wOworICAgICAgICBRX0FTU0VSVCghZmly
c3RQYXJ0LmlzTnVsbCgpKTsKKyAgICAgICAgUV9BU1NFUlQoIXNlY29uZFBhcnQuaXNOdWxsKCkp
OworICAgICAgICBRX0FTU0VSVCghdGhpcmRQYXJ0LmlzTnVsbCgpKTsKKyAgICB9CiAKICAgICAv
LyBMYW5ndWFnZQotICAgIFFMb2NhbGUgbG9jYWxlOworICAgIFFTdHJpbmcgbGFuZ3VhZ2VOYW1l
OwogICAgIGlmIChkLT5jbGllbnQgJiYgZC0+Y2xpZW50LT5vd25lcldpZGdldCgpKQotICAgICAg
ICBsb2NhbGUgPSBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCktPmxvY2FsZSgpOwotICAgIFFTdHJp
bmcgbmFtZSA9IGxvY2FsZS5uYW1lKCk7Ci0gICAgbmFtZVsyXSA9IFFMYXRpbjFDaGFyKCctJyk7
Ci0gICAgdWEuYXBwZW5kKG5hbWUpOwotICAgIHVhLmFwcGVuZChRTGF0aW4xU3RyaW5nKCIpICIp
KTsKLQotICAgIC8vIHdlYmtpdC9xdCB2ZXJzaW9uCi0gICAgdWEuYXBwZW5kKFFTdHJpbmcoUUxh
dGluMVN0cmluZygiQXBwbGVXZWJLaXQvJTEgKEtIVE1MLCBsaWtlIEdlY2tvKSAiKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAuYXJnKFFTdHJpbmcocVdlYktpdFZlcnNpb24oKSkpKTsKKyAgICAg
ICAgbGFuZ3VhZ2VOYW1lID0gZC0+Y2xpZW50LT5vd25lcldpZGdldCgpLT5sb2NhbGUoKS5uYW1l
KCk7CisgICAgZWxzZQorICAgICAgICBsYW5ndWFnZU5hbWUgPSBRTG9jYWxlKCkubmFtZSgpOwor
ICAgIGxhbmd1YWdlTmFtZVsyXSA9IFFMYXRpbjFDaGFyKCctJyk7CiAKICAgICAvLyBBcHBsaWNh
dGlvbiBuYW1lL3ZlcnNpb24KICAgICBRU3RyaW5nIGFwcE5hbWUgPSBRQ29yZUFwcGxpY2F0aW9u
OjphcHBsaWNhdGlvbk5hbWUoKTsKICAgICBpZiAoIWFwcE5hbWUuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHVhLmFwcGVuZChhcHBOYW1lKTsKICAgICAgICAgUVN0cmluZyBhcHBWZXIgPSBRQ29yZUFw
cGxpY2F0aW9uOjphcHBsaWNhdGlvblZlcnNpb24oKTsKICAgICAgICAgaWYgKCFhcHBWZXIuaXNF
bXB0eSgpKQotICAgICAgICAgICAgdWEuYXBwZW5kKFFMYXRpbjFDaGFyKCcvJykgKyBhcHBWZXIp
OworICAgICAgICAgICAgYXBwTmFtZS5hcHBlbmQoUUxhdGluMUNoYXIoJy8nKSArIGFwcFZlcik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUXQgdmVyc2lvbgotICAgICAgICB1YS5hcHBlbmQo
UUxhdGluMVN0cmluZygiUXQvIikpOwotICAgICAgICB1YS5hcHBlbmQoUUxhdGluMVN0cmluZyhx
VmVyc2lvbigpKSk7CisgICAgICAgIGFwcE5hbWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJRdC8i
KSArIFFTdHJpbmc6OmZyb21MYXRpbjEocVZlcnNpb24oKSk7CiAgICAgfQogCi0jaWYgZGVmaW5l
ZChRX1dTX1M2MCkgfHwgZGVmaW5lZChRX1dTX01BRU1PXzUpCi0gICAgdWEuYXBwZW5kKFFTdHJp
bmcoUUxhdGluMVN0cmluZygiIE1vYmlsZSBTYWZhcmkvJTEiKSkuYXJnKHFXZWJLaXRWZXJzaW9u
KCkpKTsKLSNlbHNlCi0gICAgdWEuYXBwZW5kKFFTdHJpbmcoUUxhdGluMVN0cmluZygiIFNhZmFy
aS8lMSIpKS5hcmcocVdlYktpdFZlcnNpb24oKSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIHVhOwor
ICAgIHJldHVybiBmaXJzdFBhcnQgKyBsYW5ndWFnZU5hbWUgKyBzZWNvbmRQYXJ0ICsgYXBwTmFt
ZSArIHRoaXJkUGFydDsKIH0KIAogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAyNzI0ZjQwLi40MDQ4ZDQyIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OCBAQAorMjAxMC0wNC0zMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gUVdlYlBhZ2U6OnVzZXJBZ2VudEZvclVybCBpcyB0ZXJyaWJsZSBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzODc1CisKKyAgICAgICAg
U2ltcGxpZnkgdGhlIGNyZWF0aW9uIG9mIHRoZSB1c2VyIGFnZW50IHN0cmluZyB0byBhdm9pZCBz
b21lCisgICAgICAgIG92ZXJoZWFkIGZvciBlYWNoIGxvYWRlZCB1cmwuCisKKyAgICAgICAgVGhl
IHN0YXRpYyBwYXJ0IG9mIHRoZSB1c2VyIGFnZW50IGlzIGNhY2hlZCBzbyBpdCBvbmx5IGhhdmUK
KyAgICAgICAgdG8gYmUgbWFkZSBvbmNlLgorICAgICAgICBUaGlzIGNyZWF0aW9uIGhhcyBiZWVu
IG1hZGUgaW4gb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvZGUuCisKKyAgICAgICAgVGhlIHR3byB2
YXJpYWJsZTogYXBwbGljYXRpb24gbmFtZSBhbmQgY3VycmVudCBsYW5ndWFnZSBhcmUKKyAgICAg
ICAgc2V0IGR5bmFtaWNhbGx5IHdoZW4gbmVlZGVkLgorICAgICAgICBUaGUgZGVmYXVsdCBsb2Nh
bGUgaXMgbm9uIGxvbmdlciBjcmVhdGVkIGlmIHRoZSB3aWRnZXQgbG9jYWxlCisgICAgICAgIGlz
IHVzZWQuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6
OnVzZXJBZ2VudEZvclVybCk6CisgICAgICAgICogdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdl
LmNwcDoKKyAgICAgICAgKHRzdF9RV2ViUGFnZTo6dXNlckFnZW50QXBwbGljYXRpb25OYW1lKToK
KyAgICAgICAgKHRzdF9RV2ViUGFnZTo6dXNlckFnZW50TG9jYWxlQ2hhbmdlKToKKwogMjAxMC0w
NC0yOSAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC90ZXN0
cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCmluZGV4IDBiZmUxMWQuLjgwZWVlNzggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCisrKyBiL1dl
YktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCkBAIC0yNCw2ICsyNCw3IEBA
CiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRR3JhcGhpY3NXaWRnZXQ+CiAjaW5jbHVkZSA8
UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFMb2NhbGU+CiAjaW5jbHVkZSA8UU1lbnU+CiAjaW5jbHVk
ZSA8UVB1c2hCdXR0b24+CiAjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KQEAgLTEwNyw2ICsxMDgs
OCBAQCBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgZXJyb3JQYWdlRXh0ZW5zaW9uKCk7CiAgICAg
dm9pZCBlcnJvclBhZ2VFeHRlbnNpb25JbklGcmFtZXMoKTsKICAgICB2b2lkIGVycm9yUGFnZUV4
dGVuc2lvbkluRnJhbWVzZXQoKTsKKyAgICB2b2lkIHVzZXJBZ2VudEFwcGxpY2F0aW9uTmFtZSgp
OworICAgIHZvaWQgdXNlckFnZW50TG9jYWxlQ2hhbmdlKCk7CiAKICAgICB2b2lkIHdydF92aWV3
TW9kZXMoKTsKIApAQCAtMTc2NSw2ICsxNzY4LDM5IEBAIHZvaWQgdHN0X1FXZWJQYWdlOjplcnJv
clBhZ2VFeHRlbnNpb25JbkZyYW1lc2V0KCkKICAgICBtX3ZpZXctPnNldFBhZ2UoMCk7CiB9CiAK
K2NsYXNzIEZyaWVuZGx5V2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZQoreworcHVibGljOgorICAg
IGZyaWVuZCBjbGFzcyB0c3RfUVdlYlBhZ2U7Cit9OworCit2b2lkIHRzdF9RV2ViUGFnZTo6dXNl
ckFnZW50QXBwbGljYXRpb25OYW1lKCkKK3sKKyAgICBjb25zdCBRU3RyaW5nIG9sZEFwcGxpY2F0
aW9uTmFtZSA9IFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uTmFtZSgpOworICAgIEZyaWVu
ZGx5V2ViUGFnZSBwYWdlOworCisgICAgY29uc3QgUVN0cmluZyBhcHBsaWNhdGlvbk5hbWVNYXJr
ZXIgPSBRU3RyaW5nOjpmcm9tVXRmOCgiU3RyYW5nZU5hbWVcMzQyXDIxMFwyMzYiKTsKKyAgICBR
Q29yZUFwcGxpY2F0aW9uOjpzZXRBcHBsaWNhdGlvbk5hbWUoYXBwbGljYXRpb25OYW1lTWFya2Vy
KTsKKyAgICBRVkVSSUZZKHBhZ2UudXNlckFnZW50Rm9yVXJsKFFVcmwoKSkuY29udGFpbnMoYXBw
bGljYXRpb25OYW1lTWFya2VyKSk7CisKKyAgICBRQ29yZUFwcGxpY2F0aW9uOjpzZXRBcHBsaWNh
dGlvbk5hbWUob2xkQXBwbGljYXRpb25OYW1lKTsKK30KKwordm9pZCB0c3RfUVdlYlBhZ2U6OnVz
ZXJBZ2VudExvY2FsZUNoYW5nZSgpCit7CisgICAgRnJpZW5kbHlXZWJQYWdlIHBhZ2U7CisgICAg
bV92aWV3LT5zZXRQYWdlKCZwYWdlKTsKKworCisgICAgY29uc3QgUVN0cmluZyBtYXJrZXJTdHJp
bmcgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgbm4tTk8pIik7CisKKyAgICBpZiAocGFnZS51c2Vy
QWdlbnRGb3JVcmwoUVVybCgpKS5jb250YWlucyhtYXJrZXJTdHJpbmcpKQorICAgICAgICBRU0tJ
UCgibWFya2VyIHN0cmluZyBhbHJlYWR5IHByZXNlbnQiLCBTa2lwU2luZ2xlKTsKKworICAgIG1f
dmlldy0+c2V0TG9jYWxlKFFMb2NhbGUoUVN0cmluZzo6ZnJvbUxhdGluMSgibm5fTk8iKSkpOwor
ICAgIFFWRVJJRlkocGFnZS51c2VyQWdlbnRGb3JVcmwoUVVybCgpKS5jb250YWlucyhtYXJrZXJT
dHJpbmcpKTsKK30KKwogdm9pZCB0c3RfUVdlYlBhZ2U6OmNyYXNoVGVzdHNfTGF6eUluaXRpYWxp
emF0aW9uT2ZNYWluRnJhbWUoKQogewogICAgIHsK
</data>
<flag name="review"
          id="38861"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="38862"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54811</attachid>
            <date>2010-04-30 10:15:59 -0700</date>
            <delta_ts>2010-05-02 01:55:13 -0700</delta_ts>
            <desc>Better timing on the userAgentForUrl()</desc>
            <filename>33875.patch</filename>
            <type>text/plain</type>
            <size>16830</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKaW5kZXggNWM1Zjc5Zi4uODVkM2VhMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTMw
NTQsMjMzICszMDU0LDI1NSBAQCBRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6OnBsdWdpbkZh
Y3RvcnkoKSBjb25zdAogICAgIFxvICVBcHBWZXJzaW9uJSBleHBhbmRzIHRvIFFDb3JlQXBwbGlj
YXRpb246OmFwcGxpY2F0aW9uTmFtZSgpL1FDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9uVmVy
c2lvbigpIGlmIHRoZXkncmUgc2V0OyBvdGhlcndpc2UgZGVmYXVsdGluZyB0byBRdCBhbmQgdGhl
IGN1cnJlbnQgUXQgdmVyc2lvbi4KICAgICBcZW5kbGlzdAogKi8KLVFTdHJpbmcgUVdlYlBhZ2U6
OnVzZXJBZ2VudEZvclVybChjb25zdCBRVXJsJiB1cmwpIGNvbnN0CitRU3RyaW5nIFFXZWJQYWdl
Ojp1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYpIGNvbnN0CiB7Ci0gICAgUV9VTlVTRUQodXJs
KQotICAgIFFTdHJpbmcgdWEgPSBRTGF0aW4xU3RyaW5nKCJNb3ppbGxhLzUuMCAoIgorICAgIC8v
IHNwbGl0dGluZyB0aGUgc3RyaW5nIGluIHRocmVlIGFuZCB1c2VyIFFTdHJpbmdCdWlsZGVyIGlz
IGJldHRlciB0aGFuIHVzaW5nIFFTdHJpbmc6OmFyZygpCisgICAgc3RhdGljIFFTdHJpbmcgZmly
c3RQYXJ0OworICAgIHN0YXRpYyBRU3RyaW5nIHNlY29uZFBhcnQ7CisgICAgc3RhdGljIFFTdHJp
bmcgdGhpcmRQYXJ0OworCisgICAgaWYgKGZpcnN0UGFydC5pc051bGwoKSB8fCBzZWNvbmRQYXJ0
LmlzTnVsbCgpIHx8IHRoaXJkUGFydC5pc051bGwoKSkgeworICAgICAgICBRU3RyaW5nIGZpcnN0
UGFydFRlbXA7CisgICAgICAgIGZpcnN0UGFydFRlbXAucmVzZXJ2ZSgxNTApOworICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIk1vemlsbGEvNS4wICgiCiAKICAg
ICAvLyBQbGF0Zm9ybQogI2lmZGVmIFFfV1NfTUFDCi0gICAgIk1hY2ludG9zaCIKKyAgICAgICAg
Ik1hY2ludG9zaCIKICNlbGlmIGRlZmluZWQgUV9XU19RV1MKLSAgICAiUXRFbWJlZGRlZCIKKyAg
ICAgICAgIlF0RW1iZWRkZWQiCiAjZWxpZiBkZWZpbmVkIFFfV1NfV0lOCi0gICAgIldpbmRvd3Mi
CisgICAgICAgICJXaW5kb3dzIgogI2VsaWYgZGVmaW5lZCBRX1dTX1gxMQotICAgICJYMTEiCisg
ICAgICAgICJYMTEiCiAjZWxpZiBkZWZpbmVkIFFfT1NfU1lNQklBTgotICAgICJTeW1iaWFuT1Mi
CisgICAgICAgICJTeW1iaWFuT1MiCiAjZWxzZQotICAgICJVbmtub3duIgorICAgICAgICAiVW5r
bm93biIKICNlbmRpZgotICAgIC8vIFBsYWNlaG9sZGVyIGZvciBQbGF0Zm9ybSBWZXJzaW9uCi0g
ICAgIiUxOyAiCisgICAgKTsKKworICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoIjsgIik7CiAKLSAgICAvLyBQbGFjZWhvbGRlciBmb3Igc2VjdXJpdHkgc3RyZW5n
dGggKE4gb3IgVSkKLSAgICAiJTI7ICIKKyAgICAgICAgLy8gU1NMIHN1cHBvcnQKKyNpZiAhZGVm
aW5lZChRVF9OT19PUEVOU1NMKQorICAgICAgICAvLyB3ZSBjb3VsZCBjaGVjayBRU3NsU29ja2V0
OjpzdXBwb3J0c1NzbCgpIGhlcmUsIGJ1dCB0aGlzIG1ha2VzCisgICAgICAgIC8vIE9wZW5TU0ws
IGNlcnRpZmljYXRlcyBldGMgYmVpbmcgbG9hZGVkIGluIGFsbCBjYXNlcyB3ZXJlIFFXZWJQYWdl
CisgICAgICAgIC8vIGlzIHVzZWQuIFRoaXMgbG9hZGluZyBpcyBub3QgbmVlZGVkIGZvciBub24t
aHR0cHMuCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiVTsg
Iik7CisgICAgICAgIC8vIHRoaXMgbWF5IGxlYWQgdG8gYSBmYWxzZSBwb3NpdGl2ZTogV2UgaW5k
aWNhdGUgU1NMIHNpbmNlIGl0IGlzCisgICAgICAgIC8vIGNvbXBpbGVkIGluIGV2ZW4gdGhvdWdo
IHN1cHBvcnRzU3NsKCkgbWlnaHQgcmV0dXJuIGZhbHNlCisjZWxzZQorICAgICAgICBmaXJzdFBh
cnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIk47ICIpOworI2VuZGlmCiAKLSAgICAvLyBT
dWJwbGF0Zm9ybSIKKyAgICAgICAgLy8gT3BlcmF0aW5nIHN5c3RlbQogI2lmZGVmIFFfT1NfQUlY
Ci0gICAgIkFJWCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJBSVgiKTsKICNlbGlmIGRlZmluZWQgUV9PU19XSU4zMgotICAgICIlMyIKKworICAgICAgICBz
d2l0Y2ggKFFTeXNJbmZvOjpXaW5kb3dzVmVyc2lvbikgeworICAgICAgICBjYXNlIFFTeXNJbmZv
OjpXVl8zMnM6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRp
bjEoIldpbmRvd3MgMy4xIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRU3lz
SW5mbzo6V1ZfOTU6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIldpbmRvd3MgOTUiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFT
eXNJbmZvOjpXVl85ODoKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJv
bUxhdGluMSgiV2luZG93cyA5OCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UVN5c0luZm86OldWX01lOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCJXaW5kb3dzIDk4OyBXaW4gOXggNC45MCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUVN5c0luZm86OldWX05UOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVt
cCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5OVDQuMCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUVN5c0luZm86OldWXzIwMDA6CisgICAgICAgICAgICBmaXJzdFBhcnRU
ZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4wIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfWFA6CisgICAgICAgICAgICBmaXJz
dFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIldpbmRvd3MgTlQgNS4xIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfMjAwMzoKKyAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBOVCA1LjIi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl9WSVNUQToK
KyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93
cyBOVCA2LjAiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBRU3lzSW5mbzo6
V1ZfV0lORE9XUzc6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIldpbmRvd3MgTlQgNi4xIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNh
c2UgUVN5c0luZm86OldWX0NFOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJXaW5kb3dzIENFIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
IGNhc2UgUVN5c0luZm86OldWX0NFTkVUOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJXaW5kb3dzIENFIC5ORVQiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VfNToKKyAgICAgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSA1LngiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VfNjoKKyAgICAgICAgICAg
IGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiV2luZG93cyBDRSA2LngiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICNlbGlmIGRlZmluZWQgUV9PU19EQVJX
SU4KICNpZmRlZiBfX2kzODZfXyB8fCBfX3g4Nl82NF9fCi0gICAgIkludGVsIE1hYyBPUyBYIgor
ICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkludGVsIE1hYyBP
UyBYIik7CiAjZWxzZQotICAgICJQUEMgTWFjIE9TIFgiCisgICAgICAgIGZpcnN0UGFydFRlbXAg
Kz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiUFBDIE1hYyBPUyBYIik7CiAjZW5kaWYKIAogI2VsaWYg
ZGVmaW5lZCBRX09TX0JTREkKLSAgICAiQlNEIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIkJTRCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX0JTRDQKLSAgICAi
QlNEIEZvdXIiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgi
QlNEIEZvdXIiKTsKICNlbGlmIGRlZmluZWQgUV9PU19DWUdXSU4KLSAgICAiQ3lnd2luIgorICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkN5Z3dpbiIpOwogI2Vs
aWYgZGVmaW5lZCBRX09TX0RHVVgKLSAgICAiREcvVVgiCisgICAgICAgIGZpcnN0UGFydFRlbXAg
Kz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiREcvVVgiKTsKICNlbGlmIGRlZmluZWQgUV9PU19EWU5J
WAotICAgICJEWU5JWC9wdHgiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJv
bUxhdGluMSgiRFlOSVgvcHR4Iik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfRlJFRUJTRAotICAgICJG
cmVlQlNEIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkZy
ZWVCU0QiKTsKICNlbGlmIGRlZmluZWQgUV9PU19IUFVYCi0gICAgIkhQLVVYIgorICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIkhQLVVYIik7CiAjZWxpZiBkZWZp
bmVkIFFfT1NfSFVSRAotICAgICJHTlUgSHVyZCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCJHTlUgSHVyZCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX0lSSVgK
LSAgICAiU0dJIElyaXgiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxh
dGluMSgiU0dJIElyaXgiKTsKICNlbGlmIGRlZmluZWQgUV9PU19MSU5VWAotICAgICJMaW51eCIK
KworI2lmIGRlZmluZWQoX194ODZfNjRfXykKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJMaW51eCB4ODZfNjQiKTsKKyNlbGlmIGRlZmluZWQoX19pMzg2X18p
CisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiTGludXggaTY4
NiIpOworI2Vsc2UKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJMaW51eCIpOworI2VuZGlmCisKICNlbGlmIGRlZmluZWQgUV9PU19MWU5YCi0gICAgIkx5bnhP
UyIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJMeW54T1Mi
KTsKICNlbGlmIGRlZmluZWQgUV9PU19ORVRCU0QKLSAgICAiTmV0QlNEIgorICAgICAgICBmaXJz
dFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIk5ldEJTRCIpOwogI2VsaWYgZGVmaW5l
ZCBRX09TX09TMgotICAgICJPUy8yIgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6
OmZyb21MYXRpbjEoIk9TLzIiKTsKICNlbGlmIGRlZmluZWQgUV9PU19PUEVOQlNECi0gICAgIk9w
ZW5CU0QiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiT3Bl
bkJTRCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX09TMkVNWAotICAgICJPUy8yIgorICAgICAgICBm
aXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIk9TLzIiKTsKICNlbGlmIGRlZmlu
ZWQgUV9PU19PU0YKLSAgICAiSFAgVHJ1NjQgVU5JWCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJIUCBUcnU2NCBVTklYIik7CiAjZWxpZiBkZWZpbmVkIFFf
T1NfUU5YNgotICAgICJRTlggUlRQIFNpeCIKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCJRTlggUlRQIFNpeCIpOwogI2VsaWYgZGVmaW5lZCBRX09TX1FOWAot
ICAgICJRTlgiCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgi
UU5YIik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfUkVMSUFOVAotICAgICJSZWxpYW50IFVOSVgiCisg
ICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiUmVsaWFudCBVTklY
Iik7CiAjZWxpZiBkZWZpbmVkIFFfT1NfU0NPCi0gICAgIlNDTyBPcGVuU2VydmVyIgorICAgICAg
ICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIlNDTyBPcGVuU2VydmVyIik7
CiAjZWxpZiBkZWZpbmVkIFFfT1NfU09MQVJJUwotICAgICJTdW4gU29sYXJpcyIKKyAgICAgICAg
Zmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJTdW4gU29sYXJpcyIpOwogI2Vs
aWYgZGVmaW5lZCBRX09TX1VMVFJJWAotICAgICJERUMgVWx0cml4IgotI2VsaWYgZGVmaW5lZCBR
X1dTX1M2MAotICAgICJTZXJpZXM2MCIKLSNlbGlmIGRlZmluZWQgUV9PU19VTklYCi0gICAgIlVO
SVggQlNEL1NZU1Ygc3lzdGVtIgotI2VsaWYgZGVmaW5lZCBRX09TX1VOSVhXQVJFCi0gICAgIlVu
aXhXYXJlIFNldmVuLCBPcGVuIFVOSVggRWlnaHQiCi0jZWxzZQotICAgICJVbmtub3duIgotI2Vu
ZGlmCi0gICAgLy8gUGxhY2Vob2xkZXIgZm9yIFN1YlBsYXRmb3JtIFZlcnNpb24KLSAgICAiJTQ7
ICIpOwotCi0gICAgLy8gUGxhdGZvcm0gVmVyc2lvbgotICAgIFFTdHJpbmcgb3NWZXI7Ci0jaWZk
ZWYgUV9PU19TWU1CSUFOCi0gICAgUVN5c0luZm86OlN5bWJpYW5WZXJzaW9uIHN5bWJpYW5WZXJz
aW9uID0gUVN5c0luZm86OnN5bWJpYW5WZXJzaW9uKCk7Ci0gICAgc3dpdGNoIChzeW1iaWFuVmVy
c2lvbikgewotICAgIGNhc2UgUVN5c0luZm86OlNWXzlfMjoKLSAgICAgICAgb3NWZXIgPSAiLzku
MiI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVN5c0luZm86OlNWXzlfMzoKLSAgICAgICAg
b3NWZXIgPSAiLzkuMyI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUVN5c0luZm86OlNWXzlf
NDoKLSAgICAgICAgb3NWZXIgPSAiLzkuNCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
IAotICAgICAgICBvc1ZlciA9ICJVbmtub3duIjsKLSAgICB9Ci0jZW5kaWYKLSAgICB1YSA9IHVh
LmFyZyhvc1Zlcik7Ci0KLSAgICBRQ2hhciBzZWN1cml0eVN0cmVuZ3RoKFFMYXRpbjFDaGFyKCdO
JykpOwotI2lmICFkZWZpbmVkKFFUX05PX09QRU5TU0wpCi0gICAgLy8gd2UgY291bGQgY2hlY2sg
UVNzbFNvY2tldDo6c3VwcG9ydHNTc2woKSBoZXJlLCBidXQgdGhpcyBtYWtlcwotICAgIC8vIE9w
ZW5TU0wsIGNlcnRpZmljYXRlcyBldGMgYmVpbmcgbG9hZGVkIGluIGFsbCBjYXNlcyB3ZXJlIFFX
ZWJQYWdlCi0gICAgLy8gaXMgdXNlZC4gVGhpcyBsb2FkaW5nIGlzIG5vdCBuZWVkZWQgZm9yIG5v
bi1odHRwcy4KLSAgICBzZWN1cml0eVN0cmVuZ3RoID0gUUxhdGluMUNoYXIoJ1UnKTsKLSAgICAv
LyB0aGlzIG1heSBsZWFkIHRvIGEgZmFsc2UgcG9zaXRpdmU6IFdlIGluZGljYXRlIFNTTCBzaW5j
ZSBpdCBpcwotICAgIC8vIGNvbXBpbGVkIGluIGV2ZW4gdGhvdWdoIHN1cHBvcnRzU3NsKCkgbWln
aHQgcmV0dXJuIGZhbHNlCi0jZW5kaWYKLSAgICB1YSA9IHVhLmFyZyhzZWN1cml0eVN0cmVuZ3Ro
KTsKLQotI2lmIGRlZmluZWQgUV9PU19XSU4zMgotICAgIFFTdHJpbmcgdmVyOwotICAgIHN3aXRj
aCAoUVN5c0luZm86OldpbmRvd3NWZXJzaW9uKSB7Ci0gICAgICAgIGNhc2UgUVN5c0luZm86OldW
XzMyczoKLSAgICAgICAgICAgIHZlciA9ICJXaW5kb3dzIDMuMSI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfOTU6Ci0gICAgICAgICAgICB2ZXIgPSAiV2lu
ZG93cyA5NSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1Zf
OTg6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93cyA5OCI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfTWU6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93
cyA5ODsgV2luIDl4IDQuOTAiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUVN5
c0luZm86OldWX05UOgotICAgICAgICAgICAgdmVyID0gIldpbk5UNC4wIjsKKyAgICAgICAgZmly
c3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJERUMgVWx0cml4Iik7CisjZWxpZiBk
ZWZpbmVkIFFfT1NfU1lNQklBTgorICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoIlN5bWJpYW5PUyIpOworICAgICAgICBRU3lzSW5mbzo6U3ltYmlhblZlcnNpb24g
c3ltYmlhblZlcnNpb24gPSBRU3lzSW5mbzo6c3ltYmlhblZlcnNpb24oKTsKKyAgICAgICAgc3dp
dGNoIChzeW1iaWFuVmVyc2lvbikgeworICAgICAgICBjYXNlIFFTeXNJbmZvOjpTVl85XzI6Cisg
ICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIi85LjIiKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJbmZvOjpXVl8yMDAwOgotICAg
ICAgICAgICAgdmVyID0gIldpbmRvd3MgTlQgNS4wIjsKKyAgICAgICAgY2FzZSBRU3lzSW5mbzo6
U1ZfOV8zOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCIvOS4zIik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1Zf
WFA6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93cyBOVCA1LjEiOworICAgICAgICBjYXNlIFFT
eXNJbmZvOjpTVl85XzQ6CisgICAgICAgICAgICBmaXJzdFBhcnRUZW1wICs9IFFTdHJpbmc6OmZy
b21MYXRpbjEoIi85LjQiKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFFTeXNJ
bmZvOjpXVl8yMDAzOgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgTlQgNS4yIjsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxh
dGluMSgiL1Vua25vd24iKTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZCBRX1dTX1M2MAorICAg
ICAgICBmaXJzdFBhcnRUZW1wICs9IFFMYXRpbjFDaGFyKCcgJyk7CisgICAgICAgIGZpcnN0UGFy
dFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiU2VyaWVzNjAiKTsKKyAgICAgICAgUVN5c0lu
Zm86OlM2MFZlcnNpb24gczYwVmVyc2lvbiA9IFFTeXNJbmZvOjpzNjBWZXJzaW9uKCk7CisgICAg
ICAgIHN3aXRjaCAoczYwVmVyc2lvbikgeworICAgICAgICBjYXNlIFFTeXNJbmZvOjpTVl9TNjBf
M18xOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIv
My4xIik7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfVklT
VEE6Ci0gICAgICAgICAgICB2ZXIgPSAiV2luZG93cyBOVCA2LjAiOworICAgICAgICBjYXNlIFFT
eXNJbmZvOjpTVl9TNjBfM18yOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCIvMy4yIik7CiAgICAgICAgICAgICBicmVhazsKLSNpZiBRVF9WRVJTSU9O
ID4gMHgwNDA1MDAKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfV0lORE9XUzc6Ci0gICAgICAg
ICAgICB2ZXIgPSAiV2luZG93cyBOVCA2LjEiOworICAgICAgICBjYXNlIFFTeXNJbmZvOjpTVl9T
NjBfNV8wOgorICAgICAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCIvNS4wIik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiL1Vua25vd24iKTsKKyAg
ICAgICAgfQogI2VuZGlmCi0gICAgICAgIGNhc2UgUVN5c0luZm86OldWX0NFOgotICAgICAgICAg
ICAgdmVyID0gIldpbmRvd3MgQ0UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UVN5c0luZm86OldWX0NFTkVUOgotICAgICAgICAgICAgdmVyID0gIldpbmRvd3MgQ0UgLk5FVCI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VfNToKLSAg
ICAgICAgICAgIHZlciA9ICJXaW5kb3dzIENFIDUueCI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBRU3lzSW5mbzo6V1ZfQ0VfNjoKLSAgICAgICAgICAgIHZlciA9ICJXaW5kb3dz
IENFIDYueCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgdWEgPSBRU3RyaW5nKHVh
KS5hcmcodmVyKTsKKworI2VsaWYgZGVmaW5lZCBRX09TX1VOSVgKKyAgICAgICAgZmlyc3RQYXJ0
VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJVTklYIEJTRC9TWVNWIHN5c3RlbSIpOworI2Vs
aWYgZGVmaW5lZCBRX09TX1VOSVhXQVJFCisgICAgICAgIGZpcnN0UGFydFRlbXAgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiVW5peFdhcmUgU2V2ZW4sIE9wZW4gVU5JWCBFaWdodCIpOworI2Vsc2UK
KyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJVbmtub3duIik7
CiAjZW5kaWYKIAotICAgIC8vIFN1YlBsYXRmb3JtIFZlcnNpb24KLSAgICBRU3RyaW5nIHN1YlBs
YXRmb3JtVmVyOwotI2lmZGVmIFFfT1NfU1lNQklBTgotICAgIFFTeXNJbmZvOjpTNjBWZXJzaW9u
IHM2MFZlcnNpb24gPSBRU3lzSW5mbzo6czYwVmVyc2lvbigpOwotICAgIHN3aXRjaCAoczYwVmVy
c2lvbikgewotICAgIGNhc2UgUVN5c0luZm86OlNWX1M2MF8zXzE6Ci0gICAgICAgIHN1YlBsYXRm
b3JtVmVyID0gIi8zLjEiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFFTeXNJbmZvOjpTVl9T
NjBfM18yOgotICAgICAgICBzdWJQbGF0Zm9ybVZlciA9ICIvMy4yIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBRU3lzSW5mbzo6U1ZfUzYwXzVfMDoKLSAgICAgICAgc3ViUGxhdGZvcm1WZXIg
PSAiLzUuMCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6IAotICAgICAgICBzdWJQbGF0
Zm9ybVZlciA9ICIgVW5rbm93biI7Ci0gICAgfQorICAgICAgICAvLyBsYW5ndWFnZSBpcyB0aGUg
c3BsaXQKKyAgICAgICAgZmlyc3RQYXJ0VGVtcCArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCI7ICIp
OworICAgICAgICBmaXJzdFBhcnRUZW1wLnNxdWVlemUoKTsKKyAgICAgICAgZmlyc3RQYXJ0ID0g
Zmlyc3RQYXJ0VGVtcDsKKworICAgICAgICBRU3RyaW5nIHNlY29uZFBhcnRUZW1wOworICAgICAg
ICBzZWNvbmRQYXJ0VGVtcC5yZXNlcnZlKDE1MCk7CisgICAgICAgIHNlY29uZFBhcnRUZW1wICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIikgIik7CisKKyAgICAgICAgLy8gd2Via2l0L3F0IHZlcnNp
b24KKyAgICAgICAgc2Vjb25kUGFydFRlbXAgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiQXBwbGVX
ZWJLaXQvIik7CisgICAgICAgIHNlY29uZFBhcnRUZW1wICs9IHFXZWJLaXRWZXJzaW9uKCk7Cisg
ICAgICAgIHNlY29uZFBhcnRUZW1wICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAoS0hUTUwsIGxp
a2UgR2Vja28pICIpOworCisKKyAgICAgICAgLy8gQXBwbGljYXRpb24gbmFtZSBzcGxpdCB0aGUg
dGhpcmQgcGFydAorICAgICAgICBzZWNvbmRQYXJ0VGVtcC5zcXVlZXplKCk7CisgICAgICAgIHNl
Y29uZFBhcnQgPSBzZWNvbmRQYXJ0VGVtcDsKKworICAgICAgICBRU3RyaW5nIHRoaXJkUGFydFRl
bXA7CisgICAgICAgIHRoaXJkUGFydFRlbXAucmVzZXJ2ZSgxNTApOworI2lmIGRlZmluZWQoUV9X
U19TNjApIHx8IGRlZmluZWQoUV9XU19NQUVNT181KQorICAgICAgICB0aGlyZFBhcnRUZW1wICsg
UUxhdGluMVN0cmluZygiIE1vYmlsZSBTYWZhcmkvIik7CisjZWxzZQorICAgICAgICB0aGlyZFBh
cnRUZW1wICs9IFFMYXRpbjFTdHJpbmcoIiBTYWZhcmkvIik7CiAjZW5kaWYKLSAgICB1YSA9IHVh
LmFyZyhzdWJQbGF0Zm9ybVZlcik7CisgICAgICAgIHRoaXJkUGFydFRlbXAgKz0gcVdlYktpdFZl
cnNpb24oKTsKKyAgICAgICAgdGhpcmRQYXJ0VGVtcC5zcXVlZXplKCk7CisgICAgICAgIHRoaXJk
UGFydCA9IHRoaXJkUGFydFRlbXA7CisgICAgICAgIFFfQVNTRVJUKCFmaXJzdFBhcnQuaXNOdWxs
KCkpOworICAgICAgICBRX0FTU0VSVCghc2Vjb25kUGFydC5pc051bGwoKSk7CisgICAgICAgIFFf
QVNTRVJUKCF0aGlyZFBhcnQuaXNOdWxsKCkpOworICAgIH0KIAogICAgIC8vIExhbmd1YWdlCi0g
ICAgUUxvY2FsZSBsb2NhbGU7CisgICAgUVN0cmluZyBsYW5ndWFnZU5hbWU7CiAgICAgaWYgKGQt
PmNsaWVudCAmJiBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCkpCi0gICAgICAgIGxvY2FsZSA9IGQt
PmNsaWVudC0+b3duZXJXaWRnZXQoKS0+bG9jYWxlKCk7Ci0gICAgUVN0cmluZyBuYW1lID0gbG9j
YWxlLm5hbWUoKTsKLSAgICBuYW1lWzJdID0gUUxhdGluMUNoYXIoJy0nKTsKLSAgICB1YS5hcHBl
bmQobmFtZSk7Ci0gICAgdWEuYXBwZW5kKFFMYXRpbjFTdHJpbmcoIikgIikpOwotCi0gICAgLy8g
d2Via2l0L3F0IHZlcnNpb24KLSAgICB1YS5hcHBlbmQoUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJB
cHBsZVdlYktpdC8lMSAoS0hUTUwsIGxpa2UgR2Vja28pICIpKQotICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoUVN0cmluZyhxV2ViS2l0VmVyc2lvbigpKSkpOworICAgICAgICBsYW5ndWFnZU5h
bWUgPSBkLT5jbGllbnQtPm93bmVyV2lkZ2V0KCktPmxvY2FsZSgpLm5hbWUoKTsKKyAgICBlbHNl
CisgICAgICAgIGxhbmd1YWdlTmFtZSA9IFFMb2NhbGUoKS5uYW1lKCk7CisgICAgbGFuZ3VhZ2VO
YW1lWzJdID0gUUxhdGluMUNoYXIoJy0nKTsKIAogICAgIC8vIEFwcGxpY2F0aW9uIG5hbWUvdmVy
c2lvbgogICAgIFFTdHJpbmcgYXBwTmFtZSA9IFFDb3JlQXBwbGljYXRpb246OmFwcGxpY2F0aW9u
TmFtZSgpOwogICAgIGlmICghYXBwTmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgdWEuYXBwZW5k
KGFwcE5hbWUpOwogICAgICAgICBRU3RyaW5nIGFwcFZlciA9IFFDb3JlQXBwbGljYXRpb246OmFw
cGxpY2F0aW9uVmVyc2lvbigpOwogICAgICAgICBpZiAoIWFwcFZlci5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICB1YS5hcHBlbmQoUUxhdGluMUNoYXIoJy8nKSArIGFwcFZlcik7CisgICAgICAgICAg
ICBhcHBOYW1lLmFwcGVuZChRTGF0aW4xQ2hhcignLycpICsgYXBwVmVyKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBRdCB2ZXJzaW9uCi0gICAgICAgIHVhLmFwcGVuZChRTGF0aW4xU3RyaW5n
KCJRdC8iKSk7Ci0gICAgICAgIHVhLmFwcGVuZChRTGF0aW4xU3RyaW5nKHFWZXJzaW9uKCkpKTsK
KyAgICAgICAgYXBwTmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoIlF0LyIpICsgUVN0cmluZzo6
ZnJvbUxhdGluMShxVmVyc2lvbigpKTsKICAgICB9CiAKLSNpZiBkZWZpbmVkKFFfV1NfUzYwKSB8
fCBkZWZpbmVkKFFfV1NfTUFFTU9fNSkKLSAgICB1YS5hcHBlbmQoUVN0cmluZyhRTGF0aW4xU3Ry
aW5nKCIgTW9iaWxlIFNhZmFyaS8lMSIpKS5hcmcocVdlYktpdFZlcnNpb24oKSkpOwotI2Vsc2UK
LSAgICB1YS5hcHBlbmQoUVN0cmluZyhRTGF0aW4xU3RyaW5nKCIgU2FmYXJpLyUxIikpLmFyZyhx
V2ViS2l0VmVyc2lvbigpKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gdWE7CisgICAgcmV0dXJuIGZp
cnN0UGFydCArIGxhbmd1YWdlTmFtZSArIHNlY29uZFBhcnQgKyBhcHBOYW1lICsgdGhpcmRQYXJ0
OwogfQogCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hh
bmdlTG9nCmluZGV4IDI3MjRmNDAuLjQwNDhkNDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA0
LTMwICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViUGFn
ZTo6dXNlckFnZW50Rm9yVXJsIGlzIHRlcnJpYmxlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM4NzUKKworICAgICAgICBTaW1wbGlmeSB0aGUg
Y3JlYXRpb24gb2YgdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHRvIGF2b2lkIHNvbWUKKyAgICAgICAg
b3ZlcmhlYWQgZm9yIGVhY2ggbG9hZGVkIHVybC4KKworICAgICAgICBUaGUgc3RhdGljIHBhcnQg
b2YgdGhlIHVzZXIgYWdlbnQgaXMgY2FjaGVkIHNvIGl0IG9ubHkgaGF2ZQorICAgICAgICB0byBi
ZSBtYWRlIG9uY2UuCisgICAgICAgIFRoaXMgY3JlYXRpb24gaGFzIGJlZW4gbWFkZSBpbiBvcmRl
ciB0byBzaW1wbGlmeSB0aGUgY29kZS4KKworICAgICAgICBUaGUgdHdvIHZhcmlhYmxlOiBhcHBs
aWNhdGlvbiBuYW1lIGFuZCBjdXJyZW50IGxhbmd1YWdlIGFyZQorICAgICAgICBzZXQgZHluYW1p
Y2FsbHkgd2hlbiBuZWVkZWQuCisgICAgICAgIFRoZSBkZWZhdWx0IGxvY2FsZSBpcyBub24gbG9u
Z2VyIGNyZWF0ZWQgaWYgdGhlIHdpZGdldCBsb2NhbGUKKyAgICAgICAgaXMgdXNlZC4KKworICAg
ICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6dXNlckFnZW50Rm9y
VXJsKToKKyAgICAgICAgKiB0ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwOgorICAgICAg
ICAodHN0X1FXZWJQYWdlOjp1c2VyQWdlbnRBcHBsaWNhdGlvbk5hbWUpOgorICAgICAgICAodHN0
X1FXZWJQYWdlOjp1c2VyQWdlbnRMb2NhbGVDaGFuZ2UpOgorCiAyMDEwLTA0LTI5ICBMYXN6bG8g
R29tYm9zICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC90ZXN0
cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwIGIvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwYWdlL3Rz
dF9xd2VicGFnZS5jcHAKaW5kZXggMGJmZTExZC4uZTJlMDhiMyAxMDA2NDQKLS0tIGEvV2ViS2l0
L3F0L3Rlc3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L3Rlc3Rz
L3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxR
RGlyPgogI2luY2x1ZGUgPFFHcmFwaGljc1dpZGdldD4KICNpbmNsdWRlIDxRTGluZUVkaXQ+Cisj
aW5jbHVkZSA8UUxvY2FsZT4KICNpbmNsdWRlIDxRTWVudT4KICNpbmNsdWRlIDxRUHVzaEJ1dHRv
bj4KICNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgpAQCAtMTA3LDYgKzEwOCw4IEBAIHByaXZhdGUg
c2xvdHM6CiAgICAgdm9pZCBlcnJvclBhZ2VFeHRlbnNpb24oKTsKICAgICB2b2lkIGVycm9yUGFn
ZUV4dGVuc2lvbkluSUZyYW1lcygpOwogICAgIHZvaWQgZXJyb3JQYWdlRXh0ZW5zaW9uSW5GcmFt
ZXNldCgpOworICAgIHZvaWQgdXNlckFnZW50QXBwbGljYXRpb25OYW1lKCk7CisgICAgdm9pZCB1
c2VyQWdlbnRMb2NhbGVDaGFuZ2UoKTsKIAogICAgIHZvaWQgd3J0X3ZpZXdNb2RlcygpOwogCkBA
IC0xNzY1LDYgKzE3NjgsMzggQEAgdm9pZCB0c3RfUVdlYlBhZ2U6OmVycm9yUGFnZUV4dGVuc2lv
bkluRnJhbWVzZXQoKQogICAgIG1fdmlldy0+c2V0UGFnZSgwKTsKIH0KIAorY2xhc3MgRnJpZW5k
bHlXZWJQYWdlIDogcHVibGljIFFXZWJQYWdlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNz
IHRzdF9RV2ViUGFnZTsKK307CisKK3ZvaWQgdHN0X1FXZWJQYWdlOjp1c2VyQWdlbnRBcHBsaWNh
dGlvbk5hbWUoKQoreworICAgIGNvbnN0IFFTdHJpbmcgb2xkQXBwbGljYXRpb25OYW1lID0gUUNv
cmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25OYW1lKCk7CisgICAgRnJpZW5kbHlXZWJQYWdlIHBh
Z2U7CisKKyAgICBjb25zdCBRU3RyaW5nIGFwcGxpY2F0aW9uTmFtZU1hcmtlciA9IFFTdHJpbmc6
OmZyb21VdGY4KCJTdHJhbmdlTmFtZVwzNDJcMjEwXDIzNiIpOworICAgIFFDb3JlQXBwbGljYXRp
b246OnNldEFwcGxpY2F0aW9uTmFtZShhcHBsaWNhdGlvbk5hbWVNYXJrZXIpOworICAgIFFWRVJJ
RlkocGFnZS51c2VyQWdlbnRGb3JVcmwoUVVybCgpKS5jb250YWlucyhhcHBsaWNhdGlvbk5hbWVN
YXJrZXIpKTsKKworICAgIFFDb3JlQXBwbGljYXRpb246OnNldEFwcGxpY2F0aW9uTmFtZShvbGRB
cHBsaWNhdGlvbk5hbWUpOworfQorCit2b2lkIHRzdF9RV2ViUGFnZTo6dXNlckFnZW50TG9jYWxl
Q2hhbmdlKCkKK3sKKyAgICBGcmllbmRseVdlYlBhZ2UgcGFnZTsKKyAgICBtX3ZpZXctPnNldFBh
Z2UoJnBhZ2UpOworCisgICAgY29uc3QgUVN0cmluZyBtYXJrZXJTdHJpbmcgPSBRU3RyaW5nOjpm
cm9tTGF0aW4xKCIgbm4tTk8pIik7CisKKyAgICBpZiAocGFnZS51c2VyQWdlbnRGb3JVcmwoUVVy
bCgpKS5jb250YWlucyhtYXJrZXJTdHJpbmcpKQorICAgICAgICBRU0tJUCgibWFya2VyIHN0cmlu
ZyBhbHJlYWR5IHByZXNlbnQiLCBTa2lwU2luZ2xlKTsKKworICAgIG1fdmlldy0+c2V0TG9jYWxl
KFFMb2NhbGUoUVN0cmluZzo6ZnJvbUxhdGluMSgibm5fTk8iKSkpOworICAgIFFWRVJJRlkocGFn
ZS51c2VyQWdlbnRGb3JVcmwoUVVybCgpKS5jb250YWlucyhtYXJrZXJTdHJpbmcpKTsKK30KKwog
dm9pZCB0c3RfUVdlYlBhZ2U6OmNyYXNoVGVzdHNfTGF6eUluaXRpYWxpemF0aW9uT2ZNYWluRnJh
bWUoKQogewogICAgIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>