<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>307965</bug_id>
          
          <creation_ts>2012-10-06 09:49:06 +0000</creation_ts>
          <short_desc>Upper part of windows tears when moving it left/right ONLY in upper part of display</short_desc>
          <delta_ts>2013-10-19 13:56:37 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Plasma</classification>
          <product>kwin</product>
          <component>scene-opengl</component>
          <version>4.9.2</version>
          <rep_platform>Ubuntu</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.kubuntuforums.net/showthread.php?60347-Window-tearing-with-kubuntu-1210-beta2</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>4.11</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="John van Spaandonk">jwork123nl</reporter>
          <assigned_to name="KWin default assignee">kwin-bugs-null</assigned_to>
          <cc>aboris</cc>
    
    <cc>adikurthy</cc>
    
    <cc>anhermann</cc>
    
    <cc>ansla80</cc>
    
    <cc>antonis+kdebugs</cc>
    
    <cc>brian.m.hill</cc>
    
    <cc>bwat47</cc>
    
    <cc>elena</cc>
    
    <cc>felixonmars</cc>
    
    <cc>funeral20</cc>
    
    <cc>gspr</cc>
    
    <cc>kde</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>lucidlytwisted</cc>
    
    <cc>markg85</cc>
    
    <cc>pgriffais</cc>
    
    <cc>post</cc>
    
    <cc>root</cc>
    
    <cc>russianneuromancer</cc>
    
    <cc>selopo</cc>
    
    <cc>solerman</cc>
    
    <cc>tangjinchuan</cc>
    
    <cc>ua_bugz_kde</cc>
    
    <cc>valdikss</cc>
          
          <cf_commitlink>http://commits.kde.org/kde-workspace/6072b4feb8c90024aa24b2e9cb8a21ab2140412c</cf_commitlink>
          <cf_versionfixedin>4.11</cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1303662</commentid>
    <comment_count>0</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 09:49:06 +0000</bug_when>
    <thetext>Problem occurs with Kubuntu 12.04 and got worse with kubuntu 12.10 beta 2.
Default settings (using an usb image to try out Kubuntu 12.10)

Using Intel sandy bridge graphics 2500k processor.
(Problem does not occur on my dell Studio XPS laptop with intel i965 graphics)
When I move a window horizontally the top part is displaced 2-8 mm depending upon the speed of moving.
This problem only occurs with the part of the window that is above a certain height on the screen
Kubuntu 12.04: problem occurs only in top of display (about the height of a window title bar)
Kubuntu 12.10: problem occurs in top 1/6th of the screen. 

With Kubuntu 12.10 the problem becomes much more visible.
You notice tearing on a large part of a window that is in thu opper part of the display.

The effect disappears when I turn off vsync in System Settings - Desktop Effects.
(But now the moving is not as smooth on other parts of the screen as with vsync on.)

Reproducible: Always

Steps to Reproduce:
1.start kde
2.drag a window horizontally accross the top part of the screen
3.
Actual Results:  
tearing

Expected Results:  
smooth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303663</commentid>
    <comment_count>1</comment_count>
      <attachid>74373</attachid>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 09:49:53 +0000</bug_when>
    <thetext>Created attachment 74373
my xorg log file

Just so you know what driver etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303669</commentid>
    <comment_count>2</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 10:06:56 +0000</bug_when>
    <thetext>Tested it also with a recent fedora beta (USB boot) and the problem does not occur there.
It seems kde-specific. I realize there is not a lot of information in this remark but I guess
all observations are useful :-)
Thanks for a great great job on kwin, I can not say enough how happy I am with it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303671</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-10-06 10:16:41 +0000</bug_when>
    <thetext>I do not understand comment #2. If it does not occur with Fedora it rather seems Kubuntu specific, doesn&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303674</commentid>
    <comment_count>4</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 10:23:42 +0000</bug_when>
    <thetext>Hallo Martin,

I was not clear. I meant to say: Fedora with a prerelease of gnome 3.6.
So the problem seems KDE related, not specifically Kubuntu-related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303709</commentid>
    <comment_count>5</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 12:21:22 +0000</bug_when>
    <thetext>I just downloaded and tried Fedora 18 alfa, with KDE 4.9.0.0.
Same problem as with Kubuntu 12.10
We can say now that it is a KDE (kwin?) / intel driver problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303710</commentid>
    <comment_count>6</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-06 12:24:15 +0000</bug_when>
    <thetext>About the same as the nvidia related tearing?

@John, can you record a video of this?

This https://bugzilla.gnome.org/show_bug.cgi?id=651312#c37
claims that you cannot blit during the retrace - if that was true, we can either move to full repaints (eventually by copying the front to the backbuffer for the undamaged parts?) and buffer swapping or mark all tearing bugs as wontfix.

ftr:
I have doubts on this claim, the memory amount would be rather small and also the only thing, i get tearing in the upper fraction with, is GL contents, there&apos;s claim about videos as well, but not here. However i have *never* seen tearing by just moving some windows, yet we&apos;ve seen a video where this happened and the &quot;tearing&quot; was actually more like &quot;paints with 500ms delay&quot; - and that&apos;s not tearing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303714</commentid>
    <comment_count>7</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-06 12:37:13 +0000</bug_when>
    <thetext>WOW, wait:
[    22.590] (II) Loading /usr/lib/xorg/modules/drivers/intel_drv.so
[    22.590] (II) Module intel: vendor=&quot;X.Org Foundation&quot;
[    22.590] 	compiled for 1.11.3, module version = 2.17.0

Can you please try a somewhat recent driver for a sandybridge chip (2.17 is nearly a year old) - ideally an SNA one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303737</commentid>
    <comment_count>8</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 15:01:32 +0000</bug_when>
    <thetext>I created a video with the webcamoid, handholding my webcam.
It shows the tearing problem at the very top of the display.
And no tearing somewhat below this.
This is for kubuntu 12.04.

You can find the video at:
http://www.vanspaandonk-koks.nl/open_source/tearing%20problem%20intel%20sandy%20bridge%20kubuntu%2012.04.webm

perhaps you need to replace the %20 by spaces.
I used firefox - save page as - and then watched the video offline.

I hope you trust me when I say that on kubuntu 12.04 the tearing starts at a lower part of the screen.
I will start fedora alfa 18 kde from my usb now and report back the version of the video driver used there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303739</commentid>
    <comment_count>9</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 15:08:58 +0000</bug_when>
    <thetext>Fedora 18 alfa, booted clean from usb excerpt fro /var/log/Xorg.o.log
BTW this uses kernel 3.6RC2

FYI: the &quot;tearing&quot; I showed on the video is (vertically) twice as large as
with kubuntu 12.04.
If you need any more just let me know, I am anxious to help solve this
problem. BTW do any of you use sandy bridge graphics???

[    20.584] (II) LoadModule: &quot;intel&quot;
[    20.585] (II) Loading /usr/lib64/xorg/modules/drivers/intel_drv.so
[    20.631] (II) Module intel: vendor=&quot;X.Org Foundation&quot;
[    20.631]    compiled for 1.12.99.903, module version = 2.20.2
[    20.632]    Module class: X.Org Video Driver
[    20.632]    ABI class: X.Org Video Driver, version 13.0
[    20.632] (II) LoadModule: &quot;vesa&quot;
[    20.632] (II) Loading /usr/lib64/xorg/modules/drivers/vesa_drv.so
[    20.638] (II) Module vesa: vendor=&quot;X.Org Foundation&quot;
[    20.638]    compiled for 1.12.99.902, module version = 2.3.2
[    20.638]    Module class: X.Org Video Driver
[    20.638]    ABI class: X.Org Video Driver, version 13.0
[    20.638] (II) LoadModule: &quot;modesetting&quot;
[    20.638] (II) Loading /usr/lib64/xorg/modules/drivers/modesetting_drv.so
[    20.643] (II) Module modesetting: vendor=&quot;X.Org Foundation&quot;
[    20.643]    compiled for 1.12.99.902, module version = 0.4.0
[    20.643]    Module class: X.Org Video Driver
[    20.643]    ABI class: X.Org Video Driver, version 13.0
[    20.643] (II) LoadModule: &quot;fbdev&quot;
[    20.644] (II) Loading /usr/lib64/xorg/modules/drivers/fbdev_drv.so
[    20.650] (II) Module fbdev: vendor=&quot;X.Org Foundation&quot;
[    20.650]    compiled for 1.12.99.902, module version = 0.4.3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303744</commentid>
    <comment_count>10</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-06 15:22:02 +0000</bug_when>
    <thetext>In comment #8 I intended to say: &quot;Hope that you trust me when I say that on Kubuntu 12.10 the tearing starts at a lower part of the screen&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303899</commentid>
    <comment_count>11</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-07 11:32:35 +0000</bug_when>
    <thetext>I now tried again fedora 18 preview, with SNA enabled.
At this point I do not know anything else to try so I will
wait for you guys to think of something :-)

I created a file /etc/X11/xorg.conf with these contents:

Section &quot;Device&quot;
 Identifier     &quot;Intel Graphics&quot;
 Driver &quot;intel&quot;
 Option &quot;AccelMethod&quot; &quot;sna&quot; 
EndSection

And restarted the x-server.

The tearing is exactly as before, so this did not help.

Excerpts from /var/log/Xorg.0.log:

...
     80 [   164.490] (II) LoadModule: &quot;glx&quot;
     81 [   164.490] (II) Loading /usr/lib64/xorg/modules/extensions/libglx.so
     82 [   164.490] (II) Module glx: vendor=&quot;X.Org Foundation&quot;
     83 [   164.490]    compiled for 1.12.99.904, module version = 1.0.0
     84 [   164.491]    ABI class: X.Org Server Extension, version 6.0
     85 [   164.491] (==) AIGLX enabled
     86 [   164.491] Loading extension GLX
     87 [   164.491] (II) LoadModule: &quot;intel&quot;
     88 [   164.491] (II) Loading /usr/lib64/xorg/modules/drivers/intel_drv.so
     89 [   164.491] (II) Module intel: vendor=&quot;X.Org Foundation&quot;
     90 [   164.491]    compiled for 1.12.99.903, module version = 2.20.2
     91 [   164.491]    Module class: X.Org Video Driver
     92 [   164.491]    ABI class: X.Org Video Driver, version 13.0
...
    259 [   165.023] (==) Depth 24 pixmap format is 32 bpp
    260 [   165.034] (II) intel(0): SNA initialized with SandyBridge backend
    261 [   165.034] (==) intel(0): Backing store disabled
    262 [   165.034] (==) intel(0): Silken mouse enabled
    263 [   165.034] (II) intel(0): HW Cursor enabled
    264 [   165.034] (II) intel(0): RandR 1.2 enabled, ignore the following RandR disabled message.
    265 [   165.034] (==) intel(0): DPMS enabled
    266 [   165.041] (II) intel(0): [DRI2] Setup complete
....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305551</commentid>
    <comment_count>12</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-13 18:36:04 +0000</bug_when>
    <thetext>This patch might avoid tearing IN FULLSCREEN WINDOWS ONLY
The more feedback we can get on it, the more likely it&apos;ll get into the next release.

https://git.reviewboard.kde.org/r/106833/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305580</commentid>
    <comment_count>13</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-13 20:20:12 +0000</bug_when>
    <thetext>*** Bug 308332 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305700</commentid>
    <comment_count>14</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-14 09:18:28 +0000</bug_when>
    <thetext>On my system, this fixes tearing (using the teartest from http://ompldr.org/iYXBldg-hide) in full-screen mplayer (with the OpenGL backend). It does however *not* fix tearing with the full-screen VLC (OpenGL mode as well), nor in VLC maximized in windowed mode - the latter was to be expected, but I do this often. The reason may be that my screen is 16:10, the video is 16:9, and VLC is smart enough toa ctually not damage the black bars at the top and bottom - so KWin does not see a full-screen damage event.
If you decide to adjust the repaint logic to compensate for that, please have in mind there are people using a 5:4 screen (1280x1024) watching 16:9 videos - and movies for cinema are even wider.

Btw, why is this bug still unconfirmed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305704</commentid>
    <comment_count>15</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-14 09:41:52 +0000</bug_when>
    <thetext>(In reply to comment #14)
&gt; On my system, this fixes tearing (using the teartest from
&gt; http://ompldr.org/iYXBldg-hide) in full-screen mplayer (with the OpenGL
&gt; backend). It does however *not* fix tearing with the full-screen VLC (OpenGL
&gt; mode as well), nor in VLC maximized in windowed mode

Can you please enable the &quot;Show Paint&quot; plugin and check the paint behavior of vlc?
Also check another video output (xv, vdpau, x11)

&gt; If you decide to adjust the repaint logic to compensate for that, please
&gt; have in mind there are people using a 5:4 screen (1280x1024) watching 16:9
&gt; videos - and movies for cinema are even wider.
Irrelevant since the black bars will be wider than the post retrace area anyway?

&gt; Btw, why is this bug still unconfirmed?
We don&apos;t even 100% know what it is, thus whether we have to or can solve it.
Status quo is that glWaitVideoSync in different implementations *might* sync to the retrace end - or sync to the wrong device (unlikely but possible - do you have a multiscreen setup?) or ...
And in that case it would be invalid (or &quot;upstream&quot; etc.) anyway.

Personally I btw. give a shit on whether a bug is marked unconfirmed or new - there&apos;s is an issue to solve for at least one person unless the bug is marked resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305710</commentid>
    <comment_count>16</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-14 09:57:18 +0000</bug_when>
    <thetext>(In reply to comment #15)
&gt; Can you please enable the &quot;Show Paint&quot; plugin and check the paint behavior
&gt; of vlc?
&gt; Also check another video output (xv, vdpau, x11)
Indeed the paint plugin shows that &quot;mplayer -vo gl&quot; does full-screen repaints, while VLC does not.
vdpau does not work here (mplayerdoesn&apos;t support it and VLC framerate drops down too much to be useful). I will test the other backends later or tomorrow when I got the time.

&gt; &gt; If you decide to adjust the repaint logic to compensate for that, please
&gt; &gt; have in mind there are people using a 5:4 screen (1280x1024) watching 16:9
&gt; &gt; videos - and movies for cinema are even wider.
&gt; Irrelevant since the black bars will be wider than the post retrace area
&gt; anyway?
That might or might not work - the tearing line moves down at least one quarter, sometimes even a third of the screen here.
For a 16:9 movie on a 5:4 screen, the movie will be 720 pixels high, meaning the black bars have 280 pixels, which is less than a quarter, so if it tears like it does on my system it would be visible. If this depends more on the absolute pixels than on the relative sizes... I don&apos;t know^^

&gt; &gt; Btw, why is this bug still unconfirmed?
&gt; We don&apos;t even 100% know what it is, thus whether we have to or can solve it.
&gt; Status quo is that glWaitVideoSync in different implementations *might* sync
&gt; to the retrace end - or sync to the wrong device (unlikely but possible - do
&gt; you have a multiscreen setup?) or ...
I see.
I am using an external screen connected to the HDMI connector of my laptop. The laptop-internal screen is disabled. I do also have a 2nd GPU by NVidia in this machine, but it is turned off all the time during these tests and therefore should not interfere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305725</commentid>
    <comment_count>17</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-14 10:18:39 +0000</bug_when>
    <thetext>(In reply to comment #16)

&gt; I do also have a 2nd GPU by NVidia in this machine, but it is turned
&gt; off all the time during these tests and therefore should not interfere.

         DOES ANYONE HERE HAVE AN NVIDIA FREE SYSTEM?

Sorry for shouting, but could be quite relevant ;-)

&gt; If this depends more on the absolute pixels than on the relative sizes...
In case the problem is syncing to the end of the retrace, it&apos;s absolute pixels and relates more to the memory speed (and pot. the screen width)

&gt; I am using an external screen connected to the HDMI connector of my laptop.
Do you get the same (or similar) behavior on the internal screen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305726</commentid>
    <comment_count>18</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-14 10:21:35 +0000</bug_when>
    <thetext>I&apos;ve had some more time than expected, so here are my test results:

x = tears heavily (i.e. a tearing line is visible at least half the time)
~ = tears a bit (i.e. a tearing line is sometimes visible)
- = does not tear at all

W = Window (mayimized)
FS = Fullscreen

I did not include mplayer with X11 backend as it does not do upscaling, so the image is small on my screen
and can&apos;t be compared to the others.

master
            | GL | Xv | X11
VLC W       | x  | ~  | x
VLC FS      | x  | ~  | x
mplayer W   | x  | ~  |
mplayer FS  | x  | ~  |

master+patch

            | GL | Xv | X11
VLC W       | x  | ~  |  x
VLC FS      | x  | ~  |  x
mplayer W   | x  | ~  |
mplayer FS  | -  | ~  |


I added a debug statement to kwin telling me when the swap case is used, and indeed this correlates with the visual observations: When using mplayer -vo gl in fullscreen, every frame is swapped. For any other case, sometimes a frame is swapped, but most of the time it is not. This also correlates with the output of the paint plugin: Only mplayer -vo gl is actually performing full-screen redraws.

(In reply to comment #17)
&gt;          DOES ANYONE HERE HAVE AN NVIDIA FREE SYSTEM?
&gt; 
&gt; Sorry for shouting, but could be quite relevant ;-)
I can feel your pain ;-) but, you see, I want to do gaming on Linux, and then there is not much choice.
On topic though, as I said, the card is turned off and the nvidia kernel module is not even loaded, nor is the NVidia GL implementation.


&gt; &gt; I am using an external screen connected to the HDMI connector of my laptop.
&gt; Do you get the same (or similar) behavior on the internal screen?
Will test tomorrow. The internal screen is 16:9 though and much smaller, so I expect (a) your patch to kick in for all backens in full-screen, as now all pixels *have* to be damaged, and (b) it&apos;s much harder to see small tearing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305730</commentid>
    <comment_count>19</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-14 10:23:09 +0000</bug_when>
    <thetext>Argh, bugs.kde.org seems to use a strange font which doesn&apos;t have a proper tilde...
Xv was always &quot;tearing a bit&quot;, and mplayer FS with the patch applied was the only case with no tearing at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305746</commentid>
    <comment_count>20</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-14 11:11:10 +0000</bug_when>
    <thetext>(In reply to comment #18)
&gt; I can feel your pain ;-)

That&apos;s not the point, but we&apos;ve always had tearing issue reports with nvidia boards and recently got some for intel.
Now, if all those intel reporters actually use optimus, that smells suspicious to me ;-)

&gt; I want to do gaming on Linux
I&apos;ve an nvidia GPU + the blob as well, i&apos;m completely agnostic on this topic and in general the system works nicely. I just want to pin down this issue.

&gt; On topic though, as I said, the card is turned off and the nvidia kernel
&gt; module is not even loaded, nor is the NVidia GL implementation.
How&apos;s the HDMI chip wired? Connected to the nvidia chip or to the intel one (where the nvidia one copies the framebuffer)?
 
&gt; Will test tomorrow. The internal screen is 16:9 though
-&gt; cinemascope / panavision / cinemascope55

However the much more relevant question is whether the non swapping sync works with the internal screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305805</commentid>
    <comment_count>21</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-14 15:34:42 +0000</bug_when>
    <thetext>On 10/14/2012 01:11 PM, Thomas Lübking wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt;
&gt; --- Comment #20 from Thomas Lübking &lt;thomas.luebking@gmail.com&gt; ---
&gt; (In reply to comment #18)
&gt;&gt; I can feel your pain ;-)
&gt; That&apos;s not the point, but we&apos;ve always had tearing issue reports with nvidia
&gt; boards and recently got some for intel.
&gt; Now, if all those intel reporters actually use optimus, that smells suspicious
&gt; to me ;-)
&gt;
&gt;&gt; I want to do gaming on Linux
&gt; I&apos;ve an nvidia GPU + the blob as well, i&apos;m completely agnostic on this topic
&gt; and in general the system works nicely. I just want to pin down this issue.
&gt;
&gt;&gt; On topic though, as I said, the card is turned off and the nvidia kernel
&gt;&gt; module is not even loaded, nor is the NVidia GL implementation.
&gt; How&apos;s the HDMI chip wired? Connected to the nvidia chip or to the intel one
&gt; (where the nvidia one copies the framebuffer)?
&gt;
&gt;&gt; Will test tomorrow. The internal screen is 16:9 though
&gt; -&gt; cinemascope / panavision / cinemascope55
&gt;
&gt; However the much more relevant question is whether the non swapping sync works
&gt; with the internal screen.
&gt;
I can confirm that my main system is NVIDEA-FREE!!
This is the system I reported (and filmed) the tearing issue on.
The system has an ASUS Maximus IV gene-Z blahblah board with
  k2500 sandy bridge and am perfectly happy with the speed of the graphics.
I just use a single monitor, really the setup is as simple as can be :-)

In addition I want to report the following:
- The teartest (movie) mentioned earlier also tears in this system.
   So I think there is at least some chance that if a person reports 
video tearing solved, that
   my problem is solved as well.
- I cannot apply a patch - don&apos;t have the time to compile etc.
- I have a 24&quot; DELL monitor with a resolution of 1920 X 1200...
- My laptop, with pre-sandy bridge graphics and 1920X1080 screen does 
NOT show tearing in the tear video test.
This correlates with NO tearing when moving windows manually on that system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305806</commentid>
    <comment_count>22</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-10-14 15:39:03 +0000</bug_when>
    <thetext>On 10/14/2012 05:34 PM, John van Spaandonk wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt;
&gt; --- Comment #21 from John van Spaandonk &lt;john@van-spaandonk.nl&gt; ---
&gt; On 10/14/2012 01:11 PM, Thomas Lübking wrote:
&gt;&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt;&gt;
&gt;&gt; --- Comment #20 from Thomas Lübking &lt;thomas.luebking@gmail.com&gt; ---
&gt;&gt; (In reply to comment #18)
&gt;&gt;&gt; I can feel your pain ;-)
&gt;&gt; That&apos;s not the point, but we&apos;ve always had tearing issue reports with nvidia
&gt;&gt; boards and recently got some for intel.
&gt;&gt; Now, if all those intel reporters actually use optimus, that smells suspicious
&gt;&gt; to me ;-)
&gt;&gt;
&gt;&gt;&gt; I want to do gaming on Linux
&gt;&gt; I&apos;ve an nvidia GPU + the blob as well, i&apos;m completely agnostic on this topic
&gt;&gt; and in general the system works nicely. I just want to pin down this issue.
&gt;&gt;
&gt;&gt;&gt; On topic though, as I said, the card is turned off and the nvidia kernel
&gt;&gt;&gt; module is not even loaded, nor is the NVidia GL implementation.
&gt;&gt; How&apos;s the HDMI chip wired? Connected to the nvidia chip or to the intel one
&gt;&gt; (where the nvidia one copies the framebuffer)?
&gt;&gt;
&gt;&gt;&gt; Will test tomorrow. The internal screen is 16:9 though
&gt;&gt; -&gt; cinemascope / panavision / cinemascope55
&gt;&gt;
&gt;&gt; However the much more relevant question is whether the non swapping sync works
&gt;&gt; with the internal screen.
&gt;&gt;
&gt; I can confirm that my main system is NVIDEA-FREE!!
&gt; This is the system I reported (and filmed) the tearing issue on.
&gt; The system has an ASUS Maximus IV gene-Z blahblah board with
&gt;    k2500 sandy bridge and am perfectly happy with the speed of the graphics.
&gt; I just use a single monitor, really the setup is as simple as can be :-)
&gt;
&gt; In addition I want to report the following:
&gt; - The teartest (movie) mentioned earlier also tears in this system.
&gt;     So I think there is at least some chance that if a person reports
&gt; video tearing solved, that
&gt;     my problem is solved as well.
&gt; - I cannot apply a patch - don&apos;t have the time to compile etc.
&gt; - I have a 24&quot; DELL monitor with a resolution of 1920 X 1200...
&gt; - My laptop, with pre-sandy bridge graphics and 1920X1080 screen does
&gt; NOT show tearing in the tear video test.
&gt; This correlates with NO tearing when moving windows manually on that system.
Another not: I did not play the video full screen, just in a window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306142</commentid>
    <comment_count>23</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-15 13:42:38 +0000</bug_when>
    <thetext>&gt; vdpau does not work here (mplayerdoesn&apos;t support it and VLC framerate drops
&gt; down too much to be useful).
I mixed two things up here: VA-API does not work. vdpau I did not even test, no idea how to get that working with optimus.

&gt; How&apos;s the HDMI chip wired? Connected to the nvidia chip or to the intel one (where the nvidia one copies the framebuffer)?
HDMI is connected to the Intel card. To use the NVidia card, I use bumblebee which performs rendering on the 2nd card and copies stuff back. But all the video tests mentioned here were done directly on the Intel card.

&gt;&gt; Will test tomorrow. The internal screen is 16:9 though
&gt; cinemascope / panavision / cinemascope55
Sorry, I do not understand - what are you saying?

&gt; However the much more relevant question is whether the non swapping sync works &gt; with the internal screen.
I only tested with the GL backend: In mplayer, there is no tearing in full-screen mode, but windowed mode has tearing. In VLC, there is tearing in both modes - even though the video covers the entire screen. The fullRepaint condition is still not met, and if I enable the paint plugin the tearing line is visible on the entire width - the &quot;paint&quot; colours also tear.
So, there&apos;s actually no difference here between the internal and the HDMI panel, even though the video aspect ratio matches the internals screen and *not* the HDMI screen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306166</commentid>
    <comment_count>24</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-15 15:01:55 +0000</bug_when>
    <thetext>(In reply to comment #23)
&gt; I mixed two things up here: VA-API does not work. vdpau I did not even test,
&gt; no idea how to get that working with optimus.
vdpau is only available with nvidia, xvmc should work, though.
 
&gt; &gt;&gt; Will test tomorrow. The internal screen is 16:9 though
&gt; &gt; cinemascope / panavision / cinemascope55
&gt; Sorry, I do not understand - what are you saying?
those are cinematic aspects which are all much more narrow than 16:9 - so you&apos;ll get black bars.
 
&gt; I only tested with the GL backend: In mplayer, there is no tearing in
&gt; full-screen mode, but windowed mode has tearing. In VLC, there is tearing in
&gt; both modes - even though the video covers the entire screen. The fullRepaint
&gt; condition is still not met
Have you checked this (with a debug out in the glXSwapBuffer branch?)
Could mean that vlc tears internally and causes partial damage events crossing the retrace spot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306169</commentid>
    <comment_count>25</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-15 15:09:45 +0000</bug_when>
    <thetext>(In reply to comment #24)
&gt; those are cinematic aspects which are all much more narrow than 16:9 - so
&gt; you&apos;ll get black bars.
I see - but I got this teartest video only in one resolution ;-) . However, VLC has some option to stretch the video, and I guess mplayer has that, too. Not that it&apos;s needed currently.

&gt; &gt; I only tested with the GL backend: In mplayer, there is no tearing in
&gt; &gt; full-screen mode, but windowed mode has tearing. In VLC, there is tearing in
&gt; &gt; both modes - even though the video covers the entire screen. The fullRepaint
&gt; &gt; condition is still not met
&gt; Have you checked this (with a debug out in the glXSwapBuffer branch?)
Yes, I used a debug output in that branch. When using mplayer, I get a *lot* of them - as is to be expected, about one per frame. For VLC, there&apos;s just 10 to 20 full-screen redraws during the entire (30sec) video.
With compositing disabled, VLC produces some tearing, but much less than with compositing (comparable to using the XVideo backend and compositing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306303</commentid>
    <comment_count>26</comment_count>
      <attachid>74570</attachid>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-15 20:55:52 +0000</bug_when>
    <thetext>Created attachment 74570
Christmas time

The attached x-mas patch enforces the glXSwapBuffer branch, writing back the frontbuffer into the backbuffer.

Please NOTICE:
- fullscreen memory copy is expensive, not as expensive as fullscreen repaints, but is. No problem on dedicated GPUs with memory speed beyond good and evil, but i&apos;ve NOT tested that on an integrated system so far
- the code assumes we can glXSwapBuffer, rather don&apos;t run it if you can&apos;t (or revert if if freaky things happen ;-)
- the patch can be streamlined (ie. it&apos;s not required to turn the swapInterval on and off and also we can omit some extra drop in/out frames when switching between swapBuffer and partial copies

Happy testing - there *will* be no tearing.... prettyprettyplease not :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306612</commentid>
    <comment_count>27</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-16 20:35:01 +0000</bug_when>
    <thetext>Indeed, I can&apos;t see any tearing with this patch - neither when dragging a plasma widget horizontally at the top of the screen, nor when playing a video either in windowed or in full-screen mode. :)

However, the framerate drops to 30-40fps. I wonder why this is, since I can run some old games (and demos like glxspheres) with 60fps on the NVidia GPU, which also involves copying the ful -screen to the intel card for each frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306617</commentid>
    <comment_count>28</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-16 20:55:07 +0000</bug_when>
    <thetext>- The two GPUs will not share the same memory? (r -&gt; w ./. r/w)
- Also the memory might just get boosted when the nvidia GPU is up.
- Last but not least, the driver may (&quot;Tear free&quot;) perform a sync itself - tried deactivating kwin v&apos;syncing?

I tried to only copy back the dirty memory, but that fails here (happy flicker) - might be related to triple buffering :-(

Other tested things for the record: glWaitVideoSync *is* broken (on nvidia)
Waiting for the sync and then swapping the buffer (instead of using glSwapInterval) causes similar to the present tearing despite the swap/copy back patch is otherwise the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306629</commentid>
    <comment_count>29</comment_count>
    <who name="Brian Hill">brian.m.hill</who>
    <bug_when>2012-10-16 21:32:29 +0000</bug_when>
    <thetext>I backported the patch to 4.9.2 and can confirm that it absolutely kills performance on my system with integrated graphics :

Arch Linux
Mesa 9.0 
xf86-video-intel 2.20.9
Core i7 2630QM
8 Gigabytes DDR3
Intel HD Graphics 3000

With the patch applied, I get an FPS in the teens to mid twenties and there is noticeable lag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306630</commentid>
    <comment_count>30</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-10-16 21:34:23 +0000</bug_when>
    <thetext>Please test with mesa 8.0.4, there are some performance issues with 9.0 on HD3000. See https://bugs.freedesktop.org/show_bug.cgi?id=55998 and https://bugs.kde.org/show_bug.cgi?id=308385</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306667</commentid>
    <comment_count>31</comment_count>
    <who name="Brian Hill">brian.m.hill</who>
    <bug_when>2012-10-17 00:23:24 +0000</bug_when>
    <thetext>With Mesa 8, the speed improves however I am getting graphical corruption with the patch.  It appears to be a problem with the alpha blending when using the feature where you drag windows to the edges of the screen to maximize them; with the patch applied, it flickers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306846</commentid>
    <comment_count>32</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-17 16:11:12 +0000</bug_when>
    <thetext>(In reply to comment #28)
&gt; - The two GPUs will not share the same memory? (r -&gt; w ./. r/w)
No, they won&apos;t. Neither the Xorg nor the Intel driver I have installed support DMA-BUF, let alone the NVidia driver ;-) So the image is copied two times: It&apos;s read back from the NVidia GPU, and then sent to the Intel GPU.

&gt; - Also the memory might just get boosted when the nvidia GPU is up.
I turned on the NVidia card, then tried again - no changes.

&gt; - Last but not least, the driver may (&quot;Tear free&quot;) perform a sync itself -
&gt; tried deactivating kwin v&apos;syncing?
Indeed I can&apos;t see any tearing even after disabling vsync in KWin&apos;s configuration. The framereate goes up to 50-55fps, but it doesn&apos;t reach the 60 it has without the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306901</commentid>
    <comment_count>33</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-17 18:59:18 +0000</bug_when>
    <thetext>With the &quot;old&quot; KDE 4.9.2 compositor, I get 60 fps even when playing a Full-HD video full-screen (using mplayer or VLC, GL backend). So the bandwidth is there, somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306929</commentid>
    <comment_count>34</comment_count>
      <attachid>74612</attachid>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-17 20:26:12 +0000</bug_when>
    <thetext>Created attachment 74612
Hanukkah

If the back and front buffer are in different memory, that means an _additional_ copy for the glXSwapBuffer call.

The new patch has some performance improvements.
1st, it does not copy back the entire buffer but only the required parts
2nd, after a short time (24 frames, 1s for a cinematic movie) it enters a performance mode, assuming the fullscreen mode will continue (and it&apos;s thus not necessary to copy things back)

&quot;2&quot; does obviously not work with VLC, but one could -theoretically- relax that and check whether always the same region is updated.

The patch includes a code refacturing, i&apos;m not sure how easy or possible it will be to port it back to 4.9 :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306972</commentid>
    <comment_count>35</comment_count>
      <attachid>74617</attachid>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-18 03:48:18 +0000</bug_when>
    <thetext>Created attachment 74617
Hanukkah #2

Forgot to restart the syncdelay timer - the first Hanukkah patch could feel chewy - sorry in case someone has already tried it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307464</commentid>
    <comment_count>36</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-19 16:18:40 +0000</bug_when>
    <thetext>(In reply to comment #34)
&gt; The new patch has some performance improvements.
&gt; 1st, it does not copy back the entire buffer but only the required parts
To be honest I do not understand why anything has to be copied back as it was kwin who copied it to the GPU to start with - but I don&apos;t know OpenGL well, so whatever ;-)

&gt; 2nd, after a short time (24 frames, 1s for a cinematic movie) it enters a
&gt; performance mode, assuming the fullscreen mode will continue (and it&apos;s thus
&gt; not necessary to copy things back)
&gt; 
&gt; &quot;2&quot; does obviously not work with VLC, but one could -theoretically- relax
&gt; that and check whether always the same region is updated.
Framerate for a still desktop is 57-58 fps now (opposed to 59-62 in KDE 4.9.2). It drops to ~50fps in full-screen video playback - I could not see any difference between mplayer and VLC. There was no tearing whatsoever :)
While logging in, the screen went black instead of showing the splash screen - not sure if that&apos;s related to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307501</commentid>
    <comment_count>37</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-19 18:43:02 +0000</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #34)
&gt; Framerate for a still desktop is 57-58 fps now (opposed to 59-62 in KDE
&gt; 4.9.2).

That will likely be due to differences in glXSwapInterval and the broken glXWaitVideoSync - 62fps on an 60fps screen should not be possible in the first place.

&gt; It drops to ~50fps in full-screen video playback

also with mplayer or only vith vlc (because on constant fullscreen updates, the back-copying overhead should be omitted and the difference would be _purely_ for the usage of glxSwapInterval)

&gt; any difference between mplayer and VLC. There was no tearing whatsoever :)
At least it works.

&gt; While logging in, the screen went black instead of showing the splash 
&gt; screen - not sure if that&apos;s related to the patch.
Might fall into the same category as the &quot;flickering&quot; effectframes (the problem is that they paint on top of the even undamaged backbuffer, ie. the content below was not repainted, but they are. Would need adaption of that code but is likely fixable)


--- sOT --

&gt; To be honest I do not understand why anything has to be copied back as it
&gt; was kwin who copied it to the GPU to start with - but I don&apos;t know OpenGL
&gt; well, so whatever ;-)
There are two buffers, front and back.
You paint into the backbuffer which is currently not visible (otherwise flicker and tearing would be inavoidable) and when you&apos;re done, move the backbuffer content to the frontbuffer (which powers the screen pixels)
That move can be done by copying parts of the buffer or the entire buffer or (&quot;flipping&quot;) by just telling the GPU that now the front is the backbuffer and vv. (obviously last is fastest, but the buffers must be on the same memory)

