<?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>93998</bug_id>
          
          <creation_ts>2012-08-14 10:41:03 -0700</creation_ts>
          <short_desc>[chromium] More Android changes to WebFrameImpl::selectRange</short_desc>
          <delta_ts>2012-09-12 07:01:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92513</dependson>
    
    <dependson>93108</dependson>
          <blocked>66687</blocked>
    
    <blocked>96508</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Iain Merrick">husky</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>husky</cc>
    
    <cc>jamesr</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695135</commentid>
    <comment_count>0</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-14 10:41:03 -0700</bug_when>
    <thetext>Followup to https://bugs.webkit.org/show_bug.cgi?id=92513

WebFrameImpl::selectRange() is still missing some functionality needed on the Android platform:

1. When dragging the selection handles, we shouldn&apos;t be able to collapse the selection; it should always be at least one character wide.

2. But we also need a way of explicitly switching to a collapsed selection (that is, an insertion caret rather than a highlighted selection). Currently the Android code uses the convention of calling selectRange with start == end, but this is fragile because the user could do so accidentally (thus failing requirement 1, above).

I think an API change might be useful:

- The editing code distinguishes between base and extent, not just start and end. To get the correct behaviour when the selection is editable, I had to clumsily set the endpoints one at a time.

- The unit tests in WebFrameTest call selectionBounds(), then call selectRange() with the same values, expecting to end up with the same selection range. I think that&apos;s a reasonable expectation, but it doesn&apos;t actually work in practice! There&apos;s an off-by-one pixel error at the lower-right of the selection range; and there may be other reasons why selectionBounds() and selectRange() aren&apos;t round-trip robust.

