<?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>183316</bug_id>
          
          <creation_ts>2018-03-03 16:18:03 -0800</creation_ts>
          <short_desc>Web Inspector: Sources: add SourcesTabContentView and SourcesSidebarPanel classes</short_desc>
          <delta_ts>2018-03-08 17:32:58 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>183420</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1403503</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2018-03-03 16:18:03 -0800</bug_when>
    <thetext>&quot;Enable Sources tab&quot; experimental setting should add a new Sources tab. At first,
it will be an exact copy of Resources tab with &quot;resources&quot; renamed to &quot;sources&quot;
where it makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403504</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-03 16:18:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/38107639&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1403505</commentid>
    <comment_count>2</comment_count>
      <attachid>334969</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2018-03-03 16:32:03 -0800</bug_when>
    <thetext>Created attachment 334969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404920</commentid>
    <comment_count>3</comment_count>
      <attachid>334969</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-03-08 14:26:27 -0800</bug_when>
    <thetext>Comment on attachment 334969
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Main.html:745
&gt; +    &lt;script src=&quot;Views/SourceSidebarPanel.js&quot;&gt;&lt;/script&gt;

We should be consistent, and pick Source or Sources for these new classes. I&apos;m in favor of SourcesSidebarPanel/SourcesTabContentView, because it stands out from SourceCode* SourceMap* prefixed classes.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceSidebarPanel.js:30
&gt; +        super(&quot;source&quot;, WI.UIString(&quot;Sources&quot;), true);

&quot;sources&quot;

&gt; Source/WebInspectorUI/UserInterface/Views/SourceSidebarPanel.js:37
&gt; +        var scopeItemPrefix = &quot;source-sidebar-&quot;;

&quot;sources-sidebar-&quot;

&gt; Source/WebInspectorUI/UserInterface/Views/SourceSidebarPanel.js:38
&gt; +        var scopeBarItems = [];

I realize this file was copy-pasted from ResourceNavigationSidebarPanel, but we might as well find-replace var/let.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceSidebarPanel.js:49
&gt; +        this._scopeBar = new WI.ScopeBar(&quot;source-sidebar-scope-bar&quot;, scopeBarItems, scopeBarItems[0], true);

&quot;sources-sidebar-scope-bar&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404956</commentid>
    <comment_count>4</comment_count>
      <attachid>335356</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2018-03-08 15:38:27 -0800</bug_when>
    <thetext>Created attachment 335356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404972</commentid>
    <comment_count>5</comment_count>
      <attachid>335356</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-03-08 16:18:20 -0800</bug_when>
    <thetext>Comment on attachment 335356
Patch

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

r=me

&gt; Source/WebInspectorUI/ChangeLog:57
&gt; +        added and the identifier changed from &quot;resources&quot; to &quot;sources&quot;.

I think both this, and the previous comment, can be merged into the top-level change log comment:

Add Sources tab and sidebar panel, which are copies of the corresponding Resources classes.
The Sources tab is shown when it&apos;s enabled in the experimental settings. This patch doesn&apos;t
remove existing Resources and Debugger tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1404974</commentid>
    <comment_count>6</comment_count>
      <attachid>335366</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2018-03-08 16:23:26 -0800</bug_when>
    <thetext>Created attachment 335366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405001</commentid>
    <comment_count>7</comment_count>
      <attachid>335366</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-08 17:32:56 -0800</bug_when>
    <thetext>Comment on attachment 335366
Patch

Clearing flags on attachment: 335366

Committed r229443: &lt;https://trac.webkit.org/changeset/229443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1405002</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-03-08 17:32:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334969</attachid>
            <date>2018-03-03 16:32:03 -0800</date>
            <delta_ts>2018-03-08 15:38:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29232</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGQyNWE0OWUuLjE4YmRlOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE4LTAzLTAzICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNvdXJj
