<?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>173698</bug_id>
          
          <creation_ts>2017-06-22 00:23:12 -0700</creation_ts>
          <short_desc>Web Inspector: Pausing with a deep call stack can be very slow, avoid eagerly generating object previews</short_desc>
          <delta_ts>2017-06-22 14:12:21 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>buildbot</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mattbaker</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321787</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-22 00:23:12 -0700</bug_when>
    <thetext>Pausing with a deep call stack can be very slow, avoid eagerly generating object previews.

Test:
&lt;script&gt;
var count = 0;
function f() {
    if (++count &gt; 1000)
        throw new Error;
    f();
}
f();
&lt;/script&gt;

Steps to Reproduce:
1. Inspect attached test page
2. Enable Pause on Uncaught Exceptions
3. Reload the page (triggers the exception)
  =&gt; Pause, takes a very long time to show debugger UI

Notes:
We spend about 95% of the time in the backend generating object previews for each of the 1000 CallFrame&apos;s `thisObject`. Which is the `window` in this example. We can avoid generating the ObjectPreview eagerly (here), and instead generate them lazily if we ever need to see them in the frontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321790</commentid>
    <comment_count>1</comment_count>
      <attachid>313593</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-22 00:39:21 -0700</bug_when>
    <thetext>Created attachment 313593
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321793</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-22 00:41:31 -0700</bug_when>
    <thetext>Attachment 313593 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.h:65:  The parameter name &quot;preview&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321940</commentid>
    <comment_count>3</comment_count>
      <attachid>313593</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-06-22 10:05:47 -0700</bug_when>
    <thetext>Comment on attachment 313593
[PATCH] Proposed Fix

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

&gt; LayoutTests/ChangeLog:10
&gt; +        Test the new protocol commnand `Runtime.getPreview` as well as the frontend

commnand -&gt; command

&gt; LayoutTests/inspector/debugger/tail-deleted-frames-this-value.html:12
&gt; +    

Remove whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321976</commentid>
    <comment_count>4</comment_count>
      <attachid>313593</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-06-22 11:22:39 -0700</bug_when>
    <thetext>Comment on attachment 313593
[PATCH] Proposed Fix

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

I&apos;ve gotten through the tests, will continue with backend/frontend.

