<?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>210769</bug_id>
          
          <creation_ts>2020-04-20 14:59:14 -0700</creation_ts>
          <short_desc>AppBound domain behavior should abide by the limitsNavigationsToAppBoundDomains argument in WKWebView configuration</short_desc>
          <delta_ts>2020-04-21 09:22:46 -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 Misc.</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1643652</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 14:59:14 -0700</bug_when>
    <thetext>The limitsNavigationsToAppBoundDomains flag in the WKWebView configuration should opt a WebView into AppBound domain behavior and limit navigations to the domains in the Info.plist</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643653</commentid>
    <comment_count>1</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 14:59:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/62065241&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643666</commentid>
    <comment_count>2</comment_count>
      <attachid>397024</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 15:41:59 -0700</bug_when>
    <thetext>Created attachment 397024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643692</commentid>
    <comment_count>3</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 16:33:26 -0700</bug_when>
    <thetext>I also think we can eventually clean this up and merge m_isNavigatingToAppBoundDomain and m_hasNavigatedAwayFromAppBoundDomain into one Optional parameter that defaults to WTF::nullopt. But this would be a large refactoring and is probably better for a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643704</commentid>
    <comment_count>4</comment_count>
      <attachid>397024</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-20 17:37:27 -0700</bug_when>
    <thetext>Comment on attachment 397024
Patch

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

Looks good. r=me, but please consider my suggestion for renaming.

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3130
&gt; +bool WebPageProxy::setIsNavigatingToAppBoundDomain(bool isMainFrame, const URL&amp; requestURL, Optional&lt;NavigatingToAppBoundDomain&gt; isNavigatingToAppBoundDomain)

I think this would be clearer with a name change: Maybe something like:

bool WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted(...)

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3144
&gt; +            if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::Yes) {

I would suggest reversing this check, and doing an early return:

if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::No)
    return false;

Also: If we make the decision to return early here, should we be setting &quot;m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No&quot;?

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3150
&gt;          }

Maybe this could then be an &apos;else&apos; block, and both fall through to the &apos;true&apos; at the bottom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643705</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-20 17:38:02 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #3)
&gt; I also think we can eventually clean this up and merge
&gt; m_isNavigatingToAppBoundDomain and m_hasNavigatedAwayFromAppBoundDomain into
&gt; one Optional parameter that defaults to WTF::nullopt. But this would be a
&gt; large refactoring and is probably better for a future patch.

Yes -- this sounds like a good next step. Might simplify the logic and make it easier to understand. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643724</commentid>
    <comment_count>6</comment_count>
      <attachid>397024</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 18:22:41 -0700</bug_when>
    <thetext>Comment on attachment 397024
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3130
&gt;&gt; +bool WebPageProxy::setIsNavigatingToAppBoundDomain(bool isMainFrame, const URL&amp; requestURL, Optional&lt;NavigatingToAppBoundDomain&gt; isNavigatingToAppBoundDomain)
&gt; 
&gt; I think this would be clearer with a name change: Maybe something like:
&gt; 
&gt; bool WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted(...)

Good idea, I&apos;ll do this

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3144
&gt;&gt; +            if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::Yes) {
&gt; 
&gt; I would suggest reversing this check, and doing an early return:
&gt; 
&gt; if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::No)
&gt;     return false;
&gt; 
&gt; Also: If we make the decision to return early here, should we be setting &quot;m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No&quot;?

Early return sounds good.

m_hasNavigatedAwayFromAppBoundDomain defaults to No, and won&apos;t ever be changed to Yes for a webView with the m_limitsNavigationsToAppBoundDomains flag, so it should always be the case that m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No, and we shouldn&apos;t need to set it.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3150
&gt;&gt;          }
&gt; 
&gt; Maybe this could then be an &apos;else&apos; block, and both fall through to the &apos;true&apos; at the bottom.

Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643725</commentid>
    <comment_count>7</comment_count>
      <attachid>397024</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 18:22:46 -0700</bug_when>
    <thetext>Comment on attachment 397024
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3130
&gt;&gt; +bool WebPageProxy::setIsNavigatingToAppBoundDomain(bool isMainFrame, const URL&amp; requestURL, Optional&lt;NavigatingToAppBoundDomain&gt; isNavigatingToAppBoundDomain)
&gt; 
&gt; I think this would be clearer with a name change: Maybe something like:
&gt; 
&gt; bool WebPageProxy::setIsNavigatingToAppBoundDomainAndCheckIfPermitted(...)

Good idea, I&apos;ll do this

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3144
&gt;&gt; +            if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::Yes) {
&gt; 
&gt; I would suggest reversing this check, and doing an early return:
&gt; 
&gt; if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::No)
&gt;     return false;
&gt; 
&gt; Also: If we make the decision to return early here, should we be setting &quot;m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No&quot;?

Early return sounds good.

m_hasNavigatedAwayFromAppBoundDomain defaults to No, and won&apos;t ever be changed to Yes for a webView with the m_limitsNavigationsToAppBoundDomains flag, so it should always be the case that m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No, and we shouldn&apos;t need to set it.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3150
&gt;&gt;          }
&gt; 
&gt; Maybe this could then be an &apos;else&apos; block, and both fall through to the &apos;true&apos; at the bottom.

