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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>27183</bug_id>
          
          <creation_ts>2009-07-11 15:11:49 -0700</creation_ts>
          <short_desc>REGRESSION: document.documentElement.getScreenCTM() returns incorrect matrix.</short_desc>
          <delta_ts>2010-04-01 01:30:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/SVG/types.html#InterfaceSVGLocatable</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Glenn Brauen">bugztrac</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>ahayes</cc>
    
    <cc>a.neumann</cc>
    
    <cc>bugzilla</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131143</commentid>
    <comment_count>0</comment_count>
      <attachid>32619</attachid>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-07-11 15:11:49 -0700</bug_when>
    <thetext>Created attachment 32619
SVG test document.

The following javascript should convert the clientX/Y coordinates for a mouse event to SVG coordinate space:

var m = document.documentElement.getScreenCTM();
var p = document.documentElement.createSVGPoint(); 
p.x = evt.clientX;
p.y = evt.clientY; 
p = p.matrixTransform(m.inverse());

In Safari 4.0.2 and all webkit nightlies since r43284 (May 6, 2009) this coordinate transformation does not work properly.  The transformation depends on how the SVG viewport fits in the browser window.  If the SVG viewport exactly matches, the transformation seems to be alright but if you stretch the browser window horizontally or vertically, the transformation is off.

I&apos;ll attach a SVG document that demonstrates the problem by displaying a tooltip showing the SVG coordinates for mouse events when the cursor is positioned over a rectangle in the document.

What works, what doesn&apos;t:

Defect appeared in latest Safari 4 (4.0.2).  Safari 4.0.1 was fine.
Firefox 3 is fine.

Also tested webkit nightlies:
r45754 (July 11, 2009): broken
r45423 (July 1, 2009): broken
r44341 (June 4, 2009): broken
r43796 (May 16, 2009): broken
r43436 (May 9, 2009): broken
r43284 (May 6, 2009): broken
r43163 (May 3, 2009): fine
r43110 (May 1, 2009): fine

To reporoduce: 

Download and open the attached SVG (ScreenCoordinates.svg).  Mouseover the rectangle and check the position and content of the tooltip displayed - it should be located on (above and to the right of) the cursor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132697</commentid>
    <comment_count>1</comment_count>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-07-17 14:19:30 -0700</bug_when>
    <thetext>Bumped to Major.  This really breaks any web app that wants to place things in SVG based on mouse events (tooltips are an obvious case).  I&apos;ve also seen HTML divs positioned absolutely based on the location of SVG objects - and this is now broken in Safari 4.0.2 as well.  I suspect that is the inverse computation from what this bug describes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139843</commentid>
    <comment_count>2</comment_count>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-08-13 08:14:41 -0700</bug_when>
    <thetext>Still broken in Safari 4.0.3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143194</commentid>
    <comment_count>3</comment_count>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-08-27 14:12:16 -0700</bug_when>
    <thetext>Problem exists on PowerPC and Intel Mac platforms and on both OS X 10.4 and OS X 10.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147858</commentid>
    <comment_count>4</comment_count>
    <who name="Amos Hayes">ahayes</who>
    <bug_when>2009-09-17 11:25:52 -0700</bug_when>
    <thetext>I have the same problem on Safari Version 4.0.3 (6531.9) on OS X 10.6.

Could someone with CANCONFIRM please take a look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149461</commentid>
    <comment_count>5</comment_count>
      <attachid>40007</attachid>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-09-23 11:29:57 -0700</bug_when>
    <thetext>Created attachment 40007
SVG file showing workaround

I have attached an SVG file showing a workaround to this bug.  The difference is shown below and can be summarized as follows:

- The Coordinate Transformation Matrix (CTM) returned by document.documentElement.getScreenCTM() is wrong.
- Separately applying document.documentElement.currentTranslate, document.documentElement.currentScal, and a CTM computed from the event target to the SVG root node produces the correct transformation of the event clientX/clientY coordinates.

diff ScreenCoordinates.svg ScreenCoordinates_workaround.svg
8a9,16
&gt; 
&gt;       function computeCumulativeCTMFromRoot(el, svgNode) {
&gt;               var ctm = el.getCTM();
&gt;               while ((el = el.parentNode) != svgNode) {
&gt;                       ctm = el.getCTM().multiply(ctm);
&gt;               }
&gt;               return(ctm);
&gt;       }
12c20,21
&lt;                * Apply screen CTM transformation to the evt screenX and screenY to convert the event
---
&gt;                * Apply screen translate, scale and a CTM transformation
&gt;                * computed from the event target up to the enclosing SVG node to convert the event
16c25,27
&lt;               var m = document.documentElement.getScreenCTM();
---
&gt;               var trans = evt.target.ownerDocument.documentElement.currentTranslate;
&gt;               var scale = evt.target.ownerDocument.documentElement.currentScale;
&gt;               var m = computeCumulativeCTMFromRoot(evt.target, document.getElementById(&quot;main&quot;));
18,19c29,30
&lt;               p.x = evt.clientX;
&lt;               p.y = evt.clientY; 
---
&gt;               p.x = (evt.clientX - trans.x) / scale;
&gt;               p.y = (evt.clientY - trans.y) / scale;
20a32
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149467</commentid>
    <comment_count>6</comment_count>
      <attachid>40010</attachid>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-09-23 12:10:41 -0700</bug_when>
    <thetext>Created attachment 40010
SVG File to Dump Computed CTMs to console.

I have added an attachment that dumps the computed CTMs to the console log for comparison.  One of the translate values (x or y) in the CTM returned by getScreenCTM() appear to always be double the value returned by the other CTM computation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149473</commentid>
    <comment_count>7</comment_count>
    <who name="Glenn Brauen">bugztrac</who>
    <bug_when>2009-09-23 12:16:41 -0700</bug_when>
    <thetext>I&apos;m surprised this is still sitting as unconfirmed.  This happens in all versions of Safari since 4.0.2 (in fact since nightly build r43284 - May 6, 2009 as I point out above) on PowerPC and Intel Macs running any of Mac OS 10.4, 10.5 or 10.6.

Maybe everybody has been computing their own CTMs all along...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169105</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-12-06 10:54:47 -0800</bug_when>
    <thetext>getCTM and getScreenCTM are specified by SVGLocatable. Both do the same. While getCTM should return the CTM according to the viewport coordinate system, getScreenCTM should return CTM according to the parent user agent. getScreenCTM is wrong in trunk. See http://www.w3.org/TR/SVG/types.html#InterfaceSVGLocatable .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198985</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Neumann">a.neumann</who>
    <bug_when>2010-03-12 04:53:54 -0800</bug_when>
    <thetext>Hi,

I also think that this bug should be fixed as soon as possible, as this method is very essential to many interactive SVG applications. Many other javascript functions build upon the SVGLocatable interface.

It is also a regression of something that previously worked.

Related to this bug are:
https://bugs.webkit.org/show_bug.cgi?id=11734
and
https://bugs.webkit.org/show_bug.cgi?id=11685

Here is another good testcase:
http://www.carto.net/neumann/webkitsvgbugs/SVGPoint_test.svg
If the browser window is very wide then the red circles are way off the mouse cursor, while they should appear directly below the cursor.

BTW: Glenn, thanks for posting the workaround!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203333</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-23 23:13:33 -0700</bug_when>
    <thetext>With a reduced test case, someone should be able to run bisect-builds over the nightlies:
http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/bisect-builds
and find out what revision range caused this regression.  Then we can better understand what went wrong and who might know best how to fix it. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203376</commentid>
    <comment_count>11</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-03-24 04:38:03 -0700</bug_when>
    <thetext>Running &quot;bisect-builds -r 43163:43284&quot; - Glenn thanks a lot for the detailed investigation!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204080</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-03-25 08:49:49 -0700</bug_when>
    <thetext>All issues with getScreenCTM fixed, going to upload a patch soon, stay tuned...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206538</commentid>
    <comment_count>13</comment_count>
      <attachid>52178</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-03-31 09:11:28 -0700</bug_when>
    <thetext>Created attachment 52178
Initial patch

Phew, this was more tricky than I thought. This is only a regression, because of pure luck. The getScreenCTM() implementation was just plain wrong.
When we added support to handle non-SVG parent elements (mixed content documents, ie. a &lt;div&gt; containing a &lt;svg&gt;) the implementation of getScreenCTM() got worse. It has never been correct so far, and finally is after this patch.

Checked all testcases against Opera / Firefox, which both have bugs.
Firefox mixes up getCTM/getScreenCTM: when using absolute positioned &lt;div&gt; object containing a &lt;svg&gt; it lists the left/top CSS translation as translation values in the getCTM matrix, instead of just in the getScreenCTM matrix. Opera gets all of this right. Opera has another bug leading to null matrices in getCTM() when using viewBox on a &lt;svg&gt; fragment in a XHTML document.

I double-checked all testcases, by hand (fun to multiply this by hand and verify ;-) and I&apos;m happy with it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206543</commentid>
    <comment_count>14</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-03-31 09:20:21 -0700</bug_when>
    <thetext>Attachment 52178 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1610093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206544</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-31 09:21:12 -0700</bug_when>
    <thetext>Attachment 52178 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/1591108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206548</commentid>
    <comment_count>16</comment_count>
      <attachid>52180</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-03-31 09:36:14 -0700</bug_when>
    <thetext>Created attachment 52180
Updated patch

s/DocumentScope/ScreenScope/ upon Dirks request.
Remove CString.h include (debugging leftover) - EWS complained because if has recently been moved to wtf/CString.h
Fix typo s/substract/subtract/

No substantial changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206549</commentid>
    <comment_count>17</comment_count>
      <attachid>52180</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-03-31 09:39:11 -0700</bug_when>
    <thetext>Comment on attachment 52180
Updated patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207054</commentid>
    <comment_count>18</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-04-01 01:30:51 -0700</bug_when>
    <thetext>Committed r56905: &lt;http://trac.webkit.org/changeset/56905&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>32619</attachid>
            <date>2009-07-11 15:11:49 -0700</date>
            <delta_ts>2010-03-31 09:11:28 -0700</delta_ts>
            <desc>SVG test document.</desc>
            <filename>ScreenCoordinates.svg</filename>
            <type>image/svg+xml</type>
            <size>2107</size>
            <attacher name="Glenn Brauen">bugztrac</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T
VkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIGlkPSJtYWluIiB3aWR0aD0iMTAwJSIgaGVpZ2h0
PSIxMDAlIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hsaW5rIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCTwhW0NEQVRBWwoJ
ZnVuY3Rpb24gZ2V0VGV4dCgpIHsKCQlyZXR1cm4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRv
b2x0aXBfdGV4dCIpKTsKCX0KCQoJZnVuY3Rpb24gcmVwb3NpdGlvblRpcCh0LCBldnQpIHsKCQkv
KiAKCQkgKiBBcHBseSBzY3JlZW4gQ1RNIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBldnQgc2NyZWVu
WCBhbmQgc2NyZWVuWSB0byBjb252ZXJ0IHRoZSBldmVudAoJCSAqIGNvb3JkaW5hdGVzIHRvIHRo
ZSBTVkcgY29vcmRpbmF0ZSBzcGFjZS4gIFRoZW4gcG9zaXRpb24gdGhlIHNwZWNpZmllZCB0ZXh0
IHVzaW5nCgkJICogdGhlIFNWRyBjb29yZGluYXRlcy4KCQkgKi8KCQl2YXIgbSA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5nZXRTY3JlZW5DVE0oKTsKCQl2YXIgcCA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5jcmVhdGVTVkdQb2ludCgpOyAKCQlwLnggPSBldnQuY2xpZW50WDsKCQlwLnkg
PSBldnQuY2xpZW50WTsgCgkJcCA9IHAubWF0cml4VHJhbnNmb3JtKG0uaW52ZXJzZSgpKTsgCgkJ
dC5zZXRBdHRyaWJ1dGUoIngiLCBwLngpOwoJCXQuc2V0QXR0cmlidXRlKCJ5IiwgcC55KTsKCQkK
CQl3aGlsZSAobnVsbCAhPSB0LmZpcnN0Q2hpbGQpIHsKCQkJdC5yZW1vdmVDaGlsZCh0LmZpcnN0
Q2hpbGQpOwoJCX0KCQl2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgieDoi
K3AueC50b0ZpeGVkKDIpKyIgeToiK3AueS50b0ZpeGVkKDIpKTsKCQl0LmFwcGVuZENoaWxkKHRl
eHROb2RlKTsKCX0KCQoJZnVuY3Rpb24gc2hvd1Rvb2xUaXAoZXZ0KSB7CgkJdmFyIHQgPSBnZXRU
ZXh0KCk7CgkJaWYgKG51bGwgIT0gdCkgewoJCQl0LnNldEF0dHJpYnV0ZSgidmlzaWJpbGl0eSIs
ICJ2aXNpYmxlIik7CgkJCXJlcG9zaXRpb25UaXAodCwgZXZ0KTsKCQl9Cgl9CglmdW5jdGlvbiBt
b3ZlVG9vbFRpcChldnQpIHsKCQl2YXIgdCA9IGdldFRleHQoKTsKCQlpZiAobnVsbCAhPSB0KSB7
CgkJCXJlcG9zaXRpb25UaXAodCwgZXZ0KTsKCQl9Cgl9CgkKCWZ1bmN0aW9uIGhpZGVUb29sVGlw
KGV2dCkgewoJCXZhciB0ID0gZ2V0VGV4dCgpOwoJCWlmIChudWxsICE9IHQpIHsKCQkJdC5zZXRB
dHRyaWJ1dGUoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CgkJfQoJfQoJXV0+Cgk8L3NjcmlwdD4K
IAk8cmVjdCB4PSIyMCIgeT0iMzAiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiBmaWxsPSIjODBj
ZGMxIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEiIG9ubW91c2VvdmVyPSJzaG93VG9v
bFRpcChldnQpIiBvbm1vdXNlbW92ZT0ibW92ZVRvb2xUaXAoZXZ0KSIgb25tb3VzZW91dD0iaGlk
ZVRvb2xUaXAoZXZ0KSI+PC9yZWN0PgoJPHRleHQgeD0iMTAwIiB5PSIxMCIgdGV4dC1hbmNob3I9
Im1pZGRsZSIgZm9udC1zaXplPSI4IiBmb250LWZhbWlseT0iSGVsdmV0aWNhIj5Nb3VzaW5nIG92
ZXIgdGhlIHJlY3RhbmdsZSBzaG91bGQgcGxhY2UgYSB0b29sdGlwIGFib3ZlIGFuZDwvdGV4dD4K
CTx0ZXh0IHg9IjEwMCIgeT0iMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOCIg
Zm9udC1mYW1pbHk9IkhlbHZldGljYSI+dG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3Igc2hvd2lu
ZyB0aGUgY3Vyc29yIGNvb3JkaW5hdGVzLjwvdGV4dD4KCTx0ZXh0IGlkPSJ0b29sdGlwX3RleHQi
IHRleHQtYW5jaG9yPSJzdGFydCIgcG9pbnRlci1ldmVudHM9Im5vbmUiIGZvbnQtc2l6ZT0iNiIg
Zm9udC1mYW1pbHk9IkFyaWFsIiB2aXNpYmlsaXR5PSJoaWRkZW4iPiA8L3RleHQ+Cjwvc3ZnPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>40007</attachid>
            <date>2009-09-23 11:29:57 -0700</date>
            <delta_ts>2010-03-31 09:11:28 -0700</delta_ts>
            <desc>SVG file showing workaround</desc>
            <filename>ScreenCoordinates_workaround.svg</filename>
            <type>image/svg+xml</type>
            <size>2563</size>
            <attacher name="Glenn Brauen">bugztrac</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T
VkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIGlkPSJtYWluIiB3aWR0aD0iMTAwJSIgaGVpZ2h0
PSIxMDAlIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hsaW5rIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCTwhW0NEQVRBWwoJ
ZnVuY3Rpb24gZ2V0VGV4dCgpIHsKCQlyZXR1cm4oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRv
b2x0aXBfdGV4dCIpKTsKCX0KCglmdW5jdGlvbiBjb21wdXRlQ3VtdWxhdGl2ZUNUTUZyb21Sb290
KGVsLCBzdmdOb2RlKSB7CgkJdmFyIGN0bSA9IGVsLmdldENUTSgpOwoJCXdoaWxlICgoZWwgPSBl
bC5wYXJlbnROb2RlKSAhPSBzdmdOb2RlKSB7CgkJCWN0bSA9IGVsLmdldENUTSgpLm11bHRpcGx5
KGN0bSk7CgkJfQoJCXJldHVybihjdG0pOwoJfQoJCglmdW5jdGlvbiByZXBvc2l0aW9uVGlwKHQs
IGV2dCkgewoJCS8qIAoJCSAqIEFwcGx5IHNjcmVlbiB0cmFuc2xhdGUsIHNjYWxlIGFuZCBhIENU
TSB0cmFuc2Zvcm1hdGlvbgoJCSAqIGNvbXB1dGVkIGZyb20gdGhlIGV2ZW50IHRhcmdldCB1cCB0
byB0aGUgZW5jbG9zaW5nIFNWRyBub2RlIHRvIGNvbnZlcnQgdGhlIGV2ZW50CgkJICogY29vcmRp
bmF0ZXMgdG8gdGhlIFNWRyBjb29yZGluYXRlIHNwYWNlLiAgVGhlbiBwb3NpdGlvbiB0aGUgc3Bl
Y2lmaWVkIHRleHQgdXNpbmcKCQkgKiB0aGUgU1ZHIGNvb3JkaW5hdGVzLgoJCSAqLwoJCXZhciB0
cmFucyA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFRy
YW5zbGF0ZTsKCQl2YXIgc2NhbGUgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LmN1cnJlbnRTY2FsZTsKCQl2YXIgbSA9IGNvbXB1dGVDdW11bGF0aXZlQ1RNRnJvbVJv
b3QoZXZ0LnRhcmdldCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKSk7CgkJdmFyIHAg
PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3JlYXRlU1ZHUG9pbnQoKTsgCgkJcC54ID0gKGV2
dC5jbGllbnRYIC0gdHJhbnMueCkgLyBzY2FsZTsKCQlwLnkgPSAoZXZ0LmNsaWVudFkgLSB0cmFu
cy55KSAvIHNjYWxlOwoJCXAgPSBwLm1hdHJpeFRyYW5zZm9ybShtLmludmVyc2UoKSk7IAoKCQl0
LnNldEF0dHJpYnV0ZSgieCIsIHAueCk7CgkJdC5zZXRBdHRyaWJ1dGUoInkiLCBwLnkpOwoJCQoJ
CXdoaWxlIChudWxsICE9IHQuZmlyc3RDaGlsZCkgewoJCQl0LnJlbW92ZUNoaWxkKHQuZmlyc3RD
aGlsZCk7CgkJfQoJCXZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ4OiIr
cC54LnRvRml4ZWQoMikrIiB5OiIrcC55LnRvRml4ZWQoMikpOwoJCXQuYXBwZW5kQ2hpbGQodGV4
dE5vZGUpOwoJfQoJCglmdW5jdGlvbiBzaG93VG9vbFRpcChldnQpIHsKCQl2YXIgdCA9IGdldFRl
eHQoKTsKCQlpZiAobnVsbCAhPSB0KSB7CgkJCXQuc2V0QXR0cmlidXRlKCJ2aXNpYmlsaXR5Iiwg
InZpc2libGUiKTsKCQkJcmVwb3NpdGlvblRpcCh0LCBldnQpOwoJCX0KCX0KCWZ1bmN0aW9uIG1v
dmVUb29sVGlwKGV2dCkgewoJCXZhciB0ID0gZ2V0VGV4dCgpOwoJCWlmIChudWxsICE9IHQpIHsK
CQkJcmVwb3NpdGlvblRpcCh0LCBldnQpOwoJCX0KCX0KCQoJZnVuY3Rpb24gaGlkZVRvb2xUaXAo
ZXZ0KSB7CgkJdmFyIHQgPSBnZXRUZXh0KCk7CgkJaWYgKG51bGwgIT0gdCkgewoJCQl0LnNldEF0
dHJpYnV0ZSgidmlzaWJpbGl0eSIsICJoaWRkZW4iKTsKCQl9Cgl9CgldXT4KCTwvc2NyaXB0Pgog
CTxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxNjAiIGZpbGw9IiM4MGNk
YzEiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS13aWR0aD0iMSIgb25tb3VzZW92ZXI9InNob3dUb29s
VGlwKGV2dCkiIG9ubW91c2Vtb3ZlPSJtb3ZlVG9vbFRpcChldnQpIiBvbm1vdXNlb3V0PSJoaWRl
VG9vbFRpcChldnQpIj48L3JlY3Q+Cgk8dGV4dCB4PSIxMDAiIHk9IjEwIiB0ZXh0LWFuY2hvcj0i
bWlkZGxlIiBmb250LXNpemU9IjgiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiPk1vdXNpbmcgb3Zl
ciB0aGUgcmVjdGFuZ2xlIHNob3VsZCBwbGFjZSBhIHRvb2x0aXAgYWJvdmUgYW5kPC90ZXh0PgoJ
PHRleHQgeD0iMTAwIiB5PSIyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSI4IiBm
b250LWZhbWlseT0iSGVsdmV0aWNhIj50byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBzaG93aW5n
IHRoZSBjdXJzb3IgY29vcmRpbmF0ZXMuPC90ZXh0PgoJPHRleHQgaWQ9InRvb2x0aXBfdGV4dCIg
dGV4dC1hbmNob3I9InN0YXJ0IiBwb2ludGVyLWV2ZW50cz0ibm9uZSIgZm9udC1zaXplPSI2IiBm
b250LWZhbWlseT0iQXJpYWwiIHZpc2liaWxpdHk9ImhpZGRlbiI+IDwvdGV4dD4KPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>40010</attachid>
            <date>2009-09-23 12:10:41 -0700</date>
            <delta_ts>2010-03-31 09:11:28 -0700</delta_ts>
            <desc>SVG File to Dump Computed CTMs to console.</desc>
            <filename>DumpCTMsToLog.svg</filename>
            <type>image/svg+xml</type>
            <size>1564</size>
            <attacher name="Glenn Brauen">bugztrac</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9T
VkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIGlkPSJtYWluIiB3aWR0aD0iMTAwJSIgaGVpZ2h0
PSIxMDAlIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
L3hsaW5rIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCTwhW0NEQVRBWwoJ
ZnVuY3Rpb24gZHVtcENUTXNUb0xvZyhldnQpIHsKCQlmdW5jdGlvbiBsb2coKSB7CgkJCWNvbnNv
bGUubG9nLmFwcGx5KGNvbnNvbGUsYXJndW1lbnRzKTsKCQl9CgoJCWZ1bmN0aW9uIGNvbXB1dGVD
dW11bGF0aXZlQ1RNRnJvbVJvb3QoZWwsIHN2Z05vZGUpIHsKCQkJdmFyIGN0bSA9IGVsLmdldENU
TSgpOwoJCQl3aGlsZSAoKGVsID0gZWwucGFyZW50Tm9kZSkgIT0gc3ZnTm9kZSkgewoJCQkJY3Rt
ID0gZWwuZ2V0Q1RNKCkubXVsdGlwbHkoY3RtKTsKCQkJfQoJCQlyZXR1cm4oY3RtKTsKCQl9CgkK
CQkvKiAKCQkgKiBBcHBseSBzY3JlZW4gQ1RNIHRyYW5zZm9ybWF0aW9uIHRvIHRoZSBldnQgc2Ny
ZWVuWCBhbmQgc2NyZWVuWSB0byBjb252ZXJ0IHRoZSBldmVudAoJCSAqIGNvb3JkaW5hdGVzIHRv
IHRoZSBTVkcgY29vcmRpbmF0ZSBzcGFjZS4gIFRoZW4gcG9zaXRpb24gdGhlIHNwZWNpZmllZCB0
ZXh0IHVzaW5nCgkJICogdGhlIFNWRyBjb29yZGluYXRlcy4KCQkgKi8KCQl2YXIgbSA9IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudC5nZXRTY3JlZW5DVE0oKTsKCQlsb2coIlJlc3VsdCBvZiBnZXRT
Y3JlZW5DVE0oKToiLCBtKTsKCgkJdmFyIHRyYW5zID0gZXZ0LnRhcmdldC5vd25lckRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5jdXJyZW50VHJhbnNsYXRlOwoJCXZhciBzY2FsZSA9IGV2dC50YXJn
ZXQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFNjYWxlOwoJCXZhciBtID0g
Y29tcHV0ZUN1bXVsYXRpdmVDVE1Gcm9tUm9vdChldnQudGFyZ2V0LCBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWFpbiIpKTsKCQlsb2coInRyYW5zOiAiLCB0cmFucyk7CgkJbG9nKCJzY2FsZTog
Iiwgc2NhbGUpOwoJCWxvZygiUmVzdWx0cyBvZiBjb21wdXRlQ3VtdWxhdGl2ZUNUTUZyb21Sb290
KCk6ICIsIG0pOwoJfQoJXV0+Cgk8L3NjcmlwdD4KCTx0ZXh0IHg9IjEwMCIgeT0iMTAiIHRleHQt
YW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iOCIgZm9udC1mYW1pbHk9IkhlbHZldGljYSI+TW91
c2Ugb3ZlciB0aGUgcmVjdGFuZ2xlIHRvIGR1bXAgQ1RNcyB0byB0aGUgbG9nLjwvdGV4dD4KIAk8
cmVjdCB4PSIyMCIgeT0iMzAiIHdpZHRoPSIxNjAiIGhlaWdodD0iMTYwIiBmaWxsPSIjODBjZGMx
IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utd2lkdGg9IjEiIG9ubW91c2VvdmVyPSJkdW1wQ1RNc1Rv
TG9nKGV2dCkiPjwvcmVjdD4KPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52178</attachid>
            <date>2010-03-31 09:11:28 -0700</date>
            <delta_ts>2010-03-31 09:36:14 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>FixCTM.diff</filename>
            <type>text/plain</type>
            <size>32774</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTQgQEAKKzIwMTAtMDMtMzEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUkVHUkVTU0lPTjogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldFNjcmVlbkNUTSgp
IHJldHVybnMgaW5jb3JyZWN0IG1hdHJpeC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3MTgzCisKKyAgICAgICAgUmV3cml0ZSBnZXRDVE0oKSAvIGdl
dFNjcmVlbkNUTSgpIGhhbmRsaW5nIGluIGFuIGl0ZXJhdGl2ZSB3YXksIGZpeGluZyBhbGwga25v
d24gcHJvYmxlbXMvbGltaXRhdGlvbnMuCisgICAgICAgIFRoZSBidWcgbWVudGlvbmVkIGFib3Zl
IGlzIGFjdHVhbGx5IG5vdCBhIHJlZ3Jlc3Npb24sIGdldFNjcmVlbkNUTSgpIG9ubHkgd29ya2Vk
IGJlZm9yZSwgYmVjYXVzZSB3ZQorICAgICAgICBkaWQgbm90IGhhbmRsZSBub24tU1ZHIENTUyBi
b3ggcGFyZW50cyBwcm9wZXJseS4gV2hlbiBzdXBwb3J0IHdhcyBhZGRlZCB0byBoYW5kbGUgdGhv
c2UgY2FzZXMsIHRoZQorICAgICAgICBnZXRTY3JlZW5DVE0oKSBoYW5kbGluZyB3YXMgY29tcGxl
dGx5IG9mZiwgY2F1c2luZyBhIGxvdCBvZiB0cm91YmxlIGluIHJlYWwtbGlmZSBTVkcgYXBwbGlj
YXRpb25zIChjYXJ0by5uZXQgZm9yIGluc3RhbmNlKQorCisgICAgICAgIFRlc3RzOiBzdmcvY3Vz
dG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLnhodG1sIChmaXhlZCB0eXBvLCBtaXNzaW5nIHVuaXQgaWRl
bnRpZmllciBpbiBDU1MgJ2hlaWdodCcgcHJvcGVydHksIGxlYWRpbmcgdG8gaW5jb3JyZWN0IHJl
c3VsdHMpCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtMi54aHRt
bAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTMueGh0bWwKKyAg
ICAgICAgICAgICAgIHN2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG00LnhodG1sCisgICAgICAg
ICAgICAgICBzdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNS54aHRtbAorCisgICAgICAgICog
c3ZnL1NWR0xvY2F0YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6Omdl
dEJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKToKKyAg
ICAgICAgKiBzdmcvU1ZHTG9jYXRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFi
bGU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNw
YWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAg
ICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50Ojpsb2NhbENvb3JkaW5h
dGVTcGFjZVRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBzdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKToKKyAgICAgICAgKiBz
dmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudDo6bG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0pOgorICAg
ICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0pOgor
ICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmxvY2FsQ29vcmRpbmF0ZVNw
YWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4dEVsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVtZW50Ojpsb2NhbENvb3JkaW5hdGVT
cGFjZVRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6U1ZHVHJhbnNmb3JtYWJsZSk6CisgICAg
ICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RyYW5z
Zm9ybWFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKwogMjAxMC0wMy0zMSAg
WXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuY3BwCShyZXZpc2lvbiA1Njg0
MSkKKysrIFdlYkNvcmUvc3ZnL1NWR0xvY2F0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw4IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1l
cm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE0ICsyMSwxNCBAQAogKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2lmIEVOQUJMRShTVkcpCiAKKyNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUg
IlNWR0xvY2F0YWJsZS5oIgogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyUGF0aC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTczLDYgKzc0LDcgQEAgU1ZHRWxlbWVudCogU1ZHTG9jYXRhYmxl
OjpmYXJ0aGVzdFZpZXdwbwogCiBGbG9hdFJlY3QgU1ZHTG9jYXRhYmxlOjpnZXRCQm94KGNvbnN0
IFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CisgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIGVsZW1l
bnQtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgZ2V0QkJveCBmb3Ig
ZGV0YWNoZWQgZWxlbWVudHMuCkBAIC04MiwzNSArODQsMjIgQEAgRmxvYXRSZWN0IFNWR0xvY2F0
YWJsZTo6Z2V0QkJveChjb25zdCBTVgogICAgIHJldHVybiBlbGVtZW50LT5yZW5kZXJlcigpLT5v
YmplY3RCb3VuZGluZ0JveCgpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpn
ZXRDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkKK0FmZmluZVRyYW5zZm9ybSBTVkdMb2Nh
dGFibGU6OmNvbXB1dGVDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgQ1RNU2NvcGUgbW9k
ZSkKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKLQot
ICAgIE5vZGUqIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50
ICYmIHBhcmVudC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnQpOwotICAgICAgICBpZiAo
cGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKSB7Ci0g
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudCo+KHBhcmVudEVsZW1lbnQpLT5nZXRDVE0oKTsKLSAgICAgICAg
ICAgIGN0bSA9IHBhcmVudENUTSAqIGN0bTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBjdG07Ci19CisgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdMb2NhdGFibGU6OmdldFNj
cmVlbkNUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwogCi0gICAgTm9kZSogcGFyZW50ID0gZWxlbWVu
dC0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1NWR0VsZW1lbnQo
KSkgewotICAgICAgICBTVkdFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHBhcmVudCk7Ci0gICAgICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIHBhcmVudEVs
ZW1lbnQtPmlzU3R5bGVkTG9jYXRhYmxlKCkpIHsKLSAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSBwYXJlbnRDVE0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Kj4ocGFy
ZW50RWxlbWVudCktPmdldFNjcmVlbkNUTSgpOwotICAgICAgICAgICAgY3RtID0gcGFyZW50Q1RN
ICogY3RtOwotICAgICAgICB9CisgICAgU1ZHRWxlbWVudCogc3RvcEF0RWxlbWVudCA9IG1vZGUg
PT0gTmVhcmVzdFZpZXdwb3J0U2NvcGUgPyBuZWFyZXN0Vmlld3BvcnRFbGVtZW50KGVsZW1lbnQp
IDogMDsKKyAgICBmb3IgKGNvbnN0IE5vZGUqIGN1cnJlbnQgPSBlbGVtZW50OyBjdXJyZW50ICYm
IGN1cnJlbnQtPmlzU1ZHRWxlbWVudCgpOyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgp
KSB7CisgICAgICAgIGNvbnN0IFNWR0VsZW1lbnQqIGN1cnJlbnRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgU1ZHRWxlbWVudCo+KGN1cnJlbnQpOworICAgICAgICBpZiAoY3VycmVudEVsZW1l
bnQtPmlzU3R5bGVkKCkpCisgICAgICAgICAgICBjdG0gPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdT
dHlsZWRFbGVtZW50Kj4oY3VycmVudEVsZW1lbnQpLT5sb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5z
Zm9ybShtb2RlKS5tdWx0TGVmdChjdG0pOworCisgICAgICAgIC8vIEZvciBnZXRDVE0oKSBjb21w
dXRhdGlvbiwgc3RvcCBhdCB0aGUgbmVhcmVzdCB2aWV3cG9ydCBlbGVtZW50CisgICAgICAgIGlm
IChjdXJyZW50RWxlbWVudCA9PSBzdG9wQXRFbGVtZW50KQorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGN0bTsKQEAgLTEzNSw1ICsxMjQsMyBAQCBBZmZpbmVUcmFuc2Zv
cm0gU1ZHTG9jYXRhYmxlOjpnZXRUcmFuc2ZvCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQot
Ci0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkocmV2aXNpb24gNTY4NDEpCisr
KyBXZWJDb3JlL3N2Zy9TVkdMb2NhdGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8
d2lsZGZveEBrZGUub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTIyLDEyICsyMywxMSBAQAogI2RlZmluZSBTVkdMb2NhdGFibGVfaAog
CiAjaWYgRU5BQkxFKFNWRykKLQorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBBZmZp
bmVUcmFuc2Zvcm07CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBTVkdFbGVtZW50OwogCkBAIC00
OCwxNSArNDgsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBTVkdFbGVtZW50KiBuZWFyZXN0Vmll
d3BvcnRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKICAgICBzdGF0aWMgU1ZHRWxlbWVudCog
ZmFydGhlc3RWaWV3cG9ydEVsZW1lbnQoY29uc3QgU1ZHRWxlbWVudCopOwogCisgICAgZW51bSBD
VE1TY29wZSB7CisgICAgICAgIE5lYXJlc3RWaWV3cG9ydFNjb3BlLCAvLyBVc2VkIGZvciBnZXRD
VE0oKQorICAgICAgICBEb2N1bWVudFNjb3BlIC8vIFVzZWQgZm9yIGdldFNjcmVlbkNUTSgpCisg
ICAgfTsKKwogcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29v
cmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNvbnN0IHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CisKICAgICBzdGF0aWMgRmxvYXRSZWN0IGdldEJCb3go
Y29uc3QgU1ZHRWxlbWVudCopOwotICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKGNv
bnN0IFNWR0VsZW1lbnQqKTsKLSAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNU
TShjb25zdCBTVkdFbGVtZW50Kik7CisgICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBjb21wdXRl
Q1RNKGNvbnN0IFNWR0VsZW1lbnQqLCBDVE1TY29wZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQogI2VuZGlmIC8vIFNWR0xvY2F0YWJsZV9o
Ci0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1
Njg0MSkKKysrIFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzgsNTMgKzQzOCwzNyBAQCBTVkdUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
VHJhCiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybShtYXRyaXgpOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gU1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdTVkdF
bGVtZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNj
b3BlIG1vZGUpIGNvbnN0CiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdDsKLSAgICBpZiAoIWlz
T3V0ZXJtb3N0U1ZHKCkpCi0gICAgICAgIG1hdC50cmFuc2xhdGUoeCgpLnZhbHVlKHRoaXMpLCB5
KCkudmFsdWUodGhpcykpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRl
bShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3
Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQo
KS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIG1hdCA9IHZpZXdCb3ggKiBtYXQ7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1hdDsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0VsZW1lbnQ6OmdldFNj
cmVlbkNUTSgpIGNvbnN0Ci17Ci0gICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgRmxvYXRQb2ludCByb290TG9jYXRpb247CisgICAgQWZm
aW5lVHJhbnNmb3JtIHZpZXdCb3hUcmFuc2Zvcm07CisgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0
QXR0cmlidXRlSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKQorICAgICAgICB2aWV3Qm94VHJh
bnNmb3JtID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWln
aHQoKS52YWx1ZSh0aGlzKSk7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgaWYgKGlzT3V0ZXJtb3N0U1ZHKCkpIHsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIGlmICghaXNPdXRlcm1vc3RTVkcoKSkKKyAg
ICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSh4KCkudmFsdWUodGhpcyksIHkoKS52YWx1ZSh0aGlz
KSk7CisgICAgZWxzZSBpZiAobW9kZSA9PSBTVkdMb2NhdGFibGU6OkRvY3VtZW50U2NvcGUpIHsK
KyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7
CisgICAgICAgICAgICAvLyBUcmFuc2xhdGUgaW4gb3VyIENTUyBwYXJlbnQgY29vcmRpbmF0ZSBz
cGFjZQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3
aXRoIENTUyB0cmFuc2Zvcm1zLgotICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICAg
ICAgICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgcG9pbnQgPSBy
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAg
ICByb290TG9jYXRpb24ubW92ZShwb2ludC54KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcm9vdExvY2F0aW9uLm1vdmUoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFs
dWUodGhpcykpOwotICAgIH0KLSAgICAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gU1ZHU3R5
bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7Ci0gICAgbWF0LnRyYW5zbGF0ZShy
b290TG9jYXRpb24ueCgpLCByb290TG9jYXRpb24ueSgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgbG9jYXRpb24gPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFs
c2UsIHRydWUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShTVkdO
YW1lczo6dmlld0JveEF0dHIpKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94ID0g
dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1
ZSh0aGlzKSk7Ci0gICAgICAgIG1hdCA9IHZpZXdCb3ggKiBtYXQ7CisgICAgICAgICAgICAvLyBC
ZSBjYXJlZnVsIGhlcmUhIGxvY2FsVG9BYnNvbHV0ZSgpIGluY2x1ZGVzIHRoZSB4L3kgb2Zmc2V0
IGNvbWluZyBmcm9tIHRoZSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKCksIGJlY2F1c2UKKyAgICAg
ICAgICAgIC8vIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSAoY2Fs
bGVkIHRocm91Z2ggbWFwTG9jYWxUb0NvbnRhaW5lcigpLCBjYWxsZWQgZnJvbSBsb2NhbFRvQWJz
b2x1dGUoKSkKKyAgICAgICAgICAgIC8vIGFsc28gdGFrZXMgdGhlIHZpZXdCb3hUb1ZpZXdUcmFu
c2Zvcm0oKSBpbnRvIGFjY291bnQsIHNvIHdlIGhhdmUgdG8gc3Vic3RyYWN0IGl0IGhlcmUgKG9y
aWdpbmFsIGNhdXNlIG9mIGJ1ZyAjMjcxODMpCisgICAgICAgICAgICB0cmFuc2Zvcm0udHJhbnNs
YXRlKGxvY2F0aW9uLngoKSAtIHZpZXdCb3hUcmFuc2Zvcm0uZSgpLCBsb2NhdGlvbi55KCkgLSB2
aWV3Qm94VHJhbnNmb3JtLmYoKSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gbWF0
OworICAgIHJldHVybiB0cmFuc2Zvcm0ubXVsdExlZnQodmlld0JveFRyYW5zZm9ybSk7CiB9CiAK
IFJlbmRlck9iamVjdCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
IGFyZW5hLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgaWYgKGlzT3V0ZXJtb3N0U1ZHKCkpCiAgICAg
ICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdSb290KHRoaXMpOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKHRoaXMp
OworCisgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1ZpZXdwb3J0Q29udGFpbmVyKHRo
aXMpOwogfQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDU2ODQxKQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZH
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTAgKzExNCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKik7CiAKLSAgICAgICAgLy8gJ3ZpcnR1YWwgU1ZHTG9jYXRhYmxlJyBmdW5j
dGlvbnMKLSAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldFNjcmVlbkNUTSgpIGNvbnN0OwotCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkg
eyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAg
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVu
ZGVyU3R5bGUqKTsKIApAQCAtMTUwLDYgKzE0Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRvY3VtZW50V2lsbEJlY29tZUluYWN0aXZlKCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkb2N1bWVudERpZEJlY29tZUFjdGl2ZSgpOwogCisgICAgICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0
YWJsZTo6Q1RNU2NvcGUpIGNvbnN0OworCiAgICAgICAgIGJvb2wgbV91c2VDdXJyZW50VmlldzsK
ICAgICAgICAgUmVmUHRyPFNNSUxUaW1lQ29udGFpbmVyPiBtX3RpbWVDb250YWluZXI7CiAgICAg
ICAgIEZsb2F0UG9pbnQgbV90cmFuc2xhdGlvbjsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxl
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA1Njg0MSkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjMsNiArMzIzLDEzIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVu
dDo6c2V0SW5zdGFuY2VVcGRhdGUKICAgICAgICAgcmFyZVNWR0RhdGEoKS0+c2V0SW5zdGFuY2VV
cGRhdGVzQmxvY2tlZCh2YWx1ZSk7CiB9CiAKK0FmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3Bl
KSBjb25zdAoreworICAgIC8vIFRvIGJlIG92ZXJyaWRlbiBieSBTVkdTdHlsZWRMb2NhdGFibGVF
bGVtZW50L1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50IChvciBhcyBzcGVjaWFsIGNhc2Ug
U1ZHVGV4dEVsZW1lbnQpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEFm
ZmluZVRyYW5zZm9ybSgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gNTY4NDEpCisrKyBXZWJDb3JlL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpZiBFTkFC
TEUoU1ZHKQogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJTVkdMb2NhdGFibGUuaCIKICNpbmNsdWRlICJTVkdTdHlsYWJsZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02OCw2ICs2OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBpbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZChib29sKTsKIAorICAgICAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6
OkNUTVNjb3BlKSBjb25zdDsKKwogICAgIHByb3RlY3RlZDogCiAgICAgICAgIHN0YXRpYyBpbnQg
Y3NzUHJvcGVydHlJZEZvclNWR0F0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwog
CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAkocmV2aXNp
b24gNTY4NDEpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTcsMTIgKzU3LDEyIEBAIEZsb2F0UmVjdCBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50OjpnZXQKIAogQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZExvY2F0YWJsZUVs
ZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Z2V0Q1RN
KHRoaXMpOworICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9j
YXRhYmxlOjpOZWFyZXN0Vmlld3BvcnRTY29wZSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3JlZW5DVE0oKSBjb25zdAogewotICAgIHJldHVy
biBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTSh0aGlzKTsKKyAgICByZXR1cm4gU1ZHTG9jYXRh
YmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNWR0xvY2F0YWJsZTo6RG9jdW1lbnRTY29wZSk7CiB9CiAK
IH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHJldmlzaW9u
IDU2ODQxKQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBGbG9hdFJlY3QgZ2V0QkJveCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEFmZmlu
ZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBt
b2RlKSBjb25zdCB7IHJldHVybiBTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJh
bnNmb3JtKG1vZGUpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNp
b24gNTY4NDEpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxMiBAQCBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6flNWR1N0eWxlCiAKIEFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3Jt
YWJsZTo6Z2V0Q1RNKHRoaXMpOworICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0o
dGhpcywgU1ZHTG9jYXRhYmxlOjpOZWFyZXN0Vmlld3BvcnRTY29wZSk7CiB9CiAKIEFmZmluZVRy
YW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOwor
ICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpE
b2N1bWVudFNjb3BlKTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjphbmltYXRlZExvY2FsVHJhbnNmb3JtKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gNTY4NDEpCisr
KyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw3ICs0Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBnZXRTY3JlZW5DVE0oKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIG5lYXJlc3RW
aWV3cG9ydEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFNWR0VsZW1lbnQqIGZhcnRoZXN0
Vmlld3BvcnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgCisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFibGU6OkNUTVNjb3Bl
IG1vZGUpIGNvbnN0IHsgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmxvY2FsQ29vcmRpbmF0ZVNw
YWNlVHJhbnNmb3JtKG1vZGUpOyB9CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBz
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2
aXNpb24gNTY4NDEpCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDE0ICs3MiwxNCBAQCBGbG9hdFJlY3QgU1ZHVGV4dEVsZW1lbnQ6OmdldEJC
b3goKSBjb25zCiAgICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldEJCb3godGhpcyk7CiB9
CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QK
K0FmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOworICAgIHJldHVybiBT
VkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpOZWFyZXN0Vmlld3Bv
cnRTY29wZSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0Q1RNKCkg
Y29uc3QKK0FmZmluZVRyYW5zZm9ybSBTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0Q1RNKHRoaXMpOworICAgIHJl
dHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpEb2N1bWVu
dFNjb3BlKTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIFNWR1RleHRFbGVtZW50OjphbmltYXRlZExv
Y2FsVHJhbnNmb3JtKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gNTY4
NDEpCisrKyBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOworICAgICAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybShTVkdMb2NhdGFi
bGU6OkNUTVNjb3BlIG1vZGUpIGNvbnN0IHsgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmxvY2Fs
Q29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKG1vZGUpOyB9CiAKICAgICAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0
OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDU2ODQxKQorKysgV2Vi
Q29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdUcmFuc2Zvcm1hYmxlOjpTVkdUcmFu
c2Zvcm1hYmxlKCkgOiBTVkdMb2NhdGFibGUoKQorU1ZHVHJhbnNmb3JtYWJsZTo6U1ZHVHJhbnNm
b3JtYWJsZSgpCisgICAgOiBTVkdMb2NhdGFibGUoKQogewogfQogCkBAIC00MywxOCArNDQsNiBA
QCBTVkdUcmFuc2Zvcm1hYmxlOjp+U1ZHVHJhbnNmb3JtYWJsZSgpCiB7CiB9CiAKLUFmZmluZVRy
YW5zZm9ybSBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRDVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gU1ZHTG9jYXRhYmxlOjpnZXRD
VE0oZWxlbWVudCk7Ci0gICAgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSAqIGN0bTsK
LX0KLQotQWZmaW5lVHJhbnNmb3JtIFNWR1RyYW5zZm9ybWFibGU6OmdldFNjcmVlbkNUTShjb25z
dCBTVkdFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0g
PSBTVkdMb2NhdGFibGU6OmdldFNjcmVlbkNUTShlbGVtZW50KTsKLSAgICByZXR1cm4gYW5pbWF0
ZWRMb2NhbFRyYW5zZm9ybSgpICogY3RtOwotfQotCiBzdGF0aWMgaW50IHBhcnNlVHJhbnNmb3Jt
UGFyYW1MaXN0KGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCogdmFs
dWVzLCBpbnQgcmVxdWlyZWQsIGludCBvcHRpb25hbCkKIHsKICAgICBpbnQgb3B0aW9uYWxQYXJh
bXMgPSAwLCByZXF1aXJlZFBhcmFtcyA9IDA7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zv
cm1hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShy
ZXZpc2lvbiA1Njg0MSkKKysrIFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHBhcnNl
VHJhbnNmb3JtQXR0cmlidXRlKFNWR1RyYW5zZm9ybUxpc3QqLCBjb25zdCBBdG9taWNTdHJpbmcm
IHRyYW5zZm9ybSk7CiAgICAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoU1ZH
VHJhbnNmb3JtTGlzdCosIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBUcmFu
c2Zvcm1QYXJzaW5nTW9kZSBtb2RlID0gQ2xlYXJMaXN0KTsKICAgICBzdGF0aWMgYm9vbCBwYXJz
ZVRyYW5zZm9ybVZhbHVlKHVuc2lnbmVkIHR5cGUsIGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBV
Q2hhciogZW5kLCBTVkdUcmFuc2Zvcm0mKTsKLSAgICAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKGNvbnN0IFNWR0VsZW1lbnQqKSBjb25zdDsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2Ny
ZWVuQ1RNKGNvbnN0IFNWR0VsZW1lbnQqKSBjb25zdDsKLSAgICAKKworICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6
Q1RNU2NvcGUpIGNvbnN0IHsgcmV0dXJuIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKTsgfQogICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxUcmFuc2Zvcm0oKSBjb25zdCA9
IDA7CiAKICAgICBib29sIGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNTY4NDEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wMy0zMSAgTmlrb2xhcyBaaW1tZXJtYW5u
ICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSRUdSRVNTSU9OOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0
U2NyZWVuQ1RNKCkgcmV0dXJucyBpbmNvcnJlY3QgbWF0cml4LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxODMKKworICAgICAgICBTaGFyZSBjb2Rl
IGJldHdlZW4gdGhlIGRpZmZlcmVudCBzdmdzdmdlbGVtZW50LWN0bSoueGh0bSB0ZXN0cywgcGxh
Y2VkIGluIHN2Zy9jdXN0b20vcmVzb3VyY2VzLgorICAgICAgICBBZGQgc2V2ZXJhbCBuZXcgdGVz
dHMgY292ZXJpbmcgZ2V0Q1RNKCkvZ2V0U2NyZWVuQ1RNKCkgb24gdGV4dCwgaW5uZXIgYW5kIG91
dGVyIHN2ZyBlbGVtZW50cyBhbmQgY29udGFpbmVycy4KKworICAgICAgICAqIHN2Zy9jdXN0b20v
cmVzb3VyY2VzL3N2Z3N2Z2VsZW1lbnQtY3RtLmpzOiBBZGRlZC4KKyAgICAgICAgKGxvZyk6Cisg
ICAgICAgIChzdHJpbmdGb3JNYXRyaXgpOgorICAgICAgICAocHJpbnRDVE1zKToKKyAgICAgICAg
KiBzdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBz
dmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLnhodG1sOgorICAgICAgICAqIHN2Zy9jdXN0b20v
c3Znc3ZnZWxlbWVudC1jdG0yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1
c3RvbS9zdmdzdmdlbGVtZW50LWN0bTIueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9jdXN0
b20vc3Znc3ZnZWxlbWVudC1jdG0zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3Zn
L2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTMueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2Zy9j
dXN0b20vc3Znc3ZnZWxlbWVudC1jdG00LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
c3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTQueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHN2
Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG01LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTUueGh0bWw6IEFkZGVkLgorCiAyMDEwLTAz
LTMwICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2
Z3N2Z2VsZW1lbnQtY3RtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3N2ZzEgQ1RNOiBbb2JqZWN0IFNWR01hdHJp
eF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSgwLjAwLCAwLjAwKV0KK3N2ZzEgU2NyZWVuQ1RN
OiBbb2JqZWN0IFNWR01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSg4LjAwLCA4LjAw
KV0KK3N2ZzIgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAu
MDApKC0xMDAuMDAsIC0xMDAuMDApXQorc3ZnMiBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4
XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoLTkyLjAwLCAtOTIuMDApXQorZ3JvdXAgQ1RN
OiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKDEwMC4wMCwg
MTAwLjAwKV0KK2dyb3VwIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAu
MDApKDAuMDAsIDIwLjAwKSgxMDguMDAsIDEwOC4wMCldCitzdmczIENUTTogW29iamVjdCBTVkdN
YXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgwLjAwLCAwLjAwKV0KK3N2ZzMgU2Ny
ZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKDgu
MDAsIDguMDApXQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQt
Y3RtMi54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2Vs
ZW1lbnQtY3RtMi54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20v
c3Znc3ZnZWxlbWVudC1jdG0yLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8
aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8Ym9keT4KKyAgPGRp
dj4KKyAgICA8IS0tIEFsbCB2YWx1ZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBzdmdzdmdlbGVt
ZW50LWN0bS54aHRtbCwgZXhjZXB0IHRoZSBzY3JlZW5DVE0gZS9mIHZhbHVlcywgb3VyIHZhbHVl
cyBzaG91bGQgYmUgMnB4IHNtYWxsZXIgaGVyZSAoMTA4IGluc3RlYWQgb2YgMTEwIGV0Yy4uKSAt
LT4KKyAgICA8IS0tIHN2Z3N2Z2VsZW1lbnQtY3RtLnhodG1sIGFzc2lnbnMgYSB0b3AvbGVmdCBw
b3NpdGlvbiBvZiAxMHB4LCBhbmQgaGVyZSA4cHggb2Zmc2V0IGlzIGF1dG9tYXRpY2FsbHkgYXNz
aWduZWQgZnJvbSB0aGUgcGFyZW50IDxib2R5PiAtLT4KKyAgICA8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIgaWQ9InN2ZzEiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj4K
KyAgICAgICAgPHN2ZyBpZD0ic3ZnMiIgdmlld0JveD0iNSA1IDIwIDIwIj4KKyAgICAgICAgICAg
PGcgaWQ9Imdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMCwgMTApIj4KKyAgICAgICAgICAg
ICA8c3ZnIGlkPSJzdmczIiB2aWV3Qm94PSI1IDUgMjAgMjAiPjwvc3ZnPgorICAgICAgICAgICA8
L2c+CisgICAgICAgIDwvc3ZnPgorICAgIDwvc3ZnPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zdmdzdmdlbGVtZW50LWN0bS5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3N2Z3N2Z2VsZW1lbnQtY3RtMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3N2ZzEgQ1RNOiBbb2JqZWN0IFNWR01h
dHJpeF0gWygwLjUwLCAwLjAwKSgwLjAwLCAwLjUwKSgwLjAwLCAwLjAwKV0KK3N2ZzEgU2NyZWVu
Q1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygwLjUwLCAwLjAwKSgwLjAwLCAwLjUwKSg4LjAwLCA4
LjAwKV0KK3N2ZzIgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxMC4wMCwgMC4wMCkoMC4wMCwg
MTAuMDApKC01MC4wMCwgLTUwLjAwKV0KK3N2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJp
eF0gWygxMC4wMCwgMC4wMCkoMC4wMCwgMTAuMDApKC00Mi4wMCwgLTQyLjAwKV0KK2dyb3VwIENU
TTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgxMDAuMDAs
IDEwMC4wMCldCitncm91cCBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEwLjAwLCAw
LjAwKSgwLjAwLCAxMC4wMCkoNTguMDAsIDU4LjAwKV0KK3N2ZzMgQ1RNOiBbb2JqZWN0IFNWR01h
dHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKDAuMDAsIDAuMDApXQorc3ZnMyBTY3Jl
ZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEwLjAwLCAwLjAwKSgwLjAwLCAxMC4wMCkoOC4w
MCwgOC4wMCldCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1j
dG0zLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxl
bWVudC1jdG0zLnhodG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9z
dmdzdmdlbGVtZW50LWN0bTMueGh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzxo
dG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxib2R5PgorICA8ZGl2
PgorICAgIDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBpZD0ic3ZnMSIg
d2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj4KKyAgICAgICAg
PHN2ZyBpZD0ic3ZnMiIgdmlld0JveD0iNSA1IDIwIDIwIj4KKyAgICAgICAgICAgPGcgaWQ9Imdy
b3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMCwgMTApIj4KKyAgICAgICAgICAgICA8c3ZnIGlk
PSJzdmczIiB2aWV3Qm94PSI1IDUgMjAgMjAiPjwvc3ZnPgorICAgICAgICAgICA8L2c+CisgICAg
ICAgIDwvc3ZnPgorICAgIDwvc3ZnPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibG9nIj48L2Rpdj4K
KyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zdmdzdmdlbGVtZW50LWN0bS5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2Vs
ZW1lbnQtY3RtNC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1
c3RvbS9zdmdzdmdlbGVtZW50LWN0bTQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3N2ZzEgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygx
LjAwLCAwLjAwKSgwLjAwLCAxLjAwKSgwLjAwLCAwLjAwKV0KK3N2ZzEgU2NyZWVuQ1RNOiBbb2Jq
ZWN0IFNWR01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSg4LjAwLCA4LjAwKV0KK3N2
ZzIgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSg1MC4w
MCwgNTAuMDApXQorc3ZnMiBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEuMDAsIDAu
MDApKDAuMDAsIDEuMDApKDU4LjAwLCA1OC4wMCldCitncm91cCBDVE06IFtvYmplY3QgU1ZHTWF0
cml4XSBbKDEuMDAsIDAuMDApKDAuMDAsIDEuMDApKDYwLjAwLCA2MC4wMCldCitncm91cCBTY3Jl
ZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEuMDAsIDAuMDApKDAuMDAsIDEuMDApKDY4LjAw
LCA2OC4wMCldCitzdmczIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAu
MDAsIDIwLjAwKSgtMTQwLjAwLCAtMTQwLjAwKV0KK3N2ZzMgU2NyZWVuQ1RNOiBbb2JqZWN0IFNW
R01hdHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKC0xMzIuMDAsIC0xMzIuMDApXQor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNC54aHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNC54
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVu
dC1jdG00LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8aHRtbCB4bWxucz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8Ym9keT4KKyAgPGRpdj4KKyAgICA8IS0t
IEFsbCB2YWx1ZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBzdmdzdmdlbGVtZW50LWN0bS54aHRt
bCwgZXhjZXB0IHRoZSBzY3JlZW5DVE0gZS9mIHZhbHVlcywgb3VyIHZhbHVlcyBzaG91bGQgYmUg
MnB4IHNtYWxsZXIgaGVyZSAoMTA4IGluc3RlYWQgb2YgMTEwIGV0Yy4uKSAtLT4KKyAgICA8IS0t
IHN2Z3N2Z2VsZW1lbnQtY3RtLnhodG1sIGFzc2lnbnMgYSB0b3AvbGVmdCBwb3NpdGlvbiBvZiAx
MHB4LCBhbmQgaGVyZSA4cHggb2Zmc2V0IGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgZnJvbSB0
aGUgcGFyZW50IDxib2R5PiAtLT4KKyAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyIgaWQ9InN2ZzEiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIj4KKyAgICAgICAgPHN2
ZyBpZD0ic3ZnMiIgeD0iNTAiIHk9IjUwIj4KKyAgICAgICAgICAgPGcgaWQ9Imdyb3VwIiB0cmFu
c2Zvcm09InRyYW5zbGF0ZSgxMCwgMTApIj4KKyAgICAgICAgICAgICA8c3ZnIGlkPSJzdmczIiB4
PSItMTAwIiB5PSItMTAwIiB2aWV3Qm94PSI1IDUgMjAgMjAiPjwvc3ZnPgorICAgICAgICAgICA8
L2c+CisgICAgICAgIDwvc3ZnPgorICAgIDwvc3ZnPgorICA8L2Rpdj4KKyAgPGRpdiBpZD0ibG9n
Ij48L2Rpdj4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zdmdzdmdlbGVtZW50LWN0bS5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3N2Z3N2Z2VsZW1lbnQtY3RtNS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK3N2ZzEgQ1RNOiBbb2JqZWN0IFNWR01h
dHJpeF0gWygxLjUwLCAwLjAwKSgwLjAwLCAxLjUwKSgxMDAuMDAsIDAuMDApXQorc3ZnMSBTY3Jl
ZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEuNTAsIDAuMDApKDAuMDAsIDEuNTApKDEwMC4w
MCwgMC4wMCldCitzdmcyIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMzAuMDAsIDAuMDApKDAu
MDAsIDMwLjAwKSgtNTAuMDAsIC0xNTAuMDApXQorc3ZnMiBTY3JlZW5DVE06IFtvYmplY3QgU1ZH
TWF0cml4XSBbKDMwLjAwLCAwLjAwKSgwLjAwLCAzMC4wMCkoLTUwLjAwLCAtMTUwLjAwKV0KK2dy
b3VwIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgx
MDAuMDAsIDEwMC4wMCldCitncm91cCBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDMw
LjAwLCAwLjAwKSgwLjAwLCAzMC4wMCkoMjUwLjAwLCAxNTAuMDApXQorc3ZnMyBDVE06IFtvYmpl
Y3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMC4wMCwgMC4wMCldCitz
dmczIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMzAuMDAsIDAuMDApKDAuMDAsIDMw
LjAwKSgxMDAuMDAsIDAuMDApXQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2
Z2VsZW1lbnQtY3RtNS54aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3N2Z3N2Z2VsZW1lbnQtY3RtNS54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2
Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG01LnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE3IEBACis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8Ym9k
eT4KKyAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwcHg7IHRvcDogMHB4
OyB3aWR0aDogODAwcHg7IGhlaWdodDogNjAwcHg7Ij4KKyAgICA8IS0tIFRlc3RjYXNlIGNvdmVy
aW5nIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxODMgLS0+
CisgICAgPCEtLSBXZWJLaXQgdXNlZCB0byByZXR1cm4gd3Jvbmcgc2NyZWVuQ1RNIHZhbHVlcywg
d2hlbiB1c2luZyB2aWV3Qm94IGluIGNvbWJpbmF0aW9uIHdpdGggcmVsYXRpdmUgd2lkdGgvaGVp
Z2h0IHZhbHVlcyBvbiB0aGUgb3V0ZXJtb3N0IDxzdmc+IC0tPgorICAgIDxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBpZD0ic3ZnMSIgd2lkdGg9IjEwMCUiIGhlaWdodD0i
MTAwJSIgdmlld0JveD0iMCAwIDQwMCA0MDAiPgorICAgICAgICA8c3ZnIGlkPSJzdmcyIiB2aWV3
Qm94PSI1IDUgMjAgMjAiPgorICAgICAgICAgICA8ZyBpZD0iZ3JvdXAiIHRyYW5zZm9ybT0idHJh
bnNsYXRlKDEwLCAxMCkiPgorICAgICAgICAgICAgIDxzdmcgaWQ9InN2ZzMiIHZpZXdCb3g9IjUg
NSAyMCAyMCI+PC9zdmc+CisgICAgICAgICAgIDwvZz4KKyAgICAgICAgPC9zdmc+CisgICAgPC9z
dmc+CisgIDwvZGl2PgorICA8ZGl2IGlkPSJsb2ciPjwvZGl2PgorICA8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3N2Z3N2Z2VsZW1lbnQtY3RtLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG0tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1j
dG0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1Njg0MSkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0
b20vc3Znc3ZnZWxlbWVudC1jdG0tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkg
KzEsOSBAQAotc3ZnMSBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDAsIDApKDAsIDApKE5hTiwg
TmFOKV0KLXN2ZzEgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxLCAwKSgwLCAxKSgx
MCwgMjEwKV0KLXN2ZzIgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMCwgMCkoMCwgMjApKC0x
MDAsIC0xMDApXQotc3ZnMiBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLCAwKSgw
LCAyMCkoLTkwLCAxMTApXQotZ3JvdXAgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMCwgMCko
MCwgMjApKDEwMCwgMTAwKV0KLWdyb3VwIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFso
MjAsIDApKDAsIDIwKSgxMTAsIDMxMCldCi1zdmczIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFso
MSwgMCkoMCwgMSkoLTUsIC01KV0KLXN2ZzMgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0g
WygyMCwgMCkoMCwgMjApKDEwLCAyMTApXQorc3ZnMSBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBb
KDEuMDAsIDAuMDApKDAuMDAsIDEuMDApKDAuMDAsIDAuMDApXQorc3ZnMSBTY3JlZW5DVE06IFtv
YmplY3QgU1ZHTWF0cml4XSBbKDEuMDAsIDAuMDApKDAuMDAsIDEuMDApKDEwLjAwLCAxMC4wMCld
CitzdmcyIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAw
KSgtMTAwLjAwLCAtMTAwLjAwKV0KK3N2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0g
WygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKC05MC4wMCwgLTkwLjAwKV0KK2dyb3VwIENUTTog
W29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgxMDAuMDAsIDEw
MC4wMCldCitncm91cCBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAw
KSgwLjAwLCAyMC4wMCkoMTEwLjAwLCAxMTAuMDApXQorc3ZnMyBDVE06IFtvYmplY3QgU1ZHTWF0
cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMC4wMCwgMC4wMCldCitzdmczIFNjcmVl
bkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgxMC4w
MCwgMTAuMDApXQogCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQt
Y3RtLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxl
bWVudC1jdG0ueGh0bWwJKHJldmlzaW9uIDU2ODQxKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9zdmdzdmdlbGVtZW50LWN0bS54aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KIDxib2R5PgotICA8
ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsgd2lk
dGg6IDQwMHB4OyBoZWlnaHQ6IDQwMDsiPgorICA8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1
dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsgd2lkdGg6IDQwMHB4OyBoZWlnaHQ6IDQwMHB4OyI+
CiAgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJzdmcxIiB2
aWV3Qm94PSIwIDAgNDAwIDQwMCI+CiAgICAgICAgIDxzdmcgaWQ9InN2ZzIiIHZpZXdCb3g9IjUg
NSAyMCAyMCI+CiAgICAgICAgICAgIDxnIGlkPSJncm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUo
MTAsIDEwKSI+CkBAIC0xMCwyNyArMTAsNiBAQAogICAgIDwvc3ZnPgogICA8L2Rpdj4KICAgPGRp
diBpZD0ibG9nIj48L2Rpdj4KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2VjbWFzY3JpcHQiPjwhW0NE
QVRBWwotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0KLSAgICB2YXIgbG9nRGl2ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xvZycpOwotICAgIGZ1bmN0aW9uIGxvZyhzKSB7Ci0gICAgICBsb2dE
aXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocykpOwotICAgICAgbG9nRGl2
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOwotICAgIH0KLSAgICBm
dW5jdGlvbiBzdHJpbmdGb3JNYXRyaXgobSkgewotICAgICAgcmV0dXJuIG0gKyAiIFsoIiArIG0u
YSArICcsICcgKyBtLmMgKyAnKSgnICsgbS5iICsgJywgJyArIG0uZCArICcpKCcgKyBtLmUgKyAn
LCAnICsgbS5mICsgIildIjsKLSAgICB9Ci0gICAgZnVuY3Rpb24gcHJpbnRDVE1zKG5hbWUpIHsK
LSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsKLSAg
ICAgICAgbG9nKG5hbWUgKyAiIENUTTogIiArIHN0cmluZ0Zvck1hdHJpeChlbGVtZW50LmdldENU
TSgpKSk7Ci0gICAgICAgIGxvZyhuYW1lICsgIiBTY3JlZW5DVE06ICIgKyBzdHJpbmdGb3JNYXRy
aXgoZWxlbWVudC5nZXRTY3JlZW5DVE0oKSkpOwotICAgIH0KLSAgICBwcmludENUTXMoInN2ZzEi
KTsKLSAgICBwcmludENUTXMoInN2ZzIiKTsKLSAgICBwcmludENUTXMoImdyb3VwIik7Ci0gICAg
cHJpbnRDVE1zKCJzdmczIik7Ci0gIF1dPjwvc2NyaXB0PgorICA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3N2Z3N2Z2VsZW1lbnQtY3RtLmpzIj48L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0b20vcmVzb3VyY2VzL3N2Z3N2Z2VsZW1lbnQtY3RtLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcmVzb3VyY2VzL3N2Z3N2Z2Vs
ZW1lbnQtY3RtLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9yZXNv
dXJjZXMvc3Znc3ZnZWxlbWVudC1jdG0uanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisJbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCit2YXIgbG9nRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xv
ZycpOworZnVuY3Rpb24gbG9nKHMpIHsKKwlsb2dEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUocykpOworCWxvZ0Rpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdicicpKTsKK30KKworZnVuY3Rpb24gc3RyaW5nRm9yTWF0cml4KG0pIHsKKwlyZXR1cm4g
bSArICIgWygiICsgbS5hLnRvRml4ZWQoMikgKyAnLCAnICsgbS5jLnRvRml4ZWQoMikgKyAnKSgn
ICsgbS5iLnRvRml4ZWQoMikgKyAnLCAnICsgbS5kLnRvRml4ZWQoMikgKyAnKSgnICsgbS5lLnRv
Rml4ZWQoMikgKyAnLCAnICsgbS5mLnRvRml4ZWQoMikgKyAiKV0iOworfQorCitmdW5jdGlvbiBw
cmludENUTXMobmFtZSkgeworCXZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
bmFtZSk7CisJbG9nKG5hbWUgKyAiIENUTTogIiArIHN0cmluZ0Zvck1hdHJpeChlbGVtZW50Lmdl
dENUTSgpKSk7CisJbG9nKG5hbWUgKyAiIFNjcmVlbkNUTTogIiArIHN0cmluZ0Zvck1hdHJpeChl
bGVtZW50LmdldFNjcmVlbkNUTSgpKSk7Cit9CisKK3ByaW50Q1RNcygic3ZnMSIpOworcHJpbnRD
VE1zKCJzdmcyIik7CitwcmludENUTXMoImdyb3VwIik7CitwcmludENUTXMoInN2ZzMiKTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52180</attachid>
            <date>2010-03-31 09:36:14 -0700</date>
            <delta_ts>2010-03-31 09:39:11 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>FixCTM.diff</filename>
            <type>text/plain</type>
            <size>32709</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDMtMzEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUkVHUkVTU0lPTjogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldFNjcmVlbkNUTSgp
IHJldHVybnMgaW5jb3JyZWN0IG1hdHJpeC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI3MTgzCisKKyAgICAgICAgUmV3cml0ZSBnZXRDVE0oKSAvIGdl
dFNjcmVlbkNUTSgpIGhhbmRsaW5nIGluIGFuIGl0ZXJhdGl2ZSB3YXksIGZpeGluZyBhbGwga25v
d24gcHJvYmxlbXMvbGltaXRhdGlvbnMuCisgICAgICAgIFRoZSBidWcgbWVudGlvbmVkIGFib3Zl
IGlzIGFjdHVhbGx5IG5vdCBhIHJlZ3Jlc3Npb24sIGdldFNjcmVlbkNUTSgpIG9ubHkgd29ya2Vk
IGJlZm9yZSwgYmVjYXVzZSB3ZQorICAgICAgICBkaWQgbm90IGhhbmRsZSBub24tU1ZHIENTUyBi
b3ggcGFyZW50cyBwcm9wZXJseS4gV2hlbiBzdXBwb3J0IHdhcyBhZGRlZCB0byBoYW5kbGUgdGhv
c2UgY2FzZXMsIHRoZQorICAgICAgICBnZXRTY3JlZW5DVE0oKSBoYW5kbGluZyB3YXMgY29tcGxl
dGx5IG9mZiwgY2F1c2luZyBhIGxvdCBvZiB0cm91YmxlIGluIHJlYWwtbGlmZSBTVkcgYXBwbGlj
YXRpb25zIChjYXJ0by5uZXQgZm9yIGluc3RhbmNlKQorCisgICAgICAgIFRlc3RzOiBzdmcvY3Vz
dG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLnhodG1sIChmaXhlZCB0eXBvLCBtaXNzaW5nIHVuaXQgaWRl
bnRpZmllciBpbiBDU1MgJ2hlaWdodCcgcHJvcGVydHksIGxlYWRpbmcgdG8gaW5jb3JyZWN0IHJl
c3VsdHMpCisgICAgICAgICAgICAgICBzdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtMi54aHRt
bAorICAgICAgICAgICAgICAgc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTMueGh0bWwKKyAg
ICAgICAgICAgICAgIHN2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG00LnhodG1sCisgICAgICAg
ICAgICAgICBzdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNS54aHRtbAorCisgICAgICAgICog
c3ZnL1NWR0xvY2F0YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFibGU6Omdl
dEJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTG9jYXRhYmxlOjpjb21wdXRlQ1RNKToKKyAg
ICAgICAgKiBzdmcvU1ZHTG9jYXRhYmxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdMb2NhdGFi
bGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpsb2NhbENvb3Jk
aW5hdGVTcGFjZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcik6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuaDoKKyAgICAgICAg
KiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRF
bGVtZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRD
VE0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2Ny
ZWVuQ1RNKToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6bG9jYWxDb29yZGluYXRl
U3BhY2VUcmFuc2Zvcm0pOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50OjpnZXRTY3JlZW5DVE0pOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQ6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKToKKyAgICAgICAgKiBzdmcvU1ZHVGV4
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OmdldENUTSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKToKKyAgICAg
ICAgKiBzdmcvU1ZHVGV4dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRFbGVt
ZW50Ojpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5zZm9ybSk6CisgICAgICAgICogc3ZnL1NWR1Ry
YW5zZm9ybWFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVHJhbnNmb3JtYWJsZTo6U1ZH
VHJhbnNmb3JtYWJsZSk6CisgICAgICAgICogc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RyYW5zZm9ybWFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNm
b3JtKToKKwogMjAxMC0wMy0zMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3Jl
L3N2Zy9TVkdMb2NhdGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0xvY2F0
YWJsZS5jcHAJKHJldmlzaW9uIDU2ODQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDggQEAKIC8qCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgorICAgIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICAgIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsMTQgKzIx
LDEzIEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaWYgRU5BQkxFKFNWRykKIAorI2lm
IEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTG9jYXRhYmxlLmgiCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC03Myw2ICs3Myw3IEBAIFNWR0VsZW1lbnQqIFNWR0xvY2F0YWJs
ZTo6ZmFydGhlc3RWaWV3cG8KIAogRmxvYXRSZWN0IFNWR0xvY2F0YWJsZTo6Z2V0QkJveChjb25z
dCBTVkdFbGVtZW50KiBlbGVtZW50KQogeworICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
IAogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHNob3VsZCBzdXBwb3J0IGdldEJCb3ggZm9y
IGRldGFjaGVkIGVsZW1lbnRzLgpAQCAtODIsMzUgKzgzLDIyIEBAIEZsb2F0UmVjdCBTVkdMb2Nh
dGFibGU6OmdldEJCb3goY29uc3QgU1YKICAgICByZXR1cm4gZWxlbWVudC0+cmVuZGVyZXIoKS0+
b2JqZWN0Qm91bmRpbmdCb3goKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNWR0xvY2F0YWJsZTo6
Z2V0Q1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpCitBZmZpbmVUcmFuc2Zvcm0gU1ZHTG9j
YXRhYmxlOjpjb21wdXRlQ1RNKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIENUTVNjb3BlIG1v
ZGUpCiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIEFmZmluZVRyYW5zZm9ybSBjdG07Ci0K
LSAgICBOb2RlKiBwYXJlbnQgPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKHBhcmVu
dCAmJiBwYXJlbnQtPmlzU1ZHRWxlbWVudCgpKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50KTsKLSAgICAgICAgaWYg
KHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC0+aXNTdHlsZWRMb2NhdGFibGUoKSkgewot
ICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHBhcmVudENUTSA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQqPihwYXJlbnRFbGVtZW50KS0+Z2V0Q1RNKCk7Ci0gICAgICAg
ICAgICBjdG0gPSBwYXJlbnRDVE0gKiBjdG07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gY3RtOwotfQorICAgIGVsZW1lbnQtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHTG9jYXRhYmxlOjpnZXRT
Y3JlZW5DVE0oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVu
dCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKIAotICAgIE5vZGUqIHBhcmVudCA9IGVsZW1l
bnQtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNTVkdFbGVtZW50
KCkpIHsKLSAgICAgICAgU1ZHRWxlbWVudCogcGFyZW50RWxlbWVudCA9IHN0YXRpY19jYXN0PFNW
R0VsZW1lbnQqPihwYXJlbnQpOwotICAgICAgICBpZiAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRF
bGVtZW50LT5pc1N0eWxlZExvY2F0YWJsZSgpKSB7Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gcGFyZW50Q1RNID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCo+KHBh
cmVudEVsZW1lbnQpLT5nZXRTY3JlZW5DVE0oKTsKLSAgICAgICAgICAgIGN0bSA9IHBhcmVudENU
TSAqIGN0bTsKLSAgICAgICAgfQorICAgIFNWR0VsZW1lbnQqIHN0b3BBdEVsZW1lbnQgPSBtb2Rl
ID09IE5lYXJlc3RWaWV3cG9ydFNjb3BlID8gbmVhcmVzdFZpZXdwb3J0RWxlbWVudChlbGVtZW50
KSA6IDA7CisgICAgZm9yIChjb25zdCBOb2RlKiBjdXJyZW50ID0gZWxlbWVudDsgY3VycmVudCAm
JiBjdXJyZW50LT5pc1NWR0VsZW1lbnQoKTsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUo
KSkgeworICAgICAgICBjb25zdCBTVkdFbGVtZW50KiBjdXJyZW50RWxlbWVudCA9IHN0YXRpY19j
YXN0PGNvbnN0IFNWR0VsZW1lbnQqPihjdXJyZW50KTsKKyAgICAgICAgaWYgKGN1cnJlbnRFbGVt
ZW50LT5pc1N0eWxlZCgpKQorICAgICAgICAgICAgY3RtID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZH
U3R5bGVkRWxlbWVudCo+KGN1cnJlbnRFbGVtZW50KS0+bG9jYWxDb29yZGluYXRlU3BhY2VUcmFu
c2Zvcm0obW9kZSkubXVsdExlZnQoY3RtKTsKKworICAgICAgICAvLyBGb3IgZ2V0Q1RNKCkgY29t
cHV0YXRpb24sIHN0b3AgYXQgdGhlIG5lYXJlc3Qgdmlld3BvcnQgZWxlbWVudAorICAgICAgICBp
ZiAoY3VycmVudEVsZW1lbnQgPT0gc3RvcEF0RWxlbWVudCkKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIHJldHVybiBjdG07CkBAIC0xMzUsNSArMTIzLDMgQEAgQWZmaW5lVHJhbnNm
b3JtIFNWR0xvY2F0YWJsZTo6Z2V0VHJhbnNmbwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykK
LQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHJldmlzaW9uIDU2ODQ1KQor
KysgV2ViQ29yZS9zdmcvU1ZHTG9jYXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3
IEBACiAvKgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAy
MDA1LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yMiwxMiArMjMsMTEgQEAKICNkZWZpbmUgU1ZHTG9jYXRhYmxlX2gK
IAogI2lmIEVOQUJMRShTVkcpCi0KKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgU1ZHRWxlbWVudDsKIApAQCAt
NDgsMTUgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU1ZHRWxlbWVudCogbmVhcmVzdFZp
ZXdwb3J0RWxlbWVudChjb25zdCBTVkdFbGVtZW50Kik7CiAgICAgc3RhdGljIFNWR0VsZW1lbnQq
IGZhcnRoZXN0Vmlld3BvcnRFbGVtZW50KGNvbnN0IFNWR0VsZW1lbnQqKTsKIAorICAgIGVudW0g
Q1RNU2NvcGUgeworICAgICAgICBOZWFyZXN0Vmlld3BvcnRTY29wZSwgLy8gVXNlZCBmb3IgZ2V0
Q1RNKCkKKyAgICAgICAgU2NyZWVuU2NvcGUgLy8gVXNlZCBmb3IgZ2V0U2NyZWVuQ1RNKCkKKyAg
ICB9OworCiBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29y
ZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKwogICAgIHN0YXRpYyBGbG9hdFJlY3QgZ2V0QkJveChj
b25zdCBTVkdFbGVtZW50Kik7Ci0gICAgc3RhdGljIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oY29u
c3QgU1ZHRWxlbWVudCopOwotICAgIHN0YXRpYyBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RN
KGNvbnN0IFNWR0VsZW1lbnQqKTsKKyAgICBzdGF0aWMgQWZmaW5lVHJhbnNmb3JtIGNvbXB1dGVD
VE0oY29uc3QgU1ZHRWxlbWVudCosIENUTVNjb3BlKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCiAjZW5kaWYgLy8gU1ZHTG9jYXRhYmxlX2gK
LQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2
ODQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzOCw1MyArNDM4LDM3IEBAIFNWR1RyYW5zZm9ybSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdU
cmEKICAgICByZXR1cm4gU1ZHVHJhbnNmb3JtKG1hdHJpeCk7CiB9CiAKLUFmZmluZVRyYW5zZm9y
bSBTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIFNWR1NWR0Vs
ZW1lbnQ6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2Nv
cGUgbW9kZSkgY29uc3QKIHsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0OwotICAgIGlmICghaXNP
dXRlcm1vc3RTVkcoKSkKLSAgICAgICAgbWF0LnRyYW5zbGF0ZSh4KCkudmFsdWUodGhpcyksIHko
KS52YWx1ZSh0aGlzKSk7Ci0KLSAgICBpZiAoYXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVt
KFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdC
b3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgp
LnZhbHVlKHRoaXMpKTsKLSAgICAgICAgbWF0ID0gdmlld0JveCAqIG1hdDsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbWF0OwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHU1ZHRWxlbWVudDo6Z2V0U2Ny
ZWVuQ1RNKCkgY29uc3QKLXsKLSAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKLSAgICBGbG9hdFBvaW50IHJvb3RMb2NhdGlvbjsKKyAgICBBZmZp
bmVUcmFuc2Zvcm0gdmlld0JveFRyYW5zZm9ybTsKKyAgICBpZiAoYXR0cmlidXRlcygpLT5nZXRB
dHRyaWJ1dGVJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpCisgICAgICAgIHZpZXdCb3hUcmFu
c2Zvcm0gPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdo
dCgpLnZhbHVlKHRoaXMpKTsKIAotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gdGhp
cy0+cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAoaXNPdXRlcm1vc3RTVkcoKSkgeworICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgaWYgKCFpc091dGVybW9zdFNWRygpKQorICAg
ICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMp
KTsKKyAgICBlbHNlIGlmIChtb2RlID09IFNWR0xvY2F0YWJsZTo6U2NyZWVuU2NvcGUpIHsKKyAg
ICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKSB7Cisg
ICAgICAgICAgICAvLyBUcmFuc2xhdGUgaW4gb3VyIENTUyBwYXJlbnQgY29vcmRpbmF0ZSBzcGFj
ZQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9lc24ndCB3b3JrIGNvcnJlY3RseSB3aXRo
IENTUyB0cmFuc2Zvcm1zLgotICAgICAgICAgICAgRmxvYXRQb2ludCBwb2ludDsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJlci0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgcG9pbnQgPSByZW5k
ZXJlci0+bG9jYWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBy
b290TG9jYXRpb24ubW92ZShwb2ludC54KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcm9vdExvY2F0aW9uLm1vdmUoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUo
dGhpcykpOwotICAgIH0KLSAgICAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0ID0gU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7Ci0gICAgbWF0LnRyYW5zbGF0ZShyb290
TG9jYXRpb24ueCgpLCByb290TG9jYXRpb24ueSgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQg
bG9jYXRpb24gPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgZmFsc2Us
IHRydWUpOwogCi0gICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShTVkdOYW1l
czo6dmlld0JveEF0dHIpKSB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB2aWV3Qm94ID0gdmll
d0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0
aGlzKSk7Ci0gICAgICAgIG1hdCA9IHZpZXdCb3ggKiBtYXQ7CisgICAgICAgICAgICAvLyBCZSBj
YXJlZnVsIGhlcmUhIGxvY2FsVG9BYnNvbHV0ZSgpIGluY2x1ZGVzIHRoZSB4L3kgb2Zmc2V0IGNv
bWluZyBmcm9tIHRoZSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKCksIGJlY2F1c2UKKyAgICAgICAg
ICAgIC8vIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zvcm0oKSAoY2FsbGVk
IHRocm91Z2ggbWFwTG9jYWxUb0NvbnRhaW5lcigpLCBjYWxsZWQgZnJvbSBsb2NhbFRvQWJzb2x1
dGUoKSkKKyAgICAgICAgICAgIC8vIGFsc28gdGFrZXMgdGhlIHZpZXdCb3hUb1ZpZXdUcmFuc2Zv
cm0oKSBpbnRvIGFjY291bnQsIHNvIHdlIGhhdmUgdG8gc3VidHJhY3QgaXQgaGVyZSAob3JpZ2lu
YWwgY2F1c2Ugb2YgYnVnICMyNzE4MykKKyAgICAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
bG9jYXRpb24ueCgpIC0gdmlld0JveFRyYW5zZm9ybS5lKCksIGxvY2F0aW9uLnkoKSAtIHZpZXdC
b3hUcmFuc2Zvcm0uZigpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBtYXQ7Cisg
ICAgcmV0dXJuIHRyYW5zZm9ybS5tdWx0TGVmdCh2aWV3Qm94VHJhbnNmb3JtKTsKIH0KIAogUmVu
ZGVyT2JqZWN0KiBTVkdTVkdFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKikKIHsKICAgICBpZiAoaXNPdXRlcm1vc3RTVkcoKSkKICAgICAgICAg
cmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR1Jvb3QodGhpcyk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIodGhpcyk7CisK
KyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU1ZHVmlld3BvcnRDb250YWluZXIodGhpcyk7
CiB9CiAKIHZvaWQgU1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1NWR0VsZW1lbnQuaAkocmV2aXNpb24gNTY4NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMCArMTE0LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKIAotICAgICAgICAvLyAndmlydHVhbCBTVkdMb2NhdGFibGUnIGZ1bmN0aW9u
cwotICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2NyZWVuQ1RNKCkgY29uc3Q7Ci0KICAgICAg
ICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJl
dHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQogICAgICAgICB2
aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSopOwogCkBAIC0xNTAsNiArMTQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZG9jdW1lbnRXaWxsQmVjb21lSW5hY3RpdmUoKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CiAKKyAgICAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxl
OjpDVE1TY29wZSkgY29uc3Q7CisKICAgICAgICAgYm9vbCBtX3VzZUN1cnJlbnRWaWV3OwogICAg
ICAgICBSZWZQdHI8U01JTFRpbWVDb250YWluZXI+IG1fdGltZUNvbnRhaW5lcjsKICAgICAgICAg
RmxvYXRQb2ludCBtX3RyYW5zbGF0aW9uOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDU2ODQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMyw2ICszMjMsMTMgQEAgdm9pZCBTVkdTdHlsZWRFbGVtZW50Ojpz
ZXRJbnN0YW5jZVVwZGF0ZQogICAgICAgICByYXJlU1ZHRGF0YSgpLT5zZXRJbnN0YW5jZVVwZGF0
ZXNCbG9ja2VkKHZhbHVlKTsKIH0KIAorQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxlZEVsZW1lbnQ6
OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2NvcGUpIGNv
bnN0Cit7CisgICAgLy8gVG8gYmUgb3ZlcnJpZGVuIGJ5IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1l
bnQvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKG9yIGFzIHNwZWNpYWwgY2FzZSBTVkdU
ZXh0RWxlbWVudCkKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJD
b3JlL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
U3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiA1Njg0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxl
ZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmIEVOQUJMRShT
VkcpCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxhYmxlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTY4LDYgKzY5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBib29sIGluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdDsKICAgICAgICAgdm9pZCBz
ZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJvb2wpOwogCisgICAgICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RN
U2NvcGUpIGNvbnN0OworCiAgICAgcHJvdGVjdGVkOiAKICAgICAgICAgc3RhdGljIGludCBjc3NQ
cm9wZXJ0eUlkRm9yU1ZHQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA1
Njg0NSkKKysrIFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NywxMiArNTcsMTIgQEAgRmxvYXRSZWN0IFNWR1N0eWxlZExvY2F0YWJs
ZUVsZW1lbnQ6OmdldAogCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVu
dDo6Z2V0Q1RNKCkgY29uc3QKIHsKLSAgICByZXR1cm4gU1ZHTG9jYXRhYmxlOjpnZXRDVE0odGhp
cyk7CisgICAgcmV0dXJuIFNWR0xvY2F0YWJsZTo6Y29tcHV0ZUNUTSh0aGlzLCBTVkdMb2NhdGFi
bGU6Ok5lYXJlc3RWaWV3cG9ydFNjb3BlKTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNW
R0xvY2F0YWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOworICAgIHJldHVybiBTVkdMb2NhdGFibGU6
OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpTY3JlZW5TY29wZSk7CiB9CiAKIH0KSW5k
ZXg6IFdlYkNvcmUvc3ZnL1NWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDU2ODQ1
KQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBGbG9hdFJlY3QgZ2V0QkJveCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBnZXRDVE0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0
U2NyZWVuQ1RNKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBtb2RlKSBj
b25zdCB7IHJldHVybiBTVkdMb2NhdGFibGU6OmxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3Jt
KG1vZGUpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNTY4
NDUpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxMiBAQCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudDo6flNWR1N0eWxlCiAKIEFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxl
RWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QKIHsKLSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6
Z2V0Q1RNKHRoaXMpOworICAgIHJldHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywg
U1ZHTG9jYXRhYmxlOjpOZWFyZXN0Vmlld3BvcnRTY29wZSk7CiB9CiAKIEFmZmluZVRyYW5zZm9y
bSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RNKHRoaXMpOworICAgIHJl
dHVybiBTVkdMb2NhdGFibGU6OmNvbXB1dGVDVE0odGhpcywgU1ZHTG9jYXRhYmxlOjpTY3JlZW5T
Y29wZSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6YW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHJldmlzaW9uIDU2ODQ1KQorKysgV2ViQ29y
ZS9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0U2Ny
ZWVuQ1RNKCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBuZWFyZXN0Vmlld3BvcnRF
bGVtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBTVkdFbGVtZW50KiBmYXJ0aGVzdFZpZXdwb3J0
RWxlbWVudCgpIGNvbnN0OwotICAgIAorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9j
YWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSBtb2RlKSBj
b25zdCB7IHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpsb2NhbENvb3JkaW5hdGVTcGFjZVRyYW5z
Zm9ybShtb2RlKTsgfQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGFuaW1hdGVkTG9jYWxU
cmFuc2Zvcm0oKSBjb25zdDsKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSogc3VwcGxlbWVu
dGFsVHJhbnNmb3JtKCk7CiAKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDU2
ODQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwxNCArNzIsMTQgQEAgRmxvYXRSZWN0IFNWR1RleHRFbGVtZW50OjpnZXRCQm94KCkgY29u
cwogICAgIHJldHVybiBTVkdUcmFuc2Zvcm1hYmxlOjpnZXRCQm94KHRoaXMpOwogfQogCi1BZmZp
bmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CitBZmZpbmVU
cmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNW
R1RyYW5zZm9ybWFibGU6OmdldFNjcmVlbkNUTSh0aGlzKTsKKyAgICByZXR1cm4gU1ZHTG9jYXRh
YmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNWR0xvY2F0YWJsZTo6TmVhcmVzdFZpZXdwb3J0U2NvcGUp
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CitB
ZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFNWR1RyYW5zZm9ybWFibGU6OmdldENUTSh0aGlzKTsKKyAgICByZXR1cm4gU1ZH
TG9jYXRhYmxlOjpjb21wdXRlQ1RNKHRoaXMsIFNWR0xvY2F0YWJsZTo6U2NyZWVuU2NvcGUpOwog
fQogCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHVGV4dEVsZW1lbnQ6OmFuaW1hdGVkTG9jYWxUcmFuc2Zv
cm0oKSBjb25zdApJbmRleDogV2ViQ29yZS9zdmcvU1ZHVGV4dEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShyZXZpc2lvbiA1Njg0NSkKKysrIFdl
YkNvcmUvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRTY3JlZW5DVE0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYW5p
bWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSogc3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAgICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGxvY2FsQ29vcmRpbmF0ZVNwYWNlVHJhbnNmb3JtKFNWR0xvY2F0YWJsZTo6Q1RNU2Nv
cGUgbW9kZSkgY29uc3QgeyByZXR1cm4gU1ZHVHJhbnNmb3JtYWJsZTo6bG9jYWxDb29yZGluYXRl
U3BhY2VUcmFuc2Zvcm0obW9kZSk7IH0KIAogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gNTY4NDUpCisrKyBXZWJDb3JlL3N2Zy9T
VkdUcmFuc2Zvcm1hYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1RyYW5zZm9ybWFibGU6OlNWR1RyYW5zZm9ybWFibGUo
KSA6IFNWR0xvY2F0YWJsZSgpCitTVkdUcmFuc2Zvcm1hYmxlOjpTVkdUcmFuc2Zvcm1hYmxlKCkK
KyAgICA6IFNWR0xvY2F0YWJsZSgpCiB7CiB9CiAKQEAgLTQzLDE4ICs0NCw2IEBAIFNWR1RyYW5z
Zm9ybWFibGU6On5TVkdUcmFuc2Zvcm1hYmxlKCkKIHsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFNW
R1RyYW5zZm9ybWFibGU6OmdldENUTShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KSBjb25zdAot
ewotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBTVkdMb2NhdGFibGU6OmdldENUTShlbGVtZW50
KTsKLSAgICByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpICogY3RtOwotfQotCi1BZmZp
bmVUcmFuc2Zvcm0gU1ZHVHJhbnNmb3JtYWJsZTo6Z2V0U2NyZWVuQ1RNKGNvbnN0IFNWR0VsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IFNWR0xvY2F0
YWJsZTo6Z2V0U2NyZWVuQ1RNKGVsZW1lbnQpOwotICAgIHJldHVybiBhbmltYXRlZExvY2FsVHJh
bnNmb3JtKCkgKiBjdG07Ci19Ci0KIHN0YXRpYyBpbnQgcGFyc2VUcmFuc2Zvcm1QYXJhbUxpc3Qo
Y29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGZsb2F0KiB2YWx1ZXMsIGludCBy
ZXF1aXJlZCwgaW50IG9wdGlvbmFsKQogewogICAgIGludCBvcHRpb25hbFBhcmFtcyA9IDAsIHJl
cXVpcmVkUGFyYW1zID0gMDsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHJldmlzaW9uIDU2
ODQ1KQorKysgV2ViQ29yZS9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgcGFyc2VUcmFuc2Zvcm1B
dHRyaWJ1dGUoU1ZHVHJhbnNmb3JtTGlzdCosIGNvbnN0IEF0b21pY1N0cmluZyYgdHJhbnNmb3Jt
KTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShTVkdUcmFuc2Zvcm1M
aXN0KiwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIFRyYW5zZm9ybVBhcnNp
bmdNb2RlIG1vZGUgPSBDbGVhckxpc3QpOwogICAgIHN0YXRpYyBib29sIHBhcnNlVHJhbnNmb3Jt
VmFsdWUodW5zaWduZWQgdHlwZSwgY29uc3QgVUNoYXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQs
IFNWR1RyYW5zZm9ybSYpOwotICAgIAotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oY29uc3Qg
U1ZHRWxlbWVudCopIGNvbnN0OwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRTY3JlZW5DVE0oY29u
c3QgU1ZHRWxlbWVudCopIGNvbnN0OwotICAgIAorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxDb29yZGluYXRlU3BhY2VUcmFuc2Zvcm0oU1ZHTG9jYXRhYmxlOjpDVE1TY29wZSkg
Y29uc3QgeyByZXR1cm4gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpOyB9CiAgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYW5pbWF0ZWRMb2NhbFRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKIAogICAg
IGJvb2wgaXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1Njg0NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI4IEBACisyMDEwLTAzLTMxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJFR1JFU1NJT046IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRTY3JlZW5DVE0o
KSByZXR1cm5zIGluY29ycmVjdCBtYXRyaXguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNzE4MworCisgICAgICAgIFNoYXJlIGNvZGUgYmV0d2VlbiB0
aGUgZGlmZmVyZW50IHN2Z3N2Z2VsZW1lbnQtY3RtKi54aHRtIHRlc3RzLCBwbGFjZWQgaW4gc3Zn
L2N1c3RvbS9yZXNvdXJjZXMuCisgICAgICAgIEFkZCBzZXZlcmFsIG5ldyB0ZXN0cyBjb3Zlcmlu
ZyBnZXRDVE0oKS9nZXRTY3JlZW5DVE0oKSBvbiB0ZXh0LCBpbm5lciBhbmQgb3V0ZXIgc3ZnIGVs
ZW1lbnRzIGFuZCBjb250YWluZXJzLgorCisgICAgICAgICogc3ZnL2N1c3RvbS9yZXNvdXJjZXMv
c3Znc3ZnZWxlbWVudC1jdG0uanM6IEFkZGVkLgorICAgICAgICAobG9nKToKKyAgICAgICAgKHN0
cmluZ0Zvck1hdHJpeCk6CisgICAgICAgIChwcmludENUTXMpOgorICAgICAgICAqIHN2Zy9jdXN0
b20vc3Znc3ZnZWxlbWVudC1jdG0tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN2Zy9jdXN0b20v
c3Znc3ZnZWxlbWVudC1jdG0ueGh0bWw6CisgICAgICAgICogc3ZnL2N1c3RvbS9zdmdzdmdlbGVt
ZW50LWN0bTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2Z3N2
Z2VsZW1lbnQtY3RtMi54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9zdmdzdmdl
bGVtZW50LWN0bTMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2
Z3N2Z2VsZW1lbnQtY3RtMy54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9zdmdz
dmdlbGVtZW50LWN0bTQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3VzdG9t
L3N2Z3N2Z2VsZW1lbnQtY3RtNC54aHRtbDogQWRkZWQuCisgICAgICAgICogc3ZnL2N1c3RvbS9z
dmdzdmdlbGVtZW50LWN0bTUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvY3Vz
dG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNS54aHRtbDogQWRkZWQuCisKIDIwMTAtMDMtMzEgIEFsZXhh
bmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVt
ZW50LWN0bTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0
b20vc3Znc3ZnZWxlbWVudC1jdG0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG0yLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5IEBACitzdmcxIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMS4w
MCwgMC4wMCkoMC4wMCwgMS4wMCkoMC4wMCwgMC4wMCldCitzdmcxIFNjcmVlbkNUTTogW29iamVj
dCBTVkdNYXRyaXhdIFsoMS4wMCwgMC4wMCkoMC4wMCwgMS4wMCkoOC4wMCwgOC4wMCldCitzdmcy
IENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgtMTAw
LjAwLCAtMTAwLjAwKV0KK3N2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMC4w
MCwgMC4wMCkoMC4wMCwgMjAuMDApKC05Mi4wMCwgLTkyLjAwKV0KK2dyb3VwIENUTTogW29iamVj
dCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgxMDAuMDAsIDEwMC4wMCld
Citncm91cCBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAw
LCAyMC4wMCkoMTA4LjAwLCAxMDguMDApXQorc3ZnMyBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBb
KDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMC4wMCwgMC4wMCldCitzdmczIFNjcmVlbkNUTTog
W29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSg4LjAwLCA4LjAw
KV0KKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTIueGh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0
bTIueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2Vs
ZW1lbnQtY3RtMi54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPGh0bWwgeG1s
bnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGJvZHk+CisgIDxkaXY+CisgICAg
PCEtLSBBbGwgdmFsdWVzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gc3Znc3ZnZWxlbWVudC1jdG0u
eGh0bWwsIGV4Y2VwdCB0aGUgc2NyZWVuQ1RNIGUvZiB2YWx1ZXMsIG91ciB2YWx1ZXMgc2hvdWxk
IGJlIDJweCBzbWFsbGVyIGhlcmUgKDEwOCBpbnN0ZWFkIG9mIDExMCBldGMuLikgLS0+CisgICAg
PCEtLSBzdmdzdmdlbGVtZW50LWN0bS54aHRtbCBhc3NpZ25zIGEgdG9wL2xlZnQgcG9zaXRpb24g
b2YgMTBweCwgYW5kIGhlcmUgOHB4IG9mZnNldCBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGZy
b20gdGhlIHBhcmVudCA8Ym9keT4gLS0+CisgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5v
cmcvMjAwMC9zdmciIGlkPSJzdmcxIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+CisgICAgICAg
IDxzdmcgaWQ9InN2ZzIiIHZpZXdCb3g9IjUgNSAyMCAyMCI+CisgICAgICAgICAgIDxnIGlkPSJn
cm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAsIDEwKSI+CisgICAgICAgICAgICAgPHN2ZyBp
ZD0ic3ZnMyIgdmlld0JveD0iNSA1IDIwIDIwIj48L3N2Zz4KKyAgICAgICAgICAgPC9nPgorICAg
ICAgICA8L3N2Zz4KKyAgICA8L3N2Zz4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9ImxvZyI+PC9kaXY+
CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Znc3ZnZWxlbWVudC1jdG0uanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdl
bGVtZW50LWN0bTMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vc3Znc3ZnZWxlbWVudC1jdG0zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG0zLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitzdmcxIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFso
MC41MCwgMC4wMCkoMC4wMCwgMC41MCkoMC4wMCwgMC4wMCldCitzdmcxIFNjcmVlbkNUTTogW29i
amVjdCBTVkdNYXRyaXhdIFsoMC41MCwgMC4wMCkoMC4wMCwgMC41MCkoOC4wMCwgOC4wMCldCitz
dmcyIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMTAuMDAsIDAuMDApKDAuMDAsIDEwLjAwKSgt
NTAuMDAsIC01MC4wMCldCitzdmcyIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMTAu
MDAsIDAuMDApKDAuMDAsIDEwLjAwKSgtNDIuMDAsIC00Mi4wMCldCitncm91cCBDVE06IFtvYmpl
Y3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMTAwLjAwLCAxMDAuMDAp
XQorZ3JvdXAgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxMC4wMCwgMC4wMCkoMC4w
MCwgMTAuMDApKDU4LjAwLCA1OC4wMCldCitzdmczIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFso
MjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgwLjAwLCAwLjAwKV0KK3N2ZzMgU2NyZWVuQ1RNOiBb
b2JqZWN0IFNWR01hdHJpeF0gWygxMC4wMCwgMC4wMCkoMC4wMCwgMTAuMDApKDguMDAsIDguMDAp
XQorCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtMy54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3Rt
My54aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxl
bWVudC1jdG0zLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8aHRtbCB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8Ym9keT4KKyAgPGRpdj4KKyAgICA8
c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaWQ9InN2ZzEiIHdpZHRoPSIy
MDAiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgNDAwIDQwMCI+CisgICAgICAgIDxzdmcgaWQ9
InN2ZzIiIHZpZXdCb3g9IjUgNSAyMCAyMCI+CisgICAgICAgICAgIDxnIGlkPSJncm91cCIgdHJh
bnNmb3JtPSJ0cmFuc2xhdGUoMTAsIDEwKSI+CisgICAgICAgICAgICAgPHN2ZyBpZD0ic3ZnMyIg
dmlld0JveD0iNSA1IDIwIDIwIj48L3N2Zz4KKyAgICAgICAgICAgPC9nPgorICAgICAgICA8L3N2
Zz4KKyAgICA8L3N2Zz4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9ImxvZyI+PC9kaXY+CisgIDxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc3Znc3ZnZWxlbWVudC1jdG0uanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0
bTQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Zn
c3ZnZWxlbWVudC1jdG00LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG00LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5IEBACitzdmcxIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMS4wMCwgMC4w
MCkoMC4wMCwgMS4wMCkoMC4wMCwgMC4wMCldCitzdmcxIFNjcmVlbkNUTTogW29iamVjdCBTVkdN
YXRyaXhdIFsoMS4wMCwgMC4wMCkoMC4wMCwgMS4wMCkoOC4wMCwgOC4wMCldCitzdmcyIENUTTog
W29iamVjdCBTVkdNYXRyaXhdIFsoMS4wMCwgMC4wMCkoMC4wMCwgMS4wMCkoNTAuMDAsIDUwLjAw
KV0KK3N2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAw
LCAxLjAwKSg1OC4wMCwgNTguMDApXQorZ3JvdXAgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygx
LjAwLCAwLjAwKSgwLjAwLCAxLjAwKSg2MC4wMCwgNjAuMDApXQorZ3JvdXAgU2NyZWVuQ1RNOiBb
b2JqZWN0IFNWR01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSg2OC4wMCwgNjguMDAp
XQorc3ZnMyBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4w
MCkoLTE0MC4wMCwgLTE0MC4wMCldCitzdmczIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhd
IFsoMjAuMDAsIDAuMDApKDAuMDAsIDIwLjAwKSgtMTMyLjAwLCAtMTMyLjAwKV0KKwpJbmRleDog
TGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTQueGh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bTQueGh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtNC54
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPGh0bWwgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGJvZHk+CisgIDxkaXY+CisgICAgPCEtLSBBbGwgdmFs
dWVzIHNob3VsZCBiZSBpZGVudGljYWwgdG8gc3Znc3ZnZWxlbWVudC1jdG0ueGh0bWwsIGV4Y2Vw
dCB0aGUgc2NyZWVuQ1RNIGUvZiB2YWx1ZXMsIG91ciB2YWx1ZXMgc2hvdWxkIGJlIDJweCBzbWFs
bGVyIGhlcmUgKDEwOCBpbnN0ZWFkIG9mIDExMCBldGMuLikgLS0+CisgICAgPCEtLSBzdmdzdmdl
bGVtZW50LWN0bS54aHRtbCBhc3NpZ25zIGEgdG9wL2xlZnQgcG9zaXRpb24gb2YgMTBweCwgYW5k
IGhlcmUgOHB4IG9mZnNldCBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGZyb20gdGhlIHBhcmVu
dCA8Ym9keT4gLS0+CisgICAgPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IGlkPSJzdmcxIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCI+CisgICAgICAgIDxzdmcgaWQ9InN2
ZzIiIHg9IjUwIiB5PSI1MCI+CisgICAgICAgICAgIDxnIGlkPSJncm91cCIgdHJhbnNmb3JtPSJ0
cmFuc2xhdGUoMTAsIDEwKSI+CisgICAgICAgICAgICAgPHN2ZyBpZD0ic3ZnMyIgeD0iLTEwMCIg
eT0iLTEwMCIgdmlld0JveD0iNSA1IDIwIDIwIj48L3N2Zz4KKyAgICAgICAgICAgPC9nPgorICAg
ICAgICA8L3N2Zz4KKyAgICA8L3N2Zz4KKyAgPC9kaXY+CisgIDxkaXYgaWQ9ImxvZyI+PC9kaXY+
CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Znc3ZnZWxlbWVudC1jdG0uanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdl
bGVtZW50LWN0bTUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vc3Znc3ZnZWxlbWVudC1jdG01LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3ZnZWxlbWVudC1jdG01LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACitzdmcxIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFso
MS41MCwgMC4wMCkoMC4wMCwgMS41MCkoMTAwLjAwLCAwLjAwKV0KK3N2ZzEgU2NyZWVuQ1RNOiBb
b2JqZWN0IFNWR01hdHJpeF0gWygxLjUwLCAwLjAwKSgwLjAwLCAxLjUwKSgxMDAuMDAsIDAuMDAp
XQorc3ZnMiBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDMwLjAwLCAwLjAwKSgwLjAwLCAzMC4w
MCkoLTUwLjAwLCAtMTUwLjAwKV0KK3N2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0g
WygzMC4wMCwgMC4wMCkoMC4wMCwgMzAuMDApKC01MC4wMCwgLTE1MC4wMCldCitncm91cCBDVE06
IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMTAwLjAwLCAx
MDAuMDApXQorZ3JvdXAgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygzMC4wMCwgMC4w
MCkoMC4wMCwgMzAuMDApKDI1MC4wMCwgMTUwLjAwKV0KK3N2ZzMgQ1RNOiBbb2JqZWN0IFNWR01h
dHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKDAuMDAsIDAuMDApXQorc3ZnMyBTY3Jl
ZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDMwLjAwLCAwLjAwKSgwLjAwLCAzMC4wMCkoMTAw
LjAwLCAwLjAwKV0KKwpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50
LWN0bTUueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdl
bGVtZW50LWN0bTUueGh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9t
L3N2Z3N2Z2VsZW1lbnQtY3RtNS54aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAor
PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGJvZHk+CisgIDxk
aXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMHB4OyB0b3A6IDBweDsgd2lkdGg6
IDgwMHB4OyBoZWlnaHQ6IDYwMHB4OyI+CisgICAgPCEtLSBUZXN0Y2FzZSBjb3ZlcmluZyBidWcg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MTgzIC0tPgorICAgIDwh
LS0gV2ViS2l0IHVzZWQgdG8gcmV0dXJuIHdyb25nIHNjcmVlbkNUTSB2YWx1ZXMsIHdoZW4gdXNp
bmcgdmlld0JveCBpbiBjb21iaW5hdGlvbiB3aXRoIHJlbGF0aXZlIHdpZHRoL2hlaWdodCB2YWx1
ZXMgb24gdGhlIG91dGVybW9zdCA8c3ZnPiAtLT4KKyAgICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3N2ZyIgaWQ9InN2ZzEiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZp
ZXdCb3g9IjAgMCA0MDAgNDAwIj4KKyAgICAgICAgPHN2ZyBpZD0ic3ZnMiIgdmlld0JveD0iNSA1
IDIwIDIwIj4KKyAgICAgICAgICAgPGcgaWQ9Imdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgx
MCwgMTApIj4KKyAgICAgICAgICAgICA8c3ZnIGlkPSJzdmczIiB2aWV3Qm94PSI1IDUgMjAgMjAi
Pjwvc3ZnPgorICAgICAgICAgICA8L2c+CisgICAgICAgIDwvc3ZnPgorICAgIDwvc3ZnPgorICA8
L2Rpdj4KKyAgPGRpdiBpZD0ibG9nIj48L2Rpdj4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9z
dmdzdmdlbGVtZW50LWN0bS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3RtLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gNTY4NDUpCisrKyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2
Z2VsZW1lbnQtY3RtLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAK
LXN2ZzEgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygwLCAwKSgwLCAwKShOYU4sIE5hTildCi1z
dmcxIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMSwgMCkoMCwgMSkoMTAsIDIxMCld
Ci1zdmcyIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAsIDApKDAsIDIwKSgtMTAwLCAtMTAw
KV0KLXN2ZzIgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMCwgMCkoMCwgMjApKC05
MCwgMTEwKV0KLWdyb3VwIENUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAsIDApKDAsIDIwKSgx
MDAsIDEwMCldCi1ncm91cCBTY3JlZW5DVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLCAwKSgw
LCAyMCkoMTEwLCAzMTApXQotc3ZnMyBDVE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDEsIDApKDAs
IDEpKC01LCAtNSldCi1zdmczIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAsIDAp
KDAsIDIwKSgxMCwgMjEwKV0KK3N2ZzEgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygxLjAwLCAw
LjAwKSgwLjAwLCAxLjAwKSgwLjAwLCAwLjAwKV0KK3N2ZzEgU2NyZWVuQ1RNOiBbb2JqZWN0IFNW
R01hdHJpeF0gWygxLjAwLCAwLjAwKSgwLjAwLCAxLjAwKSgxMC4wMCwgMTAuMDApXQorc3ZnMiBD
VE06IFtvYmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoLTEwMC4w
MCwgLTEwMC4wMCldCitzdmcyIFNjcmVlbkNUTTogW29iamVjdCBTVkdNYXRyaXhdIFsoMjAuMDAs
IDAuMDApKDAuMDAsIDIwLjAwKSgtOTAuMDAsIC05MC4wMCldCitncm91cCBDVE06IFtvYmplY3Qg
U1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMTAwLjAwLCAxMDAuMDApXQor
Z3JvdXAgU2NyZWVuQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygyMC4wMCwgMC4wMCkoMC4wMCwg
MjAuMDApKDExMC4wMCwgMTEwLjAwKV0KK3N2ZzMgQ1RNOiBbb2JqZWN0IFNWR01hdHJpeF0gWygy
MC4wMCwgMC4wMCkoMC4wMCwgMjAuMDApKDAuMDAsIDAuMDApXQorc3ZnMyBTY3JlZW5DVE06IFtv
YmplY3QgU1ZHTWF0cml4XSBbKDIwLjAwLCAwLjAwKSgwLjAwLCAyMC4wMCkoMTAuMDAsIDEwLjAw
KV0KIApJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmdzdmdlbGVtZW50LWN0bS54aHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Z3N2Z2VsZW1lbnQtY3Rt
LnhodG1sCShyZXZpc2lvbiA1Njg0NSkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Znc3Zn
ZWxlbWVudC1jdG0ueGh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiA8aHRtbCB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CiA8Ym9keT4KLSAgPGRpdiBzdHls
ZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwcHg7IGxlZnQ6IDEwcHg7IHdpZHRoOiA0MDBw
eDsgaGVpZ2h0OiA0MDA7Ij4KKyAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6
IDEwcHg7IGxlZnQ6IDEwcHg7IHdpZHRoOiA0MDBweDsgaGVpZ2h0OiA0MDBweDsiPgogICAgIDxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBpZD0ic3ZnMSIgdmlld0JveD0i
MCAwIDQwMCA0MDAiPgogICAgICAgICA8c3ZnIGlkPSJzdmcyIiB2aWV3Qm94PSI1IDUgMjAgMjAi
PgogICAgICAgICAgICA8ZyBpZD0iZ3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwLCAxMCki
PgpAQCAtMTAsMjcgKzEwLDYgQEAKICAgICA8L3N2Zz4KICAgPC9kaXY+CiAgIDxkaXYgaWQ9Imxv
ZyI+PC9kaXY+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9lY21hc2NyaXB0Ij48IVtDREFUQVsKLSAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOwotCi0gICAgdmFyIGxvZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsb2cnKTsKLSAgICBmdW5jdGlvbiBsb2cocykgewotICAgICAgbG9nRGl2LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHMpKTsKLSAgICAgIGxvZ0Rpdi5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
c3RyaW5nRm9yTWF0cml4KG0pIHsKLSAgICAgIHJldHVybiBtICsgIiBbKCIgKyBtLmEgKyAnLCAn
ICsgbS5jICsgJykoJyArIG0uYiArICcsICcgKyBtLmQgKyAnKSgnICsgbS5lICsgJywgJyArIG0u
ZiArICIpXSI7Ci0gICAgfQotICAgIGZ1bmN0aW9uIHByaW50Q1RNcyhuYW1lKSB7Ci0gICAgICAg
IHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7Ci0gICAgICAgIGxv
ZyhuYW1lICsgIiBDVE06ICIgKyBzdHJpbmdGb3JNYXRyaXgoZWxlbWVudC5nZXRDVE0oKSkpOwot
ICAgICAgICBsb2cobmFtZSArICIgU2NyZWVuQ1RNOiAiICsgc3RyaW5nRm9yTWF0cml4KGVsZW1l
bnQuZ2V0U2NyZWVuQ1RNKCkpKTsKLSAgICB9Ci0gICAgcHJpbnRDVE1zKCJzdmcxIik7Ci0gICAg
cHJpbnRDVE1zKCJzdmcyIik7Ci0gICAgcHJpbnRDVE1zKCJncm91cCIpOwotICAgIHByaW50Q1RN
cygic3ZnMyIpOwotICBdXT48L3NjcmlwdD4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9zdmdz
dmdlbGVtZW50LWN0bS5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9zdmcvY3VzdG9tL3Jlc291cmNlcy9zdmdzdmdlbGVtZW50LWN0bS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3Jlc291cmNlcy9zdmdzdmdlbGVtZW50LWN0
bS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9jdXN0b20vcmVzb3VyY2VzL3N2
Z3N2Z2VsZW1lbnQtY3RtLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorCWxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKwordmFyIGxvZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKTsKK2Z1
bmN0aW9uIGxvZyhzKSB7CisJbG9nRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKHMpKTsKKwlsb2dEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnIn
KSk7Cit9CisKK2Z1bmN0aW9uIHN0cmluZ0Zvck1hdHJpeChtKSB7CisJcmV0dXJuIG0gKyAiIFso
IiArIG0uYS50b0ZpeGVkKDIpICsgJywgJyArIG0uYy50b0ZpeGVkKDIpICsgJykoJyArIG0uYi50
b0ZpeGVkKDIpICsgJywgJyArIG0uZC50b0ZpeGVkKDIpICsgJykoJyArIG0uZS50b0ZpeGVkKDIp
ICsgJywgJyArIG0uZi50b0ZpeGVkKDIpICsgIildIjsKK30KKworZnVuY3Rpb24gcHJpbnRDVE1z
KG5hbWUpIHsKKwl2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOwor
CWxvZyhuYW1lICsgIiBDVE06ICIgKyBzdHJpbmdGb3JNYXRyaXgoZWxlbWVudC5nZXRDVE0oKSkp
OworCWxvZyhuYW1lICsgIiBTY3JlZW5DVE06ICIgKyBzdHJpbmdGb3JNYXRyaXgoZWxlbWVudC5n
ZXRTY3JlZW5DVE0oKSkpOworfQorCitwcmludENUTXMoInN2ZzEiKTsKK3ByaW50Q1RNcygic3Zn
MiIpOworcHJpbnRDVE1zKCJncm91cCIpOworcHJpbnRDVE1zKCJzdmczIik7CisK
</data>
<flag name="review"
          id="35585"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>