&gt; LayoutTests/inspector/debugger/tail-deleted-frames-this-value.html:51
&gt; +            if (callFrame.thisObject.canLoadPreview()) {

Should we also assert that callFrame.thisObject.canLoadPreview()? Later it&apos;s assumed that every call frame was mapped to a Promise, and access callFrame.thisObject.preview for every frame.

&gt; LayoutTests/inspector/debugger/tail-deleted-frames-this-value.html:70
&gt; +                InspectorTest.expectThat(expectedFrame.thisValue[0] === prop.name, `&apos;this&apos; value should have expected property: ${expectedFrame.thisValue[0]}`);

Could use InspectorTest.expectEqual here.

&gt; LayoutTests/inspector/runtime/getPreview-expected.txt:28
&gt; +PASS: RemoteObject.updatePreview should return null for a object RemoteObject.

This last result seemed strange at first, until reading the test code and seeing that it&apos;s the fake remote object.

&gt; LayoutTests/inspector/runtime/getPreview-expected.txt:46
&gt; +Error: Could not find InjectedScript for objectId

Nit: include a period at end of sentence, to match the lines above.

&gt; LayoutTests/inspector/runtime/getPreview.html:8
&gt; +    InspectorTest.debug();

Remove InspectorTest.debug();

&gt; LayoutTests/inspector/runtime/getPreview.html:60
&gt; +            function testRemoteObject(remoteObject, type) {

`type` isn&apos;t used. Was it meant to be included in test output instead of ${remoteObject.type}?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321981</commentid>
    <comment_count>5</comment_count>
      <attachid>313593</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-22 11:28:07 -0700</bug_when>
    <thetext>Comment on attachment 313593
[PATCH] Proposed Fix

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

&gt;&gt; LayoutTests/inspector/debugger/tail-deleted-frames-this-value.html:51
&gt;&gt; +            if (callFrame.thisObject.canLoadPreview()) {
&gt; 
&gt; Should we also assert that callFrame.thisObject.canLoadPreview()? Later it&apos;s assumed that every call frame was mapped to a Promise, and access callFrame.thisObject.preview for every frame.

Nope. The `thisObject` of a CallFrame could be null, or a primitive value, and I believe that is the case in this test.

I&apos;m not sure what you mean by call frame&apos;s being mapped to promises. Here we are calling `updatePreview` only on a few call frames, and wait for all of those requests to finish (having updated the RemoteObjects in place) before proceeding to loop over all call frames.

&gt;&gt; LayoutTests/inspector/runtime/getPreview-expected.txt:28
&gt;&gt; +PASS: RemoteObject.updatePreview should return null for a object RemoteObject.
&gt; 
&gt; This last result seemed strange at first, until reading the test code and seeing that it&apos;s the fake remote object.

Ahh yea, I&apos;ll use that extra `type` argument to clarify this case!

&gt;&gt; LayoutTests/inspector/runtime/getPreview-expected.txt:46
&gt;&gt; +Error: Could not find InjectedScript for objectId
&gt; 
&gt; Nit: include a period at end of sentence, to match the lines above.

This is just logging the exact protocol `error` value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321993</commentid>
    <comment_count>6</comment_count>
      <attachid>313593</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2017-06-22 11:41:03 -0700</bug_when>
    <thetext>Comment on attachment 313593
[PATCH] Proposed Fix

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

Nice work, r=me with a few nits/comments.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        the `thisObject` of each of the call frame&apos;s. In some cases, this could be more

No apostrophe in frames.

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:240
&gt; +        var object = this._objectForId(parsedObjectId);

Nit: The rest of the file still uses var, but why not use let for new code?

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:475
&gt; +        var result = evalFunction.call(object, expression, commandLineAPI);

Nit: let

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:170
&gt; +    muteConsole();

This is such a common pattern in InspectorRuntimeAgent, I wonder if it would be worth making into a RAII-style guard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322052</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-22 14:12:21 -0700</bug_when>
    <thetext>&lt;https://trac.webkit.org/changeset/218718/webkit&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313593</attachid>
            <date>2017-06-22 00:39:21 -0700</date>
            <delta_ts>2017-06-22 11:41:03 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>getpreview-1.patch</filename>
            <type>text/plain</type>
            <size>33034</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5YTNlOTUwNmM2My4uN2E0NDllMzRhMDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAor
MjAxNy0wNi0yMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFBhdXNpbmcgd2l0aCBhIGRlZXAgY2FsbCBzdGFjayBjYW4gYmUg
dmVyeSBzbG93LCBhdm9pZCBlYWdlcmx5IGdlbmVyYXRpbmcgb2JqZWN0IHByZXZpZXdzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2OTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9y
dW50aW1lL2dldFByZXZpZXctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3IvcnVudGltZS9nZXRQcmV2aWV3Lmh0bWw6IEFkZGVkLgorICAgICAgICBUZXN0IHRoZSBuZXcg
cHJvdG9jb2wgY29tbW5hbmQgYFJ1bnRpbWUuZ2V0UHJldmlld2AgYXMgd2VsbCBhcyB0aGUgZnJv
bnRlbmQKKyAgICAgICAgbW9kZWwgbWV0aG9kIFJlbW90ZU9iamVjdC5wcm90b3R5cGUudXBkYXRl
UHJldmlldyB3aGljaCB1c2VzIGl0IHdpdGggaXRzCisgICAgICAgIG93biBzbGlnaHRseSBkaWZm
ZXJlbnQgc2VtYW50aWNzIGFib3V0IHdoZW4gaXQgc2hvdWxkIGJlIHVzZWQuCisKKyAgICAgICAg
KiBpbnNwZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLmh0bWw6
CisgICAgICAgIFRoaXMgdGVzdCB1c2VkIGBDYWxsRnJhbWUudGhpc09iamVjdC5wcmV2aWV3YCBz
byByZXdyaXRlIGl0IHRvIGZpcnN0CisgICAgICAgIGxvYWQgdGhlIHByZXZpZXcgYW5kIHRoZW4g
Y2hlY2sgdmFsdWVzIHdpdGggaXQuCisKIDIwMTctMDYtMjEgIEFudG9pbmUgUXVpbnQgIDxncmFv
dXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBDU1MgdGV4dCBwcm9wZXJ0aWVzIGFmZmVjdCA8dmlk
ZW8+IHNoYWRvdyByb290CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLmh0bWwKaW5kZXgg
NjA1ZTRlMjEyYjIuLjMzMDhlZjFjYzBkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZGVidWdnZXIvdGFpbC1kZWxldGVkLWZyYW1lcy10aGlzLXZhbHVlLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3RhaWwtZGVsZXRlZC1mcmFtZXMtdGhpcy12YWx1
ZS5odG1sCkBAIC05LDcgKzksNyBAQAogZnVuY3Rpb24gdGVzdCgpCiB7CiAgICAgdmFyIHNjcmlw
dE9iamVjdDsKLQorICAgIAogICAgIGZ1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlN0YXJ0aW5nIFRlc3QiKTsKICAgICAgICAgLy8gMCBiYXNlZCBpbmRp
Y2VzLgpAQCAtNDQsMjMgKzQ0LDM2IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0KGNhbGxGcmFtZXMubGVuZ3RoID49IGV4cGVjdGVkRnJhbWVzLmxlbmd0
aCk7CiAKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHBlY3RlZEZyYW1lcy5sZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgbGV0IGNhbGxGcmFtZSA9IGNhbGxGcmFtZXNbaV07Ci0gICAg
ICAgICAgICBsZXQgZXhwZWN0ZWRGcmFtZSA9IGV4cGVjdGVkRnJhbWVzW2ldOwotICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkV4cGVjdGVkIGZyYW1lOiAiICsgSlNPTi5zdHJpbmdpZnko
ZXhwZWN0ZWRGcmFtZSkpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoY2FsbEZy
YW1lLmZ1bmN0aW9uTmFtZSA9PT0gZXhwZWN0ZWRGcmFtZS5mdW5jdGlvbk5hbWUpOwotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoY2FsbEZyYW1lLmlzVGFpbERlbGV0ZWQgPT09IGV4
cGVjdGVkRnJhbWUuaXNUYWlsRGVsZXRlZCk7Ci0KLSAgICAgICAgICAgIGxldCB0aGlzT2JqZWN0
ID0gY2FsbEZyYW1lLnRoaXNPYmplY3Q7Ci0gICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IHRo
aXNPYmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZpZXdzOwotICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnQocHJvcGVydGllcy5sZW5ndGggPT09IDEpOwotICAgICAgICAgICAgbGV0IHBy
b3AgPSBwcm9wZXJ0aWVzWzBdOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0
KGV4cGVjdGVkRnJhbWUudGhpc1ZhbHVlWzBdID09PSBwcm9wLm5hbWUsIGAndGhpcycgdmFsdWUg
c2hvdWxkIGhhdmUgZXhwZWN0ZWQgcHJvcGVydHk6ICR7ZXhwZWN0ZWRGcmFtZS50aGlzVmFsdWVb
MF19YCk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCgnJyArIGV4cGVjdGVkRnJh
bWUudGhpc1ZhbHVlWzFdID09PSBwcm9wLnZhbHVlLCBgJ3RoaXMnIHZhbHVlIG9iamVjdCBzaG91
bGQgaGF2ZSBleHBlY3RlZCBwcm9wZXJ0eSB2YWx1ZTogJHtleHBlY3RlZEZyYW1lLnRoaXNWYWx1
ZVsxXX1gKTsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QucGFzcyhgQ2FsbCBGcmFtZSAke2l9
ICd0aGlzJyB2YWx1ZSBpcyBjb3JyZWN0LmApOworICAgICAgICAvLyBSZXNvbHZlIGEgdGhpc09i
amVjdCBwcmV2aWV3IG9uIGVhY2ggb2YgdGhlIENhbGxGcmFtZXMuCisgICAgICAgIGxldCBwcm9t
aXNlcyA9IFtdOworICAgICAgICBmb3IgKGxldCBjYWxsRnJhbWUgb2YgY2FsbEZyYW1lcykgewor
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIWNhbGxGcmFtZS50aGlzT2JqZWN0LnBy
ZXZpZXcsICJ0aGlzT2JqZWN0IHNob3VsZCBub3QgaGF2ZSBhIHByZXZpZXciKTsKKyAgICAgICAg
ICAgIGlmIChjYWxsRnJhbWUudGhpc09iamVjdC5jYW5Mb2FkUHJldmlldygpKSB7CisgICAgICAg
ICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7
CisgICAgICAgICAgICAgICAgICAgIGNhbGxGcmFtZS50aGlzT2JqZWN0LnVwZGF0ZVByZXZpZXco
cmVzb2x2ZSk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKKyAgICAg
ICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4geworICAgICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBleHBlY3RlZEZyYW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIGxldCBjYWxsRnJhbWUgPSBjYWxsRnJhbWVzW2ldOworICAgICAgICAgICAgICAgIGxldCBl
eHBlY3RlZEZyYW1lID0gZXhwZWN0ZWRGcmFtZXNbaV07CisgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5sb2coIkV4cGVjdGVkIGZyYW1lOiAiICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRG
cmFtZSkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KGNhbGxGcmFtZS5m
dW5jdGlvbk5hbWUgPT09IGV4cGVjdGVkRnJhbWUuZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChjYWxsRnJhbWUuaXNUYWlsRGVsZXRlZCA9PT0gZXhw
ZWN0ZWRGcmFtZS5pc1RhaWxEZWxldGVkKTsKKworICAgICAgICAgICAgICAgIGxldCB0aGlzT2Jq
ZWN0ID0gY2FsbEZyYW1lLnRoaXNPYmplY3Q7CisgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRp
ZXMgPSB0aGlzT2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2aWV3czsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFzc2VydChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSk7CisgICAgICAg
ICAgICAgICAgbGV0IHByb3AgPSBwcm9wZXJ0aWVzWzBdOworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuZXhwZWN0VGhhdChleHBlY3RlZEZyYW1lLnRoaXNWYWx1ZVswXSA9PT0gcHJvcC5u
YW1lLCBgJ3RoaXMnIHZhbHVlIHNob3VsZCBoYXZlIGV4cGVjdGVkIHByb3BlcnR5OiAke2V4cGVj
dGVkRnJhbWUudGhpc1ZhbHVlWzBdfWApOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YXNzZXJ0KCcnICsgZXhwZWN0ZWRGcmFtZS50aGlzVmFsdWVbMV0gPT09IHByb3AudmFsdWUsIGAn
dGhpcycgdmFsdWUgb2JqZWN0IHNob3VsZCBoYXZlIGV4cGVjdGVkIHByb3BlcnR5IHZhbHVlOiAk
e2V4cGVjdGVkRnJhbWUudGhpc1ZhbHVlWzFdfWApOworICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QucGFzcyhgQ2FsbCBGcmFtZSAke2l9ICd0aGlzJyB2YWx1ZSBpcyBjb3JyZWN0LmApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LnJlc3VtZSgpOworICAgICAgICB9KTsKICAgICB9KTsKIAogICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2Vy
LkV2ZW50LlJlc3VtZWQsIGZ1bmN0aW9uKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcnVudGltZS9nZXRQcmV2aWV3LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9ydW50aW1lL2dldFByZXZpZXctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZGExYWM2OTRiZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9ydW50aW1lL2dldFByZXZpZXctZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNDcgQEAKK1Rlc3RzIGZvciB0aGUgUnVudGltZS5nZXRQcmV2aWV3IGNvbW1hbmQg
YW5kIGFzc29jaWF0ZWQgUmVtb3RlT2JqZWN0LnByb3RvdHlwZS51cGRhdGVQcmV2aWV3LgorCisK
Kz09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogUnVudGltZS5nZXRQcmV2aWV3CistLSBSdW5uaW5nIHRl
c3QgY2FzZTogUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcuT2JqZWN0V2l0aG91dFByZXZpZXcK
K1BBU1M6IFJlbW90ZU9iamVjdCBzaG91bGQgbm90IGhhdmUgYSBwcmV2aWV3LgorUEFTUzogUmVt
b3RlT2JqZWN0IHNob3VsZCBiZSBhYmxlIHRvIGxvYWQgYSBwcmV2aWV3LgorUEFTUzogUmVtb3Rl
T2JqZWN0LnVwZGF0ZVByZXZpZXcgc2hvdWxkIHByb2R1Y2UgYW4gT2JqZWN0UHJldmlldy4KK1BB
U1M6IFJlbW90ZU9iamVjdC5wcmV2aWV3IHNob3VsZCBiZSB0aGUgc2FtZSBvYmplY3QgYXMgdGhl
IGNhbGxiYWNrLgorUEFTUzogUHJldmlldyBzaG91bGQgaGF2ZSAyIHByb3BlcnRpZXMuCisKKy0t
IFJ1bm5pbmcgdGVzdCBjYXNlOiBSZW1vdGVPYmplY3QudXBkYXRlUHJldmlldy5PYmplY3RXaXRo
UHJldmlldworUEFTUzogUmVtb3RlT2JqZWN0IHNob3VsZCBoYXZlIGEgcHJldmlldy4KK1BBU1M6
IFJlbW90ZU9iamVjdCBzaG91bGQgYmUgYWJsZSB0byBsb2FkIGEgcHJldmlldy4KK1BBU1M6IE9y
aWdpbmFsIHByZXZpZXcgc2hvdWxkIGhhdmUgMyBwcm9wZXJ0aWVzLgorUEFTUzogUmVtb3RlT2Jq
ZWN0LnVwZGF0ZVByZXZpZXcgc2hvdWxkIHByb2R1Y2UgYW4gT2JqZWN0UHJldmlldy4KK1BBU1M6
IFJlbW90ZU9iamVjdC5wcmV2aWV3IHNob3VsZCBiZSB0aGUgc2FtZSBvYmplY3QgYXMgdGhlIGNh
bGxiYWNrLgorUEFTUzogUHJldmlldyBzaG91bGQgbm93IGhhdmUgNCBwcm9wZXJ0aWVzLgorCist
LSBSdW5uaW5nIHRlc3QgY2FzZTogUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcuTm9uT2JqZWN0
CitQQVNTOiBTaG91bGQgbm90IGJlIGFibGUgdG8gbG9hZCBhIHByZXZpZXcgZm9yIGEgYm9vbGVh
biBSZW1vdGVPYmplY3QuCitQQVNTOiBSZW1vdGVPYmplY3QudXBkYXRlUHJldmlldyBzaG91bGQg
cmV0dXJuIG51bGwgZm9yIGEgYm9vbGVhbiBSZW1vdGVPYmplY3QuCitQQVNTOiBTaG91bGQgbm90
IGJlIGFibGUgdG8gbG9hZCBhIHByZXZpZXcgZm9yIGEgbnVtYmVyIFJlbW90ZU9iamVjdC4KK1BB
U1M6IFJlbW90ZU9iamVjdC51cGRhdGVQcmV2aWV3IHNob3VsZCByZXR1cm4gbnVsbCBmb3IgYSBu
dW1iZXIgUmVtb3RlT2JqZWN0LgorUEFTUzogU2hvdWxkIG5vdCBiZSBhYmxlIHRvIGxvYWQgYSBw
cmV2aWV3IGZvciBhIHN0cmluZyBSZW1vdGVPYmplY3QuCitQQVNTOiBSZW1vdGVPYmplY3QudXBk
YXRlUHJldmlldyBzaG91bGQgcmV0dXJuIG51bGwgZm9yIGEgc3RyaW5nIFJlbW90ZU9iamVjdC4K
K1BBU1M6IFNob3VsZCBub3QgYmUgYWJsZSB0byBsb2FkIGEgcHJldmlldyBmb3IgYSBvYmplY3Qg
UmVtb3RlT2JqZWN0LgorUEFTUzogUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcgc2hvdWxkIHJl
dHVybiBudWxsIGZvciBhIG9iamVjdCBSZW1vdGVPYmplY3QuCisKKy0tIFJ1bm5pbmcgdGVzdCBj
YXNlOiBSZW1vdGVPYmplY3QudXBkYXRlUHJldmlldy5TeW1ib2wKK1BBU1M6IFNob3VsZCBub3Qg
YmUgYWJsZSB0byBsb2FkIGEgcHJldmlldyBmb3IgYSBzeW1ib2wgUmVtb3RlT2JqZWN0LgorUEFT
UzogUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcgc2hvdWxkIHJldHVybiBudWxsIGZvciBzeW1i
b2wgUmVtb3RlT2JqZWN0LgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogUmVtb3RlT2JqZWN0LnVw
ZGF0ZVByZXZpZXcuRnVuY3Rpb24KK1BBU1M6IFNob3VsZCBub3QgYmUgYWJsZSB0byBsb2FkIGEg
cHJldmlldyBmb3IgYSBmdW5jdGlvbiBSZW1vdGVPYmplY3QuCitQQVNTOiBSZW1vdGVPYmplY3Qu
dXBkYXRlUHJldmlldyBzaG91bGQgcmV0dXJuIG51bGwgZm9yIGZ1bmN0aW9uIFJlbW90ZU9iamVj
dC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IFJ1bnRpbWUuZ2V0UHJldmlldy5TeW1ib2wKK3si
dHlwZSI6InN5bWJvbCIsImRlc2NyaXB0aW9uIjoiU3ltYm9sKFN5bWJvbC5pdGVyYXRvcikiLCJs
b3NzbGVzcyI6dHJ1ZX0KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IFJ1bnRpbWUuZ2V0UHJldmll
dy5GdW5jdGlvbgoreyJ0eXBlIjoiZnVuY3Rpb24iLCJkZXNjcmlwdGlvbiI6ImZ1bmN0aW9uIGYo
KSB7fSIsImxvc3NsZXNzIjp0cnVlfQorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogUnVudGltZS5n
ZXRQcmV2aWV3LkludmFsaWRPYmplY3RJZAorUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3Iu
CitFcnJvcjogQ291bGQgbm90IGZpbmQgSW5qZWN0ZWRTY3JpcHQgZm9yIG9iamVjdElkCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9ydW50aW1lL2dldFByZXZpZXcuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9ydW50aW1lL2dldFByZXZpZXcuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2M4MzY0NzBkY2UKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcnVudGltZS9nZXRQcmV2aWV3Lmh0bWwKQEAgLTAs
MCArMSwxNTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvaW5zcGVjdG9yLXRlc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3BlY3RvclRl
c3QuZGVidWcoKTsKKworICAgIGxldCBzdWl0ZSA9IEluc3BlY3RvclRlc3QuY3JlYXRlQXN5bmNT
dWl0ZSgiUnVudGltZS5nZXRQcmV2aWV3Iik7CisKKyAgICAvLyAtLS0tLS0gUmVtb3RlT2JqZWN0
LnByb3RvdHlwZS51cGRhdGVQcmV2aWV3CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAg
ICAgIG5hbWU6ICJSZW1vdGVPYmplY3QudXBkYXRlUHJldmlldy5PYmplY3RXaXRob3V0UHJldmll
dyIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiU2hvdWxkIGJlIGFibGUgdG8gdXBkYXRlIHRoZSBw
cmV2aWV3IG9mIGEgUmVtb3RlT2JqZWN0IHdpdGhvdXQgYSBwcmV2aWV3LiIsCisgICAgICAgIHRl
c3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUu
aW52b2tlKHtleHByZXNzaW9uOiBgKHthOjEsIGI6Mn0pYCwgb2JqZWN0R3JvdXA6ICJ0ZXN0Iiwg
Z2VuZXJhdGVQcmV2aWV3OiBmYWxzZX0sIChlcnJvciwgcmVtb3RlT2JqZWN0UGF5bG9hZCkgPT4g
eworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KCFlcnJvciwgIlNob3VsZCBu
b3QgYmUgYSBwcm90b2NvbCBlcnJvci4iKTsKKyAgICAgICAgICAgICAgICBsZXQgcmVtb3RlT2Jq
ZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChyZW1vdGVPYmplY3RQ
YXlsb2FkKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoIXJlbW90
ZU9iamVjdC5wcmV2aWV3LCAiUmVtb3RlT2JqZWN0IHNob3VsZCBub3QgaGF2ZSBhIHByZXZpZXcu
Iik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KHJlbW90ZU9iamVj
dC5jYW5Mb2FkUHJldmlldygpLCAiUmVtb3RlT2JqZWN0IHNob3VsZCBiZSBhYmxlIHRvIGxvYWQg
YSBwcmV2aWV3LiIpOworICAgICAgICAgICAgICAgIHJlbW90ZU9iamVjdC51cGRhdGVQcmV2aWV3
KChwcmV2aWV3KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0
VGhhdChwcmV2aWV3IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLk9iamVjdFByZXZpZXcsICJSZW1v
dGVPYmplY3QudXBkYXRlUHJldmlldyBzaG91bGQgcHJvZHVjZSBhbiBPYmplY3RQcmV2aWV3LiIp
OworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVjdEVxdWFsKHJlbW90ZU9i
amVjdC5wcmV2aWV3LCBwcmV2aWV3LCAiUmVtb3RlT2JqZWN0LnByZXZpZXcgc2hvdWxkIGJlIHRo
ZSBzYW1lIG9iamVjdCBhcyB0aGUgY2FsbGJhY2suIik7CisgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZXhwZWN0RXF1YWwocmVtb3RlT2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2
aWV3cy5sZW5ndGgsIDIsICJQcmV2aWV3IHNob3VsZCBoYXZlIDIgcHJvcGVydGllcy4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsK
KyAgICAgICAgbmFtZTogIlJlbW90ZU9iamVjdC51cGRhdGVQcmV2aWV3Lk9iamVjdFdpdGhQcmV2
aWV3IiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJTaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgdGhl
IHByZXZpZXcgb2YgYSBSZW1vdGVPYmplY3Qgd2l0aCBhIHByZXZpZXcuIiwKKyAgICAgICAgdGVz
dChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZS5p
bnZva2Uoe2V4cHJlc3Npb246IGB3aW5kb3cuYWxwaGEgPSAoe2E6MSwgYjoyLCBjOjN9KWAsIG9i
amVjdEdyb3VwOiAidGVzdCIsIGdlbmVyYXRlUHJldmlldzogdHJ1ZX0sIChlcnJvciwgcmVtb3Rl
T2JqZWN0UGF5bG9hZCkgPT4geworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KCFlcnJvciwgIlNob3VsZCBub3QgYmUgYSBwcm90b2NvbCBlcnJvci4iKTsKKyAgICAgICAgICAg
ICAgICBsZXQgcmVtb3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5
bG9hZChyZW1vdGVPYmplY3RQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxQ
cmV2aWV3ID0gcmVtb3RlT2JqZWN0LnByZXZpZXc7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RUaGF0KHJlbW90ZU9iamVjdC5wcmV2aWV3LCAiUmVtb3RlT2JqZWN0IHNob3Vs
ZCBoYXZlIGEgcHJldmlldy4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4cGVj
dFRoYXQocmVtb3RlT2JqZWN0LmNhbkxvYWRQcmV2aWV3KCksICJSZW1vdGVPYmplY3Qgc2hvdWxk
IGJlIGFibGUgdG8gbG9hZCBhIHByZXZpZXcuIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5leHBlY3RFcXVhbChvcmlnaW5hbFByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGgs
IDMsICJPcmlnaW5hbCBwcmV2aWV3IHNob3VsZCBoYXZlIDMgcHJvcGVydGllcy4iKTsKKyAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKGB3aW5kb3cuYWxwaGEuZCA9
IDRgLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHJlbW90ZU9iamVjdC51cGRhdGVQcmV2
aWV3KChwcmV2aWV3KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmV4cGVjdFRoYXQocHJldmlldyBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5PYmplY3RQcmV2aWV3
LCAiUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcgc2hvdWxkIHByb2R1Y2UgYW4gT2JqZWN0UHJl
dmlldy4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1
YWwocmVtb3RlT2JqZWN0LnByZXZpZXcsIHByZXZpZXcsICJSZW1vdGVPYmplY3QucHJldmlldyBz
aG91bGQgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIHRoZSBjYWxsYmFjay4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0RXF1YWwocmVtb3RlT2JqZWN0LnByZXZp
ZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGgsIDQsICJQcmV2aWV3IHNob3VsZCBub3cgaGF2ZSA0
IHByb3BlcnRpZXMuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAg
bmFtZTogIlJlbW90ZU9iamVjdC51cGRhdGVQcmV2aWV3Lk5vbk9iamVjdCIsCisgICAgICAgIGRl
c2NyaXB0aW9uOiAiTm9uLW9iamVjdCBSZW1vdGVPYmplY3RzIHNob3VsZCBub3QgcmVxdWVzdCBh
IHByZXZpZXcuIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAgICAg
IGZ1bmN0aW9uIHRlc3RSZW1vdGVPYmplY3QocmVtb3RlT2JqZWN0LCB0eXBlKSB7CisgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFyZW1vdGVPYmplY3QuY2FuTG9hZFBy
ZXZpZXcoKSwgYFNob3VsZCBub3QgYmUgYWJsZSB0byBsb2FkIGEgcHJldmlldyBmb3IgYSAke3Jl
bW90ZU9iamVjdC50eXBlfSBSZW1vdGVPYmplY3QuYCk7CisgICAgICAgICAgICAgICAgcmVtb3Rl
T2JqZWN0LnVwZGF0ZVByZXZpZXcoKHByZXZpZXcpID0+IHsKKyAgICAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5leHBlY3ROdWxsKHByZXZpZXcsIGBSZW1vdGVPYmplY3QudXBkYXRlUHJl
dmlldyBzaG91bGQgcmV0dXJuIG51bGwgZm9yIGEgJHtyZW1vdGVPYmplY3QudHlwZX0gUmVtb3Rl
T2JqZWN0LmApOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB0ZXN0UmVtb3RlT2JqZWN0KFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVByaW1p
dGl2ZVZhbHVlKHRydWUpLCAiUHJpbWl0aXZlIEJvb2xlYW4iKTsKKyAgICAgICAgICAgIHRlc3RS
ZW1vdGVPYmplY3QoV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUo
MTAwKSwgIlByaW1pdGl2ZSBOdW1iZXIiKTsKKyAgICAgICAgICAgIHRlc3RSZW1vdGVPYmplY3Qo
V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUoInN0ciIpLCAiUHJp
bWl0aXZlIFN0cmluZyIpOworICAgICAgICAgICAgdGVzdFJlbW90ZU9iamVjdChXZWJJbnNwZWN0
b3IuUmVtb3RlT2JqZWN0LmNyZWF0ZUZha2VSZW1vdGVPYmplY3QoKSwgIkZha2UiKTsKKyAgICAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhyZXNvbHZl
KTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAg
ICBuYW1lOiAiUmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcuU3ltYm9sIiwKKyAgICAgICAgZGVz
Y3JpcHRpb246ICJOb24tb2JqZWN0IFJlbW90ZU9iamVjdHMgc2hvdWxkIG5vdCByZXF1ZXN0IGEg
cHJldmlldy4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZShgU3ltYm9sLml0ZXJhdG9yYCwgKGVycm9yLCBy
ZW1vdGVPYmplY3RQYXlsb2FkKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlbW90ZU9iamVj
dCA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocmVtb3RlT2JqZWN0UGF5
bG9hZCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFyZW1vdGVP
YmplY3QuY2FuTG9hZFByZXZpZXcoKSwgYFNob3VsZCBub3QgYmUgYWJsZSB0byBsb2FkIGEgcHJl
dmlldyBmb3IgYSAke3JlbW90ZU9iamVjdC50eXBlfSBSZW1vdGVPYmplY3QuYCk7CisgICAgICAg
ICAgICAgICAgcmVtb3RlT2JqZWN0LnVwZGF0ZVByZXZpZXcoKHByZXZpZXcpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3ROdWxsKHByZXZpZXcsIGBSZW1vdGVP
YmplY3QudXBkYXRlUHJldmlldyBzaG91bGQgcmV0dXJuIG51bGwgZm9yICR7cmVtb3RlT2JqZWN0
LnR5cGV9IFJlbW90ZU9iamVjdC5gKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFtZTogIlJlbW90ZU9iamVjdC51
cGRhdGVQcmV2aWV3LkZ1bmN0aW9uIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJOb24tb2JqZWN0
IFJlbW90ZU9iamVjdHMgc2hvdWxkIG5vdCByZXF1ZXN0IGEgcHJldmlldy4iLAorICAgICAgICB0
ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0
ZUluUGFnZShgZnVuY3Rpb24gZigpIHt9OyBmYCwgKGVycm9yLCByZW1vdGVPYmplY3RQYXlsb2Fk
KSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IFdlYkluc3BlY3Rvci5S
ZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocmVtb3RlT2JqZWN0UGF5bG9hZCk7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFyZW1vdGVPYmplY3QuY2FuTG9hZFByZXZp
ZXcoKSwgYFNob3VsZCBub3QgYmUgYWJsZSB0byBsb2FkIGEgcHJldmlldyBmb3IgYSAke3JlbW90
ZU9iamVjdC50eXBlfSBSZW1vdGVPYmplY3QuYCk7CisgICAgICAgICAgICAgICAgcmVtb3RlT2Jq
ZWN0LnVwZGF0ZVByZXZpZXcoKHByZXZpZXcpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5leHBlY3ROdWxsKHByZXZpZXcsIGBSZW1vdGVPYmplY3QudXBkYXRlUHJldmll
dyBzaG91bGQgcmV0dXJuIG51bGwgZm9yICR7cmVtb3RlT2JqZWN0LnR5cGV9IFJlbW90ZU9iamVj
dC5gKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIC0tLS0tLSBS
dW50aW1lLmdldFByZXZpZXcKKworICAgIHN1aXRlLmFkZFRlc3RDYXNlKHsKKyAgICAgICAgbmFt
ZTogIlJ1bnRpbWUuZ2V0UHJldmlldy5TeW1ib2wiLAorICAgICAgICBkZXNjcmlwdGlvbjogIlJ1
bnRpbWUuZ2V0UHJldmlldyBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHByZXZpZXcgZm9yIG5vbi1v
YmplY3RzLiIsCisgICAgICAgIHRlc3QocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKGBTeW1ib2wuaXRlcmF0b3JgLCAoZXJyb3IsIHJl
bW90ZU9iamVjdFBheWxvYWQpID0+IHsKKyAgICAgICAgICAgICAgICBsZXQgcmVtb3RlT2JqZWN0
ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChyZW1vdGVPYmplY3RQYXls
b2FkKTsKKyAgICAgICAgICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UHJldmlldyhyZW1vdGVPYmpl
Y3Qub2JqZWN0SWQsIChlcnJvciwgcmVzdWx0KSA9PiB7CisgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QubG9nKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpOworICAgICAgICAgICAgICAg
ICAgICByZXNvbHZlKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgIH0pOworCisgICAgc3VpdGUuYWRkVGVzdENhc2UoeworICAgICAgICBuYW1l
OiAiUnVudGltZS5nZXRQcmV2aWV3LkZ1bmN0aW9uIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJS
dW50aW1lLmdldFByZXZpZXcgc2hvdWxkIHJldHVybiBhbiBlbXB0eSBwcmV2aWV3IGZvciBub24t
b2JqZWN0cy4iLAorICAgICAgICB0ZXN0KHJlc29sdmUsIHJlamVjdCkgeworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZShgZnVuY3Rpb24gZigpIHt9OyBmYCwgKGVycm9y
LCByZW1vdGVPYmplY3RQYXlsb2FkKSA9PiB7CisgICAgICAgICAgICAgICAgbGV0IHJlbW90ZU9i
amVjdCA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQocmVtb3RlT2JqZWN0
UGF5bG9hZCk7CisgICAgICAgICAgICAgICAgUnVudGltZUFnZW50LmdldFByZXZpZXcocmVtb3Rl
T2JqZWN0Lm9iamVjdElkLCAoZXJyb3IsIHJlc3VsdCkgPT4geworICAgICAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZyhKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIC0tLS0tLQorCisgICAgc3VpdGUuYWRkVGVz
dENhc2UoeworICAgICAgICBuYW1lOiAiUnVudGltZS5nZXRQcmV2aWV3LkludmFsaWRPYmplY3RJ
ZCIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiSW52YWxpZCBvYmplY3RJZCBzaG91bGQgcHJvZHVj
ZSBhbmQgZXJyb3IuIiwKKyAgICAgICAgdGVzdChyZXNvbHZlLCByZWplY3QpIHsKKyAgICAgICAg
ICAgIGNvbnN0IG9iamVjdElkID0gIkRPRVNfTk9UX0VYSVNUIjsKKyAgICAgICAgICAgIFJ1bnRp
bWVBZ2VudC5nZXRQcmV2aWV3KG9iamVjdElkLCAoZXJyb3IpID0+IHsKKyAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmV4cGVjdFRoYXQoZXJyb3IsICJTaG91bGQgcHJvZHVjZSBhbiBlcnJv
ci4iKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRXJyb3I6ICIgKyBlcnJv
cik7CisgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBmb3Ig
dGhlIFJ1bnRpbWUuZ2V0UHJldmlldyBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIFJlbW90ZU9iamVj
dC5wcm90b3R5cGUudXBkYXRlUHJldmlldy48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCA3NTdlZThhOWNmMS4uYjY2ODNmMmMwMzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA2LTIyICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUGF1c2lu
ZyB3aXRoIGEgZGVlcCBjYWxsIHN0YWNrIGNhbiBiZSB2ZXJ5IHNsb3csIGF2b2lkIGVhZ2VybHkg
Z2VuZXJhdGluZyBvYmplY3QgcHJldmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MzY5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdoZW4gcGF1c2luZyBpbiBhIGRlZXAgY2FsbCBzdGFjayB0aGUg
bWFqb3JpdHkgb2YgdGhlIHRpbWUgc3BlbnQgaW4gSmF2YVNjcmlwdENvcmUKKyAgICAgICAgd2hl
biBwcmVwYXJpbmcgSW5zcGVjdG9yIHBhdXNlIGluZm9ybWF0aW9uIGlzIHNwZW50IGdlbmVyYXRp
bmcgb2JqZWN0IHByZXZpZXdzIGZvcgorICAgICAgICB0aGUgYHRoaXNPYmplY3RgIG9mIGVhY2gg
b2YgdGhlIGNhbGwgZnJhbWUncy4gSW4gc29tZSBjYXNlcywgdGhpcyBjb3VsZCBiZSBtb3JlCisg
ICAgICAgIHRoYW4gOTUlIG9mIHRoZSB0aW1lIGdlbmVyYXRpbmcgcGF1c2UgaW5mb3JtYXRpb24u
IEluIHRoZSBjb21tb24gY2FzZSwgb25seSBvbmUgb2YKKyAgICAgICAgdGhlc2UgKHRoZSB0b3Ag
ZnJhbWUpIHdpbGwgZXZlciBiZSBzZWVuIGJ5IHVzZXJzLiBUaGlzIGNoYW5nZSBhdm9pZHMgZWFn
ZXJseQorICAgICAgICBnZW5lcmF0aW5nIG9iamVjdCBwcmV2aWV3cyB1cCBmcm9udCBhbmQgbGV0
IHRoZSBmcm9udGVuZCByZXF1ZXN0IHByZXZpZXdzIGlmIHRoZXkKKyAgICAgICAgYXJlIG5lZWRl
ZC4KKworICAgICAgICBUaGlzIGludHJvZHVjZXMgdGhlIGBSdW50aW1lLmdldFByZXZpZXdgIHBy
b3RvY29sIGNvbW1hbmQuIFRoaXMgY2FuIGJlIHVzZWQgdG86CisKKyAgICAgICAgICAgIC0gR2V0
IGEgcHJldmlldyBmb3IgYSBSZW1vdGVPYmplY3QgdGhhdCBkaWQgbm90IGhhdmUgYSBwcmV2aWV3
IGJ1dCBjb3VsZC4KKyAgICAgICAgICAgIC0gVXBkYXRlIGEgcHJldmlldyBmb3IgYSBSZW1vdGVP
YmplY3QgdGhhdCBoYWQgYSBwcmV2aWV3LgorCisgICAgICAgIFRoaXMgcGF0Y2ggb25seSB1c2Vz
IGl0IGZvciB0aGUgZmlyc3QgY2FzZSwgYnV0IHRoZSBzZWNvbmQgaXMgdmFsaWQgYW5kIG1heSBi
ZQorICAgICAgICBzb21ldGhpbmcgd2Ugd2FudCB0byBkbyBpbiB0aGUgZnV0dXJlLgorCisgICAg
ICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAgICAgQSBuZXcgY29t
bWFuZCB0byBnZXQgYW4gdXAgdG8gZGF0ZSBwcmV2aWV3IGZvciBhbiBvYmplY3QuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0
UHJldmlldyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFBy
ZXZpZXcpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
Lmg6CisgICAgICAgIFBsdW1iaW5nIGZvciB0aGUgbmV3IGNvbW1hbmQuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanM6CisgICAgICAgIChJbmplY3RlZFNjcmlw
dC5wcm90b3R5cGUuZ2V0UHJldmlldyk6CisgICAgICAgIEltcGxlbWVudGF0aW9uIGp1c3QgdXNl
cyB0aGUgZXhpc3RpbmcgaGVscGVyLgorCisgICAgICAgIChJbmplY3RlZFNjcmlwdC5DYWxsRnJh
bWVQcm94eSk6CisgICAgICAgIERvIG5vdCBnZW5lcmF0ZSBhIHByZXZpZXcgZm9yIHRoZSB0aGlz
IG9iamVjdCBhcyBpdCBtYXkgbm90IGJlIHNob3duLgorICAgICAgICBMZXQgdGhlIGZyb250ZW5k
IHJlcXVlc3QgYSBwcmV2aWV3IGlmIGl0IHdhbnRzIG9yIG5lZWRzIG9uZS4KKwogMjAxNy0wNi0y
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFJlbW92ZSBzdGFsZSAicmF3U2NvcGVzIiBjb25jZXB0IHRoYXQgd2FzIG5ldmVy
IGF2YWlsYWJsZSBpbiBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggZWI5ZTE1M2JkM2QuLmM2OTEyYzFiMjgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cApAQCAtMTI1LDYgKzEyNSwyMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpmdW5jdGlvbkRldGFp
bHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgdmFsdQogICAgICpyZXN1
bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CiB9CiAKK3ZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZp
ZXc+KiByZXN1bHQpCit7CisgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksIEFTQ0lJTGl0ZXJhbCgiZ2V0UHJldmlldyIpLCBp
bnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcmVzdWx0VmFsdWU7CisgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1ZSk7Cisg
ICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZh
bHVlOjpUeXBlOjpPYmplY3QpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmco
ZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIklu
dGVybmFsIGVycm9yIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcmVzdWx0ID0g
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworfQorCiB2b2lkIEluamVjdGVk
U2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBib29sIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3Jp
cHRvcj4+KiBwcm9wZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCBBU0NJSUxpdGVyYWwoImdldFByb3Bl
cnRpZXMiKSwgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApp
bmRleCA0ZDIyNzExNGU4OC4uNzNkNGM3MGViMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1
ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVzdWx0
LCBQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIGdldEZ1bmN0
aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRy
PFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAgICB2b2lk
IGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldFBy
ZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0UHJvcGVy
dGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVy
dGllcywgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9j
b2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJ
ZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6
OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiByZXN1bHQpOwogICAgIHZvaWQgZ2V0SW50
ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6QXJyYXk8UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4qIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpp
bmRleCAyOTMyYWU3Y2IxMi4uZjQyZTZjZjhmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtMjM0LDYg
KzIzNCwxNCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfSwKIAorICAgIGdldFByZXZpZXc6IGZ1bmN0aW9uKG9iamVjdElkKQorICAg
IHsKKyAgICAgICAgdmFyIHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmpl
Y3RJZCk7CisgICAgICAgIHZhciBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmpl
Y3RJZCk7CisKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVh
dGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUob2JqZWN0LCB0cnVlKTsKKyAgICB9LAorCiAgICAgX2dl
dFByb3BlcnRpZXM6IGZ1bmN0aW9uKG9iamVjdElkLCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJhdGVQ
cmV2aWV3LCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpCiAgICAgewogICAgICAgICB2YXIgcGFyc2Vk
T2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKQEAgLTQ2NCw3ICs0NzIs
NyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29tbWFu
ZExpbmVBUEkgPSBuZXcgQmFzaWNDb21tYW5kTGluZUFQSShpc0V2YWxPbkNhbGxGcmFtZSA/IG9i
amVjdCA6IG51bGwpOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWxGdW5j
dGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29tbWFuZExpbmVBUEkpOyAgICAgICAgCisg
ICAgICAgIHZhciByZXN1bHQgPSBldmFsRnVuY3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Npb24s
IGNvbW1hbmRMaW5lQVBJKTsKICAgICAgICAgaWYgKHNhdmVSZXN1bHQpCiAgICAgICAgICAgICB0
aGlzLl9zYXZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMjk4
LDcgKzEzMDYsNyBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eSA9IGZ1bmN0aW9uKG9y
ZGluYWwsIGNhbGxGcmFtZSkKICAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IGNhbGxGcmFtZS5mdW5j
dGlvbk5hbWU7CiAgICAgdGhpcy5sb2NhdGlvbiA9IHtzY3JpcHRJZDogU3RyaW5nKGNhbGxGcmFt
ZS5zb3VyY2VJRCksIGxpbmVOdW1iZXI6IGNhbGxGcmFtZS5saW5lLCBjb2x1bW5OdW1iZXI6IGNh
bGxGcmFtZS5jb2x1bW59OwogICAgIHRoaXMuc2NvcGVDaGFpbiA9IHRoaXMuX3dyYXBTY29wZUNo
YWluKGNhbGxGcmFtZSk7Ci0gICAgdGhpcy50aGlzID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmpl
Y3QoY2FsbEZyYW1lLnRoaXNPYmplY3QsICJiYWNrdHJhY2UiLCBmYWxzZSwgdHJ1ZSk7CisgICAg
dGhpcy50aGlzID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmplY3QoY2FsbEZyYW1lLnRoaXNPYmpl
Y3QsICJiYWNrdHJhY2UiKTsKICAgICB0aGlzLmlzVGFpbERlbGV0ZWQgPSBjYWxsRnJhbWUuaXNU
YWlsRGVsZXRlZDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZDQy
Yzg5NjhjODIuLjRkNjFmNDkxMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
QEAgLTE1OCw2ICsxNTgsMjMgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5j
dGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICB9CiB9CiAK
K3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQoreworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChvYmplY3RJZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFs
dWUoKSkgeworICAgICAgICBlcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IGZp
bmQgSW5qZWN0ZWRTY3JpcHQgZm9yIG9iamVjdElkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBwcmV2aW91
c1BhdXNlT25FeGNlcHRpb25zU3RhdGUgPSBzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKG1fc2Ny
aXB0RGVidWdTZXJ2ZXIsIFNjcmlwdERlYnVnU2VydmVyOjpEb250UGF1c2VPbkV4Y2VwdGlvbnMp
OworICAgIG11dGVDb25zb2xlKCk7CisKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcmV2aWV3KGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgJnByZXZpZXcpOworCisgICAgdW5tdXRlQ29uc29sZSgpOwor
ICAgIHNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUobV9zY3JpcHREZWJ1Z1NlcnZlciwgcHJldmlv
dXNQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKTsKK30KKwogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBib29sKiBjb25zdCBvd25Qcm9wZXJ0aWVzLCBjb25zdCBib29sKiBj
b25zdCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCmluZGV4IDJkMmY2MjZlY2YyLi4wYTU4YTEzOGM1YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyogY29uc3Qgb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGNvbnN0IGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogY29uc3QgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBjb25zdCBpbnQqIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCog
Y29uc3QgcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogY29uc3QgZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBjb25zdCBzYXZlUmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGlu
dD4qIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwogICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBj
b25zdCBib29sKiBjb25zdCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNv
bnN0IGJvb2wqIGNvbnN0IHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGNvbnN0IGdlbmVyYXRl
UHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJv
d24pIGZpbmFsOwogICAgIHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVy
cm9yU3RyaW5nJiBvYmplY3RJZCkgZmluYWw7CisgICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KSBmaW5hbDsKICAgICB2b2lkIGdldFBy
b3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29s
KiBjb25zdCBvd25Qcm9wZXJ0aWVzLCBjb25zdCBib29sKiBjb25zdCBnZW5lcmF0ZVByZXZpZXcs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9w
ZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsKICAgICB2b2lkIGdl
dERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IGJvb2wqIGNvbnN0IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVz
Y3JpcHRvcj4+JiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBp
bnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwogICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJpZXMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG9iamVjdEdyb3VwLCBjb25zdCBpbnQqIGNvbnN0IHN0YXJ0SW5kZXgsIGNvbnN0IGludCogY29u
c3QgbnVtYmVyVG9GZXRjaCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKSBmaW5h
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
UnVudGltZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9S
dW50aW1lLmpzb24KaW5kZXggYzQxNjkzYzc5NTguLmE0MWYyM2I4YWZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgpA
QCAtMjQzLDYgKzI0MywxNiBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNhbGxzIGZ1
bmN0aW9uIHdpdGggZ2l2ZW4gZGVjbGFyYXRpb24gb24gdGhlIGdpdmVuIG9iamVjdC4gT2JqZWN0
IGdyb3VwIG9mIHRoZSByZXN1bHQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHRhcmdldCBvYmplY3Qu
IgogICAgICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJnZXRQcmV2aWV3
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIGEgcHJldmlldyBmb3IgdGhl
IGdpdmVuIG9iamVjdC4iLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJvYmplY3RJZCIsICIkcmVmIjogIlJlbW90ZU9iamVjdElkIiwgImRl
c2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIG9iamVjdCB0byByZXR1cm4gYSBwcmV2aWV3
IGZvci4iIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInByZXZpZXciLCAiJHJlZiI6ICJPYmplY3RQcmV2aWV3IiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAgICJuYW1l
IjogImdldFByb3BlcnRpZXMiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJvYmplY3RJZCIsICIkcmVmIjogIlJlbW90ZU9iamVjdElkIiwg
ImRlc2NyaXB0aW9uIjogIklkZW50aWZpZXIgb2YgdGhlIG9iamVjdCB0byByZXR1cm4gcHJvcGVy
dGllcyBmb3IuIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggNzU1NDY1ZWQxYzkuLjIz
NzM3NDY2YzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAx
Ny0wNi0yMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFBhdXNpbmcgd2l0aCBhIGRlZXAgY2FsbCBzdGFjayBjYW4gYmUgdmVy
eSBzbG93LCBhdm9pZCBlYWdlcmx5IGdlbmVyYXRpbmcgb2JqZWN0IHByZXZpZXdzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM2OTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgUmVtb3Rl
T2JqZWN0LnByb3RvdHlwZS51cGRhdGVQcmV2aWV3IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHVwZGF0
ZQorICAgICAgICB0aGUgcHJldmlldyBvZiBhIFJlbW90ZU9iamVjdCB3aXRoIGEgY3VycmVudCB2
aWV3IGZvciB0aGUgb2JqZWN0LiBDdXJyZW50bHkKKyAgICAgICAgd2Ugb25seSB1c2UgdGhpcyB0
byBmZXRjaCB0aGUgcHJldmlldyB0aGF0IHdlIGRpZCBub3QgaGF2ZSBmb3IgdGhlIGB0aGlzT2Jq
ZWN0YAorICAgICAgICBpbiB0aGUgc2NvcGUgY2hhaW4gc2lkZWJhci4gSG93ZXZlciB0aGlzIGNv
dWxkIGJlIHVzZWQgZ2VuZXJpY2FsbHkgdG8gdXBkYXRlCisgICAgICAgIGEgUmVtb3RlT2JqZWN0
J3MgcHJldmlldyAoT2JqZWN0UHJldmlldykgYXQgYW55IHRpbWUuCisKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1Byb3RvY29sL1JlbW90ZU9iamVjdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3QucHJvdG90eXBlLmNhbkxvYWRQcmV2aWV3KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZW1vdGVPYmplY3QucHJvdG90eXBlLnVwZGF0ZVByZXZpZXcpOgorICAgICAgICBB
bGxvdyBhIFJlbW90ZU9iamVjdCB0byB1cGRhdGUgaXRzIHByZXZpZXcgcHJvcGVydHkuIFNpbmNl
IHRoaXMgb25seSBtYWtlcworICAgICAgICBzZW5zZSBvbiBjZXJ0YWluIE9iamVjdCB2YWx1ZXMg
aW5jbHVkZSBhIGhlbHBlciB0byBrbm93IHdoZW4gaXQgaXMgYXBwcm9wcmlhdGUKKyAgICAgICAg
dG8gZmV0Y2ggYSBwcmV2aWV3LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9PYmpl
Y3RUcmVlUHJvcGVydHlUcmVlRWxlbWVudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmpl
Y3RUcmVlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUuX2NyZWF0ZVRpdGxlUHJvcGVydHlT
dHlsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVByb3BlcnR5VHJlZUVsZW1l
bnQucHJvdG90eXBlLl9sb2FkUHJldmlld0xhemlseUlmTmVlZGVkKToKKyAgICAgICAgSWYgdGhl
IG9iamVjdCBiZWluZyBzaG93biBpbiB0aGUgc2lkZWJhciBkb2VzIG5vdCBoYXZlIGEgcHJldmll
dyBidXQgY2FuIGxvYWQgYQorICAgICAgICBwcmV2aWV3IHRoZW4gYXR0ZW1wdCB0byBsb2FkIGl0
IGxhemlseS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgdGhlIGB0aGlzT2JqZWN0YAorICAgICAgICB3
aGljaCBpcyBpbmplY3RlZCBpbnRvIGFuIE9iamVjdFRyZWUgaW4gdGhlIHNjb3BlIGNoYWluIHNp
ZGViYXIuCisKIDIwMTctMDYtMjAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNoYW5nZSB0aGUgc2VsZWN0ZWQgU2NvcGVCYXJJdGVt
IG9uIG1vdXNlZG93biBpbnN0ZWFkIG9mIGNsaWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9SZW1vdGVPYmplY3QuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9SZW1vdGVPYmplY3QuanMKaW5k
ZXggMjQwMjVlMmEzZjMuLjRiYTY5MGU2N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9SZW1vdGVPYmplY3QuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvUmVtb3RlT2JqZWN0LmpzCkBA
IC0yMzEsNiArMjMxLDQ1IEBAIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QgPSBjbGFzcyBSZW1v
dGVPYmplY3QKICAgICAgICAgcmV0dXJuICJfdmFsdWUiIGluIHRoaXM7CiAgICAgfQogCisgICAg
Y2FuTG9hZFByZXZpZXcoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2ZhaWxlZFRvTG9hZFBy
ZXZpZXcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHRoaXMuX3R5
cGUgIT09ICJvYmplY3QiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICghdGhpcy5fb2JqZWN0SWQgfHwgdGhpcy5faXNTeW1ib2woKSB8fCB0aGlzLl9pc0Zha2VPYmpl
Y3QoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB1cGRhdGVQcmV2aWV3KGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLmNhbkxvYWRQcmV2aWV3KCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFSdW50aW1lQWdl
bnQuZ2V0UHJldmlldykgeworICAgICAgICAgICAgdGhpcy5fZmFpbGVkVG9Mb2FkUHJldmlldyA9
IHRydWU7CisgICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3RhcmdldC5SdW50aW1lQWdlbnQuZ2V0UHJldmll
dyh0aGlzLl9vYmplY3RJZCwgKGVycm9yLCBwYXlsb2FkKSA9PiB7CisgICAgICAgICAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9mYWlsZWRUb0xvYWRQcmV2aWV3ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX3ByZXZpZXcgPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0UHJldmlldy5mcm9tUGF5bG9hZChwYXlsb2FkKTsKKyAgICAgICAgICAgIGNh
bGxiYWNrKHRoaXMuX3ByZXZpZXcpOworICAgICAgICB9KTsKKyAgICB9CisKICAgICBnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JzKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdGhpcy5fZ2V0UHJv
cGVydHlEZXNjcmlwdG9ycyh0cnVlLCBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9PYmplY3RUcmVlUHJvcGVydHlUcmVlRWxl
bWVudC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL09iamVj
dFRyZWVQcm9wZXJ0eVRyZWVFbGVtZW50LmpzCmluZGV4IDZlN2JlOTYzZDM1Li5jNTM5YjgzMWIw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
T2JqZWN0VHJlZVByb3BlcnR5VHJlZUVsZW1lbnQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvT2JqZWN0VHJlZVByb3BlcnR5VHJlZUVsZW1lbnQuanMK
QEAgLTE2MCw2ICsxNjAsOCBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVByb3BlcnR5VHJlZUVs
ZW1lbnQgPSBjbGFzcyBPYmplY3RUcmVlUHJvcGVydHlUcmVlRWxlbWVudAogICAgICAgICAgICAg
ICAgIHRoaXMuX3ByZXZpZXdWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcmV2aWV3Vmll
dyhyZXNvbHZlZFZhbHVlLnByZXZpZXcpOwogICAgICAgICAgICAgICAgIHZhbHVlT3JHZXR0ZXJF
bGVtZW50ID0gdGhpcy5fcHJldmlld1ZpZXcuZWxlbWVudDsKICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgdGhpcy5fbG9hZFByZXZpZXdMYXppbHlJZk5lZWRlZCgpOworCiAg
ICAgICAgICAgICAgICAgdmFsdWVPckdldHRlckVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuRm9ybWF0
dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclJlbW90ZU9iamVjdChyZXNvbHZlZFZhbHVlLCB0aGlz
LmhhZEVycm9yKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGEgZnVuY3Rp
b24gcHJvcGVydHkgc3RyaW5nLgpAQCAtMjIwLDYgKzIyMiwyMiBAQCBXZWJJbnNwZWN0b3IuT2Jq
ZWN0VHJlZVByb3BlcnR5VHJlZUVsZW1lbnQgPSBjbGFzcyBPYmplY3RUcmVlUHJvcGVydHlUcmVl
RWxlbWVudAogICAgICAgICByZXR1cm4gY29udGFpbmVyOwogICAgIH0KIAorICAgIF9sb2FkUHJl
dmlld0xhemlseUlmTmVlZGVkKCkKKyAgICB7CisgICAgICAgIGxldCByZXNvbHZlZFZhbHVlID0g
dGhpcy5yZXNvbHZlZFZhbHVlKCk7CisgICAgICAgIGlmICghcmVzb2x2ZWRWYWx1ZS5jYW5Mb2Fk
UHJldmlldygpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHJlc29sdmVkVmFsdWUu
dXBkYXRlUHJldmlldygocHJldmlldykgPT4geworICAgICAgICAgICAgaWYgKHByZXZpZXcpIHsK
KyAgICAgICAgICAgICAgICB0aGlzLm1haW5UaXRsZSA9IHRoaXMuX3RpdGxlRnJhZ21lbnQoKTsK
KworICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9wcmV2aWV3Vmlldy5zaG93VGl0bGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSk7CisgICAgfQorCiAgICAgX2Fsd2F5c0Rpc3BsYXlBc1Byb3BlcnR5KCkKICAgICB7CiAgICAg
ICAgIC8vIENvbnN0cnVjdG9yLCB0aG91Z2ggYSBmdW5jdGlvbiwgaXMgb2Z0ZW4gYmV0dGVyIHRy
ZWF0ZWQgYXMgYW4gZXhwYW5kYWJsZSBvYmplY3QuCg==
</data>
<flag name="review"
          id="334482"
          type_id="1"
          status="+"
          setter="mattbaker"
    />
          </attachment>
      

    </bug>

</bugzilla>