On Android, there are draggable handles around the selection range, and typically only one handle at a time is moved. So maybe the API could be updated to allow one endpoint to be moved, the other remaining fixed. That doesn&apos;t directly fix the off-by-one thing, but you would at least be able to say &quot;move the start handle to here, leave the end handle where it is&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706210</commentid>
    <comment_count>1</comment_count>
      <attachid>160944</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-08-28 03:20:29 -0700</bug_when>
    <thetext>Created attachment 160944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706215</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-28 03:22:20 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706368</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-28 08:21:56 -0700</bug_when>
    <thetext>rniwa is the ideal person to review this patch, but he&apos;s on vacation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706371</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-28 08:22:52 -0700</bug_when>
    <thetext>I did a first pass, and it looked reasonable to me, but I&apos;m not an editing expert. Let me see if I can find someone more expert in this area to take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710523</commentid>
    <comment_count>5</comment_count>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-09-03 03:14:21 -0700</bug_when>
    <thetext>Adam, did you manage to find anyone?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710674</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-03 08:36:35 -0700</bug_when>
    <thetext>Nope.  I&apos;ll take a look on Tuesday.  (Today is a national holiday in the US.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712336</commentid>
    <comment_count>7</comment_count>
      <attachid>160944</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-05 11:08:39 -0700</bug_when>
    <thetext>Comment on attachment 160944
Patch

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

I&apos;d really like rniwa to take a look at this patch when he gets back from vacation.  Based on the discussion in the previous bug, this patch looks plausible to me, but I&apos;m far from an expert here.

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:-1482
&gt; -    if (frame()-&gt;selection()-&gt;shouldChangeSelection(newSelection))

Looks like we lost this call.  Is this no longer needed?

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1486
&gt; +    if (selection.isNone())
&gt; +        return false;

Should this ASSERT?  Is it an error to call this function without a current selection?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712344</commentid>
    <comment_count>8</comment_count>
      <attachid>160944</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-05 11:13:22 -0700</bug_when>
    <thetext>Comment on attachment 160944
Patch

Rejecting attachment 160944 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
romium/src/WebFrameImpl.cpp
patching file Source/WebKit/chromium/src/WebFrameImpl.h
patching file Source/WebKit/chromium/tests/WebFrameTest.cpp
Hunk #6 FAILED at 1066.
1 out of 6 hunks FAILED -- saving rejects to file Source/WebKit/chromium/tests/WebFrameTest.cpp.rej
patching file Source/WebKit/chromium/tests/data/text_selection.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Adam Barth&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/13764349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713257</commentid>
    <comment_count>9</comment_count>
      <attachid>160944</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-09-06 06:49:25 -0700</bug_when>
    <thetext>Comment on attachment 160944
Patch

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

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:-1482
&gt;&gt; -    if (frame()-&gt;selection()-&gt;shouldChangeSelection(newSelection))
&gt; 
&gt; Looks like we lost this call.  Is this no longer needed?

Oops, good catch. setNonDirectionalSelectionIfNeeded() calls that internally, but setSelection() doesn&apos;t. I&apos;ll put it back in.

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:1486
&gt;&gt; +        return false;
&gt; 
&gt; Should this ASSERT?  Is it an error to call this function without a current selection?

I thought it best to return a bool result code, for consistency with the existing selectWordAroundCaret.

This is going to be called from way over in Java-land, so it seems good to be defensive about the exact editing state, rather than just asserting that it&apos;s correct. For example, a Javascript hook might clear the selection concurrently with the Java UI code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713354</commentid>
    <comment_count>10</comment_count>
      <attachid>162521</attachid>
    <who name="Iain Merrick">husky</who>
    <bug_when>2012-09-06 09:14:40 -0700</bug_when>
    <thetext>Created attachment 162521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713358</commentid>
    <comment_count>11</comment_count>
      <attachid>162521</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-06 09:20:25 -0700</bug_when>
    <thetext>Comment on attachment 162521
Patch

Setting cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713590</commentid>
    <comment_count>12</comment_count>
      <attachid>162521</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 12:51:44 -0700</bug_when>
    <thetext>Comment on attachment 162521
Patch

Clearing flags on attachment: 162521

Committed r127776: &lt;http://trac.webkit.org/changeset/127776&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713591</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 12:51:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160944</attachid>
            <date>2012-08-28 03:20:29 -0700</date>
            <delta_ts>2012-09-06 09:14:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93998-20120828112019.patch</filename>
            <type>text/plain</type>
            <size>23490</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2ODU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGYyM2ZhYWE3YzA2ZWY3M2NhNzVmMTQ5MWMwNWFmMGUyN2I2MWM5ZTcuLjRhNjI5ZmVmMTZlNmM2
MWRiNzAxYmY0OTUxYzMwNzA0YjZlNDhiMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTItMDgtMjggIElhaW4gTWVycmljayAgPGh1c2t5QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJGcmFtZTo6bW92ZVNlbGVjdGlvblN0
YXJ0LCBtb3ZlU2VsZWN0aW9uRW5kLCBtb3ZlQ2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzOTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlc2UgcHJvdmlkZSB0aGUgc2FtZSBmdW5jdGlvbmFs
aXR5IHNlbGVjdFJhbmdlKFdlYlBvaW50LCBXZWJQb2ludCksCisgICAgICAgIHdpdGggZmluZXIt
Z3JhaW5lZCBjb250cm9sIG5lZWRlZCBvbiB0aGUgQW5kcm9pZCBwbGF0Zm9ybS4gQnkgcGFzc2lu
ZworICAgICAgICBhbGxvd0NvbGxhcHNlZFNlbGVjdGlvbj1mYWxzZSwgd2UgY2FuIGVuc3VyZSB0
aGUgc2VsZWN0aW9uIHN0YXlzIGF0CisgICAgICAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIgd2lkZS4K
KworICAgICAgICBJIGhhdmUgcmVpbXBsZW1lbnRlZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdl
KFdlYlBvaW50LCBXZWJQb2ludCkgYnkKKyAgICAgICAgY2FsbGluZyB0aGUgbmV3IG1ldGhvZHMu
IFRoZSBleGlzdGluZyB0ZXN0IHBhc3NlcywgYW5kIEkndmUgYWRkZWQgbmV3CisgICAgICAgIHRl
c3RzIGZvciB0aGUgbmV3IG1ldGhvZHMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoK
KyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZWxlY3RSYW5nZSk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6Om1vdmVTZWxlY3Rpb25TdGFydCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bW92ZVNlbGVjdGlvbkVuZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bW92ZUNhcmV0KToKKyAgICAgICAgKiBzcmMvV2Vi
RnJhbWVJbXBsLmg6CisgICAgICAgIChXZWJGcmFtZUltcGwpOgorICAgICAgICAqIHRlc3RzL1dl
YkZyYW1lVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvZGF0YS90ZXh0X3NlbGVjdGlvbi5odG1s
OiBBZGRlZC4KKwogMjAxMi0wOC0yNyAgVGllbi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgc3R1YiBmb3IgV2ViVmlldzo6Z2V0VG91
Y2hIaWdobGlnaHRRdWFkcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUu
aAppbmRleCBiYzU2MDU5MzM1NmIwMWQ2ZTJjMzAwY2NkYzM2ZWIxN2YwZWEwMGE5Li41NmNiZTFl
YTQ3ZGRhMmQ5MjkyY2U4NGI4MmVmMmRkYWMzMWM0NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkZyYW1lLmgKQEAgLTQ3MiwxMCArNDcyLDI5IEBAIHB1YmxpYzoKICAgICAv
LyB0aGVyZSBpcyByYW5nZWQgc2VsZWN0aW9uLgogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3Jk
QXJvdW5kQ2FyZXQoKSA9IDA7CiAKKyAgICAvLyBERVBSRUNBVEVEOiBVc2UgbW92ZVNlbGVjdGlv
blN0YXJ0IC8gbW92ZVNlbGVjdGlvbkVuZCAvIG1vdmVDYXJldAorICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGludGVuZGVkIGZvciB0b3VjaC1iYXNlZCBVSXMsIGJ1dCBpdCdzIG1pc3Npbmcgc29tZQor
ICAgIC8vIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIG9uIEFuZHJvaWQsIGxpa2UgcHJldmVudGluZyBj
b2xsYXBzZWQgc2VsZWN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3Qg
V2ViUG9pbnQmIHN0YXJ0LCBjb25zdCBXZWJQb2ludCYgZW5kKSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmKSA9IDA7CiAKKyAgICAvLyBUaGUgbWV0
aG9kcyBiZWxvdyBhcmUgZm9yIGFkanVzdGluZyB0aGUgc3RhcnQgYW5kL29yIGVuZCBvZiB0aGUg
Y3VycmVudAorICAgIC8vIHNlbGVjdGlvbiBieSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9uIGEgdG91
Y2gtYmFzZWQgVUkuIFRvIGVudGVyIHNlbGVjdGlvbgorICAgIC8vIG1vZGUgaW4gdGhlIGZpcnN0
IHBsYWNlLCBjYWxsIHNlbGVjdFJhbmdlKCkgb3Igc2VuZCBhIGZha2UgbW91c2UgZXZlbnQuCisK
KyAgICAvLyBNb3ZlcyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBrZWVwaW5n
IHRoZSBlbmQgZml4ZWQuCisgICAgLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlm
IHRoZXJlIGlzIG5vIHNlbGVjdGlvbiB0byBtb2RpZnkuCisgICAgdmlydHVhbCBib29sIG1vdmVT
ZWxlY3Rpb25TdGFydChjb25zdCBXZWJQb2ludCYsIGJvb2wgYWxsb3dDb2xsYXBzZWRTZWxlY3Rp
b24pID0gMDsKKworICAgIC8vIE1vdmVzIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
LCBrZWVwaW5nIHRoZSBzdGFydCBmaXhlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
cywgZmFsc2UgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uIHRvIG1vZGlmeS4KKyAgICB2aXJ0dWFs
IGJvb2wgbW92ZVNlbGVjdGlvbkVuZChjb25zdCBXZWJQb2ludCYsIGJvb2wgYWxsb3dDb2xsYXBz
ZWRTZWxlY3Rpb24pID0gMDsKKworICAgIC8vIE1vdmUgYm90aCBlbmRwb2ludHMgb2YgdGhlIGN1
cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAvLyBUaGUgY2FyZXQg
d2lsbCByZW1haW4gcGlubmVkIGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uCisg
ICAgLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHNlbGVj
dGlvbiBvciBpZiB3ZSdyZSBub3QgZWRpdGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgbW92ZUNhcmV0
KGNvbnN0IFdlYlBvaW50JikgPSAwOwogCiAgICAgLy8gUHJpbnRpbmcgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGViM2FlZjc3NWNhZTU3
ZDQ2NGJhNDMzYWZjMGY0NzczNGU2YzlmZTMuLjAzOTBjMDMxN2VhNzRjMjI5ODY2NTA2YmNmZmMx
ZDk1NjExZTIzYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcApAQCAtMTcwLDYgKzE3MCw3IEBACiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJwYWlu
dGluZy9HcmFwaGljc0NvbnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxv
YXRQb2ludC5oIgpAQCAtMTQ2NSwyMiArMTQ2Niw2NyBAQCBib29sIFdlYkZyYW1lSW1wbDo6c2Vs
ZWN0V29yZEFyb3VuZENhcmV0KCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKGNv
bnN0IFdlYlBvaW50JiBzdGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkKIHsKLSAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KHN0
YXJ0KTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25G
b3JXaW5kb3dQb2ludChlbmQpOwotCi0gICAgLy8gVG8gY29ycmVjdGx5IGhhbmRsZSBlZGl0YWJs
ZSBib3VuZGFyaWVzLCB3ZSBhZGp1c3QgdGhlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBleHRl
bnQKLSAgICAvLyB3aGlsZSBrZWVwaW5nIGl0cyBiYXNlIGZpeGVkLiBGb3IgYSB0b3VjaC1iYXNl
ZCBVSSwgdGhpcyBtZWFucyB0aGF0IG1vdmluZyB0aGUgc2VsZWN0aW9uCi0gICAgLy8gaGFuZGxl
cyBiZWhhdmVzIGxpa2UgYSBkcmFnLXNlbGVjdCB3aXRoIHRoZSBtb3VzZSwgd2hpY2ggaXMgd2hh
dCB3ZSB3YW50IGhlcmUuIElmIGJvdGgKLSAgICAvLyBlbmRwb2ludHMgY2hhbmdlZCwgd2UgbmVl
ZCB0byBzZXQgdGhlIGV4dGVudCB0d2ljZS4KLSAgICAvLyBGSVhNRTogdGhlIFdlYkZyYW1lOjpT
ZWxlY3RSYW5nZSBBUEkgc2hvdWxkIGV4cGxpY2l0bHkgc3RhdGUgd2hpY2ggZW5kcG9pbnQgaXMg
bW92aW5nLgotICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpOwotICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG5ld1NlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKSkKLSAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVj
dGlvbihuZXdTZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBzdGFydFBvc2l0aW9uKTsKLSAgICBpZiAo
ZW5kUG9zaXRpb24gIT0gbmV3U2VsZWN0aW9uLnZpc2libGVFbmQoKSkKLSAgICAgICAgbmV3U2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGVu
ZFBvc2l0aW9uKTsKLQotICAgIGlmIChmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCi0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5z
ZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgaWYg
KHN0YXJ0ID09IGVuZCAmJiBtb3ZlQ2FyZXQoc3RhcnQpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobW92ZVNlbGVjdGlvblN0YXJ0KHN0YXJ0LCB0cnVlKSAmJiBtb3ZlU2VsZWN0aW9uRW5k
KGVuZCwgdHJ1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZhaWxlZCB0byBtb3ZlIGVu
ZHBvaW50cywgcHJvYmFibHkgYmVjYXVzZSB0aGVyZSdzIG5vIGN1cnJlbnQgc2VsZWN0aW9uLgor
ICAgIC8vIEp1c3Qgc2V0IHRoZSBzZWxlY3Rpb24gZXhwbGljaXRseSAoYnV0IHRoaXMgd29uJ3Qg
aGFuZGxlIGVkaXRhYmxlIGJvdW5kYXJpZXMgY29ycmVjdGx5KS4KKyAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRQb3MgPSB2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChzdGFydCk7CisgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvcyA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGVu
ZCk7CisgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0UG9zLCBlbmRQb3MpKTsKK30KKworYm9vbCBXZWJGcmFtZUltcGw6Om1vdmVTZWxl
Y3Rpb25TdGFydChjb25zdCBXZWJQb2ludCYgcG9pbnQsIGJvb2wgYWxsb3dDb2xsYXBzZWRTZWxl
Y3Rpb24pCit7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHZp
c2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KHBvaW50KTsKKyAgICBpZiAoIWFsbG93Q29sbGFw
c2VkU2VsZWN0aW9uKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBtYXhTdGFydCA9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCkucHJldmlvdXMoKTsKKyAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlv
bnMoc3RhcnQsIG1heFN0YXJ0KSA+IDApCisgICAgICAgICAgICBzdGFydCA9IG1heFN0YXJ0Owor
ICAgIH0KKworICAgIC8vIHN0YXJ0IGlzIG1vdmluZywgc28gYmFzZT1lbmQsIGV4dGVudD1zdGFy
dAorICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihz
ZWxlY3Rpb24udmlzaWJsZUVuZCgpLCBzdGFydCk7CisgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnNldE5vbkRpcmVjdGlvbmFsU2VsZWN0aW9uSWZOZWVkZWQobmV3U2VsZWN0aW9uLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViRnJhbWVJbXBs
Ojptb3ZlU2VsZWN0aW9uRW5kKGNvbnN0IFdlYlBvaW50JiBwb2ludCwgYm9vbCBhbGxvd0NvbGxh
cHNlZFNlbGVjdGlvbikKK3sKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5p
c05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZCA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KHBvaW50KTsKKyAgICBpZiAoIWFsbG93
Q29sbGFwc2VkU2VsZWN0aW9uKSB7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBtaW5FbmQgPSBz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkubmV4dCgpOworICAgICAgICBpZiAoY29tcGFyZVBvc2l0
aW9ucyhlbmQsIG1pbkVuZCkgPCAwKQorICAgICAgICAgICAgZW5kID0gbWluRW5kOworICAgIH0K
KworICAgIC8vIGVuZCBpcyBtb3ZpbmcsIHNvIGJhc2U9c3RhcnQsIGV4dGVudD1lbmQKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9u
LnZpc2libGVTdGFydCgpLCBlbmQpOworICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXROb25E
aXJlY3Rpb25hbFNlbGVjdGlvbklmTmVlZGVkKG5ld1NlbGVjdGlvbiwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkZyYW1lSW1wbDo6bW92ZUNh
cmV0KGNvbnN0IFdlYlBvaW50JiBwb2ludCkKK3sKKyAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVT
ZWxlY3Rpb24gPSBmcmFtZSgpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoZnJhbWVTZWxlY3Rpb24t
PmlzTm9uZSgpIHx8ICFmcmFtZVNlbGVjdGlvbi0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IHZpc2libGVQb3Np
dGlvbkZvcldpbmRvd1BvaW50KHBvaW50KTsKKyAgICBmcmFtZVNlbGVjdGlvbi0+c2V0RXh0ZW50
KHBvcywgVXNlclRyaWdnZXJlZCk7CisgICAgZnJhbWVTZWxlY3Rpb24tPnNldEJhc2UoZnJhbWVT
ZWxlY3Rpb24tPmV4dGVudCgpLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKGNvbnN0IFdlYlJhbmdlJiB3ZWJSYW5n
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKaW5kZXggNjhhYTcy
ODliOWI3N2JlMWMzOGRkYjFkMzIxZTg1ZThmMzU2Y2ViZC4uYTQ5OTFjYmZiNTU3ZTNmMGZlNmM0
ZWE2ZjI0NzlhNDcyMDZjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJh
bWVJbXBsLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNl
bGVjdFdvcmRBcm91bmRDYXJldCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25z
dCBXZWJQb2ludCYgc3RhcnQsIGNvbnN0IFdlYlBvaW50JiBlbmQpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYpOworICAgIHZpcnR1YWwgYm9vbCBtb3ZlU2Vs
ZWN0aW9uU3RhcnQoY29uc3QgV2ViUG9pbnQmLCBib29sIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9u
KTsKKyAgICB2aXJ0dWFsIGJvb2wgbW92ZVNlbGVjdGlvbkVuZChjb25zdCBXZWJQb2ludCYsIGJv
b2wgYWxsb3dDb2xsYXBzZWRTZWxlY3Rpb24pOworICAgIHZpcnR1YWwgYm9vbCBtb3ZlQ2FyZXQo
Y29uc3QgV2ViUG9pbnQmKTsKICAgICB2aXJ0dWFsIGludCBwcmludEJlZ2luKGNvbnN0IFdlYlBy
aW50UGFyYW1zJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYk5vZGUmIGNv
bnN0cmFpblRvTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wqIHVzZUJyb3dz
ZXJPdmVybGF5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVz
dC5jcHAKaW5kZXggMDNjMjAxZTE2Nzg4NzlmNWIxOTQ5NGM2YjVlYTVmOTE2ODgzZTRjOS4uNGE1
Y2M1NzA5OTJjNGEyOWI3NzA2MTBkZDQ2OGIxYTg4MmZhYmI0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcApAQCAtOTg4LDExICs5ODgsMTIgQEAg
VEVTVF9GKFdlYkZyYW1lVGVzdCwgRmluZEluUGFnZU1hdGNoUmVjdHMpCiAgICAgd2ViVmlldy0+
Y2xvc2UoKTsKIH0KIAotc3RhdGljIFdlYlZpZXcqIHNlbGVjdFJhbmdlVGVzdENyZWF0ZVdlYlZp
ZXcoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkKK3N0YXRpYyBXZWJWaWV3KiBjcmVhdGVXZWJWaWV3
Rm9yVGV4dFNlbGVjdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgdXJsKQogewogICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5kTG9hZCh1cmwsIHRy
dWUpOwogICAgIHdlYlZpZXctPnNldHRpbmdzKCktPnNldERlZmF1bHRGb250U2l6ZSgxMik7CiAg
ICAgd2ViVmlldy0+cmVzaXplKFdlYlNpemUoNjQwLCA0ODApKTsKKyAgICB3ZWJWaWV3LT5lbmFi
bGVGaXhlZExheW91dE1vZGUoZmFsc2UpOwogICAgIHJldHVybiB3ZWJWaWV3OwogfQogCkBAIC0x
MDEwLDYgKzEwMTEsMTEgQEAgc3RhdGljIFdlYlBvaW50IGJvdHRvbVJpZ2h0TWludXNPbmUoY29u
c3QgV2ViUmVjdCYgcmVjdCkKICAgICByZXR1cm4gV2ViUG9pbnQocmVjdC54ICsgcmVjdC53aWR0
aCAtIDEsIHJlY3QueSArIHJlY3QuaGVpZ2h0IC0gMSk7CiB9CiAKK3N0YXRpYyBXZWJSZWN0IGVs
ZW1lbnRCb3VuZHMoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGlkKQoreworICAg
IHJldHVybiBmcmFtZS0+ZG9jdW1lbnQoKS5nZXRFbGVtZW50QnlJZChpZCkuYm91bmRzSW5WaWV3
cG9ydFNwYWNlKCk7Cit9CisKIHN0YXRpYyBzdGQ6OnN0cmluZyBzZWxlY3Rpb25Bc1N0cmluZyhX
ZWJGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGZyYW1lLT5zZWxlY3Rp
b25Bc1RleHQoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTEwMjcsNyArMTAzMyw3IEBAIFRFU1RfRihX
ZWJGcmFtZVRlc3QsIFNlbGVjdFJhbmdlKQogICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExvYWQo
InNlbGVjdF9yYW5nZV9pZnJhbWUuaHRtbCIpOwogICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExv
YWQoInNlbGVjdF9yYW5nZV9lZGl0YWJsZS5odG1sIik7CiAKLSAgICB3ZWJWaWV3ID0gc2VsZWN0
UmFuZ2VUZXN0Q3JlYXRlV2ViVmlldyhtX2Jhc2VVUkwgKyAic2VsZWN0X3JhbmdlX2Jhc2ljLmh0
bWwiKTsKKyAgICB3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNl
VVJMICsgInNlbGVjdF9yYW5nZV9iYXNpYy5odG1sIik7CiAgICAgZnJhbWUgPSB3ZWJWaWV3LT5t
YWluRnJhbWUoKTsKICAgICBFWFBFQ1RfRVEoIlNvbWUgdGVzdCB0ZXh0IGZvciB0ZXN0aW5nLiIs
IHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+c2VsZWN0aW9uQm91bmRz
KHN0YXJ0V2ViUmVjdCwgZW5kV2ViUmVjdCk7CkBAIC0xMDM3LDcgKzEwNDMsNyBAQCBURVNUX0Yo
V2ViRnJhbWVUZXN0LCBTZWxlY3RSYW5nZSkKICAgICBFWFBFQ1RfRVEoIlNvbWUgdGVzdCB0ZXh0
IGZvciB0ZXN0aW5nLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+
Y2xvc2UoKTsKIAotICAgIHdlYlZpZXcgPSBzZWxlY3RSYW5nZVRlc3RDcmVhdGVXZWJWaWV3KG1f
YmFzZVVSTCArICJzZWxlY3RfcmFuZ2Vfc2Nyb2xsLmh0bWwiKTsKKyAgICB3ZWJWaWV3ID0gY3Jl
YXRlV2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInNlbGVjdF9yYW5nZV9zY3Jv
bGwuaHRtbCIpOwogICAgIGZyYW1lID0gd2ViVmlldy0+bWFpbkZyYW1lKCk7CiAgICAgRVhQRUNU
X0VRKCJTb21lIG9mZnNjcmVlbiB0ZXN0IHRleHQgZm9yIHRlc3RpbmcuIiwgc2VsZWN0aW9uQXNT
dHJpbmcoZnJhbWUpKTsKICAgICB3ZWJWaWV3LT5zZWxlY3Rpb25Cb3VuZHMoc3RhcnRXZWJSZWN0
LCBlbmRXZWJSZWN0KTsKQEAgLTEwNDcsNyArMTA1Myw3IEBAIFRFU1RfRihXZWJGcmFtZVRlc3Qs
IFNlbGVjdFJhbmdlKQogICAgIEVYUEVDVF9FUSgiU29tZSBvZmZzY3JlZW4gdGVzdCB0ZXh0IGZv
ciB0ZXN0aW5nLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+Y2xv
c2UoKTsKIAotICAgIHdlYlZpZXcgPSBzZWxlY3RSYW5nZVRlc3RDcmVhdGVXZWJWaWV3KG1fYmFz
ZVVSTCArICJzZWxlY3RfcmFuZ2VfaWZyYW1lLmh0bWwiKTsKKyAgICB3ZWJWaWV3ID0gY3JlYXRl
V2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInNlbGVjdF9yYW5nZV9pZnJhbWUu
aHRtbCIpOwogICAgIGZyYW1lID0gd2ViVmlldy0+bWFpbkZyYW1lKCk7CiAgICAgV2ViRnJhbWUq
IHN1YmZyYW1lID0gZnJhbWUtPmZpbmRDaGlsZEJ5RXhwcmVzc2lvbihXZWJTdHJpbmc6OmZyb21V
VEY4KCIvaHRtbC9ib2R5L2lmcmFtZSIpKTsKICAgICBFWFBFQ1RfRVEoIlNvbWUgdGVzdCB0ZXh0
IGZvciB0ZXN0aW5nLiIsIHNlbGVjdGlvbkFzU3RyaW5nKHN1YmZyYW1lKSk7CkBAIC0xMDYwLDIy
ICsxMDY2LDE5MiBAQCBURVNUX0YoV2ViRnJhbWVUZXN0LCBTZWxlY3RSYW5nZSkKIAogICAgIC8v
IFNlbGVjdCB0aGUgbWlkZGxlIG9mIGFuIGVkaXRhYmxlIGVsZW1lbnQsIHRoZW4gdHJ5IHRvIGV4
dGVuZCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50LgogICAgIC8vIFRo
ZSBzZWxlY3Rpb24gcmFuZ2Ugc2hvdWxkIGJlIGNsaXBwZWQgdG8gdGhlIGJvdW5kcyBvZiB0aGUg
ZWRpdGFibGUgZWxlbWVudC4KLSAgICB3ZWJWaWV3ID0gc2VsZWN0UmFuZ2VUZXN0Q3JlYXRlV2Vi
VmlldyhtX2Jhc2VVUkwgKyAic2VsZWN0X3JhbmdlX2VkaXRhYmxlLmh0bWwiKTsKKyAgICB3ZWJW
aWV3ID0gY3JlYXRlV2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInNlbGVjdF9y
YW5nZV9lZGl0YWJsZS5odG1sIik7CiAgICAgZnJhbWUgPSB3ZWJWaWV3LT5tYWluRnJhbWUoKTsK
ICAgICBFWFBFQ1RfRVEoIlRoaXMgdGV4dCBpcyBpbml0aWFsbHkgc2VsZWN0ZWQuIiwgc2VsZWN0
aW9uQXNTdHJpbmcoZnJhbWUpKTsKICAgICB3ZWJWaWV3LT5zZWxlY3Rpb25Cb3VuZHMoc3RhcnRX
ZWJSZWN0LCBlbmRXZWJSZWN0KTsKLSAgICBmcmFtZS0+c2VsZWN0UmFuZ2UoV2ViUG9pbnQoMCwg
MCksIGJvdHRvbVJpZ2h0TWludXNPbmUoZW5kV2ViUmVjdCkpOworICAgIGZyYW1lLT5zZWxlY3RS
YW5nZShXZWJQb2ludCgtMTAwMCwgLTEwMDApLCBib3R0b21SaWdodE1pbnVzT25lKGVuZFdlYlJl
Y3QpKTsKICAgICBFWFBFQ1RfRVEoIjE2LWNoYXIgaGVhZGVyLiBUaGlzIHRleHQgaXMgaW5pdGlh
bGx5IHNlbGVjdGVkLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+
Y2xvc2UoKTsKIAogICAgIC8vIEFzIGFib3ZlLCBidXQgZXh0ZW5kaW5nIHRoZSBzZWxlY3Rpb24g
dG8gdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQuCi0gICAgd2ViVmlldyA9IHNlbGVjdFJhbmdl
VGVzdENyZWF0ZVdlYlZpZXcobV9iYXNlVVJMICsgInNlbGVjdF9yYW5nZV9lZGl0YWJsZS5odG1s
Iik7CisgICAgd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVS
TCArICJzZWxlY3RfcmFuZ2VfZWRpdGFibGUuaHRtbCIpOwogICAgIGZyYW1lID0gd2ViVmlldy0+
bWFpbkZyYW1lKCk7CiAgICAgRVhQRUNUX0VRKCJUaGlzIHRleHQgaXMgaW5pdGlhbGx5IHNlbGVj
dGVkLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+c2VsZWN0aW9u
Qm91bmRzKHN0YXJ0V2ViUmVjdCwgZW5kV2ViUmVjdCk7Ci0gICAgZnJhbWUtPnNlbGVjdFJhbmdl
KHRvcExlZnQoc3RhcnRXZWJSZWN0KSwgV2ViUG9pbnQoNjQwLCA0ODApKTsKKyAgICBmcmFtZS0+
c2VsZWN0UmFuZ2UodG9wTGVmdChzdGFydFdlYlJlY3QpLCBXZWJQb2ludCgxMDAwLCAxMDAwKSk7
CiAgICAgRVhQRUNUX0VRKCJUaGlzIHRleHQgaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiAxNi1jaGFy
IGZvb3Rlci4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOwogICAgIHdlYlZpZXctPmNsb3Nl
KCk7CiB9CiAKK1RFU1RfRihXZWJGcmFtZVRlc3QsIE1vdmVTZWxlY3Rpb25TdGFydCkKK3sKKyAg
ICByZWdpc3Rlck1vY2tlZEh0dHBVUkxMb2FkKCJ0ZXh0X3NlbGVjdGlvbi5odG1sIik7CisgICAg
V2ViVmlldyogd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVS
TCArICJ0ZXh0X3NlbGVjdGlvbi5odG1sIik7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViVmll
dy0+bWFpbkZyYW1lKCk7CisKKyAgICAvLyBtb3ZlU2VsZWN0aW9uU3RhcnQoKSBhbHdheXMgcmV0
dXJucyBmYWxzZSBpZiB0aGVyZSdzIG5vIHNlbGVjdGlvbi4KKyAgICBFWFBFQ1RfRkFMU0UoZnJh
bWUtPm1vdmVTZWxlY3Rpb25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFk
ZXJfMSIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPm1vdmVTZWxlY3Rpb25T
dGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMSIpKSwgdHJ1ZSkpOwor
CisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50
KCdoZWFkZXJfMScpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlvbkFz
U3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQo
Ym90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzIiKSksIGZh
bHNlKSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIgMS4gSGVhZGVyIDIuIiwgc2VsZWN0aW9uQXNT
dHJpbmcoZnJhbWUpKTsKKworICAgIC8vIFNlbGVjdCBzZWNvbmQgc3Bhbi4gV2UgY2FuIG1vdmUg
dGhlIHN0YXJ0IHRvIGluY2x1ZGUgdGhlIGZpcnN0IHNwYW4uCisgICAgZnJhbWUtPmV4ZWN1dGVT
Y3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMicpOyIpKTsKKyAg
ICBFWFBFQ1RfRVEoIkhlYWRlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAg
RVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3Vu
ZHMoZnJhbWUsICJoZWFkZXJfMSIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAx
LiBIZWFkZXIgMi4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gSWYgYWxs
b3dDb2xsYXBzZWRTZWxlY3Rpb249ZmFsc2Ugd2UgY2FuJ3QgbW92ZSB0aGUgc2VsZWN0aW9uIHN0
YXJ0IGJleW9uZCB0aGUgY3VycmVudCBlbmQuCisgICAgLy8gV2UgZW5kIHVwIHdpdGggYSBzaW5n
bGUgY2hhcmFjdGVyIHNlbGVjdGVkLgorICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlw
dFNvdXJjZSgic2VsZWN0RWxlbWVudCgnaGVhZGVyXzEnKTsiKSk7CisgICAgRVhQRUNUX0VRKCJI
ZWFkZXIgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZy
YW1lLT5tb3ZlU2VsZWN0aW9uU3RhcnQoYm90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRz
KGZyYW1lLCAiaGVhZGVyXzEiKSksIGZhbHNlKSk7CisgICAgRVhQRUNUX0VRKCIuIiwgc2VsZWN0
aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIC8vIElmIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9u
PXRydWUgd2UgY2FuIG1vdmUgdGhlIHN0YXJ0IGFuZCBlbmQgdG9nZXRoZXIuCisgICAgZnJhbWUt
PmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMScp
OyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1l
KSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25TdGFydChib3R0b21SaWdo
dE1pbnVzT25lKGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMSIpKSwgdHJ1ZSkpOworICAg
IEVYUEVDVF9FUSgiIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICAvLyBTZWxlY3Rp
b24gaXMgYSBjYXJldCwgbm90IGVtcHR5LgorICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+c2VsZWN0
aW9uUmFuZ2UoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rp
b25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMSIpKSwgdHJ1ZSkp
OworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsK
KworICAgIC8vIElmIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9uPXRydWUgd2UgY2FuIG1vdmUgdGhl
IHN0YXJ0IGFjcm9zcyB0aGUgZW5kLgorICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlw
dFNvdXJjZSgic2VsZWN0RWxlbWVudCgnaGVhZGVyXzEnKTsiKSk7CisgICAgRVhQRUNUX0VRKCJI
ZWFkZXIgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZy
YW1lLT5tb3ZlU2VsZWN0aW9uU3RhcnQoYm90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRz
KGZyYW1lLCAiaGVhZGVyXzIiKSksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIiBIZWFkZXIgMi4i
LCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gQ2FuJ3QgZXh0ZW5kIHRoZSBz
ZWxlY3Rpb24gcGFydC13YXkgaW50byBhbiBlZGl0YWJsZSBlbGVtZW50LgorICAgIGZyYW1lLT5l
eGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVudCgnZm9vdGVyXzInKTsi
KSk7CisgICAgRVhQRUNUX0VRKCJGb290ZXIgMi4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkp
OworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uU3RhcnQodG9wTGVmdChlbGVt
ZW50Qm91bmRzKGZyYW1lLCAiZWRpdGFibGVfMiIpKSwgdHJ1ZSkpOworICAgIEVYUEVDVF9FUSgi
IFsgRm9vdGVyIDEuIEZvb3RlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisKKyAg
ICAvLyBDYW4gZXh0ZW5kIHRoZSBzZWxlY3Rpb24gY29tcGxldGVseSBhY3Jvc3MgZWRpdGFibGUg
ZWxlbWVudHMuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxl
Y3RFbGVtZW50KCdmb290ZXJfMicpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkZvb3RlciAyLiIsIHNl
bGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxl
Y3Rpb25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMiIpKSwgdHJ1
ZSkpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDIuIF0gWyBFZGl0YWJsZSAxLiBFZGl0YWJsZSAy
LiBdIFsgRm9vdGVyIDEuIEZvb3RlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisK
KyAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGVkaXRhYmxlIHRleHQsIHdlIGNhbid0IGV4dGVu
ZCBpdCBpbnRvIG5vbi1lZGl0YWJsZSB0ZXh0LgorICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdl
YlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVudCgnZWRpdGFibGVfMicpOyIpKTsKKyAgICBFWFBF
Q1RfRVEoIkVkaXRhYmxlIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBF
Q1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQoZWxlbWVudEJvdW5kcyhm
cmFtZSwgImhlYWRlcl8yIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCJbIEVkaXRhYmxlIDEu
IEVkaXRhYmxlIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIHdlYlZpZXct
PmNsb3NlKCk7Cit9CisKK1RFU1RfRihXZWJGcmFtZVRlc3QsIE1vdmVTZWxlY3Rpb25FbmQpCit7
CisgICAgcmVnaXN0ZXJNb2NrZWRIdHRwVVJMTG9hZCgidGV4dF9zZWxlY3Rpb24uaHRtbCIpOwor
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBjcmVhdGVXZWJWaWV3Rm9yVGV4dFNlbGVjdGlvbihtX2Jh
c2VVUkwgKyAidGV4dF9zZWxlY3Rpb24uaHRtbCIpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IHdl
YlZpZXctPm1haW5GcmFtZSgpOworCisgICAgLy8gbW92ZVNlbGVjdGlvbkVuZCgpIGFsd2F5cyBy
ZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0aW9uLgorICAgIEVYUEVDVF9GQUxTRShm
cmFtZS0+bW92ZVNlbGVjdGlvbkVuZCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFk
ZXJfMSIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPm1vdmVTZWxlY3Rpb25F
bmQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzEiKSksIHRydWUpKTsKKwor
ICAgIC8vIFNlbGVjdCBmaXJzdCBzcGFuLiBXZSBjYW4gbW92ZSB0aGUgZW5kIHRvIGluY2x1ZGUg
dGhlIHNlY29uZCBzcGFuLgorICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJj
ZSgic2VsZWN0RWxlbWVudCgnaGVhZGVyXzEnKTsiKSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIg
MS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5t
b3ZlU2VsZWN0aW9uRW5kKGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwg
ImhlYWRlcl8yIikpLCBmYWxzZSkpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDEuIEhlYWRlciAy
LiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisKKyAgICAvLyBJZiBhbGxvd0NvbGxhcHNl
ZFNlbGVjdGlvbj1mYWxzZSB3ZSBjYW4ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gZW5kIGJleW9uZCB0
aGUgY3VycmVudCBzdGFydC4KKyAgICAvLyBXZSBlbmQgdXAgd2l0aCBhIHNpbmdsZSBjaGFyYWN0
ZXIgc2VsZWN0ZWQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJz
ZWxlY3RFbGVtZW50KCdoZWFkZXJfMicpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAyLiIs
IHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVT
ZWxlY3Rpb25FbmQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzIiKSksIGZh
bHNlKSk7CisgICAgRVhQRUNUX0VRKCJIIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKwor
ICAgIC8vIElmIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9uPXRydWUgd2UgY2FuIG1vdmUgdGhlIHN0
YXJ0IGFuZCBlbmQgdG9nZXRoZXIuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0
U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMicpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhl
YWRlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJh
bWUtPm1vdmVTZWxlY3Rpb25FbmQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVy
XzIiKSksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1l
KSk7CisgICAgLy8gU2VsZWN0aW9uIGlzIGEgY2FyZXQsIG5vdCBlbXB0eS4KKyAgICBFWFBFQ1Rf
RkFMU0UoZnJhbWUtPnNlbGVjdGlvblJhbmdlKCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVF
KGZyYW1lLT5tb3ZlU2VsZWN0aW9uRW5kKGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5k
cyhmcmFtZSwgImhlYWRlcl8yIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIgMi4i
LCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gSWYgYWxsb3dDb2xsYXBzZWRT
ZWxlY3Rpb249dHJ1ZSB3ZSBjYW4gbW92ZSB0aGUgZW5kIGFjcm9zcyB0aGUgc3RhcnQuCisgICAg
ZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFk
ZXJfMicpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5n
KGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQodG9wTGVm
dChlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzEiKSksIHRydWUpKTsKKyAgICBFWFBFQ1Rf
RVEoIkhlYWRlciAxLiAiLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gQ2Fu
J3QgZXh0ZW5kIHRoZSBzZWxlY3Rpb24gcGFydC13YXkgaW50byBhbiBlZGl0YWJsZSBlbGVtZW50
LgorICAgIGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVu
dCgnaGVhZGVyXzEnKTsiKSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIgMS4iLCBzZWxlY3Rpb25B
c1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uRW5k
KGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlXzEiKSks
IHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiBIZWFkZXIgMi4gXSAiLCBzZWxlY3Rp
b25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gQ2FuIGV4dGVuZCB0aGUgc2VsZWN0aW9uIGNv
bXBsZXRlbHkgYWNyb3NzIGVkaXRhYmxlIGVsZW1lbnRzLgorICAgIGZyYW1lLT5leGVjdXRlU2Ny
aXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVudCgnaGVhZGVyXzEnKTsiKSk7CisgICAg
RVhQRUNUX0VRKCJIZWFkZXIgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVY
UEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uRW5kKGJvdHRvbVJpZ2h0TWludXNPbmUoZWxl
bWVudEJvdW5kcyhmcmFtZSwgImZvb3Rlcl8xIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCJI
ZWFkZXIgMS4gSGVhZGVyIDIuIF0gWyBFZGl0YWJsZSAxLiBFZGl0YWJsZSAyLiBdIFsgRm9vdGVy
IDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIC8vIElmIHRoZSBzZWxlY3Rp
b24gaXMgZWRpdGFibGUgdGV4dCwgd2UgY2FuJ3QgZXh0ZW5kIGl0IGludG8gbm9uLWVkaXRhYmxl
IHRleHQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RF
bGVtZW50KCdlZGl0YWJsZV8xJyk7IikpOworICAgIEVYUEVDVF9FUSgiRWRpdGFibGUgMS4iLCBz
ZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2Vs
ZWN0aW9uRW5kKGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImZvb3Rl
cl8xIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCJFZGl0YWJsZSAxLiBFZGl0YWJsZSAyLiBd
Iiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIHdlYlZpZXctPmNsb3NlKCk7Cit9
CisKK1RFU1RfRihXZWJGcmFtZVRlc3QsIE1vdmVDYXJldCkKK3sKKyAgICByZWdpc3Rlck1vY2tl
ZEh0dHBVUkxMb2FkKCJ0ZXh0X3NlbGVjdGlvbi5odG1sIik7CisgICAgV2ViVmlldyogd2ViVmll
dyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVSTCArICJ0ZXh0X3NlbGVj
dGlvbi5odG1sIik7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViVmlldy0+bWFpbkZyYW1lKCk7
CisKKyAgICAvLyBtb3ZlQ2FyZXQoKSByZXR1cm5zIGZhbHNlIGlmIHRoZXJlJ3Mgbm8gc2VsZWN0
aW9uLCBvciBpZiBpdCBpc24ndCBlZGl0YWJsZS4KKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPm1v
dmVDYXJldCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJlZGl0YWJsZSIpKSkpOworICAg
IGZyYW1lLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVudCgnaGVh
ZGVyXzEnKTsiKSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIgMS4iLCBzZWxlY3Rpb25Bc1N0cmlu
ZyhmcmFtZSkpOworICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+bW92ZUNhcmV0KHRvcExlZnQoZWxl
bWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlIikpKSk7CisKKyAgICAvLyBTZWxlY3QgdGhlIGVk
aXRhYmxlIHRleHQgc3Bhbi4gTm93IG1vdmVDYXJldCgpIHdvcmtzLgorICAgIGZyYW1lLT5leGVj
dXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZSgic2VsZWN0RWxlbWVudCgnZWRpdGFibGVfMScpOyIp
KTsKKyAgICBFWFBFQ1RfRVEoIkVkaXRhYmxlIDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUp
KTsKKworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlQ2FyZXQodG9wTGVmdChlbGVtZW50Qm91
bmRzKGZyYW1lLCAiZWRpdGFibGVfMSIpKSkpOworICAgIEVYUEVDVF9FUSgiIiwgc2VsZWN0aW9u
QXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPnNlbGVjdGlvblJhbmdl
KCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uRW5kKGJv
dHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlXzEiKSksIGZh
bHNlKSk7CisgICAgRVhQRUNUX0VRKCJFZGl0YWJsZSAxLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZy
YW1lKSk7CisKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZUNhcmV0KGJvdHRvbVJpZ2h0TWlu
dXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlXzIiKSkpKTsKKyAgICBFWFBFQ1Rf
RVEoIiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX0ZBTFNFKGZyYW1l
LT5zZWxlY3Rpb25SYW5nZSgpLmlzTnVsbCgpKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92
ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQoZWxlbWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlXzIi
KSksIGZhbHNlKSk7CisgICAgRVhQRUNUX0VRKCJFZGl0YWJsZSAyLiIsIHNlbGVjdGlvbkFzU3Ry
aW5nKGZyYW1lKSk7CisKKyAgICAvLyBDYXJldCBpcyBwaW5uZWQgYXQgdGhlIHN0YXJ0IG9mIHRo
ZSBlZGl0YWJsZSByZWdpb24uCisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVDYXJldCh0b3BM
ZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMSIpKSkpOworICAgIEVYUEVDVF9FUSgi
Iiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPnNl
bGVjdGlvblJhbmdlKCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2Vs
ZWN0aW9uRW5kKGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImVkaXRh
YmxlXzEiKSksIGZhbHNlKSk7CisgICAgRVhQRUNUX0VRKCJbIEVkaXRhYmxlIDEuIiwgc2VsZWN0
aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIC8vIENhcmV0IGlzIHBpbm5lZCBhdCB0aGUgZW5k
IG9mIHRoZSBlZGl0YWJsZSByZWdpb24uCisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVDYXJl
dChib3R0b21SaWdodE1pbnVzT25lKGVsZW1lbnRCb3VuZHMoZnJhbWUsICJmb290ZXJfMiIpKSkp
OworICAgIEVYUEVDVF9FUSgiIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBF
Q1RfRkFMU0UoZnJhbWUtPnNlbGVjdGlvblJhbmdlKCkuaXNOdWxsKCkpOworICAgIEVYUEVDVF9U
UlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uU3RhcnQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1l
LCAiZWRpdGFibGVfMiIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRVEoIkVkaXRhYmxlIDIuIF0i
LCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgd2ViVmlldy0+Y2xvc2UoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS90ZXh0X3NlbGVjdGlvbi5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3RleHRfc2VsZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYwNWU5YTU0ZjAwNzQ2YjZm
MzJiMWIyMjcxOWYxODAzYjkwMjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS90ZXh0X3NlbGVjdGlvbi5odG1sCkBAIC0wLDAgKzEsMzEgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKworPHNwYW4gaWQ9ImhlYWRlciI+Wwor
PHNwYW4gaWQ9ImhlYWRlcl8xIj5IZWFkZXIgMS48L3NwYW4+Cis8c3BhbiBpZD0iaGVhZGVyXzIi
PkhlYWRlciAyLjwvc3Bhbj4KK108L3NwYW4+CisKKzxzcGFuIGlkPSJlZGl0YWJsZSIgY29udGVu
dGVkaXRhYmxlPSJ0cnVlIj5bCis8c3BhbiBpZD0iZWRpdGFibGVfMSI+RWRpdGFibGUgMS48L3Nw
YW4+Cis8c3BhbiBpZD0iZWRpdGFibGVfMiI+RWRpdGFibGUgMi48L3NwYW4+CitdPC9zcGFuPgor
Cis8c3BhbiBpZD0iZm9vdGVyIj5bCis8c3BhbiBpZD0iZm9vdGVyXzEiPkZvb3RlciAxLjwvc3Bh
bj4KKzxzcGFuIGlkPSJmb290ZXJfMiI+Rm9vdGVyIDIuPC9zcGFuPgorXTwvc3Bhbj4KKworPHNj
cmlwdD4KK2Z1bmN0aW9uIHNlbGVjdEVsZW1lbnQoaWQpIHsKKyAgdmFyIGVsZW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7CisgIHJhbmdlLnNlbGVjdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpKTsK
KyAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOworICB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162521</attachid>
            <date>2012-09-06 09:14:40 -0700</date>
            <delta_ts>2012-09-06 12:51:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93998-20120906171420.patch</filename>
            <type>text/plain</type>
            <size>23246</size>
            <attacher name="Iain Merrick">husky</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDZjZmRkMWMzNjkzZmUyYTZhMTk1NjViMGFlMjFmMjAyZGRhY2JmNzguLmM3YjczY2U4MDViOTUz
MmVkYzc5YmQ4MGY4Zjg2OTdkOGQ0NzRlODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTItMDktMDYgIElhaW4gTWVycmljayAgPGh1c2t5QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEFkZCBXZWJGcmFtZTo6bW92ZVNlbGVjdGlvblN0
YXJ0LCBtb3ZlU2VsZWN0aW9uRW5kLCBtb3ZlQ2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzOTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KKworICAgICAgICBUaGVzZSBwcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkg
c2VsZWN0UmFuZ2UoV2ViUG9pbnQsIFdlYlBvaW50KSwKKyAgICAgICAgd2l0aCBmaW5lci1ncmFp
bmVkIGNvbnRyb2wgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtLiBCeSBwYXNzaW5nCisg
ICAgICAgIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9uPWZhbHNlLCB3ZSBjYW4gZW5zdXJlIHRoZSBz
ZWxlY3Rpb24gc3RheXMgYXQKKyAgICAgICAgbGVhc3Qgb25lIGNoYXJhY3RlciB3aWRlLgorCisg
ICAgICAgIEkgaGF2ZSByZWltcGxlbWVudGVkIFdlYkZyYW1lSW1wbDo6c2VsZWN0UmFuZ2UoV2Vi
UG9pbnQsIFdlYlBvaW50KSBieQorICAgICAgICBjYWxsaW5nIHRoZSBuZXcgbWV0aG9kcy4gVGhl
IGV4aXN0aW5nIHRlc3QgcGFzc2VzLCBhbmQgSSd2ZSBhZGRlZCBuZXcKKyAgICAgICAgdGVzdHMg
Zm9yIHRoZSBuZXcgbWV0aG9kcy4KKworICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAg
ICAgICAoV2ViRnJhbWUpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6bW92ZVNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjptb3ZlU2VsZWN0aW9uRW5kKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVJbXBsOjptb3ZlQ2FyZXQpOgorICAgICAgICAqIHNyYy9XZWJGcmFt
ZUltcGwuaDoKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisgICAgICAgICogdGVzdHMvV2ViRnJh
bWVUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3RleHRfc2VsZWN0aW9uLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTA5LTA2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFdpbiBidWlsZCBmaXggYXR0ZW1wdCBhZnRlciByMTI3
NzE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAppbmRleCBiYzU2MDU5
MzM1NmIwMWQ2ZTJjMzAwY2NkYzM2ZWIxN2YwZWEwMGE5Li41NmNiZTFlYTQ3ZGRhMmQ5MjkyY2U4
NGI4MmVmMmRkYWMzMWM0NjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZy
YW1lLmgKQEAgLTQ3MiwxMCArNDcyLDI5IEBAIHB1YmxpYzoKICAgICAvLyB0aGVyZSBpcyByYW5n
ZWQgc2VsZWN0aW9uLgogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RXb3JkQXJvdW5kQ2FyZXQoKSA9
IDA7CiAKKyAgICAvLyBERVBSRUNBVEVEOiBVc2UgbW92ZVNlbGVjdGlvblN0YXJ0IC8gbW92ZVNl
bGVjdGlvbkVuZCAvIG1vdmVDYXJldAorICAgIC8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIGZv
ciB0b3VjaC1iYXNlZCBVSXMsIGJ1dCBpdCdzIG1pc3Npbmcgc29tZQorICAgIC8vIGZ1bmN0aW9u
YWxpdHkgbmVlZGVkIG9uIEFuZHJvaWQsIGxpa2UgcHJldmVudGluZyBjb2xsYXBzZWQgc2VsZWN0
aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFuZ2UoY29uc3QgV2ViUG9pbnQmIHN0YXJ0
LCBjb25zdCBXZWJQb2ludCYgZW5kKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0UmFu
Z2UoY29uc3QgV2ViUmFuZ2UmKSA9IDA7CiAKKyAgICAvLyBUaGUgbWV0aG9kcyBiZWxvdyBhcmUg
Zm9yIGFkanVzdGluZyB0aGUgc3RhcnQgYW5kL29yIGVuZCBvZiB0aGUgY3VycmVudAorICAgIC8v
IHNlbGVjdGlvbiBieSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9uIGEgdG91Y2gtYmFzZWQgVUkuIFRv
IGVudGVyIHNlbGVjdGlvbgorICAgIC8vIG1vZGUgaW4gdGhlIGZpcnN0IHBsYWNlLCBjYWxsIHNl
bGVjdFJhbmdlKCkgb3Igc2VuZCBhIGZha2UgbW91c2UgZXZlbnQuCisKKyAgICAvLyBNb3ZlcyB0
aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBrZWVwaW5nIHRoZSBlbmQgZml4ZWQu
CisgICAgLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHNl
bGVjdGlvbiB0byBtb2RpZnkuCisgICAgdmlydHVhbCBib29sIG1vdmVTZWxlY3Rpb25TdGFydChj
b25zdCBXZWJQb2ludCYsIGJvb2wgYWxsb3dDb2xsYXBzZWRTZWxlY3Rpb24pID0gMDsKKworICAg
IC8vIE1vdmVzIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBrZWVwaW5nIHRoZSBz
dGFydCBmaXhlZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgdGhl
cmUgaXMgbm8gc2VsZWN0aW9uIHRvIG1vZGlmeS4KKyAgICB2aXJ0dWFsIGJvb2wgbW92ZVNlbGVj
dGlvbkVuZChjb25zdCBXZWJQb2ludCYsIGJvb2wgYWxsb3dDb2xsYXBzZWRTZWxlY3Rpb24pID0g
MDsKKworICAgIC8vIE1vdmUgYm90aCBlbmRwb2ludHMgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
IHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAvLyBUaGUgY2FyZXQgd2lsbCByZW1haW4gcGlu
bmVkIGluc2lkZSB0aGUgY3VycmVudCBlZGl0YWJsZSByZWdpb24uCisgICAgLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiBvciBpZiB3ZSdy
ZSBub3QgZWRpdGluZy4KKyAgICB2aXJ0dWFsIGJvb2wgbW92ZUNhcmV0KGNvbnN0IFdlYlBvaW50
JikgPSAwOwogCiAgICAgLy8gUHJpbnRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGViM2FlZjc3NWNhZTU3ZDQ2NGJhNDMzYWZjMGY0
NzczNGU2YzlmZTMuLmFlM2I1OTlkZmQxNjM4NDZiMmI2OThjMjU2NGIyZjQyNjQwZTBmYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtMTcwLDYg
KzE3MCw3IEBACiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJW
aWV3SW1wbC5oIgogI2luY2x1ZGUgIlhQYXRoUmVzdWx0LmgiCisjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJwYWludGluZy9HcmFwaGljc0Nv
bnRleHRCdWlsZGVyLmgiCiAjaW5jbHVkZSAicGxhdGZvcm0vV2ViRmxvYXRQb2ludC5oIgpAQCAt
MTQ2NSwyNCArMTQ2Niw2OSBAQCBib29sIFdlYkZyYW1lSW1wbDo6c2VsZWN0V29yZEFyb3VuZENh
cmV0KCkKIAogdm9pZCBXZWJGcmFtZUltcGw6OnNlbGVjdFJhbmdlKGNvbnN0IFdlYlBvaW50JiBz
dGFydCwgY29uc3QgV2ViUG9pbnQmIGVuZCkKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQ
b3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KHN0YXJ0KTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChl
bmQpOworICAgIGlmIChzdGFydCA9PSBlbmQgJiYgbW92ZUNhcmV0KHN0YXJ0KSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gVG8gY29ycmVjdGx5IGhhbmRsZSBlZGl0YWJsZSBib3VuZGFyaWVz
LCB3ZSBhZGp1c3QgdGhlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBleHRlbnQKLSAgICAvLyB3
aGlsZSBrZWVwaW5nIGl0cyBiYXNlIGZpeGVkLiBGb3IgYSB0b3VjaC1iYXNlZCBVSSwgdGhpcyBt
ZWFucyB0aGF0IG1vdmluZyB0aGUgc2VsZWN0aW9uCi0gICAgLy8gaGFuZGxlcyBiZWhhdmVzIGxp
a2UgYSBkcmFnLXNlbGVjdCB3aXRoIHRoZSBtb3VzZSwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IGhl
cmUuIElmIGJvdGgKLSAgICAvLyBlbmRwb2ludHMgY2hhbmdlZCwgd2UgbmVlZCB0byBzZXQgdGhl
IGV4dGVudCB0d2ljZS4KLSAgICAvLyBGSVhNRTogdGhlIFdlYkZyYW1lOjpTZWxlY3RSYW5nZSBB
UEkgc2hvdWxkIGV4cGxpY2l0bHkgc3RhdGUgd2hpY2ggZW5kcG9pbnQgaXMgbW92aW5nLgotICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNl
bGVjdGlvbigpOwotICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG5ld1NlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKSkKLSAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24udmlzaWJsZUVuZCgpLCBzdGFydFBvc2l0aW9uKTsKLSAgICBpZiAoZW5kUG9zaXRpb24g
IT0gbmV3U2VsZWN0aW9uLnZpc2libGVFbmQoKSkKLSAgICAgICAgbmV3U2VsZWN0aW9uID0gVmlz
aWJsZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGVuZFBvc2l0aW9uKTsK
KyAgICBpZiAobW92ZVNlbGVjdGlvblN0YXJ0KHN0YXJ0LCB0cnVlKSAmJiBtb3ZlU2VsZWN0aW9u
RW5kKGVuZCwgdHJ1ZSkpCisgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZhaWxlZCB0byBtb3Zl
IGVuZHBvaW50cywgcHJvYmFibHkgYmVjYXVzZSB0aGVyZSdzIG5vIGN1cnJlbnQgc2VsZWN0aW9u
LgorICAgIC8vIEp1c3Qgc2V0IHRoZSBzZWxlY3Rpb24gZXhwbGljaXRseSAoYnV0IHRoaXMgd29u
J3QgaGFuZGxlIGVkaXRhYmxlIGJvdW5kYXJpZXMgY29ycmVjdGx5KS4KKyAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG5ld1NlbGVjdGlvbih2aXNpYmxlUG9zaXRpb25Gb3JXaW5kb3dQb2ludChzdGFydCks
IHZpc2libGVQb3NpdGlvbkZvcldpbmRvd1BvaW50KGVuZCkpOyAgICAKICAgICBpZiAoZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQogICAg
ICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgQ2hh
cmFjdGVyR3JhbnVsYXJpdHkpOwogfQogCitib29sIFdlYkZyYW1lSW1wbDo6bW92ZVNlbGVjdGlv
blN0YXJ0KGNvbnN0IFdlYlBvaW50JiBwb2ludCwgYm9vbCBhbGxvd0NvbGxhcHNlZFNlbGVjdGlv
bikKK3sKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJs
ZVBvc2l0aW9uRm9yV2luZG93UG9pbnQocG9pbnQpOworICAgIGlmICghYWxsb3dDb2xsYXBzZWRT
ZWxlY3Rpb24pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG1heFN0YXJ0ID0gc2VsZWN0aW9u
LnZpc2libGVFbmQoKS5wcmV2aW91cygpOworICAgICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhz
dGFydCwgbWF4U3RhcnQpID4gMCkKKyAgICAgICAgICAgIHN0YXJ0ID0gbWF4U3RhcnQ7CisgICAg
fQorCisgICAgLy8gc3RhcnQgaXMgbW92aW5nLCBzbyBiYXNlPWVuZCwgZXh0ZW50PXN0YXJ0Cisg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVj
dGlvbi52aXNpYmxlRW5kKCksIHN0YXJ0KTsKKyAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0
Tm9uRGlyZWN0aW9uYWxTZWxlY3Rpb25JZk5lZWRlZChuZXdTZWxlY3Rpb24sIENoYXJhY3Rlckdy
YW51bGFyaXR5KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJGcmFtZUltcGw6Om1v
dmVTZWxlY3Rpb25FbmQoY29uc3QgV2ViUG9pbnQmIHBvaW50LCBib29sIGFsbG93Q29sbGFwc2Vk
U2VsZWN0aW9uKQoreworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0g
dmlzaWJsZVBvc2l0aW9uRm9yV2luZG93UG9pbnQocG9pbnQpOworICAgIGlmICghYWxsb3dDb2xs
YXBzZWRTZWxlY3Rpb24pIHsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG1pbkVuZCA9IHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKS5uZXh0KCk7CisgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25z
KGVuZCwgbWluRW5kKSA8IDApCisgICAgICAgICAgICBlbmQgPSBtaW5FbmQ7CisgICAgfQorCisg
ICAgLy8gZW5kIGlzIG1vdmluZywgc28gYmFzZT1zdGFydCwgZXh0ZW50PWVuZAorICAgIFZpc2li
bGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24udmlz
aWJsZVN0YXJ0KCksIGVuZCk7CisgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldE5vbkRpcmVj
dGlvbmFsU2VsZWN0aW9uSWZOZWVkZWQobmV3U2VsZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViRnJhbWVJbXBsOjptb3ZlQ2FyZXQo
Y29uc3QgV2ViUG9pbnQmIHBvaW50KQoreworICAgIEZyYW1lU2VsZWN0aW9uKiBmcmFtZVNlbGVj
dGlvbiA9IGZyYW1lKCktPnNlbGVjdGlvbigpOworICAgIGlmIChmcmFtZVNlbGVjdGlvbi0+aXNO
b25lKCkgfHwgIWZyYW1lU2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gdmlzaWJsZVBvc2l0aW9u
Rm9yV2luZG93UG9pbnQocG9pbnQpOworICAgIGZyYW1lU2VsZWN0aW9uLT5zZXRFeHRlbnQocG9z
LCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBmcmFtZVNlbGVjdGlvbi0+c2V0QmFzZShmcmFtZVNlbGVj
dGlvbi0+ZXh0ZW50KCksIFVzZXJUcmlnZ2VyZWQpOworICAgIHJldHVybiB0cnVlOworfQorCiB2
b2lkIFdlYkZyYW1lSW1wbDo6c2VsZWN0UmFuZ2UoY29uc3QgV2ViUmFuZ2UmIHdlYlJhbmdlKQog
ewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzdGF0aWNfY2FzdDxQYXNzUmVmUHRyPFJhbmdl
PiA+KHdlYlJhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZyYW1lSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgK
aW5kZXggNjhhYTcyODliOWI3N2JlMWMzOGRkYjFkMzIxZTg1ZThmMzU2Y2ViZC4uYTQ5OTFjYmZi
NTU3ZTNmMGZlNmM0ZWE2ZjI0NzlhNDcyMDZjZmRkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmgKQEAgLTE4Niw2ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHNlbGVjdFdvcmRBcm91bmRDYXJldCgpOwogICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RSYW5nZShjb25zdCBXZWJQb2ludCYgc3RhcnQsIGNvbnN0IFdlYlBvaW50JiBlbmQpOwogICAg
IHZpcnR1YWwgdm9pZCBzZWxlY3RSYW5nZShjb25zdCBXZWJSYW5nZSYpOworICAgIHZpcnR1YWwg
Ym9vbCBtb3ZlU2VsZWN0aW9uU3RhcnQoY29uc3QgV2ViUG9pbnQmLCBib29sIGFsbG93Q29sbGFw
c2VkU2VsZWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgbW92ZVNlbGVjdGlvbkVuZChjb25zdCBX
ZWJQb2ludCYsIGJvb2wgYWxsb3dDb2xsYXBzZWRTZWxlY3Rpb24pOworICAgIHZpcnR1YWwgYm9v
bCBtb3ZlQ2FyZXQoY29uc3QgV2ViUG9pbnQmKTsKICAgICB2aXJ0dWFsIGludCBwcmludEJlZ2lu
KGNvbnN0IFdlYlByaW50UGFyYW1zJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYk5vZGUmIGNvbnN0cmFpblRvTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wqIHVzZUJyb3dzZXJPdmVybGF5cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYkZyYW1lVGVzdC5jcHAKaW5kZXggMThhZjY4NWJiOGM1MWY4OTFmYmIwZTM0MTU4Mzg1MTU4
OTY2NDdmZC4uYzFjZDg5ZGM1YmI3YWM1ODMyOWU3ZGFjZTZhMjNhMWQ3MjRhMDZhZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcApAQCAtOTkwLDEw
ICs5OTAsMTEgQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgRmluZEluUGFnZU1hdGNoUmVjdHMpCiAg
ICAgd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAotc3RhdGljIFdlYlZpZXcqIHNlbGVjdFJhbmdlVGVz
dENyZWF0ZVdlYlZpZXcoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCkKK3N0YXRpYyBXZWJWaWV3KiBj
cmVhdGVXZWJWaWV3Rm9yVGV4dFNlbGVjdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgdXJsKQogewog
ICAgIFdlYlZpZXcqIHdlYlZpZXcgPSBGcmFtZVRlc3RIZWxwZXJzOjpjcmVhdGVXZWJWaWV3QW5k
TG9hZCh1cmwsIHRydWUpOwogICAgIHdlYlZpZXctPnNldHRpbmdzKCktPnNldERlZmF1bHRGb250
U2l6ZSgxMik7CisgICAgd2ViVmlldy0+ZW5hYmxlRml4ZWRMYXlvdXRNb2RlKGZhbHNlKTsKICAg
ICB3ZWJWaWV3LT5yZXNpemUoV2ViU2l6ZSg2NDAsIDQ4MCkpOwogICAgIHJldHVybiB3ZWJWaWV3
OwogfQpAQCAtMTAxMiw2ICsxMDEzLDExIEBAIHN0YXRpYyBXZWJQb2ludCBib3R0b21SaWdodE1p
bnVzT25lKGNvbnN0IFdlYlJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIFdlYlBvaW50KHJlY3QueCAr
IHJlY3Qud2lkdGggLSAxLCByZWN0LnkgKyByZWN0LmhlaWdodCAtIDEpOwogfQogCitzdGF0aWMg
V2ViUmVjdCBlbGVtZW50Qm91bmRzKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBp
ZCkKK3sKKyAgICByZXR1cm4gZnJhbWUtPmRvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoaWQpLmJv
dW5kc0luVmlld3BvcnRTcGFjZSgpOworfQorCiBzdGF0aWMgc3RkOjpzdHJpbmcgc2VsZWN0aW9u
QXNTdHJpbmcoV2ViRnJhbWUqIGZyYW1lKQogewogICAgIHJldHVybiBzdGQ6OnN0cmluZyhmcmFt
ZS0+c2VsZWN0aW9uQXNUZXh0KCkudXRmOCgpLmRhdGEoKSk7CkBAIC0xMDI5LDcgKzEwMzUsNyBA
QCBURVNUX0YoV2ViRnJhbWVUZXN0LCBTZWxlY3RSYW5nZSkKICAgICByZWdpc3Rlck1vY2tlZEh0
dHBVUkxMb2FkKCJzZWxlY3RfcmFuZ2VfaWZyYW1lLmh0bWwiKTsKICAgICByZWdpc3Rlck1vY2tl
ZEh0dHBVUkxMb2FkKCJzZWxlY3RfcmFuZ2VfZWRpdGFibGUuaHRtbCIpOwogCi0gICAgd2ViVmll
dyA9IHNlbGVjdFJhbmdlVGVzdENyZWF0ZVdlYlZpZXcobV9iYXNlVVJMICsgInNlbGVjdF9yYW5n
ZV9iYXNpYy5odG1sIik7CisgICAgd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0
aW9uKG1fYmFzZVVSTCArICJzZWxlY3RfcmFuZ2VfYmFzaWMuaHRtbCIpOwogICAgIGZyYW1lID0g
d2ViVmlldy0+bWFpbkZyYW1lKCk7CiAgICAgRVhQRUNUX0VRKCJTb21lIHRlc3QgdGV4dCBmb3Ig
dGVzdGluZy4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOwogICAgIHdlYlZpZXctPnNlbGVj
dGlvbkJvdW5kcyhzdGFydFdlYlJlY3QsIGVuZFdlYlJlY3QpOwpAQCAtMTAzOSw3ICsxMDQ1LDcg
QEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgU2VsZWN0UmFuZ2UpCiAgICAgRVhQRUNUX0VRKCJTb21l
IHRlc3QgdGV4dCBmb3IgdGVzdGluZy4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOwogICAg
IHdlYlZpZXctPmNsb3NlKCk7CiAKLSAgICB3ZWJWaWV3ID0gc2VsZWN0UmFuZ2VUZXN0Q3JlYXRl
V2ViVmlldyhtX2Jhc2VVUkwgKyAic2VsZWN0X3JhbmdlX3Njcm9sbC5odG1sIik7CisgICAgd2Vi
VmlldyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVSTCArICJzZWxlY3Rf
cmFuZ2Vfc2Nyb2xsLmh0bWwiKTsKICAgICBmcmFtZSA9IHdlYlZpZXctPm1haW5GcmFtZSgpOwog
ICAgIEVYUEVDVF9FUSgiU29tZSBvZmZzY3JlZW4gdGVzdCB0ZXh0IGZvciB0ZXN0aW5nLiIsIHNl
bGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+c2VsZWN0aW9uQm91bmRzKHN0
YXJ0V2ViUmVjdCwgZW5kV2ViUmVjdCk7CkBAIC0xMDQ5LDcgKzEwNTUsNyBAQCBURVNUX0YoV2Vi
RnJhbWVUZXN0LCBTZWxlY3RSYW5nZSkKICAgICBFWFBFQ1RfRVEoIlNvbWUgb2Zmc2NyZWVuIHRl
c3QgdGV4dCBmb3IgdGVzdGluZy4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOwogICAgIHdl
YlZpZXctPmNsb3NlKCk7CiAKLSAgICB3ZWJWaWV3ID0gc2VsZWN0UmFuZ2VUZXN0Q3JlYXRlV2Vi
VmlldyhtX2Jhc2VVUkwgKyAic2VsZWN0X3JhbmdlX2lmcmFtZS5odG1sIik7CisgICAgd2ViVmll
dyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVSTCArICJzZWxlY3RfcmFu
Z2VfaWZyYW1lLmh0bWwiKTsKICAgICBmcmFtZSA9IHdlYlZpZXctPm1haW5GcmFtZSgpOwogICAg
IFdlYkZyYW1lKiBzdWJmcmFtZSA9IGZyYW1lLT5maW5kQ2hpbGRCeUV4cHJlc3Npb24oV2ViU3Ry
aW5nOjpmcm9tVVRGOCgiL2h0bWwvYm9keS9pZnJhbWUiKSk7CiAgICAgRVhQRUNUX0VRKCJTb21l
IHRlc3QgdGV4dCBmb3IgdGVzdGluZy4iLCBzZWxlY3Rpb25Bc1N0cmluZyhzdWJmcmFtZSkpOwpA
QCAtMTA2Miw3ICsxMDY4LDcgQEAgVEVTVF9GKFdlYkZyYW1lVGVzdCwgU2VsZWN0UmFuZ2UpCiAK
ICAgICAvLyBTZWxlY3QgdGhlIG1pZGRsZSBvZiBhbiBlZGl0YWJsZSBlbGVtZW50LCB0aGVuIHRy
eSB0byBleHRlbmQgdGhlIHNlbGVjdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudC4KICAg
ICAvLyBUaGUgc2VsZWN0aW9uIHJhbmdlIHNob3VsZCBiZSBjbGlwcGVkIHRvIHRoZSBib3VuZHMg
b2YgdGhlIGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgd2ViVmlldyA9IHNlbGVjdFJhbmdlVGVzdENy
ZWF0ZVdlYlZpZXcobV9iYXNlVVJMICsgInNlbGVjdF9yYW5nZV9lZGl0YWJsZS5odG1sIik7Cisg
ICAgd2ViVmlldyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVSTCArICJz
ZWxlY3RfcmFuZ2VfZWRpdGFibGUuaHRtbCIpOwogICAgIGZyYW1lID0gd2ViVmlldy0+bWFpbkZy
YW1lKCk7CiAgICAgRVhQRUNUX0VRKCJUaGlzIHRleHQgaXMgaW5pdGlhbGx5IHNlbGVjdGVkLiIs
IHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CiAgICAgd2ViVmlldy0+c2VsZWN0aW9uQm91bmRz
KHN0YXJ0V2ViUmVjdCwgZW5kV2ViUmVjdCk7CkBAIC0xMDcxLDcgKzEwNzcsNyBAQCBURVNUX0Yo
V2ViRnJhbWVUZXN0LCBTZWxlY3RSYW5nZSkKICAgICB3ZWJWaWV3LT5jbG9zZSgpOwogCiAgICAg
Ly8gQXMgYWJvdmUsIGJ1dCBleHRlbmRpbmcgdGhlIHNlbGVjdGlvbiB0byB0aGUgYm90dG9tIG9m
IHRoZSBkb2N1bWVudC4KLSAgICB3ZWJWaWV3ID0gc2VsZWN0UmFuZ2VUZXN0Q3JlYXRlV2ViVmll
dyhtX2Jhc2VVUkwgKyAic2VsZWN0X3JhbmdlX2VkaXRhYmxlLmh0bWwiKTsKKyAgICB3ZWJWaWV3
ID0gY3JlYXRlV2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInNlbGVjdF9yYW5n
ZV9lZGl0YWJsZS5odG1sIik7CiAgICAgZnJhbWUgPSB3ZWJWaWV3LT5tYWluRnJhbWUoKTsKICAg
ICBFWFBFQ1RfRVEoIlRoaXMgdGV4dCBpcyBpbml0aWFsbHkgc2VsZWN0ZWQuIiwgc2VsZWN0aW9u
QXNTdHJpbmcoZnJhbWUpKTsKICAgICB3ZWJWaWV3LT5zZWxlY3Rpb25Cb3VuZHMoc3RhcnRXZWJS
ZWN0LCBlbmRXZWJSZWN0KTsKQEAgLTEwODAsNiArMTA4NiwxNzYgQEAgVEVTVF9GKFdlYkZyYW1l
VGVzdCwgU2VsZWN0UmFuZ2UpCiAgICAgd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAorVEVTVF9GKFdl
YkZyYW1lVGVzdCwgTW92ZVNlbGVjdGlvblN0YXJ0KQoreworICAgIHJlZ2lzdGVyTW9ja2VkSHR0
cFVSTExvYWQoInRleHRfc2VsZWN0aW9uLmh0bWwiKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0g
Y3JlYXRlV2ViVmlld0ZvclRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInRleHRfc2VsZWN0aW9u
Lmh0bWwiKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSB3ZWJWaWV3LT5tYWluRnJhbWUoKTsKKwor
ICAgIC8vIG1vdmVTZWxlY3Rpb25TdGFydCgpIGFsd2F5cyByZXR1cm5zIGZhbHNlIGlmIHRoZXJl
J3Mgbm8gc2VsZWN0aW9uLgorICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+bW92ZVNlbGVjdGlvblN0
YXJ0KHRvcExlZnQoZWxlbWVudEJvdW5kcyhmcmFtZSwgImhlYWRlcl8xIikpLCBmYWxzZSkpOwor
ICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+bW92ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQoZWxlbWVu
dEJvdW5kcyhmcmFtZSwgImhlYWRlcl8xIikpLCB0cnVlKSk7CisKKyAgICBmcmFtZS0+ZXhlY3V0
ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2hlYWRlcl8xJyk7IikpOwor
ICAgIEVYUEVDVF9FUSgiSGVhZGVyIDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAg
ICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvbkVuZChib3R0b21SaWdodE1pbnVzT25l
KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMiIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1Rf
RVEoIkhlYWRlciAxLiBIZWFkZXIgMi4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisg
ICAgLy8gU2VsZWN0IHNlY29uZCBzcGFuLiBXZSBjYW4gbW92ZSB0aGUgc3RhcnQgdG8gaW5jbHVk
ZSB0aGUgZmlyc3Qgc3Bhbi4KKyAgICBmcmFtZS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3Vy
Y2UoInNlbGVjdEVsZW1lbnQoJ2hlYWRlcl8yJyk7IikpOworICAgIEVYUEVDVF9FUSgiSGVhZGVy
IDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+
bW92ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQoZWxlbWVudEJvdW5kcyhmcmFtZSwgImhlYWRlcl8x
IikpLCBmYWxzZSkpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDEuIEhlYWRlciAyLiIsIHNlbGVj
dGlvbkFzU3RyaW5nKGZyYW1lKSk7CisKKyAgICAvLyBJZiBhbGxvd0NvbGxhcHNlZFNlbGVjdGlv
bj1mYWxzZSB3ZSBjYW4ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gc3RhcnQgYmV5b25kIHRoZSBjdXJy
ZW50IGVuZC4KKyAgICAvLyBXZSBlbmQgdXAgd2l0aCBhIHNpbmdsZSBjaGFyYWN0ZXIgc2VsZWN0
ZWQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVt
ZW50KCdoZWFkZXJfMScpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlv
bkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25T
dGFydChib3R0b21SaWdodE1pbnVzT25lKGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMSIp
KSwgZmFsc2UpKTsKKyAgICBFWFBFQ1RfRVEoIi4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkp
OworCisgICAgLy8gSWYgYWxsb3dDb2xsYXBzZWRTZWxlY3Rpb249dHJ1ZSB3ZSBjYW4gbW92ZSB0
aGUgc3RhcnQgYW5kIGVuZCB0b2dldGhlci4KKyAgICBmcmFtZS0+ZXhlY3V0ZVNjcmlwdChXZWJT
Y3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2hlYWRlcl8xJyk7IikpOworICAgIEVYUEVDVF9F
USgiSGVhZGVyIDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfVFJV
RShmcmFtZS0+bW92ZVNlbGVjdGlvblN0YXJ0KGJvdHRvbVJpZ2h0TWludXNPbmUoZWxlbWVudEJv
dW5kcyhmcmFtZSwgImhlYWRlcl8xIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCIiLCBzZWxl
Y3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIC8vIFNlbGVjdGlvbiBpcyBhIGNhcmV0LCBub3Qg
ZW1wdHkuCisgICAgRVhQRUNUX0ZBTFNFKGZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpLmlzTnVsbCgp
KTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQoZWxl
bWVudEJvdW5kcyhmcmFtZSwgImhlYWRlcl8xIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCJI
ZWFkZXIgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gSWYgYWxsb3dD
b2xsYXBzZWRTZWxlY3Rpb249dHJ1ZSB3ZSBjYW4gbW92ZSB0aGUgc3RhcnQgYWNyb3NzIHRoZSBl
bmQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVt
ZW50KCdoZWFkZXJfMScpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlv
bkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25T
dGFydChib3R0b21SaWdodE1pbnVzT25lKGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMiIp
KSwgdHJ1ZSkpOworICAgIEVYUEVDVF9FUSgiIEhlYWRlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5n
KGZyYW1lKSk7CisKKyAgICAvLyBDYW4ndCBleHRlbmQgdGhlIHNlbGVjdGlvbiBwYXJ0LXdheSBp
bnRvIGFuIGVkaXRhYmxlIGVsZW1lbnQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2Ny
aXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdmb290ZXJfMicpOyIpKTsKKyAgICBFWFBFQ1RfRVEo
IkZvb3RlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUo
ZnJhbWUtPm1vdmVTZWxlY3Rpb25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJl
ZGl0YWJsZV8yIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VRKCIgWyBGb290ZXIgMS4gRm9vdGVy
IDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIC8vIENhbiBleHRlbmQgdGhl
IHNlbGVjdGlvbiBjb21wbGV0ZWx5IGFjcm9zcyBlZGl0YWJsZSBlbGVtZW50cy4KKyAgICBmcmFt
ZS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2Zvb3Rlcl8y
Jyk7IikpOworICAgIEVYUEVDVF9FUSgiRm9vdGVyIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJh
bWUpKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvblN0YXJ0KHRvcExlZnQo
ZWxlbWVudEJvdW5kcyhmcmFtZSwgImhlYWRlcl8yIikpLCB0cnVlKSk7CisgICAgRVhQRUNUX0VR
KCJIZWFkZXIgMi4gXSBbIEVkaXRhYmxlIDEuIEVkaXRhYmxlIDIuIF0gWyBGb290ZXIgMS4gRm9v
dGVyIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIC8vIElmIHRoZSBzZWxl
Y3Rpb24gaXMgZWRpdGFibGUgdGV4dCwgd2UgY2FuJ3QgZXh0ZW5kIGl0IGludG8gbm9uLWVkaXRh
YmxlIHRleHQuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxl
Y3RFbGVtZW50KCdlZGl0YWJsZV8yJyk7IikpOworICAgIEVYUEVDVF9FUSgiRWRpdGFibGUgMi4i
LCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3Zl
U2VsZWN0aW9uU3RhcnQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzIiKSks
IHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIlsgRWRpdGFibGUgMS4gRWRpdGFibGUgMi4iLCBzZWxl
Y3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgd2ViVmlldy0+Y2xvc2UoKTsKK30KKworVEVT
VF9GKFdlYkZyYW1lVGVzdCwgTW92ZVNlbGVjdGlvbkVuZCkKK3sKKyAgICByZWdpc3Rlck1vY2tl
ZEh0dHBVUkxMb2FkKCJ0ZXh0X3NlbGVjdGlvbi5odG1sIik7CisgICAgV2ViVmlldyogd2ViVmll
dyA9IGNyZWF0ZVdlYlZpZXdGb3JUZXh0U2VsZWN0aW9uKG1fYmFzZVVSTCArICJ0ZXh0X3NlbGVj
dGlvbi5odG1sIik7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViVmlldy0+bWFpbkZyYW1lKCk7
CisKKyAgICAvLyBtb3ZlU2VsZWN0aW9uRW5kKCkgYWx3YXlzIHJldHVybnMgZmFsc2UgaWYgdGhl
cmUncyBubyBzZWxlY3Rpb24uCisgICAgRVhQRUNUX0ZBTFNFKGZyYW1lLT5tb3ZlU2VsZWN0aW9u
RW5kKHRvcExlZnQoZWxlbWVudEJvdW5kcyhmcmFtZSwgImhlYWRlcl8xIikpLCBmYWxzZSkpOwor
ICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+bW92ZVNlbGVjdGlvbkVuZCh0b3BMZWZ0KGVsZW1lbnRC
b3VuZHMoZnJhbWUsICJoZWFkZXJfMSIpKSwgdHJ1ZSkpOworCisgICAgLy8gU2VsZWN0IGZpcnN0
IHNwYW4uIFdlIGNhbiBtb3ZlIHRoZSBlbmQgdG8gaW5jbHVkZSB0aGUgc2Vjb25kIHNwYW4uCisg
ICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdo
ZWFkZXJfMScpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlvbkFzU3Ry
aW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQoYm90
dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzIiKSksIGZhbHNl
KSk7CisgICAgRVhQRUNUX0VRKCJIZWFkZXIgMS4gSGVhZGVyIDIuIiwgc2VsZWN0aW9uQXNTdHJp
bmcoZnJhbWUpKTsKKworICAgIC8vIElmIGFsbG93Q29sbGFwc2VkU2VsZWN0aW9uPWZhbHNlIHdl
IGNhbid0IG1vdmUgdGhlIHNlbGVjdGlvbiBlbmQgYmV5b25kIHRoZSBjdXJyZW50IHN0YXJ0Lgor
ICAgIC8vIFdlIGVuZCB1cCB3aXRoIGEgc2luZ2xlIGNoYXJhY3RlciBzZWxlY3RlZC4KKyAgICBm
cmFtZS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2hlYWRl
cl8yJyk7IikpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmco
ZnJhbWUpKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvbkVuZCh0b3BMZWZ0
KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMiIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1Rf
RVEoIkgiLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgLy8gSWYgYWxsb3dDb2xs
YXBzZWRTZWxlY3Rpb249dHJ1ZSB3ZSBjYW4gbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCB0b2dldGhl
ci4KKyAgICBmcmFtZS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1l
bnQoJ2hlYWRlcl8yJyk7IikpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDIuIiwgc2VsZWN0aW9u
QXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvbkVu
ZCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJoZWFkZXJfMiIpKSwgdHJ1ZSkpOworICAg
IEVYUEVDVF9FUSgiIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICAvLyBTZWxlY3Rp
b24gaXMgYSBjYXJldCwgbm90IGVtcHR5LgorICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+c2VsZWN0
aW9uUmFuZ2UoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rp
b25FbmQoYm90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiaGVhZGVyXzIi
KSksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAyLiIsIHNlbGVjdGlvbkFzU3RyaW5n
KGZyYW1lKSk7CisKKyAgICAvLyBJZiBhbGxvd0NvbGxhcHNlZFNlbGVjdGlvbj10cnVlIHdlIGNh
biBtb3ZlIHRoZSBlbmQgYWNyb3NzIHRoZSBzdGFydC4KKyAgICBmcmFtZS0+ZXhlY3V0ZVNjcmlw
dChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2hlYWRlcl8yJyk7IikpOworICAgIEVY
UEVDVF9FUSgiSGVhZGVyIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKyAgICBFWFBF
Q1RfVFJVRShmcmFtZS0+bW92ZVNlbGVjdGlvbkVuZCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJh
bWUsICJoZWFkZXJfMSIpKSwgdHJ1ZSkpOworICAgIEVYUEVDVF9FUSgiSGVhZGVyIDEuICIsIHNl
bGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisKKyAgICAvLyBDYW4ndCBleHRlbmQgdGhlIHNlbGVj
dGlvbiBwYXJ0LXdheSBpbnRvIGFuIGVkaXRhYmxlIGVsZW1lbnQuCisgICAgZnJhbWUtPmV4ZWN1
dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMScpOyIpKTsK
KyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7Cisg
ICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQoYm90dG9tUmlnaHRNaW51c09u
ZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiZWRpdGFibGVfMSIpKSwgdHJ1ZSkpOworICAgIEVYUEVD
VF9FUSgiSGVhZGVyIDEuIEhlYWRlciAyLiBdICIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7
CisKKyAgICAvLyBDYW4gZXh0ZW5kIHRoZSBzZWxlY3Rpb24gY29tcGxldGVseSBhY3Jvc3MgZWRp
dGFibGUgZWxlbWVudHMuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNl
KCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMScpOyIpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAx
LiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1v
dmVTZWxlY3Rpb25FbmQoYm90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAi
Zm9vdGVyXzEiKSksIHRydWUpKTsKKyAgICBFWFBFQ1RfRVEoIkhlYWRlciAxLiBIZWFkZXIgMi4g
XSBbIEVkaXRhYmxlIDEuIEVkaXRhYmxlIDIuIF0gWyBGb290ZXIgMS4iLCBzZWxlY3Rpb25Bc1N0
cmluZyhmcmFtZSkpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBlZGl0YWJsZSB0ZXh0
LCB3ZSBjYW4ndCBleHRlbmQgaXQgaW50byBub24tZWRpdGFibGUgdGV4dC4KKyAgICBmcmFtZS0+
ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoInNlbGVjdEVsZW1lbnQoJ2VkaXRhYmxlXzEn
KTsiKSk7CisgICAgRVhQRUNUX0VRKCJFZGl0YWJsZSAxLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZy
YW1lKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQoYm90dG9tUmln
aHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiZm9vdGVyXzEiKSksIHRydWUpKTsKKyAg
ICBFWFBFQ1RfRVEoIkVkaXRhYmxlIDEuIEVkaXRhYmxlIDIuIF0iLCBzZWxlY3Rpb25Bc1N0cmlu
ZyhmcmFtZSkpOworCisgICAgd2ViVmlldy0+Y2xvc2UoKTsKK30KKworVEVTVF9GKFdlYkZyYW1l
VGVzdCwgTW92ZUNhcmV0KQoreworICAgIHJlZ2lzdGVyTW9ja2VkSHR0cFVSTExvYWQoInRleHRf
c2VsZWN0aW9uLmh0bWwiKTsKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gY3JlYXRlV2ViVmlld0Zv
clRleHRTZWxlY3Rpb24obV9iYXNlVVJMICsgInRleHRfc2VsZWN0aW9uLmh0bWwiKTsKKyAgICBX
ZWJGcmFtZSogZnJhbWUgPSB3ZWJWaWV3LT5tYWluRnJhbWUoKTsKKworICAgIC8vIG1vdmVDYXJl
dCgpIHJldHVybnMgZmFsc2UgaWYgdGhlcmUncyBubyBzZWxlY3Rpb24sIG9yIGlmIGl0IGlzbid0
IGVkaXRhYmxlLgorICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+bW92ZUNhcmV0KHRvcExlZnQoZWxl
bWVudEJvdW5kcyhmcmFtZSwgImVkaXRhYmxlIikpKSk7CisgICAgZnJhbWUtPmV4ZWN1dGVTY3Jp
cHQoV2ViU2NyaXB0U291cmNlKCJzZWxlY3RFbGVtZW50KCdoZWFkZXJfMScpOyIpKTsKKyAgICBF
WFBFQ1RfRVEoIkhlYWRlciAxLiIsIHNlbGVjdGlvbkFzU3RyaW5nKGZyYW1lKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKGZyYW1lLT5tb3ZlQ2FyZXQodG9wTGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAi
ZWRpdGFibGUiKSkpKTsKKworICAgIC8vIFNlbGVjdCB0aGUgZWRpdGFibGUgdGV4dCBzcGFuLiBO
b3cgbW92ZUNhcmV0KCkgd29ya3MuCisgICAgZnJhbWUtPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0
U291cmNlKCJzZWxlY3RFbGVtZW50KCdlZGl0YWJsZV8xJyk7IikpOworICAgIEVYUEVDVF9FUSgi
RWRpdGFibGUgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworCisgICAgRVhQRUNUX1RS
VUUoZnJhbWUtPm1vdmVDYXJldCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJlZGl0YWJs
ZV8xIikpKSk7CisgICAgRVhQRUNUX0VRKCIiLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOwor
ICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKS5pc051bGwoKSk7CisgICAg
RVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQoYm90dG9tUmlnaHRNaW51c09uZShl
bGVtZW50Qm91bmRzKGZyYW1lLCAiZWRpdGFibGVfMSIpKSwgZmFsc2UpKTsKKyAgICBFWFBFQ1Rf
RVEoIkVkaXRhYmxlIDEuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAgIEVYUEVD
VF9UUlVFKGZyYW1lLT5tb3ZlQ2FyZXQoYm90dG9tUmlnaHRNaW51c09uZShlbGVtZW50Qm91bmRz
KGZyYW1lLCAiZWRpdGFibGVfMiIpKSkpOworICAgIEVYUEVDVF9FUSgiIiwgc2VsZWN0aW9uQXNT
dHJpbmcoZnJhbWUpKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUtPnNlbGVjdGlvblJhbmdlKCku
aXNOdWxsKCkpOworICAgIEVYUEVDVF9UUlVFKGZyYW1lLT5tb3ZlU2VsZWN0aW9uU3RhcnQodG9w
TGVmdChlbGVtZW50Qm91bmRzKGZyYW1lLCAiZWRpdGFibGVfMiIpKSwgZmFsc2UpKTsKKyAgICBF
WFBFQ1RfRVEoIkVkaXRhYmxlIDIuIiwgc2VsZWN0aW9uQXNTdHJpbmcoZnJhbWUpKTsKKworICAg
IC8vIENhcmV0IGlzIHBpbm5lZCBhdCB0aGUgc3RhcnQgb2YgdGhlIGVkaXRhYmxlIHJlZ2lvbi4K
KyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZUNhcmV0KHRvcExlZnQoZWxlbWVudEJvdW5kcyhm
cmFtZSwgImhlYWRlcl8xIikpKSk7CisgICAgRVhQRUNUX0VRKCIiLCBzZWxlY3Rpb25Bc1N0cmlu
ZyhmcmFtZSkpOworICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+c2VsZWN0aW9uUmFuZ2UoKS5pc051
bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxlY3Rpb25FbmQoYm90dG9tUmln
aHRNaW51c09uZShlbGVtZW50Qm91bmRzKGZyYW1lLCAiZWRpdGFibGVfMSIpKSwgZmFsc2UpKTsK
KyAgICBFWFBFQ1RfRVEoIlsgRWRpdGFibGUgMS4iLCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkp
OworCisgICAgLy8gQ2FyZXQgaXMgcGlubmVkIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRhYmxlIHJl
Z2lvbi4KKyAgICBFWFBFQ1RfVFJVRShmcmFtZS0+bW92ZUNhcmV0KGJvdHRvbVJpZ2h0TWludXNP
bmUoZWxlbWVudEJvdW5kcyhmcmFtZSwgImZvb3Rlcl8yIikpKSk7CisgICAgRVhQRUNUX0VRKCIi
LCBzZWxlY3Rpb25Bc1N0cmluZyhmcmFtZSkpOworICAgIEVYUEVDVF9GQUxTRShmcmFtZS0+c2Vs
ZWN0aW9uUmFuZ2UoKS5pc051bGwoKSk7CisgICAgRVhQRUNUX1RSVUUoZnJhbWUtPm1vdmVTZWxl
Y3Rpb25TdGFydCh0b3BMZWZ0KGVsZW1lbnRCb3VuZHMoZnJhbWUsICJlZGl0YWJsZV8yIikpLCBm
YWxzZSkpOworICAgIEVYUEVDVF9FUSgiRWRpdGFibGUgMi4gXSIsIHNlbGVjdGlvbkFzU3RyaW5n
KGZyYW1lKSk7CisKKyAgICB3ZWJWaWV3LT5jbG9zZSgpOworfQorCiBjbGFzcyBEaXNhbWJpZ3Vh
dGlvblBvcHVwVGVzdFdlYlZpZXdDbGllbnQgOiBwdWJsaWMgV2ViVmlld0NsaWVudCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGRpZFRhcE11bHRpcGxlVGFyZ2V0cyhjb25zdCBXZWJHZXN0
dXJlRXZlbnQmLCBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIHRhcmdldFJlY3RzKSBPVkVSUklE
RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3RleHRfc2Vs
ZWN0aW9uLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvdGV4dF9zZWxl
Y3Rpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjA1ZTlhNTRmMDA3NDZiNmYzMmIxYjIyNzE5ZjE4MDNi
OTAyNDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3RleHRfc2VsZWN0aW9uLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbD4KKzxib2R5PgorCis8c3BhbiBpZD0iaGVhZGVyIj5bCis8c3BhbiBpZD0iaGVhZGVy
XzEiPkhlYWRlciAxLjwvc3Bhbj4KKzxzcGFuIGlkPSJoZWFkZXJfMiI+SGVhZGVyIDIuPC9zcGFu
PgorXTwvc3Bhbj4KKworPHNwYW4gaWQ9ImVkaXRhYmxlIiBjb250ZW50ZWRpdGFibGU9InRydWUi
PlsKKzxzcGFuIGlkPSJlZGl0YWJsZV8xIj5FZGl0YWJsZSAxLjwvc3Bhbj4KKzxzcGFuIGlkPSJl
ZGl0YWJsZV8yIj5FZGl0YWJsZSAyLjwvc3Bhbj4KK108L3NwYW4+CisKKzxzcGFuIGlkPSJmb290
ZXIiPlsKKzxzcGFuIGlkPSJmb290ZXJfMSI+Rm9vdGVyIDEuPC9zcGFuPgorPHNwYW4gaWQ9ImZv
b3Rlcl8yIj5Gb290ZXIgMi48L3NwYW4+CitdPC9zcGFuPgorCis8c2NyaXB0PgorZnVuY3Rpb24g
c2VsZWN0RWxlbWVudChpZCkgeworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKGlkKTsKKyAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKKyAgcmFuZ2Uu
c2VsZWN0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpOworICB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7CisgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRS
YW5nZShyYW5nZSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>