<?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>34744</bug_id>
          
          <creation_ts>2010-02-09 03:04:25 -0800</creation_ts>
          <short_desc>[Chromium] Upstream JavaScript part of DevTools WebKit API implementation</short_desc>
          <delta_ts>2010-02-09 07:15:38 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>pfeldman</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188947</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-09 03:04:25 -0800</bug_when>
    <thetext>The JavaScript files living in chromium repository at webkit/glue/devtools/js/ should move to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188953</commentid>
    <comment_count>1</comment_count>
      <attachid>48401</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-09 03:37:58 -0800</bug_when>
    <thetext>Created attachment 48401
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188969</commentid>
    <comment_count>2</comment_count>
      <attachid>48401</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-09 04:54:54 -0800</bug_when>
    <thetext>Comment on attachment 48401
patch

Please shorten ChangeLog and limit it to the added files. No need to scare people.

Could you also leave FIXME in all the files requesting that private members are renamed to leading underscore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188991</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-09 07:15:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 48401 [details])
&gt; Please shorten ChangeLog and limit it to the added files. No need to scare
&gt; people.
&gt; 
&gt; Could you also leave FIXME in all the files requesting that private members are
&gt; renamed to leading underscore?
Done.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebKit/chromium/ChangeLog
	A	WebKit/chromium/WebKit.gypi
	A	WebKit/chromium/src/js/DebuggerAgent.js
	A	WebKit/chromium/src/js/DevTools.js
	A	WebKit/chromium/src/js/DevToolsHostStub.js
	A	WebKit/chromium/src/js/HeapProfilerPanel.js
	A	WebKit/chromium/src/js/InjectDispatch.js
	A	WebKit/chromium/src/js/InspectorControllerImpl.js
	A	WebKit/chromium/src/js/ProfilerAgent.js
	A	WebKit/chromium/src/js/ProfilerProcessor.js
	A	WebKit/chromium/src/js/Tests.js
Committed r54547</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48401</attachid>
            <date>2010-02-09 03:37:58 -0800</date>
            <delta_ts>2010-02-09 04:54:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>upstream-devtools-js.patch</filename>
            <type>text/plain</type>
            <size>237933</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDk3ZDE5MDIuLjYxMjc4ZTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM4MSBAQAorMjAxMC0wMi0wOSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcHN0
cmVhbSBKYXZhU2NyaXB0IHBhcnQgb2YgRGV2VG9vbHMgV2ViS2l0IEFQSSBpbXBsZW1lbnRhdGlv
bgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDc0
NAorCisgICAgICAgICogV2ViS2l0Lmd5cGk6IEFkZGVkLgorICAgICAgICAqIHNyYy9qcy9EZWJ1
Z2dlckFnZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQpOgor
ICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVzZXQpOgorICAgICAg
ICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuaW5pdFVJKToKKyAgICAgICAgKGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlc29sdmVTY3JpcHRTb3VyY2UudGhpcy5y
ZXF1ZXN0U2VxVG9DYWxsYmFja18uY21kLmdldFNlcXVlbmNlTnVtYmVyKToKKyAgICAgICAgKGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlc29sdmVTY3JpcHRTb3VyY2UpOgorICAg
ICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucGF1c2VFeGVjdXRpb24pOgor
ICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuYWRkQnJlYWtwb2ludCk6
CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZW1vdmVCcmVha3Bv
aW50KToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnVwZGF0ZUJy
ZWFrcG9pbnQpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc3Rl
cEludG9TdGF0ZW1lbnQpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5
cGUuc3RlcE91dE9mRnVuY3Rpb24pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5w
cm90b3R5cGUuc3RlcE92ZXJTdGF0ZW1lbnQpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJB
Z2VudC5wcm90b3R5cGUucmVzdW1lRXhlY3V0aW9uKToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQucHJvdG90eXBlLmNyZWF0ZUV4Y2VwdGlvbk1lc3NhZ2VfKToKKyAgICAgICAgKGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnNob3dQZW5kaW5nRXhjZXB0aW9uTWVzc2Fn
ZV8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuY2xlYXJFeGNl
cHRpb25NZXNzYWdlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlw
ZS5wYXVzZU9uRXhjZXB0aW9ucyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnBy
b3RvdHlwZS5zZXRQYXVzZU9uRXhjZXB0aW9ucyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dl
ckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0RXZhbHVhdGUpOgorICAgICAgICAoZGV2dG9vbHMuRGVi
dWdnZXJBZ2VudC5wcm90b3R5cGUucmVzb2x2ZUNoaWxkcmVuKToKKyAgICAgICAgKGRldnRvb2xz
LkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlc29sdmVTY29wZS50aGlzLnJlcXVlc3RTZXFUb0Nh
bGxiYWNrXy5jbWQuZ2V0U2VxdWVuY2VOdW1iZXIpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdn
ZXJBZ2VudC5wcm90b3R5cGUucmVzb2x2ZVNjb3BlKToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQucHJvdG90eXBlLnJlc29sdmVGcmFtZVZhcmlhYmxlc18uc2NvcGVSZXNwb25zZUhh
bmRsZXIpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVzb2x2
ZUZyYW1lVmFyaWFibGVzXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3Rv
dHlwZS5yZXNvbHZlQ29tcGxldGlvbnNPbkZyYW1lKToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQucHJvdG90eXBlLmdldFNjcmlwdENvbnRleHRUeXBlKToKKyAgICAgICAgKGRldnRv
b2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlcXVlc3RDbGVhckJyZWFrcG9pbnRfKToKKyAg
ICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlcXVlc3RDaGFuZ2VCcmVh
a3BvaW50Xyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1
ZXN0QmFja3RyYWNlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21t
YW5kXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5zdGVwQ29t
bWFuZF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVxdWVz
dExvb2t1cF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc2V0
Q29udGV4dElkXy50aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrXy5jbWQuZ2V0U2VxdWVuY2VOdW1i
ZXIpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc2V0Q29udGV4
dElkXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5oYW5kbGVE
ZWJ1Z2dlck91dHB1dF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5
cGUuaGFuZGxlQnJlYWtFdmVudF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5w
cm90b3R5cGUuaGFuZGxlRXhjZXB0aW9uRXZlbnRfKToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQucHJvdG90eXBlLmhhbmRsZVNjcmlwdHNSZXNwb25zZV8pOgorICAgICAgICAoZGV2
dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuaXNTY3JpcHRGcm9tSW5zcGVjdGVkQ29udGV4
dF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuaGFuZGxlU2V0
QnJlYWtwb2ludFJlc3BvbnNlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnBy
b3RvdHlwZS5oYW5kbGVBZnRlckNvbXBpbGVFdmVudF8pOgorICAgICAgICAoZGV2dG9vbHMuRGVi
dWdnZXJBZ2VudC5wcm90b3R5cGUuYWRkU2NyaXB0SW5mb18pOgorICAgICAgICAoZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5wcm90b3R5cGUuaGFuZGxlQ2xlYXJCcmVha3BvaW50UmVzcG9uc2VfKToK
KyAgICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmhhbmRsZUJhY2t0cmFj
ZVJlc3BvbnNlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5k
b0hhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFn
ZW50LnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZyYW1lKToKKyAgICAgICAgKGRldnRvb2xzLkRl
YnVnZ2VyQWdlbnQucHJvdG90eXBlLmludm9rZUNhbGxiYWNrRm9yUmVzcG9uc2VfKToKKyAgICAg
ICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmZvcm1hdENhbGxGcmFtZV8pOgor
ICAgICAgICAoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmplY3RQcm9wZXJ0aWVzXyk6
CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3BlcnRpZXNUb1Byb3hpZXNfKToK
KyAgICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuZm9ybWF0T2JqZWN0UHJveHlfKToKKyAg
ICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1iZXJfKToKKyAg
ICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3ZWJraXRMaW5lTnVtYmVyXyk6Cisg
ICAgICAgIChkZXZ0b29scy5TY3JpcHRJbmZvKToKKyAgICAgICAgKGRldnRvb2xzLlNjcmlwdElu
Zm8ucHJvdG90eXBlLmdldExpbmVPZmZzZXQpOgorICAgICAgICAoZGV2dG9vbHMuU2NyaXB0SW5m
by5wcm90b3R5cGUuZ2V0Q29udGV4dFR5cGUpOgorICAgICAgICAoZGV2dG9vbHMuU2NyaXB0SW5m
by5wcm90b3R5cGUuZ2V0VXJsKToKKyAgICAgICAgKGRldnRvb2xzLlNjcmlwdEluZm8ucHJvdG90
eXBlLmlzVW5yZXNvbHZlZCk6CisgICAgICAgIChkZXZ0b29scy5TY3JpcHRJbmZvLnByb3RvdHlw
ZS5nZXRCcmVha3BvaW50SW5mbyk6CisgICAgICAgIChkZXZ0b29scy5TY3JpcHRJbmZvLnByb3Rv
dHlwZS5hZGRCcmVha3BvaW50SW5mbyk6CisgICAgICAgIChkZXZ0b29scy5TY3JpcHRJbmZvLnBy
b3RvdHlwZS5yZW1vdmVCcmVha3BvaW50SW5mbyk6CisgICAgICAgIChkZXZ0b29scy5CcmVha3Bv
aW50SW5mbyk6CisgICAgICAgIChkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUuZ2V0
TGluZSk6CisgICAgICAgIChkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUuZ2V0VjhJ
ZCk6CisgICAgICAgIChkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUuc2V0VjhJZCk6
CisgICAgICAgIChkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUubWFya0FzUmVtb3Zl
ZCk6CisgICAgICAgIChkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90b3R5cGUuaXNSZW1vdmVk
KToKKyAgICAgICAgKGRldnRvb2xzLkNhbGxGcmFtZSk6CisgICAgICAgIChkZXZ0b29scy5DYWxs
RnJhbWUucHJvdG90eXBlLmV2YWx1YXRlXyk6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z0NvbW1h
bmQpOgorICAgICAgICAoZGV2dG9vbHMuRGVidWdDb21tYW5kLnByb3RvdHlwZS5nZXRTZXF1ZW5j
ZU51bWJlcik6CisgICAgICAgIChkZXZ0b29scy5EZWJ1Z0NvbW1hbmQucHJvdG90eXBlLnRvSlNP
TlByb3RvY29sKToKKyAgICAgICAgKGRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZSk6CisgICAgICAg
IChkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UucHJvdG90eXBlLmdldFR5cGUpOgorICAgICAgICAo
ZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRFdmVudCk6CisgICAgICAgIChk
ZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UucHJvdG90eXBlLmdldENvbW1hbmQpOgorICAgICAgICAo
ZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRSZXF1ZXN0U2VxKToKKyAgICAg
ICAgKGRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuaXNSdW5uaW5nKToKKyAgICAg
ICAgKGRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuaXNTdWNjZXNzKToKKyAgICAg
ICAgKGRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuZ2V0TWVzc2FnZSk6CisgICAg
ICAgIChkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UucHJvdG90eXBlLmdldEJvZHkpOgorICAgICAg
ICAoZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5sb29rdXApOgorICAgICAgICAq
IHNyYy9qcy9EZXZUb29scy5qczogQWRkZWQuCisgICAgICAgIChkZXZ0b29scy5kaXNwYXRjaCk6
CisgICAgICAgIChkZXZ0b29scy5Ub29sc0FnZW50KToKKyAgICAgICAgKGRldnRvb2xzLlRvb2xz
QWdlbnQucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKGRldnRvb2xzLlRvb2xzQWdlbnQucHJv
dG90eXBlLmV2YWx1YXRlSmF2YVNjcmlwdCk6CisgICAgICAgIChkZXZ0b29scy5Ub29sc0FnZW50
LnByb3RvdHlwZS5nZXREZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKGRldnRvb2xzLlRvb2xzQWdl
bnQucHJvdG90eXBlLmdldFByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoZGV2dG9vbHMuVG9vbHNB
Z2VudC5wcm90b3R5cGUuZnJhbWVOYXZpZ2F0ZV8pOgorICAgICAgICAoZGV2dG9vbHMuVG9vbHNB
Z2VudC5wcm90b3R5cGUuZGlzcGF0Y2hPbkNsaWVudF8pOgorICAgICAgICAoZGV2dG9vbHMuVG9v
bHNBZ2VudC5wcm90b3R5cGUuZXZhbHVhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnNldFJl
c291cmNlc1BhbmVsRW5hYmxlZCk6CisgICAgICAgIChkZWJ1Z1ByaW50KToKKyAgICAgICAgKGRl
dnRvb2xzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZS5zZXR1cFNvdXJjZUZyYW1l
SWZOZWVkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBlLmRp
ZFJlc29sdmVTY3JpcHRTb3VyY2VfKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VbnJlc29sdmVk
UHJvcGVydHlWYWx1ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVUlTdHJpbmcpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLnJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5yZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRlc3RDb250cm9sbGVyLnByb3RvdHlwZS5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5xdWV1ZXNBcmVFbXB0eSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IucGF1c2VkU2NyaXB0KToKKyAgICAgICAgKiBzcmMvanMvRGV2VG9vbHNIb3N0U3R1
Yi5qczogQWRkZWQuCisgICAgICAgICguUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIpOgorICAgICAg
ICAoLlJlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlwZS5nZXRDb250ZXh0SWQpOgorICAg
ICAgICAoLlJlbW90ZVByb2ZpbGVyQWdlbnRTdHViKToKKyAgICAgICAgKC5SZW1vdGVQcm9maWxl
ckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKToKKyAgICAgICAg
KC5SZW1vdGVQcm9maWxlckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0TG9nTGluZXMpOgorICAgICAg
ICAoLlJlbW90ZVRvb2xzQWdlbnRTdHViKToKKyAgICAgICAgKC5SZW1vdGVUb29sc0FnZW50U3R1
Yi5wcm90b3R5cGUuZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKC5SZW1vdGVU
b29sc0FnZW50U3R1Yi5wcm90b3R5cGUuZGlzcGF0Y2hPbkluc3BlY3RvckNvbnRyb2xsZXIpOgor
ICAgICAgICAoLlJlbW90ZVRvb2xzQWdlbnRTdHViLnByb3RvdHlwZS5leGVjdXRlVm9pZEphdmFT
Y3JpcHQpOgorICAgICAgICAoLlByb2ZpbGVyU3R1YkhlbHBlcik6CisgICAgICAgICguUHJvZmls
ZXJTdHViSGVscGVyLkdldEluc3RhbmNlKToKKyAgICAgICAgKC5Qcm9maWxlclN0dWJIZWxwZXIu
cHJvdG90eXBlLlN0b3BQcm9maWxpbmcpOgorICAgICAgICAoLlByb2ZpbGVyU3R1YkhlbHBlci5w
cm90b3R5cGUuU3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoLlByb2ZpbGVyU3R1YkhlbHBlci5w
cm90b3R5cGUuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKToKKyAgICAgICAgKC5Qcm9maWxlclN0
dWJIZWxwZXIucHJvdG90eXBlLmdldExvZ0xpbmVzKToKKyAgICAgICAgKC5SZW1vdGVEZWJ1Z2dl
ckNvbW1hbmRFeGVjdXRvclN0dWIpOgorICAgICAgICAoLlJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4
ZWN1dG9yU3R1Yi5wcm90b3R5cGUuRGVidWdnZXJDb21tYW5kKToKKyAgICAgICAgKC5SZW1vdGVE
ZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIucHJvdG90eXBlLkRlYnVnZ2VyUGF1c2VTY3JpcHQp
OgorICAgICAgICAoLlJlbW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1Yi5wcm90b3R5cGUu
c2VuZFJlc3BvbnNlXyk6CisgICAgICAgICguRGV2VG9vbHNIb3N0U3R1Yik6CisgICAgICAgICgu
RGV2VG9vbHNIb3N0U3R1Yi5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoLkRldlRvb2xzSG9z
dFN0dWIucHJvdG90eXBlLnNldHRpbmcpOgorICAgICAgICAoLkRldlRvb2xzSG9zdFN0dWIucHJv
dG90eXBlLnNldFNldHRpbmcpOgorICAgICAgICAqIHNyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5q
czogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5lbC5wcm90b3R5cGUu
YWRkU25hcHNob3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLmdldCBzdGF0
dXNCYXJJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuZ2V0IHByb2ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZp
ZXcucHJvdG90eXBlLnNldCBwcm9maWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5oaWRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RWaWV3LnByb3RvdHlwZS5yZXNpemUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFZpZXcucHJvdG90eXBlLnJlZnJlc2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLnJlZnJlc2hTaG93QXNQZXJjZW50cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX2RlbGV0ZVNlYXJjaE1h
dGNoZWRGbGFncyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90
b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0LldlYkluc3Bl
Y3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQuanVt
cFRvTGFzdFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBl
Lmp1bXBUb0xhc3RTZWFyY2hSZXN1bHQuanVtcFRvTmV4dFNlYXJjaFJlc3VsdC5XZWJJbnNwZWN0
b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQuanVtcFRv
UHJldmlvdXNTZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlw
ZS5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdC5zaG93aW5nRmlyc3RTZWFyY2hSZXN1bHQuV2Vi
SW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnByb3RvdHlwZS5zaG93aW5nRmlyc3RTZWFyY2hSZXN1
bHQuc2hvd2luZ0xhc3RTZWFyY2hSZXN1bHQuV2ViSW5zcGVjdG9yLkNQVVByb2ZpbGVWaWV3LnBy
b3RvdHlwZS5zaG93aW5nTGFzdFNlYXJjaFJlc3VsdC5fanVtcFRvU2VhcmNoUmVzdWx0LldlYklu
c3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuX2p1bXBUb1NlYXJjaFJlc3VsdC5yZWZy
ZXNoVmlzaWJsZURhdGEpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcu
cHJvdG90eXBlLl9jaGFuZ2VCYXNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RWaWV3LnByb3RvdHlwZS5fY3JlYXRlU25hcHNob3REYXRhR3JpZExpc3QpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9tb3VzZURvd25JbkRhdGFH
cmlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5n
ZXQgX2lzU2hvd2luZ0FzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Vmlldy5wcm90b3R5cGUuX3BlcmNlbnRDbGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZS5fcmVzZXREYXRhR3JpZExpc3QpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9zb3J0RGF0YSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUuX3VwZGF0ZUJh
c2VPcHRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3Rv
dHlwZS5fdXBkYXRlUGVyY2VudEJ1dHRvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5wcm90b3R5cGUuX3VwZGF0ZVN1bW1hcnlHcmFwaCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9ucy5MRVNTKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlci5vcGVy
YXRpb25zLkxFU1NfT1JfRVFVQUwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvbnMuRVFVQUwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFZpZXcuU2VhcmNoSGVscGVyLm9wZXJhdGlvbnMuR1JFQVRFUl9PUl9F
UVVBTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxw
ZXIub3BlcmF0aW9ucy5HUkVBVEVSKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RWaWV3LlNlYXJjaEhlbHBlci5wYXJzZU9wZXJhdGlvbkFuZE51bWJlcik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlLmZv
cm1hdFZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3Iu
cHJvdG90eXBlLmdldCBzaG93QXNQZXJjZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlLnNldCBzaG93QXNQZXJjZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNvdW50Q2FsY3VsYXRvcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJvdG90eXBlLl9oaWdoRnJvbUxv
dyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDb3VudENhbGN1bGF0b3IucHJv
dG90eXBlLl92YWx1ZVRvU3RyaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFy
eVNpemVDYWxjdWxhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVD
YWxjdWxhdG9yLnByb3RvdHlwZS5faGlnaEZyb21Mb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdFNpZGViYXJUcmVlRWxlbWVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgbWFpblRpdGxlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTaWRlYmFyVHJlZUVsZW1lbnQucHJv
dG90eXBlLnNldCBtYWluVGl0bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdldCBfaGFzUmV0YWlu
ZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRo
UmV0YWluZXJzLnByb3RvdHlwZS5nZXQgX3BhcmVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuX3BvcHVsYXRl
LmlmKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRo
UmV0YWluZXJzLnByb3RvdHlwZS5fcG9wdWxhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZm
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0
YWluZXJzLnByb3RvdHlwZS5zb3J0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5zaWduRm9yRGVsdGEpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMu
cHJvdG90eXBlLnNob3dEZWx0YUFzUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0VG90YWxDb3Vu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJl
dGFpbmVycy5wcm90b3R5cGUuZ2V0VG90YWxTaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXQgY291bnRQ
ZXJjZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVX
aXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXQgc2l6ZVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLmdl
dCBjb3VudERlbHRhUGVyY2VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RGF0YUdyaWROb2RlV2l0aFJldGFpbmVycy5wcm90b3R5cGUuZ2V0IHNpemVEZWx0YVBlcmNlbnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRh
aW5lcnMucHJvdG90eXBlLmdldCBkYXRhKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5jcmVhdGVDZWxsKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5hcHBlbmRDaGlsZCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5p
bnNlcnRDaGlsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWRM
aXN0LnByb3RvdHlwZS5yZW1vdmVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RGF0YUdyaWRMaXN0LnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJh
dG9yLmNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFH
cmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuZ2V0IHNpemVQZXJjZW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5w
cm90b3R5cGUuZ2V0IHNpemVEZWx0YVBlcmNlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdERhdGFHcmlkUmV0YWluZXJOb2RlLnByb3RvdHlwZS5fY2FsY3VsYXRlUmV0YWlu
ZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdl
dCBidXR0b25Ub29sdGlwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9m
aWxlVHlwZS5wcm90b3R5cGUuZ2V0IGJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5wcm90b3R5cGUuYnV0dG9uQ2xpY2tlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUucHJvdG90eXBlLmdldCB3
ZWxjb21lTWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmls
ZVR5cGUucHJvdG90eXBlLmNyZWF0ZVNpZGViYXJUcmVlRWxlbWVudEZvclByb2ZpbGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5jcmVh
dGVWaWV3KToKKyAgICAgICAgKCk6CisgICAgICAgICogc3JjL2pzL0luamVjdERpc3BhdGNoLmpz
OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckNvbnRyb2xsZXJEaXNwYXRjaGVyLmRpc3BhdGNo
KToKKyAgICAgICAgKEFwdUFnZW50RGlzcGF0Y2hlci5kaXNwYXRjaFRvQXB1KToKKyAgICAgICAg
KGRpc3BhdGNoKToKKyAgICAgICAgKGRldnRvb2xzKToKKyAgICAgICAgKiBzcmMvanMvSW5zcGVj
dG9yQ29udHJvbGxlckltcGwuanM6IEFkZGVkLgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9y
QmFja2VuZEltcGwpOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJv
dG90eXBlLnRvZ2dsZU5vZGVTZWFyY2gpOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFj
a2VuZEltcGwucHJvdG90eXBlLmRlYnVnZ2VyRW5hYmxlZCk6CisgICAgICAgIChkZXZ0b29scy5J
bnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAg
KGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5hZGRCcmVha3BvaW50KToK
KyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5yZW1vdmVC
cmVha3BvaW50KToKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3Rv
dHlwZS51cGRhdGVCcmVha3BvaW50KToKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsLnByb3RvdHlwZS5wYXVzZUluRGVidWdnZXIpOgorICAgICAgICAoZGV2dG9vbHMuSW5z
cGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnJlc3VtZURlYnVnZ2VyKToKKyAgICAgICAgKGRl
dnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zdGVwSW50b1N0YXRlbWVudElu
RGVidWdnZXIpOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90
eXBlLnN0ZXBPdXRPZkZ1bmN0aW9uSW5EZWJ1Z2dlcik6CisgICAgICAgIChkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyKToK
KyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5zZXRQYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJ
bXBsLnByb3RvdHlwZS5wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKToKKyAgICAgICAgKGRldnRvb2xz
Lkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZU9uRXhjZXB0aW9ucyk6CisgICAg
ICAgIChkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc2V0UGF1c2VPbkV4
Y2VwdGlvbnMpOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90
eXBlLnN0YXJ0UHJvZmlsaW5nKToKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJ
bXBsLnByb3RvdHlwZS5zdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKGRldnRvb2xzLkluc3BlY3Rv
ckJhY2tlbmRJbXBsLnByb3RvdHlwZS5nZXRQcm9maWxlSGVhZGVycyk6CisgICAgICAgIChkZXZ0
b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuYWRkRnVsbFByb2ZpbGUpOgorICAg
ICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLmdldFByb2ZpbGUp
OgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnRha2VI
ZWFwU25hcHNob3QpOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJv
dG90eXBlLmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxl
Z2F0ZV8pOgorICAgICAgICAoZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LmNhbGxJbnNwZWN0b3JDb250cm9sbGVyXyk6CisgICAgICAgICogc3JjL2pzL1Byb2ZpbGVyQWdl
bnQuanM6IEFkZGVkLgorICAgICAgICAoZGV2dG9vbHMuUHJvZmlsZXJBZ2VudCk6CisgICAgICAg
IChkZXZ0b29scy5Qcm9maWxlckFnZW50LnByb3RvdHlwZS5zZXR1cFByb2ZpbGVyUHJvY2Vzc29y
Q2FsbGJhY2tzKToKKyAgICAgICAgKGRldnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLmlu
aXRpYWxpemVQcm9maWxpbmcpOgorICAgICAgICAoZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90
b3R5cGUuc3RhcnRQcm9maWxpbmcpOgorICAgICAgICAoZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5w
cm90b3R5cGUuc3RvcFByb2ZpbGluZyk6CisgICAgICAgIChkZXZ0b29scy5Qcm9maWxlckFnZW50
LnByb3RvdHlwZS5kaWRHZXRBY3RpdmVQcm9maWxlck1vZHVsZXNfKToKKyAgICAgICAgKGRldnRv
b2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLmRpZEdldExvZ0xpbmVzXyk6CisgICAgICAgICog
c3JjL2pzL1Byb2ZpbGVyUHJvY2Vzc29yLmpzOiBBZGRlZC4KKyAgICAgICAgKGRldnRvb2xzLnBy
b2ZpbGVyLldlYktpdFZpZXdCdWlsZGVyKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLldl
YktpdFZpZXdCdWlsZGVyLnByb3RvdHlwZS5jcmVhdGVWaWV3Tm9kZSk6CisgICAgICAgIChkZXZ0
b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZSk6CisgICAgICAgIChzZXQgZ2V0IGRldnRvb2xz
LnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLnByb3RvdHlwZS5pbml0RnVuY0luZm9fKToKKyAgICAg
ICAgKGRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZSk6CisgICAgICAgIChkZXZ0b29scy5wcm9m
aWxlci5Kc1Byb2ZpbGUucHJvdG90eXBlLnNraXBUaGlzRnVuY3Rpb24pOgorICAgICAgICAoZGV2
dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlBy
b2Nlc3Nvci5wcm90b3R5cGUucHJpbnRFcnJvcik6CisgICAgICAgIChkZXZ0b29scy5wcm9maWxl
ci5Qcm9jZXNzb3IucHJvdG90eXBlLnNraXBEaXNwYXRjaCk6CisgICAgICAgIChkZXZ0b29scy5w
cm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnNldENhbGxiYWNrcyk6CisgICAgICAgIChkZXZ0
b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnNldE5ld1Byb2ZpbGVDYWxsYmFjayk6
CisgICAgICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NQ
cm9maWxlcl8uc3dpdGNoLmJyZWFrKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nl
c3Nvci5wcm90b3R5cGUucHJvY2Vzc1Byb2ZpbGVyXyk6CisgICAgICAgIChkZXZ0b29scy5wcm9m
aWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NDb2RlQ3JlYXRpb25fKToKKyAgICAgICAg
KGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0NvZGVNb3ZlXyk6
CisgICAgICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3ND
b2RlRGVsZXRlXyk6CisgICAgICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90
eXBlLnByb2Nlc3NGdW5jdGlvbkNyZWF0aW9uXyk6CisgICAgICAgIChkZXZ0b29scy5wcm9maWxl
ci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NGdW5jdGlvbk1vdmVfKToKKyAgICAgICAgKGRl
dnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0Z1bmN0aW9uRGVsZXRl
Xyk6CisgICAgICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nl
c3NUaWNrXyk6CisgICAgICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBl
LnByb2Nlc3NUaWNrVjJfKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5w
cm90b3R5cGUucHJvY2Vzc0hlYXBTYW1wbGVCZWdpbl8pOgorICAgICAgICAoZGV2dG9vbHMucHJv
ZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzSGVhcFNhbXBsZVN0YXRzXyk6CisgICAg
ICAgIChkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwU2Ft
cGxlSXRlbV8pOgorICAgICAgICAoZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlw
ZS5wcm9jZXNzSGVhcEpzQ29uc0l0ZW1fKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlBy
b2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBKc1JldEl0ZW1fLm1lcmdlUmV0YWluZXJzKToK
KyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hl
YXBKc1JldEl0ZW1fKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90
b3R5cGUucHJvY2Vzc0hlYXBTYW1wbGVFbmRfKToKKyAgICAgICAgKGRldnRvb2xzLnByb2ZpbGVy
LlByb2Nlc3Nvci5wcm90b3R5cGUuY3JlYXRlUHJvZmlsZUZvclZpZXcpOgorICAgICAgICAqIHNy
Yy9qcy9UZXN0cy5qczogQWRkZWQuCisgICAgICAgICguVGVzdFN1aXRlKToKKyAgICAgICAgKC5U
ZXN0U3VpdGUucHJvdG90eXBlLmZhaWwpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUu
YXNzZXJ0RXF1YWxzKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLmFzc2VydFRydWUp
OgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuYXNzZXJ0Q29udGFpbnMpOgorICAgICAg
ICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGFrZUNvbnRyb2wpOgorICAgICAgICAoLlRlc3RTdWl0
ZS5wcm90b3R5cGUucmVsZWFzZUNvbnRyb2wpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5
cGUucmVwb3J0T2tfKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnJlcG9ydEZhaWx1
cmVfKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnJ1blRlc3QpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUuc2hvd1BhbmVsKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJv
dG90eXBlLmFkZFNuaWZmZXIucmVjZWl2ZXIubWV0aG9kTmFtZSk6CisgICAgICAgICguVGVzdFN1
aXRlLnByb3RvdHlwZS5hZGRTbmlmZmVyKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBl
LnRlc3RIb3N0SXNQcmVzZW50KToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RF
bGVtZW50c1RyZWVSb290KToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RNYWlu
UmVzb3VyY2UpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFJlc291cmNlQ29u
dGVudExlbmd0aC50aGlzLmFkZFNuaWZmZXIuKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90
eXBlLnRlc3RSZXNvdXJjZUhlYWRlcnMpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUu
dGVzdENhY2hlZFJlc291cmNlTWltZVR5cGUudGhpcy5hZGRTbmlmZmVyLik6CisgICAgICAgICgu
VGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q2FjaGVkUmVzb3VyY2VNaW1lVHlwZSk6CisgICAgICAg
ICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0UHJvZmlsZXJUYWIpOgorICAgICAgICAoLlRlc3RT
dWl0ZS5wcm90b3R5cGUudGVzdFNjcmlwdHNUYWJJc1BvcHVsYXRlZE9uSW5zcGVjdGVkUGFnZVJl
ZnJlc2gud2FpdFVudGlsU2NyaXB0SXNQYXJzZWQpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90
b3R5cGUudGVzdFNjcmlwdHNUYWJJc1BvcHVsYXRlZE9uSW5zcGVjdGVkUGFnZVJlZnJlc2guY2hl
Y2tTY3JpcHRzUGFuZWwpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFNjcmlw
dHNUYWJJc1BvcHVsYXRlZE9uSW5zcGVjdGVkUGFnZVJlZnJlc2gpOgorICAgICAgICAoLlRlc3RT
dWl0ZS5wcm90b3R5cGUudGVzdE5vU2NyaXB0RHVwbGljYXRlc09uUGFuZWxTd2l0Y2guc3dpdGNo
VG9FbGVtZW50c1RhYik6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Tm9TY3Jp
cHREdXBsaWNhdGVzT25QYW5lbFN3aXRjaC5zd2l0Y2hUb1NjcmlwdHNUYWIpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdE5vU2NyaXB0RHVwbGljYXRlc09uUGFuZWxTd2l0Y2gu
Y2hlY2tTY3JpcHRzUGFuZWwpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdE5v
U2NyaXB0RHVwbGljYXRlc09uUGFuZWxTd2l0Y2guY2hlY2tOb0R1cGxpY2F0ZXMpOgorICAgICAg
ICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFBhdXNlT25FeGNlcHRpb24pOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFBhdXNlV2hlbkxvYWRpbmdEZXZUb29scyk6CisgICAg
ICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0UGF1c2VXaGVuU2NyaXB0SXNSdW5uaW5nLnRl
c3RTY3JpcHRQYXVzZUFmdGVyRGVsYXkpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUu
dGVzdFBhdXNlV2hlblNjcmlwdElzUnVubmluZy50ZXN0U2NyaXB0UGF1c2UpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFBhdXNlV2hlblNjcmlwdElzUnVubmluZyk6CisgICAg
ICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5vcHRpb25zVG9TdHJpbmdfKToKKyAgICAgICAgKC5U
ZXN0U3VpdGUucHJvdG90eXBlLmV2YWx1YXRlSW5Db25zb2xlXyk6CisgICAgICAgICguVGVzdFN1
aXRlLnByb3RvdHlwZS53YWl0Rm9yU2V0QnJlYWtwb2ludFJlc3BvbnNlXyk6CisgICAgICAgICgu
VGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXZhbE9uQ2FsbEZyYW1lLnNldEJyZWFrcG9pbnRDYWxs
YmFjayk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXZhbE9uQ2FsbEZyYW1l
LndhaXRGb3JCcmVha3BvaW50SGl0KToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RDb21wbGV0aW9uT25QYXVzZSk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0
Q29tcGxldGlvbk9uUGF1c2UudGVzdExvY2Fsc0NvbXBsZXRpb24pOgorICAgICAgICAoLlRlc3RT
dWl0ZS5wcm90b3R5cGUudGVzdENvbXBsZXRpb25PblBhdXNlLnRlc3RUaGlzQ29tcGxldGlvbik6
CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q29tcGxldGlvbk9uUGF1c2UudGVz
dEZpZWxkQ29tcGxldGlvbik6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q29t
cGxldGlvbk9uUGF1c2UuY2hlY2tDb21wbGV0aW9ucyk6CisgICAgICAgICguVGVzdFN1aXRlLnBy
b3RvdHlwZS50ZXN0QXV0b0NvbnRpbnVlT25TeW50YXhFcnJvci5jaGVja1NjcmlwdHNMaXN0KToK
KyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RBdXRvQ29udGludWVPblN5bnRheEVy
cm9yLndhaXRGb3JFeGNlcHRpb25FdmVudC50ZXN0KToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJv
dG90eXBlLnRlc3RBdXRvQ29udGludWVPblN5bnRheEVycm9yLndhaXRGb3JFeGNlcHRpb25FdmVu
dCk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5fY2hlY2tFeGVjdXRpb25MaW5lKToK
KyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9zY3JpcHRzQXJlUGFyc2VkKToKKyAgICAg
ICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl93YWl0Rm9yU2NyaXB0UGF1c2UpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrU291cmNlRnJhbWVXaGVuTG9hZGVkLmNoZWNrRXhl
Y0xpbmUpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrU291cmNlRnJhbWVX
aGVuTG9hZGVkKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9wZXJmb3JtU3RlcHMu
ZG9OZXh0QWN0aW9uKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9wZXJmb3JtU3Rl
cHMpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2V4ZWN1dGVDb2RlV2hlblNjcmlw
dHNBcmVQYXJzZWQuZXhlY3V0ZUZ1bmN0aW9uSW5JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKC5U
ZXN0U3VpdGUucHJvdG90eXBlLl93YWl0VW50aWxTY3JpcHRzQXJlUGFyc2VkLndhaXRGb3JBbGxT
Y3JpcHRzKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl93YWl0VW50aWxTY3JpcHRz
QXJlUGFyc2VkKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9leGVjdXRlRnVuY3Rp
b25Gb3JTdGVwVGVzdCk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0U3RlcE92
ZXIpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFN0ZXBPdXQpOgorICAgICAg
ICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFN0ZXBJbik6CisgICAgICAgICguVGVzdFN1aXRl
LnByb3RvdHlwZS5fZXZhbHVhdGVYcGF0aCk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlw
ZS5fZmluZE5vZGUpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2ZpbmRUZXh0KToK
KyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9ub2RlSXRlcmF0b3IpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrU2NvcGVTZWN0aW9uRGl2KToKKyAgICAgICAgKC5U
ZXN0U3VpdGUucHJvdG90eXBlLl9leHBhbmRTY29wZVNlY3Rpb25zLnVwZGF0ZUxpc3RlbmVyKToK
KyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLl9leHBhbmRTY29wZVNlY3Rpb25zKToKKyAg
ICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RFeHBhbmRTY29wZSk6CisgICAgICAgICgu
VGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0RXhwYW5kU2NvcGUuZXhhbWluZVNjb3Blcyk6CisgICAg
ICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5fZmluZENoaWxkUHJvcGVydHkpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5wcm90b3R5cGUuX2hvb2tHZXRQcm9wZXJ0aWVzQ2FsbGJhY2suYWNjZXNzb3Iu
Z2V0UHJvcGVydGllcyk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlwZS5faG9va0dldFBy
b3BlcnRpZXNDYWxsYmFjay50cnkpOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUuX2hv
b2tHZXRQcm9wZXJ0aWVzQ2FsbGJhY2spOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUu
dGVzdERlYnVnSW50cmluc2ljUHJvcGVydGllcy5leHBhbmRMb2NhbFNjb3BlKToKKyAgICAgICAg
KC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3REZWJ1Z0ludHJpbnNpY1Byb3BlcnRpZXMpOgorICAg
ICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUudGVzdERlYnVnSW50cmluc2ljUHJvcGVydGllcy5l
eHBhbmRBbmRDaGVja05leHRQcm9wZXJ0eSk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlw
ZS50ZXN0RGVidWdJbnRyaW5zaWNQcm9wZXJ0aWVzLmNoZWNrUHJvcGVydHkpOgorICAgICAgICAo
LlRlc3RTdWl0ZS5jcmVhdGVLZXlFdmVudCk6CisgICAgICAgICguVGVzdFN1aXRlLnByb3RvdHlw
ZS50ZXN0Q29uc29sZUxvZy5hc3NlcnROZXh0KToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90
eXBlLnRlc3RDb25zb2xlTG9nKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RF
dmFsR2xvYmFsLmluaXRFdmFsKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RF
dmFsR2xvYmFsKToKKyAgICAgICAgKC5UZXN0U3VpdGUucHJvdG90eXBlLnRlc3RTaG93U3RvcmFn
ZVBhbmVsLnRoaXMuYWRkU25pZmZlci4pOgorICAgICAgICAoLlRlc3RTdWl0ZS5wcm90b3R5cGUu
dGVzdFNob3dTdG9yYWdlUGFuZWwudGhpcy5hZGRTbmlmZmVyKToKKyAgICAgICAgKC51aVRlc3Rz
LnJ1bkFsbFRlc3RzKToKKyAgICAgICAgKC51aVRlc3RzLnJ1blRlc3QpOgorCiAyMDEwLTAyLTA5
ICBBdmkgRHJpc3NtYW4gIDxhdmlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNmNGRjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKQEAgLTAsMCArMSw1MiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyMgbWV0OgorIworIyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisj
CisKK3sKKyAgICAndmFyaWFibGVzJzogeworICAgICAgICAjIExpc3Qgb2YgRGV2VG9vbHMgc291
cmNlIGZpbGVzLCBvcmRlcmVkIGJ5IGRlcGVuZGVuY2llcy4gSXQgaXMgdXNlZCBib3RoCisgICAg
ICAgICMgZm9yIGNvcHlpbmcgdGhlbSB0byByZXNvdXJjZSBkaXIsIGFuZCBmb3IgZ2VuZXJhdGlu
ZyAnZGV2dG9vbHMuaHRtbCcgZmlsZS4KKyAgICAgICAgJ2RldnRvb2xzX2pzX2ZpbGVzJzogWwor
ICAgICAgICAgICAgJ3NyYy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcycsCisgICAgICAg
ICAgICAnc3JjL2pzL0RlYnVnZ2VyQWdlbnQuanMnLAorICAgICAgICAgICAgJ3NyYy9qcy9Qcm9m
aWxlckFnZW50LmpzJywKKyAgICAgICAgICAgICdzcmMvanMvUHJvZmlsZXJQcm9jZXNzb3IuanMn
LAorICAgICAgICAgICAgJ3NyYy9qcy9IZWFwUHJvZmlsZXJQYW5lbC5qcycsCisgICAgICAgICAg
ICAnc3JjL2pzL0RldlRvb2xzLmpzJywKKyAgICAgICAgICAgICdzcmMvanMvRGV2VG9vbHNIb3N0
U3R1Yi5qcycsCisgICAgICAgICAgICAnc3JjL2pzL1Rlc3RzLmpzJywKKyAgICAgICAgXSwKKyAg
ICB9LAorfQorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgdGFiLXdpZHRoOjIKKyMgaW5kZW50LXRh
YnMtbW9kZTpuaWwKKyMgRW5kOgorIyB2aW06IHNldCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0
d2lkdGg9MjoKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJBZ2Vu
dC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGVidWdnZXJBZ2VudC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWExZDQwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9qcy9EZWJ1Z2dlckFnZW50LmpzCkBAIC0wLDAgKzEsMTUyNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8q
KgorICogQGZpbGVvdmVydmlldyBQcm92aWRlcyBjb21tdW5pY2F0aW9uIGludGVyZmFjZSB0byBy
ZW1vdGUgdjggZGVidWdnZXIuIFNlZQorICogcHJvdG9jb2wgZGVjcmlwdGlvbiBhdCBodHRwOi8v
Y29kZS5nb29nbGUuY29tL3Avdjgvd2lraS9EZWJ1Z2dlclByb3RvY29sCisgKi8KKworLyoqCisg
KiBAY29uc3RydWN0b3IKKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudCA9IGZ1bmN0aW9uKCkK
K3sKKyAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LmRlYnVnZ2VyT3V0cHV0ID0gdGhpcy5oYW5kbGVE
ZWJ1Z2dlck91dHB1dF8uYmluZCh0aGlzKTsKKyAgICBSZW1vdGVEZWJ1Z2dlckFnZW50LnNldENv
bnRleHRJZCA9IHRoaXMuc2V0Q29udGV4dElkXy5iaW5kKHRoaXMpOworCisgICAgLyoqCisgICAg
ICogSWQgb2YgdGhlIGluc3BlY3RlZCBwYWdlIGdsb2JhbCBjb250ZXh0LiBJdCBpcyB1c2VkIGZv
ciBmaWx0ZXJpbmcgc2NyaXB0cy4KKyAgICAgKiBAdHlwZSB7bnVtYmVyfQorICAgICAqLworICAg
IHRoaXMuY29udGV4dElkXyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBNYXBwaW5nIGZyb20g
c2NyaXB0IGlkIHRvIHNjcmlwdCBpbmZvLgorICAgICAqIEB0eXBlIHtPYmplY3R9CisgICAgICov
CisgICAgdGhpcy5wYXJzZWRTY3JpcHRzXyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBNYXBw
aW5nIGZyb20gdGhlIHJlcXVlc3QgaWQgdG8gdGhlIGRldnRvb2xzLkJyZWFrcG9pbnRJbmZvIGZv
ciB0aGUKKyAgICAgKiBicmVha3BvaW50cyB3aG9zZSB2OCBpZHMgYXJlIG5vdCBzZXQgeWV0LiBU
aGVzZSBicmVha3BvaW50cyBhcmUgd2FpdGluZyBmb3IKKyAgICAgKiAic2V0YnJlYWtwb2ludCIg
cmVzcG9uc2VzIHRvIGxlYXJuIHRoZWlyIGlkcyBpbiB0aGUgdjggZGVidWdnZXIuCisgICAgICog
QHNlZSAjaGFuZGxlU2V0QnJlYWtwb2ludFJlc3BvbnNlXworICAgICAqIEB0eXBlIHtPYmplY3R9
CisgICAgICovCisgICAgdGhpcy5yZXF1ZXN0TnVtYmVyVG9CcmVha3BvaW50SW5mb18gPSBudWxs
OworCisgICAgLyoqCisgICAgICogSW5mb3JtYXRpb24gb24gY3VycmVudCBzdGFjayBmcmFtZXMu
CisgICAgICogQHR5cGUge0FycmF5LjxkZXZ0b29scy5DYWxsRnJhbWU+fQorICAgICAqLworICAg
IHRoaXMuY2FsbEZyYW1lc18gPSBbXTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdG8gc3Rv
cCBpbiB0aGUgZGVidWdnZXIgb24gdGhlIGV4Y2VwdGlvbnMuCisgICAgICogQHR5cGUge2Jvb2xl
YW59CisgICAgICovCisgICAgdGhpcy5wYXVzZU9uRXhjZXB0aW9uc18gPSBmYWxzZTsKKworICAg
IC8qKgorICAgICAqIE1hcHBpbmc6IHJlcXVlc3Qgc2VxdWVuY2UgbnVtYmVyLT5jYWxsYmFjay4K
KyAgICAgKiBAdHlwZSB7T2JqZWN0fQorICAgICAqLworICAgIHRoaXMucmVxdWVzdFNlcVRvQ2Fs
bGJhY2tfID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIHNjcmlwdHMgcGFu
ZWwgaGFzIGJlZW4gc2hvd24gYW5kIGluaXRpYWxpbHplZC4KKyAgICAgKiBAdHlwZSB7Ym9vbGVh
bn0KKyAgICAgKi8KKyAgICB0aGlzLnNjcmlwdHNQYW5lbEluaXRpYWxpemVkXyA9IGZhbHNlOwor
CisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUgc2NyaXB0cyBsaXN0IHNob3VsZCBiZSByZXF1
ZXN0ZWQgbmV4dCB0aW1lIHdoZW4gY29udGV4dCBpZCBpcworICAgICAqIHNldC4KKyAgICAgKiBA
dHlwZSB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICB0aGlzLnJlcXVlc3RTY3JpcHRzV2hlbkNvbnRl
eHRJZFNldF8gPSBmYWxzZTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIGFnZW50IGlz
IHdhaXRpbmcgZm9yIGluaXRpYWwgc2NyaXB0cyByZXNwb25zZS4KKyAgICAgKiBAdHlwZSB7Ym9v
bGVhbn0KKyAgICAgKi8KKyAgICB0aGlzLndhaXRpbmdGb3JJbml0aWFsU2NyaXB0c1Jlc3BvbnNl
XyA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogSWYgYmFja3RyYWNlIHJlc3BvbnNlIGlzIHJl
Y2VpdmVkIHdoZW4gaW5pdGlhbCBzY3JpcHRzIHJlc3BvbnNlCisgICAgICogaXMgbm90IHlldCBw
cm9jZXNzZWQgdGhlIGJhY2t0cmFjZSBoYW5kbGluZyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbAor
ICAgICAqIGFmdGVyIHRoZSBzY3JpcHRzIHJlc3BvbnNlIHByb2Nlc3NpbmcuIFRoZSBoYW5kbGVy
IGJvdW5kIHRvIGl0cyBhcmd1bWVudHMKKyAgICAgKiBhbmQgdGhpcyBhZ2VudCB3aWxsIGJlIHN0
b3JlZCBpbiB0aGlzIGZpZWxkIHRoZW4uCisgICAgICogQHR5cGUgez9mdW5jdGlvbigpfQorICAg
ICAqLworICAgIHRoaXMucGVuZGluZ0JhY2t0cmFjZVJlc3BvbnNlSGFuZGxlcl8gPSBudWxsOwor
CisgICAgLyoqCisgICAgICogQ29udGFpbmVyIG9mIGFsbCBicmVha3BvaW50cyBzZXQgdXNpbmcg
cmVzb3VyY2UgVVJMLiBUaGVzZSBicmVha3BvaW50cworICAgICAqIHN1cnZpdmUgcGFnZSByZWxv
YWQuIEJyZWFrcG9pbnRzIHNldCBieSBzY3JpcHQgaWQoZm9yIHNjcmlwdHMgdGhhdCBkb24ndAor
ICAgICAqIGhhdmUgVVJMcykgYXJlIHN0b3JlZCBpbiBTY3JpcHRJbmZvIG9iamVjdHMuCisgICAg
ICogQHR5cGUge09iamVjdH0KKyAgICAgKi8KKyAgICB0aGlzLnVybFRvQnJlYWtwb2ludHNfID0g
e307CisKKworICAgIC8qKgorICAgICAqIEV4Y2VwdGlvbiBtZXNzYWdlIHRoYXQgaXMgc2hvd24g
dG8gdXNlciB3aGlsZSBvbiBleGNlcHRpb24gYnJlYWsuCisgICAgICogQHR5cGUge1dlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZX0KKyAgICAgKi8KKyAgICB0aGlzLmN1cnJlbnRFeGNlcHRpb25N
ZXNzYWdlXyA9IG51bGw7Cit9OworCisKKy8qKgorICogQSBjb3B5IG9mIHRoZSBzY29wZSB0eXBl
cyBmcm9tIHY4L3NyYy9taXJyb3ItZGVsYXkuanMKKyAqIEBlbnVtIHtudW1iZXJ9CisgKi8KK2Rl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQuU2NvcGVUeXBlID0geworICAgIEdsb2JhbDogMCwKKyAgICBM
b2NhbDogMSwKKyAgICBXaXRoOiAyLAorICAgIENsb3N1cmU6IDMsCisgICAgQ2F0Y2g6IDQKK307
CisKKworLyoqCisgKiBSZXNldHMgZGVidWdnZXIgYWdlbnQgdG8gaXRzIGluaXRpYWwgc3RhdGUu
CisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24o
KQoreworICAgIHRoaXMuY29udGV4dElkXyA9IG51bGw7CisgICAgLy8gTm8gbmVlZCB0byByZXF1
ZXN0IHNjcmlwdHMgc2luY2UgdGhleSBhbGwgd2lsbCBiZSBwdXNoZWQgaW4gQWZ0ZXJDb21waWxl
CisgICAgLy8gZXZlbnRzLgorICAgIHRoaXMucmVxdWVzdFNjcmlwdHNXaGVuQ29udGV4dElkU2V0
XyA9IGZhbHNlOworICAgIHRoaXMud2FpdGluZ0ZvckluaXRpYWxTY3JpcHRzUmVzcG9uc2VfID0g
ZmFsc2U7CisKKyAgICB0aGlzLnBhcnNlZFNjcmlwdHNfID0ge307CisgICAgdGhpcy5yZXF1ZXN0
TnVtYmVyVG9CcmVha3BvaW50SW5mb18gPSB7fTsKKyAgICB0aGlzLmNhbGxGcmFtZXNfID0gW107
CisgICAgdGhpcy5yZXF1ZXN0U2VxVG9DYWxsYmFja18gPSB7fTsKK307CisKKworLyoqCisgKiBJ
bml0aWFsaXplcyBzY3JpcHRzIFVJLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZXZlcnkgdGltZSBT
Y3JpcHRzIHBhbmVsCisgKiBpcyBzaG93bi4gSXQgd2lsbCBzZW5kIHJlcXVlc3QgZm9yIGNvbnRl
eHQgaWQgaWYgaXQncyBub3Qgc2V0IHlldC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5w
cm90b3R5cGUuaW5pdFVJID0gZnVuY3Rpb24oKQoreworICAgIC8vIEluaXRpYWxpemUgc2NyaXB0
cyBjYWNoZSB3aGVuIFNjcmlwdHMgcGFuZWwgaXMgc2hvd24gZmlyc3QgdGltZS4KKyAgICBpZiAo
dGhpcy5zY3JpcHRzUGFuZWxJbml0aWFsaXplZF8pCisgICAgICAgIHJldHVybjsKKyAgICB0aGlz
LnNjcmlwdHNQYW5lbEluaXRpYWxpemVkXyA9IHRydWU7CisgICAgaWYgKHRoaXMuY29udGV4dElk
XykgeworICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgY29udGV4dCBpZC4gVGhpcyBtZWFucyB0
aGF0IHdlIGFyZSBoZXJlIGZyb20gdGhlCisgICAgICAgIC8vIHZlcnkgYmVnaW5uaW5nIG9mIHRo
ZSBwYWdlIGxvYWQgY3ljbGUgYW5kIGhlbmNlIHdpbGwgZ2V0IGFsbCBzY3JpcHRzCisgICAgICAg
IC8vIHZpYSBhZnRlci1jb21waWxlIGV2ZW50cy4gTm8gbmVlZCB0byByZXF1ZXN0IHNjcmlwdHMg
Zm9yIHRoaXMgc2Vzc2lvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGEg
bnVtYmVyIG9mIHNjcmlwdHMgZnJvbSBhZnRlci1jb21waWxlIGV2ZW50cyB0aGF0IGFyZQorICAg
ICAgICAvLyBwZW5kaW5nIGFkZGl0aW9uIGludG8gdGhlIFVJLgorICAgICAgICBmb3IgKHZhciBz
Y3JpcHRJZCBpbiB0aGlzLnBhcnNlZFNjcmlwdHNfKSB7CisgICAgICAgICAgdmFyIHNjcmlwdCA9
IHRoaXMucGFyc2VkU2NyaXB0c19bc2NyaXB0SWRdOworICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YXJzZWRTY3JpcHRTb3VyY2Uoc2NyaXB0SWQsIHNjcmlwdC5nZXRVcmwoKSwgdW5kZWZpbmVkIC8q
IHNjcmlwdCBzb3VyY2UgKi8sIHNjcmlwdC5nZXRMaW5lT2Zmc2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy53YWl0aW5nRm9ySW5pdGlhbFNjcmlwdHNS
ZXNwb25zZV8gPSB0cnVlOworICAgIC8vIFNjcmlwdCBsaXN0IHNob3VsZCBiZSByZXF1ZXN0ZWQg
b25seSB3aGVuIGN1cnJlbnQgY29udGV4dCBpZCBpcyBrbm93bi4KKyAgICBSZW1vdGVEZWJ1Z2dl
ckFnZW50LmdldENvbnRleHRJZCgpOworICAgIHRoaXMucmVxdWVzdFNjcmlwdHNXaGVuQ29udGV4
dElkU2V0XyA9IHRydWU7Cit9OworCisKKy8qKgorICogQXN5bmNocm9ub3VzbHkgcmVxdWVzdHMg
dGhlIGRlYnVnZ2VyIGZvciB0aGUgc2NyaXB0IHNvdXJjZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBz
Y3JpcHRJZCBJZCBvZiB0aGUgc2NyaXB0IHdob3NlIHNvdXJjZSBzaG91bGQgYmUgcmVzb2x2ZWQu
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKHNvdXJjZTo/c3RyaW5nKTp2b2lkfSBjYWxsYmFjayBGdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkCisgKiAgICAgd2hlbiB0aGUgc291cmNlIHJlc29sdXRp
b24gaXMgY29tcGxldGVkLiAic291cmNlIiBwYXJhbWV0ZXIgd2lsbCBiZSBudWxsCisgKiAgICAg
aWYgdGhlIHJlc29sdXRpb24gZmFpbHMuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJv
dG90eXBlLnJlc29sdmVTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzY3JpcHRJZCwgY2FsbGJhY2sp
Cit7CisgICAgdmFyIHNjcmlwdCA9IHRoaXMucGFyc2VkU2NyaXB0c19bc2NyaXB0SWRdOworICAg
IGlmICghc2NyaXB0IHx8IHNjcmlwdC5pc1VucmVzb2x2ZWQoKSkgeworICAgICAgICBjYWxsYmFj
ayhudWxsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBjbWQgPSBuZXcgZGV2
dG9vbHMuRGVidWdDb21tYW5kKCJzY3JpcHRzIiwgeworICAgICAgICAiaWRzIjogW3NjcmlwdElk
XSwKKyAgICAgICAgImluY2x1ZGVTb3VyY2UiOiB0cnVlCisgICAgfSk7CisgICAgZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKKyAgICAvLyBGb3JjZSB2OCBleGVjdXRp
b24gc28gdGhhdCBpdCBnZXRzIHRvIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3RlZCBjb21tYW5kLgor
ICAgIFJlbW90ZVRvb2xzQWdlbnQuZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KCk7CisKKyAgICB0aGlz
LnJlcXVlc3RTZXFUb0NhbGxiYWNrX1tjbWQuZ2V0U2VxdWVuY2VOdW1iZXIoKV0gPSBmdW5jdGlv
bihtc2cpIHsKKyAgICAgICAgaWYgKG1zZy5pc1N1Y2Nlc3MoKSkgeworICAgICAgICAgICAgdmFy
IHNjcmlwdEpzb24gPSBtc2cuZ2V0Qm9keSgpWzBdOworICAgICAgICAgICAgaWYgKHNjcmlwdEpz
b24pCisgICAgICAgICAgICAgICAgY2FsbGJhY2soc2NyaXB0SnNvbi5zb3VyY2UpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOworICAgIH07Cit9OworCisKKy8qKgorICog
VGVsbHMgdGhlIHY4IGRlYnVnZ2VyIHRvIHN0b3Agb24gYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAq
LworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucGF1c2VFeGVjdXRpb24gPSBmdW5j
dGlvbigpCit7CisgICAgUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IuRGVidWdnZXJQYXVz
ZVNjcmlwdCgpOworfTsKKworCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VJZCBJZCBv
ZiB0aGUgc2NyaXB0IGZvdCB0aGUgYnJlYWtwb2ludC4KKyAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
IE51bWJlciBvZiB0aGUgbGluZSBmb3IgdGhlIGJyZWFrcG9pbnQuCisgKiBAcGFyYW0gez9zdHJp
bmd9IGNvbmRpdGlvbiBUaGUgYnJlYWtwb2ludCBjb25kaXRpb24uCisgKi8KK2RldnRvb2xzLkRl
YnVnZ2VyQWdlbnQucHJvdG90eXBlLmFkZEJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJZCwg
bGluZSwgY29uZGl0aW9uKQoreworICAgIHZhciBzY3JpcHQgPSB0aGlzLnBhcnNlZFNjcmlwdHNf
W3NvdXJjZUlkXTsKKyAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGlu
ZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQud2Via2l0VG9WOExpbmVOdW1iZXJfKGxpbmUpOwor
CisgICAgdmFyIGNvbW1hbmRBcmd1bWVudHM7CisgICAgaWYgKHNjcmlwdC5nZXRVcmwoKSkgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnVybFRvQnJlYWtwb2ludHNfW3NjcmlwdC5n
ZXRVcmwoKV07CisgICAgICAgIGlmIChicmVha3BvaW50cyAmJiBicmVha3BvaW50c1tsaW5lXSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFicmVha3BvaW50cykgeworICAgICAg
ICAgICAgYnJlYWtwb2ludHMgPSB7fTsKKyAgICAgICAgICAgIHRoaXMudXJsVG9CcmVha3BvaW50
c19bc2NyaXB0LmdldFVybCgpXSA9IGJyZWFrcG9pbnRzOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnRJbmZvID0gbmV3IGRldnRvb2xzLkJyZWFrcG9pbnRJbmZvKGxpbmUpOwor
ICAgICAgICBicmVha3BvaW50c1tsaW5lXSA9IGJyZWFrcG9pbnRJbmZvOworCisgICAgICAgIGNv
bW1hbmRBcmd1bWVudHMgPSB7CisgICAgICAgICAgICAiZ3JvdXBJZCI6IHRoaXMuY29udGV4dElk
XywKKyAgICAgICAgICAgICJ0eXBlIjogInNjcmlwdCIsCisgICAgICAgICAgICAidGFyZ2V0Ijog
c2NyaXB0LmdldFVybCgpLAorICAgICAgICAgICAgImxpbmUiOiBsaW5lLAorICAgICAgICAgICAg
ImNvbmRpdGlvbiI6IGNvbmRpdGlvbgorICAgICAgICB9OworICAgIH0gZWxzZSB7CisgICAgICAg
IHZhciBicmVha3BvaW50SW5mbyA9IHNjcmlwdC5nZXRCcmVha3BvaW50SW5mbyhsaW5lKTsKKyAg
ICAgICAgaWYgKGJyZWFrcG9pbnRJbmZvKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGJyZWFrcG9pbnRJbmZvID0gbmV3IGRldnRvb2xzLkJyZWFrcG9pbnRJbmZvKGxpbmUpOworICAg
ICAgICBzY3JpcHQuYWRkQnJlYWtwb2ludEluZm8oYnJlYWtwb2ludEluZm8pOworCisgICAgICAg
IGNvbW1hbmRBcmd1bWVudHMgPSB7CisgICAgICAgICAgICAiZ3JvdXBJZCI6IHRoaXMuY29udGV4
dElkXywKKyAgICAgICAgICAgICJ0eXBlIjogInNjcmlwdElkIiwKKyAgICAgICAgICAgICJ0YXJn
ZXQiOiBzb3VyY2VJZCwKKyAgICAgICAgICAgICJsaW5lIjogbGluZSwKKyAgICAgICAgICAgICJj
b25kaXRpb24iOiBjb25kaXRpb24KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICB2YXIgY21kID0g
bmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgic2V0YnJlYWtwb2ludCIsIGNvbW1hbmRBcmd1bWVu
dHMpOworCisgICAgdGhpcy5yZXF1ZXN0TnVtYmVyVG9CcmVha3BvaW50SW5mb19bY21kLmdldFNl
cXVlbmNlTnVtYmVyKCldID0gYnJlYWtwb2ludEluZm87CisKKyAgICBkZXZ0b29scy5EZWJ1Z2dl
ckFnZW50LnNlbmRDb21tYW5kXyhjbWQpOworICAgIC8vIEZvcmNlIHY4IGV4ZWN1dGlvbiBzbyB0
aGF0IGl0IGdldHMgdG8gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdGVkIGNvbW1hbmQuCisgICAgLy8g
SXQgaXMgbmVjZXNzYXJ5IGZvciBiZWluZyBhYmxlIHRvIGNoYW5nZSBhIGJyZWFrcG9pbnQganVz
dCBhZnRlciBpdAorICAgIC8vIGhhcyBiZWVuIGNyZWF0ZWQgKHNpbmNlIHdlIG5lZWQgYW4gZXhp
c3RpbmcgYnJlYWtwb2ludCBpZCBmb3IgdGhhdCkuCisgICAgUmVtb3RlVG9vbHNBZ2VudC5leGVj
dXRlVm9pZEphdmFTY3JpcHQoKTsKK307CisKKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0gc291
cmNlSWQgSWQgb2YgdGhlIHNjcmlwdCBmb3IgdGhlIGJyZWFrcG9pbnQuCisgKiBAcGFyYW0ge251
bWJlcn0gbGluZSBOdW1iZXIgb2YgdGhlIGxpbmUgZm9yIHRoZSBicmVha3BvaW50LgorICovCitk
ZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZW1vdmVCcmVha3BvaW50ID0gZnVuY3Rp
b24oc291cmNlSWQsIGxpbmUpCit7CisgICAgdmFyIHNjcmlwdCA9IHRoaXMucGFyc2VkU2NyaXB0
c19bc291cmNlSWRdOworICAgIGlmICghc2NyaXB0KQorICAgICAgICByZXR1cm47CisKKyAgICBs
aW5lID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC53ZWJraXRUb1Y4TGluZU51bWJlcl8obGluZSk7
CisKKyAgICB2YXIgYnJlYWtwb2ludEluZm87CisgICAgaWYgKHNjcmlwdC5nZXRVcmwoKSkgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLnVybFRvQnJlYWtwb2ludHNfW3NjcmlwdC5n
ZXRVcmwoKV07CisgICAgICAgIGJyZWFrcG9pbnRJbmZvID0gYnJlYWtwb2ludHNbbGluZV07Cisg
ICAgICAgIGRlbGV0ZSBicmVha3BvaW50c1tsaW5lXTsKKyAgICB9IGVsc2UgeworICAgICAgICBi
cmVha3BvaW50SW5mbyA9IHNjcmlwdC5nZXRCcmVha3BvaW50SW5mbyhsaW5lKTsKKyAgICAgICAg
aWYgKGJyZWFrcG9pbnRJbmZvKQorICAgICAgICAgICAgc2NyaXB0LnJlbW92ZUJyZWFrcG9pbnRJ
bmZvKGJyZWFrcG9pbnRJbmZvKTsKKyAgICB9CisKKyAgICBpZiAoIWJyZWFrcG9pbnRJbmZvKQor
ICAgICAgICByZXR1cm47CisKKyAgICBicmVha3BvaW50SW5mby5tYXJrQXNSZW1vdmVkKCk7CisK
KyAgICB2YXIgaWQgPSBicmVha3BvaW50SW5mby5nZXRWOElkKCk7CisKKyAgICAvLyBJZiB3ZSBk
b24ndCBrbm93IGlkIG9mIHRoaXMgYnJlYWtwb2ludCBpbiB0aGUgdjggZGVidWdnZXIgd2UgY2Fu
bm90IHNlbmQKKyAgICAvLyAiY2xlYXJicmVha3BvaW50IiByZXF1ZXN0LiBJbiB0aGF0IGNhc2Ug
aXQgd2lsbCBiZSByZW1vdmVkIGluCisgICAgLy8gInNldGJyZWFrcG9pbnQiIHJlc3BvbnNlIGhh
bmRsZXIgd2hlbiB3ZSBsZWFybiB0aGUgaWQuCisgICAgaWYgKGlkICE9PSAtMSkgeworICAgICAg
ICB0aGlzLnJlcXVlc3RDbGVhckJyZWFrcG9pbnRfKGlkKTsKKyAgICB9Cit9OworCisKKy8qKgor
ICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZUlkIElkIG9mIHRoZSBzY3JpcHQgZm9yIHRoZSBicmVh
a3BvaW50LgorICogQHBhcmFtIHtudW1iZXJ9IGxpbmUgTnVtYmVyIG9mIHRoZSBsaW5lIGZvciB0
aGUgYnJlYWtwb2ludC4KKyAqIEBwYXJhbSB7P3N0cmluZ30gY29uZGl0aW9uIE5ldyBicmVha3Bv
aW50IGNvbmRpdGlvbi4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUudXBk
YXRlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlkLCBsaW5lLCBjb25kaXRpb24pCit7Cisg
ICAgdmFyIHNjcmlwdCA9IHRoaXMucGFyc2VkU2NyaXB0c19bc291cmNlSWRdOworICAgIGlmICgh
c2NyaXB0KQorICAgICAgICByZXR1cm47CisKKyAgICBsaW5lID0gZGV2dG9vbHMuRGVidWdnZXJB
Z2VudC53ZWJraXRUb1Y4TGluZU51bWJlcl8obGluZSk7CisKKyAgICB2YXIgYnJlYWtwb2ludElu
Zm87CisgICAgaWYgKHNjcmlwdC5nZXRVcmwoKSkgeworICAgICAgICB2YXIgYnJlYWtwb2ludHMg
PSB0aGlzLnVybFRvQnJlYWtwb2ludHNfW3NjcmlwdC5nZXRVcmwoKV07CisgICAgICAgIGJyZWFr
cG9pbnRJbmZvID0gYnJlYWtwb2ludHNbbGluZV07CisgICAgfSBlbHNlCisgICAgICAgIGJyZWFr
cG9pbnRJbmZvID0gc2NyaXB0LmdldEJyZWFrcG9pbnRJbmZvKGxpbmUpOworCisgICAgdmFyIGlk
ID0gYnJlYWtwb2ludEluZm8uZ2V0VjhJZCgpOworCisgICAgLy8gSWYgd2UgZG9uJ3Qga25vdyBp
ZCBvZiB0aGlzIGJyZWFrcG9pbnQgaW4gdGhlIHY4IGRlYnVnZ2VyIHdlIGNhbm5vdCBzZW5kCisg
ICAgLy8gdGhlICJjaGFuZ2VicmVha3BvaW50IiByZXF1ZXN0LgorICAgIGlmIChpZCAhPT0gLTEp
IHsKKyAgICAgICAgLy8gVE9ETyhhcGF2bG92KTogbWFrZSB1c2Ugb2YgdGhlIHJlYWwgdmFsdWVz
IGZvciAiZW5hYmxlZCIgYW5kCisgICAgICAgIC8vICJpZ25vcmVDb3VudCIgd2hlbiBhcHByb3By
aWF0ZS4KKyAgICAgICAgdGhpcy5yZXF1ZXN0Q2hhbmdlQnJlYWtwb2ludF8oaWQsIHRydWUsIGNv
bmRpdGlvbiwgbnVsbCk7CisgICAgfQorfTsKKworCisvKioKKyAqIFRlbGxzIHRoZSB2OCBkZWJ1
Z2dlciB0byBzdGVwIGludG8gdGhlIG5leHQgc3RhdGVtZW50LgorICovCitkZXZ0b29scy5EZWJ1
Z2dlckFnZW50LnByb3RvdHlwZS5zdGVwSW50b1N0YXRlbWVudCA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB0aGlzLnN0ZXBDb21tYW5kXygiaW4iKTsKK307CisKKworLyoqCisgKiBUZWxscyB0aGUgdjgg
ZGVidWdnZXIgdG8gc3RlcCBvdXQgb2YgY3VycmVudCBmdW5jdGlvbi4KKyAqLworZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5wcm90b3R5cGUuc3RlcE91dE9mRnVuY3Rpb24gPSBmdW5jdGlvbigpCit7
CisgICAgdGhpcy5zdGVwQ29tbWFuZF8oIm91dCIpOworfTsKKworCisvKioKKyAqIFRlbGxzIHRo
ZSB2OCBkZWJ1Z2dlciB0byBzdGVwIG92ZXIgdGhlIG5leHQgc3RhdGVtZW50LgorICovCitkZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5zdGVwT3ZlclN0YXRlbWVudCA9IGZ1bmN0aW9u
KCkKK3sKKyAgICB0aGlzLnN0ZXBDb21tYW5kXygibmV4dCIpOworfTsKKworCisvKioKKyAqIFRl
bGxzIHRoZSB2OCBkZWJ1Z2dlciB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgaXQgaGFzIGJl
ZW4gc3RvcHBlZCBvbiBhCisgKiBicmVha3BvaW50IG9yIGFuIGV4Y2VwdGlvbi4KKyAqLworZGV2
dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVzdW1lRXhlY3V0aW9uID0gZnVuY3Rpb24o
KQoreworICAgIHRoaXMuY2xlYXJFeGNlcHRpb25NZXNzYWdlXygpOworICAgIHZhciBjbWQgPSBu
ZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJjb250aW51ZSIpOworICAgIGRldnRvb2xzLkRlYnVn
Z2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7Cit9OworCisKKy8qKgorICogQ3JlYXRlcyBleGNl
cHRpb24gbWVzc2FnZSBhbmQgc2NoZWR1bGVzIGl0IGZvciBhZGRpdGlvbiB0byB0aGUgcmVzb3Vy
Y2UgdXBvbgorICogYmFja3RyYWNlIGF2YWlsYWJpbGl0eS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB1
cmwgUmVzb3VyY2UgdXJsLgorICogQHBhcmFtIHtudW1iZXJ9IGxpbmUgUmVzb3VyY2UgbGluZSBu
dW1iZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBFeGNlcHRpb24gdGV4dC4KKyAqLwor
ZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuY3JlYXRlRXhjZXB0aW9uTWVzc2FnZV8g
PSBmdW5jdGlvbih1cmwsIGxpbmUsIG1lc3NhZ2UpCit7CisgICAgdGhpcy5jdXJyZW50RXhjZXB0
aW9uTWVzc2FnZV8gPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKAorICAgICAgICBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywKKyAgICAgICAgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciwKKyAgICAgICAgbGluZSwK
KyAgICAgICAgdXJsLAorICAgICAgICAwIC8qIGdyb3VwIGxldmVsICovLAorICAgICAgICAxIC8q
IHJlcGVhdCBjb3VudCAqLywKKyAgICAgICAgIltFeGNlcHRpb25dICIgKyBtZXNzYWdlKTsKK307
CisKKworLyoqCisgKiBTaG93cyBwZW5kaW5nIGV4Y2VwdGlvbiBtZXNzYWdlIHRoYXQgaXMgY3Jl
YXRlZCB3aXRoIGNyZWF0ZUV4Y2VwdGlvbk1lc3NhZ2VfCisgKiBlYXJsaWVyLgorICovCitkZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5zaG93UGVuZGluZ0V4Y2VwdGlvbk1lc3NhZ2Vf
ID0gZnVuY3Rpb24oKQoreworICAgIGlmICghdGhpcy5jdXJyZW50RXhjZXB0aW9uTWVzc2FnZV8p
CisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbXNnID0gdGhpcy5jdXJyZW50RXhjZXB0aW9uTWVz
c2FnZV87CisgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW21z
Zy51cmxdOworICAgIGlmIChyZXNvdXJjZSkgeworICAgICAgICBtc2cucmVzb3VyY2UgPSByZXNv
dXJjZTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuYWRkTWVzc2FnZVRv
UmVzb3VyY2UocmVzb3VyY2UsIG1zZyk7CisgICAgfSBlbHNlCisgICAgICAgIHRoaXMuY3VycmVu
dEV4Y2VwdGlvbk1lc3NhZ2VfID0gbnVsbDsKK307CisKKworLyoqCisgKiBDbGVhcnMgZXhjZXB0
aW9uIG1lc3NhZ2UgZnJvbSB0aGUgcmVzb3VyY2UuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdl
bnQucHJvdG90eXBlLmNsZWFyRXhjZXB0aW9uTWVzc2FnZV8gPSBmdW5jdGlvbigpCit7CisgICAg
aWYgKHRoaXMuY3VycmVudEV4Y2VwdGlvbk1lc3NhZ2VfKSB7CisgICAgICAgIHZhciBtZXNzYWdl
RWxlbWVudCA9IHRoaXMuY3VycmVudEV4Y2VwdGlvbk1lc3NhZ2VfLl9yZXNvdXJjZU1lc3NhZ2VM
aW5lRWxlbWVudDsKKyAgICAgICAgdmFyIGJ1YmJsZSA9IG1lc3NhZ2VFbGVtZW50LnBhcmVudEVs
ZW1lbnQ7CisgICAgICAgIGJ1YmJsZS5yZW1vdmVDaGlsZChtZXNzYWdlRWxlbWVudCk7CisgICAg
ICAgIGlmICghYnViYmxlLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgIC8vIExhc3QgbWVzc2Fn
ZSBpbiBidWJibGUgcmVtb3ZlZC4KKyAgICAgICAgICAgIGJ1YmJsZS5wYXJlbnRFbGVtZW50LnJl
bW92ZUNoaWxkKGJ1YmJsZSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5jdXJyZW50RXhjZXB0
aW9uTWVzc2FnZV8gPSBudWxsOworICAgIH0KK307CisKKworLyoqCisgKiBAcmV0dXJuIHtib29s
ZWFufSBUcnVlIGlmZiB0aGUgZGVidWdnZXIgd2lsbCBwYXVzZSBleGVjdXRpb24gb24gdGhlCisg
KiBleGNlcHRpb25zLgorICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5wYXVz
ZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gdGhpcy5wYXVzZU9uRXhj
ZXB0aW9uc187Cit9OworCisKKy8qKgorICogVGVsbHMgd2hldGhlciB0byBwYXVzZSBpbiB0aGUg
ZGVidWdnZXIgb24gdGhlIGV4Y2VwdGlvbnMgb3Igbm90LgorICogQHBhcmFtIHtib29sZWFufSB2
YWx1ZSBUcnVlIGlmZiBleGVjdXRpb24gc2hvdWxkIGJlIHN0b3BwZWQgaW4gdGhlIGRlYnVnZ2Vy
CisgKiBvbiB0aGUgZXhjZXB0aW9ucy4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90
b3R5cGUuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgPSBmdW5jdGlvbih2YWx1ZSkKK3sKKyAgICB0aGlz
LnBhdXNlT25FeGNlcHRpb25zXyA9IHZhbHVlOworfTsKKworCisvKioKKyAqIFNlbmRzICJldmFs
dWF0ZSIgcmVxdWVzdCB0byB0aGUgZGVidWdnZXIuCisgKiBAcGFyYW0ge09iamVjdH0gYXJndW1l
bnRzIFJlcXVlc3QgYXJndW1lbnRzIG1hcC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oZGV2dG9vbHMu
RGVidWdnZXJNZXNzYWdlKX0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkCisgKiAgICAg
d2hlbiByZXNwb25zZSBpcyByZWNlaXZlZC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5w
cm90b3R5cGUucmVxdWVzdEV2YWx1YXRlID0gZnVuY3Rpb24oYXJndW1lbnRzLCBjYWxsYmFjaykK
K3sKKyAgICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgiZXZhbHVhdGUiLCBh
cmd1bWVudHMpOworICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7
CisgICAgdGhpcy5yZXF1ZXN0U2VxVG9DYWxsYmFja19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCld
ID0gY2FsbGJhY2s7Cit9OworCisKKy8qKgorICogU2VuZHMgImxvb2t1cCIgcmVxdWVzdCBmb3Ig
ZWFjaCB1bnJlc29sdmVkIHByb3BlcnR5IG9mIHRoZSBvYmplY3QuIFdoZW4KKyAqIHJlc3BvbnNl
IGlzIHJlY2VpdmVkIHRoZSBwcm9wZXJ0aWVzIHdpbGwgYmUgY2hhbmdlZCB3aXRoIHRoZWlyIHJl
c29sdmVkCisgKiB2YWx1ZXMuCisgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IE9iamVjdCB3aG9z
ZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSByZXNvbHZlZC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oZGV2
dG9vbHMuRGVidWdnZXJNZXNzYWdlKX0gQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYWxsCisg
KiAgICAgY2hpbGRyZW4gYXJlIHJlc29sdmVkLgorICogQHBhcmFtIHtib29sZWFufSBub0ludHJp
bnNpYyBXaGV0aGVyIGludHJpbnNpYyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpbmNsdWRlZC4KKyAq
LworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVzb2x2ZUNoaWxkcmVuID0gZnVu
Y3Rpb24ob2JqZWN0LCBjYWxsYmFjaywgbm9JbnRyaW5zaWMpCit7CisgICAgaWYgKCJoYW5kbGUi
IGluIG9iamVjdCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIGRldnRvb2xz
LkRlYnVnZ2VyQWdlbnQuZm9ybWF0T2JqZWN0UHJvcGVydGllc18ob2JqZWN0LCByZXN1bHQsIG5v
SW50cmluc2ljKTsKKyAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB0aGlzLnJlcXVlc3RMb29rdXBfKFtvYmplY3QucmVmXSwgZnVuY3Rpb24obXNnKSB7Cisg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgICAgICBpZiAobXNnLmlzU3VjY2Vz
cygpKSB7CisgICAgICAgICAgICAgICAgdmFyIGhhbmRsZVRvT2JqZWN0ID0gbXNnLmdldEJvZHko
KTsKKyAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZWQgPSBoYW5kbGVUb09iamVjdFtvYmplY3Qu
cmVmXTsKKyAgICAgICAgICAgICAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9iamVj
dFByb3BlcnRpZXNfKHJlc29sdmVkLCByZXN1bHQsIG5vSW50cmluc2ljKTsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgY2FsbGJhY2soW10pOworICAgICAgICB9KTsKKyAgICB9Cit9OworCisKKy8qKgorICogU2Vu
ZHMgInNjb3BlIiByZXF1ZXN0IGZvciB0aGUgc2NvcGUgb2JqZWN0IHRvIHJlc29sdmUgaXRzIHZh
cmlhYmxlcy4KKyAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBTY29wZSB0byBiZSByZXNvbHZlZC4K
KyAqIEBwYXJhbSB7ZnVuY3Rpb24oQXJyYXkuPFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVBy
b3h5Pil9IGNhbGxiYWNrCisgKiAgICAgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYWxsIHNj
b3BlIHZhcmlhYmxlcyBhcmUgcmVzb2x2ZWQuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQu
cHJvdG90eXBlLnJlc29sdmVTY29wZSA9IGZ1bmN0aW9uKHNjb3BlLCBjYWxsYmFjaykKK3sKKyAg
ICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgic2NvcGUiLCB7CisgICAgICAg
ICJmcmFtZU51bWJlciI6IHNjb3BlLmZyYW1lTnVtYmVyLAorICAgICAgICAibnVtYmVyIjogc2Nv
cGUuaW5kZXgsCisgICAgICAgICJjb21wYWN0Rm9ybWF0IjogdHJ1ZQorICAgIH0pOworICAgIGRl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7CisgICAgdGhpcy5yZXF1ZXN0
U2VxVG9DYWxsYmFja19bY21kLmdldFNlcXVlbmNlTnVtYmVyKCldID0gZnVuY3Rpb24obXNnKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKKyAgICAgICAgaWYgKG1zZy5pc1N1Y2Nlc3MoKSkg
eworICAgICAgICAgICAgdmFyIHNjb3BlT2JqZWN0SnNvbiA9IG1zZy5nZXRCb2R5KCkub2JqZWN0
OworICAgICAgICAgICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmplY3RQcm9wZXJ0
aWVzXyhzY29wZU9iamVjdEpzb24sIHJlc3VsdCwgdHJ1ZSAvKiBubyBpbnRyaW5zaWMgKi8pOwor
ICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgfTsKK307CisKKworLyoq
CisgKiBTZW5kcyAic2NvcGVzIiByZXF1ZXN0IGZvciB0aGUgZnJhbWUgb2JqZWN0IHRvIHJlc29s
dmUgYWxsIHZhcmlhYmxlcworICogYXZhaWxhYmxlIGluIHRoZSBmcmFtZS4KKyAqIEBwYXJhbSB7
bnVtYmVyfSBjYWxsRnJhbWVJZCBJZCBvZiBjYWxsIGZyYW1lIHdob3NlIHZhcmlhYmxlcyBuZWVk
IHRvCisgKiAgICAgYmUgcmVzb2x2ZWQuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKE9iamVjdCl9IGNh
bGxiYWNrIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIGFsbCBmcmFtZQorICogICAgIHZhcmlh
YmxlcyBhcmUgcmVzb2x2ZWQuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBl
LnJlc29sdmVGcmFtZVZhcmlhYmxlc18gPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY2FsbGJhY2sp
Cit7CisgICAgdmFyIHJlc3VsdCA9IHt9OworCisgICAgdmFyIGZyYW1lID0gdGhpcy5jYWxsRnJh
bWVzX1tjYWxsRnJhbWVJZF07CisgICAgaWYgKCFmcmFtZSkgeworICAgICAgICBjYWxsYmFjayhy
ZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHdhaXRpbmdSZXNwb25z
ZXMgPSAwOworICAgIGZ1bmN0aW9uIHNjb3BlUmVzcG9uc2VIYW5kbGVyKG1zZykgeworICAgICAg
ICB3YWl0aW5nUmVzcG9uc2VzLS07CisKKyAgICAgICAgaWYgKG1zZy5pc1N1Y2Nlc3MoKSkgewor
ICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBtc2cuZ2V0Qm9keSgpLm9iamVjdC5wcm9wZXJ0
aWVzOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwcm9wZXJ0aWVzLmxlbmd0aDsg
aisrKQorICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0aWVzW2pdLm5hbWVdID0gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gYWxsIHNjb3BlcyBhcmUgcmVzb2x2ZWQgaW52
b2tlIHRoZSBjYWxsYmFjay4KKyAgICAgICAgaWYgKHdhaXRpbmdSZXNwb25zZXMgPT09IDApCisg
ICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgIH07CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGZyYW1lLnNjb3BlQ2hhaW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIHNjb3Bl
ID0gZnJhbWUuc2NvcGVDaGFpbltpXS5vYmplY3RJZDsKKyAgICAgICAgaWYgKHNjb3BlLnR5cGUg
PT09IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuU2NvcGVUeXBlLkdsb2JhbCkgeworICAgICAgICAg
ICAgLy8gRG8gbm90IHJlc29sdmUgZ2xvYmFsIHNjb3BlIHNpbmNlIGl0IHRha2VzIGZvciB0b28g
bG9uZy4KKyAgICAgICAgICAgIC8vIFRPRE8oeXVyeXMpOiBhbGxvdyB0byBzZW5kIG9ubHkgcHJv
cGVydHkgbmFtZXMgaW4gdGhlIHJlc3BvbnNlLgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgdmFyIGNtZCA9IG5ldyBkZXZ0b29scy5EZWJ1Z0NvbW1hbmQoInNjb3Bl
IiwgeworICAgICAgICAgICAgImZyYW1lTnVtYmVyIjogc2NvcGUuZnJhbWVOdW1iZXIsCisgICAg
ICAgICAgICAibnVtYmVyIjogc2NvcGUuaW5kZXgsCisgICAgICAgICAgICAiY29tcGFjdEZvcm1h
dCI6IHRydWUKKyAgICAgICAgfSk7CisgICAgICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2Vu
ZENvbW1hbmRfKGNtZCk7CisgICAgICAgIHRoaXMucmVxdWVzdFNlcVRvQ2FsbGJhY2tfW2NtZC5n
ZXRTZXF1ZW5jZU51bWJlcigpXSA9IHNjb3BlUmVzcG9uc2VIYW5kbGVyOworICAgICAgICB3YWl0
aW5nUmVzcG9uc2VzKys7CisgICAgfQorfTsKKworLyoqCisgKiBFdmFsdWF0ZXMgdGhlIGV4cHJl
c3Npb25TdHJpbmcgdG8gYW4gb2JqZWN0IGluIHRoZSBjYWxsIGZyYW1lIGFuZCByZXBvcnRzCisg
KiBhbGwgaXRzIHByb3BlcnRpZXMuCisgKiBAcGFyYW17c3RyaW5nfSBleHByZXNzaW9uU3RyaW5n
IEV4cHJlc3Npb24gd2hvc2UgcHJvcGVydGllcyBzaG91bGQgYmUKKyAqICAgICBjb2xsZWN0ZWQu
CisgKiBAcGFyYW17bnVtYmVyfSBjYWxsRnJhbWVJZCBUaGUgZnJhbWUgaWQuCisgKiBAcGFyYW17
ZnVuY3Rpb24oT2JqZWN0IHJlc3VsdCxib29sIGlzRXhjZXB0aW9uKX0gcmVwb3J0Q29tcGxldGlv
bnMgQ2FsbGJhY2sKKyAqICAgICBmdW5jdGlvbi4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2Vu
dC5wcm90b3R5cGUucmVzb2x2ZUNvbXBsZXRpb25zT25GcmFtZSA9IGZ1bmN0aW9uKGV4cHJlc3Np
b25TdHJpbmcsIGNhbGxGcmFtZUlkLCByZXBvcnRDb21wbGV0aW9ucykKK3sKKyAgICAgIGlmIChl
eHByZXNzaW9uU3RyaW5nKSB7CisgICAgICAgICAgZXhwcmVzc2lvblN0cmluZyA9ICJ2YXIgb2Jq
ID0gIiArIGV4cHJlc3Npb25TdHJpbmcgKworICAgICAgICAgICAgICAiOyB2YXIgbmFtZXMgPSB7
fTsgZm9yICh2YXIgbiBpbiBvYmopIHsgbmFtZXNbbl0gPSB0cnVlOyB9OyIgKworICAgICAgICAg
ICAgICAibmFtZXM7IjsKKyAgICAgICAgICB0aGlzLmV2YWx1YXRlSW5DYWxsRnJhbWUoCisgICAg
ICAgICAgICAgIGNhbGxGcmFtZUlkLAorICAgICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nLAor
ICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgIHZhciBu
YW1lcyA9IHt9OworICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFeGNlcHRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPSByZXN1bHQudmFsdWUub2JqZWN0SWQu
cHJvcGVydGllczsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBQdXQgYWxsIG9iamVjdCBwcm9w
ZXJ0aWVzIGludG8gdGhlIG1hcC4KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
c1twcm9wc1tpXS5uYW1lXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICByZXBvcnRDb21wbGV0aW9ucyhuYW1lcywgcmVzdWx0LmlzRXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgICAgfSk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMucmVzb2x2ZUZy
YW1lVmFyaWFibGVzXyhjYWxsRnJhbWVJZCwKKyAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0
KSB7CisgICAgICAgICAgICAgICAgICByZXBvcnRDb21wbGV0aW9ucyhyZXN1bHQsIGZhbHNlIC8q
IGlzRXhjZXB0aW9uICovKTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICB9Cit9OworCisKKy8q
KgorICogQHBhcmFte251bWJlcn0gc2NyaXB0SWQKKyAqIEByZXR1cm4ge3N0cmluZ30gVHlwZSBv
ZiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0IHdpdGggc3BlY2lmaWVkIGlkLgorICovCitkZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5nZXRTY3JpcHRDb250ZXh0VHlwZSA9IGZ1bmN0
aW9uKHNjcmlwdElkKQoreworICAgIHJldHVybiB0aGlzLnBhcnNlZFNjcmlwdHNfW3NjcmlwdElk
XS5nZXRDb250ZXh0VHlwZSgpOworfTsKKworCisvKioKKyAqIFJlbW92ZXMgc3BlY2lmaWVkIGJy
ZWFrcG9pbnQgZnJvbSB0aGUgdjggZGVidWdnZXIuCisgKiBAcGFyYW0ge251bWJlcn0gYnJlYWtw
b2ludElkIElkIG9mIHRoZSBicmVha3BvaW50IGluIHRoZSB2OCBkZWJ1Z2dlci4KKyAqLworZGV2
dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUucmVxdWVzdENsZWFyQnJlYWtwb2ludF8gPSBm
dW5jdGlvbihicmVha3BvaW50SWQpCit7CisgICAgdmFyIGNtZCA9IG5ldyBkZXZ0b29scy5EZWJ1
Z0NvbW1hbmQoImNsZWFyYnJlYWtwb2ludCIsIHsKKyAgICAgICAgImJyZWFrcG9pbnQiOiBicmVh
a3BvaW50SWQKKyAgICB9KTsKKyAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21tYW5k
XyhjbWQpOworfTsKKworCisvKioKKyAqIENoYW5nZXMgYnJlYWtwb2ludCBwYXJhbWV0ZXJzIGlu
IHRoZSB2OCBkZWJ1Z2dlci4KKyAqIEBwYXJhbSB7bnVtYmVyfSBicmVha3BvaW50SWQgSWQgb2Yg
dGhlIGJyZWFrcG9pbnQgaW4gdGhlIHY4IGRlYnVnZ2VyLgorICogQHBhcmFtIHtib29sZWFufSBl
bmFibGVkIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBicmVha3BvaW50LgorICogQHBhcmFtIHs/c3Ry
aW5nfSBjb25kaXRpb24gTmV3IGJyZWFrcG9pbnQgY29uZGl0aW9uLgorICogQHBhcmFtIHtudW1i
ZXJ9IGlnbm9yZUNvdW50IE5ldyBpZ25vcmUgY291bnQgZm9yIHRoZSBicmVha3BvaW50LgorICov
CitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5yZXF1ZXN0Q2hhbmdlQnJlYWtwb2lu
dF8gPSBmdW5jdGlvbihicmVha3BvaW50SWQsIGVuYWJsZWQsIGNvbmRpdGlvbiwgaWdub3JlQ291
bnQpCit7CisgICAgdmFyIGNtZCA9IG5ldyBkZXZ0b29scy5EZWJ1Z0NvbW1hbmQoImNoYW5nZWJy
ZWFrcG9pbnQiLCB7CisgICAgICAgICJicmVha3BvaW50IjogYnJlYWtwb2ludElkLAorICAgICAg
ICAiZW5hYmxlZCI6IGVuYWJsZWQsCisgICAgICAgICJjb25kaXRpb24iOiBjb25kaXRpb24sCisg
ICAgICAgICJpZ25vcmVDb3VudCI6IGlnbm9yZUNvdW50CisgICAgfSk7CisgICAgZGV2dG9vbHMu
RGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKK307CisKKworLyoqCisgKiBTZW5kcyAi
YmFja3RyYWNlIiByZXF1ZXN0IHRvIHY4LgorICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnBy
b3RvdHlwZS5yZXF1ZXN0QmFja3RyYWNlXyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY21kID0g
bmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgiYmFja3RyYWNlIiwgeworICAgICAgICAiY29tcGFj
dEZvcm1hdCI6dHJ1ZQorICAgIH0pOworICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENv
bW1hbmRfKGNtZCk7Cit9OworCisKKy8qKgorICogU2VuZHMgY29tbWFuZCB0byB2OCBkZWJ1Z2dl
ci4KKyAqIEBwYXJhbSB7ZGV2dG9vbHMuRGVidWdDb21tYW5kfSBjbWQgQ29tbWFuZCB0byBleGVj
dXRlLgorICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRDb21tYW5kXyA9IGZ1bmN0aW9u
KGNtZCkKK3sKKyAgICBSZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvci5EZWJ1Z2dlckNvbW1h
bmQoY21kLnRvSlNPTlByb3RvY29sKCkpOworfTsKKworCisvKioKKyAqIFRlbGxzIHRoZSB2OCBk
ZWJ1Z2dlciB0byBtYWtlIHRoZSBuZXh0IGV4ZWN1dGlvbiBzdGVwLgorICogQHBhcmFtIHtzdHJp
bmd9IGFjdGlvbiAiaW4iLCAib3V0IiBvciAibmV4dCIgYWN0aW9uLgorICovCitkZXZ0b29scy5E
ZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5zdGVwQ29tbWFuZF8gPSBmdW5jdGlvbihhY3Rpb24pCit7
CisgICAgdGhpcy5jbGVhckV4Y2VwdGlvbk1lc3NhZ2VfKCk7CisgICAgdmFyIGNtZCA9IG5ldyBk
ZXZ0b29scy5EZWJ1Z0NvbW1hbmQoImNvbnRpbnVlIiwgeworICAgICAgICAic3RlcGFjdGlvbiI6
IGFjdGlvbiwKKyAgICAgICAgInN0ZXBjb3VudCI6IDEKKyAgICB9KTsKKyAgICBkZXZ0b29scy5E
ZWJ1Z2dlckFnZW50LnNlbmRDb21tYW5kXyhjbWQpOworfTsKKworCisvKioKKyAqIFNlbmRzICJs
b29rdXAiIHJlcXVlc3QgdG8gdjguCisgKiBAcGFyYW0ge251bWJlcn0gaGFuZGxlIEhhbmRsZSB0
byB0aGUgb2JqZWN0IHRvIGxvb2t1cC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90
b3R5cGUucmVxdWVzdExvb2t1cF8gPSBmdW5jdGlvbihoYW5kbGVzLCBjYWxsYmFjaykKK3sKKyAg
ICB2YXIgY21kID0gbmV3IGRldnRvb2xzLkRlYnVnQ29tbWFuZCgibG9va3VwIiwgeworICAgICAg
ICAiY29tcGFjdEZvcm1hdCI6dHJ1ZSwKKyAgICAgICAgImhhbmRsZXMiOiBoYW5kbGVzCisgICAg
fSk7CisgICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5zZW5kQ29tbWFuZF8oY21kKTsKKyAgICB0
aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrX1tjbWQuZ2V0U2VxdWVuY2VOdW1iZXIoKV0gPSBjYWxs
YmFjazsKK307CisKKworLyoqCisgKiBTZXRzIGRlYnVnZ2VyIGNvbnRleHQgaWQgZm9yIHNjcmlw
dHMgZmlsdGVyaW5nLgorICogQHBhcmFtIHtudW1iZXJ9IGNvbnRleHRJZCBJZCBvZiB0aGUgaW5z
cGVjdGVkIHBhZ2UgZ2xvYmFsIGNvbnRleHQuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQu
cHJvdG90eXBlLnNldENvbnRleHRJZF8gPSBmdW5jdGlvbihjb250ZXh0SWQpCit7CisgICAgdGhp
cy5jb250ZXh0SWRfID0gY29udGV4dElkOworCisgICAgLy8gSWYgaXQncyB0aGUgZmlyc3QgdGlt
ZSBjb250ZXh0IGlkIGlzIHNldCByZXF1ZXN0IHNjcmlwdHMgbGlzdC4KKyAgICBpZiAodGhpcy5y
ZXF1ZXN0U2NyaXB0c1doZW5Db250ZXh0SWRTZXRfKSB7CisgICAgICAgIHRoaXMucmVxdWVzdFNj
cmlwdHNXaGVuQ29udGV4dElkU2V0XyA9IGZhbHNlOworICAgICAgICB2YXIgY21kID0gbmV3IGRl
dnRvb2xzLkRlYnVnQ29tbWFuZCgic2NyaXB0cyIsIHsKKyAgICAgICAgICAgICJpbmNsdWRlU291
cmNlIjogZmFsc2UKKyAgICAgICAgfSk7CisgICAgICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQu
c2VuZENvbW1hbmRfKGNtZCk7CisgICAgICAgIC8vIEZvcmNlIHY4IGV4ZWN1dGlvbiBzbyB0aGF0
IGl0IGdldHMgdG8gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdGVkIGNvbW1hbmQuCisgICAgICAgIFJl
bW90ZVRvb2xzQWdlbnQuZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KCk7CisKKyAgICAgICAgdmFyIGRl
YnVnZ2VyQWdlbnQgPSB0aGlzOworICAgICAgICB0aGlzLnJlcXVlc3RTZXFUb0NhbGxiYWNrX1tj
bWQuZ2V0U2VxdWVuY2VOdW1iZXIoKV0gPSBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAgIC8v
IEhhbmRsZSB0aGUgcmVzcG9uc2UgaWZmIHRoZSBjb250ZXh0IGlkIGhhc24ndCBjaGFuZ2VkIHNp
bmNlIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAvLyB3YXMgaXNzdWVkLiBPdGhlcndpc2UgaWYg
dGhlIGNvbnRleHQgaWQgZGlkIGNoYW5nZSBhbGwgdXAtdG8tZGF0ZQorICAgICAgICAgICAgLy8g
c2NyaXB0cyB3aWxsIGJlIHB1c2hlZCBpbiBhZnRlciBjb21waWxlIGV2ZW50cyBhbmQgdGhlcmUg
aXMgbm8gbmVlZCB0bworICAgICAgICAgICAgLy8gaGFuZGxlIHRoZSByZXNwb25zZS4KKyAgICAg
ICAgICAgIGlmIChjb250ZXh0SWQgPT09IGRlYnVnZ2VyQWdlbnQuY29udGV4dElkXykKKyAgICAg
ICAgICAgICAgICBkZWJ1Z2dlckFnZW50LmhhbmRsZVNjcmlwdHNSZXNwb25zZV8obXNnKTsKKwor
ICAgICAgICAgICAgLy8gV2UgcmVjZWl2ZWQgaW5pdGlhbCBzY3JpcHRzIHJlc3BvbnNlIHNvIGZs
dXNoIHRoZSBmbGFnIGFuZAorICAgICAgICAgICAgLy8gc2VlIGlmIHRoZXJlIGlzIGFuIHVuaGFu
ZGxlZCBiYWNrdHJhY2UgcmVzcG9uc2UuCisgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LndhaXRp
bmdGb3JJbml0aWFsU2NyaXB0c1Jlc3BvbnNlXyA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGRl
YnVnZ2VyQWdlbnQucGVuZGluZ0JhY2t0cmFjZVJlc3BvbnNlSGFuZGxlcl8pIHsKKyAgICAgICAg
ICAgICAgICBkZWJ1Z2dlckFnZW50LnBlbmRpbmdCYWNrdHJhY2VSZXNwb25zZUhhbmRsZXJfKCk7
CisgICAgICAgICAgICAgICAgZGVidWdnZXJBZ2VudC5wZW5kaW5nQmFja3RyYWNlUmVzcG9uc2VI
YW5kbGVyXyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfTsKKwor
CisvKioKKyAqIEhhbmRsZXMgb3V0cHV0IHNlbnQgYnkgdjggZGVidWdnZXIuIFRoZSBvdXRwdXQg
aXMgZWl0aGVyIGFzeW5jaHJvbm91cyBldmVudAorICogb3IgcmVzcG9uc2UgdG8gYSBwcmV2aW91
c2x5IHNlbnQgcmVxdWVzdC4gIFNlZSBwcm90b2NvbCBkZWZpbml0aW91biBmb3IgbW9yZQorICog
ZGV0YWlscyBvbiB0aGUgb3V0cHV0IGZvcm1hdC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXQK
KyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUuaGFuZGxlRGVidWdnZXJPdXRw
dXRfID0gZnVuY3Rpb24ob3V0cHV0KQoreworICAgIHZhciBtc2c7CisgICAgdHJ5IHsKKyAgICAg
ICAgbXNnID0gbmV3IGRldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZShvdXRwdXQpOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICBkZWJ1Z1ByaW50KCJGYWlsZWQgdG8gaGFuZGxlIGRlYnVnZ2VyIHJl
c3BvbnNlOlxuIiArIGUpOworICAgICAgICB0aHJvdyBlOworICAgIH0KKworICAgIGlmIChtc2cu
Z2V0VHlwZSgpID09PSAiZXZlbnQiKSB7CisgICAgICAgIGlmIChtc2cuZ2V0RXZlbnQoKSA9PT0g
ImJyZWFrIikKKyAgICAgICAgICAgIHRoaXMuaGFuZGxlQnJlYWtFdmVudF8obXNnKTsKKyAgICAg
ICAgZWxzZSBpZiAobXNnLmdldEV2ZW50KCkgPT09ICJleGNlcHRpb24iKQorICAgICAgICAgICAg
dGhpcy5oYW5kbGVFeGNlcHRpb25FdmVudF8obXNnKTsKKyAgICAgICAgZWxzZSBpZiAobXNnLmdl
dEV2ZW50KCkgPT09ICJhZnRlckNvbXBpbGUiKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVBZnRl
ckNvbXBpbGVFdmVudF8obXNnKTsKKyAgICB9IGVsc2UgaWYgKG1zZy5nZXRUeXBlKCkgPT09ICJy
ZXNwb25zZSIpIHsKKyAgICAgICAgaWYgKG1zZy5nZXRDb21tYW5kKCkgPT09ICJzY3JpcHRzIikK
KyAgICAgICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tGb3JSZXNwb25zZV8obXNnKTsKKyAgICAg
ICAgZWxzZSBpZiAobXNnLmdldENvbW1hbmQoKSA9PT0gInNldGJyZWFrcG9pbnQiKQorICAgICAg
ICAgICAgdGhpcy5oYW5kbGVTZXRCcmVha3BvaW50UmVzcG9uc2VfKG1zZyk7CisgICAgICAgIGVs
c2UgaWYgKG1zZy5nZXRDb21tYW5kKCkgPT09ICJjbGVhcmJyZWFrcG9pbnQiKQorICAgICAgICAg
ICAgdGhpcy5oYW5kbGVDbGVhckJyZWFrcG9pbnRSZXNwb25zZV8obXNnKTsKKyAgICAgICAgZWxz
ZSBpZiAobXNnLmdldENvbW1hbmQoKSA9PT0gImJhY2t0cmFjZSIpCisgICAgICAgICAgICB0aGlz
LmhhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXyhtc2cpOworICAgICAgICBlbHNlIGlmIChtc2cuZ2V0
Q29tbWFuZCgpID09PSAibG9va3VwIikKKyAgICAgICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tG
b3JSZXNwb25zZV8obXNnKTsKKyAgICAgICAgZWxzZSBpZiAobXNnLmdldENvbW1hbmQoKSA9PT0g
ImV2YWx1YXRlIikKKyAgICAgICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tGb3JSZXNwb25zZV8o
bXNnKTsKKyAgICAgICAgZWxzZSBpZiAobXNnLmdldENvbW1hbmQoKSA9PT0gInNjb3BlIikKKyAg
ICAgICAgICAgIHRoaXMuaW52b2tlQ2FsbGJhY2tGb3JSZXNwb25zZV8obXNnKTsKKyAgICB9Cit9
OworCisKKy8qKgorICogQHBhcmFtIHtkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2V9IG1zZworICov
CitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5oYW5kbGVCcmVha0V2ZW50XyA9IGZ1
bmN0aW9uKG1zZykKK3sKKyAgICAvLyBGb3JjZSBzY3JpcHMgcGFuZWwgdG8gYmUgc2hvd24gZmly
c3QuCisgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0czsKKworICAgIHZhciBib2R5ID0gbXNnLmdldEJvZHkoKTsKKworICAgIHZhciBsaW5l
ID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC52OFRvV3dlYmtpdExpbmVOdW1iZXJfKGJvZHkuc291
cmNlTGluZSk7CisgICAgdGhpcy5yZXF1ZXN0QmFja3RyYWNlXygpOworfTsKKworCisvKioKKyAq
IEBwYXJhbSB7ZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlfSBtc2cKKyAqLworZGV2dG9vbHMuRGVi
dWdnZXJBZ2VudC5wcm90b3R5cGUuaGFuZGxlRXhjZXB0aW9uRXZlbnRfID0gZnVuY3Rpb24obXNn
KQoreworICAgIC8vIEZvcmNlIHNjcmlwcyBwYW5lbCB0byBiZSBzaG93biBmaXJzdC4KKyAgICBX
ZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzOwor
CisgICAgdmFyIGJvZHkgPSBtc2cuZ2V0Qm9keSgpOworICAgIC8vIE5vIHNjcmlwdCBmaWVsZCBp
biB0aGUgYm9keSBtZWFucyB0aGF0IHY4IGZhaWxlZCB0byBwYXJzZSB0aGUgc2NyaXB0LiBXZQor
ICAgIC8vIHJlc3VtZSBleGVjdXRpb24gb24gcGFyc2VyIGVycm9ycyBhdXRvbWF0aWNhbGx5Lgor
ICAgIGlmICh0aGlzLnBhdXNlT25FeGNlcHRpb25zXyAmJiBib2R5LnNjcmlwdCkgeworICAgICAg
ICB2YXIgbGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3ZWJraXRMaW5lTnVtYmVy
Xyhib2R5LnNvdXJjZUxpbmUpOworICAgICAgICB0aGlzLmNyZWF0ZUV4Y2VwdGlvbk1lc3NhZ2Vf
KGJvZHkuc2NyaXB0Lm5hbWUsIGxpbmUsIGJvZHkuZXhjZXB0aW9uLnRleHQpOworICAgICAgICB0
aGlzLnJlcXVlc3RCYWNrdHJhY2VfKCk7CisgICAgfSBlbHNlCisgICAgICAgIHRoaXMucmVzdW1l
RXhlY3V0aW9uKCk7Cit9OworCisKKy8qKgorICogQHBhcmFtIHtkZXZ0b29scy5EZWJ1Z2dlck1l
c3NhZ2V9IG1zZworICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5oYW5kbGVT
Y3JpcHRzUmVzcG9uc2VfID0gZnVuY3Rpb24obXNnKQoreworICAgIHZhciBzY3JpcHRzID0gbXNn
LmdldEJvZHkoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgdmFyIHNjcmlwdCA9IHNjcmlwdHNbaV07CisKKyAgICAgICAgLy8gU2tpcCBz
Y3JpcHRzIGZyb20gb3RoZXIgdGFicy4KKyAgICAgICAgaWYgKCF0aGlzLmlzU2NyaXB0RnJvbUlu
c3BlY3RlZENvbnRleHRfKHNjcmlwdCwgbXNnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIFdlIG1heSBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgdGhlIGluZm8gaW4gYW4gYWZ0
ZXJDb21waWxlIGV2ZW50LgorICAgICAgICBpZiAoc2NyaXB0LmlkIGluIHRoaXMucGFyc2VkU2Ny
aXB0c18pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdGhpcy5hZGRTY3JpcHRJbmZv
XyhzY3JpcHQsIG1zZyk7CisgICAgfQorfTsKKworCisvKioKKyAqIEBwYXJhbSB7T2JqZWN0fSBz
Y3JpcHQgSnNvbiBvYmplY3QgcmVwcmVzZW50aW5nIHNjcmlwdC4KKyAqIEBwYXJhbSB7ZGV2dG9v
bHMuRGVidWdnZXJNZXNzYWdlfSBtc2cgRGVidWdnZXIgcmVzcG9uc2UuCisgKi8KK2RldnRvb2xz
LkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmlzU2NyaXB0RnJvbUluc3BlY3RlZENvbnRleHRfID0g
ZnVuY3Rpb24oc2NyaXB0LCBtc2cpCit7CisgICAgaWYgKCFzY3JpcHQuY29udGV4dCkgeworICAg
ICAgICAvLyBBbHdheXMgaWdub3JlIHNjcmlwdHMgZnJvbSB0aGUgdXRpbGl0eSBjb250ZXh0Lgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciBjb250ZXh0ID0gbXNnLmxvb2t1
cChzY3JpcHQuY29udGV4dC5yZWYpOworICAgIHZhciBzY3JpcHRDb250ZXh0SWQgPSBjb250ZXh0
LmRhdGE7CisgICAgaWYgKHR5cGVvZiBzY3JpcHRDb250ZXh0SWQgPT09ICJ1bmRlZmluZWQiKQor
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEFsd2F5cyBpZ25vcmUgc2NyaXB0cyBmcm9tIHRoZSB1
dGlsaXR5IGNvbnRleHQuCisgICAgaWYgKHRoaXMuY29udGV4dElkXyA9PT0gbnVsbCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgLy8gRmluZCB0aGUgaWQgZnJvbSBjb250ZXh0IGRhdGEuIFRo
ZSBjb250ZXh0IGRhdGEgaGFzIHRoZSBmb3JtYXQgInR5cGUsaWQiLgorICAgIHZhciBjb21tYSA9
IGNvbnRleHQuZGF0YS5pbmRleE9mKCIsIik7CisgICAgaWYgKGNvbW1hIDwgMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiAoY29udGV4dC5kYXRhLnN1YnN0cmluZyhjb21tYSAr
IDEpID09IHRoaXMuY29udGV4dElkXyk7Cit9OworCisKKy8qKgorICogQHBhcmFtIHtkZXZ0b29s
cy5EZWJ1Z2dlck1lc3NhZ2V9IG1zZworICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3Rv
dHlwZS5oYW5kbGVTZXRCcmVha3BvaW50UmVzcG9uc2VfID0gZnVuY3Rpb24obXNnKQoreworICAg
IHZhciByZXF1ZXN0U2VxID0gbXNnLmdldFJlcXVlc3RTZXEoKTsKKyAgICB2YXIgYnJlYWtwb2lu
dEluZm8gPSB0aGlzLnJlcXVlc3ROdW1iZXJUb0JyZWFrcG9pbnRJbmZvX1tyZXF1ZXN0U2VxXTsK
KyAgICBpZiAoIWJyZWFrcG9pbnRJbmZvKSB7CisgICAgICAgIC8vIFRPRE8oeXVyeXMpOiBoYW5k
bGUgdGhpcyBjYXNlCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVsZXRlIHRoaXMucmVx
dWVzdE51bWJlclRvQnJlYWtwb2ludEluZm9fW3JlcXVlc3RTZXFdOworICAgIGlmICghbXNnLmlz
U3VjY2VzcygpKSB7CisgICAgICAgIC8vIFRPRE8oeXVyeXMpOiBoYW5kbGUgdGhpcyBjYXNlCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdmFyIGlkSW5WOCA9IG1zZy5nZXRCb2R5KCkuYnJl
YWtwb2ludDsKKyAgICBicmVha3BvaW50SW5mby5zZXRWOElkKGlkSW5WOCk7CisKKyAgICBpZiAo
YnJlYWtwb2ludEluZm8uaXNSZW1vdmVkKCkpCisgICAgICAgIHRoaXMucmVxdWVzdENsZWFyQnJl
YWtwb2ludF8oaWRJblY4KTsKK307CisKKworLyoqCisgKiBAcGFyYW0ge2RldnRvb2xzLkRlYnVn
Z2VyTWVzc2FnZX0gbXNnCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmhh
bmRsZUFmdGVyQ29tcGlsZUV2ZW50XyA9IGZ1bmN0aW9uKG1zZykKK3sKKyAgICBpZiAoIXRoaXMu
Y29udGV4dElkXykgeworICAgICAgICAvLyBJZ25vcmUgc2NyaXB0cyBkZWx0YSBpZiBtYWluIHJl
cXVlc3QgaGFzIG5vdCBiZWVuIGlzc3VlZCB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgdmFyIHNjcmlwdCA9IG1zZy5nZXRCb2R5KCkuc2NyaXB0OworCisgICAgLy8gSWdub3JlIHNj
cmlwdHMgZnJvbSBvdGhlciB0YWJzLgorICAgIGlmICghdGhpcy5pc1NjcmlwdEZyb21JbnNwZWN0
ZWRDb250ZXh0XyhzY3JpcHQsIG1zZykpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLmFkZFNj
cmlwdEluZm9fKHNjcmlwdCwgbXNnKTsKK307CisKKworLyoqCisgKiBBZGRzIHRoZSBzY3JpcHQg
aW5mbyB0byB0aGUgbG9jYWwgY2FjaGUuIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgc2Ny
aXB0CisgKiBpcyBub3QgaW4gdGhlIGNhY2hlIHlldC4KKyAqIEBwYXJhbSB7T2JqZWN0fSBzY3Jp
cHQgU2NyaXB0IGpzb24gb2JqZWN0IGZyb20gdGhlIGRlYnVnZ2VyIG1lc3NhZ2UuCisgKiBAcGFy
YW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnIERlYnVnZ2VyIG1lc3NhZ2UgY29udGFp
bmluZyB0aGUgc2NyaXB0CisgKiAgICAgZGF0YS4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2Vu
dC5wcm90b3R5cGUuYWRkU2NyaXB0SW5mb18gPSBmdW5jdGlvbihzY3JpcHQsIG1zZykKK3sKKyAg
ICB2YXIgY29udGV4dCA9IG1zZy5sb29rdXAoc2NyaXB0LmNvbnRleHQucmVmKTsKKyAgICB2YXIg
Y29udGV4dFR5cGU7CisgICAgLy8gRmluZCB0aGUgdHlwZSBmcm9tIGNvbnRleHQgZGF0YS4gVGhl
IGNvbnRleHQgZGF0YSBoYXMgdGhlIGZvcm1hdAorICAgIC8vICJ0eXBlLGlkIi4KKyAgICB2YXIg
Y29tbWEgPSBjb250ZXh0LmRhdGEuaW5kZXhPZigiLCIpOworICAgIGlmIChjb21tYSA8IDApCisg
ICAgICAgIHJldHVybgorICAgIGNvbnRleHRUeXBlID0gY29udGV4dC5kYXRhLnN1YnN0cmluZygw
LCBjb21tYSk7CisgICAgdGhpcy5wYXJzZWRTY3JpcHRzX1tzY3JpcHQuaWRdID0gbmV3IGRldnRv
b2xzLlNjcmlwdEluZm8oc2NyaXB0LmlkLCBzY3JpcHQubmFtZSwgc2NyaXB0LmxpbmVPZmZzZXQs
IGNvbnRleHRUeXBlKTsKKyAgICBpZiAodGhpcy5zY3JpcHRzUGFuZWxJbml0aWFsaXplZF8pIHsK
KyAgICAgICAgLy8gT25seSByZXBvcnQgc2NyaXB0IGFzIHBhcnNlZCBhZnRlciBzY3JpcHRzIHBh
bmVsIGhhcyBiZWVuIHNob3duLgorICAgICAgICBXZWJJbnNwZWN0b3IucGFyc2VkU2NyaXB0U291
cmNlKHNjcmlwdC5pZCwgc2NyaXB0Lm5hbWUsIHNjcmlwdC5zb3VyY2UsIHNjcmlwdC5saW5lT2Zm
c2V0KTsKKyAgICB9Cit9OworCisKKy8qKgorICogQHBhcmFtIHtkZXZ0b29scy5EZWJ1Z2dlck1l
c3NhZ2V9IG1zZworICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5oYW5kbGVD
bGVhckJyZWFrcG9pbnRSZXNwb25zZV8gPSBmdW5jdGlvbihtc2cpCit7CisgICAgLy8gRG8gbm90
aGluZy4KK307CisKKworLyoqCisgKiBIYW5kbGVzIHJlc3BvbnNlIHRvICJiYWNrdHJhY2UiIGNv
bW1hbmQuCisgKiBAcGFyYW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnCisgKi8KK2Rl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmhhbmRsZUJhY2t0cmFjZVJlc3BvbnNlXyA9
IGZ1bmN0aW9uKG1zZykKK3sKKyAgICBpZiAodGhpcy53YWl0aW5nRm9ySW5pdGlhbFNjcmlwdHNS
ZXNwb25zZV8pCisgICAgICAgIHRoaXMucGVuZGluZ0JhY2t0cmFjZVJlc3BvbnNlSGFuZGxlcl8g
PSB0aGlzLmRvSGFuZGxlQmFja3RyYWNlUmVzcG9uc2VfLmJpbmQodGhpcywgbXNnKTsKKyAgICBl
bHNlCisgICAgICAgIHRoaXMuZG9IYW5kbGVCYWNrdHJhY2VSZXNwb25zZV8obXNnKTsKK307CisK
KworLyoqCisgKiBAcGFyYW0ge2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnCisgKi8KK2Rl
dnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLmRvSGFuZGxlQmFja3RyYWNlUmVzcG9uc2Vf
ID0gZnVuY3Rpb24obXNnKQoreworICAgIHZhciBmcmFtZXMgPSBtc2cuZ2V0Qm9keSgpLmZyYW1l
czsKKyAgICB0aGlzLmNhbGxGcmFtZXNfID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAg
ZnJhbWVzLmxlbmd0aDsgKytpKQorICAgICAgICB0aGlzLmNhbGxGcmFtZXNfLnB1c2godGhpcy5m
b3JtYXRDYWxsRnJhbWVfKGZyYW1lc1tpXSkpOworICAgIFdlYkluc3BlY3Rvci5wYXVzZWRTY3Jp
cHQodGhpcy5jYWxsRnJhbWVzXyk7CisgICAgdGhpcy5zaG93UGVuZGluZ0V4Y2VwdGlvbk1lc3Nh
Z2VfKCk7CisgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFjdGl2YXRlV2luZG93KCk7Cit9Owor
CisKKy8qKgorICogRXZhbHVhdGVzIGNvZGUgb24gZ2l2ZW4gY2FsbGZyYW1lLgorICovCitkZXZ0
b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rp
b24oY2FsbEZyYW1lSWQsIGNvZGUsIGNhbGxiYWNrKQoreworICAgIHZhciBjYWxsRnJhbWUgPSB0
aGlzLmNhbGxGcmFtZXNfW2NhbGxGcmFtZUlkXTsKKyAgICBjYWxsRnJhbWUuZXZhbHVhdGVfKGNv
ZGUsIGNhbGxiYWNrKTsKK307CisKKworLyoqCisgKiBIYW5kbGVzIHJlc3BvbnNlIHRvIGEgY29t
bWFuZCBieSBpbnZva2luZyBpdHMgY2FsbGJhY2sgKGlmIGFueSkuCisgKiBAcGFyYW0ge2RldnRv
b2xzLkRlYnVnZ2VyTWVzc2FnZX0gbXNnCisgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGEg
Y2FsbGJhY2sgZm9yIHRoZSBnaXZlbiBtZXNzYWdlIHdhcyBmb3VuZCBhbmQKKyAqICAgICBleGN1
dGVkLgorICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZS5pbnZva2VDYWxsYmFj
a0ZvclJlc3BvbnNlXyA9IGZ1bmN0aW9uKG1zZykKK3sKKyAgICB2YXIgY2FsbGJhY2sgPSB0aGlz
LnJlcXVlc3RTZXFUb0NhbGxiYWNrX1ttc2cuZ2V0UmVxdWVzdFNlcSgpXTsKKyAgICBpZiAoIWNh
bGxiYWNrKSB7CisgICAgICAgIC8vIEl0IG1heSBoYXBwZW5kIGlmIHJlc2V0IHdhcyBjYWxsZWQu
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZGVsZXRlIHRoaXMucmVxdWVzdFNl
cVRvQ2FsbGJhY2tfW21zZy5nZXRSZXF1ZXN0U2VxKCldOworICAgIGNhbGxiYWNrKG1zZyk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9OworCisKKy8qKgorICogQHBhcmFtIHtPYmplY3R9IHN0YWNrRnJh
bWUgRnJhbWUganNvbiBvYmplY3QgZnJvbSAiYmFja3RyYWNlIiByZXNwb25zZS4KKyAqIEByZXR1
cm4geyFkZXZ0b29scy5DYWxsRnJhbWV9IE9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIHJl
bGF0ZWQgdG8gdGhlCisgKiAgICAgY2FsbCBmcmFtZSBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5
IFNjcmlwdHNQYW5lbCBhbmQgaXRzIHBhbmVzLgorICovCitkZXZ0b29scy5EZWJ1Z2dlckFnZW50
LnByb3RvdHlwZS5mb3JtYXRDYWxsRnJhbWVfID0gZnVuY3Rpb24oc3RhY2tGcmFtZSkKK3sKKyAg
ICB2YXIgZnVuYyA9IHN0YWNrRnJhbWUuZnVuYzsKKyAgICB2YXIgc291cmNlSWQgPSBmdW5jLnNj
cmlwdElkOworCisgICAgLy8gQWRkIHNlcnZpY2Ugc2NyaXB0IGlmIGl0IGRvZXMgbm90IGV4aXN0
LgorICAgIHZhciBleGlzdGluZ1NjcmlwdCA9IHRoaXMucGFyc2VkU2NyaXB0c19bc291cmNlSWRd
OworICAgIGlmICghZXhpc3RpbmdTY3JpcHQpIHsKKyAgICAgICAgdGhpcy5wYXJzZWRTY3JpcHRz
X1tzb3VyY2VJZF0gPSBuZXcgZGV2dG9vbHMuU2NyaXB0SW5mbyhzb3VyY2VJZCwgbnVsbCAvKiBu
YW1lICovLCAwIC8qIGxpbmUgKi8sICJ1bmtub3duIiAvKiB0eXBlICovLCB0cnVlIC8qIHVucmVz
b2x2ZWQgKi8pOworICAgICAgICBXZWJJbnNwZWN0b3IucGFyc2VkU2NyaXB0U291cmNlKHNvdXJj
ZUlkLCBudWxsLCBudWxsLCAwKTsKKyAgICB9CisKKyAgICB2YXIgZnVuY05hbWUgPSBmdW5jLm5h
bWUgfHwgZnVuYy5pbmZlcnJlZE5hbWUgfHwgIihhbm9ueW1vdXMgZnVuY3Rpb24pIjsKKyAgICB2
YXIgbGluZSA9IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3ZWJraXRMaW5lTnVtYmVyXyhz
dGFja0ZyYW1lLmxpbmUpOworCisgICAgLy8gQWRkIGJhc2ljIHNjb3BlIGNoYWluIGluZm8gd2l0
aCBzY29wZSB2YXJpYWJsZXMuCisgICAgdmFyIHNjb3BlQ2hhaW4gPSBbXTsKKyAgICB2YXIgU2Nv
cGVUeXBlID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5TY29wZVR5cGU7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdGFja0ZyYW1lLnNjb3Blcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIg
c2NvcGUgPSBzdGFja0ZyYW1lLnNjb3Blc1tpXTsKKyAgICAgICAgc2NvcGUuZnJhbWVOdW1iZXIg
PSBzdGFja0ZyYW1lLmluZGV4OworICAgICAgICB2YXIgc2NvcGVPYmplY3RQcm94eSA9IG5ldyBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkoMCwgc2NvcGUsIFtdLCAwLCAiIiwgdHJ1ZSk7CisgICAg
ICAgIHNjb3BlT2JqZWN0UHJveHkuaXNTY29wZSA9IHRydWU7CisgICAgICAgIHN3aXRjaChzY29w
ZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5HbG9iYWw6CisgICAgICAgICAg
ICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0RvY3VtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU2NvcGVUeXBlLkxvY2FsOgorICAgICAgICAgICAg
ICAgIHNjb3BlT2JqZWN0UHJveHkuaXNMb2NhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2Nv
cGVPYmplY3RQcm94eS50aGlzT2JqZWN0ID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRP
YmplY3RQcm94eV8oc3RhY2tGcmFtZS5yZWNlaXZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFNjb3BlVHlwZS5XaXRoOgorICAgICAgICAgICAgLy8gQ2F0Y2gg
c2NvcGUgaXMgdHJlYXRlZCBhcyBhIHJlZ3VsYXIgd2l0aCBzY29wZSBieSBXZWJLaXQgc28gd2UK
KyAgICAgICAgICAgIC8vIGFsc28gdHJlYXQgaXQgdGhpcyB3YXkuCisgICAgICAgICAgICBjYXNl
IFNjb3BlVHlwZS5DYXRjaDoKKyAgICAgICAgICAgICAgICBzY29wZU9iamVjdFByb3h5LmlzV2l0
aEJsb2NrID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U2NvcGVUeXBlLkNsb3N1cmU6CisgICAgICAgICAgICAgICAgc2NvcGVPYmplY3RQcm94eS5pc0Ns
b3N1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHNjb3BlQ2hhaW4ucHVzaChzY29wZU9iamVjdFByb3h5KTsKKyAgICB9CisgICAgcmV0dXJuIG5l
dyBkZXZ0b29scy5DYWxsRnJhbWUoc3RhY2tGcmFtZS5pbmRleCwgImZ1bmN0aW9uIiwgZnVuY05h
bWUsIHNvdXJjZUlkLCBsaW5lLCBzY29wZUNoYWluKTsKK307CisKKworLyoqCisgKiBDb2xsZWN0
cyBwcm9wZXJ0aWVzIGZvciBhbiBvYmplY3QgZnJvbSB0aGUgZGVidWdnZXIgcmVzcG9uc2UuCisg
KiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IEFuIG9iamVjdCBmcm9tIHRoZSBkZWJ1Z2dlciBwcm90
b2NvbCByZXNwb25zZS4KKyAqIEBwYXJhbSB7QXJyYXkuPFdlYkluc3BlY3Rvci5PYmplY3RQcm9w
ZXJ0eVByb3h5Pn0gcmVzdWx0IEFuIGFycmF5IHRvIHB1dCB0aGUKKyAqICAgICBwcm9wZXJ0aWVz
IGludG8uCisgKiBAcGFyYW0ge2Jvb2xlYW59IG5vSW50cmluc2ljIFdoZXRoZXIgaW50cmluc2lj
IHByb3BlcnRpZXMgc2hvdWxkIGJlCisgKiAgICAgaW5jbHVkZWQuCisgKi8KK2RldnRvb2xzLkRl
YnVnZ2VyQWdlbnQuZm9ybWF0T2JqZWN0UHJvcGVydGllc18gPSBmdW5jdGlvbihvYmplY3QsIHJl
c3VsdCwgbm9JbnRyaW5zaWMpCit7CisgICAgZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm9wZXJ0
aWVzVG9Qcm94aWVzXyhvYmplY3QucHJvcGVydGllcywgcmVzdWx0KTsKKyAgICBpZiAobm9JbnRy
aW5zaWMpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc3VsdC5wdXNoKG5ldyBXZWJJbnNwZWN0
b3IuT2JqZWN0UHJvcGVydHlQcm94eSgiX19wcm90b19fIiwgZGV2dG9vbHMuRGVidWdnZXJBZ2Vu
dC5mb3JtYXRPYmplY3RQcm94eV8ob2JqZWN0LnByb3RvT2JqZWN0KSkpOworICAgIHJlc3VsdC5w
dXNoKG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlQcm94eSgiY29uc3RydWN0b3IiLCBk
ZXZ0b29scy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9iamVjdFByb3h5XyhvYmplY3QuY29uc3RydWN0
b3JGdW5jdGlvbikpKTsKKyAgICAvLyBEb24ndCBhZGQgJ3Byb3RvdHlwZScgcHJvcGVydHkgc2lu
Y2UgaXQgaXMgb25lIG9mIHRoZSByZWd1YWxhciBwcm9wZXJ0aWVzLgorfTsKKworCisvKioKKyAq
IEZvciBlYWNoIHByb3BlcnR5IGluICJwcm9wZXJ0aWVzIiBjcmVhdGVzIGl0cyBwcm94eSByZXBy
ZXNlbnRhdGl2ZS4KKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdD59IHByb3BlcnRpZXMgUmVjZWl2
ZXIgcHJvcGVydGllcyBvciBsb2NhbHMgYXJyYXkgZnJvbQorICogICAgICJiYWNrdHJhY2UiIHJl
c3BvbnNlLgorICogQHBhcmFtIHtBcnJheS48V2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5UHJv
eHk+fSBSZXN1bHRzIGhvbGRlci4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm9wZXJ0
aWVzVG9Qcm94aWVzXyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMsIHJlc3VsdCkKK3sKKyAgICB2YXIg
bWFwID0ge307CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07CisgICAgICAgIHZhciBu
YW1lID0gU3RyaW5nKHByb3BlcnR5Lm5hbWUpOworICAgICAgICBpZiAobmFtZSBpbiBtYXApCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbWFwW25hbWVdID0gdHJ1ZTsKKyAgICAgICAg
dmFyIHZhbHVlID0gZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmplY3RQcm94eV8ocHJv
cGVydHkudmFsdWUpOworICAgICAgICB2YXIgcHJvcGVydHlQcm94eSA9IG5ldyBXZWJJbnNwZWN0
b3IuT2JqZWN0UHJvcGVydHlQcm94eShuYW1lLCB2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5wdXNo
KHByb3BlcnR5UHJveHkpOworICAgIH0KK307CisKKworLyoqCisgKiBAcGFyYW0ge09iamVjdH0g
diBBbiBvYmplY3QgcmVmZXJlbmNlIGZyb20gdGhlIGRlYnVnZ2VyIHJlc3BvbnNlLgorICogQHJl
dHVybiB7Kn0gVGhlIHZhbHVlIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkIGJ5IFNjcmlwdHNQYW5l
bC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5mb3JtYXRPYmplY3RQcm94eV8gPSBmdW5j
dGlvbih2KQoreworICAgIHZhciBkZXNjcmlwdGlvbjsKKyAgICB2YXIgaGFzQ2hpbGRyZW4gPSBm
YWxzZTsKKyAgICBpZiAodi50eXBlID09PSAib2JqZWN0IikgeworICAgICAgICBkZXNjcmlwdGlv
biA9IHYuY2xhc3NOYW1lOworICAgICAgICBoYXNDaGlsZHJlbiA9IHRydWU7CisgICAgfSBlbHNl
IGlmICh2LnR5cGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgaWYgKHYuc291cmNlKQorICAg
ICAgICAgICAgZGVzY3JpcHRpb24gPSB2LnNvdXJjZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZGVzY3JpcHRpb24gPSAiZnVuY3Rpb24gIiArIHYubmFtZSArICIoKSI7CisgICAgICAgIGhh
c0NoaWxkcmVuID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHYudHlwZSA9PT0gInVuZGVmaW5lZCIp
CisgICAgICAgIGRlc2NyaXB0aW9uID0gInVuZGVmaW5lZCI7CisgICAgZWxzZSBpZiAodi50eXBl
ID09PSAibnVsbCIpCisgICAgICAgIGRlc2NyaXB0aW9uID0gIm51bGwiOworICAgIGVsc2UgaWYg
KHR5cGVvZiB2LnZhbHVlICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAvLyBDaGVjayBmb3Ig
dW5kZWZpbmVkIGFuZCBudWxsIHR5cGVzIGJlZm9yZSBjaGVja2luZyB0aGUgdmFsdWUsIG90aGVy
d2lzZQorICAgICAgICAvLyBudWxsL3VuZGVmaW5lZCBtYXkgaGF2ZSBibGFuayB2YWx1ZS4KKyAg
ICAgICAgZGVzY3JpcHRpb24gPSB2LnZhbHVlOworICAgIH0gZWxzZQorICAgICAgICBkZXNjcmlw
dGlvbiA9ICI8dW5yZXNvbHZlZCByZWY6ICIgKyB2LnJlZiArICIsIHR5cGU6ICIgKyB2LnR5cGUg
KyAiPiI7CisKKyAgICB2YXIgcHJveHkgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KDAs
IHYsIFtdLCAwLCBkZXNjcmlwdGlvbiwgaGFzQ2hpbGRyZW4pOworICAgIHByb3h5LnR5cGUgPSB2
LnR5cGU7CisgICAgcHJveHkuaXNWOFJlZiA9IHRydWU7CisgICAgcmV0dXJuIHByb3h5OworfTsK
KworCisvKioKKyAqIENvbnZlcnRzIGxpbmUgbnVtYmVyIGZyb20gV2ViIEluc3BlY3RvciBVSSgx
LWJhc2VkKSB0byB2OCgwLWJhc2VkKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lIFJlc291cmNl
IGxpbmUgbnVtYmVyIGluIFdlYiBJbnNwZWN0b3IgVUkuCisgKiBAcmV0dXJuIHtudW1iZXJ9IFRo
ZSBsaW5lIG51bWJlciBpbiB2OC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJBZ2VudC53ZWJraXRU
b1Y4TGluZU51bWJlcl8gPSBmdW5jdGlvbihsaW5lKQoreworICAgIHJldHVybiBsaW5lIC0gMTsK
K307CisKKworLyoqCisgKiBDb252ZXJ0cyBsaW5lIG51bWJlciBmcm9tIHY4KDAtYmFzZWQpIHRv
IFdlYiBJbnNwZWN0b3IgVUkoMS1iYXNlZCkuCisgKiBAcGFyYW0ge251bWJlcn0gbGluZSBSZXNv
dXJjZSBsaW5lIG51bWJlciBpbiB2OC4KKyAqIEByZXR1cm4ge251bWJlcn0gVGhlIGxpbmUgbnVt
YmVyIGluIFdlYiBJbnNwZWN0b3IuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyQWdlbnQudjhUb1d3
ZWJraXRMaW5lTnVtYmVyXyA9IGZ1bmN0aW9uKGxpbmUpCit7CisgICAgcmV0dXJuIGxpbmUgKyAx
OworfTsKKworCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSBzY3JpcHRJZCBJZCBvZiB0aGUgc2Ny
aXB0LgorICogQHBhcmFtIHs/c3RyaW5nfSB1cmwgU2NyaXB0IHJlc291cmNlIFVSTCBpZiBhbnku
CisgKiBAcGFyYW0ge251bWJlcn0gbGluZU9mZnNldCBGaXJzdCBsaW5lIDAtYmFzZWQgb2Zmc2V0
IGluIHRoZSBjb250YWluaW5nCisgKiAgICAgZG9jdW1lbnQuCisgKiBAcGFyYW0ge3N0cmluZ30g
Y29udGV4dFR5cGUgVHlwZSBvZiB0aGUgc2NyaXB0J3MgY29udGV4dDoKKyAqICAgICAicGFnZSIg
LSByZWd1bGFyIHNjcmlwdCBmcm9tIGh0bWwgcGFnZQorICogICAgICJpbmplY3RlZCIgLSBleHRl
bnNpb24gY29udGVudCBzY3JpcHQKKyAqIEBwYXJhbSB7Ym9vbH0gb3B0X2lzVW5yZXNvbHZlZCBJ
ZiB0cnVlLCBzY3JpcHQgd2lsbCBub3QgYmUgcmVzb2x2ZWQuCisgKiBAY29uc3RydWN0b3IKKyAq
LworZGV2dG9vbHMuU2NyaXB0SW5mbyA9IGZ1bmN0aW9uKHNjcmlwdElkLCB1cmwsIGxpbmVPZmZz
ZXQsIGNvbnRleHRUeXBlLCBvcHRfaXNVbnJlc29sdmVkKQoreworICAgIHRoaXMuc2NyaXB0SWRf
ID0gc2NyaXB0SWQ7CisgICAgdGhpcy5saW5lT2Zmc2V0XyA9IGxpbmVPZmZzZXQ7CisgICAgdGhp
cy5jb250ZXh0VHlwZV8gPSBjb250ZXh0VHlwZTsKKyAgICB0aGlzLnVybF8gPSB1cmw7CisgICAg
dGhpcy5pc1VucmVzb2x2ZWRfID0gb3B0X2lzVW5yZXNvbHZlZDsKKworICAgIHRoaXMubGluZVRv
QnJlYWtwb2ludEluZm9fID0ge307Cit9OworCisKKy8qKgorICogQHJldHVybiB7bnVtYmVyfQor
ICovCitkZXZ0b29scy5TY3JpcHRJbmZvLnByb3RvdHlwZS5nZXRMaW5lT2Zmc2V0ID0gZnVuY3Rp
b24oKQoreworICAgIHJldHVybiB0aGlzLmxpbmVPZmZzZXRfOworfTsKKworCisvKioKKyAqIEBy
ZXR1cm4ge3N0cmluZ30KKyAqLworZGV2dG9vbHMuU2NyaXB0SW5mby5wcm90b3R5cGUuZ2V0Q29u
dGV4dFR5cGUgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRoaXMuY29udGV4dFR5cGVfOwor
fTsKKworCisvKioKKyAqIEByZXR1cm4gez9zdHJpbmd9CisgKi8KK2RldnRvb2xzLlNjcmlwdElu
Zm8ucHJvdG90eXBlLmdldFVybCA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gdGhpcy51cmxf
OworfTsKKworCisvKioKKyAqIEByZXR1cm4gez9ib29sfQorICovCitkZXZ0b29scy5TY3JpcHRJ
bmZvLnByb3RvdHlwZS5pc1VucmVzb2x2ZWQgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRo
aXMuaXNVbnJlc29sdmVkXzsKK307CisKKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0gbGluZSAw
LWJhc2VkIGxpbmUgbnVtYmVyIGluIHRoZSBzY3JpcHQuCisgKiBAcmV0dXJuIHs/ZGV2dG9vbHMu
QnJlYWtwb2ludEluZm99IEluZm9ybWF0aW9uIG9uIGEgYnJlYWtwb2ludCBhdCB0aGUKKyAqICAg
ICBzcGVjaWZpZWQgbGluZSBpbiB0aGUgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBu
byBicmVha3BvaW50IGF0CisgKiAgICAgdGhhdCBsaW5lLgorICovCitkZXZ0b29scy5TY3JpcHRJ
bmZvLnByb3RvdHlwZS5nZXRCcmVha3BvaW50SW5mbyA9IGZ1bmN0aW9uKGxpbmUpCit7CisgICAg
cmV0dXJuIHRoaXMubGluZVRvQnJlYWtwb2ludEluZm9fW2xpbmVdOworfTsKKworCisvKioKKyAq
IEFkZHMgYnJlYWtwb2ludCBpbmZvIHRvIHRoZSBzY3JpcHQuCisgKiBAcGFyYW0ge2RldnRvb2xz
LkJyZWFrcG9pbnRJbmZvfSBicmVha3BvaW50CisgKi8KK2RldnRvb2xzLlNjcmlwdEluZm8ucHJv
dG90eXBlLmFkZEJyZWFrcG9pbnRJbmZvID0gZnVuY3Rpb24oYnJlYWtwb2ludCkKK3sKKyAgICB0
aGlzLmxpbmVUb0JyZWFrcG9pbnRJbmZvX1ticmVha3BvaW50LmdldExpbmUoKV0gPSBicmVha3Bv
aW50OworfTsKKworCisvKioKKyAqIEBwYXJhbSB7ZGV2dG9vbHMuQnJlYWtwb2ludEluZm99IGJy
ZWFrcG9pbnQgQnJlYWtwb2ludCBpbmZvIHRvIGJlIHJlbW92ZWQuCisgKi8KK2RldnRvb2xzLlNj
cmlwdEluZm8ucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnRJbmZvID0gZnVuY3Rpb24oYnJlYWtw
b2ludCkKK3sKKyAgICB2YXIgbGluZSA9IGJyZWFrcG9pbnQuZ2V0TGluZSgpOworICAgIGRlbGV0
ZSB0aGlzLmxpbmVUb0JyZWFrcG9pbnRJbmZvX1tsaW5lXTsKK307CisKKworCisvKioKKyAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lIEJyZWFrcG9pbnQgMC1iYXNlZCBsaW5lIG51bWJlciBpbiB0aGUg
Y29udGFpbmluZyBzY3JpcHQuCisgKiBAY29uc3RydWN0b3IKKyAqLworZGV2dG9vbHMuQnJlYWtw
b2ludEluZm8gPSBmdW5jdGlvbihsaW5lKQoreworICAgIHRoaXMubGluZV8gPSBsaW5lOworICAg
IHRoaXMudjhpZF8gPSAtMTsKKyAgICB0aGlzLnJlbW92ZWRfID0gZmFsc2U7Cit9OworCisKKy8q
KgorICogQHJldHVybiB7bnVtYmVyfQorICovCitkZXZ0b29scy5CcmVha3BvaW50SW5mby5wcm90
b3R5cGUuZ2V0TGluZSA9IGZ1bmN0aW9uKG4pCit7CisgICAgcmV0dXJuIHRoaXMubGluZV87Cit9
OworCisKKy8qKgorICogQHJldHVybiB7bnVtYmVyfSBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGlz
IGJyZWFrcG9pbnQgaW4gdGhlIHY4IGRlYnVnZ2VyLgorICovCitkZXZ0b29scy5CcmVha3BvaW50
SW5mby5wcm90b3R5cGUuZ2V0VjhJZCA9IGZ1bmN0aW9uKG4pCit7CisgICAgcmV0dXJuIHRoaXMu
djhpZF87Cit9OworCisKKy8qKgorICogU2V0cyBpZCBvZiB0aGlzIGJyZWFrcG9pbnQgaW4gdGhl
IHY4IGRlYnVnZ2VyLgorICogQHBhcmFtIHtudW1iZXJ9IGlkCisgKi8KK2RldnRvb2xzLkJyZWFr
cG9pbnRJbmZvLnByb3RvdHlwZS5zZXRWOElkID0gZnVuY3Rpb24oaWQpCit7CisgICAgdGhpcy52
OGlkXyA9IGlkOworfTsKKworCisvKioKKyAqIE1hcmtzIHRoaXMgYnJlYWtwb2ludCBhcyByZW1v
dmVkIGZyb20gdGhlICBmcm9udC1lbmQuCisgKi8KK2RldnRvb2xzLkJyZWFrcG9pbnRJbmZvLnBy
b3RvdHlwZS5tYXJrQXNSZW1vdmVkID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMucmVtb3ZlZF8g
PSB0cnVlOworfTsKKworCisvKioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyBi
cmVha3BvaW50IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAqICAgICBmcm9udC1lbmQuCisg
Ki8KK2RldnRvb2xzLkJyZWFrcG9pbnRJbmZvLnByb3RvdHlwZS5pc1JlbW92ZWQgPSBmdW5jdGlv
bigpCit7CisgICAgcmV0dXJuIHRoaXMucmVtb3ZlZF87Cit9OworCisKKy8qKgorICogQ2FsbCBz
dGFjayBmcmFtZSBkYXRhLgorICogQHBhcmFtIHtzdHJpbmd9IGlkIENhbGxGcmFtZSBpZC4KKyAq
IEBwYXJhbSB7c3RyaW5nfSB0eXBlIENhbGxGcmFtZSB0eXBlLgorICogQHBhcmFtIHtzdHJpbmd9
IGZ1bmN0aW9uTmFtZSBDYWxsRnJhbWUgdHlwZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VJ
RCBTb3VyY2UgaWQuCisgKiBAcGFyYW0ge251bWJlcn0gbGluZSBTb3VyY2UgbGluZS4KKyAqIEBw
YXJhbSB7QXJyYXkuPE9iamVjdD59IHNjb3BlQ2hhaW4gQXJyYXkgb2Ygc2NvcGVkIG9iamVjdHMu
CisgKiBAY29uc3RydW5jdG9yCisgKi8KK2RldnRvb2xzLkNhbGxGcmFtZSA9IGZ1bmN0aW9uKGlk
LCB0eXBlLCBmdW5jdGlvbk5hbWUsIHNvdXJjZUlELCBsaW5lLCBzY29wZUNoYWluKQoreworICAg
IHRoaXMuaWQgPSBpZDsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMuZnVuY3Rpb25O
YW1lID0gZnVuY3Rpb25OYW1lOworICAgIHRoaXMuc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICB0
aGlzLmxpbmUgPSBsaW5lOworICAgIHRoaXMuc2NvcGVDaGFpbiA9IHNjb3BlQ2hhaW47Cit9Owor
CisKKy8qKgorICogVGhpcyBtZXRob2QgaXNzdWVzIGFzeW5jaHJvbm91cyBldmFsdWF0ZSByZXF1
ZXN0LCByZXBvcnRzIHJlc3VsdCB0byB0aGUKKyAqIGNhbGxiYWNrLgorICogQHBhcmFtIHtzdHJp
bmd9IGV4cHJlc3Npb24gQW4gZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgaW4gdGhlIGNvbnRl
eHQgb2YKKyAqICAgICB0aGlzIGNhbGwgZnJhbWUuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKE9iamVj
dCk6dW5kZWZpbmVkfSBjYWxsYmFjayBDYWxsYmFjayB0byByZXBvcnQgcmVzdWx0IHRvLgorICov
CitkZXZ0b29scy5DYWxsRnJhbWUucHJvdG90eXBlLmV2YWx1YXRlXyA9IGZ1bmN0aW9uKGV4cHJl
c3Npb24sIGNhbGxiYWNrKQoreworICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQo
KS5yZXF1ZXN0RXZhbHVhdGUoeworICAgICAgICAgICAgImV4cHJlc3Npb24iOiBleHByZXNzaW9u
LAorICAgICAgICAgICAgImZyYW1lIjogdGhpcy5pZCwKKyAgICAgICAgICAgICJnbG9iYWwiOiBm
YWxzZSwKKyAgICAgICAgICAgICJkaXNhYmxlX2JyZWFrIjogZmFsc2UsCisgICAgICAgICAgICAi
Y29tcGFjdEZvcm1hdCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24ocmVzcG9u
c2UpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgICAgIGlmIChyZXNw
b25zZS5pc1N1Y2Nlc3MoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSBkZXZ0b29s
cy5EZWJ1Z2dlckFnZW50LmZvcm1hdE9iamVjdFByb3h5XyhyZXNwb25zZS5nZXRCb2R5KCkpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gcmVzcG9u
c2UuZ2V0TWVzc2FnZSgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5pc0V4Y2VwdGlvbiA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAg
ICB9KTsKK307CisKKworLyoqCisgKiBKU09OIGJhc2VkIGNvbW1hbmRzIHNlbnQgdG8gdjggZGVi
dWdnZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCBOYW1lIG9mIHRoZSBjb21tYW5kIHRv
IGV4ZWN1dGUuCisgKiBAcGFyYW0ge09iamVjdH0gb3B0X2FyZ3VtZW50cyBDb21tYW5kLXNwZWNp
ZmljIGFyZ3VtZW50cyBtYXAuCisgKiBAY29uc3RydWN0b3IKKyAqLworZGV2dG9vbHMuRGVidWdD
b21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgb3B0X2FyZ3VtZW50cykKK3sKKyAgICB0aGlzLmNv
bW1hbmRfID0gY29tbWFuZDsKKyAgICB0aGlzLnR5cGVfID0gInJlcXVlc3QiOworICAgIHRoaXMu
c2VxXyA9ICsrZGV2dG9vbHMuRGVidWdDb21tYW5kLm5leHRTZXFfOworICAgIGlmIChvcHRfYXJn
dW1lbnRzKQorICAgICAgICB0aGlzLmFyZ3VtZW50c18gPSBvcHRfYXJndW1lbnRzOworfTsKKwor
CisvKioKKyAqIE5leHQgdW5pcXVlIG51bWJlciB0byBiZSB1c2VkIGFzIGRlYnVnZ2VyIHJlcXVl
c3Qgc2VxdWVuY2UgbnVtYmVyLgorICogQHR5cGUge251bWJlcn0KKyAqLworZGV2dG9vbHMuRGVi
dWdDb21tYW5kLm5leHRTZXFfID0gMTsKKworCisvKioKKyAqIEByZXR1cm4ge251bWJlcn0KKyAq
LworZGV2dG9vbHMuRGVidWdDb21tYW5kLnByb3RvdHlwZS5nZXRTZXF1ZW5jZU51bWJlciA9IGZ1
bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gdGhpcy5zZXFfOworfTsKKworCisvKioKKyAqIEByZXR1
cm4ge3N0cmluZ30KKyAqLworZGV2dG9vbHMuRGVidWdDb21tYW5kLnByb3RvdHlwZS50b0pTT05Q
cm90b2NvbCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIganNvbiA9IHsKKyAgICAgICAgInNlcSI6
IHRoaXMuc2VxXywKKyAgICAgICAgInR5cGUiOiB0aGlzLnR5cGVfLAorICAgICAgICAiY29tbWFu
ZCI6IHRoaXMuY29tbWFuZF8KKyAgICB9CisgICAgaWYgKHRoaXMuYXJndW1lbnRzXykKKyAgICAg
ICAganNvbi5hcmd1bWVudHMgPSB0aGlzLmFyZ3VtZW50c187CisgICAgcmV0dXJuIEpTT04uc3Ry
aW5naWZ5KGpzb24pOworfTsKKworCisvKioKKyAqIEpTT04gbWVzc2FnZXMgc2VudCBmcm9tIHY4
IGRlYnVnZ2VyLiBTZWUgcHJvdG9jb2wgZGVmaW5pdGlvbiBmb3IgbW9yZQorICogZGV0YWlsczog
aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L3dpa2kvRGVidWdnZXJQcm90b2NvbAorICogQHBh
cmFtIHtzdHJpbmd9IG1zZyBSYXcgcHJvdG9jb2wgcGFja2V0IGFzIEpTT04gc3RyaW5nLgorICog
QGNvbnN0cnVjdG9yCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZSA9IGZ1bmN0aW9uKG1z
ZykKK3sKKyAgICB0aGlzLnBhY2tldF8gPSBKU09OLnBhcnNlKG1zZyk7CisgICAgdGhpcy5yZWZz
XyA9IFtdOworICAgIGlmICh0aGlzLnBhY2tldF8ucmVmcykgeworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMucGFja2V0Xy5yZWZzLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAgdGhp
cy5yZWZzX1t0aGlzLnBhY2tldF8ucmVmc1tpXS5oYW5kbGVdID0gdGhpcy5wYWNrZXRfLnJlZnNb
aV07CisgICAgfQorfTsKKworCisvKioKKyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhY2tldCB0
eXBlLgorICovCitkZXZ0b29scy5EZWJ1Z2dlck1lc3NhZ2UucHJvdG90eXBlLmdldFR5cGUgPSBm
dW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRoaXMucGFja2V0Xy50eXBlOworfTsKKworCisvKioK
KyAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBwYWNrZXQgZXZlbnQgaWYgdGhlIG1lc3NhZ2UgaXMg
YW4gZXZlbnQuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuZ2V0RXZl
bnQgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRoaXMucGFja2V0Xy5ldmVudDsKK307CisK
KworLyoqCisgKiBAcmV0dXJuIHs/c3RyaW5nfSBUaGUgcGFja2V0IGNvbW1hbmQgaWYgdGhlIG1l
c3NhZ2UgaXMgYSByZXNwb25zZSB0byBhCisgKiAgICAgY29tbWFuZC4KKyAqLworZGV2dG9vbHMu
RGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRDb21tYW5kID0gZnVuY3Rpb24oKQoreworICAg
IHJldHVybiB0aGlzLnBhY2tldF8uY29tbWFuZDsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtu
dW1iZXJ9IFRoZSBwYWNrZXQgcmVxdWVzdCBzZXF1ZW5jZS4KKyAqLworZGV2dG9vbHMuRGVidWdn
ZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRSZXF1ZXN0U2VxID0gZnVuY3Rpb24oKQoreworICAgIHJl
dHVybiB0aGlzLnBhY2tldF8ucmVxdWVzdF9zZXE7Cit9OworCisKKy8qKgorICogQHJldHVybiB7
bnVtYmVyfSBXaGV0aGVyIHRoZSB2OCBpcyBydW5uaW5nIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHJl
cXVlc3QuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUuaXNSdW5uaW5n
ID0gZnVuY3Rpb24oKQoreworICAgIHJldHVybiB0aGlzLnBhY2tldF8ucnVubmluZyA/IHRydWUg
OiBmYWxzZTsKK307CisKKworLyoqCisgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBy
ZXF1ZXN0IHN1Y2NlZWRlZC4KKyAqLworZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlw
ZS5pc1N1Y2Nlc3MgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRoaXMucGFja2V0Xy5zdWNj
ZXNzID8gdHJ1ZSA6IGZhbHNlOworfTsKKworCisvKioKKyAqIEByZXR1cm4ge3N0cmluZ30KKyAq
LworZGV2dG9vbHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRNZXNzYWdlID0gZnVuY3Rp
b24oKQoreworICAgIHJldHVybiB0aGlzLnBhY2tldF8ubWVzc2FnZTsKK307CisKKworLyoqCisg
KiBAcmV0dXJuIHtPYmplY3R9IFBhcnNlZCBtZXNzYWdlIGJvZHkganNvbi4KKyAqLworZGV2dG9v
bHMuRGVidWdnZXJNZXNzYWdlLnByb3RvdHlwZS5nZXRCb2R5ID0gZnVuY3Rpb24oKQoreworICAg
IHJldHVybiB0aGlzLnBhY2tldF8uYm9keTsKK307CisKKworLyoqCisgKiBAcGFyYW0ge251bWJl
cn0gaGFuZGxlIE9iamVjdCBoYW5kbGUuCisgKiBAcmV0dXJuIHs/T2JqZWN0fSBSZXR1cm5zIHRo
ZSBvYmplY3Qgd2l0aCB0aGUgaGFuZGxlIGlmIGl0IHdhcyBzZW50IGluIHRoaXMKKyAqICAgIG1l
c3NhZ2Uoc29tZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgaGFuZGxlcyBtYXkgYmUgbWlzc2luZyBp
biB0aGUgbWVzc2FnZSkuCisgKi8KK2RldnRvb2xzLkRlYnVnZ2VyTWVzc2FnZS5wcm90b3R5cGUu
bG9va3VwID0gZnVuY3Rpb24oaGFuZGxlKQoreworICAgIHJldHVybiB0aGlzLnJlZnNfW2hhbmRs
ZV07Cit9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9EZXZUb29scy5qcyBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTc1OWYxMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvRGV2VG9vbHMuanMKQEAgLTAsMCArMSw1MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgVG9vbHMgaXMgYSBtYWluIGNsYXNzIHRoYXQgd2lyZXMgYWxsIGNvbXBvbmVudHMgb2YgdGhl
CisgKiBEZXZUb29scyBmcm9udGVuZCB0b2dldGhlci4gSXQgaXMgYWxzbyByZXNwb25zaWJsZSBm
b3Igb3ZlcnJpZGluZyBleGlzdGluZworICogV2ViSW5zcGVjdG9yIGZ1bmN0aW9uYWxpdHkgd2hp
bGUgaXQgaXMgZ2V0dGluZyB1cHN0cmVhbWVkIGludG8gV2ViQ29yZS4KKyAqLworCisvKioKKyAq
IERpc3BhdGNoZXMgcmF3IG1lc3NhZ2UgZnJvbSB0aGUgaG9zdC4KKyAqIEBwYXJhbSB7c3RyaW5n
fSByZW1vdGVOYW1lCisgKiBAcHJhbWEge3N0cmluZ30gbWV0aG9kTmFtZQorICogQHBhcmFtIHtz
dHJpbmd9IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMgQXJndW1lbnRzIHRvIGRpc3BhdGNoLgorICov
CitkZXZ0b29scyQkZGlzcGF0Y2ggPSBmdW5jdGlvbihyZW1vdGVOYW1lLCBtZXRob2ROYW1lLCBw
YXJhbTEsIHBhcmFtMiwgcGFyYW0zKQoreworICAgIHJlbW90ZU5hbWUgPSAiUmVtb3RlIiArIHJl
bW90ZU5hbWUuc3Vic3RyaW5nKDAsIHJlbW90ZU5hbWUubGVuZ3RoIC0gOCk7CisgICAgdmFyIGFn
ZW50ID0gd2luZG93W3JlbW90ZU5hbWVdOworICAgIGlmICghYWdlbnQpIHsKKyAgICAgICAgZGVi
dWdQcmludCgiTm8gcmVtb3RlIGFnZW50ICciICsgcmVtb3RlTmFtZSArICInIGZvdW5kLiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZhciBtZXRob2QgPSBhZ2VudFttZXRob2ROYW1l
XTsKKyAgICBpZiAoIW1ldGhvZCkgeworICAgICAgICBkZWJ1Z1ByaW50KCJObyBtZXRob2QgJyIg
KyByZW1vdGVOYW1lICsgIi4iICsgbWV0aG9kTmFtZSArICInIGZvdW5kLiIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1ldGhvZC5jYWxsKHRoaXMsIHBhcmFtMSwgcGFyYW0yLCBwYXJh
bTMpOworfTsKKworCitkZXZ0b29scy5Ub29sc0FnZW50ID0gZnVuY3Rpb24oKQoreworICAgIFJl
bW90ZVRvb2xzQWdlbnQuZGlkRGlzcGF0Y2hPbiA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9j
ZXNzQ2FsbGJhY2s7CisgICAgUmVtb3RlVG9vbHNBZ2VudC5mcmFtZU5hdmlnYXRlID0gdGhpcy5m
cmFtZU5hdmlnYXRlXy5iaW5kKHRoaXMpOworICAgIFJlbW90ZVRvb2xzQWdlbnQuZGlzcGF0Y2hP
bkNsaWVudCA9IHRoaXMuZGlzcGF0Y2hPbkNsaWVudF8uYmluZCh0aGlzKTsKKyAgICB0aGlzLmRl
YnVnZ2VyQWdlbnRfID0gbmV3IGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQoKTsKKyAgICB0aGlzLnBy
b2ZpbGVyQWdlbnRfID0gbmV3IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQoKTsKK307CisKKworLyoq
CisgKiBSZXNldHMgdG9vbHMgYWdlbnQgdG8gaXRzIGluaXRpYWwgc3RhdGUuCisgKi8KK2RldnRv
b2xzLlRvb2xzQWdlbnQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMu
ZGVidWdnZXJBZ2VudF8ucmVzZXQoKTsKK307CisKKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30g
c2NyaXB0IFNjcmlwdCBleHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkIGluIHRoZSBjb250ZXh0IG9m
IHRoZQorICogICAgIGluc3BlY3RlZCBwYWdlLgorICogQHBhcmFtIHtmdW5jdGlvbihPYmplY3R8
c3RyaW5nLCBib29sZWFuKTp1bmRlZmluZWR9IG9wdF9jYWxsYmFjayBGdW5jdGlvbiB0bworICog
ICAgIGNhbGwgd2l0aCB0aGUgcmVzdWx0LgorICovCitkZXZ0b29scy5Ub29sc0FnZW50LnByb3Rv
dHlwZS5ldmFsdWF0ZUphdmFTY3JpcHQgPSBmdW5jdGlvbihzY3JpcHQsIG9wdF9jYWxsYmFjaykK
K3sKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmV2YWx1YXRlKHNjcmlwdCwgb3B0X2NhbGxiYWNrIHx8
IGZ1bmN0aW9uKCkge30pOworfTsKKworCisvKioKKyAqIEByZXR1cm4ge2RldnRvb2xzLkRlYnVn
Z2VyQWdlbnR9IERlYnVnZ2VyIGFnZW50IGluc3RhbmNlLgorICovCitkZXZ0b29scy5Ub29sc0Fn
ZW50LnByb3RvdHlwZS5nZXREZWJ1Z2dlckFnZW50ID0gZnVuY3Rpb24oKQoreworICAgIHJldHVy
biB0aGlzLmRlYnVnZ2VyQWdlbnRfOworfTsKKworCisvKioKKyAqIEByZXR1cm4ge2RldnRvb2xz
LlByb2ZpbGVyQWdlbnR9IFByb2ZpbGVyIGFnZW50IGluc3RhbmNlLgorICovCitkZXZ0b29scy5U
b29sc0FnZW50LnByb3RvdHlwZS5nZXRQcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQoreworICAg
IHJldHVybiB0aGlzLnByb2ZpbGVyQWdlbnRfOworfTsKKworCisvKioKKyAqIEBwYXJhbSB7c3Ry
aW5nfSB1cmwgVXJsIGZyYW1lIG5hdmlnYXRlZCB0by4KKyAqIEBzZWUgdG9vbHNfYWdlbnQuaAor
ICogQHByaXZhdGUKKyAqLworZGV2dG9vbHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZnJhbWVOYXZp
Z2F0ZV8gPSBmdW5jdGlvbih1cmwpCit7CisgICAgdGhpcy5yZXNldCgpOworICAgIC8vIERvIG5v
dCByZXNldCBQcm9maWxlcyBwYW5lbC4KKyAgICB2YXIgcHJvZmlsZXMgPSBudWxsOworICAgIGlm
ICgicHJvZmlsZXMiIGluIFdlYkluc3BlY3Rvci5wYW5lbHMpIHsKKyAgICAgICAgcHJvZmlsZXMg
PSBXZWJJbnNwZWN0b3IucGFuZWxzWyJwcm9maWxlcyJdOworICAgICAgICBkZWxldGUgV2ViSW5z
cGVjdG9yLnBhbmVsc1sicHJvZmlsZXMiXTsKKyAgICB9CisgICAgV2ViSW5zcGVjdG9yLnJlc2V0
KCk7CisgICAgaWYgKHByb2ZpbGVzICE9PSBudWxsKQorICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzWyJwcm9maWxlcyJdID0gcHJvZmlsZXM7Cit9OworCisKKy8qKgorICogQHBhcmFtIHtzdHJp
bmd9IG1lc3NhZ2UgU2VyaWFsaXplZCBjYWxsIHRvIGJlIGRpc3BhdGNoZWQgb24gV2ViSW5zcGVj
dG9yLgorICogQHByaXZhdGUKKyAqLworZGV2dG9vbHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZGlz
cGF0Y2hPbkNsaWVudF8gPSBmdW5jdGlvbihtZXNzYWdlKQoreworICAgIHZhciBhcmdzID0gSlNP
Ti5wYXJzZShtZXNzYWdlKTsKKyAgICB2YXIgbWV0aG9kTmFtZSA9IGFyZ3NbMF07CisgICAgdmFy
IHBhcmFtZXRlcnMgPSBhcmdzLnNsaWNlKDEpOworICAgIFdlYkluc3BlY3RvclttZXRob2ROYW1l
XS5hcHBseShXZWJJbnNwZWN0b3IsIHBhcmFtZXRlcnMpOworfTsKKworCisvKioKKyAqIEV2YWx1
YXRlcyBqcyBleHByZXNzaW9uLgorICogQHBhcmFtIHtzdHJpbmd9IGV4cHIKKyAqLworZGV2dG9v
bHMuVG9vbHNBZ2VudC5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihleHByKQoreworICAg
IFJlbW90ZVRvb2xzQWdlbnQuZXZhbHVhdGUoZXhwcik7Cit9OworCisKKy8qKgorICogRW5hYmxl
cyAvIGRpc2FibGVzIHJlc291cmNlcyBwYW5lbCBpbiB0aGUgdWkuCisgKiBAcGFyYW0ge2Jvb2xl
YW59IGVuYWJsZWQgTmV3IHBhbmVsIHN0YXR1cy4KKyAqLworV2ViSW5zcGVjdG9yLnNldFJlc291
cmNlc1BhbmVsRW5hYmxlZCA9IGZ1bmN0aW9uKGVuYWJsZWQpCit7CisgICAgSW5zcGVjdG9yQmFj
a2VuZC5fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIFdlYkluc3BlY3Rv
ci5wYW5lbHMucmVzb3VyY2VzLnJlc2V0KCk7Cit9OworCisKKy8qKgorICogUHJpbnRzIHN0cmlu
ZyAgdG8gdGhlIGluc3BlY3RvciBjb25zb2xlIG9yIHNob3dzIGFsZXJ0IGlmIHRoZSBjb25zb2xl
IGRvZXNuJ3QKKyAqIGV4aXN0LgorICogQHBhcmFtIHtzdHJpbmd9IHRleHQKKyAqLworZnVuY3Rp
b24gZGVidWdQcmludCh0ZXh0KSB7CisgICAgdmFyIGNvbnNvbGUgPSBXZWJJbnNwZWN0b3IuY29u
c29sZTsKKyAgICBpZiAoY29uc29sZSkgeworICAgICAgICBjb25zb2xlLmFkZE1lc3NhZ2UobmV3
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSgKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLAorICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywKKyAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nLAorICAgICAgICAgICAgMSwgImNocm9t
ZTovL2RldnRvb2xzLzxpbnRlcm5hbD4iLCB1bmRlZmluZWQsIC0xLCB0ZXh0KSk7CisgICAgfSBl
bHNlCisgICAgICAgIGFsZXJ0KHRleHQpOworfQorCisKKy8qKgorICogR2xvYmFsIGluc3RhbmNl
IG9mIHRoZSB0b29scyBhZ2VudC4KKyAqIEB0eXBlIHtkZXZ0b29scy5Ub29sc0FnZW50fQorICov
CitkZXZ0b29scy50b29scyA9IG51bGw7CisKKwordmFyIGNvbnRleHQgPSB7fTsgIC8vIFVzZWQg
YnkgV2ViQ29yZSdzIGluc3BlY3RvciByb3V0aW5lcy4KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworLy8gSGVyZSBhbmQgYmVsb3cgYXJlIG92ZXJyaWRlcyB0byBleGlzdGluZyBXZWJJbnNwZWN0
b3IgbWV0aG9kcyBvbmx5LgorLy8gVE9ETyhwZmVsZG1hbik6IFBhdGNoIFdlYkNvcmUgYW5kIHVw
c3RyZWFtIGNoYW5nZXMuCit2YXIgb2xkTG9hZGVkID0gV2ViSW5zcGVjdG9yLmxvYWRlZDsKK1dl
Ykluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCit7CisgICAgZGV2dG9vbHMudG9vbHMgPSBu
ZXcgZGV2dG9vbHMuVG9vbHNBZ2VudCgpOworICAgIGRldnRvb2xzLnRvb2xzLnJlc2V0KCk7CisK
KyAgICBQcmVmZXJlbmNlcy5pZ25vcmVXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgUHJlZmVyZW5j
ZXMuc2FtcGxpbmdDUFVQcm9maWxlciA9IHRydWU7CisgICAgUHJlZmVyZW5jZXMuaGVhcFByb2Zp
bGVyUHJlc2VudCA9IHRydWU7CisgICAgb2xkTG9hZGVkLmNhbGwodGhpcyk7CisKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QubG9hZGVkKCk7Cit9OworCisKKyhmdW5jdGlvbigpCit7CisKKyAg
ICAvKioKKyAgICAgKiBIYW5kbGVzIGFuIEYzIGtleWRvd24gZXZlbnQgdG8gZm9jdXMgdGhlIElu
c3BlY3RvciBzZWFyY2ggYm94LgorICAgICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQg
RXZlbnQgdG8gb3B0aW9uYWxseSBoYW5kbGUKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufSB3aGV0
aGVyIHRoZSBldmVudCBoYXMgYmVlbiBoYW5kbGVkCisgICAgICovCisgICAgZnVuY3Rpb24gaGFu
ZGxlRjNLZXlkb3duKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09
PSAiRjMiICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LnNoaWZ0
S2V5ICYmICFldmVudC5tZXRhS2V5KSB7CisgICAgICAgICAgICB2YXIgc2VhcmNoRmllbGQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoIik7CisgICAgICAgICAgICBzZWFyY2hGaWVs
ZC5mb2N1cygpOworICAgICAgICAgICAgc2VhcmNoRmllbGQuc2VsZWN0KCk7CisgICAgICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworCisgICAgdmFyIG9sZEtleURv
d24gPSBXZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duOworICAgIC8qKgorICAgICAqIFRoaXMg
b3ZlcnJpZGUgYWxsb3dzIHRvIGludGVyY2VwdCBrZXlkb3duIGV2ZW50cyB3ZSB3YW50IHRvIGhh
bmRsZSBpbiBhCisgICAgICogY3VzdG9tIHdheS4gU29tZSBuZXN0ZWQgZG9jdW1lbnRzIChpZnJh
bWVzKSBkZWxlZ2F0ZSBrZXlkb3duIGhhbmRsaW5nIHRvCisgICAgICogV2ViSW5zcGVjdG9yLmRv
Y3VtZW50S2V5RG93biAoZS5nLiBTb3VyY2VGcmFtZSkuCisgICAgICogQHBhcmFtIHtLZXlib2Fy
ZEV2ZW50fSBldmVudAorICAgICAqIEBvdmVycmlkZQorICAgICAqLworICAgIFdlYkluc3BlY3Rv
ci5kb2N1bWVudEtleURvd24gPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgaXNIYW5k
bGVkID0gaGFuZGxlRjNLZXlkb3duKGV2ZW50KTsKKyAgICAgICAgaWYgKCFpc0hhbmRsZWQpIHsK
KyAgICAgICAgICAgIC8vIE11dGUgcmVmcmVzaCBhY3Rpb24uCisgICAgICAgICAgICBpZiAoZXZl
bnQua2V5SWRlbnRpZmllciA9PT0gIkY1IikKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOworICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0g
IlUrMDA1MiIgLyogIlIiICovICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpKQor
ICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb2xkS2V5RG93bi5jYWxsKHRoaXMsIGV2ZW50KTsKKyAgICAgICAg
fQorICAgIH07Cit9KSgpOworCisKKy8qKgorICogVGhpcyBvdmVycmlkZSBpcyBuZWNlc3Nhcnkg
Zm9yIGFkZGluZyBzY3JpcHQgc291cmNlIGFzeW5jaHJvbm91c2x5LgorICogQG92ZXJyaWRlCisg
Ki8KK1dlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZS5zZXR1cFNvdXJjZUZyYW1lSWZO
ZWVkZWQgPSBmdW5jdGlvbigpCit7CisgICAgaWYgKCF0aGlzLl9mcmFtZU5lZWRzU2V0dXApCisg
ICAgICAgIHJldHVybjsKKworICAgIHRoaXMuYXR0YWNoKCk7CisKKyAgICBpZiAodGhpcy5zY3Jp
cHQuc291cmNlKQorICAgICAgICB0aGlzLmRpZFJlc29sdmVTY3JpcHRTb3VyY2VfKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZGV2dG9vbHMudG9vbHMu
Z2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVTY3JpcHRTb3VyY2UoCisgICAgICAgICAgICB0aGlz
LnNjcmlwdC5zb3VyY2VJRCwKKyAgICAgICAgICAgIGZ1bmN0aW9uKHNvdXJjZSkgeworICAgICAg
ICAgICAgICAgIHNlbGYuc2NyaXB0LnNvdXJjZSA9IHNvdXJjZSB8fCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIjxzb3VyY2UgaXMgbm90IGF2YWlsYWJsZT4iKTsKKyAgICAgICAgICAgICAgICBzZWxm
LmRpZFJlc29sdmVTY3JpcHRTb3VyY2VfKCk7CisgICAgICAgICAgICB9KTsKKyAgICB9Cit9Owor
CisKKy8qKgorICogUGVyZm9ybXMgc291cmNlIGZyYW1lIHNldHVwIHdoZW4gc2NyaXB0IHNvdXJj
ZSBpcyBhcmVhZHkgcmVzb2x2ZWQuCisgKi8KK1dlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3Rv
dHlwZS5kaWRSZXNvbHZlU2NyaXB0U291cmNlXyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNv
dXJjZUZyYW1lLnNldENvbnRlbnQoInRleHQvamF2YXNjcmlwdCIsIHRoaXMuc2NyaXB0LnNvdXJj
ZSk7CisgICAgdGhpcy5fc291cmNlRnJhbWVTZXR1cCA9IHRydWU7CisgICAgZGVsZXRlIHRoaXMu
X2ZyYW1lTmVlZHNTZXR1cDsKK307CisKKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBU
eXBlIG9mIHRoZSB0aGUgcHJvcGVydHkgdmFsdWUoIm9iamVjdCIgb3IgImZ1bmN0aW9uIikuCisg
KiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIENsYXNzIG5hbWUgb2YgdGhlIHByb3BlcnR5IHZh
bHVlLgorICogQGNvbnN0cnVjdG9yCisgKi8KK1dlYkluc3BlY3Rvci5VbnJlc29sdmVkUHJvcGVy
dHlWYWx1ZSA9IGZ1bmN0aW9uKHR5cGUsIGNsYXNzTmFtZSkKK3sKKyAgICB0aGlzLnR5cGUgPSB0
eXBlOworICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lOworfTsKKworCisoZnVuY3Rpb24o
KQoreworICAgIHZhciBvbGRTaG93ID0gV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5
cGUuc2hvdzsKKyAgICBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5zaG93ID0g
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdl
bnQoKS5pbml0VUkoKTsKKyAgICAgICAgdGhpcy5lbmFibGVUb2dnbGVCdXR0b24udmlzaWJsZSA9
IGZhbHNlOworICAgICAgICBvbGRTaG93LmNhbGwodGhpcyk7CisgICAgfTsKK30pKCk7CisKKwor
KGZ1bmN0aW9uIEludGVyY2VwdFByb2ZpbGVzUGFuZWxFdmVudHMoKQoreworICAgIHZhciBvbGRT
aG93ID0gV2ViSW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3c7CisgICAgV2Vi
SW5zcGVjdG9yLlByb2ZpbGVzUGFuZWwucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBkZXZ0b29scy50b29scy5nZXRQcm9maWxlckFnZW50KCkuaW5pdGlhbGl6ZVBy
b2ZpbGluZygpOworICAgICAgICB0aGlzLmVuYWJsZVRvZ2dsZUJ1dHRvbi52aXNpYmxlID0gZmFs
c2U7CisgICAgICAgIG9sZFNob3cuY2FsbCh0aGlzKTsKKyAgICAgICAgLy8gU2hvdyBpcyBjYWxs
ZWQgb24gZXZlcnkgc2hvdyBldmVudCBvZiBhIHBhbmVsLCBzbworICAgICAgICAvLyB3ZSBvbmx5
IG5lZWQgdG8gaW50ZXJjZXB0IGl0IG9uY2UuCisgICAgICAgIFdlYkluc3BlY3Rvci5Qcm9maWxl
c1BhbmVsLnByb3RvdHlwZS5zaG93ID0gb2xkU2hvdzsKKyAgICB9OworfSkoKTsKKworCisvKgor
ICogQG92ZXJyaWRlCisgKiBUT0RPKG1uYWdhbm92KTogUmVzdG9yZSBsMTBuIHdoZW4gaXQgd2ls
bCBiZSBhZ3JlZWQgdGhhdCBpdCBpcyBuZWVkZWQuCisgKi8KK1dlYkluc3BlY3Rvci5VSVN0cmlu
ZyA9IGZ1bmN0aW9uKHN0cmluZykKK3sKKyAgICByZXR1cm4gU3RyaW5nLnZzcHJpbnRmKHN0cmlu
ZywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7Cit9OworCisKKy8v
IFRoZXJlIGlzIG5vIGNsZWFyIHdheSBvZiBzZXR0aW5nIGZyYW1lIHRpdGxlIHlldC4gU28gc25p
ZmZpbmcgbWFpbiByZXNvdXJjZQorLy8gbG9hZC4KKyhmdW5jdGlvbiBPdmVycmlkZVVwZGF0ZVJl
c291cmNlKCkgeworICAgIHZhciBvcmlnaW5hbFVwZGF0ZVJlc291cmNlID0gV2ViSW5zcGVjdG9y
LnVwZGF0ZVJlc291cmNlOworICAgIFdlYkluc3BlY3Rvci51cGRhdGVSZXNvdXJjZSA9IGZ1bmN0
aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCisgICAgeworICAgICAgICBvcmlnaW5hbFVwZGF0ZVJl
c291cmNlLmNhbGwodGhpcywgaWRlbnRpZmllciwgcGF5bG9hZCk7CisgICAgICAgIHZhciByZXNv
dXJjZSA9IHRoaXMucmVzb3VyY2VzW2lkZW50aWZpZXJdOworICAgICAgICBpZiAocmVzb3VyY2Ug
JiYgcmVzb3VyY2UubWFpblJlc291cmNlICYmIHJlc291cmNlLmZpbmlzaGVkKQorICAgICAgICAg
ICAgZG9jdW1lbnQudGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRldmVsb3BlciBUb29s
cyAtICVzIiwgcmVzb3VyY2UudXJsKTsKKyAgICB9OworfSkoKTsKKworCisvLyBIaWdobGlnaHQg
ZXh0ZW5zaW9uIGNvbnRlbnQgc2NyaXB0cyBpbiB0aGUgc2NyaXB0cyBsaXN0LgorKGZ1bmN0aW9u
ICgpIHsKKyAgICB2YXIgb3JpZ2luYWwgPSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5fYWRkU2NyaXB0VG9GaWxlc01lbnU7CisgICAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5l
bC5wcm90b3R5cGUuX2FkZFNjcmlwdFRvRmlsZXNNZW51ID0gZnVuY3Rpb24oc2NyaXB0KQorICAg
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
CisgICAgICAgIHZhciBkZWJ1Z2dlckFnZW50ID0gZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJB
Z2VudCgpOworICAgICAgICB2YXIgdHlwZSA9IGRlYnVnZ2VyQWdlbnQuZ2V0U2NyaXB0Q29udGV4
dFR5cGUoc2NyaXB0LnNvdXJjZUlEKTsKKyAgICAgICAgdmFyIG9wdGlvbiA9IHNjcmlwdC5maWxl
c1NlbGVjdE9wdGlvbjsKKyAgICAgICAgaWYgKHR5cGUgPT09ICJpbmplY3RlZCIgJiYgb3B0aW9u
KQorICAgICAgICAgICAgb3B0aW9uLmFkZFN0eWxlQ2xhc3MoImluamVjdGVkIik7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfTsKK30pKCk7CisKKworLyoqIFBlbmRpbmcgV2ViS2l0IHVw
c3RyZWFtIGJ5IGFwYXZsb3YpLiBGaXhlcyBpZnJhbWUgdnMgZHJhZyBwcm9ibGVtLiAqLworKGZ1
bmN0aW9uKCkKK3sKKyAgICB2YXIgb3JpZ2luYWxEcmFnU3RhcnQgPSBXZWJJbnNwZWN0b3IuZWxl
bWVudERyYWdTdGFydDsKKyAgICBXZWJJbnNwZWN0b3IuZWxlbWVudERyYWdTdGFydCA9IGZ1bmN0
aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICAgICAg
dmFyIGdsYXNzUGFuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAg
ICAgZ2xhc3NQYW5lLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAw
JTtoZWlnaHQ6MTAwJTtvcGFjaXR5OjA7ei1pbmRleDoxIjsKKyAgICAgICAgICAgIGdsYXNzUGFu
ZS5pZCA9ICJnbGFzcy1wYW5lLWZvci1kcmFnIjsKKyAgICAgICAgICAgIGVsZW1lbnQucGFyZW50
RWxlbWVudC5hcHBlbmRDaGlsZChnbGFzc1BhbmUpOworICAgICAgICB9CisKKyAgICAgICAgb3Jp
Z2luYWxEcmFnU3RhcnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9OworCisgICAgdmFy
IG9yaWdpbmFsRHJhZ0VuZCA9IFdlYkluc3BlY3Rvci5lbGVtZW50RHJhZ0VuZDsKKyAgICBXZWJJ
bnNwZWN0b3IuZWxlbWVudERyYWdFbmQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBvcmln
aW5hbERyYWdFbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICB2YXIgZ2xhc3NQ
YW5lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdsYXNzLXBhbmUtZm9yLWRyYWciKTsKKyAg
ICAgICAgaWYgKGdsYXNzUGFuZSkKKyAgICAgICAgICAgIGdsYXNzUGFuZS5wYXJlbnRFbGVtZW50
LnJlbW92ZUNoaWxkKGdsYXNzUGFuZSk7CisgICAgfTsKK30pKCk7CisKKworKGZ1bmN0aW9uICgp
IHsKK3ZhciBvcmlnID0gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLmdldFByb3BlcnRp
ZXM7CitJbmplY3RlZFNjcmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0UHJvcGVydGllcyA9IGZ1bmN0
aW9uKG9iamVjdFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSwgY2FsbGJh
Y2spCit7CisgICAgaWYgKG9iamVjdFByb3h5LmlzU2NvcGUpCisgICAgICAgIGRldnRvb2xzLnRv
b2xzLmdldERlYnVnZ2VyQWdlbnQoKS5yZXNvbHZlU2NvcGUob2JqZWN0UHJveHkub2JqZWN0SWQs
IGNhbGxiYWNrKTsKKyAgICBlbHNlIGlmIChvYmplY3RQcm94eS5pc1Y4UmVmKQorICAgICAgICBk
ZXZ0b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVzb2x2ZUNoaWxkcmVuKG9iamVjdFBy
b3h5Lm9iamVjdElkLCBjYWxsYmFjaywgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgb3JpZy5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworfTsKK30pKCk7CisKKworKGZ1bmN0aW9uKCkKK3sKK0lu
amVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rp
b24oY2FsbEZyYW1lSWQsIGNvZGUsIG9iamVjdEdyb3VwLCBjYWxsYmFjaykKK3sKKyAgICAvL1RP
RE8ocGZlbGRtYW4pOiByZW1vdmUgb25jZSA0OTA4NCBpcyByb2xsZWQuCisgICAgaWYgKCFjYWxs
YmFjaykKKyAgICAgICAgY2FsbGJhY2sgPSBvYmplY3RHcm91cDsKKyAgICBkZXZ0b29scy50b29s
cy5nZXREZWJ1Z2dlckFnZW50KCkuZXZhbHVhdGVJbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgY29k
ZSwgY2FsbGJhY2spOworfTsKK30pKCk7CisKKworV2ViSW5zcGVjdG9yLnJlc291cmNlVHJhY2tp
bmdXYXNFbmFibGVkID0gZnVuY3Rpb24oKQoreworICAgICAgSW5zcGVjdG9yQmFja2VuZC5fcmVz
b3VyY2VUcmFja2luZ0VuYWJsZWQgPSB0cnVlOworICAgICAgdGhpcy5wYW5lbHMucmVzb3VyY2Vz
LnJlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKCk7Cit9OworCitXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUcmFja2luZ1dhc0Rpc2FibGVkID0gZnVuY3Rpb24oKQoreworICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQgPSBmYWxzZTsKKyAgICAgIHRoaXMucGFuZWxz
LnJlc291cmNlcy5yZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJsZWQoKTsKK307CisKKyhmdW5jdGlv
bigpCit7Cit2YXIgb3JpZyA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUu
c2V0TWVzc2FnZUJvZHk7CitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLnNl
dE1lc3NhZ2VCb2R5ID0gZnVuY3Rpb24oYXJncykKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFyZ3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2ldID09PSAic3Ry
aW5nIikKKyAgICAgICAgICAgIGFyZ3NbaV0gPSBXZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkud3Jh
cFByaW1pdGl2ZVZhbHVlKGFyZ3NbaV0pOworICAgIH0KKyAgICBvcmlnLmNhbGwodGhpcywgYXJn
cyk7Cit9OworfSkoKTsKKworCisoZnVuY3Rpb24oKQorewordmFyIG9yaWcgPSBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnM7CitJbmplY3RlZFNjcmlwdEFjY2Vz
cy5wcm90b3R5cGUuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihleHByZXNzaW9uU3RyaW5nLCBp
bmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIGNhbGxGcmFtZUlkLCByZXBvcnRDb21wbGV0
aW9ucykKK3sKKyAgICBpZiAodHlwZW9mIGNhbGxGcmFtZUlkID09PSAibnVtYmVyIikKKyAgICAg
ICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc29sdmVDb21wbGV0aW9uc09u
RnJhbWUoZXhwcmVzc2lvblN0cmluZywgY2FsbEZyYW1lSWQsIHJlcG9ydENvbXBsZXRpb25zKTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybiBvcmlnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cit9
OworfSkoKTsKKworCisoZnVuY3Rpb24oKQoreworV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwu
cHJvdG90eXBlLl9ub2RlU2VhcmNoQnV0dG9uQ2xpY2tlZCA9IGZ1bmN0aW9uKCBldmVudCkKK3sK
KyAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZU5vZGVTZWFyY2goKTsKKyAgICB0aGlzLm5vZGVT
ZWFyY2hCdXR0b24udG9nZ2xlZCA9ICF0aGlzLm5vZGVTZWFyY2hCdXR0b24udG9nZ2xlZDsKK307
Cit9KSgpOworCisKKy8vIFdlIG5lZWQgdG8gaGF2ZSBhIHBsYWNlIGZvciBwb3N0cG9uZWQgdGFz
a3MKKy8vIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCB3aGVuIGFsbCB0aGUgbWVzc2FnZXMgYmV0
d2VlbiBhZ2VudCBhbmQgZnJvbnRlbmQKKy8vIGFyZSBwcm9jZXNzZWQuCisKK1dlYkluc3BlY3Rv
ci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzUXVldWUgPSBbXTsKKworV2ViSW5zcGVjdG9yLlRl
c3RDb250cm9sbGVyLnByb3RvdHlwZS5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzID0gZnVuY3Rp
b24oY2FsbGJhY2spCit7CisgICAgV2ViSW5zcGVjdG9yLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNo
ZXNRdWV1ZS5wdXNoKGNhbGxiYWNrKTsKK307CisKK1dlYkluc3BlY3Rvci5xdWV1ZXNBcmVFbXB0
eSA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY29weSA9IHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlz
cGF0Y2hlc1F1ZXVlLnNsaWNlKCk7CisgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
UXVldWUgPSBbXTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcHkubGVuZ3RoOyArK2kpCisg
ICAgICAgIGNvcHlbaV0uY2FsbCh0aGlzKTsKK307CisKKyhmdW5jdGlvbigpCit7Cit2YXIgb3Jp
Z2luYWxBZGRUb0ZyYW1lID0gSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmFkZFJlc291cmNlU291cmNl
VG9GcmFtZTsKK0luc3BlY3RvckZyb250ZW5kSG9zdC5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUg
PSBmdW5jdGlvbihpZGVudGlmaWVyLCBlbGVtZW50KQoreworICAgIHZhciByZXNvdXJjZSA9IFdl
Ykluc3BlY3Rvci5yZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgaWYgKCFyZXNvdXJjZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG9yaWdpbmFsQWRkVG9GcmFtZS5jYWxsKHRoaXMsIGlkZW50aWZp
ZXIsIHJlc291cmNlLm1pbWVUeXBlLCBlbGVtZW50KTsKK307Cit9KSgpOworCitXZWJJbnNwZWN0
b3IucGF1c2VkU2NyaXB0ID0gZnVuY3Rpb24oY2FsbEZyYW1lcykKK3sKKyAgICB0aGlzLnBhbmVs
cy5zY3JpcHRzLmRlYnVnZ2VyUGF1c2VkKGNhbGxGcmFtZXMpOworfTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvanMvRGV2VG9vbHNIb3N0U3R1Yi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40OWE5NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9EZXZUb29sc0hvc3RTdHViLmpzCkBAIC0wLDAgKzEsMzA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFRoZXNlIHN0dWJzIGVtdWxhdGUgYmFja2VuZCBmdW5jdGlvbmFsaXR5IGFuZCBhbGxvd3MK
KyAqIERldlRvb2xzIGZyb250ZW5kIHRvIGZ1bmN0aW9uIGFzIGEgc3RhbmRhbG9uZSB3ZWIgYXBw
LgorICovCisKK2lmICghd2luZG93WyJSZW1vdGVEZWJ1Z2dlckFnZW50Il0pIHsKKworLyoqCisg
KiBAY29uc3RydWN0b3IKKyAqLworUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIgPSBmdW5jdGlvbigp
Cit7Cit9OworCisKK1JlbW90ZURlYnVnZ2VyQWdlbnRTdHViLnByb3RvdHlwZS5nZXRDb250ZXh0
SWQgPSBmdW5jdGlvbigpCit7CisgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5zZXRDb250ZXh0SWQo
Myk7Cit9OworCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK1JlbW90ZVByb2ZpbGVyQWdl
bnRTdHViID0gZnVuY3Rpb24oKQoreworfTsKKworCitSZW1vdGVQcm9maWxlckFnZW50U3R1Yi5w
cm90b3R5cGUuZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzID0gZnVuY3Rpb24oKQoreworICAgIFBy
b2ZpbGVyU3R1YkhlbHBlci5HZXRJbnN0YW5jZSgpLmdldEFjdGl2ZVByb2ZpbGVyTW9kdWxlcygp
OworfTsKKworCitSZW1vdGVQcm9maWxlckFnZW50U3R1Yi5wcm90b3R5cGUuZ2V0TG9nTGluZXMg
PSBmdW5jdGlvbihwb3MpCit7CisgICAgUHJvZmlsZXJTdHViSGVscGVyLkdldEluc3RhbmNlKCku
Z2V0TG9nTGluZXMocG9zKTsKK307CisKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworUmVt
b3RlVG9vbHNBZ2VudFN0dWIgPSBmdW5jdGlvbigpCit7Cit9OworCisKK1JlbW90ZVRvb2xzQWdl
bnRTdHViLnByb3RvdHlwZS5kaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQgPSBmdW5jdGlvbigpCit7
Cit9OworCisKK1JlbW90ZVRvb2xzQWdlbnRTdHViLnByb3RvdHlwZS5kaXNwYXRjaE9uSW5zcGVj
dG9yQ29udHJvbGxlciA9IGZ1bmN0aW9uKCkKK3sKK307CisKKworUmVtb3RlVG9vbHNBZ2VudFN0
dWIucHJvdG90eXBlLmV4ZWN1dGVWb2lkSmF2YVNjcmlwdCA9IGZ1bmN0aW9uKCkKK3sKK307CisK
KworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworUHJvZmlsZXJTdHViSGVscGVyID0gZnVuY3Rp
b24oKQoreworICAgIHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyA9IGRldnRvb2xzLlByb2Zp
bGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9OT05FOworICAgIHRoaXMu
aGVhcFByb2ZTYW1wbGVfID0gMDsKKyAgICB0aGlzLmxvZ18gPSAnJzsKK307CisKKworUHJvZmls
ZXJTdHViSGVscGVyLkdldEluc3RhbmNlID0gZnVuY3Rpb24oKQoreworICAgIGlmICghUHJvZmls
ZXJTdHViSGVscGVyLmluc3RhbmNlXykKKyAgICAgICAgUHJvZmlsZXJTdHViSGVscGVyLmluc3Rh
bmNlXyA9IG5ldyBQcm9maWxlclN0dWJIZWxwZXIoKTsKKyAgICByZXR1cm4gUHJvZmlsZXJTdHVi
SGVscGVyLmluc3RhbmNlXzsKK307CisKKworUHJvZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5T
dG9wUHJvZmlsaW5nID0gZnVuY3Rpb24obW9kdWxlcykKK3sKKyAgICB0aGlzLmFjdGl2ZVByb2Zp
bGVyTW9kdWxlc18gJj0gfm1vZHVsZXM7Cit9OworCisKK1Byb2ZpbGVyU3R1YkhlbHBlci5wcm90
b3R5cGUuU3RhcnRQcm9maWxpbmcgPSBmdW5jdGlvbihtb2R1bGVzKQoreworICAgIHZhciBwcm9m
TW9kdWxlcyA9IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzOworICAgIGlm
IChtb2R1bGVzICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0hFQVBfU05BUFNIT1QpIHsK
KyAgICAgICAgaWYgKG1vZHVsZXMgJiBwcm9mTW9kdWxlcy5QUk9GSUxFUl9NT0RVTEVfSEVBUF9T
VEFUUykgeworICAgICAgICAgICAgdGhpcy5sb2dfICs9CisgICAgICAgICAgICAgICAgJ2hlYXAt
c2FtcGxlLWJlZ2luLCJIZWFwIiwiYWxsb2NhdGVkIiwnICsKKyAgICAgICAgICAgICAgICAgICAg
KG5ldyBEYXRlKCkpLmdldFRpbWUoKSArICdcbicgKworICAgICAgICAgICAgICAgICdoZWFwLXNh
bXBsZS1zdGF0cywiSGVhcCIsImFsbG9jYXRlZCIsMTAwMDAsMTAwMFxuJzsKKyAgICAgICAgICAg
IHRoaXMubG9nXyArPQorICAgICAgICAgICAgICAgICdoZWFwLXNhbXBsZS1pdGVtLFNUUklOR19U
WVBFLDEwMCwxMDAwXG4nICsKKyAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxDT0RF
X1RZUEUsMTAsMjAwXG4nICsKKyAgICAgICAgICAgICAgICAnaGVhcC1zYW1wbGUtaXRlbSxNQVBf
VFlQRSwyMCwzNTBcbic7CisgICAgICAgICAgICB0aGlzLmxvZ18gKz0gUHJvZmlsZXJTdHViSGVs
cGVyLkhlYXBTYW1wbGVzW3RoaXMuaGVhcFByb2ZTYW1wbGVfKytdOworICAgICAgICAgICAgdGhp
cy5oZWFwUHJvZlNhbXBsZV8gJT0gUHJvZmlsZXJTdHViSGVscGVyLkhlYXBTYW1wbGVzLmxlbmd0
aDsKKyAgICAgICAgICAgIHRoaXMubG9nXyArPSAnaGVhcC1zYW1wbGUtZW5kLCJIZWFwIiwiYWxs
b2NhdGVkIlxuJzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtb2R1bGVz
ICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0NQVSkKKyAgICAgICAgICAgIHRoaXMubG9n
XyArPSBQcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXI7CisgICAgICAgIHRoaXMu
YWN0aXZlUHJvZmlsZXJNb2R1bGVzXyB8PSBtb2R1bGVzOworICAgIH0KK307CisKKworUHJvZmls
ZXJTdHViSGVscGVyLnByb3RvdHlwZS5nZXRBY3RpdmVQcm9maWxlck1vZHVsZXMgPSBmdW5jdGlv
bigpCit7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIFJlbW90ZVByb2ZpbGVyQWdlbnQuZGlkR2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVz
KHNlbGYuYWN0aXZlUHJvZmlsZXJNb2R1bGVzXyk7CisgICAgfSwgMTAwKTsKK307CisKKworUHJv
ZmlsZXJTdHViSGVscGVyLnByb3RvdHlwZS5nZXRMb2dMaW5lcyA9IGZ1bmN0aW9uKHBvcykKK3sK
KyAgICB2YXIgcHJvZk1vZHVsZXMgPSBkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9k
dWxlczsKKyAgICB2YXIgbG9nTGluZXMgPSB0aGlzLmxvZ18uc3Vic3RyKHBvcyk7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgUmVtb3RlUHJvZmlsZXJBZ2VudC5kaWRHZXRM
b2dMaW5lcyhwb3MgKyBsb2dMaW5lcy5sZW5ndGgsIGxvZ0xpbmVzKTsKKyAgICB9LCAxMDApOwor
fTsKKworCitQcm9maWxlclN0dWJIZWxwZXIuUHJvZmlsZXJMb2dCdWZmZXIgPQorICAgICdwcm9m
aWxlcixiZWdpbiwxXG4nICsKKyAgICAncHJvZmlsZXIscmVzdW1lXG4nICsKKyAgICAnY29kZS1j
cmVhdGlvbixMYXp5Q29tcGlsZSwweDEwMDAsMjU2LCJ0ZXN0MSBodHRwOi8vYWFhLmpzOjEiXG4n
ICsKKyAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDIwMDAsMjU2LCJ0ZXN0MiBodHRw
Oi8vYmJiLmpzOjIiXG4nICsKKyAgICAnY29kZS1jcmVhdGlvbixMYXp5Q29tcGlsZSwweDMwMDAs
MjU2LCJ0ZXN0MyBodHRwOi8vY2NjLmpzOjMiXG4nICsKKyAgICAndGljaywweDEwMTAsMHgwLDNc
bicgKworICAgICd0aWNrLDB4MjAyMCwweDAsMywweDEwMTBcbicgKworICAgICd0aWNrLDB4MjAy
MCwweDAsMywweDEwMTBcbicgKworICAgICd0aWNrLDB4MzAxMCwweDAsMywweDIwMjAsIDB4MTAx
MFxuJyArCisgICAgJ3RpY2ssMHgyMDIwLDB4MCwzLDB4MTAxMFxuJyArCisgICAgJ3RpY2ssMHgy
MDMwLDB4MCwzLDB4MjAyMCwgMHgxMDEwXG4nICsKKyAgICAndGljaywweDIwMjAsMHgwLDMsMHgx
MDEwXG4nICsKKyAgICAndGljaywweDEwMTAsMHgwLDNcbicgKworICAgICdwcm9maWxlcixwYXVz
ZVxuJzsKKworCitQcm9maWxlclN0dWJIZWxwZXIuSGVhcFNhbXBsZXMgPSBbCisgICAgJ2hlYXAt
anMtY29ucy1pdGVtLGZvbywxLDEwMFxuJyArCisgICAgJ2hlYXAtanMtY29ucy1pdGVtLGJhciwy
MCwyMDAwXG4nICsKKyAgICAnaGVhcC1qcy1jb25zLWl0ZW0sT2JqZWN0LDUsMTAwXG4nICsKKyAg
ICAnaGVhcC1qcy1yZXQtaXRlbSxmb28sYmFyOzNcbicgKworICAgICdoZWFwLWpzLXJldC1pdGVt
LGJhcixmb287NVxuJyArCisgICAgJ2hlYXAtanMtcmV0LWl0ZW0sT2JqZWN0OjB4MTIzNCwocm9v
dHMpOzFcbicsCisKKyAgICAnaGVhcC1qcy1jb25zLWl0ZW0sZm9vLDIwMDAsMjAwMDAwXG4nICsK
KyAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDEwLDEwMDBcbicgKworICAgICdoZWFwLWpzLWNv
bnMtaXRlbSxPYmplY3QsNiwxMjBcbicgKworICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxiYXI7
NyxPYmplY3Q6MHgxMjM0OzEwXG4nICsKKyAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9vOzEw
LE9iamVjdDoweDEyMzQ7MTBcbicgKworICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEy
MzQsKHJvb3RzKTsxXG4nLAorCisgICAgJ2hlYXAtanMtY29ucy1pdGVtLGZvbywxNSwxNTAwXG4n
ICsKKyAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDE1LDE1MDBcbicgKworICAgICdoZWFwLWpz
LWNvbnMtaXRlbSxPYmplY3QsNSwxMDBcbicgKworICAgICdoZWFwLWpzLWNvbnMtaXRlbSxBcnJh
eSwzLDEwMDBcbicgKworICAgICdoZWFwLWpzLXJldC1pdGVtLGZvbyxiYXI7MyxBcnJheToweDU2
Nzg7MVxuJyArCisgICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGZvbzs1LE9iamVjdDoweDEyMzQ7
OCxPYmplY3Q6MHg1Njc4OzJcbicgKworICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEy
MzQsKHJvb3RzKTsxLE9iamVjdDoweDU2Nzg7MlxuJyArCisgICAgJ2hlYXAtanMtcmV0LWl0ZW0s
T2JqZWN0OjB4NTY3OCwoZ2xvYmFsIHByb3BlcnR5KTszLE9iamVjdDoweDEyMzQ7NVxuJyArCisg
ICAgJ2hlYXAtanMtcmV0LWl0ZW0sQXJyYXk6MHg1Njc4LChnbG9iYWwgcHJvcGVydHkpOzMsQXJy
YXk6MHg1Njc4OzJcbicsCisKKyAgICAnaGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicg
KworICAgICdoZWFwLWpzLWNvbnMtaXRlbSxPYmplY3QsNiwxMjBcbicgKworICAgICdoZWFwLWpz
LXJldC1pdGVtLGJhcixmb287NSxPYmplY3Q6MHgxMjM0OzEsT2JqZWN0OjB4MTIzNTszXG4nICsK
KyAgICAnaGVhcC1qcy1yZXQtaXRlbSxPYmplY3Q6MHgxMjM0LChnbG9iYWwgcHJvcGVydHkpOzNc
bicgKworICAgICdoZWFwLWpzLXJldC1pdGVtLE9iamVjdDoweDEyMzUsKGdsb2JhbCBwcm9wZXJ0
eSk7NVxuJywKKworICAgICdoZWFwLWpzLWNvbnMtaXRlbSxmb28sMTUsMTUwMFxuJyArCisgICAg
J2hlYXAtanMtY29ucy1pdGVtLGJhciwxNSwxNTAwXG4nICsKKyAgICAnaGVhcC1qcy1jb25zLWl0
ZW0sQXJyYXksMTAsMTAwMFxuJyArCisgICAgJ2hlYXAtanMtcmV0LWl0ZW0sZm9vLGJhcjsxLEFy
cmF5OjB4NTY3ODsxXG4nICsKKyAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXIsZm9vOzVcbicgKwor
ICAgICdoZWFwLWpzLXJldC1pdGVtLEFycmF5OjB4NTY3OCwocm9vdHMpOzNcbicsCisKKyAgICAn
aGVhcC1qcy1jb25zLWl0ZW0sYmFyLDIwLDIwMDBcbicgKworICAgICdoZWFwLWpzLWNvbnMtaXRl
bSxiYXosMTUsMTUwMFxuJyArCisgICAgJ2hlYXAtanMtcmV0LWl0ZW0sYmFyLGJhejszXG4nICsK
KyAgICAnaGVhcC1qcy1yZXQtaXRlbSxiYXosYmFyOzNcbicKK107CisKKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqLworUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3JTdHViID0gZnVuY3Rp
b24oKQoreworfTsKKworCitSZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvclN0dWIucHJvdG90
eXBlLkRlYnVnZ2VyQ29tbWFuZCA9IGZ1bmN0aW9uKGNtZCkKK3sKKyAgICBpZiAoJ3sic2VxIjoy
LCJ0eXBlIjoicmVxdWVzdCIsImNvbW1hbmQiOiJzY3JpcHRzIiwiYXJndW1lbnRzIjp7ImluY2x1
ZGVTb3VyY2UiOmZhbHNlfX0nID09PSBjbWQpIHsKKyAgICAgICAgdmFyIHJlc3BvbnNlMSA9Cisg
ICAgICAgICAgICAneyJzZXEiOjUsInJlcXVlc3Rfc2VxIjoyLCJ0eXBlIjoicmVzcG9uc2UiLCJj
b21tYW5kIjoic2NyaXB0cyIsIicgKworICAgICAgICAgICAgJ3N1Y2Nlc3MiOnRydWUsImJvZHki
Olt7ImhhbmRsZSI6NjEsInR5cGUiOiJzY3JpcHQiLCJuYW1lIjoiJyArCisgICAgICAgICAgICAn
aHR0cDovL3d3dy9+dGVzdC90LmpzIiwiaWQiOjU5LCJsaW5lT2Zmc2V0IjowLCJjb2x1bW5PZmZz
ZXQiOjAsJyArCisgICAgICAgICAgICAnImxpbmVDb3VudCI6MSwic291cmNlU3RhcnQiOiJmdW5j
dGlvbiBmaWIobikgeyIsInNvdXJjZUxlbmd0aCI6MzAwLCcgKworICAgICAgICAgICAgJyJzY3Jp
cHRUeXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsicmVmIjo2MH19XSwicmVm
cyI6W3snICsKKyAgICAgICAgICAgICciaGFuZGxlIjo2MCwidHlwZSI6ImNvbnRleHQiLCJkYXRh
IjoicGFnZSwzIn1dLCJydW5uaW5nIjpmYWxzZX0nOworICAgICAgICB0aGlzLnNlbmRSZXNwb25z
ZV8ocmVzcG9uc2UxKTsKKyAgICB9IGVsc2UgaWYgKCd7InNlcSI6MywidHlwZSI6InJlcXVlc3Qi
LCJjb21tYW5kIjoic2NyaXB0cyIsImFyZ3VtZW50cyI6eyJpZHMiOls1OV0sImluY2x1ZGVTb3Vy
Y2UiOnRydWV9fScgPT09IGNtZCkgeworICAgICAgICB0aGlzLnNlbmRSZXNwb25zZV8oCisgICAg
ICAgICAgICAneyJzZXEiOjgsInJlcXVlc3Rfc2VxIjozLCJ0eXBlIjoicmVzcG9uc2UiLCJjb21t
YW5kIjoic2NyaXB0cyIsJyArCisgICAgICAgICAgICAnInN1Y2Nlc3MiOnRydWUsImJvZHkiOlt7
ImhhbmRsZSI6MSwidHlwZSI6InNjcmlwdCIsIm5hbWUiOicgKworICAgICAgICAgICAgJyJodHRw
Oi8vd3d3L350ZXN0L3QuanMiLCJpZCI6NTksImxpbmVPZmZzZXQiOjAsImNvbHVtbk9mZnNldCI6
MCwnICsKKyAgICAgICAgICAgICcibGluZUNvdW50IjoxLCJzb3VyY2UiOiJmdW5jdGlvbiBmaWIo
bikge3JldHVybiBuKzE7fSIsJyArCisgICAgICAgICAgICAnInNvdXJjZUxlbmd0aCI6MjQ0LCJz
Y3JpcHRUeXBlIjoyLCJjb21waWxhdGlvblR5cGUiOjAsImNvbnRleHQiOnsnICsKKyAgICAgICAg
ICAgICcicmVmIjowfX1dLCJyZWZzIjpbeyJoYW5kbGUiOjAsInR5cGUiOiJjb250ZXh0IiwiZGF0
YSI6InBhZ2UsM31dLCInICsKKyAgICAgICAgICAgICcicnVubmluZyI6ZmFsc2V9Jyk7CisgICAg
fSBlbHNlIGlmIChjbWQuaW5kZXhPZignImNvbW1hbmQiOiJwcm9maWxlIicpICE9PSAtMSkgewor
ICAgICAgICB2YXIgY21kT2JqID0gSlNPTi5wYXJzZShjbWQpOworICAgICAgICBpZiAoY21kT2Jq
LmFyZ3VtZW50cy5jb21tYW5kID09PSAicmVzdW1lIikKKyAgICAgICAgICAgIFByb2ZpbGVyU3R1
YkhlbHBlci5HZXRJbnN0YW5jZSgpLlN0YXJ0UHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5hcmd1
bWVudHMubW9kdWxlcykpOworICAgICAgICBlbHNlIGlmIChjbWRPYmouYXJndW1lbnRzLmNvbW1h
bmQgPT09ICJwYXVzZSIpCisgICAgICAgICAgICBQcm9maWxlclN0dWJIZWxwZXIuR2V0SW5zdGFu
Y2UoKS5TdG9wUHJvZmlsaW5nKHBhcnNlSW50KGNtZE9iai5hcmd1bWVudHMubW9kdWxlcykpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWJ1Z1ByaW50KCJVbmV4cGVjdGVkIHByb2ZpbGUg
Y29tbWFuZDogIiArIGNtZE9iai5hcmd1bWVudHMuY29tbWFuZCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGRlYnVnUHJpbnQoIlVuZXhwZWN0ZWQgY29tbWFuZDogIiArIGNtZCk7Cit9OworCisKK1Jl
bW90ZURlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yU3R1Yi5wcm90b3R5cGUuRGVidWdnZXJQYXVzZVNj
cmlwdCA9IGZ1bmN0aW9uKCkKK3sKK307CisKKworUmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0
b3JTdHViLnByb3RvdHlwZS5zZW5kUmVzcG9uc2VfID0gZnVuY3Rpb24ocmVzcG9uc2UpCit7Cisg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgUmVtb3RlRGVidWdnZXJBZ2VudC5k
ZWJ1Z2dlck91dHB1dChyZXNwb25zZSk7CisgICAgfSwgMCk7Cit9OworCisKK0RldlRvb2xzSG9z
dFN0dWIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5pc1N0dWIgPSB0cnVlOworfTsKK0RldlRv
b2xzSG9zdFN0dWIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JG
cm9udGVuZEhvc3RTdHViLnByb3RvdHlwZTsKKworCitEZXZUb29sc0hvc3RTdHViLnByb3RvdHlw
ZS5yZXNldCA9IGZ1bmN0aW9uKCkKK3sKK307CisKKworRGV2VG9vbHNIb3N0U3R1Yi5wcm90b3R5
cGUuc2V0dGluZyA9IGZ1bmN0aW9uKCkKK3sKK307CisKKworRGV2VG9vbHNIb3N0U3R1Yi5wcm90
b3R5cGUuc2V0U2V0dGluZyA9IGZ1bmN0aW9uKCkKK3sKK307CisKKword2luZG93WyJSZW1vdGVE
ZWJ1Z2dlckFnZW50Il0gPSBuZXcgUmVtb3RlRGVidWdnZXJBZ2VudFN0dWIoKTsKK3dpbmRvd1si
UmVtb3RlRGVidWdnZXJDb21tYW5kRXhlY3V0b3IiXSA9IG5ldyBSZW1vdGVEZWJ1Z2dlckNvbW1h
bmRFeGVjdXRvclN0dWIoKTsKK3dpbmRvd1siUmVtb3RlUHJvZmlsZXJBZ2VudCJdID0gbmV3IFJl
bW90ZVByb2ZpbGVyQWdlbnRTdHViKCk7Cit3aW5kb3dbIlJlbW90ZVRvb2xzQWdlbnQiXSA9IG5l
dyBSZW1vdGVUb29sc0FnZW50U3R1YigpOworSW5zcGVjdG9yRnJvbnRlbmRIb3N0ID0gbmV3IERl
dlRvb2xzSG9zdFN0dWIoKTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9q
cy9IZWFwUHJvZmlsZXJQYW5lbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSGVhcFByb2Zp
bGVyUGFuZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZjU4MAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvSGVhcFByb2ZpbGVyUGFu
ZWwuanMKQEAgLTAsMCArMSw5NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgSGVhcCBwcm9maWxl
ciBwYW5lbCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCitXZWJJbnNwZWN0b3IuUHJvZmlsZXNQYW5l
bC5wcm90b3R5cGUuYWRkU25hcHNob3QgPSBmdW5jdGlvbihzbmFwc2hvdCkgeworICAgIHNuYXBz
aG90LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTbmFwc2hvdCAlZCIsIHNuYXBzaG90
Lm51bWJlcik7CisgICAgc25hcHNob3QudHlwZUlkID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb2ZpbGVUeXBlLlR5cGVJZDsKKworICAgIHZhciBzbmFwc2hvdHMgPSBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25hcHNob3RzOworICAgIHNuYXBzaG90cy5wdXNoKHNu
YXBzaG90KTsKKworICAgIHNuYXBzaG90Lmxpc3RJbmRleCA9IHNuYXBzaG90cy5sZW5ndGggLSAx
OworCisgICAgaWYgKFdlYkluc3BlY3Rvci5DUFVQcm9maWxlKQorICAgICAgICB0aGlzLmFkZFBy
b2ZpbGVIZWFkZXIoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2ZpbGVUeXBlLlR5cGVJZCwg
c25hcHNob3QpOworICAgIGVsc2UKKyAgICAgICAgdGhpcy5hZGRQcm9maWxlSGVhZGVyKHNuYXBz
aG90KTsKKworICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzbmFwc2hvdCBhZGRl
ZCIpOworfQorCisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFy
ZW50LCBwcm9maWxlKQoreworICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcyk7CisKKyAg
ICB0aGlzLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGVhcC1zbmFwc2hvdC12aWV3Iik7CisKKyAg
ICB0aGlzLnBhcmVudCA9IHBhcmVudDsKKyAgICB0aGlzLnBhcmVudC5hZGRFdmVudExpc3RlbmVy
KCJzbmFwc2hvdCBhZGRlZCIsIHRoaXMuX3VwZGF0ZUJhc2VPcHRpb25zLCB0aGlzKTsKKworICAg
IHRoaXMuc2hvd0NvdW50QXNQZXJjZW50ID0gZmFsc2U7CisgICAgdGhpcy5zaG93U2l6ZUFzUGVy
Y2VudCA9IGZhbHNlOworICAgIHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPSBmYWxzZTsK
KyAgICB0aGlzLnNob3dTaXplRGVsdGFBc1BlcmNlbnQgPSBmYWxzZTsKKworICAgIHRoaXMuY2F0
ZWdvcmllcyA9IHsKKyAgICAgICAgY29kZTogbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZUNhdGVn
b3J5KCJjb2RlIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb2RlIiksICJyZ2IoMjU1LDEyMSww
KSIpLAorICAgICAgICBkYXRhOiBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlQ2F0ZWdvcnkoImRh
dGEiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdHMiKSwgInJnYig0NywxMDIsMjM2KSIp
CisgICAgfTsKKworICAgIHZhciBzdW1tYXJ5Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisgICAgc3VtbWFyeUNvbnRhaW5lci5pZCA9ICJoZWFwLXNuYXBzaG90LXN1
bW1hcnktY29udGFpbmVyIjsKKworICAgIHRoaXMuY291bnRzU3VtbWFyeUJhciA9IG5ldyBXZWJJ
bnNwZWN0b3IuU3VtbWFyeUJhcih0aGlzLmNhdGVnb3JpZXMpOworICAgIHRoaXMuY291bnRzU3Vt
bWFyeUJhci5lbGVtZW50LmNsYXNzTmFtZSA9ICJoZWFwLXNuYXBzaG90LXN1bW1hcnkiOworICAg
IHRoaXMuY291bnRzU3VtbWFyeUJhci5jYWxjdWxhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U3VtbWFyeUNvdW50Q2FsY3VsYXRvcigpOworICAgIHZhciBjb3VudHNMYWJlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGNvdW50c0xhYmVsLmNsYXNzTmFtZSA9ICJoZWFw
LXNuYXBzaG90LXN1bW1hcnktbGFiZWwiOworICAgIGNvdW50c0xhYmVsLnRleHRDb250ZW50ID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb3VudCIpOworICAgIHRoaXMuY291bnRzU3VtbWFyeUJh
ci5lbGVtZW50LmFwcGVuZENoaWxkKGNvdW50c0xhYmVsKTsKKyAgICBzdW1tYXJ5Q29udGFpbmVy
LmFwcGVuZENoaWxkKHRoaXMuY291bnRzU3VtbWFyeUJhci5lbGVtZW50KTsKKworICAgIHRoaXMu
c2l6ZXNTdW1tYXJ5QmFyID0gbmV3IFdlYkluc3BlY3Rvci5TdW1tYXJ5QmFyKHRoaXMuY2F0ZWdv
cmllcyk7CisgICAgdGhpcy5zaXplc1N1bW1hcnlCYXIuZWxlbWVudC5jbGFzc05hbWUgPSAiaGVh
cC1zbmFwc2hvdC1zdW1tYXJ5IjsKKyAgICB0aGlzLnNpemVzU3VtbWFyeUJhci5jYWxjdWxhdG9y
ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9yKCk7CisgICAgdmFy
IHNpemVzTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOworICAgIHNpemVz
TGFiZWwuY2xhc3NOYW1lID0gImhlYXAtc25hcHNob3Qtc3VtbWFyeS1sYWJlbCI7CisgICAgc2l6
ZXNMYWJlbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2l6ZSIpOworICAg
IHRoaXMuc2l6ZXNTdW1tYXJ5QmFyLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc2l6ZXNMYWJlbCk7Cisg
ICAgc3VtbWFyeUNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNpemVzU3VtbWFyeUJhci5lbGVt
ZW50KTsKKworICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzdW1tYXJ5Q29udGFpbmVyKTsK
KworICAgIHZhciBjb2x1bW5zID0geyAiY29ucyI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiQ29uc3RydWN0b3IiKSwgZGlzY2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICAgICAgImNvdW50IjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDb3VudCIpLCB3aWR0aDogIjU0cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgICAgICAic2l6ZSI6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2l6ZSIp
LCB3aWR0aDogIjcycHgiLCBzb3J0OiAiZGVzY2VuZGluZyIsIHNvcnRhYmxlOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgICAgICJjb3VudERlbHRhIjogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJceGIxIENvdW50IiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgICAgICJzaXplRGVsdGEiOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIlx4YjEgU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTogdHJ1ZSB9IH07CisK
KyAgICB0aGlzLmRhdGFHcmlkID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhR3JpZChjb2x1bW5zKTsK
KyAgICB0aGlzLmRhdGFHcmlkLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRpbmcgY2hhbmdlZCIsIHRo
aXMuX3NvcnREYXRhLCB0aGlzKTsKKyAgICB0aGlzLmRhdGFHcmlkLmVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duSW5EYXRhR3JpZC5iaW5kKHRoaXMp
LCB0cnVlKTsKKyAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5kYXRhR3JpZC5lbGVt
ZW50KTsKKworICAgIHRoaXMucHJvZmlsZSA9IHByb2ZpbGU7CisKKyAgICB0aGlzLmJhc2VTZWxl
Y3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgICAgdGhpcy5i
YXNlU2VsZWN0RWxlbWVudC5jbGFzc05hbWUgPSAic3RhdHVzLWJhci1pdGVtIjsKKyAgICB0aGlz
LmJhc2VTZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuX2NoYW5n
ZUJhc2UuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX3VwZGF0ZUJhc2VPcHRpb25zKCk7
CisgICAgaWYgKHRoaXMucHJvZmlsZS5saXN0SW5kZXggPiAwKQorICAgICAgICB0aGlzLmJhc2VT
ZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSB0aGlzLnByb2ZpbGUubGlzdEluZGV4IC0gMTsK
KyAgICBlbHNlCisgICAgICAgIHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9
IHRoaXMucHJvZmlsZS5saXN0SW5kZXg7CisgICAgdGhpcy5fcmVzZXREYXRhR3JpZExpc3QoKTsK
KworICAgIHRoaXMucGVyY2VudEJ1dHRvbiA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdHVzQmFyQnV0
dG9uKCIiLCAicGVyY2VudC10aW1lLXN0YXR1cy1iYXItaXRlbSBzdGF0dXMtYmFyLWl0ZW0iKTsK
KyAgICB0aGlzLnBlcmNlbnRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9w
ZXJjZW50Q2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLnJlZnJlc2goKTsK
KworICAgIHRoaXMuX3VwZGF0ZVBlcmNlbnRCdXR0b24oKTsKK307CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LnByb3RvdHlwZSA9IHsKKworICAgIGdldCBzdGF0dXNCYXJJdGVtcygp
CisgICAgeworICAgICAgICByZXR1cm4gW3RoaXMuYmFzZVNlbGVjdEVsZW1lbnQsIHRoaXMucGVy
Y2VudEJ1dHRvbi5lbGVtZW50XTsKKyAgICB9LAorCisgICAgZ2V0IHByb2ZpbGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2ZpbGU7CisgICAgfSwKKworICAgIHNldCBwcm9maWxl
KHByb2ZpbGUpCisgICAgeworICAgICAgICB0aGlzLl9wcm9maWxlID0gcHJvZmlsZTsKKyAgICB9
LAorCisgICAgc2hvdzogZnVuY3Rpb24ocGFyZW50RWxlbWVudCkKKyAgICB7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5zaG93LmNhbGwodGhpcywgcGFyZW50RWxlbWVudCk7
CisgICAgICAgIHRoaXMuZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7CisgICAgfSwKKworICAgIGhp
ZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlw
ZS5oaWRlLmNhbGwodGhpcyk7CisgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRl
eCA9IC0xOworICAgIH0sCisKKyAgICByZXNpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLmRhdGFHcmlkKQorICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC51cGRhdGVXaWR0
aHMoKTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy5kYXRhR3JpZC5yZW1vdmVDaGlsZHJlbigpOworCisgICAgICAgIHZhciBjaGlsZHJlbiA9
IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QuY2hpbGRyZW47CisgICAgICAgIHZhciBjb3VudCA9
IGNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGNv
dW50OyArK2luZGV4KQorICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5hcHBlbmRDaGlsZChjaGls
ZHJlbltpbmRleF0pOworCisgICAgICAgIHRoaXMuX3VwZGF0ZVN1bW1hcnlHcmFwaCgpOworICAg
IH0sCisKKyAgICByZWZyZXNoU2hvd0FzUGVyY2VudHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3VwZGF0ZVBlcmNlbnRCdXR0b24oKTsKKyAgICAgICAgdGhpcy5yZWZyZXNoVmlz
aWJsZURhdGEoKTsKKyAgICB9LAorCisgICAgX2RlbGV0ZVNlYXJjaE1hdGNoZWRGbGFnczogZnVu
Y3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBub2RlLl9zZWFyY2hNYXRjaGVkQ29u
c0NvbHVtbjsKKyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbjsK
KyAgICAgICAgZGVsZXRlIG5vZGUuX3NlYXJjaE1hdGNoZWRTaXplQ29sdW1uOworICAgICAgICBk
ZWxldGUgbm9kZS5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1bW47CisgICAgICAgIGRlbGV0
ZSBub2RlLl9zZWFyY2hNYXRjaGVkU2l6ZURlbHRhQ29sdW1uOworICAgIH0sCisKKyAgICBzZWFy
Y2hDYW5jZWxlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFJl
c3VsdHMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VhcmNoUmVz
dWx0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBwcm9maWxlTm9kZSA9IHRo
aXMuX3NlYXJjaFJlc3VsdHNbaV0ucHJvZmlsZU5vZGU7CisgICAgICAgICAgICAgICAgdGhpcy5f
ZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzKHByb2ZpbGVOb2RlKTsKKyAgICAgICAgICAgICAgICBw
cm9maWxlTm9kZS5yZWZyZXNoKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBkZWxldGUgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjazsKKyAgICAgICAgdGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CisgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMg
PSBbXTsKKyAgICB9LAorCisgICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnksIGZpbmlz
aGVkQ2FsbGJhY2spCisgICAgeworICAgICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNl
IGl0IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFy
Y2guCisgICAgICAgIHRoaXMuc2VhcmNoQ2FuY2VsZWQoKTsKKworICAgICAgICBxdWVyeSA9IHF1
ZXJ5LnRyaW1XaGl0ZXNwYWNlKCk7CisKKyAgICAgICAgaWYgKCFxdWVyeS5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fc2VhcmNoRmluaXNoZWRDYWxsYmFjayA9
IGZpbmlzaGVkQ2FsbGJhY2s7CisKKyAgICAgICAgdmFyIGhlbHBlciA9IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlcjsKKworICAgICAgICB2YXIgb3BlcmF0aW9uQW5k
TnVtYmVyID0gaGVscGVyLnBhcnNlT3BlcmF0aW9uQW5kTnVtYmVyKHF1ZXJ5KTsKKyAgICAgICAg
dmFyIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFuZE51bWJlclswXTsKKyAgICAgICAgdmFyIHF1ZXJ5
TnVtYmVyID0gb3BlcmF0aW9uQW5kTnVtYmVyWzFdOworCisgICAgICAgIHZhciBwZXJjZW50VW5p
dHMgPSBoZWxwZXIucGVyY2VudHMudGVzdChxdWVyeSk7CisgICAgICAgIHZhciBtZWdhQnl0ZXNV
bml0cyA9IGhlbHBlci5tZWdhQnl0ZXMudGVzdChxdWVyeSk7CisgICAgICAgIHZhciBraWxvQnl0
ZXNVbml0cyA9IGhlbHBlci5raWxvQnl0ZXMudGVzdChxdWVyeSk7CisgICAgICAgIHZhciBieXRl
c1VuaXRzID0gaGVscGVyLmJ5dGVzLnRlc3QocXVlcnkpOworCisgICAgICAgIHZhciBxdWVyeU51
bWJlckJ5dGVzID0gKG1lZ2FCeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICogMTAyNCAqIDEwMjQp
IDogKGtpbG9CeXRlc1VuaXRzID8gKHF1ZXJ5TnVtYmVyICogMTAyNCkgOiBxdWVyeU51bWJlcikp
OworCisgICAgICAgIGZ1bmN0aW9uIG1hdGNoZXNRdWVyeShoZWFwU25hcHNob3REYXRhR3JpZE5v
ZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3
LnByb3RvdHlwZS5fZGVsZXRlU2VhcmNoTWF0Y2hlZEZsYWdzKGhlYXBTbmFwc2hvdERhdGFHcmlk
Tm9kZSk7CisKKyAgICAgICAgICAgIGlmIChwZXJjZW50VW5pdHMpIHsKKyAgICAgICAgICAgICAg
ICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbiA9IG9w
ZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnRQZXJjZW50LCBxdWVyeU51bWJl
cik7CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRj
aGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZVBl
cmNlbnQsIHF1ZXJ5TnVtYmVyKTsKKyAgICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3Jp
ZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFw
c2hvdERhdGFHcmlkTm9kZS5jb3VudERlbHRhUGVyY2VudCwgcXVlcnlOdW1iZXIpOworICAgICAg
ICAgICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0
YUNvbHVtbiA9IG9wZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZURlbHRhUGVy
Y2VudCwgcXVlcnlOdW1iZXIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtZWdhQnl0ZXNVbml0
cyB8fCBraWxvQnl0ZXNVbml0cyB8fCBieXRlc1VuaXRzKSB7CisgICAgICAgICAgICAgICAgaGVh
cFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVtbiA9IG9wZXJhdGlv
bihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuc2l6ZSwgcXVlcnlOdW1iZXJCeXRlcyk7CisgICAg
ICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkU2l6ZURl
bHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5zaXplRGVsdGEs
IHF1ZXJ5TnVtYmVyQnl0ZXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3VudENvbHVtbiA9IG9w
ZXJhdGlvbihoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuY291bnQsIHF1ZXJ5TnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb3Vu
dERlbHRhQ29sdW1uID0gb3BlcmF0aW9uKGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5jb3VudERl
bHRhLCBxdWVyeU51bWJlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChoZWFw
U25hcHNob3REYXRhR3JpZE5vZGUuY29uc3RydWN0b3JOYW1lLmhhc1N1YnN0cmluZyhxdWVyeSwg
dHJ1ZSkpCisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hN
YXRjaGVkQ29uc0NvbHVtbiA9IHRydWU7CisKKyAgICAgICAgICAgIGlmIChoZWFwU25hcHNob3RE
YXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRDb25zQ29sdW1uIHx8CisgICAgICAgICAgICAgICAg
aGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFyY2hNYXRjaGVkQ291bnRDb2x1bW4gfHwKKyAg
ICAgICAgICAgICAgICBoZWFwU25hcHNob3REYXRhR3JpZE5vZGUuX3NlYXJjaE1hdGNoZWRTaXpl
Q29sdW1uIHx8CisgICAgICAgICAgICAgICAgaGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLl9zZWFy
Y2hNYXRjaGVkQ291bnREZWx0YUNvbHVtbiB8fAorICAgICAgICAgICAgICAgIGhlYXBTbmFwc2hv
dERhdGFHcmlkTm9kZS5fc2VhcmNoTWF0Y2hlZFNpemVEZWx0YUNvbHVtbikgeworICAgICAgICAg
ICAgICAgIGhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZS5yZWZyZXNoKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5zbmFwc2hvdERhdGFH
cmlkTGlzdC5jaGlsZHJlblswXTsKKyAgICAgICAgdmFyIGRlcHRoID0gMDsKKyAgICAgICAgdmFy
IGluZm8gPSB7fTsKKworICAgICAgICAvLyBUaGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IGxldmVs
cyBvZiBoZWFwIHNuYXBzaG90IG5vZGVzIHJlcHJlc2VudCByZXRhaW5lcnMsCisgICAgICAgIC8v
IHNvIHJlY3Vyc2l2ZSBleHBhbnNpb24gd2lsbCBiZSBpbmZpbml0ZSwgc2luY2UgYSBncmFwaCBp
cyBiZWluZyB0cmF2ZXJzZWQuCisgICAgICAgIC8vIFNvIGRlZmF1bHQgdG8gYSByZWN1cnNpb24g
Y2FwIG9mIDIgbGV2ZWxzLgorICAgICAgICB2YXIgbWF4RGVwdGggPSAyOworCisgICAgICAgIHdo
aWxlIChjdXJyZW50KSB7CisgICAgICAgICAgICBpZiAobWF0Y2hlc1F1ZXJ5KGN1cnJlbnQpKQor
ICAgICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMucHVzaCh7IHByb2ZpbGVOb2RlOiBj
dXJyZW50IH0pOworICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQudHJhdmVyc2VOZXh0Tm9k
ZShmYWxzZSwgbnVsbCwgKGRlcHRoID49IG1heERlcHRoKSwgaW5mbyk7CisgICAgICAgICAgICBk
ZXB0aCArPSBpbmZvLmRlcHRoQ2hhbmdlOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoZWRD
YWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7CisgICAgfSwKKworICAg
IGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJv
dG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0LAorICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1
bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJj
aFJlc3VsdCwKKyAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJv
ZmlsZVZpZXcucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQsCisgICAganVtcFRvUHJl
dmlvdXNTZWFyY2hSZXN1bHQ6IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVmlldy5wcm90b3R5cGUu
anVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQsCisgICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0
OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLnNob3dpbmdGaXJzdFNlYXJj
aFJlc3VsdCwKKyAgICBzaG93aW5nTGFzdFNlYXJjaFJlc3VsdDogV2ViSW5zcGVjdG9yLkNQVVBy
b2ZpbGVWaWV3LnByb3RvdHlwZS5zaG93aW5nTGFzdFNlYXJjaFJlc3VsdCwKKyAgICBfanVtcFRv
U2VhcmNoUmVzdWx0OiBXZWJJbnNwZWN0b3IuQ1BVUHJvZmlsZVZpZXcucHJvdG90eXBlLl9qdW1w
VG9TZWFyY2hSZXN1bHQsCisKKyAgICByZWZyZXNoVmlzaWJsZURhdGE6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBjaGlsZCA9IHRoaXMuZGF0YUdyaWQuY2hpbGRyZW5bMF07CisgICAg
ICAgIHdoaWxlIChjaGlsZCkgeworICAgICAgICAgICAgY2hpbGQucmVmcmVzaCgpOworICAgICAg
ICAgICAgY2hpbGQgPSBjaGlsZC50cmF2ZXJzZU5leHROb2RlKGZhbHNlLCBudWxsLCB0cnVlKTsK
KyAgICAgICAgfQorICAgICAgICB0aGlzLl91cGRhdGVTdW1tYXJ5R3JhcGgoKTsKKyAgICB9LAor
CisgICAgX2NoYW5nZUJhc2U6IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5iYXNlU25h
cHNob3QgPT09IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZS5zbmFwc2hvdHNb
dGhpcy5iYXNlU2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4XSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLl9yZXNldERhdGFHcmlkTGlzdCgpOworICAgICAgICB0aGlzLnJl
ZnJlc2goKTsKKworICAgICAgICBpZiAoIXRoaXMuY3VycmVudFF1ZXJ5IHx8ICF0aGlzLl9zZWFy
Y2hGaW5pc2hlZENhbGxiYWNrIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IHNlYXJjaCBuZWVkcyB0byBiZSBwZXJm
b3JtZWQgYWdhaW4uIEZpcnN0IG5lZ2F0ZSBvdXQgcHJldmlvdXMgbWF0Y2gKKyAgICAgICAgLy8g
Y291bnQgYnkgY2FsbGluZyB0aGUgc2VhcmNoIGZpbmlzaGVkIGNhbGxiYWNrIHdpdGggYSBuZWdh
dGl2ZSBudW1iZXIgb2YgbWF0Y2hlcy4KKyAgICAgICAgLy8gVGhlbiBwZXJmb3JtIHRoZSBzZWFy
Y2ggYWdhaW4gd2l0aCB0aGUgc2FtZSBxdWVyeSBhbmQgY2FsbGJhY2suCisgICAgICAgIHRoaXMu
X3NlYXJjaEZpbmlzaGVkQ2FsbGJhY2sodGhpcywgLXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3Ro
KTsKKyAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKHRoaXMuY3VycmVudFF1ZXJ5LCB0aGlzLl9z
ZWFyY2hGaW5pc2hlZENhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZVNuYXBzaG90RGF0
YUdyaWRMaXN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fc25hcHNob3RE
YXRhR3JpZExpc3QpCisgICAgICAgICAgZGVsZXRlIHRoaXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0
OworCisgICAgICAgIHRoaXMuX3NuYXBzaG90RGF0YUdyaWRMaXN0ID0gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QodGhpcywgdGhpcy5iYXNlU25hcHNob3QuZW50cmll
cywgdGhpcy5wcm9maWxlLmVudHJpZXMpOworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3RE
YXRhR3JpZExpc3Q7CisgICAgfSwKKworICAgIF9tb3VzZURvd25JbkRhdGFHcmlkOiBmdW5jdGlv
bihldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC5kZXRhaWwgPCAyKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBjZWxsID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05v
ZGVPclNlbGZXaXRoTm9kZU5hbWUoInRkIik7CisgICAgICAgIGlmICghY2VsbCB8fCAoIWNlbGwu
aGFzU3R5bGVDbGFzcygiY291bnQtY29sdW1uIikgJiYgIWNlbGwuaGFzU3R5bGVDbGFzcygic2l6
ZS1jb2x1bW4iKSAmJiAhY2VsbC5oYXNTdHlsZUNsYXNzKCJjb3VudERlbHRhLWNvbHVtbiIpICYm
ICFjZWxsLmhhc1N0eWxlQ2xhc3MoInNpemVEZWx0YS1jb2x1bW4iKSkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKGNlbGwuaGFzU3R5bGVDbGFzcygiY291bnQtY29sdW1uIikp
CisgICAgICAgICAgICB0aGlzLnNob3dDb3VudEFzUGVyY2VudCA9ICF0aGlzLnNob3dDb3VudEFz
UGVyY2VudDsKKyAgICAgICAgZWxzZSBpZiAoY2VsbC5oYXNTdHlsZUNsYXNzKCJzaXplLWNvbHVt
biIpKQorICAgICAgICAgICAgdGhpcy5zaG93U2l6ZUFzUGVyY2VudCA9ICF0aGlzLnNob3dTaXpl
QXNQZXJjZW50OworICAgICAgICBlbHNlIGlmIChjZWxsLmhhc1N0eWxlQ2xhc3MoImNvdW50RGVs
dGEtY29sdW1uIikpCisgICAgICAgICAgICB0aGlzLnNob3dDb3VudERlbHRhQXNQZXJjZW50ID0g
IXRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQ7CisgICAgICAgIGVsc2UgaWYgKGNlbGwuaGFz
U3R5bGVDbGFzcygic2l6ZURlbHRhLWNvbHVtbiIpKQorICAgICAgICAgICAgdGhpcy5zaG93U2l6
ZURlbHRhQXNQZXJjZW50ID0gIXRoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2VudDsKKworICAgICAg
ICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOworCisgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0sCisKKyAg
ICBnZXQgX2lzU2hvd2luZ0FzUGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5z
aG93Q291bnRBc1BlcmNlbnQgJiYgdGhpcy5zaG93U2l6ZUFzUGVyY2VudCAmJiB0aGlzLnNob3dD
b3VudERlbHRhQXNQZXJjZW50ICYmIHRoaXMuc2hvd1NpemVEZWx0YUFzUGVyY2VudDsKKyAgICB9
LAorCisgICAgX3BlcmNlbnRDbGlja2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAg
IHZhciBjdXJyZW50U3RhdGUgPSB0aGlzLl9pc1Nob3dpbmdBc1BlcmNlbnQ7CisgICAgICAgIHRo
aXMuc2hvd0NvdW50QXNQZXJjZW50ID0gIWN1cnJlbnRTdGF0ZTsKKyAgICAgICAgdGhpcy5zaG93
U2l6ZUFzUGVyY2VudCA9ICFjdXJyZW50U3RhdGU7CisgICAgICAgIHRoaXMuc2hvd0NvdW50RGVs
dGFBc1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOworICAgICAgICB0aGlzLnNob3dTaXplRGVsdGFB
c1BlcmNlbnQgPSAhY3VycmVudFN0YXRlOworICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJj
ZW50cygpOworICAgIH0sCisKKyAgICBfcmVzZXREYXRhR3JpZExpc3Q6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMuYmFzZVNuYXBzaG90ID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFByb2ZpbGVUeXBlLnNuYXBzaG90c1t0aGlzLmJhc2VTZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5k
ZXhdOworICAgICAgICB2YXIgbGFzdENvbXBhcmF0b3IgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGF0YUdyaWRMaXN0LnByb3BlcnR5Q29tcGFyYXRvcigic2l6ZSIsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QpCisgICAgICAgICAgICBsYXN0Q29tcGFy
YXRvciA9IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QubGFzdENvbXBhcmF0b3I7CisgICAgICAg
IHRoaXMuc25hcHNob3REYXRhR3JpZExpc3QgPSB0aGlzLl9jcmVhdGVTbmFwc2hvdERhdGFHcmlk
TGlzdCgpOworICAgICAgICB0aGlzLnNuYXBzaG90RGF0YUdyaWRMaXN0LnNvcnQobGFzdENvbXBh
cmF0b3IsIHRydWUpOworICAgIH0sCisKKyAgICBfc29ydERhdGE6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBzb3J0QXNjZW5kaW5nID0gdGhpcy5kYXRhR3JpZC5zb3J0T3JkZXIgPT09
ICJhc2NlbmRpbmciOworICAgICAgICB2YXIgc29ydENvbHVtbklkZW50aWZpZXIgPSB0aGlzLmRh
dGFHcmlkLnNvcnRDb2x1bW5JZGVudGlmaWVyOworICAgICAgICB2YXIgc29ydFByb3BlcnR5ID0g
eworICAgICAgICAgICAgICAgICJjb25zIjogWyJjb25zdHJ1Y3Rvck5hbWUiLCBudWxsXSwKKyAg
ICAgICAgICAgICAgICAiY291bnQiOiBbImNvdW50IiwgbnVsbF0sCisgICAgICAgICAgICAgICAg
InNpemUiOiBbInNpemUiLCAiY291bnQiXSwKKyAgICAgICAgICAgICAgICAiY291bnREZWx0YSI6
IHRoaXMuc2hvd0NvdW50RGVsdGFBc1BlcmNlbnQgPyBbImNvdW50RGVsdGFQZXJjZW50IiwgbnVs
bF0gOiBbImNvdW50RGVsdGEiLCBudWxsXSwKKyAgICAgICAgICAgICAgICAic2l6ZURlbHRhIjog
dGhpcy5zaG93U2l6ZURlbHRhQXNQZXJjZW50ID8gWyJzaXplRGVsdGFQZXJjZW50IiwgImNvdW50
RGVsdGFQZXJjZW50Il0gOiBbInNpemVEZWx0YSIsICJzaXplRGVsdGFQZXJjZW50Il0KKyAgICAg
ICAgfVtzb3J0Q29sdW1uSWRlbnRpZmllcl07CisKKyAgICAgICAgdGhpcy5zbmFwc2hvdERhdGFH
cmlkTGlzdC5zb3J0KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVy
dHlDb21wYXJhdG9yKHNvcnRQcm9wZXJ0eVswXSwgc29ydFByb3BlcnR5WzFdLCBzb3J0QXNjZW5k
aW5nKSk7CisKKyAgICAgICAgdGhpcy5yZWZyZXNoKCk7CisgICAgfSwKKworICAgIF91cGRhdGVC
YXNlT3B0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGxpc3QgPSBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuc25hcHNob3RzOworICAgICAgICAvLyBXZSdy
ZSBhc3N1bWluZyB0aGF0IHNuYXBzaG90cyBjYW4gb25seSBiZSBhZGRlZC4KKyAgICAgICAgaWYg
KHRoaXMuYmFzZVNlbGVjdEVsZW1lbnQubGVuZ3RoID09PSBsaXN0Lmxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5iYXNlU2VsZWN0RWxlbWVu
dC5sZW5ndGgsIG4gPSBsaXN0Lmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgdmFy
IGJhc2VPcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKKyAgICAgICAg
ICAgIGJhc2VPcHRpb24ubGFiZWwgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbXBhcmVkIHRv
ICVzIiwgbGlzdFtpXS50aXRsZSk7CisgICAgICAgICAgICB0aGlzLmJhc2VTZWxlY3RFbGVtZW50
LmFwcGVuZENoaWxkKGJhc2VPcHRpb24pOworICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRh
dGVQZXJjZW50QnV0dG9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXNT
aG93aW5nQXNQZXJjZW50KSB7CisgICAgICAgICAgICB0aGlzLnBlcmNlbnRCdXR0b24udGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgYWJzb2x1dGUgY291bnRzIGFuZCBzaXplcy4i
KTsKKyAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50b2dnbGVkID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMucGVyY2VudEJ1dHRvbi50aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb3VudHMgYW5kIHNpemVzIGFzIHBlcmNlbnRhZ2VzLiIp
OworICAgICAgICAgICAgdGhpcy5wZXJjZW50QnV0dG9uLnRvZ2dsZWQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICBfdXBkYXRlU3VtbWFyeUdyYXBoOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLmNvdW50c1N1bW1hcnlCYXIuY2FsY3VsYXRvci5zaG93QXNQZXJjZW50
ID0gdGhpcy5faXNTaG93aW5nQXNQZXJjZW50OworICAgICAgICB0aGlzLmNvdW50c1N1bW1hcnlC
YXIudXBkYXRlKHRoaXMucHJvZmlsZS5sb3dsZXZlbHMpOworCisgICAgICAgIHRoaXMuc2l6ZXNT
dW1tYXJ5QmFyLmNhbGN1bGF0b3Iuc2hvd0FzUGVyY2VudCA9IHRoaXMuX2lzU2hvd2luZ0FzUGVy
Y2VudDsKKyAgICAgICAgdGhpcy5zaXplc1N1bW1hcnlCYXIudXBkYXRlKHRoaXMucHJvZmlsZS5s
b3dsZXZlbHMpOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGU7CisKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LlNlYXJjaEhlbHBlciA9IHsKKyAgICAvLyBJbiBjb21w
YXJhdG9ycywgd2UgYXNzdW1lIHRoYXQgYSB2YWx1ZSBmcm9tIGEgbm9kZSBpcyBwYXNzZWQgYXMg
dGhlIGZpcnN0IHBhcmFtZXRlci4KKyAgICBvcGVyYXRpb25zOiB7IExFU1M6IGZ1bmN0aW9uIChh
LCBiKSB7IHJldHVybiBhICE9PSBudWxsICYmIGEgPCBiOyB9LAorICAgICAgICAgICAgICAgICAg
TEVTU19PUl9FUVVBTDogZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgIT09IG51bGwgJiYgYSA8
PSBiOyB9LAorICAgICAgICAgICAgICAgICAgRVFVQUw6IGZ1bmN0aW9uIChhLCBiKSB7IHJldHVy
biBhICE9PSBudWxsICYmIGEgPT09IGI7IH0sCisgICAgICAgICAgICAgICAgICBHUkVBVEVSX09S
X0VRVUFMOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAhPT0gbnVsbCAmJiBhID49IGI7IH0s
CisgICAgICAgICAgICAgICAgICBHUkVBVEVSOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSAh
PT0gbnVsbCAmJiBhID4gYjsgfSB9LAorCisgICAgb3BlcmF0aW9uUGFyc2VyczogeyBMRVNTOiAv
XjwoXGQrKS8sCisgICAgICAgICAgICAgICAgICAgICAgICBMRVNTX09SX0VRVUFMOiAvXjw9KFxk
KykvLAorICAgICAgICAgICAgICAgICAgICAgICAgR1JFQVRFUl9PUl9FUVVBTDogL14+PShcZCsp
LywKKyAgICAgICAgICAgICAgICAgICAgICAgIEdSRUFURVI6IC9ePihcZCspLyB9LAorCisgICAg
cGFyc2VPcGVyYXRpb25BbmROdW1iZXI6IGZ1bmN0aW9uKHF1ZXJ5KQorICAgIHsKKyAgICAgICAg
dmFyIG9wZXJhdGlvbnMgPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5TZWFyY2hIZWxw
ZXIub3BlcmF0aW9uczsKKyAgICAgICAgdmFyIHBhcnNlcnMgPSBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Vmlldy5TZWFyY2hIZWxwZXIub3BlcmF0aW9uUGFyc2VyczsKKyAgICAgICAgZm9yICh2
YXIgb3BlcmF0aW9uIGluIHBhcnNlcnMpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IHF1ZXJ5
Lm1hdGNoKHBhcnNlcnNbb3BlcmF0aW9uXSk7CisgICAgICAgICAgICBpZiAobWF0Y2ggIT09IG51
bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIFtvcGVyYXRpb25zW29wZXJhdGlvbl0sIHBhcnNl
RmxvYXQobWF0Y2hbMV0pXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW29wZXJhdGlvbnMu
RVFVQUwsIHBhcnNlRmxvYXQocXVlcnkpXTsKKyAgICB9LAorCisgICAgcGVyY2VudHM6IC8lJC8s
CisKKyAgICBtZWdhQnl0ZXM6IC9NQiQvaSwKKworICAgIGtpbG9CeXRlczogL0tCJC9pLAorCisg
ICAgYnl0ZXM6IC9CJC9pCit9CisKK1dlYkluc3BlY3Rvci5IZWFwU3VtbWFyeUNhbGN1bGF0b3Ig
PSBmdW5jdGlvbihsb3dMZXZlbEZpZWxkKQoreworICAgIHRoaXMudG90YWwgPSAxOworICAgIHRo
aXMubG93TGV2ZWxGaWVsZCA9IGxvd0xldmVsRmllbGQ7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFw
U3VtbWFyeUNhbGN1bGF0b3IucHJvdG90eXBlID0geworICAgIGNvbXB1dGVTdW1tYXJ5VmFsdWVz
OiBmdW5jdGlvbihsb3dMZXZlbHMpCisgICAgeworICAgICAgICB2YXIgaGlnaExldmVscyA9IHtk
YXRhOiAwLCBjb2RlOiAwfTsKKyAgICAgICAgdGhpcy50b3RhbCA9IDA7CisgICAgICAgIGZvciAo
dmFyIGl0ZW0gaW4gbG93TGV2ZWxzKSB7CisgICAgICAgICAgICB2YXIgaGlnaEl0ZW0gPSB0aGlz
Ll9oaWdoRnJvbUxvdyhpdGVtKTsKKyAgICAgICAgICAgIGlmIChoaWdoSXRlbSkgeworICAgICAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IGxvd0xldmVsc1tpdGVtXVt0aGlzLmxvd0xldmVsRmllbGRd
OworICAgICAgICAgICAgICAgIGhpZ2hMZXZlbHNbaGlnaEl0ZW1dICs9IHZhbHVlOworICAgICAg
ICAgICAgICAgIHRoaXMudG90YWwgKz0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHJlc3VsdCA9IHtjYXRlZ29yeVZhbHVlczogaGlnaExldmVsc307CisgICAg
ICAgIGlmICghdGhpcy5zaG93QXNQZXJjZW50KQorICAgICAgICAgICAgcmVzdWx0LnRvdGFsID0g
dGhpcy50b3RhbDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgZm9ybWF0
VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuc2hvd0FzUGVy
Y2VudCkKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiUuMmYlJSIs
IHZhbHVlIC8gdGhpcy50b3RhbCAqIDEwMC4wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3ZhbHVlVG9TdHJpbmcodmFsdWUpOworICAgIH0sCisKKyAgICBnZXQgc2hv
d0FzUGVyY2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0FzUGVyY2VudDsK
KyAgICB9LAorCisgICAgc2V0IHNob3dBc1BlcmNlbnQoeCkKKyAgICB7CisgICAgICAgIHRoaXMu
X3Nob3dBc1BlcmNlbnQgPSB4OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5
Q291bnRDYWxjdWxhdG9yID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5IZWFwU3Vt
bWFyeUNhbGN1bGF0b3IuY2FsbCh0aGlzLCAiY291bnQiKTsKK30KKworV2ViSW5zcGVjdG9yLkhl
YXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBfaGlnaEZyb21Mb3c6
IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAgICAgaWYgKHR5cGUgPT09ICJDT0RFX1RZUEUiIHx8IHR5
cGUgPT09ICJTSEFSRURfRlVOQ1RJT05fSU5GT19UWVBFIiB8fCB0eXBlID09PSAiU0NSSVBUX1RZ
UEUiKSByZXR1cm4gImNvZGUiOworICAgICAgICBpZiAodHlwZSA9PT0gIlNUUklOR19UWVBFIiB8
fCB0eXBlID09PSAiSEVBUF9OVU1CRVJfVFlQRSIgfHwgdHlwZS5tYXRjaCgvXkpTXy8pKSByZXR1
cm4gImRhdGEiOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX3ZhbHVlVG9T
dHJpbmc6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q291bnRDYWxjdWxhdG9yLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFN1bW1hcnlDYWxjdWxhdG9yLnBy
b3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5U2l6ZUNhbGN1bGF0b3IgPSBmdW5j
dGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTdW1tYXJ5Q2FsY3VsYXRvci5jYWxsKHRo
aXMsICJzaXplIik7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU3VtbWFyeVNpemVDYWxjdWxhdG9y
LnByb3RvdHlwZSA9IHsKKyAgICBfaGlnaEZyb21Mb3c6IGZ1bmN0aW9uKHR5cGUpIHsKKyAgICAg
ICAgaWYgKHR5cGUgPT09ICJDT0RFX1RZUEUiIHx8IHR5cGUgPT09ICJTSEFSRURfRlVOQ1RJT05f
SU5GT19UWVBFIiB8fCB0eXBlID09PSAiU0NSSVBUX1RZUEUiKSByZXR1cm4gImNvZGUiOworICAg
ICAgICBpZiAodHlwZSA9PT0gIlNUUklOR19UWVBFIiB8fCB0eXBlID09PSAiSEVBUF9OVU1CRVJf
VFlQRSIgfHwgdHlwZS5tYXRjaCgvXkpTXy8pIHx8IHR5cGUubWF0Y2goL19BUlJBWV9UWVBFJC8p
KSByZXR1cm4gImRhdGEiOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX3Zh
bHVlVG9TdHJpbmc6IE51bWJlci5ieXRlc1RvU3RyaW5nCit9CisKK1dlYkluc3BlY3Rvci5IZWFw
U3VtbWFyeVNpemVDYWxjdWxhdG9yLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
SGVhcFN1bW1hcnlDYWxjdWxhdG9yLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdFNpZGViYXJUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHNuYXBzaG90KQoreworICAgIHRoaXMu
cHJvZmlsZSA9IHNuYXBzaG90OworCisgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJUcmVlRWxlbWVu
dC5jYWxsKHRoaXMsICJoZWFwLXNuYXBzaG90LXNpZGViYXItdHJlZS1pdGVtIiwgIiIsICIiLCBz
bmFwc2hvdCwgZmFsc2UpOworCisgICAgdGhpcy5yZWZyZXNoVGl0bGVzKCk7Cit9OworCitXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKKyAg
ICBnZXQgbWFpblRpdGxlKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9tYWluVGl0bGUpCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFpblRpdGxlOworICAgICAgICByZXR1cm4gdGhpcy5w
cm9maWxlLnRpdGxlOworICAgIH0sCisKKyAgICBzZXQgbWFpblRpdGxlKHgpCisgICAgeworICAg
ICAgICB0aGlzLl9tYWluVGl0bGUgPSB4OworICAgICAgICB0aGlzLnJlZnJlc2hUaXRsZXMoKTsK
KyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U2lkZWJhclRyZWVFbGVtZW50
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuUHJvZmlsZVNpZGViYXJUcmVlRWxl
bWVudC5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVX
aXRoUmV0YWluZXJzID0gZnVuY3Rpb24ob3duaW5nVHJlZSkKK3sKKyAgICB0aGlzLnRyZWUgPSBv
d25pbmdUcmVlOworCisgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5jYWxsKHRoaXMsIG51
bGwsIHRoaXMuX2hhc1JldGFpbmVycyk7CisKKyAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInBv
cHVsYXRlIiwgdGhpcy5fcG9wdWxhdGUsIHRoaXMpOworfTsKKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlID0geworICAgIGlzRW1w
dHlTZXQ6IGZ1bmN0aW9uKHNldCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIHggaW4gc2V0KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAor
CisgICAgZ2V0IF9oYXNSZXRhaW5lcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICF0aGlzLmlz
RW1wdHlTZXQodGhpcy5yZXRhaW5lcnMpOworICAgIH0sCisKKyAgICBnZXQgX3BhcmVudCgpCisg
ICAgeworICAgICAgICAvLyBGb3IgdG9wLWxldmVsIG5vZGVzLCByZXR1cm4gb3duaW5nIHRyZWUg
YXMgYSBwYXJlbnQsIG5vdCBkYXRhIGdyaWQuCisgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCAh
PT0gdGhpcy5kYXRhR3JpZCA/IHRoaXMucGFyZW50IDogdGhpcy50cmVlOworICAgIH0sCisKKyAg
ICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOworICAgICAgICB0aGlzLnByb2R1Y2VEaWZmKHRoaXMuYmFzZVJldGFpbmVycywgdGhpcy5y
ZXRhaW5lcnMsIGZ1bmN0aW9uKGJhc2VJdGVtLCBzbmFwc2hvdEl0ZW0pIHsKKyAgICAgICAgICAg
IHNlbGYuYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJl
dGFpbmVyTm9kZShzZWxmLnNuYXBzaG90VmlldywgYmFzZUl0ZW0sIHNuYXBzaG90SXRlbSwgc2Vs
Zi50cmVlKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICh0aGlzLl9wYXJlbnQpIHsKKyAg
ICAgICAgICAgIHZhciBjdXJyZW50Q29tcGFyYXRvciA9IHRoaXMuX3BhcmVudC5sYXN0Q29tcGFy
YXRvcjsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Q29tcGFyYXRvcikKKyAgICAgICAgICAgICAg
ICB0aGlzLnNvcnQoY3VycmVudENvbXBhcmF0b3IsIHRydWUpOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3B1bGF0ZSIsIHRoaXMuX3BvcHVsYXRlLCB0
aGlzKTsKKyAgICB9LAorCisgICAgcHJvZHVjZURpZmY6IGZ1bmN0aW9uKGJhc2VFbnRyaWVzLCBj
dXJyZW50RW50cmllcywgY2FsbGJhY2spCisgICAgeworICAgICAgICBmb3IgKHZhciBpdGVtIGlu
IGN1cnJlbnRFbnRyaWVzKQorICAgICAgICAgICAgY2FsbGJhY2soYmFzZUVudHJpZXNbaXRlbV0s
IGN1cnJlbnRFbnRyaWVzW2l0ZW1dKTsKKworICAgICAgICBmb3IgKGl0ZW0gaW4gYmFzZUVudHJp
ZXMpIHsKKyAgICAgICAgICAgIGlmICghKGl0ZW0gaW4gY3VycmVudEVudHJpZXMpKQorICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKGJhc2VFbnRyaWVzW2l0ZW1dLCBudWxsKTsKKyAgICAgICAgfQor
ICAgIH0sCisKKyAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJhdG9yLCBmb3JjZSkgeworICAgICAg
ICBpZiAoIWZvcmNlICYmIHRoaXMubGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5jaGlsZHJlbi5zb3J0KGNvbXBhcmF0b3Ip
OworICAgICAgICB2YXIgY2hpbGRDb3VudCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOworICAgICAg
ICBmb3IgKHZhciBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IGNoaWxkQ291bnQ7ICsrY2hp
bGRJbmRleCkKKyAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bY2hpbGRJbmRleF0uX3JlY2FsY3Vs
YXRlU2libGluZ3MoY2hpbGRJbmRleCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5jaGlsZHJlbi5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5j
aGlsZHJlbltpXTsKKyAgICAgICAgICAgIGlmICghZm9yY2UgJiYgKCFjaGlsZC5leHBhbmRlZCB8
fCBjaGlsZC5sYXN0Q29tcGFyYXRvciA9PT0gY29tcGFyYXRvcikpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBjaGlsZC5zb3J0KGNvbXBhcmF0b3IsIGZvcmNlKTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLmxhc3RDb21wYXJhdG9yID0gY29tcGFyYXRvcjsKKyAgICB9
LAorCisgICAgc2lnbkZvckRlbHRhOiBmdW5jdGlvbihkZWx0YSkgeworICAgICAgICBpZiAoZGVs
dGEgPT09IDApCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIGlmIChkZWx0YSA+IDAp
CisgICAgICAgICAgICByZXR1cm4gIisiOworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBN
YXRoIG1pbnVzIHNpZ24sIHNhbWUgd2lkdGggYXMgcGx1cy4KKyAgICAgICAgICAgIHJldHVybiAi
XHUyMjEyIjsKKyAgICB9LAorCisgICAgc2hvd0RlbHRhQXNQZXJjZW50OiBmdW5jdGlvbih2YWx1
ZSkgeworICAgICAgICBpZiAodmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkKKyAg
ICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIm5ldyIpOworICAgICAgICBl
bHNlIGlmICh2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKQorICAgICAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiZGVsZXRlZCIpOworICAgICAgICBpZiAodmFs
dWUgPiAxMDAwLjApCisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIl
cyA+MTAwMCUlIiwgdGhpcy5zaWduRm9yRGVsdGEodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiJXMlLjJmJSUiLCB0aGlzLnNpZ25Gb3JEZWx0YSh2YWx1ZSks
IE1hdGguYWJzKHZhbHVlKSk7CisgICAgfSwKKworICAgIGdldFRvdGFsQ291bnQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAoIXRoaXMuX2NvdW50KSB7CisgICAgICAgICAgICB0aGlzLl9jb3Vu
dCA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRoaXMuY2hpbGRyZW4ubGVu
Z3RoOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAgIHRoaXMuX2NvdW50ICs9IHRoaXMuY2hp
bGRyZW5baV0uY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvdW50Owor
ICAgIH0sCisKKyAgICBnZXRUb3RhbFNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIXRo
aXMuX3NpemUpIHsKKyAgICAgICAgICAgIHRoaXMuX3NpemUgPSAwOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIG4gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IG47ICsraSkKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zaXplICs9IHRoaXMuY2hpbGRyZW5baV0uc2l6ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTsKKyAgICB9LAorCisgICAgZ2V0IGNvdW50UGVy
Y2VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5jb3VudCAvIHRoaXMuX3BhcmVudC5n
ZXRUb3RhbENvdW50KCkgKiAxMDAuMDsKKyAgICB9LAorCisgICAgZ2V0IHNpemVQZXJjZW50KCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnNpemUgLyB0aGlzLl9wYXJlbnQuZ2V0VG90YWxT
aXplKCkgKiAxMDAuMDsKKyAgICB9LAorCisgICAgZ2V0IGNvdW50RGVsdGFQZXJjZW50KCkKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLmJhc2VDb3VudCA+IDApIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLmNvdW50ID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudERlbHRhIC8g
dGhpcy5iYXNlQ291bnQgKiAxMDAuMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CisgICAgfSwKKworICAgIGdl
dCBzaXplRGVsdGFQZXJjZW50KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmJhc2VTaXplID4g
MCkgeworICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSA+IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuc2l6ZURlbHRhIC8gdGhpcy5iYXNlU2l6ZSAqIDEwMC4wOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklU
WTsKKyAgICB9LAorCisgICAgZ2V0IGRhdGEoKQorICAgIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7
fTsKKworICAgICAgICBkYXRhWyJjb25zIl0gPSB0aGlzLmNvbnN0cnVjdG9yTmFtZTsKKworICAg
ICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd0NvdW50QXNQZXJjZW50KQorICAgICAgICAg
ICAgZGF0YVsiY291bnQiXSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJS4yZiUlIiwgdGhpcy5j
b3VudFBlcmNlbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhWyJjb3VudCJdID0g
dGhpcy5jb3VudDsKKworICAgICAgICBpZiAodGhpcy5zaXplICE9PSBudWxsKSB7CisgICAgICAg
ICAgICBpZiAodGhpcy5zbmFwc2hvdFZpZXcuc2hvd1NpemVBc1BlcmNlbnQpCisgICAgICAgICAg
ICAgICAgZGF0YVsic2l6ZSJdID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlLjJmJSUiLCB0aGlz
LnNpemVQZXJjZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkYXRhWyJz
aXplIl0gPSBOdW1iZXIuYnl0ZXNUb1N0cmluZyh0aGlzLnNpemUpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGRhdGFbInNpemUiXSA9ICIiOworCisgICAgICAgIGlmICh0aGlzLnNuYXBz
aG90Vmlldy5zaG93Q291bnREZWx0YUFzUGVyY2VudCkKKyAgICAgICAgICAgIGRhdGFbImNvdW50
RGVsdGEiXSA9IHRoaXMuc2hvd0RlbHRhQXNQZXJjZW50KHRoaXMuY291bnREZWx0YVBlcmNlbnQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhWyJjb3VudERlbHRhIl0gPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIiVzJWQiLCB0aGlzLnNpZ25Gb3JEZWx0YSh0aGlzLmNvdW50RGVsdGEp
LCBNYXRoLmFicyh0aGlzLmNvdW50RGVsdGEpKTsKKworICAgICAgICBpZiAodGhpcy5zaXplRGVs
dGEgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90Vmlldy5zaG93U2l6
ZURlbHRhQXNQZXJjZW50KQorICAgICAgICAgICAgICAgIGRhdGFbInNpemVEZWx0YSJdID0gdGhp
cy5zaG93RGVsdGFBc1BlcmNlbnQodGhpcy5zaXplRGVsdGFQZXJjZW50KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBkYXRhWyJzaXplRGVsdGEiXSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiJXMlcyIsIHRoaXMuc2lnbkZvckRlbHRhKHRoaXMuc2l6ZURlbHRhKSwgTnVtYmVy
LmJ5dGVzVG9TdHJpbmcoTWF0aC5hYnModGhpcy5zaXplRGVsdGEpKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgZGF0YVsic2l6ZURlbHRhIl0gPSAiIjsKKworICAgICAgICByZXR1cm4g
ZGF0YTsKKyAgICB9LAorCisgICAgY3JlYXRlQ2VsbDogZnVuY3Rpb24oY29sdW1uSWRlbnRpZmll
cikKKyAgICB7CisgICAgICAgIHZhciBjZWxsID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZS5w
cm90b3R5cGUuY3JlYXRlQ2VsbC5jYWxsKHRoaXMsIGNvbHVtbklkZW50aWZpZXIpOworCisgICAg
ICAgIGlmICgoY29sdW1uSWRlbnRpZmllciA9PT0gImNvbnMiICYmIHRoaXMuX3NlYXJjaE1hdGNo
ZWRDb25zQ29sdW1uKSB8fAorICAgICAgICAgICAgKGNvbHVtbklkZW50aWZpZXIgPT09ICJjb3Vu
dCIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZENvdW50Q29sdW1uKSB8fAorICAgICAgICAgICAgKGNv
bHVtbklkZW50aWZpZXIgPT09ICJzaXplIiAmJiB0aGlzLl9zZWFyY2hNYXRjaGVkU2l6ZUNvbHVt
bikgfHwKKyAgICAgICAgICAgIChjb2x1bW5JZGVudGlmaWVyID09PSAiY291bnREZWx0YSIgJiYg
dGhpcy5fc2VhcmNoTWF0Y2hlZENvdW50RGVsdGFDb2x1bW4pIHx8CisgICAgICAgICAgICAoY29s
dW1uSWRlbnRpZmllciA9PT0gInNpemVEZWx0YSIgJiYgdGhpcy5fc2VhcmNoTWF0Y2hlZFNpemVE
ZWx0YUNvbHVtbikpCisgICAgICAgICAgICBjZWxsLmFkZFN0eWxlQ2xhc3MoImhpZ2hsaWdodCIp
OworCisgICAgICAgIHJldHVybiBjZWxsOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlLnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERhdGFHcmlkTm9kZSA9IGZ1bmN0aW9uKHNuYXBzaG90VmlldywgYmFzZUVudHJ5LCBz
bmFwc2hvdEVudHJ5LCBvd25pbmdUcmVlKQoreworICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25h
cHNob3RWaWV3OworCisgICAgaWYgKCFzbmFwc2hvdEVudHJ5KQorICAgICAgICBzbmFwc2hvdEVu
dHJ5ID0geyBjb25zOiBiYXNlRW50cnkuY29ucywgY291bnQ6IDAsIHNpemU6IDAsIHJldGFpbmVy
czoge30gfTsKKyAgICB0aGlzLmNvbnN0cnVjdG9yTmFtZSA9IHNuYXBzaG90RW50cnkuY29uczsK
KyAgICB0aGlzLmNvdW50ID0gc25hcHNob3RFbnRyeS5jb3VudDsKKyAgICB0aGlzLnNpemUgPSBz
bmFwc2hvdEVudHJ5LnNpemU7CisgICAgdGhpcy5yZXRhaW5lcnMgPSBzbmFwc2hvdEVudHJ5LnJl
dGFpbmVyczsKKworICAgIGlmICghYmFzZUVudHJ5KQorICAgICAgICBiYXNlRW50cnkgPSB7IGNv
dW50OiAwLCBzaXplOiAwLCByZXRhaW5lcnM6IHt9IH07CisgICAgdGhpcy5iYXNlQ291bnQgPSBi
YXNlRW50cnkuY291bnQ7CisgICAgdGhpcy5jb3VudERlbHRhID0gdGhpcy5jb3VudCAtIHRoaXMu
YmFzZUNvdW50OworICAgIHRoaXMuYmFzZVNpemUgPSBiYXNlRW50cnkuc2l6ZTsKKyAgICB0aGlz
LnNpemVEZWx0YSA9IHRoaXMuc2l6ZSAtIHRoaXMuYmFzZVNpemU7CisgICAgdGhpcy5iYXNlUmV0
YWluZXJzID0gYmFzZUVudHJ5LnJldGFpbmVyczsKKworICAgIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLmNhbGwodGhpcywgb3duaW5nVHJlZSk7Cit9
OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlV2l0aFJldGFpbmVy
cy5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZExpc3QgPSBm
dW5jdGlvbihzbmFwc2hvdFZpZXcsIGJhc2VFbnRyaWVzLCBzbmFwc2hvdEVudHJpZXMpCit7Cisg
ICAgdGhpcy50cmVlID0gdGhpczsKKyAgICB0aGlzLnNuYXBzaG90VmlldyA9IHNuYXBzaG90Vmll
dzsKKyAgICB0aGlzLmNoaWxkcmVuID0gW107CisgICAgdGhpcy5sYXN0Q29tcGFyYXRvciA9IG51
bGw7CisgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKGJhc2VFbnRyaWVzLCBzbmFwc2hvdEVudHJp
ZXMpOworfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTGlzdC5wcm90b3R5
cGUgPSB7CisgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKQorICAgIHsKKyAgICAgICAg
dGhpcy5pbnNlcnRDaGlsZChjaGlsZCwgdGhpcy5jaGlsZHJlbi5sZW5ndGgpOworICAgIH0sCisK
KyAgICBpbnNlcnRDaGlsZDogZnVuY3Rpb24oY2hpbGQsIGluZGV4KQorICAgIHsKKyAgICAgICAg
dGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTsKKyAgICB9LAorCisgICAgcmVt
b3ZlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBb
XTsKKyAgICB9LAorCisgICAgcG9wdWxhdGVDaGlsZHJlbjogZnVuY3Rpb24oYmFzZUVudHJpZXMs
IHNuYXBzaG90RW50cmllcykKKyAgICB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAg
ICAgdGhpcy5wcm9kdWNlRGlmZihiYXNlRW50cmllcywgc25hcHNob3RFbnRyaWVzLCBmdW5jdGlv
bihiYXNlSXRlbSwgc25hcHNob3RJdGVtKSB7CisgICAgICAgICAgICBzZWxmLmFwcGVuZENoaWxk
KG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGF0YUdyaWROb2RlKHNlbGYuc25hcHNob3RW
aWV3LCBiYXNlSXRlbSwgc25hcHNob3RJdGVtLCBzZWxmKSk7CisgICAgICAgIH0pOworICAgIH0s
CisKKyAgICBwcm9kdWNlRGlmZjogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9k
ZVdpdGhSZXRhaW5lcnMucHJvdG90eXBlLnByb2R1Y2VEaWZmLAorICAgIHNvcnQ6IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5zb3J0
LAorICAgIGdldFRvdGFsQ291bnQ6IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5v
ZGVXaXRoUmV0YWluZXJzLnByb3RvdHlwZS5nZXRUb3RhbENvdW50LAorICAgIGdldFRvdGFsU2l6
ZTogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMucHJv
dG90eXBlLmdldFRvdGFsU2l6ZQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFH
cmlkTGlzdC5wcm9wZXJ0eUNvbXBhcmF0b3JzID0gW3t9LCB7fV07CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REYXRhR3JpZExpc3QucHJvcGVydHlDb21wYXJhdG9yID0gZnVuY3Rpb24ocHJv
cGVydHksIHByb3BlcnR5MiwgaXNBc2NlbmRpbmcpCit7CisgICAgdmFyIHByb3BlcnR5SGFzaCA9
IHByb3BlcnR5ICsgIiMiICsgcHJvcGVydHkyOworICAgIHZhciBjb21wYXJhdG9yID0gdGhpcy5w
cm9wZXJ0eUNvbXBhcmF0b3JzWyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVydHlIYXNoXTsK
KyAgICBpZiAoIWNvbXBhcmF0b3IpIHsKKyAgICAgICAgY29tcGFyYXRvciA9IGZ1bmN0aW9uKGxo
cywgcmhzKSB7CisgICAgICAgICAgICB2YXIgbCA9IGxoc1twcm9wZXJ0eV0sIHIgPSByaHNbcHJv
cGVydHldOworICAgICAgICAgICAgaWYgKChsID09PSBudWxsIHx8IHIgPT09IG51bGwpICYmIHBy
b3BlcnR5MiAhPT0gbnVsbCkKKyAgICAgICAgICAgICAgICBsID0gbGhzW3Byb3BlcnR5Ml0sIHIg
PSByaHNbcHJvcGVydHkyXTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBsIDwgciA/IC0xIDog
KGwgPiByID8gMSA6IDApOworICAgICAgICAgICAgcmV0dXJuIGlzQXNjZW5kaW5nID8gcmVzdWx0
IDogLXJlc3VsdDsKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5wcm9wZXJ0eUNvbXBhcmF0b3Jz
Wyhpc0FzY2VuZGluZyA/IDEgOiAwKV1bcHJvcGVydHlIYXNoXSA9IGNvbXBhcmF0b3I7CisgICAg
fQorICAgIHJldHVybiBjb21wYXJhdG9yOworfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERhdGFHcmlkUmV0YWluZXJOb2RlID0gZnVuY3Rpb24oc25hcHNob3RWaWV3LCBiYXNlRW50cnks
IHNuYXBzaG90RW50cnksIG93bmluZ1RyZWUpCit7CisgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBz
bmFwc2hvdFZpZXc7CisKKyAgICBpZiAoIXNuYXBzaG90RW50cnkpCisgICAgICAgIHNuYXBzaG90
RW50cnkgPSB7IGNvbnM6IGJhc2VFbnRyeS5jb25zLCBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07
CisgICAgdGhpcy5jb25zdHJ1Y3Rvck5hbWUgPSBzbmFwc2hvdEVudHJ5LmNvbnM7CisgICAgdGhp
cy5jb3VudCA9IHNuYXBzaG90RW50cnkuY291bnQ7CisgICAgdGhpcy5yZXRhaW5lcnMgPSB0aGlz
Ll9jYWxjdWxhdGVSZXRhaW5lcnModGhpcy5zbmFwc2hvdFZpZXcucHJvZmlsZSwgc25hcHNob3RF
bnRyeS5jbHVzdGVycyk7CisKKyAgICBpZiAoIWJhc2VFbnRyeSkKKyAgICAgICAgYmFzZUVudHJ5
ID0geyBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07CisgICAgdGhpcy5iYXNlQ291bnQgPSBiYXNl
RW50cnkuY291bnQ7CisgICAgdGhpcy5jb3VudERlbHRhID0gdGhpcy5jb3VudCAtIHRoaXMuYmFz
ZUNvdW50OworICAgIHRoaXMuYmFzZVJldGFpbmVycyA9IHRoaXMuX2NhbGN1bGF0ZVJldGFpbmVy
cyh0aGlzLnNuYXBzaG90Vmlldy5iYXNlU25hcHNob3QsIGJhc2VFbnRyeS5jbHVzdGVycyk7CisK
KyAgICB0aGlzLnNpemUgPSBudWxsOworICAgIHRoaXMuc2l6ZURlbHRhID0gbnVsbDsKKworICAg
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZE5vZGVXaXRoUmV0YWluZXJzLmNhbGwo
dGhpcywgb3duaW5nVHJlZSk7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3Jp
ZFJldGFpbmVyTm9kZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHNpemVQZXJjZW50KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBnZXQgc2l6ZURlbHRhUGVyY2Vu
dCgpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgX2NhbGN1bGF0
ZVJldGFpbmVyczogZnVuY3Rpb24oc25hcHNob3QsIGNsdXN0ZXJzKSB7CisgICAgICAgIHZhciBy
ZXRhaW5lcnMgPSB7fTsKKyAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVNldChjbHVzdGVycykpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yTmFtZSBpbiBzbmFwc2hvdC5lbnRyaWVz
KQorICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdC5lbnRyaWVzW3RoaXMuY29uc3RydWN0
b3JOYW1lXS5yZXRhaW5lcnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJbiBj
YXNlIHdoZW4gYW4gZW50cnkgaXMgcmV0YWluZWQgYnkgY2x1c3RlcnMsIHdlIG5lZWQgdG8gZ2F0
aGVyIHVwIHRoZSBsaXN0CisgICAgICAgICAgICAvLyBvZiByZXRhaW5lcnMgYnkgbWVyZ2luZyBy
ZXRhaW5lcnMgb2YgZXZlcnkgY2x1c3Rlci4KKyAgICAgICAgICAgIC8vIEUuZy4gaGF2aW5nIHN1
Y2ggYSB0cmVlOgorICAgICAgICAgICAgLy8gICBBCisgICAgICAgICAgICAvLyAgICAgT2JqZWN0
OjEgIDEwCisgICAgICAgICAgICAvLyAgICAgICBYICAgICAgIDMKKyAgICAgICAgICAgIC8vICAg
ICAgIFkgICAgICAgNAorICAgICAgICAgICAgLy8gICAgIE9iamVjdDoyICA1CisgICAgICAgICAg
ICAvLyAgICAgICBYICAgICAgIDYKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB3aWxs
IHJlc3VsdCBpbiBhIGZvbGxvd2luZyByZXRhaW5lcnMgbGlzdDogWCA5LCBZIDQuCisgICAgICAg
ICAgICBmb3IgKHZhciBjbHVzdGVyTmFtZSBpbiBjbHVzdGVycykgeworICAgICAgICAgICAgICAg
IGlmIChjbHVzdGVyTmFtZSBpbiBzbmFwc2hvdC5jbHVzdGVycykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgY2x1c3RlclJldGFpbmVycyA9IHNuYXBzaG90LmNsdXN0ZXJzW2NsdXN0ZXJOYW1l
XS5yZXRhaW5lcnM7CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNsdXN0ZXJSZXRhaW5l
ciBpbiBjbHVzdGVyUmV0YWluZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2x1
c3RlclJldGFpbmVyRW50cnkgPSBjbHVzdGVyUmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5lcl07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjbHVzdGVyUmV0YWluZXIgaW4gcmV0YWluZXJz
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRhaW5lcnNbY2x1c3RlclJldGFpbmVy
XSA9IHsgY29uczogY2x1c3RlclJldGFpbmVyRW50cnkuY29ucywgY291bnQ6IDAsIGNsdXN0ZXJz
OiB7fSB9OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluZXJzW2NsdXN0ZXJSZXRhaW5l
cl0uY291bnQgKz0gY2x1c3RlclJldGFpbmVyRW50cnkuY291bnQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHZhciBjbHVzdGVyUmV0YWluZXJDbHVzdGVyIGluIGNsdXN0ZXJSZXRhaW5l
ckVudHJ5LmNsdXN0ZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVyc1tj
bHVzdGVyUmV0YWluZXJdLmNsdXN0ZXJzW2NsdXN0ZXJSZXRhaW5lckNsdXN0ZXJdID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0YWluZXJzOworICAgIH0KK307CisKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3REYXRhR3JpZFJldGFpbmVyTm9kZS5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERhdGFHcmlkTm9kZVdpdGhSZXRhaW5lcnMu
cHJvdG90eXBlOworCisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm9maWxlVHlwZSA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuUHJvZmlsZVR5cGUuY2FsbCh0aGlzLCBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90UHJvZmlsZVR5cGUuVHlwZUlkLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkhFQVAgU05BUFNIT1RTIikpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUuVHlwZUlkID0gIkhFQVAiOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
UHJvZmlsZVR5cGUuc25hcHNob3RzID0gW107CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
cm9maWxlVHlwZS5wcm90b3R5cGUgPSB7CisgICAgZ2V0IGJ1dHRvblRvb2x0aXAoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGFrZSBoZWFwIHNuYXBzaG90
LiIpOworICAgIH0sCisKKyAgICBnZXQgYnV0dG9uU3R5bGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICJoZWFwLXNuYXBzaG90LXN0YXR1cy1iYXItaXRlbSBzdGF0dXMtYmFyLWl0ZW0iOworICAg
IH0sCisKKyAgICBidXR0b25DbGlja2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnRha2VIZWFwU25hcHNob3QoKTsKKyAgICB9LAorCisgICAgZ2V0IHdlbGNv
bWVNZXNzYWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkdldCBhIGhlYXAgc25hcHNob3QgYnkgcHJlc3Npbmc8YnI+dGhlICVzIGJ1dHRvbiBvbiB0aGUg
c3RhdHVzIGJhci4iKTsKKyAgICB9LAorCisgICAgY3JlYXRlU2lkZWJhclRyZWVFbGVtZW50Rm9y
UHJvZmlsZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0g
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTaWRlYmFyVHJlZUVsZW1lbnQocHJvZmlsZSk7
CisgICAgICAgIGVsZW1lbnQuc21hbGwgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
CisgICAgfSwKKworICAgIGNyZWF0ZVZpZXc6IGZ1bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3KFdlYkluc3BlY3Rv
ci5wYW5lbHMucHJvZmlsZXMsIHByb2ZpbGUpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdFByb2ZpbGVUeXBlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3Iu
UHJvZmlsZVR5cGUucHJvdG90eXBlOworCisKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgb3JpZ2lu
YWxDcmVhdGVQYW5lbHMgPSBXZWJJbnNwZWN0b3IuX2NyZWF0ZVBhbmVsczsKKyAgICBXZWJJbnNw
ZWN0b3IuX2NyZWF0ZVBhbmVscyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBvcmlnaW5hbENyZWF0
ZVBhbmVscy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LnBhbmVscy5wcm9maWxlcykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucHJvZmls
ZXMucmVnaXN0ZXJQcm9maWxlVHlwZShuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFByb2Zp
bGVUeXBlKCkpOworICAgIH0KK30pKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L2pzL0luamVjdERpc3BhdGNoLmpzIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNw
YXRjaC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzJjYmEyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9JbmplY3REaXNwYXRjaC5qcwpA
QCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBJbmplY3RzICJpbmplY3RlZCIg
b2JqZWN0IGludG8gdGhlIGluc3BlY3RhYmxlIHBhZ2UuCisgKi8KKworCit2YXIgSW5zcGVjdG9y
Q29udHJvbGxlckRpc3BhdGNoZXIgPSB7fTsKKworLyoqCisgKiBNYWluIGRpc3BhdGNoIG1ldGhv
ZCwgYWxsIGNhbGxzIGZyb20gdGhlIGhvc3QgdG8gSW5zcGVjdG9yQ29udHJvbGxlciBnbworICog
dGhyb3VnaCB0aGlzIG9uZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgRnVuY3Rp
b24gdG8gY2FsbAorICogQHBhcmFtIHtzdHJpbmd9IGpzb25fYXJncyBKU09OLXNlcmlhbGl6ZWQg
Y2FsbCBwYXJhbWV0ZXJzLgorICogQHJldHVybiB7c3RyaW5nfSBKU09OLXNlcmlhbGl6ZWQgcmVz
dWx0IG9mIHRoZSBkaXNwYXRjaGVkIGNhbGwuCisgKi8KK0luc3BlY3RvckNvbnRyb2xsZXJEaXNw
YXRjaGVyLmRpc3BhdGNoID0gZnVuY3Rpb24oZnVuY3Rpb25OYW1lLCBqc29uX2FyZ3MpCit7Cisg
ICAgdmFyIHBhcmFtcyA9IEpTT04ucGFyc2UoanNvbl9hcmdzKTsKKyAgICBJbnNwZWN0b3JCYWNr
ZW5kW2Z1bmN0aW9uTmFtZV0uYXBwbHkoSW5zcGVjdG9yQmFja2VuZCwgcGFyYW1zKTsKK307CisK
Ky8qKgorICogU3BlY2lhbCBjb250cm9sbGVyIG9iamVjdCBmb3IgQVBVIHJlbGF0ZWQgbWVzc2Fn
ZXMuIE91dGdvaW5nIG1lc3NhZ2VzCisgKiBhcmUgc2VudCB0byB0aGlzIG9iamVjdCBpZiB0aGUg
QXB1QWdlbnREaXNwYXRjaGVyIGlzIGVuYWJsZWQuCisgKiovCit2YXIgQXB1QWdlbnREaXNwYXRj
aGVyID0geyBlbmFibGVkIDogZmFsc2UgfTsKKworLyoqCisgKiBEaXNwYXRjaGVzIG1lc3NhZ2Vz
IHRvIEFQVS4gVGhpcyBmaWx0ZXJzIGFuZCB0cmFuc2Zvcm1zCisgKiBvdXRnb2luZyBtZXNzYWdl
cyB0aGF0IGFyZSB1c2VkIGJ5IEFQVS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgbmFtZSBv
ZiB0aGUgZGlzcGF0Y2ggbWV0aG9kLgorICoqLworQXB1QWdlbnREaXNwYXRjaGVyLmRpc3BhdGNo
VG9BcHUgPSBmdW5jdGlvbihtZXRob2QsIGFyZ3MpCit7CisgICAgaWYgKG1ldGhvZCAhPT0gImFk
ZFJlY29yZFRvVGltZWxpbmUiICYmIG1ldGhvZCAhPT0gInVwZGF0ZVJlc291cmNlIiAmJiBtZXRo
b2QgIT09ICJhZGRSZXNvdXJjZSIpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBUT0RPKGtub3J0
b24pOiBUcmFuc2Zvcm0gYXJncyBzbyB0aGV5IGNhbiBiZSB1c2VkCisgICAgLy8gYnkgQVBVLgor
ICAgIERldlRvb2xzQWdlbnRIb3N0LmRpc3BhdGNoVG9BcHUoSlNPTi5zdHJpbmdpZnkoYXJncykp
OworfTsKKworLyoqCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgSW5zcGVjdG9yRnJvbnRlbmQg
Zm9yIHNlcmlhbGl6YXRpb24uCisgKiBXZSBzZXJpYWxpemUgdGhlIGNhbGwgYW5kIHNlbmQgaXQg
dG8gdGhlIGNsaWVudCBvdmVyIHRoZSBJUEMKKyAqIHVzaW5nIGRpc3BhdGNoT3V0IGJvdW5kIG1l
dGhvZC4KKyAqLworZnVuY3Rpb24gZGlzcGF0Y2gobWV0aG9kLCB2YXJfYXJncykgeworICAgIC8v
IEhhbmRsZSBhbGwgbWVzc2FnZXMgd2l0aCBub24tcHJpbWl0aWV2ZSBhcmd1bWVudHMgaGVyZS4K
KyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisK
KyAgICBpZiAobWV0aG9kID09PSAiaW5zcGVjdGVkV2luZG93Q2xlYXJlZCIgfHwgbWV0aG9kID09
PSAicmVzZXQiIHx8IG1ldGhvZCA9PT0gInNldEF0dGFjaGVkV2luZG93IikgeworICAgICAgICAv
LyBGaWx0ZXIgb3V0IG1lc3NhZ2VzIHdlIGRvbid0IG5lZWQgaGVyZS4KKyAgICAgICAgLy8gV2Ug
ZG8gaXQgb24gdGhlIHNlbmRlciBzaWRlIHNpbmNlIHRoZXkgbWF5IGhhdmUgbm9uLXNlcmlhbGl6
YWJsZQorICAgICAgICAvLyBwYXJhbWV0ZXJzLgorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gU25pZmYgc29tZSBpbnNwZWN0b3IgY29udHJvbGxlciBzdGF0ZSBjaGFuZ2VzIGluIG9y
ZGVyIHRvIHN1cHBvcnQKKyAgICAvLyBjcm9zcy1uYXZpZ2F0aW9uIGluc3RydW1lbnRhdGlvbi4g
S2VlcCBuYW1lcyBpbiBzeW5jIHdpdGgKKyAgICAvLyB3ZWJkZXZ0b29sc2FnZW50X2ltcGwuCisg
ICAgaWYgKG1ldGhvZCA9PT0gInRpbWVsaW5lUHJvZmlsZXJXYXNTdGFydGVkIikKKyAgICAgICAg
RGV2VG9vbHNBZ2VudEhvc3QucnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoInRpbWVsaW5lLXBy
b2ZpbGVyIiwgdHJ1ZSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09PSAidGltZWxpbmVQcm9maWxl
cldhc1N0b3BwZWQiKQorICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0
YXRlQ2hhbmdlZCgidGltZWxpbmUtcHJvZmlsZXIiLCBmYWxzZSk7CisgICAgZWxzZSBpZiAobWV0
aG9kID09PSAicmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQiKQorICAgICAgICBEZXZUb29sc0Fn
ZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgicmVzb3VyY2UtdHJhY2tpbmciLCB0
cnVlKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT09ICJyZXNvdXJjZVRyYWNraW5nV2FzRGlzYWJs
ZWQiKQorICAgICAgICBEZXZUb29sc0FnZW50SG9zdC5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdl
ZCgicmVzb3VyY2UtdHJhY2tpbmciLCBmYWxzZSk7CisKKyAgICBpZiAoQXB1QWdlbnREaXNwYXRj
aGVyLmVuYWJsZWQpIHsKKyAgICAgICAgQXB1QWdlbnREaXNwYXRjaGVyLmRpc3BhdGNoVG9BcHUo
bWV0aG9kLCBhcmdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhciBjYWxsID0g
SlNPTi5zdHJpbmdpZnkoYXJncyk7CisgICAgRGV2VG9vbHNBZ2VudEhvc3QuZGlzcGF0Y2goY2Fs
bCk7Cit9OworCisvKioKKyAqIEEgbm8tb3AgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYnkgZGVi
dWdnZXIgYWdlbnQganVzdCB0byB0cmlnZ2VyIHY4CisgKiBleGVjdXRpb24uCisgKi8KK2Z1bmN0
aW9uIGRldnRvb2xzJCR2b2lkKCkgeworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9qcy9JbnNwZWN0b3JDb250cm9sbGVySW1wbC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
SW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzkyYTk0YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMv
SW5zcGVjdG9yQ29udHJvbGxlckltcGwuanMKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgRGV2VG9vbHMnIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJbnNwZWN0b3JDb250cm9s
bGVyIEFQSS4KKyAqLworCitpZiAoIXRoaXMuZGV2dG9vbHMpCisgICAgZGV2dG9vbHMgPSB7fTsK
KworZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwgPSBmdW5jdGlvbigpCit7CisgICAgV2Vi
SW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLmNhbGwodGhpcyk7CisgICAgdGhpcy5pbnN0
YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiY2xlYXJNZXNzYWdlcyIpOworICAgIHRo
aXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImNvcHlOb2RlIik7CisgICAg
dGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZGVsZXRlQ29va2llIik7
CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZGlkRXZhbHVh
dGVGb3JUZXN0SW5Gcm9udGVuZCIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImRpc2FibGVSZXNvdXJjZVRyYWNraW5nIik7CisgICAgdGhpcy5pbnN0YWxs
SW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZGlzYWJsZVRpbWVsaW5lIik7CisgICAgdGhp
cy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygiZW5hYmxlUmVzb3VyY2VUcmFj
a2luZyIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImVu
YWJsZVRpbWVsaW5lIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygiZ2V0Q2hpbGROb2RlcyIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xs
ZXJEZWxlZ2F0ZV8oImdldENvb2tpZXMiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250
cm9sbGVyRGVsZWdhdGVfKCJnZXREYXRhYmFzZVRhYmxlTmFtZXMiKTsKKyAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJnZXRET01TdG9yYWdlRW50cmllcyIpOwor
ICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oImdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZSIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxl
Z2F0ZV8oImdldFJlc291cmNlQ29udGVudCIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNv
bnRyb2xsZXJEZWxlZ2F0ZV8oImhpZ2hsaWdodERPTU5vZGUiKTsKKyAgICB0aGlzLmluc3RhbGxJ
bnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJoaWRlRE9NTm9kZUhpZ2hsaWdodCIpOworICAg
IHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbGVhc2VXcmFwcGVy
T2JqZWN0R3JvdXAiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJyZW1vdmVBdHRyaWJ1dGUiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9s
bGVyRGVsZWdhdGVfKCJyZW1vdmVET01TdG9yYWdlSXRlbSIpOworICAgIHRoaXMuaW5zdGFsbElu
c3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInJlbW92ZU5vZGUiKTsKKyAgICB0aGlzLmluc3Rh
bGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzYXZlRnJvbnRlbmRTZXR0aW5ncyIpOwor
ICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldEF0dHJpYnV0
ZSIpOworICAgIHRoaXMuaW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8oInNldERP
TVN0b3JhZ2VJdGVtIik7CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVn
YXRlXygic2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0
b3JDb250cm9sbGVyRGVsZWdhdGVfKCJzZXRUZXh0Tm9kZVZhbHVlIik7CisgICAgdGhpcy5pbnN0
YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RhcnRUaW1lbGluZVByb2ZpbGVyIik7
CisgICAgdGhpcy5pbnN0YWxsSW5zcGVjdG9yQ29udHJvbGxlckRlbGVnYXRlXygic3RvcFRpbWVs
aW5lUHJvZmlsZXIiKTsKKyAgICB0aGlzLmluc3RhbGxJbnNwZWN0b3JDb250cm9sbGVyRGVsZWdh
dGVfKCJzdG9yZUxhc3RBY3RpdmVQYW5lbCIpOworfTsKK2RldnRvb2xzLkluc3BlY3RvckJhY2tl
bmRJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSW5zcGVjdG9yQmFja2Vu
ZFN0dWIucHJvdG90eXBlOworCisKKy8qKgorICoge0Bpbmhlcml0RG9jfS4KKyAqLworZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnRvZ2dsZU5vZGVTZWFyY2ggPSBmdW5j
dGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlw
ZS50b2dnbGVOb2RlU2VhcmNoLmNhbGwodGhpcyk7CisgICAgdGhpcy5jYWxsSW5zcGVjdG9yQ29u
dHJvbGxlcl8uY2FsbCh0aGlzLCAidG9nZ2xlTm9kZVNlYXJjaCIpOworICAgIGlmICghdGhpcy5z
ZWFyY2hpbmdGb3JOb2RlKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBFbGVt
ZW50c1BhbmVsIHRyZWVPdXRsaW5lJ3MgZm9jdXNOb2RlQ2hhbmdlZCgpLgorICAgICAgICBEZXZU
b29sc0hvc3QuYWN0aXZhdGVXaW5kb3coKTsKKyAgICB9Cit9OworCisKKy8qKgorICogQG92ZXJy
aWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5kZWJ1Z2dl
ckVuYWJsZWQgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9OworCisKKy8qKgor
ICogQG92ZXJyaWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlw
ZS5wcm9maWxlckVuYWJsZWQgPSBmdW5jdGlvbigpCit7CisgICAgcmV0dXJuIHRydWU7Cit9Owor
CisKK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5hZGRCcmVha3BvaW50
ID0gZnVuY3Rpb24oc291cmNlSUQsIGxpbmUsIGNvbmRpdGlvbikKK3sKKyAgICBkZXZ0b29scy50
b29scy5nZXREZWJ1Z2dlckFnZW50KCkuYWRkQnJlYWtwb2ludChzb3VyY2VJRCwgbGluZSwgY29u
ZGl0aW9uKTsKK307CisKKworZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBl
LnJlbW92ZUJyZWFrcG9pbnQgPSBmdW5jdGlvbihzb3VyY2VJRCwgbGluZSkKK3sKKyAgICBkZXZ0
b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkucmVtb3ZlQnJlYWtwb2ludChzb3VyY2VJRCwg
bGluZSk7Cit9OworCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUudXBk
YXRlQnJlYWtwb2ludCA9IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lLCBjb25kaXRpb24pCit7Cisg
ICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnVwZGF0ZUJyZWFrcG9pbnQoc291
cmNlSUQsIGxpbmUsIGNvbmRpdGlvbik7Cit9OworCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5k
SW1wbC5wcm90b3R5cGUucGF1c2VJbkRlYnVnZ2VyID0gZnVuY3Rpb24oKQoreworICAgIGRldnRv
b2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5wYXVzZUV4ZWN1dGlvbigpOworfTsKKworCitk
ZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUucmVzdW1lRGVidWdnZXIgPSBm
dW5jdGlvbigpCit7CisgICAgZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnJlc3Vt
ZUV4ZWN1dGlvbigpOworfTsKKworCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90
b3R5cGUuc3RlcEludG9TdGF0ZW1lbnRJbkRlYnVnZ2VyID0gZnVuY3Rpb24oKQoreworICAgIGRl
dnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zdGVwSW50b1N0YXRlbWVudCgpOworfTsK
KworCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc3RlcE91dE9mRnVu
Y3Rpb25JbkRlYnVnZ2VyID0gZnVuY3Rpb24oKQoreworICAgIGRldnRvb2xzLnRvb2xzLmdldERl
YnVnZ2VyQWdlbnQoKS5zdGVwT3V0T2ZGdW5jdGlvbigpOworfTsKKworCitkZXZ0b29scy5JbnNw
ZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUuc3RlcE92ZXJTdGF0ZW1lbnRJbkRlYnVnZ2VyID0g
ZnVuY3Rpb24oKQoreworICAgIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdlbnQoKS5zdGVw
T3ZlclN0YXRlbWVudCgpOworfTsKKworLyoqCisgKiBAb3ZlcnJpZGUKKyAqLworZGV2dG9vbHMu
SW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLnNldFBhdXNlT25FeGNlcHRpb25zU3RhdGUg
PSBmdW5jdGlvbihzdGF0ZSkKK3sKKyAgICB0aGlzLl9zZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRl
ID0gc3RhdGU7CisgICAgLy8gVE9ETyh5dXJ5cyk6IHN1cHBvcnQgYWxsIHRocmVlIHN0YXRlcy4g
U2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMzI4NzcKKyAgICB2YXIgZW5hYmxlZCA9IChzdGF0ZSAhPT0g
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5QYXVzZU9uRXhjZXB0aW9uc1N0YXRlLkRvbnRQYXVz
ZU9uRXhjZXB0aW9ucyk7CisgICAgcmV0dXJuIGRldnRvb2xzLnRvb2xzLmdldERlYnVnZ2VyQWdl
bnQoKS5zZXRQYXVzZU9uRXhjZXB0aW9ucyhlbmFibGVkKTsKK307CisKKy8qKgorICogQG92ZXJy
aWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVzZU9u
RXhjZXB0aW9uc1N0YXRlID0gZnVuY3Rpb24oKQoreworICAgIHJldHVybiAodGhpcy5fc2V0UGF1
c2VPbkV4Y2VwdGlvbnNTdGF0ZSB8fCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLlBhdXNlT25F
eGNlcHRpb25zU3RhdGUuRG9udFBhdXNlT25FeGNlcHRpb25zKTsKK307CisKKy8qKgorICogQG92
ZXJyaWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5wYXVz
ZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gZGV2dG9vbHMudG9vbHMu
Z2V0RGVidWdnZXJBZ2VudCgpLnBhdXNlT25FeGNlcHRpb25zKCk7Cit9OworCisKKy8qKgorICog
QG92ZXJyaWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5z
ZXRQYXVzZU9uRXhjZXB0aW9ucyA9IGZ1bmN0aW9uKHZhbHVlKQoreworICAgIHJldHVybiBkZXZ0
b29scy50b29scy5nZXREZWJ1Z2dlckFnZW50KCkuc2V0UGF1c2VPbkV4Y2VwdGlvbnModmFsdWUp
OworfTsKKworCisvKioKKyAqIEBvdmVycmlkZQorICovCitkZXZ0b29scy5JbnNwZWN0b3JCYWNr
ZW5kSW1wbC5wcm90b3R5cGUuc3RhcnRQcm9maWxpbmcgPSBmdW5jdGlvbigpCit7CisgICAgZGV2
dG9vbHMudG9vbHMuZ2V0UHJvZmlsZXJBZ2VudCgpLnN0YXJ0UHJvZmlsaW5nKGRldnRvb2xzLlBy
b2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9DUFUpOworfTsKKwor
CisvKioKKyAqIEBvdmVycmlkZQorICovCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5w
cm90b3R5cGUuc3RvcFByb2ZpbGluZyA9IGZ1bmN0aW9uKCkKK3sKKyAgICBkZXZ0b29scy50b29s
cy5nZXRQcm9maWxlckFnZW50KCkuc3RvcFByb2ZpbGluZyggZGV2dG9vbHMuUHJvZmlsZXJBZ2Vu
dC5Qcm9maWxlck1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0NQVSk7Cit9OworCisKKy8qKgorICog
QG92ZXJyaWRlCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBsLnByb3RvdHlwZS5n
ZXRQcm9maWxlSGVhZGVycyA9IGZ1bmN0aW9uKGNhbGxJZCkKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
ZGlkR2V0UHJvZmlsZUhlYWRlcnMoY2FsbElkLCBbXSk7Cit9OworCisKKy8qKgorICogRW11bGF0
ZSBXZWJLaXQgSW5zcGVjdG9yQ29udHJvbGxlciBiZWhhdmlvci4gSXQgc3RvcmVzIHByb2ZpbGVz
IG9uIHJlbmRlcmVyIHNpZGUsCisgKiBhbmQgaXMgYWJsZSB0byByZXRyaWV2ZSB0aGVtIGJ5IHVp
ZCB1c2luZyAiZ2V0UHJvZmlsZSIuCisgKi8KK2RldnRvb2xzLkluc3BlY3RvckJhY2tlbmRJbXBs
LnByb3RvdHlwZS5hZGRGdWxsUHJvZmlsZSA9IGZ1bmN0aW9uKHByb2ZpbGUpCit7CisgICAgV2Vi
SW5zcGVjdG9yLl9fZnVsbFByb2ZpbGVzID0gV2ViSW5zcGVjdG9yLl9fZnVsbFByb2ZpbGVzIHx8
IHt9OworICAgIFdlYkluc3BlY3Rvci5fX2Z1bGxQcm9maWxlc1twcm9maWxlLnVpZF0gPSBwcm9m
aWxlOworfTsKKworCisvKioKKyAqIEBvdmVycmlkZQorICovCitkZXZ0b29scy5JbnNwZWN0b3JC
YWNrZW5kSW1wbC5wcm90b3R5cGUuZ2V0UHJvZmlsZSA9IGZ1bmN0aW9uKGNhbGxJZCwgdWlkKQor
eworICAgIGlmIChXZWJJbnNwZWN0b3IuX19mdWxsUHJvZmlsZXMgJiYgKHVpZCBpbiBXZWJJbnNw
ZWN0b3IuX19mdWxsUHJvZmlsZXMpKQorICAgICAgICBXZWJJbnNwZWN0b3IuZGlkR2V0UHJvZmls
ZShjYWxsSWQsIFdlYkluc3BlY3Rvci5fX2Z1bGxQcm9maWxlc1t1aWRdKTsKK307CisKKworLyoq
CisgKiBAb3ZlcnJpZGUKKyAqLworZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90
eXBlLnRha2VIZWFwU25hcHNob3QgPSBmdW5jdGlvbigpCit7CisgICAgZGV2dG9vbHMudG9vbHMu
Z2V0UHJvZmlsZXJBZ2VudCgpLnN0YXJ0UHJvZmlsaW5nKGRldnRvb2xzLlByb2ZpbGVyQWdlbnQu
UHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9IRUFQX1NOQVBTSE9UCisgICAgICAgIHwg
ZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9maWxlck1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0hF
QVBfU1RBVFMKKyAgICAgICAgfCBkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9kdWxl
cy5QUk9GSUxFUl9NT0RVTEVfSlNfQ09OU1RSVUNUT1JTKTsKK307CisKKworLyoqCisgKiBAb3Zl
cnJpZGUKKyAqLworZGV2dG9vbHMuSW5zcGVjdG9yQmFja2VuZEltcGwucHJvdG90eXBlLmRpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKGNhbGxJZCwgaW5qZWN0ZWRTY3JpcHRJZCwg
bWV0aG9kTmFtZSwgYXJnc1N0cmluZywgYXN5bmMpCit7CisgICAgLy8gRW5jb2RlIGluamVjdGVk
U2NyaXB0SWQgaW50byBjYWxsSWQKKyAgICBpZiAodHlwZW9mIGluamVjdGVkU2NyaXB0SWQgIT09
ICJudW1iZXIiKQorICAgICAgICBpbmplY3RlZFNjcmlwdElkID0gMDsKKyAgICBSZW1vdGVUb29s
c0FnZW50LmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIGluamVjdGVkU2NyaXB0SWQs
IG1ldGhvZE5hbWUsIGFyZ3NTdHJpbmcsIGFzeW5jKTsKK307CisKKworLyoqCisgKiBJbnN0YWxs
cyBkZWxlZ2F0aW5nIGhhbmRsZXIgaW50byB0aGUgaW5zcGVjdG9yIGNvbnRyb2xsZXIuCisgKiBA
cGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBNZXRob2QgdG8gaW5zdGFsbCBkZWxlZ2F0aW5nIGhh
bmRsZXIgZm9yLgorICovCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUu
aW5zdGFsbEluc3BlY3RvckNvbnRyb2xsZXJEZWxlZ2F0ZV8gPSBmdW5jdGlvbihtZXRob2ROYW1l
KQoreworICAgIHRoaXNbbWV0aG9kTmFtZV0gPSB0aGlzLmNhbGxJbnNwZWN0b3JDb250cm9sbGVy
Xy5iaW5kKHRoaXMsIG1ldGhvZE5hbWUpOworfTsKKworCisvKioKKyAqIEJvdW5kIGZ1bmN0aW9u
IHdpdGggdGhlIGluc3RhbGxJbmplY3RlZFNjcmlwdERlbGVnYXRlXyBhY3R1YWwKKyAqIGltcGxl
bWVudGF0aW9uLgorICovCitkZXZ0b29scy5JbnNwZWN0b3JCYWNrZW5kSW1wbC5wcm90b3R5cGUu
Y2FsbEluc3BlY3RvckNvbnRyb2xsZXJfID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgdmFyX2FyZykK
K3sKKyAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywg
MSk7CisgICAgUmVtb3RlVG9vbHNBZ2VudC5kaXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlcihX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChmdW5jdGlvbigpe30pLCBtZXRob2ROYW1lLCBKU09O
LnN0cmluZ2lmeShhcmdzKSk7Cit9OworCisKK0luc3BlY3RvckJhY2tlbmQgPSBuZXcgZGV2dG9v
bHMuSW5zcGVjdG9yQmFja2VuZEltcGwoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvanMvUHJvZmlsZXJBZ2VudC5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJB
Z2VudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQxMWFiCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9Qcm9maWxlckFnZW50LmpzCkBA
IC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFByb3ZpZGVzIGNvbW11bmljYXRp
b24gaW50ZXJmYWNlIHRvIHJlbW90ZSB2OCBwcm9maWxlci4KKyAqLworCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICovCitkZXZ0b29scy5Qcm9maWxlckFnZW50ID0gZnVuY3Rpb24oKQoreworICAg
IFJlbW90ZVByb2ZpbGVyQWdlbnQuZGlkR2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzID0gdGhpcy5k
aWRHZXRBY3RpdmVQcm9maWxlck1vZHVsZXNfLmJpbmQodGhpcyk7CisgICAgUmVtb3RlUHJvZmls
ZXJBZ2VudC5kaWRHZXRMb2dMaW5lcyA9IHRoaXMuZGlkR2V0TG9nTGluZXNfLmJpbmQodGhpcyk7
CisKKyAgICAvKioKKyAgICAgKiBBY3RpdmUgcHJvZmlsZXIgbW9kdWxlcyBmbGFncy4KKyAgICAg
KiBAdHlwZSB7bnVtYmVyfQorICAgICAqLworICAgIHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1bGVz
XyA9IGRldnRvb2xzLlByb2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzLlBST0ZJTEVSX01PRFVM
RV9OT05FOworCisgICAgLyoqCisgICAgICogSW50ZXJ2YWwgZm9yIHBvbGxpbmcgcHJvZmlsZXIg
c3RhdGUuCisgICAgICogQHR5cGUge251bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLmdldEFjdGl2
ZVByb2ZpbGVyTW9kdWxlc0ludGVydmFsXyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBQcm9m
aWxlciBsb2cgcG9zaXRpb24uCisgICAgICogQHR5cGUge251bWJlcn0KKyAgICAgKi8KKyAgICB0
aGlzLmxvZ1Bvc2l0aW9uXyA9IDA7CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIGxvZyBjb250
ZW50cyByZXRyaWV2YWwgbXVzdCBiZSBmb3JjZWQgbmV4dCB0aW1lLgorICAgICAqIEB0eXBlIHti
b29sZWFufQorICAgICAqLworICAgIHRoaXMuZm9yY2VHZXRMb2dMaW5lc18gPSBmYWxzZTsKKwor
ICAgIC8qKgorICAgICAqIFByb2ZpbGVyIHByb2Nlc3NvciBpbnN0YW5jZS4KKyAgICAgKiBAdHlw
ZSB7ZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yfQorICAgICAqLworICAgIHRoaXMucHJvZmls
ZXJQcm9jZXNzb3JfID0gbmV3IGRldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3NvcigpOworfTsKKwor
CisvKioKKyAqIEEgY29weSBvZiBlbnVtIGZyb20gaW5jbHVkZS92OC5oCisgKiBAZW51bSB7bnVt
YmVyfQorICovCitkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9kdWxlcyA9IHsKKyAg
ICBQUk9GSUxFUl9NT0RVTEVfTk9ORTogMCwKKyAgICBQUk9GSUxFUl9NT0RVTEVfQ1BVOiAxLAor
ICAgIFBST0ZJTEVSX01PRFVMRV9IRUFQX1NUQVRTOiAxIDw8IDEsCisgICAgUFJPRklMRVJfTU9E
VUxFX0pTX0NPTlNUUlVDVE9SUzogMSA8PCAyLAorICAgIFBST0ZJTEVSX01PRFVMRV9IRUFQX1NO
QVBTSE9UOiAxIDw8IDE2Cit9OworCisKKy8qKgorICogU2V0cyB1cCBjYWxsYmFja3MgdGhhdCBk
ZWFsIHdpdGggcHJvZmlsZXMgcHJvY2Vzc2luZy4KKyAqLworZGV2dG9vbHMuUHJvZmlsZXJBZ2Vu
dC5wcm90b3R5cGUuc2V0dXBQcm9maWxlclByb2Nlc3NvckNhbGxiYWNrcyA9IGZ1bmN0aW9uKCkK
K3sKKyAgICAvLyBBIHRlbXBvcmFyeSBpY29uIGluZGljYXRpbmcgdGhhdCB0aGUgcHJvZmlsZSBp
cyBiZWluZyBwcm9jZXNzZWQuCisgICAgdmFyIHByb2Nlc3NpbmdJY29uID0gbmV3IFdlYkluc3Bl
Y3Rvci5TaWRlYmFyVHJlZUVsZW1lbnQoCisgICAgICAgICJwcm9maWxlLXNpZGViYXItdHJlZS1p
dGVtIiwKKyAgICAgICAgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm9jZXNzaW5nLi4uIiksCisg
ICAgICAgICcnLCBudWxsLCBmYWxzZSk7CisgICAgdmFyIHByb2ZpbGVzU2lkZWJhciA9IFdlYklu
c3BlY3Rvci5wYW5lbHMucHJvZmlsZXMuZ2V0UHJvZmlsZVR5cGUoV2ViSW5zcGVjdG9yLkNQVVBy
b2ZpbGVUeXBlLlR5cGVJZCkudHJlZUVsZW1lbnQ7CisKKyAgICB0aGlzLnByb2ZpbGVyUHJvY2Vz
c29yXy5zZXRDYWxsYmFja3MoCisgICAgICAgIGZ1bmN0aW9uIG9uUHJvZmlsZVByb2Nlc3NpbmdT
dGFydGVkKCkgeworICAgICAgICAgICAgLy8gU2V0IHZpc3VhbGx5IGVtcHR5IHN0cmluZy4gU3Vi
dGl0bGUgaGlkaW5nIGlzIGRvbmUgdmlhIHN0eWxlcworICAgICAgICAgICAgLy8gbWFuaXB1bGF0
aW9uIHdoaWNoIGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggZHluYW1pYyBhcHBlbmQgLyByZW1vdmFs
LgorICAgICAgICAgICAgcHJvY2Vzc2luZ0ljb24uc3VidGl0bGUgPSAiICI7CisgICAgICAgICAg
ICBwcm9maWxlc1NpZGViYXIuYXBwZW5kQ2hpbGQocHJvY2Vzc2luZ0ljb24pOworICAgICAgICB9
LAorICAgICAgICBmdW5jdGlvbiBvblByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzKHRpY2tzQ291bnQp
IHsKKyAgICAgICAgICAgIHByb2Nlc3NpbmdJY29uLnN1YnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIlZCB0aWNrcyBwcm9jZXNzZWQiLCB0aWNrc0NvdW50KTsKKyAgICAgICAgfSwKKyAg
ICAgICAgZnVuY3Rpb24gb25Qcm9maWxlUHJvY2Vzc2luZ0ZpbmlzaGVkKHByb2ZpbGUpIHsKKyAg
ICAgICAgICAgIHByb2ZpbGVzU2lkZWJhci5yZW1vdmVDaGlsZChwcm9jZXNzaW5nSWNvbik7Cisg
ICAgICAgICAgICBwcm9maWxlLnR5cGVJZCA9IFdlYkluc3BlY3Rvci5DUFVQcm9maWxlVHlwZS5U
eXBlSWQ7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZEZ1bGxQcm9maWxlKHByb2Zp
bGUpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmFkZFByb2ZpbGVIZWFkZXIocHJvZmlsZSk7
CisgICAgICAgICAgICAvLyBJZiBubyBwcm9maWxlIGlzIGN1cnJlbnRseSBzaG93biwgc2hvdyB0
aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIHZhciBwcm9maWxlc1BhbmVsID0gV2ViSW5zcGVjdG9y
LnBhbmVscy5wcm9maWxlczsKKyAgICAgICAgICAgIGlmICghcHJvZmlsZXNQYW5lbC52aXNpYmxl
VmlldykgeworICAgICAgICAgICAgICAgIHByb2ZpbGVzUGFuZWwuc2hvd1Byb2ZpbGUocHJvZmls
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICApOworfTsKKworCisvKioKKyAqIElu
aXRpYWxpemVzIHByb2ZpbGluZyBzdGF0ZS4KKyAqLworZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5w
cm90b3R5cGUuaW5pdGlhbGl6ZVByb2ZpbGluZyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNl
dHVwUHJvZmlsZXJQcm9jZXNzb3JDYWxsYmFja3MoKTsKKyAgICB0aGlzLmZvcmNlR2V0TG9nTGlu
ZXNfID0gdHJ1ZTsKKyAgICB0aGlzLmdldEFjdGl2ZVByb2ZpbGVyTW9kdWxlc0ludGVydmFsXyA9
IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBSZW1vdGVQcm9maWxlckFnZW50LmdldEFjdGl2ZVBy
b2ZpbGVyTW9kdWxlcygpOyB9LCAxMDAwKTsKK307CisKKworLyoqCisgKiBTdGFydHMgcHJvZmls
aW5nLgorICogQHBhcmFtIHtudW1iZXJ9IG1vZHVsZXMgTGlzdCBvZiBtb2R1bGVzIHRvIGVuYWJs
ZS4KKyAqLworZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5wcm90b3R5cGUuc3RhcnRQcm9maWxpbmcg
PSBmdW5jdGlvbihtb2R1bGVzKQoreworICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdD
b21tYW5kKCJwcm9maWxlIiwgeworICAgICAgICAibW9kdWxlcyI6IG1vZHVsZXMsCisgICAgICAg
ICJjb21tYW5kIjogInJlc3VtZSJ9KTsKKyAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnNlbmRD
b21tYW5kXyhjbWQpOworICAgIFJlbW90ZVRvb2xzQWdlbnQuZXhlY3V0ZVZvaWRKYXZhU2NyaXB0
KCk7CisgICAgaWYgKG1vZHVsZXMgJiBkZXZ0b29scy5Qcm9maWxlckFnZW50LlByb2ZpbGVyTW9k
dWxlcy5QUk9GSUxFUl9NT0RVTEVfSEVBUF9TTkFQU0hPVCkgeworICAgICAgICB2YXIgcG9zID0g
dGhpcy5sb2dQb3NpdGlvbl87CisgICAgICAgIC8vIEFjdGl2ZSBtb2R1bGVzIHdpbGwgbm90IGNo
YW5nZSwgaW5zdGVhZCwgYSBzbmFwc2hvdCB3aWxsIGJlIGxvZ2dlZC4KKyAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsgUmVtb3RlUHJvZmlsZXJBZ2VudC5nZXRMb2dMaW5lcyhwb3MpOyB9
LCA1MDApOworICAgIH0KK307CisKKworLyoqCisgKiBTdG9wcyBwcm9maWxpbmcuCisgKi8KK2Rl
dnRvb2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLnN0b3BQcm9maWxpbmcgPSBmdW5jdGlvbiht
b2R1bGVzKQoreworICAgIHZhciBjbWQgPSBuZXcgZGV2dG9vbHMuRGVidWdDb21tYW5kKCJwcm9m
aWxlIiwgeworICAgICAgICAibW9kdWxlcyI6IG1vZHVsZXMsCisgICAgICAgICJjb21tYW5kIjog
InBhdXNlIn0pOworICAgIGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQuc2VuZENvbW1hbmRfKGNtZCk7
CisgICAgUmVtb3RlVG9vbHNBZ2VudC5leGVjdXRlVm9pZEphdmFTY3JpcHQoKTsKK307CisKKwor
LyoqCisgKiBIYW5kbGVzIGN1cnJlbnQgcHJvZmlsZXIgc3RhdHVzLgorICogQHBhcmFtIHtudW1i
ZXJ9IG1vZHVsZXMgTGlzdCBvZiBhY3RpdmUgKHN0YXJ0ZWQpIG1vZHVsZXMuCisgKi8KK2RldnRv
b2xzLlByb2ZpbGVyQWdlbnQucHJvdG90eXBlLmRpZEdldEFjdGl2ZVByb2ZpbGVyTW9kdWxlc18g
PSBmdW5jdGlvbihtb2R1bGVzKQoreworICAgIHZhciBwcm9mTW9kdWxlcyA9IGRldnRvb2xzLlBy
b2ZpbGVyQWdlbnQuUHJvZmlsZXJNb2R1bGVzOworICAgIHZhciBwcm9mTW9kdWxlTm9uZSA9IHBy
b2ZNb2R1bGVzLlBST0ZJTEVSX01PRFVMRV9OT05FOworICAgIGlmICh0aGlzLmZvcmNlR2V0TG9n
TGluZXNfIHx8IChtb2R1bGVzICE9PSBwcm9mTW9kdWxlTm9uZSAmJiB0aGlzLmFjdGl2ZVByb2Zp
bGVyTW9kdWxlc18gPT09IHByb2ZNb2R1bGVOb25lKSkgeworICAgICAgICB0aGlzLmZvcmNlR2V0
TG9nTGluZXNfID0gZmFsc2U7CisgICAgICAgIC8vIFN0YXJ0IHRvIHF1ZXJ5IGxvZyBkYXRhLgor
ICAgICAgICBSZW1vdGVQcm9maWxlckFnZW50LmdldExvZ0xpbmVzKHRoaXMubG9nUG9zaXRpb25f
KTsKKyAgICB9CisgICAgdGhpcy5hY3RpdmVQcm9maWxlck1vZHVsZXNfID0gbW9kdWxlczsKKyAg
ICAvLyBVcGRhdGUgYnV0dG9ucy4KKyAgICBXZWJJbnNwZWN0b3Iuc2V0UmVjb3JkaW5nUHJvZmls
ZShtb2R1bGVzICYgcHJvZk1vZHVsZXMuUFJPRklMRVJfTU9EVUxFX0NQVSk7Cit9OworCisKKy8q
KgorICogSGFuZGxlcyBhIHBvcnRpb24gb2YgYSBwcm9maWxlciBsb2cgcmV0cmlldmVkIGJ5IGdl
dExvZ0xpbmVzIGNhbGwuCisgKiBAcGFyYW0ge251bWJlcn0gcG9zIEN1cnJlbnQgcG9zaXRpb24g
aW4gbG9nLgorICogQHBhcmFtIHtzdHJpbmd9IGxvZyBBIHBvcnRpb24gb2YgcHJvZmlsZXIgbG9n
LgorICovCitkZXZ0b29scy5Qcm9maWxlckFnZW50LnByb3RvdHlwZS5kaWRHZXRMb2dMaW5lc18g
PSBmdW5jdGlvbihwb3MsIGxvZykKK3sKKyAgICB0aGlzLmxvZ1Bvc2l0aW9uXyA9IHBvczsKKyAg
ICBpZiAobG9nLmxlbmd0aCA+IDApCisgICAgICAgIHRoaXMucHJvZmlsZXJQcm9jZXNzb3JfLnBy
b2Nlc3NMb2dDaHVuayhsb2cpOworICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZlUHJvZmlsZXJNb2R1
bGVzXyA9PT0gZGV2dG9vbHMuUHJvZmlsZXJBZ2VudC5Qcm9maWxlck1vZHVsZXMuUFJPRklMRVJf
TU9EVUxFX05PTkUpIHsKKyAgICAgICAgLy8gTm8gbmV3IGRhdGEgYW5kIHByb2ZpbGluZyBpcyBz
dG9wcGVkLS0tc3VzcGVuZCBsb2cgcmVhZGluZy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBSZW1vdGVQcm9maWxlckFnZW50LmdldExvZ0xpbmVz
KHBvcyk7IH0sIDUwMCk7Cit9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9qcy9Q
cm9maWxlclByb2Nlc3Nvci5qcyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJQcm9j
ZXNzb3IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliMGJlYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvUHJvZmlsZXJQcm9jZXNzb3Iu
anMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUHJvZmlsZXIgcHJvY2Vz
c29yIGlzIHVzZWQgdG8gcHJvY2VzcyBsb2cgZmlsZSBwcm9kdWNlZAorICogYnkgVjggYW5kIHBy
b2R1Y2UgYW4gaW50ZXJuYWwgcHJvZmlsZSByZXByZXNlbnRhdGlvbiB3aGljaCBpcyB1c2VkCisg
KiBmb3IgYnVpbGRpbmcgcHJvZmlsZSB2aWV3cyBpbiAiUHJvZmlsZXMiIHRhYi4KKyAqLworCisK
Ky8qKgorICogQ3JlYXRlcyBhIFByb2ZpbGUgVmlldyBidWlsZGVyIG9iamVjdCBjb21wYXRpYmxl
IHdpdGggV2ViS2l0IFByb2ZpbGVyIFVJLgorICoKKyAqIEBwYXJhbSB7bnVtYmVyfSBzYW1wbGlu
Z1JhdGUgTnVtYmVyIG9mIG1zIGJldHdlZW4gcHJvZmlsZXIgdGlja3MuCisgKiBAY29uc3RydWN0
b3IKKyAqLworZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld0J1aWxkZXIgPSBmdW5jdGlvbihz
YW1wbGluZ1JhdGUpCit7CisgICAgZGV2dG9vbHMucHJvZmlsZXIuVmlld0J1aWxkZXIuY2FsbCh0
aGlzLCBzYW1wbGluZ1JhdGUpOworfTsKK2RldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdCdWls
ZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBkZXZ0b29scy5wcm9maWxlci5WaWV3QnVpbGRlci5w
cm90b3R5cGU7CisKKworLyoqCisgKiBAb3ZlcnJpZGUKKyAqLworZGV2dG9vbHMucHJvZmlsZXIu
V2ViS2l0Vmlld0J1aWxkZXIucHJvdG90eXBlLmNyZWF0ZVZpZXdOb2RlID0gZnVuY3Rpb24oZnVu
Y05hbWUsIHRvdGFsVGltZSwgc2VsZlRpbWUsIGhlYWQpCit7CisgICAgcmV0dXJuIG5ldyBkZXZ0
b29scy5wcm9maWxlci5XZWJLaXRWaWV3Tm9kZShmdW5jTmFtZSwgdG90YWxUaW1lLCBzZWxmVGlt
ZSwgaGVhZCk7Cit9OworCisKKy8qKgorICogQ29uc3RydWN0cyBhIFByb2ZpbGUgVmlldyBub2Rl
IG9iamVjdCBmb3IgZGlzcGxheWluZyBpbiBXZWJLaXQgUHJvZmlsZXIgVUkuCisgKgorICogQHBh
cmFtIHtzdHJpbmd9IGludGVybmFsRnVuY05hbWUgQSBmdWxseSBxdWFsaWZpZWQgZnVuY3Rpb24g
bmFtZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbFRpbWUgQW1vdW50IG9mIHRpbWUgdGhhdCBh
cHBsaWNhdGlvbiBzcGVudCBpbiB0aGUKKyAqICAgICBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIGFu
ZCBpdHMgZGVzY2VuZGFudHMgKG5vdCB0aGF0IGRlcGVuZGluZyBvbgorICogICAgIHByb2ZpbGUg
dGhleSBjYW4gYmUgZWl0aGVyIGNhbGxlZXMgb3IgY2FsbGVycy4pCisgKiBAcGFyYW0ge251bWJl
cn0gc2VsZlRpbWUgQW1vdW50IG9mIHRpbWUgdGhhdCBhcHBsaWNhdGlvbiBzcGVudCBpbiB0aGUK
KyAqICAgICBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIG9ubHkuCisgKiBAcGFyYW0ge2RldnRvb2xz
LnByb2ZpbGVyLlByb2ZpbGVWaWV3Lk5vZGV9IGhlYWQgUHJvZmlsZSB2aWV3IGhlYWQuCisgKiBA
Y29uc3RydWN0b3IKKyAqLworZGV2dG9vbHMucHJvZmlsZXIuV2ViS2l0Vmlld05vZGUgPSBmdW5j
dGlvbihpbnRlcm5hbEZ1bmNOYW1lLCB0b3RhbFRpbWUsIHNlbGZUaW1lLCBoZWFkKQoreworICAg
IGRldnRvb2xzLnByb2ZpbGVyLlByb2ZpbGVWaWV3Lk5vZGUuY2FsbCh0aGlzLCBpbnRlcm5hbEZ1
bmNOYW1lLCB0b3RhbFRpbWUsIHNlbGZUaW1lLCBoZWFkKTsKKyAgICB0aGlzLmluaXRGdW5jSW5m
b18oKTsKKyAgICB0aGlzLmNhbGxVSUQgPSBpbnRlcm5hbEZ1bmNOYW1lOworfTsKK2RldnRvb2xz
LnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBkZXZ0b29scy5w
cm9maWxlci5Qcm9maWxlVmlldy5Ob2RlLnByb3RvdHlwZTsKKworCisvKioKKyAqIFJlZ0V4IGZv
ciBzdHJpcHBpbmcgVjgncyBwcmVmaXhlcyBvZiBjb21waWxlZCBmdW5jdGlvbnMuCisgKi8KK2Rl
dnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLkZVTkNfTkFNRV9TVFJJUF9SRSA9IC9eKD86
TGF6eUNvbXBpbGV8RnVuY3Rpb258Q2FsbGJhY2spOiAoLiopJC87CisKKworLyoqCisgKiBSZWdF
eCBmb3IgZXh0cmFjdGluZyBzY3JpcHQgc291cmNlIFVSTCBhbmQgbGluZSBudW1iZXIuCisgKi8K
K2RldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLkZVTkNfTkFNRV9QQVJTRV9SRSA9IC9e
KCg/OmdldCB8IHNldCApP1teIF0rKSAoLiopOihcZCspKCBce1xkK1x9KT8kLzsKKworCisvKioK
KyAqIEluaXRzICJmdW5jdGlvbk5hbWUiLCAidXJsIiwgYW5kICJsaW5lTnVtYmVyIiBmaWVsZHMg
dXNpbmcgImludGVybmFsRnVuY05hbWUiCisgKiBmaWVsZC4KKyAqIEBwcml2YXRlCisgKi8KK2Rl
dnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdOb2RlLnByb3RvdHlwZS5pbml0RnVuY0luZm9fID0g
ZnVuY3Rpb24oKQoreworICAgIHZhciBub2RlQWxpYXMgPSBkZXZ0b29scy5wcm9maWxlci5XZWJL
aXRWaWV3Tm9kZTsKKyAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMuaW50ZXJuYWxGdW5jTmFt
ZTsKKworICAgIHZhciBzdHJpcHBlZE5hbWUgPSBub2RlQWxpYXMuRlVOQ19OQU1FX1NUUklQX1JF
LmV4ZWModGhpcy5mdW5jdGlvbk5hbWUpOworICAgIGlmIChzdHJpcHBlZE5hbWUpCisgICAgICAg
IHRoaXMuZnVuY3Rpb25OYW1lID0gc3RyaXBwZWROYW1lWzFdOworCisgICAgdmFyIHBhcnNlZE5h
bWUgPSBub2RlQWxpYXMuRlVOQ19OQU1FX1BBUlNFX1JFLmV4ZWModGhpcy5mdW5jdGlvbk5hbWUp
OworICAgIGlmIChwYXJzZWROYW1lKSB7CisgICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gcGFy
c2VkTmFtZVsxXTsKKyAgICAgICAgaWYgKHBhcnNlZE5hbWVbNF0pCisgICAgICAgICAgICB0aGlz
LmZ1bmN0aW9uTmFtZSArPSBwYXJzZWROYW1lWzRdOworICAgICAgICB0aGlzLnVybCA9IHBhcnNl
ZE5hbWVbMl07CisgICAgICAgIHRoaXMubGluZU51bWJlciA9IHBhcnNlZE5hbWVbM107CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGhpcy51cmwgPSAnJzsKKyAgICAgICAgdGhpcy5saW5lTnVtYmVy
ID0gMDsKKyAgICB9Cit9OworCisKKy8qKgorICogQW5jZXN0b3Igb2YgYSBwcm9maWxlIG9iamVj
dCB0aGF0IGxlYXZlcyBvdXQgb25seSBKUy1yZWxhdGVkIGZ1bmN0aW9ucy4KKyAqIEBjb25zdHJ1
Y3RvcgorICovCitkZXZ0b29scy5wcm9maWxlci5Kc1Byb2ZpbGUgPSBmdW5jdGlvbigpCit7Cisg
ICAgZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZS5jYWxsKHRoaXMpOworfTsKK2RldnRvb2xzLnBy
b2ZpbGVyLkpzUHJvZmlsZS5wcm90b3R5cGUuX19wcm90b19fID0gZGV2dG9vbHMucHJvZmlsZXIu
UHJvZmlsZS5wcm90b3R5cGU7CisKKworLyoqCisgKiBSZWdFeHAgdGhhdCBsZWF2ZXMgb25seSBu
b24tbmF0aXZlIEpTIGZ1bmN0aW9ucy4KKyAqIEB0eXBlIHtSZWdFeHB9CisgKi8KK2RldnRvb2xz
LnByb2ZpbGVyLkpzUHJvZmlsZS5KU19OT05fTkFUSVZFX1JFID0gbmV3IFJlZ0V4cCgKKyAgICAg
ICJeIiArCisgICAgICAgICIoPzpDYWxsYmFjazopfCIgKworICAgICAgICAiKD86U2NyaXB0OiAo
PyFuYXRpdmUpKXwiICsKKyAgICAgICAgIig/Oig/OkxhenlDb21waWxlfEZ1bmN0aW9uKTogW14g
XSooPzogKD8hbmF0aXZlIClbXiBdKzpcXGQrKT8kKSIpOworCisKKy8qKgorICogQG92ZXJyaWRl
CisgKi8KK2RldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZS5wcm90b3R5cGUuc2tpcFRoaXNGdW5j
dGlvbiA9IGZ1bmN0aW9uKG5hbWUpCit7CisgICAgcmV0dXJuICFkZXZ0b29scy5wcm9maWxlci5K
c1Byb2ZpbGUuSlNfTk9OX05BVElWRV9SRS50ZXN0KG5hbWUpOworfTsKKworCisvKioKKyAqIFBy
b2ZpbGVyIHByb2Nlc3Nvci4gQ29uc3VtZXMgcHJvZmlsZXIgbG9nIGFuZCBidWlsZHMgcHJvZmls
ZSB2aWV3cy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9uKGRldnRvb2xzLnByb2ZpbGVyLlByb2Zp
bGVWaWV3KX0gbmV3UHJvZmlsZUNhbGxiYWNrIENhbGxiYWNrCisgKiAgICAgdGhhdCByZWNlaXZl
cyBhIG5ldyBwcm9jZXNzZWQgcHJvZmlsZS4KKyAqIEBjb25zdHJ1Y3RvcgorICovCitkZXZ0b29s
cy5wcm9maWxlci5Qcm9jZXNzb3IgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIGRpc3BhdGNoZXMg
PSB7CisgICAgICAgICJjb2RlLWNyZWF0aW9uIjogeworICAgICAgICAgICAgcGFyc2VyczogW251
bGwsIHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLCBwYXJzZUludCwgbnVsbF0sCisg
ICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0NvZGVDcmVhdGlvbl8sIGJhY2tyZWZz
OiB0cnVlLAorICAgICAgICAgICAgbmVlZHNQcm9maWxlOiB0cnVlIH0sCisgICAgICAgICJjb2Rl
LW1vdmUiOiB7IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKSwKKyAg
ICAgICAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZS1tb3ZlLXRvIildLAorICAg
ICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NDb2RlTW92ZV8sIGJhY2tyZWZzOiB0cnVl
LAorICAgICAgICAgICAgbmVlZHNQcm9maWxlOiB0cnVlIH0sCisgICAgICAgICJjb2RlLWRlbGV0
ZSI6IHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpXSwKKyAgICAg
ICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzQ29kZURlbGV0ZV8sIGJhY2tyZWZzOiB0cnVl
LAorICAgICAgICAgICAgbmVlZHNQcm9maWxlOiB0cnVlIH0sCisgICAgICAgICJmdW5jdGlvbi1j
cmVhdGlvbiI6IHsgcGFyc2VyczogW3RoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAor
ICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzUGFyc2VyKCJmdW5jdGlvbi1vYmoiKV0sCisg
ICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ3JlYXRpb25fLCBiYWNr
cmVmczogdHJ1ZSB9LAorICAgICAgICAiZnVuY3Rpb24tbW92ZSI6IHsgcGFyc2VyczogW3RoaXMu
Y3JlYXRlQWRkcmVzc1BhcnNlcigiY29kZSIpLAorICAgICAgICAgICAgdGhpcy5jcmVhdGVBZGRy
ZXNzUGFyc2VyKCJjb2RlLW1vdmUtdG8iKV0sCisgICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMu
cHJvY2Vzc0Z1bmN0aW9uTW92ZV8sIGJhY2tyZWZzOiB0cnVlIH0sCisgICAgICAgICJmdW5jdGlv
bi1kZWxldGUiOiB7IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKV0s
CisgICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0Z1bmN0aW9uRGVsZXRlXywgYmFj
a3JlZnM6IHRydWUgfSwKKyAgICAgICAgInRpY2siOiB7IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFk
ZHJlc3NQYXJzZXIoImNvZGUiKSwKKyAgICAgICAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNl
cigic3RhY2siKSwgcGFyc2VJbnQsICJ2YXItYXJncyJdLAorICAgICAgICAgICAgcHJvY2Vzc29y
OiB0aGlzLnByb2Nlc3NUaWNrXywgYmFja3JlZnM6IHRydWUsIG5lZWRQcm9maWxlOiB0cnVlIH0s
CisgICAgICAgICJwcm9maWxlciI6IHsgcGFyc2VyczogW251bGwsICJ2YXItYXJncyJdLAorICAg
ICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NQcm9maWxlcl8sIG5lZWRzUHJvZmlsZTog
ZmFsc2UgfSwKKyAgICAgICAgImhlYXAtc2FtcGxlLWJlZ2luIjogeyBwYXJzZXJzOiBbbnVsbCwg
bnVsbCwgcGFyc2VJbnRdLAorICAgICAgICAgICAgcHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NIZWFw
U2FtcGxlQmVnaW5fIH0sCisgICAgICAgICJoZWFwLXNhbXBsZS1zdGF0cyI6IHsgcGFyc2Vyczog
W251bGwsIG51bGwsIHBhcnNlSW50LCBwYXJzZUludF0sCisgICAgICAgICAgICBwcm9jZXNzb3I6
IHRoaXMucHJvY2Vzc0hlYXBTYW1wbGVTdGF0c18gfSwKKyAgICAgICAgImhlYXAtc2FtcGxlLWl0
ZW0iOiB7IHBhcnNlcnM6IFtudWxsLCBwYXJzZUludCwgcGFyc2VJbnRdLAorICAgICAgICAgICAg
cHJvY2Vzc29yOiB0aGlzLnByb2Nlc3NIZWFwU2FtcGxlSXRlbV8gfSwKKyAgICAgICAgImhlYXAt
anMtY29ucy1pdGVtIjogeyBwYXJzZXJzOiBbbnVsbCwgcGFyc2VJbnQsIHBhcnNlSW50XSwKKyAg
ICAgICAgICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzSGVhcEpzQ29uc0l0ZW1fIH0sCisgICAg
ICAgICJoZWFwLWpzLXJldC1pdGVtIjogeyBwYXJzZXJzOiBbbnVsbCwgInZhci1hcmdzIl0sCisg
ICAgICAgICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc0hlYXBKc1JldEl0ZW1fIH0sCisgICAg
ICAgICJoZWFwLXNhbXBsZS1lbmQiOiB7IHBhcnNlcnM6IFtudWxsLCBudWxsXSwKKyAgICAgICAg
ICAgIHByb2Nlc3NvcjogdGhpcy5wcm9jZXNzSGVhcFNhbXBsZUVuZF8gfSwKKyAgICAgICAgLy8g
Tm90IHVzZWQgaW4gRGV2VG9vbHMgUHJvZmlsZXIuCisgICAgICAgICJzaGFyZWQtbGlicmFyeSI6
IG51bGwsCisgICAgICAgIC8vIE9ic29sZXRlIHJvdyB0eXBlcy4KKyAgICAgICAgImNvZGUtYWxs
b2NhdGUiOiBudWxsLAorICAgICAgICAiYmVnaW4tY29kZS1yZWdpb24iOiBudWxsLAorICAgICAg
ICAiZW5kLWNvZGUtcmVnaW9uIjogbnVsbH07CisKKyAgICBpZiAoZGV2dG9vbHMucHJvZmlsZXIu
UHJvZmlsZS5WRVJTSU9OID09PSAyKSB7CisgICAgICAgIGRpc3BhdGNoZXNbInRpY2siXSA9ICB7
IHBhcnNlcnM6IFt0aGlzLmNyZWF0ZUFkZHJlc3NQYXJzZXIoImNvZGUiKSwKKyAgICAgICAgICAg
IHRoaXMuY3JlYXRlQWRkcmVzc1BhcnNlcigic3RhY2siKSwKKyAgICAgICAgICAgIHRoaXMuY3Jl
YXRlQWRkcmVzc1BhcnNlcigiZnVuYyIpLCBwYXJzZUludCwgInZhci1hcmdzIl0sCisgICAgICAg
ICAgICBwcm9jZXNzb3I6IHRoaXMucHJvY2Vzc1RpY2tWMl8sIGJhY2tyZWZzOiB0cnVlIH07Cisg
ICAgfQorCisgICAgZGV2dG9vbHMucHJvZmlsZXIuTG9nUmVhZGVyLmNhbGwodGhpcywgZGlzcGF0
Y2hlcyk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsYmFjayB0aGF0IGlzIGNhbGxlZCB3aGVuIGEg
bmV3IHByb2ZpbGUgaXMgZW5jb3VudGVyZWQgaW4gdGhlIGxvZy4KKyAgICAgKiBAdHlwZSB7ZnVu
Y3Rpb24oKX0KKyAgICAgKi8KKyAgICB0aGlzLnN0YXJ0ZWRQcm9maWxlUHJvY2Vzc2luZ18gPSBu
dWxsOworCisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgcGVyaW9kaWNh
bGx5IHRvIGRpc3BsYXkgcHJvY2Vzc2luZyBzdGF0dXMuCisgICAgICogQHR5cGUge2Z1bmN0aW9u
KCl9CisgICAgICovCisgICAgdGhpcy5wcm9maWxlUHJvY2Vzc2luZ1N0YXR1c18gPSBudWxsOwor
CisgICAgLyoqCisgICAgICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiBhIHByb2ZpbGUg
aGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBpcyByZWFkeQorICAgICAqIHRvIGJlIHNob3duLgorICAg
ICAqIEB0eXBlIHtmdW5jdGlvbihkZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldyl9CisgICAg
ICovCisgICAgdGhpcy5maW5pc2hlZFByb2ZpbGVQcm9jZXNzaW5nXyA9IG51bGw7CisKKyAgICAv
KioKKyAgICAgKiBUaGUgY3VycmVudCBwcm9maWxlLgorICAgICAqIEB0eXBlIHtkZXZ0b29scy5w
cm9maWxlci5Kc1Byb2ZpbGV9CisgICAgICovCisgICAgdGhpcy5jdXJyZW50UHJvZmlsZV8gPSBu
dWxsOworCisgICAgLyoqCisgICAgICogQnVpbGRlciBvZiBwcm9maWxlIHZpZXdzLiBDcmVhdGVk
IGR1cmluZyAicHJvZmlsZXIsYmVnaW4iIGV2ZW50IHByb2Nlc3NpbmcuCisgICAgICogQHR5cGUg
e2RldnRvb2xzLnByb2ZpbGVyLldlYktpdFZpZXdCdWlsZGVyfQorICAgICAqLworICAgIHRoaXMu
dmlld0J1aWxkZXJfID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIE5leHQgcHJvZmlsZSBpZC4K
KyAgICAgKiBAdHlwZSB7bnVtYmVyfQorICAgICAqLworICAgIHRoaXMucHJvZmlsZUlkXyA9IDE7
CisKKyAgICAvKioKKyAgICAgKiBDb3VudGVyIGZvciBwcm9jZXNzZWQgdGlja3MuCisgICAgICog
QHR5cGUge251bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLnRpY2tzQ291bnRfID0gMDsKKworICAg
IC8qKgorICAgICAqIEludGVydmFsIGlkIGZvciB1cGRhdGluZyBwcm9jZXNzaW5nIHN0YXR1cy4K
KyAgICAgKiBAdHlwZSB7bnVtYmVyfQorICAgICAqLworICAgIHRoaXMucHJvY2Vzc2luZ0ludGVy
dmFsXyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBUaGUgY3VycmVudCBoZWFwIHNuYXBzaG90
LgorICAgICAqIEB0eXBlIHtzdHJpbmd9CisgICAgICovCisgICAgdGhpcy5jdXJyZW50SGVhcFNu
YXBzaG90XyA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBOZXh0IGhlYXAgc25hcHNob3QgaWQu
CisgICAgICogQHR5cGUge251bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLmhlYXBTbmFwc2hvdElk
XyA9IDE7Cit9OworZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5fX3Byb3Rv
X18gPSBkZXZ0b29scy5wcm9maWxlci5Mb2dSZWFkZXIucHJvdG90eXBlOworCisKKy8qKgorICog
QG92ZXJyaWRlCisgKi8KK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJp
bnRFcnJvciA9IGZ1bmN0aW9uKHN0cikKK3sKKyAgICBkZWJ1Z1ByaW50KHN0cik7Cit9OworCisK
Ky8qKgorICogQG92ZXJyaWRlCisgKi8KK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90
b3R5cGUuc2tpcERpc3BhdGNoID0gZnVuY3Rpb24oZGlzcGF0Y2gpCit7CisgICAgcmV0dXJuIGRp
c3BhdGNoLm5lZWRzUHJvZmlsZSAmJiB0aGlzLmN1cnJlbnRQcm9maWxlXyA9PT0gbnVsbDsKK307
CisKKworLyoqCisgKiBTZXRzIHByb2ZpbGUgcHJvY2Vzc2luZyBjYWxsYmFja3MuCisgKgorICog
QHBhcmFtIHtmdW5jdGlvbigpfSBzdGFydGVkIFN0YXJ0ZWQgcHJvY2Vzc2luZyBjYWxsYmFjay4K
KyAqIEBwYXJhbSB7ZnVuY3Rpb24oZGV2dG9vbHMucHJvZmlsZXIuUHJvZmlsZVZpZXcpfSBmaW5p
c2hlZCBGaW5pc2hlZAorICogICAgIHByb2Nlc3NpbmcgY2FsbGJhY2suCisgKi8KK2RldnRvb2xz
LnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUuc2V0Q2FsbGJhY2tzID0gZnVuY3Rpb24oc3Rh
cnRlZCwgcHJvY2Vzc2luZywgZmluaXNoZWQpCit7CisgICAgdGhpcy5zdGFydGVkUHJvZmlsZVBy
b2Nlc3NpbmdfID0gc3RhcnRlZDsKKyAgICB0aGlzLnByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzXyA9
IHByb2Nlc3Npbmc7CisgICAgdGhpcy5maW5pc2hlZFByb2ZpbGVQcm9jZXNzaW5nXyA9IGZpbmlz
aGVkOworfTsKKworCisvKioKKyAqIEFuIGFkZHJlc3MgZm9yIHRoZSBmYWtlICIocHJvZ3JhbSki
IGVudHJ5LiBXZWJLaXQncyB2aXN1YWxpc2F0aW9uCisgKiBoYXMgYXNzdW1wdGlvbnMgb24gaG93
IHRoZSB0b3Agb2YgdGhlIGNhbGwgdHJlZSBzaG91bGQgbG9vayBsaWtlLAorICogYW5kIHdlIG5l
ZWQgdG8gYWRkIGEgZmFrZSBlbnRyeSBhcyB0aGUgdG9wbW9zdCBmdW5jdGlvbi4gVGhpcworICog
YWRkcmVzcyBpcyBjaG9zZW4gYmVjYXVzZSBpdCdzIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgZmly
c3QgbWVtb3J5CisgKiBwYWdlLCB3aGljaCBpcyBuZXZlciB1c2VkIGZvciBjb2RlIG9yIGRhdGEs
IGJ1dCBvbmx5IGFzIGEgZ3VhcmQKKyAqIHBhZ2UgZm9yIGNhdGNoaW5nIEFWIGVycm9ycy4KKyAq
CisgKiBAdHlwZSB7bnVtYmVyfQorICovCitkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJP
R1JBTV9FTlRSWSA9IDB4ZmZmZjsKKy8qKgorICogQHR5cGUge3N0cmluZ30KKyAqLworZGV2dG9v
bHMucHJvZmlsZXIuUHJvY2Vzc29yLlBST0dSQU1fRU5UUllfU1RSID0gIjB4ZmZmZiI7CisKKwor
LyoqCisgKiBTZXRzIG5ldyBwcm9maWxlIGNhbGxiYWNrLgorICogQHBhcmFtIHtmdW5jdGlvbihk
ZXZ0b29scy5wcm9maWxlci5Qcm9maWxlVmlldyl9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9u
LgorICovCitkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnNldE5ld1Byb2Zp
bGVDYWxsYmFjayA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIHRoaXMubmV3UHJvZmlsZUNh
bGxiYWNrXyA9IGNhbGxiYWNrOworfTsKKworCitkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3Iu
cHJvdG90eXBlLnByb2Nlc3NQcm9maWxlcl8gPSBmdW5jdGlvbihzdGF0ZSwgcGFyYW1zKQorewor
ICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSAicmVzdW1lIjoKKyAgICAgICAgICAg
IGlmICh0aGlzLmN1cnJlbnRQcm9maWxlXyA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRo
aXMuY3VycmVudFByb2ZpbGVfID0gbmV3IGRldnRvb2xzLnByb2ZpbGVyLkpzUHJvZmlsZSgpOwor
ICAgICAgICAgICAgICAgIC8vIHNlZSB0aGUgY29tbWVudCBmb3IgZGV2dG9vbHMucHJvZmlsZXIu
UHJvY2Vzc29yLlBST0dSQU1fRU5UUlkKKyAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9m
aWxlXy5hZGRDb2RlKCJGdW5jdGlvbiIsICIocHJvZ3JhbSkiLCBkZXZ0b29scy5wcm9maWxlci5Q
cm9jZXNzb3IuUFJPR1JBTV9FTlRSWSwgMSk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3Rh
cnRlZFByb2ZpbGVQcm9jZXNzaW5nXykKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydGVk
UHJvZmlsZVByb2Nlc3NpbmdfKCk7CisgICAgICAgICAgICAgICAgdGhpcy50aWNrc0NvdW50XyA9
IDA7CisgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAgICAgIGlm
ICh0aGlzLnByb2ZpbGVQcm9jZXNzaW5nU3RhdHVzXykgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLnByb2Nlc3NpbmdJbnRlcnZhbF8gPSB3aW5kb3cuc2V0SW50ZXJ2YWwoCisgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgc2VsZi5wcm9maWxlUHJvY2Vzc2luZ1N0YXR1c18o
c2VsZi50aWNrc0NvdW50Xyk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAicGF1c2UiOgorICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFByb2ZpbGVfICE9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5wcm9j
ZXNzaW5nSW50ZXJ2YWxfKTsKKyAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdJbnRlcnZh
bF8gPSBudWxsOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbmlzaGVkUHJvZmlsZVByb2Nl
c3NpbmdfKQorICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkUHJvZmlsZVByb2Nlc3Np
bmdfKHRoaXMuY3JlYXRlUHJvZmlsZUZvclZpZXcoKSk7CisgICAgICAgICAgICAgICAgdGhpcy5j
dXJyZW50UHJvZmlsZV8gPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgImJlZ2luIjoKKyAgICAgICAgICAgIHZhciBzYW1wbGluZ1JhdGUgPSBO
YU47CisgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAg
c2FtcGxpbmdSYXRlID0gcGFyc2VJbnQocGFyYW1zWzBdKTsKKyAgICAgICAgICAgIGlmIChpc05h
TihzYW1wbGluZ1JhdGUpKQorICAgICAgICAgICAgICAgIHNhbXBsaW5nUmF0ZSA9IDE7CisgICAg
ICAgICAgICB0aGlzLnZpZXdCdWlsZGVyXyA9IG5ldyBkZXZ0b29scy5wcm9maWxlci5XZWJLaXRW
aWV3QnVpbGRlcihzYW1wbGluZ1JhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
IFRoZXNlIGV2ZW50cyBhcmUgdmFsaWQgYnV0IGFyZW4ndCB1c2VkLgorICAgICAgICBjYXNlICJj
b21wcmVzc2lvbiI6CisgICAgICAgIGNhc2UgImVuZCI6IGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHByb2ZpbGVyIHN0YXRlOiAi
ICsgc3RhdGUpOworICAgIH0KK307CisKKworZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnBy
b3RvdHlwZS5wcm9jZXNzQ29kZUNyZWF0aW9uXyA9IGZ1bmN0aW9uKHR5cGUsIHN0YXJ0LCBzaXpl
LCBuYW1lKQoreworICAgIHRoaXMuY3VycmVudFByb2ZpbGVfLmFkZENvZGUodGhpcy5leHBhbmRB
bGlhcyh0eXBlKSwgbmFtZSwgc3RhcnQsIHNpemUpOworfTsKKworCitkZXZ0b29scy5wcm9maWxl
ci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NDb2RlTW92ZV8gPSBmdW5jdGlvbihmcm9tLCB0
bykKK3sKKyAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5tb3ZlQ29kZShmcm9tLCB0byk7Cit9Owor
CisKK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0NvZGVEZWxl
dGVfID0gZnVuY3Rpb24oc3RhcnQpCit7CisgICAgdGhpcy5jdXJyZW50UHJvZmlsZV8uZGVsZXRl
Q29kZShzdGFydCk7Cit9OworCisKK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5
cGUucHJvY2Vzc0Z1bmN0aW9uQ3JlYXRpb25fID0gZnVuY3Rpb24oZnVuY3Rpb25BZGRyLCBjb2Rl
QWRkcikKK3sKKyAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5hZGRDb2RlQWxpYXMoZnVuY3Rpb25B
ZGRyLCBjb2RlQWRkcik7Cit9OworCisKK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90
b3R5cGUucHJvY2Vzc0Z1bmN0aW9uTW92ZV8gPSBmdW5jdGlvbihmcm9tLCB0bykKK3sKKyAgICB0
aGlzLmN1cnJlbnRQcm9maWxlXy5zYWZlTW92ZUR5bmFtaWNDb2RlKGZyb20sIHRvKTsKK307CisK
KworZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzRnVuY3Rpb25E
ZWxldGVfID0gZnVuY3Rpb24oc3RhcnQpCit7CisgICAgdGhpcy5jdXJyZW50UHJvZmlsZV8uc2Fm
ZURlbGV0ZUR5bmFtaWNDb2RlKHN0YXJ0KTsKK307CisKKworLy8gVE9ETyhtbmFnYW5vdik6IFJl
bW92ZSBhZnRlciBuZXh0IFY4IHJvbGwuCitkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IucHJv
dG90eXBlLnByb2Nlc3NUaWNrXyA9IGZ1bmN0aW9uKHBjLCBzcCwgdm1TdGF0ZSwgc3RhY2spCit7
CisgICAgLy8gc2VlIHRoZSBjb21tZW50IGZvciBkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3Iu
UFJPR1JBTV9FTlRSWQorICAgIHN0YWNrLnB1c2goZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29y
LlBST0dSQU1fRU5UUllfU1RSKTsKKyAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5yZWNvcmRUaWNr
KHRoaXMucHJvY2Vzc1N0YWNrKHBjLCBzdGFjaykpOworICAgIHRoaXMudGlja3NDb3VudF8rKzsK
K307CisKKworZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3RvdHlwZS5wcm9jZXNzVGlj
a1YyXyA9IGZ1bmN0aW9uKHBjLCBzcCwgZnVuYywgdm1TdGF0ZSwgc3RhY2spCit7CisgICAgLy8g
c2VlIHRoZSBjb21tZW50IGZvciBkZXZ0b29scy5wcm9maWxlci5Qcm9jZXNzb3IuUFJPR1JBTV9F
TlRSWQorICAgIHN0YWNrLnB1c2goZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLlBST0dSQU1f
RU5UUllfU1RSKTsKKworCisgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgdmFyIGZ1bmNFbnRyeSA9
IHRoaXMuY3VycmVudFByb2ZpbGVfLmZpbmRFbnRyeShmdW5jKTsKKyAgICAgICAgaWYgKCFmdW5j
RW50cnkgfHwgIWZ1bmNFbnRyeS5pc0pTRnVuY3Rpb24gfHwgIWZ1bmNFbnRyeS5pc0pTRnVuY3Rp
b24oKSkKKyAgICAgICAgICAgIGZ1bmMgPSAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHZhciBjdXJyRW50cnkgPSB0aGlzLmN1cnJlbnRQcm9maWxlXy5maW5kRW50cnkocGMpOworICAg
ICAgICAgICAgaWYgKCFjdXJyRW50cnkgfHwgIWN1cnJFbnRyeS5pc0pTRnVuY3Rpb24gfHwgY3Vy
ckVudHJ5LmlzSlNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICAgICAgZnVuYyA9IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0aGlzLmN1cnJlbnRQcm9maWxlXy5y
ZWNvcmRUaWNrKHRoaXMucHJvY2Vzc1N0YWNrKHBjLCBmdW5jLCBzdGFjaykpOworICAgIHRoaXMu
dGlja3NDb3VudF8rKzsKK307CisKKworZGV2dG9vbHMucHJvZmlsZXIuUHJvY2Vzc29yLnByb3Rv
dHlwZS5wcm9jZXNzSGVhcFNhbXBsZUJlZ2luXyA9IGZ1bmN0aW9uKHNwYWNlLCBzdGF0ZSwgdGlj
a3MpCit7CisgICAgaWYgKHNwYWNlICE9PSAiSGVhcCIpIHJldHVybjsKKyAgICB0aGlzLmN1cnJl
bnRIZWFwU25hcHNob3RfID0geworICAgICAgICBudW1iZXI6IHRoaXMuaGVhcFNuYXBzaG90SWRf
KyssCisgICAgICAgIGVudHJpZXM6IHt9LAorICAgICAgICBjbHVzdGVyczoge30sCisgICAgICAg
IGxvd2xldmVsczoge30sCisgICAgICAgIHRpY2tzOiB0aWNrcworICAgIH07Cit9OworCisKK2Rl
dnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBTYW1wbGVTdGF0
c18gPSBmdW5jdGlvbihzcGFjZSwgc3RhdGUsIGNhcGFjaXR5LCB1c2VkKQoreworICAgIGlmIChz
cGFjZSAhPT0gIkhlYXAiKSByZXR1cm47Cit9OworCisKK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nl
c3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBTYW1wbGVJdGVtXyA9IGZ1bmN0aW9uKGl0ZW0sIG51
bWJlciwgc2l6ZSkKK3sKKyAgICBpZiAoIXRoaXMuY3VycmVudEhlYXBTbmFwc2hvdF8pIHJldHVy
bjsKKyAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfLmxvd2xldmVsc1tpdGVtXSA9IHsKKyAg
ICAgICAgdHlwZTogaXRlbSwgY291bnQ6IG51bWJlciwgc2l6ZTogc2l6ZQorICAgIH07Cit9Owor
CisKK2RldnRvb2xzLnByb2ZpbGVyLlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBKc0Nv
bnNJdGVtXyA9IGZ1bmN0aW9uKGl0ZW0sIG51bWJlciwgc2l6ZSkKK3sKKyAgICBpZiAoIXRoaXMu
Y3VycmVudEhlYXBTbmFwc2hvdF8pIHJldHVybjsKKyAgICB0aGlzLmN1cnJlbnRIZWFwU25hcHNo
b3RfLmVudHJpZXNbaXRlbV0gPSB7CisgICAgICAgIGNvbnM6IGl0ZW0sIGNvdW50OiBudW1iZXIs
IHNpemU6IHNpemUsIHJldGFpbmVyczoge30KKyAgICB9OworfTsKKworCitkZXZ0b29scy5wcm9m
aWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLnByb2Nlc3NIZWFwSnNSZXRJdGVtXyA9IGZ1bmN0aW9u
KGl0ZW0sIHJldGFpbmVyc0FycmF5KQoreworICAgIGlmICghdGhpcy5jdXJyZW50SGVhcFNuYXBz
aG90XykgcmV0dXJuOworICAgIHZhciByYXdSZXRhaW5lcnMgPSB7fTsKKyAgICBmb3IgKHZhciBp
ID0gMCwgbiA9IHJldGFpbmVyc0FycmF5Lmxlbmd0aDsgaSA8IG47ICsraSkgeworICAgICAgICB2
YXIgZW50cnkgPSByZXRhaW5lcnNBcnJheVtpXS5zcGxpdCgiOyIpOworICAgICAgICByYXdSZXRh
aW5lcnNbZW50cnlbMF1dID0gcGFyc2VJbnQoZW50cnlbMV0sIDEwKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBtZXJnZVJldGFpbmVycyhlbnRyeSkgeworICAgICAgICBmb3IgKHZhciByYXdSZXRh
aW5lciBpbiByYXdSZXRhaW5lcnMpIHsKKyAgICAgICAgICAgIHZhciBjb25zTmFtZSA9IHJhd1Jl
dGFpbmVyLmluZGV4T2YoIjoiKSAhPT0gLTEgPyByYXdSZXRhaW5lci5zcGxpdCgiOiIpWzBdIDog
cmF3UmV0YWluZXI7CisgICAgICAgICAgICBpZiAoIShjb25zTmFtZSBpbiBlbnRyeS5yZXRhaW5l
cnMpKQorICAgICAgICAgICAgICAgIGVudHJ5LnJldGFpbmVyc1tjb25zTmFtZV0gPSB7IGNvbnM6
IGNvbnNOYW1lLCBjb3VudDogMCwgY2x1c3RlcnM6IHt9IH07CisgICAgICAgICAgICB2YXIgcmV0
YWluZXIgPSBlbnRyeS5yZXRhaW5lcnNbY29uc05hbWVdOworICAgICAgICAgICAgcmV0YWluZXIu
Y291bnQgKz0gcmF3UmV0YWluZXJzW3Jhd1JldGFpbmVyXTsKKyAgICAgICAgICAgIGlmIChjb25z
TmFtZSAhPT0gcmF3UmV0YWluZXIpCisgICAgICAgICAgICAgICAgcmV0YWluZXIuY2x1c3RlcnNb
cmF3UmV0YWluZXJdID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpdGVtLmlu
ZGV4T2YoIjoiKSAhPT0gLTEpIHsKKyAgICAgIC8vIEFycmF5LCBGdW5jdGlvbiwgb3IgT2JqZWN0
IGluc3RhbmNlcyBjbHVzdGVyIGNhc2UuCisgICAgICBpZiAoIShpdGVtIGluIHRoaXMuY3VycmVu
dEhlYXBTbmFwc2hvdF8uY2x1c3RlcnMpKSB7CisgICAgICAgICAgdGhpcy5jdXJyZW50SGVhcFNu
YXBzaG90Xy5jbHVzdGVyc1tpdGVtXSA9IHsKKyAgICAgICAgICAgICAgY29uczogaXRlbSwgcmV0
YWluZXJzOiB7fQorICAgICAgICAgIH07CisgICAgICB9CisgICAgICBtZXJnZVJldGFpbmVycyh0
aGlzLmN1cnJlbnRIZWFwU25hcHNob3RfLmNsdXN0ZXJzW2l0ZW1dKTsKKyAgICAgIGl0ZW0gPSBp
dGVtLnNwbGl0KCI6IilbMF07CisgICAgfQorICAgIG1lcmdlUmV0YWluZXJzKHRoaXMuY3VycmVu
dEhlYXBTbmFwc2hvdF8uZW50cmllc1tpdGVtXSk7Cit9OworCisKK2RldnRvb2xzLnByb2ZpbGVy
LlByb2Nlc3Nvci5wcm90b3R5cGUucHJvY2Vzc0hlYXBTYW1wbGVFbmRfID0gZnVuY3Rpb24oc3Bh
Y2UsIHN0YXRlKQoreworICAgIGlmIChzcGFjZSAhPT0gIkhlYXAiKSByZXR1cm47CisgICAgdmFy
IHNuYXBzaG90ID0gdGhpcy5jdXJyZW50SGVhcFNuYXBzaG90XzsKKyAgICB0aGlzLmN1cnJlbnRI
ZWFwU25hcHNob3RfID0gbnVsbDsKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzLmFk
ZFNuYXBzaG90KHNuYXBzaG90KTsKK307CisKKworLyoqCisgKiBDcmVhdGVzIGEgcHJvZmlsZSBm
b3IgZnVydGhlciBkaXNwbGF5aW5nIGluIFByb2ZpbGVWaWV3LgorICovCitkZXZ0b29scy5wcm9m
aWxlci5Qcm9jZXNzb3IucHJvdG90eXBlLmNyZWF0ZVByb2ZpbGVGb3JWaWV3ID0gZnVuY3Rpb24o
KQoreworICAgIHZhciBwcm9maWxlID0gdGhpcy52aWV3QnVpbGRlcl8uYnVpbGRWaWV3KHRoaXMu
Y3VycmVudFByb2ZpbGVfLmdldFRvcERvd25Qcm9maWxlKCkpOworICAgIHByb2ZpbGUudWlkID0g
dGhpcy5wcm9maWxlSWRfKys7CisgICAgcHJvZmlsZS50aXRsZSA9IFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZSArICIuIiArIHByb2ZpbGUudWlkOworICAgIHJldHVybiBwcm9maWxlOworfTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvanMvVGVzdHMuanMgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL2pzL1Rlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJh
ODMyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2pzL1Rlc3RzLmpz
CkBAIC0wLDAgKzEsMTg2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFRoaXMgZmlsZSBjb250
YWlucyBzbWFsbCB0ZXN0aW5nIGZyYW1ld29yayBhbG9uZyB3aXRoIHRoZQorICogdGVzdCBzdWl0
ZSBmb3IgdGhlIGZyb250ZW5kLiBUaGVzZSB0ZXN0cyBhcmUgYSBwYXJ0IG9mIHRoZSBjb250aW51
ZXMgYnVpbGQKKyAqIGFuZCBhcmUgZXhlY3V0ZWQgYnkgdGhlIGRldnRvb2xzX3Nhbml0eV91bml0
dGVzdC5jYyBhcyBhIHBhcnQgb2YgdGhlCisgKiBJbnRlcmFjdGl2ZSBVSSBUZXN0IHN1aXRlLgor
ICovCisKK2lmICh3aW5kb3cuZG9tQXV0b21hdGlvbkNvbnRyb2xsZXIpIHsKKwordmFyIF9fX2lu
dGVyYWN0aXZlVWlUZXN0c01vZGUgPSB0cnVlOworCisvKioKKyAqIFRlc3Qgc3VpdGUgZm9yIGlu
dGVyYWN0aXZlIFVJIHRlc3RzLgorICogQGNvbnN0cnVjdG9yCisgKi8KK1Rlc3RTdWl0ZSA9IGZ1
bmN0aW9uKCkKK3sKKyAgICB0aGlzLmNvbnRyb2xUYWtlbl8gPSBmYWxzZTsKKyAgICB0aGlzLnRp
bWVySWRfID0gLTE7Cit9OworCisKKy8qKgorICogUmVwb3J0cyB0ZXN0IGZhaWx1cmUuCisgKiBA
cGFyYW0ge3N0cmluZ30gbWVzc2FnZSBGYWlsdXJlIGRlc2NyaXB0aW9uLgorICovCitUZXN0U3Vp
dGUucHJvdG90eXBlLmZhaWwgPSBmdW5jdGlvbihtZXNzYWdlKQoreworICAgIGlmICh0aGlzLmNv
bnRyb2xUYWtlbl8pCisgICAgICAgIHRoaXMucmVwb3J0RmFpbHVyZV8obWVzc2FnZSk7CisgICAg
ZWxzZQorICAgICAgICB0aHJvdyBtZXNzYWdlOworfTsKKworCisvKioKKyAqIEVxdWFscyBhc3Nl
cnRpb24gdGVzdHMgdGhhdCBleHBlY3RlZCA9PT0gYWN0dWFsLgorICogQHBhcmFtIHtPYmplY3R9
IGV4cGVjdGVkIEV4cGVjdGVkIG9iamVjdC4KKyAqIEBwYXJhbSB7T2JqZWN0fSBhY3R1YWwgQWN0
dWFsIG9iamVjdC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbWVzc2FnZSBVc2VyIG1lc3NhZ2Ug
dG8gcHJpbnQgaWYgdGhlIHRlc3QgZmFpbHMuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUuYXNz
ZXJ0RXF1YWxzID0gZnVuY3Rpb24oZXhwZWN0ZWQsIGFjdHVhbCwgb3B0X21lc3NhZ2UpCit7Cisg
ICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSAiRXhw
ZWN0ZWQ6ICciICsgZXhwZWN0ZWQgKyAiJywgYnV0IHdhcyAnIiArIGFjdHVhbCArICInIjsKKyAg
ICAgICAgaWYgKG9wdF9tZXNzYWdlKQorICAgICAgICAgICAgbWVzc2FnZSA9IG9wdF9tZXNzYWdl
ICsgIigiICsgbWVzc2FnZSArICIpIjsKKyAgICAgICAgdGhpcy5mYWlsKG1lc3NhZ2UpOworICAg
IH0KK307CisKKworLyoqCisgKiBUcnVlIGFzc2VydGlvbiB0ZXN0cyB0aGF0IHZhbHVlID09IHRy
dWUuCisgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgQWN0dWFsIG9iamVjdC4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBvcHRfbWVzc2FnZSBVc2VyIG1lc3NhZ2UgdG8gcHJpbnQgaWYgdGhlIHRlc3QgZmFp
bHMuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUuYXNzZXJ0VHJ1ZSA9IGZ1bmN0aW9uKHZhbHVl
LCBvcHRfbWVzc2FnZSkKK3sKKyAgICB0aGlzLmFzc2VydEVxdWFscyh0cnVlLCAhIXZhbHVlLCBv
cHRfbWVzc2FnZSk7Cit9OworCisKKy8qKgorICogQ29udGFpbnMgYXNzZXJ0aW9uIHRlc3RzIHRo
YXQgc3RyaW5nIGNvbnRhaW5zIHN1YnN0cmluZy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcg
T3V0ZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gc3Vic3RyaW5nIElubmVyLgorICovCitUZXN0U3Vp
dGUucHJvdG90eXBlLmFzc2VydENvbnRhaW5zID0gZnVuY3Rpb24oc3RyaW5nLCBzdWJzdHJpbmcp
Cit7CisgICAgaWYgKHN0cmluZy5pbmRleE9mKHN1YnN0cmluZykgPT09IC0xKQorICAgICAgICB0
aGlzLmZhaWwoIkV4cGVjdGVkIHRvOiAnIiArIHN0cmluZyArICInIHRvIGNvbnRhaW4gJyIgKyBz
dWJzdHJpbmcgKyAiJyIpOworfTsKKworCisvKioKKyAqIFRha2VzIGNvbnRyb2wgb3ZlciBleGVj
dXRpb24uCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGFrZUNvbnRyb2wgPSBmdW5jdGlvbigp
Cit7CisgICAgdGhpcy5jb250cm9sVGFrZW5fID0gdHJ1ZTsKKyAgICAvLyBTZXQgdXAgZ3VhcmQg
dGltZXIuCisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMudGltZXJJZF8gPSBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBzZWxmLnJlcG9ydEZhaWx1cmVfKCJUaW1lb3V0IGV4
Y2VlZGVkOiAyMCBzZWMiKTsKKyAgICB9LCAyMDAwMCk7Cit9OworCisKKy8qKgorICogUmVsZWFz
ZXMgY29udHJvbCBvdmVyIGV4ZWN1dGlvbi4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5yZWxl
YXNlQ29udHJvbCA9IGZ1bmN0aW9uKCkKK3sKKyAgICBpZiAodGhpcy50aW1lcklkXyAhPT0gLTEp
IHsKKyAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZF8pOworICAgICAgICB0aGlzLnRp
bWVySWRfID0gLTE7CisgICAgfQorICAgIHRoaXMucmVwb3J0T2tfKCk7Cit9OworCisKKy8qKgor
ICogQXN5bmMgdGVzdHMgdXNlIHRoaXMgb25lIHRvIHJlcG9ydCB0aGF0IHRoZXkgYXJlIGNvbXBs
ZXRlZC4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5yZXBvcnRPa18gPSBmdW5jdGlvbigpCit7
CisgICAgd2luZG93LmRvbUF1dG9tYXRpb25Db250cm9sbGVyLnNlbmQoIltPS10iKTsKK307CisK
KworLyoqCisgKiBBc3luYyB0ZXN0cyB1c2UgdGhpcyBvbmUgdG8gcmVwb3J0IGZhaWx1cmVzLgor
ICovCitUZXN0U3VpdGUucHJvdG90eXBlLnJlcG9ydEZhaWx1cmVfID0gZnVuY3Rpb24oZXJyb3Ip
Cit7CisgICAgaWYgKHRoaXMudGltZXJJZF8gIT09IC0xKSB7CisgICAgICAgIGNsZWFyVGltZW91
dCh0aGlzLnRpbWVySWRfKTsKKyAgICAgICAgdGhpcy50aW1lcklkXyA9IC0xOworICAgIH0KKyAg
ICB3aW5kb3cuZG9tQXV0b21hdGlvbkNvbnRyb2xsZXIuc2VuZCgiW0ZBSUxFRF0gIiArIGVycm9y
KTsKK307CisKKworLyoqCisgKiBSdW5zIGFsbCBnbG9iYWwgZnVuY3Rpb25zIHN0YXJ0aW5nIHdp
dGggInRlc3QiIGFzIHVuaXQgdGVzdHMuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUucnVuVGVz
dCA9IGZ1bmN0aW9uKHRlc3ROYW1lKQoreworICAgIHRyeSB7CisgICAgICAgIHRoaXNbdGVzdE5h
bWVdKCk7CisgICAgICAgIGlmICghdGhpcy5jb250cm9sVGFrZW5fKQorICAgICAgICAgICAgdGhp
cy5yZXBvcnRPa18oKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRoaXMucmVwb3J0RmFp
bHVyZV8oZSk7CisgICAgfQorfTsKKworCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSBwYW5lbE5h
bWUgTmFtZSBvZiB0aGUgcGFuZWwgdG8gc2hvdy4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5z
aG93UGFuZWwgPSBmdW5jdGlvbihwYW5lbE5hbWUpCit7CisgICAgLy8gT3BlbiBTY3JpcHRzIHBh
bmVsLgorICAgIHZhciB0b29sYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRvb2xiYXIi
KTsKKyAgICB2YXIgYnV0dG9uID0gdG9vbGJhci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHBhbmVs
TmFtZSlbMF07CisgICAgYnV0dG9uLmNsaWNrKCk7CisgICAgdGhpcy5hc3NlcnRFcXVhbHMoV2Vi
SW5zcGVjdG9yLnBhbmVsc1twYW5lbE5hbWVdLCBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsKTsK
K307CisKKworLyoqCisgKiBPdmVycmlkZXMgdGhlIG1ldGhvZCB3aXRoIHNwZWNpZmllZCBuYW1l
IHVudGlsIGl0J3MgY2FsbGVkIGZpcnN0IHRpbWUuCisgKiBAcGFyYW0ge09iamVjdH0gcmVjZWl2
ZXIgQW4gb2JqZWN0IHdob3NlIG1ldGhvZCB0byBvdmVycmlkZS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBtZXRob2ROYW1lIE5hbWUgb2YgdGhlIG1ldGhvZCB0byBvdmVycmlkZS4KKyAqIEBwYXJhbSB7
RnVuY3Rpb259IG92ZXJyaWRlIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHJpZ2h0
IGFmdGVyIHRoZQorICogICAgIG92ZXJyaWRlbiBtZXRob2QgcmV0dXJucy4KKyAqIEBwYXJhbSB7
Ym9vbGVhbn0gb3B0X3N0aWNreSBXaGV0aGVyIHJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kIGFmdGVy
IGZpcnN0IHJ1bgorICogICAgIG9yIG5vdC4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5hZGRT
bmlmZmVyID0gZnVuY3Rpb24ocmVjZWl2ZXIsIG1ldGhvZE5hbWUsIG92ZXJyaWRlLCBvcHRfc3Rp
Y2t5KQoreworICAgIHZhciBvcmlnID0gcmVjZWl2ZXJbbWV0aG9kTmFtZV07CisgICAgaWYgKHR5
cGVvZiBvcmlnICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aGlzLmZhaWwoIkNhbm5vdCBmaW5k
IG1ldGhvZCB0byBvdmVycmlkZTogIiArIG1ldGhvZE5hbWUpOworICAgIHZhciB0ZXN0ID0gdGhp
czsKKyAgICByZWNlaXZlclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHZhcl9hcmdzKSB7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gb3JpZy5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKCFvcHRfc3RpY2t5
KQorICAgICAgICAgICAgICAgIHJlY2VpdmVyW21ldGhvZE5hbWVdID0gb3JpZzsKKyAgICAgICAg
fQorICAgICAgICAvLyBJbiBjYXNlIG9mIGV4Y2VwdGlvbiB0aGUgb3ZlcnJpZGUgd29uJ3QgYmUg
Y2FsbGVkLgorICAgICAgICB0cnkgeworICAgICAgICAgICAgb3ZlcnJpZGUuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGVzdC5mYWls
KCJFeGNlcHRpb24gaW4gb3ZlcnJpZGVuIG1ldGhvZCAnIiArIG1ldGhvZE5hbWUgKyAiJzogIiAr
IGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK307CisKKwor
Ly8gVUkgVGVzdHMKKworCisvKioKKyAqIFRlc3RzIHRoYXQgdGhlIHJlYWwgaW5qZWN0ZWQgaG9z
dCBpcyBwcmVzZW50IGluIHRoZSBjb250ZXh0LgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RIb3N0SXNQcmVzZW50ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuYXNzZXJ0VHJ1ZSh0eXBl
b2YgSW5zcGVjdG9yRnJvbnRlbmRIb3N0ID09PSAib2JqZWN0IiAmJiAhSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmlzU3R1Yik7Cit9OworCisKKy8qKgorICogVGVzdHMgZWxlbWVudHMgdHJlZSBoYXMg
YW4gIkhUTUwiIHJvb3QuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEVsZW1lbnRzVHJl
ZVJvb3QgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIGRvYyA9IFdlYkluc3BlY3Rvci5kb21BZ2Vu
dC5kb2N1bWVudDsKKyAgICB0aGlzLmFzc2VydEVxdWFscygiSFRNTCIsIGRvYy5kb2N1bWVudEVs
ZW1lbnQubm9kZU5hbWUpOworICAgIHRoaXMuYXNzZXJ0VHJ1ZShkb2MuZG9jdW1lbnRFbGVtZW50
Lmhhc0NoaWxkTm9kZXMoKSk7Cit9OworCisKKy8qKgorICogVGVzdHMgdGhhdCBtYWluIHJlc291
cmNlIGlzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBhbmQgdGhhdCBpdCBpcworICogdGhlIG9ubHkg
cmVzb3VyY2UuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdE1haW5SZXNvdXJjZSA9IGZ1
bmN0aW9uKCkKK3sKKyAgICB2YXIgdG9rZW5zID0gW107CisgICAgdmFyIHJlc291cmNlcyA9IFdl
Ykluc3BlY3Rvci5yZXNvdXJjZXM7CisgICAgZm9yICh2YXIgaWQgaW4gcmVzb3VyY2VzKQorICAg
ICAgICB0b2tlbnMucHVzaChyZXNvdXJjZXNbaWRdLmxhc3RQYXRoQ29tcG9uZW50KTsKKyAgICB0
aGlzLmFzc2VydEVxdWFscygic2ltcGxlX3BhZ2UuaHRtbCIsIHRva2Vucy5qb2luKCIsIikpOwor
fTsKKworCisvKioKKyAqIFRlc3RzIHRoYXQgcmVzb3VyY2VzIHRhYiBpcyBlbmFibGVkIHdoZW4g
Y29ycmVzcG9uZGluZyBpdGVtIGlzIHNlbGVjdGVkLgorICovCitUZXN0U3VpdGUucHJvdG90eXBl
LnRlc3RFbmFibGVSZXNvdXJjZXNUYWIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93UGFu
ZWwoInJlc291cmNlcyIpOworCisgICAgdmFyIHRlc3QgPSB0aGlzOworICAgIHRoaXMuYWRkU25p
ZmZlcihXZWJJbnNwZWN0b3IsICJ1cGRhdGVSZXNvdXJjZSIsCisgICAgICAgIGZ1bmN0aW9uKGlk
ZW50aWZpZXIsIHBheWxvYWQpIHsKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0RXF1YWxzKCJzaW1w
bGVfcGFnZS5odG1sIiwgcGF5bG9hZC5sYXN0UGF0aENvbXBvbmVudCk7CisgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZWZyZXNoKCk7CisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXZlYWxBbmRTZWxlY3RJdGVtKFdlYkluc3BlY3Rv
ci5yZXNvdXJjZXNbaWRlbnRpZmllcl0pOworCisgICAgICAgICAgICB0ZXN0LnJlbGVhc2VDb250
cm9sKCk7CisgICAgICAgIH0pOworCisgICAgLy8gRm9sbG93aW5nIGNhbGwgc2hvdWxkIGxlYWQg
dG8gcmVsb2FkIHRoYXQgd2UgY2FwdHVyZSBpbiB0aGUKKyAgICAvLyBhZGRSZXNvdXJjZSBvdmVy
cmlkZS4KKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5fZW5hYmxlUmVzb3VyY2VU
cmFja2luZygpOworCisgICAgLy8gV2Ugbm93IGhhdmUgc29tZSB0aW1lIHRvIHJlcG9ydCByZXN1
bHRzIHRvIGNvbnRyb2xsZXIuCisgICAgdGhpcy50YWtlQ29udHJvbCgpOworfTsKKworCisvKioK
KyAqIFRlc3RzIHRoYXQgY29ycmVjdCBjb250ZW50IGxlbmd0aCBpcyByZXBvcnRlZCBmb3IgcmVz
b3VyY2VzLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RSZXNvdXJjZUNvbnRlbnRMZW5n
dGggPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93UGFuZWwoInJlc291cmNlcyIpOworICAg
IHZhciB0ZXN0ID0gdGhpczsKKworICAgIHZhciBwbmcgPSBmYWxzZTsKKyAgICB2YXIgaHRtbCA9
IGZhbHNlOworICAgIHRoaXMuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IsICJ1cGRhdGVSZXNvdXJj
ZSIsCisgICAgICAgIGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpIHsKKyAgICAgICAgICAg
IGlmICghcGF5bG9hZC5kaWRMZW5ndGhDaGFuZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZGVudGlm
aWVyXTsKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2UgfHwgIXJlc291cmNlLnVybCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAocmVzb3VyY2UudXJsLnNlYXJjaCgi
aW1hZ2UuaHRtbCQiKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkTGVuZ3Ro
ID0gODc7CisgICAgICAgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAg
IHJlc291cmNlLmNvbnRlbnRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAiaW1hZ2UuaHRtbCBjb250ZW50IGxlbmd0aCBpcyBncmVhdGVyIHRoYXRuIGV4cGVjdGVk
LiIpOworICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRMZW5ndGggPT09IHJlc291cmNlLmNvbnRl
bnRMZW5ndGgpCisgICAgICAgICAgICAgICAgICBodG1sID0gdHJ1ZTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAocmVzb3VyY2UudXJsLnNlYXJjaCgiaW1hZ2UucG5nIikgIT09IC0xKSB7CisgICAg
ICAgICAgICAgIHZhciBleHBlY3RlZExlbmd0aCA9IDI1Nzc5NjsKKyAgICAgICAgICAgICAgdGVz
dC5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgICAgcmVzb3VyY2UuY29udGVudExlbmd0aCA8
PSBleHBlY3RlZExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICJpbWFnZS5wbmcgY29udGVudCBs
ZW5ndGggaXMgZ3JlYXRlciB0aGFuIGV4cGVjdGVkLiIpOworICAgICAgICAgICAgICBpZiAoZXhw
ZWN0ZWRMZW5ndGggPT09IHJlc291cmNlLmNvbnRlbnRMZW5ndGgpCisgICAgICAgICAgICAgICAg
ICBwbmcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGh0bWwgJiYgcG5n
KSB7CisgICAgICAgICAgICAgIC8vIFdhaXQgMSBzZWNvbmQgYmVmb3JlIHJlbGVhc2luZyBjb250
cm9sIHRvIGNoZWNrIHRoYXQgdGhlIGNvbnRlbnQKKyAgICAgICAgICAgICAgLy8gbGVuZ3RocyBh
cmUgbm90IHVwZGF0ZWQgYW55bW9yZS4KKyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsKKyAgICAgICAg
ICAgICAgfSwgMTAwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIHRydWUpOworCisgICAg
Ly8gTWFrZSBzdXJlIHJlc291cmNlIHRyYWNraW5nIGlzIG9uLgorICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMucmVzb3VyY2VzLl9lbmFibGVSZXNvdXJjZVRyYWNraW5nKCk7CisgICAgLy8gUmVsb2Fk
IGluc3BlY3RlZCBwYWdlIHRvIHVwZGF0ZSBhbGwgcmVzb3VyY2VzLgorICAgIHRlc3QuZXZhbHVh
dGVJbkNvbnNvbGVfKAorICAgICAgICAid2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsiLAor
ICAgICAgICAgZnVuY3Rpb24ocmVzdWx0VGV4dCkgeworICAgICAgICAgICAgIHRlc3QuYXNzZXJ0
RXF1YWxzKCJ1bmRlZmluZWQiLCByZXN1bHRUZXh0LCAiVW5leHBlY3RlZCByZXN1bHQgb2YgcmVs
b2FkKCkuIik7CisgICAgICAgICB9KTsKKworICAgIC8vIFdlIG5vdyBoYXZlIHNvbWUgdGltZSB0
byByZXBvcnQgcmVzdWx0cyB0byBjb250cm9sbGVyLgorICAgIHRoaXMudGFrZUNvbnRyb2woKTsK
K307CisKKworLyoqCisgKiBUZXN0cyByZXNvdXJjZSBoZWFkZXJzLgorICovCitUZXN0U3VpdGUu
cHJvdG90eXBlLnRlc3RSZXNvdXJjZUhlYWRlcnMgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5z
aG93UGFuZWwoInJlc291cmNlcyIpOworCisgICAgdmFyIHRlc3QgPSB0aGlzOworCisgICAgdmFy
IHJlc3BvbnNlT2sgPSBmYWxzZTsKKyAgICB2YXIgdGltaW5nT2sgPSBmYWxzZTsKKworICAgIHRo
aXMuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IsICJ1cGRhdGVSZXNvdXJjZSIsCisgICAgICAgIGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpIHsKKyAgICAgICAgICAgIHZhciByZXNvdXJjZSA9
IHRoaXMucmVzb3VyY2VzW2lkZW50aWZpZXJdOworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZSB8
fCByZXNvdXJjZS5tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgb25s
eSBpbnRlcmVzdGVkIGluIHNlY29uZGFyeSByZXNvdXJjZXMgaW4gdGhpcyB0ZXN0LgorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHJlcXVl
c3RIZWFkZXJzID0gSlNPTi5zdHJpbmdpZnkocmVzb3VyY2UucmVxdWVzdEhlYWRlcnMpOworICAg
ICAgICAgICAgdGVzdC5hc3NlcnRDb250YWlucyhyZXF1ZXN0SGVhZGVycywgIkFjY2VwdCIpOwor
CisgICAgICAgICAgICBpZiAocGF5bG9hZC5kaWRSZXNwb25zZUNoYW5nZSkgeworICAgICAgICAg
ICAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeShyZXNvdXJjZS5yZXNw
b25zZUhlYWRlcnMpOworICAgICAgICAgICAgICAgIHRlc3QuYXNzZXJ0Q29udGFpbnMocmVzcG9u
c2VIZWFkZXJzLCAiQ29udGVudC10eXBlIik7CisgICAgICAgICAgICAgICAgdGVzdC5hc3NlcnRD
b250YWlucyhyZXNwb25zZUhlYWRlcnMsICJDb250ZW50LUxlbmd0aCIpOworICAgICAgICAgICAg
ICAgIHRlc3QuYXNzZXJ0VHJ1ZSh0eXBlb2YgcmVzb3VyY2UucmVzcG9uc2VSZWNlaXZlZFRpbWUg
IT09ICJ1bmRlZmluZWQiKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZU9rID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBheWxvYWQuZGlkVGltaW5nQ2hhbmdlKSB7
CisgICAgICAgICAgICAgICAgdGVzdC5hc3NlcnRUcnVlKHR5cGVvZiByZXNvdXJjZS5zdGFydFRp
bWUgIT09ICJ1bmRlZmluZWQiKTsKKyAgICAgICAgICAgICAgICB0aW1pbmdPayA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXlsb2FkLmRpZENvbXBsZXRpb25DaGFu
Z2UpIHsKKyAgICAgICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUocmVzcG9uc2VPayk7CisgICAg
ICAgICAgICAgICAgdGVzdC5hc3NlcnRUcnVlKHRpbWluZ09rKTsKKyAgICAgICAgICAgICAgICB0
ZXN0LmFzc2VydFRydWUodHlwZW9mIHJlc291cmNlLmVuZFRpbWUgIT09ICJ1bmRlZmluZWQiKTsK
KyAgICAgICAgICAgICAgICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sIHRydWUpOworCisgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuX2Vu
YWJsZVJlc291cmNlVHJhY2tpbmcoKTsKKyAgICB0aGlzLnRha2VDb250cm9sKCk7Cit9OworCisK
Ky8qKgorICogVGVzdHMgdGhlIG1pbWUgdHlwZSBvZiBhIGNhY2hlZCAoSFRUUCAzMDQpIHJlc291
cmNlLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RDYWNoZWRSZXNvdXJjZU1pbWVUeXBl
ID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuc2hvd1BhbmVsKCJyZXNvdXJjZXMiKTsKKworICAg
IHZhciB0ZXN0ID0gdGhpczsKKyAgICB2YXIgaGFzUmVsb2FkZWQgPSBmYWxzZTsKKworICAgIHRo
aXMuYWRkU25pZmZlcihXZWJJbnNwZWN0b3IsICJ1cGRhdGVSZXNvdXJjZSIsCisgICAgICAgIGZ1
bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpIHsKKyAgICAgICAgICAgIHZhciByZXNvdXJjZSA9
IHRoaXMucmVzb3VyY2VzW2lkZW50aWZpZXJdOworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZSB8
fCByZXNvdXJjZS5tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBhcmUgb25s
eSBpbnRlcmVzdGVkIGluIHNlY29uZGFyeSByZXNvdXJjZXMgaW4gdGhpcyB0ZXN0LgorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBheWxv
YWQuZGlkUmVzcG9uc2VDaGFuZ2UpIHsKKyAgICAgICAgICAgICAgICAvLyBUZXN0IHNlcnZlciB1
c2VzIGEgZGVmYXVsdCBtaW1lIHR5cGUgZm9yIEphdmFTY3JpcHQgZmlsZXMuCisgICAgICAgICAg
ICAgICAgdGVzdC5hc3NlcnRFcXVhbHMoInRleHQvaHRtbCIsIHBheWxvYWQubWltZVR5cGUpOwor
ICAgICAgICAgICAgICAgIGlmICghaGFzUmVsb2FkZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
aGFzUmVsb2FkZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAvLyBSZWxvYWQgaW5zcGVj
dGVkIHBhZ2UgdG8gdXBkYXRlIGFsbCByZXNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIHRl
c3QuZXZhbHVhdGVJbkNvbnNvbGVfKCJ3aW5kb3cubG9jYXRpb24ucmVsb2FkKHRydWUpOyIsIGZ1
bmN0aW9uKCkge30pOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSwgdHJ1
ZSk7CisKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5fZW5hYmxlUmVzb3VyY2VU
cmFja2luZygpOworICAgIHRoaXMudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBUZXN0
cyB0aGF0IHByb2ZpbGVyIHdvcmtzLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RQcm9m
aWxlclRhYiA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgicHJvZmlsZXMiKTsK
KworICAgIHZhciB0ZXN0ID0gdGhpczsKKyAgICB0aGlzLmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9y
LnBhbmVscy5wcm9maWxlcywgImFkZFByb2ZpbGVIZWFkZXIiLAorICAgICAgICBmdW5jdGlvbih0
eXBlT3JQcm9maWxlLCBwcm9maWxlKSB7CisgICAgICAgICAgICBpZiAoIXByb2ZpbGUpCisgICAg
ICAgICAgICAgICAgcHJvZmlsZSA9IHR5cGVPclByb2ZpbGU7CisgICAgICAgICAgICB2YXIgcGFu
ZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnByb2ZpbGVzOworICAgICAgICAgICAgcGFuZWwuc2hv
d1Byb2ZpbGUocHJvZmlsZSk7CisgICAgICAgICAgICB2YXIgbm9kZSA9IHBhbmVsLnZpc2libGVW
aWV3LnByb2ZpbGVEYXRhR3JpZFRyZWUuY2hpbGRyZW5bMF07CisgICAgICAgICAgICAvLyBJdGVy
YXRlIG92ZXIgZGlzcGxheWVkIGZ1bmN0aW9ucyBhbmQgc2VhcmNoIGZvciBhIGZ1bmN0aW9uCisg
ICAgICAgICAgICAvLyB0aGF0IGlzIGNhbGxlZCAiZmliIiBvciAiZXRlcm5hbF9maWIiLiBJZiBm
b3VuZCwgaXQgd2lsbCBtZWFuCisgICAgICAgICAgICAvLyB0aGF0IHdlIGFjdHVhbGx5IGhhdmUg
cHJvZmlsZWQgcGFnZSdzIGNvZGUuCisgICAgICAgICAgICB3aGlsZSAobm9kZSkgeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLmZ1bmN0aW9uTmFtZS5pbmRleE9mKCJmaWIiKSAhPT0gLTEpCisg
ICAgICAgICAgICAgICAgICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsKKyAgICAgICAgICAgICAg
ICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHRydWUsIG51bGwsIHRydWUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0ZXN0LmZhaWwoKTsKKyAgICAgICAgfSk7CisgICAgdmFy
IHRpY2tzQ291bnQgPSAwOworICAgIHZhciB0aWNrUmVjb3JkID0gIlxudCwiOworICAgIHRoaXMu
YWRkU25pZmZlcihSZW1vdGVQcm9maWxlckFnZW50LCAiZGlkR2V0TG9nTGluZXMiLAorICAgICAg
ICBmdW5jdGlvbihwb3NJZ25vcmVkLCBsb2cpIHsKKyAgICAgICAgICAgIHZhciBwb3MgPSAwOwor
ICAgICAgICAgICAgd2hpbGUgKChwb3MgPSBsb2cuaW5kZXhPZih0aWNrUmVjb3JkLCBwb3MpKSAh
PT0gLTEpIHsKKyAgICAgICAgICAgICAgICBwb3MgKz0gdGlja1JlY29yZC5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgdGlja3NDb3VudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHRpY2tzQ291bnQgPiAxMDApCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zdG9w
UHJvZmlsaW5nKCk7CisgICAgICAgIH0sIHRydWUpOworCisgICAgSW5zcGVjdG9yQmFja2VuZC5z
dGFydFByb2ZpbGluZygpOworICAgIHRoaXMudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisg
KiBUZXN0cyB0aGF0IHNjcmlwdHMgdGFiIGNhbiBiZSBvcGVuIGFuZCBwb3B1bGF0ZWQgd2l0aCBp
bnNwZWN0ZWQgc2NyaXB0cy4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0U2hvd1Njcmlw
dHNUYWIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93UGFuZWwoInNjcmlwdHMiKTsKKyAg
ICB2YXIgdGVzdCA9IHRoaXM7CisgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG1haW4g
cGFnZSBzY3JpcHQuCisgICAgdGhpcy5fd2FpdFVudGlsU2NyaXB0c0FyZVBhcnNlZChbImRlYnVn
Z2VyX3Rlc3RfcGFnZS5odG1sJCJdLAorICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHRlc3QucmVsZWFzZUNvbnRyb2woKTsKKyAgICAgICAgfSk7CisgICAgLy8gV2FpdCB1bnRpbCBh
bGwgc2NyaXB0cyBhcmUgYWRkZWQgdG8gdGhlIGRlYnVnZ2VyLgorICAgIHRoaXMudGFrZUNvbnRy
b2woKTsKK307CisKKworLyoqCisgKiBUZXN0cyB0aGF0IHNjcmlwdHMgdGFiIGlzIHBvcHVsYXRl
ZCB3aXRoIGluc3BlY3RlZCBzY3JpcHRzIGV2ZW4gaWYgaXQKKyAqIGhhZG4ndCBiZWVuIHNob3du
IGJ5IHRoZSBtb21lbnQgaW5zcGVjdGVkIHBhZ2VkIHJlZnJlc2hlZC4KKyAqIEBzZWUgaHR0cDov
L2NyYnVnLmNvbS8yNjMxMgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RTY3JpcHRzVGFi
SXNQb3B1bGF0ZWRPbkluc3BlY3RlZFBhZ2VSZWZyZXNoID0gZnVuY3Rpb24oKQoreworICAgIHZh
ciB0ZXN0ID0gdGhpczsKKyAgICB0aGlzLmFzc2VydEVxdWFscyhXZWJJbnNwZWN0b3IucGFuZWxz
LmVsZW1lbnRzLCBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLCAiRWxlbWVudHMgcGFuZWwgc2hv
dWxkIGJlIGN1cnJlbnQgb25lLiIpOworCisgICAgdGhpcy5hZGRTbmlmZmVyKGRldnRvb2xzLkRl
YnVnZ2VyQWdlbnQucHJvdG90eXBlLCAicmVzZXQiLCB3YWl0VW50aWxTY3JpcHRJc1BhcnNlZCk7
CisKKyAgICAvLyBSZWxvYWQgaW5zcGVjdGVkIHBhZ2UuIEl0IHdpbGwgcmVzZXQgdGhlIGRlYnVn
Z2VyIGFnZW50LgorICAgIHRlc3QuZXZhbHVhdGVJbkNvbnNvbGVfKAorICAgICAgICAid2luZG93
LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsiLAorICAgICAgICBmdW5jdGlvbihyZXN1bHRUZXh0KSB7
CisgICAgICAgICAgICB0ZXN0LmFzc2VydEVxdWFscygidW5kZWZpbmVkIiwgcmVzdWx0VGV4dCwg
IlVuZXhwZWN0ZWQgcmVzdWx0IG9mIHJlbG9hZCgpLiIpOworICAgICAgICB9KTsKKworICAgIGZ1
bmN0aW9uIHdhaXRVbnRpbFNjcmlwdElzUGFyc2VkKCkgeworICAgICAgICB2YXIgcGFyc2VkID0g
ZGV2dG9vbHMudG9vbHMuZ2V0RGVidWdnZXJBZ2VudCgpLnBhcnNlZFNjcmlwdHNfOworICAgICAg
ICBmb3IgKHZhciBpZCBpbiBwYXJzZWQpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSBwYXJzZWRb
aWRdLmdldFVybCgpOworICAgICAgICAgICAgaWYgKHVybCAmJiB1cmwuc2VhcmNoKCJkZWJ1Z2dl
cl90ZXN0X3BhZ2UuaHRtbCQiKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBjaGVja1Njcmlw
dHNQYW5lbCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0ZXN0LmFkZFNuaWZmZXIoZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90
b3R5cGUsICJhZGRTY3JpcHRJbmZvXyIsIHdhaXRVbnRpbFNjcmlwdElzUGFyc2VkKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBjaGVja1NjcmlwdHNQYW5lbCgpIHsKKyAgICAgICAgdGVzdC5zaG93
UGFuZWwoInNjcmlwdHMiKTsKKyAgICAgICAgdGVzdC5hc3NlcnRUcnVlKHRlc3QuX3NjcmlwdHNB
cmVQYXJzZWQoWyJkZWJ1Z2dlcl90ZXN0X3BhZ2UuaHRtbCQiXSksICJJbnNwZWN0ZWQgc2NyaXB0
IG5vdCBmb3VuZCBpbiB0aGUgc2NyaXB0cyBsaXN0Iik7CisgICAgICAgIHRlc3QucmVsZWFzZUNv
bnRyb2woKTsKKyAgICB9CisKKyAgICAvLyBXYWl0IHVudGlsIGFsbCBzY3JpcHRzIGFyZSBhZGRl
ZCB0byB0aGUgZGVidWdnZXIuCisgICAgdGhpcy50YWtlQ29udHJvbCgpOworfTsKKworCisvKioK
KyAqIFRlc3RzIHRoYXQgc2NyaXB0cyBsaXN0IGNvbnRhaW5zIGNvbnRlbnQgc2NyaXB0cy4KKyAq
LworVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q29udGVudFNjcmlwdElzUHJlc2VudCA9IGZ1bmN0
aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgic2NyaXB0cyIpOworICAgIHZhciB0ZXN0ID0g
dGhpczsKKworICAgIHRlc3QuX3dhaXRVbnRpbFNjcmlwdHNBcmVQYXJzZWQoCisgICAgICAgIFsi
cGFnZV93aXRoX2NvbnRlbnRfc2NyaXB0Lmh0bWwkIiwgInNpbXBsZV9jb250ZW50X3NjcmlwdC5q
cyQiXSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJv
bCgpOworICAgICAgICB9KTsKKworICAgIC8vIFdhaXQgdW50aWwgYWxsIHNjcmlwdHMgYXJlIGFk
ZGVkIHRvIHRoZSBkZWJ1Z2dlci4KKyAgICB0aGlzLnRha2VDb250cm9sKCk7Cit9OworCisKKy8q
KgorICogVGVzdHMgdGhhdCBzY3JpcHRzIGFyZSBub3QgZHVwbGljYWVkIG9uIFNjcmlwdHMgdGFi
IHN3aXRjaC4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Tm9TY3JpcHREdXBsaWNhdGVz
T25QYW5lbFN3aXRjaCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgdGVzdCA9IHRoaXM7CisKKyAg
ICAvLyBUaGVyZSBzaG91bGQgYmUgdHdvIHNjcmlwdHM6IG9uZSBmb3IgdGhlIG1haW4gcGFnZSBh
bmQgYW5vdGhlcgorICAgIC8vIG9uZSB3aGljaCBpcyBzb3VyY2Ugb2YgY29uc29sZSBBUEkoc2Vl
CisgICAgLy8gSW5qZWN0ZWRTY3JpcHQuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVkKS4K
KyAgICB2YXIgZXhwZWN0ZWRTY3JpcHRzQ291bnQgPSAyOworICAgIHZhciBwYXJzZWRTY3JpcHRz
ID0gW107CisKKyAgICB0aGlzLnNob3dQYW5lbCgic2NyaXB0cyIpOworCisKKyAgICBmdW5jdGlv
biBzd2l0Y2hUb0VsZW1lbnRzVGFiKCkgeworICAgICAgICB0ZXN0LnNob3dQYW5lbCgiZWxlbWVu
dHMiKTsKKyAgICAgICAgc2V0VGltZW91dChzd2l0Y2hUb1NjcmlwdHNUYWIsIDApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHN3aXRjaFRvU2NyaXB0c1RhYigpIHsKKyAgICAgICAgdGVzdC5zaG93
UGFuZWwoInNjcmlwdHMiKTsKKyAgICAgICAgc2V0VGltZW91dChjaGVja1NjcmlwdHNQYW5lbCwg
MCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tTY3JpcHRzUGFuZWwoKSB7CisgICAgICAg
IHRlc3QuYXNzZXJ0VHJ1ZSghIVdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy52aXNpYmxlVmll
dywgIk5vIHZpc2libGUgc2NyaXB0IHZpZXcuIik7CisgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZSh0
ZXN0Ll9zY3JpcHRzQXJlUGFyc2VkKFsiZGVidWdnZXJfdGVzdF9wYWdlLmh0bWwkIl0pLCAiU29t
ZSBzY3JpcHRzIGFyZSBtaXNzaW5nLiIpOworICAgICAgICBjaGVja05vRHVwbGljYXRlcygpOwor
ICAgICAgICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hl
Y2tOb0R1cGxpY2F0ZXMoKSB7CisgICAgICAgIHZhciBzY3JpcHRTZWxlY3QgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgic2NyaXB0cy1maWxlcyIpOworICAgICAgICB2YXIgb3B0aW9ucyA9IHNj
cmlwdFNlbGVjdC5vcHRpb25zOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBzY3JpcHROYW1lID0gb3B0aW9uc1tpXS50
ZXh0OworICAgICAgICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgb3B0aW9ucy5sZW5ndGg7
IGorKykKKyAgICAgICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoc2NyaXB0TmFtZSAhPT0gb3B0
aW9uc1tqXS50ZXh0LCAiRm91bmQgc2NyaXB0IGR1cGxpY2F0ZXM6ICIgKyB0ZXN0Lm9wdGlvbnNU
b1N0cmluZ18ob3B0aW9ucykpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVzdC5fd2FpdFVu
dGlsU2NyaXB0c0FyZVBhcnNlZCgKKyAgICAgICAgWyJkZWJ1Z2dlcl90ZXN0X3BhZ2UuaHRtbCQi
XSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBjaGVja05vRHVwbGljYXRlcygp
OworICAgICAgICAgICAgc2V0VGltZW91dChzd2l0Y2hUb0VsZW1lbnRzVGFiLCAwKTsKKyAgICAg
ICAgfSk7CisKKworICAgIC8vIFdhaXQgdW50aWwgYWxsIHNjcmlwdHMgYXJlIGFkZGVkIHRvIHRo
ZSBkZWJ1Z2dlci4KKyAgICB0aGlzLnRha2VDb250cm9sKCk7Cit9OworCisKKy8qKgorICogVGVz
dHMgdGhhdCBhIGJyZWFrcG9pbnQgY2FuIGJlIHNldC4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlw
ZS50ZXN0U2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgdGVzdCA9IHRoaXM7
CisgICAgdGhpcy5zaG93UGFuZWwoInNjcmlwdHMiKTsKKworICAgIHZhciBicmVha3BvaW50TGlu
ZSA9IDEyOworCisgICAgdGhpcy5fd2FpdFVudGlsU2NyaXB0c0FyZVBhcnNlZChbImRlYnVnZ2Vy
X3Rlc3RfcGFnZS5odG1sIl0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHRlc3Qu
c2hvd01haW5QYWdlU2NyaXB0U291cmNlXygKKyAgICAgICAgICAgICAgImRlYnVnZ2VyX3Rlc3Rf
cGFnZS5odG1sIiwKKyAgICAgICAgICAgICAgZnVuY3Rpb24odmlldywgdXJsKSB7CisgICAgICAg
ICAgICAgICAgdmlldy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50TGluZSk7CisgICAgICAgICAg
ICAgICAgLy8gRm9yY2UgdjggZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgIFJlbW90ZVRvb2xz
QWdlbnQuZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KCk7CisgICAgICAgICAgICAgICAgdGVzdC53YWl0
Rm9yU2V0QnJlYWtwb2ludFJlc3BvbnNlXyh1cmwsIGJyZWFrcG9pbnRMaW5lLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QucmVs
ZWFzZUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKworICAgIHRoaXMudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisg
KiBUZXN0cyB0aGF0IHBhdXNlIG9uIGV4Y2VwdGlvbiB3b3Jrcy4KKyAqLworVGVzdFN1aXRlLnBy
b3RvdHlwZS50ZXN0UGF1c2VPbkV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNo
b3dQYW5lbCgic2NyaXB0cyIpOworICAgIHZhciB0ZXN0ID0gdGhpczsKKworICAgIC8vIFRPRE8o
eXVyeXMpOiByZW1vdmUgZWxzZSBicmFuY2ggb25jZSB0aGUgc3RhdGVzIGFyZSBzdXBwb3J0ZWQu
CisgICAgaWYgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwuUGF1c2VPbkV4Y2VwdGlvbnNTdGF0
ZSkgeworICAgICAgICB3aGlsZSAoV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC5wYXVzZU9uRXhj
ZXB0aW9uQnV0dG9uLnN0YXRlICE9PSBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLlBhdXNlT25F
eGNlcHRpb25zU3RhdGUuUGF1c2VPblVuY2F1Z2h0RXhjZXB0aW9ucykKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jdXJyZW50UGFuZWwucGF1c2VPbkV4Y2VwdGlvbkJ1dHRvbi5lbGVtZW50LmNs
aWNrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHBhdXNlIG9uIGV4Y2Vw
dGlvbnMgaXMgb24uCisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC5wYXVz
ZU9uRXhjZXB0aW9uQnV0dG9uLnRvZ2dsZWQpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3Vy
cmVudFBhbmVsLnBhdXNlT25FeGNlcHRpb25CdXR0b24uZWxlbWVudC5jbGljaygpOworICAgIH0K
KworICAgIHRoaXMuX2V4ZWN1dGVDb2RlV2hlblNjcmlwdHNBcmVQYXJzZWQoImhhbmRsZUNsaWNr
KCkiLCBbInBhdXNlX29uX2V4Y2VwdGlvbi5odG1sJCJdKTsKKworICAgIHRoaXMuX3dhaXRGb3JT
Y3JpcHRQYXVzZSgKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJ0
aHJvd0FuRXhjZXB0aW9uIiwgImhhbmRsZUNsaWNrIiwgIihhbm9ueW1vdXMgZnVuY3Rpb24pIl0s
CisgICAgICAgICAgICBsaW5lTnVtYmVyOiA2LAorICAgICAgICAgICAgbGluZVRleHQ6ICIgIHJl
dHVybiB1bmtub3duX3ZhcjsiCisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICB9KTsKKworICAgIHRoaXMu
dGFrZUNvbnRyb2woKTsKK307CisKKworLy8gVGVzdHMgdGhhdCBkZWJ1Z2dlciB3b3JrcyBjb3Jy
ZWN0bHkgaWYgcGF1c2UgZXZlbnQgb2NjdXJzIHdoZW4gRGV2VG9vbHMKKy8vIGZyb250ZW5kIGlz
IGJlaW5nIGxvYWRlZC4KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFBhdXNlV2hlbkxvYWRpbmdE
ZXZUb29scyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgic2NyaXB0cyIpOwor
ICAgIHZhciB0ZXN0ID0gdGhpczsKKworICAgIHZhciBleHBlY3RhdGlvbnMgPSB7CisgICAgICAg
ICAgICBmdW5jdGlvbnNPblN0YWNrOiBbImNhbGxEZWJ1Z2dlciJdLAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogOCwKKyAgICAgICAgICAgIGxpbmVUZXh0OiAiICBkZWJ1Z2dlcjsiCisgICAgICAg
IH07CisKKworICAgIC8vIFNjcmlwdCBleGVjdXRpb24gY2FuIGFscmVhZHkgYmUgcGF1c2VkLgor
ICAgIGlmIChXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLnBhdXNlZCkgeworICAgICAgICB2YXIg
Y2FsbEZyYW1lID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC5zaWRlYmFyUGFuZXMuY2FsbHN0
YWNrLnNlbGVjdGVkQ2FsbEZyYW1lOworICAgICAgICB0aGlzLmFzc2VydEVxdWFscyhleHBlY3Rh
dGlvbnMuZnVuY3Rpb25zT25TdGFja1swXSwgY2FsbEZyYW1lLmZ1bmN0aW9uTmFtZSk7CisgICAg
ICAgIHZhciBjYWxsYmFja0ludm9rZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY2hlY2tTb3Vy
Y2VGcmFtZVdoZW5Mb2FkZWQoZXhwZWN0YXRpb25zLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFja0ludm9rZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICh0ZXN0LmNv
bnRyb2xUYWtlbl8pCisgICAgICAgICAgICAgICAgICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIWNhbGxiYWNrSW52b2tlZCkgeworICAgICAg
ICAgICAgdGVzdC50YWtlQ29udHJvbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICB0aGlzLl93YWl0Rm9yU2NyaXB0UGF1c2UoCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZ1bmN0aW9uc09uU3RhY2s6IFsiY2FsbERlYnVnZ2VyIl0sCisgICAgICAgICAgICBsaW5l
TnVtYmVyOiA4LAorICAgICAgICAgICAgbGluZVRleHQ6ICIgIGRlYnVnZ2VyOyIKKyAgICAgICAg
fSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0LnJlbGVhc2VDb250cm9s
KCk7CisgICAgICAgIH0pOworICAgIHRoaXMudGFrZUNvbnRyb2woKTsKK307CisKKworLy8gVGVz
dHMgdGhhdCBwcmVzc2luZyAiUGF1c2UiIHdpbGwgcGF1c2Ugc2NyaXB0IGV4ZWN1dGlvbiBpZiB0
aGUgc2NyaXB0CisvLyBpcyBhbHJlYWR5IHJ1bm5pbmcuCitUZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RQYXVzZVdoZW5TY3JpcHRJc1J1bm5pbmcgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93
UGFuZWwoInNjcmlwdHMiKTsKKyAgICB2YXIgdGVzdCA9IHRoaXM7CisKKyAgICB0ZXN0LmV2YWx1
YXRlSW5Db25zb2xlXygKKyAgICAgICAgJ3NldFRpbWVvdXQoImhhbmRsZUNsaWNrKCkiICwgMCkn
LAorICAgICAgICBmdW5jdGlvbihyZXN1bHRUZXh0KSB7CisgICAgICAgICAgdGVzdC5hc3NlcnRU
cnVlKCFpc05hTihyZXN1bHRUZXh0KSwgIkZhaWxlZCB0byBnZXQgdGltZXIgaWQ6ICIgKyByZXN1
bHRUZXh0KTsKKyAgICAgICAgICB0ZXN0U2NyaXB0UGF1c2VBZnRlckRlbGF5KCk7CisgICAgICAg
IH0pOworCisgICAgLy8gV2FpdCBmb3Igc29tZSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGF0IGluc3Bl
Y3RlZCBwYWdlIGlzIHJ1bm5pbmcgdGhlCisgICAgLy8gaW5maW5pdGUgbG9vcC4KKyAgICBmdW5j
dGlvbiB0ZXN0U2NyaXB0UGF1c2VBZnRlckRlbGF5KCkgeworICAgICAgICBzZXRUaW1lb3V0KHRl
c3RTY3JpcHRQYXVzZSwgMzAwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0U2NyaXB0UGF1
c2UoKSB7CisgICAgICAgIC8vIFRoZSBzY3JpcHQgc2hvdWxkIGJlIGluIGluZmluaXRlIGxvb3Au
IENsaWNrICJQYXVzZSIgYnV0dG9uIHRvCisgICAgICAgIC8vIHBhdXNlIGl0IGFuZCB3YWl0IGZv
ciB0aGUgcmVzdWx0LgorICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMucGF1c2VC
dXR0b24uY2xpY2soKTsKKworICAgICAgICB0ZXN0Ll93YWl0Rm9yU2NyaXB0UGF1c2UoCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJoYW5kbGVDbGlj
ayIsICIoYW5vbnltb3VzIGZ1bmN0aW9uKSJdLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6
IDUsCisgICAgICAgICAgICAgICAgbGluZVRleHQ6ICIgIHdoaWxlKHRydWUpIHsiCisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdC5y
ZWxlYXNlQ29udHJvbCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy50YWtl
Q29udHJvbCgpOworfTsKKworCisvKioKKyAqIFNlcmlhbGl6ZXMgb3B0aW9ucyBjb2xsZWN0aW9u
IHRvIHN0cmluZy4KKyAqIEBwYXJhbSB7SFRNTE9wdGlvbnNDb2xsZWN0aW9ufSBvcHRpb25zCisg
KiBAcmV0dXJuIHtzdHJpbmd9CisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUub3B0aW9uc1RvU3Ry
aW5nXyA9IGZ1bmN0aW9uKG9wdGlvbnMpCit7CisgICAgdmFyIG5hbWVzID0gW107CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKQorICAgICAgICBuYW1lcy5wdXNo
KCciJyArIG9wdGlvbnNbaV0udGV4dCArICciJyk7CisgICAgcmV0dXJuIG5hbWVzLmpvaW4oIiwi
KTsKK307CisKKworLyoqCisgKiBFbnN1cmVzIHRoYXQgbWFpbiBIVE1MIHJlc291cmNlIGlzIHNl
bGVjdGVkIGluIFNjcmlwdHMgcGFuZWwgYW5kIHRoYXQgaXRzCisgKiBzb3VyY2UgZnJhbWUgaXMg
c2V0dXAuIEludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBzYXRpc2Zp
ZWQuCisgKiBAcGFyYW0ge0hUTUxPcHRpb25zQ29sbGVjdGlvbn0gb3B0aW9ucworICogQHBhcmFt
IHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuU291cmNlVmlldyxzdHJpbmcpfSBjYWxsYmFjaworICov
CitUZXN0U3VpdGUucHJvdG90eXBlLnNob3dNYWluUGFnZVNjcmlwdFNvdXJjZV8gPSBmdW5jdGlv
bihzY3JpcHROYW1lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgdGVzdCA9IHRoaXM7CisKKyAgICB2
YXIgc2NyaXB0U2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjcmlwdHMtZmlsZXMi
KTsKKyAgICB2YXIgb3B0aW9ucyA9IHNjcmlwdFNlbGVjdC5vcHRpb25zOworCisgICAgdGVzdC5h
c3NlcnRUcnVlKG9wdGlvbnMubGVuZ3RoLCAiU2NyaXB0cyBsaXN0IGlzIGVtcHR5Iik7CisKKyAg
ICAvLyBTZWxlY3QgcGFnZSdzIHNjcmlwdCBpZiBpdCdzIG5vdCBjdXJyZW50IG9wdGlvbi4KKyAg
ICB2YXIgc2NyaXB0UmVzb3VyY2U7CisgICAgaWYgKG9wdGlvbnNbc2NyaXB0U2VsZWN0LnNlbGVj
dGVkSW5kZXhdLnRleHQgPT09IHNjcmlwdE5hbWUpCisgICAgICAgIHNjcmlwdFJlc291cmNlID0g
b3B0aW9uc1tzY3JpcHRTZWxlY3Quc2VsZWN0ZWRJbmRleF0ucmVwcmVzZW50ZWRPYmplY3Q7Cisg
ICAgZWxzZSB7CisgICAgICAgIHZhciBwYWdlU2NyaXB0SW5kZXggPSAtMTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
b3B0aW9uc1tpXS50ZXh0ID09PSBzY3JpcHROYW1lKSB7CisgICAgICAgICAgICAgICAgcGFnZVNj
cmlwdEluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICB0ZXN0LmFzc2VydFRydWUoLTEgIT09IHBhZ2VTY3JpcHRJbmRleCwg
IlNjcmlwdCB3aXRoIHVybCAiICsgc2NyaXB0TmFtZSArICIgbm90IGZvdW5kIGFtb25nICIgKyB0
ZXN0Lm9wdGlvbnNUb1N0cmluZ18ob3B0aW9ucykpOworICAgICAgICBzY3JpcHRSZXNvdXJjZSA9
IG9wdGlvbnNbcGFnZVNjcmlwdEluZGV4XS5yZXByZXNlbnRlZE9iamVjdDsKKworICAgICAgICAv
LyBDdXJyZW50IHBhbmVsIGlzICJTY3JpcHRzIi4KKyAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJl
bnRQYW5lbC5fc2hvd1NjcmlwdE9yUmVzb3VyY2Uoc2NyaXB0UmVzb3VyY2UpOworICAgICAgICB0
ZXN0LmFzc2VydEVxdWFscyhwYWdlU2NyaXB0SW5kZXgsIHNjcmlwdFNlbGVjdC5zZWxlY3RlZElu
ZGV4LCAiVW5leHBlY3RlZCBzZWxlY3RlZCBvcHRpb24gaW5kZXguIik7CisgICAgfQorCisgICAg
dGVzdC5hc3NlcnRUcnVlKHNjcmlwdFJlc291cmNlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCByZXNvdXJjZSBjbGFzcy4i
KTsKKyAgICB0ZXN0LmFzc2VydFRydWUoISFzY3JpcHRSZXNvdXJjZS51cmwsICJSZXNvdXJjZSBV
UkwgaXMgbnVsbC4iKTsKKyAgICB0ZXN0LmFzc2VydFRydWUoc2NyaXB0UmVzb3VyY2UudXJsLnNl
YXJjaChzY3JpcHROYW1lICsgIiQiKSAhPT0gLTEsICJNYWluIEhUTUwgcmVzb3VyY2Ugc2hvdWxk
IGJlIHNlbGVjdGVkLiIpOworCisgICAgdmFyIHNjcmlwdHNQYW5lbCA9IFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0czsKKworICAgIHZhciB2aWV3ID0gc2NyaXB0c1BhbmVsLnZpc2libGVWaWV3
OworICAgIHRlc3QuYXNzZXJ0VHJ1ZSh2aWV3IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJj
ZVZpZXcpOworCisgICAgaWYgKCF2aWV3LnNvdXJjZUZyYW1lLl9sb2FkZWQpIHsKKyAgICAgICAg
dGVzdC5hZGRTbmlmZmVyKHZpZXcsICJfc291cmNlRnJhbWVTZXR1cEZpbmlzaGVkIiwgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHZpZXcsIHNjcmlwdFJlc291cmNlLnVy
bCk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBjYWxsYmFjayh2aWV3LCBzY3Jp
cHRSZXNvdXJjZS51cmwpOworfTsKKworCisvKgorICogRXZhbHVhdGVzIHRoZSBjb2RlIGluIHRo
ZSBjb25zb2xlIGFzIGlmIHVzZXIgdHlwZWQgaXQgbWFudWFsbHkgYW5kIGludm9rZXMKKyAqIHRo
ZSBjYWxsYmFjayB3aGVuIHRoZSByZXN1bHQgbWVzc2FnZSBpcyByZWNlaXZlZCBhbmQgYWRkZWQg
dG8gdGhlIGNvbnNvbGUuCisgKiBAcGFyYW0ge3N0cmluZ30gY29kZQorICogQHBhcmFtIHtmdW5j
dGlvbihzdHJpbmcpfSBjYWxsYmFjaworICovCitUZXN0U3VpdGUucHJvdG90eXBlLmV2YWx1YXRl
SW5Db25zb2xlXyA9IGZ1bmN0aW9uKGNvZGUsIGNhbGxiYWNrKQoreworICAgIFdlYkluc3BlY3Rv
ci5jb25zb2xlLnZpc2libGUgPSB0cnVlOworICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLnByb21w
dC50ZXh0ID0gY29kZTsKKyAgICBXZWJJbnNwZWN0b3IuY29uc29sZS5wcm9tcHRFbGVtZW50LmRp
c3BhdGNoRXZlbnQoIFRlc3RTdWl0ZS5jcmVhdGVLZXlFdmVudCgiRW50ZXIiKSk7CisKKyAgICB0
aGlzLmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSwgImFkZE1l
c3NhZ2UiLAorICAgICAgICBmdW5jdGlvbihjb21tYW5kUmVzdWx0KSB7CisgICAgICAgICAgICBj
YWxsYmFjayhjb21tYW5kUmVzdWx0LnRvTWVzc2FnZUVsZW1lbnQoKS50ZXh0Q29udGVudCk7Cisg
ICAgICAgIH0pOworfTsKKworCisvKgorICogV2FpdHMgZm9yICJzZXRicmVha3BvaW50IiByZXNw
b25zZSwgY2hlY2tzIHRoYXQgY29ycmVzcG9uZGluZyBicmVha3BvaW50CisgKiB3YXMgc3VjY2Vz
c2Z1bGx5IHNldCBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgaWYgaXQgd2FzLgorICogQHBhcmFt
IHtzdHJpbmd9IHNjcmlwdFVybAorICogQHBhcmFtIHtudW1iZXJ9IGJyZWFrcG9pbnRMaW5lCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNhbGxiYWNrCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUu
d2FpdEZvclNldEJyZWFrcG9pbnRSZXNwb25zZV8gPSBmdW5jdGlvbihzY3JpcHRVcmwsIGJyZWFr
cG9pbnRMaW5lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgdGVzdCA9IHRoaXM7CisgICAgdGVzdC5h
ZGRTbmlmZmVyKAorICAgICAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZSwKKyAg
ICAgICAgImhhbmRsZVNldEJyZWFrcG9pbnRSZXNwb25zZV8iLAorICAgICAgICBmdW5jdGlvbiht
c2cpIHsKKyAgICAgICAgICAgIHZhciBicHMgPSB0aGlzLnVybFRvQnJlYWtwb2ludHNfW3Njcmlw
dFVybF07CisgICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoISFicHMsICJObyBicmVha3BvaW50
cyBmb3IgbGluZSAiICsgYnJlYWtwb2ludExpbmUpOworICAgICAgICAgICAgdmFyIGxpbmUgPSBk
ZXZ0b29scy5EZWJ1Z2dlckFnZW50LndlYmtpdFRvVjhMaW5lTnVtYmVyXyhicmVha3BvaW50TGlu
ZSk7CisgICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoISFicHNbbGluZV0uZ2V0VjhJZCgpLCAi
QnJlYWtwb2ludCBpZCB3YXMgbm90IGFzc2lnbmVkLiIpOworICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgfSk7Cit9OworCisKKy8qKgorICogVGVzdHMgZXZhbCBvbiBjYWxsIGZyYW1l
LgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RFdmFsT25DYWxsRnJhbWUgPSBmdW5jdGlv
bigpCit7CisgICAgdGhpcy5zaG93UGFuZWwoInNjcmlwdHMiKTsKKworICAgIHZhciBicmVha3Bv
aW50TGluZSA9IDE2OworCisgICAgdmFyIHRlc3QgPSB0aGlzOworICAgIHRoaXMuYWRkU25pZmZl
cihkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZSwgImhhbmRsZVNjcmlwdHNSZXNwb25z
ZV8iLAorICAgICAgICBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICB0ZXN0LnNob3dNYWluUGFn
ZVNjcmlwdFNvdXJjZV8oCisgICAgICAgICAgICAgICJkZWJ1Z2dlcl90ZXN0X3BhZ2UuaHRtbCIs
CisgICAgICAgICAgICAgIGZ1bmN0aW9uKHZpZXcsIHVybCkgeworICAgICAgICAgICAgICAgICAg
dmlldy5fYWRkQnJlYWtwb2ludChicmVha3BvaW50TGluZSk7CisgICAgICAgICAgICAgICAgICAv
LyBGb3JjZSB2OCBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICBSZW1vdGVUb29sc0FnZW50
LmV4ZWN1dGVWb2lkSmF2YVNjcmlwdCgpOworICAgICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9y
U2V0QnJlYWtwb2ludFJlc3BvbnNlXyh1cmwsIGJyZWFrcG9pbnRMaW5lLCBzZXRCcmVha3BvaW50
Q2FsbGJhY2spOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICBmdW5jdGlv
biBzZXRCcmVha3BvaW50Q2FsbGJhY2soKSB7CisgICAgICAvLyBTaW5jZSBicmVha3BvaW50cyBh
cmUgaWdub3JlZCBpbiBldmFscycgY2FsY3VsYXRlKCkgZnVuY3Rpb24gaXMKKyAgICAgIC8vIGV4
ZWN1dGUgYWZ0ZXIgemVyby10aW1lb3V0IHNvIHRoYXQgdGhlIGJyZWFrcG9pbnQgaXMgaGl0Lgor
ICAgICAgdGVzdC5ldmFsdWF0ZUluQ29uc29sZV8oCisgICAgICAgICAgJ3NldFRpbWVvdXQoImNh
bGN1bGF0ZSgxMjMpIiAsIDApJywKKyAgICAgICAgICBmdW5jdGlvbihyZXN1bHRUZXh0KSB7Cisg
ICAgICAgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZSghaXNOYU4ocmVzdWx0VGV4dCksICJGYWlsZWQg
dG8gZ2V0IHRpbWVyIGlkOiAiICsgcmVzdWx0VGV4dCk7CisgICAgICAgICAgICAgIHdhaXRGb3JC
cmVha3BvaW50SGl0KCk7CisgICAgICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gd2Fp
dEZvckJyZWFrcG9pbnRIaXQoKSB7CisgICAgICB0ZXN0LmFkZFNuaWZmZXIoCisgICAgICAgICAg
ZGV2dG9vbHMuRGVidWdnZXJBZ2VudC5wcm90b3R5cGUsCisgICAgICAgICAgImhhbmRsZUJhY2t0
cmFjZVJlc3BvbnNlXyIsCisgICAgICAgICAgZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAgICB0
ZXN0LmFzc2VydEVxdWFscygyLCB0aGlzLmNhbGxGcmFtZXNfLmxlbmd0aCwgIlVuZXhwZWN0ZWQg
c3RhY2sgZGVwdGggb24gdGhlIGJyZWFrcG9pbnQuICIgKyBKU09OLnN0cmluZ2lmeShtc2cpKTsK
KyAgICAgICAgICAgIHRlc3QuYXNzZXJ0RXF1YWxzKCJjYWxjdWxhdGUiLCB0aGlzLmNhbGxGcmFt
ZXNfWzBdLmZ1bmN0aW9uTmFtZSwgIlVuZXhwZWN0ZWQgdG9wIGZyYW1lIGZ1bmN0aW9uLiIpOwor
ICAgICAgICAgICAgLy8gRXZhbHVhdGUgImUrMSIgd2hlcmUgImUiIGlzIGFuIGFyZ3VtZW50IG9m
ICJjYWxjdWxhdGUiIGZ1bmN0aW9uLgorICAgICAgICAgICAgdGVzdC5ldmFsdWF0ZUluQ29uc29s
ZV8oCisgICAgICAgICAgICAgICAgImUrMSIsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVz
dWx0VGV4dCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0LmFzc2VydEVxdWFscygiMTI0Iiwg
cmVzdWx0VGV4dCwgJ1VuZXhwZWN0ZWQgImUrMSIgdmFsdWUuJyk7CisgICAgICAgICAgICAgICAg
ICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICB0aGlzLnRha2VDb250cm9sKCk7Cit9OworCisKKy8qKgorICog
VGVzdHMgdGhhdCBjb25zb2xlIGF1dG8gY29tcGxldGlvbiB3b3JrcyB3aGVuIHNjcmlwdCBleGVj
dXRpb24gaXMgcGF1c2VkLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRlc3RDb21wbGV0aW9u
T25QYXVzZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgic2NyaXB0cyIpOwor
ICAgIHZhciB0ZXN0ID0gdGhpczsKKyAgICB0aGlzLl9leGVjdXRlQ29kZVdoZW5TY3JpcHRzQXJl
UGFyc2VkKCJoYW5kbGVDbGljaygpIiwgWyJjb21wbGV0aW9uX29uX3BhdXNlLmh0bWwkIl0pOwor
CisgICAgdGhpcy5fd2FpdEZvclNjcmlwdFBhdXNlKAorICAgICAgICB7CisgICAgICAgICAgICBm
dW5jdGlvbnNPblN0YWNrOiBbImlubmVyRnVuY3Rpb24iLCAiaGFuZGxlQ2xpY2siLCAiKGFub255
bW91cyBmdW5jdGlvbikiXSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IDksCisgICAgICAgICAg
ICBsaW5lVGV4dDogIiAgICBkZWJ1Z2dlcjsiCisgICAgICAgIH0sCisgICAgICAgIHNob3dDb25z
b2xlKTsKKworICAgIGZ1bmN0aW9uIHNob3dDb25zb2xlKCkgeworICAgICAgICB0ZXN0LmFkZFNu
aWZmZXIoV2ViSW5zcGVjdG9yLmNvbnNvbGUsICJhZnRlclNob3ciLCB0ZXN0TG9jYWxzQ29tcGxl
dGlvbik7CisgICAgICAgIFdlYkluc3BlY3Rvci5zaG93Q29uc29sZSgpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHRlc3RMb2NhbHNDb21wbGV0aW9uKCkgeworICAgICAgICBjaGVja0NvbXBsZXRp
b25zKCJ0aCIsIFsicGFyYW1ldGVyMSIsICJjbG9zdXJlTG9jYWwiLCAicCIsICJjcmVhdGVDbG9z
dXJlTG9jYWwiXSwgdGVzdFRoaXNDb21wbGV0aW9uKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0
ZXN0VGhpc0NvbXBsZXRpb24oKSB7CisgICAgICAgIGNoZWNrQ29tcGxldGlvbnMoInRoaXMuIiwg
WyJmaWVsZDEiLCAiZmllbGQyIiwgIm0iXSwgdGVzdEZpZWxkQ29tcGxldGlvbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdEZpZWxkQ29tcGxldGlvbigpIHsKKyAgICAgICAgY2hlY2tDb21w
bGV0aW9ucygidGhpcy5maWVsZDEuIiwgWyJpZCIsICJuYW1lIl0sIGZ1bmN0aW9uKCkgeyB0ZXN0
LnJlbGVhc2VDb250cm9sKCk7IH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrQ29tcGxl
dGlvbnMoZXhwcmVzc2lvbiwgZXhwZWN0ZWRQcm9wZXJ0aWVzLCBjYWxsYmFjaykgeworICAgICAg
ICB0ZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLmNvbnNvbGUsICJfcmVwb3J0Q29tcGxldGlv
bnMiLAorICAgICAgICAgICAgZnVuY3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFk
eUNhbGxiYWNrLCBkb3ROb3RhdGlvbiwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCwg
aXNFeGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICB0ZXN0LmFzc2VydFRydWUoIWlzRXhjZXB0
aW9uLCAiRXhjZXB0aW9uIHdoaWxlIGNvbGxlY3RpbmcgY29tcGxldGlvbnMiKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkUHJvcGVydGllcy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGV4cGVjdGVkUHJvcGVydGllc1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5hc3NlcnRUcnVlKHJlc3VsdFtuYW1lXSwgIk5h
bWUgIiArIG5hbWUgKyAiIG5vdCBmb3VuZCBhbW9uZyB0aGUgY29tcGxldGlvbnM6ICIgKyBKU09O
LnN0cmluZ2lmeShyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c2V0VGltZW91dChjYWxsYmFjaywgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgIFdlYkluc3Bl
Y3Rvci5jb25zb2xlLnByb21wdC50ZXh0ID0gZXhwcmVzc2lvbjsKKyAgICAgIFdlYkluc3BlY3Rv
ci5jb25zb2xlLnByb21wdC5hdXRvQ29tcGxldGVTb29uKCk7CisgICAgfQorCisgICAgdGhpcy50
YWtlQ29udHJvbCgpOworfTsKKworCisvKioKKyAqIFRlc3RzIHRoYXQgaW5zcGVjdGVkIHBhZ2Ug
ZG9lc24ndCBoYW5nIG9uIHJlbG9hZCBpZiBpdCBjb250YWlucyBhIHN5bnRheAorICogZXJyb3Ig
YW5kIERldlRvb2xzIHdpbmRvdyBpcyBvcGVuLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RBdXRvQ29udGludWVPblN5bnRheEVycm9yID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuc2hv
d1BhbmVsKCJzY3JpcHRzIik7CisgICAgdmFyIHRlc3QgPSB0aGlzOworCisgICAgZnVuY3Rpb24g
Y2hlY2tTY3JpcHRzTGlzdCgpIHsKKyAgICAgICAgdmFyIHNjcmlwdFNlbGVjdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzY3JpcHRzLWZpbGVzIik7CisgICAgICAgIHZhciBvcHRpb25zID0g
c2NyaXB0U2VsZWN0Lm9wdGlvbnM7CisgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSBvbmx5IGNv
bnNvbGUgQVBJIHNvdXJjZSAoc2VlCisgICAgICAgIC8vIEluamVjdGVkU2NyaXB0Ll9lbnN1cmVD
b21tYW5kTGluZUFQSUluc3RhbGxlZCkgc2luY2UgdGhlIHBhZ2Ugc2NyaXB0CisgICAgICAgIC8v
IGNvbnRhaW5zIGEgc3ludGF4IGVycm9yLgorICAgICAgICBmb3IgKHZhciBpID0gMCA7IGkgPCBv
cHRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAob3B0aW9uc1tpXS50ZXh0LnNl
YXJjaCgic2NyaXB0X3N5bnRheF9lcnJvci5odG1sJCIpICE9PSAtMSkKKyAgICAgICAgICAgICAg
ICB0ZXN0LmZhaWwoIlNjcmlwdCB3aXRoIHN5bnRheCBlcnJvciBzaG91bGQgbm90IGJlIGluIHRo
ZSBsaXN0IG9mIHBhcnNlZCBzY3JpcHRzLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgdGhp
cy5hZGRTbmlmZmVyKGRldnRvb2xzLkRlYnVnZ2VyQWdlbnQucHJvdG90eXBlLCAiaGFuZGxlU2Ny
aXB0c1Jlc3BvbnNlXyIsCisgICAgICAgIGZ1bmN0aW9uKG1zZykgeworICAgICAgICAgICAgY2hl
Y2tTY3JpcHRzTGlzdCgpOworCisgICAgICAgICAgICAvLyBSZWxvYWQgaW5zcGVjdGVkIHBhZ2Uu
CisgICAgICAgICAgICB0ZXN0LmV2YWx1YXRlSW5Db25zb2xlXygKKyAgICAgICAgICAgICAgICAi
d2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsiLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHJlc3VsdFRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5hc3NlcnRFcXVhbHMoInVu
ZGVmaW5lZCIsIHJlc3VsdFRleHQsICJVbmV4cGVjdGVkIHJlc3VsdCBvZiByZWxvYWQoKS4iKTsK
KyAgICAgICAgICAgICAgICAgICAgd2FpdEZvckV4Y2VwdGlvbkV2ZW50KCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgZnVuY3Rpb24gd2FpdEZvckV4Y2VwdGlvbkV2
ZW50KCkgeworICAgICAgdmFyIGV4Y2VwdGlvbkNvdW50ID0gMDsKKyAgICAgIHRlc3QuYWRkU25p
ZmZlcigKKyAgICAgICAgICBkZXZ0b29scy5EZWJ1Z2dlckFnZW50LnByb3RvdHlwZSwKKyAgICAg
ICAgICAiaGFuZGxlRXhjZXB0aW9uRXZlbnRfIiwKKyAgICAgICAgICBmdW5jdGlvbihtc2cpIHsK
KyAgICAgICAgICAgICAgZXhjZXB0aW9uQ291bnQrKzsKKyAgICAgICAgICAgICAgdGVzdC5hc3Nl
cnRFcXVhbHMoMSwgZXhjZXB0aW9uQ291bnQsICJUb28gbWFueSBleGNlcHRpb25zLiIpOworICAg
ICAgICAgICAgICB0ZXN0LmFzc2VydEVxdWFscyh1bmRlZmluZWQsIG1zZy5nZXRCb2R5KCkuc2Ny
aXB0LCAiVW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBKU09OLnN0cmluZ2lmeShtc2cpKTsKKyAg
ICAgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICAgIH0pOworCisgICAg
ICAvLyBDaGVjayB0aGF0IHRoZSBzY3JpcHQgaXMgbm90IHBhdXNlZCBvbiBwYXJzZSBlcnJvci4K
KyAgICAgIHRlc3QuYWRkU25pZmZlcigKKyAgICAgICAgICBXZWJJbnNwZWN0b3IsCisgICAgICAg
ICAgInBhdXNlZFNjcmlwdCIsCisgICAgICAgICAgZnVuY3Rpb24oY2FsbEZyYW1lcykgeworICAg
ICAgICAgICAgICB0ZXN0LmZhaWwoIlNjcmlwdCBleGVjdXRpb24gc2hvdWxkIG5vdCBwYXVzZSBv
biBzeW50YXggZXJyb3IuIik7CisgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdGhpcy50YWtl
Q29udHJvbCgpOworfTsKKworCisvKioKKyAqIENoZWNrcyBjdXJyZW50IGV4ZWN1dGlvbiBsaW5l
IGFnYWluc3QgZXhwZWN0YXRpb25zLgorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWV9IHNvdXJjZUZyYW1lCisgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlciBFeHBlY3RlZCBs
aW5lIG51bWJlcgorICogQHBhcmFtIHtzdHJpbmd9IGxpbmVDb250ZW50IEV4cGVjdGVkIGxpbmUg
dGV4dAorICovCitUZXN0U3VpdGUucHJvdG90eXBlLl9jaGVja0V4ZWN1dGlvbkxpbmUgPSBmdW5j
dGlvbihzb3VyY2VGcmFtZSwgbGluZU51bWJlciwgbGluZUNvbnRlbnQpCit7CisgICAgdGhpcy5h
c3NlcnRFcXVhbHMobGluZU51bWJlciwgc291cmNlRnJhbWUuZXhlY3V0aW9uTGluZSwgIlVuZXhw
ZWN0ZWQgZXhlY3V0aW9uIGxpbmUgbnVtYmVyLiIpOworICAgIHRoaXMuYXNzZXJ0RXF1YWxzKGxp
bmVDb250ZW50LCBzb3VyY2VGcmFtZS5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlciAtIDEpLCAi
VW5leHBlY3RlZCBleGVjdXRpb24gbGluZSB0ZXh0LiIpOworfQorCisKKy8qKgorICogQ2hlY2tz
IHRoYXQgYWxsIGV4cGVjdGVkIHNjcmlwdHMgYXJlIHByZXNlbnQgaW4gdGhlIHNjcmlwdHMgbGlz
dAorICogaW4gdGhlIFNjcmlwdHMgcGFuZWwuCisgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBl
eHBlY3RlZCBSZWd1bGFyIGV4cHJlc3Npb25zIGRlc2NyaWJpbmcKKyAqICAgICBleHBlY3RlZCBz
Y3JpcHQgbmFtZXMuCisgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIGFsbCB0aGUgc2NyaXB0
cyBhcmUgaW4gInNjcmlwdHMtZmlsZXMiIHNlbGVjdAorICogICAgIGJveAorICovCitUZXN0U3Vp
dGUucHJvdG90eXBlLl9zY3JpcHRzQXJlUGFyc2VkID0gZnVuY3Rpb24oZXhwZWN0ZWQpCit7Cisg
ICAgdmFyIHNjcmlwdFNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHRzLWZp
bGVzIik7CisgICAgdmFyIG9wdGlvbnMgPSBzY3JpcHRTZWxlY3Qub3B0aW9uczsKKworICAgIC8v
IENoZWNrIHRoYXQgYXQgbGVhc3QgYWxsIHRoZSBleHBlY3RlZCBzY3JpcHRzIGFyZSBwcmVzZW50
LgorICAgIHZhciBtaXNzaW5nID0gZXhwZWN0ZWQuc2xpY2UoMCk7CisgICAgZm9yICh2YXIgaSA9
IDAgOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICBmb3IgKHZhciBqID0gMDsg
aiA8IG1pc3NpbmcubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zW2ldLnRl
eHQuc2VhcmNoKG1pc3Npbmdbal0pICE9PSAtMSkgeworICAgICAgICAgICAgICAgIG1pc3Npbmcu
c3BsaWNlKGosIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBtaXNzaW5nLmxlbmd0aCA9PT0gMDsKK307CisKKwor
LyoqCisgKiBXYWl0cyBmb3Igc2NyaXB0IHBhdXNlLCBjaGVja3MgZXhwZWN0YXRpb25zLCBhbmQg
aW52b2tlcyB0aGUgY2FsbGJhY2suCisgKiBAcGFyYW0ge09iamVjdH0gZXhwZWN0YXRpb25zICBE
aWN0aW9uYXJ5IG9mIGV4cGVjdGF0aW9ucworICogQHBhcmFtIHtmdW5jdGlvbigpOnZvaWR9IGNh
bGxiYWNrCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUuX3dhaXRGb3JTY3JpcHRQYXVzZSA9IGZ1
bmN0aW9uKGV4cGVjdGF0aW9ucywgY2FsbGJhY2spCit7CisgICAgdmFyIHRlc3QgPSB0aGlzOwor
ICAgIC8vIFdhaXQgdW50aWwgc2NyaXB0IGlzIHBhdXNlZC4KKyAgICB0ZXN0LmFkZFNuaWZmZXIo
CisgICAgICAgIFdlYkluc3BlY3RvciwKKyAgICAgICAgInBhdXNlZFNjcmlwdCIsCisgICAgICAg
IGZ1bmN0aW9uKGNhbGxGcmFtZXMpIHsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbnNPblN0YWNr
ID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxGcmFtZXMubGVuZ3Ro
OyBpKyspCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjay5wdXNoKGNhbGxGcmFtZXNb
aV0uZnVuY3Rpb25OYW1lKTsKKworICAgICAgICAgICAgdGVzdC5hc3NlcnRFcXVhbHMoZXhwZWN0
YXRpb25zLmZ1bmN0aW9uc09uU3RhY2suam9pbigiLCIpLCBmdW5jdGlvbnNPblN0YWNrLmpvaW4o
IiwiKSwgIlVuZXhwZWN0ZWQgc3RhY2suIik7CisKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQg
ZXhlY3V0aW9uIGxpbmUgd2hlcmUgdGhlIHNjcmlwdCBpcyBwYXVzZWQgaXMKKyAgICAgICAgICAg
IC8vIGV4cGVjdGVkIG9uZS4KKyAgICAgICAgICAgIHRlc3QuX2NoZWNrU291cmNlRnJhbWVXaGVu
TG9hZGVkKGV4cGVjdGF0aW9ucywgY2FsbGJhY2spOworICAgICAgICB9KTsKK307CisKKworLyoq
CisgKiBXYWl0cyBmb3IgY3VycmVudCBzb3VyY2UgZnJhbWUgdG8gbG9hZCwgY2hlY2tzIGV4cGVj
dGF0aW9ucywgYW5kIGludm9rZXMKKyAqIHRoZSBjYWxsYmFjay4KKyAqIEBwYXJhbSB7T2JqZWN0
fSBleHBlY3RhdGlvbnMgIERpY3Rpb25hcnkgb2YgZXhwZWN0YXRpb25zCisgKiBAcGFyYW0ge2Z1
bmN0aW9uKCk6dm9pZH0gY2FsbGJhY2sKKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5fY2hlY2tT
b3VyY2VGcmFtZVdoZW5Mb2FkZWQgPSBmdW5jdGlvbihleHBlY3RhdGlvbnMsIGNhbGxiYWNrKQor
eworICAgIHZhciB0ZXN0ID0gdGhpczsKKworICAgIHZhciBmcmFtZSA9IFdlYkluc3BlY3Rvci5j
dXJyZW50UGFuZWwudmlzaWJsZVZpZXcuc291cmNlRnJhbWU7CisgICAgaWYgKGZyYW1lLl9sb2Fk
ZWQpCisgICAgICAgIGNoZWNrRXhlY0xpbmUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3QuX2NoZWNrU291cmNlRnJhbWVXaGVu
TG9hZGVkKGV4cGVjdGF0aW9ucywgY2FsbGJhY2spOworICAgICAgICB9LCAxMDApOworICAgIH0K
KyAgICBmdW5jdGlvbiBjaGVja0V4ZWNMaW5lKCkgeworICAgICAgICB0ZXN0Ll9jaGVja0V4ZWN1
dGlvbkxpbmUoZnJhbWUsIGV4cGVjdGF0aW9ucy5saW5lTnVtYmVyLCBleHBlY3RhdGlvbnMubGlu
ZVRleHQpOworICAgICAgICBjYWxsYmFjaygpOworICAgIH0KK307CisKKworLyoqCisgKiBQZXJm
b3JtcyBzZXF1ZW5jZSBvZiBzdGVwcy4KKyAqIEBwYXJhbSB7QXJyYXkuPE9iamVjdHxGdW5jdGlv
bj59IEFycmF5IFtleHBlY3RhdGlvbnMxLGFjdGlvbjEsZXhwZWN0YXRpb25zMiwKKyAqICAgICBh
Y3Rpb24yLC4uLixhY3Rpb25OXS4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5fcGVyZm9ybVN0
ZXBzID0gZnVuY3Rpb24oYWN0aW9ucykKK3sKKyAgICB2YXIgdGVzdCA9IHRoaXM7CisgICAgdmFy
IGkgPSAwOworICAgIGZ1bmN0aW9uIGRvTmV4dEFjdGlvbigpIHsKKyAgICAgICAgaWYgKGkgPiAw
KQorICAgICAgICAgICAgYWN0aW9uc1tpKytdKCk7CisgICAgICAgIGlmIChpIDwgYWN0aW9ucy5s
ZW5ndGggLSAxKQorICAgICAgICAgICAgdGVzdC5fd2FpdEZvclNjcmlwdFBhdXNlKGFjdGlvbnNb
aSsrXSwgZG9OZXh0QWN0aW9uKTsKKyAgICB9CisgICAgZG9OZXh0QWN0aW9uKCk7Cit9OworCisK
Ky8qKgorICogV2FpdHMgdW50aWwgYWxsIHRoZSBzY3JpcHRzIGFyZSBwYXJzZWQgYW5kIGFzeW5j
aHJvbm91c2x5IGV4ZWN1dGVzIHRoZSBjb2RlCisgKiBpbiB0aGUgaW5zcGVjdGVkIHBhZ2UuCisg
Ki8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUuX2V4ZWN1dGVDb2RlV2hlblNjcmlwdHNBcmVQYXJzZWQg
PSBmdW5jdGlvbihjb2RlLCBleHBlY3RlZFNjcmlwdHMpCit7CisgICAgdmFyIHRlc3QgPSB0aGlz
OworCisgICAgZnVuY3Rpb24gZXhlY3V0ZUZ1bmN0aW9uSW5JbnNwZWN0ZWRQYWdlKCkgeworICAg
ICAgICAvLyBTaW5jZSBicmVha3BvaW50cyBhcmUgaWdub3JlZCBpbiBldmFscycgY2FsY3VsYXRl
KCkgZnVuY3Rpb24gaXMKKyAgICAgICAgLy8gZXhlY3V0ZSBhZnRlciB6ZXJvLXRpbWVvdXQgc28g
dGhhdCB0aGUgYnJlYWtwb2ludCBpcyBoaXQuCisgICAgICAgIHRlc3QuZXZhbHVhdGVJbkNvbnNv
bGVfKAorICAgICAgICAgICAgJ3NldFRpbWVvdXQoIicgKyBjb2RlICsgJyIgLCAwKScsCisgICAg
ICAgICAgICBmdW5jdGlvbihyZXN1bHRUZXh0KSB7CisgICAgICAgICAgICAgICAgdGVzdC5hc3Nl
cnRUcnVlKCFpc05hTihyZXN1bHRUZXh0KSwgIkZhaWxlZCB0byBnZXQgdGltZXIgaWQ6ICIgKyBy
ZXN1bHRUZXh0KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHRlc3QuX3dhaXRVbnRp
bFNjcmlwdHNBcmVQYXJzZWQoZXhwZWN0ZWRTY3JpcHRzLCBleGVjdXRlRnVuY3Rpb25Jbkluc3Bl
Y3RlZFBhZ2UpOworfTsKKworCisvKioKKyAqIFdhaXRzIHVudGlsIGFsbCB0aGUgc2NyaXB0cyBh
cmUgcGFyc2VkIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjay4KKyAqLworVGVzdFN1aXRlLnByb3Rv
dHlwZS5fd2FpdFVudGlsU2NyaXB0c0FyZVBhcnNlZCA9IGZ1bmN0aW9uKGV4cGVjdGVkU2NyaXB0
cywgY2FsbGJhY2spCit7CisgICAgdmFyIHRlc3QgPSB0aGlzOworCisgICAgZnVuY3Rpb24gd2Fp
dEZvckFsbFNjcmlwdHMoKSB7CisgICAgICAgIGlmICh0ZXN0Ll9zY3JpcHRzQXJlUGFyc2VkKGV4
cGVjdGVkU2NyaXB0cykpCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB0ZXN0LmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLCAicGFyc2VkU2NyaXB0U291
cmNlIiwgd2FpdEZvckFsbFNjcmlwdHMpOworICAgIH0KKworICAgIHdhaXRGb3JBbGxTY3JpcHRz
KCk7Cit9OworCisKKy8qKgorICogV2FpdHMgdW50aWwgYWxsIGRlYnVnZ2VyIHNjcmlwdHMgYXJl
IHBhcnNlZCBhbmQgZXhlY3V0ZXMgImEoKSIgaW4gdGhlCisgKiBpbnNwZWN0ZWQgcGFnZS4KKyAq
LworVGVzdFN1aXRlLnByb3RvdHlwZS5fZXhlY3V0ZUZ1bmN0aW9uRm9yU3RlcFRlc3QgPSBmdW5j
dGlvbigpCit7CisgICAgdGhpcy5fZXhlY3V0ZUNvZGVXaGVuU2NyaXB0c0FyZVBhcnNlZCgiYSgp
IiwgWyJkZWJ1Z2dlcl9zdGVwLmh0bWwkIiwgImRlYnVnZ2VyX3N0ZXAuanMkIl0pOworfTsKKwor
CisvKioKKyAqIFRlc3RzIHN0ZXAgb3ZlciBpbiB0aGUgZGVidWdnZXIuCisgKi8KK1Rlc3RTdWl0
ZS5wcm90b3R5cGUudGVzdFN0ZXBPdmVyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuc2hvd1Bh
bmVsKCJzY3JpcHRzIik7CisgICAgdmFyIHRlc3QgPSB0aGlzOworCisgICAgdGhpcy5fZXhlY3V0
ZUZ1bmN0aW9uRm9yU3RlcFRlc3QoKTsKKworICAgIHRoaXMuX3BlcmZvcm1TdGVwcyhbCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uc09uU3RhY2s6IFsiZCIsImEiLCIoYW5vbnltb3Vz
IGZ1bmN0aW9uKSJdLAorICAgICAgICAgICAgbGluZU51bWJlcjogMywKKyAgICAgICAgICAgIGxp
bmVUZXh0OiAiICAgIGRlYnVnZ2VyOyIKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2NyaXB0cy1zdGVwLW92ZXIi
KS5jbGljaygpOworICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICBmdW5jdGlvbnNP
blN0YWNrOiBbImQiLCJhIiwiKGFub255bW91cyBmdW5jdGlvbikiXSwKKyAgICAgICAgICAgIGxp
bmVOdW1iZXI6IDUsCisgICAgICAgICAgICBsaW5lVGV4dDogIiAgdmFyIHkgPSBmYWN0KDEwKTsi
CisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNjcmlwdHMtc3RlcC1vdmVyIikuY2xpY2soKTsKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJkIiwiYSIsIihhbm9u
eW1vdXMgZnVuY3Rpb24pIl0sCisgICAgICAgICAgICBsaW5lTnVtYmVyOiA2LAorICAgICAgICAg
ICAgbGluZVRleHQ6ICIgIHJldHVybiB5OyIKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgICAgIH0KKyAgICBd
KTsKKworICAgIHRlc3QudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBUZXN0cyBzdGVw
IG91dCBpbiB0aGUgZGVidWdnZXIuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdFN0ZXBP
dXQgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93UGFuZWwoInNjcmlwdHMiKTsKKyAgICB2
YXIgdGVzdCA9IHRoaXM7CisKKyAgICB0aGlzLl9leGVjdXRlRnVuY3Rpb25Gb3JTdGVwVGVzdCgp
OworCisgICAgdGhpcy5fcGVyZm9ybVN0ZXBzKFsKKyAgICAgICAgeworICAgICAgICAgICAgZnVu
Y3Rpb25zT25TdGFjazogWyJkIiwiYSIsIihhbm9ueW1vdXMgZnVuY3Rpb24pIl0sCisgICAgICAg
ICAgICBsaW5lTnVtYmVyOiAzLAorICAgICAgICAgICAgbGluZVRleHQ6ICIgICAgZGVidWdnZXI7
IgorICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzY3JpcHRzLXN0ZXAtb3V0IikuY2xpY2soKTsKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJhIiwiKGFub255bW91
cyBmdW5jdGlvbikiXSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IDgsCisgICAgICAgICAgICBs
aW5lVGV4dDogIiAgcHJpbnRSZXN1bHQocmVzdWx0KTsiCisgICAgICAgIH0sCisgICAgICAgIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICB9
CisgICAgXSk7CisKKyAgICB0ZXN0LnRha2VDb250cm9sKCk7Cit9OworCisKKy8qKgorICogVGVz
dHMgc3RlcCBpbiBpbiB0aGUgZGVidWdnZXIuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVz
dFN0ZXBJbiA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgic2NyaXB0cyIpOwor
ICAgIHZhciB0ZXN0ID0gdGhpczsKKworICAgIHRoaXMuX2V4ZWN1dGVGdW5jdGlvbkZvclN0ZXBU
ZXN0KCk7CisKKyAgICB0aGlzLl9wZXJmb3JtU3RlcHMoWworICAgICAgICB7CisgICAgICAgICAg
ICBmdW5jdGlvbnNPblN0YWNrOiBbImQiLCJhIiwiKGFub255bW91cyBmdW5jdGlvbikiXSwKKyAg
ICAgICAgICAgIGxpbmVOdW1iZXI6IDMsCisgICAgICAgICAgICBsaW5lVGV4dDogIiAgICBkZWJ1
Z2dlcjsiCisgICAgICAgIH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjcmlwdHMtc3RlcC1vdmVyIikuY2xpY2soKTsKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJkIiwiYSIs
Iihhbm9ueW1vdXMgZnVuY3Rpb24pIl0sCisgICAgICAgICAgICBsaW5lTnVtYmVyOiA1LAorICAg
ICAgICAgICAgbGluZVRleHQ6ICIgIHZhciB5ID0gZmFjdCgxMCk7IgorICAgICAgICB9LAorICAg
ICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJz
Y3JpcHRzLXN0ZXAtaW50byIpLmNsaWNrKCk7CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uc09uU3RhY2s6IFsiZmFjdCIsImQiLCJhIiwiKGFub255bW91cyBmdW5j
dGlvbikiXSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IDE1LAorICAgICAgICAgICAgbGluZVRl
eHQ6ICIgIHJldHVybiByOyIKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgICAgIH0KKyAgICBdKTsKKworICAg
IHRlc3QudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBHZXRzIGEgWFBhdGhSZXN1bHQg
bWF0Y2hpbmcgZ2l2ZW4geHBhdGguCisgKiBAcGFyYW0ge3N0cmluZ30geHBhdGgKKyAqIEBwYXJh
bSB7bnVtYmVyfSByZXN1bHRUeXBlCisgKiBAcGFyYW0ge05vZGV9IG9wdF9hbmNlc3RvciBDb250
ZXh0IG5vZGUuIElmIG5vdCBzcGVjaWZpZWQgZG9jdW1lbnRFbGVtZW50CisgKiAgICAgd2lsbCBi
ZSB1c2VkCisgKiBAcmV0dXJuIHtYUGF0aFJlc3VsdH0gVHlwZSBvZiByZXR1cm5lZCB2YWx1ZSBp
cyBkZXRlcm1pbmVkIGJ5ICJyZXN1bHRUeXBlIiBwYXJhbWV0ZXIKKyAqLworCitUZXN0U3VpdGUu
cHJvdG90eXBlLl9ldmFsdWF0ZVhwYXRoID0gZnVuY3Rpb24oeHBhdGgsIHJlc3VsdFR5cGUsIG9w
dF9hbmNlc3RvcikKK3sKKyAgICBpZiAoIW9wdF9hbmNlc3RvcikKKyAgICAgICAgb3B0X2FuY2Vz
dG9yID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIHRyeSB7CisgICAgICAgIHJldHVy
biBkb2N1bWVudC5ldmFsdWF0ZSh4cGF0aCwgb3B0X2FuY2VzdG9yLCBudWxsLCByZXN1bHRUeXBl
LCBudWxsKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGhpcy5mYWlsKCdFcnJvciBpbiBl
eHByZXNzaW9uOiAiJyArIHhwYXRoICsgJyIuJyArIGUpOworICAgIH0KK307CisKKworLyoqCisg
KiBHZXRzIGZpcnN0IE5vZGUgbWF0Y2hpbmcgZ2l2ZW4geHBhdGguCisgKiBAcGFyYW0ge3N0cmlu
Z30geHBhdGgKKyAqIEBwYXJhbSB7Tm9kZX0gb3B0X2FuY2VzdG9yIENvbnRleHQgbm9kZS4gSWYg
bm90IHNwZWNpZmllZCBkb2N1bWVudEVsZW1lbnQKKyAqICAgICB3aWxsIGJlIHVzZWQKKyAqIEBy
ZXR1cm4gez9Ob2RlfQorICovCitUZXN0U3VpdGUucHJvdG90eXBlLl9maW5kTm9kZSA9IGZ1bmN0
aW9uKHhwYXRoLCBvcHRfYW5jZXN0b3IpCit7CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2V2YWx1
YXRlWHBhdGgoeHBhdGgsIFhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBFLCBvcHRf
YW5jZXN0b3IpLnNpbmdsZU5vZGVWYWx1ZTsKKyAgICB0aGlzLmFzc2VydFRydWUoISFyZXN1bHQs
ICJDYW5ub3QgZmluZCBub2RlIG9uIHBhdGg6ICIgKyB4cGF0aCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK307CisKKworLyoqCisgKiBHZXRzIGEgdGV4dCBtYXRjaGluZyBnaXZlbiB4cGF0aC4KKyAq
IEBwYXJhbSB7c3RyaW5nfSB4cGF0aAorICogQHBhcmFtIHtOb2RlfSBvcHRfYW5jZXN0b3IgQ29u
dGV4dCBub2RlLiBJZiBub3Qgc3BlY2lmaWVkIGRvY3VtZW50RWxlbWVudAorICogICAgIHdpbGwg
YmUgdXNlZAorICogQHJldHVybiB7P3N0cmluZ30KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5f
ZmluZFRleHQgPSBmdW5jdGlvbih4cGF0aCwgb3B0X2FuY2VzdG9yKQoreworICAgIHZhciByZXN1
bHQgPSB0aGlzLl9ldmFsdWF0ZVhwYXRoKHhwYXRoLCBYUGF0aFJlc3VsdC5TVFJJTkdfVFlQRSwg
b3B0X2FuY2VzdG9yKS5zdHJpbmdWYWx1ZTsKKyAgICB0aGlzLmFzc2VydFRydWUoISFyZXN1bHQs
ICJDYW5ub3QgZmluZCB0ZXh0IG9uIHBhdGg6ICIgKyB4cGF0aCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK307CisKKworLyoqCisgKiBHZXRzIGFuIGl0ZXJhdG9yIG92ZXIgbm9kZXMgbWF0Y2hpbmcg
Z2l2ZW4geHBhdGguCisgKiBAcGFyYW0ge3N0cmluZ30geHBhdGgKKyAqIEBwYXJhbSB7Tm9kZX0g
b3B0X2FuY2VzdG9yIENvbnRleHQgbm9kZS4gSWYgbm90IHNwZWNpZmllZCwgZG9jdW1lbnRFbGVt
ZW50CisgKiAgICAgd2lsbCBiZSB1c2VkCisgKiBAcmV0dXJuIHtYUGF0aFJlc3VsdH0gSXRlcmF0
b3Igb3ZlciB0aGUgbm9kZXMKKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS5fbm9kZUl0ZXJhdG9y
ID0gZnVuY3Rpb24oeHBhdGgsIG9wdF9hbmNlc3RvcikKK3sKKyAgICByZXR1cm4gdGhpcy5fZXZh
bHVhdGVYcGF0aCh4cGF0aCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUs
IG9wdF9hbmNlc3Rvcik7Cit9OworCisKKy8qKgorICogQ2hlY2tzIHRoZSBzY29wZVNlY3Rpb25E
aXYgYWdhaW5zdCB0aGUgZXhwZWN0YXRpb25zLgorICogQHBhcmFtIHtOb2RlfSBzY29wZVNlY3Rp
b25EaXYgVGhlIHNlY3Rpb24gZGl2CisgKiBAcGFyYW0ge09iamVjdH0gZXhwZWN0YXRpb25zIEV4
cGVjdGF0aW9ucyBkaWN0aW9uYXJ5CisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUuX2NoZWNrU2Nv
cGVTZWN0aW9uRGl2ID0gZnVuY3Rpb24oc2NvcGVTZWN0aW9uRGl2LCBleHBlY3RhdGlvbnMpCit7
CisgICAgdmFyIHNjb3BlVGl0bGUgPSB0aGlzLl9maW5kVGV4dCgnLi9kaXZbQGNsYXNzPSJoZWFk
ZXIiXS9kaXZbQGNsYXNzPSJ0aXRsZSJdL3RleHQoKScsIHNjb3BlU2VjdGlvbkRpdik7CisgICAg
dGhpcy5hc3NlcnRFcXVhbHMoZXhwZWN0YXRpb25zLnRpdGxlLCBzY29wZVRpdGxlLCAiVW5leHBl
Y3RlZCBzY29wZSBzZWN0aW9uIHRpdGxlLiIpOworICAgIGlmICghZXhwZWN0YXRpb25zLnByb3Bl
cnRpZXMpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLmFzc2VydFRydWUoc2NvcGVTZWN0aW9u
RGl2Lmhhc1N0eWxlQ2xhc3MoImV4cGFuZGVkIiksICdTZWN0aW9uICInICsgc2NvcGVUaXRsZSAr
ICciIGlzIGNvbGxhcHNlZC4nKTsKKworICAgIHZhciBwcm9wZXJ0eUl0ID0gdGhpcy5fbm9kZUl0
ZXJhdG9yKCIuL29sL2xpIiwgc2NvcGVTZWN0aW9uRGl2KTsKKyAgICB2YXIgcHJvcGVydHlMaTsK
KyAgICB2YXIgZm91bmRQcm9wcyA9IFtdOworICAgIHdoaWxlIChwcm9wZXJ0eUxpID0gcHJvcGVy
dHlJdC5pdGVyYXRlTmV4dCgpKSB7CisgICAgICAgIHZhciBuYW1lID0gdGhpcy5fZmluZFRleHQo
Jy4vc3BhbltAY2xhc3M9Im5hbWUiXS90ZXh0KCknLCBwcm9wZXJ0eUxpKTsKKyAgICAgICAgdmFy
IHZhbHVlID0gdGhpcy5fZmluZFRleHQoJy4vc3BhbltAY2xhc3M9InZhbHVlIl0vdGV4dCgpJywg
cHJvcGVydHlMaSk7CisgICAgICAgIHRoaXMuYXNzZXJ0VHJ1ZSghIW5hbWUsICdJbnZhbGlkIHZh
cmlhYmxlIG5hbWU6ICInICsgbmFtZSArICciJyk7CisgICAgICAgIHRoaXMuYXNzZXJ0VHJ1ZShu
YW1lIGluIGV4cGVjdGF0aW9ucy5wcm9wZXJ0aWVzLCAiVW5leHBlY3RlZCBwcm9wZXJ0eTogIiAr
IG5hbWUpOworICAgICAgICB0aGlzLmFzc2VydEVxdWFscyhleHBlY3RhdGlvbnMucHJvcGVydGll
c1tuYW1lXSwgdmFsdWUsICdVbmV4cGVjdGVkICInICsgbmFtZSArICciIHByb3BlcnR5IHZhbHVl
LicpOworICAgICAgICBkZWxldGUgZXhwZWN0YXRpb25zLnByb3BlcnRpZXNbbmFtZV07CisgICAg
ICAgIGZvdW5kUHJvcHMucHVzaChuYW1lICsgIiA9ICIgKyB2YWx1ZSk7CisgICAgfQorCisgICAg
Ly8gQ2hlY2sgdGhhdCBhbGwgZXhwZWN0ZWQgcHJvcGVydGllcyB3ZXJlIGZvdW5kLgorICAgIGZv
ciAodmFyIHAgaW4gZXhwZWN0YXRpb25zLnByb3BlcnRpZXMpCisgICAgICAgIHRoaXMuZmFpbCgn
UHJvcGVydHkgIicgKyBwICsgJyIgd2FzIG5vdCBmb3VuZCBpbiBzY29wZSAiJyArIHNjb3BlVGl0
bGUgKyAnIi4gRm91bmQgcHJvcGVydGllczogIicgKyBmb3VuZFByb3BzLmpvaW4oIiwiKSArICci
Jyk7Cit9OworCisKKy8qKgorICogRXhwYW5kcyBzY29wZSBzZWN0aW9ucyBtYXRjaGluZyB0aGUg
ZmlsdGVyIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBvbgorICogc3VjY2Vzcy4KKyAqIEBwYXJh
bSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLCBudW1iZXIp
OmJvb2xlYW59CisgKiAgICAgZmlsdGVyCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawor
ICovCitUZXN0U3VpdGUucHJvdG90eXBlLl9leHBhbmRTY29wZVNlY3Rpb25zID0gZnVuY3Rpb24o
ZmlsdGVyLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgc2VjdGlvbnMgPSBXZWJJbnNwZWN0b3IuY3Vy
cmVudFBhbmVsLnNpZGViYXJQYW5lcy5zY29wZWNoYWluLnNlY3Rpb25zOworCisgICAgdmFyIHRv
QmVVcGRhdGVkQ291bnQgPSAwOworICAgIGZ1bmN0aW9uIHVwZGF0ZUxpc3RlbmVyKCkgeworICAg
ICAgICAtLXRvQmVVcGRhdGVkQ291bnQ7CisgICAgICAgIGlmICh0b0JlVXBkYXRlZENvdW50ID09
PSAwKSB7CisgICAgICAgICAgICAvLyBSZXBvcnQgd2hlbiBhbGwgc2NvcGVzIGFyZSBleHBhbmRl
ZCBhbmQgcG9wdWxhdGVkLgorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEdsb2JhbCBzY29wZSBpcyBhbHdheXMgdGhlIGxhc3Qgb25lLgorICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgIHZh
ciBzZWN0aW9uID0gc2VjdGlvbnNbaV07CisgICAgICAgIGlmICghZmlsdGVyKHNlY3Rpb25zLCBp
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICArK3RvQmVVcGRhdGVkQ291bnQ7Cisg
ICAgICAgIHZhciBwb3B1bGF0ZWQgPSBzZWN0aW9uLnBvcHVsYXRlZDsKKworICAgICAgICB0aGlz
Ll9ob29rR2V0UHJvcGVydGllc0NhbGxiYWNrKHVwZGF0ZUxpc3RlbmVyLAorICAgICAgICAgICAg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5leHBhbmQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAocG9wdWxhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSAidXBkYXRlUHJvcGVydGllcyIgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYXQgbGVhc3Qgb25j
ZQorICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciBpdCB3YXMgb3ZlcnJpZGRlbi4KKyAgICAg
ICAgICAgICAgICAgICAgc2VjdGlvbi51cGRhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICB9Cit9OworCisKKy8qKgorICogVGVzdHMgdGhhdCBzY29wZXMgY2Fu
IGJlIGV4cGFuZGVkIGFuZCBjb250YWluIGV4cGVjdGVkIGRhdGEuCisgKi8KK1Rlc3RTdWl0ZS5w
cm90b3R5cGUudGVzdEV4cGFuZFNjb3BlID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuc2hvd1Bh
bmVsKCJzY3JpcHRzIik7CisgICAgdmFyIHRlc3QgPSB0aGlzOworCisgICAgdGhpcy5fZXhlY3V0
ZUNvZGVXaGVuU2NyaXB0c0FyZVBhcnNlZCgiaGFuZGxlQ2xpY2soKSIsIFsiZGVidWdnZXJfY2xv
c3VyZS5odG1sJCJdKTsKKworICAgIHRoaXMuX3dhaXRGb3JTY3JpcHRQYXVzZSgKKyAgICAgICAg
eworICAgICAgICAgICAgZnVuY3Rpb25zT25TdGFjazogWyJpbm5lckZ1bmN0aW9uIiwgImhhbmRs
ZUNsaWNrIiwgIihhbm9ueW1vdXMgZnVuY3Rpb24pIl0sCisgICAgICAgICAgICBsaW5lTnVtYmVy
OiA4LAorICAgICAgICAgICAgbGluZVRleHQ6ICIgICAgZGVidWdnZXI7IgorICAgICAgICB9LAor
ICAgICAgICBleHBhbmRBbGxTZWN0aW9uc0V4Y2VwdEdsb2JhbCk7CisKKyAgICAvLyBFeHBhbmRp
bmcgR2xvYmFsIHNjb3BlIHRha2VzIGZvciB0b28gbG9uZyBzbyB3ZSBza2VlcCBpdC4KKyAgICBm
dW5jdGlvbiBleHBhbmRBbGxTZWN0aW9uc0V4Y2VwdEdsb2JhbCgpIHsKKyAgICAgICAgdGVzdC5f
ZXhwYW5kU2NvcGVTZWN0aW9ucyhmdW5jdGlvbihzZWN0aW9ucywgaSkgeworICAgICAgICAgICAg
cmV0dXJuIGkgPCBzZWN0aW9ucy5sZW5ndGggLSAxOworICAgICAgICB9LAorICAgICAgICBleGFt
aW5lU2NvcGVzIC8qIFdoZW4gYWxsIHNjb3BlcyBhcmUgZXhwYW5kZWQgYW5kIHBvcHVsYXRlZCBj
aGVjayB0aGVtLiAqLyk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgc2NvcGUgc2VjdGlvbnMgY29u
dGVudHMuCisgICAgZnVuY3Rpb24gZXhhbWluZVNjb3BlcygpIHsKKyAgICAgICAgdmFyIHNjb3Bl
VmFyaWFibGVzU2VjdGlvbiA9IHRlc3QuX2ZpbmROb2RlKCcvL2RpdltAaWQ9InNjcmlwdHMtc2lk
ZWJhciJdL2RpdltkaXZbQGNsYXNzPSJ0aXRsZSJdL3RleHQoKT0iU2NvcGUgVmFyaWFibGVzIl0n
KTsKKyAgICAgICAgdmFyIGV4cGVjdGVkU2NvcGVzID0gWworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHRpdGxlOiAiTG9jYWwiLAorICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHsK
KyAgICAgICAgICAgICAgICAgICAgeDoiMjAwOSIsCisgICAgICAgICAgICAgICAgICAgIGlubmVy
RnVuY3Rpb25Mb2NhbFZhcjoiMjAxMSIsCisgICAgICAgICAgICAgICAgICAgICJ0aGlzIjogImds
b2JhbCIsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICB0aXRsZTogIkNsb3N1cmUiLAorICAgICAgICAgICAgICAgIHByb3Bl
cnRpZXM6IHsKKyAgICAgICAgICAgICAgICAgICAgbjoiVGV4dFBhcmFtIiwKKyAgICAgICAgICAg
ICAgICAgICAgbWFrZUNsb3N1cmVMb2NhbFZhcjoibG9jYWwuVGV4dFBhcmFtIiwKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRpdGxlOiAiR2xvYmFsIiwKKyAgICAgICAgICAgIH0sCisgICAgICAgIF07CisgICAgICAgIHZh
ciBpdCA9IHRlc3QuX25vZGVJdGVyYXRvcignLi9kaXZbQGNsYXNzPSJib2R5Il0vZGl2Jywgc2Nv
cGVWYXJpYWJsZXNTZWN0aW9uKTsKKyAgICAgICAgdmFyIHNjb3BlSW5kZXggPSAwOworICAgICAg
ICB2YXIgc2NvcGVEaXY7CisgICAgICAgIHdoaWxlIChzY29wZURpdiA9IGl0Lml0ZXJhdGVOZXh0
KCkpIHsKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZShzY29wZUluZGV4IDwgZXhwZWN0ZWRT
Y29wZXMubGVuZ3RoLCAiVG9vIG1hbnkgc2NvcGVzLiIpOworICAgICAgICAgICAgdGVzdC5fY2hl
Y2tTY29wZVNlY3Rpb25EaXYoc2NvcGVEaXYsIGV4cGVjdGVkU2NvcGVzW3Njb3BlSW5kZXhdKTsK
KyAgICAgICAgICAgICsrc2NvcGVJbmRleDsKKyAgICAgICAgfQorICAgICAgICB0ZXN0LmFzc2Vy
dEVxdWFscyhleHBlY3RlZFNjb3Blcy5sZW5ndGgsIHNjb3BlSW5kZXgsICJVbmV4cGVjdGVkIG51
bWJlciBvZiBzY29wZXMuIik7CisKKyAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAg
IH0KKworICAgIHRlc3QudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBSZXR1cm5zIGNo
aWxkIHRyZWUgZWxlbWVudCBmb3IgYSBwcm9wZXJ0eSB3aXRoIGdpdmVuIG5hbWUuCisgKiBAcGFy
YW0ge1RyZWVFbGVtZW50fSBwYXJlbnQgUGFyZW50IHRyZWUgZWxlbWVudC4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBjaGlsZE5hbWUKKyAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RQYXRoIFBhdGggdG8g
dGhlIG9iamVjdC4gV2lsbCBiZSBwcmludGVkIGluIHRoZSBjYXNlCisgKiAgICAgb2YgZmFpbHVy
ZS4KKyAqIEByZXR1cm4ge1RyZWVFbGVtZW50fQorICovCitUZXN0U3VpdGUucHJvdG90eXBlLl9m
aW5kQ2hpbGRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHBhcmVudCwgY2hpbGROYW1lLCBvYmplY3RQYXRo
KQoreworICAgIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZHJlbjsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciB0cmVlRWxlbWVu
dCA9IGNoaWxkcmVuW2ldOworICAgICAgICB2YXIgcHJvcGVydHkgPSB0cmVlRWxlbWVudC5wcm9w
ZXJ0eTsKKyAgICAgICAgaWYgKHByb3BlcnR5Lm5hbWUgPT09IGNoaWxkTmFtZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cmVlRWxlbWVudDsKKyAgICB9CisgICAgdGhpcy5mYWlsKCdDYW5ub3QgZmlu
ZCBwcm9wZXJ0eSAiJyArIGNoaWxkTmFtZSArICciIGluICcgKyBvYmplY3RQYXRoKTsKK307CisK
KworLyoqCisgKiBFeGVjdXRlcyB0aGUgJ2NvZGUnIHdpdGggSW5qZWN0ZWRTY3JpcHRBY2Nlc3Mu
Z2V0UHJvcGVydGllcyBvdmVycmlkZW4KKyAqIHNvIHRoYXQgYWxsIGNhbGxiYWNrcyBwYXNzZWQg
dG8gSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0UHJvcGVydGllcyBhcmUKKyAqIGV4dGVuZGVkIHdp
dGggdGhlICJob29rIi4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IGhvb2sgVGhlIGhvb2sgZnVuY3Rp
b24uCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb2RlIEEgY29kZSBzbmlwcGV0IHRvIGJlIGV4ZWN1
dGVkLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLl9ob29rR2V0UHJvcGVydGllc0NhbGxiYWNr
ID0gZnVuY3Rpb24oaG9vaywgY29kZSkKK3sKKyAgICB2YXIgYWNjZXNzb3IgPSBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5wcm90b3R5cGU7CisgICAgdmFyIG9yaWcgPSBhY2Nlc3Nvci5nZXRQcm9wZXJ0
aWVzOworICAgIGFjY2Vzc29yLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwg
aWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJldmlhdGUsIGNhbGxiYWNrKSB7CisgICAgICAgIG9y
aWcuY2FsbCh0aGlzLCBvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGFiYnJldmlh
dGUsCisgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgY2FsbGJhY2suYXBw
bHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgaG9vaygpOworICAgICAgICAgICAg
fSk7CisgICAgfTsKKyAgICB0cnkgeworICAgICAgICBjb2RlKCk7CisgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgYWNjZXNzb3IuZ2V0UHJvcGVydGllcyA9IG9yaWc7CisgICAgfQorfTsKKworCisv
KioKKyAqIFRlc3RzIHRoYXQgYWxsIGVsZW1lbnRzIGluIHByb3RvdHlwZSBjaGFpbiBvZiBhbiBv
YmplY3QgaGF2ZSBleHBlY3RlZAorICogaW50cmluaWMgcHJvcHJ0aWVzKF9fcHJvdG9fXywgY29u
c3RydWN0b3IsIHByb3RvdHlwZSkuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdERlYnVn
SW50cmluc2ljUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLnNob3dQYW5lbCgi
c2NyaXB0cyIpOworICAgIHZhciB0ZXN0ID0gdGhpczsKKworICAgIHRoaXMuX2V4ZWN1dGVDb2Rl
V2hlblNjcmlwdHNBcmVQYXJzZWQoImhhbmRsZUNsaWNrKCkiLCBbImRlYnVnZ2VyX2ludHJpbnNp
Y19wcm9wZXJ0aWVzLmh0bWwkIl0pOworCisgICAgdGhpcy5fd2FpdEZvclNjcmlwdFBhdXNlKAor
ICAgICAgICB7CisgICAgICAgICAgICBmdW5jdGlvbnNPblN0YWNrOiBbImNhbGxEZWJ1Z2dlciIs
ICJoYW5kbGVDbGljayIsICIoYW5vbnltb3VzIGZ1bmN0aW9uKSJdLAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogMjksCisgICAgICAgICAgICBsaW5lVGV4dDogIiAgZGVidWdnZXI7IgorICAgICAg
ICB9LAorICAgICAgICBleHBhbmRMb2NhbFNjb3BlKTsKKworICAgIHZhciBsb2NhbFNjb3BlU2Vj
dGlvbiA9IG51bGw7CisgICAgZnVuY3Rpb24gZXhwYW5kTG9jYWxTY29wZSgpIHsKKyAgICAgIHRl
c3QuX2V4cGFuZFNjb3BlU2VjdGlvbnMoZnVuY3Rpb24oc2VjdGlvbnMsIGkpIHsKKyAgICAgICAg
ICAgICAgaWYgKGkgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZShz
ZWN0aW9uc1tpXS5vYmplY3QuaXNMb2NhbCwgIlNjb3BlICMwIGlzIG5vdCBMb2NhbC4iKTsKKyAg
ICAgICAgICAgICAgICAgIGxvY2FsU2NvcGVTZWN0aW9uID0gc2VjdGlvbnNbaV07CisgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBleGFtaW5lTG9jYWxTY29wZSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZXhhbWluZUxvY2FsU2NvcGUoKSB7CisgICAgICB2YXIg
c2NvcGVFeHBlY3RhdGlvbnMgPSBbCisgICAgICAgICAgImEiLCAiT2JqZWN0IiwgWworICAgICAg
ICAgICAgICAiY29uc3RydWN0b3IiLCAiZnVuY3Rpb24gQ2hpbGQoKSIsIFsKKyAgICAgICAgICAg
ICAgICAgICJjb25zdHJ1Y3RvciIsICJmdW5jdGlvbiBGdW5jdGlvbigpIiwgbnVsbCwKKyAgICAg
ICAgICAgICAgICAgICJuYW1lIiwgIkNoaWxkIiwgbnVsbCwKKyAgICAgICAgICAgICAgICAgICJw
cm90b3R5cGUiLCAiT2JqZWN0IiwgWworICAgICAgICAgICAgICAgICAgICAgICJjaGlsZFByb3Rv
RmllbGQiLCAyMSwgbnVsbAorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICBdLAor
CisgICAgICAgICAgICAiX19wcm90b19fIiwgIk9iamVjdCIsIFsKKyAgICAgICAgICAgICAgICAg
ICJfX3Byb3RvX18iLCAiT2JqZWN0IiwgWworICAgICAgICAgICAgICAgICAgICAgICJfX3Byb3Rv
X18iLCAiT2JqZWN0IiwgWworICAgICAgICAgICAgICAgICAgICAgICAgICAiX19wcm90b19fIiwg
Im51bGwiLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc3RydWN0b3IiLCAi
ZnVuY3Rpb24gT2JqZWN0KCkiLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAg
ICAgICAgICAgICAgICAgICJjb25zdHJ1Y3RvciIsICJmdW5jdGlvbiBQYXJlbnQoKSIsIFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgIlBhcmVudCIsIG51bGwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAicHJvdG90eXBlIiwgIk9iamVjdCIsIFsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicGFyZW50UHJvdG9GaWVsZCIsIDExLCBudWxsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAi
cGFyZW50UHJvdG9GaWVsZCIsIDExLCBudWxsLAorICAgICAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAgICAgImNvbnN0cnVjdG9yIiwgImZ1bmN0aW9uIENoaWxkKCkiLCBudWxsLAorICAgICAg
ICAgICAgICAgICJjaGlsZFByb3RvRmllbGQiLCAyMSwgbnVsbCwKKyAgICAgICAgICAgIF0sCisK
KyAgICAgICAgICAgICJwYXJlbnRGaWVsZCIsIDEwLCBudWxsLAorICAgICAgICAgICAgImNoaWxk
RmllbGQiLCAyMCwgbnVsbCwKKyAgICAgICAgICBdCisgICAgICBdOworCisgICAgICBjaGVja1By
b3BlcnR5KGxvY2FsU2NvcGVTZWN0aW9uLnByb3BlcnRpZXNUcmVlT3V0bGluZSwgIjxMb2NhbCBT
Y29wZT4iLCBzY29wZUV4cGVjdGF0aW9ucyk7CisgICAgfQorCisgICAgdmFyIHByb3BRdWV1ZSA9
IFtdOworICAgIHZhciBpbmRleCA9IDA7CisgICAgdmFyIGV4cGVjdGVkRmluYWxJbmRleCA9IDg7
CisKKyAgICBmdW5jdGlvbiBleHBhbmRBbmRDaGVja05leHRQcm9wZXJ0eSgpIHsKKyAgICAgICAg
aWYgKGluZGV4ID09PSBwcm9wUXVldWUubGVuZ3RoKSB7CisgICAgICAgICAgICB0ZXN0LmFzc2Vy
dEVxdWFscyhleHBlY3RlZEZpbmFsSW5kZXgsIGluZGV4LCAiVW5leHBlY3RlZCBudW1iZXIgb2Yg
ZXhwYW5kZWQgb2JqZWN0cy4iKTsKKyAgICAgICAgICAgIHRlc3QucmVsZWFzZUNvbnRyb2woKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlYWQgbmV4dCBw
cm9wZXJ0eSBkYXRhIGZyb20gdGhlIHF1ZXVlLgorICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBw
cm9wUXVldWVbaW5kZXhdLnRyZWVFbGVtZW50OworICAgICAgICB2YXIgcGF0aCA9IHByb3BRdWV1
ZVtpbmRleF0ucGF0aDsKKyAgICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9IHByb3BRdWV1ZVtpbmRl
eF0uZXhwZWN0YXRpb25zOworICAgICAgICBpbmRleCsrOworCisgICAgICAgIC8vIEV4cGFuZCB0
aGUgcHJvcGVydHkuCisgICAgICAgIHRlc3QuX2hvb2tHZXRQcm9wZXJ0aWVzQ2FsbGJhY2soZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgY2hlY2tQcm9wZXJ0eSh0cmVlRWxlbWVudCwgcGF0
aCwgZXhwZWN0YXRpb25zKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5leHBhbmQoKTsKKyAgICAgICAgICAgIH0p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrUHJvcGVydHkodHJlZUVsZW1lbnQsIHBhdGgs
IGV4cGVjdGF0aW9ucykgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGF0aW9u
cy5sZW5ndGg7IGkgKz0gMykgeworICAgICAgICAgICAgdmFyIG5hbWUgPSBleHBlY3RhdGlvbnNb
aV07CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBleHBlY3RhdGlvbnNbaSsxXTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZSA9IGV4cGVjdGF0aW9uc1tpKzJdOworCisgICAgICAgICAgICB2
YXIgcHJvcGVydHlQYXRoID0gcGF0aCArICIuIiArIG5hbWU7CisgICAgICAgICAgICB2YXIgcHJv
cGVydHlUcmVlRWxlbWVudCA9IHRlc3QuX2ZpbmRDaGlsZFByb3BlcnR5KHRyZWVFbGVtZW50LCBu
YW1lLCBwYXRoKTsKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0VHJ1ZShwcm9wZXJ0eVRyZWVFbGVt
ZW50LCAnUHJvcGVydHkgIicgKyBwcm9wZXJ0eVBhdGggKyAnIiBub3QgZm91bmQuJyk7CisgICAg
ICAgICAgICB0ZXN0LmFzc2VydEVxdWFscyhkZXNjcmlwdGlvbiwgcHJvcGVydHlUcmVlRWxlbWVu
dC5wcm9wZXJ0eS52YWx1ZS5kZXNjcmlwdGlvbiwgJ1VuZXhwZWN0ZWQgIicgKyBwcm9wZXJ0eVBh
dGggKyAnIiBkZXNjcmlwdGlvbi4nKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIC8vIFNjaGVkdWxlIHByb3BlcnR5IGNvbnRlbnQgY2hlY2suCisgICAgICAgICAg
ICAgICAgcHJvcFF1ZXVlLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudDog
cHJvcGVydHlUcmVlRWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgcGF0aDogcHJvcGVydHlQ
YXRoLAorICAgICAgICAgICAgICAgICAgICBleHBlY3RhdGlvbnM6IHZhbHVlLAorICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIG5l
eHQgcHJvcGVydHkgaW4gdGhlIHF1ZXVlLgorICAgICAgICBleHBhbmRBbmRDaGVja05leHRQcm9w
ZXJ0eSgpOworICAgIH0KKworICAgIHRlc3QudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisg
KiBUZXN0cyAiUGF1c2UiIGJ1dHRvbiB3aWxsIHBhdXNlIGRlYnVnZ2VyIHdoZW4gYSBzbmlwcGV0
IGlzIGV2YWx1YXRlZC4KKyAqLworVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0UGF1c2VJbkV2YWwg
PSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5zaG93UGFuZWwoInNjcmlwdHMiKTsKKworICAgIHZh
ciB0ZXN0ID0gdGhpczsKKworICAgIHZhciBwYXVzZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzY3JpcHRzLXBhdXNlIik7CisgICAgcGF1c2VCdXR0b24uY2xpY2soKTsKKworICAg
IGRldnRvb2xzLnRvb2xzLmV2YWx1YXRlSmF2YVNjcmlwdCgiZmliKDEwKSIpOworCisgICAgdGhp
cy5hZGRTbmlmZmVyKFdlYkluc3BlY3RvciwgInBhdXNlZFNjcmlwdCIsCisgICAgICAgIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICB9KTsK
KworICAgIHRlc3QudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBLZXkgZXZlbnQgd2l0
aCBnaXZlbiBrZXkgaWRlbnRpZmllci4KKyAqLworVGVzdFN1aXRlLmNyZWF0ZUtleUV2ZW50ID0g
ZnVuY3Rpb24oa2V5SWRlbnRpZmllcikKK3sKKyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRl
RXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAgICBldnQuaW5pdEtleWJvYXJkRXZlbnQoImtleWRv
d24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8sIHRydWUgLyogY2FuIGNhbmNlbCAqLywgbnVsbCAv
KiB2aWV3ICovLCBrZXlJZGVudGlmaWVyLCAiIik7CisgICAgcmV0dXJuIGV2dDsKK307CisKKwor
LyoqCisgKiBUZXN0cyBjb25zb2xlIGV2YWwuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVz
dENvbnNvbGVFdmFsID0gZnVuY3Rpb24oKQoreworICAgIHZhciB0ZXN0ID0gdGhpczsKKyAgICB0
aGlzLmV2YWx1YXRlSW5Db25zb2xlXygiMTIzIiwKKyAgICAgICAgZnVuY3Rpb24ocmVzdWx0VGV4
dCkgeworICAgICAgICAgICAgdGVzdC5hc3NlcnRFcXVhbHMoIjEyMyIsIHJlc3VsdFRleHQpOwor
ICAgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICB9KTsKKworICAgIHRo
aXMudGFrZUNvbnRyb2woKTsKK307CisKKworLyoqCisgKiBUZXN0cyBjb25zb2xlIGxvZy4KKyAq
LworVGVzdFN1aXRlLnByb3RvdHlwZS50ZXN0Q29uc29sZUxvZyA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICBXZWJJbnNwZWN0b3IuY29uc29sZS52aXNpYmxlID0gdHJ1ZTsKKyAgICB2YXIgbWVzc2FnZXMg
PSBXZWJJbnNwZWN0b3IuY29uc29sZS5tZXNzYWdlczsKKyAgICB2YXIgaW5kZXggPSAwOworCisg
ICAgdmFyIHRlc3QgPSB0aGlzOworICAgIHZhciBhc3NlcnROZXh0ID0gZnVuY3Rpb24obGluZSwg
bWVzc2FnZSwgb3B0X2NsYXNzLCBvcHRfY291bnQsIG9wdF9zdWJzdHIpIHsKKyAgICAgICAgdmFy
IGVsZW0gPSBtZXNzYWdlc1tpbmRleCsrXS50b01lc3NhZ2VFbGVtZW50KCk7CisgICAgICAgIHZh
ciBjbGF6eiA9IGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpOworICAgICAgICB2YXIgZXhwZWN0
YXRpb24gPSAob3B0X2NvdW50IHx8ICcnKSArICdjb25zb2xlX3Rlc3RfcGFnZS5odG1sOicgKyBs
aW5lICsgbWVzc2FnZTsKKyAgICAgICAgaWYgKG9wdF9zdWJzdHIpCisgICAgICAgICAgICB0ZXN0
LmFzc2VydENvbnRhaW5zKGVsZW0udGV4dENvbnRlbnQsIGV4cGVjdGF0aW9uKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdGVzdC5hc3NlcnRFcXVhbHMoZXhwZWN0YXRpb24sIGVsZW0udGV4
dENvbnRlbnQpOworICAgICAgICBpZiAob3B0X2NsYXNzKQorICAgICAgICAgICAgdGVzdC5hc3Nl
cnRDb250YWlucyhjbGF6eiwgImNvbnNvbGUtIiArIG9wdF9jbGFzcyk7CisgICAgfTsKKworICAg
IGFzc2VydE5leHQoIjUiLCAibG9nIiwgImxvZy1sZXZlbCIpOworICAgIGFzc2VydE5leHQoIjci
LCAiZGVidWciLCAibG9nLWxldmVsIik7CisgICAgYXNzZXJ0TmV4dCgiOSIsICJpbmZvIiwgImxv
Zy1sZXZlbCIpOworICAgIGFzc2VydE5leHQoIjExIiwgIndhcm4iLCAid2FybmluZy1sZXZlbCIp
OworICAgIGFzc2VydE5leHQoIjEzIiwgImVycm9yIiwgImVycm9yLWxldmVsIik7CisgICAgYXNz
ZXJ0TmV4dCgiMTUiLCAiTWVzc2FnZSBmb3JtYXQgbnVtYmVyIDEsIDIgYW5kIDMuNSIpOworICAg
IGFzc2VydE5leHQoIjE3IiwgIk1lc3NhZ2UgZm9ybWF0IGZvciBzdHJpbmciKTsKKyAgICBhc3Nl
cnROZXh0KCIxOSIsICJPYmplY3QgT2JqZWN0Iik7CisgICAgYXNzZXJ0TmV4dCgiMjIiLCAicmVw
ZWF0ZWQiLCAibG9nLWxldmVsIiwgNSk7CisgICAgYXNzZXJ0TmV4dCgiMjYiLCAiY291bnQ6IDEi
KTsKKyAgICBhc3NlcnROZXh0KCIyNiIsICJjb3VudDogMiIpOworICAgIGFzc2VydE5leHQoIjI5
IiwgImdyb3VwIiwgImdyb3VwLXRpdGxlIik7CisgICAgaW5kZXgrKzsKKyAgICBhc3NlcnROZXh0
KCIzMyIsICJ0aW1lcjoiLCAibG9nLWxldmVsIiwgIiIsIHRydWUpOworICAgIGFzc2VydE5leHQo
IjM1IiwgIjEgMiAzIiwgImxvZy1sZXZlbCIpOworICAgIGFzc2VydE5leHQoIjM3IiwgIkhUTUxE
b2N1bWVudCIsICJsb2ctbGV2ZWwiKTsKKyAgICBhc3NlcnROZXh0KCIzOSIsICI8aHRtbD4iLCAi
bG9nLWxldmVsIiwgIiIsIHRydWUpOworfTsKKworCisvKioKKyAqIFRlc3RzIGV2YWwgb2YgZ2xv
YmFsIG9iamVjdHMuCisgKi8KK1Rlc3RTdWl0ZS5wcm90b3R5cGUudGVzdEV2YWxHbG9iYWwgPSBm
dW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUudmlzaWJsZSA9IHRydWU7CisK
KyAgICB2YXIgaW5wdXRzID0gWyJmb28iLCAiZm9vYmFyIl07CisgICAgdmFyIGV4cGVjdGF0aW9u
cyA9IFsiZm9vIiwgImZvb1ZhbHVlIiwgImZvb2JhciIsICJSZWZlcmVuY2VFcnJvcjogZm9vYmFy
IGlzIG5vdCBkZWZpbmVkIl07CisKKyAgICAvLyBEbyBub3QgY2hhbmdlIGNvZGUgYmVsb3cgLSBz
aW1wbHkgYWRkIGlucHV0cyBhbmQgZXhwZWN0YXRpb25zIGFib3ZlLgorICAgIHZhciBpbml0RXZh
bCA9IGZ1bmN0aW9uKGlucHV0KSB7CisgICAgICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLnByb21w
dC50ZXh0ID0gaW5wdXQ7CisgICAgICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLnByb21wdEVsZW1l
bnQuZGlzcGF0Y2hFdmVudCggVGVzdFN1aXRlLmNyZWF0ZUtleUV2ZW50KCJFbnRlciIpKTsKKyAg
ICB9OworICAgIHZhciB0ZXN0ID0gdGhpczsKKyAgICB2YXIgbWVzc2FnZXNDb3VudCA9IDA7Cisg
ICAgdmFyIGlucHV0SW5kZXggPSAwOworICAgIHRoaXMuYWRkU25pZmZlcihXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlLCAiYWRkTWVzc2FnZSIsCisgICAgICAgIGZ1bmN0aW9uKGNv
bW1hbmRSZXN1bHQpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VzQ291bnQrKzsKKyAgICAgICAgICAg
IGlmIChtZXNzYWdlc0NvdW50ID09PSBleHBlY3RhdGlvbnMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgdmFyIG1lc3NhZ2VzID0gV2ViSW5zcGVjdG9yLmNvbnNvbGUubWVzc2FnZXM7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RhdGlvbnM7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IG1lc3NhZ2VzW2krK10udG9NZXNzYWdlRWxlbWVu
dCgpOworICAgICAgICAgICAgICAgICAgICB0ZXN0LmFzc2VydEVxdWFscyhlbGVtLnRleHRDb250
ZW50LCBleHBlY3RhdGlvbnNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB0ZXN0LnJlbGVhc2VDb250cm9sKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2Vz
Q291bnQgJSAyID09PSAwKQorICAgICAgICAgICAgICAgIGluaXRFdmFsKGlucHV0c1tpbnB1dElu
ZGV4KytdKTsKKyAgICAgICAgfSwgdHJ1ZSk7CisKKyAgICBpbml0RXZhbChpbnB1dHNbaW5wdXRJ
bmRleCsrXSk7CisgICAgdGhpcy50YWtlQ29udHJvbCgpOworfTsKKworCisvKioKKyAqIFRlc3Rz
IHRoYXQgU3RvcmFnZSBwYW5lbCBjYW4gYmUgb3BlbiBhbmQgdGhhdCBsb2NhbCBET00gc3RvcmFn
ZSBpcyBhZGRlZAorICogdG8gdGhlIHBhbmVsLgorICovCitUZXN0U3VpdGUucHJvdG90eXBlLnRl
c3RTaG93U3RvcmFnZVBhbmVsID0gZnVuY3Rpb24oKQoreworICAgIHZhciB0ZXN0ID0gdGhpczsK
KyAgICB0aGlzLmFkZFNuaWZmZXIoV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLCAiYWRkRE9N
U3RvcmFnZSIsCisgICAgICAgIGZ1bmN0aW9uKHN0b3JhZ2UpIHsKKyAgICAgICAgICAgIHZhciBv
cmlnID0gc3RvcmFnZS5nZXRFbnRyaWVzOworICAgICAgICAgICAgc3RvcmFnZS5nZXRFbnRyaWVz
ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBvcmlnLmNhbGwodGhpcywg
ZnVuY3Rpb24oZW50cmllcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlbnRyaWVz
KTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdC5yZWxlYXNlQ29udHJvbCgpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2Uu
aWQpOworICAgICAgICAgICAgICAgIHN0b3JhZ2UuZ2V0RW50cmllcyA9IG9yaWc7CisgICAgICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgdGVzdC5mYWlsKCJFeGNlcHRpb24g
aW4gc2VsZWN0RE9NU3RvcmFnZTogIiArIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB0aGlzLnNob3dQYW5lbCgic3RvcmFnZSIpOworCisgICAgLy8gQWNjZXNzIGxvY2FsU3Rv
cmFnZSBzbyB0aGF0IGl0J3MgcHVzaGVkIHRvIHRoZSBmcm9udGVuZC4KKyAgICB0aGlzLmV2YWx1
YXRlSW5Db25zb2xlXygKKyAgICAgICAgJ3NldFRpbWVvdXQoImxvY2FsU3RvcmFnZS54ID0gMTAi
ICwgMCknLAorICAgICAgICBmdW5jdGlvbihyZXN1bHRUZXh0KSB7CisgICAgICAgICAgICB0ZXN0
LmFzc2VydFRydWUoIWlzTmFOKHJlc3VsdFRleHQpLCAiRmFpbGVkIHRvIGdldCB0aW1lciBpZDog
IiArIHJlc3VsdFRleHQpOworICAgICAgICB9KTsKKworICAgIC8vIFdhaXQgdW50aWwgRE9NIHN0
b3JhZ2UgaXMgYWRkZWQgdG8gdGhlIHBhbmVsLgorICAgIHRoaXMudGFrZUNvbnRyb2woKTsKK307
CisKKworLyoqCisgKiBUZXN0IHJ1bm5lciBmb3IgdGhlIHRlc3Qgc3VpdGUuCisgKi8KK3ZhciB1
aVRlc3RzID0ge307CisKKworLyoqCisgKiBSdW4gZWFjaCB0ZXN0IGZyb20gdGhlIHRlc3Qgc3Vp
dCBvbiBhIGZyZXNoIGluc3RhbmNlIG9mIHRoZSBzdWl0ZS4KKyAqLwordWlUZXN0cy5ydW5BbGxU
ZXN0cyA9IGZ1bmN0aW9uKCkKK3sKKyAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAg
IGZvciAodmFyIG5hbWUgaW4gVGVzdFN1aXRlLnByb3RvdHlwZSkgeworICAgICAgICBpZiAobmFt
ZS5zdWJzdHJpbmcoMCwgNCkgPT09ICJ0ZXN0IiAmJiB0eXBlb2YgVGVzdFN1aXRlLnByb3RvdHlw
ZVtuYW1lXSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHVpVGVzdHMucnVuVGVzdChuYW1l
KTsKKyAgICB9Cit9OworCisKKy8qKgorICogUnVuIHNwZWNpZmllZCB0ZXN0IG9uIGEgZnJlc2gg
aW5zdGFuY2Ugb2YgdGhlIHRlc3Qgc3VpdGUuCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1l
IG9mIGEgdGVzdCBtZXRob2QgZnJvbSBUZXN0U3VpdGUgY2xhc3MuCisgKi8KK3VpVGVzdHMucnVu
VGVzdCA9IGZ1bmN0aW9uKG5hbWUpCit7CisgICAgbmV3IFRlc3RTdWl0ZSgpLnJ1blRlc3QobmFt
ZSk7Cit9OworCisKK30K
</data>
<flag name="review"
          id="31076"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>