ZXM6IGFkZCBTb3VyY2VzVGFiQ29udGVudFZpZXcgYW5kIFNvdXJjZVNpZGViYXJQYW5lbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMz
MTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM4MTA3NjM5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNob3cgU291cmNlcyB0YWIgd2hlbiBpdCdz
IGVuYWJsZWQgaW4gdGhlIGV4cGVyaW1lbnRhbCBzZXR0aW5ncy4KKyAgICAgICAgVGhpcyBwYXRj
aCBkb2Vzbid0IHJlbW92ZSBleGlzdGluZyBSZXNvdXJjZXMgYW5kIERlYnVnZ2VyIHRhYnMuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qczoKKyAgICAgICAgKFdJLmNvbnRl
bnRMb2FkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlU2lkZWJhclBhbmVsLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFdJLlNvdXJjZVNpZGViYXJQYW5lbCk6CisgICAgICAgIChXSS5Tb3VyY2VTaWRlYmFyUGFu
ZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKToKKyAgICAgICAgKFdJLlNvdXJjZVNp
ZGViYXJQYW5lbC5wcm90b3R5cGUuZ2V0IG1pbmltdW1XaWR0aCk6CisgICAgICAgIChXSS5Tb3Vy
Y2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNsb3NlZCk6CisgICAgICAgIChXSS5Tb3VyY2VTaWRl
YmFyUGFuZWwucHJvdG90eXBlLnNob3dEZWZhdWx0Q29udGVudFZpZXcpOgorICAgICAgICAoV0ku
U291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2Jq
ZWN0LmlzQW5jZXN0b3IpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlw
ZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0LmdldFBhcmVudCk6CisgICAgICAgIChX
SS5Tb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRP
YmplY3QpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5pbml0aWFs
TGF5b3V0KToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuaGFzQ3Vz
dG9tRmlsdGVycyk6CisgICAgICAgIChXSS5Tb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLm1h
dGNoVHJlZUVsZW1lbnRBZ2FpbnN0Q3VzdG9tRmlsdGVycy5tYXRjaCk6CisgICAgICAgIChXSS5T
b3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLm1hdGNoVHJlZUVsZW1lbnRBZ2FpbnN0Q3VzdG9t
RmlsdGVycyk6CisgICAgICAgIChXSS5Tb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWlu
UmVzb3VyY2VEaWRDaGFuZ2UpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnByb3Rv
dHlwZS5fbWFpbkZyYW1lRGlkQ2hhbmdlKToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGViYXJQYW5l
bC5wcm90b3R5cGUuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZS5kZWxheWVkV29yayk6
CisgICAgICAgIChXSS5Tb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVNYWlu
UmVzb3VyY2VEaWRDaGFuZ2UpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnByb3Rv
dHlwZS5fc2NyaXB0V2FzQWRkZWQpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnBy
b3RvdHlwZS5fYWRkU2NyaXB0KToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGViYXJQYW5lbC5wcm90
b3R5cGUuX3NjcmlwdFdhc1JlbW92ZWQpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVs
LnByb3RvdHlwZS5fc2NyaXB0c0NsZWFyZWQpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBh
bmVsLnByb3RvdHlwZS5fc3R5bGVTaGVldEFkZGVkKToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGVi
YXJQYW5lbC5wcm90b3R5cGUuX2FkZFRhcmdldFdpdGhNYWluUmVzb3VyY2UpOgorICAgICAgICAo
V0kuU291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fdGFyZ2V0UmVtb3ZlZCk6CisgICAgICAg
IChXSS5Tb3VyY2VTaWRlYmFyUGFuZWwucHJvdG90eXBlLl90cmVlU2VsZWN0aW9uRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NvbXBhcmVUcmVl
RWxlbWVudHMpOgorICAgICAgICAoV0kuU291cmNlU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fZXh0
cmFEb21haW5zQWN0aXZhdGVkKToKKyAgICAgICAgKFdJLlNvdXJjZVNpZGViYXJQYW5lbC5wcm90
b3R5cGUuX3Njb3BlQmFyU2VsZWN0aW9uRGlkQ2hhbmdlKToKKyAgICAgICAgV0kuU291cmNlU2lk
ZWJhclBhbmVsIGlzIGEgY29weSBvZiBXSS5SZXNvdXJjZVNpZGViYXJQYW5lbCB3aXRoCisgICAg
ICAgIHRoZSBpZGVudGlmaWVyIGNoYW5nZWQgZnJvbSAicmVzb3VyY2UiIHRvICJzb3VyY2UiLgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcuanM6
IEFkZGVkLgorICAgICAgICAoV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3KToKKyAgICAgICAgKFdJ
LlNvdXJjZXNUYWJDb250ZW50Vmlldy50YWJJbmZvKToKKyAgICAgICAgKFdJLlNvdXJjZXNUYWJD
b250ZW50Vmlldy5pc1RhYkFsbG93ZWQpOgorICAgICAgICAoV0kuU291cmNlc1RhYkNvbnRlbnRW
aWV3LnByb3RvdHlwZS5nZXQgdHlwZSk6CisgICAgICAgIChXSS5Tb3VyY2VzVGFiQ29udGVudFZp
ZXcucHJvdG90eXBlLmdldCBzdXBwb3J0c1NwbGl0Q29udGVudEJyb3dzZXIpOgorICAgICAgICAo
V0kuU291cmNlc1RhYkNvbnRlbnRWaWV3LnByb3RvdHlwZS5jYW5TaG93UmVwcmVzZW50ZWRPYmpl
Y3QpOgorICAgICAgICBXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcgaXMgYSBjb3B5IG9mIFdJLlJl
c291cmNlc1RhYkNvbnRlbnRWaWV3IHdpdGggaXNUYWJBbGxvd2VkIG1ldGhvZAorICAgICAgICBh
ZGRlZCBhbmQgdGhlIGlkZW50aWZpZXIgY2hhbmdlZCBmcm9tICJyZXNvdXJjZXMiIHRvICJzb3Vy
Y2VzIi4KKwogMjAxOC0wMi0xOSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogQ2FudmFzIHRhYjogaGlkZSBuYXZpZ2F0aW9uIHNpZGVi
YXIgd2hlbiB2aWV3aW5nIHRoZSBvdmVydmlldwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCmluZGV4IDYwNTBjYzIuLjhjOTE5OWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKQEAg
LTQ0MCw2ICs0NDAsNyBAQCBXSS5jb250ZW50TG9hZGVkID0gZnVuY3Rpb24oKQogICAgIGxldCBw
cm9kdWN0aW9uVGFiQ2xhc3NlcyA9IFsKICAgICAgICAgV0kuRWxlbWVudHNUYWJDb250ZW50Vmll
dywKICAgICAgICAgV0kuTmV0d29ya1RhYkNvbnRlbnRWaWV3LAorICAgICAgICBXSS5Tb3VyY2Vz
VGFiQ29udGVudFZpZXcsCiAgICAgICAgIFdJLkRlYnVnZ2VyVGFiQ29udGVudFZpZXcsCiAgICAg
ICAgIFdJLlJlc291cmNlc1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5UaW1lbGluZVRhYkNv
bnRlbnRWaWV3LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTWFpbi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5o
dG1sCmluZGV4IDQ0YWE2OTMuLmE0Mzk3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9NYWluLmh0bWwKQEAgLTUyNyw2ICs1MjcsNyBAQAogICAgIDxzY3JpcHQg
c3JjPSJWaWV3cy9SZXNvdXJjZXNUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IlZpZXdzL1NlYXJjaFRhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1N0b3JhZ2VUYWJDb250ZW50Vmlldy5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RpbWVsaW5lVGFiQ29udGVudFZpZXcuanMiPjwv
c2NyaXB0PgogCkBAIC03NDEsNiArNzQyLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU291
cmNlQ29kZVRpbWVsaW5lVGltZWxpbmVEYXRhR3JpZE5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJWaWV3cy9Tb3VyY2VDb2RlVGltZWxpbmVUcmVlRWxlbWVudC5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NvdXJjZU1hcFJlc291cmNlVHJlZUVsZW1lbnQu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Tb3VyY2VTaWRlYmFyUGFuZWwu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9TcGFubmluZ0RhdGFHcmlkTm9k
ZS5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU3ByZWFkc2hlZXRDU1NT
dHlsZURlY2xhcmF0aW9uRWRpdG9yLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZVNpZGViYXJQYW5lbC5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZVNpZGViYXJQ
YW5lbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzZiMDAxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
U291cmNlU2lkZWJhclBhbmVsLmpzCkBAIC0wLDAgKzEsNTA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV0ku
U291cmNlU2lkZWJhclBhbmVsID0gY2xhc3MgU291cmNlU2lkZWJhclBhbmVsIGV4dGVuZHMgV0ku
TmF2aWdhdGlvblNpZGViYXJQYW5lbAoreworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAg
ICAgIHN1cGVyKCJzb3VyY2UiLCBXSS5VSVN0cmluZygiU291cmNlcyIpLCB0cnVlKTsKKworICAg
ICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyID0gbmV3IFdJLk5hdmlnYXRpb25CYXI7CisgICAgICAg
IHRoaXMuYWRkU3Vidmlldyh0aGlzLl9uYXZpZ2F0aW9uQmFyKTsKKworICAgICAgICB0aGlzLl90
YXJnZXRUcmVlRWxlbWVudE1hcCA9IG5ldyBNYXA7CisKKyAgICAgICAgdmFyIHNjb3BlSXRlbVBy
ZWZpeCA9ICJzb3VyY2Utc2lkZWJhci0iOworICAgICAgICB2YXIgc2NvcGVCYXJJdGVtcyA9IFtd
OworCisgICAgICAgIHNjb3BlQmFySXRlbXMucHVzaChuZXcgV0kuU2NvcGVCYXJJdGVtKHNjb3Bl
SXRlbVByZWZpeCArICJ0eXBlLWFsbCIsIFdJLlVJU3RyaW5nKCJBbGwgUmVzb3VyY2VzIiksIHRy
dWUpKTsKKworICAgICAgICBmb3IgKHZhciBrZXkgaW4gV0kuUmVzb3VyY2UuVHlwZSkgeworICAg
ICAgICAgICAgdmFyIHZhbHVlID0gV0kuUmVzb3VyY2UuVHlwZVtrZXldOworICAgICAgICAgICAg
dmFyIHNjb3BlQmFySXRlbSA9IG5ldyBXSS5TY29wZUJhckl0ZW0oc2NvcGVJdGVtUHJlZml4ICsg
dmFsdWUsIFdJLlJlc291cmNlLmRpc3BsYXlOYW1lRm9yVHlwZSh2YWx1ZSwgdHJ1ZSkpOworICAg
ICAgICAgICAgc2NvcGVCYXJJdGVtW1dJLlNvdXJjZVNpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVT
eW1ib2xdID0gdmFsdWU7CisgICAgICAgICAgICBzY29wZUJhckl0ZW1zLnB1c2goc2NvcGVCYXJJ
dGVtKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3Njb3BlQmFyID0gbmV3IFdJLlNjb3Bl
QmFyKCJzb3VyY2Utc2lkZWJhci1zY29wZS1iYXIiLCBzY29wZUJhckl0ZW1zLCBzY29wZUJhckl0
ZW1zWzBdLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fc2NvcGVCYXIuYWRkRXZlbnRMaXN0ZW5lcihX
SS5TY29wZUJhci5FdmVudC5TZWxlY3Rpb25DaGFuZ2VkLCB0aGlzLl9zY29wZUJhclNlbGVjdGlv
bkRpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkJhci5hZGROYXZp
Z2F0aW9uSXRlbSh0aGlzLl9zY29wZUJhcik7CisKKyAgICAgICAgV0kuRnJhbWUuYWRkRXZlbnRM
aXN0ZW5lcihXSS5GcmFtZS5FdmVudC5NYWluUmVzb3VyY2VEaWRDaGFuZ2UsIHRoaXMuX21haW5S
ZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAgV0kuZnJhbWVSZXNvdXJjZU1hbmFn
ZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5GcmFtZVJlc291cmNlTWFuYWdlci5FdmVudC5NYWluRnJh
bWVEaWRDaGFuZ2UsIHRoaXMuX21haW5GcmFtZURpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAg
V0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LlNjcmlwdEFkZGVkLCB0aGlzLl9zY3JpcHRXYXNBZGRlZCwgdGhpcyk7CisgICAgICAgIFdJ
LmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVu
dC5TY3JpcHRSZW1vdmVkLCB0aGlzLl9zY3JpcHRXYXNSZW1vdmVkLCB0aGlzKTsKKyAgICAgICAg
V0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2
ZW50LlNjcmlwdHNDbGVhcmVkLCB0aGlzLl9zY3JpcHRzQ2xlYXJlZCwgdGhpcyk7CisKKyAgICAg
ICAgV0kuY3NzU3R5bGVNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuQ1NTU3R5bGVNYW5hZ2Vy
LkV2ZW50LlN0eWxlU2hlZXRBZGRlZCwgdGhpcy5fc3R5bGVTaGVldEFkZGVkLCB0aGlzKTsKKwor
ICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdl
ci5FdmVudC5UYXJnZXRSZW1vdmVkLCB0aGlzLl90YXJnZXRSZW1vdmVkLCB0aGlzKTsKKworICAg
ICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlzdGVuZXIoV0kuTm90aWZpY2F0aW9uLkV4
dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzKTsK
KworICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5hZGRFdmVudExpc3RlbmVyKFdJLlRy
ZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcy5fdHJlZVNlbGVjdGlvbkRp
ZENoYW5nZSwgdGhpcyk7CisgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluY2x1ZGVT
b3VyY2VNYXBSZXNvdXJjZUNoaWxkcmVuID0gdHJ1ZTsKKworICAgICAgICBpZiAoU291cmNlU2lk
ZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKSB7CisgICAgICAgICAg
ICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNjbG9zdXJlQnV0dG9ucyA9IGZhbHNlOworICAg
ICAgICAgICAgV0kuU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdJLlNvdXJjZUNvZGUuRXZl
bnQuU291cmNlTWFwQWRkZWQsICgpID0+IHsgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xv
c3VyZUJ1dHRvbnMgPSB0cnVlOyB9LCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFN0YXRpYworCisgICAgc3RhdGljIHNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpCisg
ICAgeworICAgICAgICByZXR1cm4gKFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0ku
RGVidWdnYWJsZVR5cGUuSmF2YVNjcmlwdCAmJiAhV0kuc2hhcmVkQXBwLmhhc0V4dHJhRG9tYWlu
cykKKyAgICAgICAgICAgIHx8IFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVi
dWdnYWJsZVR5cGUuU2VydmljZVdvcmtlcjsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAg
IGdldCBtaW5pbXVtV2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRp
b25CYXIubWluaW11bVdpZHRoOworICAgIH0KKworICAgIGNsb3NlZCgpCisgICAgeworICAgICAg
ICBzdXBlci5jbG9zZWQoKTsKKworICAgICAgICBXSS5GcmFtZS5yZW1vdmVFdmVudExpc3RlbmVy
KG51bGwsIG51bGwsIHRoaXMpOworICAgICAgICBXSS5mcmFtZVJlc291cmNlTWFuYWdlci5yZW1v
dmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOworICAgICAgICBXSS5kZWJ1Z2dlck1h
bmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKKyAgICAgICAgV0ku
bm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOworICAg
IH0KKworICAgIHNob3dEZWZhdWx0Q29udGVudFZpZXcoKQorICAgIHsKKyAgICAgICAgaWYgKFdJ
LmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSkgeworICAgICAgICAgICAgdGhpcy5jb250
ZW50QnJvd3Nlci5zaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdChXSS5mcmFtZVJl
c291cmNlTWFuYWdlci5tYWluRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIGZpcnN0VHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRUcmVlT3V0bGlu
ZS5jaGlsZHJlblswXTsKKyAgICAgICAgaWYgKGZpcnN0VHJlZUVsZW1lbnQpCisgICAgICAgICAg
ICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudChmaXJzdFRyZWVFbGVt
ZW50KTsKKyAgICB9CisKKyAgICB0cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KHJlcHJl
c2VudGVkT2JqZWN0KQorICAgIHsKKyAgICAgICAgLy8gQSBjdXN0b20gaW1wbGVtZW50YXRpb24g
aXMgbmVlZGVkIGZvciB0aGlzIHNpbmNlIHRoZSBmcmFtZXMgYXJlIHBvcHVsYXRlZCBsYXppbHku
CisKKyAgICAgICAgaWYgKCF0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCAmJiAocmVwcmVzZW50
ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZSB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLkZyYW1lIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuQ29sbGVj
dGlvbikpIHsKKyAgICAgICAgICAgIC8vIEFsbCByZXNvdXJjZXMgYXJlIHVuZGVyIHRoZSBtYWlu
IGZyYW1lLCBzbyB3ZSBuZWVkIHRvIHJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIHRoZSBt
YWluIGZyYW1lIHlldC4KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlIEZyYW1lIGlzIHVzZWQgYXMgdGhlIHJlcHJlc2VudGVkT2JqZWN0IGluc3Rl
YWQgb2YgdGhlIG1haW4gcmVzb3VyY2UgaW4gb3VyIHRyZWUuCisgICAgICAgIGlmIChyZXByZXNl
bnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlICYmIHJlcHJlc2VudGVkT2JqZWN0LnBh
cmVudEZyYW1lICYmIHJlcHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lLm1haW5SZXNvdXJjZSA9
PT0gcmVwcmVzZW50ZWRPYmplY3QpCisgICAgICAgICAgICByZXByZXNlbnRlZE9iamVjdCA9IHJl
cHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lOworCisgICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0
b3IoYW5jZXN0b3IsIHJlc291cmNlT3JGcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
U291cmNlTWFwUmVzb3VyY2VzIGFyZSBkZXNjZW5kYW50cyBvZiBhbm90aGVyIFNvdXJjZUNvZGUg
b2JqZWN0LgorICAgICAgICAgICAgaWYgKHJlc291cmNlT3JGcmFtZSBpbnN0YW5jZW9mIFdJLlNv
dXJjZU1hcFJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlT3JGcmFtZS5z
b3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlID09PSBhbmNlc3RvcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgICAgICAvLyBOb3QgYSBkaXJlY3QgYW5j
ZXN0b3IsIHNvIGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhlIHBhcmVudCBTb3VyY2VDb2RlIG9i
amVjdC4KKyAgICAgICAgICAgICAgICByZXNvdXJjZU9yRnJhbWUgPSByZXNvdXJjZU9yRnJhbWUu
c291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdmFyIGN1cnJlbnRGcmFtZSA9IHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFtZTsKKyAgICAg
ICAgICAgIHdoaWxlIChjdXJyZW50RnJhbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dEZyYW1lID09PSBhbmNlc3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLnBhcmVudEZyYW1lOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBnZXRQYXJlbnQocmVzb3VyY2VPckZyYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBTb3VyY2VNYXBSZXNvdXJjZXMgYXJlIGRlc2NlbmRhbnRzIG9mIGFub3Ro
ZXIgU291cmNlQ29kZSBvYmplY3QuCisgICAgICAgICAgICBpZiAocmVzb3VyY2VPckZyYW1lIGlu
c3RhbmNlb2YgV0kuU291cmNlTWFwUmVzb3VyY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c291cmNlT3JGcmFtZS5zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlOworICAgICAgICAgICAg
cmV0dXJuIHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFtZTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciB0cmVlRWxlbWVudCA9IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVu
dChyZXByZXNlbnRlZE9iamVjdCwgaXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKKyAgICAgICAgaWYg
KHRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OworCisgICAgICAg
IC8vIE9ubHkgc3BlY2lhbCBjYXNlIFNjcmlwdCBvYmplY3RzLgorICAgICAgICBpZiAoIShyZXBy
ZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIkRpZG4ndCBmaW5kIGEgVHJlZUVsZW1lbnQgZm9yIHJlcHJlc2VudGVkT2JqZWN0
IiwgcmVwcmVzZW50ZWRPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJZiB0aGUgU2NyaXB0IGhhcyBhIFVSTCB3ZSBzaG91bGQgaGF2ZSBm
b3VuZCBpdCBlYXJsaWVyLgorICAgICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QudXJsKSB7Cisg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluZCBhIFNjcmlwdFRyZWVFbGVtZW50
IGZvciBhIFNjcmlwdCB3aXRoIGEgVVJMLiIpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBTaW5jZSB0aGUgU2NyaXB0IGRvZXMgbm90IGhhdmUgYSBV
Ukwgd2UgY29uc2lkZXIgaXQgYW4gJ2Fub255bW91cycgc2NyaXB0LiBUaGVzZSBzY3JpcHRzIGhh
cHBlbiBmcm9tIGNhbGxzIHRvCisgICAgICAgIC8vIHdpbmRvdy5ldmFsKCkgb3IgYnJvd3NlciBm
ZWF0dXJlcyBsaWtlIEF1dG8gRmlsbCBhbmQgUmVhZGVyLiBUaGV5IGFyZSBub3Qgbm9ybWFsbHkg
YWRkZWQgdG8gdGhlIHNpZGViYXIsIGJ1dCBzaW5jZQorICAgICAgICAvLyB3ZSBoYXZlIGEgU2Ny
aXB0Q29udGVudFZpZXcgYXNraW5nIGZvciB0aGUgdHJlZSBlbGVtZW50IHdlIHdpbGwgbWFrZSBh
IFNjcmlwdFRyZWVFbGVtZW50IG9uIGRlbWFuZCBhbmQgYWRkIGl0LgorCisgICAgICAgIGlmICgh
dGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICBs
ZXQgY29sbGVjdGlvbiA9IG5ldyBXSS5TY3JpcHRDb2xsZWN0aW9uOworICAgICAgICAgICAgdGhp
cy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbmV3IFdJLkZvbGRlclRyZWVF
bGVtZW50KFdJLlVJU3RyaW5nKCJBbm9ueW1vdXMgU2NyaXB0cyIpLCBjb2xsZWN0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVF
bGVtZW50LnBhcmVudCkgeworICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5zZXJ0aW9uSW5kZXhG
b3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xk
ZXJUcmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2Nv
bXBhcmVUcmVlRWxlbWVudHMpOworICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUu
aW5zZXJ0Q2hpbGQodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBpbmRl
eCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QuYWRkKHJlcHJlc2VudGVkT2JqZWN0KTsKKworICAg
ICAgICB2YXIgc2NyaXB0VHJlZUVsZW1lbnQgPSBuZXcgV0kuU2NyaXB0VHJlZUVsZW1lbnQocmVw
cmVzZW50ZWRPYmplY3QpOworICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJl
ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOworCisgICAgICAgIHJldHVy
biBzY3JpcHRUcmVlRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBQcm90ZWN0ZWQKKworICAgIGlu
aXRpYWxMYXlvdXQoKQorICAgIHsKKyAgICAgICAgc3VwZXIuaW5pdGlhbExheW91dCgpOworCisg
ICAgICAgIGlmIChXSS5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUpCisgICAgICAgICAg
ICB0aGlzLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UoV0kuZnJhbWVSZXNvdXJjZU1h
bmFnZXIubWFpbkZyYW1lKTsKKworICAgICAgICBmb3IgKGxldCBzY3JpcHQgb2YgV0kuZGVidWdn
ZXJNYW5hZ2VyLmtub3duTm9uUmVzb3VyY2VTY3JpcHRzKSB7CisgICAgICAgICAgICB0aGlzLl9h
ZGRTY3JpcHQoc2NyaXB0KTsKKworICAgICAgICAgICAgaWYgKHNjcmlwdC5zb3VyY2VNYXBzLmxl
bmd0aCAmJiBTb3VyY2VTaWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVs
KCkpCisgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xvc3VyZUJ1
dHRvbnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaGFzQ3VzdG9tRmlsdGVycygp
CisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zY29wZUJhci5zZWxlY3RlZEl0
ZW1zLmxlbmd0aCA9PT0gMSk7CisgICAgICAgIHZhciBzZWxlY3RlZFNjb3BlQmFySXRlbSA9IHRo
aXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXNbMF07CisgICAgICAgIHJldHVybiBzZWxlY3RlZFNj
b3BlQmFySXRlbSAmJiAhc2VsZWN0ZWRTY29wZUJhckl0ZW0uZXhjbHVzaXZlOworICAgIH0KKwor
ICAgIG1hdGNoVHJlZUVsZW1lbnRBZ2FpbnN0Q3VzdG9tRmlsdGVycyh0cmVlRWxlbWVudCwgZmxh
Z3MpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zY29wZUJhci5zZWxlY3Rl
ZEl0ZW1zLmxlbmd0aCA9PT0gMSk7CisgICAgICAgIHZhciBzZWxlY3RlZFNjb3BlQmFySXRlbSA9
IHRoaXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXNbMF07CisKKyAgICAgICAgLy8gU2hvdyBldmVy
eXRoaW5nIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiBvciAiQWxsIFJlc291cmNlcyIgaXMgc2Vs
ZWN0ZWQgKHRoZSBleGNsdXNpdmUgaXRlbSkuCisgICAgICAgIGlmICghc2VsZWN0ZWRTY29wZUJh
ckl0ZW0gfHwgc2VsZWN0ZWRTY29wZUJhckl0ZW0uZXhjbHVzaXZlKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgLy8gRm9sZGVycyBhcmUgaGlkZGVuIG9uIHRoZSBmaXJzdCBw
YXNzLCBidXQgdmlzaWJsZSBjaGlsZGVuIHVuZGVyIHRoZSBmb2xkZXIgd2lsbCBmb3JjZSB0aGUg
Zm9sZGVyIHZpc2libGUgYWdhaW4uCisgICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9m
IFdJLkZvbGRlclRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGZ1bmN0aW9uIG1hdGNoKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyZWVFbGVt
ZW50IGluc3RhbmNlb2YgV0kuRnJhbWVUcmVlRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc2VsZWN0ZWRTY29wZUJhckl0ZW1bV0kuU291cmNlU2lkZWJhclBhbmVsLlJlc291cmNlVHlw
ZVN5bWJvbF0gPT09IFdJLlJlc291cmNlLlR5cGUuRG9jdW1lbnQ7CisKKyAgICAgICAgICAgIGlm
ICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVFbGVtZW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxlY3RlZFNjb3BlQmFySXRlbVtXSS5Tb3VyY2VTaWRlYmFyUGFuZWwu
UmVzb3VyY2VUeXBlU3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TY3JpcHQ7CisKKyAgICAg
ICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXRUcmVlRWxl
bWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRTY29wZUJhckl0ZW1bV0kuU291
cmNlU2lkZWJhclBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF0gPT09IFdJLlJlc291cmNlLlR5cGUu
U3R5bGVzaGVldDsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodHJlZUVsZW1lbnQgaW5z
dGFuY2VvZiBXSS5SZXNvdXJjZVRyZWVFbGVtZW50LCAiVW5rbm93biB0cmVlRWxlbWVudCIsIHRy
ZWVFbGVtZW50KTsKKyAgICAgICAgICAgIGlmICghKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0ku
UmVzb3VyY2VUcmVlRWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQucmVzb3VyY2UudHlwZSA9PT0gc2VsZWN0ZWRT
Y29wZUJhckl0ZW1bV0kuU291cmNlU2lkZWJhclBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF07Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgbWF0Y2hlZCA9IG1hdGNoKCk7CisgICAgICAgIGlmICht
YXRjaGVkKQorICAgICAgICAgICAgZmxhZ3MuZXhwYW5kVHJlZUVsZW1lbnQgPSB0cnVlOworICAg
ICAgICByZXR1cm4gbWF0Y2hlZDsKKyAgICB9CisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfbWFp
blJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFldmVudC50YXJn
ZXQuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9t
YWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQudGFyZ2V0KTsKKyAgICB9CisKKyAg
ICBfbWFpbkZyYW1lRGlkQ2hhbmdlKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpbkZy
YW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKFdJLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFt
ZSk7CisgICAgfQorCisgICAgX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZShtYWluRnJh
bWUpCisgICAgeworICAgICAgICB0aGlzLmNvbnRlbnRCcm93c2VyLmNvbnRlbnRWaWV3Q29udGFp
bmVyLmNsb3NlQWxsQ29udGVudFZpZXdzKCk7CisKKyAgICAgICAgaWYgKHRoaXMuX21haW5GcmFt
ZVRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5yZW1v
dmVDaGlsZCh0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9t
YWluRnJhbWVUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1h
aW5GcmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9tYWluRnJhbWVU
cmVlRWxlbWVudCA9IG5ldyBXSS5GcmFtZVRyZWVFbGVtZW50KG1haW5GcmFtZSk7CisgICAgICAg
IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHRoaXMuX21haW5GcmFtZVRyZWVF
bGVtZW50LCAwKTsKKworICAgICAgICBmdW5jdGlvbiBkZWxheWVkV29yaygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghdGhpcy5jb250ZW50VHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxl
bWVudCkgeworICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Q29udGVudFZpZXcgPSB0aGlzLmNv
bnRlbnRCcm93c2VyLmN1cnJlbnRDb250ZW50VmlldzsKKyAgICAgICAgICAgICAgICB2YXIgdHJl
ZUVsZW1lbnQgPSBjdXJyZW50Q29udGVudFZpZXcgPyB0aGlzLnRyZWVFbGVtZW50Rm9yUmVwcmVz
ZW50ZWRPYmplY3QoY3VycmVudENvbnRlbnRWaWV3LnJlcHJlc2VudGVkT2JqZWN0KSA6IG51bGw7
CisgICAgICAgICAgICAgICAgaWYgKCF0cmVlRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAg
dHJlZUVsZW1lbnQgPSB0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudDsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudCh0cmVlRWxlbWVudCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb29raWUgcmVzdG9yYXRp
b24gd2lsbCBhdHRlbXB0IHRvIHJlLXNlbGVjdCB0aGUgcmVzb3VyY2Ugd2Ugd2VyZSBzaG93aW5n
LgorICAgICAgICAvLyBHaXZlIGl0IHRpbWUgdG8gZG8gdGhhdCBiZWZvcmUgc2VsZWN0aW5nIHRo
ZSBtYWluIGZyYW1lIHJlc291cmNlLgorICAgICAgICBzZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJp
bmQodGhpcykpOworICAgIH0KKworICAgIF9zY3JpcHRXYXNBZGRlZChldmVudCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2FkZFNjcmlwdChldmVudC5kYXRhLnNjcmlwdCk7CisgICAgfQorCisgICAg
X2FkZFNjcmlwdChzY3JpcHQpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBhZGQgc2NyaXB0
cyB3aXRob3V0IFVSTHMgaGVyZS4gVGhvc2Ugc2NyaXB0cyBjYW4gcXVpY2tseSBjbHV0dGVyIHRo
ZSBpbnRlcmZhY2UgYW5kCisgICAgICAgIC8vIGFyZSB1c3VhbGx5IG1vcmUgdHJhbnNpZW50LiBU
aGV5IHdpbGwgZ2V0IGFkZGVkIGlmL3doZW4gdGhleSBuZWVkIHRvIGJlIHNob3duIGluIGEgY29u
dGVudCB2aWV3LgorICAgICAgICBpZiAoIXNjcmlwdC51cmwgJiYgIXNjcmlwdC5zb3VyY2VVUkwp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gVGFyZ2V0IG1haW4gcmVzb3VyY2Uu
CisgICAgICAgIGlmIChzY3JpcHQudGFyZ2V0ICE9PSBXSS5wYWdlVGFyZ2V0KSB7CisgICAgICAg
ICAgICBpZiAoc2NyaXB0LmlzTWFpblJlc291cmNlKCkpCisgICAgICAgICAgICAgICAgdGhpcy5f
YWRkVGFyZ2V0V2l0aE1haW5SZXNvdXJjZShzY3JpcHQudGFyZ2V0KTsKKyAgICAgICAgICAgIHRo
aXMuY29udGVudFRyZWVPdXRsaW5lLmRpc2Nsb3N1cmVCdXR0b25zID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBzY3JpcHQgVVJMIG1h
dGNoZXMgYSByZXNvdXJjZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIHBhcnQgb2YgdGhhdCByZXNvdXJj
ZSBhbmQgZG9lcyBub3QgbmVlZCBhZGRlZC4KKyAgICAgICAgaWYgKHNjcmlwdC5yZXNvdXJjZSB8
fCBzY3JpcHQuZHluYW1pY2FsbHlBZGRlZFNjcmlwdEVsZW1lbnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgbGV0IGluc2VydEludG9Ub3BMZXZlbCA9IGZhbHNlOworICAgICAgICBs
ZXQgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQgPSBudWxsOworCisgICAgICAgIGlmIChzY3JpcHQu
aW5qZWN0ZWQpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRl
clRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0ku
U2NyaXB0Q29sbGVjdGlvbjsKKyAgICAgICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQgPSBuZXcgV0kuRm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmco
IkV4dGVuc2lvbiBTY3JpcHRzIiksIGNvbGxlY3Rpb24pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwYXJlbnRGb2xkZXJUcmVlRWxlbWVudCA9IHRoaXMuX2V4dGVuc2lvblNjcmlwdHNG
b2xkZXJUcmVlRWxlbWVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChTb3Vy
Y2VTaWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKCkpCisgICAgICAg
ICAgICAgICAgaW5zZXJ0SW50b1RvcExldmVsID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0kuU2NyaXB0Q29s
bGVjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJl
ZUVsZW1lbnQgPSBuZXcgV0kuRm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmcoIkV4dHJhIFNj
cmlwdHMiKSwgY29sbGVjdGlvbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQgPSB0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVl
RWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXJlbnRG
b2xkZXJUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHBhcmVudEZvbGRlclRyZWVFbGVtZW50LnJl
cHJlc2VudGVkT2JqZWN0LmFkZChzY3JpcHQpOworCisgICAgICAgIHZhciBzY3JpcHRUcmVlRWxl
bWVudCA9IG5ldyBXSS5TY3JpcHRUcmVlRWxlbWVudChzY3JpcHQpOworCisgICAgICAgIGlmIChp
bnNlcnRJbnRvVG9wTGV2ZWwpIHsKKyAgICAgICAgICAgIHZhciBpbmRleCA9IGluc2VydGlvbklu
ZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihzY3JpcHRUcmVlRWxlbWVudCwgdGhp
cy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2NvbXBhcmVUcmVlRWxlbWVudHMp
OworICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQoc2NyaXB0
VHJlZUVsZW1lbnQsIGluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgh
cGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KSB7CisgICAgICAgICAgICAgICAgdmFyIGlu
ZGV4ID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHBhcmVu
dEZvbGRlclRyZWVFbGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5jaGlsZHJlbiwgdGhp
cy5fY29tcGFyZVRyZWVFbGVtZW50cyk7CisgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VHJl
ZU91dGxpbmUuaW5zZXJ0Q2hpbGQocGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQsIGluZGV4KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQuYXBwZW5k
Q2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgX3Njcmlw
dFdhc1JlbW92ZWQoZXZlbnQpCisgICAgeworICAgICAgICBsZXQgc2NyaXB0ID0gZXZlbnQuZGF0
YS5zY3JpcHQ7CisgICAgICAgIGxldCBzY3JpcHRUcmVlRWxlbWVudCA9IHRoaXMuY29udGVudFRy
ZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50KHNjcmlwdCk7CisgICAgICAgIGlmICghc2Ny
aXB0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IHBhcmVu
dFRyZWVFbGVtZW50ID0gc2NyaXB0VHJlZUVsZW1lbnQucGFyZW50OworICAgICAgICBwYXJlbnRU
cmVlRWxlbWVudC5yZW1vdmVDaGlsZChzY3JpcHRUcmVlRWxlbWVudCk7CisKKyAgICAgICAgaWYg
KHBhcmVudFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuRm9sZGVyVHJlZUVsZW1lbnQpIHsKKyAg
ICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LnJlbW92ZShzY3Jp
cHQpOworCisgICAgICAgICAgICBpZiAoIXBhcmVudFRyZWVFbGVtZW50LmNoaWxkcmVuLmxlbmd0
aCkKKyAgICAgICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQo
cGFyZW50VHJlZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgX3NjcmlwdHNDbGVh
cmVkKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29uc3Qgc3VwcHJlc3NPbkRlc2VsZWN0ID0gdHJ1
ZTsKKyAgICAgICAgY29uc3Qgc3VwcHJlc3NTZWxlY3RTaWJsaW5nID0gdHJ1ZTsKKworICAgICAg
ICBpZiAodGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudCkK
KyAgICAgICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQu
cGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVu
dCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworCisgICAgICAg
ICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50ZWRP
YmplY3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJU
cmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fZXh0cmFT
Y3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9leHRyYVNj
cmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fZXh0
cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2V4dHJh
U2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxlY3QsIHN1cHByZXNzU2Vs
ZWN0U2libGluZyk7CisKKyAgICAgICAgICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVF
bGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmNsZWFyKCk7CisgICAgICAgICAgICB0aGlzLl9leHRy
YVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAg
ICBpZiAodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudCkKKyAg
ICAgICAgICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFy
ZW50LnJlbW92ZUNoaWxkKHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCwg
c3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworCisgICAgICAgICAg
ICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmpl
Y3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVl
RWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fdGFyZ2V0VHJl
ZUVsZW1lbnRNYXAuc2l6ZSkgeworICAgICAgICAgICAgZm9yIChsZXQgdHJlZUVsZW1lbnQgb2Yg
dGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXApCisgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQu
cGFyZW50LnJlbW92ZUNoaWxkKHRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxlY3QsIHN1cHBy
ZXNzU2VsZWN0U2libGluZyk7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxlbWVudE1h
cC5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgX3N0eWxlU2hlZXRBZGRlZChldmVu
dCkKKyAgICB7CisgICAgICAgIGxldCBzdHlsZVNoZWV0ID0gZXZlbnQuZGF0YS5zdHlsZVNoZWV0
OworICAgICAgICBpZiAoIXN0eWxlU2hlZXQuaXNJbnNwZWN0b3JTdHlsZVNoZWV0KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IGZyYW1lVHJlZUVsZW1lbnQgPSB0aGlzLnRy
ZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3Qoc3R5bGVTaGVldC5wYXJlbnRGcmFtZSk7Cisg
ICAgICAgIGlmICghZnJhbWVUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBmcmFtZVRyZWVFbGVtZW50LmFkZFJlcHJlc2VudGVkT2JqZWN0VG9OZXdDaGlsZFF1ZXVl
KHN0eWxlU2hlZXQpOworICAgIH0KKworICAgIF9hZGRUYXJnZXRXaXRoTWFpblJlc291cmNlKHRh
cmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09PSBXSS5U
YXJnZXQuVHlwZS5Xb3JrZXIgfHwgdGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBlLlNlcnZp
Y2VXb3JrZXIpOworCisgICAgICAgIGxldCB0YXJnZXRUcmVlRWxlbWVudCA9IG5ldyBXSS5Xb3Jr
ZXJUcmVlRWxlbWVudCh0YXJnZXQpOworICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxlbWVudE1h
cC5zZXQodGFyZ2V0LCB0YXJnZXRUcmVlRWxlbWVudCk7CisKKyAgICAgICAgbGV0IGluZGV4ID0g
aW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHRhcmdldFRyZWVF
bGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5jaGlsZHJlbiwgdGhpcy5fY29tcGFyZVRy
ZWVFbGVtZW50cyk7CisgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxk
KHRhcmdldFRyZWVFbGVtZW50LCBpbmRleCk7CisgICAgfQorCisgICAgX3RhcmdldFJlbW92ZWQo
ZXZlbnQpCisgICAgeworICAgICAgICBsZXQgcmVtb3ZlZFRhcmdldCA9IGV2ZW50LmRhdGEudGFy
Z2V0OworCisgICAgICAgIGxldCB0YXJnZXRUcmVlRWxlbWVudCA9IHRoaXMuX3RhcmdldFRyZWVF
bGVtZW50TWFwLnRha2UocmVtb3ZlZFRhcmdldCk7CisgICAgICAgIGlmICh0YXJnZXRUcmVlRWxl
bWVudCkKKyAgICAgICAgICAgIHRhcmdldFRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0
YXJnZXRUcmVlRWxlbWVudCk7CisgICAgfQorCisgICAgX3RyZWVTZWxlY3Rpb25EaWRDaGFuZ2Uo
ZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSBldmVudC5kYXRhLnNlbGVjdGVkRWxl
bWVudDsKKyAgICAgICAgaWYgKCF0cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5Gb2xkZXJUcmVlRWxlbWVudAor
ICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZVRyZWVFbGVt
ZW50CisgICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlwdFRyZWVF
bGVtZW50CisgICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxl
U2hlZXRUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgY29uc3QgY29va2llID0gbnVsbDsKKyAg
ICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgaWdub3JlTmV0d29y
a1RhYjogdHJ1ZSwKKyAgICAgICAgICAgICAgICBpZ25vcmVTZWFyY2hUYWI6IHRydWUsCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgV0kuc2hvd1JlcHJlc2VudGVkT2JqZWN0KHRyZWVFbGVt
ZW50LnJlcHJlc2VudGVkT2JqZWN0LCBjb29raWUsIG9wdGlvbnMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5lcnJvcigiVW5rbm93biB0cmVlIGVs
ZW1lbnQiLCB0cmVlRWxlbWVudCk7CisgICAgfQorCisgICAgX2NvbXBhcmVUcmVlRWxlbWVudHMo
YSwgYikKKyAgICB7CisgICAgICAgIC8vIEFsd2F5cyBzb3J0IHRoZSBtYWluIGZyYW1lIGVsZW1l
bnQgZmlyc3QuCisgICAgICAgIGlmIChhIGluc3RhbmNlb2YgV0kuRnJhbWVUcmVlRWxlbWVudCkK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBXSS5GcmFt
ZVRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgY29uc29sZS5h
c3NlcnQoYS5tYWluVGl0bGUpOworICAgICAgICBjb25zb2xlLmFzc2VydChiLm1haW5UaXRsZSk7
CisKKyAgICAgICAgcmV0dXJuIChhLm1haW5UaXRsZSB8fCAiIikuZXh0ZW5kZWRMb2NhbGVDb21w
YXJlKGIubWFpblRpdGxlIHx8ICIiKTsKKyAgICB9CisKKyAgICBfZXh0cmFEb21haW5zQWN0aXZh
dGVkKCkKKyAgICB7CisgICAgICAgIGlmIChTb3VyY2VTaWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VS
ZXNvdXJjZXNBdFRvcExldmVsKCkpCisgICAgICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGlu
ZS5kaXNjbG9zdXJlQnV0dG9ucyA9IHRydWU7CisgICAgfQorCisgICAgX3Njb3BlQmFyU2VsZWN0
aW9uRGlkQ2hhbmdlKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXIoKTsK
KyAgICB9Cit9OworCitXSS5Tb3VyY2VTaWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBlU3ltYm9sID0g
U3ltYm9sKCJyZXNvdXJjZS10eXBlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5OGMwMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJj
ZXNUYWJDb250ZW50Vmlldy5qcwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV0kuU291
cmNlc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU291cmNlc1RhYkNvbnRlbnRWaWV3IGV4dGVuZHMg
V0kuQ29udGVudEJyb3dzZXJUYWJDb250ZW50VmlldworeworICAgIGNvbnN0cnVjdG9yKGlkZW50
aWZpZXIpCisgICAgeworICAgICAgICBsZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJ
dGVtLmZyb21UYWJJbmZvKFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOworICAg
ICAgICBjb25zdCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzID0gW1dJLlJlc291cmNl
RGV0YWlsc1NpZGViYXJQYW5lbCwgV0kuUHJvYmVEZXRhaWxzU2lkZWJhclBhbmVsXTsKKyAgICAg
ICAgc3VwZXIoaWRlbnRpZmllciB8fCAic291cmNlcyIsICJzb3VyY2VzIiwgdGFiQmFySXRlbSwg
V0kuU291cmNlU2lkZWJhclBhbmVsLCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3RydWN0b3JzKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdGFiSW5mbygpCisgICAgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgaW1hZ2U6ICJJbWFnZXMvUmVzb3VyY2VzLnN2ZyIsCisgICAgICAgICAgICB0
aXRsZTogV0kuVUlTdHJpbmcoIlNvdXJjZXMiKSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBz
dGF0aWMgaXNUYWJBbGxvd2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXSS5zZXR0aW5ncy5l
eHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlOworICAgIH0KKworICAgIC8vIFB1Ymxp
YworCisgICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdJLlNvdXJjZXNUYWJD
b250ZW50Vmlldy5UeXBlOworICAgIH0KKworICAgIGdldCBzdXBwb3J0c1NwbGl0Q29udGVudEJy
b3dzZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FuU2hv
d1JlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuRnJhbWUKKyAgICAgICAgICAgIHx8
IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2UKKyAgICAgICAgICAgIHx8
IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0CisgICAgICAgICAgICB8fCBy
ZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXQKKyAgICAgICAgICAg
IHx8IChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNvbGxlY3Rpb24gJiYgIShyZXBy
ZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNhbnZhc0NvbGxlY3Rpb24pKTsKKyAgICB9Cit9
OworCitXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZSA9ICJzb3VyY2VzIjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335356</attachid>
            <date>2018-03-08 15:38:27 -0800</date>
            <delta_ts>2018-03-08 16:23:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31920</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGY0MTRmNjMuLmQ3M2QwY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE4LTAzLTA4ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNvdXJj
