<?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>8980</bug_id>
          
          <creation_ts>2006-05-18 14:16:39 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: !isLoaded (WebKit/WebKit/Plugins/WebBasePluginPackage.m:228 -[WebBasePluginPackage dealloc])</short_desc>
          <delta_ts>2006-08-15 16:33:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="William Coldwell (Cryo)">cryo</reporter>
          <assigned_to name="Tim Omernick">timo</assigned_to>
          <cc>ap</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42850</commentid>
    <comment_count>0</comment_count>
    <who name="William Coldwell (Cryo)">cryo</who>
    <bug_when>2006-05-18 14:16:39 -0700</bug_when>
    <thetext>fast/dom/Window .=================
ASSERTION FAILED: !isLoaded (/Volumes/Ernie/WebKit/WebKit/Plugins/WebBasePluginPackage.m:228 -[WebBasePluginPackage dealloc])
=================
Segmentation fault
LEAK: 82 Node
LEAK: 25 RenderObject
LEAK: 1 Frame

fast/dom/Window/Plug-ins.html -&gt; failed
.Broken pipe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42861</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-18 21:33:01 -0700</bug_when>
    <thetext>I also saw this once (on the same test), couldn&apos;t reproduce. Dual-processor G4.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46561</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-06-21 11:18:35 -0700</bug_when>
    <thetext>Saw it again today:

0   com.apple.WebKit               	0x0022868c -[WebBasePluginPackage dealloc] + 100 (WebBasePluginPackage.m:230)
1   com.apple.Foundation           	0x9290e968 NSPopAutoreleasePool + 536
2   com.apple.Foundation           	0x92962b60 -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] + 724
3   com.apple.Foundation           	0x92962810 _sendCallbacks + 156
4   com.apple.CoreFoundation       	0x907dc4cc __CFRunLoopDoSources0 + 384
5   com.apple.CoreFoundation       	0x907db9fc __CFRunLoopRun + 452
6   com.apple.CoreFoundation       	0x907db47c CFRunLoopRunSpecific + 268
7   com.apple.Foundation           	0x92941164 -[NSRunLoop runMode:beforeDate:] + 172
8   DumpRenderTree                 	0x00009a84 dumpRenderTree + 1000 (DumpRenderTree.m:755)

Fixing the assignment field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50587</commentid>
    <comment_count>3</comment_count>
    <who name="Dave MacLachlan">dmaclach</who>
    <bug_when>2006-07-22 23:13:34 -0700</bug_when>
    <thetext>Ran into this again with Revision 15580. 

fast/dom/Window .=================
ASSERTION FAILED: !isLoaded (/Users/Shared/src/WebKit/WebKit/Plugins/WebBasePluginPackage.m:230 -[WebBasePluginPackage dealloc])
=================
Segmentation fault
LEAK: 118 Node
LEAK: 25 RenderObject
LEAK: 1 Frame

fast/dom/Window/Plug-ins.html -&gt; failed
.Broken pipe


When I reran the tests it was gone. MacBookPro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50670</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-24 09:52:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/4526052&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50700</commentid>
    <comment_count>5</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-07-24 14:42:51 -0700</bug_when>
    <thetext>In a (the) failing scenario, -[WebPluginDatabase refresh] is invoked by the test (fast/dom/Window/Plug-ins.html). It proceeds to allocate and initialize a new WebBasePluginPackage for each unique valid plugin in the plugin path. The new WebBasePluginPackages are put in an NSMutableSet called newPlugins. The set of plugins already in the database is then subtracted from newPlugins. For this to be meaningful, equality testing for plugin packages is not based on pointer comparison but rather on name and modification date. Consequently, the newly allocated and initialized plugin packages that correspond to packages that were already in the database are eventually deallocated. It is during the deallocation of such a package that the assertion fails. The reason for that is that during plugin package initialization, the plugin may be loaded. Specifically, it happens under -getPluginInfoFromPLists when the plugin&apos;s preferences plist is missing, not localized, or for some reason isn&apos;t valid. That&apos;s when the plugin is loaded and asked to create the plist (in -pListForPath:createFile:).

While it might be interesting to understand why the plist becomes invalid while running the layout tests, it&apos;s something that can happen under normal use (such as if the user deletes the plist while the browser is running), so I think this needs to be fixed in WebKit.

I think that the best fix is for -pListForPath:createFile: to unload the plugin before returning if it wasn&apos;t loaded on entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50701</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-07-24 14:56:35 -0700</bug_when>
    <thetext>That sounds correct to me.  Will fix soon, or review if you want to submit a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50702</commentid>
    <comment_count>7</comment_count>
      <attachid>9658</attachid>
    <who name="">mitz</who>
    <bug_when>2006-07-24 14:59:03 -0700</bug_when>
    <thetext>Created attachment 9658
Don&apos;t leave the package loaded on return from -pListForPath:createFile: if it wasn&apos;t loaded on entry

I think this patch also makes sense from a performance point of view: you don&apos;t want to hold on to  for plugins only because you happened to need them to create their plists during database initializtion or refresh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50709</commentid>
    <comment_count>8</comment_count>
      <attachid>9658</attachid>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-07-24 15:47:18 -0700</bug_when>
    <thetext>Comment on attachment 9658
Don&apos;t leave the package loaded on return from -pListForPath:createFile: if it wasn&apos;t loaded on entry

I don&apos;t think this is the right fix.

If -pListForPath: is the first method to call -load, then the plug-in will be unnecessarily loaded/unloaded once for all legitimate plug-ins.

Maybe -[WebPluginDatabase refresh] should explicitly unload the &quot;throw-away&quot; packages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50710</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-07-24 15:54:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 9658 [edit])
&gt; I don&apos;t think this is the right fix.
&gt; 
&gt; If -pListForPath: is the first method to call -load, then the plug-in will be
&gt; unnecessarily loaded/unloaded once for all legitimate plug-ins.

That&apos;s &quot;all legitimate plug-ins that don&apos;t have a vaild plist at that time&quot;, which is typically a significantly smaller set, I think. But I&apos;ll try the other approach!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50711</commentid>
    <comment_count>10</comment_count>
      <attachid>9660</attachid>
    <who name="">mitz</who>
    <bug_when>2006-07-24 16:20:54 -0700</bug_when>
    <thetext>Created attachment 9660
&amp;Unload those ;throw-away&quot; packages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50723</commentid>
    <comment_count>11</comment_count>
      <attachid>9660</attachid>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-07-24 18:02:21 -0700</bug_when>
    <thetext>Comment on attachment 9660
&amp;Unload those ;throw-away&quot; packages

Mitz and I talked about this on IRC.  This is kind of almost correct, but would do the wrong thing for plugins that are already in the plugin database.  In that case you would not want to unload those plugins.

I think the best approach would be to ensure that the &quot;throw-away&quot; plugins (ones representing plugins already in the database) are never loaded in the first place.  It&apos;s a little odd that our plugin packages are &quot;lazily loaded&quot;, but they do their lazy loading in -init.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52277</commentid>
    <comment_count>12</comment_count>
      <attachid>9658</attachid>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-08-11 18:14:07 -0700</bug_when>
    <thetext>Comment on attachment 9658
Don&apos;t leave the package loaded on return from -pListForPath:createFile: if it wasn&apos;t loaded on entry

I changed my mind about this patch.  I think this is actually a reasonable fix.  I was initially concerned about the efficiency of loading/unloading the package inside of this method, esp. where the package will eventually be used (and will therefore need to be loaded again).

However, looking at the patch again, I see that this is only an issue when the plug-in has an external MIME type registration plist.

I am going to test this patch a bit and then land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52289</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-08-11 21:26:17 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 9658 [edit])
&gt; I changed my mind about this patch.  I think this is actually a reasonable fix.
&gt;  I was initially concerned about the efficiency of loading/unloading the
&gt; package inside of this method, esp. where the package will eventually be used
&gt; (and will therefore need to be loaded again).
&gt; 
&gt; However, looking at the patch again, I see that this is only an issue when the
&gt; plug-in has an external MIME type registration plist.
&gt; 
&gt; I am going to test this patch a bit and then land it.
&gt; 

I thought you&apos;d said that this approach is wrong because the two WebPluginPackage objects reference the same CFBundle, so unloading the bundle from the &quot;temporary&quot; WebPluginPackage would cause it to be unloaded for the &quot;permanent&quot; one, causing a crash on the next call to the plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52687</commentid>
    <comment_count>14</comment_count>
      <attachid>9658</attachid>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-08-15 15:40:54 -0700</bug_when>
    <thetext>Comment on attachment 9658
Don&apos;t leave the package loaded on return from -pListForPath:createFile: if it wasn&apos;t loaded on entry

Heh, yeah, you&apos;re right.  That original patch doesn&apos;t guard against closing a plug-in package while an instance is using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52688</commentid>
    <comment_count>15</comment_count>
      <attachid>10047</attachid>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-08-15 16:10:15 -0700</bug_when>
    <thetext>Created attachment 10047
Huge scary patch

Cleanup and rewrite of WebPluginDatabase:

- When refreshing the plugin database, we will no longer create &quot;throw-away&quot; plug-in packages for plug-ins that are already in the database.  Plug-in packages are now uniqued by path.

- Cleaned up the weird load/unload/isLoaded stuff the plug-in package classes.  Only Netscape plug-ins can truly be &quot;unloaded&quot;.  Once a WebKit plug-in bundle has been loaded, there is no way to unload its bundle.

- Netscape plug-ins packages can once again be safely removed from the database at runtime.  I broke this when I made the change to explicitly unload plug-ins packages when they are removed from the database.  A plug-in package is now unloaded after it is removed from the database, AND all its instances have been stopped.

- Netscape plug-ins will now properly get an NPP_Shutdown() when the application quits.  The browser is required to call this function just before unloading Netscape plug-ins.

- document.plugins.refresh() is now 11% faster in the cold case (never scanned for plug-ins), and 22% faster in the warm case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52696</commentid>
    <comment_count>16</comment_count>
      <attachid>10047</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-15 16:25:23 -0700</bug_when>
    <thetext>Comment on attachment 10047
Huge scary patch

One thing that must be fixed, that __LP64__ ifndef needs a semicolon outside it.

Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52697</commentid>
    <comment_count>17</comment_count>
    <who name="Tim Omernick">timo</who>
    <bug_when>2006-08-15 16:33:59 -0700</bug_when>
    <thetext>Fix landed to TOT WebKit, revision 15896.

Repro steps for Safari:

1) Go to Help -&gt; Installed Plug-Ins.
2) Remove ~/Library/Preferences/com.apple.quicktime.plugin.preferences.plist
3) Reload the &quot;Installed Plug-Ins&quot; page.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9658</attachid>
            <date>2006-07-24 14:59:03 -0700</date>
            <delta_ts>2006-08-15 16:10:15 -0700</delta_ts>
            <desc>Don&apos;t leave the package loaded on return from -pListForPath:createFile: if it wasn&apos;t loaded on entry</desc>
            <filename>8980_r1.patch</filename>
            <type>text/plain</type>
            <size>1639</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gMTU2MDgpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMDYtMDctMjUgIE1pdHogUGV0dGVsICA8b3BlbmRhcndpbi5vcmdAbWl0