Because usually only a minor fraction of the screen is actually changed, kwin renders only that fraction into the backbuffer and then copies the resulting part into the frontbuffer.
Now, if you want to swap buffers (for whatever reason, ours being that the glWaitVideoSync extension is apparently broken) you have to ensure that the entire backfuffer is sane, the part you did not alter in this pass matches the current frontbuffer part.
For that to happen, you have to ensure the backbuffer is a pixelperfect copy of the _current_ frontbuffer (and not the frontbuffer one or two passes ago), therefore it&apos;s necessary to copy the differing parts from the front into the backbuffer before starting the actual painting (of the no to update screen part)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307963</commentid>
    <comment_count>38</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2012-10-21 18:52:10 +0000</bug_when>
    <thetext>(In reply to comment #37)
&gt; For that to happen, you have to ensure the backbuffer is a pixelperfect copy
&gt; of the _current_ frontbuffer (and not the frontbuffer one or two passes
&gt; ago), therefore it&apos;s necessary to copy the differing parts from the front
&gt; into the backbuffer before starting the actual painting (of the no to update
&gt; screen part)
With triple buffering, you have to copy regions updated in the last 2 frames, instead of of the last frame only, so the difference with a full screen composition may be lower when there aren&apos;t many windows.

Btw, see iclke&apos;s comments in http://phoronix.com/forums/showthread.php?74598-Intel-Linux-Driver-Still-Working-To-Address-Tearing
There is no hardware support of synchronized updates on Sandy Bridge or later IGPs, so page flipping is mandatory to avoid tearing.
&quot;MESA_copy_sub_buffer was originally created as an optimisation and all the compositors were encouraged to use it. In retrospect, it was a bad idea, hurting the bandwidth constrained IGP devices the most.&quot;
I wonder why back to front buffer copy would use more bandwidth than front to back copy, or full screen composition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307968</commentid>
    <comment_count>39</comment_count>
    <who name="">root</who>
    <bug_when>2012-10-21 19:16:21 +0000</bug_when>
    <thetext>I would really appreciate complete (read sole) page flipping support.
Because right now with a multi-monitor setup and recent intel graphics only one monitor is ever tear-free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307970</commentid>
    <comment_count>40</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-21 19:25:51 +0000</bug_when>
    <thetext>(In reply to comment #38)

&gt; With triple buffering, you have to copy regions updated in the last 2
Yes, the patch does so. But i didn&apos;t want to make things even more complex ;-)

&gt; so the difference with a full screen composition may be lower
No.
1. Because really most of the time a very minor fraction is updated and often it&apos;s even the same (eg. a line in a texteditor or an animated icon)
2. Because fullscreen composition would mean to actually repaint the entire screen all the time, what includes all effect processing and all blurring (Philip would not waste any time on discussion, but just kill me if i tried to wipe all his optimizations in that regard. And he would be right -while not successful ;-)- in doing so.)

&gt; I wonder why back to front buffer copy would use more bandwidth than front
&gt; to back copy
Does not (should not) - the buffers should be of same speed on read and write.
But copying back to front would require a working waitVideoSync (to avoid tearing) what is apparently no longer the case on intel chips and was for a long time not on nvidia (and likely AMD neither) - it appears to me the syncing happens on the end of the retrace, but given that GPUs _want_ buffer swapping and glSwapInterval (eg. for power savings) that doesn&apos;t matter either.