Will do!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643726</commentid>
    <comment_count>8</comment_count>
      <attachid>397045</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-04-20 18:37:33 -0700</bug_when>
    <thetext>Created attachment 397045
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643735</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-20 19:36:32 -0700</bug_when>
    <thetext>Committed r260408: &lt;https://trac.webkit.org/changeset/260408&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397045.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643897</commentid>
    <comment_count>10</comment_count>
      <attachid>397024</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-21 09:22:46 -0700</bug_when>
    <thetext>Comment on attachment 397024
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:3144
&gt;&gt;&gt;&gt; +            if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::Yes) {
&gt;&gt;&gt; 
&gt;&gt;&gt; I would suggest reversing this check, and doing an early return:
&gt;&gt;&gt; 
&gt;&gt;&gt; if (*isNavigatingToAppBoundDomain == NavigatingToAppBoundDomain::No)
&gt;&gt;&gt;     return false;
&gt;&gt;&gt; 
&gt;&gt;&gt; Also: If we make the decision to return early here, should we be setting &quot;m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No&quot;?
&gt;&gt; 
&gt;&gt; Early return sounds good.
&gt;&gt; 
&gt;&gt; m_hasNavigatedAwayFromAppBoundDomain defaults to No, and won&apos;t ever be changed to Yes for a webView with the m_limitsNavigationsToAppBoundDomains flag, so it should always be the case that m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No, and we shouldn&apos;t need to set it.
&gt; 
&gt; Early return sounds good.
&gt; 
&gt; m_hasNavigatedAwayFromAppBoundDomain defaults to No, and won&apos;t ever be changed to Yes for a webView with the m_limitsNavigationsToAppBoundDomains flag, so it should always be the case that m_hasNavigatedAwayFromAppBoundDomain = NavigatedAwayFromAppBoundDomain::No, and we shouldn&apos;t need to set it.

Ah -- okay. I didn&apos;t understand that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397024</attachid>
            <date>2020-04-20 15:41:59 -0700</date>
            <delta_ts>2020-04-20 18:37:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210769-20200420154159.patch</filename>
            <type>text/plain</type>
            <size>25509</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIzODkzNDUyYzJiZmQxZTc3
MjBmYzIyMWU0Njk2ZjhkMWRmZjM4NTkuLmZlNDhhY2Y1Njk0NTdhZGE4OTgwNzM3YzEyNjI3MDgw
ZWUyOGQwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMjAtMDQtMjAgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwLWJvdW5kIGRv
bWFpbiBiZWhhdmlvciBzaG91bGQgYWJpZGUgYnkgdGhlIGxpbWl0c05hdmlnYXRpb25zVG9BcHBC
b3VuZERvbWFpbnMgYXJndW1lbnQgaW4gV0tXZWJWaWV3IGNvbmZpZ3VyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDc2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjIwNjUyNDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2hhbmdlcyBhcHAtYm91bmQgZG9tYWluIGJlaGF2aW9yIHRvIGJl
IHRyaWdnZXJlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgbGltaXRzTmF2aWdhdGlvbnNUb0Fw
cEJvdW5kRG9tYWlucywgYSBXZWJWaWV3IGNvbmZpZ3VyYXRpb24gZmxhZy4KKyAgICAgICAgSWYg
dGhlIFdlYlZpZXcgaGFzIHRoaXMgcGFyYW1ldGVyIHNldCBhbmQgaXMgY3VycmVudGx5IG5hdmln
YXRpbmcgdG8KKyAgICAgICAgYW4gYXBwIGJvdW5kIGRvbWFpbiwgdGhlbiBhcHAtYm91bmQgcHJp
dmlsZWdlcyB3aWxsIGJlIGdyYW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKToKKyAgICAgICAgVXBkYXRlIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJu
IGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZQorICAgICAgICBuYXZpZ2F0aW9uIHNo
b3VsZCBmYWlsLiBBIGZhaWx1cmUgc2hvdWxkIG9jY3VyIGlmIGEgV2ViVmlldyBoYXMgc2V0Cisg
ICAgICAgIHRoZSBsaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zIGZsYWcgYW5kIGF0
dGVtcHRzIHRvIG5hdmlnYXRlCisgICAgICAgIGF3YXkgZnJvbSBhbiBhcHAtYm91bmQgZG9tYWlu
LgorCisgICAgICAgIElmIHRoZSBsaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zIHZh
bHVlIGhhcyBub3QgYmVlbiBzZXQgdG8KKyAgICAgICAgdHJ1ZSwgbWFpbnRhaW4gbm9uLWFwcCBi
b3VuZCBiZWhhdmlvciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGRvbWFpbgorICAgICAgICBp
cyBhcHAtYm91bmQgb3Igbm90LgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIENoZWNrIHRoZSByZXN1bHQg
b2Ygc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBhbmQgZmFpbCB0aGUKKyAgICAgICAg
bmF2aWdhdGlvbiBpZiBuZWVkZWQsIHdpdGggYm90aCBSRUxFQVNFIGxvZ2dpbmcgYW5kIGFuIGFw
cHJvcHJpYXRlCisgICAgICAgIGVycm9yIG1lc3NhZ2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisKIDIwMjAtMDQtMjAgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2No
ZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyMDU5MDQ2PgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNmJiY2U0YTRhMDdjMDc5
MDJmNDk3NGNiMzY0MGY1NTZlNzgyMDgxZi4uZDc0ZTU3ZTRhNGE0OThmODIxMTEzNjAwMzc2MDcw
ZTZjOGY0MjQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC0zMTI3LDMyICszMTI3LDM3IEBAIHByaXZhdGU6CiAgICAgUG9saWN5Q2hlY2tJZGVudGlmaWVy
IG1faWRlbnRpZmllcjsKIH07CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwg
T3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4pCitib29sIFdlYlBhZ2VQcm94eTo6c2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbihib29sIGlzTWFpbkZyYW1lLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIE9wdGlvbmFsPE5h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQog
ewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CiAgICAg
ICAgIGlmIChXRUJfUEFHRV9QUk9YWV9BRERJVElPTlNfU0VUSVNOQVZJR0FUSU5HVE9BUFBCT1VO
RERPTUFJTikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBpZiAoIWlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIHsKICAgICAgICAgICAg
IG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChtX2lnbm9yZXNBcHBCb3VuZERvbWFpbnMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmICgqaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9PSBOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbjo6Tm8pIHsKLSAgICAgICAgICAgIG1fY29uZmlndXJhdGlvbi0+c2V0V2ViVmll
d0NhdGVnb3J5KFdlYlZpZXdDYXRlZ29yeTo6SW5BcHBCcm93c2VyKTsKLSAgICAgICAgICAgIG1f
aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
OjpObzsKLSAgICAgICAgICAgIG1faGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbiA9
IE5hdmlnYXRlZEF3YXlGcm9tQXBwQm91bmREb21haW46OlllczsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbGlt
aXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlucykgeworICAgICAgICAgICAgaWYgKCppc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluID09IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpZ
ZXMpIHsKKyAgICAgICAgICAgICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldFdlYlZpZXdDYXRlZ29y
eShXZWJWaWV3Q2F0ZWdvcnk6OkFwcEJvdW5kRG9tYWluKTsKKyAgICAgICAgICAgICAgICBtX2lz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gPSBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6
WWVzOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIG1fY29uZmlndXJhdGlvbi0+
c2V0V2ViVmlld0NhdGVnb3J5KFdlYlZpZXdDYXRlZ29yeTo6QXBwQm91bmREb21haW4pOwotICAg
ICAgICBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gPSBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbjo6WWVzOworICAgICAgICBtX2NvbmZpZ3VyYXRpb24tPnNldFdlYlZpZXdDYXRlZ29y
eShXZWJWaWV3Q2F0ZWdvcnk6OkluQXBwQnJvd3Nlcik7CisgICAgICAgIG1faXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbiA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKKyAgICAg
ICAgbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluID0gTmF2aWdhdGVkQXdheUZy
b21BcHBCb3VuZERvbWFpbjo6WWVzOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlz
TWFpbkZyYW1lKTsKICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdFVSTCk7CiAgICAgVU5VU0VEX1BB
UkFNKGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogI2VuZGlmCisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojppc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
VGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQpAQCAtNTE1NSwxMCArNTE2MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAgICAgc2hv
dWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgPSBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFp
blJlc3VsdDo6WWVzOwogI2VuZGlmCiAgICAgCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYo
ZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2Vu
ZGVyKSwgbmF2aWdhdGlvbl0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0
ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZl
QnJvd3NpbmdXYXJuaW5nLCBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNB
cHBCb3VuZERvbWFpbikgbXV0YWJsZSB7Ci0KLSAgICAgICAgaWYgKHBvbGljeUFjdGlvbiAhPSBQ
b2xpY3lBY3Rpb246Oklnbm9yZSkKLSAgICAgICAgICAgIHNldElzTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4oZnJhbWUtPmlzTWFpbkZyYW1lKCksIG5hdmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0
KCkudXJsKCksIGlzQXBwQm91bmREb21haW4pOworICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVm
KGZyYW1lLnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBmcmFtZSA9IG1ha2VSZWYoZnJhbWUpLCBzZW5kZXIgPSBXVEZNb3ZlKHNl
bmRlciksIG5hdmlnYXRpb24sIGZyYW1lSW5mbywgdXNlckRhdGFPYmplY3QgPSBwcm9jZXNzLT50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKV0gKFBvbGlj
eUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBS
ZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBPcHRpb25h
bDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4gaXNBcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7
CiAKICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIGZyYW1lID0gZnJhbWUuY29weVJlZigpLCBzZW5k
ZXIgPSBXVEZNb3ZlKHNlbmRlciksIG5hdmlnYXRpb24sIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIHBvbGljaWVzID0gbWFrZVJlZlB0cihwb2xpY2llcyldIChQb2xpY3lBY3Rpb24gcG9s
aWN5QWN0aW9uKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUo
KSkgewpAQCAtNTE3MSw2ICs1MTczLDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZWNlaXZlZE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbihw
b2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQsIGZyYW1lLCBXVEZNb3ZlKHBvbGljaWVzKSwgV1RGTW92ZShzZW5kZXIpKTsKICAgICAgICAg
fTsKKyAgICAgICAgCisgICAgICAgIGlmIChwb2xpY3lBY3Rpb24gIT0gUG9saWN5QWN0aW9uOjpJ
Z25vcmUpIHsKKyAgICAgICAgICAgIGlmICghc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bihmcmFtZS0+aXNNYWluRnJhbWUoKSwgbmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKS51cmwo
KSwgaXNBcHBCb3VuZERvbWFpbikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gUmVz
b3VyY2VFcnJvciB7IFN0cmluZyB7IH0sIDAsIG5hdmlnYXRpb24tPmN1cnJlbnRSZXF1ZXN0KCku
dXJsKCksICJBdHRlbXB0ZWQgbmF2aWdhdGlvbiBhd2F5IGZyb20gYXBwLWJvdW5kIGRvbWFpbiJf
cyB9OworICAgICAgICAgICAgICAgIG1fbmF2aWdhdGlvbkNsaWVudC0+ZGlkRmFpbFByb3Zpc2lv
bmFsTmF2aWdhdGlvbldpdGhFcnJvcigqdGhpcywgRnJhbWVJbmZvRGF0YSB7IGZyYW1lSW5mbyB9
LCBuYXZpZ2F0aW9uLmdldCgpLCBlcnJvciwgdXNlckRhdGFPYmplY3QpOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoTG9hZGluZywgIklnbm9yaW5nIHJlcXVl
c3QgdG8gbG9hZCB0aGlzIG1haW4gcmVzb3VyY2UgYmVjYXVzZSBpdCBpcyBhdHRlbXB0aW5nIHRv
IG5hdmlnYXRlIGF3YXkgZnJvbSBhbiBhcHAtYm91bmQgZG9tYWluIik7CisgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoUG9saWN5QWN0aW9uOjpJZ25vcmUpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9w
YWdlQ2xpZW50KQogICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHBvbGljeUFj
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDYyNGI4OTgy
NmZkNDRiM2ZmMjM1ZGFlNmQyYjFmNzE4YjJkZmQ4MTYuLjdlNmQwZjU0MmNlNWM1M2EzMThjZjEx
YmZjMTBkMWEzODRhMDM0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CkBAIC0yMzAzLDcgKzIzMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdHJ5Q2xvc2VUaW1lZE91
dCgpOwogICAgIHZvaWQgbWFrZVN0b3JhZ2VTcGFjZVJlcXVlc3QoV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyLCBjb25zdCBTdHJpbmcmIG9yaWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVv
dGEsIHVpbnQ2NF90IGN1cnJlbnRPcmlnaW5Vc2FnZSwgdWludDY0X3QgY3VycmVudERhdGFiYXNl
VXNhZ2UsIHVpbnQ2NF90IGV4cGVjdGVkVXNhZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQodWlu
dDY0X3QpPiYmKTsKICAgICAgICAgCi0gICAgdm9pZCBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluPik7CisgICAgYm9vbCBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluPik7CiAgICAgTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbiBoYXNO
YXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYXZp
Z2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluOyB9CiAgICAgICAgIAogICAgIGNvbnN0IElkZW50
aWZpZXIgbV9pZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDgxN2UzNDE0ZjcyNGE2ZjQ0ZTk0NDFiZDI1ODg0NWQ3OGZkYWNlY2Mu
LmQyMDBhNjY3MzFlZDdlOGM1OTBjZjgwYTJhOTFhMGVmMDRmNzBmYjIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAy
MC0wNC0yMCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAg
ICAgICBBcHAtYm91bmQgZG9tYWluIGJlaGF2aW9yIHNob3VsZCBhYmlkZSBieSB0aGUgbGltaXRz
TmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlucyBhcmd1bWVudCBpbiBXS1dlYlZpZXcgY29uZmln
dXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEwNzY5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjA2NTI0MT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVzIGFueSB0ZXN0cyBmb3Ig
c3dhcHBpbmcgYmV0d2VlbiBhcHAtYm91bmQgYW5kIG5vbiBhcHAtYm91bmQKKyAgICAgICAgZG9t
YWlucyBhcyB0aGlzIGJlaGF2aW9yIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAg
U2V0cyB0aGUgbGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlucyBmbGFnIGZvciB0ZXN0
cyB3aGljaCBzaG91bGQKKyAgICAgICAgaGF2ZSBhcHAtYm91bmQgYmVoYXZpb3IgdG8gbWFpbnRh
aW4gdGVzdCBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgIEFkZHMgNSBuZXcgdGVzdHMgZm9yIG5l
dyBiZWhhdmlvci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5BcHBCcm93c2VyUHJpdmFjeS5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoLVtBcHBC
b3VuZERvbWFpbkRlbGVnYXRlIHdlYlZpZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAg
ICAgKC1bQXBwQm91bmREb21haW5EZWxlZ2F0ZSB3ZWJWaWV3OmRpZEZhaWxQcm92aXNpb25hbE5h
dmlnYXRpb246d2l0aEVycm9yOl0pOgorICAgICAgICAoLVtBcHBCb3VuZERvbWFpbkRlbGVnYXRl
IHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXSk6CisgICAgICAgICgtW0FwcEJvdW5kRG9tYWlu
RGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25FcnJvcl0pOgorCiAy
MDIwLTA0LTIwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIE92ZXJzaXplZCBjYXJldCBhbmQgc2VsZWN0aW9uIHJlY3RzIGluIHRleHQgZmllbGRzIG9u
IGdhbmppLmNvbSBhbmQgbmV0ZmxpeC5jb20vbG9naW4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbQpp
bmRleCAxNWJhNjU4OTE2OTVhYThhZTNlZjVhYTUwMGNjZDgyYjJjY2I4OGFlLi4zYTgyYWZhZWQz
MzQ1YTUwMTllM2MyNDg4ZTFkNDY1ODJjZTVjZDU4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1t
CkBAIC0yMjAsNDkgKzIyMCw2IEBAIFRFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgTm9uQXBwQm91
bmREb21haW5GYWlsZWRVc2VyQWdlbnRTY3JpcHRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmaXNEb25lKTsKIH0KIAotVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBTd2FwQmFja1Rv
QXBwQm91bmRSZWplY3RzVXNlclNjcmlwdCkKLXsKLSAgICBpbml0aWFsaXplSW5BcHBCcm93c2Vy
UHJpdmFjeVRlc3RTZXR0aW5ncygpOwotICAgIGF1dG8gdXNlclNjcmlwdCA9IGFkb3B0TlMoW1tX
S1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnVzZXJTY3JpcHRTb3VyY2UgaW5qZWN0
aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0IGZvck1haW5G
cmFtZU9ubHk6WUVTXSk7Ci0KLSAgICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0
aW9uID0gW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0
UGx1Z0luQ2xhc3NOYW1lOkAiV2ViUHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiIGNvbmZpZ3Vy
ZUpTQ0ZvclRlc3Rpbmc6WUVTXTsKLSAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9z
ZXROZWVkc0luQXBwQnJvd3NlclByaXZhY3lRdWlya3M6Tk9dOwotICAgIFtbY29uZmlndXJhdGlv
biBwcmVmZXJlbmNlc10gX3NldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkOllFU107Ci0KLSAg
ICBhdXRvIHNjaGVtZUhhbmRsZXIgPSBhZG9wdE5TKFtbSW5BcHBCcm93c2VyU2NoZW1lSGFuZGxl
ciBhbGxvY10gaW5pdF0pOwotICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6
c2NoZW1lSGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJpbi1hcHAtYnJvd3NlciJdOwotICAg
IAotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Ci0gICAg
TlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImluLWFwcC1icm93c2VyOi8vL2luLWFwcC1icm93c2VyLXByaXZh
Y3ktdGVzdC11c2VyLXNjcmlwdCJdXTsKLSAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0
XTsKLSAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Ci0KLSAg
ICBbY29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgX2FkZFVzZXJTY3JpcHRJbW1l
ZGlhdGVseTp1c2VyU2NyaXB0LmdldCgpXTsKLSAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHQ6QCJ3aW5kb3cud2tVc2VyU2NyaXB0SW5qZWN0ZWQiIGNvbXBsZXRpb25IYW5kbGVyOl4oaWQg
X051bGxhYmxlIHJlc3VsdCwgTlNFcnJvciAqIF9OdWxsYWJsZSBlcnJvcikgewotICAgICAgICBF
WFBFQ1RfRkFMU0UocmVzdWx0KTsKLSAgICAgICAgRVhQRUNUX1RSVUUoISFlcnJvcik7Ci0gICAg
ICAgIGlzRG9uZSA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBpc0RvbmUgPSBmYWxzZTsKLSAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7Ci0KLSAgICByZXF1ZXN0ID0gW05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291
cmNlOkAiaW4tYXBwLWJyb3dzZXItcHJpdmFjeS1sb2NhbC1maWxlIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07Ci0gICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07Ci0gICAgW3dlYlZpZXcgX3Rlc3Rfd2FpdEZvckRp
ZEZpbmlzaE5hdmlnYXRpb25dOwotICAgIAotICAgIGlzRG9uZSA9IGZhbHNlOwotICAgIFtjb25m
aWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlclNjcmlwdEltbWVkaWF0ZWx5
OnVzZXJTY3JpcHQuZ2V0KCldOwotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndp
bmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCIgY29tcGxldGlvbkhhbmRsZXI6XihpZCBfTnVsbGFi
bGUgcmVzdWx0LCBOU0Vycm9yICogX051bGxhYmxlIGVycm9yKSB7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShyZXN1bHQpOwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVycm9yKTsKLSAgICAgICAgY2xl
YW5VcEluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKLSAgICAgICAgaXNEb25lID0g
dHJ1ZTsKLSAgICB9XTsKLQotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsK
LX0KLQogVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZERvbWFpbnMpCiB7CiAgICAg
aW5pdGlhbGl6ZUluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKQEAgLTI4OCw2ICsy
NDUsNyBAQCBURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIExvY2FsRmlsZXNBcmVBcHBCb3VuZCkK
ICAgICBpbml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOwogICAgIGF1
dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0SW5BcHBCcm93
c2VyUHJpdmFjeUVuYWJsZWQ6WUVTXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZp
Z2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVz
dCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBV
UkxGb3JSZXNvdXJjZTpAImluLWFwcC1icm93c2VyLXByaXZhY3ktbG9jYWwtZmlsZSIgd2l0aEV4
dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1d
OwpAQCAtMzA4LDYgKzI2Niw3IEBAIFRFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgRGF0YUZpbGVz
QXJlQXBwQm91bmQpCiAgICAgaW5pdGlhbGl6ZUluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGlu
Z3MoKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10g
X3NldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkOllFU107CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWluczpZRVNdOwogCiAgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dS
ZWN0WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiZGF0YTp0ZXh0L2h0bWwsc3RhcnQiXV1dOwpAQCAtMzI3LDYgKzI4Niw3IEBAIFRF
U1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgQWJvdXRGaWxlc0FyZUFwcEJvdW5kKQogICAgIGluaXRp
YWxpemVJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7CiAgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRJbkFwcEJyb3dzZXJQcml2YWN5
RW5hYmxlZDpZRVNdOworICAgIFtjb25maWd1cmF0aW9uIHNldExpbWl0c05hdmlnYXRpb25zVG9B
cHBCb3VuZERvbWFpbnM6WUVTXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0
V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1d
XTsKQEAgLTM0NSw2ICszMDUsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKnN0eWxlU2hlZXRTb3VyY2Ug
PSBAImJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbiAhaW1wb3J0YW50Owogc3RhdGljIE5T
U3RyaW5nICpiYWNrZ3JvdW5kQ29sb3JTY3JpcHQgPSBAIndpbmRvdy5nZXRDb21wdXRlZFN0eWxl
KGRvY3VtZW50LmJvZHksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3In
KSI7CiBzdGF0aWMgTlNTdHJpbmcgKmZyYW1lQmFja2dyb3VuZENvbG9yU2NyaXB0ID0gQCJ3aW5k
b3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1l
JylbMF0uY29udGVudERvY3VtZW50LmJvZHksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tn
cm91bmQtY29sb3InKSI7CiBzdGF0aWMgY29uc3QgY2hhciogcmVkSW5SR0IgPSAicmdiKDI1NSwg
MCwgMCkiOworc3RhdGljIGNvbnN0IGNoYXIqIGJsYWNrSW5SR0IgPSAicmdiYSgwLCAwLCAwLCAw
KSI7CiAKIHN0YXRpYyB2b2lkIGV4cGVjdFNjcmlwdEV2YWx1YXRlc1RvQ29sb3IoV0tXZWJWaWV3
ICp3ZWJWaWV3LCBOU1N0cmluZyAqc2NyaXB0LCBjb25zdCBjaGFyKiBjb2xvcikKIHsKQEAgLTQ1
OCw3ICs0MTksNyBAQCBURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIE5vbkFwcEJvdW5kRG9tYWlu
Q2Fubm90QWNjZXNzTWVzc2FnZUhhbmRsZXJzKQogICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2
YWN5VGVzdFNldHRpbmdzKCk7CiB9CiAKLVRFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgQXBwQm91
bmRUb05vbkFwcEJvdW5kRG9tYWluQ2Fubm90QWNjZXNzTWVzc2FnZUhhbmRsZXJzKQorVEVTVChJ
bkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZERvbWFpbkNhbkFjY2Vzc01lc3NhZ2VIYW5kbGVy
cykKIHsKICAgICBpbml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOwog
ICAgIGlzRG9uZSA9IGZhbHNlOwpAQCAtNDY4LDYgKzQyOSw3IEBAIFRFU1QoSW5BcHBCcm93c2Vy
UHJpdmFjeSwgQXBwQm91bmRUb05vbkFwcEJvdW5kRG9tYWluQ2Fubm90QWNjZXNzTWVzc2FnZUhh
bmRsZXJzCiAgICAgYXV0byBzY2hlbWVIYW5kbGVyID0gYWRvcHROUyhbW0luQXBwQnJvd3NlclNj
aGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hl
bWVIYW5kbGVyOnNjaGVtZUhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiaW4tYXBwLWJyb3dz
ZXIiXTsKICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRJbkFwcEJyb3dzZXJQ
cml2YWN5RW5hYmxlZDpZRVNdOworICAgIFtjb25maWd1cmF0aW9uIHNldExpbWl0c05hdmlnYXRp
b25zVG9BcHBCb3VuZERvbWFpbnM6WUVTXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CiAKQEAgLTQ4NiwxNCArNDQ4LDYgQEAgVEVTVChJ
bkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZFRvTm9uQXBwQm91bmREb21haW5DYW5ub3RBY2Nl
c3NNZXNzYWdlSGFuZGxlcnMKICAgICAgICAgRkFJTCgpOwogICAgIH1dOwogCi0gICAgLy8gTmF2
aWdhdGUgYXdheSBmcm9tIGFuIGFwcC1ib3VuZCBkb21haW4uCi0gICAgTlNVUkxSZXF1ZXN0ICpy
ZXF1ZXN0MiA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJpbi1hcHAtYnJvd3NlcjovLy9pbi1hcHAtYnJvd3Nlci1wcml2YWN5LXRlc3QtbWVzc2Fn
ZS1oYW5kbGVyIl1dOwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3QyXTsKLSAgICBb
d2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Ci0KLSAgICAvLyBTZXQg
dGhlIGJhY2tncm91bmQgY29sb3IgdG8gcmVkIGlmIG1lc3NhZ2UgaGFuZGxlcnMgcmV0dXJuZWQg
bnVsbCBzbyB3ZSBjYW4KLSAgICAvLyBjaGVjayB3aXRob3V0IG5lZWRpbmcgYSBtZXNzYWdlIGhh
bmRsZXIuCi0gICAgZXhwZWN0U2NyaXB0RXZhbHVhdGVzVG9Db2xvcih3ZWJWaWV3LmdldCgpLCBi
YWNrZ3JvdW5kQ29sb3JTY3JpcHQsIHJlZEluUkdCKTsKICAgICBjbGVhblVwSW5BcHBCcm93c2Vy
UHJpdmFjeVRlc3RTZXR0aW5ncygpOwogfQogCkBAIC04NzUsNiArODI5LDIwNSBAQCBURVNUKElu
QXBwQnJvd3NlclByaXZhY3ksIE5vbkFwcEJvdW5kRG9tYWluRG9lc05vdEFsbG93U2VydmljZVdv
cmtlcnMpCiAgICAgaXNEb25lID0gZmFsc2U7CiB9CiAKK0BpbnRlcmZhY2UgQXBwQm91bmREb21h
aW5EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0ZT4KKy0gKHZvaWQpd2Fp
dEZvckRpZEZpbmlzaE5hdmlnYXRpb247CistIChOU0Vycm9yICopd2FpdEZvckRpZEZhaWxQcm92
aXNpb25hbE5hdmlnYXRpb25FcnJvcjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEFwcEJvdW5k
RG9tYWluRGVsZWdhdGUgeworICAgIGJvb2wgX25hdmlnYXRpb25GaW5pc2hlZDsKKyAgICBSZXRh
aW5QdHI8TlNFcnJvcj4gX3Byb3Zpc2lvbmFsTmF2aWdhdGlvbkZhaWxlZEVycm9yOworfQorCist
ICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlvbjoo
V0tOYXZpZ2F0aW9uICopbmF2aWdhdGlvbgoreworICAgIF9uYXZpZ2F0aW9uRmluaXNoZWQgPSB0
cnVlOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbjoobnVsbF91bnNwZWNpZmllZCBXS05hdmlnYXRpb24gKiluYXZp
Z2F0aW9uIHdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgX3Byb3Zpc2lvbmFsTmF2
aWdhdGlvbkZhaWxlZEVycm9yID0gZXJyb3I7Cit9CisKKy0gKHZvaWQpd2FpdEZvckRpZEZpbmlz
aE5hdmlnYXRpb24KK3sKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJl9uYXZpZ2F0aW9u
RmluaXNoZWQpOworfQorCistIChOU0Vycm9yICopd2FpdEZvckRpZEZhaWxQcm92aXNpb25hbE5h
dmlnYXRpb25FcnJvcgoreworICAgIHdoaWxlICghX3Byb3Zpc2lvbmFsTmF2aWdhdGlvbkZhaWxl
ZEVycm9yKQorICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworICAg
IHJldHVybiBfcHJvdmlzaW9uYWxOYXZpZ2F0aW9uRmFpbGVkRXJyb3IuYXV0b3JlbGVhc2UoKTsK
K30KKworQGVuZAorCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIEFwcEJvdW5kRmxhZ0Zvck5v
bkFwcEJvdW5kRG9tYWluRmFpbHMpCit7CisgICAgaW5pdGlhbGl6ZUluQXBwQnJvd3NlclByaXZh
Y3lUZXN0U2V0dGluZ3MoKTsKKyAgICBpc0RvbmUgPSBmYWxzZTsKKworICAgIGF1dG8gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgYXV0byBzY2hlbWVIYW5kbGVyID0gYWRvcHROUyhbW0luQXBwQnJvd3NlclNjaGVtZUhh
bmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5k
bGVyOnNjaGVtZUhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiaW4tYXBwLWJyb3dzZXIiXTsK
KyAgICBbY29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5z
OllFU107CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtBcHBCb3Vu
ZERvbWFpbkRlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICAvLyBMb2FkIGEgbm9uLWFwcCBib3VuZCBkb21haW4u
CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImluLWFwcC1icm93c2VyOi8vL2luLWFwcC1icm93c2Vy
LXByaXZhY3ktdGVzdC11c2VyLXN0eWxlLXNoZWV0cyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpyZXF1ZXN0XTsKKyAgICBOU0Vycm9yICplcnJvciA9IFtkZWxlZ2F0ZSB3YWl0Rm9yRGlk
RmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkVycm9yXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24sIEAiQXR0ZW1wdGVkIG5hdmlnYXRpb24gYXdheSBmcm9t
IGFwcC1ib3VuZCBkb21haW4iKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgbG9hZCBkaWRuJ3Qg
Y29tcGxldGUgYnkgY2hlY2tpbmcgdGhlIGJhY2tncm91bmQgY29sb3IuCisgICAgLy8gUmVkIHdv
dWxkIGluZGljYXRlIGl0IGZpbmlzaGVkIGxvYWRpbmcuCisgICAgZXhwZWN0U2NyaXB0RXZhbHVh
dGVzVG9Db2xvcih3ZWJWaWV3LmdldCgpLCBiYWNrZ3JvdW5kQ29sb3JTY3JpcHQsIGJsYWNrSW5S
R0IpOworICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7Cit9CisK
K1RFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgTmF2aWdhdGVBd2F5RnJvbUFwcEJvdW5kRG9tYWlu
V2l0aEFwcEJvdW5kRmxhZ0ZhaWxzKQoreworICAgIGluaXRpYWxpemVJbkFwcEJyb3dzZXJQcml2
YWN5VGVzdFNldHRpbmdzKCk7CisgICAgaXNEb25lID0gZmFsc2U7CisKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworICAgIGF1dG8gc2NoZW1lSGFuZGxlciA9IGFkb3B0TlMoW1tJbkFwcEJyb3dzZXJTY2hlbWVI
YW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFu
ZGxlcjpzY2hlbWVIYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAImluLWFwcC1icm93c2VyIl07
CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlu
czpZRVNdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbQXBwQm91
bmREb21haW5EZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIAorICAgIC8vIE5hdmlnYXRlIHRvIGFuIGFwcC1ib3Vu
ZCBkb21haW4gYW5kIGV4cGVjdCBhIHN1Y2Nlc3NmdWwgbG9hZC4KKyAgICBOU1VSTFJlcXVlc3Qg
KnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1
bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpbi1hcHAtYnJvd3Nlci1wcml2YWN5LWxvY2FsLWZpbGUi
IHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICBbZGVsZWdh
dGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIAorICAgIC8vIE5vdyB0cnkgdG8g
bG9hZCBhIG5vbi1hcHAgYm91bmQgZG9tYWluIGFuZCBtYWtlIHN1cmUgaXQgZmFpbHMuCisgICAg
cmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJpbi1hcHAtYnJvd3NlcjovLy9pbi1hcHAtYnJvd3Nlci1wcml2YWN5LXRlc3QtdXNlci1z
dHlsZS1zaGVldHMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdF07CisgICAg
TlNFcnJvciAqZXJyb3IgPSBbZGVsZWdhdGUgd2FpdEZvckRpZEZhaWxQcm92aXNpb25hbE5hdmln
YXRpb25FcnJvcl07CisgICAgRVhQRUNUX1dLX1NUUkVRKGVycm9yLmxvY2FsaXplZERlc2NyaXB0
aW9uLCBAIkF0dGVtcHRlZCBuYXZpZ2F0aW9uIGF3YXkgZnJvbSBhcHAtYm91bmQgZG9tYWluIik7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGxvYWQgZGlkbid0IGNvbXBsZXRlIGJ5IGNoZWNraW5n
IHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgorICAgIC8vIFJlZCB3b3VsZCBpbmRpY2F0ZSBpdCBmaW5p
c2hlZCBsb2FkaW5nLgorICAgIGV4cGVjdFNjcmlwdEV2YWx1YXRlc1RvQ29sb3Iod2ViVmlldy5n
ZXQoKSwgYmFja2dyb3VuZENvbG9yU2NyaXB0LCBibGFja0luUkdCKTsKKyAgICBjbGVhblVwSW5B
cHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOworfQorCitURVNUKEluQXBwQnJvd3NlclBy
aXZhY3ksIEFwcEJvdW5kRG9tYWluV2l0aG91dEZsYWdUcmVhdGVkQXNOb25BcHBCb3VuZCkKK3sK
KyAgICBpbml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOworICAgIGlz
RG9uZSA9IGZhbHNlOworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHNjaGVtZUhhbmRsZXIg
PSBhZG9wdE5TKFtbSW5BcHBCcm93c2VyU2NoZW1lSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAg
IFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6c2NoZW1lSGFuZGxlci5nZXQoKSBm
b3JVUkxTY2hlbWU6QCJpbi1hcHAtYnJvd3NlciJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRv
cHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gYWRvcHROUyhbQXBwQm91bmREb21haW5EZWxlZ2F0ZSBuZXddKTsKKyAgICBbd2Vi
VmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIAorICAgIC8v
IE5hdmlnYXRlIHRvIGFuIGFwcC1ib3VuZCBkb21haW4gYW5kIGV4cGVjdCBhIHN1Y2Nlc3NmdWwg
bG9hZC4KKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpbi1hcHAtYnJv
d3Nlci1wcml2YWN5LWxvY2FsLWZpbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpyZXF1ZXN0XTsKKyAgICBbZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwor
CisgICAgLy8gQnV0IHRoZSBuYXZpZ2F0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNvbnNpZGVy
ZWQgYXBwLWJvdW5kIGJlY2F1c2UgdGhlIFdlYlZpZXcgY29uZmlndXJhdGlvbgorICAgIC8vIHNw
ZWNpZmljYXRpb24gd2FzIG5vdCBzZXQuCisgICAgaXNEb25lID0gZmFsc2U7CisgICAgW3dlYlZp
ZXcgX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46XihCT09MIGlzQXBwQm91bmQpIHsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKGlzQXBwQm91bmQpOworICAgICAgICBjbGVhblVwSW5BcHBCcm93
c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOworICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKworVEVTVChJbkFw
cEJyb3dzZXJQcml2YWN5LCBXZWJWaWV3V2l0aG91dEFwcEJvdW5kRmxhZ0NhbkZyZWVseU5hdmln
YXRlKQoreworICAgIGluaXRpYWxpemVJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7
CisgICAgaXNEb25lID0gZmFsc2U7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gc2NoZW1l
SGFuZGxlciA9IGFkb3B0TlMoW1tJbkFwcEJyb3dzZXJTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVy
LmdldCgpIGZvclVSTFNjaGVtZTpAImluLWFwcC1icm93c2VyIl07CisKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3Qo
MCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAg
IGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtBcHBCb3VuZERvbWFpbkRlbGVnYXRlIG5ld10pOwor
ICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAg
CisgICAgLy8gTmF2aWdhdGUgdG8gYW4gYXBwLWJvdW5kIGRvbWFpbiBhbmQgZXhwZWN0IGEgc3Vj
Y2Vzc2Z1bCBsb2FkLgorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3Qg
cmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImlu
LWFwcC1icm93c2VyLXByaXZhY3ktbG9jYWwtZmlsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1
YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdh
dGlvbl07CisKKyAgICBpc0RvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfaXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbjpeKEJPT0wgaXNBcHBCb3VuZCkgeworICAgICAgICBFWFBFQ1RfRkFM
U0UoaXNBcHBCb3VuZCk7CisgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOworCisgICAgLy8gTmF2aWdhdGUgdG8gYW4g
bm9uIGFwcC1ib3VuZCBkb21haW4gYW5kIGV4cGVjdCBhIHN1Y2Nlc3NmdWwgbG9hZC4KKyAgICBy
ZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAImluLWFwcC1icm93c2VyOi8vL2luLWFwcC1icm93c2VyLXByaXZhY3ktdGVzdC11c2VyLXN0
eWxlLXNoZWV0cyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICBb
ZGVsZWdhdGUgd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOworICAgIAorICAgIGlzRG9uZSA9
IGZhbHNlOworICAgIFt3ZWJWaWV3IF9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOl4oQk9P
TCBpc0FwcEJvdW5kKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShpc0FwcEJvdW5kKTsKKyAgICAg
ICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmlzRG9uZSk7CisKKyAgICAvLyBOYXZpZ2F0aW9uIHNob3VsZCBiZSBzdWNjZXNzZnVsLCBidXQg
dGhpcyBXZWJWaWV3IHNob3VsZCBub3QgZ2V0IGFwcC1ib3VuZCBkb21haW4KKyAgICAvLyBwcml2
aWxlZ2VzIGxpa2UgdXNlciBzdHlsZSBzaGVldHMuCisgICAgZXhwZWN0U2NyaXB0RXZhbHVhdGVz
VG9Db2xvcih3ZWJWaWV3LmdldCgpLCBiYWNrZ3JvdW5kQ29sb3JTY3JpcHQsIGJsYWNrSW5SR0Ip
OworICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7Cit9CisKK1RF
U1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgV2ViVmlld0Nhbm5vdFVwZGF0ZUFwcEJvdW5kRmxhZ09u
Y2VTZXQpCit7CisgICAgaW5pdGlhbGl6ZUluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3Mo
KTsKKyAgICBpc0RvbmUgPSBmYWxzZTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBzY2hl
bWVIYW5kbGVyID0gYWRvcHROUyhbW0luQXBwQnJvd3NlclNjaGVtZUhhbmRsZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOnNjaGVtZUhhbmRs
ZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiaW4tYXBwLWJyb3dzZXIiXTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtBcHBCb3VuZERvbWFpbkRlbGVnYXRl
IG5ld10pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisgICAgCisgICAgLy8gTmF2aWdhdGUgdG8gYW4gYXBwLWJvdW5kIGRvbWFpbiBhbmQgZXhw
ZWN0IGEgc3VjY2Vzc2Z1bCBsb2FkLgorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAImluLWFwcC1icm93c2VyLXByaXZhY3ktbG9jYWwtZmlsZSIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmlu
aXNoTmF2aWdhdGlvbl07CisKKyAgICBpc0RvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjpeKEJPT0wgaXNBcHBCb3VuZCkgeworICAgICAgICBF
WFBFQ1RfVFJVRShpc0FwcEJvdW5kKTsKKyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CisKKyAgICBbW3dlYlZpZXcg
Y29uZmlndXJhdGlvbl0gc2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWluczpOT107
CisgICAgLy8gTm93IHRyeSB0byBsb2FkIGEgbm9uLWFwcCBib3VuZCBkb21haW4gYW5kIG1ha2Ug
c3VyZSBpdCBmYWlscy4KKyAgICByZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImluLWFwcC1icm93c2VyOi8vL2luLWFwcC1icm93c2Vy
LXByaXZhY3ktdGVzdC11c2VyLXN0eWxlLXNoZWV0cyJdXTsKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpyZXF1ZXN0XTsKKyAgICBOU0Vycm9yICplcnJvciA9IFtkZWxlZ2F0ZSB3YWl0Rm9yRGlk
RmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkVycm9yXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24sIEAiQXR0ZW1wdGVkIG5hdmlnYXRpb24gYXdheSBmcm9t
IGFwcC1ib3VuZCBkb21haW4iKTsKKworICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5VGVz
dFNldHRpbmdzKCk7Cit9CisKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQogCiAj
ZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397045</attachid>
            <date>2020-04-20 18:37:33 -0700</date>
            <delta_ts>2020-04-20 19:36:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-210769-20200420183732.patch</filename>
            <type>text/plain</type>
            <size>25436</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMzcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIzODkzNDUyYzJiZmQxZTc3
MjBmYzIyMWU0Njk2ZjhkMWRmZjM4NTkuLmIwNDQ5MDZkYjA3OTY4YTEwZGQyMGFiYjJkNjhiNDQz
NjYzZjY1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMjAtMDQtMjAgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQXBwLWJvdW5kIGRv
bWFpbiBiZWhhdmlvciBzaG91bGQgYWJpZGUgYnkgdGhlIGxpbWl0c05hdmlnYXRpb25zVG9BcHBC
b3VuZERvbWFpbnMgYXJndW1lbnQgaW4gV0tXZWJWaWV3IGNvbmZpZ3VyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDc2OQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjIwNjUyNDE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVs
Z2hhbS4KKworICAgICAgICBDaGFuZ2VzIGFwcC1ib3VuZCBkb21haW4gYmVoYXZpb3IgdG8gYmUg
dHJpZ2dlcmVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICBsaW1pdHNOYXZpZ2F0aW9uc1RvQXBw
Qm91bmREb21haW5zLCBhIFdlYlZpZXcgY29uZmlndXJhdGlvbiBmbGFnLgorICAgICAgICBJZiB0
aGUgV2ViVmlldyBoYXMgdGhpcyBwYXJhbWV0ZXIgc2V0IGFuZCBpcyBjdXJyZW50bHkgbmF2aWdh
dGluZyB0bworICAgICAgICBhbiBhcHAgYm91bmQgZG9tYWluLCB0aGVuIGFwcC1ib3VuZCBwcml2
aWxlZ2VzIHdpbGwgYmUgZ3JhbnRlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldElzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW5BbmRDaGVja0lmUGVybWl0dGVkKToKKyAgICAgICAgVXBkYXRlIHRoaXMg
ZnVuY3Rpb24gdG8gcmV0dXJuIGEgYm9vbGVhbiB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZQorICAg
ICAgICBuYXZpZ2F0aW9uIHNob3VsZCBmYWlsLiBBIGZhaWx1cmUgc2hvdWxkIG9jY3VyIGlmIGEg
V2ViVmlldyBoYXMgc2V0CisgICAgICAgIHRoZSBsaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmRE
b21haW5zIGZsYWcgYW5kIGF0dGVtcHRzIHRvIG5hdmlnYXRlCisgICAgICAgIGF3YXkgZnJvbSBh
biBhcHAtYm91bmQgZG9tYWluLgorCisgICAgICAgIElmIHRoZSBsaW1pdHNOYXZpZ2F0aW9uc1Rv
QXBwQm91bmREb21haW5zIHZhbHVlIGhhcyBub3QgYmVlbiBzZXQgdG8KKyAgICAgICAgdHJ1ZSwg
bWFpbnRhaW4gbm9uLWFwcCBib3VuZCBiZWhhdmlvciByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhl
IGRvbWFpbgorICAgICAgICBpcyBhcHAtYm91bmQgb3Igbm90LgorCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAg
IENoZWNrIHRoZSByZXN1bHQgb2Ygc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbkFuZENo
ZWNrSWZQZXJtaXR0ZWQgYW5kIGZhaWwgdGhlCisgICAgICAgIG5hdmlnYXRpb24gaWYgbmVlZGVk
LCB3aXRoIGJvdGggUkVMRUFTRSBsb2dnaW5nIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgICAgICBl
cnJvciBtZXNzYWdlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0SXNOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbik6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oOgorICAgICAgICBSZW5hbWVkIGZvciBjbGFyaXR5LgorCiAyMDIwLTA0LTIw
ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS82MjA1OTA0Nj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IDZiYmNlNGE0YTA3YzA3OTAyZjQ5NzRjYjM2NDBmNTU2ZTc4MjA4MWYuLjQz
YzFiZjQ1MzViMTZjOTY1NDA0M2QxZTAwMWY1Mzg3MjQwYmZlODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzEyNywzMiArMzEyNywzNiBAQCBwcml2YXRl
OgogICAgIFBvbGljeUNoZWNrSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbihib29sIGlzTWFpbkZy
YW1lLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQorYm9vbCBXZWJQYWdlUHJveHk6
OnNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW5BbmRDaGVja0lmUGVybWl0dGVkKGJvb2wg
aXNNYWluRnJhbWUsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgT3B0aW9uYWw8TmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4+IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pCiB7CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoaXNNYWluRnJhbWUpIHsKICAgICAgICAgaWYgKFdF
Ql9QQUdFX1BST1hZX0FERElUSU9OU19TRVRJU05BVklHQVRJTkdUT0FQUEJPVU5ERE9NQUlOKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlm
ICghaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgewogICAgICAgICAgICAgbV9pc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1faWdu
b3Jlc0FwcEJvdW5kRG9tYWlucykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCpp
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluID09IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
OjpObykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAo
bV9saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zKSB7CisgICAgICAgICAgICBpZiAo
KmlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gPT0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW46Ok5vKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1fY29u
ZmlndXJhdGlvbi0+c2V0V2ViVmlld0NhdGVnb3J5KFdlYlZpZXdDYXRlZ29yeTo6QXBwQm91bmRE
b21haW4pOworICAgICAgICAgICAgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluID0gTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46OlllczsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIG1fY29uZmlndXJhdGlvbi0+c2V0V2ViVmlld0NhdGVnb3J5KFdlYlZpZXdDYXRlZ29yeTo6
SW5BcHBCcm93c2VyKTsKICAgICAgICAgICAgIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
biA9IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKICAgICAgICAgICAgIG1faGFzTmF2
aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbiA9IE5hdmlnYXRlZEF3YXlGcm9tQXBwQm91bmRE
b21haW46OlllczsKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2Nv
bmZpZ3VyYXRpb24tPnNldFdlYlZpZXdDYXRlZ29yeShXZWJWaWV3Q2F0ZWdvcnk6OkFwcEJvdW5k
RG9tYWluKTsKLSAgICAgICAgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluID0gTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW46OlllczsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShpc01haW5GcmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKHJlcXVlc3RVUkwpOwogICAgIFVOVVNF
RF9QQVJBTShpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICNlbmRpZgorICAgIHJldHVy
biB0cnVlOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpblRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKQEAgLTUxNTUsMTAgKzUxNTksNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2NlcwogICAg
IHNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0ID0gU2hvdWxkRXhwZWN0QXBwQm91bmRE
b21haW5SZXN1bHQ6OlllczsKICNlbmRpZgogICAgIAotICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtl
UmVmKGZyYW1lLnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBmcmFtZSA9IG1ha2VSZWYoZnJhbWUpLCBzZW5kZXIgPSBXVEZNb3Zl
KHNlbmRlciksIG5hdmlnYXRpb25dIChQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6Oldl
YnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYg
c2FmZUJyb3dzaW5nV2FybmluZywgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+
IGlzQXBwQm91bmREb21haW4pIG11dGFibGUgewotCi0gICAgICAgIGlmIChwb2xpY3lBY3Rpb24g
IT0gUG9saWN5QWN0aW9uOjpJZ25vcmUpCi0gICAgICAgICAgICBzZXRJc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluKGZyYW1lLT5pc01haW5GcmFtZSgpLCBuYXZpZ2F0aW9uLT5jdXJyZW50UmVx
dWVzdCgpLnVybCgpLCBpc0FwcEJvdW5kRG9tYWluKTsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFr
ZVJlZihmcmFtZS5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgZnJhbWUgPSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92
ZShzZW5kZXIpLCBuYXZpZ2F0aW9uLCBmcmFtZUluZm8sIHVzZXJEYXRhT2JqZWN0ID0gcHJvY2Vz
cy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCldIChQ
b2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMs
IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgT3B0
aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+IGlzQXBwQm91bmREb21haW4pIG11dGFi
bGUgewogCiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBmcmFtZSA9IGZyYW1lLmNvcHlSZWYoKSwg
c2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9uLCBwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBwb2xpY2llcyA9IG1ha2VSZWZQdHIocG9saWNpZXMpXSAoUG9saWN5QWN0aW9u
IHBvbGljeUFjdGlvbikgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUtPmlzTWFpbkZy
YW1lKCkpIHsKQEAgLTUxNzEsNiArNTE3MiwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlcwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVjZWl2ZWROYXZpZ2F0aW9uUG9saWN5RGVjaXNp
b24ocG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uLmdldCgpLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBmcmFtZSwgV1RGTW92ZShwb2xpY2llcyksIFdURk1vdmUoc2VuZGVyKSk7CiAgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBpZiAocG9saWN5QWN0aW9uICE9IFBvbGljeUFjdGlv
bjo6SWdub3JlKSB7CisgICAgICAgICAgICBpZiAoIXNldElzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW5BbmRDaGVja0lmUGVybWl0dGVkKGZyYW1lLT5pc01haW5GcmFtZSgpLCBuYXZpZ2F0aW9u
LT5jdXJyZW50UmVxdWVzdCgpLnVybCgpLCBpc0FwcEJvdW5kRG9tYWluKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gZXJyb3IgPSBSZXNvdXJjZUVycm9yIHsgU3RyaW5nIHsgfSwgMCwgbmF2aWdh
dGlvbi0+Y3VycmVudFJlcXVlc3QoKS51cmwoKSwgIkF0dGVtcHRlZCBuYXZpZ2F0aW9uIGF3YXkg
ZnJvbSBhcHAtYm91bmQgZG9tYWluIl9zIH07CisgICAgICAgICAgICAgICAgbV9uYXZpZ2F0aW9u
Q2xpZW50LT5kaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKCp0aGlzLCBGcmFt
ZUluZm9EYXRhIHsgZnJhbWVJbmZvIH0sIG5hdmlnYXRpb24uZ2V0KCksIGVycm9yLCB1c2VyRGF0
YU9iamVjdCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChM
b2FkaW5nLCAiSWdub3JpbmcgcmVxdWVzdCB0byBsb2FkIHRoaXMgbWFpbiByZXNvdXJjZSBiZWNh
dXNlIGl0IGlzIGF0dGVtcHRpbmcgdG8gbmF2aWdhdGUgYXdheSBmcm9tIGFuIGFwcC1ib3VuZCBk
b21haW4iKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xpY3lBY3Rpb246
Oklnbm9yZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCFtX3BhZ2VDbGllbnQpCiAgICAgICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIocG9saWN5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKaW5kZXggNjI0Yjg5ODI2ZmQ0NGIzZmYyMzVkYWU2ZDJiMWY3MThiMmRmZDgxNi4u
YmRlN2EyNWU2OWZlZTU4ZDdjYTQ5OGUyMjA4NDAwYmMzY2IxM2E4MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTIzMDMsNyArMjMwMyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0cnlDbG9zZVRpbWVkT3V0KCk7CiAgICAgdm9pZCBtYWtlU3RvcmFnZVNwYWNlUmVx
dWVzdChXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudE9yaWdpblVzYWdlLCB1
aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYpOwogICAgICAgICAKLSAgICB2b2lkIHNl
dElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJM
JiwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+KTsKKyAgICBib29sIHNldElz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW5BbmRDaGVja0lmUGVybWl0dGVkKGJvb2wgaXNNYWlu
RnJhbWUsIGNvbnN0IFVSTCYsIE9wdGlvbmFsPE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluPik7
CiAgICAgTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbiBoYXNOYXZpZ2F0ZWRBd2F5RnJv
bUFwcEJvdW5kRG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFw
cEJvdW5kRG9tYWluOyB9CiAgICAgICAgIAogICAgIGNvbnN0IElkZW50aWZpZXIgbV9pZGVudGlm
aWVyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDgxN2UzNDE0ZjcyNGE2ZjQ0ZTk0NDFiZDI1ODg0NWQ3OGZkYWNlY2MuLjE2YWFjZGRlNTVhMTMx
ZWFiZDljMjE3MWJjZWU1OGM4ZWFkNzA3ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMC0wNC0yMCAgS2F0ZSBD
aGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBcHAtYm91bmQg
ZG9tYWluIGJlaGF2aW9yIHNob3VsZCBhYmlkZSBieSB0aGUgbGltaXRzTmF2aWdhdGlvbnNUb0Fw
cEJvdW5kRG9tYWlucyBhcmd1bWVudCBpbiBXS1dlYlZpZXcgY29uZmlndXJhdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwNzY5CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MjA2NTI0MT4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmVudCBG
dWxnaGFtLgorCisgICAgICAgIFJlbW92ZXMgYW55IHRlc3RzIGZvciBzd2FwcGluZyBiZXR3ZWVu
IGFwcC1ib3VuZCBhbmQgbm9uIGFwcC1ib3VuZAorICAgICAgICBkb21haW5zIGFzIHRoaXMgYmVo
YXZpb3IgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKworICAgICAgICBTZXRzIHRoZSBsaW1pdHNO
YXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zIGZsYWcgZm9yIHRlc3RzIHdoaWNoIHNob3VsZAor
ICAgICAgICBoYXZlIGFwcC1ib3VuZCBiZWhhdmlvciB0byBtYWludGFpbiB0ZXN0IGZ1bmN0aW9u
YWxpdHkuCisKKyAgICAgICAgQWRkcyA1IG5ldyB0ZXN0cyBmb3IgbmV3IGJlaGF2aW9yLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2
YWN5Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICgtW0FwcEJvdW5kRG9tYWluRGVsZWdh
dGUgd2ViVmlldzpkaWRGaW5pc2hOYXZpZ2F0aW9uOl0pOgorICAgICAgICAoLVtBcHBCb3VuZERv
bWFpbkRlbGVnYXRlIHdlYlZpZXc6ZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3aXRoRXJy
b3I6XSk6CisgICAgICAgICgtW0FwcEJvdW5kRG9tYWluRGVsZWdhdGUgd2FpdEZvckRpZEZpbmlz
aE5hdmlnYXRpb25dKToKKyAgICAgICAgKC1bQXBwQm91bmREb21haW5EZWxlZ2F0ZSB3YWl0Rm9y
RGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkVycm9yXSk6CisKIDIwMjAtMDQtMjAgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgT3ZlcnNpemVkIGNh
cmV0IGFuZCBzZWxlY3Rpb24gcmVjdHMgaW4gdGV4dCBmaWVsZHMgb24gZ2FuamkuY29tIGFuZCBu
ZXRmbGl4LmNvbS9sb2dpbgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tCmluZGV4IDE1YmE2NTg5MTY5
NWFhOGFlM2VmNWFhNTAwY2NkODJiMmNjYjg4YWUuLjNhODJhZmFlZDMzNDVhNTAxOWUzYzI0ODhl
MWQ0NjU4MmNlNWNkNTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KQEAgLTIyMCw0OSArMjIw
LDYgQEAgVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3VuZERvbWFpbkZhaWxlZFVz
ZXJBZ2VudFNjcmlwdHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwog
fQogCi1URVNUKEluQXBwQnJvd3NlclByaXZhY3ksIFN3YXBCYWNrVG9BcHBCb3VuZFJlamVjdHNV
c2VyU2NyaXB0KQotewotICAgIGluaXRpYWxpemVJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRp
bmdzKCk7Ci0gICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxv
Y10gaW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNj
cmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsK
LQotICAgIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3
Q29uZmlndXJhdGlvbiBfdGVzdF9jb25maWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6
QCJXZWJQcm9jZXNzUGx1Z0luV2l0aEludGVybmFscyIgY29uZmlndXJlSlNDRm9yVGVzdGluZzpZ
RVNdOwotICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldE5lZWRzSW5BcHBCcm93
c2VyUHJpdmFjeVF1aXJrczpOT107Ci0gICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBf
c2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQ6WUVTXTsKLQotICAgIGF1dG8gc2NoZW1lSGFu
ZGxlciA9IGFkb3B0TlMoW1tJbkFwcEJyb3dzZXJTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7
Ci0gICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVyLmdl
dCgpIGZvclVSTFNjaGVtZTpAImluLWFwcC1icm93c2VyIl07Ci0gICAgCi0gICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25dKTsKLSAgICBOU1VSTFJlcXVlc3QgKnJl
cXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaW4tYXBwLWJyb3dzZXI6Ly8vaW4tYXBwLWJyb3dzZXItcHJpdmFjeS10ZXN0LXVzZXItc2Ny
aXB0Il1dOwotICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwotICAgIFt3ZWJWaWV3
IF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKLQotICAgIFtjb25maWd1cmF0aW9u
LnVzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlclNjcmlwdEltbWVkaWF0ZWx5OnVzZXJTY3Jp
cHQuZ2V0KCldOwotICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAIndpbmRvdy53a1Vz
ZXJTY3JpcHRJbmplY3RlZCIgY29tcGxldGlvbkhhbmRsZXI6XihpZCBfTnVsbGFibGUgcmVzdWx0
LCBOU0Vycm9yICogX051bGxhYmxlIGVycm9yKSB7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShyZXN1
bHQpOwotICAgICAgICBFWFBFQ1RfVFJVRSghIWVycm9yKTsKLSAgICAgICAgaXNEb25lID0gdHJ1
ZTsKLSAgICB9XTsKLQotICAgIGlzRG9uZSA9IGZhbHNlOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmaXNEb25lKTsKLQotICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RX
aXRoVVJMOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJpbi1hcHAtYnJv
d3Nlci1wcml2YWN5LWxvY2FsLWZpbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdXTsKLSAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpyZXF1ZXN0XTsKLSAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlv
bl07Ci0gICAgCi0gICAgaXNEb25lID0gZmFsc2U7Ci0gICAgW2NvbmZpZ3VyYXRpb24udXNlckNv
bnRlbnRDb250cm9sbGVyIF9hZGRVc2VyU2NyaXB0SW1tZWRpYXRlbHk6dXNlclNjcmlwdC5nZXQo
KV07Ci0gICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAid2luZG93LndrVXNlclNjcmlw
dEluamVjdGVkIiBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIF9OdWxsYWJsZSByZXN1bHQsIE5TRXJy
b3IgKiBfTnVsbGFibGUgZXJyb3IpIHsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdCk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKCEhZXJyb3IpOwotICAgICAgICBjbGVhblVwSW5BcHBCcm93c2Vy
UHJpdmFjeVRlc3RTZXR0aW5ncygpOwotICAgICAgICBpc0RvbmUgPSB0cnVlOwotICAgIH1dOwot
Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwotfQotCiBURVNUKEluQXBw
QnJvd3NlclByaXZhY3ksIEFwcEJvdW5kRG9tYWlucykKIHsKICAgICBpbml0aWFsaXplSW5BcHBC
cm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOwpAQCAtMjg4LDYgKzI0NSw3IEBAIFRFU1QoSW5B
cHBCcm93c2VyUHJpdmFjeSwgTG9jYWxGaWxlc0FyZUFwcEJvdW5kKQogICAgIGluaXRpYWxpemVJ
bkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7CiAgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBb
W2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxl
ZDpZRVNdOworICAgIFtjb25maWd1cmF0aW9uIHNldExpbWl0c05hdmlnYXRpb25zVG9BcHBCb3Vu
ZERvbWFpbnM6WUVTXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdFplcm8gY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uLmdldCgpXSk7CiAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVz
dCByZXF1ZXN0V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
aW4tYXBwLWJyb3dzZXItcHJpdmFjeS1sb2NhbC1maWxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CkBAIC0zMDgsNiArMjY2
LDcgQEAgVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBEYXRhRmlsZXNBcmVBcHBCb3VuZCkKICAg
ICBpbml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOwogICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CiAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0SW5BcHBCcm93c2Vy
UHJpdmFjeUVuYWJsZWQ6WUVTXTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRMaW1pdHNOYXZpZ2F0
aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RaZXJvIGNvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJkYXRhOnRl
eHQvaHRtbCxzdGFydCJdXV07CkBAIC0zMjcsNiArMjg2LDcgQEAgVEVTVChJbkFwcEJyb3dzZXJQ
cml2YWN5LCBBYm91dEZpbGVzQXJlQXBwQm91bmQpCiAgICAgaW5pdGlhbGl6ZUluQXBwQnJvd3Nl
clByaXZhY3lUZXN0U2V0dGluZ3MoKTsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5T
KFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtbY29uZmlndXJh
dGlvbiBwcmVmZXJlbmNlc10gX3NldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkOllFU107Cisg
ICAgW2NvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWluczpZ
RVNdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOwpAQCAtMzQ1LDYgKzMw
NSw3IEBAIHN0YXRpYyBOU1N0cmluZyAqc3R5bGVTaGVldFNvdXJjZSA9IEAiYm9keSB7IGJhY2tn
cm91bmQtY29sb3I6IGdyZWVuICFpbXBvcnRhbnQ7CiBzdGF0aWMgTlNTdHJpbmcgKmJhY2tncm91
bmRDb2xvclNjcmlwdCA9IEAid2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSwg
bnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpIjsKIHN0YXRpYyBOU1N0
cmluZyAqZnJhbWVCYWNrZ3JvdW5kQ29sb3JTY3JpcHQgPSBAIndpbmRvdy5nZXRDb21wdXRlZFN0
eWxlKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpZnJhbWUnKVswXS5jb250ZW50RG9j
dW1lbnQuYm9keSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpIjsK
IHN0YXRpYyBjb25zdCBjaGFyKiByZWRJblJHQiA9ICJyZ2IoMjU1LCAwLCAwKSI7CitzdGF0aWMg
Y29uc3QgY2hhciogYmxhY2tJblJHQiA9ICJyZ2JhKDAsIDAsIDAsIDApIjsKIAogc3RhdGljIHZv
aWQgZXhwZWN0U2NyaXB0RXZhbHVhdGVzVG9Db2xvcihXS1dlYlZpZXcgKndlYlZpZXcsIE5TU3Ry
aW5nICpzY3JpcHQsIGNvbnN0IGNoYXIqIGNvbG9yKQogewpAQCAtNDU4LDcgKzQxOSw3IEBAIFRF
U1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgTm9uQXBwQm91bmREb21haW5DYW5ub3RBY2Nlc3NNZXNz
YWdlSGFuZGxlcnMpCiAgICAgY2xlYW5VcEluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3Mo
KTsKIH0KIAotVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZFRvTm9uQXBwQm91bmRE
b21haW5DYW5ub3RBY2Nlc3NNZXNzYWdlSGFuZGxlcnMpCitURVNUKEluQXBwQnJvd3NlclByaXZh
Y3ksIEFwcEJvdW5kRG9tYWluQ2FuQWNjZXNzTWVzc2FnZUhhbmRsZXJzKQogewogICAgIGluaXRp
YWxpemVJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7CiAgICAgaXNEb25lID0gZmFs
c2U7CkBAIC00NjgsNiArNDI5LDcgQEAgVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3Vu
ZFRvTm9uQXBwQm91bmREb21haW5DYW5ub3RBY2Nlc3NNZXNzYWdlSGFuZGxlcnMKICAgICBhdXRv
IHNjaGVtZUhhbmRsZXIgPSBhZG9wdE5TKFtbSW5BcHBCcm93c2VyU2NoZW1lSGFuZGxlciBhbGxv
Y10gaW5pdF0pOwogICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6c2NoZW1l
SGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJpbi1hcHAtYnJvd3NlciJdOwogICAgIFtbY29u
ZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkOllF
U107CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0TGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9t
YWluczpZRVNdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0WmVybyBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKIApAQCAtNDg2LDE0ICs0NDgsNiBAQCBURVNUKEluQXBwQnJvd3NlclByaXZh
Y3ksIEFwcEJvdW5kVG9Ob25BcHBCb3VuZERvbWFpbkNhbm5vdEFjY2Vzc01lc3NhZ2VIYW5kbGVy
cwogICAgICAgICBGQUlMKCk7CiAgICAgfV07CiAKLSAgICAvLyBOYXZpZ2F0ZSBhd2F5IGZyb20g
YW4gYXBwLWJvdW5kIGRvbWFpbi4KLSAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QyID0gW05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImluLWFwcC1icm93
c2VyOi8vL2luLWFwcC1icm93c2VyLXByaXZhY3ktdGVzdC1tZXNzYWdlLWhhbmRsZXIiXV07Ci0g
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVzdDJdOwotICAgIFt3ZWJWaWV3IF90ZXN0X3dh
aXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKLQotICAgIC8vIFNldCB0aGUgYmFja2dyb3VuZCBj
b2xvciB0byByZWQgaWYgbWVzc2FnZSBoYW5kbGVycyByZXR1cm5lZCBudWxsIHNvIHdlIGNhbgot
ICAgIC8vIGNoZWNrIHdpdGhvdXQgbmVlZGluZyBhIG1lc3NhZ2UgaGFuZGxlci4KLSAgICBleHBl
Y3RTY3JpcHRFdmFsdWF0ZXNUb0NvbG9yKHdlYlZpZXcuZ2V0KCksIGJhY2tncm91bmRDb2xvclNj
cmlwdCwgcmVkSW5SR0IpOwogICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRp
bmdzKCk7CiB9CiAKQEAgLTg3NSw2ICs4MjksMjA1IEBAIFRFU1QoSW5BcHBCcm93c2VyUHJpdmFj
eSwgTm9uQXBwQm91bmREb21haW5Eb2VzTm90QWxsb3dTZXJ2aWNlV29ya2VycykKICAgICBpc0Rv
bmUgPSBmYWxzZTsKIH0KIAorQGludGVyZmFjZSBBcHBCb3VuZERvbWFpbkRlbGVnYXRlIDogTlNP
YmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlPgorLSAodm9pZCl3YWl0Rm9yRGlkRmluaXNoTmF2
aWdhdGlvbjsKKy0gKE5TRXJyb3IgKil3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlv
bkVycm9yOworQGVuZAorCitAaW1wbGVtZW50YXRpb24gQXBwQm91bmREb21haW5EZWxlZ2F0ZSB7
CisgICAgYm9vbCBfbmF2aWdhdGlvbkZpbmlzaGVkOworICAgIFJldGFpblB0cjxOU0Vycm9yPiBf
cHJvdmlzaW9uYWxOYXZpZ2F0aW9uRmFpbGVkRXJyb3I7Cit9CisKKy0gKHZvaWQpd2ViVmlldzoo
V0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZpZ2F0aW9uOihXS05hdmlnYXRpb24gKilu
YXZpZ2F0aW9uCit7CisgICAgX25hdmlnYXRpb25GaW5pc2hlZCA9IHRydWU7Cit9CisKKy0gKHZv
aWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uOihudWxsX3Vuc3BlY2lmaWVkIFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24gd2l0aEVycm9y
OihOU0Vycm9yICopZXJyb3IKK3sKKyAgICBfcHJvdmlzaW9uYWxOYXZpZ2F0aW9uRmFpbGVkRXJy
b3IgPSBlcnJvcjsKK30KKworLSAodm9pZCl3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbgorewor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmX25hdmlnYXRpb25GaW5pc2hlZCk7Cit9CisK
Ky0gKE5TRXJyb3IgKil3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkVycm9yCit7
CisgICAgd2hpbGUgKCFfcHJvdmlzaW9uYWxOYXZpZ2F0aW9uRmFpbGVkRXJyb3IpCisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisgICAgcmV0dXJuIF9wcm92aXNp
b25hbE5hdmlnYXRpb25GYWlsZWRFcnJvci5hdXRvcmVsZWFzZSgpOworfQorCitAZW5kCisKK1RF
U1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgQXBwQm91bmRGbGFnRm9yTm9uQXBwQm91bmREb21haW5G
YWlscykKK3sKKyAgICBpbml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygp
OworICAgIGlzRG9uZSA9IGZhbHNlOworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHNjaGVt
ZUhhbmRsZXIgPSBhZG9wdE5TKFtbSW5BcHBCcm93c2VyU2NoZW1lSGFuZGxlciBhbGxvY10gaW5p
dF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6c2NoZW1lSGFuZGxl
ci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJpbi1hcHAtYnJvd3NlciJdOworICAgIFtjb25maWd1cmF0
aW9uIHNldExpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnM6WUVTXTsKKworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNN
YWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgp
XSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW0FwcEJvdW5kRG9tYWluRGVsZWdhdGUg
bmV3XSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgp
XTsKKworICAgIC8vIExvYWQgYSBub24tYXBwIGJvdW5kIGRvbWFpbi4KKyAgICBOU1VSTFJlcXVl
c3QgKnJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaW4tYXBwLWJyb3dzZXI6Ly8vaW4tYXBwLWJyb3dzZXItcHJpdmFjeS10ZXN0LXVz
ZXItc3R5bGUtc2hlZXRzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwor
ICAgIE5TRXJyb3IgKmVycm9yID0gW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uRXJyb3JdOworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbiwgQCJBdHRlbXB0ZWQgbmF2aWdhdGlvbiBhd2F5IGZyb20gYXBwLWJvdW5kIGRvbWFp
biIpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBsb2FkIGRpZG4ndCBjb21wbGV0ZSBieSBjaGVj
a2luZyB0aGUgYmFja2dyb3VuZCBjb2xvci4KKyAgICAvLyBSZWQgd291bGQgaW5kaWNhdGUgaXQg
ZmluaXNoZWQgbG9hZGluZy4KKyAgICBleHBlY3RTY3JpcHRFdmFsdWF0ZXNUb0NvbG9yKHdlYlZp
ZXcuZ2V0KCksIGJhY2tncm91bmRDb2xvclNjcmlwdCwgYmxhY2tJblJHQik7CisgICAgY2xlYW5V
cEluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKK30KKworVEVTVChJbkFwcEJyb3dz
ZXJQcml2YWN5LCBOYXZpZ2F0ZUF3YXlGcm9tQXBwQm91bmREb21haW5XaXRoQXBwQm91bmRGbGFn
RmFpbHMpCit7CisgICAgaW5pdGlhbGl6ZUluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3Mo
KTsKKyAgICBpc0RvbmUgPSBmYWxzZTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBzY2hl
bWVIYW5kbGVyID0gYWRvcHROUyhbW0luQXBwQnJvd3NlclNjaGVtZUhhbmRsZXIgYWxsb2NdIGlu
aXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOnNjaGVtZUhhbmRs
ZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAiaW4tYXBwLWJyb3dzZXIiXTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zOllFU107CisKKyAgICBh
dXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtBcHBCb3VuZERvbWFpbkRlbGVnYXRl
IG5ld10pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisgICAgCisgICAgLy8gTmF2aWdhdGUgdG8gYW4gYXBwLWJvdW5kIGRvbWFpbiBhbmQgZXhw
ZWN0IGEgc3VjY2Vzc2Z1bCBsb2FkLgorICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAImluLWFwcC1icm93c2VyLXByaXZhY3ktbG9jYWwtZmlsZSIgd2l0aEV4dGVuc2lvbjpA
Imh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFt3
ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmlu
aXNoTmF2aWdhdGlvbl07CisgICAgCisgICAgLy8gTm93IHRyeSB0byBsb2FkIGEgbm9uLWFwcCBi
b3VuZCBkb21haW4gYW5kIG1ha2Ugc3VyZSBpdCBmYWlscy4KKyAgICByZXF1ZXN0ID0gW05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImluLWFwcC1icm93
c2VyOi8vL2luLWFwcC1icm93c2VyLXByaXZhY3ktdGVzdC11c2VyLXN0eWxlLXNoZWV0cyJdXTsK
KyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpyZXF1ZXN0XTsKKyAgICBOU0Vycm9yICplcnJvciA9
IFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbkVycm9yXTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24sIEAiQXR0ZW1wdGVk
IG5hdmlnYXRpb24gYXdheSBmcm9tIGFwcC1ib3VuZCBkb21haW4iKTsKKworICAgIC8vIE1ha2Ug
c3VyZSB0aGUgbG9hZCBkaWRuJ3QgY29tcGxldGUgYnkgY2hlY2tpbmcgdGhlIGJhY2tncm91bmQg
Y29sb3IuCisgICAgLy8gUmVkIHdvdWxkIGluZGljYXRlIGl0IGZpbmlzaGVkIGxvYWRpbmcuCisg
ICAgZXhwZWN0U2NyaXB0RXZhbHVhdGVzVG9Db2xvcih3ZWJWaWV3LmdldCgpLCBiYWNrZ3JvdW5k
Q29sb3JTY3JpcHQsIGJsYWNrSW5SR0IpOworICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5
VGVzdFNldHRpbmdzKCk7Cit9CisKK1RFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgQXBwQm91bmRE
b21haW5XaXRob3V0RmxhZ1RyZWF0ZWRBc05vbkFwcEJvdW5kKQoreworICAgIGluaXRpYWxpemVJ
bkFwcEJyb3dzZXJQcml2YWN5VGVzdFNldHRpbmdzKCk7CisgICAgaXNEb25lID0gZmFsc2U7CisK
KyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gc2NoZW1lSGFuZGxlciA9IGFkb3B0TlMoW1tJbkFw
cEJyb3dzZXJTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24g
c2V0VVJMU2NoZW1lSGFuZGxlcjpzY2hlbWVIYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAImlu
LWFwcC1icm93c2VyIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5T
KFtBcHBCb3VuZERvbWFpbkRlbGVnYXRlIG5ld10pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgCisgICAgLy8gTmF2aWdhdGUgdG8gYW4g
YXBwLWJvdW5kIGRvbWFpbiBhbmQgZXhwZWN0IGEgc3VjY2Vzc2Z1bCBsb2FkLgorICAgIE5TVVJM
UmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAImluLWFwcC1icm93c2VyLXByaXZhY3ktbG9j
YWwtZmlsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAg
IFtkZWxlZ2F0ZSB3YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07CisKKyAgICAvLyBCdXQgdGhl
IG5hdmlnYXRpb24gc2hvdWxkIG5vdCBoYXZlIGJlZW4gY29uc2lkZXJlZCBhcHAtYm91bmQgYmVj
YXVzZSB0aGUgV2ViVmlldyBjb25maWd1cmF0aW9uCisgICAgLy8gc3BlY2lmaWNhdGlvbiB3YXMg
bm90IHNldC4KKyAgICBpc0RvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfaXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbjpeKEJPT0wgaXNBcHBCb3VuZCkgeworICAgICAgICBFWFBFQ1RfRkFM
U0UoaXNBcHBCb3VuZCk7CisgICAgICAgIGNsZWFuVXBJbkFwcEJyb3dzZXJQcml2YWN5VGVzdFNl
dHRpbmdzKCk7CisgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOworfQorCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ks
IFdlYlZpZXdXaXRob3V0QXBwQm91bmRGbGFnQ2FuRnJlZWx5TmF2aWdhdGUpCit7CisgICAgaW5p
dGlhbGl6ZUluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKKyAgICBpc0RvbmUgPSBm
YWxzZTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBzY2hlbWVIYW5kbGVyID0gYWRvcHRO
UyhbW0luQXBwQnJvd3NlclNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmln
dXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOnNjaGVtZUhhbmRsZXIuZ2V0KCkgZm9yVVJMU2No
ZW1lOkAiaW4tYXBwLWJyb3dzZXIiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkg
Y29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IGFkb3B0TlMoW0FwcEJvdW5kRG9tYWluRGVsZWdhdGUgbmV3XSk7CisgICAgW3dlYlZpZXcgc2V0
TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICAKKyAgICAvLyBOYXZpZ2F0
ZSB0byBhbiBhcHAtYm91bmQgZG9tYWluIGFuZCBleHBlY3QgYSBzdWNjZXNzZnVsIGxvYWQuCisg
ICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaW4tYXBwLWJyb3dzZXItcHJp
dmFjeS1sb2NhbC1maWxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6cmVxdWVz
dF07CisgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsKKworICAgIGlz
RG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
Ol4oQk9PTCBpc0FwcEJvdW5kKSB7CisgICAgICAgIEVYUEVDVF9GQUxTRShpc0FwcEJvdW5kKTsK
KyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmlzRG9uZSk7CisKKyAgICAvLyBOYXZpZ2F0ZSB0byBhbiBub24gYXBwLWJvdW5kIGRv
bWFpbiBhbmQgZXhwZWN0IGEgc3VjY2Vzc2Z1bCBsb2FkLgorICAgIHJlcXVlc3QgPSBbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaW4tYXBwLWJyb3dz
ZXI6Ly8vaW4tYXBwLWJyb3dzZXItcHJpdmFjeS10ZXN0LXVzZXItc3R5bGUtc2hlZXRzIl1dOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOworICAgIFtkZWxlZ2F0ZSB3YWl0Rm9y
RGlkRmluaXNoTmF2aWdhdGlvbl07CisgICAgCisgICAgaXNEb25lID0gZmFsc2U7CisgICAgW3dl
YlZpZXcgX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46XihCT09MIGlzQXBwQm91bmQpIHsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKGlzQXBwQm91bmQpOworICAgICAgICBpc0RvbmUgPSB0cnVl
OworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKKworICAg
IC8vIE5hdmlnYXRpb24gc2hvdWxkIGJlIHN1Y2Nlc3NmdWwsIGJ1dCB0aGlzIFdlYlZpZXcgc2hv
dWxkIG5vdCBnZXQgYXBwLWJvdW5kIGRvbWFpbgorICAgIC8vIHByaXZpbGVnZXMgbGlrZSB1c2Vy
IHN0eWxlIHNoZWV0cy4KKyAgICBleHBlY3RTY3JpcHRFdmFsdWF0ZXNUb0NvbG9yKHdlYlZpZXcu
Z2V0KCksIGJhY2tncm91bmRDb2xvclNjcmlwdCwgYmxhY2tJblJHQik7CisgICAgY2xlYW5VcElu
QXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKK30KKworVEVTVChJbkFwcEJyb3dzZXJQ
cml2YWN5LCBXZWJWaWV3Q2Fubm90VXBkYXRlQXBwQm91bmRGbGFnT25jZVNldCkKK3sKKyAgICBp
bml0aWFsaXplSW5BcHBCcm93c2VyUHJpdmFjeVRlc3RTZXR0aW5ncygpOworICAgIGlzRG9uZSA9
IGZhbHNlOworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHNjaGVtZUhhbmRsZXIgPSBhZG9w
dE5TKFtbSW5BcHBCcm93c2VyU2NoZW1lSGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtjb25m
aWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6c2NoZW1lSGFuZGxlci5nZXQoKSBmb3JVUkxT
Y2hlbWU6QCJpbi1hcHAtYnJvd3NlciJdOworICAgIFtjb25maWd1cmF0aW9uIHNldExpbWl0c05h
dmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnM6WUVTXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW0FwcEJvdW5kRG9tYWluRGVsZWdhdGUgbmV3XSk7CisgICAgW3dl
YlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICAKKyAgICAv
LyBOYXZpZ2F0ZSB0byBhbiBhcHAtYm91bmQgZG9tYWluIGFuZCBleHBlY3QgYSBzdWNjZXNzZnVs
IGxvYWQuCisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0
V2l0aFVSTDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiaW4tYXBwLWJy
b3dzZXItcHJpdmFjeS1sb2NhbC1maWxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6cmVxdWVzdF07CisgICAgW2RlbGVnYXRlIHdhaXRGb3JEaWRGaW5pc2hOYXZpZ2F0aW9uXTsK
KworICAgIGlzRG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9pc05hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluOl4oQk9PTCBpc0FwcEJvdW5kKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKGlzQXBw
Qm91bmQpOworICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKKworICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXSBz
ZXRMaW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zOk5PXTsKKyAgICAvLyBOb3cgdHJ5
IHRvIGxvYWQgYSBub24tYXBwIGJvdW5kIGRvbWFpbiBhbmQgbWFrZSBzdXJlIGl0IGZhaWxzLgor
ICAgIHJlcXVlc3QgPSBbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiaW4tYXBwLWJyb3dzZXI6Ly8vaW4tYXBwLWJyb3dzZXItcHJpdmFjeS10ZXN0LXVz
ZXItc3R5bGUtc2hlZXRzIl1dOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OnJlcXVlc3RdOwor
ICAgIE5TRXJyb3IgKmVycm9yID0gW2RlbGVnYXRlIHdhaXRGb3JEaWRGYWlsUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uRXJyb3JdOworICAgIEVYUEVDVF9XS19TVFJFUShlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbiwgQCJBdHRlbXB0ZWQgbmF2aWdhdGlvbiBhd2F5IGZyb20gYXBwLWJvdW5kIGRvbWFp
biIpOworCisgICAgY2xlYW5VcEluQXBwQnJvd3NlclByaXZhY3lUZXN0U2V0dGluZ3MoKTsKK30K
KwogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAKICNlbmRpZiAvLyBQTEFURk9S
TShJT1NfRkFNSUxZKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>