enBldHRlbC5jb20+CisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4u
b3JnL3Nob3dfYnVnLmNnaT9pZD04OTgwCisgICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogIWlz
TG9hZGVkIChXZWJLaXQvV2ViS2l0L1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubToyMjgg
LVtXZWJCYXNlUGx1Z2luUGFja2FnZSBkZWFsbG9jXSkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2Uu
bToKKyAgICAgICAgKC1bV2ViQmFzZVBsdWdpblBhY2thZ2UgcExpc3RGb3JQYXRoOmNyZWF0ZUZp
bGU6XSk6IElmIHdlIGxvYWRlZCB0aGUgcGFja2FnZQorICAgICAgICBpbiBvcmRlciB0byBjYWxs
IEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKCksIHVubG9hZCBpdCBiZWZvcmUK
KyAgICAgICAgcmV0dXJuaW5nLgorCiAyMDA2LTA3LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1v
dGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIGFuZCBEYXJpbi4KSW5k
ZXg6IFdlYktpdC9QbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubQkocmV2aXNpb24gMTU2MDIpCisr
KyBXZWJLaXQvUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjcsOCArMTY3LDE1IEBACiAKIC0gKE5TRGljdGlvbmFyeSAqKXBMaXN0Rm9yUGF0aDooTlNT
dHJpbmcgKilwTGlzdFBhdGggY3JlYXRlRmlsZTooQk9PTCljcmVhdGVGaWxlCiB7Ci0gICAgaWYg
KGNyZWF0ZUZpbGUgJiYgW3NlbGYgbG9hZF0gJiYgQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJl
ZmVyZW5jZXMpCi0gICAgICAgIEJQX0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKCk7
CisgICAgaWYgKGNyZWF0ZUZpbGUpIHsKKyAgICAgICAgQk9PTCB3YXNMb2FkZWQgPSBbc2VsZiBp
c0xvYWRlZF07CisgICAgICAgIGlmIChbc2VsZiBsb2FkXSkgeworICAgICAgICAgICAgaWYgKEJQ
X0NyZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKQorICAgICAgICAgICAgICAgIEJQX0Ny
ZWF0ZVBsdWdpbk1JTUVUeXBlc1ByZWZlcmVuY2VzKCk7CisgICAgICAgICAgICBpZiAoIXdhc0xv
YWRlZCkKKyAgICAgICAgICAgICAgICBbc2VsZiB1bmxvYWRdOworICAgICAgICB9CisgICAgfQog
ICAgIAogICAgIE5TRGljdGlvbmFyeSAqcExpc3QgPSBuaWw7CiAgICAgTlNEYXRhICpkYXRhID0g
W05TRGF0YSBkYXRhV2l0aENvbnRlbnRzT2ZGaWxlOnBMaXN0UGF0aF07Cg==
</data>
<flag name="review"
          id="2944"
          type_id="1"
          status="-"
          setter="timo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9660</attachid>
            <date>2006-07-24 16:20:54 -0700</date>
            <delta_ts>2006-08-15 16:10:15 -0700</delta_ts>
            <desc>&amp;Unload those ;throw-away&quot; packages</desc>
            <filename>8980_r2.patch</filename>
            <type>text/plain</type>
            <size>1790</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwko
cmV2aXNpb24gMTU2MTIpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMDYtMDctMjUgIE1pdHogUGV0dGVsICA8b3BlbmRhcndpbi5vcmdAbWl0
enBldHRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLSBmaXggaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD04OTgwCisgICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogIWlzTG9hZGVkIChXZWJLaXQvV2Vi
S2l0L1BsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UubToyMjggLVtXZWJCYXNlUGx1Z2luUGFj
a2FnZSBkZWFsbG9jXSkKKworICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UubToK
KyAgICAgICAgKC1bV2ViUGx1Z2luRGF0YWJhc2UgcmVmcmVzaF0pOiBVbmxvYWQgYW55IHBsdWdp
biBwYWNrYWdlcyB0aGF0IG1heSBoYXZlIGJlZW4KKyAgICAgICAgbG9hZGVkIGR1cmluZyB0aGVp
ciBpbml0aWFsaXphdGlvbiBidXQgYXJlIG5vdCBnb2luZyB0byBiZSBhZGRlZCB0byB0aGUKKyAg
ICAgICAgZGF0YWJhc2UsIHNpbmNlIGl0IGFscmVhZHkgY29udGFpbnMgdGhlIHNhbWUgcGx1Z2lu
cy4KKwogMjAwNi0wNy0yNCAgQW5kZXJzIENhcmxzc29uICA8YWNhcmxzc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gTy4KSW5kZXg6IFdlYktpdC9QbHVnaW5zL1dlYlBs
dWdpbkRhdGFiYXNlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L1BsdWdpbnMvV2ViUGx1Z2luRGF0
YWJhc2UubQkocmV2aXNpb24gMTU2MDIpCisrKyBXZWJLaXQvUGx1Z2lucy9XZWJQbHVnaW5EYXRh
YmFzZS5tCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDEzIEBAIHN0YXRpYyBOU0FycmF5
ICphZGRpdGlvbmFsV2ViUGx1Z0luUGF0aHMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgLy8gQSBuZXcgcGx1Z2luIHBhY2thZ2UgbWF5IGhhdmUgYmVlbiBsb2Fk
ZWQgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiBhYm92ZS4gSWYgd2UgYXJlIG5vdCBnb2luZyB0
byBhZGQgaXQgdG8KKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIChiZWNhdXNlIHRoZSBkYXRhYmFz
ZSBhbHJlYWR5IGNvbnRhaW5zIGFuIGlkZW50aWNhbCBwYWNrYWdlKSwgd2UgbmVlZCB0byB1bmxv
YWQgaXQuCisgICAgICAgIE5TTXV0YWJsZVNldCAqcGx1Z2luc0FscmVhZHlJbkRhdGFiYXNlID0g
W25ld1BsdWdpbnMgbXV0YWJsZUNvcHldOworICAgICAgICBbcGx1Z2luc0FscmVhZHlJbkRhdGFi
YXNlIGludGVyc2VjdFNldDpwbHVnaW5zXTsKKyAgICAgICAgW3BsdWdpbnNBbHJlYWR5SW5EYXRh
YmFzZSBtYWtlT2JqZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IodW5sb2FkKV07CisgICAg
ICAgIFtwbHVnaW5zQWxyZWFkeUluRGF0YWJhc2UgcmVsZWFzZV07CisKICAgICAgICAgTlNNdXRh
YmxlU2V0ICpwbHVnaW5zVG9VbmxvYWQgPSBbcGx1Z2lucyBtdXRhYmxlQ29weV07CiAgICAgICAg
IFtwbHVnaW5zVG9VbmxvYWQgbWludXNTZXQ6bmV3UGx1Z2luc107CiAgICAgICAgIFtuZXdQbHVn
aW5zIG1pbnVzU2V0OnBsdWdpbnNdOwo=
</data>
<flag name="review"
          id="2945"
          type_id="1"
          status="-"
          setter="timo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10047</attachid>
            <date>2006-08-15 16:10:15 -0700</date>
            <delta_ts>2006-08-15 16:25:23 -0700</delta_ts>
            <desc>Huge scary patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28936</size>
            <attacher name="Tim Omernick">timo</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE1ODgw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMDYtMDgt
MTUgIFRpbSBPbWVybmljayAgPHRpbW9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9XZWJQbHVnaW5EYXRhYmFzZS5o
OgorICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luRGF0YWJhc2UubToKKyAgICAgICAgKCtbV2Vi
UGx1Z2luRGF0YWJhc2UgaW5zdGFsbGVkUGx1Z2luc10pOgorCU9ic2VydmUgTlNBcHBsaWNhdGlv
bldpbGxUZXJtaW5hdGVOb3RpZmljYXRpb24gc28gd2UgY2FuIHVubG9hZCBwbHVnLWlucyBvbiBx
dWl0LgorICAgICAgICAoLVtXZWJQbHVnaW5EYXRhYmFzZSBwbHVnaW5zXSk6CisJJ3BsdWdpbnMn
IGlzIG5vdyBhIGRpY3Rpb25hcnkuCisgICAgICAgICgtW1dlYlBsdWdpbkRhdGFiYXNlIGNsb3Nl
XSk6CisJQ2FsbCBuZXcgLV9yZW1vdmVQbHVnaW46IG1ldGhvZC4KKyAgICAgICAgKC1bV2ViUGx1
Z2luRGF0YWJhc2UgcmVmcmVzaF0pOgorCU1vdmVkIHBhcnRzIG9mIHRoaXMgbWV0aG9kIG91dCBp
bnRvIG90aGVyIG1ldGhvZHM6IC1fYWRkUGx1Z2luOiwgLV9yZW1vdmVQbHVnaW46LCBhbmQgLV9z
Y2FuRm9yTmV3UGx1Z2lucy4KKyAgICAgICAgKC1bV2ViUGx1Z2luRGF0YWJhc2UgX3BsdWdJblBh
dGhzXSk6CisJTm8gY2hhbmdlczsganVzdCBtb3ZlZCBpbiBmaWxlLgorICAgICAgICAoLVtXZWJQ
bHVnaW5EYXRhYmFzZSBfYWRkUGx1Z2luOl0pOgorCU5ldyBtZXRob2QuICBSZWZhY3RvcmVkIGZy
b20gLXJlZnJlc2guICBBZGRzIGEgcGx1Zy1pbiB0byB0aGUgZGF0YWJhc2UuCisgICAgICAgICgt
W1dlYlBsdWdpbkRhdGFiYXNlIF9yZW1vdmVQbHVnaW46XSk6CisJTmV3IG1ldGhvZC4gIFJlZmFj
dG9yZWQgZnJvbSAtcmVmcmVzaC4gIFJlbW92ZSBhIHBsdWctaW4gZnJvbSB0aGUgZGF0YWJhc2Uu
CisgICAgICAgICgtW1dlYlBsdWdpbkRhdGFiYXNlIF9zY2FuRm9yTmV3UGx1Z2luc10pOgorCU5l
dyBtZXRob2QuICBSZWZhY3RvcmVkIGZyb20gLXJlZnJlc2guICBSZXR1cm5zIHRoZSBsaXN0IG9m
IHBsdWctaW4gcGFja2FnZXMgb24gZGlzay4KKyAgICAgICAgKC1bV2ViUGx1Z2luRGF0YWJhc2Ug
X2FwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZV0pOgorCU5ldyBtZXRob2QuICBDYWxsZWQgd2hlbiB0
aGUgYXBwbGljYXRpb24gdGVybWluYXRlcy4gIENsb3NlcyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBz
byB0aGF0IGFsbCBwbHVnLWlucyBhcmUKKwlyZW1vdmVkIGZyb20gdGhlIERCIChhbmQgdW5sb2Fk
ZWQgaWYgbmVjZXNzYXJ5KS4KKworICAgICAgICAqIFBsdWdpbnMvV2ViQmFzZVBsdWdpblBhY2th
Z2UuaDoKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdlLm06CisgICAgICAg
ICgtW1dlYkJhc2VQbHVnaW5QYWNrYWdlIGluaXRXaXRoUGF0aDpdKToKKwlUcnkgdG8gY3JlYXRl
IHRoZSBOU0J1bmRsZSBmaXJzdCwgc28gaWYgdGhlIGZpbGUgaXMgbm90IGEgdmFsaWQgYnVuZGxl
IHdlIGJhaWwgb3V0IGVhcmx5LiAgVGhpcworCWF2b2lkcyBzb21lIHN0YXQoKXMgYW5kIGFsbG9j
YXRpb25zIGR1cmluZyB0aGUgcGx1Zy1pbiByZWZyZXNoIHByb2Nlc3MuCisgICAgICAgICgtW1dl
YkJhc2VQbHVnaW5QYWNrYWdlIGlzTG9hZGVkXSk6CisJUmVtb3ZlZC4KKyAgICAgICAgKC1bV2Vi
QmFzZVBsdWdpblBhY2thZ2UgbG9hZF0pOgorCUJhc2UgY2xhc3MgZm9yIHBsdWctaW4gcGFja2Fn
ZXMgbm93IGFsd2F5cyBsb2FkcyAic3VjY2Vzc2Z1bGx5Ii4KKyAgICAgICAgKC1bV2ViQmFzZVBs
dWdpblBhY2thZ2UgZGVhbGxvY10pOgorCVJlbW92ZWQgdGhpcyBhc3NlcnRpb24uICBUaGUgYmFz
ZSBwbHVnLWluIHBhY2thZ2UgY2xhc3MgaGFzIG5vIGNvbmNlcHQgb2YKKwkidW5sb2FkaW5nIi4K
KyAgICAgICAgKC1bV2ViQmFzZVBsdWdpblBhY2thZ2UgZmluYWxpemVdKToKKwlkaXR0by4KKyAg
ICAgICAgKC1bV2ViQmFzZVBsdWdpblBhY2thZ2Ugd2FzUmVtb3ZlZEZyb21QbHVnaW5EYXRhYmFz
ZTpdKToKKwlNb3ZlZCBjb2RlIHRvIHVubG9hZCBwbHVnLWluIHBhY2thZ2UgdG8gV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlLiAgTm90IGFsbCBwbHVnLWluCisJcGFja2FnZXMgY2FuIGJlICJ1bmxv
YWRlZCIuCisKKyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oOgor
ICAgICAgICAqIFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm06CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBfdW5sb2FkV2l0aFNodXRkb3duOl0pOgorCUNvbWJp
bmVkIG9sZCAtdW5sb2FkIGFuZCAtdW5sb2FkV2l0aG91dFNodXRkb3duIG1ldGhvZHMgaW50byB0
aGlzIG5ldyBvbmUuCisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBpbml0V2l0
aFBhdGg6XSk6CisJQ2FsbCBuZXcgdW5sb2FkIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5QYWNrYWdlIGxvYWRdKToKKwlkaXR0bworICAgICAgICAoLVtXZWJOZXRzY2FwZVBs
dWdpblBhY2thZ2Ugd2FzUmVtb3ZlZEZyb21QbHVnaW5EYXRhYmFzZTpdKToKKwlkaXR0bworICAg
ICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2Ugb3Blbl0pOgorCU5ldyBtZXRob2QuICBD
YWxsZWQgd2hlbiBhIHBsdWctaW4gaW5zdGFuY2Ugc3RhcnRzIHJ1bm5pbmcuCisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSBjbG9zZV0pOgorCU5ldyBtZXRob2QuICBDYWxsZWQg
d2hlbiBhIHBsdWctaW4gaW5zdGFuY2Ugc3RvcHMgcnVubmluZy4gIFdoZW4gYWxsIHBsdWctaW4g
aW5zdGFuY2VzCisJY2xvc2UgdGhlIHBsdWctaW4gcGFja2FnZSwgYW5kIHRoZSBwbHVnLWluIHBh
Y2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSwgdGhlIHBsdWctaW4KKwlpcyB1bmxv
YWRlZC4KKworICAgICAgICAqIFBsdWdpbnMvV2ViUGx1Z2luUGFja2FnZS5tOgorICAgICAgICAo
LVtXZWJQbHVnaW5QYWNrYWdlIGluaXRXaXRoUGF0aDpdKToKKyAgICAgICAgKC1bV2ViUGx1Z2lu
UGFja2FnZSBsb2FkXSk6CisJTWFkZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50IGJ5IGNoZWNr
aW5nIGlmIHRoZSBidW5kbGUgaXMgYWxyZWFkeSBsb2FkZWQuCisgICAgICAgICgtW1dlYkJhc2VQ
bHVnaW5QYWNrYWdlIHVubG9hZF0pOgorCVJlbW92ZWQuCisgICAgICAgICgtW1dlYkJhc2VQbHVn
aW5QYWNrYWdlIGlzTG9hZGVkXSk6CisJUmVtb3ZlZC4KKworICAgICAgICAqIFBsdWdpbnMvV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldy5tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3IHN0YXJ0XSk6CisJT3BlbiB0aGUgcGx1Zy1pbiBwYWNrYWdlIHNvIGl0IHJlbWFpbnMg
bG9hZGVkIHdoaWxlIHRoaXMgaW5zdGFuY2UgdXNlcyBpdC4KKwkoLVtXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3IHN0b3BdKToKKwlDbG9zZSB0aGUgcGx1Zy1pbiBwYWNrYWdlIHdoZW4gdGhlIHBs
dWctaW4gaW5zdGFuY2UgaXMgc3RvcHBlZC4KKwkKKyAgICAgICAgKiBQbHVnaW5zL1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblN0cmVhbS5tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2NhcGVQbHVnaW5T
dHJlYW0gc3RhcnRTdHJlYW1SZXNwb25zZVVSTDpleHBlY3RlZENvbnRlbnRMZW5ndGg6bGFzdE1v
ZGlmaWVkRGF0ZTpNSU1FVHlwZTpdKToKKwlUaGlzIGNoZWNrIGlzIG5vdCBuZWNlc3NhcnkuICBO
ZXRzY2FwZSBwbHVnLWluIHBhY2thZ2VzIGFyZSBuZXZlciB1bmxvYWRlZCB1bnRpbCBhbGwgdGhl
aXIgaW5zdGFuY2VzIGhhdmUKKwliZWVuIHN0b3BwZWQsIGFuZCBhIE5ldHNjYXBlIHBsdWctaW4g
aW5zdGFuY2Ugd2lsbCBzdG9wIGl0cyBzdHJlYW1zIHdoZW4gaXQgaXMgc3RvcHBlZC4KKyAgICAg
ICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIF9kZXN0cm95U3RyZWFtXSk6CisJZGl0
dG8KKyAgICAgICAgKC1bV2ViQmFzZU5ldHNjYXBlUGx1Z2luU3RyZWFtIGZpbmlzaGVkTG9hZGlu
Z1dpdGhEYXRhOl0pOgorCWRpdHRvCisgICAgICAgICgtW1dlYkJhc2VOZXRzY2FwZVBsdWdpblN0
cmVhbSBfZGVsaXZlckRhdGFdKToKKwlkaXR0bworCiAyMDA2LTA4LTE1ICBNYXJrIFJvd2UgIDxv
cGVuZGFyd2luLm9yZ0BiZGFzaC5uZXQubno+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltIEgu
CkluZGV4OiBQbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGx1Z2lu
cy9XZWJQbHVnaW5EYXRhYmFzZS5oCShyZXZpc2lvbiAxNTg4MCkKKysrIFBsdWdpbnMvV2ViUGx1
Z2luRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBAaW50ZXJm
YWNlIFdlYlBsdWdpbkRhdGFiYXNlIDogTlNPYmplY3QKIHsKLSAgICBOU011dGFibGVTZXQgKnBs
dWdpbnM7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcGx1Z2luczsKICAgICBOU011dGFibGVT
ZXQgKnJlZ2lzdGVyZWRNSU1FVHlwZXM7CiAgICAgTlNBcnJheSAqcGx1Z0luUGF0aHM7CiB9Cklu
ZGV4OiBQbHVnaW5zL1dlYlBsdWdpbkRhdGFiYXNlLm0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGx1Z2lucy9X
ZWJQbHVnaW5EYXRhYmFzZS5tCShyZXZpc2lvbiAxNTg4MCkKKysrIFBsdWdpbnMvV2ViUGx1Z2lu
RGF0YWJhc2UubQkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTEgQEAKIAogQGludGVyZmFj
ZSBXZWJQbHVnaW5EYXRhYmFzZSAoSW50ZXJuYWwpCiArIChOU0FycmF5ICopX2RlZmF1bHRQbHVn
SW5QYXRoczsKKy0gKE5TQXJyYXkgKilfcGx1Z0luUGF0aHM7CistICh2b2lkKV9hZGRQbHVnaW46
KFdlYkJhc2VQbHVnaW5QYWNrYWdlICopcGx1Z2luOworLSAodm9pZClfcmVtb3ZlUGx1Z2luOihX
ZWJCYXNlUGx1Z2luUGFja2FnZSAqKXBsdWdpbjsKKy0gKE5TTXV0YWJsZVNldCAqKV9zY2FuRm9y
TmV3UGx1Z2luczsKKy0gKHZvaWQpX2FwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZTsKIEBlbmQKIAog
QGltcGxlbWVudGF0aW9uIFdlYlBsdWdpbkRhdGFiYXNlCkBAIC01NSw2ICs2MCwxMiBAQAogICAg
ICAgICBkYXRhYmFzZSA9IFtbV2ViUGx1Z2luRGF0YWJhc2UgYWxsb2NdIGluaXRdOwogICAgICAg
ICBbZGF0YWJhc2Ugc2V0UGx1Z0luUGF0aHM6W3NlbGYgX2RlZmF1bHRQbHVnSW5QYXRoc11dOwog
ICAgICAgICBbZGF0YWJhc2UgcmVmcmVzaF07CisgICAgICAgIAorICAgICAgICAvLyBDbGVhciB0
aGUgZ2xvYmFsIHBsdWctaW4gZGF0YWJhc2Ugb24gYXBwIGV4aXQKKyAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpkYXRhYmFzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxl
Y3RvcihfYXBwbGljYXRpb25XaWxsVGVybWluYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOk5TQXBwbGljYXRpb25XaWxsVGVybWlu
YXRlTm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3Q6TlNBcHBdOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZGF0YWJh
c2U7CkBAIC0xMjgsNyArMTM5LDcgQEAKIAogLSAoTlNBcnJheSAqKXBsdWdpbnMKIHsKLSAgICBy
ZXR1cm4gW3BsdWdpbnMgYWxsT2JqZWN0c107CisgICAgcmV0dXJuIFtwbHVnaW5zIGFsbFZhbHVl
c107CiB9CiAKIHN0YXRpYyBOU0FycmF5ICphZGRpdGlvbmFsV2ViUGx1Z0luUGF0aHM7CkBAIC0x
NTksNyArMTcwLDEwIEBACiAKIC0gKHZvaWQpY2xvc2UKIHsKLSAgICBbcGx1Z2lucyBtYWtlT2Jq
ZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iod2FzUmVtb3ZlZEZyb21QbHVnaW5EYXRhYmFz
ZTopIHdpdGhPYmplY3Q6c2VsZl07CisgICAgTlNFbnVtZXJhdG9yICpwbHVnaW5FbnVtZXJhdG9y
ID0gW1tzZWxmIHBsdWdpbnNdIG9iamVjdEVudW1lcmF0b3JdOworICAgIFdlYkJhc2VQbHVnaW5Q
YWNrYWdlICpwbHVnaW47CisgICAgd2hpbGUgKChwbHVnaW4gPSBbcGx1Z2luRW51bWVyYXRvciBu
ZXh0T2JqZWN0XSkgIT0gbmlsKQorICAgICAgICBbc2VsZiBfcmVtb3ZlUGx1Z2luOnBsdWdpbl07
CiAgICAgW3BsdWdpbnMgcmVsZWFzZV07CiAgICAgcGx1Z2lucyA9IG5pbDsKIH0KQEAgLTE4Mywx
MDAgKzE5Nyw1OSBAQAogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KIAotLSAoTlNBcnJheSAqKV9w
bHVnSW5QYXRocwotewotICAgIGlmIChzZWxmID09IGRhdGFiYXNlICYmIGFkZGl0aW9uYWxXZWJQ
bHVnSW5QYXRocykgewotICAgICAgICAvLyBBZGQgYWRkaXRpb25hbFdlYlBsdWdJblBhdGhzIHRv
IHRoZSBnbG9iYWwgV2ViUGx1Z2luRGF0YWJhc2UuICBXZSBkbyB0aGlzIGhlcmUgZm9yCi0gICAg
ICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIHRo
ZSArc2V0QWRkaXRpb25hbFdlYlBsdWdJblBhdGhzOiBTUEksCi0gICAgICAgIC8vIHdoaWNoIHNp
bXBseSBzYXZlZCBhIGNvcHkgb2YgdGhlIGFkZGl0aW9uYWwgcGF0aHMgYW5kIGRpZCBub3QgY2F1
c2UgdGhlIHBsdWdpbiBEQiB0byAKLSAgICAgICAgLy8gcmVmcmVzaC4gIFNlZSBSYWRhcnMgNDYw
ODQ4NyBhbmQgNDYwOTA0Ny4KLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm1vZGlmaWVkUGx1Z0lu
UGF0aHMgPSBbW3BsdWdJblBhdGhzIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Ci0gICAgICAg
IFttb2RpZmllZFBsdWdJblBhdGhzIGFkZE9iamVjdHNGcm9tQXJyYXk6YWRkaXRpb25hbFdlYlBs
dWdJblBhdGhzXTsKLSAgICAgICAgcmV0dXJuIG1vZGlmaWVkUGx1Z0luUGF0aHM7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHJldHVybiBwbHVnSW5QYXRoczsKLX0KLQogLSAodm9pZClyZWZyZXNoCiB7
Ci0gICAgTlNFbnVtZXJhdG9yICpkaXJlY3RvcnlFbnVtZXJhdG9yID0gW1tzZWxmIF9wbHVnSW5Q
YXRoc10gb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNNdXRhYmxlU2V0ICp1bmlxdWVGaWxlbmFt
ZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdF07Ci0gICAgTlNGaWxlTWFuYWdlciAqZmls
ZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Ci0gICAgTlNNdXRhYmxl
U2V0ICpuZXdQbHVnaW5zID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRdOwotICAgIE5TU3Ry
aW5nICpwbHVnaW5EaXJlY3Rvcnk7CisgICAgLy8gVGhpcyBtZXRob2QgZG9lcyBhIGJpdCBvZiBh
dXRvcmVsZWFzaW5nLCBzbyBjcmVhdGUgYW4gYXV0b3JlbGVhc2UgcG9vbCB0byBlbnN1cmUgdGhh
dCBjYWxsaW5nCisgICAgLy8gLXJlZnJlc2ggbXVsdGlwbGUgdGltZXMgZG9lcyBub3QgYmxvYXQg
dGhlIGRlZmF1bHQgcG9vbC4KKyAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRv
cmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwogICAgIAotICAgIC8vIENyZWF0ZSBhIG5ldyBzZXQg
b2YgcGx1Zy1pbnMuCi0gICAgd2hpbGUgKChwbHVnaW5EaXJlY3RvcnkgPSBbZGlyZWN0b3J5RW51
bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIE5TRW51bWVyYXRvciAqZmls
ZW5hbWVFbnVtZXJhdG9yID0gW1tmaWxlTWFuYWdlciBkaXJlY3RvcnlDb250ZW50c0F0UGF0aDpw
bHVnaW5EaXJlY3RvcnldIG9iamVjdEVudW1lcmF0b3JdOwotICAgICAgICBOU1N0cmluZyAqZmls
ZW5hbWU7Ci0gICAgICAgIHdoaWxlICgoZmlsZW5hbWUgPSBbZmlsZW5hbWVFbnVtZXJhdG9yIG5l
eHRPYmplY3RdKSAhPSBuaWwpIHsKLSAgICAgICAgICAgIGlmICghW3VuaXF1ZUZpbGVuYW1lcyBj
b250YWluc09iamVjdDpmaWxlbmFtZV0pIHsKLSAgICAgICAgICAgICAgICBbdW5pcXVlRmlsZW5h
bWVzIGFkZE9iamVjdDpmaWxlbmFtZV07Ci0gICAgICAgICAgICAgICAgTlNTdHJpbmcgKnBsdWdp
blBhdGggPSBbcGx1Z2luRGlyZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpm
aWxlbmFtZV07Ci0gICAgICAgICAgICAgICAgV2ViQmFzZVBsdWdpblBhY2thZ2UgKnBsdWdpblBh
Y2thZ2UgPSBbV2ViQmFzZVBsdWdpblBhY2thZ2UgcGx1Z2luV2l0aFBhdGg6cGx1Z2luUGF0aF07
Ci0gICAgICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgW25ld1BsdWdpbnMgYWRkT2JqZWN0OnBsdWdpblBhY2thZ2VdOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIC8vIENyZWF0ZSBtYXAgZnJvbSBwbHVn
LWluIHBhdGggdG8gV2ViQmFzZVBsdWdpblBhY2thZ2UKKyAgICBpZiAoIXBsdWdpbnMpCisgICAg
ICAgIHBsdWdpbnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoQ2FwYWNp
dHk6MTJdOworCisgICAgLy8gRmluZCBhbGwgcGx1Zy1pbnMgb24gZGlzaworICAgIE5TTXV0YWJs
ZVNldCAqbmV3UGx1Z2lucyA9IFtzZWxmIF9zY2FuRm9yTmV3UGx1Z2luc107CisKKyAgICAvLyBG
aW5kIHBsdWctaW5zIHRvIHJlbW92ZSBmcm9tIGRhdGFiYXNlIChpLmUuLCBwbHVnLWlucyB0aGF0
IG5vIGxvbmdlciBleGlzdCBvbiBkaXNrKQorICAgIE5TTXV0YWJsZVNldCAqcGx1Z2luc1RvUmVt
b3ZlID0gW05TTXV0YWJsZVNldCBzZXRdOworICAgIE5TRW51bWVyYXRvciAqcGx1Z2luRW51bWVy
YXRvciA9IFtwbHVnaW5zIG9iamVjdEVudW1lcmF0b3JdOworICAgIFdlYkJhc2VQbHVnaW5QYWNr
YWdlICpwbHVnaW47CisgICAgd2hpbGUgKChwbHVnaW4gPSBbcGx1Z2luRW51bWVyYXRvciBuZXh0
T2JqZWN0XSkgIT0gbmlsKSB7CisgICAgICAgIC8vIEFueSBwbHVnLWlucyB0aGF0IHdlcmUgcmVt
b3ZlZCBmcm9tIGRpc2sgc2luY2UgdGhlIGxhc3QgcmVmcmVzaCBzaG91bGQgYmUgcmVtb3ZlZCBm
cm9tCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgaWYgKCFbbmV3UGx1Z2lucyBj
b250YWluc09iamVjdDpwbHVnaW5dKQorICAgICAgICAgICAgW3BsdWdpbnNUb1JlbW92ZSBhZGRP
YmplY3Q6cGx1Z2luXTsKKyAgICAgICAgICAgIAorICAgICAgICAvLyBSZW1vdmUgZXZlcnkgbWVt
YmVyIG9mICdwbHVnaW5zJyBmcm9tICduZXdQbHVnaW5zJy4gIEFmdGVyIHRoaXMgbG9vcCBleGl0
cywgJ25ld1BsdWdpbnMnCisgICAgICAgIC8vIHdpbGwgYmUgdGhlIHNldCBvZiBuZXcgcGx1Zy1p
bnMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGRhdGFiYXNlLgorICAgICAgICBbbmV3UGx1
Z2lucyByZW1vdmVPYmplY3Q6cGx1Z2luXTsKICAgICB9Ci0gICAgCi0gICAgW3VuaXF1ZUZpbGVu
YW1lcyByZWxlYXNlXTsKLSAgICAKLSAgICAvLyAgUmVtb3ZlIGFsbCB1bmluc3RhbGxlZCBwbHVn
LWlucyBhbmQgYWRkIHRoZSBuZXcgcGx1Zy1pbnMuCi0gICAgaWYgKHBsdWdpbnMpIHsKLSAgICAg
ICAgLy8gVW5yZWdpc3RlciBwbHVnLWluIHZpZXdzIGFuZCByZXByZXNlbnRhdGlvbnMKLSAgICAg
ICAgTlNFbnVtZXJhdG9yICpwbHVnaW5FbnVtZXJhdG9yID0gW3BsdWdpbnMgb2JqZWN0RW51bWVy
YXRvcl07Ci0gICAgICAgIFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlOwotICAg
ICAgICB3aGlsZSAoKHBsdWdpblBhY2thZ2UgPSBbcGx1Z2luRW51bWVyYXRvciBuZXh0T2JqZWN0
XSkpIHsKLSAgICAgICAgICAgIE5TRW51bWVyYXRvciAqTUlNRVR5cGVFbnVtZXJhdG9yID0gW3Bs
dWdpblBhY2thZ2UgTUlNRVR5cGVFbnVtZXJhdG9yXTsKLSAgICAgICAgICAgIE5TU3RyaW5nICpN
SU1FVHlwZTsKLSAgICAgICAgICAgIHdoaWxlICgoTUlNRVR5cGUgPSBbTUlNRVR5cGVFbnVtZXJh
dG9yIG5leHRPYmplY3RdKSkgewotICAgICAgICAgICAgICAgIGlmIChbcmVnaXN0ZXJlZE1JTUVU
eXBlcyBjb250YWluc09iamVjdDpNSU1FVHlwZV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNlbGYgPT0gZGF0YWJhc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBbV2ViVmlldyBfdW5y
ZWdpc3RlclZpZXdDbGFzc0FuZFJlcHJlc2VudGF0aW9uQ2xhc3NGb3JNSU1FVHlwZTpNSU1FVHlw
ZV07Ci0gICAgICAgICAgICAgICAgICAgIFtyZWdpc3RlcmVkTUlNRVR5cGVzIHJlbW92ZU9iamVj
dDpNSU1FVHlwZV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBOU011dGFibGVTZXQgKnBsdWdpbnNUb1VubG9hZCA9IFtwbHVn
aW5zIG11dGFibGVDb3B5XTsKLSAgICAgICAgW3BsdWdpbnNUb1VubG9hZCBtaW51c1NldDpuZXdQ
bHVnaW5zXTsKLSAgICAgICAgW25ld1BsdWdpbnMgbWludXNTZXQ6cGx1Z2luc107CisKICNpZiAh
TE9HX0RJU0FCTEVECi0gICAgICAgIGlmIChbbmV3UGx1Z2lucyBjb3VudF0gPiAwKSB7Ci0gICAg
ICAgICAgICBMT0coUGx1Z2lucywgIk5ldyBwbHVnaW5zOlxuJUAiLCBuZXdQbHVnaW5zKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoW3BsdWdpbnNUb1VubG9hZCBjb3VudF0gPiAwKSB7Ci0gICAg
ICAgICAgICBMT0coUGx1Z2lucywgIlJlbW92ZWQgcGx1Z2luczpcbiVAIiwgcGx1Z2luc1RvVW5s
b2FkKTsKLSAgICAgICAgfQorICAgIGlmIChbbmV3UGx1Z2lucyBjb3VudF0gPiAwKQorICAgICAg
ICBMT0coUGx1Z2lucywgIk5ldyBwbHVnaW5zOlxuJUAiLCBuZXdQbHVnaW5zKTsKKyAgICBpZiAo
W3BsdWdpbnNUb1JlbW92ZSBjb3VudF0gPiAwKQorICAgICAgICBMT0coUGx1Z2lucywgIlJlbW92
ZWQgcGx1Z2luczpcbiVAIiwgcGx1Z2luc1RvUmVtb3ZlKTsKICNlbmRpZgotICAgICAgICAvLyBV
bmxvYWQgcGx1Z2lucwotICAgICAgICBbcGx1Z2luc1RvVW5sb2FkIG1ha2VPYmplY3RzUGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3Rvcih3YXNSZW1vdmVkRnJvbVBsdWdpbkRhdGFiYXNlOikgd2l0aE9i
amVjdDpzZWxmXTsKLSAgICAgICAgW3BsdWdpbnMgbWludXNTZXQ6cGx1Z2luc1RvVW5sb2FkXTsK
LSAgICAgICAgW3BsdWdpbnNUb1VubG9hZCByZWxlYXNlXTsKIAotICAgICAgICAvLyBBZGQgbmV3
IHBsdWdpbnMKLSAgICAgICAgW3BsdWdpbnMgdW5pb25TZXQ6bmV3UGx1Z2luc107Ci0gICAgICAg
IFtuZXdQbHVnaW5zIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih3YXNBZGRl
ZFRvUGx1Z2luRGF0YWJhc2U6KSB3aXRoT2JqZWN0OnNlbGZdOwotICAgICAgICBbbmV3UGx1Z2lu
cyByZWxlYXNlXTsKLSAgICB9IGVsc2UgewotICAgICAgICBMT0coUGx1Z2lucywgIlBsdWdpbiBk
YXRhYmFzZSBpbml0aWFsaXphdGlvbjpcbiVAIiwgbmV3UGx1Z2lucyk7Ci0gICAgICAgIHBsdWdp
bnMgPSBuZXdQbHVnaW5zOwotICAgICAgICBbbmV3UGx1Z2lucyBtYWtlT2JqZWN0c1BlcmZvcm1T
ZWxlY3RvcjpAc2VsZWN0b3Iod2FzQWRkZWRUb1BsdWdpbkRhdGFiYXNlOikgd2l0aE9iamVjdDpz
ZWxmXTsKLSAgICB9CisgICAgLy8gUmVtb3ZlIHBsdWdpbnMgZnJvbSBkYXRhYmFzZQorICAgIHBs
dWdpbkVudW1lcmF0b3IgPSBbcGx1Z2luc1RvUmVtb3ZlIG9iamVjdEVudW1lcmF0b3JdOworICAg
IHdoaWxlICgocGx1Z2luID0gW3BsdWdpbkVudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkg
CisgICAgICAgIFtzZWxmIF9yZW1vdmVQbHVnaW46cGx1Z2luXTsKICAgICAKKyAgICAvLyBBZGQg
bmV3IHBsdWdpbnMgdG8gZGF0YWJhc2UKKyAgICBwbHVnaW5FbnVtZXJhdG9yID0gW25ld1BsdWdp
bnMgb2JqZWN0RW51bWVyYXRvcl07CisgICAgd2hpbGUgKChwbHVnaW4gPSBbcGx1Z2luRW51bWVy
YXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKQorICAgICAgICBbc2VsZiBfYWRkUGx1Z2luOnBsdWdp
bl07CisKICAgICAvLyBCdWlsZCBhIGxpc3Qgb2YgTUlNRSB0eXBlcy4KICAgICBOU011dGFibGVT
ZXQgKk1JTUVUeXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0XTsKLSAgICBOU0VudW1l
cmF0b3IgKnBsdWdpbkVudW1lcmF0b3IgPSBbcGx1Z2lucyBvYmplY3RFbnVtZXJhdG9yXTsKLSAg
ICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luOwotICAgIHdoaWxlICgocGx1Z2luID0gW3Bs
dWdpbkVudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgeworICAgIHBsdWdpbkVudW1lcmF0
b3IgPSBbcGx1Z2lucyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICB3aGlsZSAoKHBsdWdpbiA9IFtw
bHVnaW5FbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpCiAgICAgICAgIFtNSU1FVHlwZXMg
YWRkT2JqZWN0c0Zyb21BcnJheTpbW3BsdWdpbiBNSU1FVHlwZUVudW1lcmF0b3JdIGFsbE9iamVj
dHNdXTsKLSAgICB9CiAgICAgCiAgICAgLy8gUmVnaXN0ZXIgcGx1Zy1pbiB2aWV3cyBhbmQgcmVw
cmVzZW50YXRpb25zLgotICAgIE5TRW51bWVyYXRvciAqTUlNRUVudW1lcmF0b3IgPSBbW01JTUVU
eXBlcyBhbGxPYmplY3RzXSBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBbTUlNRVR5cGVzIHJlbGVh
c2VdOworICAgIE5TRW51bWVyYXRvciAqTUlNRUVudW1lcmF0b3IgPSBbTUlNRVR5cGVzIG9iamVj
dEVudW1lcmF0b3JdOwogICAgIE5TU3RyaW5nICpNSU1FVHlwZTsKICAgICB3aGlsZSAoKE1JTUVU
eXBlID0gW01JTUVFbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKICAgICAgICAgaWYg
KFtXZWJWaWV3IGNhblNob3dNSU1FVHlwZUFzSFRNTDpNSU1FVHlwZV0pCkBAIC0yOTQsNiArMjY3
LDkgQEAKICAgICAgICAgICAgIFtXZWJWaWV3IHJlZ2lzdGVyVmlld0NsYXNzOltXZWJIVE1MVmll
dyBjbGFzc10gcmVwcmVzZW50YXRpb25DbGFzczpbV2ViSFRNTFJlcHJlc2VudGF0aW9uIGNsYXNz
XSBmb3JNSU1FVHlwZTpNSU1FVHlwZV07CiAgICAgICAgIFtyZWdpc3RlcmVkTUlNRVR5cGVzIGFk
ZE9iamVjdDpNSU1FVHlwZV07CiAgICAgfQorICAgIFtNSU1FVHlwZXMgcmVsZWFzZV07CisgICAg
CisgICAgW3Bvb2wgcmVsZWFzZV07CiB9CiAKIC0gKEJPT0wpaXNNSU1FVHlwZVJlZ2lzdGVyZWQ6
KE5TU3RyaW5nICopTUlNRVR5cGUKQEAgLTMxOSw0ICsyOTUsOTEgQEAKICAgICAgICAgbmlsXTsK
IH0KIAorLSAoTlNBcnJheSAqKV9wbHVnSW5QYXRocworeworICAgIGlmIChzZWxmID09IGRhdGFi
YXNlICYmIGFkZGl0aW9uYWxXZWJQbHVnSW5QYXRocykgeworICAgICAgICAvLyBBZGQgYWRkaXRp
b25hbFdlYlBsdWdJblBhdGhzIHRvIHRoZSBnbG9iYWwgV2ViUGx1Z2luRGF0YWJhc2UuICBXZSBk
byB0aGlzIGhlcmUgZm9yCisgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBl
YXJsaWVyIHZlcnNpb25zIG9mIHRoZSArc2V0QWRkaXRpb25hbFdlYlBsdWdJblBhdGhzOiBTUEks
CisgICAgICAgIC8vIHdoaWNoIHNpbXBseSBzYXZlZCBhIGNvcHkgb2YgdGhlIGFkZGl0aW9uYWwg
cGF0aHMgYW5kIGRpZCBub3QgY2F1c2UgdGhlIHBsdWdpbiBEQiB0byAKKyAgICAgICAgLy8gcmVm
cmVzaC4gIFNlZSBSYWRhcnMgNDYwODQ4NyBhbmQgNDYwOTA0Ny4KKyAgICAgICAgTlNNdXRhYmxl
QXJyYXkgKm1vZGlmaWVkUGx1Z0luUGF0aHMgPSBbW3BsdWdJblBhdGhzIG11dGFibGVDb3B5XSBh
dXRvcmVsZWFzZV07CisgICAgICAgIFttb2RpZmllZFBsdWdJblBhdGhzIGFkZE9iamVjdHNGcm9t
QXJyYXk6YWRkaXRpb25hbFdlYlBsdWdJblBhdGhzXTsKKyAgICAgICAgcmV0dXJuIG1vZGlmaWVk
UGx1Z0luUGF0aHM7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBwbHVnSW5QYXRoczsKK30K
KworLSAodm9pZClfYWRkUGx1Z2luOihXZWJCYXNlUGx1Z2luUGFja2FnZSAqKXBsdWdpbgorewor
ICAgIEFTU0VSVChwbHVnaW4pOworICAgIE5TU3RyaW5nICpwbHVnaW5QYXRoID0gW3BsdWdpbiBw
YXRoXTsKKyAgICBBU1NFUlQocGx1Z2luUGF0aCk7CisgICAgW3BsdWdpbnMgc2V0T2JqZWN0OnBs
dWdpbiBmb3JLZXk6cGx1Z2luUGF0aF07CisgICAgW3BsdWdpbiB3YXNBZGRlZFRvUGx1Z2luRGF0
YWJhc2U6c2VsZl07Cit9CisKKy0gKHZvaWQpX3JlbW92ZVBsdWdpbjooV2ViQmFzZVBsdWdpblBh
Y2thZ2UgKilwbHVnaW4KK3sgICAgCisgICAgQVNTRVJUKHBsdWdpbik7CisKKyAgICAvLyBVbnJl
Z2lzdGVyIHBsdWctaW4ncyBNSU1FIHR5cGUgcmVnaXN0cmF0aW9ucworICAgIE5TRW51bWVyYXRv
ciAqTUlNRVR5cGVFbnVtZXJhdG9yID0gW3BsdWdpbiBNSU1FVHlwZUVudW1lcmF0b3JdOworICAg
IE5TU3RyaW5nICpNSU1FVHlwZTsKKyAgICB3aGlsZSAoKE1JTUVUeXBlID0gW01JTUVUeXBlRW51
bWVyYXRvciBuZXh0T2JqZWN0XSkpIHsKKyAgICAgICAgaWYgKFtyZWdpc3RlcmVkTUlNRVR5cGVz
IGNvbnRhaW5zT2JqZWN0Ok1JTUVUeXBlXSkgeworICAgICAgICAgICAgaWYgKHNlbGYgPT0gZGF0
YWJhc2UpCisgICAgICAgICAgICAgICAgW1dlYlZpZXcgX3VucmVnaXN0ZXJWaWV3Q2xhc3NBbmRS
ZXByZXNlbnRhdGlvbkNsYXNzRm9yTUlNRVR5cGU6TUlNRVR5cGVdOworICAgICAgICAgICAgW3Jl
Z2lzdGVyZWRNSU1FVHlwZXMgcmVtb3ZlT2JqZWN0Ok1JTUVUeXBlXTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFJlbW92ZSBwbHVnLWluIGZyb20gZGF0YWJhc2UKKyAgICBOU1N0cmluZyAq
cGx1Z2luUGF0aCA9IFtwbHVnaW4gcGF0aF07CisgICAgQVNTRVJUKHBsdWdpblBhdGgpOworICAg
IFtwbHVnaW4gcmV0YWluXTsKKyAgICBbcGx1Z2lucyByZW1vdmVPYmplY3RGb3JLZXk6cGx1Z2lu
UGF0aF07CisgICAgW3BsdWdpbiB3YXNSZW1vdmVkRnJvbVBsdWdpbkRhdGFiYXNlOnNlbGZdOwor
ICAgIFtwbHVnaW4gcmVsZWFzZV07Cit9CisKKy0gKE5TTXV0YWJsZVNldCAqKV9zY2FuRm9yTmV3
UGx1Z2lucworeworICAgIE5TTXV0YWJsZVNldCAqbmV3UGx1Z2lucyA9IFtbW05TTXV0YWJsZVNl
dCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIE5TRW51bWVyYXRvciAqZGlyZWN0b3J5
RW51bWVyYXRvciA9IFtbc2VsZiBfcGx1Z0luUGF0aHNdIG9iamVjdEVudW1lcmF0b3JdOworICAg
IE5TTXV0YWJsZVNldCAqdW5pcXVlRmlsZW5hbWVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGlu
aXRdOworICAgIE5TRmlsZU1hbmFnZXIgKmZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdOworICAgIE5TU3RyaW5nICpwbHVnaW5EaXJlY3Rvcnk7CisgICAgd2hpbGUg
KChwbHVnaW5EaXJlY3RvcnkgPSBbZGlyZWN0b3J5RW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0g
bmlsKSB7CisgICAgICAgIC8vIEdldCBjb250ZW50cyBvZiBlYWNoIHBsdWctaW4gZGlyZWN0b3J5
CisgICAgICAgIE5TRW51bWVyYXRvciAqZmlsZW5hbWVFbnVtZXJhdG9yID0gW1tmaWxlTWFuYWdl
ciBkaXJlY3RvcnlDb250ZW50c0F0UGF0aDpwbHVnaW5EaXJlY3RvcnldIG9iamVjdEVudW1lcmF0
b3JdOworICAgICAgICBOU1N0cmluZyAqZmlsZW5hbWU7CisgICAgICAgIHdoaWxlICgoZmlsZW5h
bWUgPSBbZmlsZW5hbWVFbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAg
ICAgIC8vIFVuaXF1ZSBwbHVnLWlucyBieSBmaWxlbmFtZQorICAgICAgICAgICAgaWYgKFt1bmlx
dWVGaWxlbmFtZXMgY29udGFpbnNPYmplY3Q6ZmlsZW5hbWVdKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgW3VuaXF1ZUZpbGVuYW1lcyBhZGRPYmplY3Q6ZmlsZW5hbWVd
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDcmVhdGUgYSBwbHVnLWluIHBhY2thZ2Ug
Zm9yIHRoaXMgcGF0aAorICAgICAgICAgICAgTlNTdHJpbmcgKnBsdWdpblBhdGggPSBbcGx1Z2lu
RGlyZWN0b3J5IHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpmaWxlbmFtZV07CisgICAg
ICAgICAgICBXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZSA9IFtwbHVnaW5zIG9i
amVjdEZvcktleTpwbHVnaW5QYXRoXTsKKyAgICAgICAgICAgIGlmICghcGx1Z2luUGFja2FnZSkK
KyAgICAgICAgICAgICAgICBwbHVnaW5QYWNrYWdlID0gW1dlYkJhc2VQbHVnaW5QYWNrYWdlIHBs
dWdpbldpdGhQYXRoOnBsdWdpblBhdGhdOworICAgICAgICAgICAgaWYgKHBsdWdpblBhY2thZ2Up
CisgICAgICAgICAgICAgICAgW25ld1BsdWdpbnMgYWRkT2JqZWN0OnBsdWdpblBhY2thZ2VdOwor
ICAgICAgICB9CisgICAgfQorICAgIFt1bmlxdWVGaWxlbmFtZXMgcmVsZWFzZV07CisgICAgCisg
ICAgcmV0dXJuIG5ld1BsdWdpbnM7Cit9CisKKy0gKHZvaWQpX2FwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZQoreworICAgIEFTU0VSVChzZWxmID09IGRhdGFiYXNlKTsKKyAgICAvLyBSZW1vdmUgYWxs
IHBsdWctaW5zIGZyb20gZGF0YWJhc2UuICBOZXRzY2FwZSBwbHVnLWlucyBoYXZlICJkZXN0cnVj
dG9yIGZ1bmN0aW9ucyIgdGhhdCBzaG91bGQgYmUgY2FsbGVkCisgICAgLy8gd2hlbiB0aGUgYnJv
d3NlciB1bmxvYWRzIHRoZSBwbHVnLWluLiAgVGhlc2UgZnVuY3Rpb25zIGNhbiBkbyBpbXBvcnRh
bnQgdGhpbmdzLCBzdWNoIGFzIGNsb3NpbmcvZGVsZXRpbmcgZmlsZXMsCisgICAgLy8gc28gaXQg
aXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHByb3Blcmx5IGNhbGxlZCB3aGVu
IHRoZSBhcHBsaWNhdGlvbiB0ZXJtaW5hdGVzLgorICAgIFtzZWxmIGNsb3NlXTsKK30KKwogQGVu
ZApJbmRleDogUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBs
dWdpbnMvV2ViQmFzZVBsdWdpblBhY2thZ2UuaAkocmV2aXNpb24gMTU4ODApCisrKyBQbHVnaW5z
L1dlYkJhc2VQbHVnaW5QYWNrYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE2ICs1MSwxMiBA
QAogewogICAgIE5TTXV0YWJsZVNldCAqcGx1Z2luRGF0YWJhc2VzOwogICAgIAotICAgIEJPT0wg
aXNMb2FkZWQ7Ci0gICAgCiAgICAgTlNTdHJpbmcgKm5hbWU7CiAgICAgTlNTdHJpbmcgKnBhdGg7
CiAgICAgTlNTdHJpbmcgKnBsdWdpbkRlc2NyaXB0aW9uOwogCiAgICAgTlNCdW5kbGUgKmJ1bmRs
ZTsKICAgICBDRkJ1bmRsZVJlZiBjZkJ1bmRsZTsKLSAgICAKLSAgICBOU0RhdGUgKmxhc3RNb2Rp
ZmllZERhdGU7CiAKICAgICBOU0RpY3Rpb25hcnkgKk1JTUVUb0Rlc2NyaXB0aW9uOwogICAgIE5T
RGljdGlvbmFyeSAqTUlNRVRvRXh0ZW5zaW9uczsKQEAgLTc1LDE1ICs3MSwxMiBAQAogLSAoQk9P
TClnZXRQbHVnaW5JbmZvRnJvbVBMaXN0czsKIAogLSAoQk9PTClsb2FkOwotLSAodm9pZCl1bmxv
YWQ7Ci0tIChCT09MKWlzTG9hZGVkOwogCiAtIChOU1N0cmluZyAqKW5hbWU7CiAtIChOU1N0cmlu
ZyAqKXBhdGg7CiAtIChOU1N0cmluZyAqKWZpbGVuYW1lOwogLSAoTlNTdHJpbmcgKilwbHVnaW5E
ZXNjcmlwdGlvbjsKIC0gKE5TQnVuZGxlICopYnVuZGxlOwotLSAoTlNEYXRlICopbGFzdE1vZGlm
aWVkRGF0ZTsKIAogLSAoTlNFbnVtZXJhdG9yICopZXh0ZW5zaW9uRW51bWVyYXRvcjsKIC0gKE5T
RW51bWVyYXRvciAqKU1JTUVUeXBlRW51bWVyYXRvcjsKSW5kZXg6IFBsdWdpbnMvV2ViQmFzZVBs
dWdpblBhY2thZ2UubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQbHVnaW5zL1dlYkJhc2VQbHVnaW5QYWNrYWdl
Lm0JKHJldmlzaW9uIDE1ODgwKQorKysgUGx1Z2lucy9XZWJCYXNlUGx1Z2luUGFja2FnZS5tCSh3
b3JraW5nIGNvcHkpCkBAIC05NywxMiArOTcsMTggQEAKIAogLSAoaWQpaW5pdFdpdGhQYXRoOihO
U1N0cmluZyAqKXBsdWdpblBhdGgKIHsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGV4
dGVuc2lvblRvTUlNRSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IAogICAgIHBhdGggPSBbW3NlbGYgcGF0aEJ5UmVzb2x2aW5nU3ltbGlua3NBbmRBbGlhc2VzSW5Q
YXRoOnBsdWdpblBhdGhdIHJldGFpbl07CiAgICAgYnVuZGxlID0gW1tOU0J1bmRsZSBhbGxvY10g
aW5pdFdpdGhQYXRoOnBhdGhdOworICAgIGlmICghYnVuZGxlKSB7CisgICAgICAgIFtzZWxmIHJl
bGVhc2VdOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KICAgICBjZkJ1bmRsZSA9IENGQnVu
ZGxlQ3JlYXRlKE5VTEwsIChDRlVSTFJlZilbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdKTsK
LSAgICBsYXN0TW9kaWZpZWREYXRlID0gW1tbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVBdHRyaWJ1dGVzQXRQYXRoOnBhdGggdHJhdmVyc2VMaW5rOllFU10gb2JqZWN0Rm9yS2V5
Ok5TRmlsZU1vZGlmaWNhdGlvbkRhdGVdIHJldGFpbl07CisgICAgZXh0ZW5zaW9uVG9NSU1FID0g
W1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICAKICAgICByZXR1cm4gc2Vs
ZjsKIH0KIApAQCAtMjA5LDI2ICsyMTUsMTYgQEAKICAgICByZXR1cm4gW3NlbGYgZ2V0UGx1Z2lu
SW5mb0Zyb21CdW5kbGVBbmRNSU1FRGljdGlvbmFyeTpNSU1FVHlwZXNdOwogfQogCi0tIChCT09M
KWlzTG9hZGVkCi17Ci0gICAgcmV0dXJuIGlzTG9hZGVkOwotfQotCiAtIChCT09MKWxvYWQKIHsK
LSAgICBpZiAoaXNMb2FkZWQgJiYgYnVuZGxlICYmICFCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQ
cmVmZXJlbmNlcykKKyAgICBpZiAoYnVuZGxlICYmICFCUF9DcmVhdGVQbHVnaW5NSU1FVHlwZXNQ
cmVmZXJlbmNlcykKICAgICAgICAgQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMg
PSAoQlBfQ3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXNGdW5jUHRyKUNGQnVuZGxlR2V0
RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShjZkJ1bmRsZSwgQ0ZTVFIoIkJQX0NyZWF0ZVBsdWdpbk1J
TUVUeXBlc1ByZWZlcmVuY2VzIikpOwotICAgIHJldHVybiBpc0xvYWRlZDsKKyAgICAKKyAgICBy
ZXR1cm4gWUVTOwogfQogCi0tICh2b2lkKXVubG9hZAotewotfQotCiAtICh2b2lkKWRlYWxsb2MK
IHsKLSAgICBBU1NFUlQoIWlzTG9hZGVkKTsKLSAgICAKICAgICBBU1NFUlQoIXBsdWdpbkRhdGFi
YXNlcyB8fCBbcGx1Z2luRGF0YWJhc2VzIGNvdW50XSA9PSAwKTsKICAgICBbcGx1Z2luRGF0YWJh
c2VzIHJlbGVhc2VdOwogICAgIApAQCAtMjQzLDE2ICsyMzksMTIgQEAKICAgICBbYnVuZGxlIHJl
bGVhc2VdOwogICAgIGlmIChjZkJ1bmRsZSkKICAgICAgICAgQ0ZSZWxlYXNlKGNmQnVuZGxlKTsK
LQotICAgIFtsYXN0TW9kaWZpZWREYXRlIHJlbGVhc2VdOwogICAgIAogICAgIFtzdXBlciBkZWFs
bG9jXTsKIH0KIAogLSAodm9pZClmaW5hbGl6ZQogewotICAgIEFTU0VSVCghaXNMb2FkZWQpOwot
CiAgICAgQVNTRVJUKCFwbHVnaW5EYXRhYmFzZXMgfHwgW3BsdWdpbkRhdGFiYXNlcyBjb3VudF0g
PT0gMCk7CiAgICAgW3BsdWdpbkRhdGFiYXNlcyByZWxlYXNlXTsKIApAQCAtMzEyLDExICszMDQs
NiBAQAogICAgIHJldHVybiBidW5kbGU7CiB9CiAKLS0gKE5TRGF0ZSAqKWxhc3RNb2RpZmllZERh
dGUKLXsKLSAgICByZXR1cm4gbGFzdE1vZGlmaWVkRGF0ZTsKLX0KLQogLSAodm9pZClzZXROYW1l
OihOU1N0cmluZyAqKXRoZU5hbWUKIHsKICAgICBbbmFtZSByZWxlYXNlXTsKQEAgLTM3MCwxOCAr
MzU3LDYgQEAKICAgICAgICAgbmFtZSwgcGF0aCwgW01JTUVUb0V4dGVuc2lvbnMgZGVzY3JpcHRp
b25dLCBbTUlNRVRvRGVzY3JpcHRpb24gZGVzY3JpcHRpb25dLCBwbHVnaW5EZXNjcmlwdGlvbl07
CiB9CiAKLS0gKEJPT0wpaXNFcXVhbDooaWQpb2JqZWN0Ci17Ci0gICAgcmV0dXJuIChbb2JqZWN0
IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VQbHVnaW5QYWNrYWdlIGNsYXNzXV0gJiYKLSAgICAgICAg
ICAgIFtbb2JqZWN0IG5hbWVdIGlzRXF1YWxUb1N0cmluZzpuYW1lXSAmJgotICAgICAgICAgICAg
W1tvYmplY3QgbGFzdE1vZGlmaWVkRGF0ZV0gaXNFcXVhbDpsYXN0TW9kaWZpZWREYXRlXSk7Ci19
Ci0KLS0gKFdlYk5TVUludGVnZXIpaGFzaAotewotICAgIHJldHVybiBbW25hbWUgc3RyaW5nQnlB
cHBlbmRpbmdTdHJpbmc6W2xhc3RNb2RpZmllZERhdGUgZGVzY3JpcHRpb25dXSBoYXNoXTsKLX0K
LQogLSAoQk9PTClpc1F1aWNrVGltZVBsdWdJbgogewogICAgIE5TU3RyaW5nICpidW5kbGVJZGVu
dGlmaWVyID0gW1tzZWxmIGJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CkBAIC00MzAsOSArNDA1
LDYgQEAKICAgICBBU1NFUlQoW3BsdWdpbkRhdGFiYXNlcyBjb250YWluc09iamVjdDpkYXRhYmFz
ZV0pOwogCiAgICAgW3BsdWdpbkRhdGFiYXNlcyByZW1vdmVPYmplY3Q6ZGF0YWJhc2VdOwotCi0g
ICAgaWYgKFtwbHVnaW5EYXRhYmFzZXMgY291bnRdID09IDApCi0gICAgICAgIFtzZWxmIHVubG9h
ZF07CiB9CiAKIEBlbmQKSW5kZXg6IFBsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UuaAkocmV2aXNp
b24gMTU4ODApCisrKyBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw4ICs2NiwxNyBAQAogICAgIE5QUF9TZXRWYWx1ZVByb2NQdHIgTlBQX1Nl
dFZhbHVlOwogICAgIE5QUF9TaHV0ZG93blByb2NQdHIgTlBQX1NodXRkb3duOwogICAgIE5QUF9H
ZXRKYXZhQ2xhc3NQcm9jUHRyIE5QUF9HZXRKYXZhQ2xhc3M7CisKKyAgICBCT09MIGlzTG9hZGVk
OworICAgIEJPT0wgbmVlZHNVbmxvYWQ7CisgICAgdW5zaWduZWQgaW50IGluc3RhbmNlQ291bnQ7
CiB9CiAKKy8vIE5ldHNjYXBlIHBsdWctaW4gcGFja2FnZXMgbXVzdCBiZSBleHBsaWNpdGx5IG9w
ZW5lZCBhbmQgY2xvc2VkIGJ5IGVhY2ggcGx1Zy1pbiBpbnN0YW5jZS4KKy8vIFRoaXMgaXMgdG8g
cHJvdGVjdCBOZXRzY2FwZSBwbHVnLWlucyBmcm9tIGJlaW5nIHVubG9hZGVkIHdoaWxlIHRoZXkg
YXJlIGluIHVzZS4KKy0gKHZvaWQpb3BlbjsKKy0gKHZvaWQpY2xvc2U7CisKIC0gKFdlYkV4ZWN1
dGFibGVUeXBlKWV4ZWN1dGFibGVUeXBlOwogCiAtIChOUFBfTmV3UHJvY1B0cilOUFBfTmV3OwpJ
bmRleDogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQ
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCShyZXZpc2lvbiAxNTg4MCkKKysrIFBs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDEwIEBACiAjZGVmaW5lIFJlYWxQbGF5ZXJBcHBJbmRlbnRpZmllciAgICAgICAgICAgICAg
ICBAImNvbS5SZWFsTmV0d29ya3MuUmVhbE9uZSBQbGF5ZXIiCiAjZGVmaW5lIFJlYWxQbGF5ZXJQ
bHVnaW5GaWxlbmFtZSAgICAgICAgICAgICAgICBAIlJlYWxQbGF5ZXIgUGx1Z2luIgogCitAaW50
ZXJmYWNlIFdlYk5ldHNjYXBlUGx1Z2luUGFja2FnZSAoSW50ZXJuYWwpCistICh2b2lkKV91bmxv
YWRXaXRoU2h1dGRvd246KEJPT0wpc2h1dGRvd247CitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBX
ZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UKIAogI2lmbmRlZiBfX0xQNjRfXwpAQCAtMjMzLDcgKzIz
Nyw3IEBACiAgICAgLy8gSW5pdGlhbGl6aW5nIGEgcGx1Z2luIHBhY2thZ2UgY2FuIGNhdXNlIGl0
IHRvIGJlIGxvYWRlZC4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciBpbml0aWFsaXppbmcgdGhlIHBs
dWdpbiBwYWNrYWdlLAogICAgIC8vIGVuc3VyZSB0aGF0IGl0IGlzIHVubG9hZGVkIGJlZm9yZSBk
ZWFsbG9jYXRpbmcgaXQgKFdlYkJhc2VQbHVnaW5QYWNrYWdlIHJlcXVpcmVzICYgYXNzZXJ0cyB0
aGlzKS4KICAgICBpZiAoIVtzZWxmIF9pbml0V2l0aFBhdGg6cGx1Z2luUGF0aF0pIHsKLSAgICAg
ICAgW3NlbGYgdW5sb2FkXTsKKyAgICAgICAgW3NlbGYgX3VubG9hZFdpdGhTaHV0ZG93bjpZRVNd
OwogICAgICAgICBbc2VsZiByZWxlYXNlXTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CkBA
IC0yNDksMzIgKzI1Myw2IEBACiAgICAgICAgIHJldHVybiBXZWJNYWNoT0V4ZWN1dGFibGVUeXBl
OwogfQogCi0tIChCT09MKWlzTG9hZGVkCi17Ci0gICAgcmV0dXJuIGlzTG9hZGVkOwotfQotCi0t
ICh2b2lkKXVubG9hZFdpdGhvdXRTaHV0ZG93bgotewotICAgIGlmICghaXNMb2FkZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChyZXNvdXJjZVJlZiAhPSAtMSkKLSAgICAgICAgW3NlbGYg
Y2xvc2VSZXNvdXJjZUZpbGU6cmVzb3VyY2VSZWZdOwotCi0gICAgaWYgKGlzQnVuZGxlKQotICAg
ICAgICBDRkJ1bmRsZVVubG9hZEV4ZWN1dGFibGUoY2ZCdW5kbGUpOwotICAgIGVsc2UKLSNpZm5k
ZWYgX19MUDY0X18KLSAgICAgICAgLy8gQ0ZNIGlzIG5vdCBzdXBwb3J0ZWQgaW4gNjQtYml0Ci0g
ICAgICAgIFdlYkNsb3NlQ29ubmVjdGlvbigmY29ubklEKTsKLSNlbmRpZgotCi0gICAgTE9HKFBs
dWdpbnMsICJQbHVnaW4gVW5sb2FkZWQiKTsKLSAgICBpc0xvYWRlZCA9IE5POwotfQotCi0KIC0g
KHZvaWQpbGF1bmNoUmVhbFBsYXllcgogewogICAgIENGVVJMUmVmIGFwcFVSTCA9IE5VTEw7CkBA
IC01NjIsMjIgKzU0MCwxMCBAQAogICAgIHJldHVybiBbc3VwZXIgbG9hZF07CiAKIGFib3J0Ogot
ICAgIFtzZWxmIHVubG9hZFdpdGhvdXRTaHV0ZG93bl07CisgICAgW3NlbGYgX3VubG9hZFdpdGhT
aHV0ZG93bjpOT107CiAgICAgcmV0dXJuIE5POwogfQotICAgIAotLSAodm9pZCl1bmxvYWQKLXsK
LSAgICBpZiAoIWlzTG9hZGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTE9HKFBsdWdp
bnMsICJVbmxvYWRpbmcgJUAuLi4iLCBuYW1lKTsKIAotICAgIE5QUF9TaHV0ZG93bigpOwotCi0g
ICAgW3NlbGYgdW5sb2FkV2l0aG91dFNodXRkb3duXTsKLX0KLQogLSAoTlBQX1NldFdpbmRvd1By
b2NQdHIpTlBQX1NldFdpbmRvdwogewogICAgIHJldHVybiBOUFBfU2V0V2luZG93OwpAQCAtNjQx
LDYgKzYwNywzOSBAQAogICAgIHJldHVybiBOUFBfUHJpbnQ7CiB9CiAKKy0gKHZvaWQpd2FzUmVt
b3ZlZEZyb21QbHVnaW5EYXRhYmFzZTooV2ViUGx1Z2luRGF0YWJhc2UgKilkYXRhYmFzZQorewor
ICAgIFtzdXBlciB3YXNSZW1vdmVkRnJvbVBsdWdpbkRhdGFiYXNlOmRhdGFiYXNlXTsKKyAgICAK
KyAgICAvLyBVbmxvYWQgd2hlbiByZW1vdmVkIGZyb20gZmluYWwgcGx1Zy1pbiBkYXRhYmFzZQor
ICAgIGlmIChbcGx1Z2luRGF0YWJhc2VzIGNvdW50XSA9PSAwKQorICAgICAgICBbc2VsZiBfdW5s
b2FkV2l0aFNodXRkb3duOllFU107Cit9CisKKy0gKHZvaWQpb3BlbgoreworICAgIGluc3RhbmNl
Q291bnQrKzsKKyAgICAKKyAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYWxsIGluc3RhbmNl
cyBjbG9zZSBhIHBsdWctaW4gcGFja2FnZSwgYnV0IGFub3RoZXIKKyAgICAvLyBpbnN0YW5jZSBv
cGVucyB0aGUgcGFja2FnZSBiZWZvcmUgaXQgaXMgdW5sb2FkZWQgKHdoaWNoIG9ubHkgaGFwcGVu
cyB3aGVuCisgICAgLy8gdGhlIHBsdWctaW4gZGF0YWJhc2UgaXMgcmVmcmVzaGVkKQorICAgIG5l
ZWRzVW5sb2FkID0gTk87CisgICAgCisgICAgaWYgKCFpc0xvYWRlZCkgeworICAgICAgICAvLyBT
aG91bGQgbG9hZCB3aGVuIHRoZSBmaXJzdCBpbnN0YW5jZSBvcGVucyB0aGUgcGx1Zy1pbiBwYWNr
YWdlCisgICAgICAgIEFTU0VSVChpbnN0YW5jZUNvdW50ID09IDEpOworICAgICAgICBbc2VsZiBs
b2FkXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpY2xvc2UKK3sKKyAgICBBU1NFUlQoaW5zdGFuY2VD
b3VudCA+IDApOworICAgIGluc3RhbmNlQ291bnQtLTsKKyAgICBpZiAoaW5zdGFuY2VDb3VudCA9
PSAwICYmIG5lZWRzVW5sb2FkKQorICAgICAgICBbc2VsZiBfdW5sb2FkV2l0aFNodXRkb3duOllF
U107Cit9CisKIEBlbmQKIAogCkBAIC02NzcsMyArNjc2LDM4IEBACiAgICAgfQogICAgIHJldHVy
biAoVHJhbnNpdGlvblZlY3RvciluZXdHbHVlOwogfQorCitAaW1wbGVtZW50YXRpb24gV2ViTmV0
c2NhcGVQbHVnaW5QYWNrYWdlIChJbnRlcm5hbCkKKworLSAodm9pZClfdW5sb2FkV2l0aFNodXRk
b3duOihCT09MKXNodXRkb3duCit7CisgICAgaWYgKCFpc0xvYWRlZCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIExPRyhQbHVnaW5zLCAiVW5sb2FkaW5nICVALi4uIiwgbmFtZSk7CisKKyAg
ICAvLyBDYW5ub3QgdW5sb2FkIGEgcGx1Zy1pbiBwYWNrYWdlIHdoaWxlIGFuIGluc3RhbmNlIGlz
IHN0aWxsIHVzaW5nIGl0CisgICAgaWYgKGluc3RhbmNlQ291bnQgPiAwKSB7CisgICAgICAgIG5l
ZWRzVW5sb2FkID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNodXRk
b3duICYmIE5QUF9TaHV0ZG93bikKKyAgICAgICAgTlBQX1NodXRkb3duKCk7CisKKyAgICBpZiAo
cmVzb3VyY2VSZWYgIT0gLTEpCisgICAgICAgIFtzZWxmIGNsb3NlUmVzb3VyY2VGaWxlOnJlc291
cmNlUmVmXTsKKworICAgIGlmIChpc0J1bmRsZSkKKyAgICAgICAgQ0ZCdW5kbGVVbmxvYWRFeGVj
dXRhYmxlKGNmQnVuZGxlKTsKKyAgICBlbHNlCisjaWZuZGVmIF9fTFA2NF9fCisgICAgICAgIC8v
IENGTSBpcyBub3Qgc3VwcG9ydGVkIGluIDY0LWJpdAorICAgICAgICBXZWJDbG9zZUNvbm5lY3Rp
b24oJmNvbm5JRCk7CisjZW5kaWYKKworICAgIExPRyhQbHVnaW5zLCAiUGx1Z2luIFVubG9hZGVk
Iik7CisgICAgaXNMb2FkZWQgPSBOTzsKK30KKworQGVuZApJbmRleDogUGx1Z2lucy9XZWJQbHVn
aW5QYWNrYWdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGx1Z2lucy9XZWJQbHVnaW5QYWNrYWdlLm0JKHJl
dmlzaW9uIDE1ODgwKQorKysgUGx1Z2lucy9XZWJQbHVnaW5QYWNrYWdlLm0JKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDggQEAKIAogLSBpbml0V2l0aFBhdGg6KE5TU3RyaW5nICopcGx1Z2lu
UGF0aAogewotICAgIFtzdXBlciBpbml0V2l0aFBhdGg6cGx1Z2luUGF0aF07CisgICAgaWYgKCEo
c2VsZiA9IFtzdXBlciBpbml0V2l0aFBhdGg6cGx1Z2luUGF0aF0pKQorICAgICAgICByZXR1cm4g
bmlsOwogCiAgICAgaWYgKGJ1bmRsZSA9PSBuaWwpIHsKICAgICAgICAgW3NlbGYgcmVsZWFzZV07
CkBAIC04MSwyMCArODIsMTYgQEAKIAogLSAoQk9PTClsb2FkCiB7Ci0gICAgaWYgKGlzTG9hZGVk
KSB7Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIAogI2lmICFMT0dfRElTQUJMRUQK
ICAgICBDRkFic29sdXRlVGltZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwog
I2VuZGlmCiAgICAgCi0gICAgW2J1bmRsZSBwcmluY2lwYWxDbGFzc107Ci0gICAgaXNMb2FkZWQg
PSBbYnVuZGxlIGlzTG9hZGVkXTsKLSAgICBpZiAoIWlzTG9hZGVkKSB7Ci0gICAgICAgIHJldHVy
biBOTzsKKyAgICAvLyBMb2FkIHRoZSBidW5kbGUKKyAgICBpZiAoIVtidW5kbGUgaXNMb2FkZWRd
KSB7CisgICAgICAgIGlmICghW2J1bmRsZSBsb2FkXSkKKyAgICAgICAgICAgIHJldHVybiBOTzsK
ICAgICB9Ci0KKyAgICAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgQ0ZBYnNvbHV0ZVRpbWUgZHVy
YXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwogICAgIExPRyhQbHVn
aW5zLCAicHJpbmNpcGFsQ2xhc3MgdG9vayAlZiBzZWNvbmRzIGZvcjogJUAiLCBkdXJhdGlvbiwg
W3NlbGYgbmFtZV0pOwpAQCAtMTAyLDE2ICs5OSw2IEBACiAgICAgcmV0dXJuIFtzdXBlciBsb2Fk
XTsKIH0KIAotLSAodm9pZCl1bmxvYWQKLXsKLSAgICBpc0xvYWRlZCA9IE5POwotfQotCi0tIChC
T09MKWlzTG9hZGVkCi17Ci0gICAgcmV0dXJuIFtidW5kbGUgaXNMb2FkZWRdOwotfQotCiBAZW5k
CiAKIEBpbXBsZW1lbnRhdGlvbiBOU09iamVjdCAoV2ViU2NyaXB0aW5nKQpJbmRleDogUGx1Z2lu
cy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm0JKHJldmlzaW9uIDE1ODgwKQorKysgUGx1Z2lucy9XZWJC
YXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm0JKHdvcmtpbmcgY29weSkKQEAgLTEyMDEsNiArMTIwMSw5
IEBACiAKICAgICBBU1NFUlQoTlBQX05ldyk7CiAKKyAgICAvLyBPcGVuIHRoZSBwbHVnLWluIHBh
Y2thZ2Ugc28gaXQgcmVtYWlucyBsb2FkZWQgd2hpbGUgdGhpcyBpbnN0YW5jZSB1c2VzIGl0Cisg
ICAgW3BsdWdpbiBvcGVuXTsKKyAgICAKICAgICAvLyBJbml0aWFsaXplIGRyYXdpbmdNb2RlbCB0
byBhbiBpbnZhbGlkIHZhbHVlIHNvIHRoYXQgd2UgY2FuIGRldGVjdCB3aGVuIHRoZSBwbHVnaW4g
ZG9lcyBub3Qgc3BlY2lmeSBhIGRyYXdpbmdNb2RlbAogICAgIGRyYXdpbmdNb2RlbCA9IC0xOwog
ICAgIApAQCAtMTIyNiw2ICsxMjI5LDcgQEAKICAgICAgICAgTE9HKFBsdWdpbnMsICJQbHVnaW4g
b25seSBzdXBwb3J0cyBRdWlja0RyYXcsIGJ1dCBRdWlja0RyYXcgaXMgdW5hdmFpbGFibGU6ICVA
IiwgcGx1Z2luKTsKICAgICAgICAgTlBQX0Rlc3Ryb3koaW5zdGFuY2UsIE5VTEwpOwogICAgICAg
ICBpbnN0YW5jZS0+cGRhdGEgPSBOVUxMOworICAgICAgICBbcGx1Z2luIGNsb3NlXTsKICAgICAg
ICAgcmV0dXJuIE5POwogI2VuZGlmCiAgICAgfQpAQCAtMTIzMyw2ICsxMjM3LDcgQEAKICAgICBM
T0coUGx1Z2lucywgIk5QUF9OZXc6ICVkIiwgbnBFcnIpOwogICAgIGlmIChucEVyciAhPSBOUEVS
Ul9OT19FUlJPUikgewogICAgICAgICBMT0dfRVJST1IoIk5QUF9OZXcgZmFpbGVkIHdpdGggZXJy
b3I6ICVkIiwgbnBFcnIpOworICAgICAgICBbcGx1Z2luIGNsb3NlXTsKICAgICAgICAgcmV0dXJu
IE5POwogICAgIH0KICAgICAKQEAgLTEyOTcsNiArMTMwMiw5IEBACiAKICAgICBpbnN0YW5jZS0+
cGRhdGEgPSBOVUxMOwogICAgIAorICAgIC8vIFRoaXMgaW5zdGFuY2Ugbm8gbG9uZ2VyIG5lZWRz
IHRoZSBwbHVnLWluIHBhY2thZ2UKKyAgICBbcGx1Z2luIGNsb3NlXTsKKyAgICAKICAgICAvLyBX
ZSB1c3VhbGx5IHJlbW92ZSB0aGUga2V5IGV2ZW50IGhhbmRsZXIgaW4gcmVzaWduRmlyc3RSZXNw
b25kZXIgYnV0IGl0IGlzIHBvc3NpYmxlIHRoYXQgcmVzaWduRmlyc3RSZXNwb25kZXIgCiAgICAg
Ly8gbWF5IG5ldmVyIGdldCBjYWxsZWQgc28gd2UgY2FuJ3QgY29tcGxldGVseSByZWx5IG9uIGl0
LgogICAgIFtzZWxmIHJlbW92ZUtleUV2ZW50SGFuZGxlcl07CkluZGV4OiBQbHVnaW5zL1dlYkJh
c2VOZXRzY2FwZVBsdWdpblN0cmVhbS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBsdWdpbnMvV2ViQmFzZU5l
dHNjYXBlUGx1Z2luU3RyZWFtLm0JKHJldmlzaW9uIDE1ODgwKQorKysgUGx1Z2lucy9XZWJCYXNl
TmV0c2NhcGVQbHVnaW5TdHJlYW0ubQkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAsNiBA
QAogewogICAgIEFTU0VSVCghaXNUZXJtaW5hdGVkKTsKICAgICAKLSAgICBpZiAoIVtbcGx1Z2lu
VmlldyBwbHVnaW5dIGlzTG9hZGVkXSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAog
ICAgIFtzZWxmIHNldFJlc3BvbnNlVVJMOlVSTF07CiAgICAgW3NlbGYgc2V0TUlNRVR5cGU6dGhl
TUlNRVR5cGVdOwogICAgIApAQCAtMjYyLDkgKzI1OCw4IEBACiAKIC0gKHZvaWQpX2Rlc3Ryb3lT
dHJlYW0KIHsKLSAgICBpZiAoaXNUZXJtaW5hdGVkIHx8ICFbW3BsdWdpblZpZXcgcGx1Z2luXSBp
c0xvYWRlZF0pIHsKKyAgICBpZiAoaXNUZXJtaW5hdGVkKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogICAgIAogICAgIEFTU0VSVChyZWFzb24gIT0gV0VCX1JFQVNPTl9OT05FKTsKICAgICBBU1NF
UlQoW2RlbGl2ZXJ5RGF0YSBsZW5ndGhdID09IDApOwpAQCAtMzQ1LDkgKzM0MCw4IEBACiAKIC0g
KHZvaWQpZmluaXNoZWRMb2FkaW5nV2l0aERhdGE6KE5TRGF0YSAqKWRhdGEKIHsKLSAgICBpZiAo
IVtbcGx1Z2luVmlldyBwbHVnaW5dIGlzTG9hZGVkXSB8fCAhc3RyZWFtLm5kYXRhKSB7CisgICAg
aWYgKCFzdHJlYW0ubmRhdGEpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgCiAgICAgaWYg
KCh0cmFuc2Zlck1vZGUgPT0gTlBfQVNGSUxFIHx8IHRyYW5zZmVyTW9kZSA9PSBOUF9BU0ZJTEVP
TkxZKSAmJiAhcGF0aCkgewogICAgICAgICBwYXRoID0gc3RyZHVwKCIvdG1wL1dlYktpdFBsdWdJ
blN0cmVhbVhYWFhYWCIpOwpAQCAtMzgzLDkgKzM3Nyw4IEBACiAKIC0gKHZvaWQpX2RlbGl2ZXJE
YXRhCiB7Ci0gICAgaWYgKCFbW3BsdWdpblZpZXcgcGx1Z2luXSBpc0xvYWRlZF0gfHwgIXN0cmVh
bS5uZGF0YSB8fCBbZGVsaXZlcnlEYXRhIGxlbmd0aF0gPT0gMCkgeworICAgIGlmICghc3RyZWFt
Lm5kYXRhIHx8IFtkZWxpdmVyeURhdGEgbGVuZ3RoXSA9PSAwKQogICAgICAgICByZXR1cm47Ci0g
ICAgfQogICAgIAogICAgIGludDMyIHRvdGFsQnl0ZXMgPSBbZGVsaXZlcnlEYXRhIGxlbmd0aF07
CiAgICAgaW50MzIgdG90YWxCeXRlc0RlbGl2ZXJlZCA9IDA7Cg==
</data>
<flag name="review"
          id="3123"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>