ZXM6IGFkZCBTb3VyY2VzVGFiQ29udGVudFZpZXcgYW5kIFNvdXJjZVNpZGViYXJQYW5lbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMz
MTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM4MTA3NjM5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNob3cgU291cmNlcyB0YWIgd2hlbiBpdCdz
IGVuYWJsZWQgaW4gdGhlIGV4cGVyaW1lbnRhbCBzZXR0aW5ncy4KKyAgICAgICAgVGhpcyBwYXRj
aCBkb2Vzbid0IHJlbW92ZSBleGlzdGluZyBSZXNvdXJjZXMgYW5kIERlYnVnZ2VyIHRhYnMuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qczoKKyAgICAgICAgKFdJLmNvbnRl
bnRMb2FkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5jc3M6IEFkZGVkLgorICAg
ICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5zb3VyY2VzID4gLmNvbnRlbnQpOgor
ICAgICAgICAoLnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5zb3VyY2VzID4gLm5hdmlnYXRp
b24tYmFyKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNTaWRlYmFyUGFu
ZWwuanM6IEFkZGVkLgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbCk6CisgICAgICAg
IChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCk6
CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgbWluaW11bVdp
ZHRoKToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNsb3NlZCk6
CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93RGVmYXVsdENv
bnRlbnRWaWV3KToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnRy
ZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QuaXNBbmNlc3Rvcik6CisgICAgICAgIChXSS5T
b3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2Jq
ZWN0LmdldFBhcmVudCk6CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlw
ZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KToKKyAgICAgICAgKFdJLlNvdXJjZXNT
aWRlYmFyUGFuZWwucHJvdG90eXBlLmluaXRpYWxMYXlvdXQpOgorICAgICAgICAoV0kuU291cmNl
c1NpZGViYXJQYW5lbC5wcm90b3R5cGUuaGFzQ3VzdG9tRmlsdGVycyk6CisgICAgICAgIChXSS5T
b3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5tYXRjaFRyZWVFbGVtZW50QWdhaW5zdEN1c3Rv
bUZpbHRlcnMubWF0Y2gpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5
cGUubWF0Y2hUcmVlRWxlbWVudEFnYWluc3RDdXN0b21GaWx0ZXJzKToKKyAgICAgICAgKFdJLlNv
dXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgorICAg
ICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5n
ZSk6CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1l
TWFpblJlc291cmNlRGlkQ2hhbmdlLmRlbGF5ZWRXb3JrKToKKyAgICAgICAgKFdJLlNvdXJjZXNT
aWRlYmFyUGFuZWwucHJvdG90eXBlLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgor
ICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdFdhc0FkZGVk
KToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRTY3JpcHQp
OgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdFdhc1Jl
bW92ZWQpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3Njcmlw
dHNDbGVhcmVkKToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9z
dHlsZVNoZWV0QWRkZWQpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5
cGUuX2FkZFRhcmdldFdpdGhNYWluUmVzb3VyY2UpOgorICAgICAgICAoV0kuU291cmNlc1NpZGVi
YXJQYW5lbC5wcm90b3R5cGUuX3RhcmdldFJlbW92ZWQpOgorICAgICAgICAoV0kuU291cmNlc1Np
ZGViYXJQYW5lbC5wcm90b3R5cGUuX3RyZWVTZWxlY3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICAo
V0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NvbXBhcmVUcmVlRWxlbWVudHMpOgor
ICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2V4dHJhRG9tYWluc0Fj
dGl2YXRlZCk6CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2Nv
cGVCYXJTZWxlY3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICBXSS5Tb3VyY2VTaWRlYmFyUGFuZWwg
aXMgYSBjb3B5IG9mIFdJLlJlc291cmNlU2lkZWJhclBhbmVsIHdpdGgKKyAgICAgICAgdGhlIGlk
ZW50aWZpZXIgY2hhbmdlZCBmcm9tICJyZXNvdXJjZSIgdG8gInNvdXJjZSIuCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qczogQWRkZWQuCisg
ICAgICAgIChXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcpOgorICAgICAgICAoV0kuU291cmNlc1Rh
YkNvbnRlbnRWaWV3LnRhYkluZm8pOgorICAgICAgICAoV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3
LmlzVGFiQWxsb3dlZCk6CisgICAgICAgIChXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcucHJvdG90
eXBlLmdldCB0eXBlKToKKyAgICAgICAgKFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldy5wcm90b3R5
cGUuZ2V0IHN1cHBvcnRzU3BsaXRDb250ZW50QnJvd3Nlcik6CisgICAgICAgIChXSS5Tb3VyY2Vz
VGFiQ29udGVudFZpZXcucHJvdG90eXBlLmNhblNob3dSZXByZXNlbnRlZE9iamVjdCk6CisgICAg
ICAgIFdJLlNvdXJjZXNUYWJDb250ZW50VmlldyBpcyBhIGNvcHkgb2YgV0kuUmVzb3VyY2VzVGFi
Q29udGVudFZpZXcgd2l0aCBpc1RhYkFsbG93ZWQgbWV0aG9kCisgICAgICAgIGFkZGVkIGFuZCB0
aGUgaWRlbnRpZmllciBjaGFuZ2VkIGZyb20gInJlc291cmNlcyIgdG8gInNvdXJjZXMiLgorCiAy
MDE4LTAzLTA3ICBEZXZpbiBSb3Vzc28gIDx3ZWJraXRAZGV2aW5yb3Vzc28uY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IENhbnZhcyB0YWI6IGVuc3VyZSB0aGF0IHRoZSBSZWNvcmRpbmcg
VHJlZU91dGxpbmUgaGFzIGEgc3BlY2lmaWVkIGhlaWdodCBmb3IgdmlydHVhbGl6YXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwppbmRl
eCA2MDUwY2MyLi44YzkxOTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC00NDAsNiArNDQwLDcgQEAgV0kuY29udGVudExvYWRl
ZCA9IGZ1bmN0aW9uKCkKICAgICBsZXQgcHJvZHVjdGlvblRhYkNsYXNzZXMgPSBbCiAgICAgICAg
IFdJLkVsZW1lbnRzVGFiQ29udGVudFZpZXcsCiAgICAgICAgIFdJLk5ldHdvcmtUYWJDb250ZW50
VmlldywKKyAgICAgICAgV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5EZWJ1
Z2dlclRhYkNvbnRlbnRWaWV3LAogICAgICAgICBXSS5SZXNvdXJjZXNUYWJDb250ZW50VmlldywK
ICAgICAgICAgV0kuVGltZWxpbmVUYWJDb250ZW50VmlldywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA0NGFhNjkzLi42OWUxNWI5YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAtMTc5
LDYgKzE3OSw3IEBACiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9TbGlk
ZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1NvZnRDb250
ZXh0TWVudS5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvU291
cmNlQ29kZVRleHRFZGl0b3IuY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL1NvdXJjZXNTaWRlYmFyUGFuZWwuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9IlZpZXdzL1NwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvbkVkaXRvci5jc3Mi
PgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvU3ByZWFkc2hlZXRDU1NT
dHlsZURlY2xhcmF0aW9uU2VjdGlvbi5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iVmlld3MvU3ByZWFkc2hlZXRSdWxlc1N0eWxlRGV0YWlsc1BhbmVsLmNzcyI+CkBAIC01
MjcsNiArNTI4LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvUmVzb3VyY2VzVGFiQ29udGVu
dFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9TZWFyY2hUYWJDb250
ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NldHRpbmdzVGFi
Q29udGVudFZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Tb3VyY2Vz
VGFiQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9TdG9y
YWdlVGFiQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9U
aW1lbGluZVRhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KIApAQCAtNzQxLDYgKzc0Myw3IEBA
CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NvdXJjZUNvZGVUaW1lbGluZVRpbWVsaW5lRGF0YUdy
aWROb2RlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU291cmNlQ29kZVRp
bWVsaW5lVHJlZUVsZW1lbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9T
b3VyY2VNYXBSZXNvdXJjZVRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iVmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL1NwYW5uaW5nRGF0YUdyaWROb2RlLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9TcHJlYWRzaGVldENTU1N0eWxlRGVjbGFyYXRpb25FZGl0b3IuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzU2lkZWJhclBhbmVsLmNzcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lOGY4OWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5jc3MK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRp
b24uc291cmNlcyA+IC5jb250ZW50IHsKKyAgICB0b3A6IHZhcigtLW5hdmlnYXRpb24tYmFyLWhl
aWdodCk7Cit9CisKKy5zaWRlYmFyID4gLnBhbmVsLm5hdmlnYXRpb24uc291cmNlcyA+IC5uYXZp
Z2F0aW9uLWJhciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICBs
ZWZ0OiAwOworICAgIHJpZ2h0OiAwOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNTaWRlYmFyUGFuZWwuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3ZjYyZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNT
aWRlYmFyUGFuZWwuanMKQEAgLTAsMCArMSw1MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXSS5Tb3VyY2Vz
U2lkZWJhclBhbmVsID0gY2xhc3MgU291cmNlc1NpZGViYXJQYW5lbCBleHRlbmRzIFdJLk5hdmln
YXRpb25TaWRlYmFyUGFuZWwKK3sKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBz
dXBlcigic291cmNlcyIsIFdJLlVJU3RyaW5nKCJTb3VyY2VzIiksIHRydWUpOworCisgICAgICAg
IHRoaXMuX25hdmlnYXRpb25CYXIgPSBuZXcgV0kuTmF2aWdhdGlvbkJhcjsKKyAgICAgICAgdGhp
cy5hZGRTdWJ2aWV3KHRoaXMuX25hdmlnYXRpb25CYXIpOworCisgICAgICAgIHRoaXMuX3Rhcmdl
dFRyZWVFbGVtZW50TWFwID0gbmV3IE1hcDsKKworICAgICAgICBsZXQgc2NvcGVJdGVtUHJlZml4
ID0gInNvdXJjZXMtc2lkZWJhci0iOworICAgICAgICBsZXQgc2NvcGVCYXJJdGVtcyA9IFtdOwor
CisgICAgICAgIHNjb3BlQmFySXRlbXMucHVzaChuZXcgV0kuU2NvcGVCYXJJdGVtKHNjb3BlSXRl
bVByZWZpeCArICJ0eXBlLWFsbCIsIFdJLlVJU3RyaW5nKCJBbGwgUmVzb3VyY2VzIiksIHRydWUp
KTsKKworICAgICAgICBmb3IgKGxldCBrZXkgaW4gV0kuUmVzb3VyY2UuVHlwZSkgeworICAgICAg
ICAgICAgbGV0IHZhbHVlID0gV0kuUmVzb3VyY2UuVHlwZVtrZXldOworICAgICAgICAgICAgbGV0
IHNjb3BlQmFySXRlbSA9IG5ldyBXSS5TY29wZUJhckl0ZW0oc2NvcGVJdGVtUHJlZml4ICsgdmFs
dWUsIFdJLlJlc291cmNlLmRpc3BsYXlOYW1lRm9yVHlwZSh2YWx1ZSwgdHJ1ZSkpOworICAgICAg
ICAgICAgc2NvcGVCYXJJdGVtW1dJLlNvdXJjZXNTaWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBlU3lt
Ym9sXSA9IHZhbHVlOworICAgICAgICAgICAgc2NvcGVCYXJJdGVtcy5wdXNoKHNjb3BlQmFySXRl
bSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9zY29wZUJhciA9IG5ldyBXSS5TY29wZUJh
cigic291cmNlcy1zaWRlYmFyLXNjb3BlLWJhciIsIHNjb3BlQmFySXRlbXMsIHNjb3BlQmFySXRl
bXNbMF0sIHRydWUpOworICAgICAgICB0aGlzLl9zY29wZUJhci5hZGRFdmVudExpc3RlbmVyKFdJ
LlNjb3BlQmFyLkV2ZW50LlNlbGVjdGlvbkNoYW5nZWQsIHRoaXMuX3Njb3BlQmFyU2VsZWN0aW9u
RGlkQ2hhbmdlLCB0aGlzKTsKKworICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyLmFkZE5hdmln
YXRpb25JdGVtKHRoaXMuX3Njb3BlQmFyKTsKKworICAgICAgICBXSS5GcmFtZS5hZGRFdmVudExp
c3RlbmVyKFdJLkZyYW1lLkV2ZW50Lk1haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcy5fbWFpblJl
c291cmNlRGlkQ2hhbmdlLCB0aGlzKTsKKworICAgICAgICBXSS5mcmFtZVJlc291cmNlTWFuYWdl
ci5hZGRFdmVudExpc3RlbmVyKFdJLkZyYW1lUmVzb3VyY2VNYW5hZ2VyLkV2ZW50Lk1haW5GcmFt
ZURpZENoYW5nZSwgdGhpcy5fbWFpbkZyYW1lRGlkQ2hhbmdlLCB0aGlzKTsKKworICAgICAgICBX
SS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZl
bnQuU2NyaXB0QWRkZWQsIHRoaXMuX3NjcmlwdFdhc0FkZGVkLCB0aGlzKTsKKyAgICAgICAgV0ku
ZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50
LlNjcmlwdFJlbW92ZWQsIHRoaXMuX3NjcmlwdFdhc1JlbW92ZWQsIHRoaXMpOworICAgICAgICBX
SS5kZWJ1Z2dlck1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5EZWJ1Z2dlck1hbmFnZXIuRXZl
bnQuU2NyaXB0c0NsZWFyZWQsIHRoaXMuX3NjcmlwdHNDbGVhcmVkLCB0aGlzKTsKKworICAgICAg
ICBXSS5jc3NTdHlsZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5DU1NTdHlsZU1hbmFnZXIu
RXZlbnQuU3R5bGVTaGVldEFkZGVkLCB0aGlzLl9zdHlsZVNoZWV0QWRkZWQsIHRoaXMpOworCisg
ICAgICAgIFdJLnRhcmdldE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5UYXJnZXRNYW5hZ2Vy
LkV2ZW50LlRhcmdldFJlbW92ZWQsIHRoaXMuX3RhcmdldFJlbW92ZWQsIHRoaXMpOworCisgICAg
ICAgIFdJLm5vdGlmaWNhdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihXSS5Ob3RpZmljYXRpb24uRXh0
cmFEb21haW5zQWN0aXZhdGVkLCB0aGlzLl9leHRyYURvbWFpbnNBY3RpdmF0ZWQsIHRoaXMpOwor
CisgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmFkZEV2ZW50TGlzdGVuZXIoV0kuVHJl
ZU91dGxpbmUuRXZlbnQuU2VsZWN0aW9uRGlkQ2hhbmdlLCB0aGlzLl90cmVlU2VsZWN0aW9uRGlk
Q2hhbmdlLCB0aGlzKTsKKyAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuaW5jbHVkZVNv
dXJjZU1hcFJlc291cmNlQ2hpbGRyZW4gPSB0cnVlOworCisgICAgICAgIGlmIChTb3VyY2VzU2lk
ZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKSB7CisgICAgICAgICAg
ICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5kaXNjbG9zdXJlQnV0dG9ucyA9IGZhbHNlOworICAg
ICAgICAgICAgV0kuU291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVyKFdJLlNvdXJjZUNvZGUuRXZl
bnQuU291cmNlTWFwQWRkZWQsICgpID0+IHsgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xv
c3VyZUJ1dHRvbnMgPSB0cnVlOyB9LCB0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFN0YXRpYworCisgICAgc3RhdGljIHNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpCisg
ICAgeworICAgICAgICByZXR1cm4gKFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0ku
RGVidWdnYWJsZVR5cGUuSmF2YVNjcmlwdCAmJiAhV0kuc2hhcmVkQXBwLmhhc0V4dHJhRG9tYWlu
cykKKyAgICAgICAgICAgIHx8IFdJLnNoYXJlZEFwcC5kZWJ1Z2dhYmxlVHlwZSA9PT0gV0kuRGVi
dWdnYWJsZVR5cGUuU2VydmljZVdvcmtlcjsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAg
IGdldCBtaW5pbXVtV2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRp
b25CYXIubWluaW11bVdpZHRoOworICAgIH0KKworICAgIGNsb3NlZCgpCisgICAgeworICAgICAg
ICBzdXBlci5jbG9zZWQoKTsKKworICAgICAgICBXSS5GcmFtZS5yZW1vdmVFdmVudExpc3RlbmVy
KG51bGwsIG51bGwsIHRoaXMpOworICAgICAgICBXSS5mcmFtZVJlc291cmNlTWFuYWdlci5yZW1v
dmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOworICAgICAgICBXSS5kZWJ1Z2dlck1h
bmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKKyAgICAgICAgV0ku
bm90aWZpY2F0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKG51bGwsIG51bGwsIHRoaXMpOworICAg
IH0KKworICAgIHNob3dEZWZhdWx0Q29udGVudFZpZXcoKQorICAgIHsKKyAgICAgICAgaWYgKFdJ
LmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSkgeworICAgICAgICAgICAgdGhpcy5jb250
ZW50QnJvd3Nlci5zaG93Q29udGVudFZpZXdGb3JSZXByZXNlbnRlZE9iamVjdChXSS5mcmFtZVJl
c291cmNlTWFuYWdlci5tYWluRnJhbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbGV0IGZpcnN0VHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRUcmVlT3V0bGlu
ZS5jaGlsZHJlblswXTsKKyAgICAgICAgaWYgKGZpcnN0VHJlZUVsZW1lbnQpCisgICAgICAgICAg
ICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudChmaXJzdFRyZWVFbGVt
ZW50KTsKKyAgICB9CisKKyAgICB0cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0KHJlcHJl
c2VudGVkT2JqZWN0KQorICAgIHsKKyAgICAgICAgLy8gQSBjdXN0b20gaW1wbGVtZW50YXRpb24g
aXMgbmVlZGVkIGZvciB0aGlzIHNpbmNlIHRoZSBmcmFtZXMgYXJlIHBvcHVsYXRlZCBsYXppbHku
CisKKyAgICAgICAgaWYgKCF0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCAmJiAocmVwcmVzZW50
ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZSB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLkZyYW1lIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuQ29sbGVj
dGlvbikpIHsKKyAgICAgICAgICAgIC8vIEFsbCByZXNvdXJjZXMgYXJlIHVuZGVyIHRoZSBtYWlu
IGZyYW1lLCBzbyB3ZSBuZWVkIHRvIHJldHVybiBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIHRoZSBt
YWluIGZyYW1lIHlldC4KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlIEZyYW1lIGlzIHVzZWQgYXMgdGhlIHJlcHJlc2VudGVkT2JqZWN0IGluc3Rl
YWQgb2YgdGhlIG1haW4gcmVzb3VyY2UgaW4gb3VyIHRyZWUuCisgICAgICAgIGlmIChyZXByZXNl
bnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlJlc291cmNlICYmIHJlcHJlc2VudGVkT2JqZWN0LnBh
cmVudEZyYW1lICYmIHJlcHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lLm1haW5SZXNvdXJjZSA9
PT0gcmVwcmVzZW50ZWRPYmplY3QpCisgICAgICAgICAgICByZXByZXNlbnRlZE9iamVjdCA9IHJl
cHJlc2VudGVkT2JqZWN0LnBhcmVudEZyYW1lOworCisgICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0
b3IoYW5jZXN0b3IsIHJlc291cmNlT3JGcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
U291cmNlTWFwUmVzb3VyY2VzIGFyZSBkZXNjZW5kYW50cyBvZiBhbm90aGVyIFNvdXJjZUNvZGUg
b2JqZWN0LgorICAgICAgICAgICAgaWYgKHJlc291cmNlT3JGcmFtZSBpbnN0YW5jZW9mIFdJLlNv
dXJjZU1hcFJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlT3JGcmFtZS5z
b3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlID09PSBhbmNlc3RvcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgICAgICAvLyBOb3QgYSBkaXJlY3QgYW5j
ZXN0b3IsIHNvIGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhlIHBhcmVudCBTb3VyY2VDb2RlIG9i
amVjdC4KKyAgICAgICAgICAgICAgICByZXNvdXJjZU9yRnJhbWUgPSByZXNvdXJjZU9yRnJhbWUu
c291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbGV0IGN1cnJlbnRGcmFtZSA9IHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFtZTsKKyAgICAg
ICAgICAgIHdoaWxlIChjdXJyZW50RnJhbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dEZyYW1lID09PSBhbmNlc3RvcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgY3VycmVudEZyYW1lID0gY3VycmVudEZyYW1lLnBhcmVudEZyYW1lOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBmdW5jdGlvbiBnZXRQYXJlbnQocmVzb3VyY2VPckZyYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBTb3VyY2VNYXBSZXNvdXJjZXMgYXJlIGRlc2NlbmRhbnRzIG9mIGFub3Ro
ZXIgU291cmNlQ29kZSBvYmplY3QuCisgICAgICAgICAgICBpZiAocmVzb3VyY2VPckZyYW1lIGlu
c3RhbmNlb2YgV0kuU291cmNlTWFwUmVzb3VyY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c291cmNlT3JGcmFtZS5zb3VyY2VNYXAub3JpZ2luYWxTb3VyY2VDb2RlOworICAgICAgICAgICAg
cmV0dXJuIHJlc291cmNlT3JGcmFtZS5wYXJlbnRGcmFtZTsKKyAgICAgICAgfQorCisgICAgICAg
IGxldCB0cmVlRWxlbWVudCA9IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVu
dChyZXByZXNlbnRlZE9iamVjdCwgaXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKKyAgICAgICAgaWYg
KHRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OworCisgICAgICAg
IC8vIE9ubHkgc3BlY2lhbCBjYXNlIFNjcmlwdCBvYmplY3RzLgorICAgICAgICBpZiAoIShyZXBy
ZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLlNjcmlwdCkpIHsKKyAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIkRpZG4ndCBmaW5kIGEgVHJlZUVsZW1lbnQgZm9yIHJlcHJlc2VudGVkT2JqZWN0
IiwgcmVwcmVzZW50ZWRPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg
IH0KKworICAgICAgICAvLyBJZiB0aGUgU2NyaXB0IGhhcyBhIFVSTCB3ZSBzaG91bGQgaGF2ZSBm
b3VuZCBpdCBlYXJsaWVyLgorICAgICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QudXJsKSB7Cisg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluZCBhIFNjcmlwdFRyZWVFbGVtZW50
IGZvciBhIFNjcmlwdCB3aXRoIGEgVVJMLiIpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBTaW5jZSB0aGUgU2NyaXB0IGRvZXMgbm90IGhhdmUgYSBV
Ukwgd2UgY29uc2lkZXIgaXQgYW4gJ2Fub255bW91cycgc2NyaXB0LiBUaGVzZSBzY3JpcHRzIGhh
cHBlbiBmcm9tIGNhbGxzIHRvCisgICAgICAgIC8vIHdpbmRvdy5ldmFsKCkgb3IgYnJvd3NlciBm
ZWF0dXJlcyBsaWtlIEF1dG8gRmlsbCBhbmQgUmVhZGVyLiBUaGV5IGFyZSBub3Qgbm9ybWFsbHkg
YWRkZWQgdG8gdGhlIHNpZGViYXIsIGJ1dCBzaW5jZQorICAgICAgICAvLyB3ZSBoYXZlIGEgU2Ny
aXB0Q29udGVudFZpZXcgYXNraW5nIGZvciB0aGUgdHJlZSBlbGVtZW50IHdlIHdpbGwgbWFrZSBh
IFNjcmlwdFRyZWVFbGVtZW50IG9uIGRlbWFuZCBhbmQgYWRkIGl0LgorCisgICAgICAgIGlmICgh
dGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICBs
ZXQgY29sbGVjdGlvbiA9IG5ldyBXSS5TY3JpcHRDb2xsZWN0aW9uOworICAgICAgICAgICAgdGhp
cy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbmV3IFdJLkZvbGRlclRyZWVF
bGVtZW50KFdJLlVJU3RyaW5nKCJBbm9ueW1vdXMgU2NyaXB0cyIpLCBjb2xsZWN0aW9uKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVF
bGVtZW50LnBhcmVudCkgeworICAgICAgICAgICAgbGV0IGluZGV4ID0gaW5zZXJ0aW9uSW5kZXhG
b3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xk
ZXJUcmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2Nv
bXBhcmVUcmVlRWxlbWVudHMpOworICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUu
aW5zZXJ0Q2hpbGQodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBpbmRl
eCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QuYWRkKHJlcHJlc2VudGVkT2JqZWN0KTsKKworICAg
ICAgICBsZXQgc2NyaXB0VHJlZUVsZW1lbnQgPSBuZXcgV0kuU2NyaXB0VHJlZUVsZW1lbnQocmVw
cmVzZW50ZWRPYmplY3QpOworICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJl
ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOworCisgICAgICAgIHJldHVy
biBzY3JpcHRUcmVlRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBQcm90ZWN0ZWQKKworICAgIGlu
aXRpYWxMYXlvdXQoKQorICAgIHsKKyAgICAgICAgc3VwZXIuaW5pdGlhbExheW91dCgpOworCisg
ICAgICAgIGlmIChXSS5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUpCisgICAgICAgICAg
ICB0aGlzLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UoV0kuZnJhbWVSZXNvdXJjZU1h
bmFnZXIubWFpbkZyYW1lKTsKKworICAgICAgICBmb3IgKGxldCBzY3JpcHQgb2YgV0kuZGVidWdn
ZXJNYW5hZ2VyLmtub3duTm9uUmVzb3VyY2VTY3JpcHRzKSB7CisgICAgICAgICAgICB0aGlzLl9h
ZGRTY3JpcHQoc2NyaXB0KTsKKworICAgICAgICAgICAgaWYgKHNjcmlwdC5zb3VyY2VNYXBzLmxl
bmd0aCAmJiBTb3VyY2VzU2lkZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZl
bCgpKQorICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmRpc2Nsb3N1cmVC
dXR0b25zID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGhhc0N1c3RvbUZpbHRlcnMo
KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2NvcGVCYXIuc2VsZWN0ZWRJ
dGVtcy5sZW5ndGggPT09IDEpOworICAgICAgICBsZXQgc2VsZWN0ZWRTY29wZUJhckl0ZW0gPSB0
aGlzLl9zY29wZUJhci5zZWxlY3RlZEl0ZW1zWzBdOworICAgICAgICByZXR1cm4gc2VsZWN0ZWRT
Y29wZUJhckl0ZW0gJiYgIXNlbGVjdGVkU2NvcGVCYXJJdGVtLmV4Y2x1c2l2ZTsKKyAgICB9CisK
KyAgICBtYXRjaFRyZWVFbGVtZW50QWdhaW5zdEN1c3RvbUZpbHRlcnModHJlZUVsZW1lbnQsIGZs
YWdzKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fc2NvcGVCYXIuc2VsZWN0
ZWRJdGVtcy5sZW5ndGggPT09IDEpOworICAgICAgICBsZXQgc2VsZWN0ZWRTY29wZUJhckl0ZW0g
PSB0aGlzLl9zY29wZUJhci5zZWxlY3RlZEl0ZW1zWzBdOworCisgICAgICAgIC8vIFNob3cgZXZl
cnl0aGluZyBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24gb3IgIkFsbCBSZXNvdXJjZXMiIGlzIHNl
bGVjdGVkICh0aGUgZXhjbHVzaXZlIGl0ZW0pLgorICAgICAgICBpZiAoIXNlbGVjdGVkU2NvcGVC
YXJJdGVtIHx8IHNlbGVjdGVkU2NvcGVCYXJJdGVtLmV4Y2x1c2l2ZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIC8vIEZvbGRlcnMgYXJlIGhpZGRlbiBvbiB0aGUgZmlyc3Qg
cGFzcywgYnV0IHZpc2libGUgY2hpbGRlbiB1bmRlciB0aGUgZm9sZGVyIHdpbGwgZm9yY2UgdGhl
IGZvbGRlciB2aXNpYmxlIGFnYWluLgorICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2Vv
ZiBXSS5Gb2xkZXJUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBmdW5jdGlvbiBtYXRjaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0cmVlRWxl
bWVudCBpbnN0YW5jZW9mIFdJLkZyYW1lVHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHNlbGVjdGVkU2NvcGVCYXJJdGVtW1dJLlNvdXJjZXNTaWRlYmFyUGFuZWwuUmVzb3VyY2VU
eXBlU3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5Eb2N1bWVudDsKKworICAgICAgICAgICAg
aWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuU2NyaXB0VHJlZUVsZW1lbnQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNlbGVjdGVkU2NvcGVCYXJJdGVtW1dJLlNvdXJjZXNTaWRlYmFyUGFu
ZWwuUmVzb3VyY2VUeXBlU3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TY3JpcHQ7CisKKyAg
ICAgICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXRUcmVl
RWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRTY29wZUJhckl0ZW1bV0ku
U291cmNlc1NpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVTeW1ib2xdID09PSBXSS5SZXNvdXJjZS5U
eXBlLlN0eWxlc2hlZXQ7CisKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRyZWVFbGVtZW50
IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudCwgIlVua25vd24gdHJlZUVsZW1lbnQi
LCB0cmVlRWxlbWVudCk7CisgICAgICAgICAgICBpZiAoISh0cmVlRWxlbWVudCBpbnN0YW5jZW9m
IFdJLlJlc291cmNlVHJlZUVsZW1lbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LnJlc291cmNlLnR5cGUgPT09IHNlbGVj
dGVkU2NvcGVCYXJJdGVtW1dJLlNvdXJjZXNTaWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBlU3ltYm9s
XTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBtYXRjaGVkID0gbWF0Y2goKTsKKyAgICAgICAg
aWYgKG1hdGNoZWQpCisgICAgICAgICAgICBmbGFncy5leHBhbmRUcmVlRWxlbWVudCA9IHRydWU7
CisgICAgICAgIHJldHVybiBtYXRjaGVkOworICAgIH0KKworICAgIC8vIFByaXZhdGUKKworICAg
IF9tYWluUmVzb3VyY2VEaWRDaGFuZ2UoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIWV2ZW50
LnRhcmdldC5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRo
aXMuX21haW5GcmFtZU1haW5SZXNvdXJjZURpZENoYW5nZShldmVudC50YXJnZXQpOworICAgIH0K
KworICAgIF9tYWluRnJhbWVEaWRDaGFuZ2UoZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9t
YWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UoV0kuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFp
bkZyYW1lKTsKKyAgICB9CisKKyAgICBfbWFpbkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKG1h
aW5GcmFtZSkKKyAgICB7CisgICAgICAgIHRoaXMuY29udGVudEJyb3dzZXIuY29udGVudFZpZXdD
b250YWluZXIuY2xvc2VBbGxDb250ZW50Vmlld3MoKTsKKworICAgICAgICBpZiAodGhpcy5fbWFp
bkZyYW1lVHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5l
LnJlbW92ZUNoaWxkKHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50KTsKKyAgICAgICAgICAgIHRo
aXMuX21haW5GcmFtZVRyZWVFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghbWFpbkZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX21haW5G
cmFtZVRyZWVFbGVtZW50ID0gbmV3IFdJLkZyYW1lVHJlZUVsZW1lbnQobWFpbkZyYW1lKTsKKyAg
ICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQodGhpcy5fbWFpbkZyYW1l
VHJlZUVsZW1lbnQsIDApOworCisgICAgICAgIGZ1bmN0aW9uIGRlbGF5ZWRXb3JrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5zZWxlY3RlZFRy
ZWVFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRDb250ZW50VmlldyA9IHRo
aXMuY29udGVudEJyb3dzZXIuY3VycmVudENvbnRlbnRWaWV3OworICAgICAgICAgICAgICAgIGxl
dCB0cmVlRWxlbWVudCA9IGN1cnJlbnRDb250ZW50VmlldyA/IHRoaXMudHJlZUVsZW1lbnRGb3JS
ZXByZXNlbnRlZE9iamVjdChjdXJyZW50Q29udGVudFZpZXcucmVwcmVzZW50ZWRPYmplY3QpIDog
bnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoIXRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAg
ICAgICB0cmVlRWxlbWVudCA9IHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50OworICAgICAgICAg
ICAgICAgIHRoaXMuc2hvd0RlZmF1bHRDb250ZW50Vmlld0ZvclRyZWVFbGVtZW50KHRyZWVFbGVt
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvb2tpZSByZXN0
b3JhdGlvbiB3aWxsIGF0dGVtcHQgdG8gcmUtc2VsZWN0IHRoZSByZXNvdXJjZSB3ZSB3ZXJlIHNo
b3dpbmcuCisgICAgICAgIC8vIEdpdmUgaXQgdGltZSB0byBkbyB0aGF0IGJlZm9yZSBzZWxlY3Rp
bmcgdGhlIG1haW4gZnJhbWUgcmVzb3VyY2UuCisgICAgICAgIHNldFRpbWVvdXQoZGVsYXllZFdv
cmsuYmluZCh0aGlzKSk7CisgICAgfQorCisgICAgX3NjcmlwdFdhc0FkZGVkKGV2ZW50KQorICAg
IHsKKyAgICAgICAgdGhpcy5fYWRkU2NyaXB0KGV2ZW50LmRhdGEuc2NyaXB0KTsKKyAgICB9CisK
KyAgICBfYWRkU2NyaXB0KHNjcmlwdCkKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IGFkZCBz
Y3JpcHRzIHdpdGhvdXQgVVJMcyBoZXJlLiBUaG9zZSBzY3JpcHRzIGNhbiBxdWlja2x5IGNsdXR0
ZXIgdGhlIGludGVyZmFjZSBhbmQKKyAgICAgICAgLy8gYXJlIHVzdWFsbHkgbW9yZSB0cmFuc2ll
bnQuIFRoZXkgd2lsbCBnZXQgYWRkZWQgaWYvd2hlbiB0aGV5IG5lZWQgdG8gYmUgc2hvd24gaW4g
YSBjb250ZW50IHZpZXcuCisgICAgICAgIGlmICghc2NyaXB0LnVybCAmJiAhc2NyaXB0LnNvdXJj
ZVVSTCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBUYXJnZXQgbWFpbiByZXNv
dXJjZS4KKyAgICAgICAgaWYgKHNjcmlwdC50YXJnZXQgIT09IFdJLnBhZ2VUYXJnZXQpIHsKKyAg
ICAgICAgICAgIGlmIChzY3JpcHQuaXNNYWluUmVzb3VyY2UoKSkKKyAgICAgICAgICAgICAgICB0
aGlzLl9hZGRUYXJnZXRXaXRoTWFpblJlc291cmNlKHNjcmlwdC50YXJnZXQpOworICAgICAgICAg
ICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xvc3VyZUJ1dHRvbnMgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIHNjcmlwdCBV
UkwgbWF0Y2hlcyBhIHJlc291cmNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgcGFydCBvZiB0aGF0IHJl
c291cmNlIGFuZCBkb2VzIG5vdCBuZWVkIGFkZGVkLgorICAgICAgICBpZiAoc2NyaXB0LnJlc291
cmNlIHx8IHNjcmlwdC5keW5hbWljYWxseUFkZGVkU2NyaXB0RWxlbWVudCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBsZXQgaW5zZXJ0SW50b1RvcExldmVsID0gZmFsc2U7CisgICAg
ICAgIGxldCBwYXJlbnRGb2xkZXJUcmVlRWxlbWVudCA9IG51bGw7CisKKyAgICAgICAgaWYgKHNj
cmlwdC5pbmplY3RlZCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9leHRlbnNpb25TY3JpcHRz
Rm9sZGVyVHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IG5l
dyBXSS5TY3JpcHRDb2xsZWN0aW9uOworICAgICAgICAgICAgICAgIHRoaXMuX2V4dGVuc2lvblNj
cmlwdHNGb2xkZXJUcmVlRWxlbWVudCA9IG5ldyBXSS5Gb2xkZXJUcmVlRWxlbWVudChXSS5VSVN0
cmluZygiRXh0ZW5zaW9uIFNjcmlwdHMiKSwgY29sbGVjdGlvbik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHBhcmVudEZvbGRlclRyZWVFbGVtZW50ID0gdGhpcy5fZXh0ZW5zaW9uU2Ny
aXB0c0ZvbGRlclRyZWVFbGVtZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KFNvdXJjZXNTaWRlYmFyUGFuZWwuc2hvdWxkUGxhY2VSZXNvdXJjZXNBdFRvcExldmVsKCkpCisg
ICAgICAgICAgICAgICAgaW5zZXJ0SW50b1RvcExldmVsID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0kuU2Ny
aXB0Q29sbGVjdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXh0cmFTY3JpcHRzRm9s
ZGVyVHJlZUVsZW1lbnQgPSBuZXcgV0kuRm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmcoIkV4
dHJhIFNjcmlwdHMiKSwgY29sbGVjdGlvbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQgPSB0aGlzLl9leHRyYVNjcmlwdHNGb2xk
ZXJUcmVlRWxlbWVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChw
YXJlbnRGb2xkZXJUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHBhcmVudEZvbGRlclRyZWVFbGVt
ZW50LnJlcHJlc2VudGVkT2JqZWN0LmFkZChzY3JpcHQpOworCisgICAgICAgIGxldCBzY3JpcHRU
cmVlRWxlbWVudCA9IG5ldyBXSS5TY3JpcHRUcmVlRWxlbWVudChzY3JpcHQpOworCisgICAgICAg
IGlmIChpbnNlcnRJbnRvVG9wTGV2ZWwpIHsKKyAgICAgICAgICAgIGxldCBpbmRleCA9IGluc2Vy
dGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihzY3JpcHRUcmVlRWxlbWVu
dCwgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2NvbXBhcmVUcmVlRWxl
bWVudHMpOworICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQo
c2NyaXB0VHJlZUVsZW1lbnQsIGluZGV4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmICghcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQucGFyZW50KSB7CisgICAgICAgICAgICAgICAg
bGV0IGluZGV4ID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9u
KHBhcmVudEZvbGRlclRyZWVFbGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5jaGlsZHJl
biwgdGhpcy5fY29tcGFyZVRyZWVFbGVtZW50cyk7CisgICAgICAgICAgICAgICAgdGhpcy5jb250
ZW50VHJlZU91dGxpbmUuaW5zZXJ0Q2hpbGQocGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQsIGluZGV4
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQu
YXBwZW5kQ2hpbGQoc2NyaXB0VHJlZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAg
X3NjcmlwdFdhc1JlbW92ZWQoZXZlbnQpCisgICAgeworICAgICAgICBsZXQgc2NyaXB0ID0gZXZl
bnQuZGF0YS5zY3JpcHQ7CisgICAgICAgIGxldCBzY3JpcHRUcmVlRWxlbWVudCA9IHRoaXMuY29u
dGVudFRyZWVPdXRsaW5lLmdldENhY2hlZFRyZWVFbGVtZW50KHNjcmlwdCk7CisgICAgICAgIGlm
ICghc2NyaXB0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0
IHBhcmVudFRyZWVFbGVtZW50ID0gc2NyaXB0VHJlZUVsZW1lbnQucGFyZW50OworICAgICAgICBw
YXJlbnRUcmVlRWxlbWVudC5yZW1vdmVDaGlsZChzY3JpcHRUcmVlRWxlbWVudCk7CisKKyAgICAg
ICAgaWYgKHBhcmVudFRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuRm9sZGVyVHJlZUVsZW1lbnQp
IHsKKyAgICAgICAgICAgIHBhcmVudFRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LnJlbW92
ZShzY3JpcHQpOworCisgICAgICAgICAgICBpZiAoIXBhcmVudFRyZWVFbGVtZW50LmNoaWxkcmVu
Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5wYXJlbnQucmVtb3Zl
Q2hpbGQocGFyZW50VHJlZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgX3Njcmlw
dHNDbGVhcmVkKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29uc3Qgc3VwcHJlc3NPbkRlc2VsZWN0
ID0gdHJ1ZTsKKyAgICAgICAgY29uc3Qgc3VwcHJlc3NTZWxlY3RTaWJsaW5nID0gdHJ1ZTsKKwor
ICAgICAgICBpZiAodGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBh
cmVudCkKKyAgICAgICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVs
ZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVl
RWxlbWVudCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworCisg
ICAgICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucmVwcmVz
ZW50ZWRPYmplY3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2V4dGVuc2lvblNjcmlwdHNG
b2xkZXJUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5f
ZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9l
eHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCisgICAgICAgICAgICAgICAgdGhp
cy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMu
X2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxlY3QsIHN1cHBy
ZXNzU2VsZWN0U2libGluZyk7CisKKyAgICAgICAgICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRl
clRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmNsZWFyKCk7CisgICAgICAgICAgICB0aGlz
Ll9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fYW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVu
dCkKKyAgICAgICAgICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1l
bnQucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxl
bWVudCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworCisgICAg
ICAgICAgICB0aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucmVwcmVzZW50
ZWRPYmplY3QuY2xlYXIoKTsKKyAgICAgICAgICAgIHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xk
ZXJUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fdGFy
Z2V0VHJlZUVsZW1lbnRNYXAuc2l6ZSkgeworICAgICAgICAgICAgZm9yIChsZXQgdHJlZUVsZW1l
bnQgb2YgdGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXApCisgICAgICAgICAgICAgICAgdHJlZUVs
ZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHRyZWVFbGVtZW50LCBzdXBwcmVzc09uRGVzZWxlY3Qs
IHN1cHByZXNzU2VsZWN0U2libGluZyk7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxl
bWVudE1hcC5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgX3N0eWxlU2hlZXRBZGRl
ZChldmVudCkKKyAgICB7CisgICAgICAgIGxldCBzdHlsZVNoZWV0ID0gZXZlbnQuZGF0YS5zdHls
ZVNoZWV0OworICAgICAgICBpZiAoIXN0eWxlU2hlZXQuaXNJbnNwZWN0b3JTdHlsZVNoZWV0KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IGZyYW1lVHJlZUVsZW1lbnQgPSB0
aGlzLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3Qoc3R5bGVTaGVldC5wYXJlbnRGcmFt
ZSk7CisgICAgICAgIGlmICghZnJhbWVUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBmcmFtZVRyZWVFbGVtZW50LmFkZFJlcHJlc2VudGVkT2JqZWN0VG9OZXdDaGls
ZFF1ZXVlKHN0eWxlU2hlZXQpOworICAgIH0KKworICAgIF9hZGRUYXJnZXRXaXRoTWFpblJlc291
cmNlKHRhcmdldCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhcmdldC50eXBlID09
PSBXSS5UYXJnZXQuVHlwZS5Xb3JrZXIgfHwgdGFyZ2V0LnR5cGUgPT09IFdJLlRhcmdldC5UeXBl
LlNlcnZpY2VXb3JrZXIpOworCisgICAgICAgIGxldCB0YXJnZXRUcmVlRWxlbWVudCA9IG5ldyBX
SS5Xb3JrZXJUcmVlRWxlbWVudCh0YXJnZXQpOworICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxl
bWVudE1hcC5zZXQodGFyZ2V0LCB0YXJnZXRUcmVlRWxlbWVudCk7CisKKyAgICAgICAgbGV0IGlu
ZGV4ID0gaW5zZXJ0aW9uSW5kZXhGb3JPYmplY3RJbkxpc3RTb3J0ZWRCeUZ1bmN0aW9uKHRhcmdl
dFRyZWVFbGVtZW50LCB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5jaGlsZHJlbiwgdGhpcy5fY29t
cGFyZVRyZWVFbGVtZW50cyk7CisgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2Vy
dENoaWxkKHRhcmdldFRyZWVFbGVtZW50LCBpbmRleCk7CisgICAgfQorCisgICAgX3RhcmdldFJl
bW92ZWQoZXZlbnQpCisgICAgeworICAgICAgICBsZXQgcmVtb3ZlZFRhcmdldCA9IGV2ZW50LmRh
dGEudGFyZ2V0OworCisgICAgICAgIGxldCB0YXJnZXRUcmVlRWxlbWVudCA9IHRoaXMuX3Rhcmdl
dFRyZWVFbGVtZW50TWFwLnRha2UocmVtb3ZlZFRhcmdldCk7CisgICAgICAgIGlmICh0YXJnZXRU
cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHRhcmdldFRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVD
aGlsZCh0YXJnZXRUcmVlRWxlbWVudCk7CisgICAgfQorCisgICAgX3RyZWVTZWxlY3Rpb25EaWRD
aGFuZ2UoZXZlbnQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSBldmVudC5kYXRhLnNlbGVj
dGVkRWxlbWVudDsKKyAgICAgICAgaWYgKCF0cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5Gb2xkZXJUcmVlRWxl
bWVudAorICAgICAgICAgICAgfHwgdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZVRy
ZWVFbGVtZW50CisgICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNjcmlw
dFRyZWVFbGVtZW50CisgICAgICAgICAgICB8fCB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLkNT
U1N0eWxlU2hlZXRUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgY29uc3QgY29va2llID0gbnVs
bDsKKyAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICAgICAgaWdub3Jl
TmV0d29ya1RhYjogdHJ1ZSwKKyAgICAgICAgICAgICAgICBpZ25vcmVTZWFyY2hUYWI6IHRydWUs
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgV0kuc2hvd1JlcHJlc2VudGVkT2JqZWN0KHRy
ZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LCBjb29raWUsIG9wdGlvbnMpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5lcnJvcigiVW5rbm93biB0
cmVlIGVsZW1lbnQiLCB0cmVlRWxlbWVudCk7CisgICAgfQorCisgICAgX2NvbXBhcmVUcmVlRWxl
bWVudHMoYSwgYikKKyAgICB7CisgICAgICAgIC8vIEFsd2F5cyBzb3J0IHRoZSBtYWluIGZyYW1l
IGVsZW1lbnQgZmlyc3QuCisgICAgICAgIGlmIChhIGluc3RhbmNlb2YgV0kuRnJhbWVUcmVlRWxl
bWVudCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBX
SS5GcmFtZVRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgY29u
c29sZS5hc3NlcnQoYS5tYWluVGl0bGUpOworICAgICAgICBjb25zb2xlLmFzc2VydChiLm1haW5U
aXRsZSk7CisKKyAgICAgICAgcmV0dXJuIChhLm1haW5UaXRsZSB8fCAiIikuZXh0ZW5kZWRMb2Nh
bGVDb21wYXJlKGIubWFpblRpdGxlIHx8ICIiKTsKKyAgICB9CisKKyAgICBfZXh0cmFEb21haW5z
QWN0aXZhdGVkKCkKKyAgICB7CisgICAgICAgIGlmIChTb3VyY2VzU2lkZWJhclBhbmVsLnNob3Vs
ZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCgpKQorICAgICAgICAgICAgdGhpcy5jb250ZW50VHJl
ZU91dGxpbmUuZGlzY2xvc3VyZUJ1dHRvbnMgPSB0cnVlOworICAgIH0KKworICAgIF9zY29wZUJh
clNlbGVjdGlvbkRpZENoYW5nZShldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMudXBkYXRlRmls
dGVyKCk7CisgICAgfQorfTsKKworV0kuU291cmNlc1NpZGViYXJQYW5lbC5SZXNvdXJjZVR5cGVT
eW1ib2wgPSBTeW1ib2woInJlc291cmNlLXR5cGUiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250
ZW50Vmlldy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyOThiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTb3VyY2VzVGFiQ29udGVudFZpZXcg
ZXh0ZW5kcyBXSS5Db250ZW50QnJvd3NlclRhYkNvbnRlbnRWaWV3Cit7CisgICAgY29uc3RydWN0
b3IoaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGxldCB0YWJCYXJJdGVtID0gV0kuR2VuZXJh
bFRhYkJhckl0ZW0uZnJvbVRhYkluZm8oV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3LnRhYkluZm8o
KSk7CisgICAgICAgIGNvbnN0IGRldGFpbHNTaWRlYmFyUGFuZWxDb25zdHJ1Y3RvcnMgPSBbV0ku
UmVzb3VyY2VEZXRhaWxzU2lkZWJhclBhbmVsLCBXSS5Qcm9iZURldGFpbHNTaWRlYmFyUGFuZWxd
OworICAgICAgICBzdXBlcihpZGVudGlmaWVyIHx8ICJzb3VyY2VzIiwgInNvdXJjZXMiLCB0YWJC
YXJJdGVtLCBXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLCBkZXRhaWxzU2lkZWJhclBhbmVsQ29uc3Ry
dWN0b3JzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdGFiSW5mbygpCisgICAgeworICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgaW1hZ2U6ICJJbWFnZXMvUmVzb3VyY2VzLnN2ZyIsCisgICAg
ICAgICAgICB0aXRsZTogV0kuVUlTdHJpbmcoIlNvdXJjZXMiKSwKKyAgICAgICAgfTsKKyAgICB9
CisKKyAgICBzdGF0aWMgaXNUYWJBbGxvd2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXSS5z
ZXR0aW5ncy5leHBlcmltZW50YWxFbmFibGVTb3VyY2VzVGFiLnZhbHVlOworICAgIH0KKworICAg
IC8vIFB1YmxpYworCisgICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdJLlNv
dXJjZXNUYWJDb250ZW50Vmlldy5UeXBlOworICAgIH0KKworICAgIGdldCBzdXBwb3J0c1NwbGl0
Q29udGVudEJyb3dzZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgY2FuU2hvd1JlcHJlc2VudGVkT2JqZWN0KHJlcHJlc2VudGVkT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuRnJhbWUKKyAgICAg
ICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2UKKyAgICAg
ICAgICAgIHx8IHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuU2NyaXB0CisgICAgICAg
ICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNTU1N0eWxlU2hlZXQKKyAg
ICAgICAgICAgIHx8IChyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNvbGxlY3Rpb24g
JiYgIShyZXByZXNlbnRlZE9iamVjdCBpbnN0YW5jZW9mIFdJLkNhbnZhc0NvbGxlY3Rpb24pKTsK
KyAgICB9Cit9OworCitXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZSA9ICJzb3VyY2VzIjsK
</data>
<flag name="review"
          id="354012"
          type_id="1"
          status="+"
          setter="mattbaker"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>335366</attachid>
            <date>2018-03-08 16:23:26 -0800</date>
            <delta_ts>2018-03-08 17:32:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>31717</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGY0MTRmNjMuLjFhYjIyZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE4LTAzLTA4ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNvdXJj
ZXM6IGFkZCBTb3VyY2VzVGFiQ29udGVudFZpZXcgYW5kIFNvdXJjZVNpZGViYXJQYW5lbCBjbGFz
c2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODMz
MTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM4MTA3NjM5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1hdHQgQmFrZXIuCisKKyAgICAgICAgQWRkIFNvdXJjZXMgdGFiIGFuZCBzaWRlYmFyIHBh
bmVsLCB3aGljaCBhcmUgY29waWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIFJlc291cmNlcyBjbGFz
c2VzLgorICAgICAgICBUaGUgU291cmNlcyB0YWIgaXMgc2hvd24gd2hlbiBpdCdzIGVuYWJsZWQg
aW4gdGhlIGV4cGVyaW1lbnRhbCBzZXR0aW5ncy4gVGhpcyBwYXRjaCBkb2Vzbid0CisgICAgICAg
IHJlbW92ZSBleGlzdGluZyBSZXNvdXJjZXMgYW5kIERlYnVnZ2VyIHRhYnMuCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qczoKKyAgICAgICAgKFdJLmNvbnRlbnRMb2FkZWQp
OgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvU291cmNlc1NpZGViYXJQYW5lbC5jc3M6IEFkZGVkLgorICAgICAgICAoLnNp
ZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5zb3VyY2VzID4gLmNvbnRlbnQpOgorICAgICAgICAo
LnNpZGViYXIgPiAucGFuZWwubmF2aWdhdGlvbi5zb3VyY2VzID4gLm5hdmlnYXRpb24tYmFyKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNTaWRlYmFyUGFuZWwuanM6IEFk
ZGVkLgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbCk6CisgICAgICAgIChXSS5Tb3Vy
Y2VzU2lkZWJhclBhbmVsLnNob3VsZFBsYWNlUmVzb3VyY2VzQXRUb3BMZXZlbCk6CisgICAgICAg
IChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5nZXQgbWluaW11bVdpZHRoKToKKyAg
ICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLmNsb3NlZCk6CisgICAgICAg
IChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5zaG93RGVmYXVsdENvbnRlbnRWaWV3
KToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLnRyZWVFbGVtZW50
Rm9yUmVwcmVzZW50ZWRPYmplY3QuaXNBbmNlc3Rvcik6CisgICAgICAgIChXSS5Tb3VyY2VzU2lk
ZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2JqZWN0LmdldFBh
cmVudCk6CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS50cmVlRWxl
bWVudEZvclJlcHJlc2VudGVkT2JqZWN0KToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFu
ZWwucHJvdG90eXBlLmluaXRpYWxMYXlvdXQpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQ
YW5lbC5wcm90b3R5cGUuaGFzQ3VzdG9tRmlsdGVycyk6CisgICAgICAgIChXSS5Tb3VyY2VzU2lk
ZWJhclBhbmVsLnByb3RvdHlwZS5tYXRjaFRyZWVFbGVtZW50QWdhaW5zdEN1c3RvbUZpbHRlcnMu
bWF0Y2gpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUubWF0Y2hU
cmVlRWxlbWVudEFnYWluc3RDdXN0b21GaWx0ZXJzKToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRl
YmFyUGFuZWwucHJvdG90eXBlLl9tYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgorICAgICAgICAoV0ku
U291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX21haW5GcmFtZURpZENoYW5nZSk6CisgICAg
ICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fbWFpbkZyYW1lTWFpblJlc291
cmNlRGlkQ2hhbmdlLmRlbGF5ZWRXb3JrKToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFu
ZWwucHJvdG90eXBlLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFuZ2UpOgorICAgICAgICAo
V0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdFdhc0FkZGVkKToKKyAgICAg
ICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9hZGRTY3JpcHQpOgorICAgICAg
ICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdFdhc1JlbW92ZWQpOgor
ICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX3NjcmlwdHNDbGVhcmVk
KToKKyAgICAgICAgKFdJLlNvdXJjZXNTaWRlYmFyUGFuZWwucHJvdG90eXBlLl9zdHlsZVNoZWV0
QWRkZWQpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2FkZFRh
cmdldFdpdGhNYWluUmVzb3VyY2UpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5lbC5w
cm90b3R5cGUuX3RhcmdldFJlbW92ZWQpOgorICAgICAgICAoV0kuU291cmNlc1NpZGViYXJQYW5l
bC5wcm90b3R5cGUuX3RyZWVTZWxlY3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICAoV0kuU291cmNl
c1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2NvbXBhcmVUcmVlRWxlbWVudHMpOgorICAgICAgICAo
V0kuU291cmNlc1NpZGViYXJQYW5lbC5wcm90b3R5cGUuX2V4dHJhRG9tYWluc0FjdGl2YXRlZCk6
CisgICAgICAgIChXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLnByb3RvdHlwZS5fc2NvcGVCYXJTZWxl
Y3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1Rh
YkNvbnRlbnRWaWV3LmpzOiBBZGRlZC4KKyAgICAgICAgKFdJLlNvdXJjZXNUYWJDb250ZW50Vmll
dyk6CisgICAgICAgIChXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcudGFiSW5mbyk6CisgICAgICAg
IChXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuaXNUYWJBbGxvd2VkKToKKyAgICAgICAgKFdJLlNv
dXJjZXNUYWJDb250ZW50Vmlldy5wcm90b3R5cGUuZ2V0IHR5cGUpOgorICAgICAgICAoV0kuU291
cmNlc1RhYkNvbnRlbnRWaWV3LnByb3RvdHlwZS5nZXQgc3VwcG9ydHNTcGxpdENvbnRlbnRCcm93
c2VyKToKKyAgICAgICAgKFdJLlNvdXJjZXNUYWJDb250ZW50Vmlldy5wcm90b3R5cGUuY2FuU2hv
d1JlcHJlc2VudGVkT2JqZWN0KToKKwogMjAxOC0wMy0wNyAgRGV2aW4gUm91c3NvICA8d2Via2l0
QGRldmlucm91c3NvLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDYW52YXMgdGFiOiBl
bnN1cmUgdGhhdCB0aGUgUmVjb3JkaW5nIFRyZWVPdXRsaW5lIGhhcyBhIHNwZWNpZmllZCBoZWln
aHQgZm9yIHZpcnR1YWxpemF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9CYXNlL01haW4uanMKaW5kZXggNjA1MGNjMi4uOGM5MTk5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpAQCAtNDQwLDYg
KzQ0MCw3IEBAIFdJLmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgbGV0IHByb2R1Y3Rp
b25UYWJDbGFzc2VzID0gWwogICAgICAgICBXSS5FbGVtZW50c1RhYkNvbnRlbnRWaWV3LAogICAg
ICAgICBXSS5OZXR3b3JrVGFiQ29udGVudFZpZXcsCisgICAgICAgIFdJLlNvdXJjZXNUYWJDb250
ZW50VmlldywKICAgICAgICAgV0kuRGVidWdnZXJUYWJDb250ZW50VmlldywKICAgICAgICAgV0ku
UmVzb3VyY2VzVGFiQ29udGVudFZpZXcsCiAgICAgICAgIFdJLlRpbWVsaW5lVGFiQ29udGVudFZp
ZXcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWlu
Lmh0bWwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5k
ZXggNDRhYTY5My4uNjllMTViOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwKQEAgLTE3OSw2ICsxNzksNyBAQAogICAgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iVmlld3MvU2xpZGVyLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJWaWV3cy9Tb2Z0Q29udGV4dE1lbnUuY3NzIj4KICAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmNzcyI+CisgICAgPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9Tb3VyY2VzU2lkZWJhclBhbmVsLmNzcyI+
CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9TcHJlYWRzaGVldENTU1N0
eWxlRGVjbGFyYXRpb25FZGl0b3IuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9IlZpZXdzL1NwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvblNlY3Rpb24uY3NzIj4KICAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL1NwcmVhZHNoZWV0UnVsZXNTdHls
ZURldGFpbHNQYW5lbC5jc3MiPgpAQCAtNTI3LDYgKzUyOCw3IEBACiAgICAgPHNjcmlwdCBzcmM9
IlZpZXdzL1Jlc291cmNlc1RhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iVmlld3MvU2VhcmNoVGFiQ29udGVudFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iVmlld3MvU291cmNlc1RhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iVmlld3MvU3RvcmFnZVRhYkNvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVGltZWxpbmVUYWJDb250ZW50Vmlldy5qcyI+PC9zY3Jp
cHQ+CiAKQEAgLTc0MSw2ICs3NDMsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Tb3VyY2VD
b2RlVGltZWxpbmVUaW1lbGluZURhdGFHcmlkTm9kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9IlZpZXdzL1NvdXJjZUNvZGVUaW1lbGluZVRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU291cmNlTWFwUmVzb3VyY2VUcmVlRWxlbWVudC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1NvdXJjZXNTaWRlYmFyUGFuZWwuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9TcGFubmluZ0RhdGFHcmlkTm9kZS5q
cyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvU3ByZWFkc2hlZXRDU1NTdHls
ZURlY2xhcmF0aW9uRWRpdG9yLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNTaWRlYmFyUGFuZWwuY3NzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlc1NpZGViYXJQ
YW5lbC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmODlhMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NvdXJjZXNTaWRlYmFyUGFuZWwuY3NzCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisu
c2lkZWJhciA+IC5wYW5lbC5uYXZpZ2F0aW9uLnNvdXJjZXMgPiAuY29udGVudCB7CisgICAgdG9w
OiB2YXIoLS1uYXZpZ2F0aW9uLWJhci1oZWlnaHQpOworfQorCisuc2lkZWJhciA+IC5wYW5lbC5u
YXZpZ2F0aW9uLnNvdXJjZXMgPiAubmF2aWdhdGlvbi1iYXIgeworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICByaWdodDogMDsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNT
aWRlYmFyUGFuZWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Tb3VyY2VzU2lkZWJhclBhbmVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBiN2Y2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9Tb3VyY2VzU2lkZWJhclBhbmVsLmpzCkBAIC0wLDAgKzEsNTA0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworV0kuU291cmNlc1NpZGViYXJQYW5lbCA9IGNsYXNzIFNvdXJjZXNTaWRl
YmFyUGFuZWwgZXh0ZW5kcyBXSS5OYXZpZ2F0aW9uU2lkZWJhclBhbmVsCit7CisgICAgY29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoInNvdXJjZXMiLCBXSS5VSVN0cmluZygiU291
cmNlcyIpLCB0cnVlKTsKKworICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uQmFyID0gbmV3IFdJLk5h
dmlnYXRpb25CYXI7CisgICAgICAgIHRoaXMuYWRkU3Vidmlldyh0aGlzLl9uYXZpZ2F0aW9uQmFy
KTsKKworICAgICAgICB0aGlzLl90YXJnZXRUcmVlRWxlbWVudE1hcCA9IG5ldyBNYXA7CisKKyAg
ICAgICAgbGV0IHNjb3BlSXRlbVByZWZpeCA9ICJzb3VyY2VzLXNpZGViYXItIjsKKyAgICAgICAg
bGV0IHNjb3BlQmFySXRlbXMgPSBbXTsKKworICAgICAgICBzY29wZUJhckl0ZW1zLnB1c2gobmV3
IFdJLlNjb3BlQmFySXRlbShzY29wZUl0ZW1QcmVmaXggKyAidHlwZS1hbGwiLCBXSS5VSVN0cmlu
ZygiQWxsIFJlc291cmNlcyIpLCB0cnVlKSk7CisKKyAgICAgICAgZm9yIChsZXQga2V5IGluIFdJ
LlJlc291cmNlLlR5cGUpIHsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IFdJLlJlc291cmNlLlR5
cGVba2V5XTsKKyAgICAgICAgICAgIGxldCBzY29wZUJhckl0ZW0gPSBuZXcgV0kuU2NvcGVCYXJJ
dGVtKHNjb3BlSXRlbVByZWZpeCArIHZhbHVlLCBXSS5SZXNvdXJjZS5kaXNwbGF5TmFtZUZvclR5
cGUodmFsdWUsIHRydWUpKTsKKyAgICAgICAgICAgIHNjb3BlQmFySXRlbVtXSS5Tb3VyY2VzU2lk
ZWJhclBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHNjb3Bl
QmFySXRlbXMucHVzaChzY29wZUJhckl0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5f
c2NvcGVCYXIgPSBuZXcgV0kuU2NvcGVCYXIoInNvdXJjZXMtc2lkZWJhci1zY29wZS1iYXIiLCBz
Y29wZUJhckl0ZW1zLCBzY29wZUJhckl0ZW1zWzBdLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fc2Nv
cGVCYXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5TY29wZUJhci5FdmVudC5TZWxlY3Rpb25DaGFuZ2Vk
LCB0aGlzLl9zY29wZUJhclNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcyk7CisKKyAgICAgICAgdGhp
cy5fbmF2aWdhdGlvbkJhci5hZGROYXZpZ2F0aW9uSXRlbSh0aGlzLl9zY29wZUJhcik7CisKKyAg
ICAgICAgV0kuRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihXSS5GcmFtZS5FdmVudC5NYWluUmVzb3Vy
Y2VEaWRDaGFuZ2UsIHRoaXMuX21haW5SZXNvdXJjZURpZENoYW5nZSwgdGhpcyk7CisKKyAgICAg
ICAgV0kuZnJhbWVSZXNvdXJjZU1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXSS5GcmFtZVJlc291
cmNlTWFuYWdlci5FdmVudC5NYWluRnJhbWVEaWRDaGFuZ2UsIHRoaXMuX21haW5GcmFtZURpZENo
YW5nZSwgdGhpcyk7CisKKyAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdEFkZGVkLCB0aGlzLl9zY3JpcHRXYXNB
ZGRlZCwgdGhpcyk7CisgICAgICAgIFdJLmRlYnVnZ2VyTWFuYWdlci5hZGRFdmVudExpc3RlbmVy
KFdJLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5TY3JpcHRSZW1vdmVkLCB0aGlzLl9zY3JpcHRXYXNS
ZW1vdmVkLCB0aGlzKTsKKyAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu
ZXIoV0kuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LlNjcmlwdHNDbGVhcmVkLCB0aGlzLl9zY3JpcHRz
Q2xlYXJlZCwgdGhpcyk7CisKKyAgICAgICAgV0kuY3NzU3R5bGVNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV0kuQ1NTU3R5bGVNYW5hZ2VyLkV2ZW50LlN0eWxlU2hlZXRBZGRlZCwgdGhpcy5fc3R5
bGVTaGVldEFkZGVkLCB0aGlzKTsKKworICAgICAgICBXSS50YXJnZXRNYW5hZ2VyLmFkZEV2ZW50
TGlzdGVuZXIoV0kuVGFyZ2V0TWFuYWdlci5FdmVudC5UYXJnZXRSZW1vdmVkLCB0aGlzLl90YXJn
ZXRSZW1vdmVkLCB0aGlzKTsKKworICAgICAgICBXSS5ub3RpZmljYXRpb25zLmFkZEV2ZW50TGlz
dGVuZXIoV0kuTm90aWZpY2F0aW9uLkV4dHJhRG9tYWluc0FjdGl2YXRlZCwgdGhpcy5fZXh0cmFE
b21haW5zQWN0aXZhdGVkLCB0aGlzKTsKKworICAgICAgICB0aGlzLmNvbnRlbnRUcmVlT3V0bGlu
ZS5hZGRFdmVudExpc3RlbmVyKFdJLlRyZWVPdXRsaW5lLkV2ZW50LlNlbGVjdGlvbkRpZENoYW5n
ZSwgdGhpcy5fdHJlZVNlbGVjdGlvbkRpZENoYW5nZSwgdGhpcyk7CisgICAgICAgIHRoaXMuY29u
dGVudFRyZWVPdXRsaW5lLmluY2x1ZGVTb3VyY2VNYXBSZXNvdXJjZUNoaWxkcmVuID0gdHJ1ZTsK
KworICAgICAgICBpZiAoU291cmNlc1NpZGViYXJQYW5lbC5zaG91bGRQbGFjZVJlc291cmNlc0F0
VG9wTGV2ZWwoKSkgeworICAgICAgICAgICAgdGhpcy5jb250ZW50VHJlZU91dGxpbmUuZGlzY2xv
c3VyZUJ1dHRvbnMgPSBmYWxzZTsKKyAgICAgICAgICAgIFdJLlNvdXJjZUNvZGUuYWRkRXZlbnRM
aXN0ZW5lcihXSS5Tb3VyY2VDb2RlLkV2ZW50LlNvdXJjZU1hcEFkZGVkLCAoKSA9PiB7IHRoaXMu
Y29udGVudFRyZWVPdXRsaW5lLmRpc2Nsb3N1cmVCdXR0b25zID0gdHJ1ZTsgfSwgdGhpcyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBzaG91bGRQbGFj
ZVJlc291cmNlc0F0VG9wTGV2ZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChXSS5zaGFyZWRB
cHAuZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLkphdmFTY3JpcHQgJiYgIVdJ
LnNoYXJlZEFwcC5oYXNFeHRyYURvbWFpbnMpCisgICAgICAgICAgICB8fCBXSS5zaGFyZWRBcHAu
ZGVidWdnYWJsZVR5cGUgPT09IFdJLkRlYnVnZ2FibGVUeXBlLlNlcnZpY2VXb3JrZXI7CisgICAg
fQorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQgbWluaW11bVdpZHRoKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uQmFyLm1pbmltdW1XaWR0aDsKKyAgICB9CisKKyAg
ICBjbG9zZWQoKQorICAgIHsKKyAgICAgICAgc3VwZXIuY2xvc2VkKCk7CisKKyAgICAgICAgV0ku
RnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlzKTsKKyAgICAgICAgV0ku
ZnJhbWVSZXNvdXJjZU1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihudWxsLCBudWxsLCB0aGlz
KTsKKyAgICAgICAgV0kuZGVidWdnZXJNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIobnVsbCwg
bnVsbCwgdGhpcyk7CisgICAgICAgIFdJLm5vdGlmaWNhdGlvbnMucmVtb3ZlRXZlbnRMaXN0ZW5l
cihudWxsLCBudWxsLCB0aGlzKTsKKyAgICB9CisKKyAgICBzaG93RGVmYXVsdENvbnRlbnRWaWV3
KCkKKyAgICB7CisgICAgICAgIGlmIChXSS5mcmFtZVJlc291cmNlTWFuYWdlci5tYWluRnJhbWUp
IHsKKyAgICAgICAgICAgIHRoaXMuY29udGVudEJyb3dzZXIuc2hvd0NvbnRlbnRWaWV3Rm9yUmVw
cmVzZW50ZWRPYmplY3QoV0kuZnJhbWVSZXNvdXJjZU1hbmFnZXIubWFpbkZyYW1lKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBmaXJzdFRyZWVFbGVtZW50
ID0gdGhpcy5jb250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW5bMF07CisgICAgICAgIGlmIChmaXJz
dFRyZWVFbGVtZW50KQorICAgICAgICAgICAgdGhpcy5zaG93RGVmYXVsdENvbnRlbnRWaWV3Rm9y
VHJlZUVsZW1lbnQoZmlyc3RUcmVlRWxlbWVudCk7CisgICAgfQorCisgICAgdHJlZUVsZW1lbnRG
b3JSZXByZXNlbnRlZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCkKKyAgICB7CisgICAgICAgIC8v
IEEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCBmb3IgdGhpcyBzaW5jZSB0aGUgZnJh
bWVzIGFyZSBwb3B1bGF0ZWQgbGF6aWx5LgorCisgICAgICAgIGlmICghdGhpcy5fbWFpbkZyYW1l
VHJlZUVsZW1lbnQgJiYgKHJlcHJlc2VudGVkT2JqZWN0IGluc3RhbmNlb2YgV0kuUmVzb3VyY2Ug
fHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5GcmFtZSB8fCByZXByZXNlbnRlZE9i
amVjdCBpbnN0YW5jZW9mIFdJLkNvbGxlY3Rpb24pKSB7CisgICAgICAgICAgICAvLyBBbGwgcmVz
b3VyY2VzIGFyZSB1bmRlciB0aGUgbWFpbiBmcmFtZSwgc28gd2UgbmVlZCB0byByZXR1cm4gZWFy
bHkgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgbWFpbiBmcmFtZSB5ZXQuCisgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBGcmFtZSBpcyB1c2VkIGFzIHRo
ZSByZXByZXNlbnRlZE9iamVjdCBpbnN0ZWFkIG9mIHRoZSBtYWluIHJlc291cmNlIGluIG91ciB0
cmVlLgorICAgICAgICBpZiAocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5SZXNvdXJj
ZSAmJiByZXByZXNlbnRlZE9iamVjdC5wYXJlbnRGcmFtZSAmJiByZXByZXNlbnRlZE9iamVjdC5w
YXJlbnRGcmFtZS5tYWluUmVzb3VyY2UgPT09IHJlcHJlc2VudGVkT2JqZWN0KQorICAgICAgICAg
ICAgcmVwcmVzZW50ZWRPYmplY3QgPSByZXByZXNlbnRlZE9iamVjdC5wYXJlbnRGcmFtZTsKKwor
ICAgICAgICBmdW5jdGlvbiBpc0FuY2VzdG9yKGFuY2VzdG9yLCByZXNvdXJjZU9yRnJhbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFNvdXJjZU1hcFJlc291cmNlcyBhcmUgZGVzY2VuZGFu
dHMgb2YgYW5vdGhlciBTb3VyY2VDb2RlIG9iamVjdC4KKyAgICAgICAgICAgIGlmIChyZXNvdXJj
ZU9yRnJhbWUgaW5zdGFuY2VvZiBXSS5Tb3VyY2VNYXBSZXNvdXJjZSkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXNvdXJjZU9yRnJhbWUuc291cmNlTWFwLm9yaWdpbmFsU291cmNlQ29kZSA9PT0g
YW5jZXN0b3IpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg
ICAgICAgLy8gTm90IGEgZGlyZWN0IGFuY2VzdG9yLCBzbyBjaGVjayB0aGUgYW5jZXN0b3JzIG9m
IHRoZSBwYXJlbnQgU291cmNlQ29kZSBvYmplY3QuCisgICAgICAgICAgICAgICAgcmVzb3VyY2VP
ckZyYW1lID0gcmVzb3VyY2VPckZyYW1lLnNvdXJjZU1hcC5vcmlnaW5hbFNvdXJjZUNvZGU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxldCBjdXJyZW50RnJhbWUgPSByZXNvdXJjZU9y
RnJhbWUucGFyZW50RnJhbWU7CisgICAgICAgICAgICB3aGlsZSAoY3VycmVudEZyYW1lKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGcmFtZSA9PT0gYW5jZXN0b3IpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFtZSA9IGN1
cnJlbnRGcmFtZS5wYXJlbnRGcmFtZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0UGFyZW50KHJlc291
cmNlT3JGcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU291cmNlTWFwUmVzb3VyY2Vz
IGFyZSBkZXNjZW5kYW50cyBvZiBhbm90aGVyIFNvdXJjZUNvZGUgb2JqZWN0LgorICAgICAgICAg
ICAgaWYgKHJlc291cmNlT3JGcmFtZSBpbnN0YW5jZW9mIFdJLlNvdXJjZU1hcFJlc291cmNlKQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZU9yRnJhbWUuc291cmNlTWFwLm9yaWdpbmFs
U291cmNlQ29kZTsKKyAgICAgICAgICAgIHJldHVybiByZXNvdXJjZU9yRnJhbWUucGFyZW50RnJh
bWU7CisgICAgICAgIH0KKworICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRU
cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQocmVwcmVzZW50ZWRPYmplY3QsIGlzQW5jZXN0b3Is
IGdldFBhcmVudCk7CisgICAgICAgIGlmICh0cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVy
biB0cmVlRWxlbWVudDsKKworICAgICAgICAvLyBPbmx5IHNwZWNpYWwgY2FzZSBTY3JpcHQgb2Jq
ZWN0cy4KKyAgICAgICAgaWYgKCEocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2VvZiBXSS5TY3Jp
cHQpKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEaWRuJ3QgZmluZCBhIFRyZWVFbGVt
ZW50IGZvciByZXByZXNlbnRlZE9iamVjdCIsIHJlcHJlc2VudGVkT2JqZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIFNjcmlwdCBo
YXMgYSBVUkwgd2Ugc2hvdWxkIGhhdmUgZm91bmQgaXQgZWFybGllci4KKyAgICAgICAgaWYgKHJl
cHJlc2VudGVkT2JqZWN0LnVybCkgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRGlkbid0
IGZpbmQgYSBTY3JpcHRUcmVlRWxlbWVudCBmb3IgYSBTY3JpcHQgd2l0aCBhIFVSTC4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2luY2UgdGhl
IFNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgVVJMIHdlIGNvbnNpZGVyIGl0IGFuICdhbm9ueW1vdXMn
IHNjcmlwdC4gVGhlc2Ugc2NyaXB0cyBoYXBwZW4gZnJvbSBjYWxscyB0bworICAgICAgICAvLyB3
aW5kb3cuZXZhbCgpIG9yIGJyb3dzZXIgZmVhdHVyZXMgbGlrZSBBdXRvIEZpbGwgYW5kIFJlYWRl
ci4gVGhleSBhcmUgbm90IG5vcm1hbGx5IGFkZGVkIHRvIHRoZSBzaWRlYmFyLCBidXQgc2luY2UK
KyAgICAgICAgLy8gd2UgaGF2ZSBhIFNjcmlwdENvbnRlbnRWaWV3IGFza2luZyBmb3IgdGhlIHRy
ZWUgZWxlbWVudCB3ZSB3aWxsIG1ha2UgYSBTY3JpcHRUcmVlRWxlbWVudCBvbiBkZW1hbmQgYW5k
IGFkZCBpdC4KKworICAgICAgICBpZiAoIXRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVl
RWxlbWVudCkgeworICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0kuU2NyaXB0Q29s
bGVjdGlvbjsKKyAgICAgICAgICAgIHRoaXMuX2Fub255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxl
bWVudCA9IG5ldyBXSS5Gb2xkZXJUcmVlRWxlbWVudChXSS5VSVN0cmluZygiQW5vbnltb3VzIFNj
cmlwdHMiKSwgY29sbGVjdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMuX2Fu
b255bW91c1NjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpIHsKKyAgICAgICAgICAgIGxl
dCBpbmRleCA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih0
aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQsIHRoaXMuY29udGVudFRyZWVP
dXRsaW5lLmNoaWxkcmVuLCB0aGlzLl9jb21wYXJlVHJlZUVsZW1lbnRzKTsKKyAgICAgICAgICAg
IHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHRoaXMuX2Fub255bW91c1Njcmlw
dHNGb2xkZXJUcmVlRWxlbWVudCwgaW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5f
YW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmFkZChy
ZXByZXNlbnRlZE9iamVjdCk7CisKKyAgICAgICAgbGV0IHNjcmlwdFRyZWVFbGVtZW50ID0gbmV3
IFdJLlNjcmlwdFRyZWVFbGVtZW50KHJlcHJlc2VudGVkT2JqZWN0KTsKKyAgICAgICAgdGhpcy5f
YW5vbnltb3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdFRyZWVF
bGVtZW50KTsKKworICAgICAgICByZXR1cm4gc2NyaXB0VHJlZUVsZW1lbnQ7CisgICAgfQorCisg
ICAgLy8gUHJvdGVjdGVkCisKKyAgICBpbml0aWFsTGF5b3V0KCkKKyAgICB7CisgICAgICAgIHN1
cGVyLmluaXRpYWxMYXlvdXQoKTsKKworICAgICAgICBpZiAoV0kuZnJhbWVSZXNvdXJjZU1hbmFn
ZXIubWFpbkZyYW1lKQorICAgICAgICAgICAgdGhpcy5fbWFpbkZyYW1lTWFpblJlc291cmNlRGlk
Q2hhbmdlKFdJLmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSk7CisKKyAgICAgICAgZm9y
IChsZXQgc2NyaXB0IG9mIFdJLmRlYnVnZ2VyTWFuYWdlci5rbm93bk5vblJlc291cmNlU2NyaXB0
cykgeworICAgICAgICAgICAgdGhpcy5fYWRkU2NyaXB0KHNjcmlwdCk7CisKKyAgICAgICAgICAg
IGlmIChzY3JpcHQuc291cmNlTWFwcy5sZW5ndGggJiYgU291cmNlc1NpZGViYXJQYW5lbC5zaG91
bGRQbGFjZVJlc291cmNlc0F0VG9wTGV2ZWwoKSkKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRl
bnRUcmVlT3V0bGluZS5kaXNjbG9zdXJlQnV0dG9ucyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBoYXNDdXN0b21GaWx0ZXJzKCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHRoaXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxKTsKKyAgICAgICAgbGV0
IHNlbGVjdGVkU2NvcGVCYXJJdGVtID0gdGhpcy5fc2NvcGVCYXIuc2VsZWN0ZWRJdGVtc1swXTsK
KyAgICAgICAgcmV0dXJuIHNlbGVjdGVkU2NvcGVCYXJJdGVtICYmICFzZWxlY3RlZFNjb3BlQmFy
SXRlbS5leGNsdXNpdmU7CisgICAgfQorCisgICAgbWF0Y2hUcmVlRWxlbWVudEFnYWluc3RDdXN0
b21GaWx0ZXJzKHRyZWVFbGVtZW50LCBmbGFncykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNz
ZXJ0KHRoaXMuX3Njb3BlQmFyLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxKTsKKyAgICAgICAg
bGV0IHNlbGVjdGVkU2NvcGVCYXJJdGVtID0gdGhpcy5fc2NvcGVCYXIuc2VsZWN0ZWRJdGVtc1sw
XTsKKworICAgICAgICAvLyBTaG93IGV2ZXJ5dGhpbmcgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9u
IG9yICJBbGwgUmVzb3VyY2VzIiBpcyBzZWxlY3RlZCAodGhlIGV4Y2x1c2l2ZSBpdGVtKS4KKyAg
ICAgICAgaWYgKCFzZWxlY3RlZFNjb3BlQmFySXRlbSB8fCBzZWxlY3RlZFNjb3BlQmFySXRlbS5l
eGNsdXNpdmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAvLyBGb2xkZXJz
IGFyZSBoaWRkZW4gb24gdGhlIGZpcnN0IHBhc3MsIGJ1dCB2aXNpYmxlIGNoaWxkZW4gdW5kZXIg
dGhlIGZvbGRlciB3aWxsIGZvcmNlIHRoZSBmb2xkZXIgdmlzaWJsZSBhZ2Fpbi4KKyAgICAgICAg
aWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV0kuRm9sZGVyVHJlZUVsZW1lbnQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZnVuY3Rpb24gbWF0Y2goKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5GcmFtZVRyZWVFbGVt
ZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFNjb3BlQmFySXRlbVtXSS5Tb3Vy
Y2VzU2lkZWJhclBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF0gPT09IFdJLlJlc291cmNlLlR5cGUu
RG9jdW1lbnQ7CisKKyAgICAgICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlNj
cmlwdFRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFNjb3BlQmFy
SXRlbVtXSS5Tb3VyY2VzU2lkZWJhclBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF0gPT09IFdJLlJl
c291cmNlLlR5cGUuU2NyaXB0OworCisgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQgaW5zdGFu
Y2VvZiBXSS5DU1NTdHlsZVNoZWV0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGVjdGVkU2NvcGVCYXJJdGVtW1dJLlNvdXJjZXNTaWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBl
U3ltYm9sXSA9PT0gV0kuUmVzb3VyY2UuVHlwZS5TdHlsZXNoZWV0OworCisgICAgICAgICAgICBj
b25zb2xlLmFzc2VydCh0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdJLlJlc291cmNlVHJlZUVsZW1l
bnQsICJVbmtub3duIHRyZWVFbGVtZW50IiwgdHJlZUVsZW1lbnQpOworICAgICAgICAgICAgaWYg
KCEodHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5SZXNvdXJjZVRyZWVFbGVtZW50KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHJldHVybiB0cmVlRWxlbWVu
dC5yZXNvdXJjZS50eXBlID09PSBzZWxlY3RlZFNjb3BlQmFySXRlbVtXSS5Tb3VyY2VzU2lkZWJh
clBhbmVsLlJlc291cmNlVHlwZVN5bWJvbF07CisgICAgICAgIH0KKworICAgICAgICBsZXQgbWF0
Y2hlZCA9IG1hdGNoKCk7CisgICAgICAgIGlmIChtYXRjaGVkKQorICAgICAgICAgICAgZmxhZ3Mu
ZXhwYW5kVHJlZUVsZW1lbnQgPSB0cnVlOworICAgICAgICByZXR1cm4gbWF0Y2hlZDsKKyAgICB9
CisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfbWFpblJlc291cmNlRGlkQ2hhbmdlKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgaWYgKCFldmVudC50YXJnZXQuaXNNYWluRnJhbWUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9tYWluRnJhbWVNYWluUmVzb3VyY2VEaWRDaGFu
Z2UoZXZlbnQudGFyZ2V0KTsKKyAgICB9CisKKyAgICBfbWFpbkZyYW1lRGlkQ2hhbmdlKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpbkZyYW1lTWFpblJlc291cmNlRGlkQ2hhbmdlKFdJ
LmZyYW1lUmVzb3VyY2VNYW5hZ2VyLm1haW5GcmFtZSk7CisgICAgfQorCisgICAgX21haW5GcmFt
ZU1haW5SZXNvdXJjZURpZENoYW5nZShtYWluRnJhbWUpCisgICAgeworICAgICAgICB0aGlzLmNv
bnRlbnRCcm93c2VyLmNvbnRlbnRWaWV3Q29udGFpbmVyLmNsb3NlQWxsQ29udGVudFZpZXdzKCk7
CisKKyAgICAgICAgaWYgKHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50KSB7CisgICAgICAgICAg
ICB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0aGlzLl9tYWluRnJhbWVUcmVl
RWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCA9IG51bGw7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl9tYWluRnJhbWVUcmVlRWxlbWVudCA9IG5ldyBXSS5GcmFtZVRy
ZWVFbGVtZW50KG1haW5GcmFtZSk7CisgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmlu
c2VydENoaWxkKHRoaXMuX21haW5GcmFtZVRyZWVFbGVtZW50LCAwKTsKKworICAgICAgICBmdW5j
dGlvbiBkZWxheWVkV29yaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5jb250
ZW50VHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgICAgIGxl
dCBjdXJyZW50Q29udGVudFZpZXcgPSB0aGlzLmNvbnRlbnRCcm93c2VyLmN1cnJlbnRDb250ZW50
VmlldzsKKyAgICAgICAgICAgICAgICBsZXQgdHJlZUVsZW1lbnQgPSBjdXJyZW50Q29udGVudFZp
ZXcgPyB0aGlzLnRyZWVFbGVtZW50Rm9yUmVwcmVzZW50ZWRPYmplY3QoY3VycmVudENvbnRlbnRW
aWV3LnJlcHJlc2VudGVkT2JqZWN0KSA6IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKCF0cmVl
RWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl9tYWluRnJh
bWVUcmVlRWxlbWVudDsKKyAgICAgICAgICAgICAgICB0aGlzLnNob3dEZWZhdWx0Q29udGVudFZp
ZXdGb3JUcmVlRWxlbWVudCh0cmVlRWxlbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBDb29raWUgcmVzdG9yYXRpb24gd2lsbCBhdHRlbXB0IHRvIHJlLXNlbGVj
dCB0aGUgcmVzb3VyY2Ugd2Ugd2VyZSBzaG93aW5nLgorICAgICAgICAvLyBHaXZlIGl0IHRpbWUg
dG8gZG8gdGhhdCBiZWZvcmUgc2VsZWN0aW5nIHRoZSBtYWluIGZyYW1lIHJlc291cmNlLgorICAg
ICAgICBzZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcykpOworICAgIH0KKworICAgIF9z
Y3JpcHRXYXNBZGRlZChldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2FkZFNjcmlwdChldmVu
dC5kYXRhLnNjcmlwdCk7CisgICAgfQorCisgICAgX2FkZFNjcmlwdChzY3JpcHQpCisgICAgewor
ICAgICAgICAvLyBXZSBkb24ndCBhZGQgc2NyaXB0cyB3aXRob3V0IFVSTHMgaGVyZS4gVGhvc2Ug
c2NyaXB0cyBjYW4gcXVpY2tseSBjbHV0dGVyIHRoZSBpbnRlcmZhY2UgYW5kCisgICAgICAgIC8v
IGFyZSB1c3VhbGx5IG1vcmUgdHJhbnNpZW50LiBUaGV5IHdpbGwgZ2V0IGFkZGVkIGlmL3doZW4g
dGhleSBuZWVkIHRvIGJlIHNob3duIGluIGEgY29udGVudCB2aWV3LgorICAgICAgICBpZiAoIXNj
cmlwdC51cmwgJiYgIXNjcmlwdC5zb3VyY2VVUkwpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgLy8gVGFyZ2V0IG1haW4gcmVzb3VyY2UuCisgICAgICAgIGlmIChzY3JpcHQudGFyZ2V0
ICE9PSBXSS5wYWdlVGFyZ2V0KSB7CisgICAgICAgICAgICBpZiAoc2NyaXB0LmlzTWFpblJlc291
cmNlKCkpCisgICAgICAgICAgICAgICAgdGhpcy5fYWRkVGFyZ2V0V2l0aE1haW5SZXNvdXJjZShz
Y3JpcHQudGFyZ2V0KTsKKyAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmRpc2Ns
b3N1cmVCdXR0b25zID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIElmIHRoZSBzY3JpcHQgVVJMIG1hdGNoZXMgYSByZXNvdXJjZSB3ZSBjYW4gYXNz
dW1lIGl0IGlzIHBhcnQgb2YgdGhhdCByZXNvdXJjZSBhbmQgZG9lcyBub3QgbmVlZCBhZGRlZC4K
KyAgICAgICAgaWYgKHNjcmlwdC5yZXNvdXJjZSB8fCBzY3JpcHQuZHluYW1pY2FsbHlBZGRlZFNj
cmlwdEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IGluc2VydElu
dG9Ub3BMZXZlbCA9IGZhbHNlOworICAgICAgICBsZXQgcGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQg
PSBudWxsOworCisgICAgICAgIGlmIChzY3JpcHQuaW5qZWN0ZWQpIHsKKyAgICAgICAgICAgIGlm
ICghdGhpcy5fZXh0ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgbGV0IGNvbGxlY3Rpb24gPSBuZXcgV0kuU2NyaXB0Q29sbGVjdGlvbjsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQgPSBuZXcgV0ku
Rm9sZGVyVHJlZUVsZW1lbnQoV0kuVUlTdHJpbmcoIkV4dGVuc2lvbiBTY3JpcHRzIiksIGNvbGxl
Y3Rpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJlbnRGb2xkZXJUcmVlRWxl
bWVudCA9IHRoaXMuX2V4dGVuc2lvblNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChTb3VyY2VzU2lkZWJhclBhbmVsLnNob3VsZFBsYWNl
UmVzb3VyY2VzQXRUb3BMZXZlbCgpKQorICAgICAgICAgICAgICAgIGluc2VydEludG9Ub3BMZXZl
bCA9IHRydWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
X2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGxl
dCBjb2xsZWN0aW9uID0gbmV3IFdJLlNjcmlwdENvbGxlY3Rpb247CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50ID0gbmV3IFdJLkZvbGRlclRy
ZWVFbGVtZW50KFdJLlVJU3RyaW5nKCJFeHRyYSBTY3JpcHRzIiksIGNvbGxlY3Rpb24pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlclRyZWVFbGVtZW50
ID0gdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAocGFyZW50Rm9sZGVyVHJlZUVsZW1lbnQpCisgICAgICAg
ICAgICBwYXJlbnRGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5hZGQoc2NyaXB0
KTsKKworICAgICAgICBsZXQgc2NyaXB0VHJlZUVsZW1lbnQgPSBuZXcgV0kuU2NyaXB0VHJlZUVs
ZW1lbnQoc2NyaXB0KTsKKworICAgICAgICBpZiAoaW5zZXJ0SW50b1RvcExldmVsKSB7CisgICAg
ICAgICAgICBsZXQgaW5kZXggPSBpbnNlcnRpb25JbmRleEZvck9iamVjdEluTGlzdFNvcnRlZEJ5
RnVuY3Rpb24oc2NyaXB0VHJlZUVsZW1lbnQsIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmNoaWxk
cmVuLCB0aGlzLl9jb21wYXJlVHJlZUVsZW1lbnRzKTsKKyAgICAgICAgICAgIHRoaXMuY29udGVu
dFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHNjcmlwdFRyZWVFbGVtZW50LCBpbmRleCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXBhcmVudEZvbGRlclRyZWVFbGVtZW50LnBh
cmVudCkgeworICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGluc2VydGlvbkluZGV4Rm9yT2Jq
ZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbihwYXJlbnRGb2xkZXJUcmVlRWxlbWVudCwgdGhpcy5j
b250ZW50VHJlZU91dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2NvbXBhcmVUcmVlRWxlbWVudHMpOwor
ICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmluc2VydENoaWxkKHBhcmVu
dEZvbGRlclRyZWVFbGVtZW50LCBpbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHBhcmVudEZvbGRlclRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHNjcmlwdFRyZWVFbGVtZW50KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIF9zY3JpcHRXYXNSZW1vdmVkKGV2ZW50KQorICAgIHsK
KyAgICAgICAgbGV0IHNjcmlwdCA9IGV2ZW50LmRhdGEuc2NyaXB0OworICAgICAgICBsZXQgc2Ny
aXB0VHJlZUVsZW1lbnQgPSB0aGlzLmNvbnRlbnRUcmVlT3V0bGluZS5nZXRDYWNoZWRUcmVlRWxl
bWVudChzY3JpcHQpOworICAgICAgICBpZiAoIXNjcmlwdFRyZWVFbGVtZW50KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGxldCBwYXJlbnRUcmVlRWxlbWVudCA9IHNjcmlwdFRyZWVF
bGVtZW50LnBhcmVudDsKKyAgICAgICAgcGFyZW50VHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc2Ny
aXB0VHJlZUVsZW1lbnQpOworCisgICAgICAgIGlmIChwYXJlbnRUcmVlRWxlbWVudCBpbnN0YW5j
ZW9mIFdJLkZvbGRlclRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVu
dC5yZXByZXNlbnRlZE9iamVjdC5yZW1vdmUoc2NyaXB0KTsKKworICAgICAgICAgICAgaWYgKCFw
YXJlbnRUcmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpCisgICAgICAgICAgICAgICAgcGFyZW50
VHJlZUVsZW1lbnQucGFyZW50LnJlbW92ZUNoaWxkKHBhcmVudFRyZWVFbGVtZW50KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIF9zY3JpcHRzQ2xlYXJlZChldmVudCkKKyAgICB7CisgICAgICAg
IGNvbnN0IHN1cHByZXNzT25EZXNlbGVjdCA9IHRydWU7CisgICAgICAgIGNvbnN0IHN1cHByZXNz
U2VsZWN0U2libGluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKHRoaXMuX2V4dGVuc2lvblNjcmlw
dHNGb2xkZXJUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2V4dGVuc2lvblNj
cmlwdHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fZXh0
ZW5zaW9uU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9l
eHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQsIHN1cHByZXNzT25EZXNlbGVjdCwgc3Vw
cHJlc3NTZWxlY3RTaWJsaW5nKTsKKworICAgICAgICAgICAgdGhpcy5fZXh0ZW5zaW9uU2NyaXB0
c0ZvbGRlclRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmNsZWFyKCk7CisgICAgICAgICAg
ICB0aGlzLl9leHRlbnNpb25TY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQgPSBudWxsOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50KSB7
CisgICAgICAgICAgICBpZiAodGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQucGFy
ZW50KQorICAgICAgICAgICAgICAgIHRoaXMuX2V4dHJhU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50
LnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudCwg
c3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworCisgICAgICAgICAg
ICB0aGlzLl9leHRyYVNjcmlwdHNGb2xkZXJUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdC5j
bGVhcigpOworICAgICAgICAgICAgdGhpcy5fZXh0cmFTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQg
PSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuX2Fub255bW91c1NjcmlwdHNG
b2xkZXJUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2Fub255bW91c1Njcmlw
dHNGb2xkZXJUcmVlRWxlbWVudC5wYXJlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5fYW5vbnlt
b3VzU2NyaXB0c0ZvbGRlclRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9hbm9u
eW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQsIHN1cHByZXNzT25EZXNlbGVjdCwgc3VwcHJl
c3NTZWxlY3RTaWJsaW5nKTsKKworICAgICAgICAgICAgdGhpcy5fYW5vbnltb3VzU2NyaXB0c0Zv
bGRlclRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0LmNsZWFyKCk7CisgICAgICAgICAgICB0
aGlzLl9hbm9ueW1vdXNTY3JpcHRzRm9sZGVyVHJlZUVsZW1lbnQgPSBudWxsOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRoaXMuX3RhcmdldFRyZWVFbGVtZW50TWFwLnNpemUpIHsKKyAgICAg
ICAgICAgIGZvciAobGV0IHRyZWVFbGVtZW50IG9mIHRoaXMuX3RhcmdldFRyZWVFbGVtZW50TWFw
KQorICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50LnBhcmVudC5yZW1vdmVDaGlsZCh0cmVlRWxl
bWVudCwgc3VwcHJlc3NPbkRlc2VsZWN0LCBzdXBwcmVzc1NlbGVjdFNpYmxpbmcpOworICAgICAg
ICAgICAgdGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXAuY2xlYXIoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIF9zdHlsZVNoZWV0QWRkZWQoZXZlbnQpCisgICAgeworICAgICAgICBsZXQgc3R5
bGVTaGVldCA9IGV2ZW50LmRhdGEuc3R5bGVTaGVldDsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0
LmlzSW5zcGVjdG9yU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGxldCBmcmFtZVRyZWVFbGVtZW50ID0gdGhpcy50cmVlRWxlbWVudEZvclJlcHJlc2VudGVkT2Jq
ZWN0KHN0eWxlU2hlZXQucGFyZW50RnJhbWUpOworICAgICAgICBpZiAoIWZyYW1lVHJlZUVsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZnJhbWVUcmVlRWxlbWVudC5hZGRS
ZXByZXNlbnRlZE9iamVjdFRvTmV3Q2hpbGRRdWV1ZShzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAg
ICBfYWRkVGFyZ2V0V2l0aE1haW5SZXNvdXJjZSh0YXJnZXQpCisgICAgeworICAgICAgICBjb25z
b2xlLmFzc2VydCh0YXJnZXQudHlwZSA9PT0gV0kuVGFyZ2V0LlR5cGUuV29ya2VyIHx8IHRhcmdl
dC50eXBlID09PSBXSS5UYXJnZXQuVHlwZS5TZXJ2aWNlV29ya2VyKTsKKworICAgICAgICBsZXQg
dGFyZ2V0VHJlZUVsZW1lbnQgPSBuZXcgV0kuV29ya2VyVHJlZUVsZW1lbnQodGFyZ2V0KTsKKyAg
ICAgICAgdGhpcy5fdGFyZ2V0VHJlZUVsZW1lbnRNYXAuc2V0KHRhcmdldCwgdGFyZ2V0VHJlZUVs
ZW1lbnQpOworCisgICAgICAgIGxldCBpbmRleCA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5M
aXN0U29ydGVkQnlGdW5jdGlvbih0YXJnZXRUcmVlRWxlbWVudCwgdGhpcy5jb250ZW50VHJlZU91
dGxpbmUuY2hpbGRyZW4sIHRoaXMuX2NvbXBhcmVUcmVlRWxlbWVudHMpOworICAgICAgICB0aGlz
LmNvbnRlbnRUcmVlT3V0bGluZS5pbnNlcnRDaGlsZCh0YXJnZXRUcmVlRWxlbWVudCwgaW5kZXgp
OworICAgIH0KKworICAgIF90YXJnZXRSZW1vdmVkKGV2ZW50KQorICAgIHsKKyAgICAgICAgbGV0
IHJlbW92ZWRUYXJnZXQgPSBldmVudC5kYXRhLnRhcmdldDsKKworICAgICAgICBsZXQgdGFyZ2V0
VHJlZUVsZW1lbnQgPSB0aGlzLl90YXJnZXRUcmVlRWxlbWVudE1hcC50YWtlKHJlbW92ZWRUYXJn
ZXQpOworICAgICAgICBpZiAodGFyZ2V0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICB0YXJnZXRU
cmVlRWxlbWVudC5wYXJlbnQucmVtb3ZlQ2hpbGQodGFyZ2V0VHJlZUVsZW1lbnQpOworICAgIH0K
KworICAgIF90cmVlU2VsZWN0aW9uRGlkQ2hhbmdlKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLnZpc2libGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IHRyZWVF
bGVtZW50ID0gZXZlbnQuZGF0YS5zZWxlY3RlZEVsZW1lbnQ7CisgICAgICAgIGlmICghdHJlZUVs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHRyZWVFbGVtZW50IGlu
c3RhbmNlb2YgV0kuRm9sZGVyVHJlZUVsZW1lbnQKKyAgICAgICAgICAgIHx8IHRyZWVFbGVtZW50
IGluc3RhbmNlb2YgV0kuUmVzb3VyY2VUcmVlRWxlbWVudAorICAgICAgICAgICAgfHwgdHJlZUVs
ZW1lbnQgaW5zdGFuY2VvZiBXSS5TY3JpcHRUcmVlRWxlbWVudAorICAgICAgICAgICAgfHwgdHJl
ZUVsZW1lbnQgaW5zdGFuY2VvZiBXSS5DU1NTdHlsZVNoZWV0VHJlZUVsZW1lbnQpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNvb2tpZSA9IG51bGw7CisgICAgICAgICAgICBjb25zdCBvcHRpb25zID0g
eworICAgICAgICAgICAgICAgIGlnbm9yZU5ldHdvcmtUYWI6IHRydWUsCisgICAgICAgICAgICAg
ICAgaWdub3JlU2VhcmNoVGFiOiB0cnVlLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIFdJ
LnNob3dSZXByZXNlbnRlZE9iamVjdCh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCwgY29v
a2llLCBvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnNvbGUuZXJyb3IoIlVua25vd24gdHJlZSBlbGVtZW50IiwgdHJlZUVsZW1lbnQpOworICAg
IH0KKworICAgIF9jb21wYXJlVHJlZUVsZW1lbnRzKGEsIGIpCisgICAgeworICAgICAgICAvLyBB
bHdheXMgc29ydCB0aGUgbWFpbiBmcmFtZSBlbGVtZW50IGZpcnN0LgorICAgICAgICBpZiAoYSBp
bnN0YW5jZW9mIFdJLkZyYW1lVHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgIGlmIChiIGluc3RhbmNlb2YgV0kuRnJhbWVUcmVlRWxlbWVudCkKKyAgICAgICAgICAg
IHJldHVybiAxOworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGEubWFpblRpdGxlKTsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoYi5tYWluVGl0bGUpOworCisgICAgICAgIHJldHVybiAoYS5tYWlu
VGl0bGUgfHwgIiIpLmV4dGVuZGVkTG9jYWxlQ29tcGFyZShiLm1haW5UaXRsZSB8fCAiIik7Cisg
ICAgfQorCisgICAgX2V4dHJhRG9tYWluc0FjdGl2YXRlZCgpCisgICAgeworICAgICAgICBpZiAo
U291cmNlc1NpZGViYXJQYW5lbC5zaG91bGRQbGFjZVJlc291cmNlc0F0VG9wTGV2ZWwoKSkKKyAg
ICAgICAgICAgIHRoaXMuY29udGVudFRyZWVPdXRsaW5lLmRpc2Nsb3N1cmVCdXR0b25zID0gdHJ1
ZTsKKyAgICB9CisKKyAgICBfc2NvcGVCYXJTZWxlY3Rpb25EaWRDaGFuZ2UoZXZlbnQpCisgICAg
eworICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcigpOworICAgIH0KK307CisKK1dJLlNvdXJjZXNT
aWRlYmFyUGFuZWwuUmVzb3VyY2VUeXBlU3ltYm9sID0gU3ltYm9sKCJyZXNvdXJjZS10eXBlIik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Tb3VyY2VzVGFiQ29udGVudFZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDI2Mjk4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZXNUYWJDb250ZW50Vmlldy5qcwpAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV0kuU291cmNlc1RhYkNvbnRlbnRWaWV3ID0gY2xh
c3MgU291cmNlc1RhYkNvbnRlbnRWaWV3IGV4dGVuZHMgV0kuQ29udGVudEJyb3dzZXJUYWJDb250
ZW50VmlldworeworICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXIpCisgICAgeworICAgICAgICBs
ZXQgdGFiQmFySXRlbSA9IFdJLkdlbmVyYWxUYWJCYXJJdGVtLmZyb21UYWJJbmZvKFdJLlNvdXJj
ZXNUYWJDb250ZW50Vmlldy50YWJJbmZvKCkpOworICAgICAgICBjb25zdCBkZXRhaWxzU2lkZWJh
clBhbmVsQ29uc3RydWN0b3JzID0gW1dJLlJlc291cmNlRGV0YWlsc1NpZGViYXJQYW5lbCwgV0ku
UHJvYmVEZXRhaWxzU2lkZWJhclBhbmVsXTsKKyAgICAgICAgc3VwZXIoaWRlbnRpZmllciB8fCAi
c291cmNlcyIsICJzb3VyY2VzIiwgdGFiQmFySXRlbSwgV0kuU291cmNlc1NpZGViYXJQYW5lbCwg
ZGV0YWlsc1NpZGViYXJQYW5lbENvbnN0cnVjdG9ycyk7CisgICAgfQorCisgICAgc3RhdGljIHRh
YkluZm8oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGltYWdlOiAiSW1h
Z2VzL1Jlc291cmNlcy5zdmciLAorICAgICAgICAgICAgdGl0bGU6IFdJLlVJU3RyaW5nKCJTb3Vy
Y2VzIiksCisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIGlzVGFiQWxsb3dlZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gV0kuc2V0dGluZ3MuZXhwZXJpbWVudGFsRW5hYmxlU291cmNl
c1RhYi52YWx1ZTsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCB0eXBlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXSS5Tb3VyY2VzVGFiQ29udGVudFZpZXcuVHlwZTsKKyAgICB9
CisKKyAgICBnZXQgc3VwcG9ydHNTcGxpdENvbnRlbnRCcm93c2VyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhblNob3dSZXByZXNlbnRlZE9iamVjdChyZXBy
ZXNlbnRlZE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXByZXNlbnRlZE9iamVjdCBp
bnN0YW5jZW9mIFdJLkZyYW1lCisgICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLlJlc291cmNlCisgICAgICAgICAgICB8fCByZXByZXNlbnRlZE9iamVjdCBpbnN0
YW5jZW9mIFdJLlNjcmlwdAorICAgICAgICAgICAgfHwgcmVwcmVzZW50ZWRPYmplY3QgaW5zdGFu
Y2VvZiBXSS5DU1NTdHlsZVNoZWV0CisgICAgICAgICAgICB8fCAocmVwcmVzZW50ZWRPYmplY3Qg
aW5zdGFuY2VvZiBXSS5Db2xsZWN0aW9uICYmICEocmVwcmVzZW50ZWRPYmplY3QgaW5zdGFuY2Vv
ZiBXSS5DYW52YXNDb2xsZWN0aW9uKSk7CisgICAgfQorfTsKKworV0kuU291cmNlc1RhYkNvbnRl
bnRWaWV3LlR5cGUgPSAic291cmNlcyI7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>