&gt; or full screen composition.
Will not. Reprocessing the entire event chain consumes CPU and GPU + VRAM (to write the raster result) - if that should still be cheaper than copying a memory fraction, i&apos;m lost (but given bug reports for some plasmoids causing full desktop repaints, i doubt this is -or at least &quot;was&quot;- the case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307972</commentid>
    <comment_count>41</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-21 19:28:28 +0000</bug_when>
    <thetext>(In reply to comment #39)
&gt; I would really appreciate complete (read sole) page flipping support.
&gt; Because right now with a multi-monitor setup and recent intel graphics only
&gt; one monitor is ever tear-free.

I would not expect the IGP to be able to sync to more than one screen at all.
You can try the patch to check, it does that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307974</commentid>
    <comment_count>42</comment_count>
    <who name="">root</who>
    <bug_when>2012-10-21 19:41:15 +0000</bug_when>
    <thetext>I would need a 4.9 backport since my knowledge of C++ and graphics is very limited and in 4.9 there simply is no glxbackend.cpp.

Apart from that the HD3000 can sync at least two screens, works on windows 7 (aero only though, I think that is normal).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307977</commentid>
    <comment_count>43</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2012-10-21 20:07:20 +0000</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #38)
&gt; &gt; or full screen composition.
&gt; Will not. Reprocessing the entire event chain consumes CPU and GPU + VRAM
&gt; (to write the raster result) - if that should still be cheaper than copying
&gt; a memory fraction, i&apos;m lost (but given bug reports for some plasmoids
&gt; causing full desktop repaints, i doubt this is -or at least &quot;was&quot;- the case)
I wouldn&apos;t be surprised if it would be the case when the composition is minimal (for example with a full screen or maximized window) one some GPUs : textures and back buffers don&apos;t necessarily have the same tiling format, so the texture to back buffer copy could be faster (or slower) than front to back buffer copy.
In the future, with PRIME offloading, the front to back buffer copy may be slow, when kwin is running on the discrete GPU, with front and back buffers in IGP memory. Deciding when it&apos;s better to render a full frame, copy from front buffer, or perhaps render to an intermediate surface will become more difficult (hopefully the hardware getting faster means less optimizations are necessary, but if high DPI screen become popular that won&apos;t be the case soon).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307993</commentid>
    <comment_count>44</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2012-10-21 21:01:44 +0000</bug_when>
    <thetext>Looking at your patch, the &quot;damage = lastDamage() | secondLastDamage;&quot; is done for buffer swap case, but without double/triple buffer testing, so double buffering suffers from having a bigger than necessary copy.

One thing which may matter too : to be able to copy from front to back buffer, you wait for the rendering to be finished with glXWaitGL. It means that even with triple buffering, only one frame is processed at a time. It would be better to do the copy asynchronously, or at the end of the rendering if possible to allow more parallelism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308225</commentid>
    <comment_count>45</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-22 16:53:00 +0000</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; It drops to ~50fps in full-screen video playback
&gt; 
&gt; also with mplayer or only vith vlc (because on constant fullscreen updates,
&gt; the back-copying overhead should be omitted and the difference would be
&gt; _purely_ for the usage of glxSwapInterval)
With both players. Debugging shows that the fullRepaintCounter actually never exceeds 9.
Would 0-region updates in between hurt? There are of course less than 60fps in the video file.

Also, I noticed that in the fps counter, these green bars (which I assume measure some kind of time-per-frame?) are all as high as the first black bar. In KDE 4.9, they acre actually even smaller, less than half of the first black bar. Is that to be expected, or does it indicate a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308285</commentid>
    <comment_count>46</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-22 20:10:00 +0000</bug_when>
    <thetext>(In reply to comment #44)
&gt; Looking at your patch, the &quot;damage = lastDamage() | secondLastDamage;&quot; is
&gt; done for buffer swap case, but without double/triple buffer testing, so
&gt; double buffering suffers from having a bigger than necessary copy.

There&apos;s no such branching since (aside the patch is absolutely not ready for shipping, lacks option and better handling if glSwapInterval isn&apos;t available) because i failed to figure a &quot;legal&quot; way to determine whether there&apos;s some triple buffering in place (aside running a couple of glSwapBuffers and see how long that took...)

&gt; One thing which may matter too : to be able to copy from front to back
&gt; buffer, you wait for the rendering to be finished with glXWaitGL. It means
&gt; that even with triple buffering, only one frame is processed at a time.
The call right after the copy should be superflous in the triple buffering altogether, but the (pre-existing) one on the end is required - or you get laggy processing.
Reason: see above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308291</commentid>
    <comment_count>47</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-22 20:24:16 +0000</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #37)
&gt; &gt; &gt; It drops to ~50fps in full-screen video playback
&gt; &gt; 
&gt; &gt; also with mplayer or only vith vlc (because on constant fullscreen updates,
&gt; &gt; the back-copying overhead should be omitted and the difference would be
&gt; &gt; _purely_ for the usage of glxSwapInterval)

&gt; With both players. Debugging shows that the fullRepaintCounter actually
&gt; never exceeds 9.
Stupid me - you got the FPS counter active -&gt; triggers partial repaints every now and then.
We could need a offline FPS option (ie. do not actively repaint the thing, but print to stdout or so)

&gt; Also, I noticed that in the fps counter, these green bars (which I assume
&gt; measure some kind of time-per-frame?)
I have _no_ idea what that thing does ;-)
However the green line is always on the bottom for me.
But right now i&apos;ve got the &quot;glXWaitGL();&quot; deactivated (see last comment)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308303</commentid>
    <comment_count>48</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2012-10-22 20:46:05 +0000</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #44)
&gt; &gt; One thing which may matter too : to be able to copy from front to back
&gt; &gt; buffer, you wait for the rendering to be finished with glXWaitGL. It means
&gt; &gt; that even with triple buffering, only one frame is processed at a time.
&gt; The call right after the copy should be superflous in the triple buffering
&gt; altogether, but the (pre-existing) one on the end is required - or you get
&gt; laggy processing.
&gt; Reason: see above.
The added glXWaitGL is before the glCopyPixels, not after. I&apos;m not sure how you could just remove it since glXSwapBuffers should return immediately in triple buffering mode. If the glCopyPixels schedules the copy to start after the end of the previous frame, it will work, but it probably will delay what you do after (rendering of updated regions) which doesn&apos;t depend on the previous frame, so it&apos;s still not optimal.
I more familiar with EGL than GLX, so perhaps I&apos;m wrong, but IMHO the best synchronous solution (something better could perhaps be done with threads) would be :
 - render updated regions of frame N
 - copy back unchanged parts from frame N-1 into frame N
 - render updated regions of frame N+1
 - copy back unchanged parts from frame N into frame N+1
 - ...
With this order, you can start rendering frame N+1 (at least GL calls, and perhaps GPU parallelism) when frame N completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308797</commentid>
    <comment_count>49</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-24 15:20:06 +0000</bug_when>
    <thetext>(In reply to comment #47)
&gt; &gt; With both players. Debugging shows that the fullRepaintCounter actually
&gt; &gt; never exceeds 9.
&gt; Stupid me - you got the FPS counter active -&gt; triggers partial repaints
&gt; every now and then.
&gt; We could need a offline FPS option (ie. do not actively repaint the thing,
&gt; but print to stdout or so)
I disabled the FPS counter, but even then the debug output shows that the full screen repaint counter does not exceed 5.

&gt; &gt; Also, I noticed that in the fps counter, these green bars (which I assume
&gt; &gt; measure some kind of time-per-frame?)
&gt; I have _no_ idea what that thing does ;-)
&gt; However the green line is always on the bottom for me.
How far to the bottom?

&gt; But right now i&apos;ve got the &quot;glXWaitGL();&quot; deactivated (see last comment)
There are a bunch of them in that function, which one are you referring to?

Also, with this patch applied I can not logout properly anymore. Or maybe logout is entirely broken in master, I do not know...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309931</commentid>
    <comment_count>50</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-27 12:42:35 +0000</bug_when>
    <thetext>I did some more - crude - experimenting and changed SceneOpenGL::paint to always issue a full-screen repaint. That increased the framerate to stable 60fps even when playing a full-screen window. However the diagram shown in the left part of the FPS window is not always green now, but alternating between short green and yellow phases (each ~5-10 pixels wide). Whatever that means, I believe it is related to frame latency. Disabling v-sync makes this much worse: The framerate stays at 60fps, but the latency (or whatever) bar is very high now, always yellow, sometimes even green. The logout effect works fine in both cases, as well as the overlays to put the window in a screen edge.

So somehow, copying stuff back and forth is actually slower than always re-rendering it... The compiz developers made the same experience, see https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/901097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309951</commentid>
    <comment_count>51</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-10-27 13:25:51 +0000</bug_when>
    <thetext>given that it should be possible that we add an option to always do full 
repaints.

What I would like to see are tests with the OpenGL on EGL case which is 
possible with 4.10, though I think that it doesn&apos;t make any difference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309966</commentid>
    <comment_count>52</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-27 14:06:52 +0000</bug_when>
    <thetext>(In reply to comment #50)
&gt; I did some more - crude - experimenting and changed SceneOpenGL::paint to
&gt; always issue a full-screen repaint. That increased the framerate to stable
&gt; 60fps even when playing a full-screen window.

Actually esp. that case is hardly surprising, given that you stated to not enter the pure swapping and the fullscreen window will bypass most processing.

What happens if you play a windowed movie, eg 640x480 and actually have blurring regions (panels, windows) on the screen and what impact next to the (capped) framerate does that have on the CPU load / GPU temperature?


&gt; Whatever that means, I believe it is related to frame latency.
The right area corresponds to the repainted area where the left area reflects the time requred to paint a frame - large bars mean &quot;long paint&quot; ie. they&apos;re responsible for lowering the FPS in the effects (ie. the buffer flush and by this back-copying is *not* included here)
A high bar here however lowers the mean FPS.

&gt; Disabling v-sync makes this much worse: The framerate stays at 60fps, but the latency (or whatever)
&gt; bar is very high now
That actually makes little sense - w/o seeing your actual changes this is hard to explain.

&gt; So somehow, copying stuff back and forth is actually slower than always
&gt; re-rendering it... The compiz developers made the same experience, see
&gt; https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/901097

I&apos;d be very careful on such observations becasue they do not include relevant system information like used GPU and screensize.
Just repainting everything can free some CPU load (because several region intersections etc. don&apos;t have to happen) by adding GPU overhead (pixel processing) - so if you&apos;ve a weak CPU (eg. P4) alongside a powerfull GPU (nvidia already had the 6000 at that time, did they?) this can indeed be a nice trade-off, but might severely punish weak GPU systems (IGP, budget GPU)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309969</commentid>
    <comment_count>53</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-27 14:12:59 +0000</bug_when>
    <thetext>&gt; given that it should be possible that we add an option to always do full 
&gt; repaints.
Maybe that should be bound to the v-sync option, as this bug suggests that v-sync can&apos;t be done reliably without some form of full-screen update.
Is there potential for simplification in the code managing the region? I don&apos;t know how expensive all these region operations are.

Another idea I had: Instead of copying the changed parts of the (new) front buffer to the back buffer, and then painting the next frame there (which also makes assumptions about where that backbuffer comes from), maybe it is better to copy the parts that are *outside* the damage region from the current front buffer to the back buffer before doing the SwapBuffers. That may copy identical data, but at least it won&apos;t copy twice the full screen if the damage region is almost the entire screen. I&apos;ll try to implement that.

&gt; What I would like to see are tests with the OpenGL on EGL case which is 
&gt; possible with 4.10, though I think that it doesn&apos;t make any difference
I do have master compiled and the mesa libegl (including -dev) installed. How can I test the EGL backend?
Also, I saw some comments saying that v-sync is not supported with EGL, is that still true?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309982</commentid>
    <comment_count>54</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-27 14:42:07 +0000</bug_when>
    <thetext>(In reply to comment #52)
&gt; What happens if you play a windowed movie, eg 640x480 and actually have
&gt; blurring regions (panels, windows) on the screen and what impact next to the
&gt; (capped) framerate does that have on the CPU load / GPU temperature?
I moved the video window underneath the panel and the expanded calendar (the largest blurred regions I have), with no change in framerate.
Using the &quot;Grid&quot; Alt-Tab-Switcher (which is almost a full-screen blur region) with the video playing behind it maximized, framerate drops below 20fps - but that happens on my KDE 4.9 installation as well. Using a still background, it&apos;s 30fps for full-screen repaints and 60fps for KDE 4.9.

&gt; &gt; Disabling v-sync makes this much worse: The framerate stays at 60fps, but the latency (or whatever)
&gt; &gt; bar is very high now
&gt; That actually makes little sense - w/o seeing your actual changes this is
&gt; hard to explain.
The yellow peeks (with v-sync) going beyond the lowest bar are a bit below the 20fps line, so I think that&apos;s 17fps - the time for one frame. Actually I was surprised to find out that usually, that time is much lower: Since the fps plugin measures the time between pre- and post-paint, I&apos;d have it expected to include the swap buffers blocking for the v-sync. But then I noticed there is complicated timer logic in composite.cpp to somehow manually sync (?), and I may have broken it when I patched around, as I don&apos;t understand it - I call startRenderTimer directly after swapping buffers. I changed setCompositeTimer to always wait &lt;=1ms (which may be complete nonsense), now the &quot;draw time&quot; bar is at constant 17fps with v-sync enabled (I also changed the fps widget to move the lowest line to 17fps, so I can easily see that).
I&apos;ll soon start to experiment with a simple test app to learn more about GLX and v-sync etc.
Should kwin avoid blocking in glXSwapBuffers, or is that code just an attempt to get working v-sync even without glXSwapBuffers?

&gt; I&apos;d be very careful on such observations becasue they do not include
&gt; relevant system information like used GPU and screensize.
&gt; Just repainting everything can free some CPU load (because several region
&gt; intersections etc. don&apos;t have to happen) by adding GPU overhead (pixel
&gt; processing) - so if you&apos;ve a weak CPU (eg. P4) alongside a powerfull GPU
&gt; (nvidia already had the 6000 at that time, did they?) this can indeed be a
&gt; nice trade-off, but might severely punish weak GPU systems (IGP, budget GPU)
That was just an observation for my specific system, with a 1920x1200 screen and the HD 3000 built into a 2nd-gen Core i5.
I read quite often recently that always doing a buffer-swap is &quot;the way to go&quot;, e.g. in some Wayland talks and in the Intel bugreport about the v-sync issues (where they say that Windows Vista+ always does a buffer swap, so the hardware guys are optimizing for that case, and it actually saves noticeable amounts of power). I don&apos;t have the knowledge to say how true that actually is, so I just do my guesses and experiments, restricted to my own system. I am, however, using an IGP and therefore operating at the lower part of the GPU computational power spectrum, even though it&apos;s a quite recent IGP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309983</commentid>
    <comment_count>55</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-10-27 14:42:48 +0000</bug_when>
    <thetext>&gt; Is there potential for simplification in the code managing the region? I
&gt; don&apos;t know how expensive all these region operations are.
when running callgrind I can see that we spend most of our CPU time on region 
intersections, translations etc. But it&apos;s very difficult to say whether that 
matters at all, given that the GPU usage cannot be profiled with callgrind. 
Optimizing that part is non-trivial, I have some ideas but so far not yet the 
time to implement them.
&gt; 
&gt; Another idea I had: Instead of copying the changed parts of the (new) front
&gt; buffer to the back buffer, and then painting the next frame there (which
&gt; also makes assumptions about where that backbuffer comes from), maybe it is
&gt; better to copy the parts that are *outside* the damage region from the
&gt; current front buffer to the back buffer before doing the SwapBuffers. That
&gt; may copy identical data, but at least it won&apos;t copy twice the full screen
&gt; if the damage region is almost the entire screen. I&apos;ll try to implement
&gt; that.
For most cases that will be more in fact. I&apos;m just typing in an editor, the 
only changes are new characters being added. Given that this is a very small 
area (max 100x100) compared to the 3200x1080 of my setup it doesn&apos;t sound 
healthy ;-)
&gt; 
&gt; &gt; What I would like to see are tests with the OpenGL on EGL case which is
&gt; &gt; possible with 4.10, though I think that it doesn&apos;t make any difference
&gt; 
&gt; I do have master compiled and the mesa libegl (including -dev) installed.
&gt; How can I test the EGL backend?
KWIN_OPENGL_INTERFACE=egl kwin --replace &amp;

It should tell somewhere:
KWin::SceneOpenGL::createScene: Forcing EGL native interface through 
environment variable

Be aware that we had many reports about non functional EGL backend with Mesa 
9.0
&gt; Also, I saw some comments saying that v-sync is not supported with EGL, is
&gt; that still true?
yes, we do not v-sync in the EGL case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309988</commentid>
    <comment_count>56</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-27 14:59:09 +0000</bug_when>
    <thetext>(In reply to comment #55)
&gt; For most cases that will be more in fact. I&apos;m just typing in an editor, the 
&gt; only changes are new characters being added. Given that this is a very small 
&gt; area (max 100x100) compared to the 3200x1080 of my setup it doesn&apos;t sound 
&gt; healthy ;-)
Doesn&apos;t a full-screen repaint do the same thing, i.e. copy the full window texture again and again for each frame?


&gt; KWIN_OPENGL_INTERFACE=egl kwin --replace &amp;
&gt; 
&gt; It should tell somewhere:
&gt; KWin::SceneOpenGL::createScene: Forcing EGL native interface through 
&gt; environment variable
&gt; 
&gt; Be aware that we had many reports about non functional EGL backend with Mesa 
&gt; 9.0
Debian testing is still at Mesa 8.something, and this is working fine. There&apos;s an error message that libEGL &quot;failed to create a pipe screen&quot;, but everything looks just normal. However, there&apos;s of course heaving tearing without v-sync...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309992</commentid>
    <comment_count>57</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-27 15:08:20 +0000</bug_when>
    <thetext>(In reply to comment #54)
&gt; Using a still background, it&apos;s 30fps for full-screen repaints and 60fps for KDE 4.9
And that&apos;s actually the relavant case - ie. you&apos;ll usually have the panel with a static background, maybe some NastyNotification (tm) and constant screen updates somewhere else (&quot;PointlessProcessPrintingPlasmoid&quot; (c), &quot;F***FancyFlashFrame&quot; (c)) - ie. this test exposes that you actually will suffer from repainting fullscreen all the time.

How is the preformance here using the buffy copying variant? If (likely) much better, what should happen would be to more easily enter the pure buffer swapping render path (eg. whenever there&apos;s a constantly updating region OR (not! XOR) a fullscreen repaint and trigger the latter when the updated screen region is &gt; 90% of the screen)


&gt; But then I noticed there is complicated timer logic

=)

&gt; in composite.cpp to somehow manually sync (?)
The purpose is to stay in event processing as long as possible and don&apos;t waste too much time on the GL code, esp. not waiting for the vertical sync.
What might happen here is that the granted padding is to small for your IGP and the buffer copying (thus you might loose a frame and eventually even block 16ms for it).

What you want to try for this is to raise the VBlankTime config option
kwriteconfig --file kwinrc --group Compositing --key VBlankTime n
the default for n is 6144 (about the slowest retrace i found in HW)

 and I may have broken it when I patched around, as I
&gt; don&apos;t understand it - I call startRenderTimer directly after swapping
&gt; buffers. I changed setCompositeTimer to always wait &lt;=1ms (which may be
&gt; complete nonsense)
you&apos;re passing a lot of time to the renderer and none to the event processing what might lead to laggy input handling.

&gt; Should kwin avoid blocking in glXSwapBuffers, or is that code just an
&gt; attempt to get working v-sync even without glXSwapBuffers?
the timer call is required as long as rendering does not happen in an extra thread.
It maintains framerate in the unsynced case and avoid long blocks in the synced one.
 
&gt; is, so I just do my guesses and experiments, restricted to my own system. I
&gt; am, however, using an IGP and therefore operating at the lower part of the
&gt; GPU computational power spectrum, even though it&apos;s a quite recent IGP.
The HD Graphics are MUCH MUCH MUCH MORE powerful than the former GMA chips.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309993</commentid>
    <comment_count>58</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-27 15:13:06 +0000</bug_when>
    <thetext>(In reply to comment #56)
&gt; Doesn&apos;t a full-screen repaint do the same thing, i.e. copy the full window
&gt; texture again and again for each frame?

Yes, but copying the buffer might not have the same performance as coyping a texture and - more important - it should not be the goal to turn the costs of a blinking cursor into those of a scrolling fullscreen browser.

&gt; Debian testing is still at Mesa 8.something, and this is working fine.
&gt; There&apos;s an error message that libEGL &quot;failed to create a pipe screen&quot;,
afaics that means you get indirect rendering, thus no syncing. Virtual machine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309997</commentid>
    <comment_count>59</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-10-27 15:24:00 +0000</bug_when>
    <thetext>&gt; &gt; Debian testing is still at Mesa 8.something, and this is working fine.
&gt; &gt; There&apos;s an error message that libEGL &quot;failed to create a pipe screen&quot;,
&gt; 
&gt; afaics that means you get indirect rendering, thus no syncing. Virtual
&gt; machine?
Nope, that warning seems normal. I get it on my Sandybridge (and Debian 
testing), too. But I do not get it on the radeon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310178</commentid>
    <comment_count>60</comment_count>
      <attachid>74843</attachid>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-28 11:52:40 +0000</bug_when>
    <thetext>Created attachment 74843
low-copy buffer swap

(In reply to comment #57)
&gt; &gt; don&apos;t understand it - I call startRenderTimer directly after swapping
&gt; &gt; buffers. I changed setCompositeTimer to always wait &lt;=1ms (which may be
&gt; &gt; complete nonsense)
&gt; you&apos;re passing a lot of time to the renderer and none to the event
&gt; processing what might lead to laggy input handling.
Any feedback of the input handling is going through the renderer, so how could I notice a difference? I assume if kwin blocks in the buffer swap, the events are queued up, all processed at once when the frame is done, and then the next frame comes.
Even with the timer logic, I sometimes see almost 15msec spent in the renderer while being at 59-61 fps. Does that mean the sleep time is calculated too short?

(In reply to comment #58)
&gt; Yes, but copying the buffer might not have the same performance as coyping a
&gt; texture and - more important - it should not be the goal to turn the costs
&gt; of a blinking cursor into those of a scrolling fullscreen browser.
You are right it feels really ugly to copy huge loads of data for a little blinking cursor. I don&apos;t know how much memory bandwidth an average system has today, but constantly wasting ~500 MByte/s (assume 4 bytes per pixel) for a still full-HD screen should not be necessary.
I made an attempt at a solution which copies only data which changed in the last frame, but not in the current - so when playing a full-screen video, no unnecessary copies are done, but when little changes on the screen, only small copies are necessary. I needed to copy some more (possibly for the same reason you needed the secondLastDamage in your patch), but attached patch seems to work:
* I get 60fps when playing a full-screen video
* I get 60fps when using the &quot;Grid&quot; Alt-Tab switcher in a still background
* Framerate of course still drops when the blurred background changes - is my GPU really not capable of blurring 60 frames a second?

The rectangles for indicating when a window snaps to a side of the screen are broken: They fill up to become completely white. This can be &quot;fixed&quot; by always doing a full-screen repaint, which of course has other issues. They might make assumptions about front- and backbuffer which no longer hold.
I have some commented-out code in the patch to perform a full-screen repaint for each large repaint, which however does not seem to make a performance difference. A possible (CPU-side) optimization might be to pass a NULL pointer (instead of a region) to the paintScreen function when a full-screen repaint is done - in this case, it could skip all the QRegion computations. That would need changes in all effects though.
It&apos;d be interesting to see how this patch performs on other machines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310906</commentid>
    <comment_count>61</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-30 17:28:29 +0000</bug_when>
    <thetext>Some notes on the EGL backend:
* vsync does not work as KWin requests buffer preservation. That means that SwapBuffers actually copies the back- to the frontbuffer, which is not only horribly inefficient but also not synchronized. After turning buffer preservation off, eglSwapInterval works as expected (with my drivers and hardware).
* There&apos;s an interesting extension: EGL_NOK_swap_region. It is not official, but implemented by Mesa. I implemented a patch using this extension. Unfortunately, the Mesa implementation does not synchronize this function. The official documentation for that extension was somewhere on symbian.org, but I can&apos;t find it anymore, so I don&apos;t know what the exact intention was. So, we are again stuck with SwapBuffers as the only reliable way to synchronize with the vblank, which means we must have a complete backbuffer for each frame.
I think the patch I wrote for the GLX backend works (in exactly the same manner) for EGL was well: My observations show that both use three buffers here. It could even be put into scene_opengl. However, like the Hanukkah patch, it relies on the driver actually re-using the backbuffers, and there is no good way for KWin to detect otherwise. If that&apos;s a reasonable assumption, the code could be greatly simplified as the only remaining backend-specific action is the actual {glX,egl}SwapBuffers call - except for the single-buffered GLX case.

What&apos;s the reason for the flush/swap happening in prepareRenderingFrame, i.e. one frame too late? Is that used for the timing calculation, that the SwapBuffers will be the very first thing done in Scene::paint, so we can sleep until right before it? I can of course change my patch to perform the back-to-front copying in endRenderingFrame, so flushBuffer starts with glXSwapBuffers. This doesn&apos;t prevent the constant yellow spikes (~12-16ms) in the fps diagram though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310910</commentid>
    <comment_count>62</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-10-30 17:39:56 +0000</bug_when>
    <thetext>On Tuesday 30 October 2012 17:28:29 you wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt; 
&gt; --- Comment #61 from Ralf Jung &lt;post@ralfj.de&gt; ---
&gt; Some notes on the EGL backend:
&gt; * vsync does not work as KWin requests buffer preservation. That means that
&gt; SwapBuffers actually copies the back- to the frontbuffer, which is not only
&gt; horribly inefficient but also not synchronized. After turning buffer
&gt; preservation off, eglSwapInterval works as expected (with my drivers and
&gt; hardware).
I&apos;m fine with changing the buffer preservation. Not exactly sure why I used it 
at all - might be useful for embedded devices.
&gt; * There&apos;s an interesting extension: EGL_NOK_swap_region.
never heard of this extension, in fact never heard of any _NOK_ extension.
&gt; 
&gt; What&apos;s the reason for the flush/swap happening in prepareRenderingFrame,
&gt; i.e. one frame too late? Is that used for the timing calculation, that the
&gt; SwapBuffers will be the very first thing done in Scene::paint, so we can
&gt; sleep until right before it? I can of course change my patch to perform the
&gt; back-to-front copying in endRenderingFrame, so flushBuffer starts with
&gt; glXSwapBuffers. This doesn&apos;t prevent the constant yellow spikes (~12-16ms)
&gt; in the fps diagram though.
it&apos;s mostly relevant for the GLX code with the waitSync, as it&apos;s an active 
wait. It would block the complete event processing causing the next frame to 
take too long</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310917</commentid>
    <comment_count>63</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-10-30 18:00:34 +0000</bug_when>
    <thetext>(In reply to comment #62)
&gt; &gt; * vsync does not work as KWin requests buffer preservation. That means that
&gt; &gt; SwapBuffers actually copies the back- to the frontbuffer, which is not only
&gt; &gt; horribly inefficient but also not synchronized. After turning buffer
&gt; &gt; preservation off, eglSwapInterval works as expected (with my drivers and
&gt; &gt; hardware).
&gt; I&apos;m fine with changing the buffer preservation. Not exactly sure why I used
&gt; it 
&gt; at all - might be useful for embedded devices.
Currently, flushBuffer relies on it: It copies the bounding rect of the damaged region from the back- to the frontbuffer, which wouldn&apos;t work otherwise as the rest (non-damaged) pat of the backbuffer can have any old garbage in it. Also, if the PostSubBuffer extension is not available, flushBuffer always performs a SwapBuffer, which again relies on a completely intact backbuffer.

&gt; it&apos;s mostly relevant for the GLX code with the waitSync, as it&apos;s an active 
&gt; wait. It would block the complete event processing causing the next frame to 
&gt; take too long
Isn&apos;t eglSwapBuffers (with working v-sync) an &quot;active&quot; wait as well, in the sense that it blocks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310924</commentid>
    <comment_count>64</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-10-30 18:31:11 +0000</bug_when>
    <thetext>(In reply to comment #63)

&gt; Isn&apos;t eglSwapBuffers (with working v-sync) an &quot;active&quot; wait as well, in the
&gt; sense that it blocks?

waitVideoSync will block unconditionally while glSwapInterval(1) glSwapBuffers() will block in case of double, but (should) not for triple buffering - so it depends on what EGL says about that part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312335</commentid>
    <comment_count>65</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-04 12:10:18 +0000</bug_when>
    <thetext>What&apos;s the way to go forward here? I think the most interesting question is: Is it acceptable/a good idea to rely on the driver re-using the backbuffer? The extension https://www.opengl.org/registry/specs/EXT/glx_buffer_age.txt would actually allow KWin to know when a backbuffer is re-used, but it is not implemented in Mesa 8.

Looking at other compositors, if I understand the Clutter code properly it performs a full-screen redraw each time. By only adding the full screen to the damage area very late in KWin&apos;s paintSimpleScreen (after calling prePaintWindow), I was able to significantly boost the performance even with a full-screen blur region: It&apos;s ~45fps now. Maybe the blur effect can be further optimized.

Weston seems to rely on backbuffer re-usage. It does not copy front-buffer pixels to the backbuffer though, but instead keeps track of a damaged region for each backbuffer (which, however, is equivalent to remembering the last two or three damages) to know what to actually re-paint. The problem is that KWin has effect plugins, which can extend to the damaged region, so it is not straight forward to implement that here: We need a place where the full region that will be re-painted for the current frame is known, but nothing has been drawn yet so the region to be re-drawn can be extended arbitrarily. I implemented this locally, the observable behaviour is similar to the &quot;copy from frontbuffer&quot; patch - I am unsure which version is preferable, but extending the re-drawn area sounds cleaner to me (with my very limited GLX/OpenGL experience...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312360</commentid>
    <comment_count>66</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-11-04 13:38:36 +0000</bug_when>
    <thetext>I think following Weston&apos;s approach is probably the best one as I assume that 
Kristian knows what is best with Mesa&apos;s drivers.

We should know the actual damage area after the effects have modified it, once 
it goes back into the scene. So it should be possible to keep a queue of the 
last frames damage areas.

Btw. we have quite some time to get it right as I think that&apos;s already too 
late for 4.10 (we are past soft feature freeze).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312365</commentid>
    <comment_count>67</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-04 13:46:32 +0000</bug_when>
    <thetext>(In reply to comment #66)
&gt; I think following Weston&apos;s approach is probably the best one as I assume
&gt; that 
&gt; Kristian knows what is best with Mesa&apos;s drivers.
I will open a review request later today.

&gt; We should know the actual damage area after the effects have modified it,
&gt; once 
&gt; it goes back into the scene. So it should be possible to keep a queue of the 
&gt; last frames damage areas.
I think I found the right spot in paintSimpleScreen. If not, you&apos;ll probably complain during review ;-)

&gt; Btw. we have quite some time to get it right as I think that&apos;s already too 
&gt; late for 4.10 (we are past soft feature freeze).
So you think this is a feature? That&apos;s not for me to decide, of course.
Do you think a simpler patch which just fixes tearing for full-screen repaints could still go into 4.10? Something similar to Thomas&apos; first patch (https://git.reviewboard.kde.org/r/106833/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312367</commentid>
    <comment_count>68</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-11-04 13:55:03 +0000</bug_when>
    <thetext>(In reply to comment #67)
&gt; &gt; Btw. we have quite some time to get it right as I think that&apos;s already too 
&gt; &gt; late for 4.10 (we are past soft feature freeze).
&gt; So you think this is a feature?
It&apos;s not really a feature, neither really a bug fix. It changes the way how we render and it could introduce regressions for non-Mesa drivers, which is why I might consider it as a &quot;feature&quot;. In the end it depends on how the code looks like.

And &quot;tear-free&quot; is a feature, isn&apos;t it ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312384</commentid>
    <comment_count>69</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-11-04 14:37:56 +0000</bug_when>
    <thetext>(In reply to comment #68)
&gt; we render and it could introduce regressions for non-Mesa drivers

FTR: the nvidia blob is the one driver for which glWaitVideoSync is broken ever since.

With the slight refactor of the Hanukka patch it should be possible to preserve the old behavior and introduce the buffer copying as option (even secretly, ie. w/o GUI ;-)

@Ralf
The major aspect in your patch is the &quot;inverted&quot; damage calculation, correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312386</commentid>
    <comment_count>70</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-04 14:50:47 +0000</bug_when>
    <thetext>&quot;Has 1 bug less&quot; is also a feature... ;-)

But I agree it needs thorough testing. I&apos;ll split the patch into two, one which I consider safe, and one with the actual &quot;always page-flip&quot; magic. You can find the review request at https://git.reviewboard.kde.org/r/107194/ .

(In reply to comment #69)
&gt; @Ralf
&gt; The major aspect in your patch is the &quot;inverted&quot; damage calculation, correct?
In the one I posted here, right. That was necessary to get 60fps during video playback. I think the problem was that your patch always copied loads of stuff back after the swapping, even if most of that would be overwritten by the next frame. That&apos;s avoided by my inverted logic.
The patch I submitted for review however works completely different, it makes sure the actual rendering is done on the slightly larger area to fix the current backbuffer. That&apos;s the approach taken by Weston as well. It kind of replaces pixel copying by texture drawing - I don&apos;t know which is faster ;-) . It also tries to inject the additional damage late in the drawing process, so that caching effects (like the blur effect) only get the &quot;real&quot; damage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312388</commentid>
    <comment_count>71</comment_count>
    <who name="RussianNeuroMancer">russianneuromancer</who>
    <bug_when>2012-11-04 14:56:06 +0000</bug_when>
    <thetext>&gt; But I agree it needs thorough testing. 
So maybe implement this optionally, like Thomas propose? It exactly allow to do thorough testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312393</commentid>
    <comment_count>72</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-04 15:05:34 +0000</bug_when>
    <thetext>(In reply to comment #71)
&gt; &gt; But I agree it needs thorough testing. 
&gt; So maybe implement this optionally, like Thomas propose? It exactly allow to
&gt; do thorough testing.
Sure, if the approach is accepted, one could make it optional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312437</commentid>
    <comment_count>73</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-11-04 18:10:44 +0000</bug_when>
    <thetext>https://git.reviewboard.kde.org/r/107198/
patch optionally preserving current behavior and providing the back-copying one in addition.

This obsoletes the Hanukkah patch as well as the low-copy buffer swapping one (as it&apos;s essentially a merge of them)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312438</commentid>
    <comment_count>74</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-11-04 18:18:44 +0000</bug_when>
    <thetext>Thank you so much! You did a big work. Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315172</commentid>
    <comment_count>75</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-11-13 15:18:38 +0000</bug_when>
    <thetext>Works for me after upgrading to kubuntu 4.9.3 via backports PPA
Devels, thx for the effort, from a happy user!
Not sure if I should set this to resolved now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315182</commentid>
    <comment_count>76</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-13 15:57:00 +0000</bug_when>
    <thetext>On my system, nothing at all changed from 4.9.2 to 4.9.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315193</commentid>
    <comment_count>77</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-11-13 16:38:25 +0000</bug_when>
    <thetext>Ubuntu might have either injected one of the patches or the copySubBuffer / waitVideoSync / glSyncInterval situation might have been altered in the driver (in case KDE wasn&apos;t the very only thing upgraded)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315228</commentid>
    <comment_count>78</comment_count>
    <who name="">root</who>
    <bug_when>2012-11-13 18:12:35 +0000</bug_when>
    <thetext>Unfortunately, the mentioned backports PPA does not contain KDE 4.9.3 for 12.10 (quantal), yet.
So I can not test it.
Ubuntu changelog does not mention any patches related to KWin, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315231</commentid>
    <comment_count>79</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-11-13 18:28:55 +0000</bug_when>
    <thetext>&gt; Ubuntu changelog does not mention any patches related to KWin, though.
that&apos;s not surprising as the KDE SC 4.9.3 changelog doesn&apos;t mention this 
change either. The Kubuntu developers are probably not aware of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315237</commentid>
    <comment_count>80</comment_count>
    <who name="RussianNeuroMancer">russianneuromancer</who>
    <bug_when>2012-11-13 18:55:56 +0000</bug_when>
    <thetext>&gt; Unfortunately, the mentioned backports PPA does not contain KDE 4.9.3 for 12.10 (quantal), yet.
https://launchpad.net/~kubuntu-ppa/+archive/ppa?field.series_filter=quantal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315240</commentid>
    <comment_count>81</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-11-13 19:03:33 +0000</bug_when>
    <thetext>On 11/13/2012 07:55 PM, RunetMember wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt;
&gt; --- Comment #80 from RunetMember &lt;runetmember@gmail.com&gt; ---
&gt;&gt; Unfortunately, the mentioned backports PPA does not contain KDE 4.9.3 for 12.10 (quantal), yet.
&gt; https://launchpad.net/~kubuntu-ppa/+archive/ppa?field.series_filter=quantal
&gt;
I used this.
deb http://ppa.launchpad.net/kubuntu-ppa/ppa/ubuntu quantal main

(Sorry, it&apos;s the kubuntu ppa) http://www.kubuntu.org/news/kde-sc-4.9.3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315250</commentid>
    <comment_count>82</comment_count>
    <who name="">root</who>
    <bug_when>2012-11-13 19:49:59 +0000</bug_when>
    <thetext>Ah, I must have somehow gotten into the wrong repo, there were only three packages in there.

Now I can confirm that this bug is fixed for me on Intel i5 2500k, HD 3000, intel_drv.so 2.20.9, Ubuntu 12.10+Kubuntu backports PPA

/usr/lib/xorg/modules/drivers/intel_drv.so belongs to xserver-xorg-video-intel, not the KDE backport.

Thank You!
To whomever :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315274</commentid>
    <comment_count>83</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-11-13 21:05:49 +0000</bug_when>
    <thetext>Don&apos;t see any kwin changes
http://bazaar.launchpad.net/~kubuntu-packagers/kubuntu-packaging/kde-workspace/changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315276</commentid>
    <comment_count>84</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2012-11-13 21:07:33 +0000</bug_when>
    <thetext>Maybe Ubuntu enabled the &quot;TearFree&quot; option in the Intel X driver?
That&apos;d be just a crude work-around though, that option adds a driver-side compositor (even if the desktop already uses a compositor), which means a lot of additional copies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315278</commentid>
    <comment_count>85</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-11-13 21:12:45 +0000</bug_when>
    <thetext>(In reply to comment #84)
&gt; Maybe Ubuntu enabled the &quot;TearFree&quot; option in the Intel X driver?
&gt; That&apos;d be just a crude work-around though, that option adds a driver-side
&gt; compositor (even if the desktop already uses a compositor), which means a
&gt; lot of additional copies.

sudo grep -i tear /var/log/Xorg.0.log
Please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315280</commentid>
    <comment_count>86</comment_count>
    <who name="">root</who>
    <bug_when>2012-11-13 21:15:54 +0000</bug_when>
    <thetext>(In reply to comment #85)
&gt; sudo grep -i tear /var/log/Xorg.0.log
&gt; Please

Nothing for me, but I didn&apos;t restart X nor reload the driver, but no tearing; just updated KDE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315285</commentid>
    <comment_count>87</comment_count>
    <who name="Martin Flöser">mgraesslin</who>
    <bug_when>2012-11-13 21:24:51 +0000</bug_when>
    <thetext>&gt; Don&apos;t see any kwin changes
&gt; http://bazaar.launchpad.net/~kubuntu-packagers/kubuntu-packaging/kde-workspa
&gt; ce/changes
Rev 699: New upstream release (LP: #1074747)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315291</commentid>
    <comment_count>88</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-11-13 21:36:39 +0000</bug_when>
    <thetext>(In reply to comment #87)
&gt; Rev 699: New upstream release (LP: #1074747)

files modified:
debian/changelog
debian/control</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316004</commentid>
    <comment_count>89</comment_count>
    <who name="">root</who>
    <bug_when>2012-11-16 09:12:41 +0000</bug_when>
    <thetext>In order to clarify: there is still tearing in the upper part!
Just far far far less.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316124</commentid>
    <comment_count>90</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2012-11-16 16:33:04 +0000</bug_when>
    <thetext>On 11/16/2012 10:12 AM, root@jurathek.de wrote:
&gt; https://bugs.kde.org/show_bug.cgi?id=307965
&gt;
&gt; --- Comment #89 from root@jurathek.de ---
&gt; In order to clarify: there is still tearing in the upper part!
&gt; Just far far far less.
&gt;
I concur.

Tearing now only occurs with the top few mm, becoming difficult to see.
Thanks for the fix, but no home run quite yet :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316127</commentid>
    <comment_count>91</comment_count>
    <who name="">valdikss</who>
    <bug_when>2012-11-16 16:40:20 +0000</bug_when>
    <thetext>It could be that RC6 is disabled. If you enable RC6, it would occur just a little lower, but it would be pretty visible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316142</commentid>
    <comment_count>92</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-11-16 17:23:24 +0000</bug_when>
    <thetext>There has been no fix from our side unless you patched in https://git.reviewboard.kde.org/r/107198/ and selected a full repaint variant 

   kwriteconfig --file kwinrc --group Compositing --key &lt;?&gt;

&lt;?&gt; being either of n,e,p,c for &quot;No fullrepaints&quot;, &quot;Extend (nearly full) to full repaints&quot;, &quot;full rePaints&quot; and &quot;Copy buffer full repaints&quot;.

&quot;c&quot; is only reasonable on the nvidia blob and eventually fglrx.
Do NOT use it with MESA and the Open Source drivers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317391</commentid>
    <comment_count>93</comment_count>
    <who name="Andrei Borisochkin">aboris</who>
    <bug_when>2012-11-22 07:39:14 +0000</bug_when>
    <thetext>I can confirm this behavior on up to date Archlinux (KDE 4.9.3, nvidia blob 310.19, video card - gtx650 ti). This tearing shows up regardless of vsync in nvidia-settings. When I turn on vsync in kwin tearing will come up. However, NOT immediately - after a few seconds.

I didn&apos;t encounter this behavior with older card (7900GS) the day before yesterday (nvidia blob 304.xx).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321521</commentid>
    <comment_count>94</comment_count>
    <who name="Andrei Borisochkin">aboris</who>
    <bug_when>2012-12-06 04:53:36 +0000</bug_when>
    <thetext>https://devtalk.nvidia.com/default/topic/525074/linux/image-tear-with-kwin-compositing-and-vsync-on/

&quot;glWaitVideoSync() works as intended, but doesn&apos;t really provide a way to present in a tear-free way. The proper way to fix this on the KWin side would be to implement support for the new GLX_EXT_buffer_age extension.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321615</commentid>
    <comment_count>95</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-12-06 14:30:52 +0000</bug_when>
    <thetext>Whatever was the intention of &quot;glWaitVideoSync&quot; (apparently not the way it was utilized in compositors) - &quot;glxinfo | grep GLX_EXT_buffer_age&quot; is void on nvidia 310.19 and as reported in the review request on intel/mesa as well.
So is &quot;grep GLX_EXT_buffer_age /usr/share/doc/nvidia/NVIDIA_Changelog&quot;.

That is why we attempt always full repaints and swapping the buffer.
https://git.reviewboard.kde.org/r/107198/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321779</commentid>
    <comment_count>96</comment_count>
    <who name="Pierre-Loup A. Griffais">pgriffais</who>
    <bug_when>2012-12-06 23:40:47 +0000</bug_when>
    <thetext>Hi Thomas,

The problem with glWaitVideoSync() is that it waits on the CPU, so any interval of time can happen between performing that wait and issuing the blit, which means tear-free presentation isn&apos;t guaranteed.

We briefly discussed this with Fredrik a few days ago, and contrary to what I said GLX_EXT_buffer_age isn&apos;t yet exposed on current 310 drivers (as you found out). However we should be rolling out a new release series shortly, which will include support for it.

The intention behind the change you linked is good, but without the functionality provided by  GLX_EXT_buffer_age you have no guarantees about how many buffers are in the flip queue of the driver; it&apos;s usually a trivial cycle between 2 or 3 buffers depending whether Triple Buffering is enabled, but other implementations might have their own specific flipping mechanism.

Thanks,
 - Pierre-Loup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321937</commentid>
    <comment_count>97</comment_count>
    <who name="Brandon Watkins">bwat47</who>
    <bug_when>2012-12-07 18:40:10 +0000</bug_when>
    <thetext>Does anyone know if a fix for this (for intel cards) ever make it into kde 4.9.x? Or will it only come later on in 4.10? I really want to switch to KDE but this is a dealbreaker for me :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321944</commentid>
    <comment_count>98</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-12-07 19:03:59 +0000</bug_when>
    <thetext>(In reply to comment #97)
&gt; Does anyone know if a fix for this (for intel cards) ever make it into kde
&gt; 4.9.x?

Actually the intel IGPs should operate on the glXCopySubBuffer path and that should not cause tearing but with some broken MESA versions.

The pending patch at https://git.reviewboard.kde.org/r/107198/ will *hopefully* still make it into 4.10 - it&apos;s however a far too massive change for a bugfix release (ie. 4.9) sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321952</commentid>
    <comment_count>99</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2012-12-07 19:15:22 +0000</bug_when>
    <thetext>Hi Pierre-Loup

(In reply to comment #96)
&gt; The problem with glWaitVideoSync() is that it waits on the CPU
Ok, thanks for the information - i guess it&apos;s no misassumption thzat we could in a further patch completely scratch that path then?

&gt; The intention behind the change you linked is good, but without the
&gt; functionality provided by  GLX_EXT_buffer_age you have no guarantees 

Actually the current approach either forces full repaints or completes the backbuffer from the frontbuffer (we scratched re-using the backbuffer for it&apos;s undefined state, plus it will require some (but minor) changes on clipping artificial elements), but the latter has severe performance issues on the MESA stack (so we&apos;ll mostly require GLX_EXT_buffer_age there, esp. since the weaker IGPs also typically suffer most from effects like blurring etc.)

Many thanks for your assistance on the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321962</commentid>
    <comment_count>100</comment_count>
    <who name="Brandon Watkins">bwat47</who>
    <bug_when>2012-12-07 19:49:04 +0000</bug_when>
    <thetext>(In reply to comment #98)
&gt; (In reply to comment #97)
&gt; &gt; Does anyone know if a fix for this (for intel cards) ever make it into kde
&gt; &gt; 4.9.x?
&gt; 
&gt; Actually the intel IGPs should operate on the glXCopySubBuffer path and that
&gt; should not cause tearing but with some broken MESA versions.
&gt; 
&gt; The pending patch at https://git.reviewboard.kde.org/r/107198/ will
&gt; *hopefully* still make it into 4.10 - it&apos;s however a far too massive change
&gt; for a bugfix release (ie. 4.9) sorry.

I&apos;m on ivybridge and I had tried kubuntu 12.10 which has pretty recent mesa/kernel/driver versions (9.0, 3.5, 2.20.9).

AFIAK the problem is that currently sandybridge and ivybridge hardware simply cannot get fully tear free output unless the compositor *always* pageflips (ubuntu has changed compiz to behave this way by default in ubuntu 12.10 and I get absolutely no tearing anywhere there). I can also achieve totally tear-free output in gnome-shell by adding CLUTTER_PAINT=disable-clipped-redraws:disable-culling to /etc/environment.

Intel is working on adding &quot;legacy&quot; vsync in kernel 3.8 afiak, but if this is used it will cause significantly more power usage, since it keeps the intel card out of its power saving state, so the proper way on intel will still be to only use page-flipping, which is why that pending patch you linked is probably the only thing that will gives sandybridge/ivybridge users totally tear-free output.

It is possible to get tear-free fullscreen video currently if you use unredirect fullscreen windows in kwin + opengl output in the video player, but even that doesn&apos;t always work (it depends on the application, some video players don&apos;t seem to page-flip even with opengl output, for example see this vlc bug: https://trac.videolan.org/vlc/ticket/7702

the best tear free video experience for ivybridge is to use an always page-flipping compositor, with unredirect fullscreen windows disabled, this seems to get rid of any and all tearing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338335</commentid>
    <comment_count>101</comment_count>
    <who name="Brandon Watkins">bwat47</who>
    <bug_when>2013-02-06 15:39:27 +0000</bug_when>
    <thetext>I see KDE 4.10 is out today, can anyone tell me if tearing still occurs on ivybridge in kde 4.10?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338373</commentid>
    <comment_count>102</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-02-06 17:25:39 +0000</bug_when>
    <thetext>None of the discussed &quot;more buffer swapping&quot; patches has been applied to kde 4.10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345209</commentid>
    <comment_count>103</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2013-02-25 20:37:41 +0000</bug_when>
    <thetext>still present in kde 4.10 on kubuntu 12.10, as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345542</commentid>
    <comment_count>104</comment_count>
    <who name="Brandon Watkins">bwat47</who>
    <bug_when>2013-02-26 21:50:29 +0000</bug_when>
    <thetext>Can we expect it to make it into kde 4.11 then? I&apos;m currently using the intel xorg &quot;tearfree&quot; option and have kwins vsync disabled, which works but has poor performance and higher power draw. This is a really big usability issue that makes kwin rather unusable on intel graphics!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345544</commentid>
    <comment_count>105</comment_count>
    <who name="">valdikss</who>
    <bug_when>2013-02-26 21:53:19 +0000</bug_when>
    <thetext>Yes, it will be included in 4.11</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348022</commentid>
    <comment_count>106</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-03-05 19:19:28 +0000</bug_when>
    <thetext>Git commit 6072b4feb8c90024aa24b2e9cb8a21ab2140412c by Thomas Lübking.
Committed on 18/02/2013 at 23:17.
Pushed by luebking into branch &apos;master&apos;.

support a permanent glSwapBuffer

either by
- forcing fullrepaints unconditionally
- turning a repaint to a full one beyond a threshhold
- completing the the backbuffer from the frontbuffer after the paint
FIXED-IN: 4.10
REVIEW: 107198

M  +1    -11   kwin/composite.cpp
M  +5    -4    kwin/eglonxbackend.cpp
M  +60   -57   kwin/glxbackend.cpp
M  +29   -0    kwin/options.cpp
M  +13   -0    kwin/options.h
M  +35   -10   kwin/scene.cpp
M  +3    -0    kwin/scene.h
M  +76   -1    kwin/scene_opengl.cpp
M  +1    -0    kwin/scene_opengl.h

http://commits.kde.org/kde-workspace/6072b4feb8c90024aa24b2e9cb8a21ab2140412c</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349226</commentid>
    <comment_count>107</comment_count>
    <who name="Mark">markg85</who>
    <bug_when>2013-03-09 15:16:44 +0000</bug_when>
    <thetext>(In reply to comment #106)
&gt; Git commit 6072b4feb8c90024aa24b2e9cb8a21ab2140412c by Thomas Lübking.
&gt; Committed on 18/02/2013 at 23:17.
&gt; Pushed by luebking into branch &apos;master&apos;.
&gt; 
&gt; support a permanent glSwapBuffer
&gt; 
&gt; either by
&gt; - forcing fullrepaints unconditionally
&gt; - turning a repaint to a full one beyond a threshhold
&gt; - completing the the backbuffer from the frontbuffer after the paint
&gt; FIXED-IN: 4.10
&gt; REVIEW: 107198
&gt; 
&gt; M  +1    -11   kwin/composite.cpp
&gt; M  +5    -4    kwin/eglonxbackend.cpp
&gt; M  +60   -57   kwin/glxbackend.cpp
&gt; M  +29   -0    kwin/options.cpp
&gt; M  +13   -0    kwin/options.h
&gt; M  +35   -10   kwin/scene.cpp
&gt; M  +3    -0    kwin/scene.h
&gt; M  +76   -1    kwin/scene_opengl.cpp
&gt; M  +1    -0    kwin/scene_opengl.h
&gt; 
&gt; http://commits.kde.org/kde-workspace/6072b4feb8c90024aa24b2e9cb8a21ab2140412c

Hi,

The &quot;version fixed in&quot; field in this bug report notes 4.11.
Yet the actual commit message says &quot;FIXED-IN: 4.10&quot;

...

Which version will have this fix? the just released 4.10.1?

Cheers,
MArk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349229</commentid>
    <comment_count>108</comment_count>
    <who name="Ralf Jung">post</who>
    <bug_when>2013-03-09 15:46:42 +0000</bug_when>
    <thetext>The fix will land in 4.11. The danger of regressions is too big to put it into the stable branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349230</commentid>
    <comment_count>109</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-03-09 15:48:22 +0000</bug_when>
    <thetext>4.11
Sorry, my bad.
The commit took some time, initially pointed 4.10 but didn&apos;t make it and i forgot to edit the message.

The patch (and the pending following ones) are far to invasive to be added to minor releases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349231</commentid>
    <comment_count>110</comment_count>
    <who name="Mark">markg85</who>
    <bug_when>2013-03-09 15:52:47 +0000</bug_when>
    <thetext>(In reply to comment #109)
&gt; 4.11
&gt; Sorry, my bad.
&gt; The commit took some time, initially pointed 4.10 but didn&apos;t make it and i
&gt; forgot to edit the message.
&gt; 
&gt; The patch (and the pending following ones) are far to invasive to be added
&gt; to minor releases.

Ok, that&apos;s fine. Just wanted to make sure since i&apos;m also experiencing the issue described in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355261</commentid>
    <comment_count>111</comment_count>
    <who name="Andreas Hermann">anhermann</who>
    <bug_when>2013-03-28 22:54:08 +0000</bug_when>
    <thetext>I applied this patch against kwin 4.10.1. My system has an nvidia card, using the binary blob.
My results:

- with &apos;c&apos; mode:  zero tearing, but kwin constantly has 60% cpu usage. Performance is ok, but i think this is because of the powerfull gpu/cpu (gtx460 + core i7)

- with &apos;e&apos; mode: amazing performance, but again tearing on the second monitor (upper part)

- with &apos;p&apos; Mode: same as c

However, tearing generally disappears if i force my two monitors to have the same resolution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355265</commentid>
    <comment_count>112</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-03-28 23:17:41 +0000</bug_when>
    <thetext>Pretty much fixed tearing on &quot;c&quot; will remain until we remove the &quot;rather not so helpful&quot; waitSync calls from the pixel copying branch (patch here, RR pending for the moment)

As for the CPU usage: the patch was never tested against 4.10 neither would it cleanly apply.
If you can provide a callgrind dump, i can look into it, but there&apos;s little reason for CPU overhead on the buffer swapping paths (memory throughput esp. w/o flipping support, but that&apos;s not CPU related)

It rather sounds as if you run into constant repaints - for whatever reason - and for 60% load on an i7 core rather unblocked (ie. beyond 60FPS)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355398</commentid>
    <comment_count>113</comment_count>
    <who name="Andreas Hermann">anhermann</who>
    <bug_when>2013-03-29 13:21:22 +0000</bug_when>
    <thetext>Thank yout Thomas for the quick response.
So there is no easy way to to test this on 4.10?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355399</commentid>
    <comment_count>114</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-03-29 13:28:11 +0000</bug_when>
    <thetext>No. It would require a serious and complete backport to ensure that everything is in shape (ie. every behaviour that patch relies on is present)
And that&apos;d be quite some work for a quick singleton test.

The most simple way would actually be to get the git master of kde-workspace and compile &amp; install only kwin (that should actually work)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355739</commentid>
    <comment_count>115</comment_count>
    <who name="Thomas Lübking">thomas.luebking</who>
    <bug_when>2013-03-30 17:43:42 +0000</bug_when>
    <thetext>(In reply to comment #113)
&gt; Thank yout Thomas for the quick response.
&gt; So there is no easy way to to test this on 4.10?

Just a short re-confirmation: you did not get this CPU load while using the FPS counter, did you?
That&apos;s pretty much expectable and unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356125</commentid>
    <comment_count>116</comment_count>
    <who name="Andreas Hermann">anhermann</who>
    <bug_when>2013-03-31 10:39:29 +0000</bug_when>
    <thetext>(In reply to comment #115)
&gt; (In reply to comment #113)
&gt; &gt; Thank yout Thomas for the quick response.
&gt; &gt; So there is no easy way to to test this on 4.10?
&gt; 
&gt; Just a short re-confirmation: you did not get this CPU load while using the
&gt; FPS counter, did you?
&gt; That&apos;s pretty much expectable and unrelated.

Do you mean the Show FPS effect? I dit not use that. I just looked at the process list with htop. That showed kwin constantly using around 50-60% cpu usage when running with &apos;c&apos;.
As soon as i have some time, i will try it again with kwin from git-master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1397261</commentid>
    <comment_count>117</comment_count>
    <who name="Selopo">selopo</who>
    <bug_when>2013-09-14 11:51:39 +0000</bug_when>
    <thetext>I&apos;m glad to see that the problem is fixed in 4.11. I upgraded Mint to it and works like a charm (note that Vsync settings have to be changed to Full scene repaints). I can finally watch movies without tearing, this was a no-go for me to continue with KDE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404518</commentid>
    <comment_count>118</comment_count>
    <who name="John van Spaandonk">jwork123nl</who>
    <bug_when>2013-10-19 13:56:37 +0000</bug_when>
    <thetext>works with the new kde, 4.11.2.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>74373</attachid>
            <date>2012-10-06 09:49:53 +0000</date>
            <delta_ts>2012-10-06 09:49:53 +0000</delta_ts>
            <desc>my xorg log file</desc>
            <filename>Xorg.0.log</filename>
            <type>text/plain</type>
            <size>39642</size>
            <attacher name="John van Spaandonk">jwork123nl</attacher>
            
              <data encoding="base64">WyAgICAyMi41NjJdIApYLk9yZyBYIFNlcnZlciAxLjExLjMKUmVsZWFzZSBEYXRlOiAyMDExLTEy
LTE2ClsgICAgMjIuNTYyXSBYIFByb3RvY29sIFZlcnNpb24gMTEsIFJldmlzaW9uIDAKWyAgICAy
Mi41NjJdIEJ1aWxkIE9wZXJhdGluZyBTeXN0ZW06IExpbnV4IDIuNi40Mi0yNi1nZW5lcmljIGk2
ODYgVWJ1bnR1ClsgICAgMjIuNTYyXSBDdXJyZW50IE9wZXJhdGluZyBTeXN0ZW06IExpbnV4IEJp
Z1BDIDMuMi4wLTMxLWdlbmVyaWMtcGFlICM1MC1VYnVudHUgU01QIEZyaSBTZXAgNyAxNjozOTo0
NSBVVEMgMjAxMiBpNjg2ClsgICAgMjIuNTYyXSBLZXJuZWwgY29tbWFuZCBsaW5lOiBCT09UX0lN
QUdFPS9ib290L3ZtbGludXotMy4yLjAtMzEtZ2VuZXJpYy1wYWUgcm9vdD1VVUlEPTQyYzk3NzU3
LWYzNWQtNDBiMy04MDQxLWMwNzhlMDE0ZjhlMiBybyBxdWlldCBzcGxhc2ggdnQuaGFuZG9mZj03
ClsgICAgMjIuNTYyXSBCdWlsZCBEYXRlOiAyOSBBdWd1c3QgMjAxMiAgMTI6MTA6MDVBTQpbICAg
IDIyLjU2Ml0geG9yZy1zZXJ2ZXIgMjoxLjExLjQtMHVidW50dTEwLjggKEZvciB0ZWNobmljYWwg
c3VwcG9ydCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cudWJ1bnR1LmNvbS9zdXBwb3J0KSAKWyAgICAy
Mi41NjJdIEN1cnJlbnQgdmVyc2lvbiBvZiBwaXhtYW46IDAuMjQuNApbICAgIDIyLjU2Ml0gCUJl
Zm9yZSByZXBvcnRpbmcgcHJvYmxlbXMsIGNoZWNrIGh0dHA6Ly93aWtpLngub3JnCgl0byBtYWtl
IHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24uClsgICAgMjIuNTYyXSBNYXJr
ZXJzOiAoLS0pIHByb2JlZCwgKCoqKSBmcm9tIGNvbmZpZyBmaWxlLCAoPT0pIGRlZmF1bHQgc2V0
dGluZywKCSgrKykgZnJvbSBjb21tYW5kIGxpbmUsICghISkgbm90aWNlLCAoSUkpIGluZm9ybWF0
aW9uYWwsCgkoV1cpIHdhcm5pbmcsIChFRSkgZXJyb3IsIChOSSkgbm90IGltcGxlbWVudGVkLCAo
Pz8pIHVua25vd24uClsgICAgMjIuNTYyXSAoPT0pIExvZyBmaWxlOiAiL3Zhci9sb2cvWG9yZy4w
LmxvZyIsIFRpbWU6IFNhdCBPY3QgIDYgMDk6NDI6MzYgMjAxMgpbICAgIDIyLjU3MV0gKD09KSBV
c2luZyBzeXN0ZW0gY29uZmlnIGRpcmVjdG9yeSAiL3Vzci9zaGFyZS9YMTEveG9yZy5jb25mLmQi
ClsgICAgMjIuNTcxXSAoPT0pIE5vIExheW91dCBzZWN0aW9uLiAgVXNpbmcgdGhlIGZpcnN0IFNj
cmVlbiBzZWN0aW9uLgpbICAgIDIyLjU3MV0gKD09KSBObyBzY3JlZW4gc2VjdGlvbiBhdmFpbGFi
bGUuIFVzaW5nIGRlZmF1bHRzLgpbICAgIDIyLjU3MV0gKCoqKSB8LS0+U2NyZWVuICJEZWZhdWx0
IFNjcmVlbiBTZWN0aW9uIiAoMCkKWyAgICAyMi41NzFdICgqKikgfCAgIHwtLT5Nb25pdG9yICI8
ZGVmYXVsdCBtb25pdG9yPiIKWyAgICAyMi41NzJdICg9PSkgTm8gbW9uaXRvciBzcGVjaWZpZWQg
Zm9yIHNjcmVlbiAiRGVmYXVsdCBTY3JlZW4gU2VjdGlvbiIuCglVc2luZyBhIGRlZmF1bHQgbW9u
aXRvciBjb25maWd1cmF0aW9uLgpbICAgIDIyLjU3Ml0gKD09KSBBdXRvbWF0aWNhbGx5IGFkZGlu
ZyBkZXZpY2VzClsgICAgMjIuNTcyXSAoPT0pIEF1dG9tYXRpY2FsbHkgZW5hYmxpbmcgZGV2aWNl
cwpbICAgIDIyLjU3Ml0gKFdXKSBUaGUgZGlyZWN0b3J5ICIvdXNyL3NoYXJlL2ZvbnRzL1gxMS9j
eXJpbGxpYyIgZG9lcyBub3QgZXhpc3QuClsgICAgMjIuNTcyXSAJRW50cnkgZGVsZXRlZCBmcm9t
IGZvbnQgcGF0aC4KWyAgICAyMi41NzJdIChXVykgVGhlIGRpcmVjdG9yeSAiL3Vzci9zaGFyZS9m
b250cy9YMTEvMTAwZHBpLyIgZG9lcyBub3QgZXhpc3QuClsgICAgMjIuNTcyXSAJRW50cnkgZGVs
ZXRlZCBmcm9tIGZvbnQgcGF0aC4KWyAgICAyMi41NzJdIChXVykgVGhlIGRpcmVjdG9yeSAiL3Vz
ci9zaGFyZS9mb250cy9YMTEvNzVkcGkvIiBkb2VzIG5vdCBleGlzdC4KWyAgICAyMi41NzJdIAlF
bnRyeSBkZWxldGVkIGZyb20gZm9udCBwYXRoLgpbICAgIDIyLjU3Ml0gKFdXKSBUaGUgZGlyZWN0
b3J5ICIvdXNyL3NoYXJlL2ZvbnRzL1gxMS8xMDBkcGkiIGRvZXMgbm90IGV4aXN0LgpbICAgIDIy
LjU3Ml0gCUVudHJ5IGRlbGV0ZWQgZnJvbSBmb250IHBhdGguClsgICAgMjIuNTcyXSAoV1cpIFRo
ZSBkaXJlY3RvcnkgIi91c3Ivc2hhcmUvZm9udHMvWDExLzc1ZHBpIiBkb2VzIG5vdCBleGlzdC4K
WyAgICAyMi41NzJdIAlFbnRyeSBkZWxldGVkIGZyb20gZm9udCBwYXRoLgpbICAgIDIyLjU3Ml0g
KD09KSBGb250UGF0aCBzZXQgdG86CgkvdXNyL3NoYXJlL2ZvbnRzL1gxMS9taXNjLAoJL3Vzci9z
aGFyZS9mb250cy9YMTEvVHlwZTEsCgkvdmFyL2xpYi9kZWZvbWEveC10dGNpZGZvbnQtY29uZi5k
L2RpcnMvVHJ1ZVR5cGUsCglidWlsdC1pbnMKWyAgICAyMi41NzJdICg9PSkgTW9kdWxlUGF0aCBz
ZXQgdG8gIi91c3IvbGliL2kzODYtbGludXgtZ251L3hvcmcvZXh0cmEtbW9kdWxlcywvdXNyL2xp
Yi94b3JnL2V4dHJhLW1vZHVsZXMsL3Vzci9saWIveG9yZy9tb2R1bGVzIgpbICAgIDIyLjU3Ml0g
KElJKSBUaGUgc2VydmVyIHJlbGllcyBvbiB1ZGV2IHRvIHByb3ZpZGUgdGhlIGxpc3Qgb2YgaW5w
dXQgZGV2aWNlcy4KCUlmIG5vIGRldmljZXMgYmVjb21lIGF2YWlsYWJsZSwgcmVjb25maWd1cmUg
dWRldiBvciBkaXNhYmxlIEF1dG9BZGREZXZpY2VzLgpbICAgIDIyLjU3Ml0gKElJKSBMb2FkZXIg
bWFnaWM6IDB4Yjc3ZTk1YTAKWyAgICAyMi41NzJdIChJSSkgTW9kdWxlIEFCSSB2ZXJzaW9uczoK
WyAgICAyMi41NzJdIAlYLk9yZyBBTlNJIEMgRW11bGF0aW9uOiAwLjQKWyAgICAyMi41NzJdIAlY
Lk9yZyBWaWRlbyBEcml2ZXI6IDExLjAKWyAgICAyMi41NzJdIAlYLk9yZyBYSW5wdXQgZHJpdmVy
IDogMTYuMApbICAgIDIyLjU3Ml0gCVguT3JnIFNlcnZlciBFeHRlbnNpb24gOiA2LjAKWyAgICAy
Mi41NzJdICgtLSkgUENJOiooMDowOjI6MCkgODA4NjowMTEyOjEwNDM6ODQ0ZCByZXYgOSwgTWVt
IEAgMHhmZTAwMDAwMC80MTk0MzA0LCAweGQwMDAwMDAwLzI2ODQzNTQ1NiwgSS9PIEAgMHgwMDAw
ZjAwMC82NApbICAgIDIyLjU3Ml0gKElJKSBPcGVuIEFDUEkgc3VjY2Vzc2Z1bCAoL3Zhci9ydW4v
YWNwaWQuc29ja2V0KQpbICAgIDIyLjU3Ml0gKElJKSBMb2FkTW9kdWxlOiAiZXh0bW9kIgpbICAg
IDIyLjU3OF0gKElJKSBMb2FkaW5nIC91c3IvbGliL3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xp
YmV4dG1vZC5zbwpbICAgIDIyLjU3OF0gKElJKSBNb2R1bGUgZXh0bW9kOiB2ZW5kb3I9IlguT3Jn
IEZvdW5kYXRpb24iClsgICAgMjIuNTc4XSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxlIHZl
cnNpb24gPSAxLjAuMApbICAgIDIyLjU3OF0gCU1vZHVsZSBjbGFzczogWC5PcmcgU2VydmVyIEV4
dGVuc2lvbgpbICAgIDIyLjU3OF0gCUFCSSBjbGFzczogWC5PcmcgU2VydmVyIEV4dGVuc2lvbiwg
dmVyc2lvbiA2LjAKWyAgICAyMi41NzhdIChJSSkgTG9hZGluZyBleHRlbnNpb24gTUlULVNDUkVF
Ti1TQVZFUgpbICAgIDIyLjU3OF0gKElJKSBMb2FkaW5nIGV4dGVuc2lvbiBYRnJlZTg2LVZpZE1v
ZGVFeHRlbnNpb24KWyAgICAyMi41NzhdIChJSSkgTG9hZGluZyBleHRlbnNpb24gWEZyZWU4Ni1E
R0EKWyAgICAyMi41NzhdIChJSSkgTG9hZGluZyBleHRlbnNpb24gRFBNUwpbICAgIDIyLjU3OF0g
KElJKSBMb2FkaW5nIGV4dGVuc2lvbiBYVmlkZW8KWyAgICAyMi41NzhdIChJSSkgTG9hZGluZyBl
eHRlbnNpb24gWFZpZGVvLU1vdGlvbkNvbXBlbnNhdGlvbgpbICAgIDIyLjU3OF0gKElJKSBMb2Fk
aW5nIGV4dGVuc2lvbiBYLVJlc291cmNlClsgICAgMjIuNTc4XSAoSUkpIExvYWRNb2R1bGU6ICJk
YmUiClsgICAgMjIuNTc4XSAoSUkpIExvYWRpbmcgL3Vzci9saWIveG9yZy9tb2R1bGVzL2V4dGVu
c2lvbnMvbGliZGJlLnNvClsgICAgMjIuNTc4XSAoSUkpIE1vZHVsZSBkYmU6IHZlbmRvcj0iWC5P
cmcgRm91bmRhdGlvbiIKWyAgICAyMi41NzhdIAljb21waWxlZCBmb3IgMS4xMS4zLCBtb2R1bGUg
dmVyc2lvbiA9IDEuMC4wClsgICAgMjIuNTc4XSAJTW9kdWxlIGNsYXNzOiBYLk9yZyBTZXJ2ZXIg
RXh0ZW5zaW9uClsgICAgMjIuNTc4XSAJQUJJIGNsYXNzOiBYLk9yZyBTZXJ2ZXIgRXh0ZW5zaW9u
LCB2ZXJzaW9uIDYuMApbICAgIDIyLjU3OF0gKElJKSBMb2FkaW5nIGV4dGVuc2lvbiBET1VCTEUt
QlVGRkVSClsgICAgMjIuNTc4XSAoSUkpIExvYWRNb2R1bGU6ICJnbHgiClsgICAgMjIuNTc4XSAo
SUkpIExvYWRpbmcgL3Vzci9saWIveG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZ2x4LnNvClsg
ICAgMjIuNTc4XSAoSUkpIE1vZHVsZSBnbHg6IHZlbmRvcj0iWC5PcmcgRm91bmRhdGlvbiIKWyAg
ICAyMi41NzhdIAljb21waWxlZCBmb3IgMS4xMS4zLCBtb2R1bGUgdmVyc2lvbiA9IDEuMC4wClsg
ICAgMjIuNTc5XSAJQUJJIGNsYXNzOiBYLk9yZyBTZXJ2ZXIgRXh0ZW5zaW9uLCB2ZXJzaW9uIDYu
MApbICAgIDIyLjU3OV0gKD09KSBBSUdMWCBlbmFibGVkClsgICAgMjIuNTc5XSAoSUkpIExvYWRp
bmcgZXh0ZW5zaW9uIEdMWApbICAgIDIyLjU3OV0gKElJKSBMb2FkTW9kdWxlOiAicmVjb3JkIgpb
ICAgIDIyLjU3OV0gKElJKSBMb2FkaW5nIC91c3IvbGliL3hvcmcvbW9kdWxlcy9leHRlbnNpb25z
L2xpYnJlY29yZC5zbwpbICAgIDIyLjU3OV0gKElJKSBNb2R1bGUgcmVjb3JkOiB2ZW5kb3I9Ilgu
T3JnIEZvdW5kYXRpb24iClsgICAgMjIuNTc5XSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxl
IHZlcnNpb24gPSAxLjEzLjAKWyAgICAyMi41NzldIAlNb2R1bGUgY2xhc3M6IFguT3JnIFNlcnZl
ciBFeHRlbnNpb24KWyAgICAyMi41NzldIAlBQkkgY2xhc3M6IFguT3JnIFNlcnZlciBFeHRlbnNp
b24sIHZlcnNpb24gNi4wClsgICAgMjIuNTc5XSAoSUkpIExvYWRpbmcgZXh0ZW5zaW9uIFJFQ09S
RApbICAgIDIyLjU3OV0gKElJKSBMb2FkTW9kdWxlOiAiZHJpIgpbICAgIDIyLjU3OV0gKElJKSBM
b2FkaW5nIC91c3IvbGliL3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRyaS5zbwpbICAgIDIy
LjU3OV0gKElJKSBNb2R1bGUgZHJpOiB2ZW5kb3I9IlguT3JnIEZvdW5kYXRpb24iClsgICAgMjIu
NTc5XSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxlIHZlcnNpb24gPSAxLjAuMApbICAgIDIy
LjU3OV0gCUFCSSBjbGFzczogWC5PcmcgU2VydmVyIEV4dGVuc2lvbiwgdmVyc2lvbiA2LjAKWyAg
ICAyMi41NzldIChJSSkgTG9hZGluZyBleHRlbnNpb24gWEZyZWU4Ni1EUkkKWyAgICAyMi41Nzld
IChJSSkgTG9hZE1vZHVsZTogImRyaTIiClsgICAgMjIuNTc5XSAoSUkpIExvYWRpbmcgL3Vzci9s
aWIveG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpMi5zbwpbICAgIDIyLjU3OV0gKElJKSBN
b2R1bGUgZHJpMjogdmVuZG9yPSJYLk9yZyBGb3VuZGF0aW9uIgpbICAgIDIyLjU3OV0gCWNvbXBp
bGVkIGZvciAxLjExLjMsIG1vZHVsZSB2ZXJzaW9uID0gMS4yLjAKWyAgICAyMi41NzldIAlBQkkg
Y2xhc3M6IFguT3JnIFNlcnZlciBFeHRlbnNpb24sIHZlcnNpb24gNi4wClsgICAgMjIuNTc5XSAo
SUkpIExvYWRpbmcgZXh0ZW5zaW9uIERSSTIKWyAgICAyMi41NzldICg9PSkgTWF0Y2hlZCBpbnRl
bCBhcyBhdXRvY29uZmlndXJlZCBkcml2ZXIgMApbICAgIDIyLjU3OV0gKD09KSBNYXRjaGVkIHZl
c2EgYXMgYXV0b2NvbmZpZ3VyZWQgZHJpdmVyIDEKWyAgICAyMi41NzldICg9PSkgTWF0Y2hlZCBm
YmRldiBhcyBhdXRvY29uZmlndXJlZCBkcml2ZXIgMgpbICAgIDIyLjU3OV0gKD09KSBBc3NpZ25l
ZCB0aGUgZHJpdmVyIHRvIHRoZSB4Zjg2Q29uZmlnTGF5b3V0ClsgICAgMjIuNTc5XSAoSUkpIExv
YWRNb2R1bGU6ICJpbnRlbCIKWyAgICAyMi41OTBdIChJSSkgTG9hZGluZyAvdXNyL2xpYi94b3Jn
L21vZHVsZXMvZHJpdmVycy9pbnRlbF9kcnYuc28KWyAgICAyMi41OTBdIChJSSkgTW9kdWxlIGlu
dGVsOiB2ZW5kb3I9IlguT3JnIEZvdW5kYXRpb24iClsgICAgMjIuNTkwXSAJY29tcGlsZWQgZm9y
IDEuMTEuMywgbW9kdWxlIHZlcnNpb24gPSAyLjE3LjAKWyAgICAyMi41OTBdIAlNb2R1bGUgY2xh
c3M6IFguT3JnIFZpZGVvIERyaXZlcgpbICAgIDIyLjU5MF0gCUFCSSBjbGFzczogWC5PcmcgVmlk
ZW8gRHJpdmVyLCB2ZXJzaW9uIDExLjAKWyAgICAyMi41OTBdIChJSSkgTG9hZE1vZHVsZTogInZl
c2EiClsgICAgMjIuNTkwXSAoSUkpIExvYWRpbmcgL3Vzci9saWIveG9yZy9tb2R1bGVzL2RyaXZl
cnMvdmVzYV9kcnYuc28KWyAgICAyMi41OTBdIChJSSkgTW9kdWxlIHZlc2E6IHZlbmRvcj0iWC5P
cmcgRm91bmRhdGlvbiIKWyAgICAyMi41OTBdIAljb21waWxlZCBmb3IgMS4xMS4zLCBtb2R1bGUg
dmVyc2lvbiA9IDIuMy4wClsgICAgMjIuNTkwXSAJTW9kdWxlIGNsYXNzOiBYLk9yZyBWaWRlbyBE
cml2ZXIKWyAgICAyMi41OTBdIAlBQkkgY2xhc3M6IFguT3JnIFZpZGVvIERyaXZlciwgdmVyc2lv
biAxMS4wClsgICAgMjIuNTkwXSAoSUkpIExvYWRNb2R1bGU6ICJmYmRldiIKWyAgICAyMi41OTBd
IChJSSkgTG9hZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvZHJpdmVycy9mYmRldl9kcnYuc28K
WyAgICAyMi41OTBdIChJSSkgTW9kdWxlIGZiZGV2OiB2ZW5kb3I9IlguT3JnIEZvdW5kYXRpb24i
ClsgICAgMjIuNTkwXSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxlIHZlcnNpb24gPSAwLjQu
MgpbICAgIDIyLjU5MF0gCUFCSSBjbGFzczogWC5PcmcgVmlkZW8gRHJpdmVyLCB2ZXJzaW9uIDEx
LjAKWyAgICAyMi41OTBdIChJSSkgaW50ZWw6IERyaXZlciBmb3IgSW50ZWwgSW50ZWdyYXRlZCBH
cmFwaGljcyBDaGlwc2V0czogaTgxMCwKCWk4MTAtZGMxMDAsIGk4MTBlLCBpODE1LCBpODMwTSwg
ODQ1RywgODU0LCA4NTJHTS84NTVHTSwgODY1RywgOTE1RywKCUU3MjIxIChpOTE1KSwgOTE1R00s
IDk0NUcsIDk0NUdNLCA5NDVHTUUsIFBpbmV2aWV3IEdNLCBQaW5ldmlldyBHLAoJOTY1RywgRzM1
LCA5NjVRLCA5NDZHWiwgOTY1R00sIDk2NUdNRS9HTEUsIEczMywgUTM1LCBRMzMsIEdNNDUsCgk0
IFNlcmllcywgRzQ1L0c0MywgUTQ1L1E0MywgRzQxLCBCNDMsIEI0MywgQ2xhcmtkYWxlLCBBcnJh
bmRhbGUsCglTYW5keWJyaWRnZSBEZXNrdG9wIChHVDEpLCBTYW5keWJyaWRnZSBEZXNrdG9wIChH
VDIpLAoJU2FuZHlicmlkZ2UgRGVza3RvcCAoR1QyKyksIFNhbmR5YnJpZGdlIE1vYmlsZSAoR1Qx
KSwKCVNhbmR5YnJpZGdlIE1vYmlsZSAoR1QyKSwgU2FuZHlicmlkZ2UgTW9iaWxlIChHVDIrKSwK
CVNhbmR5YnJpZGdlIFNlcnZlciwgSXZ5YnJpZGdlIE1vYmlsZSAoR1QxKSwgSXZ5YnJpZGdlIE1v
YmlsZSAoR1QyKSwKCUl2eWJyaWRnZSBEZXNrdG9wIChHVDEpLCBJdnlicmlkZ2UgRGVza3RvcCAo
R1QyKSwgSXZ5YnJpZGdlIFNlcnZlcgpbICAgIDIyLjU5MF0gKElJKSBWRVNBOiBkcml2ZXIgZm9y
IFZFU0EgY2hpcHNldHM6IHZlc2EKWyAgICAyMi41OTBdIChJSSkgRkJERVY6IGRyaXZlciBmb3Ig
ZnJhbWVidWZmZXI6IGZiZGV2ClsgICAgMjIuNTkwXSAoKyspIHVzaW5nIFZUIG51bWJlciA3Cgpb
ICAgIDIyLjU5MV0gKElJKSBMb2FkaW5nIC91c3IvbGliL3hvcmcvbW9kdWxlcy9kcml2ZXJzL2lu
dGVsX2Rydi5zbwpbICAgIDIyLjU5MV0gKFdXKSBGYWxsaW5nIGJhY2sgdG8gb2xkIHByb2JlIG1l
dGhvZCBmb3IgdmVzYQpbICAgIDIyLjU5MV0gKFdXKSBGYWxsaW5nIGJhY2sgdG8gb2xkIHByb2Jl
IG1ldGhvZCBmb3IgZmJkZXYKWyAgICAyMi41OTFdIChJSSkgTG9hZGluZyBzdWIgbW9kdWxlICJm
YmRldmh3IgpbICAgIDIyLjU5MV0gKElJKSBMb2FkTW9kdWxlOiAiZmJkZXZodyIKWyAgICAyMi41
OTFdIChJSSkgTG9hZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvbGliZmJkZXZody5zbwpbICAg
IDIyLjU5MV0gKElJKSBNb2R1bGUgZmJkZXZodzogdmVuZG9yPSJYLk9yZyBGb3VuZGF0aW9uIgpb
ICAgIDIyLjU5MV0gCWNvbXBpbGVkIGZvciAxLjExLjMsIG1vZHVsZSB2ZXJzaW9uID0gMC4wLjIK
WyAgICAyMi41OTFdIAlBQkkgY2xhc3M6IFguT3JnIFZpZGVvIERyaXZlciwgdmVyc2lvbiAxMS4w
ClsgICAgMjIuNTkxXSBkcm1PcGVuRGV2aWNlOiBub2RlIG5hbWUgaXMgL2Rldi9kcmkvY2FyZDAK
WyAgICAyMi41OTFdIGRybU9wZW5EZXZpY2U6IG9wZW4gcmVzdWx0IGlzIDksIChPSykKWyAgICAy
Mi41OTJdIGRybU9wZW5CeUJ1c2lkOiBTZWFyY2hpbmcgZm9yIEJ1c0lEIHBjaTowMDAwOjAwOjAy
LjAKWyAgICAyMi41OTJdIGRybU9wZW5EZXZpY2U6IG5vZGUgbmFtZSBpcyAvZGV2L2RyaS9jYXJk
MApbICAgIDIyLjU5Ml0gZHJtT3BlbkRldmljZTogb3BlbiByZXN1bHQgaXMgOSwgKE9LKQpbICAg
IDIyLjU5Ml0gZHJtT3BlbkJ5QnVzaWQ6IGRybU9wZW5NaW5vciByZXR1cm5zIDkKWyAgICAyMi41
OTJdIGRybU9wZW5CeUJ1c2lkOiBkcm1HZXRCdXNpZCByZXBvcnRzIHBjaTowMDAwOjAwOjAyLjAK
WyAgICAyMi41OTJdIChJSSkgaW50ZWwoMCk6IENyZWF0aW5nIGRlZmF1bHQgRGlzcGxheSBzdWJz
ZWN0aW9uIGluIFNjcmVlbiBzZWN0aW9uCgkiRGVmYXVsdCBTY3JlZW4gU2VjdGlvbiIgZm9yIGRl
cHRoL2ZiYnBwIDI0LzMyClsgICAgMjIuNTkyXSAoPT0pIGludGVsKDApOiBEZXB0aCAyNCwgKC0t
KSBmcmFtZWJ1ZmZlciBicHAgMzIKWyAgICAyMi41OTJdICg9PSkgaW50ZWwoMCk6IFJHQiB3ZWln
aHQgODg4ClsgICAgMjIuNTkyXSAoPT0pIGludGVsKDApOiBEZWZhdWx0IHZpc3VhbCBpcyBUcnVl
Q29sb3IKWyAgICAyMi41OTJdIChJSSkgaW50ZWwoMCk6IEludGVncmF0ZWQgR3JhcGhpY3MgQ2hp
cHNldDogSW50ZWwoUikgU2FuZHlicmlkZ2UgRGVza3RvcCAoR1QyKQpbICAgIDIyLjU5Ml0gKC0t
KSBpbnRlbCgwKTogQ2hpcHNldDogIlNhbmR5YnJpZGdlIERlc2t0b3AgKEdUMikiClsgICAgMjIu
NTkyXSAoKiopIGludGVsKDApOiBSZWxheGVkIGZlbmNpbmcgZW5hYmxlZApbICAgIDIyLjU5Ml0g
KCoqKSBpbnRlbCgwKTogV2FpdCBvbiBTd2FwQnVmZmVycz8gZW5hYmxlZApbICAgIDIyLjU5Ml0g
KCoqKSBpbnRlbCgwKTogVHJpcGxlIGJ1ZmZlcmluZz8gZW5hYmxlZApbICAgIDIyLjU5Ml0gKCoq
KSBpbnRlbCgwKTogRnJhbWVidWZmZXIgdGlsZWQKWyAgICAyMi41OTJdICgqKikgaW50ZWwoMCk6
IFBpeG1hcHMgdGlsZWQKWyAgICAyMi41OTJdICgqKikgaW50ZWwoMCk6IDNEIGJ1ZmZlcnMgdGls
ZWQKWyAgICAyMi41OTJdICgqKikgaW50ZWwoMCk6IFN3YXBCdWZmZXJzIHdhaXQgZW5hYmxlZApb
ICAgIDIyLjU5Ml0gKD09KSBpbnRlbCgwKTogdmlkZW8gb3ZlcmxheSBrZXkgc2V0IHRvIDB4MTAx
ZmUKWyAgICAyMi41OTJdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBWR0ExIGhhcyBubyBtb25pdG9y
IHNlY3Rpb24KWyAgICAyMi41OTZdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBIRE1JMSBoYXMgbm8g
bW9uaXRvciBzZWN0aW9uClsgICAgMjIuNjQ0XSAoSUkpIGludGVsKDApOiBPdXRwdXQgRFAxIGhh
cyBubyBtb25pdG9yIHNlY3Rpb24KWyAgICAyMi42NDhdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBI
RE1JMiBoYXMgbm8gbW9uaXRvciBzZWN0aW9uClsgICAgMjIuODgyXSAoSUkpIGludGVsKDApOiBP
dXRwdXQgSERNSTMgaGFzIG5vIG1vbml0b3Igc2VjdGlvbgpbICAgIDIyLjkyOF0gKElJKSBpbnRl
bCgwKTogT3V0cHV0IERQMiBoYXMgbm8gbW9uaXRvciBzZWN0aW9uClsgICAgMjIuOTc2XSAoSUkp
IGludGVsKDApOiBPdXRwdXQgRFAzIGhhcyBubyBtb25pdG9yIHNlY3Rpb24KWyAgICAyMi45NzZd
IChJSSkgaW50ZWwoMCk6IEVESUQgZm9yIG91dHB1dCBWR0ExClsgICAgMjIuOTgwXSAoSUkpIGlu
dGVsKDApOiBFRElEIGZvciBvdXRwdXQgSERNSTEKWyAgICAyMy4wMjhdIChJSSkgaW50ZWwoMCk6
IEVESUQgZm9yIG91dHB1dCBEUDEKWyAgICAyMy4wMzJdIChJSSkgaW50ZWwoMCk6IEVESUQgZm9y
IG91dHB1dCBIRE1JMgpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogRURJRCBmb3Igb3V0cHV0
IEhETUkzClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBNYW51ZmFjdHVyZXI6IERFTCAgTW9k
ZWw6IGYwMTYgIFNlcmlhbCM6IDgwODYwMzIxMgpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTog
WWVhcjogMjAxMCAgV2VlazogNDcKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IEVESUQgVmVy
c2lvbjogMS4zClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBEaWdpdGFsIERpc3BsYXkgSW5w
dXQKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IE1heCBJbWFnZSBTaXplIFtjbV06IGhvcml6
LjogNTIgIHZlcnQuOiAzMgpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogR2FtbWE6IDIuMjAK
WyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IERQTVMgY2FwYWJpbGl0aWVzOiBTdGFuZEJ5IFN1
c3BlbmQgT2ZmClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBTdXBwb3J0ZWQgY29sb3IgZW5j
b2RpbmdzOiBSR0IgNDo0OjQgWUNyQ2IgNDo0OjQgClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDAp
OiBGaXJzdCBkZXRhaWxlZCB0aW1pbmcgaXMgcHJlZmVycmVkIG1vZGUKWyAgICAyMy4yNjZdIChJ
SSkgaW50ZWwoMCk6IHJlZFg6IDAuNjgwIHJlZFk6IDAuMzEwICAgZ3JlZW5YOiAwLjIwNiBncmVl
blk6IDAuNjkzClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBibHVlWDogMC4xNTEgYmx1ZVk6
IDAuMDU1ICAgd2hpdGVYOiAwLjMxMyB3aGl0ZVk6IDAuMzI5ClsgICAgMjMuMjY2XSAoSUkpIGlu
dGVsKDApOiBTdXBwb3J0ZWQgZXN0YWJsaXNoZWQgdGltaW5nczoKWyAgICAyMy4yNjZdIChJSSkg
aW50ZWwoMCk6IDcyMHg0MDBANzBIegpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogNjQweDQ4
MEA2MEh6ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiA2NDB4NDgwQDc1SHoKWyAgICAyMy4y
NjZdIChJSSkgaW50ZWwoMCk6IDgwMHg2MDBANjBIegpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgw
KTogODAweDYwMEA3NUh6ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAxMDI0eDc2OEA2MEh6
ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAxMDI0eDc2OEA3NUh6ClsgICAgMjMuMjY2XSAo
SUkpIGludGVsKDApOiAxMjgweDEwMjRANzVIegpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTog
TWFudWZhY3R1cmVyJ3MgbWFzazogMApbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogU3VwcG9y
dGVkIHN0YW5kYXJkIHRpbWluZ3M6ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAjMDogaHNp
emU6IDEyODAgIHZzaXplIDEwMjQgIHJlZnJlc2g6IDYwICB2aWQ6IDMyODk3ClsgICAgMjMuMjY2
XSAoSUkpIGludGVsKDApOiAjMTogaHNpemU6IDE2MDAgIHZzaXplIDEyMDAgIHJlZnJlc2g6IDYw
ICB2aWQ6IDE2NTUzClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAjMjogaHNpemU6IDE5MjAg
IHZzaXplIDEyMDAgIHJlZnJlc2g6IDYwICB2aWQ6IDIwOQpbICAgIDIzLjI2Nl0gKElJKSBpbnRl
bCgwKTogIzM6IGhzaXplOiAxMTUyICB2c2l6ZSA4NjQgIHJlZnJlc2g6IDc1ICB2aWQ6IDIwMzM3
ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBTdXBwb3J0ZWQgZGV0YWlsZWQgdGltaW5nOgpb
ICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogY2xvY2s6IDE1NC4wIE1IeiAgIEltYWdlIFNpemU6
ICA1MTggeCAzMjQgbW0KWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IGhfYWN0aXZlOiAxOTIw
ICBoX3N5bmM6IDE5NjggIGhfc3luY19lbmQgMjAwMCBoX2JsYW5rX2VuZCAyMDgwIGhfYm9yZGVy
OiAwClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiB2X2FjdGl2ZTogMTIwMCAgdl9zeW5jOiAx
MjAzICB2X3N5bmNfZW5kIDEyMDkgdl9ibGFua2luZzogMTIzNSB2X2JvcmRlcjogMApbICAgIDIz
LjI2Nl0gKElJKSBpbnRlbCgwKTogU2VyaWFsIE5vOiBGNTI1TTBCSjAyTkwKWyAgICAyMy4yNjZd
IChJSSkgaW50ZWwoMCk6IE1vbml0b3IgbmFtZTogREVMTCBVMjQxMApbICAgIDIzLjI2Nl0gKElJ
KSBpbnRlbCgwKTogUmFuZ2VzOiBWIG1pbjogNTYgViBtYXg6IDc2IEh6LCBIIG1pbjogMzAgSCBt
YXg6IDgxIGtIeiwgUGl4Q2xvY2sgbWF4IDE3NSBNSHoKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwo
MCk6IFN1cHBvcnRlZCBkZXRhaWxlZCB0aW1pbmc6ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDAp
OiBjbG9jazogMTQ4LjUgTUh6ICAgSW1hZ2UgU2l6ZTogIDUxOCB4IDMyNCBtbQpbICAgIDIzLjI2
Nl0gKElJKSBpbnRlbCgwKTogaF9hY3RpdmU6IDE5MjAgIGhfc3luYzogMjAwOCAgaF9zeW5jX2Vu
ZCAyMDUyIGhfYmxhbmtfZW5kIDIyMDAgaF9ib3JkZXI6IDAKWyAgICAyMy4yNjZdIChJSSkgaW50
ZWwoMCk6IHZfYWN0aXZlOiAxMDgwICB2X3N5bmM6IDEwODQgIHZfc3luY19lbmQgMTA4OSB2X2Js
YW5raW5nOiAxMTI1IHZfYm9yZGVyOiAwClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBTdXBw
b3J0ZWQgZGV0YWlsZWQgdGltaW5nOgpbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogY2xvY2s6
IDc0LjIgTUh6ICAgSW1hZ2UgU2l6ZTogIDUxOCB4IDMyNCBtbQpbICAgIDIzLjI2Nl0gKElJKSBp
bnRlbCgwKTogaF9hY3RpdmU6IDE5MjAgIGhfc3luYzogMjAwOCAgaF9zeW5jX2VuZCAyMDUyIGhf
YmxhbmtfZW5kIDIyMDAgaF9ib3JkZXI6IDAKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IHZf
YWN0aXZlOiA1NDAgIHZfc3luYzogNTQyICB2X3N5bmNfZW5kIDU0NyB2X2JsYW5raW5nOiA1NjIg
dl9ib3JkZXI6IDAKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IFN1cHBvcnRlZCBkZXRhaWxl
ZCB0aW1pbmc6ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBjbG9jazogNzQuMiBNSHogICBJ
bWFnZSBTaXplOiAgNTE4IHggMzI0IG1tClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiBoX2Fj
dGl2ZTogMTI4MCAgaF9zeW5jOiAxMzkwICBoX3N5bmNfZW5kIDE0MzAgaF9ibGFua19lbmQgMTY1
MCBoX2JvcmRlcjogMApbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogdl9hY3RpdmU6IDcyMCAg
dl9zeW5jOiA3MjUgIHZfc3luY19lbmQgNzMwIHZfYmxhbmtpbmc6IDc1MCB2X2JvcmRlcjogMApb
ICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogU3VwcG9ydGVkIGRldGFpbGVkIHRpbWluZzoKWyAg
ICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IGNsb2NrOiAyNy4wIE1IeiAgIEltYWdlIFNpemU6ICA1
MTggeCAzMjQgbW0KWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IGhfYWN0aXZlOiA3MjAgIGhf
c3luYzogNzM2ICBoX3N5bmNfZW5kIDc5OCBoX2JsYW5rX2VuZCA4NTggaF9ib3JkZXI6IDAKWyAg
ICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IHZfYWN0aXZlOiA0ODAgIHZfc3luYzogNDg5ICB2X3N5
bmNfZW5kIDQ5NSB2X2JsYW5raW5nOiA1MjUgdl9ib3JkZXI6IDAKWyAgICAyMy4yNjZdIChJSSkg
aW50ZWwoMCk6IE51bWJlciBvZiBFRElEIHNlY3Rpb25zIHRvIGZvbGxvdzogMQpbICAgIDIzLjI2
Nl0gKElJKSBpbnRlbCgwKTogRURJRCAoaW4gaGV4KToKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwo
MCk6IAkwMGZmZmZmZmZmZmZmZjAwMTBhYzE2ZjA0YzRlMzIzMApbICAgIDIzLjI2Nl0gKElJKSBp
bnRlbCgwKTogCTJmMTQwMTAzODAzNDIwNzhlYTFlYzVhZTRmMzRiMTI2ClsgICAgMjMuMjY2XSAo
SUkpIGludGVsKDApOiAJMGU1MDU0YTU0YjAwODE4MGE5NDBkMTAwNzE0ZjAxMDEKWyAgICAyMy4y
NjZdIChJSSkgaW50ZWwoMCk6IAkwMTAxMDEwMTAxMDEyODNjODBhMDcwYjAyMzQwMzAyMApbICAg
IDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogCTM2MDAwNjQ0MjEwMDAwMWEwMDAwMDBmZjAwNDYzNTMy
ClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAJMzU0ZDMwNDI0YTMwMzI0ZTRjMGEwMDAwMDBm
YzAwNDQKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IAk0NTRjNGMyMDU1MzIzNDMxMzAwYTIw
MjAwMDAwMDBmZApbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogCTAwMzg0YzFlNTExMTAwMGEy
MDIwMjAyMDIwMjAwMTRhClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDApOiAJMDIwMzI5ZjE1MDkw
MDUwNDAzMDIwNzE2MDExZjEyMTMKWyAgICAyMy4yNjZdIChJSSkgaW50ZWwoMCk6IAkxNDIwMTUx
MTA2MjMwOTA3MDc2NzAzMGMwMDEwMDAzOApbICAgIDIzLjI2Nl0gKElJKSBpbnRlbCgwKTogCTJk
ODMwMTAwMDBlMzA1MDMwMTAyM2E4MDE4NzEzODJkClsgICAgMjMuMjY2XSAoSUkpIGludGVsKDAp
OiAJNDA1ODJjNDUwMDA2NDQyMTAwMDAxZTAxMWQ4MDE4NzEKWyAgICAyMy4yNjZdIChJSSkgaW50
ZWwoMCk6IAkxYzE2MjA1ODJjMjUwMDA2NDQyMTAwMDA5ZTAxMWQwMApbICAgIDIzLjI2Nl0gKElJ
KSBpbnRlbCgwKTogCTcyNTFkMDFlMjA2ZTI4NTUwMDA2NDQyMTAwMDAxZThjClsgICAgMjMuMjY2
XSAoSUkpIGludGVsKDApOiAJMGFkMDhhMjBlMDJkMTAxMDNlOTYwMDA2NDQyMTAwMDAKWyAgICAy
My4yNjZdIChJSSkgaW50ZWwoMCk6IAkxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZQpb
ICAgIDIzLjI2N10gKElJKSBpbnRlbCgwKTogUHJpbnRpbmcgcHJvYmVkIG1vZGVzIGZvciBvdXRw
dXQgSERNSTMKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxOTIweDEyMDAi
eDYwLjAgIDE1NC4wMCAgMTkyMCAxOTY4IDIwMDAgMjA4MCAgMTIwMCAxMjAzIDEyMDkgMTIzNSAr
aHN5bmMgLXZzeW5jICg3NC4wIGtIeikKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVs
aW5lICIxOTIweDEwODAieDYwLjAgIDE0OC41MCAgMTkyMCAyMDA4IDIwNTIgMjIwMCAgMTA4MCAx
MDg0IDEwODkgMTEyNSAraHN5bmMgK3ZzeW5jICg2Ny41IGtIeikKWyAgICAyMy4yNjddIChJSSkg
aW50ZWwoMCk6IE1vZGVsaW5lICIxNjAweDEyMDAieDYwLjAgIDE2Mi4wMCAgMTYwMCAxNjY0IDE4
NTYgMjE2MCAgMTIwMCAxMjAxIDEyMDQgMTI1MCAraHN5bmMgK3ZzeW5jICg3NS4wIGtIeikKWyAg
ICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxMjgweDEwMjQieDc1LjAgIDEzNS4w
MCAgMTI4MCAxMjk2IDE0NDAgMTY4OCAgMTAyNCAxMDI1IDEwMjggMTA2NiAraHN5bmMgK3ZzeW5j
ICg4MC4wIGtIeikKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxMjgweDEw
MjQieDYwLjAgIDEwOC4wMCAgMTI4MCAxMzI4IDE0NDAgMTY4OCAgMTAyNCAxMDI1IDEwMjggMTA2
NiAraHN5bmMgK3ZzeW5jICg2NC4wIGtIeikKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1v
ZGVsaW5lICIxMTUyeDg2NCJ4NzUuMCAgMTA4LjAwICAxMTUyIDEyMTYgMTM0NCAxNjAwICA4NjQg
ODY1IDg2OCA5MDAgK2hzeW5jICt2c3luYyAoNjcuNSBrSHopClsgICAgMjMuMjY3XSAoSUkpIGlu
dGVsKDApOiBNb2RlbGluZSAiMTAyNHg3NjgieDc1LjEgICA3OC44MCAgMTAyNCAxMDQwIDExMzYg
MTMxMiAgNzY4IDc2OSA3NzIgODAwICtoc3luYyArdnN5bmMgKDYwLjEga0h6KQpbICAgIDIzLjI2
N10gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjEwMjR4NzY4Ing2MC4wICAgNjUuMDAgIDEwMjQg
MTA0OCAxMTg0IDEzNDQgIDc2OCA3NzEgNzc3IDgwNiAtaHN5bmMgLXZzeW5jICg0OC40IGtIeikK
WyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICI4MDB4NjAwIng3NS4wICAgNDku
NTAgIDgwMCA4MTYgODk2IDEwNTYgIDYwMCA2MDEgNjA0IDYyNSAraHN5bmMgK3ZzeW5jICg0Ni45
IGtIeikKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICI4MDB4NjAwIng2MC4z
ICAgNDAuMDAgIDgwMCA4NDAgOTY4IDEwNTYgIDYwMCA2MDEgNjA1IDYyOCAraHN5bmMgK3ZzeW5j
ICgzNy45IGtIeikKWyAgICAyMy4yNjddIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICI2NDB4NDgw
Ing3NS4wICAgMzEuNTAgIDY0MCA2NTYgNzIwIDg0MCAgNDgwIDQ4MSA0ODQgNTAwIC1oc3luYyAt
dnN5bmMgKDM3LjUga0h6KQpbICAgIDIzLjI2N10gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjY0
MHg0ODAieDYwLjAgICAyNS4yMCAgNjQwIDY1NiA3NTIgODAwICA0ODAgNDkwIDQ5MiA1MjUgLWhz
eW5jIC12c3luYyAoMzEuNSBrSHopClsgICAgMjMuMjY3XSAoSUkpIGludGVsKDApOiBNb2RlbGlu
ZSAiNzIweDQwMCJ4NzAuMSAgIDI4LjMyICA3MjAgNzM4IDg0NiA5MDAgIDQwMCA0MTIgNDE0IDQ0
OSAtaHN5bmMgK3ZzeW5jICgzMS41IGtIeikKWyAgICAyMy4zMTJdIChJSSkgaW50ZWwoMCk6IEVE
SUQgZm9yIG91dHB1dCBEUDIKWyAgICAyMy4zNjBdIChJSSkgaW50ZWwoMCk6IEVESUQgZm9yIG91
dHB1dCBEUDMKWyAgICAyMy4zNjBdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBWR0ExIGRpc2Nvbm5l
Y3RlZApbICAgIDIzLjM2MF0gKElJKSBpbnRlbCgwKTogT3V0cHV0IEhETUkxIGRpc2Nvbm5lY3Rl
ZApbICAgIDIzLjM2MF0gKElJKSBpbnRlbCgwKTogT3V0cHV0IERQMSBkaXNjb25uZWN0ZWQKWyAg
ICAyMy4zNjBdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBIRE1JMiBkaXNjb25uZWN0ZWQKWyAgICAy
My4zNjBdIChJSSkgaW50ZWwoMCk6IE91dHB1dCBIRE1JMyBjb25uZWN0ZWQKWyAgICAyMy4zNjBd
IChJSSkgaW50ZWwoMCk6IE91dHB1dCBEUDIgZGlzY29ubmVjdGVkClsgICAgMjMuMzYwXSAoSUkp
IGludGVsKDApOiBPdXRwdXQgRFAzIGRpc2Nvbm5lY3RlZApbICAgIDIzLjM2MF0gKElJKSBpbnRl
bCgwKTogVXNpbmcgZXhhY3Qgc2l6ZXMgZm9yIGluaXRpYWwgbW9kZXMKWyAgICAyMy4zNjBdIChJ
SSkgaW50ZWwoMCk6IE91dHB1dCBIRE1JMyB1c2luZyBpbml0aWFsIG1vZGUgMTkyMHgxMjAwClsg
ICAgMjMuMzYwXSAoSUkpIGludGVsKDApOiBVc2luZyBkZWZhdWx0IGdhbW1hIG9mICgxLjAsIDEu
MCwgMS4wKSB1bmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZC4KWyAgICAyMy4zNjBdIChJSSkgaW50ZWwo
MCk6IEtlcm5lbCBwYWdlIGZsaXBwaW5nIHN1cHBvcnQgZGV0ZWN0ZWQsIGVuYWJsaW5nClsgICAg
MjMuMzYwXSAoPT0pIGludGVsKDApOiBEUEkgc2V0IHRvICg5NiwgOTYpClsgICAgMjMuMzYwXSAo
SUkpIExvYWRpbmcgc3ViIG1vZHVsZSAiZmIiClsgICAgMjMuMzYwXSAoSUkpIExvYWRNb2R1bGU6
ICJmYiIKWyAgICAyMy4zNjBdIChJSSkgTG9hZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvbGli
ZmIuc28KWyAgICAyMy4zNjBdIChJSSkgTW9kdWxlIGZiOiB2ZW5kb3I9IlguT3JnIEZvdW5kYXRp
b24iClsgICAgMjMuMzYwXSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxlIHZlcnNpb24gPSAx
LjAuMApbICAgIDIzLjM2MF0gCUFCSSBjbGFzczogWC5PcmcgQU5TSSBDIEVtdWxhdGlvbiwgdmVy
c2lvbiAwLjQKWyAgICAyMy4zNjBdIChJSSkgTG9hZGluZyBzdWIgbW9kdWxlICJkcmkyIgpbICAg
IDIzLjM2MF0gKElJKSBMb2FkTW9kdWxlOiAiZHJpMiIKWyAgICAyMy4zNjBdIChJSSkgTG9hZGlu
ZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkcmkyLnNvClsgICAgMjMuMzYw
XSAoSUkpIE1vZHVsZSBkcmkyOiB2ZW5kb3I9IlguT3JnIEZvdW5kYXRpb24iClsgICAgMjMuMzYw
XSAJY29tcGlsZWQgZm9yIDEuMTEuMywgbW9kdWxlIHZlcnNpb24gPSAxLjIuMApbICAgIDIzLjM2
MF0gCUFCSSBjbGFzczogWC5PcmcgU2VydmVyIEV4dGVuc2lvbiwgdmVyc2lvbiA2LjAKWyAgICAy
My4zNjBdIChJSSkgVW5sb2FkTW9kdWxlOiAidmVzYSIKWyAgICAyMy4zNjBdIChJSSkgVW5sb2Fk
aW5nIHZlc2EKWyAgICAyMy4zNjBdIChJSSkgVW5sb2FkTW9kdWxlOiAiZmJkZXYiClsgICAgMjMu
MzYwXSAoSUkpIFVubG9hZGluZyBmYmRldgpbICAgIDIzLjM2MF0gKElJKSBVbmxvYWRNb2R1bGU6
ICJmYmRldmh3IgpbICAgIDIzLjM2MF0gKElJKSBVbmxvYWRpbmcgZmJkZXZodwpbICAgIDIzLjM2
MF0gKD09KSBEZXB0aCAyNCBwaXhtYXAgZm9ybWF0IGlzIDMyIGJwcApbICAgIDIzLjM2MF0gKElJ
KSBpbnRlbCgwKTogW0RSSTJdIFNldHVwIGNvbXBsZXRlClsgICAgMjMuMzYwXSAoSUkpIGludGVs
KDApOiBbRFJJMl0gICBEUkkgZHJpdmVyOiBpOTY1ClsgICAgMjMuMzYwXSAoSUkpIGludGVsKDAp
OiBBbGxvY2F0ZWQgbmV3IGZyYW1lIGJ1ZmZlciAxOTIweDEyMDAgc3RyaWRlIDc2ODAsIHRpbGVk
ClsgICAgMjMuMzYxXSAoSUkpIFVYQSgwKTogRHJpdmVyIHJlZ2lzdGVyZWQgc3VwcG9ydCBmb3Ig
dGhlIGZvbGxvd2luZyBvcGVyYXRpb25zOgpbICAgIDIzLjM2MV0gKElJKSAgICAgICAgIHNvbGlk
ClsgICAgMjMuMzYxXSAoSUkpICAgICAgICAgY29weQpbICAgIDIzLjM2MV0gKElJKSAgICAgICAg
IGNvbXBvc2l0ZSAoUkVOREVSIGFjY2VsZXJhdGlvbikKWyAgICAyMy4zNjFdIChJSSkgICAgICAg
ICBwdXRfaW1hZ2UKWyAgICAyMy4zNjFdIChJSSkgICAgICAgICBnZXRfaW1hZ2UKWyAgICAyMy4z
NjFdICg9PSkgaW50ZWwoMCk6IEJhY2tpbmcgc3RvcmUgZGlzYWJsZWQKWyAgICAyMy4zNjFdICg9
PSkgaW50ZWwoMCk6IFNpbGtlbiBtb3VzZSBlbmFibGVkClsgICAgMjMuMzYxXSAoSUkpIGludGVs
KDApOiBJbml0aWFsaXppbmcgSFcgQ3Vyc29yClsgICAgMjMuNDI0XSAoSUkpIGludGVsKDApOiBS
YW5kUiAxLjIgZW5hYmxlZCwgaWdub3JlIHRoZSBmb2xsb3dpbmcgUmFuZFIgZGlzYWJsZWQgbWVz
c2FnZS4KWyAgICAyMy40MjRdICg9PSkgaW50ZWwoMCk6IERQTVMgZW5hYmxlZApbICAgIDIzLjQy
NF0gKD09KSBpbnRlbCgwKTogSW50ZWwgWHZNQyBkZWNvZGVyIGVuYWJsZWQKWyAgICAyMy40MjRd
IChJSSkgaW50ZWwoMCk6IFNldCB1cCB0ZXh0dXJlZCB2aWRlbwpbICAgIDIzLjQyNF0gKElJKSBp
bnRlbCgwKTogW1h2TUNdIHh2bWNfdmxkIGRyaXZlciBpbml0aWFsaXplZC4KWyAgICAyMy40MjRd
IChJSSkgaW50ZWwoMCk6IGRpcmVjdCByZW5kZXJpbmc6IERSSTIgRW5hYmxlZApbICAgIDIzLjQy
NF0gKD09KSBpbnRlbCgwKTogaG90cGx1ZyBkZXRlY3Rpb246ICJlbmFibGVkIgpbICAgIDIzLjQy
NF0gKC0tKSBSYW5kUiBkaXNhYmxlZApbICAgIDIzLjQyNF0gKElJKSBJbml0aWFsaXppbmcgYnVp
bHQtaW4gZXh0ZW5zaW9uIEdlbmVyaWMgRXZlbnQgRXh0ZW5zaW9uClsgICAgMjMuNDI0XSAoSUkp
IEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gU0hBUEUKWyAgICAyMy40MjRdIChJSSkg
SW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBNSVQtU0hNClsgICAgMjMuNDI0XSAoSUkp
IEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gWElucHV0RXh0ZW5zaW9uClsgICAgMjMu
NDI0XSAoSUkpIEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gWFRFU1QKWyAgICAyMy40
MjRdIChJSSkgSW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBCSUctUkVRVUVTVFMKWyAg
ICAyMy40MjRdIChJSSkgSW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBTWU5DClsgICAg
MjMuNDI0XSAoSUkpIEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gWEtFWUJPQVJEClsg
ICAgMjMuNDI0XSAoSUkpIEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gWEMtTUlTQwpb
ICAgIDIzLjQyNF0gKElJKSBJbml0aWFsaXppbmcgYnVpbHQtaW4gZXh0ZW5zaW9uIFNFQ1VSSVRZ
ClsgICAgMjMuNDI0XSAoSUkpIEluaXRpYWxpemluZyBidWlsdC1pbiBleHRlbnNpb24gWElORVJB
TUEKWyAgICAyMy40MjRdIChJSSkgSW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBYRklY
RVMKWyAgICAyMy40MjRdIChJSSkgSW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBSRU5E
RVIKWyAgICAyMy40MjRdIChJSSkgSW5pdGlhbGl6aW5nIGJ1aWx0LWluIGV4dGVuc2lvbiBSQU5E
UgpbICAgIDIzLjQyNF0gKElJKSBJbml0aWFsaXppbmcgYnVpbHQtaW4gZXh0ZW5zaW9uIENPTVBP
U0lURQpbICAgIDIzLjQyNF0gKElJKSBJbml0aWFsaXppbmcgYnVpbHQtaW4gZXh0ZW5zaW9uIERB
TUFHRQpbICAgIDIzLjQzMF0gKElJKSBBSUdMWDogZW5hYmxlZCBHTFhfTUVTQV9jb3B5X3N1Yl9i
dWZmZXIKWyAgICAyMy40MzBdIChJSSkgQUlHTFg6IGVuYWJsZWQgR0xYX0lOVEVMX3N3YXBfZXZl
bnQKWyAgICAyMy40MzBdIChJSSkgQUlHTFg6IGVuYWJsZWQgR0xYX1NHSV9zd2FwX2NvbnRyb2wg
YW5kIEdMWF9NRVNBX3N3YXBfY29udHJvbApbICAgIDIzLjQzMF0gKElJKSBBSUdMWDogR0xYX0VY
VF90ZXh0dXJlX2Zyb21fcGl4bWFwIGJhY2tlZCBieSBidWZmZXIgb2JqZWN0cwpbICAgIDIzLjQz
MF0gKElJKSBBSUdMWDogTG9hZGVkIGFuZCBpbml0aWFsaXplZCBpOTY1ClsgICAgMjMuNDMwXSAo
SUkpIEdMWDogSW5pdGlhbGl6ZWQgRFJJMiBHTCBwcm92aWRlciBmb3Igc2NyZWVuIDAKWyAgICAy
My40MzBdIChJSSkgaW50ZWwoMCk6IFNldHRpbmcgc2NyZWVuIHBoeXNpY2FsIHNpemUgdG8gNTA3
IHggMzE3ClsgICAgMjMuNDM1XSAoSUkpIFhLQjogcmV1c2UgeGttZmlsZSAvdmFyL2xpYi94a2Iv
c2VydmVyLUIyMEQ3RkM3OUM3RjU5NzMxNUUzRTUwMUFFRjEwRTBEODY2RThFOTIueGttClsgICAg
MjMuNDM3XSAoSUkpIGNvbmZpZy91ZGV2OiBBZGRpbmcgaW5wdXQgZGV2aWNlIFBvd2VyIEJ1dHRv
biAoL2Rldi9pbnB1dC9ldmVudDEpClsgICAgMjMuNDM3XSAoKiopIFBvd2VyIEJ1dHRvbjogQXBw
bHlpbmcgSW5wdXRDbGFzcyAiZXZkZXYga2V5Ym9hcmQgY2F0Y2hhbGwiClsgICAgMjMuNDM3XSAo
SUkpIExvYWRNb2R1bGU6ICJldmRldiIKWyAgICAyMy40MzddIChJSSkgTG9hZGluZyAvdXNyL2xp
Yi94b3JnL21vZHVsZXMvaW5wdXQvZXZkZXZfZHJ2LnNvClsgICAgMjMuNDM3XSAoSUkpIE1vZHVs
ZSBldmRldjogdmVuZG9yPSJYLk9yZyBGb3VuZGF0aW9uIgpbICAgIDIzLjQzN10gCWNvbXBpbGVk
IGZvciAxLjExLjMsIG1vZHVsZSB2ZXJzaW9uID0gMi43LjAKWyAgICAyMy40MzddIAlNb2R1bGUg
Y2xhc3M6IFguT3JnIFhJbnB1dCBEcml2ZXIKWyAgICAyMy40MzddIAlBQkkgY2xhc3M6IFguT3Jn
IFhJbnB1dCBkcml2ZXIsIHZlcnNpb24gMTYuMApbICAgIDIzLjQzN10gKElJKSBVc2luZyBpbnB1
dCBkcml2ZXIgJ2V2ZGV2JyBmb3IgJ1Bvd2VyIEJ1dHRvbicKWyAgICAyMy40MzddIChJSSkgTG9h
ZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvaW5wdXQvZXZkZXZfZHJ2LnNvClsgICAgMjMuNDM3
XSAoKiopIFBvd2VyIEJ1dHRvbjogYWx3YXlzIHJlcG9ydHMgY29yZSBldmVudHMKWyAgICAyMy40
MzddICgqKikgZXZkZXY6IFBvd2VyIEJ1dHRvbjogRGV2aWNlOiAiL2Rldi9pbnB1dC9ldmVudDEi
ClsgICAgMjMuNDM3XSAoLS0pIGV2ZGV2OiBQb3dlciBCdXR0b246IFZlbmRvciAwIFByb2R1Y3Qg
MHgxClsgICAgMjMuNDM3XSAoLS0pIGV2ZGV2OiBQb3dlciBCdXR0b246IEZvdW5kIGtleXMKWyAg
ICAyMy40MzddIChJSSkgZXZkZXY6IFBvd2VyIEJ1dHRvbjogQ29uZmlndXJpbmcgYXMga2V5Ym9h
cmQKWyAgICAyMy40MzddICgqKikgT3B0aW9uICJjb25maWdfaW5mbyIgInVkZXY6L3N5cy9kZXZp
Y2VzL0xOWFNZU1RNOjAwL0xOWFBXUkJOOjAwL2lucHV0L2lucHV0MS9ldmVudDEiClsgICAgMjMu
NDM3XSAoSUkpIFhJTlBVVDogQWRkaW5nIGV4dGVuZGVkIGlucHV0IGRldmljZSAiUG93ZXIgQnV0
dG9uIiAodHlwZTogS0VZQk9BUkQsIGlkIDYpClsgICAgMjMuNDM3XSAoKiopIE9wdGlvbiAieGti
X3J1bGVzIiAiZXZkZXYiClsgICAgMjMuNDM3XSAoKiopIE9wdGlvbiAieGtiX21vZGVsIiAicGMx
MDUiClsgICAgMjMuNDM3XSAoKiopIE9wdGlvbiAieGtiX2xheW91dCIgInVzIgpbICAgIDIzLjQz
N10gKCoqKSBPcHRpb24gInhrYl92YXJpYW50IiAiaW50bCIKWyAgICAyMy40MzldIChJSSkgWEtC
OiByZXVzZSB4a21maWxlIC92YXIvbGliL3hrYi9zZXJ2ZXItQTU0MzFENEEzNDQ2M0M4OTJDOUU5
MDVFMkU0MjFCMzBBM0NDMzBERC54a20KWyAgICAyMy40MzldIChJSSkgY29uZmlnL3VkZXY6IEFk
ZGluZyBpbnB1dCBkZXZpY2UgVmlkZW8gQnVzICgvZGV2L2lucHV0L2V2ZW50MykKWyAgICAyMy40
MzldICgqKikgVmlkZW8gQnVzOiBBcHBseWluZyBJbnB1dENsYXNzICJldmRldiBrZXlib2FyZCBj
YXRjaGFsbCIKWyAgICAyMy40MzldIChJSSkgVXNpbmcgaW5wdXQgZHJpdmVyICdldmRldicgZm9y
ICdWaWRlbyBCdXMnClsgICAgMjMuNDM5XSAoSUkpIExvYWRpbmcgL3Vzci9saWIveG9yZy9tb2R1
bGVzL2lucHV0L2V2ZGV2X2Rydi5zbwpbICAgIDIzLjQzOV0gKCoqKSBWaWRlbyBCdXM6IGFsd2F5
cyByZXBvcnRzIGNvcmUgZXZlbnRzClsgICAgMjMuNDM5XSAoKiopIGV2ZGV2OiBWaWRlbyBCdXM6
IERldmljZTogIi9kZXYvaW5wdXQvZXZlbnQzIgpbICAgIDIzLjQzOV0gKC0tKSBldmRldjogVmlk
ZW8gQnVzOiBWZW5kb3IgMCBQcm9kdWN0IDB4NgpbICAgIDIzLjQzOV0gKC0tKSBldmRldjogVmlk
ZW8gQnVzOiBGb3VuZCBrZXlzClsgICAgMjMuNDM5XSAoSUkpIGV2ZGV2OiBWaWRlbyBCdXM6IENv
bmZpZ3VyaW5nIGFzIGtleWJvYXJkClsgICAgMjMuNDM5XSAoKiopIE9wdGlvbiAiY29uZmlnX2lu
Zm8iICJ1ZGV2Oi9zeXMvZGV2aWNlcy9MTlhTWVNUTTowMC9kZXZpY2U6MDAvUE5QMEEwODowMC9M
TlhWSURFTzowMC9pbnB1dC9pbnB1dDMvZXZlbnQzIgpbICAgIDIzLjQzOV0gKElJKSBYSU5QVVQ6
IEFkZGluZyBleHRlbmRlZCBpbnB1dCBkZXZpY2UgIlZpZGVvIEJ1cyIgKHR5cGU6IEtFWUJPQVJE
LCBpZCA3KQpbICAgIDIzLjQzOV0gKCoqKSBPcHRpb24gInhrYl9ydWxlcyIgImV2ZGV2IgpbICAg
IDIzLjQzOV0gKCoqKSBPcHRpb24gInhrYl9tb2RlbCIgInBjMTA1IgpbICAgIDIzLjQzOV0gKCoq
KSBPcHRpb24gInhrYl9sYXlvdXQiICJ1cyIKWyAgICAyMy40MzldICgqKikgT3B0aW9uICJ4a2Jf
dmFyaWFudCIgImludGwiClsgICAgMjMuNDM5XSAoSUkpIGNvbmZpZy91ZGV2OiBBZGRpbmcgaW5w
dXQgZGV2aWNlIFBvd2VyIEJ1dHRvbiAoL2Rldi9pbnB1dC9ldmVudDApClsgICAgMjMuNDM5XSAo
KiopIFBvd2VyIEJ1dHRvbjogQXBwbHlpbmcgSW5wdXRDbGFzcyAiZXZkZXYga2V5Ym9hcmQgY2F0
Y2hhbGwiClsgICAgMjMuNDM5XSAoSUkpIFVzaW5nIGlucHV0IGRyaXZlciAnZXZkZXYnIGZvciAn
UG93ZXIgQnV0dG9uJwpbICAgIDIzLjQzOV0gKElJKSBMb2FkaW5nIC91c3IvbGliL3hvcmcvbW9k
dWxlcy9pbnB1dC9ldmRldl9kcnYuc28KWyAgICAyMy40MzldICgqKikgUG93ZXIgQnV0dG9uOiBh
bHdheXMgcmVwb3J0cyBjb3JlIGV2ZW50cwpbICAgIDIzLjQzOV0gKCoqKSBldmRldjogUG93ZXIg
QnV0dG9uOiBEZXZpY2U6ICIvZGV2L2lucHV0L2V2ZW50MCIKWyAgICAyMy40MzldICgtLSkgZXZk
ZXY6IFBvd2VyIEJ1dHRvbjogVmVuZG9yIDAgUHJvZHVjdCAweDEKWyAgICAyMy40MzldICgtLSkg
ZXZkZXY6IFBvd2VyIEJ1dHRvbjogRm91bmQga2V5cwpbICAgIDIzLjQzOV0gKElJKSBldmRldjog
UG93ZXIgQnV0dG9uOiBDb25maWd1cmluZyBhcyBrZXlib2FyZApbICAgIDIzLjQzOV0gKCoqKSBP
cHRpb24gImNvbmZpZ19pbmZvIiAidWRldjovc3lzL2RldmljZXMvTE5YU1lTVE06MDAvZGV2aWNl
OjAwL1BOUDBDMEM6MDAvaW5wdXQvaW5wdXQwL2V2ZW50MCIKWyAgICAyMy40NDBdIChJSSkgWElO
UFVUOiBBZGRpbmcgZXh0ZW5kZWQgaW5wdXQgZGV2aWNlICJQb3dlciBCdXR0b24iICh0eXBlOiBL
RVlCT0FSRCwgaWQgOCkKWyAgICAyMy40NDBdICgqKikgT3B0aW9uICJ4a2JfcnVsZXMiICJldmRl
diIKWyAgICAyMy40NDBdICgqKikgT3B0aW9uICJ4a2JfbW9kZWwiICJwYzEwNSIKWyAgICAyMy40
NDBdICgqKikgT3B0aW9uICJ4a2JfbGF5b3V0IiAidXMiClsgICAgMjMuNDQwXSAoKiopIE9wdGlv
biAieGtiX3ZhcmlhbnQiICJpbnRsIgpbICAgIDIzLjQ0MF0gKElJKSBjb25maWcvdWRldjogQWRk
aW5nIGlucHV0IGRldmljZSBIREEgSW50ZWwgUENIIEZyb250IE1pYyAoL2Rldi9pbnB1dC9ldmVu
dDEwKQpbICAgIDIzLjQ0MF0gKElJKSBObyBpbnB1dCBkcml2ZXIgc3BlY2lmaWVkLCBpZ25vcmlu
ZyB0aGlzIGRldmljZS4KWyAgICAyMy40NDBdIChJSSkgVGhpcyBkZXZpY2UgbWF5IGhhdmUgYmVl
biBhZGRlZCB3aXRoIGFub3RoZXIgZGV2aWNlIGZpbGUuClsgICAgMjMuNDQwXSAoSUkpIGNvbmZp
Zy91ZGV2OiBBZGRpbmcgaW5wdXQgZGV2aWNlIEhEQSBJbnRlbCBQQ0ggUmVhciBNaWMgKC9kZXYv
aW5wdXQvZXZlbnQxMSkKWyAgICAyMy40NDBdIChJSSkgTm8gaW5wdXQgZHJpdmVyIHNwZWNpZmll
ZCwgaWdub3JpbmcgdGhpcyBkZXZpY2UuClsgICAgMjMuNDQwXSAoSUkpIFRoaXMgZGV2aWNlIG1h
eSBoYXZlIGJlZW4gYWRkZWQgd2l0aCBhbm90aGVyIGRldmljZSBmaWxlLgpbICAgIDIzLjQ0MF0g
KElJKSBjb25maWcvdWRldjogQWRkaW5nIGlucHV0IGRldmljZSBIREEgSW50ZWwgUENIIEZyb250
IEhlYWRwaG9uZSAoL2Rldi9pbnB1dC9ldmVudDEyKQpbICAgIDIzLjQ0MF0gKElJKSBObyBpbnB1
dCBkcml2ZXIgc3BlY2lmaWVkLCBpZ25vcmluZyB0aGlzIGRldmljZS4KWyAgICAyMy40NDBdIChJ
SSkgVGhpcyBkZXZpY2UgbWF5IGhhdmUgYmVlbiBhZGRlZCB3aXRoIGFub3RoZXIgZGV2aWNlIGZp
bGUuClsgICAgMjMuNDQwXSAoSUkpIGNvbmZpZy91ZGV2OiBBZGRpbmcgaW5wdXQgZGV2aWNlIEhE
QSBJbnRlbCBQQ0ggTGluZS1PdXQgU2lkZSAoL2Rldi9pbnB1dC9ldmVudDEzKQpbICAgIDIzLjQ0
MF0gKElJKSBObyBpbnB1dCBkcml2ZXIgc3BlY2lmaWVkLCBpZ25vcmluZyB0aGlzIGRldmljZS4K
WyAgICAyMy40NDBdIChJSSkgVGhpcyBkZXZpY2UgbWF5IGhhdmUgYmVlbiBhZGRlZCB3aXRoIGFu
b3RoZXIgZGV2aWNlIGZpbGUuClsgICAgMjMuNDQwXSAoSUkpIGNvbmZpZy91ZGV2OiBBZGRpbmcg
aW5wdXQgZGV2aWNlIEhEQSBJbnRlbCBQQ0ggTGluZS1PdXQgQ0xGRSAoL2Rldi9pbnB1dC9ldmVu
dDE0KQpbICAgIDIzLjQ0MF0gKElJKSBObyBpbnB1dCBkcml2ZXIgc3BlY2lmaWVkLCBpZ25vcmlu
ZyB0aGlzIGRldmljZS4KWyAgICAyMy40NDBdIChJSSkgVGhpcyBkZXZpY2UgbWF5IGhhdmUgYmVl
biBhZGRlZCB3aXRoIGFub3RoZXIgZGV2aWNlIGZpbGUuClsgICAgMjMuNDQwXSAoSUkpIGNvbmZp
Zy91ZGV2OiBBZGRpbmcgaW5wdXQgZGV2aWNlIEhEQSBJbnRlbCBQQ0ggTGluZS1PdXQgU3Vycm91
bmQgKC9kZXYvaW5wdXQvZXZlbnQxNSkKWyAgICAyMy40NDFdIChJSSkgTm8gaW5wdXQgZHJpdmVy
IHNwZWNpZmllZCwgaWdub3JpbmcgdGhpcyBkZXZpY2UuClsgICAgMjMuNDQxXSAoSUkpIFRoaXMg
ZGV2aWNlIG1heSBoYXZlIGJlZW4gYWRkZWQgd2l0aCBhbm90aGVyIGRldmljZSBmaWxlLgpbICAg
IDIzLjQ0MV0gKElJKSBjb25maWcvdWRldjogQWRkaW5nIGlucHV0IGRldmljZSBIREEgSW50ZWwg
UENIIExpbmUtT3V0IEZyb250ICgvZGV2L2lucHV0L2V2ZW50MTYpClsgICAgMjMuNDQxXSAoSUkp
IE5vIGlucHV0IGRyaXZlciBzcGVjaWZpZWQsIGlnbm9yaW5nIHRoaXMgZGV2aWNlLgpbICAgIDIz
LjQ0MV0gKElJKSBUaGlzIGRldmljZSBtYXkgaGF2ZSBiZWVuIGFkZGVkIHdpdGggYW5vdGhlciBk
ZXZpY2UgZmlsZS4KWyAgICAyMy40NDFdIChJSSkgY29uZmlnL3VkZXY6IEFkZGluZyBpbnB1dCBk
ZXZpY2UgSERBIEludGVsIFBDSCBIRE1JL0RQLHBjbT0zICgvZGV2L2lucHV0L2V2ZW50OCkKWyAg
ICAyMy40NDFdIChJSSkgTm8gaW5wdXQgZHJpdmVyIHNwZWNpZmllZCwgaWdub3JpbmcgdGhpcyBk
ZXZpY2UuClsgICAgMjMuNDQxXSAoSUkpIFRoaXMgZGV2aWNlIG1heSBoYXZlIGJlZW4gYWRkZWQg
d2l0aCBhbm90aGVyIGRldmljZSBmaWxlLgpbICAgIDIzLjQ0MV0gKElJKSBjb25maWcvdWRldjog
QWRkaW5nIGlucHV0IGRldmljZSBIREEgSW50ZWwgUENIIExpbmUgKC9kZXYvaW5wdXQvZXZlbnQ5
KQpbICAgIDIzLjQ0MV0gKElJKSBObyBpbnB1dCBkcml2ZXIgc3BlY2lmaWVkLCBpZ25vcmluZyB0
aGlzIGRldmljZS4KWyAgICAyMy40NDFdIChJSSkgVGhpcyBkZXZpY2UgbWF5IGhhdmUgYmVlbiBh
ZGRlZCB3aXRoIGFub3RoZXIgZGV2aWNlIGZpbGUuClsgICAgMjMuNDQxXSAoSUkpIGNvbmZpZy91
ZGV2OiBBZGRpbmcgaW5wdXQgZGV2aWNlIFVWQyBDYW1lcmEgKDA0NmQ6MDgwNykgKC9kZXYvaW5w
dXQvZXZlbnQ2KQpbICAgIDIzLjQ0MV0gKCoqKSBVVkMgQ2FtZXJhICgwNDZkOjA4MDcpOiBBcHBs
eWluZyBJbnB1dENsYXNzICJldmRldiBrZXlib2FyZCBjYXRjaGFsbCIKWyAgICAyMy40NDFdIChJ
SSkgVXNpbmcgaW5wdXQgZHJpdmVyICdldmRldicgZm9yICdVVkMgQ2FtZXJhICgwNDZkOjA4MDcp
JwpbICAgIDIzLjQ0MV0gKElJKSBMb2FkaW5nIC91c3IvbGliL3hvcmcvbW9kdWxlcy9pbnB1dC9l
dmRldl9kcnYuc28KWyAgICAyMy40NDFdICgqKikgVVZDIENhbWVyYSAoMDQ2ZDowODA3KTogYWx3
YXlzIHJlcG9ydHMgY29yZSBldmVudHMKWyAgICAyMy40NDFdICgqKikgZXZkZXY6IFVWQyBDYW1l
cmEgKDA0NmQ6MDgwNyk6IERldmljZTogIi9kZXYvaW5wdXQvZXZlbnQ2IgpbICAgIDIzLjQ0MV0g
KC0tKSBldmRldjogVVZDIENhbWVyYSAoMDQ2ZDowODA3KTogVmVuZG9yIDB4NDZkIFByb2R1Y3Qg
MHg4MDcKWyAgICAyMy40NDFdICgtLSkgZXZkZXY6IFVWQyBDYW1lcmEgKDA0NmQ6MDgwNyk6IEZv
dW5kIGtleXMKWyAgICAyMy40NDFdIChJSSkgZXZkZXY6IFVWQyBDYW1lcmEgKDA0NmQ6MDgwNyk6
IENvbmZpZ3VyaW5nIGFzIGtleWJvYXJkClsgICAgMjMuNDQxXSAoKiopIE9wdGlvbiAiY29uZmln
X2luZm8iICJ1ZGV2Oi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MWMuNS8wMDAwOjA0
OjAwLjAvdXNiNS81LTIvNS0yOjEuMC9pbnB1dC9pbnB1dDYvZXZlbnQ2IgpbICAgIDIzLjQ0MV0g
KElJKSBYSU5QVVQ6IEFkZGluZyBleHRlbmRlZCBpbnB1dCBkZXZpY2UgIlVWQyBDYW1lcmEgKDA0
NmQ6MDgwNykiICh0eXBlOiBLRVlCT0FSRCwgaWQgOSkKWyAgICAyMy40NDFdICgqKikgT3B0aW9u
ICJ4a2JfcnVsZXMiICJldmRldiIKWyAgICAyMy40NDFdICgqKikgT3B0aW9uICJ4a2JfbW9kZWwi
ICJwYzEwNSIKWyAgICAyMy40NDFdICgqKikgT3B0aW9uICJ4a2JfbGF5b3V0IiAidXMiClsgICAg
MjMuNDQxXSAoKiopIE9wdGlvbiAieGtiX3ZhcmlhbnQiICJpbnRsIgpbICAgIDIzLjQ0Ml0gKElJ
KSBjb25maWcvdWRldjogQWRkaW5nIGlucHV0IGRldmljZSAgICAgICAgICAgICBMb2dpdGVjaCAg
ICAgICAgICAgICAgTG9naXRlY2ggWjMwNSAgICgvZGV2L2lucHV0L2V2ZW50NSkKWyAgICAyMy40
NDJdICgqKikgICAgICAgICAgICAgTG9naXRlY2ggICAgICAgICAgICAgIExvZ2l0ZWNoIFozMDUg
IDogQXBwbHlpbmcgSW5wdXRDbGFzcyAiZXZkZXYga2V5Ym9hcmQgY2F0Y2hhbGwiClsgICAgMjMu
NDQyXSAoSUkpIFVzaW5nIGlucHV0IGRyaXZlciAnZXZkZXYnIGZvciAnICAgICAgICAgICAgTG9n
aXRlY2ggICAgICAgICAgICAgIExvZ2l0ZWNoIFozMDUgICcKWyAgICAyMy40NDJdIChJSSkgTG9h
ZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvaW5wdXQvZXZkZXZfZHJ2LnNvClsgICAgMjMuNDQy
XSAoKiopICAgICAgICAgICAgIExvZ2l0ZWNoICAgICAgICAgICAgICBMb2dpdGVjaCBaMzA1ICA6
IGFsd2F5cyByZXBvcnRzIGNvcmUgZXZlbnRzClsgICAgMjMuNDQyXSAoKiopIGV2ZGV2OiAgICAg
ICAgICAgICBMb2dpdGVjaCAgICAgICAgICAgICAgTG9naXRlY2ggWjMwNSAgOiBEZXZpY2U6ICIv
ZGV2L2lucHV0L2V2ZW50NSIKWyAgICAyMy40NDJdICgtLSkgZXZkZXY6ICAgICAgICAgICAgIExv
Z2l0ZWNoICAgICAgICAgICAgICBMb2dpdGVjaCBaMzA1ICA6IFZlbmRvciAweDQ2ZCBQcm9kdWN0
IDB4YTIzClsgICAgMjMuNDQyXSAoLS0pIGV2ZGV2OiAgICAgICAgICAgICBMb2dpdGVjaCAgICAg
ICAgICAgICAgTG9naXRlY2ggWjMwNSAgOiBGb3VuZCBrZXlzClsgICAgMjMuNDQyXSAoSUkpIGV2
ZGV2OiAgICAgICAgICAgICBMb2dpdGVjaCAgICAgICAgICAgICAgTG9naXRlY2ggWjMwNSAgOiBD
b25maWd1cmluZyBhcyBrZXlib2FyZApbICAgIDIzLjQ0Ml0gKCoqKSBPcHRpb24gImNvbmZpZ19p
bmZvIiAidWRldjovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjFkLjAvdXNiMi8yLTEv
Mi0xLjEvMi0xLjEuMS8yLTEuMS4xLjIvMi0xLjEuMS4yOjEuMi9pbnB1dC9pbnB1dDUvZXZlbnQ1
IgpbICAgIDIzLjQ0Ml0gKElJKSBYSU5QVVQ6IEFkZGluZyBleHRlbmRlZCBpbnB1dCBkZXZpY2Ug
IiAgICAgICAgICAgIExvZ2l0ZWNoICAgICAgICAgICAgICBMb2dpdGVjaCBaMzA1ICAiICh0eXBl
OiBLRVlCT0FSRCwgaWQgMTApClsgICAgMjMuNDQyXSAoKiopIE9wdGlvbiAieGtiX3J1bGVzIiAi
ZXZkZXYiClsgICAgMjMuNDQyXSAoKiopIE9wdGlvbiAieGtiX21vZGVsIiAicGMxMDUiClsgICAg
MjMuNDQyXSAoKiopIE9wdGlvbiAieGtiX2xheW91dCIgInVzIgpbICAgIDIzLjQ0Ml0gKCoqKSBP
cHRpb24gInhrYl92YXJpYW50IiAiaW50bCIKWyAgICAyMy40NDJdIChJSSkgY29uZmlnL3VkZXY6
IEFkZGluZyBpbnB1dCBkZXZpY2UgTG9naXRlY2ggVVNCLVBTLzIgT3B0aWNhbCBNb3VzZSAoL2Rl
di9pbnB1dC9ldmVudDQpClsgICAgMjMuNDQyXSAoKiopIExvZ2l0ZWNoIFVTQi1QUy8yIE9wdGlj
YWwgTW91c2U6IEFwcGx5aW5nIElucHV0Q2xhc3MgImV2ZGV2IHBvaW50ZXIgY2F0Y2hhbGwiClsg
ICAgMjMuNDQyXSAoSUkpIFVzaW5nIGlucHV0IGRyaXZlciAnZXZkZXYnIGZvciAnTG9naXRlY2gg
VVNCLVBTLzIgT3B0aWNhbCBNb3VzZScKWyAgICAyMy40NDJdIChJSSkgTG9hZGluZyAvdXNyL2xp
Yi94b3JnL21vZHVsZXMvaW5wdXQvZXZkZXZfZHJ2LnNvClsgICAgMjMuNDQyXSAoKiopIExvZ2l0
ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IGFsd2F5cyByZXBvcnRzIGNvcmUgZXZlbnRzClsg
ICAgMjMuNDQyXSAoKiopIGV2ZGV2OiBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1vdXNlOiBE
ZXZpY2U6ICIvZGV2L2lucHV0L2V2ZW50NCIKWyAgICAyMy40NDJdICgtLSkgZXZkZXY6IExvZ2l0
ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IFZlbmRvciAweDQ2ZCBQcm9kdWN0IDB4YzAxYgpb
ICAgIDIzLjQ0Ml0gKC0tKSBldmRldjogTG9naXRlY2ggVVNCLVBTLzIgT3B0aWNhbCBNb3VzZTog
Rm91bmQgMTAgbW91c2UgYnV0dG9ucwpbICAgIDIzLjQ0Ml0gKC0tKSBldmRldjogTG9naXRlY2gg
VVNCLVBTLzIgT3B0aWNhbCBNb3VzZTogRm91bmQgc2Nyb2xsIHdoZWVsKHMpClsgICAgMjMuNDQy
XSAoLS0pIGV2ZGV2OiBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1vdXNlOiBGb3VuZCByZWxh
dGl2ZSBheGVzClsgICAgMjMuNDQyXSAoLS0pIGV2ZGV2OiBMb2dpdGVjaCBVU0ItUFMvMiBPcHRp
Y2FsIE1vdXNlOiBGb3VuZCB4IGFuZCB5IHJlbGF0aXZlIGF4ZXMKWyAgICAyMy40NDJdIChJSSkg
ZXZkZXY6IExvZ2l0ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IENvbmZpZ3VyaW5nIGFzIG1v
dXNlClsgICAgMjMuNDQyXSAoSUkpIGV2ZGV2OiBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1v
dXNlOiBBZGRpbmcgc2Nyb2xsd2hlZWwgc3VwcG9ydApbICAgIDIzLjQ0Ml0gKCoqKSBldmRldjog
TG9naXRlY2ggVVNCLVBTLzIgT3B0aWNhbCBNb3VzZTogWUF4aXNNYXBwaW5nOiBidXR0b25zIDQg
YW5kIDUKWyAgICAyMy40NDJdICgqKikgZXZkZXY6IExvZ2l0ZWNoIFVTQi1QUy8yIE9wdGljYWwg
TW91c2U6IEVtdWxhdGVXaGVlbEJ1dHRvbjogNCwgRW11bGF0ZVdoZWVsSW5lcnRpYTogMTAsIEVt
dWxhdGVXaGVlbFRpbWVvdXQ6IDIwMApbICAgIDIzLjQ0Ml0gKCoqKSBPcHRpb24gImNvbmZpZ19p
bmZvIiAidWRldjovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAwOjAwOjFkLjAvdXNiMi8yLTEv
Mi0xLjIvMi0xLjI6MS4wL2lucHV0L2lucHV0NC9ldmVudDQiClsgICAgMjMuNDQyXSAoSUkpIFhJ
TlBVVDogQWRkaW5nIGV4dGVuZGVkIGlucHV0IGRldmljZSAiTG9naXRlY2ggVVNCLVBTLzIgT3B0
aWNhbCBNb3VzZSIgKHR5cGU6IE1PVVNFLCBpZCAxMSkKWyAgICAyMy40NDJdIChJSSkgZXZkZXY6
IExvZ2l0ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IGluaXRpYWxpemVkIGZvciByZWxhdGl2
ZSBheGVzLgpbICAgIDIzLjQ0Ml0gKCoqKSBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1vdXNl
OiAoYWNjZWwpIGtlZXBpbmcgYWNjZWxlcmF0aW9uIHNjaGVtZSAxClsgICAgMjMuNDQyXSAoKiop
IExvZ2l0ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IChhY2NlbCkgYWNjZWxlcmF0aW9uIHBy
b2ZpbGUgMApbICAgIDIzLjQ0Ml0gKCoqKSBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1vdXNl
OiAoYWNjZWwpIGFjY2VsZXJhdGlvbiBmYWN0b3I6IDIuMDAwClsgICAgMjMuNDQyXSAoKiopIExv
Z2l0ZWNoIFVTQi1QUy8yIE9wdGljYWwgTW91c2U6IChhY2NlbCkgYWNjZWxlcmF0aW9uIHRocmVz
aG9sZDogNApbICAgIDIzLjQ0Ml0gKElJKSBjb25maWcvdWRldjogQWRkaW5nIGlucHV0IGRldmlj
ZSBMb2dpdGVjaCBVU0ItUFMvMiBPcHRpY2FsIE1vdXNlICgvZGV2L2lucHV0L21vdXNlMCkKWyAg
ICAyMy40NDJdIChJSSkgTm8gaW5wdXQgZHJpdmVyIHNwZWNpZmllZCwgaWdub3JpbmcgdGhpcyBk
ZXZpY2UuClsgICAgMjMuNDQyXSAoSUkpIFRoaXMgZGV2aWNlIG1heSBoYXZlIGJlZW4gYWRkZWQg
d2l0aCBhbm90aGVyIGRldmljZSBmaWxlLgpbICAgIDIzLjQ0M10gKElJKSBjb25maWcvdWRldjog
QWRkaW5nIGlucHV0IGRldmljZSBFZWUgUEMgV01JIGhvdGtleXMgKC9kZXYvaW5wdXQvZXZlbnQ3
KQpbICAgIDIzLjQ0M10gKCoqKSBFZWUgUEMgV01JIGhvdGtleXM6IEFwcGx5aW5nIElucHV0Q2xh
c3MgImV2ZGV2IGtleWJvYXJkIGNhdGNoYWxsIgpbICAgIDIzLjQ0M10gKElJKSBVc2luZyBpbnB1
dCBkcml2ZXIgJ2V2ZGV2JyBmb3IgJ0VlZSBQQyBXTUkgaG90a2V5cycKWyAgICAyMy40NDNdIChJ
SSkgTG9hZGluZyAvdXNyL2xpYi94b3JnL21vZHVsZXMvaW5wdXQvZXZkZXZfZHJ2LnNvClsgICAg
MjMuNDQzXSAoKiopIEVlZSBQQyBXTUkgaG90a2V5czogYWx3YXlzIHJlcG9ydHMgY29yZSBldmVu
dHMKWyAgICAyMy40NDNdICgqKikgZXZkZXY6IEVlZSBQQyBXTUkgaG90a2V5czogRGV2aWNlOiAi
L2Rldi9pbnB1dC9ldmVudDciClsgICAgMjMuNDQzXSAoLS0pIGV2ZGV2OiBFZWUgUEMgV01JIGhv
dGtleXM6IFZlbmRvciAwIFByb2R1Y3QgMApbICAgIDIzLjQ0M10gKC0tKSBldmRldjogRWVlIFBD
IFdNSSBob3RrZXlzOiBGb3VuZCBrZXlzClsgICAgMjMuNDQzXSAoSUkpIGV2ZGV2OiBFZWUgUEMg
V01JIGhvdGtleXM6IENvbmZpZ3VyaW5nIGFzIGtleWJvYXJkClsgICAgMjMuNDQzXSAoKiopIE9w
dGlvbiAiY29uZmlnX2luZm8iICJ1ZGV2Oi9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkv
aW5wdXQvaW5wdXQ3L2V2ZW50NyIKWyAgICAyMy40NDNdIChJSSkgWElOUFVUOiBBZGRpbmcgZXh0
ZW5kZWQgaW5wdXQgZGV2aWNlICJFZWUgUEMgV01JIGhvdGtleXMiICh0eXBlOiBLRVlCT0FSRCwg
aWQgMTIpClsgICAgMjMuNDQzXSAoKiopIE9wdGlvbiAieGtiX3J1bGVzIiAiZXZkZXYiClsgICAg
MjMuNDQzXSAoKiopIE9wdGlvbiAieGtiX21vZGVsIiAicGMxMDUiClsgICAgMjMuNDQzXSAoKiop
IE9wdGlvbiAieGtiX2xheW91dCIgInVzIgpbICAgIDIzLjQ0M10gKCoqKSBPcHRpb24gInhrYl92
YXJpYW50IiAiaW50bCIKWyAgICAyMy40NDNdIChJSSkgY29uZmlnL3VkZXY6IEFkZGluZyBpbnB1
dCBkZXZpY2UgQVQgVHJhbnNsYXRlZCBTZXQgMiBrZXlib2FyZCAoL2Rldi9pbnB1dC9ldmVudDIp
ClsgICAgMjMuNDQzXSAoKiopIEFUIFRyYW5zbGF0ZWQgU2V0IDIga2V5Ym9hcmQ6IEFwcGx5aW5n
IElucHV0Q2xhc3MgImV2ZGV2IGtleWJvYXJkIGNhdGNoYWxsIgpbICAgIDIzLjQ0M10gKElJKSBV
c2luZyBpbnB1dCBkcml2ZXIgJ2V2ZGV2JyBmb3IgJ0FUIFRyYW5zbGF0ZWQgU2V0IDIga2V5Ym9h
cmQnClsgICAgMjMuNDQzXSAoSUkpIExvYWRpbmcgL3Vzci9saWIveG9yZy9tb2R1bGVzL2lucHV0
L2V2ZGV2X2Rydi5zbwpbICAgIDIzLjQ0M10gKCoqKSBBVCBUcmFuc2xhdGVkIFNldCAyIGtleWJv
YXJkOiBhbHdheXMgcmVwb3J0cyBjb3JlIGV2ZW50cwpbICAgIDIzLjQ0M10gKCoqKSBldmRldjog
QVQgVHJhbnNsYXRlZCBTZXQgMiBrZXlib2FyZDogRGV2aWNlOiAiL2Rldi9pbnB1dC9ldmVudDIi
ClsgICAgMjMuNDQzXSAoLS0pIGV2ZGV2OiBBVCBUcmFuc2xhdGVkIFNldCAyIGtleWJvYXJkOiBW
ZW5kb3IgMHgxIFByb2R1Y3QgMHgxClsgICAgMjMuNDQzXSAoLS0pIGV2ZGV2OiBBVCBUcmFuc2xh
dGVkIFNldCAyIGtleWJvYXJkOiBGb3VuZCBrZXlzClsgICAgMjMuNDQzXSAoSUkpIGV2ZGV2OiBB
VCBUcmFuc2xhdGVkIFNldCAyIGtleWJvYXJkOiBDb25maWd1cmluZyBhcyBrZXlib2FyZApbICAg
IDIzLjQ0M10gKCoqKSBPcHRpb24gImNvbmZpZ19pbmZvIiAidWRldjovc3lzL2RldmljZXMvcGxh
dGZvcm0vaTgwNDIvc2VyaW8wL2lucHV0L2lucHV0Mi9ldmVudDIiClsgICAgMjMuNDQzXSAoSUkp
IFhJTlBVVDogQWRkaW5nIGV4dGVuZGVkIGlucHV0IGRldmljZSAiQVQgVHJhbnNsYXRlZCBTZXQg
MiBrZXlib2FyZCIgKHR5cGU6IEtFWUJPQVJELCBpZCAxMykKWyAgICAyMy40NDNdICgqKikgT3B0
aW9uICJ4a2JfcnVsZXMiICJldmRldiIKWyAgICAyMy40NDNdICgqKikgT3B0aW9uICJ4a2JfbW9k
ZWwiICJwYzEwNSIKWyAgICAyMy40NDNdICgqKikgT3B0aW9uICJ4a2JfbGF5b3V0IiAidXMiClsg
ICAgMjMuNDQzXSAoKiopIE9wdGlvbiAieGtiX3ZhcmlhbnQiICJpbnRsIgpbICAgIDQyLjg3OF0g
KElJKSBYS0I6IHJldXNlIHhrbWZpbGUgL3Zhci9saWIveGtiL3NlcnZlci0yMTUzQkJEODEzQjEz
MTkxRkJBQTREQzFBQjk3Njk0MTZDMDYwNUJFLnhrbQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgw
KTogRURJRCB2ZW5kb3IgIkRFTCIsIHByb2QgaWQgNjE0NjIKWyAgICA0My42OTBdIChJSSkgaW50
ZWwoMCk6IFVzaW5nIEVESUQgcmFuZ2UgaW5mbyBmb3IgaG9yaXpvbnRhbCBzeW5jClsgICAgNDMu
NjkwXSAoSUkpIGludGVsKDApOiBVc2luZyBFRElEIHJhbmdlIGluZm8gZm9yIHZlcnRpY2FsIHJl
ZnJlc2gKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IFByaW50aW5nIEREQyBnYXRoZXJlZCBN
b2RlbGluZXM6ClsgICAgNDMuNjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTkyMHgxMjAw
IngwLjAgIDE1NC4wMCAgMTkyMCAxOTY4IDIwMDAgMjA4MCAgMTIwMCAxMjAzIDEyMDkgMTIzNSAr
aHN5bmMgLXZzeW5jICg3NC4wIGtIeikKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IE1vZGVs
aW5lICIxOTIweDEwODAieDAuMCAgMTQ4LjUwICAxOTIwIDIwMDggMjA1MiAyMjAwICAxMDgwIDEw
ODQgMTA4OSAxMTI1ICtoc3luYyArdnN5bmMgKDY3LjUga0h6KQpbICAgIDQzLjY5MF0gKElJKSBp
bnRlbCgwKTogTW9kZWxpbmUgIjE5MjB4MTA4MGkieDAuMCAgIDc0LjI1ICAxOTIwIDIwMDggMjA1
MiAyMjAwICAxMDgwIDEwODQgMTA5NCAxMTI1IGludGVybGFjZSAraHN5bmMgK3ZzeW5jICgzMy44
IGtIeikKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxMjgweDcyMCJ4MC4w
ICAgNzQuMjUgIDEyODAgMTM5MCAxNDMwIDE2NTAgIDcyMCA3MjUgNzMwIDc1MCAraHN5bmMgK3Zz
eW5jICg0NS4wIGtIeikKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICI3MjB4
NDgwIngwLjAgICAyNy4wMCAgNzIwIDczNiA3OTggODU4ICA0ODAgNDg5IDQ5NSA1MjUgLWhzeW5j
IC12c3luYyAoMzEuNSBrSHopClsgICAgNDMuNjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAi
ODAweDYwMCJ4MC4wICAgNDAuMDAgIDgwMCA4NDAgOTY4IDEwNTYgIDYwMCA2MDEgNjA1IDYyOCAr
aHN5bmMgK3ZzeW5jICgzNy45IGtIeikKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IE1vZGVs
aW5lICI2NDB4NDgwIngwLjAgICAzMS41MCAgNjQwIDY1NiA3MjAgODQwICA0ODAgNDgxIDQ4NCA1
MDAgLWhzeW5jIC12c3luYyAoMzcuNSBrSHopClsgICAgNDMuNjkwXSAoSUkpIGludGVsKDApOiBN
b2RlbGluZSAiNjQweDQ4MCJ4MC4wICAgMjUuMTggIDY0MCA2NTYgNzUyIDgwMCAgNDgwIDQ5MCA0
OTIgNTI1IC1oc3luYyAtdnN5bmMgKDMxLjUga0h6KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgw
KTogTW9kZWxpbmUgIjcyMHg0MDAieDAuMCAgIDI4LjMyICA3MjAgNzM4IDg0NiA5MDAgIDQwMCA0
MTIgNDE0IDQ0OSAtaHN5bmMgK3ZzeW5jICgzMS41IGtIeikKWyAgICA0My42OTBdIChJSSkgaW50
ZWwoMCk6IE1vZGVsaW5lICIxMjgweDEwMjQieDAuMCAgMTM1LjAwICAxMjgwIDEyOTYgMTQ0MCAx
Njg4ICAxMDI0IDEwMjUgMTAyOCAxMDY2ICtoc3luYyArdnN5bmMgKDgwLjAga0h6KQpbICAgIDQz
LjY5MF0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjEwMjR4NzY4IngwLjAgICA3OC43NSAgMTAy
NCAxMDQwIDExMzYgMTMxMiAgNzY4IDc2OSA3NzIgODAwICtoc3luYyArdnN5bmMgKDYwLjAga0h6
KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjEwMjR4NzY4IngwLjAgICA2
NS4wMCAgMTAyNCAxMDQ4IDExODQgMTM0NCAgNzY4IDc3MSA3NzcgODA2IC1oc3luYyAtdnN5bmMg
KDQ4LjQga0h6KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjgwMHg2MDAi
eDAuMCAgIDQ5LjUwICA4MDAgODE2IDg5NiAxMDU2ICA2MDAgNjAxIDYwNCA2MjUgK2hzeW5jICt2
c3luYyAoNDYuOSBrSHopClsgICAgNDMuNjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTI4
MHgxMDI0IngwLjAgIDEwOC4wMCAgMTI4MCAxMzI4IDE0NDAgMTY4OCAgMTAyNCAxMDI1IDEwMjgg
MTA2NiAraHN5bmMgK3ZzeW5jICg2NC4wIGtIeikKWyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6
IE1vZGVsaW5lICIxNjAweDEyMDAieDAuMCAgMTYyLjAwICAxNjAwIDE2NjQgMTg1NiAyMTYwICAx
MjAwIDEyMDEgMTIwNCAxMjUwICtoc3luYyArdnN5bmMgKDc1LjAga0h6KQpbICAgIDQzLjY5MF0g
KElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjExNTJ4ODY0IngwLjAgIDEwOC4wMCAgMTE1MiAxMjE2
IDEzNDQgMTYwMCAgODY0IDg2NSA4NjggOTAwICtoc3luYyArdnN5bmMgKDY3LjUga0h6KQpbICAg
IDQzLjY5MF0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjcyMHg1NzYieDAuMCAgIDI3LjAwICA3
MjAgNzMyIDc5NiA4NjQgIDU3NiA1ODEgNTg2IDYyNSAtaHN5bmMgLXZzeW5jICgzMS4yIGtIeikK
WyAgICA0My42OTBdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxNDQweDQ4MGkieDAuMCAgIDI3
LjAwICAxNDQwIDE0NzggMTYwMiAxNzE2ICA0ODAgNDg4IDQ5NCA1MjUgaW50ZXJsYWNlIC1oc3lu
YyAtdnN5bmMgKDE1Ljcga0h6KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUg
IjE0NDB4MjQwIngwLjAgICAyNy4wMCAgMTQ0MCAxNDc4IDE2MDIgMTcxNiAgMjQwIDI0NCAyNDcg
MjYyIC1oc3luYyAtdnN5bmMgKDE1Ljcga0h6KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgwKTog
TW9kZWxpbmUgIjE0NDB4Mjg4IngwLjAgICAyNy4wMCAgMTQ0MCAxNDY0IDE1OTAgMTcyOCAgMjg4
IDI5MCAyOTMgMzEyIC1oc3luYyAtdnN5bmMgKDE1LjYga0h6KQpbICAgIDQzLjY5MF0gKElJKSBp
bnRlbCgwKTogTW9kZWxpbmUgIjE5MjB4MTA4MCJ4MC4wICAgNzQuMjUgIDE5MjAgMjU1OCAyNjAy
IDI3NTAgIDEwODAgMTA4NCAxMDg5IDExMjUgK2hzeW5jICt2c3luYyAoMjcuMCBrSHopClsgICAg
NDMuNjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTI4MHg3MjAieDAuMCAgIDc0LjI1ICAx
MjgwIDE3MjAgMTc2MCAxOTgwICA3MjAgNzI1IDczMCA3NTAgK2hzeW5jICt2c3luYyAoMzcuNSBr
SHopClsgICAgNDMuNjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTkyMHgxMDgwaSJ4MC4w
ICAgNzQuMjUgIDE5MjAgMjQ0OCAyNDkyIDI2NDAgIDEwODAgMTA4NCAxMDk0IDExMjUgaW50ZXJs
YWNlICtoc3luYyArdnN5bmMgKDI4LjEga0h6KQpbICAgIDQzLjY5MF0gKElJKSBpbnRlbCgwKTog
TW9kZWxpbmUgIjE0NDB4NTc2aSJ4MC4wICAgMjcuMDAgIDE0NDAgMTQ2NCAxNTkwIDE3MjggIDU3
NiA1ODAgNTg2IDYyNSBpbnRlcmxhY2UgLWhzeW5jIC12c3luYyAoMTUuNiBrSHopClsgICAgNDMu
NjkwXSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTkyMHgxMDgwIngwLjAgICA3NC4yNSAgMTky
MCAyNDQ4IDI0OTIgMjY0MCAgMTA4MCAxMDg0IDEwODkgMTEyNSAraHN5bmMgK3ZzeW5jICgyOC4x
IGtIeikKWyAgICA1MC4zOTVdIChJSSkgaW50ZWwoMCk6IEVESUQgdmVuZG9yICJERUwiLCBwcm9k
IGlkIDYxNDYyClsgICAgNTAuMzk1XSAoSUkpIGludGVsKDApOiBVc2luZyBoc3luYyByYW5nZXMg
ZnJvbSBjb25maWcgZmlsZQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogVXNpbmcgdnJlZnJl
c2ggcmFuZ2VzIGZyb20gY29uZmlnIGZpbGUKWyAgICA1MC4zOTVdIChJSSkgaW50ZWwoMCk6IFBy
aW50aW5nIEREQyBnYXRoZXJlZCBNb2RlbGluZXM6ClsgICAgNTAuMzk1XSAoSUkpIGludGVsKDAp
OiBNb2RlbGluZSAiMTkyMHgxMjAwIngwLjAgIDE1NC4wMCAgMTkyMCAxOTY4IDIwMDAgMjA4MCAg
MTIwMCAxMjAzIDEyMDkgMTIzNSAraHN5bmMgLXZzeW5jICg3NC4wIGtIeikKWyAgICA1MC4zOTVd
IChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxOTIweDEwODAieDAuMCAgMTQ4LjUwICAxOTIwIDIw
MDggMjA1MiAyMjAwICAxMDgwIDEwODQgMTA4OSAxMTI1ICtoc3luYyArdnN5bmMgKDY3LjUga0h6
KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjE5MjB4MTA4MGkieDAuMCAg
IDc0LjI1ICAxOTIwIDIwMDggMjA1MiAyMjAwICAxMDgwIDEwODQgMTA5NCAxMTI1IGludGVybGFj
ZSAraHN5bmMgK3ZzeW5jICgzMy44IGtIeikKWyAgICA1MC4zOTVdIChJSSkgaW50ZWwoMCk6IE1v
ZGVsaW5lICIxMjgweDcyMCJ4MC4wICAgNzQuMjUgIDEyODAgMTM5MCAxNDMwIDE2NTAgIDcyMCA3
MjUgNzMwIDc1MCAraHN5bmMgK3ZzeW5jICg0NS4wIGtIeikKWyAgICA1MC4zOTVdIChJSSkgaW50
ZWwoMCk6IE1vZGVsaW5lICI3MjB4NDgwIngwLjAgICAyNy4wMCAgNzIwIDczNiA3OTggODU4ICA0
ODAgNDg5IDQ5NSA1MjUgLWhzeW5jIC12c3luYyAoMzEuNSBrSHopClsgICAgNTAuMzk1XSAoSUkp
IGludGVsKDApOiBNb2RlbGluZSAiODAweDYwMCJ4MC4wICAgNDAuMDAgIDgwMCA4NDAgOTY4IDEw
NTYgIDYwMCA2MDEgNjA1IDYyOCAraHN5bmMgK3ZzeW5jICgzNy45IGtIeikKWyAgICA1MC4zOTVd
IChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICI2NDB4NDgwIngwLjAgICAzMS41MCAgNjQwIDY1NiA3
MjAgODQwICA0ODAgNDgxIDQ4NCA1MDAgLWhzeW5jIC12c3luYyAoMzcuNSBrSHopClsgICAgNTAu
Mzk1XSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiNjQweDQ4MCJ4MC4wICAgMjUuMTggIDY0MCA2
NTYgNzUyIDgwMCAgNDgwIDQ5MCA0OTIgNTI1IC1oc3luYyAtdnN5bmMgKDMxLjUga0h6KQpbICAg
IDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjcyMHg0MDAieDAuMCAgIDI4LjMyICA3
MjAgNzM4IDg0NiA5MDAgIDQwMCA0MTIgNDE0IDQ0OSAtaHN5bmMgK3ZzeW5jICgzMS41IGtIeikK
WyAgICA1MC4zOTVdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxMjgweDEwMjQieDAuMCAgMTM1
LjAwICAxMjgwIDEyOTYgMTQ0MCAxNjg4ICAxMDI0IDEwMjUgMTAyOCAxMDY2ICtoc3luYyArdnN5
bmMgKDgwLjAga0h6KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjEwMjR4
NzY4IngwLjAgICA3OC43NSAgMTAyNCAxMDQwIDExMzYgMTMxMiAgNzY4IDc2OSA3NzIgODAwICto
c3luYyArdnN5bmMgKDYwLjAga0h6KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxp
bmUgIjEwMjR4NzY4IngwLjAgICA2NS4wMCAgMTAyNCAxMDQ4IDExODQgMTM0NCAgNzY4IDc3MSA3
NzcgODA2IC1oc3luYyAtdnN5bmMgKDQ4LjQga0h6KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgw
KTogTW9kZWxpbmUgIjgwMHg2MDAieDAuMCAgIDQ5LjUwICA4MDAgODE2IDg5NiAxMDU2ICA2MDAg
NjAxIDYwNCA2MjUgK2hzeW5jICt2c3luYyAoNDYuOSBrSHopClsgICAgNTAuMzk1XSAoSUkpIGlu
dGVsKDApOiBNb2RlbGluZSAiMTI4MHgxMDI0IngwLjAgIDEwOC4wMCAgMTI4MCAxMzI4IDE0NDAg
MTY4OCAgMTAyNCAxMDI1IDEwMjggMTA2NiAraHN5bmMgK3ZzeW5jICg2NC4wIGtIeikKWyAgICA1
MC4zOTVdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5lICIxNjAweDEyMDAieDAuMCAgMTYyLjAwICAx
NjAwIDE2NjQgMTg1NiAyMTYwICAxMjAwIDEyMDEgMTIwNCAxMjUwICtoc3luYyArdnN5bmMgKDc1
LjAga0h6KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjExNTJ4ODY0Ingw
LjAgIDEwOC4wMCAgMTE1MiAxMjE2IDEzNDQgMTYwMCAgODY0IDg2NSA4NjggOTAwICtoc3luYyAr
dnN5bmMgKDY3LjUga0h6KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjcy
MHg1NzYieDAuMCAgIDI3LjAwICA3MjAgNzMyIDc5NiA4NjQgIDU3NiA1ODEgNTg2IDYyNSAtaHN5
bmMgLXZzeW5jICgzMS4yIGtIeikKWyAgICA1MC4zOTVdIChJSSkgaW50ZWwoMCk6IE1vZGVsaW5l
ICIxNDQweDQ4MGkieDAuMCAgIDI3LjAwICAxNDQwIDE0NzggMTYwMiAxNzE2ICA0ODAgNDg4IDQ5
NCA1MjUgaW50ZXJsYWNlIC1oc3luYyAtdnN5bmMgKDE1Ljcga0h6KQpbICAgIDUwLjM5NV0gKElJ
KSBpbnRlbCgwKTogTW9kZWxpbmUgIjE0NDB4MjQwIngwLjAgICAyNy4wMCAgMTQ0MCAxNDc4IDE2
MDIgMTcxNiAgMjQwIDI0NCAyNDcgMjYyIC1oc3luYyAtdnN5bmMgKDE1Ljcga0h6KQpbICAgIDUw
LjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjE0NDB4Mjg4IngwLjAgICAyNy4wMCAgMTQ0
MCAxNDY0IDE1OTAgMTcyOCAgMjg4IDI5MCAyOTMgMzEyIC1oc3luYyAtdnN5bmMgKDE1LjYga0h6
KQpbICAgIDUwLjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjE5MjB4MTA4MCJ4MC4wICAg
NzQuMjUgIDE5MjAgMjU1OCAyNjAyIDI3NTAgIDEwODAgMTA4NCAxMDg5IDExMjUgK2hzeW5jICt2
c3luYyAoMjcuMCBrSHopClsgICAgNTAuMzk1XSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTI4
MHg3MjAieDAuMCAgIDc0LjI1ICAxMjgwIDE3MjAgMTc2MCAxOTgwICA3MjAgNzI1IDczMCA3NTAg
K2hzeW5jICt2c3luYyAoMzcuNSBrSHopClsgICAgNTAuMzk1XSAoSUkpIGludGVsKDApOiBNb2Rl
bGluZSAiMTkyMHgxMDgwaSJ4MC4wICAgNzQuMjUgIDE5MjAgMjQ0OCAyNDkyIDI2NDAgIDEwODAg
MTA4NCAxMDk0IDExMjUgaW50ZXJsYWNlICtoc3luYyArdnN5bmMgKDI4LjEga0h6KQpbICAgIDUw
LjM5NV0gKElJKSBpbnRlbCgwKTogTW9kZWxpbmUgIjE0NDB4NTc2aSJ4MC4wICAgMjcuMDAgIDE0
NDAgMTQ2NCAxNTkwIDE3MjggIDU3NiA1ODAgNTg2IDYyNSBpbnRlcmxhY2UgLWhzeW5jIC12c3lu
YyAoMTUuNiBrSHopClsgICAgNTAuMzk1XSAoSUkpIGludGVsKDApOiBNb2RlbGluZSAiMTkyMHgx
MDgwIngwLjAgICA3NC4yNSAgMTkyMCAyNDQ4IDI0OTIgMjY0MCAgMTA4MCAxMDg0IDEwODkgMTEy
NSAraHN5bmMgK3ZzeW5jICgyOC4xIGtIeikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74570</attachid>
            <date>2012-10-15 20:55:52 +0000</date>
            <delta_ts>2012-10-17 20:26:12 +0000</delta_ts>
            <desc>Christmas time</desc>
            <filename>___force_glXSwapBuffer.diff</filename>
            <type>text/plain</type>
            <size>2562</size>
            <attacher name="Thomas Lübking">thomas.luebking</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2t3aW4vZ2x4YmFja2VuZC5jcHAgYi9rd2luL2dseGJhY2tlbmQuY3BwCmlu
ZGV4IDhiMjM2MGEuLjZmODZjZjggMTAwNjQ0Ci0tLSBhL2t3aW4vZ2x4YmFja2VuZC5jcHAKKysr
IGIva3dpbi9nbHhiYWNrZW5kLmNwcApAQCAtNDIzLDEwICs0MjMsMTIgQEAgdm9pZCBHbHhCYWNr
ZW5kOjp3YWl0U3luYygpCiAKICN1bmRlZiBWU1lOQ19ERUJVRwogCitzdGF0aWMgYm9vbCBmb3Jj
ZV9nbFhTd2FwQnVmZmVycyA9IHRydWU7CiB2b2lkIEdseEJhY2tlbmQ6OmZsdXNoQnVmZmVyKCkK
IHsKKyAgICBjb25zdCBib29sIGZ1bGxSZXBhaW50ID0gZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMgfHwo
bGFzdERhbWFnZSgpID09IFFSZWdpb24oMCwgMCwgZGlzcGxheVdpZHRoKCksIGRpc3BsYXlIZWln
aHQoKSkpOwogICAgIGlmIChpc0RvdWJsZUJ1ZmZlcigpKSB7Ci0gICAgICAgIGlmIChsYXN0TWFz
aygpICYgU2NlbmU6OlBBSU5UX1NDUkVFTl9SRUdJT04pIHsKKyAgICAgICAgaWYgKCFmdWxsUmVw
YWludCkgewogICAgICAgICAgICAgd2FpdFN5bmMoKTsKICAgICAgICAgICAgIGlmIChnbFhDb3B5
U3ViQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgZm9yZWFjaCAoY29uc3QgUVJlY3QgJiByLCBs
YXN0RGFtYWdlKCkucmVjdHMoKSkgewpAQCAtNDgxLDYgKzQ4MywyNyBAQCB2b2lkIEdseEJhY2tl
bmQ6OmZsdXNoQnVmZmVyKCkKICAgICAgICAgICAgICAgICBnbFhTd2FwSW50ZXJ2YWwob3B0aW9u
cy0+aXNHbFZTeW5jKCkgPyAxIDogMCk7CiAgICAgICAgICAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMo
ZGlzcGxheSgpLCBnbHhidWZmZXIpOwogICAgICAgICAgICAgICAgIGdsWFN3YXBJbnRlcnZhbCgw
KTsKKyAgICAgICAgICAgICAgICBnbFhXYWl0WCgpOworICAgICAgICAgICAgICAgIGlmIChmb3Jj
ZV9nbFhTd2FwQnVmZmVycykgeworICAgICAgICAgICAgICAgICAgICAvLyBpZiBhIHNoYWRlciBp
cyBib3VuZCBvciB0aGUgdGV4dHVyZSB1bml0IGlzIGVuYWJsZWQsIGNvcHkgcGl4ZWxzIHJlc3Vs
dHMgaW4gYSBibGFjayBzY3JlZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmVmb3JlIHVu
YmluZCB0aGUgc2hhZGVyIGFuZCByZXN0b3JlIGFmdGVyIGNvcHlpbmcgdGhlIHBpeGVscworICAg
ICAgICAgICAgICAgICAgICBHTGludCBzaGFkZXIgPSAwOworICAgICAgICAgICAgICAgICAgICBp
ZiAoU2hhZGVyTWFuYWdlcjo6aW5zdGFuY2UoKS0+aXNTaGFkZXJCb3VuZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJnNoYWRl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oMCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNU
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2xSZWFkQnVmZmVyKEdMX0ZST05UKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2xCaXRtYXAoMCwgMCwgMCwgMCwgMCwgMCwgTlVMTCk7CisgICAgICAgICAg
ICAgICAgICAgIGdsU2Npc3NvcigwLCAwLCBkaXNwbGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2xDb3B5UGl4ZWxzKDAsIDAsIGRpc3BsYXlXaWR0aCgp
LCBkaXNwbGF5SGVpZ2h0KCksIEdMX0NPTE9SKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xSZWFk
QnVmZmVyKEdMX0JBQ0spOworICAgICAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfU0NJU1NP
Ul9URVNUKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmViaW5kIHByZXZpb3VzbHkgYm91bmQg
c2hhZGVyCisgICAgICAgICAgICAgICAgICAgIGlmIChTaGFkZXJNYW5hZ2VyOjppbnN0YW5jZSgp
LT5pc1NoYWRlckJvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsVXNlUHJvZ3Jh
bShzaGFkZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHN0YXJ0UmVuZGVyVGltZXIoKTsgLy8gdGhpcyBpcyBpbXBvcnRhbnQgc28g
d2UgZG9uJ3QgYXNzdW1lIHRvIGJlIGxvb3NpbmcgZnJhbWVzIGluIHRoZSBjb21wb3NpdG9yIHRp
bWluZyBjYWxjdWxhdGlvbgogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB3
YWl0U3luYygpOwpAQCAtNDkwLDcgKzUxMyw3IEBAIHZvaWQgR2x4QmFja2VuZDo6Zmx1c2hCdWZm
ZXIoKQogICAgICAgICBnbFhXYWl0R0woKTsKICAgICB9IGVsc2UgewogICAgICAgICBnbFhXYWl0
R0woKTsKLSAgICAgICAgaWYgKGxhc3RNYXNrKCkgJiBTY2VuZTo6UEFJTlRfU0NSRUVOX1JFR0lP
TikKKyAgICAgICAgaWYgKCFmdWxsUmVwYWludCkKICAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0
IFFSZWN0ICYgciwgbGFzdERhbWFnZSgpLnJlY3RzKCkpCiAgICAgICAgICAgICAgICAgWENvcHlB
cmVhKGRpc3BsYXkoKSwgYnVmZmVyLCByb290V2luZG93KCksIGdjcm9vdCwgci54KCksIHIueSgp
LCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHIueCgpLCByLnkoKSk7CiAgICAgICAgIGVsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74612</attachid>
            <date>2012-10-17 20:26:12 +0000</date>
            <delta_ts>2012-10-18 03:48:18 +0000</delta_ts>
            <desc>Hanukkah</desc>
            <filename>___dreidel.diff</filename>
            <type>text/plain</type>
            <size>9605</size>
            <attacher name="Thomas Lübking">thomas.luebking</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2t3aW4vZ2x4YmFja2VuZC5jcHAgYi9rd2luL2dseGJhY2tlbmQuY3BwCmlu
ZGV4IDhiMjM2MGEuLjE0ZmRlNzUgMTAwNjQ0Ci0tLSBhL2t3aW4vZ2x4YmFja2VuZC5jcHAKKysr
IGIva3dpbi9nbHhiYWNrZW5kLmNwcApAQCAtNjUsNiArNjUsOCBAQCBHbHhCYWNrZW5kOjp+R2x4
QmFja2VuZCgpCiAgICAgY2hlY2tHTEVycm9yKCJDbGVhbnVwIik7CiB9CiAKK3N0YXRpYyBib29s
IGZvcmNlX2dsWFN3YXBCdWZmZXJzID0gdHJ1ZTsKKwogdm9pZCBHbHhCYWNrZW5kOjppbml0KCkK
IHsKICAgICBpbml0R0xYKCk7CkBAIC0xMDIsNyArMTA0LDcgQEAgdm9pZCBHbHhCYWNrZW5kOjpp
bml0KCkKICAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBtZXNhL2RyaSB3aWxsIHJldHVy
biBhIHJhbmdlIGVycm9yICg2KSBiZWNhdXNlIGRlYWN0aXZhdGluZyB0aGUKICAgICAgICAgICAg
ICAgICAgICAgLy8gc3dhcGludGVydmFsIChhcyBvZiB0b2RheSkgc2VlbXMgY29tcGxldGVseSB1
bnN1cHBvcnRlZAogICAgICAgICAgICAgICAgICAgICBzZXRIYXNXYWl0U3luYyh0cnVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2xYU3dhcEludGVydmFsKDApOworICAgICAgICAgICAgICAgICAg
ICBnbFhTd2FwSW50ZXJ2YWwoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMgJiYgb3B0aW9ucy0+aXNHbFZT
eW5jKCkgPyAxIDogMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgcVdhcm5pbmcoKSA8PCAiTk8gVlNZTkMhIGdsWFdhaXRWaWRl
b1N5bmMoMSwwLCZ1aW50KSBpc24ndCAwIGJ1dCIgPDwgZ2xYV2FpdFZpZGVvU3luYygxLCAwLCAm
c3luYyk7CkBAIC00MjUsNzIgKzQyNywxMzYgQEAgdm9pZCBHbHhCYWNrZW5kOjp3YWl0U3luYygp
CiAKIHZvaWQgR2x4QmFja2VuZDo6Zmx1c2hCdWZmZXIoKQogeworICAgIFFSZWdpb24gZGlzcGxh
eVJlZ2lvbigwLCAwLCBkaXNwbGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgpKTsKKyAgICBjb25z
dCBib29sIGZ1bGxSZXBhaW50ID0gKGxhc3REYW1hZ2UoKSA9PSBkaXNwbGF5UmVnaW9uKTsKKyAg
ICBzdGF0aWMgaW50IGZ1bGxSZXBhaW50Q291bnRlciA9IDA7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBmdWxsUmVwYWludEZhc3RNb2RlRGVsYXlGcmFtZXMgPSAyNDsKICAgICBpZiAoaXNEb3VibGVC
dWZmZXIoKSkgewotICAgICAgICBpZiAobGFzdE1hc2soKSAmIFNjZW5lOjpQQUlOVF9TQ1JFRU5f
UkVHSU9OKSB7CisgICAgICAgIGVudW0geyBTd2FwID0gMTw8MCwgQ29weVBpeGVscyA9IDE8PDEs
IENvcHlTdWJCdWZmZXIgPSAxPDwyIH07CisgICAgICAgIGludCBhY3Rpb25zID0gMDsKKyAgICAg
ICAgc3RhdGljIFFSZWdpb24gc2Vjb25kTGFzdERhbWFnZTsKKworICAgICAgICBpZiAoZnVsbFJl
cGFpbnRDb3VudGVyIDwgMCkgeworICAgICAgICAgICAgLy8gcmVxdWlyZWQgZm9yIHRpZHkgdXAK
KyAgICAgICAgICAgIHNlY29uZExhc3REYW1hZ2UgPSBkaXNwbGF5UmVnaW9uOworICAgICAgICAg
ICAgKytmdWxsUmVwYWludENvdW50ZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bGxSZXBh
aW50KSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBrZWVwIGdldHRpbmcgZnVsbCByZXBhaW50cywg
aXQncyByZWFzb25hYmxlIHRvIGFzc3VtZSB0aGF0IHRoZXJlJ3Mgc29tZSBsb25ndGltZQorICAg
ICAgICAgICAgLy8gZnVsbHNjcmVlbiBhY3Rpb24gZ29pbmcgb24gLSB3ZSBjYW4gc2tpcCBjb3B5
aW5nIGJhY2sgdGhlIGJ1ZmZlciB0aGVuLCBzaW5jZSB0aGUgYnVmZmVyCisgICAgICAgICAgICAv
LyB3aWxsICpsaWtlbHkqIGJlIGNvbXBsZXRlbHkgb3ZlcnJpZGRlbiB3aXRoIHRoZSBuZXh0IHBh
aW50IGFzIHdlbGwKKyAgICAgICAgICAgIC8vIGluIGNhc2UgdGhhdCBhc3N1bXB0aW9uIGlzIHdy
b25nICh0aGUgRlMgcHJvYyBlbmRzKSB3ZSBqdXN0IGluamVjdCBhIGNsZWFyaW5nIGZyYW1lCisg
ICAgICAgICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAoZnVsbFJlcGFpbnRDb3VudGVyICsgMSkg
JiAweGZmZmZmZmY7CisvLyAgICAgICAgICAgICBxRGVidWcoKSA8PCBmdWxsUmVwYWludENvdW50
ZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZnVsbFJlcGFp
bnRDb3VudGVyID49IGZ1bGxSZXBhaW50RmFzdE1vZGVEZWxheUZyYW1lcykgeworICAgICAgICAg
ICAgICAgIC8vIHdoZW4gZHJvcHBpbmcgb3V0IG9mIG9wdGltaXplZCBwdXJlIHN3YXAgbW9kZSwg
d2UgaGF2ZSB0byBhZGQgYW4gZXh0cmEgcmVwYWludCAoY2xlYW51cCkKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgYWxzbyBlbnN1cmUgd2UgYWxpZ24gYnVmZmVycyAobWVnYXRpdmUgY291bnRlcikK
KyAgICAgICAgICAgICAgICBzZWNvbmRMYXN0RGFtYWdlID0gZGlzcGxheVJlZ2lvbjsKKyAgICAg
ICAgICAgICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAtMjsgLy8gVE9ETyBpcyAtMSBzdWZmaWNp
ZW50PworICAgICAgICAgICAgICAgIGVmZmVjdHMtPmFkZFJlcGFpbnRGdWxsKCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGZ1bGxSZXBhaW50Q291bnRlciA+IDApIHsKKyAgICAgICAgICAgICAg
ICAvLyBkb24ndCByZXNldCBpZiB0aGUgY291bnRlciBpcyBuZWdhdGl2ZSEKKyAgICAgICAgICAg
ICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKGZvcmNlX2dsWFN3YXBCdWZmZXJzIHx8IGZ1bGxSZXBhaW50KQorICAgICAg
ICAgICAgYWN0aW9ucyB8PSBTd2FwOworICAgICAgICBpZiAoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMg
JiYgKGZ1bGxSZXBhaW50Q291bnRlciA8IGZ1bGxSZXBhaW50RmFzdE1vZGVEZWxheUZyYW1lcykp
CisgICAgICAgICAgICBhY3Rpb25zIHw9IENvcHlQaXhlbHM7CisgICAgICAgIGlmICghZnVsbFJl
cGFpbnQpIHsKKyAgICAgICAgICAgIGlmICgoYWN0aW9ucyAmIFN3YXApIHx8ICFnbFhDb3B5U3Vi
QnVmZmVyKQorICAgICAgICAgICAgICAgIGFjdGlvbnMgfD0gQ29weVBpeGVsczsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhY3Rpb25zIHw9IENvcHlTdWJCdWZmZXI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYWN0aW9ucyAmIENvcHlTdWJCdWZmZXIpIHsKICAgICAgICAg
ICAgIHdhaXRTeW5jKCk7Ci0gICAgICAgICAgICBpZiAoZ2xYQ29weVN1YkJ1ZmZlcikgewotICAg
ICAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0IFFSZWN0ICYgciwgbGFzdERhbWFnZSgpLnJlY3Rz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBPcGVuR0wgY29vcmRpbmF0
ZXMKLSAgICAgICAgICAgICAgICAgICAgaW50IHkgPSBkaXNwbGF5SGVpZ2h0KCkgLSByLnkoKSAt
IHIuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGdsWENvcHlTdWJCdWZmZXIoZGlzcGxh
eSgpLCBnbHhidWZmZXIsIHIueCgpLCB5LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgZm9yZWFjaCAoY29uc3QgUVJlY3QgJiByLCBsYXN0RGFtYWdlKCkucmVjdHMoKSkgewor
ICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gT3BlbkdMIGNvb3JkaW5hdGVzCisgICAgICAg
ICAgICAgICAgaW50IHkgPSBkaXNwbGF5SGVpZ2h0KCkgLSByLnkoKSAtIHIuaGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgZ2xYQ29weVN1YkJ1ZmZlcihkaXNwbGF5KCksIGdseGJ1ZmZlciwgci54
KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYWN0aW9ucyAmIFN3YXApIHsKKyAgICAgICAgICAgIGlmIChnbFhTd2Fw
SW50ZXJ2YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMpCisg
ICAgICAgICAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwgZ2x4YnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2xYU3dhcEludGVy
dmFsKG9wdGlvbnMtPmlzR2xWU3luYygpID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICBn
bFhTd2FwQnVmZmVycyhkaXNwbGF5KCksIGdseGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IGdsWFN3YXBJbnRlcnZhbCgwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIGlmIGEgc2hhZGVyIGlzIGJvdW5kIG9yIHRoZSB0ZXh0
dXJlIHVuaXQgaXMgZW5hYmxlZCwgY29weSBwaXhlbHMgcmVzdWx0cyBpbiBhIGJsYWNrIHNjcmVl
bgotICAgICAgICAgICAgICAgIC8vIHRoZXJlZm9yZSB1bmJpbmQgdGhlIHNoYWRlciBhbmQgcmVz
dG9yZSBhZnRlciBjb3B5aW5nIHRoZSBwaXhlbHMKLSAgICAgICAgICAgICAgICBHTGludCBzaGFk
ZXIgPSAwOwotICAgICAgICAgICAgICAgIGlmIChTaGFkZXJNYW5hZ2VyOjppbnN0YW5jZSgpLT5p
c1NoYWRlckJvdW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9D
VVJSRU5UX1BST0dSQU0sICZzaGFkZXIpOwotICAgICAgICAgICAgICAgICAgICBnbFVzZVByb2dy
YW0oMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJvb2wgcmVlbmFibGVU
ZXhVbml0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKGdsSXNFbmFibGVkKEdMX1RFWFRV
UkVfMkQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsK
LSAgICAgICAgICAgICAgICAgICAgcmVlbmFibGVUZXhVbml0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gbm8gaWRlYSB3aHkgZ2xTY2lzc29yKCkgaXMgdXNl
ZCwgYnV0IENvbXBpeiBoYXMgaXQgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0Ci0gICAgICAg
ICAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICAgICAgICAgICAgICB3YWl0
U3luYygpOworICAgICAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwgZ2x4YnVm
ZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3Rpb25zICYg
Q29weVBpeGVscykgeworICAgICAgICAgICAgLy8gaWYgYSBzaGFkZXIgaXMgYm91bmQgb3IgdGhl
IHRleHR1cmUgdW5pdCBpcyBlbmFibGVkLCBjb3B5IHBpeGVscyByZXN1bHRzIGluIGEgYmxhY2sg
c2NyZWVuCisgICAgICAgICAgICAvLyB0aGVyZWZvcmUgdW5iaW5kIHRoZSBzaGFkZXIgYW5kIHJl
c3RvcmUgYWZ0ZXIgY29weWluZyB0aGUgcGl4ZWxzCisgICAgICAgICAgICBHTGludCBzaGFkZXIg
PSAwOworICAgICAgICAgICAgaWYgKFNoYWRlck1hbmFnZXI6Omluc3RhbmNlKCktPmlzU2hhZGVy
Qm91bmQoKSkgeworICAgICAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9H
UkFNLCAmc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oMCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBib29sIHJlZW5hYmxlVGV4VW5pdCA9IGZhbHNlOworICAgICAg
ICAgICAgaWYgKGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfMkQpKSB7CisgICAgICAgICAgICAgICAg
Z2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOworICAgICAgICAgICAgICAgIHJlZW5hYmxlVGV4VW5p
dCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBubyBpZGVhIHdoeSBnbFNj
aXNzb3IoKSBpcyB1c2VkLCBidXQgQ29tcGl6IGhhcyBpdCBhbmQgaXQgZG9lc24ndCBzZWVtIHRv
IGh1cnQKKyAgICAgICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgICAg
ICBRUmVnaW9uIGRhbWFnZTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25zICYgU3dhcCkgeworICAg
ICAgICAgICAgICAgIGdsWFdhaXRHTCgpOworICAgICAgICAgICAgICAgIGdsUmVhZEJ1ZmZlcihH
TF9GUk9OVCk7CisgICAgICAgICAgICAgICAgZGFtYWdlID0gbGFzdERhbWFnZSgpIHwgc2Vjb25k
TGFzdERhbWFnZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZ2xEcmF3
QnVmZmVyKEdMX0ZST05UKTsKLSAgICAgICAgICAgICAgICBpbnQgeHBvcyA9IDA7Ci0gICAgICAg
ICAgICAgICAgaW50IHlwb3MgPSAwOwotICAgICAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0IFFS
ZWN0ICYgciwgbGFzdERhbWFnZSgpLnJlY3RzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
Y29udmVydCB0byBPcGVuR0wgY29vcmRpbmF0ZXMKLSAgICAgICAgICAgICAgICAgICAgaW50IHkg
PSBkaXNwbGF5SGVpZ2h0KCkgLSByLnkoKSAtIHIuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIE1vdmUgcmFzdGVyIHBvc2l0aW9uIHJlbGF0aXZlbHkgdXNpbmcgZ2xCaXRtYXAoKSBy
YXRoZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiB1c2luZyBnbFJhc3RlclBvczJmKCkg
LSB0aGUgbGF0dGVyIGNhdXNlcyBkcmF3aW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIGFydGVm
YWN0cyBhdCB0aGUgYm90dG9tIHNjcmVlbiBlZGdlIHdpdGggc29tZSBnZnggY2FyZHMKKyAgICAg
ICAgICAgICAgICBkYW1hZ2UgPSBsYXN0RGFtYWdlKCk7CisgICAgICAgICAgICAgICAgd2FpdFN5
bmMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCB4cG9zID0gMDsKKyAgICAgICAg
ICAgIGludCB5cG9zID0gMDsKKyAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0IFFSZWN0ICYgciwg
ZGFtYWdlLnJlY3RzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIE9wZW5HTCBj
b29yZGluYXRlcworICAgICAgICAgICAgICAgIGludCB5ID0gZGlzcGxheUhlaWdodCgpIC0gci55
KCkgLSByLmhlaWdodCgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgcmFzdGVyIHBvc2l0aW9u
IHJlbGF0aXZlbHkgdXNpbmcgZ2xCaXRtYXAoKSByYXRoZXIKKyAgICAgICAgICAgICAgICAvLyB0
aGFuIHVzaW5nIGdsUmFzdGVyUG9zMmYoKSAtIHRoZSBsYXR0ZXIgY2F1c2VzIGRyYXdpbmcKKyAg
ICAgICAgICAgICAgICAvLyBhcnRlZmFjdHMgYXQgdGhlIGJvdHRvbSBzY3JlZW4gZWRnZSB3aXRo
IHNvbWUgZ2Z4IGNhcmRzCiAvLyAgICAgICAgICAgICAgICAgICAgZ2xSYXN0ZXJQb3MyZiggci54
KCksIHIueSgpICsgci5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsQml0bWFwKDAs
IDAsIDAsIDAsIHIueCgpIC0geHBvcywgeSAtIHlwb3MsIE5VTEwpOwotICAgICAgICAgICAgICAg
ICAgICB4cG9zID0gci54KCk7Ci0gICAgICAgICAgICAgICAgICAgIHlwb3MgPSB5OwotICAgICAg
ICAgICAgICAgICAgICBnbFNjaXNzb3Ioci54KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGdsQ29weVBpeGVscyhyLngoKSwgeSwgci53aWR0aCgpLCBy
LmhlaWdodCgpLCBHTF9DT0xPUik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGdsQml0bWFwKDAsIDAsIDAsIDAsIC14cG9zLCAteXBvcywgTlVMTCk7ICAgLy8gbW92ZSBwb3Np
dGlvbiBiYWNrIHRvIDAsMAotICAgICAgICAgICAgICAgIGdsRHJhd0J1ZmZlcihHTF9CQUNLKTsK
LSAgICAgICAgICAgICAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVlbmFibGVUZXhVbml0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGdsRW5hYmxl
KEdMX1RFWFRVUkVfMkQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBy
ZWJpbmQgcHJldmlvdXNseSBib3VuZCBzaGFkZXIKLSAgICAgICAgICAgICAgICBpZiAoU2hhZGVy
TWFuYWdlcjo6aW5zdGFuY2UoKS0+aXNTaGFkZXJCb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGdsVXNlUHJvZ3JhbShzaGFkZXIpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBnbEJpdG1hcCgwLCAwLCAwLCAwLCByLngoKSAtIHhwb3MsIHkgLSB5cG9zLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICB4cG9zID0gci54KCk7CisgICAgICAgICAgICAgICAgeXBvcyA9IHk7
CisgICAgICAgICAgICAgICAgZ2xTY2lzc29yKHIueCgpLCB5LCByLndpZHRoKCksIHIuaGVpZ2h0
KCkpOworICAgICAgICAgICAgICAgIGdsQ29weVBpeGVscyhyLngoKSwgeSwgci53aWR0aCgpLCBy
LmhlaWdodCgpLCBHTF9DT0xPUik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoZ2xYU3dhcEludGVydmFsKSB7Ci0gICAgICAgICAgICAgICAgZ2xYU3dh
cEludGVydmFsKG9wdGlvbnMtPmlzR2xWU3luYygpID8gMSA6IDApOwotICAgICAgICAgICAgICAg
IGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwgZ2x4YnVmZmVyKTsKLSAgICAgICAgICAgICAgICBn
bFhTd2FwSW50ZXJ2YWwoMCk7Ci0gICAgICAgICAgICAgICAgc3RhcnRSZW5kZXJUaW1lcigpOyAv
LyB0aGlzIGlzIGltcG9ydGFudCBzbyB3ZSBkb24ndCBhc3N1bWUgdG8gYmUgbG9vc2luZyBmcmFt
ZXMgaW4gdGhlIGNvbXBvc2l0b3IgdGltaW5nIGNhbGN1bGF0aW9uCisgICAgICAgICAgICBnbEJp
dG1hcCgwLCAwLCAwLCAwLCAteHBvcywgLXlwb3MsIE5VTEwpOyAgIC8vIG1vdmUgcG9zaXRpb24g
YmFjayB0byAwLDAKKyAgICAgICAgICAgIGlmIChhY3Rpb25zICYgU3dhcCkgeworICAgICAgICAg
ICAgICAgIHNlY29uZExhc3REYW1hZ2UgPSBsYXN0RGFtYWdlKCk7CisgICAgICAgICAgICAgICAg
Z2xSZWFkQnVmZmVyKEdMX0JBQ0spOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICB3YWl0U3luYygpOwotICAgICAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXko
KSwgZ2x4YnVmZmVyKTsKKyAgICAgICAgICAgICAgICBnbERyYXdCdWZmZXIoR0xfQkFDSyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAg
ICAgICAgICAgIGlmIChyZWVuYWJsZVRleFVuaXQpIHsKKyAgICAgICAgICAgICAgICBnbEVuYWJs
ZShHTF9URVhUVVJFXzJEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHJlYmluZCBw
cmV2aW91c2x5IGJvdW5kIHNoYWRlcgorICAgICAgICAgICAgaWYgKFNoYWRlck1hbmFnZXI6Omlu
c3RhbmNlKCktPmlzU2hhZGVyQm91bmQoKSkgeworICAgICAgICAgICAgICAgIGdsVXNlUHJvZ3Jh
bShzaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGdsWFdhaXRHTCgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGdsWFdhaXRHTCgpOwotICAgICAgICBpZiAobGFzdE1h
c2soKSAmIFNjZW5lOjpQQUlOVF9TQ1JFRU5fUkVHSU9OKQorICAgICAgICBpZiAoIWZ1bGxSZXBh
aW50KQogICAgICAgICAgICAgZm9yZWFjaCAoY29uc3QgUVJlY3QgJiByLCBsYXN0RGFtYWdlKCku
cmVjdHMoKSkKICAgICAgICAgICAgICAgICBYQ29weUFyZWEoZGlzcGxheSgpLCBidWZmZXIsIHJv
b3RXaW5kb3coKSwgZ2Nyb290LCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwg
ci54KCksIHIueSgpKTsKICAgICAgICAgZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74617</attachid>
            <date>2012-10-18 03:48:18 +0000</date>
            <delta_ts>2012-10-18 03:48:18 +0000</delta_ts>
            <desc>Hanukkah #2</desc>
            <filename>___dreidel.diff</filename>
            <type>text/plain</type>
            <size>9642</size>
            <attacher name="Thomas Lübking">thomas.luebking</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2t3aW4vZ2x4YmFja2VuZC5jcHAgYi9rd2luL2dseGJhY2tlbmQuY3BwCmlu
ZGV4IDhiMjM2MGEuLjEyODA5MDkgMTAwNjQ0Ci0tLSBhL2t3aW4vZ2x4YmFja2VuZC5jcHAKKysr
IGIva3dpbi9nbHhiYWNrZW5kLmNwcApAQCAtNjUsNiArNjUsOCBAQCBHbHhCYWNrZW5kOjp+R2x4
QmFja2VuZCgpCiAgICAgY2hlY2tHTEVycm9yKCJDbGVhbnVwIik7CiB9CiAKK3N0YXRpYyBib29s
IGZvcmNlX2dsWFN3YXBCdWZmZXJzID0gdHJ1ZTsKKwogdm9pZCBHbHhCYWNrZW5kOjppbml0KCkK
IHsKICAgICBpbml0R0xYKCk7CkBAIC0xMDIsNyArMTA0LDcgQEAgdm9pZCBHbHhCYWNrZW5kOjpp
bml0KCkKICAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciBtZXNhL2RyaSB3aWxsIHJldHVy
biBhIHJhbmdlIGVycm9yICg2KSBiZWNhdXNlIGRlYWN0aXZhdGluZyB0aGUKICAgICAgICAgICAg
ICAgICAgICAgLy8gc3dhcGludGVydmFsIChhcyBvZiB0b2RheSkgc2VlbXMgY29tcGxldGVseSB1
bnN1cHBvcnRlZAogICAgICAgICAgICAgICAgICAgICBzZXRIYXNXYWl0U3luYyh0cnVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2xYU3dhcEludGVydmFsKDApOworICAgICAgICAgICAgICAgICAg
ICBnbFhTd2FwSW50ZXJ2YWwoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMgJiYgb3B0aW9ucy0+aXNHbFZT
eW5jKCkgPyAxIDogMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgcVdhcm5pbmcoKSA8PCAiTk8gVlNZTkMhIGdsWFdhaXRWaWRl
b1N5bmMoMSwwLCZ1aW50KSBpc24ndCAwIGJ1dCIgPDwgZ2xYV2FpdFZpZGVvU3luYygxLCAwLCAm
c3luYyk7CkBAIC00MjUsNzIgKzQyNywxMzcgQEAgdm9pZCBHbHhCYWNrZW5kOjp3YWl0U3luYygp
CiAKIHZvaWQgR2x4QmFja2VuZDo6Zmx1c2hCdWZmZXIoKQogeworICAgIFFSZWdpb24gZGlzcGxh
eVJlZ2lvbigwLCAwLCBkaXNwbGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgpKTsKKyAgICBjb25z
dCBib29sIGZ1bGxSZXBhaW50ID0gKGxhc3REYW1hZ2UoKSA9PSBkaXNwbGF5UmVnaW9uKTsKKyAg
ICBzdGF0aWMgaW50IGZ1bGxSZXBhaW50Q291bnRlciA9IDA7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBmdWxsUmVwYWludEZhc3RNb2RlRGVsYXlGcmFtZXMgPSAyNDsKICAgICBpZiAoaXNEb3VibGVC
dWZmZXIoKSkgewotICAgICAgICBpZiAobGFzdE1hc2soKSAmIFNjZW5lOjpQQUlOVF9TQ1JFRU5f
UkVHSU9OKSB7CisgICAgICAgIGVudW0geyBTd2FwID0gMTw8MCwgQ29weVBpeGVscyA9IDE8PDEs
IENvcHlTdWJCdWZmZXIgPSAxPDwyIH07CisgICAgICAgIGludCBhY3Rpb25zID0gMDsKKyAgICAg
ICAgc3RhdGljIFFSZWdpb24gc2Vjb25kTGFzdERhbWFnZTsKKworICAgICAgICBpZiAoZnVsbFJl
cGFpbnRDb3VudGVyIDwgMCkgeworICAgICAgICAgICAgLy8gcmVxdWlyZWQgZm9yIHRpZHkgdXAK
KyAgICAgICAgICAgIHNlY29uZExhc3REYW1hZ2UgPSBkaXNwbGF5UmVnaW9uOworICAgICAgICAg
ICAgKytmdWxsUmVwYWludENvdW50ZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bGxSZXBh
aW50KSB7CisgICAgICAgICAgICAvLyBpZiB3ZSBrZWVwIGdldHRpbmcgZnVsbCByZXBhaW50cywg
aXQncyByZWFzb25hYmxlIHRvIGFzc3VtZSB0aGF0IHRoZXJlJ3Mgc29tZSBsb25ndGltZQorICAg
ICAgICAgICAgLy8gZnVsbHNjcmVlbiBhY3Rpb24gZ29pbmcgb24gLSB3ZSBjYW4gc2tpcCBjb3B5
aW5nIGJhY2sgdGhlIGJ1ZmZlciB0aGVuLCBzaW5jZSB0aGUgYnVmZmVyCisgICAgICAgICAgICAv
LyB3aWxsICpsaWtlbHkqIGJlIGNvbXBsZXRlbHkgb3ZlcnJpZGRlbiB3aXRoIHRoZSBuZXh0IHBh
aW50IGFzIHdlbGwKKyAgICAgICAgICAgIC8vIGluIGNhc2UgdGhhdCBhc3N1bXB0aW9uIGlzIHdy
b25nICh0aGUgRlMgcHJvYyBlbmRzKSB3ZSBqdXN0IGluamVjdCBhIGNsZWFyaW5nIGZyYW1lCisg
ICAgICAgICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAoZnVsbFJlcGFpbnRDb3VudGVyICsgMSkg
JiAweGZmZmZmZmY7CisvLyAgICAgICAgICAgICBxRGVidWcoKSA8PCBmdWxsUmVwYWludENvdW50
ZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZnVsbFJlcGFp
bnRDb3VudGVyID49IGZ1bGxSZXBhaW50RmFzdE1vZGVEZWxheUZyYW1lcykgeworICAgICAgICAg
ICAgICAgIC8vIHdoZW4gZHJvcHBpbmcgb3V0IG9mIG9wdGltaXplZCBwdXJlIHN3YXAgbW9kZSwg
d2UgaGF2ZSB0byBhZGQgYW4gZXh0cmEgcmVwYWludCAoY2xlYW51cCkKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgYWxzbyBlbnN1cmUgd2UgYWxpZ24gYnVmZmVycyAobWVnYXRpdmUgY291bnRlcikK
KyAgICAgICAgICAgICAgICBzZWNvbmRMYXN0RGFtYWdlID0gZGlzcGxheVJlZ2lvbjsKKyAgICAg
ICAgICAgICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAtMjsgLy8gVE9ETyBpcyAtMSBzdWZmaWNp
ZW50PworICAgICAgICAgICAgICAgIGVmZmVjdHMtPmFkZFJlcGFpbnRGdWxsKCk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGZ1bGxSZXBhaW50Q291bnRlciA+IDApIHsKKyAgICAgICAgICAgICAg
ICAvLyBkb24ndCByZXNldCBpZiB0aGUgY291bnRlciBpcyBuZWdhdGl2ZSEKKyAgICAgICAgICAg
ICAgICBmdWxsUmVwYWludENvdW50ZXIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKGZvcmNlX2dsWFN3YXBCdWZmZXJzIHx8IGZ1bGxSZXBhaW50KQorICAgICAg
ICAgICAgYWN0aW9ucyB8PSBTd2FwOworICAgICAgICBpZiAoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMg
JiYgKGZ1bGxSZXBhaW50Q291bnRlciA8IGZ1bGxSZXBhaW50RmFzdE1vZGVEZWxheUZyYW1lcykp
CisgICAgICAgICAgICBhY3Rpb25zIHw9IENvcHlQaXhlbHM7CisgICAgICAgIGlmICghZnVsbFJl
cGFpbnQpIHsKKyAgICAgICAgICAgIGlmICgoYWN0aW9ucyAmIFN3YXApIHx8ICFnbFhDb3B5U3Vi
QnVmZmVyKQorICAgICAgICAgICAgICAgIGFjdGlvbnMgfD0gQ29weVBpeGVsczsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhY3Rpb25zIHw9IENvcHlTdWJCdWZmZXI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYWN0aW9ucyAmIENvcHlTdWJCdWZmZXIpIHsKICAgICAgICAg
ICAgIHdhaXRTeW5jKCk7Ci0gICAgICAgICAgICBpZiAoZ2xYQ29weVN1YkJ1ZmZlcikgewotICAg
ICAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0IFFSZWN0ICYgciwgbGFzdERhbWFnZSgpLnJlY3Rz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBPcGVuR0wgY29vcmRpbmF0
ZXMKLSAgICAgICAgICAgICAgICAgICAgaW50IHkgPSBkaXNwbGF5SGVpZ2h0KCkgLSByLnkoKSAt
IHIuaGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGdsWENvcHlTdWJCdWZmZXIoZGlzcGxh
eSgpLCBnbHhidWZmZXIsIHIueCgpLCB5LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgZm9yZWFjaCAoY29uc3QgUVJlY3QgJiByLCBsYXN0RGFtYWdlKCkucmVjdHMoKSkgewor
ICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gT3BlbkdMIGNvb3JkaW5hdGVzCisgICAgICAg
ICAgICAgICAgaW50IHkgPSBkaXNwbGF5SGVpZ2h0KCkgLSByLnkoKSAtIHIuaGVpZ2h0KCk7Cisg
ICAgICAgICAgICAgICAgZ2xYQ29weVN1YkJ1ZmZlcihkaXNwbGF5KCksIGdseGJ1ZmZlciwgci54
KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYWN0aW9ucyAmIFN3YXApIHsKKyAgICAgICAgICAgIGlmIChnbFhTd2Fw
SW50ZXJ2YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZm9yY2VfZ2xYU3dhcEJ1ZmZlcnMpCisg
ICAgICAgICAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwgZ2x4YnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2xYU3dhcEludGVy
dmFsKG9wdGlvbnMtPmlzR2xWU3luYygpID8gMSA6IDApOworICAgICAgICAgICAgICAgICAgICBn
bFhTd2FwQnVmZmVycyhkaXNwbGF5KCksIGdseGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IGdsWFN3YXBJbnRlcnZhbCgwKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c3RhcnRSZW5kZXJUaW1lcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB3YWl0U3luYygpOworICAgICAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwg
Z2x4YnVmZmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChhY3Rp
b25zICYgQ29weVBpeGVscykgeworICAgICAgICAgICAgLy8gaWYgYSBzaGFkZXIgaXMgYm91bmQg
b3IgdGhlIHRleHR1cmUgdW5pdCBpcyBlbmFibGVkLCBjb3B5IHBpeGVscyByZXN1bHRzIGluIGEg
YmxhY2sgc2NyZWVuCisgICAgICAgICAgICAvLyB0aGVyZWZvcmUgdW5iaW5kIHRoZSBzaGFkZXIg
YW5kIHJlc3RvcmUgYWZ0ZXIgY29weWluZyB0aGUgcGl4ZWxzCisgICAgICAgICAgICBHTGludCBz
aGFkZXIgPSAwOworICAgICAgICAgICAgaWYgKFNoYWRlck1hbmFnZXI6Omluc3RhbmNlKCktPmlz
U2hhZGVyQm91bmQoKSkgeworICAgICAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVO
VF9QUk9HUkFNLCAmc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oMCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIHJlZW5hYmxlVGV4VW5pdCA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfMkQpKSB7CisgICAgICAgICAg
ICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOworICAgICAgICAgICAgICAgIHJlZW5hYmxl
VGV4VW5pdCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBubyBpZGVhIHdo
eSBnbFNjaXNzb3IoKSBpcyB1c2VkLCBidXQgQ29tcGl6IGhhcyBpdCBhbmQgaXQgZG9lc24ndCBz
ZWVtIHRvIGh1cnQKKyAgICAgICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAg
ICAgICAgICBRUmVnaW9uIGRhbWFnZTsKKyAgICAgICAgICAgIGlmIChhY3Rpb25zICYgU3dhcCkg
eworICAgICAgICAgICAgICAgIGdsWFdhaXRHTCgpOworICAgICAgICAgICAgICAgIGdsUmVhZEJ1
ZmZlcihHTF9GUk9OVCk7CisgICAgICAgICAgICAgICAgZGFtYWdlID0gbGFzdERhbWFnZSgpIHwg
c2Vjb25kTGFzdERhbWFnZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gaWYgYSBzaGFkZXIgaXMgYm91bmQgb3IgdGhlIHRleHR1cmUgdW5pdCBpcyBlbmFibGVkLCBj
b3B5IHBpeGVscyByZXN1bHRzIGluIGEgYmxhY2sgc2NyZWVuCi0gICAgICAgICAgICAgICAgLy8g
dGhlcmVmb3JlIHVuYmluZCB0aGUgc2hhZGVyIGFuZCByZXN0b3JlIGFmdGVyIGNvcHlpbmcgdGhl
IHBpeGVscwotICAgICAgICAgICAgICAgIEdMaW50IHNoYWRlciA9IDA7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNoYWRlck1hbmFnZXI6Omluc3RhbmNlKCktPmlzU2hhZGVyQm91bmQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJnNoYWRl
cik7Ci0gICAgICAgICAgICAgICAgICAgIGdsVXNlUHJvZ3JhbSgwKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYm9vbCByZWVuYWJsZVRleFVuaXQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBpZiAoZ2xJc0VuYWJsZWQoR0xfVEVYVFVSRV8yRCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOwotICAgICAgICAgICAgICAgICAgICBy
ZWVuYWJsZVRleFVuaXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAvLyBubyBpZGVhIHdoeSBnbFNjaXNzb3IoKSBpcyB1c2VkLCBidXQgQ29tcGl6IGhhcyBpdCBh
bmQgaXQgZG9lc24ndCBzZWVtIHRvIGh1cnQKLSAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9T
Q0lTU09SX1RFU1QpOwogICAgICAgICAgICAgICAgIGdsRHJhd0J1ZmZlcihHTF9GUk9OVCk7Ci0g
ICAgICAgICAgICAgICAgaW50IHhwb3MgPSAwOwotICAgICAgICAgICAgICAgIGludCB5cG9zID0g
MDsKLSAgICAgICAgICAgICAgICBmb3JlYWNoIChjb25zdCBRUmVjdCAmIHIsIGxhc3REYW1hZ2Uo
KS5yZWN0cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gT3BlbkdMIGNv
b3JkaW5hdGVzCi0gICAgICAgICAgICAgICAgICAgIGludCB5ID0gZGlzcGxheUhlaWdodCgpIC0g
ci55KCkgLSByLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHJhc3RlciBw
b3NpdGlvbiByZWxhdGl2ZWx5IHVzaW5nIGdsQml0bWFwKCkgcmF0aGVyCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHRoYW4gdXNpbmcgZ2xSYXN0ZXJQb3MyZigpIC0gdGhlIGxhdHRlciBjYXVzZXMg
ZHJhd2luZwotICAgICAgICAgICAgICAgICAgICAvLyBhcnRlZmFjdHMgYXQgdGhlIGJvdHRvbSBz
Y3JlZW4gZWRnZSB3aXRoIHNvbWUgZ2Z4IGNhcmRzCisgICAgICAgICAgICAgICAgZGFtYWdlID0g
bGFzdERhbWFnZSgpOworICAgICAgICAgICAgICAgIHdhaXRTeW5jKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpbnQgeHBvcyA9IDA7CisgICAgICAgICAgICBpbnQgeXBvcyA9IDA7Cisg
ICAgICAgICAgICBmb3JlYWNoIChjb25zdCBRUmVjdCAmIHIsIGRhbWFnZS5yZWN0cygpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gY29udmVydCB0byBPcGVuR0wgY29vcmRpbmF0ZXMKKyAgICAgICAg
ICAgICAgICBpbnQgeSA9IGRpc3BsYXlIZWlnaHQoKSAtIHIueSgpIC0gci5oZWlnaHQoKTsKKyAg
ICAgICAgICAgICAgICAvLyBNb3ZlIHJhc3RlciBwb3NpdGlvbiByZWxhdGl2ZWx5IHVzaW5nIGds
Qml0bWFwKCkgcmF0aGVyCisgICAgICAgICAgICAgICAgLy8gdGhhbiB1c2luZyBnbFJhc3RlclBv
czJmKCkgLSB0aGUgbGF0dGVyIGNhdXNlcyBkcmF3aW5nCisgICAgICAgICAgICAgICAgLy8gYXJ0
ZWZhY3RzIGF0IHRoZSBib3R0b20gc2NyZWVuIGVkZ2Ugd2l0aCBzb21lIGdmeCBjYXJkcwogLy8g
ICAgICAgICAgICAgICAgICAgIGdsUmFzdGVyUG9zMmYoIHIueCgpLCByLnkoKSArIHIuaGVpZ2h0
KCkpOwotICAgICAgICAgICAgICAgICAgICBnbEJpdG1hcCgwLCAwLCAwLCAwLCByLngoKSAtIHhw
b3MsIHkgLSB5cG9zLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgeHBvcyA9IHIueCgpOwot
ICAgICAgICAgICAgICAgICAgICB5cG9zID0geTsKLSAgICAgICAgICAgICAgICAgICAgZ2xTY2lz
c29yKHIueCgpLCB5LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBnbENvcHlQaXhlbHMoci54KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgR0xfQ09MT1Ip
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnbEJpdG1hcCgwLCAwLCAwLCAw
LCAteHBvcywgLXlwb3MsIE5VTEwpOyAgIC8vIG1vdmUgcG9zaXRpb24gYmFjayB0byAwLDAKLSAg
ICAgICAgICAgICAgICBnbERyYXdCdWZmZXIoR0xfQkFDSyk7Ci0gICAgICAgICAgICAgICAgZ2xE
aXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZW5hYmxlVGV4
VW5pdCkgewotICAgICAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gcmViaW5kIHByZXZpb3VzbHkgYm91
bmQgc2hhZGVyCi0gICAgICAgICAgICAgICAgaWYgKFNoYWRlck1hbmFnZXI6Omluc3RhbmNlKCkt
PmlzU2hhZGVyQm91bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oc2hh
ZGVyKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ2xCaXRtYXAoMCwgMCwg
MCwgMCwgci54KCkgLSB4cG9zLCB5IC0geXBvcywgTlVMTCk7CisgICAgICAgICAgICAgICAgeHBv
cyA9IHIueCgpOworICAgICAgICAgICAgICAgIHlwb3MgPSB5OworICAgICAgICAgICAgICAgIGds
U2Npc3NvcihyLngoKSwgeSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAg
ICBnbENvcHlQaXhlbHMoci54KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgR0xfQ09MT1Ip
OwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGdsWFN3
YXBJbnRlcnZhbCkgewotICAgICAgICAgICAgICAgIGdsWFN3YXBJbnRlcnZhbChvcHRpb25zLT5p
c0dsVlN5bmMoKSA/IDEgOiAwKTsKLSAgICAgICAgICAgICAgICBnbFhTd2FwQnVmZmVycyhkaXNw
bGF5KCksIGdseGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZ2xYU3dhcEludGVydmFsKDApOwot
ICAgICAgICAgICAgICAgIHN0YXJ0UmVuZGVyVGltZXIoKTsgLy8gdGhpcyBpcyBpbXBvcnRhbnQg
c28gd2UgZG9uJ3QgYXNzdW1lIHRvIGJlIGxvb3NpbmcgZnJhbWVzIGluIHRoZSBjb21wb3NpdG9y
IHRpbWluZyBjYWxjdWxhdGlvbgorICAgICAgICAgICAgZ2xCaXRtYXAoMCwgMCwgMCwgMCwgLXhw
b3MsIC15cG9zLCBOVUxMKTsgICAvLyBtb3ZlIHBvc2l0aW9uIGJhY2sgdG8gMCwwCisgICAgICAg
ICAgICBpZiAoYWN0aW9ucyAmIFN3YXApIHsKKyAgICAgICAgICAgICAgICBzZWNvbmRMYXN0RGFt
YWdlID0gbGFzdERhbWFnZSgpOworICAgICAgICAgICAgICAgIGdsUmVhZEJ1ZmZlcihHTF9CQUNL
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2FpdFN5bmMoKTsKLSAg
ICAgICAgICAgICAgICBnbFhTd2FwQnVmZmVycyhkaXNwbGF5KCksIGdseGJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgZ2xEcmF3QnVmZmVyKEdMX0JBQ0spOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgICAgICAgICBpZiAocmVlbmFi
bGVUZXhVbml0KSB7CisgICAgICAgICAgICAgICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyByZWJpbmQgcHJldmlvdXNseSBib3VuZCBzaGFk
ZXIKKyAgICAgICAgICAgIGlmIChTaGFkZXJNYW5hZ2VyOjppbnN0YW5jZSgpLT5pc1NoYWRlckJv
dW5kKCkpIHsKKyAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oc2hhZGVyKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBnbFhXYWl0R0woKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBnbFhXYWl0R0woKTsKLSAgICAgICAgaWYgKGxhc3RNYXNrKCkgJiBTY2VuZTo6UEFJTlRf
U0NSRUVOX1JFR0lPTikKKyAgICAgICAgaWYgKCFmdWxsUmVwYWludCkKICAgICAgICAgICAgIGZv
cmVhY2ggKGNvbnN0IFFSZWN0ICYgciwgbGFzdERhbWFnZSgpLnJlY3RzKCkpCiAgICAgICAgICAg
ICAgICAgWENvcHlBcmVhKGRpc3BsYXkoKSwgYnVmZmVyLCByb290V2luZG93KCksIGdjcm9vdCwg
ci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIHIueCgpLCByLnkoKSk7CiAgICAg
ICAgIGVsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74843</attachid>
            <date>2012-10-28 11:52:40 +0000</date>
            <delta_ts>2012-10-28 11:52:40 +0000</delta_ts>
            <desc>low-copy buffer swap</desc>
            <filename>bufferswap.diff</filename>
            <type>text/plain</type>
            <size>6505</size>
            <attacher name="Ralf Jung">post</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2t3aW4vZ2x4YmFja2VuZC5jcHAgYi9rd2luL2dseGJhY2tlbmQuY3BwCmlu
ZGV4IDI0ZmNiZWIuLjY3OTBiZDkgMTAwNjQ0Ci0tLSBhL2t3aW4vZ2x4YmFja2VuZC5jcHAKKysr
IGIva3dpbi9nbHhiYWNrZW5kLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgR2x4QmFja2Vu
ZDo6aW5pdCgpCiAgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIgbWVzYS9kcmkgd2lsbCBy
ZXR1cm4gYSByYW5nZSBlcnJvciAoNikgYmVjYXVzZSBkZWFjdGl2YXRpbmcgdGhlCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHN3YXBpbnRlcnZhbCAoYXMgb2YgdG9kYXkpIHNlZW1zIGNvbXBsZXRl
bHkgdW5zdXBwb3J0ZWQKICAgICAgICAgICAgICAgICAgICAgc2V0SGFzV2FpdFN5bmModHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGdsWFN3YXBJbnRlcnZhbCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2xYU3dhcEludGVydmFsKG9wdGlvbnMtPmlzR2xWU3luYygpID8gMSA6IDApOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHFXYXJuaW5nKCkgPDwgIk5PIFZTWU5DISBnbFhXYWl0VmlkZW9TeW5jKDEsMCwmdWludCkgaXNu
J3QgMCBidXQiIDw8IGdsWFdhaXRWaWRlb1N5bmMoMSwgMCwgJnN5bmMpOwpAQCAtNDMxLDY4ICs0
MzEsNDUgQEAgdm9pZCBHbHhCYWNrZW5kOjp3YWl0U3luYygpCiAKIHZvaWQgR2x4QmFja2VuZDo6
Zmx1c2hCdWZmZXIoKQogeworICAgIGNvbnN0IFFSZWdpb24gZGlzcGxheVJlZ2lvbigwLCAwLCBk
aXNwbGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgpKTsKICAgICBpZiAoaXNEb3VibGVCdWZmZXIo
KSkgewotICAgICAgICBpZiAobGFzdE1hc2soKSAmIFNjZW5lOjpQQUlOVF9TQ1JFRU5fUkVHSU9O
KSB7Ci0gICAgICAgICAgICB3YWl0U3luYygpOwotICAgICAgICAgICAgaWYgKGdsWENvcHlTdWJC
dWZmZXIpIHsKLSAgICAgICAgICAgICAgICBmb3JlYWNoIChjb25zdCBRUmVjdCAmIHIsIGxhc3RE
YW1hZ2UoKS5yZWN0cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gT3Bl
bkdMIGNvb3JkaW5hdGVzCi0gICAgICAgICAgICAgICAgICAgIGludCB5ID0gZGlzcGxheUhlaWdo
dCgpIC0gci55KCkgLSByLmhlaWdodCgpOwotICAgICAgICAgICAgICAgICAgICBnbFhDb3B5U3Vi
QnVmZmVyKGRpc3BsYXkoKSwgZ2x4YnVmZmVyLCByLngoKSwgeSwgci53aWR0aCgpLCByLmhlaWdo
dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIGlmIGEgc2hhZGVyIGlzIGJvdW5kIG9yIHRoZSB0ZXh0dXJlIHVuaXQgaXMgZW5h
YmxlZCwgY29weSBwaXhlbHMgcmVzdWx0cyBpbiBhIGJsYWNrIHNjcmVlbgotICAgICAgICAgICAg
ICAgIC8vIHRoZXJlZm9yZSB1bmJpbmQgdGhlIHNoYWRlciBhbmQgcmVzdG9yZSBhZnRlciBjb3B5
aW5nIHRoZSBwaXhlbHMKLSAgICAgICAgICAgICAgICBHTGludCBzaGFkZXIgPSAwOwotICAgICAg
ICAgICAgICAgIGlmIChTaGFkZXJNYW5hZ2VyOjppbnN0YW5jZSgpLT5pc1NoYWRlckJvdW5kKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9DVVJSRU5UX1BST0dSQU0s
ICZzaGFkZXIpOwotICAgICAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJvb2wgcmVlbmFibGVUZXhVbml0ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgaWYgKGdsSXNFbmFibGVkKEdMX1RFWFRVUkVfMkQpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsRGlzYWJsZShHTF9URVhUVVJFXzJEKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmVlbmFibGVUZXhVbml0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgLy8gbm8gaWRlYSB3aHkgZ2xTY2lzc29yKCkgaXMgdXNlZCwgYnV0IENvbXBpeiBo
YXMgaXQgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0Ci0gICAgICAgICAgICAgICAgZ2xFbmFi
bGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICAgICAgICAgICAgICBnbERyYXdCdWZmZXIoR0xfRlJP
TlQpOwotICAgICAgICAgICAgICAgIGludCB4cG9zID0gMDsKLSAgICAgICAgICAgICAgICBpbnQg
eXBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoY29uc3QgUVJlY3QgJiByLCBsYXN0
RGFtYWdlKCkucmVjdHMoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIE9w
ZW5HTCBjb29yZGluYXRlcwotICAgICAgICAgICAgICAgICAgICBpbnQgeSA9IGRpc3BsYXlIZWln
aHQoKSAtIHIueSgpIC0gci5oZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBy
YXN0ZXIgcG9zaXRpb24gcmVsYXRpdmVseSB1c2luZyBnbEJpdG1hcCgpIHJhdGhlcgotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGFuIHVzaW5nIGdsUmFzdGVyUG9zMmYoKSAtIHRoZSBsYXR0ZXIg
Y2F1c2VzIGRyYXdpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJ0ZWZhY3RzIGF0IHRoZSBi
b3R0b20gc2NyZWVuIGVkZ2Ugd2l0aCBzb21lIGdmeCBjYXJkcworICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIGJhY2sgYnVmZmVyIGlzIGNvbXBsZXRlIC0gdHJhY2sgcHJldmlvdXMgZGFtYWdlcyBl
dmVuIGlmIHRoaXMgaXMgYSBmdWxsLXNjcmVlbiByZXBhaW50CisgICAgICAgIHN0YXRpYyBRUmVn
aW9uIHNlY29uZExhc3REYW1hZ2UgPSBkaXNwbGF5UmVnaW9uLCB0aGlyZExhc3REYW1hZ2UgPSBk
aXNwbGF5UmVnaW9uOworICAgICAgICBRUmVnaW9uIGNvcHlSZWdpb24gPSAoZGlzcGxheVJlZ2lv
biAtIGxhc3REYW1hZ2UoKSkgJiAoc2Vjb25kTGFzdERhbWFnZSt0aGlyZExhc3REYW1hZ2UpOyAv
LyB0aGUgcGFydCBvZiB0aGUgYmFja2J1ZmZlciB3aGljaCB3YXMgbm90IHVwZGF0ZWQsIGFuZCBk
b2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBmcm9udCBidWZmZXIKKyAgICAgICAgdGhpcmRMYXN0
RGFtYWdlID0gc2Vjb25kTGFzdERhbWFnZTsKKyAgICAgICAgc2Vjb25kTGFzdERhbWFnZSA9IGxh
c3REYW1hZ2UoKTsKKyAgICAgICAgaWYgKCFjb3B5UmVnaW9uLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgLy8gbm8gaWRlYSB3aHkgZ2xTY2lzc29yKCkgaXMgdXNlZCwgYnV0IENvbXBpeiBoYXMg
aXQgYW5kIGl0IGRvZXNuJ3Qgc2VlbSB0byBodXJ0CisgICAgICAgICAgICBnbEVuYWJsZShHTF9T
Q0lTU09SX1RFU1QpOworICAgICAgICAgICAgZ2xSZWFkQnVmZmVyKEdMX0ZST05UKTsKKyAgICAg
ICAgICAgIGludCB4cG9zID0gMDsKKyAgICAgICAgICAgIGludCB5cG9zID0gMDsKKyAgICAgICAg
ICAgIGZvcmVhY2ggKGNvbnN0IFFSZWN0ICYgciwgY29weVJlZ2lvbi5yZWN0cygpKSB7CisgICAg
ICAgICAgICAgICAgLy8gY29udmVydCB0byBPcGVuR0wgY29vcmRpbmF0ZXMKKyAgICAgICAgICAg
ICAgICBpbnQgeSA9IGRpc3BsYXlIZWlnaHQoKSAtIHIueSgpIC0gci5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICAvLyBNb3ZlIHJhc3RlciBwb3NpdGlvbiByZWxhdGl2ZWx5IHVzaW5nIGdsQml0
bWFwKCkgcmF0aGVyCisgICAgICAgICAgICAgICAgLy8gdGhhbiB1c2luZyBnbFJhc3RlclBvczJm
KCkgLSB0aGUgbGF0dGVyIGNhdXNlcyBkcmF3aW5nCisgICAgICAgICAgICAgICAgLy8gYXJ0ZWZh
Y3RzIGF0IHRoZSBib3R0b20gc2NyZWVuIGVkZ2Ugd2l0aCBzb21lIGdmeCBjYXJkcwogLy8gICAg
ICAgICAgICAgICAgICAgIGdsUmFzdGVyUG9zMmYoIHIueCgpLCByLnkoKSArIHIuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgICAgICAgICBnbEJpdG1hcCgwLCAwLCAwLCAwLCByLngoKSAtIHhwb3Ms
IHkgLSB5cG9zLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgeHBvcyA9IHIueCgpOwotICAg
ICAgICAgICAgICAgICAgICB5cG9zID0geTsKLSAgICAgICAgICAgICAgICAgICAgZ2xTY2lzc29y
KHIueCgpLCB5LCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAgICBn
bENvcHlQaXhlbHMoci54KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgR0xfQ09MT1IpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBnbEJpdG1hcCgwLCAwLCAwLCAwLCAt
eHBvcywgLXlwb3MsIE5VTEwpOyAgIC8vIG1vdmUgcG9zaXRpb24gYmFjayB0byAwLDAKLSAgICAg
ICAgICAgICAgICBnbERyYXdCdWZmZXIoR0xfQkFDSyk7Ci0gICAgICAgICAgICAgICAgZ2xEaXNh
YmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZW5hYmxlVGV4VW5p
dCkgewotICAgICAgICAgICAgICAgICAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gcmViaW5kIHByZXZpb3VzbHkgYm91bmQg
c2hhZGVyCi0gICAgICAgICAgICAgICAgaWYgKFNoYWRlck1hbmFnZXI6Omluc3RhbmNlKCktPmlz
U2hhZGVyQm91bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBnbFVzZVByb2dyYW0oc2hhZGVy
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ2xCaXRtYXAoMCwgMCwgMCwg
MCwgci54KCkgLSB4cG9zLCB5IC0geXBvcywgTlVMTCk7CisgICAgICAgICAgICAgICAgeHBvcyA9
IHIueCgpOworICAgICAgICAgICAgICAgIHlwb3MgPSB5OworICAgICAgICAgICAgICAgIGdsU2Np
c3NvcihyLngoKSwgeSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBn
bENvcHlQaXhlbHMoci54KCksIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgR0xfQ09MT1IpOwog
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2xCaXRtYXAoMCwgMCwgMCwgMCwgLXhwb3MsIC15
cG9zLCBOVUxMKTsgICAvLyBtb3ZlIHBvc2l0aW9uIGJhY2sgdG8gMCwwCisgICAgICAgICAgICBn
bFJlYWRCdWZmZXIoR0xfQkFDSyk7CisgICAgICAgICAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9U
RVNUKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnbFhTd2FwSW50ZXJ2YWwpIHsKKyAgICAg
ICAgICAgIGdsWFN3YXBCdWZmZXJzKGRpc3BsYXkoKSwgZ2x4YnVmZmVyKTsKKyAgICAgICAgICAg
IHN0YXJ0UmVuZGVyVGltZXIoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChn
bFhTd2FwSW50ZXJ2YWwpIHsKLSAgICAgICAgICAgICAgICBnbFhTd2FwSW50ZXJ2YWwob3B0aW9u
cy0+aXNHbFZTeW5jKCkgPyAxIDogMCk7Ci0gICAgICAgICAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMo
ZGlzcGxheSgpLCBnbHhidWZmZXIpOwotICAgICAgICAgICAgICAgIGdsWFN3YXBJbnRlcnZhbCgw
KTsKLSAgICAgICAgICAgICAgICBzdGFydFJlbmRlclRpbWVyKCk7IC8vIHRoaXMgaXMgaW1wb3J0
YW50IHNvIHdlIGRvbid0IGFzc3VtZSB0byBiZSBsb29zaW5nIGZyYW1lcyBpbiB0aGUgY29tcG9z
aXRvciB0aW1pbmcgY2FsY3VsYXRpb24KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgd2FpdFN5bmMoKTsKLSAgICAgICAgICAgICAgICBnbFhTd2FwQnVmZmVycyhkaXNwbGF5
KCksIGdseGJ1ZmZlcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB3YWl0U3luYygpOwor
ICAgICAgICAgICAgZ2xYU3dhcEJ1ZmZlcnMoZGlzcGxheSgpLCBnbHhidWZmZXIpOwogICAgICAg
ICB9CisKICAgICAgICAgZ2xYV2FpdEdMKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ2xYV2Fp
dEdMKCk7CmRpZmYgLS1naXQgYS9rd2luL3NjZW5lX29wZW5nbC5jcHAgYi9rd2luL3NjZW5lX29w
ZW5nbC5jcHAKaW5kZXggM2YxMzBiOS4uNDBmMzQ2NCAxMDA2NDQKLS0tIGEva3dpbi9zY2VuZV9v
cGVuZ2wuY3BwCisrKyBiL2t3aW4vc2NlbmVfb3BlbmdsLmNwcApAQCAtMjk5LDExICsyOTksMTQg
QEAgaW50IFNjZW5lT3BlbkdMOjpwYWludChRUmVnaW9uIGRhbWFnZSwgVG9wbGV2ZWxMaXN0IHRv
cGxldmVscykKICNpZmRlZiBDSEVDS19HTF9FUlJPUgogICAgIGNoZWNrR0xFcnJvcigiUGFpbnQx
Iik7CiAjZW5kaWYKKy8vICAgICBRUmVjdCBiUmVjdCA9IGRhbWFnZS5ib3VuZGluZ1JlY3QoKTsK
Ky8vICAgICAgaWYgKGJSZWN0LndpZHRoKCkqYlJlY3QuaGVpZ2h0KCkgPiBkaXNwbGF5V2lkdGgo
KSpkaXNwbGF5SGVpZ2h0KCkqMi8zKSAvLyBpZiB0aGUgcmVnaW9uIGlzIGxhcmdlLCBkbyBhIGZ1
bGwtc2NyZWVuIHJlcGFpbnQKKy8vICAgICAgICAgZGFtYWdlID0gUVJlZ2lvbigwLCAwLCBkaXNw
bGF5V2lkdGgoKSwgZGlzcGxheUhlaWdodCgpKTsKICAgICBwYWludFNjcmVlbigmbWFzaywgJmRh
bWFnZSk7ICAgLy8gY2FsbCBnZW5lcmljIGltcGxlbWVudGF0aW9uCiAjaWZkZWYgQ0hFQ0tfR0xf
RVJST1IKICAgICBjaGVja0dMRXJyb3IoIlBhaW50MiIpOwogI2VuZGlmCi0KKyAgICAKICAgICBt
X2JhY2tlbmQtPmVuZFJlbmRlcmluZ0ZyYW1lKG1hc2ssIGRhbWFnZSk7CiAKICAgICAvLyBkbyBj
bGVhbnVwCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>