<?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>173890</bug_id>
          
          <creation_ts>2017-06-27 14:32:12 -0700</creation_ts>
          <short_desc>Web Inspector: Modernize InjectedScriptSource</short_desc>
          <delta_ts>2017-07-18 16:20:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174006</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1323257</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 14:32:12 -0700</bug_when>
    <thetext>It is rather frustrating that InjectedScriptSource uses old style JavaScript.

  • It uses ES5 semantics when it could use ES2015+ for many things
    - var =&gt; let, template strings, and other syntactic + safer niceties

  • Object + Prototype could be using Class
    - classes provide a simpler syntax to do the same thing

  • Order of methods is mostly arbitrary
    - currently its a bit of a mess

I want the JavaScript InjectedScript class to mirror Inspector::InjectedScript&apos;s C++ interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323397</commentid>
    <comment_count>1</comment_count>
      <attachid>313979</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 20:42:00 -0700</bug_when>
    <thetext>Created attachment 313979
[PATCH] Part 1 - Mostly mechanical (var -&gt; let)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323398</commentid>
    <comment_count>2</comment_count>
      <attachid>313980</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 20:42:31 -0700</bug_when>
    <thetext>Created attachment 313980
[PATCH] Part 2 - Mostly mechanical (classes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323399</commentid>
    <comment_count>3</comment_count>
      <attachid>313981</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 20:43:05 -0700</bug_when>
    <thetext>Created attachment 313981
[PATCH] Part 3 - Move code around, eliminate some functions (isDefined, isPrimitiveValue)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323400</commentid>
    <comment_count>4</comment_count>
      <attachid>313982</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 20:43:40 -0700</bug_when>
    <thetext>Created attachment 313982
[PATCH] Part 4 - Rename RemoteObject, move more code around, final tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323402</commentid>
    <comment_count>5</comment_count>
      <attachid>313983</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 20:49:24 -0700</bug_when>
    <thetext>Created attachment 313983
[PATCH] Combined - Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323407</commentid>
    <comment_count>6</comment_count>
      <attachid>313985</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-27 21:24:46 -0700</bug_when>
    <thetext>Created attachment 313985
[PATCH] Combined - Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324451</commentid>
    <comment_count>7</comment_count>
      <attachid>313979</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-30 10:12:23 -0700</bug_when>
    <thetext>Comment on attachment 313979
[PATCH] Part 1 - Mostly mechanical (var -&gt; let)

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

r=me on part 1

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:824
&gt; +        // FIXME: This is observable if the page overrides Set.prototype[Symbol.iterator].

Please file a bug about this, if there is not one already.

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:844
&gt; +        // FIXME: This is observable if the page overrides Map.prototype[Symbol.iterator].

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324570</commentid>
    <comment_count>8</comment_count>
      <attachid>313980</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-30 15:13:29 -0700</bug_when>
    <thetext>Comment on attachment 313980
[PATCH] Part 2 - Mostly mechanical (classes)

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

r=me on part 2

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:951
&gt; +        this.className = InjectedScriptHost.internalConstructorName(object);

Not something to address in a class refactoring, but is there a reason that we need to compute these eagerly instead of doing it in getters? I guess if we immediately ship all of this to inspector it&apos;s OK to precompute it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324645</commentid>
    <comment_count>9</comment_count>
      <attachid>313980</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-30 16:54:02 -0700</bug_when>
    <thetext>Comment on attachment 313980
[PATCH] Part 2 - Mostly mechanical (classes)

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

&gt;&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:951
&gt;&gt; +        this.className = InjectedScriptHost.internalConstructorName(object);
&gt; 
&gt; Not something to address in a class refactoring, but is there a reason that we need to compute these eagerly instead of doing it in getters? I guess if we immediately ship all of this to inspector it&apos;s OK to precompute it.

Correct `this` is going to be JSON serialized and sent to the frontend. That is why these properties are not _className, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324713</commentid>
    <comment_count>10</comment_count>
      <attachid>313980</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-06-30 19:00:53 -0700</bug_when>
    <thetext>Comment on attachment 313980
[PATCH] Part 2 - Mostly mechanical (classes)

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

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:942
&gt; +            return;

Do we ever return inside constructors?  I realize that this is fine, but I&apos;m just not used to seeing it.  We might want to refactor this a bit for clarity if it is such that we don&apos;t have cases of returning in constructors.

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:965
&gt; +        if (subtype === &quot;array&quot;)
&gt; +            this.size = typeof object.length === &quot;number&quot; ? object.length : 0;
&gt; +        else if (subtype === &quot;set&quot; || subtype === &quot;map&quot;)
&gt; +            this.size = object.size;
&gt; +        else if (subtype === &quot;weakmap&quot;)
&gt; +            this.size = InjectedScriptHost.weakMapSize(object);
&gt; +        else if (subtype === &quot;weakset&quot;)
&gt; +            this.size = InjectedScriptHost.weakSetSize(object);
&gt; +        else if (subtype === &quot;class&quot;) {
&gt; +            this.classPrototype = injectedScript._wrapObject(object.prototype, objectGroupName);
&gt; +            this.className = object.name;
&gt; +        }

NIT: This isn&apos;t needed, but you could rework this as a switch.

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:1308
&gt; +InjectedScript.RemoteObject.createObjectPreviewForValue = function(value, generatePreview, columnNames)
&gt; +{
&gt; +    let remoteObject = new InjectedScript.RemoteObject(value, undefined, false, generatePreview, columnNames);
&gt; +    if (remoteObject.objectId)
&gt; +        injectedScript.releaseObject(remoteObject.objectId);
&gt; +    if (remoteObject.classPrototype &amp;&amp; remoteObject.classPrototype.objectId)
&gt; +        injectedScript.releaseObject(remoteObject.classPrototype.objectId);
&gt; +    return remoteObject.preview || remoteObject._emptyPreview();
&gt; +};

Is there a reason to not make this static on InjectedScript.RemoteObject?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1329877</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-07-17 21:28:04 -0700</bug_when>
    <thetext>Bump</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330173</commentid>
    <comment_count>12</comment_count>
      <attachid>313981</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-18 15:42:04 -0700</bug_when>
    <thetext>Comment on attachment 313981
[PATCH] Part 3 - Move code around, eliminate some functions (isDefined, isPrimitiveValue)

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

rs=me

&gt; Source/JavaScriptCore/inspector/InjectedScriptSource.js:83
&gt; +        return !InjectedScriptHost.isHTMLAllCollection(value);

So gross! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330174</commentid>
    <comment_count>13</comment_count>
      <attachid>313982</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-18 15:46:22 -0700</bug_when>
    <thetext>Comment on attachment 313982
[PATCH] Part 4 - Rename RemoteObject, move more code around, final tweaks

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330175</commentid>
    <comment_count>14</comment_count>
      <attachid>313985</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-18 15:46:45 -0700</bug_when>
    <thetext>Comment on attachment 313985
[PATCH] Combined - Proposed Fix

r=me, need to rebase it probably though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1330189</commentid>
    <comment_count>15</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-07-18 16:20:16 -0700</bug_when>
    <thetext>&lt;https://trac.webkit.org/r219639&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313979</attachid>
            <date>2017-06-27 20:42:00 -0700</date>
            <delta_ts>2017-06-30 10:12:42 -0700</delta_ts>
            <desc>[PATCH] Part 1 - Mostly mechanical (var -&gt; let)</desc>
            <filename>step-1.patch</filename>
            <type>text/plain</type>
            <size>46046</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IDIzYmE2Zjg4NTYyY2U3M2IxNGU1Y2ZhOGJiZjgxZWM3NzFmNDkyZDYKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgSnVuIDI3IDE0
OjMyOjQ5IDIwMTcgLTA3MDAKCiAgICBMT0NBTDogU3RlcCAxCgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKaW5kZXgg
YWMwMThmM2E4ZjEuLjEyOTQ3MzE1MzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTkyLDQ2ICs5Miw0
NSBAQCBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZSA9IHsKIH0KIAogSW5qZWN0ZWRTY3Jp
cHQucHJvdG90eXBlID0gewotICAgIGlzUHJpbWl0aXZlVmFsdWU6IGZ1bmN0aW9uKG9iamVjdCkK
KyAgICBpc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkKICAgICB7CiAgICAgICAgIC8vIEZJWE1FKDMz
NzE2KTogdHlwZW9mIGRvY3VtZW50LmFsbCBpcyBhbHdheXMgJ3VuZGVmaW5lZCcuCiAgICAgICAg
IHJldHVybiBJbmplY3RlZFNjcmlwdC5wcmltaXRpdmVUeXBlc1t0eXBlb2Ygb2JqZWN0XSAmJiAh
dGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpOwogICAgIH0sCiAKLSAgICBwcmV2aWV3
VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHByZXZpZXdWYWx1ZSh2YWx1ZSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJl
dmlld0ZvclZhbHVlKHZhbHVlLCB0cnVlKTsKICAgICB9LAogCi0gICAgZnVuY3Rpb25EZXRhaWxz
OiBmdW5jdGlvbihmdW5jKQorICAgIGZ1bmN0aW9uRGV0YWlscyhmdW5jKQogICAgIHsKLSAgICAg
ICAgdmFyIGRldGFpbHMgPSBJbmplY3RlZFNjcmlwdEhvc3QuZnVuY3Rpb25EZXRhaWxzKGZ1bmMp
OworICAgICAgICBsZXQgZGV0YWlscyA9IEluamVjdGVkU2NyaXB0SG9zdC5mdW5jdGlvbkRldGFp
bHMoZnVuYyk7CiAgICAgICAgIGlmICghZGV0YWlscykKICAgICAgICAgICAgIHJldHVybiAiQ2Fu
bm90IHJlc29sdmUgZnVuY3Rpb24gZGV0YWlscy4iOwotCiAgICAgICAgIHJldHVybiBkZXRhaWxz
OwogICAgIH0sCiAKLSAgICB3cmFwT2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIGdyb3VwTmFtZSwg
Y2FuQWNjZXNzSW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBnZW5lcmF0ZVByZXZpZXcpCisgICAgd3Jh
cE9iamVjdChvYmplY3QsIGdyb3VwTmFtZSwgY2FuQWNjZXNzSW5zcGVjdGVkR2xvYmFsT2JqZWN0
LCBnZW5lcmF0ZVByZXZpZXcpCiAgICAgewogICAgICAgICBpZiAoY2FuQWNjZXNzSW5zcGVjdGVk
R2xvYmFsT2JqZWN0KQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBPYmplY3Qob2JqZWN0
LCBncm91cE5hbWUsIGZhbHNlLCBnZW5lcmF0ZVByZXZpZXcpOwogICAgICAgICByZXR1cm4gdGhp
cy5fZmFsbGJhY2tXcmFwcGVyKG9iamVjdCk7CiAgICAgfSwKIAotICAgIHNldEV4Y2VwdGlvblZh
bHVlOiBmdW5jdGlvbih2YWx1ZSkKKyAgICBzZXRFeGNlcHRpb25WYWx1ZSh2YWx1ZSkKICAgICB7
CiAgICAgICAgIHRoaXMuX2V4Y2VwdGlvblZhbHVlID0gdmFsdWU7CiAgICAgfSwKIAotICAgIGNs
ZWFyRXhjZXB0aW9uVmFsdWU6IGZ1bmN0aW9uKCkKKyAgICBjbGVhckV4Y2VwdGlvblZhbHVlKCkK
ICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGNlcHRpb25WYWx1ZTsKICAgICB9LAogCi0g
ICAgX2ZhbGxiYWNrV3JhcHBlcjogZnVuY3Rpb24ob2JqZWN0KQorICAgIF9mYWxsYmFja1dyYXBw
ZXIob2JqZWN0KQogICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHt9OworICAgICAgICBsZXQg
cmVzdWx0ID0ge307CiAgICAgICAgIHJlc3VsdC50eXBlID0gdHlwZW9mIG9iamVjdDsKICAgICAg
ICAgaWYgKHRoaXMuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQogICAgICAgICAgICAgcmVzdWx0
LnZhbHVlID0gb2JqZWN0OwpAQCAtMTQwLDcgKzEzOSw3IEBAIEluamVjdGVkU2NyaXB0LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCi0gICAgd3JhcFRhYmxl
OiBmdW5jdGlvbihjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5z
KQorICAgIHdyYXBUYWJsZShjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBj
b2x1bW5zKQogICAgIHsKICAgICAgICAgaWYgKCFjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tXcmFwcGVyKHRhYmxlKTsKQEAg
LTE0OSw0NiArMTQ4LDQ5IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
Ly8gcHJvcGVydGllcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29sdW1uIG5hbWVzIGFuZCBpbiB0
aGUgcHJvdmlkZWQgb3JkZXIuCiAgICAgICAgIC8vIFdlIGNvdWxkIGZpbHRlciBoZXJlIHRvIGF2
b2lkIHNlbmRpbmcgdmVyeSBsYXJnZSBwcmV2aWV3IG9iamVjdHMuCiAKLSAgICAgICAgdmFyIGNv
bHVtbk5hbWVzID0gbnVsbDsKKyAgICAgICAgbGV0IGNvbHVtbk5hbWVzID0gbnVsbDsKICAgICAg
ICAgaWYgKHR5cGVvZiBjb2x1bW5zID09PSAic3RyaW5nIikKICAgICAgICAgICAgIGNvbHVtbnMg
PSBbY29sdW1uc107CiAKICAgICAgICAgaWYgKEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBlKGNv
bHVtbnMpID09PSAiYXJyYXkiKSB7CiAgICAgICAgICAgICBjb2x1bW5OYW1lcyA9IFtdOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgKytpKQogICAgICAgICAg
ICAgICAgIGNvbHVtbk5hbWVzLnB1c2godG9TdHJpbmcoY29sdW1uc1tpXSkpOwogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHRoaXMuX3dyYXBPYmplY3QodGFibGUsICJjb25zb2xlIiwgZmFs
c2UsIHRydWUsIGNvbHVtbk5hbWVzKTsKICAgICB9LAogCi0gICAgaW5zcGVjdE9iamVjdDogZnVu
Y3Rpb24ob2JqZWN0KQorICAgIGluc3BlY3RPYmplY3Qob2JqZWN0KQogICAgIHsKICAgICAgICAg
aWYgKHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbCkKICAgICAgICAgICAgIHRoaXMuX2NvbW1hbmRM
aW5lQVBJSW1wbC5pbnNwZWN0KG9iamVjdCk7CiAgICAgfSwKIAotICAgIF93cmFwT2JqZWN0OiBm
dW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRl
UHJldmlldywgY29sdW1uTmFtZXMpCisgICAgX3dyYXBPYmplY3Qob2JqZWN0LCBvYmplY3RHcm91
cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQogICAg
IHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBuZXcgSW5qZWN0ZWRTY3JpcHQu
UmVtb3RlT2JqZWN0KG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcyk7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIGxldCBkZXNjcmlwdGlvbjsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGRlc2NyaXB0aW9uID0gaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKGUpOworICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKGUpOwogICAg
ICAgICAgICAgfSBjYXRjaCAoZXgpIHsKLSAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24g
PSAiPGZhaWxlZCB0byBjb252ZXJ0IGV4Y2VwdGlvbiB0byBzdHJpbmc+IjsKKyAgICAgICAgICAg
ICAgICBkZXNjcmlwdGlvbiA9ICI8ZmFpbGVkIHRvIGNvbnZlcnQgZXhjZXB0aW9uIHRvIHN0cmlu
Zz4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlw
dC5SZW1vdGVPYmplY3QoZGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9i
aW5kOiBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSkKKyAgICBfYmluZChvYmplY3Qs
IG9iamVjdEdyb3VwTmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBpZCA9IHRoaXMuX2xhc3RCb3Vu
ZE9iamVjdElkKys7CisgICAgICAgIGxldCBpZCA9IHRoaXMuX2xhc3RCb3VuZE9iamVjdElkKys7
CisgICAgICAgIGxldCBvYmplY3RJZCA9IGB7ImluamVjdGVkU2NyaXB0SWQiOiR7aW5qZWN0ZWRT
Y3JpcHRJZH0sImlkIjoke2lkfX1gOworCiAgICAgICAgIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0
W2lkXSA9IG9iamVjdDsKLSAgICAgICAgdmFyIG9iamVjdElkID0gIntcImluamVjdGVkU2NyaXB0
SWRcIjoiICsgaW5qZWN0ZWRTY3JpcHRJZCArICIsXCJpZFwiOiIgKyBpZCArICJ9IjsKKwogICAg
ICAgICBpZiAob2JqZWN0R3JvdXBOYW1lKSB7Ci0gICAgICAgICAgICB2YXIgZ3JvdXAgPSB0aGlz
Ll9vYmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKKyAgICAgICAgICAgIGxldCBncm91cCA9
IHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOwogICAgICAgICAgICAgaWYgKCFn
cm91cCkgewogICAgICAgICAgICAgICAgIGdyb3VwID0gW107CiAgICAgICAgICAgICAgICAgdGhp
cy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV0gPSBncm91cDsKQEAgLTE5NiwxNSArMTk4
LDE2IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGdyb3VwLnB1
c2goaWQpOwogICAgICAgICAgICAgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtpZF0gPSBvYmpl
Y3RHcm91cE5hbWU7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gb2JqZWN0SWQ7CiAgICAg
fSwKIAotICAgIF9wYXJzZU9iamVjdElkOiBmdW5jdGlvbihvYmplY3RJZCkKKyAgICBfcGFyc2VP
YmplY3RJZChvYmplY3RJZCkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhv
c3QuZXZhbHVhdGUoIigiICsgb2JqZWN0SWQgKyAiKSIpOwogICAgIH0sCiAKLSAgICByZWxlYXNl
T2JqZWN0R3JvdXA6IGZ1bmN0aW9uKG9iamVjdEdyb3VwTmFtZSkKKyAgICByZWxlYXNlT2JqZWN0
R3JvdXAob2JqZWN0R3JvdXBOYW1lKQogICAgIHsKICAgICAgICAgaWYgKG9iamVjdEdyb3VwTmFt
ZSA9PT0gImNvbnNvbGUiKSB7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFJlc3VsdDsK
QEAgLTIxMiwyMCArMjE1LDIwIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0cyA9IFtdOwogICAgICAgICB9CiAKLSAgICAgICAgdmFy
IGdyb3VwID0gdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CisgICAgICAgIGxl
dCBncm91cCA9IHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOwogICAgICAgICBp
ZiAoIWdyb3VwKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3Jv
dXAubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlT2JqZWN0KGdyb3VwW2ld
KTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07
CiAgICAgfSwKIAotICAgIGRpc3BhdGNoOiBmdW5jdGlvbihtZXRob2ROYW1lLCBhcmdzKQorICAg
IGRpc3BhdGNoKG1ldGhvZE5hbWUsIGFyZ3MpCiAgICAgewotICAgICAgICB2YXIgYXJnc0FycmF5
ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIGFyZ3MgKyAiKSIpOwotICAgICAg
ICB2YXIgcmVzdWx0ID0gdGhpc1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmdzQXJyYXkpOwor
ICAgICAgICBsZXQgYXJnc0FycmF5ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiAr
IGFyZ3MgKyAiKSIpOworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpc1ttZXRob2ROYW1lXS5hcHBs
eSh0aGlzLCBhcmdzQXJyYXkpOwogICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInVuZGVm
aW5lZCIpIHsKICAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkK
ICAgICAgICAgICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2Vi
IEluc3BlY3RvciBlcnJvcjogSW5qZWN0ZWRTY3JpcHQuJXMgcmV0dXJucyB1bmRlZmluZWQiLCBt
ZXRob2ROYW1lKTsKQEAgLTIzNCw3ICsyMzcsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfSwKIAotICAgIGdldFByZXZpZXc6IGZ1
bmN0aW9uKG9iamVjdElkKQorICAgIGdldFByZXZpZXcob2JqZWN0SWQpCiAgICAgewogICAgICAg
ICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKICAg
ICAgICAgbGV0IG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKQEAg
LTI0MiwxMSArMjQ1LDExIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9y
VmFsdWUob2JqZWN0LCB0cnVlKTsKICAgICB9LAogCi0gICAgX2dldFByb3BlcnRpZXM6IGZ1bmN0
aW9uKG9iamVjdElkLCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJhdGVQcmV2aWV3LCBuYXRpdmVHZXR0
ZXJzQXNWYWx1ZXMpCisgICAgX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2Rl
LCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcykKICAgICB7Ci0gICAgICAg
IHZhciBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAg
ICAgICB2YXIgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwotICAg
ICAgICB2YXIgb2JqZWN0R3JvdXBOYW1lID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJz
ZWRPYmplY3RJZC5pZF07CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNl
T2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9y
SWQocGFyc2VkT2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0R3JvdXBOYW1lID0gdGhpcy5f
aWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CiAKICAgICAgICAgaWYgKCF0
aGlzLl9pc0RlZmluZWQob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1
NCwxMSArMjU3LDExIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYg
KGlzU3ltYm9sKG9iamVjdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
dmFyIGRlc2NyaXB0b3JzID0gdGhpcy5fcHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIGNvbGxl
Y3Rpb25Nb2RlLCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpOworICAgICAgICBsZXQgZGVzY3JpcHRv
cnMgPSB0aGlzLl9wcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCwgY29sbGVjdGlvbk1vZGUsIG5h
dGl2ZUdldHRlcnNBc1ZhbHVlcyk7CiAKICAgICAgICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCB3
cmFwIG9iamVjdCB2YWx1ZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzY3JpcHRv
cnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRv
cnNbaV07CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07CiAgICAg
ICAgICAgICBpZiAoImdldCIgaW4gZGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICBkZXNjcmlw
dG9yLmdldCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci5nZXQsIG9iamVjdEdyb3VwTmFt
ZSk7CiAgICAgICAgICAgICBpZiAoInNldCIgaW4gZGVzY3JpcHRvcikKQEAgLTI3NiwyNSArMjc5
LDI1IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGRlc2Ny
aXB0b3JzOwogICAgIH0sCiAKLSAgICBnZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihvYmplY3RJZCwg
b3duUHJvcGVydGllcywgZ2VuZXJhdGVQcmV2aWV3KQorICAgIGdldFByb3BlcnRpZXMob2JqZWN0
SWQsIG93blByb3BlcnRpZXMsIGdlbmVyYXRlUHJldmlldykKICAgICB7Ci0gICAgICAgIHZhciBu
YXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSBmYWxzZTsKLSAgICAgICAgdmFyIGNvbGxlY3Rpb25Nb2Rl
ID0gb3duUHJvcGVydGllcyA/IEluamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlLk93blByb3Bl
cnRpZXMgOiBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5BbGxQcm9wZXJ0aWVzOworICAg
ICAgICBsZXQgbmF0aXZlR2V0dGVyc0FzVmFsdWVzID0gZmFsc2U7CisgICAgICAgIGxldCBjb2xs
ZWN0aW9uTW9kZSA9IG93blByb3BlcnRpZXMgPyBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9k
ZS5Pd25Qcm9wZXJ0aWVzIDogSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuQWxsUHJvcGVy
dGllczsKICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxl
Y3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CiAgICAg
fSwKIAotICAgIGdldERpc3BsYXlhYmxlUHJvcGVydGllczogZnVuY3Rpb24ob2JqZWN0SWQsIGdl
bmVyYXRlUHJldmlldykKKyAgICBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMob2JqZWN0SWQsIGdl
bmVyYXRlUHJldmlldykKICAgICB7Ci0gICAgICAgIHZhciBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMg
PSB0cnVlOwotICAgICAgICB2YXIgY29sbGVjdGlvbk1vZGUgPSBJbmplY3RlZFNjcmlwdC5Db2xs
ZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUu
TmF0aXZlR2V0dGVyUHJvcGVydGllczsKKyAgICAgICAgbGV0IG5hdGl2ZUdldHRlcnNBc1ZhbHVl
cyA9IHRydWU7CisgICAgICAgIGxldCBjb2xsZWN0aW9uTW9kZSA9IEluamVjdGVkU2NyaXB0LkNv
bGxlY3Rpb25Nb2RlLk93blByb3BlcnRpZXMgfCBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9k
ZS5OYXRpdmVHZXR0ZXJQcm9wZXJ0aWVzOwogICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJvcGVy
dGllcyhvYmplY3RJZCwgY29sbGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmlldywgbmF0aXZlR2V0
dGVyc0FzVmFsdWVzKTsKICAgICB9LAogCi0gICAgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzOiBmdW5j
dGlvbihvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQorICAgIGdldEludGVybmFsUHJvcGVydGll
cyhvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgdmFyIHBhcnNlZE9i
amVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmpl
Y3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmpl
Y3RHcm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlk
XTsKKyAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmpl
Y3RJZCk7CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmpl
Y3RJZCk7CisgICAgICAgIGxldCBvYmplY3RHcm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3Jv
dXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKIAogICAgICAgICBpZiAoIXRoaXMuX2lzRGVmaW5l
ZChvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzAyLDEzICszMDUsMTMg
QEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBpZiAoaXNTeW1ib2wob2Jq
ZWN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB2YXIgZGVzY3JpcHRv
cnMgPSB0aGlzLl9pbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKyAgICAgICAg
bGV0IGRlc2NyaXB0b3JzID0gdGhpcy5faW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVj
dCk7CiAgICAgICAgIGlmICghZGVzY3JpcHRvcnMpCiAgICAgICAgICAgICByZXR1cm4gW107CiAK
ICAgICAgICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCB3cmFwIG9iamVjdCB2YWx1ZXMuCi0gICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07CisgICAgICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBk
ZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07CiAgICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBk
ZXNjcmlwdG9yKQogICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB0aGlzLl93cmFw
T2JqZWN0KGRlc2NyaXB0b3IudmFsdWUsIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRl
UHJldmlldyk7CiAgICAgICAgIH0KQEAgLTMxNiwxMSArMzE5LDExIEBAIEluamVjdGVkU2NyaXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwogICAgIH0sCiAKLSAg
ICBnZXRDb2xsZWN0aW9uRW50cmllczogZnVuY3Rpb24ob2JqZWN0SWQsIG9iamVjdEdyb3VwTmFt
ZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkKKyAgICBnZXRDb2xsZWN0aW9uRW50cmllcyhv
YmplY3RJZCwgb2JqZWN0R3JvdXBOYW1lLCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKQogICAg
IHsKLSAgICAgICAgdmFyIHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmpl
Y3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmpl
Y3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cE5hbWUgfHwg
dGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CisgICAgICAgIGxl
dCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAg
ICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAg
ICBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cE5hbWUgfHwgdGhpcy5faWRUb09iamVjdEdy
b3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CiAKICAgICAgICAgaWYgKCF0aGlzLl9pc0RlZmlu
ZWQob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTMyOCw3ICszMzEsNyBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAi
b2JqZWN0IikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgZW50cmllcyA9IHRo
aXMuX2VudHJpZXMob2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShvYmplY3QpLCBz
dGFydEluZGV4LCBudW1iZXJUb0ZldGNoKTsKKyAgICAgICAgbGV0IGVudHJpZXMgPSB0aGlzLl9l
bnRyaWVzKG9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUob2JqZWN0KSwgc3RhcnRJ
bmRleCwgbnVtYmVyVG9GZXRjaCk7CiAgICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChmdW5jdGlv
bihlbnRyeSkgewogICAgICAgICAgICAgZW50cnkudmFsdWUgPSBpbmplY3RlZFNjcmlwdC5fd3Jh
cE9iamVjdChlbnRyeS52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgdHJ1ZSk7CiAgICAg
ICAgICAgICBpZiAoImtleSIgaW4gZW50cnkpCkBAIC0zMzcsNTYgKzM0MCw1NiBAQCBJbmplY3Rl
ZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0pOwogICAgIH0sCiAKLSAgICBzYXZlUmVz
dWx0OiBmdW5jdGlvbihjYWxsQXJndW1lbnRKU09OKQorICAgIHNhdmVSZXN1bHQoY2FsbEFyZ3Vt
ZW50SlNPTikKICAgICB7CiAgICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAwOwogCiAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgY2FsbEFyZ3VtZW50ID0gSW5qZWN0ZWRTY3Jp
cHRIb3N0LmV2YWx1YXRlKCIoIiArIGNhbGxBcmd1bWVudEpTT04gKyAiKSIpOwotICAgICAgICAg
ICAgdmFyIHZhbHVlID0gdGhpcy5fcmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJndW1lbnQpOwor
ICAgICAgICAgICAgbGV0IGNhbGxBcmd1bWVudCA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0
ZSgiKCIgKyBjYWxsQXJndW1lbnRKU09OICsgIikiKTsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9
IHRoaXMuX3Jlc29sdmVDYWxsQXJndW1lbnQoY2FsbEFyZ3VtZW50KTsKICAgICAgICAgICAgIHRo
aXMuX3NhdmVSZXN1bHQodmFsdWUpOwogICAgICAgICB9IGNhdGNoIChlKSB7fQogCiAgICAgICAg
IHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdEluZGV4OwogICAgIH0sCiAKLSAgICBnZXRGdW5jdGlv
bkRldGFpbHM6IGZ1bmN0aW9uKGZ1bmN0aW9uSWQpCisgICAgZ2V0RnVuY3Rpb25EZXRhaWxzKGZ1
bmN0aW9uSWQpCiAgICAgewotICAgICAgICB2YXIgcGFyc2VkRnVuY3Rpb25JZCA9IHRoaXMuX3Bh
cnNlT2JqZWN0SWQoZnVuY3Rpb25JZCk7Ci0gICAgICAgIHZhciBmdW5jID0gdGhpcy5fb2JqZWN0
Rm9ySWQocGFyc2VkRnVuY3Rpb25JZCk7CisgICAgICAgIGxldCBwYXJzZWRGdW5jdGlvbklkID0g
dGhpcy5fcGFyc2VPYmplY3RJZChmdW5jdGlvbklkKTsKKyAgICAgICAgbGV0IGZ1bmMgPSB0aGlz
Ll9vYmplY3RGb3JJZChwYXJzZWRGdW5jdGlvbklkKTsKICAgICAgICAgaWYgKHR5cGVvZiBmdW5j
ICE9PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5j
dGlvbiBieSBpZC4iOwogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRh
aWxzKGZ1bmMpOwogICAgIH0sCiAKLSAgICByZWxlYXNlT2JqZWN0OiBmdW5jdGlvbihvYmplY3RJ
ZCkKKyAgICByZWxlYXNlT2JqZWN0KG9iamVjdElkKQogICAgIHsKLSAgICAgICAgdmFyIHBhcnNl
ZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGxldCBw
YXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwogICAgICAgICB0
aGlzLl9yZWxlYXNlT2JqZWN0KHBhcnNlZE9iamVjdElkLmlkKTsKICAgICB9LAogCi0gICAgX3Jl
bGVhc2VPYmplY3Q6IGZ1bmN0aW9uKGlkKQorICAgIF9yZWxlYXNlT2JqZWN0KGlkKQogICAgIHsK
ICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W2lkXTsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX2lkVG9PYmplY3RHcm91cE5hbWVbaWRdOwogICAgIH0sCiAKLSAgICBldmFsdWF0
ZTogZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluamVjdENvbW1hbmRMaW5lQVBJ
LCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpCisgICAgZXZhbHVh
dGUoZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5C
eVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpCiAgICAgewogICAgICAgICByZXR1
cm4gdGhpcy5fZXZhbHVhdGVBbmRXcmFwKEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZVdpdGhT
Y29wZUV4dGVuc2lvbiwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBleHByZXNzaW9uLCBvYmplY3RHcm91
cCwgZmFsc2UsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVBy
ZXZpZXcsIHNhdmVSZXN1bHQpOwogICAgIH0sCiAKLSAgICBjYWxsRnVuY3Rpb25PbjogZnVuY3Rp
b24ob2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3MsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJl
dmlldykKKyAgICBjYWxsRnVuY3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJncywgcmV0
dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgdmFyIHBhcnNlZE9i
amVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmpl
Y3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CisgICAgICAgIGxldCBwYXJz
ZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBsZXQg
b2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwogICAgICAgICBpZiAo
IXRoaXMuX2lzRGVmaW5lZChvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuICJDb3VsZCBub3Qg
ZmluZCBvYmplY3Qgd2l0aCBnaXZlbiBpZCI7CiAKICAgICAgICAgaWYgKGFyZ3MpIHsKLSAgICAg
ICAgICAgIHZhciByZXNvbHZlZEFyZ3MgPSBbXTsKLSAgICAgICAgICAgIHZhciBjYWxsQXJncyA9
IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZShhcmdzKTsKLSAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgY2FsbEFyZ3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCByZXNv
bHZlZEFyZ3MgPSBbXTsKKyAgICAgICAgICAgIGxldCBjYWxsQXJncyA9IEluamVjdGVkU2NyaXB0
SG9zdC5ldmFsdWF0ZShhcmdzKTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2Fs
bEFyZ3MubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlZEFyZ3NbaV0gPSB0aGlzLl9yZXNvbHZlQ2FsbEFyZ3VtZW50KGNhbGxB
cmdzW2ldKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CkBAIC0zOTYsOCArMzk5LDgg
QEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgdHJ5
IHsKLSAgICAgICAgICAgIHZhciBvYmplY3RHcm91cCA9IHRoaXMuX2lkVG9PYmplY3RHcm91cE5h
bWVbcGFyc2VkT2JqZWN0SWQuaWRdOwotICAgICAgICAgICAgdmFyIGZ1bmMgPSBJbmplY3RlZFNj
cmlwdEhvc3QuZXZhbHVhdGUoIigiICsgZXhwcmVzc2lvbiArICIpIik7CisgICAgICAgICAgICBs
ZXQgb2JqZWN0R3JvdXAgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElk
LmlkXTsKKyAgICAgICAgICAgIGxldCBmdW5jID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRl
KCIoIiArIGV4cHJlc3Npb24gKyAiKSIpOwogICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9
PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgICAgIHJldHVybiAiR2l2ZW4gZXhwcmVzc2lvbiBk
b2VzIG5vdCBldmFsdWF0ZSB0byBhIGZ1bmN0aW9uIjsKIApAQCAtNDEwLDE4ICs0MTMsMTggQEAg
SW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIF9y
ZXNvbHZlQ2FsbEFyZ3VtZW50OiBmdW5jdGlvbihjYWxsQXJndW1lbnRKU09OKQorICAgIF9yZXNv
bHZlQ2FsbEFyZ3VtZW50KGNhbGxBcmd1bWVudEpTT04pCiAgICAgewogICAgICAgICBpZiAoInZh
bHVlIiBpbiBjYWxsQXJndW1lbnRKU09OKQogICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmd1bWVu
dEpTT04udmFsdWU7CiAKLSAgICAgICAgdmFyIG9iamVjdElkID0gY2FsbEFyZ3VtZW50SlNPTi5v
YmplY3RJZDsKKyAgICAgICAgbGV0IG9iamVjdElkID0gY2FsbEFyZ3VtZW50SlNPTi5vYmplY3RJ
ZDsKICAgICAgICAgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkQXJnSWQg
PSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgICAgIGxldCBwYXJzZWRB
cmdJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwogICAgICAgICAgICAgaWYgKCFw
YXJzZWRBcmdJZCB8fCBwYXJzZWRBcmdJZFsiaW5qZWN0ZWRTY3JpcHRJZCJdICE9PSBpbmplY3Rl
ZFNjcmlwdElkKQogICAgICAgICAgICAgICAgIHRocm93ICJBcmd1bWVudHMgc2hvdWxkIGJlbG9u
ZyB0byB0aGUgc2FtZSBKYXZhU2NyaXB0IHdvcmxkIGFzIHRoZSB0YXJnZXQgb2JqZWN0LiI7CiAK
LSAgICAgICAgICAgIHZhciByZXNvbHZlZEFyZyA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZEFy
Z0lkKTsKKyAgICAgICAgICAgIGxldCByZXNvbHZlZEFyZyA9IHRoaXMuX29iamVjdEZvcklkKHBh
cnNlZEFyZ0lkKTsKICAgICAgICAgICAgIGlmICghdGhpcy5faXNEZWZpbmVkKHJlc29sdmVkQXJn
KSkKICAgICAgICAgICAgICAgICB0aHJvdyAiQ291bGQgbm90IGZpbmQgb2JqZWN0IHdpdGggZ2l2
ZW4gaWQiOwogCkBAIC00MzEsMTIgKzQzNCwxMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgfSwKIAotICAgIF9ldmFsdWF0ZUFu
ZFdyYXA6IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBvYmplY3RH
cm91cCwgaXNFdmFsT25DYWxsRnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZh
bHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpCisgICAgX2V2YWx1YXRlQW5kV3JhcChl
dmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGlzRXZhbE9uQ2Fs
bEZyYW1lLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2
aWV3LCBzYXZlUmVzdWx0KQogICAgIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRoaXMu
X3NhdmVkUmVzdWx0SW5kZXggPSAwOwogCi0gICAgICAgICAgICB2YXIgcmV0dXJuT2JqZWN0ID0g
eworICAgICAgICAgICAgbGV0IHJldHVybk9iamVjdCA9IHsKICAgICAgICAgICAgICAgICB3YXNU
aHJvd246IGZhbHNlLAogICAgICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5fd3JhcE9iamVjdCh0
aGlzLl9ldmFsdWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91cCwgZXhwcmVz
c2lvbiwgaXNFdmFsT25DYWxsRnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBzYXZlUmVzdWx0
KSwgb2JqZWN0R3JvdXAsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKICAgICAgICAg
ICAgIH07CkBAIC00NTAsOSArNDUzLDkgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewog
ICAgICAgICB9CiAgICAgfSwKIAotICAgIF9jcmVhdGVUaHJvd25WYWx1ZTogZnVuY3Rpb24odmFs
dWUsIG9iamVjdEdyb3VwKQorICAgIF9jcmVhdGVUaHJvd25WYWx1ZSh2YWx1ZSwgb2JqZWN0R3Jv
dXApCiAgICAgewotICAgICAgICB2YXIgcmVtb3RlT2JqZWN0ID0gdGhpcy5fd3JhcE9iamVjdCh2
YWx1ZSwgb2JqZWN0R3JvdXApOworICAgICAgICBsZXQgcmVtb3RlT2JqZWN0ID0gdGhpcy5fd3Jh
cE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOwogICAgICAgICB0cnkgewogICAgICAgICAgICAg
cmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uID0gdG9TdHJpbmdEZXNjcmlwdGlvbih2YWx1ZSk7CiAg
ICAgICAgIH0gY2F0Y2ggKGUpIHt9CkBAIC00NjIsOSArNDY1LDkgQEAgSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewogICAgICAgICB9OwogICAgIH0sCiAKLSAgICBfZXZhbHVhdGVPbjogZnVu
Y3Rpb24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHByZXNzaW9uLCBpc0V2
YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1bHQpCisgICAgX2V2
YWx1YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHByZXNzaW9uLCBp
c0V2YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1bHQpCiAgICAg
ewotICAgICAgICB2YXIgY29tbWFuZExpbmVBUEkgPSBudWxsOworICAgICAgICBsZXQgY29tbWFu
ZExpbmVBUEkgPSBudWxsOwogICAgICAgICBpZiAoaW5qZWN0Q29tbWFuZExpbmVBUEkpIHsKICAg
ICAgICAgICAgIGlmICh0aGlzLkNvbW1hbmRMaW5lQVBJKQogICAgICAgICAgICAgICAgIGNvbW1h
bmRMaW5lQVBJID0gbmV3IHRoaXMuQ29tbWFuZExpbmVBUEkodGhpcy5fY29tbWFuZExpbmVBUElJ
bXBsLCBpc0V2YWxPbkNhbGxGcmFtZSA/IG9iamVjdCA6IG51bGwpOwpAQCAtNDcyLDE5ICs0NzUs
MTkgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNvbW1h
bmRMaW5lQVBJID0gbmV3IEJhc2ljQ29tbWFuZExpbmVBUEkoaXNFdmFsT25DYWxsRnJhbWUgPyBv
YmplY3QgOiBudWxsKTsKICAgICAgICAgfQogCi0gICAgICAgIHZhciByZXN1bHQgPSBldmFsRnVu
Y3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Npb24sIGNvbW1hbmRMaW5lQVBJKTsKKyAgICAgICAg
bGV0IHJlc3VsdCA9IGV2YWxGdW5jdGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29tbWFu
ZExpbmVBUEkpOwogICAgICAgICBpZiAoc2F2ZVJlc3VsdCkKICAgICAgICAgICAgIHRoaXMuX3Nh
dmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCi0gICAg
d3JhcENhbGxGcmFtZXM6IGZ1bmN0aW9uKGNhbGxGcmFtZSkKKyAgICB3cmFwQ2FsbEZyYW1lcyhj
YWxsRnJhbWUpCiAgICAgewogICAgICAgICBpZiAoIWNhbGxGcmFtZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZhciBkZXB0
aCA9IDA7CisgICAgICAgIGxldCByZXN1bHQgPSBbXTsKKyAgICAgICAgbGV0IGRlcHRoID0gMDsK
ICAgICAgICAgZG8gewogICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEluamVjdGVkU2NyaXB0
LkNhbGxGcmFtZVByb3h5KGRlcHRoKyssIGNhbGxGcmFtZSkpOwogICAgICAgICAgICAgY2FsbEZy
YW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKQEAgLTQ5Miw2NiArNDk1LDY2IEBAIEluamVjdGVkU2Ny
aXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9LAogCi0gICAg
ZXZhbHVhdGVPbkNhbGxGcmFtZTogZnVuY3Rpb24odG9wQ2FsbEZyYW1lLCBjYWxsRnJhbWVJZCwg
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZh
bHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpCisgICAgZXZhbHVhdGVPbkNhbGxGcmFt
ZSh0b3BDYWxsRnJhbWUsIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5q
ZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJl
c3VsdCkKICAgICB7Ci0gICAgICAgIHZhciBjYWxsRnJhbWUgPSB0aGlzLl9jYWxsRnJhbWVGb3JJ
ZCh0b3BDYWxsRnJhbWUsIGNhbGxGcmFtZUlkKTsKKyAgICAgICAgbGV0IGNhbGxGcmFtZSA9IHRo
aXMuX2NhbGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpOwogICAgICAgICBp
ZiAoIWNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiAiQ291bGQgbm90IGZpbmQgY2FsbCBm
cmFtZSB3aXRoIGdpdmVuIGlkIjsKICAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3Jh
cChjYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIGNhbGxGcmFtZSwgZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIHRydWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZh
bHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpOwogICAgIH0sCiAKLSAgICBfY2FsbEZy
YW1lRm9ySWQ6IGZ1bmN0aW9uKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpCisgICAgX2NhbGxG
cmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpCiAgICAgewotICAgICAgICB2YXIg
cGFyc2VkQ2FsbEZyYW1lSWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgY2Fs
bEZyYW1lSWQgKyAiKSIpOwotICAgICAgICB2YXIgb3JkaW5hbCA9IHBhcnNlZENhbGxGcmFtZUlk
WyJvcmRpbmFsIl07Ci0gICAgICAgIHZhciBjYWxsRnJhbWUgPSB0b3BDYWxsRnJhbWU7CisgICAg
ICAgIGxldCBwYXJzZWRDYWxsRnJhbWVJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgi
KCIgKyBjYWxsRnJhbWVJZCArICIpIik7CisgICAgICAgIGxldCBvcmRpbmFsID0gcGFyc2VkQ2Fs
bEZyYW1lSWRbIm9yZGluYWwiXTsKKyAgICAgICAgbGV0IGNhbGxGcmFtZSA9IHRvcENhbGxGcmFt
ZTsKICAgICAgICAgd2hpbGUgKC0tb3JkaW5hbCA+PSAwICYmIGNhbGxGcmFtZSkKICAgICAgICAg
ICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS5jYWxsZXI7CiAgICAgICAgIHJldHVybiBjYWxsRnJh
bWU7CiAgICAgfSwKIAotICAgIF9vYmplY3RGb3JJZDogZnVuY3Rpb24ob2JqZWN0SWQpCisgICAg
X29iamVjdEZvcklkKG9iamVjdElkKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9X
cmFwcGVkT2JqZWN0W29iamVjdElkLmlkXTsKICAgICB9LAogCi0gICAgZmluZE9iamVjdEJ5SWQ6
IGZ1bmN0aW9uKG9iamVjdElkKQorICAgIGZpbmRPYmplY3RCeUlkKG9iamVjdElkKQogICAgIHsK
LSAgICAgICAgdmFyIHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJ
ZCk7CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2Jq
ZWN0SWQpOwogICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQp
OwogICAgIH0sCiAKLSAgICBtb2R1bGU6IGZ1bmN0aW9uKG5hbWUpCisgICAgbW9kdWxlKG5hbWUp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKICAgICB9LAogCi0g
ICAgaW5qZWN0TW9kdWxlOiBmdW5jdGlvbihuYW1lLCBzb3VyY2UsIGhvc3QpCisgICAgaW5qZWN0
TW9kdWxlKG5hbWUsIHNvdXJjZSwgaG9zdCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9t
b2R1bGVzW25hbWVdOwogCi0gICAgICAgIHZhciBtb2R1bGVGdW5jdGlvbiA9IEluamVjdGVkU2Ny
aXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBzb3VyY2UgKyAiKSIpOworICAgICAgICBsZXQgbW9kdWxl
RnVuY3Rpb24gPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgc291cmNlICsgIiki
KTsKICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGVGdW5jdGlvbiAhPT0gImZ1bmN0aW9uIikgewog
ICAgICAgICAgICAgaWYgKGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlKQogICAgICAgICAg
ICAgICAgIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9y
IGVycm9yOiBBIGZ1bmN0aW9uIHdhcyBleHBlY3RlZCBmb3IgbW9kdWxlICVzIGV2YWx1YXRpb24i
LCBuYW1lKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAg
dmFyIG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBJ
bmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZEdsb2JhbE9iamVjdCwgaW5qZWN0ZWRTY3JpcHRJ
ZCwgdGhpcywgaG9zdCk7CisgICAgICAgIGxldCBtb2R1bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxs
KGluc3BlY3RlZEdsb2JhbE9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRHbG9i
YWxPYmplY3QsIGluamVjdGVkU2NyaXB0SWQsIHRoaXMsIGhvc3QpOwogICAgICAgICB0aGlzLl9t
b2R1bGVzW25hbWVdID0gbW9kdWxlOwogICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgIH0sCiAK
LSAgICBfaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbihvYmplY3QsIGNvbXBs
ZXRlRGVzY3JpcHRvcikKKyAgICBfaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCwg
Y29tcGxldGVEZXNjcmlwdG9yKQogICAgIHsKLSAgICAgICAgdmFyIGludGVybmFsUHJvcGVydGll
cyA9IEluamVjdGVkU2NyaXB0SG9zdC5nZXRJbnRlcm5hbFByb3BlcnRpZXMob2JqZWN0KTsKKyAg
ICAgICAgbGV0IGludGVybmFsUHJvcGVydGllcyA9IEluamVjdGVkU2NyaXB0SG9zdC5nZXRJbnRl
cm5hbFByb3BlcnRpZXMob2JqZWN0KTsKICAgICAgICAgaWYgKCFpbnRlcm5hbFByb3BlcnRpZXMp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAotICAgICAgICB2YXIgZGVzY3JpcHRvcnMgPSBb
XTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlcm5hbFByb3BlcnRpZXMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGludGVybmFsUHJvcGVydGllc1tp
XTsKLSAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0ge25hbWU6IHByb3BlcnR5Lm5hbWUsIHZh
bHVlOiBwcm9wZXJ0eS52YWx1ZX07CisgICAgICAgIGxldCBkZXNjcmlwdG9ycyA9IFtdOworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVybmFsUHJvcGVydGllcy5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gaW50ZXJuYWxQcm9wZXJ0aWVzW2ldOworICAg
ICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSB7bmFtZTogcHJvcGVydHkubmFtZSwgdmFsdWU6IHBy
b3BlcnR5LnZhbHVlfTsKICAgICAgICAgICAgIGlmIChjb21wbGV0ZURlc2NyaXB0b3IpIHsKICAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSBmYWxzZTsKQEAgLTU2MywzMCArNTY2LDMwIEBA
IEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3Jz
OwogICAgIH0sCiAKLSAgICBfcHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24ob2JqZWN0LCBj
b2xsZWN0aW9uTW9kZSwgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKQorICAgIF9wcm9wZXJ0eURlc2Ny
aXB0b3JzKG9iamVjdCwgY29sbGVjdGlvbk1vZGUsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcykKICAg
ICB7CiAgICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShvYmplY3QpID09PSAi
cHJveHkiKQogICAgICAgICAgICAgcmV0dXJuIFtdOwogCi0gICAgICAgIHZhciBkZXNjcmlwdG9y
cyA9IFtdOwotICAgICAgICB2YXIgbmFtZVByb2Nlc3NlZCA9IG5ldyBTZXQ7CisgICAgICAgIGxl
dCBkZXNjcmlwdG9ycyA9IFtdOworICAgICAgICBsZXQgbmFtZVByb2Nlc3NlZCA9IG5ldyBTZXQ7
CiAKICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmFrZVZhbHVlRGVzY3JpcHRvcihuYW1lLCBzeW1i
b2wsIGRlc2NyaXB0b3IsIGlzT3duUHJvcGVydHksIHBvc3NpYmxlTmF0aXZlQmluZGluZ0dldHRl
cikKICAgICAgICAgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgZGVz
Y3JpcHRvciA9IHtuYW1lLCB2YWx1ZTogb2JqZWN0W25hbWVdLCB3cml0YWJsZTogZGVzY3JpcHRv
ci53cml0YWJsZSB8fCBmYWxzZSwgY29uZmlndXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZSB8fCBmYWxzZSwgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlfTsK
KyAgICAgICAgICAgICAgICBsZXQgZmFrZURlc2NyaXB0b3IgPSB7bmFtZSwgdmFsdWU6IG9iamVj
dFtuYW1lXSwgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUgfHwgZmFsc2UsIGNvbmZpZ3Vy
YWJsZTogZGVzY3JpcHRvci5jb25maWd1cmFibGUgfHwgZmFsc2UsIGVudW1lcmFibGU6IGRlc2Ny
aXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZX07CiAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxl
TmF0aXZlQmluZGluZ0dldHRlcikKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5uYXRp
dmVHZXR0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmYWtlRGVzY3JpcHRvci5uYXRp
dmVHZXR0ZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChpc093blByb3BlcnR5KQotICAg
ICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmlzT3duID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgZmFrZURlc2NyaXB0b3IuaXNPd24gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChz
eW1ib2wpCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3ltYm9sID0gc3ltYm9sOwor
ICAgICAgICAgICAgICAgICAgICBmYWtlRGVzY3JpcHRvci5zeW1ib2wgPSBzeW1ib2w7CiAgICAg
ICAgICAgICAgICAgLy8gU2lsZW5jZSBhbnkgcG9zc2libGUgdW5oYW5kbGVkcmVqZWN0aW9uIGV4
Y2VwdGlvbnMgY3JlYXRlZCBmcm9tIGFjY2Vzc2luZyBhIG5hdGl2ZSBhY2Nlc3NvciB3aXRoIGEg
d3JvbmcgdGhpcyBvYmplY3QuCi0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUg
aW5zdGFuY2VvZiBQcm9taXNlKQotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnZhbHVl
LmNhdGNoKGZ1bmN0aW9uKCl7fSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7
CisgICAgICAgICAgICAgICAgaWYgKGZha2VEZXNjcmlwdG9yLnZhbHVlIGluc3RhbmNlb2YgUHJv
bWlzZSkKKyAgICAgICAgICAgICAgICAgICAgZmFrZURlc2NyaXB0b3IudmFsdWUuY2F0Y2goZnVu
Y3Rpb24oKXt9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFrZURlc2NyaXB0b3I7CiAgICAg
ICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVycm9yRGVzY3JpcHRv
ciA9IHtuYW1lLCB2YWx1ZTogZSwgd2FzVGhyb3duOiB0cnVlfTsKKyAgICAgICAgICAgICAgICBs
ZXQgZXJyb3JEZXNjcmlwdG9yID0ge25hbWUsIHZhbHVlOiBlLCB3YXNUaHJvd246IHRydWV9Owog
ICAgICAgICAgICAgICAgIGlmIChpc093blByb3BlcnR5KQogICAgICAgICAgICAgICAgICAgICBl
cnJvckRlc2NyaXB0b3IuaXNPd24gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChzeW1ib2wp
CkBAIC02MjAsMjEgKzYyMywyMSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMobywgcHJvcGVydGllcywgaXNPd25Qcm9w
ZXJ0eSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0
aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gcHJvcGVy
dGllc1tpXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07
CiAgICAgICAgICAgICAgICAgaWYgKG5hbWVQcm9jZXNzZWQuaGFzKHByb3BlcnR5KSB8fCBwcm9w
ZXJ0eSA9PT0gIl9fcHJvdG9fXyIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICAgICAgbmFtZVByb2Nlc3NlZC5hZGQocHJvcGVydHkpOwogCi0gICAgICAgICAg
ICAgICAgdmFyIG5hbWUgPSB0b1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgdmFy
IHN5bWJvbCA9IGlzU3ltYm9sKHByb3BlcnR5KSA/IHByb3BlcnR5IDogbnVsbDsKKyAgICAgICAg
ICAgICAgICBsZXQgbmFtZSA9IHRvU3RyaW5nKHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBs
ZXQgc3ltYm9sID0gaXNTeW1ib2wocHJvcGVydHkpID8gcHJvcGVydHkgOiBudWxsOwogCi0gICAg
ICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKG8sIHByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICBsZXQgZGVzY3JpcHRvciA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcGVydHkpOwogICAgICAgICAgICAgICAg
IGlmICghZGVzY3JpcHRvcikgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQmFkIGRl
c2NyaXB0b3IuIENhbiB3ZSBnZXQgaGVyZT8KICAgICAgICAgICAgICAgICAgICAgLy8gRmFsbCBi
YWNrIHRvIHZlcnkgcmVzdHJpY3RpdmUgc2V0dGluZ3MuCi0gICAgICAgICAgICAgICAgICAgIHZh
ciBmYWtlRGVzY3JpcHRvciA9IGNyZWF0ZUZha2VWYWx1ZURlc2NyaXB0b3IobmFtZSwgc3ltYm9s
LCB7d3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiBmYWxz
ZX0sIGlzT3duUHJvcGVydHkpOworICAgICAgICAgICAgICAgICAgICBsZXQgZmFrZURlc2NyaXB0
b3IgPSBjcmVhdGVGYWtlVmFsdWVEZXNjcmlwdG9yKG5hbWUsIHN5bWJvbCwge3dyaXRhYmxlOiBm
YWxzZSwgY29uZmlndXJhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogZmFsc2V9LCBpc093blByb3Bl
cnR5KTsKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Rlc2NyaXB0b3IoZmFrZURlc2NyaXB0
b3IsIGlzT3duUHJvcGVydHkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC02NDIsOCArNjQ1LDggQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpIHsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKFN0cmluZyhkZXNjcmlwdG9yLmdldCkuZW5kc1dpdGgoIltuYXRp
dmUgY29kZV1cbn0iKSB8fCAoIWRlc2NyaXB0b3IuZ2V0ICYmIGRlc2NyaXB0b3IuaGFzT3duUHJv
cGVydHkoImdldCIpICYmICFkZXNjcmlwdG9yLnNldCAmJiBkZXNjcmlwdG9yLmhhc093blByb3Bl
cnR5KCJzZXQiKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldmVsb3BlcnMgbWF5
IGNyZWF0ZSBzdWNoIGEgZGVzY3JpcHRvciwgc28gd2Ugc2hvdWxkIGJlIHJlc2lsaWVudDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHZhciB4ID0ge307IE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSh4LCAicCIsIHtnZXQ6dW5kZWZpbmVkfSk7IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoeCwgInAiKQotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZha2VEZXNjcmlwdG9yID0g
Y3JlYXRlRmFrZVZhbHVlRGVzY3JpcHRvcihuYW1lLCBzeW1ib2wsIGRlc2NyaXB0b3IsIGlzT3du
UHJvcGVydHksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHggPSB7fTsg
T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsICJwIiwge2dldDp1bmRlZmluZWR9KTsgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih4LCAicCIpCisgICAgICAgICAgICAgICAgICAgICAgICBs
ZXQgZmFrZURlc2NyaXB0b3IgPSBjcmVhdGVGYWtlVmFsdWVEZXNjcmlwdG9yKG5hbWUsIHN5bWJv
bCwgZGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0eSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzRGVzY3JpcHRvcihmYWtlRGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0eSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtNjYwLDggKzY2Myw4IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICBmdW5jdGlvbiBhcnJheUluZGV4UHJvcGVydHlOYW1lcyhvLCBsZW5ndGgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHZhciBhcnJheSA9IFtdOwotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGFycmF5ID0gW107Cisg
ICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGkgaW4gbykKICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaCgiIiArIGkp
OwogICAgICAgICAgICAgfQpAQCAtNjcwLDEzICs2NzMsMTMgQEAgSW5qZWN0ZWRTY3JpcHQucHJv
dG90eXBlID0gewogCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTQz
NTg5PiBXZWIgSW5zcGVjdG9yOiBCZXR0ZXIgaGFuZGxpbmcgZm9yIGxhcmdlIGNvbGxlY3Rpb25z
IGluIE9iamVjdCBUcmVlcwogICAgICAgICAvLyBGb3IgYXJyYXkgdHlwZXMgd2l0aCBhIGxhcmdl
IGxlbmd0aCB3ZSBhdHRlbXB0IHRvIHNraXAgZ2V0T3duUHJvcGVydHlOYW1lcyBhbmQgaW5zdGVh
ZCBqdXN0IHN1Ymxpc3Qgb2YgaW5kZXhlcy4KLSAgICAgICAgdmFyIGlzQXJyYXlMaWtlID0gZmFs
c2U7CisgICAgICAgIGxldCBpc0FycmF5TGlrZSA9IGZhbHNlOwogICAgICAgICB0cnkgewogICAg
ICAgICAgICAgaXNBcnJheUxpa2UgPSBpbmplY3RlZFNjcmlwdC5fc3VidHlwZShvYmplY3QpID09
PSAiYXJyYXkiICYmIGlzRmluaXRlKG9iamVjdC5sZW5ndGgpICYmIG9iamVjdC5sZW5ndGggPiAw
OwogICAgICAgICB9IGNhdGNoKGUpIHt9CiAKLSAgICAgICAgZm9yICh2YXIgbyA9IG9iamVjdDsg
dGhpcy5faXNEZWZpbmVkKG8pOyBvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pKSB7Ci0gICAg
ICAgICAgICB2YXIgaXNPd25Qcm9wZXJ0eSA9IG8gPT09IG9iamVjdDsKKyAgICAgICAgZm9yIChs
ZXQgbyA9IG9iamVjdDsgdGhpcy5faXNEZWZpbmVkKG8pOyBvID0gT2JqZWN0LmdldFByb3RvdHlw
ZU9mKG8pKSB7CisgICAgICAgICAgICBsZXQgaXNPd25Qcm9wZXJ0eSA9IG8gPT09IG9iamVjdDsK
IAogICAgICAgICAgICAgaWYgKGlzQXJyYXlMaWtlICYmIGlzT3duUHJvcGVydHkpCiAgICAgICAg
ICAgICAgICAgcHJvY2Vzc1Byb3BlcnRpZXMobywgYXJyYXlJbmRleFByb3BlcnR5TmFtZXMobywg
TWF0aC5taW4ob2JqZWN0Lmxlbmd0aCwgMTAwKSksIGlzT3duUHJvcGVydHkpOwpAQCAtNjk5LDE4
ICs3MDIsMTggQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
ZGVzY3JpcHRvcnM7CiAgICAgfSwKIAotICAgIF9pc0RlZmluZWQ6IGZ1bmN0aW9uKG9iamVjdCkK
KyAgICBfaXNEZWZpbmVkKG9iamVjdCkKICAgICB7CiAgICAgICAgIHJldHVybiAhIW9iamVjdCB8
fCB0aGlzLl9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCk7CiAgICAgfSwKIAotICAgIF9pc0hU
TUxBbGxDb2xsZWN0aW9uOiBmdW5jdGlvbihvYmplY3QpCisgICAgX2lzSFRNTEFsbENvbGxlY3Rp
b24ob2JqZWN0KQogICAgIHsKICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIGlzIHJlcG9ydGVkIGFz
IHVuZGVmaW5lZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcHJvY2VzcyBpdC4KICAgICAgICAgcmV0
dXJuICh0eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIikgJiYgSW5qZWN0ZWRTY3JpcHRIb3N0
LmlzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKICAgICB9LAogCi0gICAgX3N1YnR5cGU6IGZ1
bmN0aW9uKG9iaikKKyAgICBfc3VidHlwZShvYmopCiAgICAgewogICAgICAgICBpZiAob2JqID09
PSBudWxsKQogICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKQEAgLTcyMSw3ICs3MjQsNyBAQCBJ
bmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLl9pc0hUTUxBbGxD
b2xsZWN0aW9uKG9iaikpCiAgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKIAotICAgICAgICB2
YXIgcHJlY2lzZVR5cGUgPSBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShvYmopOworICAgICAg
ICBsZXQgcHJlY2lzZVR5cGUgPSBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShvYmopOwogICAg
ICAgICBpZiAocHJlY2lzZVR5cGUpCiAgICAgICAgICAgICByZXR1cm4gcHJlY2lzZVR5cGU7CiAK
QEAgLTczNCwxNSArNzM3LDE1IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuIG51bGw7CiAgICAgfSwKIAotICAgIF9jbGFzc1ByZXZpZXc6IGZ1bmN0aW9uKGNs
YXNzQ29uc3RydWN0b3JWYWx1ZSkKKyAgICBfY2xhc3NQcmV2aWV3KGNsYXNzQ29uc3RydWN0b3JW
YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiAiY2xhc3MgIiArIGNsYXNzQ29uc3RydWN0b3JW
YWx1ZS5uYW1lOwogICAgIH0sCiAKLSAgICBfbm9kZVByZXZpZXc6IGZ1bmN0aW9uKG5vZGUpCisg
ICAgX25vZGVQcmV2aWV3KG5vZGUpCiAgICAgewotICAgICAgICB2YXIgaXNYTUxEb2N1bWVudCA9
IG5vZGUub3duZXJEb2N1bWVudCAmJiAhIW5vZGUub3duZXJEb2N1bWVudC54bWxWZXJzaW9uOwot
ICAgICAgICB2YXIgbm9kZU5hbWUgPSBpc1hNTERvY3VtZW50ID8gbm9kZS5ub2RlTmFtZSA6IG5v
ZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgbGV0IGlzWE1MRG9jdW1lbnQgPSBu
b2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKKyAg
ICAgICAgbGV0IG5vZGVOYW1lID0gaXNYTUxEb2N1bWVudCA/IG5vZGUubm9kZU5hbWUgOiBub2Rl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CiAKICAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBl
KSB7CiAgICAgICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKQEAgLTc2OCw3ICs3NzEs
NyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0g
ICAgX2Rlc2NyaWJlOiBmdW5jdGlvbihvYmopCisgICAgX2Rlc2NyaWJlKG9iaikKICAgICB7CiAg
ICAgICAgIGlmICh0aGlzLmlzUHJpbWl0aXZlVmFsdWUob2JqKSkKICAgICAgICAgICAgIHJldHVy
biBudWxsOwpAQCAtNzc2LDcgKzc3OSw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKGlzU3ltYm9sKG9iaikpCiAgICAgICAgICAgICByZXR1cm4gdG9TdHJpbmco
b2JqKTsKIAotICAgICAgICB2YXIgc3VidHlwZSA9IHRoaXMuX3N1YnR5cGUob2JqKTsKKyAgICAg
ICAgbGV0IHN1YnR5cGUgPSB0aGlzLl9zdWJ0eXBlKG9iaik7CiAKICAgICAgICAgaWYgKHN1YnR5
cGUgPT09ICJyZWdleHAiKQogICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaik7CkBAIC03
OTMsNyArNzk2LDcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBpZiAo
c3VidHlwZSA9PT0gIm5vZGUiKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVQcmV2aWV3
KG9iaik7CiAKLSAgICAgICAgdmFyIGNsYXNzTmFtZSA9IEluamVjdGVkU2NyaXB0SG9zdC5pbnRl
cm5hbENvbnN0cnVjdG9yTmFtZShvYmopOworICAgICAgICBsZXQgY2xhc3NOYW1lID0gSW5qZWN0
ZWRTY3JpcHRIb3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1lKG9iaik7CiAgICAgICAgIGlmIChz
dWJ0eXBlID09PSAiYXJyYXkiKQogICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKIApAQCAt
ODA2LDcgKzgwOSw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAv
LyBJZiBPYmplY3QsIHRyeSBmb3IgYSBiZXR0ZXIgbmFtZSBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4K
ICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gIk9iamVjdCIpIHsKLSAgICAgICAgICAgIHZhciBj
b25zdHJ1Y3Rvck5hbWUgPSBvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWU7
CisgICAgICAgICAgICBsZXQgY29uc3RydWN0b3JOYW1lID0gb2JqLmNvbnN0cnVjdG9yICYmIG9i
ai5jb25zdHJ1Y3Rvci5uYW1lOwogICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTmFtZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lOwogICAgICAgICB9CkBAIC04MTQs
MTEgKzgxNywxMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biBjbGFzc05hbWU7CiAgICAgfSwKIAotICAgIF9nZXRTZXRFbnRyaWVzOiBmdW5jdGlvbihvYmpl
Y3QsIHNraXAsIG51bWJlclRvRmV0Y2gpCisgICAgX2dldFNldEVudHJpZXMob2JqZWN0LCBza2lw
LCBudW1iZXJUb0ZldGNoKQogICAgIHsKLSAgICAgICAgdmFyIGVudHJpZXMgPSBbXTsKKyAgICAg
ICAgbGV0IGVudHJpZXMgPSBbXTsKIAotICAgICAgICBmb3IgKHZhciB2YWx1ZSBvZiBvYmplY3Qp
IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgb2JzZXJ2YWJsZSBpZiB0aGUgcGFnZSBvdmVy
cmlkZXMgU2V0LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdLgorICAgICAgICBmb3IgKGxldCB2
YWx1ZSBvZiBvYmplY3QpIHsKICAgICAgICAgICAgIGlmIChza2lwID4gMCkgewogICAgICAgICAg
ICAgICAgIHNraXAtLTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgzMywxMSArODM3
LDEyIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGVudHJp
ZXM7CiAgICAgfSwKIAotICAgIF9nZXRNYXBFbnRyaWVzOiBmdW5jdGlvbihvYmplY3QsIHNraXAs
IG51bWJlclRvRmV0Y2gpCisgICAgX2dldE1hcEVudHJpZXMob2JqZWN0LCBza2lwLCBudW1iZXJU
b0ZldGNoKQogICAgIHsKLSAgICAgICAgdmFyIGVudHJpZXMgPSBbXTsKKyAgICAgICAgbGV0IGVu
dHJpZXMgPSBbXTsKIAotICAgICAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ic2VydmFibGUgaWYgdGhlIHBhZ2Ugb3ZlcnJp
ZGVzIE1hcC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXS4KKyAgICAgICAgZm9yIChsZXQgW2tl
eSwgdmFsdWVdIG9mIG9iamVjdCkgewogICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CiAgICAg
ICAgICAgICAgICAgc2tpcC0tOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODUyLDIy
ICs4NTcsMjIgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
ZW50cmllczsKICAgICB9LAogCi0gICAgX2dldFdlYWtNYXBFbnRyaWVzOiBmdW5jdGlvbihvYmpl
Y3QsIG51bWJlclRvRmV0Y2gpCisgICAgX2dldFdlYWtNYXBFbnRyaWVzKG9iamVjdCwgbnVtYmVy
VG9GZXRjaCkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3Qud2Vha01h
cEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKTsKICAgICB9LAogCi0gICAgX2dldFdlYWtT
ZXRFbnRyaWVzOiBmdW5jdGlvbihvYmplY3QsIG51bWJlclRvRmV0Y2gpCisgICAgX2dldFdlYWtT
ZXRFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdEhvc3Qud2Vha1NldEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKTsK
ICAgICB9LAogCi0gICAgX2dldEl0ZXJhdG9yRW50cmllczogZnVuY3Rpb24ob2JqZWN0LCBudW1i
ZXJUb0ZldGNoKQorICAgIF9nZXRJdGVyYXRvckVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5pdGVyYXRvckVudHJp
ZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKTsKICAgICB9LAogCi0gICAgX2VudHJpZXM6IGZ1bmN0
aW9uKG9iamVjdCwgc3VidHlwZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkKKyAgICBfZW50
cmllcyhvYmplY3QsIHN1YnR5cGUsIHN0YXJ0SW5kZXgsIG51bWJlclRvRmV0Y2gpCiAgICAgewog
ICAgICAgICBpZiAoc3VidHlwZSA9PT0gInNldCIpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
Z2V0U2V0RW50cmllcyhvYmplY3QsIHN0YXJ0SW5kZXgsIG51bWJlclRvRmV0Y2gpOwpAQCAtODgz
LDE0ICs4ODgsMTQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB0aHJv
dyAidW5leHBlY3RlZCB0eXBlIjsKICAgICB9LAogCi0gICAgX3NhdmVSZXN1bHQ6IGZ1bmN0aW9u
KHJlc3VsdCkKKyAgICBfc2F2ZVJlc3VsdChyZXN1bHQpCiAgICAgewogICAgICAgICB0aGlzLl9s
YXN0UmVzdWx0ID0gcmVzdWx0OwogCiAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCB8
fCByZXN1bHQgPT09IG51bGwpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGV4
aXN0aW5nSW5kZXggPSB0aGlzLl9zYXZlZFJlc3VsdHMuaW5kZXhPZihyZXN1bHQpOworICAgICAg
ICBsZXQgZXhpc3RpbmdJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0cy5pbmRleE9mKHJlc3VsdCk7
CiAgICAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkgewogICAgICAgICAgICAgdGhpcy5f
c2F2ZWRSZXN1bHRJbmRleCA9IGV4aXN0aW5nSW5kZXg7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC05MDQsNyArOTA5LDcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgdGhpcy5fbmV4dFNhdmVkUmVzdWx0SW5kZXggPSAxOwogICAgIH0sCiAKLSAgICBfc2F2ZWRS
ZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQorICAgIF9zYXZlZFJlc3VsdChpbmRleCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdHNbaW5kZXhdOwogICAgIH0KQEAgLTkzNyw3
ICs5NDIsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QgPSBmdW5jdGlvbihvYmplY3Qs
IG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsCiAKICAgICB0aGlzLm9iamVjdElkID0g
aW5qZWN0ZWRTY3JpcHQuX2JpbmQob2JqZWN0LCBvYmplY3RHcm91cE5hbWUpOwogCi0gICAgdmFy
IHN1YnR5cGUgPSBpbmplY3RlZFNjcmlwdC5fc3VidHlwZShvYmplY3QpOworICAgIGxldCBzdWJ0
eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUob2JqZWN0KTsKICAgICBpZiAoc3VidHlwZSkK
ICAgICAgICAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTsKIApAQCAtOTY4LDcgKzk3Myw3IEBAIElu
amVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgb2JqZWN0R3JvdXBO
YW1lLCBmb3JjZVZhbHVlVHlwZSwKIAogSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmNyZWF0
ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlLCBnZW5lcmF0ZVByZXZpZXcs
IGNvbHVtbk5hbWVzKQogewotICAgIHZhciByZW1vdGVPYmplY3QgPSBuZXcgSW5qZWN0ZWRTY3Jp
cHQuUmVtb3RlT2JqZWN0KHZhbHVlLCB1bmRlZmluZWQsIGZhbHNlLCBnZW5lcmF0ZVByZXZpZXcs
IGNvbHVtbk5hbWVzKTsKKyAgICBsZXQgcmVtb3RlT2JqZWN0ID0gbmV3IEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdCh2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3LCBj
b2x1bW5OYW1lcyk7CiAgICAgaWYgKHJlbW90ZU9iamVjdC5vYmplY3RJZCkKICAgICAgICAgaW5q
ZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3Qub2JqZWN0SWQpOwogICAgIGlm
IChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUgJiYgcmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90
eXBlLm9iamVjdElkKQpAQCAtOTc3LDkgKzk4Miw5IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9i
amVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZ2VuZXJh
CiB9OwogCiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewotICAgIF9p
bml0aWFsUHJldmlldzogZnVuY3Rpb24oKQorICAgIF9pbml0aWFsUHJldmlldygpCiAgICAgewot
ICAgICAgICB2YXIgcHJldmlldyA9IHsKKyAgICAgICAgbGV0IHByZXZpZXcgPSB7CiAgICAgICAg
ICAgICB0eXBlOiB0aGlzLnR5cGUsCiAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNj
cmlwdGlvbiB8fCB0b1N0cmluZyh0aGlzLnZhbHVlKSwKICAgICAgICAgICAgIGxvc3NsZXNzOiB0
cnVlLApAQCAtOTk5LDkgKzEwMDQsOSBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJv
dG90eXBlID0gewogICAgICAgICByZXR1cm4gcHJldmlldzsKICAgICB9LAogCi0gICAgX2VtcHR5
UHJldmlldzogZnVuY3Rpb24oKQorICAgIF9lbXB0eVByZXZpZXcoKQogICAgIHsKLSAgICAgICAg
dmFyIHByZXZpZXcgPSB0aGlzLl9pbml0aWFsUHJldmlldygpOworICAgICAgICBsZXQgcHJldmll
dyA9IHRoaXMuX2luaXRpYWxQcmV2aWV3KCk7CiAKICAgICAgICAgaWYgKHRoaXMuc3VidHlwZSA9
PT0gIm1hcCIgfHwgdGhpcy5zdWJ0eXBlID09PSAic2V0IiB8fCB0aGlzLnN1YnR5cGUgPT09ICJ3
ZWFrbWFwIiB8fCB0aGlzLnN1YnR5cGUgPT09ICJ3ZWFrc2V0IiB8fCB0aGlzLnN1YnR5cGUgPT09
ICJpdGVyYXRvciIpIHsKICAgICAgICAgICAgIGlmICh0aGlzLnNpemUpIHsKQEAgLTEwMTQsMTMg
KzEwMTksMTMgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHByZXZpZXc7CiAgICAgfSwKIAotICAgIF9nZW5lcmF0ZVByZXZpZXc6IGZ1
bmN0aW9uKG9iamVjdCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykKKyAgICBfZ2Vu
ZXJhdGVQcmV2aWV3KG9iamVjdCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykKICAg
ICB7Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGhpcy5faW5pdGlhbFByZXZpZXcoKTsKLSAgICAg
ICAgdmFyIGlzVGFibGVSb3dzUmVxdWVzdCA9IHNlY29uZExldmVsS2V5cyA9PT0gbnVsbCB8fCBz
ZWNvbmRMZXZlbEtleXM7Ci0gICAgICAgIHZhciBmaXJzdExldmVsS2V5c0NvdW50ID0gZmlyc3RM
ZXZlbEtleXMgPyBmaXJzdExldmVsS2V5cy5sZW5ndGggOiAwOworICAgICAgICBsZXQgcHJldmll
dyA9IHRoaXMuX2luaXRpYWxQcmV2aWV3KCk7CisgICAgICAgIGxldCBpc1RhYmxlUm93c1JlcXVl
c3QgPSBzZWNvbmRMZXZlbEtleXMgPT09IG51bGwgfHwgc2Vjb25kTGV2ZWxLZXlzOworICAgICAg
ICBsZXQgZmlyc3RMZXZlbEtleXNDb3VudCA9IGZpcnN0TGV2ZWxLZXlzID8gZmlyc3RMZXZlbEtl
eXMubGVuZ3RoIDogMDsKIAotICAgICAgICB2YXIgcHJvcGVydGllc1RocmVzaG9sZCA9IHsKKyAg
ICAgICAgbGV0IHByb3BlcnRpZXNUaHJlc2hvbGQgPSB7CiAgICAgICAgICAgICBwcm9wZXJ0aWVz
OiBpc1RhYmxlUm93c1JlcXVlc3QgPyAxMDAwIDogTWF0aC5tYXgoNSwgZmlyc3RMZXZlbEtleXND
b3VudCksCiAgICAgICAgICAgICBpbmRleGVzOiBpc1RhYmxlUm93c1JlcXVlc3QgPyAxMDAwIDog
TWF0aC5tYXgoMTAsIGZpcnN0TGV2ZWxLZXlzQ291bnQpCiAgICAgICAgIH07CkBAIC0xMDMzLDcg
KzEwMzgsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgcHJldmlldy5wcm9wZXJ0aWVzID0gW107CiAKICAgICAgICAgICAgIC8vIEludGVy
bmFsIFByb3BlcnRpZXMuCi0gICAgICAgICAgICB2YXIgaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3JzID0gaW5qZWN0ZWRTY3JpcHQuX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3Qs
IHRydWUpOworICAgICAgICAgICAgbGV0IGludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyA9IGlu
amVjdGVkU2NyaXB0Ll9pbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCB0cnVlKTsK
ICAgICAgICAgICAgIGlmIChpbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMpIHsKICAgICAgICAg
ICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXdzKG9iamVjdCwgcHJldmlldywgaW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzLCB0cnVlLCBwcm9wZXJ0aWVzVGhyZXNob2xkLCBmaXJz
dExldmVsS2V5cywgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dGllc1RocmVzaG9sZC5pbmRleGVzIDwgMCB8fCBwcm9wZXJ0aWVzVGhyZXNob2xkLnByb3BlcnRp
ZXMgPCAwKQpAQCAtMTA0NCw4ICsxMDQ5LDggQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlldzsKIAogICAgICAg
ICAgICAgLy8gUHJvcGVydGllcy4KLSAgICAgICAgICAgIHZhciBuYXRpdmVHZXR0ZXJzQXNWYWx1
ZXMgPSB0cnVlOwotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3JzID0gaW5qZWN0ZWRTY3JpcHQu
X3Byb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9k
ZS5BbGxQcm9wZXJ0aWVzLCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpOworICAgICAgICAgICAgbGV0
IG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyA9IHRydWU7CisgICAgICAgICAgICBsZXQgZGVzY3JpcHRv
cnMgPSBpbmplY3RlZFNjcmlwdC5fcHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIEluamVjdGVk
U2NyaXB0LkNvbGxlY3Rpb25Nb2RlLkFsbFByb3BlcnRpZXMsIG5hdGl2ZUdldHRlcnNBc1ZhbHVl
cyk7CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXdzKG9iamVjdCwgcHJl
dmlldywgZGVzY3JpcHRvcnMsIGZhbHNlLCBwcm9wZXJ0aWVzVGhyZXNob2xkLCBmaXJzdExldmVs
S2V5cywgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVGhyZXNo
b2xkLmluZGV4ZXMgPCAwIHx8IHByb3BlcnRpZXNUaHJlc2hvbGQucHJvcGVydGllcyA8IDApCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXc7CkBAIC0xMDU2LDcgKzEwNjEsNyBAQCBJbmpl
Y3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gcHJl
dmlldzsKICAgICB9LAogCi0gICAgX2FwcGVuZFByb3BlcnR5UHJldmlld3M6IGZ1bmN0aW9uKG9i
amVjdCwgcHJldmlldywgZGVzY3JpcHRvcnMsIGludGVybmFsLCBwcm9wZXJ0aWVzVGhyZXNob2xk
LCBmaXJzdExldmVsS2V5cywgc2Vjb25kTGV2ZWxLZXlzKQorICAgIF9hcHBlbmRQcm9wZXJ0eVBy
ZXZpZXdzKG9iamVjdCwgcHJldmlldywgZGVzY3JpcHRvcnMsIGludGVybmFsLCBwcm9wZXJ0aWVz
VGhyZXNob2xkLCBmaXJzdExldmVsS2V5cywgc2Vjb25kTGV2ZWxLZXlzKQogICAgIHsKICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgbGV0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKQEAgLTEwNzIsNyArMTA3Nyw3
IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8vIERvIG5vdCBzaG93ICJfX3Byb3RvX18iIGluIHByZXZpZXcu
Ci0gICAgICAgICAgICB2YXIgbmFtZSA9IGRlc2NyaXB0b3IubmFtZTsKKyAgICAgICAgICAgIGxl
dCBuYW1lID0gZGVzY3JpcHRvci5uYW1lOwogICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJfX3By
b3RvX18iKSB7CiAgICAgICAgICAgICAgICAgLy8gTm9uIGJhc2ljIF9fcHJvdG9fXyBvYmplY3Rz
IG1heSBoYXZlIGludGVyZXN0aW5nLCBub24tZW51bWVyYWJsZSwgbWV0aG9kcyB0byBzaG93Lgog
ICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlICYmIGRlc2NyaXB0b3IudmFsdWUu
Y29uc3RydWN0b3IKQEAgLTExMDYsMTQgKzExMTEsMTQgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3Rl
T2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTnVs
bCB2YWx1ZS4KLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7CisgICAg
ICAgICAgICBsZXQgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICAgaWYgKHZh
bHVlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kUHJvcGVydHlQcmV2
aWV3KHByZXZpZXcsIGludGVybmFsLCB7bmFtZSwgdHlwZTogIm9iamVjdCIsIHN1YnR5cGU6ICJu
dWxsIiwgdmFsdWU6ICJudWxsIn0sIHByb3BlcnRpZXNUaHJlc2hvbGQpOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJZ25vcmUgbm9u
LWVudW1lcmFibGUgZnVuY3Rpb25zLgotICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFs
dWU7CisgICAgICAgICAgICBsZXQgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKICAgICAgICAgICAgIGlm
ICghZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmIHR5cGUgPT09ICJmdW5jdGlvbiIpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTExMzQsNyArMTEzOSw3IEBAIEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIC8vIFN5bWJvbC4KICAg
ICAgICAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3lt
Ym9sU3RyaW5nID0gdG9TdHJpbmcodmFsdWUpOworICAgICAgICAgICAgICAgIGxldCBzeW1ib2xT
dHJpbmcgPSB0b1N0cmluZyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFN0cmlu
Zy5sZW5ndGggPiBtYXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgc3ltYm9sU3RyaW5n
ID0gdGhpcy5fYWJicmV2aWF0ZVN0cmluZyhzeW1ib2xTdHJpbmcsIG1heExlbmd0aCwgdHJ1ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByZXZpZXcubG9zc2xlc3MgPSBmYWxzZTsKQEAgLTExNDQs
MjQgKzExNDksMjQgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gT2JqZWN0LgotICAgICAgICAgICAgdmFy
IHByb3BlcnR5ID0ge25hbWUsIHR5cGV9OwotICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBpbmpl
Y3RlZFNjcmlwdC5fc3VidHlwZSh2YWx1ZSk7CisgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB7
bmFtZSwgdHlwZX07CisgICAgICAgICAgICBsZXQgc3VidHlwZSA9IGluamVjdGVkU2NyaXB0Ll9z
dWJ0eXBlKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChzdWJ0eXBlKQogICAgICAgICAgICAgICAg
IHByb3BlcnR5LnN1YnR5cGUgPSBzdWJ0eXBlOwogCiAgICAgICAgICAgICAvLyBTZWNvbmQgbGV2
ZWwuCiAgICAgICAgICAgICBpZiAoKHNlY29uZExldmVsS2V5cyA9PT0gbnVsbCB8fCBzZWNvbmRM
ZXZlbEtleXMpIHx8IHRoaXMuX2lzUHJldmlld2FibGVPYmplY3QodmFsdWUsIG9iamVjdCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Ugd2FudCBzZWNvbmRMZXZlbEtleXMgZmls
dGVyIHRvIGNvbnRpbnVlIHdlIHdvdWxkIG5lZWQgc29tZSByZWZhY3RvcmluZy4KLSAgICAgICAg
ICAgICAgICB2YXIgc3ViUHJldmlldyA9IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVh
dGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUodmFsdWUsIHZhbHVlICE9PSBvYmplY3QsIHNlY29uZExl
dmVsS2V5cyk7CisgICAgICAgICAgICAgICAgbGV0IHN1YlByZXZpZXcgPSBJbmplY3RlZFNjcmlw
dC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKHZhbHVlLCB2YWx1ZSAh
PT0gb2JqZWN0LCBzZWNvbmRMZXZlbEtleXMpOwogICAgICAgICAgICAgICAgIHByb3BlcnR5LnZh
bHVlUHJldmlldyA9IHN1YlByZXZpZXc7CiAgICAgICAgICAgICAgICAgaWYgKCFzdWJQcmV2aWV3
Lmxvc3NsZXNzKQogICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Lmxvc3NsZXNzID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgaWYgKHN1YlByZXZpZXcub3ZlcmZsb3cpCiAgICAgICAgICAgICAg
ICAgICAgIHByZXZpZXcub3ZlcmZsb3cgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSAiIjsKKyAgICAgICAgICAgICAgICBsZXQg
ZGVzY3JpcHRpb24gPSAiIjsKICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gImZ1bmN0aW9u
IiB8fCBzdWJ0eXBlID09PSAiY2xhc3MiKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmdWxs
RGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgIGxldCBmdWxsRGVzY3JpcHRpb247CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdWJ0eXBlID09PSAiY2xhc3MiKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZnVsbERlc2NyaXB0aW9uID0gImNsYXNzICIgKyB2YWx1ZS5uYW1lOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAibm9kZSIpCkBAIC0xMTc4LDcg
KzExODMsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAgICAgfSwKIAotICAgIF9hcHBlbmRQcm9wZXJ0eVByZXZpZXc6IGZ1bmN0aW9uKHBy
ZXZpZXcsIGludGVybmFsLCBwcm9wZXJ0eSwgcHJvcGVydGllc1RocmVzaG9sZCkKKyAgICBfYXBw
ZW5kUHJvcGVydHlQcmV2aWV3KHByZXZpZXcsIGludGVybmFsLCBwcm9wZXJ0eSwgcHJvcGVydGll
c1RocmVzaG9sZCkKICAgICB7CiAgICAgICAgIGlmICh0b1N0cmluZyhwcm9wZXJ0eS5uYW1lID4+
PiAwKSA9PT0gcHJvcGVydHkubmFtZSkKICAgICAgICAgICAgIHByb3BlcnRpZXNUaHJlc2hvbGQu
aW5kZXhlcy0tOwpAQCAtMTE5NywxMCArMTIwMiwxMCBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVP
YmplY3QucHJvdG90eXBlID0gewogICAgICAgICBwcmV2aWV3LnByb3BlcnRpZXMucHVzaChwcm9w
ZXJ0eSk7CiAgICAgfSwKIAotICAgIF9hcHBlbmRFbnRyeVByZXZpZXdzOiBmdW5jdGlvbihvYmpl
Y3QsIHByZXZpZXcpCisgICAgX2FwcGVuZEVudHJ5UHJldmlld3Mob2JqZWN0LCBwcmV2aWV3KQog
ICAgIHsKICAgICAgICAgLy8gRmV0Y2ggNiwgYnV0IG9ubHkgcmV0dXJuIDUsIHNvIHdlIGNhbiB0
ZWxsIGlmIHdlIG92ZXJmbG93ZWQuCi0gICAgICAgIHZhciBlbnRyaWVzID0gaW5qZWN0ZWRTY3Jp
cHQuX2VudHJpZXMob2JqZWN0LCB0aGlzLnN1YnR5cGUsIDAsIDYpOworICAgICAgICBsZXQgZW50
cmllcyA9IGluamVjdGVkU2NyaXB0Ll9lbnRyaWVzKG9iamVjdCwgdGhpcy5zdWJ0eXBlLCAwLCA2
KTsKICAgICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjI2
LDcgKzEyMzEsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewog
ICAgICAgICB9LCB0aGlzKTsKICAgICB9LAogCi0gICAgX2lzUHJldmlld2FibGVPYmplY3Q6IGZ1
bmN0aW9uKHZhbHVlLCBvYmplY3QpCisgICAgX2lzUHJldmlld2FibGVPYmplY3QodmFsdWUsIG9i
amVjdCkKICAgICB7CiAgICAgICAgIGxldCBzZXQgPSBuZXcgU2V0OwogICAgICAgICBzZXQuYWRk
KG9iamVjdCk7CkBAIC0xMjM0LDcgKzEyMzksNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmpl
Y3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5faXNQcmV2aWV3YWJsZU9iamVj
dEludGVybmFsKHZhbHVlLCBzZXQsIDEpOwogICAgIH0sCiAKLSAgICBfaXNQcmV2aWV3YWJsZU9i
amVjdEludGVybmFsOiBmdW5jdGlvbihvYmplY3QsIGtub3duT2JqZWN0cywgZGVwdGgpCisgICAg
X2lzUHJldmlld2FibGVPYmplY3RJbnRlcm5hbChvYmplY3QsIGtub3duT2JqZWN0cywgZGVwdGgp
CiAgICAgewogICAgICAgICAvLyBEZWVwIG9iamVjdC4KICAgICAgICAgaWYgKGRlcHRoID4gMykK
QEAgLTEyNTYsMTIgKzEyNjEsMTIgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3Rv
dHlwZSA9IHsKICAgICAgICAga25vd25PYmplY3RzLmFkZChvYmplY3QpOwogCiAgICAgICAgIC8v
IEFycmF5cyBhcmUgc2ltcGxlIGlmIHRoZXkgaGF2ZSA1IG9yIGxlc3Mgc2ltcGxlIG9iamVjdHMu
Ci0gICAgICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUob2JqZWN0KTsK
KyAgICAgICAgbGV0IHN1YnR5cGUgPSBpbmplY3RlZFNjcmlwdC5fc3VidHlwZShvYmplY3QpOwog
ICAgICAgICBpZiAoc3VidHlwZSA9PT0gImFycmF5IikgewotICAgICAgICAgICAgdmFyIGxlbmd0
aCA9IG9iamVjdC5sZW5ndGg7CisgICAgICAgICAgICBsZXQgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0
aDsKICAgICAgICAgICAgIGlmIChsZW5ndGggPiA1KQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXRoaXMuX2lzUHJldmlld2FibGVPYmplY3RJbnRlcm5hbChvYmplY3RbaV0sIGtu
b3duT2JqZWN0cywgZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CkBAIC0xMjg1LDE0ICsxMjkwLDE0IEBAIEluamVjdGVkU2NyaXB0LlJlbW90
ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKLSAg
ICBfYWJicmV2aWF0ZVN0cmluZzogZnVuY3Rpb24oc3RyaW5nLCBtYXhMZW5ndGgsIG1pZGRsZSkK
KyAgICBfYWJicmV2aWF0ZVN0cmluZyhzdHJpbmcsIG1heExlbmd0aCwgbWlkZGxlKQogICAgIHsK
ICAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPD0gbWF4TGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIHN0cmluZzsKIAogICAgICAgICBpZiAobWlkZGxlKSB7Ci0gICAgICAgICAgICB2YXIgbGVm
dEhhbGYgPSBtYXhMZW5ndGggPj4gMTsKLSAgICAgICAgICAgIHZhciByaWdodEhhbGYgPSBtYXhM
ZW5ndGggLSBsZWZ0SGFsZiAtIDE7CisgICAgICAgICAgICBsZXQgbGVmdEhhbGYgPSBtYXhMZW5n
dGggPj4gMTsKKyAgICAgICAgICAgIGxldCByaWdodEhhbGYgPSBtYXhMZW5ndGggLSBsZWZ0SGFs
ZiAtIDE7CiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnN1YnN0cigwLCBsZWZ0SGFsZikgKyAi
XHUyMDI2IiArIHN0cmluZy5zdWJzdHIoc3RyaW5nLmxlbmd0aCAtIHJpZ2h0SGFsZiwgcmlnaHRI
YWxmKTsKICAgICAgICAgfQogCkBAIC0xMzAyLDcgKzEzMDcsNyBAQCBJbmplY3RlZFNjcmlwdC5S
ZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94
eSA9IGZ1bmN0aW9uKG9yZGluYWwsIGNhbGxGcmFtZSkKIHsKLSAgICB0aGlzLmNhbGxGcmFtZUlk
ID0gIntcIm9yZGluYWxcIjoiICsgb3JkaW5hbCArICIsXCJpbmplY3RlZFNjcmlwdElkXCI6IiAr
IGluamVjdGVkU2NyaXB0SWQgKyAifSI7CisgICAgdGhpcy5jYWxsRnJhbWVJZCA9IGB7Im9yZGlu
YWwiOiR7b3JkaW5hbH0sImluamVjdGVkU2NyaXB0SWQiOiR7aW5qZWN0ZWRTY3JpcHRJZH19YDsK
ICAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IGNhbGxGcmFtZS5mdW5jdGlvbk5hbWU7CiAgICAgdGhp
cy5sb2NhdGlvbiA9IHtzY3JpcHRJZDogU3RyaW5nKGNhbGxGcmFtZS5zb3VyY2VJRCksIGxpbmVO
dW1iZXI6IGNhbGxGcmFtZS5saW5lLCBjb2x1bW5OdW1iZXI6IGNhbGxGcmFtZS5jb2x1bW59Owog
ICAgIHRoaXMuc2NvcGVDaGFpbiA9IHRoaXMuX3dyYXBTY29wZUNoYWluKGNhbGxGcmFtZSk7CkBA
IC0xMzExLDEzICsxMzE2LDEzIEBAIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVu
Y3Rpb24ob3JkaW5hbCwgY2FsbEZyYW1lKQogfQogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQ
cm94eS5wcm90b3R5cGUgPSB7Ci0gICAgX3dyYXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxsRnJh
bWUpCisgICAgX3dyYXBTY29wZUNoYWluKGNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBz
Y29wZUNoYWluID0gY2FsbEZyYW1lLnNjb3BlQ2hhaW47Ci0gICAgICAgIHZhciBzY29wZURlc2Ny
aXB0aW9ucyA9IGNhbGxGcmFtZS5zY29wZURlc2NyaXB0aW9ucygpOworICAgICAgICBsZXQgc2Nv
cGVDaGFpbiA9IGNhbGxGcmFtZS5zY29wZUNoYWluOworICAgICAgICBsZXQgc2NvcGVEZXNjcmlw
dGlvbnMgPSBjYWxsRnJhbWUuc2NvcGVEZXNjcmlwdGlvbnMoKTsKIAotICAgICAgICB2YXIgc2Nv
cGVDaGFpblByb3h5ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NvcGVDaGFp
bi5sZW5ndGg7IGkrKykKKyAgICAgICAgbGV0IHNjb3BlQ2hhaW5Qcm94eSA9IFtdOworICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpKyspCiAgICAgICAgICAg
ICBzY29wZUNoYWluUHJveHlbaV0gPSBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fY3Jl
YXRlU2NvcGVKc29uKHNjb3BlQ2hhaW5baV0sIHNjb3BlRGVzY3JpcHRpb25zW2ldLCAiYmFja3Ry
YWNlIik7CiAgICAgICAgIHJldHVybiBzY29wZUNoYWluUHJveHk7CiAgICAgfQo=
</data>
<flag name="review"
          id="335170"
          type_id="1"
          status="+"
          setter="bburg"
    />
    <flag name="commit-queue"
          id="335171"
          type_id="3"
          status="-"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313980</attachid>
            <date>2017-06-27 20:42:31 -0700</date>
            <delta_ts>2017-06-30 15:13:29 -0700</delta_ts>
            <desc>[PATCH] Part 2 - Mostly mechanical (classes)</desc>
            <filename>step-2.patch</filename>
            <type>text/plain</type>
            <size>19945</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IGU1MjFjMWY2ZGJiOTIyMGVkYmYzOTc4ZWMwNDIzYjdmMDVlMjRmMDcKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgSnVuIDI3IDE0
OjQxOjA1IDIwMTcgLTA3MDAKCiAgICBMT0NBTDogU3RlcCAyIC0gQ2xhc3MgTWVjaGFuaWNhbAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRTb3VyY2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzCmluZGV4IDEyOTQ3MzE1MzNhLi4xMDNkOGNlYjI2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNl
LmpzCkBAIC02Nyw0MSArNjcsMjkgQEAgZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmplY3QpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK2xl
dCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiB7Ci0gICAgdGhpcy5fbGFz
dEJvdW5kT2JqZWN0SWQgPSAxOwotICAgIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0ID0ge307Ci0g
ICAgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZSA9IHt9OwotICAgIHRoaXMuX29iamVjdEdyb3Vw
cyA9IHt9OwotICAgIHRoaXMuX21vZHVsZXMgPSB7fTsKLSAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1
bHRJbmRleCA9IDE7Ci0gICAgdGhpcy5fc2F2ZWRSZXN1bHRzID0gW107Ci19CisgICAgY29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQgPSAxOworICAg
ICAgICB0aGlzLl9pZFRvV3JhcHBlZE9iamVjdCA9IHt9OworICAgICAgICB0aGlzLl9pZFRvT2Jq
ZWN0R3JvdXBOYW1lID0ge307CisgICAgICAgIHRoaXMuX29iamVjdEdyb3VwcyA9IHt9OworICAg
ICAgICB0aGlzLl9tb2R1bGVzID0ge307CisgICAgICAgIHRoaXMuX25leHRTYXZlZFJlc3VsdElu
ZGV4ID0gMTsKKyAgICAgICAgdGhpcy5fc2F2ZWRSZXN1bHRzID0gW107CisgICAgfQogCi1Jbmpl
Y3RlZFNjcmlwdC5wcmltaXRpdmVUeXBlcyA9IHsKLSAgICB1bmRlZmluZWQ6IHRydWUsCi0gICAg
Ym9vbGVhbjogdHJ1ZSwKLSAgICBudW1iZXI6IHRydWUsCi0gICAgc3RyaW5nOiB0cnVlLAotfQot
Ci1JbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZSA9IHsKLSAgICBPd25Qcm9wZXJ0aWVzOiAx
IDw8IDAsICAgICAgICAgIC8vIG93biBwcm9wZXJ0aWVzLgotICAgIE5hdGl2ZUdldHRlclByb3Bl
cnRpZXM6IDEgPDwgMSwgLy8gbmF0aXZlIGdldHRlciBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5
cGUgY2hhaW4uCi0gICAgQWxsUHJvcGVydGllczogMSA8PCAyLCAgICAgICAgICAvLyBhbGwgcHJv
cGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgotfQotCi1JbmplY3RlZFNjcmlwdC5wcm90
b3R5cGUgPSB7CiAgICAgaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpCiAgICAgewogICAgICAgICAv
LyBGSVhNRSgzMzcxNik6IHR5cGVvZiBkb2N1bWVudC5hbGwgaXMgYWx3YXlzICd1bmRlZmluZWQn
LgogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQucHJpbWl0aXZlVHlwZXNbdHlwZW9mIG9i
amVjdF0gJiYgIXRoaXMuX2lzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKLSAgICB9LAorICAg
IH0KIAogICAgIHByZXZpZXdWYWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKHZhbHVl
LCB0cnVlKTsKLSAgICB9LAorICAgIH0KIAogICAgIGZ1bmN0aW9uRGV0YWlscyhmdW5jKQogICAg
IHsKQEAgLTEwOSwyNCArOTcsMjQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIWRldGFpbHMpCiAgICAgICAgICAgICByZXR1cm4gIkNhbm5vdCByZXNvbHZlIGZ1
bmN0aW9uIGRldGFpbHMuIjsKICAgICAgICAgcmV0dXJuIGRldGFpbHM7Ci0gICAgfSwKKyAgICB9
CiAKICAgICB3cmFwT2JqZWN0KG9iamVjdCwgZ3JvdXBOYW1lLCBjYW5BY2Nlc3NJbnNwZWN0ZWRH
bG9iYWxPYmplY3QsIGdlbmVyYXRlUHJldmlldykKICAgICB7CiAgICAgICAgIGlmIChjYW5BY2Nl
c3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JhcE9i
amVjdChvYmplY3QsIGdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7CiAgICAgICAg
IHJldHVybiB0aGlzLl9mYWxsYmFja1dyYXBwZXIob2JqZWN0KTsKLSAgICB9LAorICAgIH0KIAog
ICAgIHNldEV4Y2VwdGlvblZhbHVlKHZhbHVlKQogICAgIHsKICAgICAgICAgdGhpcy5fZXhjZXB0
aW9uVmFsdWUgPSB2YWx1ZTsKLSAgICB9LAorICAgIH0KIAogICAgIGNsZWFyRXhjZXB0aW9uVmFs
dWUoKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX2V4Y2VwdGlvblZhbHVlOwotICAgIH0s
CisgICAgfQogCiAgICAgX2ZhbGxiYWNrV3JhcHBlcihvYmplY3QpCiAgICAgewpAQCAtMTM3LDcg
KzEyNSw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gdG9TdHJpbmcob2JqZWN0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAgIH0KIAogICAgIHdyYXBUYWJsZShjYW5BY2Nlc3NJ
bnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5zKQogICAgIHsKQEAgLTE1OSwxMyAr
MTQ3LDEzIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0KHRhYmxlLCAiY29uc29sZSIsIGZhbHNlLCB0cnVl
LCBjb2x1bW5OYW1lcyk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBpbnNwZWN0T2JqZWN0KG9iamVj
dCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jb21tYW5kTGluZUFQSUltcGwpCiAgICAgICAg
ICAgICB0aGlzLl9jb21tYW5kTGluZUFQSUltcGwuaW5zcGVjdChvYmplY3QpOwotICAgIH0sCisg
ICAgfQogCiAgICAgX3dyYXBPYmplY3Qob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFs
dWVUeXBlLCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQogICAgIHsKQEAgLTE4MCw3ICsx
NjgsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdChkZXNjcmlwdGlv
bik7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIF9iaW5kKG9iamVjdCwgb2JqZWN0
R3JvdXBOYW1lKQogICAgIHsKQEAgLTIwMCwxMiArMTg4LDEyIEBAIEluamVjdGVkU2NyaXB0LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBvYmplY3RJZDsKLSAgICB9
LAorICAgIH0KIAogICAgIF9wYXJzZU9iamVjdElkKG9iamVjdElkKQogICAgIHsKICAgICAgICAg
cmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBvYmplY3RJZCArICIpIik7
Ci0gICAgfSwKKyAgICB9CiAKICAgICByZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3JvdXBOYW1l
KQogICAgIHsKQEAgLTIyMyw3ICsyMTEsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB0aGlzLl9yZWxlYXNlT2JqZWN0KGdyb3VwW2ldKTsKIAogICAgICAgICBk
ZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07Ci0gICAgfSwKKyAgICB9
CiAKICAgICBkaXNwYXRjaChtZXRob2ROYW1lLCBhcmdzKQogICAgIHsKQEAgLTIzNSw3ICsyMjMs
NyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXN1bHQgPSBu
dWxsOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKKyAgICB9CiAK
ICAgICBnZXRQcmV2aWV3KG9iamVjdElkKQogICAgIHsKQEAgLTI0Myw3ICsyMzEsNyBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmpl
Y3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CiAKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUob2JqZWN0LCB0cnVlKTsK
LSAgICB9LAorICAgIH0KIAogICAgIF9nZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBjb2xsZWN0aW9u
TW9kZSwgZ2VuZXJhdGVQcmV2aWV3LCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpCiAgICAgewpAQCAt
Mjc3LDIxICsyNjUsMjEgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0
UHJvcGVydGllcyhvYmplY3RJZCwgb3duUHJvcGVydGllcywgZ2VuZXJhdGVQcmV2aWV3KQogICAg
IHsKICAgICAgICAgbGV0IG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyA9IGZhbHNlOwogICAgICAgICBs
ZXQgY29sbGVjdGlvbk1vZGUgPSBvd25Qcm9wZXJ0aWVzID8gSW5qZWN0ZWRTY3JpcHQuQ29sbGVj
dGlvbk1vZGUuT3duUHJvcGVydGllcyA6IEluamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlLkFs
bFByb3BlcnRpZXM7CiAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9wZXJ0aWVzKG9iamVjdElk
LCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJhdGVQcmV2aWV3LCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMp
OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKG9iamVjdElk
LCBnZW5lcmF0ZVByZXZpZXcpCiAgICAgewogICAgICAgICBsZXQgbmF0aXZlR2V0dGVyc0FzVmFs
dWVzID0gdHJ1ZTsKICAgICAgICAgbGV0IGNvbGxlY3Rpb25Nb2RlID0gSW5qZWN0ZWRTY3JpcHQu
Q29sbGVjdGlvbk1vZGUuT3duUHJvcGVydGllcyB8IEluamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25N
b2RlLk5hdGl2ZUdldHRlclByb3BlcnRpZXM7CiAgICAgICAgIHJldHVybiB0aGlzLl9nZXRQcm9w
ZXJ0aWVzKG9iamVjdElkLCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJhdGVQcmV2aWV3LCBuYXRpdmVH
ZXR0ZXJzQXNWYWx1ZXMpOwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcpCiAgICAgewpAQCAtMzE3LDcgKzMwNSw3IEBA
IEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVy
biBkZXNjcmlwdG9yczsKLSAgICB9LAorICAgIH0KIAogICAgIGdldENvbGxlY3Rpb25FbnRyaWVz
KG9iamVjdElkLCBvYmplY3RHcm91cE5hbWUsIHN0YXJ0SW5kZXgsIG51bWJlclRvRmV0Y2gpCiAg
ICAgewpAQCAtMzM4LDcgKzMyNiw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgICAgICBlbnRyeS5rZXkgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9iamVjdChlbnRy
eS5rZXksIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OwogICAgICAgICB9KTsKLSAgICB9LAorICAgIH0KIAogICAgIHNhdmVSZXN1bHQoY2Fs
bEFyZ3VtZW50SlNPTikKICAgICB7CkBAIC0zNTEsNyArMzM5LDcgQEAgSW5qZWN0ZWRTY3JpcHQu
cHJvdG90eXBlID0gewogICAgICAgICB9IGNhdGNoIChlKSB7fQogCiAgICAgICAgIHJldHVybiB0
aGlzLl9zYXZlZFJlc3VsdEluZGV4OwotICAgIH0sCisgICAgfQogCiAgICAgZ2V0RnVuY3Rpb25E
ZXRhaWxzKGZ1bmN0aW9uSWQpCiAgICAgewpAQCAtMzYwLDI0ICszNDgsMjQgQEAgSW5qZWN0ZWRT
Y3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlv
biIpCiAgICAgICAgICAgICByZXR1cm4gIkNhbm5vdCByZXNvbHZlIGZ1bmN0aW9uIGJ5IGlkLiI7
CiAgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC5mdW5jdGlvbkRldGFpbHMoZnVuYyk7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICByZWxlYXNlT2JqZWN0KG9iamVjdElkKQogICAgIHsKICAgICAg
ICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CiAg
ICAgICAgIHRoaXMuX3JlbGVhc2VPYmplY3QocGFyc2VkT2JqZWN0SWQuaWQpOwotICAgIH0sCisg
ICAgfQogCiAgICAgX3JlbGVhc2VPYmplY3QoaWQpCiAgICAgewogICAgICAgICBkZWxldGUgdGhp
cy5faWRUb1dyYXBwZWRPYmplY3RbaWRdOwogICAgICAgICBkZWxldGUgdGhpcy5faWRUb09iamVj
dEdyb3VwTmFtZVtpZF07Ci0gICAgfSwKKyAgICB9CiAKICAgICBldmFsdWF0ZShleHByZXNzaW9u
LCBvYmplY3RHcm91cCwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVy
YXRlUHJldmlldywgc2F2ZVJlc3VsdCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9ldmFs
dWF0ZUFuZFdyYXAoSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9u
LCBJbmplY3RlZFNjcmlwdEhvc3QsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBmYWxzZSwgaW5q
ZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJl
c3VsdCk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBjYWxsRnVuY3Rpb25PbihvYmplY3RJZCwgZXhw
cmVzc2lvbiwgYXJncywgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKQEAg
LTQxMSw3ICszOTksNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShl
LCBvYmplY3RHcm91cCk7CiAgICAgICAgIH0KLSAgICB9LAorICAgIH0KIAogICAgIF9yZXNvbHZl
Q2FsbEFyZ3VtZW50KGNhbGxBcmd1bWVudEpTT04pCiAgICAgewpAQCAtNDMyLDcgKzQyMCw3IEBA
IEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVy
biB1bmRlZmluZWQ7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfZXZhbHVhdGVBbmRXcmFwKGV2YWxG
dW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaXNFdmFsT25DYWxsRnJh
bWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcs
IHNhdmVSZXN1bHQpCiAgICAgewpAQCAtNDUxLDcgKzQzOSw3IEBAIEluamVjdGVkU2NyaXB0LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX2NyZWF0ZVRocm93blZhbHVlKGUsIG9iamVjdEdyb3VwKTsKICAgICAgICAgfQotICAgIH0s
CisgICAgfQogCiAgICAgX2NyZWF0ZVRocm93blZhbHVlKHZhbHVlLCBvYmplY3RHcm91cCkKICAg
ICB7CkBAIC00NjMsNyArNDUxLDcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgd2FzVGhyb3duOiB0cnVlLAogICAgICAgICAgICAgcmVzdWx0OiByZW1vdGVPYmpl
Y3QKICAgICAgICAgfTsKLSAgICB9LAorICAgIH0KIAogICAgIF9ldmFsdWF0ZU9uKGV2YWxGdW5j
dGlvbiwgb2JqZWN0LCBvYmplY3RHcm91cCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxsRnJhbWUs
IGluamVjdENvbW1hbmRMaW5lQVBJLCBzYXZlUmVzdWx0KQogICAgIHsKQEAgLTQ3OSw3ICs0Njcs
NyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChzYXZlUmVzdWx0
KQogICAgICAgICAgICAgdGhpcy5fc2F2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0sCisgICAgfQogCiAgICAgd3JhcENhbGxGcmFtZXMoY2FsbEZyYW1lKQog
ICAgIHsKQEAgLTQ5Myw3ICs0ODEsNyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUuY2FsbGVyOwogICAgICAgICB9IHdoaWxl
IChjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfQogCiAg
ICAgZXZhbHVhdGVPbkNhbGxGcmFtZSh0b3BDYWxsRnJhbWUsIGNhbGxGcmFtZUlkLCBleHByZXNz
aW9uLCBvYmplY3RHcm91cCwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdl
bmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCkKICAgICB7CkBAIC01MDEsNyArNDg5LDcgQEAgSW5q
ZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWNhbGxGcmFtZSkKICAgICAg
ICAgICAgIHJldHVybiAiQ291bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3aXRoIGdpdmVuIGlkIjsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUuZXZhbHVhdGVX
aXRoU2NvcGVFeHRlbnNpb24sIGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIHRy
dWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcs
IHNhdmVSZXN1bHQpOwotICAgIH0sCisgICAgfQogCiAgICAgX2NhbGxGcmFtZUZvcklkKHRvcENh
bGxGcmFtZSwgY2FsbEZyYW1lSWQpCiAgICAgewpAQCAtNTExLDIzICs0OTksMjMgQEAgSW5qZWN0
ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB3aGlsZSAoLS1vcmRpbmFsID49IDAgJiYg
Y2FsbEZyYW1lKQogICAgICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKICAg
ICAgICAgcmV0dXJuIGNhbGxGcmFtZTsKLSAgICB9LAorICAgIH0KIAogICAgIF9vYmplY3RGb3JJ
ZChvYmplY3RJZCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9pZFRvV3JhcHBlZE9iamVj
dFtvYmplY3RJZC5pZF07Ci0gICAgfSwKKyAgICB9CiAKICAgICBmaW5kT2JqZWN0QnlJZChvYmpl
Y3RJZCkKICAgICB7CiAgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2Jq
ZWN0SWQob2JqZWN0SWQpOwogICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2Vk
T2JqZWN0SWQpOwotICAgIH0sCisgICAgfQogCiAgICAgbW9kdWxlKG5hbWUpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKLSAgICB9LAorICAgIH0KIAogICAgIGlu
amVjdE1vZHVsZShuYW1lLCBzb3VyY2UsIGhvc3QpCiAgICAgewpAQCAtNTQzLDcgKzUzMSw3IEBA
IEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVs
ZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3Qs
IGluc3BlY3RlZEdsb2JhbE9iamVjdCwgaW5qZWN0ZWRTY3JpcHRJZCwgdGhpcywgaG9zdCk7CiAg
ICAgICAgIHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CiAgICAgICAgIHJldHVybiBtb2R1
bGU7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzKG9i
amVjdCwgY29tcGxldGVEZXNjcmlwdG9yKQogICAgIHsKQEAgLTU2NCw3ICs1NTIsNyBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKGRl
c2NyaXB0b3IpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKLSAgICB9
LAorICAgIH0KIAogICAgIF9wcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCwgY29sbGVjdGlvbk1v
ZGUsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcykKICAgICB7CkBAIC03MDAsMTggKzY4OCwxOCBAQCBJ
bmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAKICAg
ICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwotICAgIH0sCisgICAgfQogCiAgICAgX2lzRGVmaW5l
ZChvYmplY3QpCiAgICAgewogICAgICAgICByZXR1cm4gISFvYmplY3QgfHwgdGhpcy5faXNIVE1M
QWxsQ29sbGVjdGlvbihvYmplY3QpOwotICAgIH0sCisgICAgfQogCiAgICAgX2lzSFRNTEFsbENv
bGxlY3Rpb24ob2JqZWN0KQogICAgIHsKICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIGlzIHJlcG9y
dGVkIGFzIHVuZGVmaW5lZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcHJvY2VzcyBpdC4KICAgICAg
ICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIikgJiYgSW5qZWN0ZWRTY3Jp
cHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKLSAgICB9LAorICAgIH0KIAogICAg
IF9zdWJ0eXBlKG9iaikKICAgICB7CkBAIC03MzUsMTIgKzcyMywxMiBAQCBJbmplY3RlZFNjcmlw
dC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAKICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfY2xhc3NQcmV2aWV3KGNsYXNzQ29uc3RydWN0
b3JWYWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiAiY2xhc3MgIiArIGNsYXNzQ29uc3RydWN0
b3JWYWx1ZS5uYW1lOwotICAgIH0sCisgICAgfQogCiAgICAgX25vZGVQcmV2aWV3KG5vZGUpCiAg
ICAgewpAQCAtNzY5LDcgKzc1Nyw3IEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBub2RlTmFtZTsKICAgICAgICAgfQot
ICAgIH0sCisgICAgfQogCiAgICAgX2Rlc2NyaWJlKG9iaikKICAgICB7CkBAIC04MTUsNyArODAz
LDcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuIGNsYXNzTmFtZTsKLSAgICB9LAorICAgIH0KIAogICAgIF9nZXRTZXRFbnRyaWVzKG9i
amVjdCwgc2tpcCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CkBAIC04MzUsNyArODIzLDcgQEAgSW5q
ZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGVu
dHJpZXM7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfZ2V0TWFwRW50cmllcyhvYmplY3QsIHNraXAs
IG51bWJlclRvRmV0Y2gpCiAgICAgewpAQCAtODU1LDIyICs4NDMsMjIgQEAgSW5qZWN0ZWRTY3Jp
cHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGVudHJpZXM7Ci0g
ICAgfSwKKyAgICB9CiAKICAgICBfZ2V0V2Vha01hcEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0Zl
dGNoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC53ZWFrTWFwRW50
cmllcyhvYmplY3QsIG51bWJlclRvRmV0Y2gpOwotICAgIH0sCisgICAgfQogCiAgICAgX2dldFdl
YWtTZXRFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIHJldHVy
biBJbmplY3RlZFNjcmlwdEhvc3Qud2Vha1NldEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNo
KTsKLSAgICB9LAorICAgIH0KIAogICAgIF9nZXRJdGVyYXRvckVudHJpZXMob2JqZWN0LCBudW1i
ZXJUb0ZldGNoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5pdGVy
YXRvckVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKTsKLSAgICB9LAorICAgIH0KIAogICAg
IF9lbnRyaWVzKG9iamVjdCwgc3VidHlwZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkKICAg
ICB7CkBAIC04ODYsNyArODc0LDcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2dldEl0ZXJhdG9yRW50cmllcyhvYmplY3QsIG51bWJlclRv
RmV0Y2gpOwogCiAgICAgICAgIHRocm93ICJ1bmV4cGVjdGVkIHR5cGUiOwotICAgIH0sCisgICAg
fQogCiAgICAgX3NhdmVSZXN1bHQocmVzdWx0KQogICAgIHsKQEAgLTkwNyw3ICs4OTUsNyBAQCBJ
bmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vICRuIGlzIGxpbWl0ZWQgZnJv
bSAkMS0kOTkuICQwIGlzIHNwZWNpYWwuCiAgICAgICAgIGlmICh0aGlzLl9uZXh0U2F2ZWRSZXN1
bHRJbmRleCA+PSAxMDApCiAgICAgICAgICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9
IDE7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfc2F2ZWRSZXN1bHQoaW5kZXgpCiAgICAgewpAQCAt
OTE1LDczICs5MDMsNzcgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgIH0KIH0K
IAorSW5qZWN0ZWRTY3JpcHQucHJpbWl0aXZlVHlwZXMgPSB7CisgICAgdW5kZWZpbmVkOiB0cnVl
LAorICAgIGJvb2xlYW46IHRydWUsCisgICAgbnVtYmVyOiB0cnVlLAorICAgIHN0cmluZzogdHJ1
ZSwKK307CisKK0luamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlID0geworICAgIE93blByb3Bl
cnRpZXM6IDEgPDwgMCwgICAgICAgICAgLy8gb3duIHByb3BlcnRpZXMuCisgICAgTmF0aXZlR2V0
dGVyUHJvcGVydGllczogMSA8PCAxLCAvLyBuYXRpdmUgZ2V0dGVyIHByb3BlcnRpZXMgaW4gdGhl
IHByb3RvdHlwZSBjaGFpbi4KKyAgICBBbGxQcm9wZXJ0aWVzOiAxIDw8IDIsICAgICAgICAgIC8v
IGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCit9OworCiB2YXIgaW5qZWN0
ZWRTY3JpcHQgPSBuZXcgSW5qZWN0ZWRTY3JpcHQ7CiAKLQotSW5qZWN0ZWRTY3JpcHQuUmVtb3Rl
T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBl
LCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQorSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2Jq
ZWN0ID0gY2xhc3MgUmVtb3RlT2JqZWN0CiB7Ci0gICAgdGhpcy50eXBlID0gdHlwZW9mIG9iamVj
dDsKLQotICAgIGlmICh0aGlzLnR5cGUgPT09ICJ1bmRlZmluZWQiICYmIGluamVjdGVkU2NyaXB0
Ll9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCkpCi0gICAgICAgIHRoaXMudHlwZSA9ICJvYmpl
Y3QiOwotCi0gICAgaWYgKGluamVjdGVkU2NyaXB0LmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSB8
fCBvYmplY3QgPT09IG51bGwgfHwgZm9yY2VWYWx1ZVR5cGUpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3Qgc2VuZCB1bmRlZmluZWQgdmFsdWVzIG92ZXIgSlNPTi4KLSAgICAgICAgaWYgKHRoaXMudHlw
ZSAhPT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICB0aGlzLnZhbHVlID0gb2JqZWN0OwotCi0g
ICAgICAgIC8vIE51bGwgb2JqZWN0IGlzIG9iamVjdCB3aXRoICdudWxsJyBzdWJ0eXBlLgotICAg
ICAgICBpZiAob2JqZWN0ID09PSBudWxsKQotICAgICAgICAgICAgdGhpcy5zdWJ0eXBlID0gIm51
bGwiOwotCi0gICAgICAgIC8vIFByb3ZpZGUgdXNlci1mcmllbmRseSBudW1iZXIgdmFsdWVzLgot
ICAgICAgICBpZiAodGhpcy50eXBlID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHRoaXMuZGVz
Y3JpcHRpb24gPSB0b1N0cmluZ0Rlc2NyaXB0aW9uKG9iamVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB0aGlzLm9iamVjdElkID0gaW5qZWN0ZWRTY3JpcHQuX2JpbmQob2JqZWN0
LCBvYmplY3RHcm91cE5hbWUpOwotCi0gICAgbGV0IHN1YnR5cGUgPSBpbmplY3RlZFNjcmlwdC5f
c3VidHlwZShvYmplY3QpOwotICAgIGlmIChzdWJ0eXBlKQotICAgICAgICB0aGlzLnN1YnR5cGUg
PSBzdWJ0eXBlOwotCi0gICAgdGhpcy5jbGFzc05hbWUgPSBJbmplY3RlZFNjcmlwdEhvc3QuaW50
ZXJuYWxDb25zdHJ1Y3Rvck5hbWUob2JqZWN0KTsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gaW5q
ZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKG9iamVjdCk7Ci0KLSAgICBpZiAoc3VidHlwZSA9PT0gImFy
cmF5IikKLSAgICAgICAgdGhpcy5zaXplID0gdHlwZW9mIG9iamVjdC5sZW5ndGggPT09ICJudW1i
ZXIiID8gb2JqZWN0Lmxlbmd0aCA6IDA7Ci0gICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gInNldCIg
fHwgc3VidHlwZSA9PT0gIm1hcCIpCi0gICAgICAgIHRoaXMuc2l6ZSA9IG9iamVjdC5zaXplOwot
ICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJ3ZWFrbWFwIikKLSAgICAgICAgdGhpcy5zaXplID0g
SW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtNYXBTaXplKG9iamVjdCk7Ci0gICAgZWxzZSBpZiAoc3Vi
dHlwZSA9PT0gIndlYWtzZXQiKQotICAgICAgICB0aGlzLnNpemUgPSBJbmplY3RlZFNjcmlwdEhv
c3Qud2Vha1NldFNpemUob2JqZWN0KTsKLSAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAiY2xhc3Mi
KSB7Ci0gICAgICAgIHRoaXMuY2xhc3NQcm90b3R5cGUgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9i
amVjdChvYmplY3QucHJvdG90eXBlLCBvYmplY3RHcm91cE5hbWUpOwotICAgICAgICB0aGlzLmNs
YXNzTmFtZSA9IG9iamVjdC5uYW1lOworICAgIGNvbnN0cnVjdG9yKG9iamVjdCwgb2JqZWN0R3Jv
dXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKKyAg
ICB7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGVvZiBvYmplY3Q7CisKKyAgICAgICAgaWYgKHRo
aXMudHlwZSA9PT0gInVuZGVmaW5lZCIgJiYgaW5qZWN0ZWRTY3JpcHQuX2lzSFRNTEFsbENvbGxl
Y3Rpb24ob2JqZWN0KSkKKyAgICAgICAgICAgIHRoaXMudHlwZSA9ICJvYmplY3QiOworCisgICAg
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5pc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkgfHwgb2JqZWN0
ID09PSBudWxsIHx8IGZvcmNlVmFsdWVUeXBlKSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBz
ZW5kIHVuZGVmaW5lZCB2YWx1ZXMgb3ZlciBKU09OLgorICAgICAgICAgICAgaWYgKHRoaXMudHlw
ZSAhPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG9iamVjdDsK
KworICAgICAgICAgICAgLy8gTnVsbCBvYmplY3QgaXMgb2JqZWN0IHdpdGggJ251bGwnIHN1YnR5
cGUuCisgICAgICAgICAgICBpZiAob2JqZWN0ID09PSBudWxsKQorICAgICAgICAgICAgICAgIHRo
aXMuc3VidHlwZSA9ICJudWxsIjsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB1c2VyLWZyaWVu
ZGx5IG51bWJlciB2YWx1ZXMuCisgICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAibnVtYmVy
IikKKyAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdG9TdHJpbmdEZXNjcmlwdGlv
bihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5vYmplY3RJZCA9IGluamVjdGVkU2NyaXB0Ll9iaW5kKG9iamVjdCwgb2JqZWN0R3JvdXBOYW1l
KTsKKworICAgICAgICBsZXQgc3VidHlwZSA9IGluamVjdGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVj
dCk7CisgICAgICAgIGlmIChzdWJ0eXBlKQorICAgICAgICAgICAgdGhpcy5zdWJ0eXBlID0gc3Vi
dHlwZTsKKworICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IEluamVjdGVkU2NyaXB0SG9zdC5pbnRl
cm5hbENvbnN0cnVjdG9yTmFtZShvYmplY3QpOworICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0g
aW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHN1YnR5cGUg
PT09ICJhcnJheSIpCisgICAgICAgICAgICB0aGlzLnNpemUgPSB0eXBlb2Ygb2JqZWN0Lmxlbmd0
aCA9PT0gIm51bWJlciIgPyBvYmplY3QubGVuZ3RoIDogMDsKKyAgICAgICAgZWxzZSBpZiAoc3Vi
dHlwZSA9PT0gInNldCIgfHwgc3VidHlwZSA9PT0gIm1hcCIpCisgICAgICAgICAgICB0aGlzLnNp
emUgPSBvYmplY3Quc2l6ZTsKKyAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gIndlYWttYXAi
KQorICAgICAgICAgICAgdGhpcy5zaXplID0gSW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtNYXBTaXpl
KG9iamVjdCk7CisgICAgICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJ3ZWFrc2V0IikKKyAgICAg
ICAgICAgIHRoaXMuc2l6ZSA9IEluamVjdGVkU2NyaXB0SG9zdC53ZWFrU2V0U2l6ZShvYmplY3Qp
OworICAgICAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAiY2xhc3MiKSB7CisgICAgICAgICAgICB0
aGlzLmNsYXNzUHJvdG90eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmplY3Qob2JqZWN0LnBy
b3RvdHlwZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0g
b2JqZWN0Lm5hbWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2VuZXJhdGVQcmV2aWV3ICYm
IHRoaXMudHlwZSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgIGlmIChzdWJ0eXBlID09PSAi
cHJveHkiKSB7CisgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gdGhpcy5fZ2VuZXJhdGVQ
cmV2aWV3KEluamVjdGVkU2NyaXB0SG9zdC5wcm94eVRhcmdldFZhbHVlKG9iamVjdCkpOworICAg
ICAgICAgICAgICAgIHRoaXMucHJldmlldy5sb3NzbGVzcyA9IGZhbHNlOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gdGhpcy5fZ2VuZXJhdGVQcmV2
aWV3KG9iamVjdCwgdW5kZWZpbmVkLCBjb2x1bW5OYW1lcyk7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgfQogCi0gICAgaWYgKGdlbmVyYXRlUHJldmlldyAmJiB0aGlzLnR5cGUgPT09ICJvYmpl
Y3QiKSB7Ci0gICAgICAgIGlmIChzdWJ0eXBlID09PSAicHJveHkiKSB7Ci0gICAgICAgICAgICB0
aGlzLnByZXZpZXcgPSB0aGlzLl9nZW5lcmF0ZVByZXZpZXcoSW5qZWN0ZWRTY3JpcHRIb3N0LnBy
b3h5VGFyZ2V0VmFsdWUob2JqZWN0KSk7Ci0gICAgICAgICAgICB0aGlzLnByZXZpZXcubG9zc2xl
c3MgPSBmYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSB0
aGlzLl9nZW5lcmF0ZVByZXZpZXcob2JqZWN0LCB1bmRlZmluZWQsIGNvbHVtbk5hbWVzKTsKLSAg
ICB9Ci19OwotCi1JbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmll
d0ZvclZhbHVlID0gZnVuY3Rpb24odmFsdWUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMp
Ci17Ci0gICAgbGV0IHJlbW90ZU9iamVjdCA9IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmpl
Y3QodmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMp
OwotICAgIGlmIChyZW1vdGVPYmplY3Qub2JqZWN0SWQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0
LnJlbGVhc2VPYmplY3QocmVtb3RlT2JqZWN0Lm9iamVjdElkKTsKLSAgICBpZiAocmVtb3RlT2Jq
ZWN0LmNsYXNzUHJvdG90eXBlICYmIHJlbW90ZU9iamVjdC5jbGFzc1Byb3RvdHlwZS5vYmplY3RJ
ZCkKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3QuY2xh
c3NQcm90b3R5cGUub2JqZWN0SWQpOwotICAgIHJldHVybiByZW1vdGVPYmplY3QucHJldmlldyB8
fCByZW1vdGVPYmplY3QuX2VtcHR5UHJldmlldygpOwotfTsKLQotSW5qZWN0ZWRTY3JpcHQuUmVt
b3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICBfaW5pdGlhbFByZXZpZXcoKQogICAgIHsKICAg
ICAgICAgbGV0IHByZXZpZXcgPSB7CkBAIC0xMDAyLDcgKzk5NCw3IEBAIEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBwcmV2aWV3LnNpemUgPSB0
aGlzLnNpemU7CiAKICAgICAgICAgcmV0dXJuIHByZXZpZXc7Ci0gICAgfSwKKyAgICB9CiAKICAg
ICBfZW1wdHlQcmV2aWV3KCkKICAgICB7CkBAIC0xMDE3LDcgKzEwMDksNyBAQCBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIHByZXZpZXc7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfZ2VuZXJhdGVQcmV2aWV3KG9iamVj
dCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykKICAgICB7CkBAIC0xMDU5LDcgKzEw
NTEsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIHByZXZpZXc7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfYXBw
ZW5kUHJvcGVydHlQcmV2aWV3cyhvYmplY3QsIHByZXZpZXcsIGRlc2NyaXB0b3JzLCBpbnRlcm5h
bCwgcHJvcGVydGllc1RocmVzaG9sZCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykK
ICAgICB7CkBAIC0xMTgxLDcgKzExNzMsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3Qu
cHJvdG90eXBlID0gewogCiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXco
cHJldmlldywgaW50ZXJuYWwsIHByb3BlcnR5LCBwcm9wZXJ0aWVzVGhyZXNob2xkKTsKICAgICAg
ICAgfQotICAgIH0sCisgICAgfQogCiAgICAgX2FwcGVuZFByb3BlcnR5UHJldmlldyhwcmV2aWV3
LCBpbnRlcm5hbCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJlc2hvbGQpCiAgICAgewpAQCAtMTIw
MCw3ICsxMTkyLDcgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHByb3BlcnR5LmludGVybmFsID0gdHJ1ZTsKIAogICAgICAgICBwcmV2aWV3
LnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgfSwKKyAgICB9CiAKICAgICBfYXBwZW5k
RW50cnlQcmV2aWV3cyhvYmplY3QsIHByZXZpZXcpCiAgICAgewpAQCAtMTIyOSw3ICsxMjIxLDcg
QEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgfSwgdGhpcyk7Ci0gICAgfSwK
KyAgICB9CiAKICAgICBfaXNQcmV2aWV3YWJsZU9iamVjdCh2YWx1ZSwgb2JqZWN0KQogICAgIHsK
QEAgLTEyMzcsNyArMTIyOSw3IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHNldC5hZGQob2JqZWN0KTsKIAogICAgICAgICByZXR1cm4gdGhpcy5f
aXNQcmV2aWV3YWJsZU9iamVjdEludGVybmFsKHZhbHVlLCBzZXQsIDEpOwotICAgIH0sCisgICAg
fQogCiAgICAgX2lzUHJldmlld2FibGVPYmplY3RJbnRlcm5hbChvYmplY3QsIGtub3duT2JqZWN0
cywgZGVwdGgpCiAgICAgewpAQCAtMTI4OCw3ICsxMjgwLDcgQEAgSW5qZWN0ZWRTY3JpcHQuUmVt
b3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0sCisgICAgfQogCiAgICAgX2FiYnJldmlhdGVTdHJpbmcoc3RyaW5nLCBtYXhMZW5n
dGgsIG1pZGRsZSkKICAgICB7CkBAIC0xMzA1LDYgKzEyOTcsMTcgQEAgSW5qZWN0ZWRTY3JpcHQu
UmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKK0luamVjdGVkU2NyaXB0LlJl
bW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwg
Z2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKK3sKKyAgICBsZXQgcmVtb3RlT2JqZWN0ID0g
bmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdCh2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSwg
Z2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKHJlbW90ZU9iamVjdC5vYmpl
Y3RJZCkKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3Qu
b2JqZWN0SWQpOworICAgIGlmIChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUgJiYgcmVtb3Rl
T2JqZWN0LmNsYXNzUHJvdG90eXBlLm9iamVjdElkKQorICAgICAgICBpbmplY3RlZFNjcmlwdC5y
ZWxlYXNlT2JqZWN0KHJlbW90ZU9iamVjdC5jbGFzc1Byb3RvdHlwZS5vYmplY3RJZCk7CisgICAg
cmV0dXJuIHJlbW90ZU9iamVjdC5wcmV2aWV3IHx8IHJlbW90ZU9iamVjdC5fZW1wdHlQcmV2aWV3
KCk7Cit9OworCisKIEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5ID0gZnVuY3Rpb24ob3Jk
aW5hbCwgY2FsbEZyYW1lKQogewogICAgIHRoaXMuY2FsbEZyYW1lSWQgPSBgeyJvcmRpbmFsIjok
e29yZGluYWx9LCJpbmplY3RlZFNjcmlwdElkIjoke2luamVjdGVkU2NyaXB0SWR9fWA7Cg==
</data>
<flag name="review"
          id="335196"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313981</attachid>
            <date>2017-06-27 20:43:05 -0700</date>
            <delta_ts>2017-07-18 15:42:04 -0700</delta_ts>
            <desc>[PATCH] Part 3 - Move code around, eliminate some functions (isDefined, isPrimitiveValue)</desc>
            <filename>step-3.patch</filename>
            <type>text/plain</type>
            <size>32660</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IDIzYzg0Mjg1NmEwYmYzODBiZjY3OWFiYzQ1YWUzMWE0OWM3YjFkOWIKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgSnVuIDI3IDE5
OjEzOjEwIDIwMTcgLTA3MDAKCiAgICBMT0NBTDogU3RlcCAzIC0gTW92ZSBGdW5jdGlvbnMgQXJv
dW5kIC0gRWxpbWluYXRlIGEgZmV3CgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDIxMTc1ZmYxYWNhLi40MDk4ZDc2NGE3MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApA
QCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5qZWN0ZWRTY3JpcHQoKTsK
IAogICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1
bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVzdWx0LCBQcm90
b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29s
IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
KiByZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29s
OjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJl
c3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKTsKICAgICB2b2lkIGdl
dEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAg
ICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRy
PFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAgICB2b2lk
IGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+KiByZXN1bHQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMK
aW5kZXggMTAzZDhjZWIyNmQuLjU1YWFlMmM3MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTY3LDYg
KzY3LDI3IEBAIGZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqZWN0KQogICAgIHJldHVybiB0cnVl
OwogfQogCitmdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpCit7CisgICAgcmV0dXJuICEhdmFsdWUg
fHwgSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24odmFsdWUpOworfQorCitm
dW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHZhbHVlKQoreworICAgIHN3aXRjaCAodHlwZW9mIHZh
bHVlKSB7CisgICAgY2FzZSAiYm9vbGVhbiI6CisgICAgY2FzZSAibnVtYmVyIjoKKyAgICBjYXNl
ICJzdHJpbmciOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlICJ1bmRlZmluZWQiOgor
ICAgICAgICByZXR1cm4gIUluamVjdGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxDb2xsZWN0aW9uKHZh
bHVlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgCisg
ICAgfQorfQorCisvLyAtLS0tLS0tCisKIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVj
dGVkU2NyaXB0CiB7CiAgICAgY29uc3RydWN0b3IoKQpAQCAtODAsMTUgKzEwMSw2MyBAQCBsZXQg
SW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICB0aGlzLl9zYXZl
ZFJlc3VsdHMgPSBbXTsKICAgICB9CiAKLSAgICBpc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkKKyAg
ICAvLyBJbmplY3RlZFNjcmlwdCBDKysgQVBJCisKKyAgICBldmFsdWF0ZShleHByZXNzaW9uLCBv
YmplY3RHcm91cCwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRl
UHJldmlldywgc2F2ZVJlc3VsdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0
ZUFuZFdyYXAoSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uLCBJ
bmplY3RlZFNjcmlwdEhvc3QsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBmYWxzZSwgaW5qZWN0
Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3Vs
dCk7CisgICAgfQorCisgICAgZXZhbHVhdGVPbkNhbGxGcmFtZSh0b3BDYWxsRnJhbWUsIGNhbGxG
cmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJl
dHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCkKICAgICB7Ci0gICAgICAg
IC8vIEZJWE1FKDMzNzE2KTogdHlwZW9mIGRvY3VtZW50LmFsbCBpcyBhbHdheXMgJ3VuZGVmaW5l
ZCcuCi0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5wcmltaXRpdmVUeXBlc1t0eXBlb2Yg
b2JqZWN0XSAmJiAhdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpOworICAgICAgICBs
ZXQgY2FsbEZyYW1lID0gdGhpcy5fY2FsbEZyYW1lRm9ySWQodG9wQ2FsbEZyYW1lLCBjYWxsRnJh
bWVJZCk7CisgICAgICAgIGlmICghY2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuICJDb3Vs
ZCBub3QgZmluZCBjYWxsIGZyYW1lIHdpdGggZ2l2ZW4gaWQiOworICAgICAgICByZXR1cm4gdGhp
cy5fZXZhbHVhdGVBbmRXcmFwKGNhbGxGcmFtZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiwg
Y2FsbEZyYW1lLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgdHJ1ZSwgaW5qZWN0Q29tbWFuZExp
bmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCk7CisgICAg
fQorCisgICAgY2FsbEZ1bmN0aW9uT24ob2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3MsIHJldHVy
bkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKKyAgICB7CisgICAgICAgIGxldCBwYXJzZWRPYmpl
Y3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0
ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0
R3JvdXBOYW1lID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07
CisKKyAgICAgICAgaWYgKCFpc0RlZmluZWQob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAi
Q291bGQgbm90IGZpbmQgb2JqZWN0IHdpdGggZ2l2ZW4gaWQiOworCisgICAgICAgIGxldCByZXNv
bHZlZEFyZ3MgPSBbXTsKKyAgICAgICAgaWYgKGFyZ3MpIHsgICAgCisgICAgICAgICAgICBsZXQg
Y2FsbEFyZ3MgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoYXJncyk7CisgICAgICAgICAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxBcmdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmdzW2ldID0gdGhpcy5f
cmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJnc1tpXSk7CisgICAgICAgICAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBsZXQgZnVuYyA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBleHBy
ZXNzaW9uICsgIikiKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gImZ1bmN0aW9u
IikKKyAgICAgICAgICAgICAgICByZXR1cm4gIkdpdmVuIGV4cHJlc3Npb24gZG9lcyBub3QgZXZh
bHVhdGUgdG8gYSBmdW5jdGlvbiI7CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgd2FzVGhyb3duOiBmYWxzZSwKKyAgICAgICAgICAgICAgICByZXN1bHQ6IHRoaXMuX3dy
YXBPYmplY3QoZnVuYy5hcHBseShvYmplY3QsIHJlc29sdmVkQXJncyksIG9iamVjdEdyb3VwTmFt
ZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVRocm93blZh
bHVlKGUsIG9iamVjdEdyb3VwTmFtZSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBwcmV2aWV3
VmFsdWUodmFsdWUpCisgICAgZ2V0RnVuY3Rpb25EZXRhaWxzKG9iamVjdElkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2
aWV3Rm9yVmFsdWUodmFsdWUsIHRydWUpOworICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0
aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMu
X29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKKyAgICAgICAgaWYgKHR5cGVvZiBvYmplY3Qg
IT09ICJmdW5jdGlvbiIpCisgICAgICAgICAgICByZXR1cm4gIkNhbm5vdCByZXNvbHZlIGZ1bmN0
aW9uIGJ5IGlkLiI7CisgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC5mdW5jdGlvbkRldGFp
bHMob2JqZWN0KTsKICAgICB9CiAKICAgICBmdW5jdGlvbkRldGFpbHMoZnVuYykKQEAgLTk5LDYg
KzE2OCwxMDAgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAg
ICAgICAgcmV0dXJuIGRldGFpbHM7CiAgICAgfQogCisgICAgZ2V0UHJldmlldyhvYmplY3RJZCkK
KyAgICB7CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQo
b2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2Vk
T2JqZWN0SWQpOworICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmNy
ZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZShvYmplY3QsIHRydWUpOworICAgIH0KKworICAgIGdl
dFByb3BlcnRpZXMob2JqZWN0SWQsIG93blByb3BlcnRpZXMsIGdlbmVyYXRlUHJldmlldykKKyAg
ICB7CisgICAgICAgIGxldCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSBmYWxzZTsKKyAgICAgICAg
bGV0IGNvbGxlY3Rpb25Nb2RlID0gb3duUHJvcGVydGllcyA/IEluamVjdGVkU2NyaXB0LkNvbGxl
Y3Rpb25Nb2RlLk93blByb3BlcnRpZXMgOiBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5B
bGxQcm9wZXJ0aWVzOworICAgICAgICByZXR1cm4gdGhpcy5fZ2V0UHJvcGVydGllcyhvYmplY3RJ
ZCwgY29sbGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmlldywgbmF0aXZlR2V0dGVyc0FzVmFsdWVz
KTsKKyAgICB9CisKKyAgICBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMob2JqZWN0SWQsIGdlbmVy
YXRlUHJldmlldykKKyAgICB7CisgICAgICAgIGxldCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0
cnVlOworICAgICAgICBsZXQgY29sbGVjdGlvbk1vZGUgPSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0
aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0
aXZlR2V0dGVyUHJvcGVydGllczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMo
b2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNB
c1ZhbHVlcyk7CisgICAgfQorCisgICAgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKG9iamVjdElkLCBn
ZW5lcmF0ZVByZXZpZXcpCisgICAgeworICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlz
Ll9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMuX29i
amVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKKyAgICAgICAgbGV0IG9iamVjdEdyb3VwTmFtZSA9
IHRoaXMuX2lkVG9PYmplY3RHcm91cE5hbWVbcGFyc2VkT2JqZWN0SWQuaWRdOworCisgICAgICAg
IGlmICghaXNEZWZpbmVkKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKGlzU3ltYm9sKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgbGV0IGRlc2NyaXB0b3JzID0gdGhpcy5faW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3JzKG9iamVjdCk7CisgICAgICAgIGlmICghZGVzY3JpcHRvcnMpCisgICAgICAgICAgICByZXR1
cm4gW107CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKKyAg
ICAgICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci52YWx1ZSA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci52YWx1ZSwgb2JqZWN0
R3JvdXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBkZXNjcmlwdG9yczsKKyAgICB9CisKKyAgICBnZXRDb2xsZWN0aW9uRW50cmllcyhv
YmplY3RJZCwgb2JqZWN0R3JvdXBOYW1lLCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKQorICAg
IHsKKyAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmpl
Y3RJZCk7CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmpl
Y3RJZCk7CisgICAgICAgIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwTmFtZSB8fCB0aGlz
Ll9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKKworICAgICAgICBpZiAo
IWlzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0
eXBlb2Ygb2JqZWN0ICE9PSAib2JqZWN0IikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBsZXQgZW50cmllcyA9IHRoaXMuX2VudHJpZXMob2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3Qu
c3VidHlwZShvYmplY3QpLCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKTsKKyAgICAgICAgcmV0
dXJuIGVudHJpZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgICAgICBlbnRyeS52YWx1
ZSA9IGluamVjdGVkU2NyaXB0Ll93cmFwT2JqZWN0KGVudHJ5LnZhbHVlLCBvYmplY3RHcm91cE5h
bWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgia2V5IiBpbiBlbnRyeSkKKyAgICAg
ICAgICAgICAgICBlbnRyeS5rZXkgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9iamVjdChlbnRyeS5r
ZXksIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5OworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzYXZlUmVzdWx0KGNhbGxBcmd1bWVudEpT
T04pCisgICAgeworICAgICAgICB0aGlzLl9zYXZlZFJlc3VsdEluZGV4ID0gMDsKKworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgbGV0IGNhbGxBcmd1bWVudCA9IEluamVjdGVkU2NyaXB0SG9z
dC5ldmFsdWF0ZSgiKCIgKyBjYWxsQXJndW1lbnRKU09OICsgIikiKTsKKyAgICAgICAgICAgIGxl
dCB2YWx1ZSA9IHRoaXMuX3Jlc29sdmVDYWxsQXJndW1lbnQoY2FsbEFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIHRoaXMuX3NhdmVSZXN1bHQodmFsdWUpOworICAgICAgICB9IGNhdGNoIChlKSB7fQor
CisgICAgICAgIHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdEluZGV4OworICAgIH0KKworICAgIHdy
YXBDYWxsRnJhbWVzKGNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlmICghY2FsbEZyYW1lKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGxldCByZXN1bHQgPSBbXTsKKyAg
ICAgICAgbGV0IGRlcHRoID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVzdWx0LnB1
c2gobmV3IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5KGRlcHRoKyssIGNhbGxGcmFtZSkp
OworICAgICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKKyAgICAgICAgfSB3
aGlsZSAoY2FsbEZyYW1lKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICB3
cmFwT2JqZWN0KG9iamVjdCwgZ3JvdXBOYW1lLCBjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QsIGdlbmVyYXRlUHJldmlldykKICAgICB7CiAgICAgICAgIGlmIChjYW5BY2Nlc3NJbnNwZWN0
ZWRHbG9iYWxPYmplY3QpCkBAIC0xMDYsMjcgKzI2OSw2IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9
IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1dyYXBw
ZXIob2JqZWN0KTsKICAgICB9CiAKLSAgICBzZXRFeGNlcHRpb25WYWx1ZSh2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX2V4Y2VwdGlvblZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAgY2xl
YXJFeGNlcHRpb25WYWx1ZSgpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5fZXhjZXB0aW9u
VmFsdWU7Ci0gICAgfQotCi0gICAgX2ZhbGxiYWNrV3JhcHBlcihvYmplY3QpCi0gICAgewotICAg
ICAgICBsZXQgcmVzdWx0ID0ge307Ci0gICAgICAgIHJlc3VsdC50eXBlID0gdHlwZW9mIG9iamVj
dDsKLSAgICAgICAgaWYgKHRoaXMuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQotICAgICAgICAg
ICAgcmVzdWx0LnZhbHVlID0gb2JqZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1
bHQuZGVzY3JpcHRpb24gPSB0b1N0cmluZyhvYmplY3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLQogICAgIHdyYXBUYWJsZShjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3Qs
IHRhYmxlLCBjb2x1bW5zKQogICAgIHsKICAgICAgICAgaWYgKCFjYW5BY2Nlc3NJbnNwZWN0ZWRH
bG9iYWxPYmplY3QpCkBAIC0xNDksMjUgKzI5MSw5MCBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBj
bGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICByZXR1cm4gdGhpcy5fd3JhcE9iamVjdCh0YWJs
ZSwgImNvbnNvbGUiLCBmYWxzZSwgdHJ1ZSwgY29sdW1uTmFtZXMpOwogICAgIH0KIAorICAgIHBy
ZXZpZXdWYWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5S
ZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKHZhbHVlLCB0cnVlKTsKKyAg
ICB9CisKKyAgICBzZXRFeGNlcHRpb25WYWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMu
X2V4Y2VwdGlvblZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgY2xlYXJFeGNlcHRpb25WYWx1
ZSgpCisgICAgeworICAgICAgICBkZWxldGUgdGhpcy5fZXhjZXB0aW9uVmFsdWU7CisgICAgfQor
CisgICAgZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpCisgICAgeworICAgICAgICBsZXQgcGFyc2Vk
T2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKKyAgICB9CisKICAgICBpbnNwZWN0
T2JqZWN0KG9iamVjdCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9jb21tYW5kTGluZUFQSUlt
cGwpCiAgICAgICAgICAgICB0aGlzLl9jb21tYW5kTGluZUFQSUltcGwuaW5zcGVjdChvYmplY3Qp
OwogICAgIH0KIAotICAgIF93cmFwT2JqZWN0KG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3Jj
ZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKLSAgICB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVj
dChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRlUHJldmll
dywgY29sdW1uTmFtZXMpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBsZXQg
ZGVzY3JpcHRpb247Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uID0gaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKGUpOwotICAgICAgICAgICAgfSBjYXRjaCAo
ZXgpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICI8ZmFpbGVkIHRvIGNvbnZlcnQg
ZXhjZXB0aW9uIHRvIHN0cmluZz4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QoZGVzY3JpcHRpb24pOworICAgIHJlbGVh
c2VPYmplY3Qob2JqZWN0SWQpCisgICAgeworICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0
aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgdGhpcy5fcmVsZWFzZU9iamVj
dChwYXJzZWRPYmplY3RJZC5pZCk7CisgICAgfQorCisgICAgcmVsZWFzZU9iamVjdEdyb3VwKG9i
amVjdEdyb3VwTmFtZSkKKyAgICB7CisgICAgICAgIGlmIChvYmplY3RHcm91cE5hbWUgPT09ICJj
b25zb2xlIikgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RSZXN1bHQ7CisgICAgICAg
ICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7CisgICAgICAgICAgICB0aGlzLl9z
YXZlZFJlc3VsdHMgPSBbXTsKICAgICAgICAgfQorCisgICAgICAgIGxldCBncm91cCA9IHRoaXMu
X29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOworICAgICAgICBpZiAoIWdyb3VwKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXAubGVu
Z3RoOyBpKyspCisgICAgICAgICAgICB0aGlzLl9yZWxlYXNlT2JqZWN0KGdyb3VwW2ldKTsKKwor
ICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CisgICAg
fQorCisgICAgLy8gSW5qZWN0ZWRTY3JpcHRNb2R1bGUgQysrIEFQSQorCisgICAgbW9kdWxlKG5h
bWUpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKKyAgICB9CisK
KyAgICBpbmplY3RNb2R1bGUobmFtZSwgc291cmNlLCBob3N0KQorICAgIHsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX21vZHVsZXNbbmFtZV07CisKKyAgICAgICAgbGV0IG1vZHVsZUZ1bmN0aW9uID0g
SW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIpIik7CisgICAgICAg
IGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkKKyAgICAgICAgICAgICAgICBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2ViIEluc3BlY3RvciBlcnJvcjogQSBm
dW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBldmFsdWF0aW9uIiwgbmFtZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBtb2R1bGUg
PSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZEdsb2JhbE9iamVjdCwgSW5qZWN0ZWRTY3Jp
cHRIb3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SWQsIHRoaXMsIGhv
c3QpOworICAgICAgICB0aGlzLl9tb2R1bGVzW25hbWVdID0gbW9kdWxlOworICAgICAgICByZXR1
cm4gbW9kdWxlOworICAgIH0KKworICAgIC8vIFByaXZhdGUKKworICAgIF9wYXJzZU9iamVjdElk
KG9iamVjdElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5ldmFs
dWF0ZSgiKCIgKyBvYmplY3RJZCArICIpIik7CisgICAgfQorCisgICAgX29iamVjdEZvcklkKG9i
amVjdElkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W29i
amVjdElkLmlkXTsKICAgICB9CiAKICAgICBfYmluZChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSkK
QEAgLTE5MCwyMTcgKzM5NywzOCBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3Rl
ZFNjcmlwdAogICAgICAgICByZXR1cm4gb2JqZWN0SWQ7CiAgICAgfQogCi0gICAgX3BhcnNlT2Jq
ZWN0SWQob2JqZWN0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0
LmV2YWx1YXRlKCIoIiArIG9iamVjdElkICsgIikiKTsKLSAgICB9Ci0KLSAgICByZWxlYXNlT2Jq
ZWN0R3JvdXAob2JqZWN0R3JvdXBOYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG9iamVjdEdyb3Vw
TmFtZSA9PT0gImNvbnNvbGUiKSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFJlc3Vs
dDsKLSAgICAgICAgICAgIHRoaXMuX25leHRTYXZlZFJlc3VsdEluZGV4ID0gMTsKLSAgICAgICAg
ICAgIHRoaXMuX3NhdmVkUmVzdWx0cyA9IFtdOwotICAgICAgICB9Ci0KLSAgICAgICAgbGV0IGdy
b3VwID0gdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07Ci0gICAgICAgIGlmICgh
Z3JvdXApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBncm91cC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHRoaXMuX3JlbGVhc2VPYmplY3QoZ3Jv
dXBbaV0pOwotCi0gICAgICAgIGRlbGV0ZSB0aGlzLl9vYmplY3RHcm91cHNbb2JqZWN0R3JvdXBO
YW1lXTsKLSAgICB9Ci0KLSAgICBkaXNwYXRjaChtZXRob2ROYW1lLCBhcmdzKQotICAgIHsKLSAg
ICAgICAgbGV0IGFyZ3NBcnJheSA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBh
cmdzICsgIikiKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXNbbWV0aG9kTmFtZV0uYXBwbHko
dGhpcywgYXJnc0FycmF5KTsKLSAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJ1bmRlZmlu
ZWQiKSB7Ci0gICAgICAgICAgICBpZiAoaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUpCi0g
ICAgICAgICAgICAgICAgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LmNvbnNvbGUuZXJyb3IoIldlYiBJ
bnNwZWN0b3IgZXJyb3I6IEluamVjdGVkU2NyaXB0LiVzIHJldHVybnMgdW5kZWZpbmVkIiwgbWV0
aG9kTmFtZSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgZ2V0UHJldmlldyhvYmplY3RJZCkKLSAgICB7
Ci0gICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0
SWQpOwotICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0
SWQpOwotCi0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRl
T2JqZWN0UHJldmlld0ZvclZhbHVlKG9iamVjdCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgX2dldFBy
b3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2
ZUdldHRlcnNBc1ZhbHVlcykKLSAgICB7Ci0gICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRo
aXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5f
b2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwotICAgICAgICBsZXQgb2JqZWN0R3JvdXBOYW1l
ID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07Ci0KLSAgICAg
ICAgaWYgKCF0aGlzLl9pc0RlZmluZWQob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAoaXNTeW1ib2wob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBsZXQgZGVzY3JpcHRvcnMgPSB0aGlzLl9wcm9wZXJ0eURlc2NyaXB0
b3JzKG9iamVjdCwgY29sbGVjdGlvbk1vZGUsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7Ci0KLSAg
ICAgICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCB3cmFwIG9iamVjdCB2YWx1ZXMuCi0gICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIGxldCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07Ci0gICAgICAgICAgICBpZiAoImdl
dCIgaW4gZGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmdldCA9IHRoaXMu
X3dyYXBPYmplY3QoZGVzY3JpcHRvci5nZXQsIG9iamVjdEdyb3VwTmFtZSk7Ci0gICAgICAgICAg
ICBpZiAoInNldCIgaW4gZGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNl
dCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci5zZXQsIG9iamVjdEdyb3VwTmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3IudmFsdWUgPSB0aGlzLl93cmFwT2JqZWN0KGRlc2NyaXB0b3IudmFsdWUsIG9iamVj
dEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7Ci0gICAgICAgICAgICBpZiAoISgi
Y29uZmlndXJhYmxlIiBpbiBkZXNjcmlwdG9yKSkKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LmNvbmZpZ3VyYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCEoImVudW1lcmFibGUiIGlu
IGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKCJzeW1ib2wiIGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5zeW1ib2wgPSB0aGlzLl93cmFwT2JqZWN0KGRlc2NyaXB0b3Iuc3lt
Ym9sLCBvYmplY3RHcm91cE5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRlc2Ny
aXB0b3JzOwotICAgIH0KLQotICAgIGdldFByb3BlcnRpZXMob2JqZWN0SWQsIG93blByb3BlcnRp
ZXMsIGdlbmVyYXRlUHJldmlldykKLSAgICB7Ci0gICAgICAgIGxldCBuYXRpdmVHZXR0ZXJzQXNW
YWx1ZXMgPSBmYWxzZTsKLSAgICAgICAgbGV0IGNvbGxlY3Rpb25Nb2RlID0gb3duUHJvcGVydGll
cyA/IEluamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlLk93blByb3BlcnRpZXMgOiBJbmplY3Rl
ZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5BbGxQcm9wZXJ0aWVzOwotICAgICAgICByZXR1cm4gdGhp
cy5fZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgY29sbGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmll
dywgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKTsKLSAgICB9Ci0KLSAgICBnZXREaXNwbGF5YWJsZVBy
b3BlcnRpZXMob2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldykKLSAgICB7Ci0gICAgICAgIGxldCBu
YXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0cnVlOwotICAgICAgICBsZXQgY29sbGVjdGlvbk1vZGUg
PSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRT
Y3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0aXZlR2V0dGVyUHJvcGVydGllczsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0
ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7Ci0gICAgfQotCi0gICAgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcpCi0gICAgewotICAgICAgICBs
ZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAgICAg
ICAgbGV0IG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKLSAgICAg
ICAgbGV0IG9iamVjdEdyb3VwTmFtZSA9IHRoaXMuX2lkVG9PYmplY3RHcm91cE5hbWVbcGFyc2Vk
T2JqZWN0SWQuaWRdOwotCi0gICAgICAgIGlmICghdGhpcy5faXNEZWZpbmVkKG9iamVjdCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGlzU3ltYm9sKG9iamVjdCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbGV0IGRlc2NyaXB0b3JzID0g
dGhpcy5faW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7Ci0gICAgICAgIGlmICgh
ZGVzY3JpcHRvcnMpCi0gICAgICAgICAgICByZXR1cm4gW107Ci0KLSAgICAgICAgLy8gR28gb3Zl
ciBwcm9wZXJ0aWVzLCB3cmFwIG9iamVjdCB2YWx1ZXMuCi0gICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGxldCBkZXNjcmlw
dG9yID0gZGVzY3JpcHRvcnNbaV07Ci0gICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlw
dG9yKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB0aGlzLl93cmFwT2JqZWN0
KGRlc2NyaXB0b3IudmFsdWUsIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmll
dyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnM7Ci0gICAgfQotCi0g
ICAgZ2V0Q29sbGVjdGlvbkVudHJpZXMob2JqZWN0SWQsIG9iamVjdEdyb3VwTmFtZSwgc3RhcnRJ
bmRleCwgbnVtYmVyVG9GZXRjaCkKLSAgICB7Ci0gICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9
IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICBsZXQgb2JqZWN0ID0gdGhp
cy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwotICAgICAgICBvYmplY3RHcm91cE5hbWUg
PSBvYmplY3RHcm91cE5hbWUgfHwgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmpl
Y3RJZC5pZF07Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9pc0RlZmluZWQob2JqZWN0KSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gIm9iamVjdCIp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbGV0IGVudHJpZXMgPSB0aGlzLl9lbnRy
aWVzKG9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUob2JqZWN0KSwgc3RhcnRJbmRl
eCwgbnVtYmVyVG9GZXRjaCk7Ci0gICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChmdW5jdGlvbihl
bnRyeSkgewotICAgICAgICAgICAgZW50cnkudmFsdWUgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9i
amVjdChlbnRyeS52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICBpZiAoImtleSIgaW4gZW50cnkpCi0gICAgICAgICAgICAgICAgZW50cnkua2V5ID0gaW5q
ZWN0ZWRTY3JpcHQuX3dyYXBPYmplY3QoZW50cnkua2V5LCBvYmplY3RHcm91cE5hbWUsIGZhbHNl
LCB0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiBlbnRyeTsKLSAgICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgc2F2ZVJlc3VsdChjYWxsQXJndW1lbnRKU09OKQotICAgIHsKLSAgICAgICAgdGhpcy5f
c2F2ZWRSZXN1bHRJbmRleCA9IDA7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxldCBj
YWxsQXJndW1lbnQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgY2FsbEFyZ3Vt
ZW50SlNPTiArICIpIik7Ci0gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLl9yZXNvbHZlQ2Fs
bEFyZ3VtZW50KGNhbGxBcmd1bWVudCk7Ci0gICAgICAgICAgICB0aGlzLl9zYXZlUmVzdWx0KHZh
bHVlKTsKLSAgICAgICAgfSBjYXRjaCAoZSkge30KLQotICAgICAgICByZXR1cm4gdGhpcy5fc2F2
ZWRSZXN1bHRJbmRleDsKLSAgICB9Ci0KLSAgICBnZXRGdW5jdGlvbkRldGFpbHMoZnVuY3Rpb25J
ZCkKLSAgICB7Ci0gICAgICAgIGxldCBwYXJzZWRGdW5jdGlvbklkID0gdGhpcy5fcGFyc2VPYmpl
Y3RJZChmdW5jdGlvbklkKTsKLSAgICAgICAgbGV0IGZ1bmMgPSB0aGlzLl9vYmplY3RGb3JJZChw
YXJzZWRGdW5jdGlvbklkKTsKLSAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rpb24i
KQotICAgICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBieSBpZC4iOwot
ICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGZ1bmMpOwotICAg
IH0KLQotICAgIHJlbGVhc2VPYmplY3Qob2JqZWN0SWQpCi0gICAgewotICAgICAgICBsZXQgcGFy
c2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAgdGhp
cy5fcmVsZWFzZU9iamVjdChwYXJzZWRPYmplY3RJZC5pZCk7Ci0gICAgfQotCiAgICAgX3JlbGVh
c2VPYmplY3QoaWQpCiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5faWRUb1dyYXBwZWRPYmpl
Y3RbaWRdOwogICAgICAgICBkZWxldGUgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtpZF07CiAg
ICAgfQogCi0gICAgZXZhbHVhdGUoZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluamVjdENvbW1h
bmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpCisg
ICAgX3dyYXBPYmplY3Qob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBn
ZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2V2YWx1YXRlQW5kV3JhcChJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRl
bnNpb24sIEluamVjdGVkU2NyaXB0SG9zdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGZhbHNl
LCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0KTsKLSAgICB9Ci0KLSAgICBjYWxsRnVuY3Rpb25PbihvYmplY3RJZCwgZXhwcmVz
c2lvbiwgYXJncywgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQotICAgIHsKLSAgICAg
ICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7Ci0g
ICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7Ci0g
ICAgICAgIGlmICghdGhpcy5faXNEZWZpbmVkKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
IkNvdWxkIG5vdCBmaW5kIG9iamVjdCB3aXRoIGdpdmVuIGlkIjsKLQotICAgICAgICBpZiAoYXJn
cykgewotICAgICAgICAgICAgbGV0IHJlc29sdmVkQXJncyA9IFtdOwotICAgICAgICAgICAgbGV0
IGNhbGxBcmdzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKGFyZ3MpOwotICAgICAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsQXJncy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXJnc1tpXSA9IHRoaXMu
X3Jlc29sdmVDYWxsQXJndW1lbnQoY2FsbEFyZ3NbaV0pOwotICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICB0cnkgewotICAg
ICAgICAgICAgbGV0IG9iamVjdEdyb3VwID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJz
ZWRPYmplY3RJZC5pZF07Ci0gICAgICAgICAgICBsZXQgZnVuYyA9IEluamVjdGVkU2NyaXB0SG9z
dC5ldmFsdWF0ZSgiKCIgKyBleHByZXNzaW9uICsgIikiKTsKLSAgICAgICAgICAgIGlmICh0eXBl
b2YgZnVuYyAhPT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgICAgICByZXR1cm4gIkdpdmVuIGV4
cHJlc3Npb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gYSBmdW5jdGlvbiI7Ci0KLSAgICAgICAgICAg
IHJldHVybiB7Ci0gICAgICAgICAgICAgICAgd2FzVGhyb3duOiBmYWxzZSwKLSAgICAgICAgICAg
ICAgICByZXN1bHQ6IHRoaXMuX3dyYXBPYmplY3QoZnVuYy5hcHBseShvYmplY3QsIHJlc29sdmVk
QXJncyksIG9iamVjdEdyb3VwLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcpCi0gICAg
ICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVP
YmplY3Qob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBnZW5lcmF0ZVBy
ZXZpZXcsIGNvbHVtbk5hbWVzKTsKICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2NyZWF0ZVRocm93blZhbHVlKGUsIG9iamVjdEdyb3VwKTsKKyAgICAgICAg
ICAgIGxldCBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSBpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUoZSk7CisgICAgICAgICAgICB9
IGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIjxmYWlsZWQgdG8g
Y29udmVydCBleGNlcHRpb24gdG8gc3RyaW5nPiI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gbmV3IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdChkZXNjcmlwdGlvbik7CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBfZmFsbGJhY2tXcmFwcGVyKG9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGxldCByZXN1bHQgPSB7fTsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSB0eXBlb2Ygb2Jq
ZWN0OworICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQorICAgICAgICAgICAg
cmVzdWx0LnZhbHVlID0gb2JqZWN0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQu
ZGVzY3JpcHRpb24gPSB0b1N0cmluZyhvYmplY3QpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKwogICAgIF9yZXNvbHZlQ2FsbEFyZ3VtZW50KGNhbGxBcmd1bWVudEpTT04pCiAgICAg
ewogICAgICAgICBpZiAoInZhbHVlIiBpbiBjYWxsQXJndW1lbnRKU09OKQpAQCAtNDEzLDcgKzQ0
MSw3IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAg
ICAgICAgICAgdGhyb3cgIkFyZ3VtZW50cyBzaG91bGQgYmVsb25nIHRvIHRoZSBzYW1lIEphdmFT
Y3JpcHQgd29ybGQgYXMgdGhlIHRhcmdldCBvYmplY3QuIjsKIAogICAgICAgICAgICAgbGV0IHJl
c29sdmVkQXJnID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkQXJnSWQpOwotICAgICAgICAgICAg
aWYgKCF0aGlzLl9pc0RlZmluZWQocmVzb2x2ZWRBcmcpKQorICAgICAgICAgICAgaWYgKCFpc0Rl
ZmluZWQocmVzb2x2ZWRBcmcpKQogICAgICAgICAgICAgICAgIHRocm93ICJDb3VsZCBub3QgZmlu
ZCBvYmplY3Qgd2l0aCBnaXZlbiBpZCI7CiAKICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZEFy
ZzsKQEAgLTQyMiw2ICs0NTAsMTggQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0
ZWRTY3JpcHQKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICB9CiAKKyAgICBfY3JlYXRl
VGhyb3duVmFsdWUodmFsdWUsIG9iamVjdEdyb3VwKQorICAgIHsKKyAgICAgICAgbGV0IHJlbW90
ZU9iamVjdCA9IHRoaXMuX3dyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwKTsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJlbW90ZU9iamVjdC5kZXNjcmlwdGlvbiA9IHRvU3RyaW5nRGVz
Y3JpcHRpb24odmFsdWUpOworICAgICAgICB9IGNhdGNoIChlKSB7fQorICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgd2FzVGhyb3duOiB0cnVlLAorICAgICAgICAgICAgcmVzdWx0OiByZW1v
dGVPYmplY3QKKyAgICAgICAgfTsKKyAgICB9CisKICAgICBfZXZhbHVhdGVBbmRXcmFwKGV2YWxG
dW5jdGlvbiwgb2JqZWN0LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaXNFdmFsT25DYWxsRnJh
bWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcs
IHNhdmVSZXN1bHQpCiAgICAgewogICAgICAgICB0cnkgewpAQCAtNDQxLDE4ICs0ODEsNiBAQCBs
ZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICB9CiAgICAg
fQogCi0gICAgX2NyZWF0ZVRocm93blZhbHVlKHZhbHVlLCBvYmplY3RHcm91cCkKLSAgICB7Ci0g
ICAgICAgIGxldCByZW1vdGVPYmplY3QgPSB0aGlzLl93cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZW1vdGVPYmplY3QuZGVzY3JpcHRp
b24gPSB0b1N0cmluZ0Rlc2NyaXB0aW9uKHZhbHVlKTsKLSAgICAgICAgfSBjYXRjaCAoZSkge30K
LSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHdhc1Rocm93bjogdHJ1ZSwKLSAgICAgICAg
ICAgIHJlc3VsdDogcmVtb3RlT2JqZWN0Ci0gICAgICAgIH07Ci0gICAgfQotCiAgICAgX2V2YWx1
YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHByZXNzaW9uLCBpc0V2
YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1bHQpCiAgICAgewog
ICAgICAgICBsZXQgY29tbWFuZExpbmVBUEkgPSBudWxsOwpAQCAtNDY5LDI4ICs0OTcsNiBAQCBs
ZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAotICAgIHdyYXBDYWxsRnJhbWVzKGNhbGxGcmFtZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghY2FsbEZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGxldCByZXN1bHQgPSBbXTsKLSAgICAgICAgbGV0IGRlcHRoID0gMDsKLSAgICAgICAgZG8g
ewotICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVBy
b3h5KGRlcHRoKyssIGNhbGxGcmFtZSkpOwotICAgICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZy
YW1lLmNhbGxlcjsKLSAgICAgICAgfSB3aGlsZSAoY2FsbEZyYW1lKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBldmFsdWF0ZU9uQ2FsbEZyYW1lKHRvcENhbGxGcmFtZSwg
Y2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQ
SSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQotICAgIHsKLSAg
ICAgICAgbGV0IGNhbGxGcmFtZSA9IHRoaXMuX2NhbGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwg
Y2FsbEZyYW1lSWQpOwotICAgICAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biAiQ291bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3aXRoIGdpdmVuIGlkIjsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRl
bnNpb24sIGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIHRydWUsIGluamVjdENv
bW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQp
OwotICAgIH0KLQogICAgIF9jYWxsRnJhbWVGb3JJZCh0b3BDYWxsRnJhbWUsIGNhbGxGcmFtZUlk
KQogICAgIHsKICAgICAgICAgbGV0IHBhcnNlZENhbGxGcmFtZUlkID0gSW5qZWN0ZWRTY3JpcHRI
b3N0LmV2YWx1YXRlKCIoIiArIGNhbGxGcmFtZUlkICsgIikiKTsKQEAgLTUwMSwzNiArNTA3LDM3
IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgIHJl
dHVybiBjYWxsRnJhbWU7CiAgICAgfQogCi0gICAgX29iamVjdEZvcklkKG9iamVjdElkKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W29iamVjdElkLmlkXTsK
LSAgICB9Ci0KLSAgICBmaW5kT2JqZWN0QnlJZChvYmplY3RJZCkKKyAgICBfZ2V0UHJvcGVydGll
cyhvYmplY3RJZCwgY29sbGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmlldywgbmF0aXZlR2V0dGVy
c0FzVmFsdWVzKQogICAgIHsKICAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFy
c2VPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RGb3JJZChw
YXJzZWRPYmplY3RJZCk7Ci0gICAgfQorICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0
Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0R3JvdXBOYW1lID0gdGhp
cy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CiAKLSAgICBtb2R1bGUo
bmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tb2R1bGVzW25hbWVdOwotICAgIH0K
KyAgICAgICAgaWYgKCFpc0RlZmluZWQob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGluamVjdE1vZHVsZShuYW1lLCBzb3VyY2UsIGhvc3QpCi0gICAgewotICAgICAg
ICBkZWxldGUgdGhpcy5fbW9kdWxlc1tuYW1lXTsKKyAgICAgICAgaWYgKGlzU3ltYm9sKG9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgbGV0IG1vZHVsZUZ1bmN0
aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIpIik7Ci0g
ICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKLSAgICAg
ICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkKLSAgICAgICAgICAgICAg
ICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2ViIEluc3BlY3RvciBlcnJv
cjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBldmFsdWF0aW9uIiwgbmFt
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgbGV0IGRlc2NyaXB0b3JzID0g
dGhpcy5fcHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIGNvbGxlY3Rpb25Nb2RlLCBuYXRpdmVH
ZXR0ZXJzQXNWYWx1ZXMpOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzY3JpcHRv
cnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gZGVzY3JpcHRv
cnNbaV07CisgICAgICAgICAgICBpZiAoImdldCIgaW4gZGVzY3JpcHRvcikKKyAgICAgICAgICAg
ICAgICBkZXNjcmlwdG9yLmdldCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci5nZXQsIG9i
amVjdEdyb3VwTmFtZSk7CisgICAgICAgICAgICBpZiAoInNldCIgaW4gZGVzY3JpcHRvcikKKyAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRv
ci5zZXQsIG9iamVjdEdyb3VwTmFtZSk7CisgICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNj
cmlwdG9yKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB0aGlzLl93cmFwT2Jq
ZWN0KGRlc2NyaXB0b3IudmFsdWUsIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJl
dmlldyk7CisgICAgICAgICAgICBpZiAoISgiY29uZmlndXJhYmxlIiBpbiBkZXNjcmlwdG9yKSkK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IGZhbHNlOworICAgICAg
ICAgICAgaWYgKCEoImVudW1lcmFibGUiIGluIGRlc2NyaXB0b3IpKQorICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCJzeW1ib2wi
IGluIGRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zeW1ib2wgPSB0aGlz
Ll93cmFwT2JqZWN0KGRlc2NyaXB0b3Iuc3ltYm9sLCBvYmplY3RHcm91cE5hbWUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5zcGVjdGVk
R2xvYmFsT2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZEdsb2JhbE9iamVjdCwg
aW5qZWN0ZWRTY3JpcHRJZCwgdGhpcywgaG9zdCk7Ci0gICAgICAgIHRoaXMuX21vZHVsZXNbbmFt
ZV0gPSBtb2R1bGU7Ci0gICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgICAgIHJldHVybiBkZXNj
cmlwdG9yczsKICAgICB9CiAKICAgICBfaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVj
dCwgY29tcGxldGVEZXNjcmlwdG9yKQpAQCAtNjY2LDcgKzY3Myw3IEBAIGxldCBJbmplY3RlZFNj
cmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgICAgICBpc0FycmF5TGlrZSA9IGlu
amVjdGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCkgPT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2Jq
ZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+IDA7CiAgICAgICAgIH0gY2F0Y2goZSkge30K
IAotICAgICAgICBmb3IgKGxldCBvID0gb2JqZWN0OyB0aGlzLl9pc0RlZmluZWQobyk7IG8gPSBP
YmplY3QuZ2V0UHJvdG90eXBlT2YobykpIHsKKyAgICAgICAgZm9yIChsZXQgbyA9IG9iamVjdDsg
aXNEZWZpbmVkKG8pOyBvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pKSB7CiAgICAgICAgICAg
ICBsZXQgaXNPd25Qcm9wZXJ0eSA9IG8gPT09IG9iamVjdDsKIAogICAgICAgICAgICAgaWYgKGlz
QXJyYXlMaWtlICYmIGlzT3duUHJvcGVydHkpCkBAIC02OTAsMjYgKzY5NywxNSBAQCBsZXQgSW5q
ZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAgICByZXR1cm4gZGVzY3Jp
cHRvcnM7CiAgICAgfQogCi0gICAgX2lzRGVmaW5lZChvYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gISFvYmplY3QgfHwgdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpOwotICAg
IH0KLQotICAgIF9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCkKLSAgICB7Ci0gICAgICAgIC8v
IGRvY3VtZW50LmFsbCBpcyByZXBvcnRlZCBhcyB1bmRlZmluZWQsIGJ1dCB3ZSBzdGlsbCB3YW50
IHRvIHByb2Nlc3MgaXQuCi0gICAgICAgIHJldHVybiAodHlwZW9mIG9iamVjdCA9PT0gInVuZGVm
aW5lZCIpICYmIEluamVjdGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCk7
Ci0gICAgfQotCiAgICAgX3N1YnR5cGUob2JqKQogICAgIHsKICAgICAgICAgaWYgKG9iaiA9PT0g
bnVsbCkKICAgICAgICAgICAgIHJldHVybiAibnVsbCI7CiAKLSAgICAgICAgaWYgKHRoaXMuaXNQ
cmltaXRpdmVWYWx1ZShvYmopIHx8IGlzU3ltYm9sKG9iaikpCisgICAgICAgIGlmIChpc1ByaW1p
dGl2ZVZhbHVlKG9iaikgfHwgaXNTeW1ib2wob2JqKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
OwogCi0gICAgICAgIGlmICh0aGlzLl9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iaikpCisgICAgICAg
IGlmIChJbmplY3RlZFNjcmlwdEhvc3QuaXNIVE1MQWxsQ29sbGVjdGlvbihvYmopKQogICAgICAg
ICAgICAgcmV0dXJuICJhcnJheSI7CiAKICAgICAgICAgbGV0IHByZWNpc2VUeXBlID0gSW5qZWN0
ZWRTY3JpcHRIb3N0LnN1YnR5cGUob2JqKTsKQEAgLTcyNSwxMSArNzIxLDYgQEAgbGV0IEluamVj
dGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgcmV0dXJuIG51bGw7CiAg
ICAgfQogCi0gICAgX2NsYXNzUHJldmlldyhjbGFzc0NvbnN0cnVjdG9yVmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gImNsYXNzICIgKyBjbGFzc0NvbnN0cnVjdG9yVmFsdWUubmFtZTsKLSAg
ICB9Ci0KICAgICBfbm9kZVByZXZpZXcobm9kZSkKICAgICB7CiAgICAgICAgIGxldCBpc1hNTERv
Y3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50ICYmICEhbm9kZS5vd25lckRvY3VtZW50LnhtbFZl
cnNpb247CkBAIC03NjEsNyArNzUyLDcgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5q
ZWN0ZWRTY3JpcHQKIAogICAgIF9kZXNjcmliZShvYmopCiAgICAgewotICAgICAgICBpZiAodGhp
cy5pc1ByaW1pdGl2ZVZhbHVlKG9iaikpCisgICAgICAgIGlmIChpc1ByaW1pdGl2ZVZhbHVlKG9i
aikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICBpZiAoaXNTeW1ib2wob2Jq
KSkKQEAgLTkwMywxMyArODk0LDYgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0
ZWRTY3JpcHQKICAgICB9CiB9CiAKLUluamVjdGVkU2NyaXB0LnByaW1pdGl2ZVR5cGVzID0gewot
ICAgIHVuZGVmaW5lZDogdHJ1ZSwKLSAgICBib29sZWFuOiB0cnVlLAotICAgIG51bWJlcjogdHJ1
ZSwKLSAgICBzdHJpbmc6IHRydWUsCi19OwotCiBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9k
ZSA9IHsKICAgICBPd25Qcm9wZXJ0aWVzOiAxIDw8IDAsICAgICAgICAgIC8vIG93biBwcm9wZXJ0
aWVzLgogICAgIE5hdGl2ZUdldHRlclByb3BlcnRpZXM6IDEgPDwgMSwgLy8gbmF0aXZlIGdldHRl
ciBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCkBAIC05MTgsMTYgKzkwMiwxOCBA
QCBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZSA9IHsKIAogdmFyIGluamVjdGVkU2NyaXB0
ID0gbmV3IEluamVjdGVkU2NyaXB0OwogCisvLyAtLS0tLS0tCisKIEluamVjdGVkU2NyaXB0LlJl
bW90ZU9iamVjdCA9IGNsYXNzIFJlbW90ZU9iamVjdAogewogICAgIGNvbnN0cnVjdG9yKG9iamVj
dCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1
bW5OYW1lcykKICAgICB7CiAgICAgICAgIHRoaXMudHlwZSA9IHR5cGVvZiBvYmplY3Q7CiAKLSAg
ICAgICAgaWYgKHRoaXMudHlwZSA9PT0gInVuZGVmaW5lZCIgJiYgaW5qZWN0ZWRTY3JpcHQuX2lz
SFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KSkKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gInVu
ZGVmaW5lZCIgJiYgSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0
KSkKICAgICAgICAgICAgIHRoaXMudHlwZSA9ICJvYmplY3QiOwogCi0gICAgICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5pc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkgfHwgb2JqZWN0ID09PSBudWxsIHx8
IGZvcmNlVmFsdWVUeXBlKSB7CisgICAgICAgIGlmIChpc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkg
fHwgb2JqZWN0ID09PSBudWxsIHx8IGZvcmNlVmFsdWVUeXBlKSB7CiAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBzZW5kIHVuZGVmaW5lZCB2YWx1ZXMgb3ZlciBKU09OLgogICAgICAgICAgICAgaWYg
KHRoaXMudHlwZSAhPT0gInVuZGVmaW5lZCIpCiAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9
IG9iamVjdDsKQEAgLTk3MSw5ICs5NTcsMjMgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0
ID0gY2xhc3MgUmVtb3RlT2JqZWN0CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICB0aGlzLnByZXZpZXcgPSB0aGlzLl9nZW5lcmF0ZVByZXZpZXcob2JqZWN0LCB1bmRlZmluZWQs
IGNvbHVtbk5hbWVzKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgIH0KIAorICAgIC8vIFN0
YXRpYworCisgICAgc3RhdGljIGNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1ZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKKyAgICB7CisgICAgICAgIGxldCByZW1vdGVPYmpl
Y3QgPSBuZXcgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0KHZhbHVlLCB1bmRlZmluZWQsIGZh
bHNlLCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKHJlbW90ZU9i
amVjdC5vYmplY3RJZCkKKyAgICAgICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VPYmplY3Qo
cmVtb3RlT2JqZWN0Lm9iamVjdElkKTsKKyAgICAgICAgaWYgKHJlbW90ZU9iamVjdC5jbGFzc1By
b3RvdHlwZSAmJiByZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUub2JqZWN0SWQpCisgICAgICAg
ICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0KHJlbW90ZU9iamVjdC5jbGFzc1Byb3Rv
dHlwZS5vYmplY3RJZCk7CisgICAgICAgIHJldHVybiByZW1vdGVPYmplY3QucHJldmlldyB8fCBy
ZW1vdGVPYmplY3QuX2VtcHR5UHJldmlldygpOworICAgIH0KKworICAgIC8vIFByaXZhdGUKKwog
ICAgIF9pbml0aWFsUHJldmlldygpCiAgICAgewogICAgICAgICBsZXQgcHJldmlldyA9IHsKQEAg
LTExMTUsMTIgKzExMTUsMTIgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0ID0gY2xhc3Mg
UmVtb3RlT2JqZWN0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8v
IEZpeCB0eXBlIG9mIGRvY3VtZW50LmFsbC4KLSAgICAgICAgICAgIGlmICh0eXBlID09PSAidW5k
ZWZpbmVkIiAmJiBpbmplY3RlZFNjcmlwdC5faXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1ZSkpCisg
ICAgICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24odmFs
dWUpKQogICAgICAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKIAogICAgICAgICAgICAgLy8g
UHJpbWl0aXZlLgogICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gMTAwOwotICAgICAgICAg
ICAgaWYgKEluamVjdGVkU2NyaXB0LnByaW1pdGl2ZVR5cGVzW3R5cGVdKSB7CisgICAgICAgICAg
ICBpZiAoaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBpZiAodHlw
ZSA9PT0gInN0cmluZyIgJiYgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gdGhpcy5fYWJicmV2aWF0ZVN0cmluZyh2YWx1ZSwgbWF4TGVuZ3Ro
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgcHJldmlldy5sb3NzbGVzcyA9IGZhbHNlOwpA
QCAtMTIzOCw3ICsxMjM4LDcgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0ID0gY2xhc3Mg
UmVtb3RlT2JqZWN0CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gUHJp
bWl0aXZlLgotICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaXNQcmltaXRpdmVWYWx1ZShvYmpl
Y3QpIHx8IGlzU3ltYm9sKG9iamVjdCkpCisgICAgICAgIGlmIChpc1ByaW1pdGl2ZVZhbHVlKG9i
amVjdCkgfHwgaXNTeW1ib2wob2JqZWN0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgICAgIC8vIE51bGwuCkBAIC0xMjk3LDE2ICsxMjk3LDcgQEAgSW5qZWN0ZWRTY3JpcHQuUmVt
b3RlT2JqZWN0ID0gY2xhc3MgUmVtb3RlT2JqZWN0CiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlw
dC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlID0gZnVuY3Rpb24odmFs
dWUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCi17Ci0gICAgbGV0IHJlbW90ZU9iamVj
dCA9IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QodmFsdWUsIHVuZGVmaW5lZCwgZmFs
c2UsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpOwotICAgIGlmIChyZW1vdGVPYmplY3Qu
b2JqZWN0SWQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VPYmplY3QocmVtb3RlT2Jq
ZWN0Lm9iamVjdElkKTsKLSAgICBpZiAocmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90eXBlICYmIHJl
bW90ZU9iamVjdC5jbGFzc1Byb3RvdHlwZS5vYmplY3RJZCkKLSAgICAgICAgaW5qZWN0ZWRTY3Jp
cHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUub2JqZWN0SWQpOwot
ICAgIHJldHVybiByZW1vdGVPYmplY3QucHJldmlldyB8fCByZW1vdGVPYmplY3QuX2VtcHR5UHJl
dmlldygpOwotfTsKLQorLy8gLS0tLS0tLQogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94
eSA9IGZ1bmN0aW9uKG9yZGluYWwsIGNhbGxGcmFtZSkKIHsKQEAgLTEzNjAsNiArMTM1MSw3IEBA
IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5Ll9jcmVhdGVTY29wZUpzb24gPSBmdW5jdGlv
bihvYmplY3QsIHtuYW1lLCB0eXBlLCBsCiAgICAgcmV0dXJuIHNjb3BlOwogfQogCisvLyAtLS0t
LS0tCiAKIGZ1bmN0aW9uIGJpbmQoZnVuYywgdGhpc09iamVjdCwgLi4ub3V0ZXJBcmdzKQogewo=
</data>
<flag name="review"
          id="336605"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313982</attachid>
            <date>2017-06-27 20:43:40 -0700</date>
            <delta_ts>2017-07-18 15:46:22 -0700</delta_ts>
            <desc>[PATCH] Part 4 - Rename RemoteObject, move more code around, final tweaks</desc>
            <filename>step-4.patch</filename>
            <type>text/plain</type>
            <size>23372</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IDkwMjRjZDMxM2Q3OGQ1ZWRmMmQ0MmUwZmE4ZjU3YWMzMjdlN2VmYzAKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgSnVuIDI3IDIw
OjM5OjM1IDIwMTcgLTA3MDAKCiAgICBMT0NBTDogU3RlcCA0IC0gUmVuYW1lIFJlbW90ZU9iamVj
dCBhbmQgbW92ZSBtb3JlIGNvZGUKCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwppbmRleCA1NWFhZTJjNzEwNi4uOTJj
YTZmYjQyODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcwpAQCAtODIsNyArODIsNyBAQCBmdW5jdGlvbiBpc1By
aW1pdGl2ZVZhbHVlKHZhbHVlKQogICAgIGNhc2UgInVuZGVmaW5lZCI6CiAgICAgICAgIHJldHVy
biAhSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24odmFsdWUpOwogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBAIGxldCBJbmplY3RlZFNjcmlw
dCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAgICAgICByZXR1cm4gIkNvdWxkIG5vdCBm
aW5kIG9iamVjdCB3aXRoIGdpdmVuIGlkIjsKIAogICAgICAgICBsZXQgcmVzb2x2ZWRBcmdzID0g
W107Ci0gICAgICAgIGlmIChhcmdzKSB7ICAgIAorICAgICAgICBpZiAoYXJncykgewogICAgICAg
ICAgICAgbGV0IGNhbGxBcmdzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKGFyZ3MpOwog
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsQXJncy5sZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0xNDQsNyArMTQ0LDcgQEAgbGV0IEluamVjdGVkU2Ny
aXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKIAogICAgICAgICAgICAgcmV0dXJuIHsKICAgICAg
ICAgICAgICAgICB3YXNUaHJvd246IGZhbHNlLAotICAgICAgICAgICAgICAgIHJlc3VsdDogdGhp
cy5fd3JhcE9iamVjdChmdW5jLmFwcGx5KG9iamVjdCwgcmVzb2x2ZWRBcmdzKSwgb2JqZWN0R3Jv
dXBOYW1lLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcpCisgICAgICAgICAgICAgICAg
cmVzdWx0OiBSZW1vdGVPYmplY3QuY3JlYXRlKGZ1bmMuYXBwbHkob2JqZWN0LCByZXNvbHZlZEFy
Z3MpLCBvYmplY3RHcm91cE5hbWUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKICAg
ICAgICAgICAgIH07CiAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmplY3RHcm91cE5hbWUpOwpAQCAtMTU3LDcgKzE1
Nyw3IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAgICAgICAg
IGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CiAgICAgICAg
IGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAiZnVuY3Rpb24iKQogICAgICAgICAgICAgcmV0dXJuICJD
YW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBieSBpZC4iOwotICAgICAgICByZXR1cm4gaW5qZWN0ZWRT
Y3JpcHQuZnVuY3Rpb25EZXRhaWxzKG9iamVjdCk7CisgICAgICAgIHJldHVybiB0aGlzLmZ1bmN0
aW9uRGV0YWlscyhvYmplY3QpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uRGV0YWlscyhmdW5jKQpA
QCAtMTcyLDcgKzE3Miw3IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2Ny
aXB0CiAgICAgewogICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVj
dElkKG9iamVjdElkKTsKICAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBh
cnNlZE9iamVjdElkKTsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVj
dC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUob2JqZWN0LCB0cnVlKTsKKyAgICAgICAgcmV0
dXJuIFJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUob2JqZWN0LCB0cnVl
KTsKICAgICB9CiAKICAgICBnZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBvd25Qcm9wZXJ0aWVzLCBn
ZW5lcmF0ZVByZXZpZXcpCkBAIC0yMDgsNyArMjA4LDcgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0g
Y2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcmlw
dG9ycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBkZXNjcmlw
dG9yc1tpXTsKICAgICAgICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpCi0gICAgICAg
ICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci52
YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3KTsKKyAgICAgICAg
ICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShkZXNjcmlwdG9y
LnZhbHVlLCBvYmplY3RHcm91cE5hbWUsIGZhbHNlLCBnZW5lcmF0ZVByZXZpZXcpOwogICAgICAg
ICB9CiAKICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwpAQCAtMjI4LDkgKzIyOCw5IEBAIGxl
dCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAKICAgICAgICAgbGV0IGVu
dHJpZXMgPSB0aGlzLl9lbnRyaWVzKG9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUo
b2JqZWN0KSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCk7CiAgICAgICAgIHJldHVybiBlbnRy
aWVzLm1hcChmdW5jdGlvbihlbnRyeSkgewotICAgICAgICAgICAgZW50cnkudmFsdWUgPSBpbmpl
Y3RlZFNjcmlwdC5fd3JhcE9iamVjdChlbnRyeS52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IFJlbW90ZU9iamVjdC5jcmVhdGUo
ZW50cnkudmFsdWUsIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAg
aWYgKCJrZXkiIGluIGVudHJ5KQotICAgICAgICAgICAgICAgIGVudHJ5LmtleSA9IGluamVjdGVk
U2NyaXB0Ll93cmFwT2JqZWN0KGVudHJ5LmtleSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgZW50cnkua2V5ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShlbnRy
eS5rZXksIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJu
IGVudHJ5OwogICAgICAgICB9KTsKICAgICB9CkBAIC0yNjQsOSArMjY0LDEwIEBAIGxldCBJbmpl
Y3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAKICAgICB3cmFwT2JqZWN0KG9iamVj
dCwgZ3JvdXBOYW1lLCBjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGdlbmVyYXRlUHJl
dmlldykKICAgICB7Ci0gICAgICAgIGlmIChjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JhcE9iamVjdChvYmplY3QsIGdyb3VwTmFtZSwg
ZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1dy
YXBwZXIob2JqZWN0KTsKKyAgICAgICAgaWYgKCFjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmpl
Y3QpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tXcmFwcGVyKG9iamVjdCk7CisK
KyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGUob2JqZWN0LCBncm91cE5hbWUsIGZh
bHNlLCBnZW5lcmF0ZVByZXZpZXcpOwogICAgIH0KIAogICAgIHdyYXBUYWJsZShjYW5BY2Nlc3NJ
bnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5zKQpAQCAtMjg4LDEyICsyODksMTIg
QEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgICAg
ICAgICBjb2x1bW5OYW1lcy5wdXNoKHRvU3RyaW5nKGNvbHVtbnNbaV0pKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0KHRhYmxlLCAiY29uc29sZSIsIGZhbHNl
LCB0cnVlLCBjb2x1bW5OYW1lcyk7CisgICAgICAgIHJldHVybiBSZW1vdGVPYmplY3QuY3JlYXRl
KHRhYmxlLCAiY29uc29sZSIsIGZhbHNlLCB0cnVlLCBjb2x1bW5OYW1lcyk7CiAgICAgfQogCiAg
ICAgcHJldmlld1ZhbHVlKHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0LlJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUodmFsdWUsIHRydWUp
OworICAgICAgICByZXR1cm4gUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1
ZSh2YWx1ZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgc2V0RXhjZXB0aW9uVmFsdWUodmFsdWUpCkBA
IC0zNjAsMTEgKzM2MSwxOCBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNj
cmlwdAogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KIAotICAgICAgICBsZXQg
bW9kdWxlID0gbW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIEluamVj
dGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCB0
aGlzLCBob3N0KTsKKyAgICAgICAgbGV0IG1vZHVsZSA9IG1vZHVsZUZ1bmN0aW9uLmNhbGwoaW5z
cGVjdGVkR2xvYmFsT2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3QsIGluc3BlY3RlZEdsb2JhbE9i
amVjdCwgaW5qZWN0ZWRTY3JpcHRJZCwgdGhpcywgUmVtb3RlT2JqZWN0LCBob3N0KTsKICAgICAg
ICAgdGhpcy5fbW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKICAgICAgICAgcmV0dXJuIG1vZHVsZTsK
ICAgICB9CiAKKyAgICAvLyBJbmplY3RlZFNjcmlwdE1vZHVsZSBKYXZhU2NyaXB0IEFQSQorCisg
ICAgaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKKyAgICB9CisKICAgICAvLyBQcml2YXRlCiAKICAgICBfcGFyc2VP
YmplY3RJZChvYmplY3RJZCkKQEAgLTQwMywyMSArNDExLDYgQEAgbGV0IEluamVjdGVkU2NyaXB0
ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9PYmplY3RH
cm91cE5hbWVbaWRdOwogICAgIH0KIAotICAgIF93cmFwT2JqZWN0KG9iamVjdCwgb2JqZWN0R3Jv
dXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKLSAg
ICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdl
bmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpOwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICAgICAgICBsZXQgZGVzY3JpcHRpb247Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0gaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKGUpOwotICAgICAgICAg
ICAgfSBjYXRjaCAoZXgpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICI8ZmFpbGVk
IHRvIGNvbnZlcnQgZXhjZXB0aW9uIHRvIHN0cmluZz4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QoZGVzY3JpcHRpb24p
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgX2ZhbGxiYWNrV3JhcHBlcihvYmplY3QpCiAgICAg
ewogICAgICAgICBsZXQgcmVzdWx0ID0ge307CkBAIC00NTIsNyArNDQ1LDcgQEAgbGV0IEluamVj
dGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKIAogICAgIF9jcmVhdGVUaHJvd25WYWx1
ZSh2YWx1ZSwgb2JqZWN0R3JvdXApCiAgICAgewotICAgICAgICBsZXQgcmVtb3RlT2JqZWN0ID0g
dGhpcy5fd3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgICAgICBsZXQgcmVtb3Rl
T2JqZWN0ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZSh2YWx1ZSwgb2JqZWN0R3JvdXApOwogICAgICAg
ICB0cnkgewogICAgICAgICAgICAgcmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uID0gdG9TdHJpbmdE
ZXNjcmlwdGlvbih2YWx1ZSk7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CkBAIC00NjksNyArNDYy
LDcgQEAgbGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKIAogICAgICAg
ICAgICAgbGV0IHJldHVybk9iamVjdCA9IHsKICAgICAgICAgICAgICAgICB3YXNUaHJvd246IGZh
bHNlLAotICAgICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5fd3JhcE9iamVjdCh0aGlzLl9ldmFs
dWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91cCwgZXhwcmVzc2lvbiwgaXNF
dmFsT25DYWxsRnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBzYXZlUmVzdWx0KSwgb2JqZWN0
R3JvdXAsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKKyAgICAgICAgICAgICAgICBy
ZXN1bHQ6IFJlbW90ZU9iamVjdC5jcmVhdGUodGhpcy5fZXZhbHVhdGVPbihldmFsRnVuY3Rpb24s
IG9iamVjdCwgb2JqZWN0R3JvdXAsIGV4cHJlc3Npb24sIGlzRXZhbE9uQ2FsbEZyYW1lLCBpbmpl
Y3RDb21tYW5kTGluZUFQSSwgc2F2ZVJlc3VsdCksIG9iamVjdEdyb3VwLCByZXR1cm5CeVZhbHVl
LCBnZW5lcmF0ZVByZXZpZXcpCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAoc2F2
ZVJlc3VsdCAmJiB0aGlzLl9zYXZlZFJlc3VsdEluZGV4KQpAQCAtNTI0LDE3ICs1MTcsMTcgQEAg
bGV0IEluamVjdGVkU2NyaXB0ID0gY2xhc3MgSW5qZWN0ZWRTY3JpcHQKICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgbGV0
IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKICAgICAgICAgICAgIGlmICgiZ2V0IiBpbiBk
ZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gdGhpcy5fd3JhcE9i
amVjdChkZXNjcmlwdG9yLmdldCwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICAgICAgICAgICAgICBk
ZXNjcmlwdG9yLmdldCA9IFJlbW90ZU9iamVjdC5jcmVhdGUoZGVzY3JpcHRvci5nZXQsIG9iamVj
dEdyb3VwTmFtZSk7CiAgICAgICAgICAgICBpZiAoInNldCIgaW4gZGVzY3JpcHRvcikKLSAgICAg
ICAgICAgICAgICBkZXNjcmlwdG9yLnNldCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci5z
ZXQsIG9iamVjdEdyb3VwTmFtZSk7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQgPSBS
ZW1vdGVPYmplY3QuY3JlYXRlKGRlc2NyaXB0b3Iuc2V0LCBvYmplY3RHcm91cE5hbWUpOwogICAg
ICAgICAgICAgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBkZXNj
cmlwdG9yLnZhbHVlID0gdGhpcy5fd3JhcE9iamVjdChkZXNjcmlwdG9yLnZhbHVlLCBvYmplY3RH
cm91cE5hbWUsIGZhbHNlLCBnZW5lcmF0ZVByZXZpZXcpOworICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3IudmFsdWUgPSBSZW1vdGVPYmplY3QuY3JlYXRlKGRlc2NyaXB0b3IudmFsdWUsIG9iamVj
dEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7CiAgICAgICAgICAgICBpZiAoISgi
Y29uZmlndXJhYmxlIiBpbiBkZXNjcmlwdG9yKSkKICAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LmNvbmZpZ3VyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKCEoImVudW1lcmFibGUiIGlu
IGRlc2NyaXB0b3IpKQogICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZh
bHNlOwogICAgICAgICAgICAgaWYgKCJzeW1ib2wiIGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5zeW1ib2wgPSB0aGlzLl93cmFwT2JqZWN0KGRlc2NyaXB0b3Iuc3lt
Ym9sLCBvYmplY3RHcm91cE5hbWUpOworICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3ltYm9s
ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShkZXNjcmlwdG9yLnN5bWJvbCwgb2JqZWN0R3JvdXBOYW1l
KTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKQEAgLTY3MCw3ICs2
NjMsNyBAQCBsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAogICAgICAg
ICAvLyBGb3IgYXJyYXkgdHlwZXMgd2l0aCBhIGxhcmdlIGxlbmd0aCB3ZSBhdHRlbXB0IHRvIHNr
aXAgZ2V0T3duUHJvcGVydHlOYW1lcyBhbmQgaW5zdGVhZCBqdXN0IHN1Ymxpc3Qgb2YgaW5kZXhl
cy4KICAgICAgICAgbGV0IGlzQXJyYXlMaWtlID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICBpc0FycmF5TGlrZSA9IGluamVjdGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCkgPT09
ICJhcnJheSIgJiYgaXNGaW5pdGUob2JqZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+IDA7
CisgICAgICAgICAgICBpc0FycmF5TGlrZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCkg
PT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2JqZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+
IDA7CiAgICAgICAgIH0gY2F0Y2goZSkge30KIAogICAgICAgICBmb3IgKGxldCBvID0gb2JqZWN0
OyBpc0RlZmluZWQobyk7IG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobykpIHsKQEAgLTY5Nywx
MDUgKzY5MCw2IEBAIGxldCBJbmplY3RlZFNjcmlwdCA9IGNsYXNzIEluamVjdGVkU2NyaXB0CiAg
ICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKICAgICB9CiAKLSAgICBfc3VidHlwZShvYmopCi0g
ICAgewotICAgICAgICBpZiAob2JqID09PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuICJudWxs
IjsKLQotICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZShvYmopIHx8IGlzU3ltYm9sKG9iaikp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHRI
b3N0LmlzSFRNTEFsbENvbGxlY3Rpb24ob2JqKSkKLSAgICAgICAgICAgIHJldHVybiAiYXJyYXki
OwotCi0gICAgICAgIGxldCBwcmVjaXNlVHlwZSA9IEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBl
KG9iaik7Ci0gICAgICAgIGlmIChwcmVjaXNlVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBwcmVj
aXNlVHlwZTsKLQotICAgICAgICAvLyBGaXJlQnVnJ3MgYXJyYXkgZGV0ZWN0aW9uLgotICAgICAg
ICB0cnkgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3BsaWNlID09PSAiZnVuY3Rpb24i
ICYmIGlzRmluaXRlKG9iai5sZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXki
OwotICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0K
LQotICAgIF9ub2RlUHJldmlldyhub2RlKQotICAgIHsKLSAgICAgICAgbGV0IGlzWE1MRG9jdW1l
bnQgPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93bmVyRG9jdW1lbnQueG1sVmVyc2lv
bjsKLSAgICAgICAgbGV0IG5vZGVOYW1lID0gaXNYTUxEb2N1bWVudCA/IG5vZGUubm9kZU5hbWUg
OiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLm5v
ZGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKLSAgICAgICAg
ICAgIGlmIChub2RlLmlkKQotICAgICAgICAgICAgICAgIHJldHVybiAiPCIgKyBub2RlTmFtZSAr
ICIgaWQ9XCIiICsgbm9kZS5pZCArICJcIj4iOwotICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NM
aXN0Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIGNs
YXNzPVwiIiArIG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrLywgIiAiKSAr
ICJcIj4iOwotICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAiaW5wdXQiICYmIG5vZGUudHlw
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIHR5cGU9XCIiICsg
bm9kZS50eXBlICsgIlwiPiI7Ci0gICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAi
PiI7Ci0KLSAgICAgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRfTk9ERQotICAgICAgICAgICAgcmV0
dXJuIG5vZGVOYW1lICsgIiBcIiIgKyBub2RlLm5vZGVWYWx1ZSArICJcIiI7Ci0KLSAgICAgICAg
Y2FzZSA4OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQotICAgICAgICAgICAgcmV0dXJuICI8IS0tIiAr
IG5vZGUubm9kZVZhbHVlICsgIi0tPiI7Ci0KLSAgICAgICAgY2FzZSAxMDogLy8gTm9kZS5ET0NV
TUVOVF9UWVBFX05PREUKLSAgICAgICAgICAgIHJldHVybiAiPCFET0NUWVBFICIgKyBub2RlTmFt
ZSArICI+IjsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1l
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX2Rlc2NyaWJlKG9iaikKLSAgICB7Ci0gICAgICAg
IGlmIChpc1ByaW1pdGl2ZVZhbHVlKG9iaikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICBpZiAoaXNTeW1ib2wob2JqKSkKLSAgICAgICAgICAgIHJldHVybiB0b1N0cmluZyhv
YmopOwotCi0gICAgICAgIGxldCBzdWJ0eXBlID0gdGhpcy5fc3VidHlwZShvYmopOwotCi0gICAg
ICAgIGlmIChzdWJ0eXBlID09PSAicmVnZXhwIikKLSAgICAgICAgICAgIHJldHVybiB0b1N0cmlu
ZyhvYmopOwotCi0gICAgICAgIGlmIChzdWJ0eXBlID09PSAiZGF0ZSIpCi0gICAgICAgICAgICBy
ZXR1cm4gdG9TdHJpbmcob2JqKTsKLQotICAgICAgICBpZiAoc3VidHlwZSA9PT0gImVycm9yIikK
LSAgICAgICAgICAgIHJldHVybiB0b1N0cmluZyhvYmopOwotCi0gICAgICAgIGlmIChzdWJ0eXBl
ID09PSAicHJveHkiKQotICAgICAgICAgICAgcmV0dXJuICJQcm94eSI7Ci0KLSAgICAgICAgaWYg
KHN1YnR5cGUgPT09ICJub2RlIikKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlUHJldmll
dyhvYmopOwotCi0gICAgICAgIGxldCBjbGFzc05hbWUgPSBJbmplY3RlZFNjcmlwdEhvc3QuaW50
ZXJuYWxDb25zdHJ1Y3Rvck5hbWUob2JqKTsKLSAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJhcnJh
eSIpCi0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwotCi0gICAgICAgIGlmIChzdWJ0eXBl
ID09PSAiaXRlcmF0b3IiICYmIFN5bWJvbC50b1N0cmluZ1RhZyBpbiBvYmopCi0gICAgICAgICAg
ICByZXR1cm4gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107Ci0KLSAgICAgICAgLy8gTm9kZUxpc3Qg
aW4gSlNDIGlzIGEgZnVuY3Rpb24sIGNoZWNrIGZvciBhcnJheSBwcmlvciB0byB0aGlzLgotICAg
ICAgICBpZiAodHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9uIikKLSAgICAgICAgICAgIHJldHVybiBv
YmoudG9TdHJpbmcoKTsKLQotICAgICAgICAvLyBJZiBPYmplY3QsIHRyeSBmb3IgYSBiZXR0ZXIg
bmFtZSBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gIk9i
amVjdCIpIHsKLSAgICAgICAgICAgIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBvYmouY29uc3RydWN0
b3IgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWU7Ci0gICAgICAgICAgICBpZiAoY29uc3RydWN0b3JO
YW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwotICAgIH0KLQogICAgIF9nZXRTZXRFbnRyaWVz
KG9iamVjdCwgc2tpcCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIGxldCBlbnRyaWVz
ID0gW107CkBAIC05MDQsNyArNzk4LDcgQEAgdmFyIGluamVjdGVkU2NyaXB0ID0gbmV3IEluamVj
dGVkU2NyaXB0OwogCiAvLyAtLS0tLS0tCiAKLUluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdCA9
IGNsYXNzIFJlbW90ZU9iamVjdAorbGV0IFJlbW90ZU9iamVjdCA9IGNsYXNzIFJlbW90ZU9iamVj
dAogewogICAgIGNvbnN0cnVjdG9yKG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZhbHVl
VHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcykKICAgICB7CkBAIC05MzAsMTIgKzgy
NCwxMiBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QgPSBjbGFzcyBSZW1vdGVPYmplY3QK
IAogICAgICAgICB0aGlzLm9iamVjdElkID0gaW5qZWN0ZWRTY3JpcHQuX2JpbmQob2JqZWN0LCBv
YmplY3RHcm91cE5hbWUpOwogCi0gICAgICAgIGxldCBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQu
X3N1YnR5cGUob2JqZWN0KTsKKyAgICAgICAgbGV0IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3Vi
dHlwZShvYmplY3QpOwogICAgICAgICBpZiAoc3VidHlwZSkKICAgICAgICAgICAgIHRoaXMuc3Vi
dHlwZSA9IHN1YnR5cGU7CiAKICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBJbmplY3RlZFNjcmlw
dEhvc3QuaW50ZXJuYWxDb25zdHJ1Y3Rvck5hbWUob2JqZWN0KTsKLSAgICAgICAgdGhpcy5kZXNj
cmlwdGlvbiA9IGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpOworICAgICAgICB0aGlz
LmRlc2NyaXB0aW9uID0gUmVtb3RlT2JqZWN0LmRlc2NyaWJlKG9iamVjdCk7CiAKICAgICAgICAg
aWYgKHN1YnR5cGUgPT09ICJhcnJheSIpCiAgICAgICAgICAgICB0aGlzLnNpemUgPSB0eXBlb2Yg
b2JqZWN0Lmxlbmd0aCA9PT0gIm51bWJlciIgPyBvYmplY3QubGVuZ3RoIDogMDsKQEAgLTk0Niw3
ICs4NDAsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QgPSBjbGFzcyBSZW1vdGVPYmpl
Y3QKICAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gIndlYWtzZXQiKQogICAgICAgICAgICAg
dGhpcy5zaXplID0gSW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtTZXRTaXplKG9iamVjdCk7CiAgICAg
ICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJjbGFzcyIpIHsKLSAgICAgICAgICAgIHRoaXMuY2xh
c3NQcm90b3R5cGUgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9iamVjdChvYmplY3QucHJvdG90eXBl
LCBvYmplY3RHcm91cE5hbWUpOworICAgICAgICAgICAgdGhpcy5jbGFzc1Byb3RvdHlwZSA9IFJl
bW90ZU9iamVjdC5jcmVhdGUob2JqZWN0LnByb3RvdHlwZSwgb2JqZWN0R3JvdXBOYW1lKTsKICAg
ICAgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gb2JqZWN0Lm5hbWU7CiAgICAgICAgIH0KIApAQCAt
OTU3LDE0ICs4NTEsMjkgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0ID0gY2xhc3MgUmVt
b3RlT2JqZWN0CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aGlzLnByZXZp
ZXcgPSB0aGlzLl9nZW5lcmF0ZVByZXZpZXcob2JqZWN0LCB1bmRlZmluZWQsIGNvbHVtbk5hbWVz
KTsKICAgICAgICAgfQotCiAgICAgfQogCiAgICAgLy8gU3RhdGljCiAKKyAgICBzdGF0aWMgY3Jl
YXRlKG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2
aWV3LCBjb2x1bW5OYW1lcykKKyAgICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1
cm4gbmV3IFJlbW90ZU9iamVjdChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5
cGUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpOworICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICBsZXQgZGVzY3JpcHRpb247CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gUmVtb3RlT2JqZWN0LmRlc2NyaWJlKGUpOworICAgICAg
ICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICBhbGVydChleC5tZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICI8ZmFpbGVkIHRvIGNvbnZlcnQgZXhjZXB0
aW9uIHRvIHN0cmluZz4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ldyBS
ZW1vdGVPYmplY3QoZGVzY3JpcHRpb24pOworICAgICAgICB9CisgICAgfQorCiAgICAgc3RhdGlj
IGNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1
bW5OYW1lcykKICAgICB7Ci0gICAgICAgIGxldCByZW1vdGVPYmplY3QgPSBuZXcgSW5qZWN0ZWRT
Y3JpcHQuUmVtb3RlT2JqZWN0KHZhbHVlLCB1bmRlZmluZWQsIGZhbHNlLCBnZW5lcmF0ZVByZXZp
ZXcsIGNvbHVtbk5hbWVzKTsKKyAgICAgICAgbGV0IHJlbW90ZU9iamVjdCA9IG5ldyBSZW1vdGVP
YmplY3QodmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFt
ZXMpOwogICAgICAgICBpZiAocmVtb3RlT2JqZWN0Lm9iamVjdElkKQogICAgICAgICAgICAgaW5q
ZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3Qub2JqZWN0SWQpOwogICAgICAg
ICBpZiAocmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90eXBlICYmIHJlbW90ZU9iamVjdC5jbGFzc1By
b3RvdHlwZS5vYmplY3RJZCkKQEAgLTk3Miw2ICs4ODEsMTA1IEBAIEluamVjdGVkU2NyaXB0LlJl
bW90ZU9iamVjdCA9IGNsYXNzIFJlbW90ZU9iamVjdAogICAgICAgICByZXR1cm4gcmVtb3RlT2Jq
ZWN0LnByZXZpZXcgfHwgcmVtb3RlT2JqZWN0Ll9lbXB0eVByZXZpZXcoKTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgc3VidHlwZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVs
bCkKKyAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZl
VmFsdWUodmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
OworCisgICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKworICAgICAgICBsZXQgcHJlY2lz
ZVR5cGUgPSBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZSh2YWx1ZSk7CisgICAgICAgIGlmIChw
cmVjaXNlVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNlVHlwZTsKKworICAgICAgICAv
LyBGaXJlQnVnJ3MgYXJyYXkgZGV0ZWN0aW9uLgorICAgICAgICB0cnkgeworICAgICAgICAgICAg
aWYgKHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT09ICJmdW5jdGlvbiIgJiYgaXNGaW5pdGUodmFsdWUu
bGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKyAgICAgICAgfSBjYXRj
aCAoZSkge30KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBzdGF0aWMgZGVz
Y3JpYmUodmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAoaXNTeW1ib2wodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKTsKKworICAgICAgICBsZXQgc3Vi
dHlwZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKHZhbHVlKTsKKworICAgICAgICBpZiAoc3VidHlw
ZSA9PT0gInJlZ2V4cCIpCisgICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpOworCisg
ICAgICAgIGlmIChzdWJ0eXBlID09PSAiZGF0ZSIpCisgICAgICAgICAgICByZXR1cm4gdG9TdHJp
bmcodmFsdWUpOworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAiZXJyb3IiKQorICAgICAgICAg
ICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKTsKKworICAgICAgICBpZiAoc3VidHlwZSA9PT0gInBy
b3h5IikKKyAgICAgICAgICAgIHJldHVybiAiUHJveHkiOworCisgICAgICAgIGlmIChzdWJ0eXBl
ID09PSAibm9kZSIpCisgICAgICAgICAgICByZXR1cm4gUmVtb3RlT2JqZWN0Lm5vZGVQcmV2aWV3
KHZhbHVlKTsKKworICAgICAgICBsZXQgY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRIb3N0Lmlu
dGVybmFsQ29uc3RydWN0b3JOYW1lKHZhbHVlKTsKKyAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJh
cnJheSIpCisgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOworCisgICAgICAgIGlmIChzdWJ0
eXBlID09PSAiaXRlcmF0b3IiICYmIFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddOworCisgICAgICAgIC8vIE5v
ZGVMaXN0IGluIEpTQyBpcyBhIGZ1bmN0aW9uLCBjaGVjayBmb3IgYXJyYXkgcHJpb3IgdG8gdGhp
cy4KKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS50b1N0cmluZygpOworCisgICAgICAgIC8vIElmIE9iamVjdCwgdHJ5IGZv
ciBhIGJldHRlciBuYW1lIGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAoY2xhc3NO
YW1lID09PSAiT2JqZWN0IikgeworICAgICAgICAgICAgbGV0IGNvbnN0cnVjdG9yTmFtZSA9IHZh
bHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7CisgICAgICAgICAgICBp
ZiAoY29uc3RydWN0b3JOYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5h
bWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2xhc3NOYW1lOworICAgIH0KKworICAg
IHN0YXRpYyBub2RlUHJldmlldyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGlzWE1MRG9jdW1l
bnQgPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93bmVyRG9jdW1lbnQueG1sVmVyc2lv
bjsKKyAgICAgICAgbGV0IG5vZGVOYW1lID0gaXNYTUxEb2N1bWVudCA/IG5vZGUubm9kZU5hbWUg
OiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLm5v
ZGVUeXBlKSB7CisgICAgICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKKyAgICAgICAg
ICAgIGlmIChub2RlLmlkKQorICAgICAgICAgICAgICAgIHJldHVybiAiPCIgKyBub2RlTmFtZSAr
ICIgaWQ9XCIiICsgbm9kZS5pZCArICJcIj4iOworICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NM
aXN0Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIGNs
YXNzPVwiIiArIG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrLywgIiAiKSAr
ICJcIj4iOworICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAiaW5wdXQiICYmIG5vZGUudHlw
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIHR5cGU9XCIiICsg
bm9kZS50eXBlICsgIlwiPiI7CisgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAi
PiI7CisKKyAgICAgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRfTk9ERQorICAgICAgICAgICAgcmV0
dXJuIG5vZGVOYW1lICsgIiBcIiIgKyBub2RlLm5vZGVWYWx1ZSArICJcIiI7CisKKyAgICAgICAg
Y2FzZSA4OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQorICAgICAgICAgICAgcmV0dXJuICI8IS0tIiAr
IG5vZGUubm9kZVZhbHVlICsgIi0tPiI7CisKKyAgICAgICAgY2FzZSAxMDogLy8gTm9kZS5ET0NV
TUVOVF9UWVBFX05PREUKKyAgICAgICAgICAgIHJldHVybiAiPCFET0NUWVBFICIgKyBub2RlTmFt
ZSArICI+IjsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1l
OworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX2luaXRpYWxQcmV2
aWV3KCkKQEAgLTExNDIsMTQgKzExNTAsMTQgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0
ID0gY2xhc3MgUmVtb3RlT2JqZWN0CiAKICAgICAgICAgICAgIC8vIE9iamVjdC4KICAgICAgICAg
ICAgIGxldCBwcm9wZXJ0eSA9IHtuYW1lLCB0eXBlfTsKLSAgICAgICAgICAgIGxldCBzdWJ0eXBl
ID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUodmFsdWUpOworICAgICAgICAgICAgbGV0IHN1YnR5
cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZSh2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoc3VidHlw
ZSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5zdWJ0eXBlID0gc3VidHlwZTsKIAogICAgICAg
ICAgICAgLy8gU2Vjb25kIGxldmVsLgogICAgICAgICAgICAgaWYgKChzZWNvbmRMZXZlbEtleXMg
PT09IG51bGwgfHwgc2Vjb25kTGV2ZWxLZXlzKSB8fCB0aGlzLl9pc1ByZXZpZXdhYmxlT2JqZWN0
KHZhbHVlLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIHdhbnQg
c2Vjb25kTGV2ZWxLZXlzIGZpbHRlciB0byBjb250aW51ZSB3ZSB3b3VsZCBuZWVkIHNvbWUgcmVm
YWN0b3JpbmcuCi0gICAgICAgICAgICAgICAgbGV0IHN1YlByZXZpZXcgPSBJbmplY3RlZFNjcmlw
dC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKHZhbHVlLCB2YWx1ZSAh
PT0gb2JqZWN0LCBzZWNvbmRMZXZlbEtleXMpOworICAgICAgICAgICAgICAgIGxldCBzdWJQcmV2
aWV3ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1ZSwgdmFs
dWUgIT09IG9iamVjdCwgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0
eS52YWx1ZVByZXZpZXcgPSBzdWJQcmV2aWV3OwogICAgICAgICAgICAgICAgIGlmICghc3ViUHJl
dmlldy5sb3NzbGVzcykKICAgICAgICAgICAgICAgICAgICAgcHJldmlldy5sb3NzbGVzcyA9IGZh
bHNlOwpAQCAtMTE2Miw5ICsxMTcwLDkgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0ID0g
Y2xhc3MgUmVtb3RlT2JqZWN0CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJ0eXBlID09PSAi
Y2xhc3MiKQogICAgICAgICAgICAgICAgICAgICAgICAgZnVsbERlc2NyaXB0aW9uID0gImNsYXNz
ICIgKyB2YWx1ZS5uYW1lOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdWJ0eXBlID09
PSAibm9kZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBmdWxsRGVzY3JpcHRpb24gPSBpbmpl
Y3RlZFNjcmlwdC5fbm9kZVByZXZpZXcodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ZnVsbERlc2NyaXB0aW9uID0gUmVtb3RlT2JqZWN0Lm5vZGVQcmV2aWV3KHZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZnVsbERlc2NyaXB0
aW9uID0gaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bGxEZXNjcmlwdGlvbiA9IFJlbW90ZU9iamVjdC5kZXNjcmliZSh2YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fYWJicmV2aWF0ZVN0cmluZyhm
dWxsRGVzY3JpcHRpb24sIG1heExlbmd0aCwgc3VidHlwZSA9PT0gInJlZ2V4cCIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IGRlc2NyaXB0aW9u
OwpAQCAtMTIxMywxNCArMTIyMSwxNCBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QgPSBj
bGFzcyBSZW1vdGVPYmplY3QKICAgICAgICAgfQogCiAgICAgICAgIHByZXZpZXcuZW50cmllcyA9
IGVudHJpZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7Ci0gICAgICAgICAgICBlbnRyeS52YWx1ZSA9
IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUo
ZW50cnkudmFsdWUsIGVudHJ5LnZhbHVlICE9PSBvYmplY3QpOworICAgICAgICAgICAgZW50cnku
dmFsdWUgPSBSZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKGVudHJ5LnZh
bHVlLCBlbnRyeS52YWx1ZSAhPT0gb2JqZWN0KTsKICAgICAgICAgICAgIHVwZGF0ZU1haW5QcmV2
aWV3KGVudHJ5LnZhbHVlKTsKICAgICAgICAgICAgIGlmICgia2V5IiBpbiBlbnRyeSkgewotICAg
ICAgICAgICAgICAgIGVudHJ5LmtleSA9IEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5jcmVh
dGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUoZW50cnkua2V5LCBlbnRyeS5rZXkgIT09IG9iamVjdCk7
CisgICAgICAgICAgICAgICAgZW50cnkua2V5ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFBy
ZXZpZXdGb3JWYWx1ZShlbnRyeS5rZXksIGVudHJ5LmtleSAhPT0gb2JqZWN0KTsKICAgICAgICAg
ICAgICAgICB1cGRhdGVNYWluUHJldmlldyhlbnRyeS5rZXkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgfSk7CiAg
ICAgfQogCiAgICAgX2lzUHJldmlld2FibGVPYmplY3QodmFsdWUsIG9iamVjdCkKQEAgLTEyNTMs
NyArMTI2MSw3IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdCA9IGNsYXNzIFJlbW90ZU9i
amVjdAogICAgICAgICBrbm93bk9iamVjdHMuYWRkKG9iamVjdCk7CiAKICAgICAgICAgLy8gQXJy
YXlzIGFyZSBzaW1wbGUgaWYgdGhleSBoYXZlIDUgb3IgbGVzcyBzaW1wbGUgb2JqZWN0cy4KLSAg
ICAgICAgbGV0IHN1YnR5cGUgPSBpbmplY3RlZFNjcmlwdC5fc3VidHlwZShvYmplY3QpOworICAg
ICAgICBsZXQgc3VidHlwZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCk7CiAgICAgICAg
IGlmIChzdWJ0eXBlID09PSAiYXJyYXkiKSB7CiAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gb2Jq
ZWN0Lmxlbmd0aDsKICAgICAgICAgICAgIGlmIChsZW5ndGggPiA1KQpAQCAtMTMwNSw3ICsxMzEz
LDcgQEAgSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihvcmRpbmFsLCBj
YWxsRnJhbWUpCiAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1l
OwogICAgIHRoaXMubG9jYXRpb24gPSB7c2NyaXB0SWQ6IFN0cmluZyhjYWxsRnJhbWUuc291cmNl
SUQpLCBsaW5lTnVtYmVyOiBjYWxsRnJhbWUubGluZSwgY29sdW1uTnVtYmVyOiBjYWxsRnJhbWUu
Y29sdW1ufTsKICAgICB0aGlzLnNjb3BlQ2hhaW4gPSB0aGlzLl93cmFwU2NvcGVDaGFpbihjYWxs
RnJhbWUpOwotICAgIHRoaXMudGhpcyA9IGluamVjdGVkU2NyaXB0Ll93cmFwT2JqZWN0KGNhbGxG
cmFtZS50aGlzT2JqZWN0LCAiYmFja3RyYWNlIik7CisgICAgdGhpcy50aGlzID0gUmVtb3RlT2Jq
ZWN0LmNyZWF0ZShjYWxsRnJhbWUudGhpc09iamVjdCwgImJhY2t0cmFjZSIpOwogICAgIHRoaXMu
aXNUYWlsRGVsZXRlZCA9IGNhbGxGcmFtZS5pc1RhaWxEZWxldGVkOwogfQogCkBAIC0xMzM1LDcg
KzEzNDMsNyBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fc2NvcGVUeXBlTmFtZXMg
PSB7CiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fY3JlYXRlU2NvcGVKc29uID0gZnVu
Y3Rpb24ob2JqZWN0LCB7bmFtZSwgdHlwZSwgbG9jYXRpb259LCBncm91cElkKQogewogICAgIGxl
dCBzY29wZSA9IHsKLSAgICAgICAgb2JqZWN0OiBpbmplY3RlZFNjcmlwdC5fd3JhcE9iamVjdChv
YmplY3QsIGdyb3VwSWQpLAorICAgICAgICBvYmplY3Q6IFJlbW90ZU9iamVjdC5jcmVhdGUob2Jq
ZWN0LCBncm91cElkKSwKICAgICAgICAgdHlwZTogSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJv
eHkuX3Njb3BlVHlwZU5hbWVzW3R5cGVdLAogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcwppbmRleCA5M2Fj
OGU5NzAxMC4uMjRjNzcwYzA2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKQEAgLTI4LDE0ICsyOCw3IEBACiAK
IC8vIyBzb3VyY2VVUkw9X19JbmplY3RlZFNjcmlwdF9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJj
ZS5qcwogCi0vKioKLSAqIEBwYXJhbSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlw
dEhvc3QKLSAqIEBwYXJhbSB7V2luZG93fSBpbnNwZWN0ZWRXaW5kb3cKLSAqIEBwYXJhbSB7bnVt
YmVyfSBpbmplY3RlZFNjcmlwdElkCi0gKiBAcGFyYW0ge0luamVjdGVkU2NyaXB0fSBpbmplY3Rl
ZFNjcmlwdAotICogQHBhcmFtIHtDb21tYW5kTGluZUFQSUhvc3R9IENvbW1hbmRMaW5lQVBJSG9z
dAotICovCi0oZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBp
bmplY3RlZFNjcmlwdElkLCBpbmplY3RlZFNjcmlwdCwgQ29tbWFuZExpbmVBUElIb3N0KSB7Ciso
ZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNj
cmlwdElkLCBpbmplY3RlZFNjcmlwdCwgUmVtb3RlT2JqZWN0LCBDb21tYW5kTGluZUFQSUhvc3Qp
IHsKIAogLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTIyOTQ+IFdlYiBJbnNwZWN0
b3I6IFBhcnNlIEluamVjdGVkU2NyaXB0U291cmNlIGFzIGEgYnVpbHQtaW4gdG8gZ2V0IGd1YXJh
bnRlZWQgbm9uLXVzZXItb3ZlcnJpZGVuIGJ1aWx0LWlucwogCkBAIC0yMzEsNyArMjI0LDcgQEAg
Q29tbWFuZExpbmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICBjb3B5OiBmdW5jdGlvbihvYmpl
Y3QpCiAgICAgewogICAgICAgICB2YXIgc3RyaW5nOwotICAgICAgICB2YXIgc3VidHlwZSA9IGlu
amVjdGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCk7CisgICAgICAgIHZhciBzdWJ0eXBlID0gUmVt
b3RlT2JqZWN0LnN1YnR5cGUob2JqZWN0KTsKICAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJub2Rl
IikKICAgICAgICAgICAgIHN0cmluZyA9IG9iamVjdC5vdXRlckhUTUw7CiAgICAgICAgIGVsc2Ug
aWYgKHN1YnR5cGUgPT09ICJyZWdleHAiKQpAQCAtMzE1LDEwICszMDgsMTAgQEAgQ29tbWFuZExp
bmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIG9iamVjdElkID0gaW5qZWN0
ZWRTY3JpcHQuX3dyYXBPYmplY3Qob2JqZWN0LCAiIik7CisgICAgICAgIHZhciBvYmplY3RJZCA9
IFJlbW90ZU9iamVjdC5jcmVhdGUob2JqZWN0LCAiIik7CiAgICAgICAgIHZhciBoaW50cyA9IHt9
OwogCi0gICAgICAgIHN3aXRjaCAoaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKG9iamVjdCkpIHsK
KyAgICAgICAgc3dpdGNoIChSZW1vdGVPYmplY3QuZGVzY3JpYmUob2JqZWN0KSkgewogICAgICAg
ICBjYXNlICJEYXRhYmFzZSI6CiAgICAgICAgICAgICB2YXIgZGF0YWJhc2VJZCA9IENvbW1hbmRM
aW5lQVBJSG9zdC5kYXRhYmFzZUlkKG9iamVjdCkKICAgICAgICAgICAgIGlmIChkYXRhYmFzZUlk
KQo=
</data>
<flag name="review"
          id="336606"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313983</attachid>
            <date>2017-06-27 20:49:24 -0700</date>
            <delta_ts>2017-06-27 21:24:46 -0700</delta_ts>
            <desc>[PATCH] Combined - Proposed Fix</desc>
            <filename>combined-1.patch</filename>
            <type>text/plain</type>
            <size>74887</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMWJlZGJiZDA4OS4uNjEzOWM5NTA4YjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAog
MjAxNy0wNi0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IE1vZGVybml6ZSBJbmplY3RlZFNjcmlwdFNvdXJjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczODkwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvbW9k
ZWwvcmVtb3RlLW9iamVjdC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL21vZGVs
L3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgTm93IHRoYXQgd2UgdXNlIGNsYXNz
ZXMsIGltcGxpY2l0bHkgc3RyaWN0IG1vZGUsIHRoZSBjYWxsIGZyYW1lCisgICAgICAgIGZvciBl
dmFsdWF0ZSBnZXRzIHRhaWwgY2FsbCBlbGltaW5hdGVkLgorCisyMDE3LTA2LTI3ICBKb3NlcGgg
UGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
Q2xlYW51cCBSZW1vdGVPYmplY3QgdGVzdHMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3Mzg4NQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvbW9kZWwvcmVtb3RlLW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvbW9kZWwvcmVtb3RlLW9iamVjdC1leHBlY3RlZC50eHQKaW5kZXggMGNlMmM1ZTY3YmYu
LjYxZDBiNWVlZWNiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvcmVt
b3RlLW9iamVjdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L3JlbW90ZS1vYmplY3QtZXhwZWN0ZWQudHh0CkBAIC0xNjU2LDcgKzE2NTYsNyBAQCBFWFBSRVNT
SU9OOiBlcnJvciA9IG51bGw7IHRyeSB7IFtdLngueDsgfSBjYXRjaCAoZSkgeyBlcnJvciA9IGU7
IH07IGVycm9yCiAgICAgICB7CiAgICAgICAgICJfbmFtZSI6ICJzdGFjayIsCiAgICAgICAgICJf
dHlwZSI6ICJzdHJpbmciLAotICAgICAgICAiX3ZhbHVlIjogImdsb2JhbCBjb2RlXG5ldmFsdWF0
ZVdpdGhTY29wZUV4dGVuc2lvbkBbbmF0aXZlIGNvZGVdXG5fZXZhbHVhdGVPblxuX2V2YWx1YXRl
QW5kV3JhcFxuZXZhbHVhdGUiCisgICAgICAgICJfdmFsdWUiOiAiZ2xvYmFsIGNvZGVcbmV2YWx1
YXRlV2l0aFNjb3BlRXh0ZW5zaW9uQFtuYXRpdmUgY29kZV1cbl9ldmFsdWF0ZU9uXG5fZXZhbHVh
dGVBbmRXcmFwIgogICAgICAgfQogICAgIF0sCiAgICAgIl9lbnRyaWVzIjogbnVsbApAQCAtMTY5
NSw3ICsxNjk1LDcgQEAgRVhQUkVTU0lPTjogZXJyb3IgPSBudWxsOyB0cnkgeyBldmFsKCJpZigp
Iik7IH0gY2F0Y2ggKGUpIHsgZXJyb3IgPSBlOyB9OyBlcnJvcgogICAgICAgewogICAgICAgICAi
X25hbWUiOiAic3RhY2siLAogICAgICAgICAiX3R5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgIl92
YWx1ZSI6ICJldmFsQFtuYXRpdmUgY29kZV1cbmdsb2JhbCBjb2RlXG5ldmFsdWF0ZVdpdGhTY29w
ZUV44oCmYXRpdmUgY29kZV1cbl9ldmFsdWF0ZU9uXG5fZXZhbHVhdGVBbmRXcmFwXG5ldmFsdWF0
ZSIKKyAgICAgICAgIl92YWx1ZSI6ICJldmFsQFtuYXRpdmUgY29kZV1cbmdsb2JhbCBjb2RlXG5l
dmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbkBbbmF0aXZlIGNvZGVdXG5fZXZhbHVhdGVPblxuX2V2
YWx1YXRlQW5kV3JhcCIKICAgICAgIH0KICAgICBdLAogICAgICJfZW50cmllcyI6IG51bGwKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9zdGFjay10cmFjZS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvc3RhY2stdHJhY2UtZXhwZWN0ZWQu
dHh0CmluZGV4IDFkNjcyZWE2NzAyLi45N2Y4ODQ2OTZhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL21vZGVsL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvbW9kZWwvc3RhY2stdHJhY2UtZXhwZWN0ZWQudHh0CkBAIC04LDcgKzgs
NyBAQCBQQVNTOiBDb25zb2xlTWVzc2FnZSBzaG91bGQgaGF2ZSBTdGFja1RyYWNlLgogUEFTUzog
Q2FsbEZyYW1lIGluIFN0YWNrVHJhY2UgaGFzIG5vIGlkZW50aWZpZXIuCiBQQVNTOiBDYWxsRnJh
bWUgaW4gU3RhY2tUcmFjZSBoYXMgbm8gdGhpc09iamVjdC4KIFBBU1M6IENhbGxGcmFtZSBpbiBT
dGFja1RyYWNlIGhhcyBubyBzY29wZUNoYWluLgotU3RhY2tUcmFjZTogMTEKK1N0YWNrVHJhY2U6
IDEwCiAgIDE6IGZvbyAoQW5vbnltb3VzIFNjcmlwdCAxIChsaW5lIDEpKSAtIG5hdGl2ZUNvZGUg
KGZhbHNlKSBwcm9ncmFtQ29kZSAoZmFsc2UpCiAgIDI6IEV2YWwgQ29kZSAoQW5vbnltb3VzIFNj
cmlwdCAxIChsaW5lIDEpKSAtIG5hdGl2ZUNvZGUgKGZhbHNlKSBwcm9ncmFtQ29kZSAodHJ1ZSkK
ICAgMzogZXZhbCAtIG5hdGl2ZUNvZGUgKHRydWUpIHByb2dyYW1Db2RlIChmYWxzZSkKQEAgLTE5
LDUgKzE5LDQgQEAgU3RhY2tUcmFjZTogMTEKICAgODogZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNp
b24gLSBuYXRpdmVDb2RlICh0cnVlKSBwcm9ncmFtQ29kZSAoZmFsc2UpCiAgIDk6IF9ldmFsdWF0
ZU9uIC0gbmF0aXZlQ29kZSAodHJ1ZSkgcHJvZ3JhbUNvZGUgKGZhbHNlKQogICAxMDogX2V2YWx1
YXRlQW5kV3JhcCAtIG5hdGl2ZUNvZGUgKHRydWUpIHByb2dyYW1Db2RlIChmYWxzZSkKLSAgMTE6
IGV2YWx1YXRlIC0gbmF0aXZlQ29kZSAodHJ1ZSkgcHJvZ3JhbUNvZGUgKGZhbHNlKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCA1ZDVhNGI3Yzg1NC4uZTU2ZmQ3OWE3NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIzIEBACiAyMDE3LTA2LTI3ICBKb3NlcGggUGVj
b3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogTW9k
ZXJuaXplIEluamVjdGVkU2NyaXB0U291cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oOgorICAgICAg
ICBSZW9yZGVyIGZ1bmN0aW9ucyB0byBiZSBzbGlnaHRseSBiZXR0ZXIuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanM6CisgICAgICAgIC0gQ29udmVydCB0byBj
bGFzc2VzIG5hbWVkIEluamVjdGVkU2NyaXB0IGFuZCBSZW1vdGVPYmplY3QKKyAgICAgICAgLSBB
bGlnbiBJbmplY3RlZFNjcmlwdCdzIEFQSSB3aXRoIHRoZSB3cmFwcGVyIEMrKyBpbnRlcmZhY2Vz
CisgICAgICAgIC0gTW92ZSBzb21lIGNvZGUgdG8gUmVtb3RlT2JqZWN0IHdoZXJlIGFwcHJvcHJp
YXRlIChzdWJ0eXBlLCBkZXNjcmliZSkKKyAgICAgICAgLSBNb3ZlIHNvbWUgY29kZSB0byBoZWxw
ZXIgZnVuY3Rpb25zIChpc1ByaW1pdGl2ZVZhbHVlLCBpc0RlZmluZWQpCisgICAgICAgIC0gUmVm
YWN0b3IgZm9yIHJlYWRhYmlsaXR5IGFuZCBtb2Rlcm4gZmVhdHVyZXMKKyAgICAgICAgLSBSZW1v
dmUgc29tZSB1bnVzZWQgLyB1bm5lY2Vzc2FyeSBjb2RlCisKKzIwMTctMDYtMjcgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBD
cmFzaCBnZW5lcmF0aW5nIG9iamVjdCBwcmV2aWV3IGZvciBBcnJheUl0ZXJhdG9yCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM3NTQKICAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzMyODU5MDEyPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IDIxMTc1ZmYxYWNhLi40MDk4ZDc2NGE3MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
aApAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW5qZWN0ZWRTY3JpcHQo
KTsKIAogICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVS
ZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiogcmVzdWx0LCBQ
cm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNhbGxGdW5jdGlv
bk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBi
b29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+KiByZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAg
dm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEks
IGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3Vs
dCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3Rv
Y29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24o
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wg
Z2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4q
IHJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKTsKICAgICB2b2lk
IGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25J
ZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsK
ICAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVm
UHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAgICB2
b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+KiByZXN1bHQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2Uu
anMKaW5kZXggYWMwMThmM2E4ZjEuLjkyY2E2ZmI0MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTY3
LDgwICs2NywyMTAgQEAgZnVuY3Rpb24gaXNFbXB0eU9iamVjdChvYmplY3QpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZhciBJbmplY3RlZFNjcmlwdCA9IGZ1bmN0aW9uKCkKK2Z1bmN0aW9uIGlz
RGVmaW5lZCh2YWx1ZSkKIHsKLSAgICB0aGlzLl9sYXN0Qm91bmRPYmplY3RJZCA9IDE7Ci0gICAg
dGhpcy5faWRUb1dyYXBwZWRPYmplY3QgPSB7fTsKLSAgICB0aGlzLl9pZFRvT2JqZWN0R3JvdXBO
YW1lID0ge307Ci0gICAgdGhpcy5fb2JqZWN0R3JvdXBzID0ge307Ci0gICAgdGhpcy5fbW9kdWxl
cyA9IHt9OwotICAgIHRoaXMuX25leHRTYXZlZFJlc3VsdEluZGV4ID0gMTsKLSAgICB0aGlzLl9z
YXZlZFJlc3VsdHMgPSBbXTsKKyAgICByZXR1cm4gISF2YWx1ZSB8fCBJbmplY3RlZFNjcmlwdEhv
c3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1ZSk7CiB9CiAKLUluamVjdGVkU2NyaXB0LnByaW1p
dGl2ZVR5cGVzID0gewotICAgIHVuZGVmaW5lZDogdHJ1ZSwKLSAgICBib29sZWFuOiB0cnVlLAot
ICAgIG51bWJlcjogdHJ1ZSwKLSAgICBzdHJpbmc6IHRydWUsCitmdW5jdGlvbiBpc1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKQoreworICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgY2FzZSAi
Ym9vbGVhbiI6CisgICAgY2FzZSAibnVtYmVyIjoKKyAgICBjYXNlICJzdHJpbmciOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgICByZXR1cm4gIUlu
amVjdGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxDb2xsZWN0aW9uKHZhbHVlKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5Db2xs
ZWN0aW9uTW9kZSA9IHsKLSAgICBPd25Qcm9wZXJ0aWVzOiAxIDw8IDAsICAgICAgICAgIC8vIG93
biBwcm9wZXJ0aWVzLgotICAgIE5hdGl2ZUdldHRlclByb3BlcnRpZXM6IDEgPDwgMSwgLy8gbmF0
aXZlIGdldHRlciBwcm9wZXJ0aWVzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4uCi0gICAgQWxsUHJv
cGVydGllczogMSA8PCAyLCAgICAgICAgICAvLyBhbGwgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90
eXBlIGNoYWluLgotfQorLy8gLS0tLS0tLQorCitsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJ
bmplY3RlZFNjcmlwdAoreworICAgIGNvbnN0cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X2xhc3RCb3VuZE9iamVjdElkID0gMTsKKyAgICAgICAgdGhpcy5faWRUb1dyYXBwZWRPYmplY3Qg
PSB7fTsKKyAgICAgICAgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZSA9IHt9OworICAgICAgICB0
aGlzLl9vYmplY3RHcm91cHMgPSB7fTsKKyAgICAgICAgdGhpcy5fbW9kdWxlcyA9IHt9OworICAg
ICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7CisgICAgICAgIHRoaXMuX3NhdmVk
UmVzdWx0cyA9IFtdOworICAgIH0KKworICAgIC8vIEluamVjdGVkU2NyaXB0IEMrKyBBUEkKKwor
ICAgIGV2YWx1YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQ
SSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChJbmplY3RlZFNjcmlwdEhvc3QuZXZh
bHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIEluamVjdGVkU2NyaXB0SG9zdCwgZXhwcmVzc2lvbiwg
b2JqZWN0R3JvdXAsIGZhbHNlLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwg
Z2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KTsKKyAgICB9CisKKyAgICBldmFsdWF0ZU9uQ2Fs
bEZyYW1lKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3Vw
LCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0KQorICAgIHsKKyAgICAgICAgbGV0IGNhbGxGcmFtZSA9IHRoaXMuX2NhbGxGcmFt
ZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpOworICAgICAgICBpZiAoIWNhbGxGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiAiQ291bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3aXRoIGdp
dmVuIGlkIjsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUu
ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXAsIHRydWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0
ZVByZXZpZXcsIHNhdmVSZXN1bHQpOworICAgIH0KIAotSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBl
ID0gewotICAgIGlzUHJpbWl0aXZlVmFsdWU6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICBjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJncywgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJh
dGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgLy8gRklYTUUoMzM3MTYpOiB0eXBlb2YgZG9jdW1l
bnQuYWxsIGlzIGFsd2F5cyAndW5kZWZpbmVkJy4KLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0LnByaW1pdGl2ZVR5cGVzW3R5cGVvZiBvYmplY3RdICYmICF0aGlzLl9pc0hUTUxBbGxDb2xs
ZWN0aW9uKG9iamVjdCk7Ci0gICAgfSwKKyAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhp
cy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9v
YmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3RHcm91cE5hbWUg
PSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKKworICAgICAg
ICBpZiAoIWlzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuICJDb3VsZCBub3Qg
ZmluZCBvYmplY3Qgd2l0aCBnaXZlbiBpZCI7CisKKyAgICAgICAgbGV0IHJlc29sdmVkQXJncyA9
IFtdOworICAgICAgICBpZiAoYXJncykgeworICAgICAgICAgICAgbGV0IGNhbGxBcmdzID0gSW5q
ZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKGFyZ3MpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBjYWxsQXJncy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXJnc1tpXSA9IHRoaXMuX3Jlc29sdmVDYWxsQXJn
dW1lbnQoY2FsbEFyZ3NbaV0pOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGZ1
bmMgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgZXhwcmVzc2lvbiArICIpIik7
CisgICAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJHaXZlbiBleHByZXNzaW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgZnVu
Y3Rpb24iOworCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHdhc1Rocm93
bjogZmFsc2UsCisgICAgICAgICAgICAgICAgcmVzdWx0OiBSZW1vdGVPYmplY3QuY3JlYXRlKGZ1
bmMuYXBwbHkob2JqZWN0LCByZXNvbHZlZEFyZ3MpLCBvYmplY3RHcm91cE5hbWUsIHJldHVybkJ5
VmFsdWUsIGdlbmVyYXRlUHJldmlldykKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmpl
Y3RHcm91cE5hbWUpOworICAgICAgICB9CisgICAgfQogCi0gICAgcHJldmlld1ZhbHVlOiBmdW5j
dGlvbih2YWx1ZSkKKyAgICBnZXRGdW5jdGlvbkRldGFpbHMob2JqZWN0SWQpCiAgICAgewotICAg
ICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZp
ZXdGb3JWYWx1ZSh2YWx1ZSwgdHJ1ZSk7Ci0gICAgfSwKKyAgICAgICAgbGV0IHBhcnNlZE9iamVj
dElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3Qg
PSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CisgICAgICAgIGlmICh0eXBlb2Yg
b2JqZWN0ICE9PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2
ZSBmdW5jdGlvbiBieSBpZC4iOworICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbkRldGFpbHMo
b2JqZWN0KTsKKyAgICB9CiAKLSAgICBmdW5jdGlvbkRldGFpbHM6IGZ1bmN0aW9uKGZ1bmMpCisg
ICAgZnVuY3Rpb25EZXRhaWxzKGZ1bmMpCiAgICAgewotICAgICAgICB2YXIgZGV0YWlscyA9IElu
amVjdGVkU2NyaXB0SG9zdC5mdW5jdGlvbkRldGFpbHMoZnVuYyk7CisgICAgICAgIGxldCBkZXRh
aWxzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmZ1bmN0aW9uRGV0YWlscyhmdW5jKTsKICAgICAgICAg
aWYgKCFkZXRhaWxzKQogICAgICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlv
biBkZXRhaWxzLiI7Ci0KICAgICAgICAgcmV0dXJuIGRldGFpbHM7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICB3cmFwT2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIGdyb3VwTmFtZSwgY2FuQWNjZXNzSW5z
cGVjdGVkR2xvYmFsT2JqZWN0LCBnZW5lcmF0ZVByZXZpZXcpCisgICAgZ2V0UHJldmlldyhvYmpl
Y3RJZCkKICAgICB7Ci0gICAgICAgIGlmIChjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3Qp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JhcE9iamVjdChvYmplY3QsIGdyb3VwTmFtZSwg
ZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1dy
YXBwZXIob2JqZWN0KTsKLSAgICB9LAorICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlz
Ll9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMuX29i
amVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKKyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5j
cmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUob2JqZWN0LCB0cnVlKTsKKyAgICB9CiAKLSAgICBz
ZXRFeGNlcHRpb25WYWx1ZTogZnVuY3Rpb24odmFsdWUpCisgICAgZ2V0UHJvcGVydGllcyhvYmpl
Y3RJZCwgb3duUHJvcGVydGllcywgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgdGhp
cy5fZXhjZXB0aW9uVmFsdWUgPSB2YWx1ZTsKLSAgICB9LAorICAgICAgICBsZXQgbmF0aXZlR2V0
dGVyc0FzVmFsdWVzID0gZmFsc2U7CisgICAgICAgIGxldCBjb2xsZWN0aW9uTW9kZSA9IG93blBy
b3BlcnRpZXMgPyBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIDog
SW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuQWxsUHJvcGVydGllczsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0
ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CisgICAgfQogCi0gICAgY2xlYXJFeGNl
cHRpb25WYWx1ZTogZnVuY3Rpb24oKQorICAgIGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhvYmpl
Y3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2V4Y2Vw
dGlvblZhbHVlOwotICAgIH0sCisgICAgICAgIGxldCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0
cnVlOworICAgICAgICBsZXQgY29sbGVjdGlvbk1vZGUgPSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0
aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0
aXZlR2V0dGVyUHJvcGVydGllczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMo
b2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNB
c1ZhbHVlcyk7CisgICAgfQogCi0gICAgX2ZhbGxiYWNrV3JhcHBlcjogZnVuY3Rpb24ob2JqZWN0
KQorICAgIGdldEludGVybmFsUHJvcGVydGllcyhvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQog
ICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHt9OwotICAgICAgICByZXN1bHQudHlwZSA9IHR5
cGVvZiBvYmplY3Q7Ci0gICAgICAgIGlmICh0aGlzLmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSkK
LSAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IG9iamVjdDsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gdG9TdHJpbmcob2JqZWN0KTsKKyAgICAgICAgbGV0
IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAg
IGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7CisgICAgICAg
IGxldCBvYmplY3RHcm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9i
amVjdElkLmlkXTsKKworICAgICAgICBpZiAoIWlzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpc1N5bWJvbChvYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGxldCBkZXNjcmlwdG9ycyA9IHRoaXMuX2lu
dGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworICAgICAgICBpZiAoIWRlc2NyaXB0
b3JzKQorICAgICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdG9y
ID0gZGVzY3JpcHRvcnNbaV07CisgICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9y
KQorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBSZW1vdGVPYmplY3QuY3JlYXRl
KGRlc2NyaXB0b3IudmFsdWUsIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmll
dyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CisgICAgfQorCisg
ICAgZ2V0Q29sbGVjdGlvbkVudHJpZXMob2JqZWN0SWQsIG9iamVjdEdyb3VwTmFtZSwgc3RhcnRJ
bmRleCwgbnVtYmVyVG9GZXRjaCkKKyAgICB7CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9
IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0ID0gdGhp
cy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAgICBvYmplY3RHcm91cE5hbWUg
PSBvYmplY3RHcm91cE5hbWUgfHwgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmpl
Y3RJZC5pZF07CisKKyAgICAgICAgaWYgKCFpc0RlZmluZWQob2JqZWN0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gIm9iamVjdCIpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgbGV0IGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzKG9i
amVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1YnR5cGUob2JqZWN0KSwgc3RhcnRJbmRleCwgbnVt
YmVyVG9GZXRjaCk7CisgICAgICAgIHJldHVybiBlbnRyaWVzLm1hcChmdW5jdGlvbihlbnRyeSkg
eworICAgICAgICAgICAgZW50cnkudmFsdWUgPSBSZW1vdGVPYmplY3QuY3JlYXRlKGVudHJ5LnZh
bHVlLCBvYmplY3RHcm91cE5hbWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgia2V5
IiBpbiBlbnRyeSkKKyAgICAgICAgICAgICAgICBlbnRyeS5rZXkgPSBSZW1vdGVPYmplY3QuY3Jl
YXRlKGVudHJ5LmtleSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gZW50cnk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHNhdmVSZXN1bHQoY2Fs
bEFyZ3VtZW50SlNPTikKKyAgICB7CisgICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAw
OworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsZXQgY2FsbEFyZ3VtZW50ID0gSW5qZWN0
ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIGNhbGxBcmd1bWVudEpTT04gKyAiKSIpOworICAg
ICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fcmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJndW1l
bnQpOworICAgICAgICAgICAgdGhpcy5fc2F2ZVJlc3VsdCh2YWx1ZSk7CisgICAgICAgIH0gY2F0
Y2ggKGUpIHt9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7CisgICAg
fQorCisgICAgd3JhcENhbGxGcmFtZXMoY2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFj
YWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbGV0IHJlc3Vs
dCA9IFtdOworICAgICAgICBsZXQgZGVwdGggPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICByZXN1bHQucHVzaChuZXcgSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkoZGVwdGgrKywg
Y2FsbEZyYW1lKSk7CisgICAgICAgICAgICBjYWxsRnJhbWUgPSBjYWxsRnJhbWUuY2FsbGVyOwor
ICAgICAgICB9IHdoaWxlIChjYWxsRnJhbWUpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0sCisgICAgfQogCi0gICAgd3JhcFRhYmxlOiBmdW5jdGlvbihjYW5BY2Nlc3NJbnNwZWN0ZWRH
bG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5zKQorICAgIHdyYXBPYmplY3Qob2JqZWN0LCBncm91
cE5hbWUsIGNhbkFjY2Vzc0luc3BlY3RlZEdsb2JhbE9iamVjdCwgZ2VuZXJhdGVQcmV2aWV3KQor
ICAgIHsKKyAgICAgICAgaWYgKCFjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tXcmFwcGVyKG9iamVjdCk7CisKKyAgICAgICAg
cmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGUob2JqZWN0LCBncm91cE5hbWUsIGZhbHNlLCBnZW5l
cmF0ZVByZXZpZXcpOworICAgIH0KKworICAgIHdyYXBUYWJsZShjYW5BY2Nlc3NJbnNwZWN0ZWRH
bG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5zKQogICAgIHsKICAgICAgICAgaWYgKCFjYW5BY2Nl
c3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJh
Y2tXcmFwcGVyKHRhYmxlKTsKQEAgLTE0OSw0NiArMjc5LDEyMSBAQCBJbmplY3RlZFNjcmlwdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIC8vIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVk
IGNvbHVtbiBuYW1lcyBhbmQgaW4gdGhlIHByb3ZpZGVkIG9yZGVyLgogICAgICAgICAvLyBXZSBj
b3VsZCBmaWx0ZXIgaGVyZSB0byBhdm9pZCBzZW5kaW5nIHZlcnkgbGFyZ2UgcHJldmlldyBvYmpl
Y3RzLgogCi0gICAgICAgIHZhciBjb2x1bW5OYW1lcyA9IG51bGw7CisgICAgICAgIGxldCBjb2x1
bW5OYW1lcyA9IG51bGw7CiAgICAgICAgIGlmICh0eXBlb2YgY29sdW1ucyA9PT0gInN0cmluZyIp
CiAgICAgICAgICAgICBjb2x1bW5zID0gW2NvbHVtbnNdOwogCiAgICAgICAgIGlmIChJbmplY3Rl
ZFNjcmlwdEhvc3Quc3VidHlwZShjb2x1bW5zKSA9PT0gImFycmF5IikgewogICAgICAgICAgICAg
Y29sdW1uTmFtZXMgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1u
cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5s
ZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKHRvU3RyaW5nKGNv
bHVtbnNbaV0pKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0
KHRhYmxlLCAiY29uc29sZSIsIGZhbHNlLCB0cnVlLCBjb2x1bW5OYW1lcyk7Ci0gICAgfSwKKyAg
ICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGUodGFibGUsICJjb25zb2xlIiwgZmFsc2Us
IHRydWUsIGNvbHVtbk5hbWVzKTsKKyAgICB9CiAKLSAgICBpbnNwZWN0T2JqZWN0OiBmdW5jdGlv
bihvYmplY3QpCisgICAgcHJldmlld1ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUodmFsdWUsIHRydWUpOwor
ICAgIH0KKworICAgIHNldEV4Y2VwdGlvblZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhp
cy5fZXhjZXB0aW9uVmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBjbGVhckV4Y2VwdGlvblZh
bHVlKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9leGNlcHRpb25WYWx1ZTsKKyAgICB9
CisKKyAgICBmaW5kT2JqZWN0QnlJZChvYmplY3RJZCkKKyAgICB7CisgICAgICAgIGxldCBwYXJz
ZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICByZXR1
cm4gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgIH0KKworICAgIGluc3Bl
Y3RPYmplY3Qob2JqZWN0KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2NvbW1hbmRMaW5lQVBJ
SW1wbCkKICAgICAgICAgICAgIHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbC5pbnNwZWN0KG9iamVj
dCk7Ci0gICAgfSwKLQotICAgIF93cmFwT2JqZWN0OiBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdy
b3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCi0g
ICAgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlw
dC5SZW1vdGVPYmplY3Qob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBn
ZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAg
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBpbmplY3Rl
ZFNjcmlwdC5fZGVzY3JpYmUoZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChleCkgewotICAgICAg
ICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICI8ZmFpbGVkIHRvIGNvbnZlcnQgZXhjZXB0aW9u
IHRvIHN0cmluZz4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmpl
Y3RlZFNjcmlwdC5SZW1vdGVPYmplY3QoZGVzY3JpcHRpb24pOworICAgIH0KKworICAgIHJlbGVh
c2VPYmplY3Qob2JqZWN0SWQpCisgICAgeworICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0
aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgdGhpcy5fcmVsZWFzZU9iamVj
dChwYXJzZWRPYmplY3RJZC5pZCk7CisgICAgfQorCisgICAgcmVsZWFzZU9iamVjdEdyb3VwKG9i
amVjdEdyb3VwTmFtZSkKKyAgICB7CisgICAgICAgIGlmIChvYmplY3RHcm91cE5hbWUgPT09ICJj
b25zb2xlIikgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RSZXN1bHQ7CisgICAgICAg
ICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7CisgICAgICAgICAgICB0aGlzLl9z
YXZlZFJlc3VsdHMgPSBbXTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBncm91cCA9IHRoaXMu
X29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOworICAgICAgICBpZiAoIWdyb3VwKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXAubGVu
Z3RoOyBpKyspCisgICAgICAgICAgICB0aGlzLl9yZWxlYXNlT2JqZWN0KGdyb3VwW2ldKTsKKwor
ICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CisgICAg
fQorCisgICAgLy8gSW5qZWN0ZWRTY3JpcHRNb2R1bGUgQysrIEFQSQorCisgICAgbW9kdWxlKG5h
bWUpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbW9kdWxlc1tuYW1lXTsKKyAgICB9CisK
KyAgICBpbmplY3RNb2R1bGUobmFtZSwgc291cmNlLCBob3N0KQorICAgIHsKKyAgICAgICAgZGVs
ZXRlIHRoaXMuX21vZHVsZXNbbmFtZV07CisKKyAgICAgICAgbGV0IG1vZHVsZUZ1bmN0aW9uID0g
SW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIpIik7CisgICAgICAg
IGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkKKyAgICAgICAgICAgICAgICBpbnNw
ZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2ViIEluc3BlY3RvciBlcnJvcjogQSBm
dW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBldmFsdWF0aW9uIiwgbmFtZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgIH0sCiAKLSAgICBfYmluZDog
ZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUpCisgICAgICAgIGxldCBtb2R1bGUgPSBt
b2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3RlZEdsb2JhbE9iamVjdCwgSW5qZWN0ZWRTY3JpcHRI
b3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIGluamVjdGVkU2NyaXB0SWQsIHRoaXMsIFJlbW90
ZU9iamVjdCwgaG9zdCk7CisgICAgICAgIHRoaXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7Cisg
ICAgICAgIHJldHVybiBtb2R1bGU7CisgICAgfQorCisgICAgLy8gSW5qZWN0ZWRTY3JpcHRNb2R1
bGUgSmF2YVNjcmlwdCBBUEkKKworICAgIGlzUHJpbWl0aXZlVmFsdWUodmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgfQorCisgICAgLy8g
UHJpdmF0ZQorCisgICAgX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpCisgICAgeworICAgICAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIG9iamVjdElkICsgIikiKTsK
KyAgICB9CisKKyAgICBfb2JqZWN0Rm9ySWQob2JqZWN0SWQpCiAgICAgewotICAgICAgICB2YXIg
aWQgPSB0aGlzLl9sYXN0Qm91bmRPYmplY3RJZCsrOworICAgICAgICByZXR1cm4gdGhpcy5faWRU
b1dyYXBwZWRPYmplY3Rbb2JqZWN0SWQuaWRdOworICAgIH0KKworICAgIF9iaW5kKG9iamVjdCwg
b2JqZWN0R3JvdXBOYW1lKQorICAgIHsKKyAgICAgICAgbGV0IGlkID0gdGhpcy5fbGFzdEJvdW5k
T2JqZWN0SWQrKzsKKyAgICAgICAgbGV0IG9iamVjdElkID0gYHsiaW5qZWN0ZWRTY3JpcHRJZCI6
JHtpbmplY3RlZFNjcmlwdElkfSwiaWQiOiR7aWR9fWA7CisKICAgICAgICAgdGhpcy5faWRUb1dy
YXBwZWRPYmplY3RbaWRdID0gb2JqZWN0OwotICAgICAgICB2YXIgb2JqZWN0SWQgPSAie1wiaW5q
ZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIixcImlkXCI6IiArIGlkICsg
In0iOworCiAgICAgICAgIGlmIChvYmplY3RHcm91cE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBn
cm91cCA9IHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOworICAgICAgICAgICAg
bGV0IGdyb3VwID0gdGhpcy5fb2JqZWN0R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CiAgICAgICAg
ICAgICBpZiAoIWdyb3VwKSB7CiAgICAgICAgICAgICAgICAgZ3JvdXAgPSBbXTsKICAgICAgICAg
ICAgICAgICB0aGlzLl9vYmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXSA9IGdyb3VwOwpAQCAt
MTk2LDI2MyArNDAxLDUxIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIGdyb3VwLnB1c2goaWQpOwogICAgICAgICAgICAgdGhpcy5faWRUb09iamVjdEdyb3VwTmFt
ZVtpZF0gPSBvYmplY3RHcm91cE5hbWU7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gb2Jq
ZWN0SWQ7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfcGFyc2VPYmplY3RJZDogZnVuY3Rpb24ob2Jq
ZWN0SWQpCi0gICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRl
KCIoIiArIG9iamVjdElkICsgIikiKTsKLSAgICB9LAotCi0gICAgcmVsZWFzZU9iamVjdEdyb3Vw
OiBmdW5jdGlvbihvYmplY3RHcm91cE5hbWUpCi0gICAgewotICAgICAgICBpZiAob2JqZWN0R3Jv
dXBOYW1lID09PSAiY29uc29sZSIpIHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UmVz
dWx0OwotICAgICAgICAgICAgdGhpcy5fbmV4dFNhdmVkUmVzdWx0SW5kZXggPSAxOwotICAgICAg
ICAgICAgdGhpcy5fc2F2ZWRSZXN1bHRzID0gW107Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
Z3JvdXAgPSB0aGlzLl9vYmplY3RHcm91cHNbb2JqZWN0R3JvdXBOYW1lXTsKLSAgICAgICAgaWYg
KCFncm91cCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGdyb3VwLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgdGhpcy5fcmVsZWFzZU9iamVjdChn
cm91cFtpXSk7Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91
cE5hbWVdOwotICAgIH0sCi0KLSAgICBkaXNwYXRjaDogZnVuY3Rpb24obWV0aG9kTmFtZSwgYXJn
cykKLSAgICB7Ci0gICAgICAgIHZhciBhcmdzQXJyYXkgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZh
bHVhdGUoIigiICsgYXJncyArICIpIik7Ci0gICAgICAgIHZhciByZXN1bHQgPSB0aGlzW21ldGhv
ZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3NBcnJheSk7Ci0gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0
ID09PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgaWYgKGluc3BlY3RlZEdsb2JhbE9iamVj
dC5jb25zb2xlKQotICAgICAgICAgICAgICAgIGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xl
LmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9yOiBJbmplY3RlZFNjcmlwdC4lcyByZXR1cm5zIHVu
ZGVmaW5lZCIsIG1ldGhvZE5hbWUpOwotICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBnZXRQcmV2aWV3OiBm
dW5jdGlvbihvYmplY3RJZCkKLSAgICB7Ci0gICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRo
aXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5f
b2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwotCi0gICAgICAgIHJldHVybiBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKG9iamVjdCwgdHJ1
ZSk7Ci0gICAgfSwKLQotICAgIF9nZXRQcm9wZXJ0aWVzOiBmdW5jdGlvbihvYmplY3RJZCwgY29s
bGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmlldywgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKQotICAg
IHsKLSAgICAgICAgdmFyIHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmpl
Y3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmpl
Y3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3RHcm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3Jv
dXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKLQotICAgICAgICBpZiAoIXRoaXMuX2lzRGVmaW5l
ZChvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChpc1N5
bWJvbChvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBk
ZXNjcmlwdG9ycyA9IHRoaXMuX3Byb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCBjb2xsZWN0aW9u
TW9kZSwgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKTsKLQotICAgICAgICAvLyBHbyBvdmVyIHByb3Bl
cnRpZXMsIHdyYXAgb2JqZWN0IHZhbHVlcy4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
ZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBk
ZXNjcmlwdG9yc1tpXTsKLSAgICAgICAgICAgIGlmICgiZ2V0IiBpbiBkZXNjcmlwdG9yKQotICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gdGhpcy5fd3JhcE9iamVjdChkZXNjcmlwdG9y
LmdldCwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICAgICAgICAgIGlmICgic2V0IiBpbiBkZXNjcmlw
dG9yKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gdGhpcy5fd3JhcE9iamVjdChk
ZXNjcmlwdG9yLnNldCwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICAgICAgICAgIGlmICgidmFsdWUi
IGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRoaXMu
X3dyYXBPYmplY3QoZGVzY3JpcHRvci52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2Vu
ZXJhdGVQcmV2aWV3KTsKLSAgICAgICAgICAgIGlmICghKCJjb25maWd1cmFibGUiIGluIGRlc2Ny
aXB0b3IpKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoISgiZW51bWVyYWJsZSIgaW4gZGVzY3JpcHRvcikpCi0gICAgICAg
ICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAo
InN5bWJvbCIgaW4gZGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN5bWJv
bCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci5zeW1ib2wsIG9iamVjdEdyb3VwTmFtZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnM7Ci0gICAgfSwKLQotICAg
IGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKG9iamVjdElkLCBvd25Qcm9wZXJ0aWVzLCBnZW5lcmF0
ZVByZXZpZXcpCi0gICAgewotICAgICAgICB2YXIgbmF0aXZlR2V0dGVyc0FzVmFsdWVzID0gZmFs
c2U7Ci0gICAgICAgIHZhciBjb2xsZWN0aW9uTW9kZSA9IG93blByb3BlcnRpZXMgPyBJbmplY3Rl
ZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIDogSW5qZWN0ZWRTY3JpcHQuQ29s
bGVjdGlvbk1vZGUuQWxsUHJvcGVydGllczsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3Bl
cnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdl
dHRlcnNBc1ZhbHVlcyk7Ci0gICAgfSwKLQotICAgIGdldERpc3BsYXlhYmxlUHJvcGVydGllczog
ZnVuY3Rpb24ob2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldykKLSAgICB7Ci0gICAgICAgIHZhciBu
YXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0cnVlOwotICAgICAgICB2YXIgY29sbGVjdGlvbk1vZGUg
PSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRT
Y3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0aXZlR2V0dGVyUHJvcGVydGllczsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0
ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7Ci0gICAgfSwKLQotICAgIGdldEludGVy
bmFsUHJvcGVydGllczogZnVuY3Rpb24ob2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldykKLSAgICB7
Ci0gICAgICAgIHZhciBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0
SWQpOwotICAgICAgICB2YXIgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0
SWQpOwotICAgICAgICB2YXIgb2JqZWN0R3JvdXBOYW1lID0gdGhpcy5faWRUb09iamVjdEdyb3Vw
TmFtZVtwYXJzZWRPYmplY3RJZC5pZF07Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9pc0RlZmluZWQo
b2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoaXNTeW1i
b2wob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgZGVz
Y3JpcHRvcnMgPSB0aGlzLl9pbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKLSAg
ICAgICAgaWYgKCFkZXNjcmlwdG9ycykKLSAgICAgICAgICAgIHJldHVybiBbXTsKLQotICAgICAg
ICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHdyYXAgb2JqZWN0IHZhbHVlcy4KLSAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
dmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKLSAgICAgICAgICAgIGlmICgidmFsdWUi
IGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRoaXMu
X3dyYXBPYmplY3QoZGVzY3JpcHRvci52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2Vu
ZXJhdGVQcmV2aWV3KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsK
LSAgICB9LAotCi0gICAgZ2V0Q29sbGVjdGlvbkVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdElkLCBv
YmplY3RHcm91cE5hbWUsIHN0YXJ0SW5kZXgsIG51bWJlclRvRmV0Y2gpCi0gICAgewotICAgICAg
ICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAg
ICAgICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKLSAg
ICAgICAgdmFyIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwTmFtZSB8fCB0aGlzLl9pZFRv
T2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKLQotICAgICAgICBpZiAoIXRoaXMu
X2lzRGVmaW5lZChvYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0
eXBlb2Ygb2JqZWN0ICE9PSAib2JqZWN0IikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICB2YXIgZW50cmllcyA9IHRoaXMuX2VudHJpZXMob2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3Qu
c3VidHlwZShvYmplY3QpLCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKTsKLSAgICAgICAgcmV0
dXJuIGVudHJpZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7Ci0gICAgICAgICAgICBlbnRyeS52YWx1
ZSA9IGluamVjdGVkU2NyaXB0Ll93cmFwT2JqZWN0KGVudHJ5LnZhbHVlLCBvYmplY3RHcm91cE5h
bWUsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICgia2V5IiBpbiBlbnRyeSkKLSAgICAg
ICAgICAgICAgICBlbnRyeS5rZXkgPSBpbmplY3RlZFNjcmlwdC5fd3JhcE9iamVjdChlbnRyeS5r
ZXksIG9iamVjdEdyb3VwTmFtZSwgZmFsc2UsIHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIGVu
dHJ5OwotICAgICAgICB9KTsKLSAgICB9LAotCi0gICAgc2F2ZVJlc3VsdDogZnVuY3Rpb24oY2Fs
bEFyZ3VtZW50SlNPTikKLSAgICB7Ci0gICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAw
OwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgY2FsbEFyZ3VtZW50ID0gSW5qZWN0
ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIGNhbGxBcmd1bWVudEpTT04gKyAiKSIpOwotICAg
ICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fcmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJndW1l
bnQpOwotICAgICAgICAgICAgdGhpcy5fc2F2ZVJlc3VsdCh2YWx1ZSk7Ci0gICAgICAgIH0gY2F0
Y2ggKGUpIHt9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7Ci0gICAg
fSwKLQotICAgIGdldEZ1bmN0aW9uRGV0YWlsczogZnVuY3Rpb24oZnVuY3Rpb25JZCkKLSAgICB7
Ci0gICAgICAgIHZhciBwYXJzZWRGdW5jdGlvbklkID0gdGhpcy5fcGFyc2VPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICAgICAgdmFyIGZ1bmMgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRGdW5j
dGlvbklkKTsKLSAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rpb24iKQotICAgICAg
ICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBieSBpZC4iOwotICAgICAgICBy
ZXR1cm4gaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGZ1bmMpOwotICAgIH0sCi0KLSAg
ICByZWxlYXNlT2JqZWN0OiBmdW5jdGlvbihvYmplY3RJZCkKLSAgICB7Ci0gICAgICAgIHZhciBw
YXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICB0
aGlzLl9yZWxlYXNlT2JqZWN0KHBhcnNlZE9iamVjdElkLmlkKTsKLSAgICB9LAotCi0gICAgX3Jl
bGVhc2VPYmplY3Q6IGZ1bmN0aW9uKGlkKQorICAgIF9yZWxlYXNlT2JqZWN0KGlkKQogICAgIHsK
ICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9XcmFwcGVkT2JqZWN0W2lkXTsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX2lkVG9PYmplY3RHcm91cE5hbWVbaWRdOwotICAgIH0sCisgICAgfQogCi0gICAg
ZXZhbHVhdGU6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5k
TGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQorICAg
IF9mYWxsYmFja1dyYXBwZXIob2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V2
YWx1YXRlQW5kV3JhcChJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNp
b24sIEluamVjdGVkU2NyaXB0SG9zdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGZhbHNlLCBp
bmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZl
UmVzdWx0KTsKLSAgICB9LAotCi0gICAgY2FsbEZ1bmN0aW9uT246IGZ1bmN0aW9uKG9iamVjdElk
LCBleHByZXNzaW9uLCBhcmdzLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcpCi0gICAg
ewotICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVj
dElkKTsKLSAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVj
dElkKTsKLSAgICAgICAgaWYgKCF0aGlzLl9pc0RlZmluZWQob2JqZWN0KSkKLSAgICAgICAgICAg
IHJldHVybiAiQ291bGQgbm90IGZpbmQgb2JqZWN0IHdpdGggZ2l2ZW4gaWQiOwotCi0gICAgICAg
IGlmIChhcmdzKSB7Ci0gICAgICAgICAgICB2YXIgcmVzb2x2ZWRBcmdzID0gW107Ci0gICAgICAg
ICAgICB2YXIgY2FsbEFyZ3MgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoYXJncyk7Ci0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxBcmdzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmdzW2ld
ID0gdGhpcy5fcmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJnc1tpXSk7Ci0gICAgICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICB2YXIgb2JqZWN0R3JvdXAgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBO
YW1lW3BhcnNlZE9iamVjdElkLmlkXTsKLSAgICAgICAgICAgIHZhciBmdW5jID0gSW5qZWN0ZWRT
Y3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIGV4cHJlc3Npb24gKyAiKSIpOwotICAgICAgICAgICAg
aWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgICAgIHJldHVybiAi
R2l2ZW4gZXhwcmVzc2lvbiBkb2VzIG5vdCBldmFsdWF0ZSB0byBhIGZ1bmN0aW9uIjsKLQotICAg
ICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICB3YXNUaHJvd246IGZhbHNlLAotICAg
ICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5fd3JhcE9iamVjdChmdW5jLmFwcGx5KG9iamVjdCwg
cmVzb2x2ZWRBcmdzKSwgb2JqZWN0R3JvdXAsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmll
dykKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmplY3RHcm91cCk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgX3Jlc29sdmVDYWxsQXJndW1lbnQ6IGZ1bmN0aW9uKGNhbGxBcmd1bWVu
dEpTT04pCisgICAgICAgIGxldCByZXN1bHQgPSB7fTsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSB0
eXBlb2Ygb2JqZWN0OworICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQorICAg
ICAgICAgICAgcmVzdWx0LnZhbHVlID0gb2JqZWN0OworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQuZGVzY3JpcHRpb24gPSB0b1N0cmluZyhvYmplY3QpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIF9yZXNvbHZlQ2FsbEFyZ3VtZW50KGNhbGxBcmd1bWVudEpT
T04pCiAgICAgewogICAgICAgICBpZiAoInZhbHVlIiBpbiBjYWxsQXJndW1lbnRKU09OKQogICAg
ICAgICAgICAgcmV0dXJuIGNhbGxBcmd1bWVudEpTT04udmFsdWU7CiAKLSAgICAgICAgdmFyIG9i
amVjdElkID0gY2FsbEFyZ3VtZW50SlNPTi5vYmplY3RJZDsKKyAgICAgICAgbGV0IG9iamVjdElk
ID0gY2FsbEFyZ3VtZW50SlNPTi5vYmplY3RJZDsKICAgICAgICAgaWYgKG9iamVjdElkKSB7Ci0g
ICAgICAgICAgICB2YXIgcGFyc2VkQXJnSWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElk
KTsKKyAgICAgICAgICAgIGxldCBwYXJzZWRBcmdJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2Jq
ZWN0SWQpOwogICAgICAgICAgICAgaWYgKCFwYXJzZWRBcmdJZCB8fCBwYXJzZWRBcmdJZFsiaW5q
ZWN0ZWRTY3JpcHRJZCJdICE9PSBpbmplY3RlZFNjcmlwdElkKQogICAgICAgICAgICAgICAgIHRo
cm93ICJBcmd1bWVudHMgc2hvdWxkIGJlbG9uZyB0byB0aGUgc2FtZSBKYXZhU2NyaXB0IHdvcmxk
IGFzIHRoZSB0YXJnZXQgb2JqZWN0LiI7CiAKLSAgICAgICAgICAgIHZhciByZXNvbHZlZEFyZyA9
IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZEFyZ0lkKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5f
aXNEZWZpbmVkKHJlc29sdmVkQXJnKSkKKyAgICAgICAgICAgIGxldCByZXNvbHZlZEFyZyA9IHRo
aXMuX29iamVjdEZvcklkKHBhcnNlZEFyZ0lkKTsKKyAgICAgICAgICAgIGlmICghaXNEZWZpbmVk
KHJlc29sdmVkQXJnKSkKICAgICAgICAgICAgICAgICB0aHJvdyAiQ291bGQgbm90IGZpbmQgb2Jq
ZWN0IHdpdGggZ2l2ZW4gaWQiOwogCiAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRBcmc7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgIH0sCisgICAgfQogCi0g
ICAgX2V2YWx1YXRlQW5kV3JhcDogZnVuY3Rpb24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVB
UEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCkKKyAgICBfY3Jl
YXRlVGhyb3duVmFsdWUodmFsdWUsIG9iamVjdEdyb3VwKQogICAgIHsKLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAwOwotCi0gICAgICAgICAgICB2
YXIgcmV0dXJuT2JqZWN0ID0gewotICAgICAgICAgICAgICAgIHdhc1Rocm93bjogZmFsc2UsCi0g
ICAgICAgICAgICAgICAgcmVzdWx0OiB0aGlzLl93cmFwT2JqZWN0KHRoaXMuX2V2YWx1YXRlT24o
ZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHByZXNzaW9uLCBpc0V2YWxPbkNh
bGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1bHQpLCBvYmplY3RHcm91cCwg
cmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQotICAgICAgICAgICAgfTsKLQotICAgICAg
ICAgICAgaWYgKHNhdmVSZXN1bHQgJiYgdGhpcy5fc2F2ZWRSZXN1bHRJbmRleCkKLSAgICAgICAg
ICAgICAgICByZXR1cm5PYmplY3Quc2F2ZWRSZXN1bHRJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0
SW5kZXg7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7Ci0gICAgICAgIH0gY2F0
Y2ggKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBv
YmplY3RHcm91cCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX2NyZWF0ZVRocm93blZhbHVl
OiBmdW5jdGlvbih2YWx1ZSwgb2JqZWN0R3JvdXApCi0gICAgewotICAgICAgICB2YXIgcmVtb3Rl
T2JqZWN0ID0gdGhpcy5fd3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgICAgICBs
ZXQgcmVtb3RlT2JqZWN0ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZSh2YWx1ZSwgb2JqZWN0R3JvdXAp
OwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uID0g
dG9TdHJpbmdEZXNjcmlwdGlvbih2YWx1ZSk7CiAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CkBAIC00
NjAsMTEgKzQ1MywzMCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB3YXNUaHJvd246IHRydWUsCiAgICAgICAgICAgICByZXN1bHQ6IHJlbW90ZU9iamVjdAogICAg
ICAgICB9OwotICAgIH0sCisgICAgfQogCi0gICAgX2V2YWx1YXRlT246IGZ1bmN0aW9uKGV2YWxG
dW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91cCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxsRnJh
bWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBzYXZlUmVzdWx0KQorICAgIF9ldmFsdWF0ZUFuZFdy
YXAoZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpc0V2YWxP
bkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRl
UHJldmlldywgc2F2ZVJlc3VsdCkKICAgICB7Ci0gICAgICAgIHZhciBjb21tYW5kTGluZUFQSSA9
IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLl9zYXZlZFJlc3VsdEluZGV4
ID0gMDsKKworICAgICAgICAgICAgbGV0IHJldHVybk9iamVjdCA9IHsKKyAgICAgICAgICAgICAg
ICB3YXNUaHJvd246IGZhbHNlLAorICAgICAgICAgICAgICAgIHJlc3VsdDogUmVtb3RlT2JqZWN0
LmNyZWF0ZSh0aGlzLl9ldmFsdWF0ZU9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91
cCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxsRnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBz
YXZlUmVzdWx0KSwgb2JqZWN0R3JvdXAsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIChzYXZlUmVzdWx0ICYmIHRoaXMuX3Nh
dmVkUmVzdWx0SW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0LnNhdmVkUmVzdWx0
SW5kZXggPSB0aGlzLl9zYXZlZFJlc3VsdEluZGV4OworCisgICAgICAgICAgICByZXR1cm4gcmV0
dXJuT2JqZWN0OworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fY3JlYXRlVGhyb3duVmFsdWUoZSwgb2JqZWN0R3JvdXApOworICAgICAgICB9CisgICAgfQor
CisgICAgX2V2YWx1YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHBy
ZXNzaW9uLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1
bHQpCisgICAgeworICAgICAgICBsZXQgY29tbWFuZExpbmVBUEkgPSBudWxsOwogICAgICAgICBp
ZiAoaW5qZWN0Q29tbWFuZExpbmVBUEkpIHsKICAgICAgICAgICAgIGlmICh0aGlzLkNvbW1hbmRM
aW5lQVBJKQogICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJID0gbmV3IHRoaXMuQ29tbWFu
ZExpbmVBUEkodGhpcy5fY29tbWFuZExpbmVBUElJbXBsLCBpc0V2YWxPbkNhbGxGcmFtZSA/IG9i
amVjdCA6IG51bGwpOwpAQCAtNDcyLDg2ICs0ODQsNjUgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90
eXBlID0gewogICAgICAgICAgICAgICAgIGNvbW1hbmRMaW5lQVBJID0gbmV3IEJhc2ljQ29tbWFu
ZExpbmVBUEkoaXNFdmFsT25DYWxsRnJhbWUgPyBvYmplY3QgOiBudWxsKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHZhciByZXN1bHQgPSBldmFsRnVuY3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Np
b24sIGNvbW1hbmRMaW5lQVBJKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IGV2YWxGdW5jdGlvbi5j
YWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29tbWFuZExpbmVBUEkpOwogICAgICAgICBpZiAoc2F2
ZVJlc3VsdCkKICAgICAgICAgICAgIHRoaXMuX3NhdmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAgIH0KIAotICAgIHdyYXBDYWxsRnJhbWVzOiBmdW5j
dGlvbihjYWxsRnJhbWUpCisgICAgX2NhbGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZy
YW1lSWQpCiAgICAgewotICAgICAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICB2YXIgcmVzdWx0ID0gW107Ci0gICAgICAgIHZhciBkZXB0aCA9
IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBJbmplY3RlZFNj
cmlwdC5DYWxsRnJhbWVQcm94eShkZXB0aCsrLCBjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgIGNh
bGxGcmFtZSA9IGNhbGxGcmFtZS5jYWxsZXI7Ci0gICAgICAgIH0gd2hpbGUgKGNhbGxGcmFtZSk7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSwKLQotICAgIGV2YWx1YXRlT25DYWxsRnJh
bWU6IGZ1bmN0aW9uKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2
aWV3LCBzYXZlUmVzdWx0KQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxGcmFtZSA9IHRoaXMuX2Nh
bGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpOwotICAgICAgICBpZiAoIWNh
bGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiAiQ291bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3
aXRoIGdpdmVuIGlkIjsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChjYWxs
RnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwg
b2JqZWN0R3JvdXAsIHRydWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpOwotICAgIH0sCi0KLSAgICBfY2FsbEZyYW1lRm9y
SWQ6IGZ1bmN0aW9uKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpCi0gICAgewotICAgICAgICB2
YXIgcGFyc2VkQ2FsbEZyYW1lSWQgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsg
Y2FsbEZyYW1lSWQgKyAiKSIpOwotICAgICAgICB2YXIgb3JkaW5hbCA9IHBhcnNlZENhbGxGcmFt
ZUlkWyJvcmRpbmFsIl07Ci0gICAgICAgIHZhciBjYWxsRnJhbWUgPSB0b3BDYWxsRnJhbWU7Cisg
ICAgICAgIGxldCBwYXJzZWRDYWxsRnJhbWVJZCA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0
ZSgiKCIgKyBjYWxsRnJhbWVJZCArICIpIik7CisgICAgICAgIGxldCBvcmRpbmFsID0gcGFyc2Vk
Q2FsbEZyYW1lSWRbIm9yZGluYWwiXTsKKyAgICAgICAgbGV0IGNhbGxGcmFtZSA9IHRvcENhbGxG
cmFtZTsKICAgICAgICAgd2hpbGUgKC0tb3JkaW5hbCA+PSAwICYmIGNhbGxGcmFtZSkKICAgICAg
ICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS5jYWxsZXI7CiAgICAgICAgIHJldHVybiBjYWxs
RnJhbWU7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfb2JqZWN0Rm9ySWQ6IGZ1bmN0aW9uKG9iamVj
dElkKQorICAgIF9nZXRQcm9wZXJ0aWVzKG9iamVjdElkLCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJh
dGVQcmV2aWV3LCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpCiAgICAgewotICAgICAgICByZXR1cm4g
dGhpcy5faWRUb1dyYXBwZWRPYmplY3Rbb2JqZWN0SWQuaWRdOwotICAgIH0sCisgICAgICAgIGxl
dCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAg
ICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAg
ICBsZXQgb2JqZWN0R3JvdXBOYW1lID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRP
YmplY3RJZC5pZF07CiAKLSAgICBmaW5kT2JqZWN0QnlJZDogZnVuY3Rpb24ob2JqZWN0SWQpCi0g
ICAgewotICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9i
amVjdElkKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElk
KTsKLSAgICB9LAorICAgICAgICBpZiAoIWlzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgbW9kdWxlOiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX21vZHVsZXNbbmFtZV07Ci0gICAgfSwKKyAgICAgICAgaWYgKGlzU3lt
Ym9sKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbmplY3RNb2R1
bGU6IGZ1bmN0aW9uKG5hbWUsIHNvdXJjZSwgaG9zdCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0
aGlzLl9tb2R1bGVzW25hbWVdOworICAgICAgICBsZXQgZGVzY3JpcHRvcnMgPSB0aGlzLl9wcm9w
ZXJ0eURlc2NyaXB0b3JzKG9iamVjdCwgY29sbGVjdGlvbk1vZGUsIG5hdGl2ZUdldHRlcnNBc1Zh
bHVlcyk7CiAKLSAgICAgICAgdmFyIG1vZHVsZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0
LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIpIik7Ci0gICAgICAgIGlmICh0eXBlb2YgbW9kdWxl
RnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsKLSAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9i
YWxPYmplY3QuY29uc29sZSkKLSAgICAgICAgICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3Qu
Y29uc29sZS5lcnJvcigiV2ViIEluc3BlY3RvciBlcnJvcjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0
ZWQgZm9yIG1vZHVsZSAlcyBldmFsdWF0aW9uIiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKKyAgICAg
ICAgICAgIGlmICgiZ2V0IiBpbiBkZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3IuZ2V0ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShkZXNjcmlwdG9yLmdldCwgb2JqZWN0R3JvdXBO
YW1lKTsKKyAgICAgICAgICAgIGlmICgic2V0IiBpbiBkZXNjcmlwdG9yKQorICAgICAgICAgICAg
ICAgIGRlc2NyaXB0b3Iuc2V0ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShkZXNjcmlwdG9yLnNldCwg
b2JqZWN0R3JvdXBOYW1lKTsKKyAgICAgICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3Ip
CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IFJlbW90ZU9iamVjdC5jcmVhdGUo
ZGVzY3JpcHRvci52YWx1ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3
KTsKKyAgICAgICAgICAgIGlmICghKCJjb25maWd1cmFibGUiIGluIGRlc2NyaXB0b3IpKQorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoISgiZW51bWVyYWJsZSIgaW4gZGVzY3JpcHRvcikpCisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoInN5bWJvbCIgaW4g
ZGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN5bWJvbCA9IFJlbW90ZU9i
amVjdC5jcmVhdGUoZGVzY3JpcHRvci5zeW1ib2wsIG9iamVjdEdyb3VwTmFtZSk7CiAgICAgICAg
IH0KIAotICAgICAgICB2YXIgbW9kdWxlID0gbW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0ZWRH
bG9iYWxPYmplY3QsIEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBp
bmplY3RlZFNjcmlwdElkLCB0aGlzLCBob3N0KTsKLSAgICAgICAgdGhpcy5fbW9kdWxlc1tuYW1l
XSA9IG1vZHVsZTsKLSAgICAgICAgcmV0dXJuIG1vZHVsZTsKLSAgICB9LAorICAgICAgICByZXR1
cm4gZGVzY3JpcHRvcnM7CisgICAgfQogCi0gICAgX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9y
czogZnVuY3Rpb24ob2JqZWN0LCBjb21wbGV0ZURlc2NyaXB0b3IpCisgICAgX2ludGVybmFsUHJv
cGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIGNvbXBsZXRlRGVzY3JpcHRvcikKICAgICB7Ci0gICAg
ICAgIHZhciBpbnRlcm5hbFByb3BlcnRpZXMgPSBJbmplY3RlZFNjcmlwdEhvc3QuZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKG9iamVjdCk7CisgICAgICAgIGxldCBpbnRlcm5hbFByb3BlcnRpZXMgPSBJ
bmplY3RlZFNjcmlwdEhvc3QuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKG9iamVjdCk7CiAgICAgICAg
IGlmICghaW50ZXJuYWxQcm9wZXJ0aWVzKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAg
ICAgICAgdmFyIGRlc2NyaXB0b3JzID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aW50ZXJuYWxQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVy
dHkgPSBpbnRlcm5hbFByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9
IHtuYW1lOiBwcm9wZXJ0eS5uYW1lLCB2YWx1ZTogcHJvcGVydHkudmFsdWV9OworICAgICAgICBs
ZXQgZGVzY3JpcHRvcnMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlcm5h
bFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IGlu
dGVybmFsUHJvcGVydGllc1tpXTsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0ge25hbWU6
IHByb3BlcnR5Lm5hbWUsIHZhbHVlOiBwcm9wZXJ0eS52YWx1ZX07CiAgICAgICAgICAgICBpZiAo
Y29tcGxldGVEZXNjcmlwdG9yKSB7CiAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci53cml0YWJs
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFs
c2U7CkBAIC01NjEsMzIgKzU1MiwzMiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBkZXNjcmlwdG9ycy5wdXNoKGRlc2NyaXB0b3IpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBkZXNjcmlwdG9yczsKLSAgICB9LAorICAgIH0KIAotICAgIF9wcm9wZXJ0eURl
c2NyaXB0b3JzOiBmdW5jdGlvbihvYmplY3QsIGNvbGxlY3Rpb25Nb2RlLCBuYXRpdmVHZXR0ZXJz
QXNWYWx1ZXMpCisgICAgX3Byb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCBjb2xsZWN0aW9uTW9k
ZSwgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKQogICAgIHsKICAgICAgICAgaWYgKEluamVjdGVkU2Ny
aXB0SG9zdC5zdWJ0eXBlKG9iamVjdCkgPT09ICJwcm94eSIpCiAgICAgICAgICAgICByZXR1cm4g
W107CiAKLSAgICAgICAgdmFyIGRlc2NyaXB0b3JzID0gW107Ci0gICAgICAgIHZhciBuYW1lUHJv
Y2Vzc2VkID0gbmV3IFNldDsKKyAgICAgICAgbGV0IGRlc2NyaXB0b3JzID0gW107CisgICAgICAg
IGxldCBuYW1lUHJvY2Vzc2VkID0gbmV3IFNldDsKIAogICAgICAgICBmdW5jdGlvbiBjcmVhdGVG
YWtlVmFsdWVEZXNjcmlwdG9yKG5hbWUsIHN5bWJvbCwgZGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0
eSwgcG9zc2libGVOYXRpdmVCaW5kaW5nR2V0dGVyKQogICAgICAgICB7CiAgICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0ge25hbWUsIHZhbHVlOiBvYmpl
Y3RbbmFtZV0sIHdyaXRhYmxlOiBkZXNjcmlwdG9yLndyaXRhYmxlIHx8IGZhbHNlLCBjb25maWd1
cmFibGU6IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlIHx8IGZhbHNlLCBlbnVtZXJhYmxlOiBkZXNj
cmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2V9OworICAgICAgICAgICAgICAgIGxldCBmYWtlRGVz
Y3JpcHRvciA9IHtuYW1lLCB2YWx1ZTogb2JqZWN0W25hbWVdLCB3cml0YWJsZTogZGVzY3JpcHRv
ci53cml0YWJsZSB8fCBmYWxzZSwgY29uZmlndXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJs
ZSB8fCBmYWxzZSwgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlfTsK
ICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVOYXRpdmVCaW5kaW5nR2V0dGVyKQotICAgICAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLm5hdGl2ZUdldHRlciA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGZha2VEZXNjcmlwdG9yLm5hdGl2ZUdldHRlciA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzT3duUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iu
aXNPd24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmYWtlRGVzY3JpcHRvci5pc093biA9
IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKLSAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRvci5zeW1ib2wgPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgICAgIGZha2VEZXNj
cmlwdG9yLnN5bWJvbCA9IHN5bWJvbDsKICAgICAgICAgICAgICAgICAvLyBTaWxlbmNlIGFueSBw
b3NzaWJsZSB1bmhhbmRsZWRyZWplY3Rpb24gZXhjZXB0aW9ucyBjcmVhdGVkIGZyb20gYWNjZXNz
aW5nIGEgbmF0aXZlIGFjY2Vzc29yIHdpdGggYSB3cm9uZyB0aGlzIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpCi0gICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUuY2F0Y2goZnVuY3Rpb24oKXt9KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgICAgICBpZiAoZmFrZURl
c2NyaXB0b3IudmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKQorICAgICAgICAgICAgICAgICAgICBm
YWtlRGVzY3JpcHRvci52YWx1ZS5jYXRjaChmdW5jdGlvbigpe30pOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWtlRGVzY3JpcHRvcjsKICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgZXJyb3JEZXNjcmlwdG9yID0ge25hbWUsIHZhbHVlOiBlLCB3YXNUaHJv
d246IHRydWV9OworICAgICAgICAgICAgICAgIGxldCBlcnJvckRlc2NyaXB0b3IgPSB7bmFtZSwg
dmFsdWU6IGUsIHdhc1Rocm93bjogdHJ1ZX07CiAgICAgICAgICAgICAgICAgaWYgKGlzT3duUHJv
cGVydHkpCiAgICAgICAgICAgICAgICAgICAgIGVycm9yRGVzY3JpcHRvci5pc093biA9IHRydWU7
CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCkKQEAgLTYyMCwyMSArNjExLDIxIEBAIEluamVj
dGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKIAogICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUHJvcGVy
dGllcyhvLCBwcm9wZXJ0aWVzLCBpc093blByb3BlcnR5KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAg
bGV0IHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKICAgICAgICAgICAgICAgICBpZiAobmFtZVBy
b2Nlc3NlZC5oYXMocHJvcGVydHkpIHx8IHByb3BlcnR5ID09PSAiX19wcm90b19fIikKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICBuYW1lUHJvY2Vzc2Vk
LmFkZChwcm9wZXJ0eSk7CiAKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRvU3RyaW5nKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgICAgICB2YXIgc3ltYm9sID0gaXNTeW1ib2wocHJvcGVydHkp
ID8gcHJvcGVydHkgOiBudWxsOworICAgICAgICAgICAgICAgIGxldCBuYW1lID0gdG9TdHJpbmco
cHJvcGVydHkpOworICAgICAgICAgICAgICAgIGxldCBzeW1ib2wgPSBpc1N5bWJvbChwcm9wZXJ0
eSkgPyBwcm9wZXJ0eSA6IG51bGw7CiAKLSAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobywgcHJvcGVydHkpOworICAgICAgICAg
ICAgICAgIGxldCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihv
LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBCYWQgZGVzY3JpcHRvci4gQ2FuIHdlIGdldCBoZXJlPwog
ICAgICAgICAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdmVyeSByZXN0cmljdGl2ZSBzZXR0
aW5ncy4KLSAgICAgICAgICAgICAgICAgICAgdmFyIGZha2VEZXNjcmlwdG9yID0gY3JlYXRlRmFr
ZVZhbHVlRGVzY3JpcHRvcihuYW1lLCBzeW1ib2wsIHt3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3Vy
YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IGZhbHNlfSwgaXNPd25Qcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIGxldCBmYWtlRGVzY3JpcHRvciA9IGNyZWF0ZUZha2VWYWx1ZURlc2NyaXB0
b3IobmFtZSwgc3ltYm9sLCB7d3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlLCBl
bnVtZXJhYmxlOiBmYWxzZX0sIGlzT3duUHJvcGVydHkpOwogICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzRGVzY3JpcHRvcihmYWtlRGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0eSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTY0Miw4ICs2MzMs
OCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgaWYgKG5h
dGl2ZUdldHRlcnNBc1ZhbHVlcykgewogICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nKGRl
c2NyaXB0b3IuZ2V0KS5lbmRzV2l0aCgiW25hdGl2ZSBjb2RlXVxufSIpIHx8ICghZGVzY3JpcHRv
ci5nZXQgJiYgZGVzY3JpcHRvci5oYXNPd25Qcm9wZXJ0eSgiZ2V0IikgJiYgIWRlc2NyaXB0b3Iu
c2V0ICYmIGRlc2NyaXB0b3IuaGFzT3duUHJvcGVydHkoInNldCIpKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRGV2ZWxvcGVycyBtYXkgY3JlYXRlIHN1Y2ggYSBkZXNjcmlwdG9yLCBz
byB3ZSBzaG91bGQgYmUgcmVzaWxpZW50OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFy
IHggPSB7fTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsICJwIiwge2dldDp1bmRlZmluZWR9KTsg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih4LCAicCIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgZmFrZURlc2NyaXB0b3IgPSBjcmVhdGVGYWtlVmFsdWVEZXNjcmlwdG9yKG5h
bWUsIHN5bWJvbCwgZGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0eSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBsZXQgeCA9IHt9OyBPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwgInAi
LCB7Z2V0OnVuZGVmaW5lZH0pOyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHgsICJw
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmYWtlRGVzY3JpcHRvciA9IGNyZWF0ZUZh
a2VWYWx1ZURlc2NyaXB0b3IobmFtZSwgc3ltYm9sLCBkZXNjcmlwdG9yLCBpc093blByb3BlcnR5
LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEZXNjcmlwdG9yKGZha2VE
ZXNjcmlwdG9yLCBpc093blByb3BlcnR5LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02NjAsOCArNjUxLDggQEAgSW5q
ZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIGFycmF5SW5kZXhQ
cm9wZXJ0eU5hbWVzKG8sIGxlbmd0aCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGFycmF5
ID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBsZXQgYXJyYXkgPSBbXTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoaSBpbiBvKQogICAgICAgICAg
ICAgICAgICAgICBhcnJheS5wdXNoKCIiICsgaSk7CiAgICAgICAgICAgICB9CkBAIC02NzAsMTMg
KzY2MSwxMyBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gRklY
TUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDM1ODk+IFdlYiBJbnNwZWN0b3I6IEJldHRlciBo
YW5kbGluZyBmb3IgbGFyZ2UgY29sbGVjdGlvbnMgaW4gT2JqZWN0IFRyZWVzCiAgICAgICAgIC8v
IEZvciBhcnJheSB0eXBlcyB3aXRoIGEgbGFyZ2UgbGVuZ3RoIHdlIGF0dGVtcHQgdG8gc2tpcCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBpbnN0ZWFkIGp1c3Qgc3VibGlzdCBvZiBpbmRleGVzLgot
ICAgICAgICB2YXIgaXNBcnJheUxpa2UgPSBmYWxzZTsKKyAgICAgICAgbGV0IGlzQXJyYXlMaWtl
ID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpc0FycmF5TGlrZSA9IGluamVj
dGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCkgPT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2JqZWN0
Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+IDA7CisgICAgICAgICAgICBpc0FycmF5TGlrZSA9
IFJlbW90ZU9iamVjdC5zdWJ0eXBlKG9iamVjdCkgPT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2Jq
ZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+IDA7CiAgICAgICAgIH0gY2F0Y2goZSkge30K
IAotICAgICAgICBmb3IgKHZhciBvID0gb2JqZWN0OyB0aGlzLl9pc0RlZmluZWQobyk7IG8gPSBP
YmplY3QuZ2V0UHJvdG90eXBlT2YobykpIHsKLSAgICAgICAgICAgIHZhciBpc093blByb3BlcnR5
ID0gbyA9PT0gb2JqZWN0OworICAgICAgICBmb3IgKGxldCBvID0gb2JqZWN0OyBpc0RlZmluZWQo
byk7IG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobykpIHsKKyAgICAgICAgICAgIGxldCBpc093
blByb3BlcnR5ID0gbyA9PT0gb2JqZWN0OwogCiAgICAgICAgICAgICBpZiAoaXNBcnJheUxpa2Ug
JiYgaXNPd25Qcm9wZXJ0eSkKICAgICAgICAgICAgICAgICBwcm9jZXNzUHJvcGVydGllcyhvLCBh
cnJheUluZGV4UHJvcGVydHlOYW1lcyhvLCBNYXRoLm1pbihvYmplY3QubGVuZ3RoLCAxMDApKSwg
aXNPd25Qcm9wZXJ0eSk7CkBAIC02OTcsMTI4ICs2ODgsMTQgQEAgSW5qZWN0ZWRTY3JpcHQucHJv
dG90eXBlID0gewogICAgICAgICB9IGNhdGNoIChlKSB7fQogCiAgICAgICAgIHJldHVybiBkZXNj
cmlwdG9yczsKLSAgICB9LAorICAgIH0KIAotICAgIF9pc0RlZmluZWQ6IGZ1bmN0aW9uKG9iamVj
dCkKKyAgICBfZ2V0U2V0RW50cmllcyhvYmplY3QsIHNraXAsIG51bWJlclRvRmV0Y2gpCiAgICAg
ewotICAgICAgICByZXR1cm4gISFvYmplY3QgfHwgdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihv
YmplY3QpOwotICAgIH0sCisgICAgICAgIGxldCBlbnRyaWVzID0gW107CiAKLSAgICBfaXNIVE1M
QWxsQ29sbGVjdGlvbjogZnVuY3Rpb24ob2JqZWN0KQotICAgIHsKLSAgICAgICAgLy8gZG9jdW1l
bnQuYWxsIGlzIHJlcG9ydGVkIGFzIHVuZGVmaW5lZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcHJv
Y2VzcyBpdC4KLSAgICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIikg
JiYgSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRNTEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKLSAgICB9
LAotCi0gICAgX3N1YnR5cGU6IGZ1bmN0aW9uKG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmog
PT09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotCi0gICAgICAgIGlmICh0aGlz
LmlzUHJpbWl0aXZlVmFsdWUob2JqKSB8fCBpc1N5bWJvbChvYmopKQotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0KLSAgICAgICAgaWYgKHRoaXMuX2lzSFRNTEFsbENvbGxlY3Rpb24ob2JqKSkK
LSAgICAgICAgICAgIHJldHVybiAiYXJyYXkiOwotCi0gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9
IEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBlKG9iaik7Ci0gICAgICAgIGlmIChwcmVjaXNlVHlw
ZSkKLSAgICAgICAgICAgIHJldHVybiBwcmVjaXNlVHlwZTsKLQotICAgICAgICAvLyBGaXJlQnVn
J3MgYXJyYXkgZGV0ZWN0aW9uLgotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKHR5cGVv
ZiBvYmouc3BsaWNlID09PSAiZnVuY3Rpb24iICYmIGlzRmluaXRlKG9iai5sZW5ndGgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiAiYXJyYXkiOwotICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0g
ICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBfY2xhc3NQcmV2aWV3OiBmdW5jdGlv
bihjbGFzc0NvbnN0cnVjdG9yVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gImNsYXNzICIg
KyBjbGFzc0NvbnN0cnVjdG9yVmFsdWUubmFtZTsKLSAgICB9LAotCi0gICAgX25vZGVQcmV2aWV3
OiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAgICAgICAgdmFyIGlzWE1MRG9jdW1lbnQgPSBub2Rl
Lm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKLSAgICAg
ICAgdmFyIG5vZGVOYW1lID0gaXNYTUxEb2N1bWVudCA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7
Ci0gICAgICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKLSAgICAgICAgICAgIGlmIChu
b2RlLmlkKQotICAgICAgICAgICAgICAgIHJldHVybiAiPCIgKyBub2RlTmFtZSArICIgaWQ9XCIi
ICsgbm9kZS5pZCArICJcIj4iOwotICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0Lmxlbmd0
aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIGNsYXNzPVwiIiAr
IG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrLywgIiAiKSArICJcIj4iOwot
ICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAiaW5wdXQiICYmIG5vZGUudHlwZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIHR5cGU9XCIiICsgbm9kZS50eXBl
ICsgIlwiPiI7Ci0gICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiPiI7Ci0KLSAg
ICAgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRfTk9ERQotICAgICAgICAgICAgcmV0dXJuIG5vZGVO
YW1lICsgIiBcIiIgKyBub2RlLm5vZGVWYWx1ZSArICJcIiI7Ci0KLSAgICAgICAgY2FzZSA4OiAv
LyBOb2RlLkNPTU1FTlRfTk9ERQotICAgICAgICAgICAgcmV0dXJuICI8IS0tIiArIG5vZGUubm9k
ZVZhbHVlICsgIi0tPiI7Ci0KLSAgICAgICAgY2FzZSAxMDogLy8gTm9kZS5ET0NVTUVOVF9UWVBF
X05PREUKLSAgICAgICAgICAgIHJldHVybiAiPCFET0NUWVBFICIgKyBub2RlTmFtZSArICI+IjsK
LQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1lOwotICAgICAg
ICB9Ci0gICAgfSwKLQotICAgIF9kZXNjcmliZTogZnVuY3Rpb24ob2JqKQotICAgIHsKLSAgICAg
ICAgaWYgKHRoaXMuaXNQcmltaXRpdmVWYWx1ZShvYmopKQotICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0KLSAgICAgICAgaWYgKGlzU3ltYm9sKG9iaikpCi0gICAgICAgICAgICByZXR1cm4gdG9T
dHJpbmcob2JqKTsKLQotICAgICAgICB2YXIgc3VidHlwZSA9IHRoaXMuX3N1YnR5cGUob2JqKTsK
LQotICAgICAgICBpZiAoc3VidHlwZSA9PT0gInJlZ2V4cCIpCi0gICAgICAgICAgICByZXR1cm4g
dG9TdHJpbmcob2JqKTsKLQotICAgICAgICBpZiAoc3VidHlwZSA9PT0gImRhdGUiKQotICAgICAg
ICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaik7Ci0KLSAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJl
cnJvciIpCi0gICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcob2JqKTsKLQotICAgICAgICBpZiAo
c3VidHlwZSA9PT0gInByb3h5IikKLSAgICAgICAgICAgIHJldHVybiAiUHJveHkiOwotCi0gICAg
ICAgIGlmIChzdWJ0eXBlID09PSAibm9kZSIpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9k
ZVByZXZpZXcob2JqKTsKLQotICAgICAgICB2YXIgY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRI
b3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1lKG9iaik7Ci0gICAgICAgIGlmIChzdWJ0eXBlID09
PSAiYXJyYXkiKQotICAgICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLQotICAgICAgICBpZiAo
c3VidHlwZSA9PT0gIml0ZXJhdG9yIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgaW4gb2JqKQotICAg
ICAgICAgICAgcmV0dXJuIG9ialtTeW1ib2wudG9TdHJpbmdUYWddOwotCi0gICAgICAgIC8vIE5v
ZGVMaXN0IGluIEpTQyBpcyBhIGZ1bmN0aW9uLCBjaGVjayBmb3IgYXJyYXkgcHJpb3IgdG8gdGhp
cy4KLSAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICBy
ZXR1cm4gb2JqLnRvU3RyaW5nKCk7Ci0KLSAgICAgICAgLy8gSWYgT2JqZWN0LCB0cnkgZm9yIGEg
YmV0dGVyIG5hbWUgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0gICAgICAgIGlmIChjbGFzc05hbWUg
PT09ICJPYmplY3QiKSB7Ci0gICAgICAgICAgICB2YXIgY29uc3RydWN0b3JOYW1lID0gb2JqLmNv
bnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lOwotICAgICAgICAgICAgaWYgKGNvbnN0
cnVjdG9yTmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JOYW1lOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgICB9LAotCi0gICAgX2dldFNl
dEVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdCwgc2tpcCwgbnVtYmVyVG9GZXRjaCkKLSAgICB7Ci0g
ICAgICAgIHZhciBlbnRyaWVzID0gW107Ci0KLSAgICAgICAgZm9yICh2YXIgdmFsdWUgb2Ygb2Jq
ZWN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ic2VydmFibGUgaWYgdGhlIHBhZ2Ug
b3ZlcnJpZGVzIFNldC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXS4KKyAgICAgICAgZm9yIChs
ZXQgdmFsdWUgb2Ygb2JqZWN0KSB7CiAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKICAgICAg
ICAgICAgICAgICBza2lwLS07CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC04MzEsMTMg
KzcwOCwxNCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAg
ICAgICByZXR1cm4gZW50cmllczsKLSAgICB9LAorICAgIH0KIAotICAgIF9nZXRNYXBFbnRyaWVz
OiBmdW5jdGlvbihvYmplY3QsIHNraXAsIG51bWJlclRvRmV0Y2gpCisgICAgX2dldE1hcEVudHJp
ZXMob2JqZWN0LCBza2lwLCBudW1iZXJUb0ZldGNoKQogICAgIHsKLSAgICAgICAgdmFyIGVudHJp
ZXMgPSBbXTsKKyAgICAgICAgbGV0IGVudHJpZXMgPSBbXTsKIAotICAgICAgICBmb3IgKHZhciBb
a2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ic2Vy
dmFibGUgaWYgdGhlIHBhZ2Ugb3ZlcnJpZGVzIE1hcC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9y
XS4KKyAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG9iamVjdCkgewogICAgICAgICAg
ICAgaWYgKHNraXAgPiAwKSB7CiAgICAgICAgICAgICAgICAgc2tpcC0tOwogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtODUwLDI0ICs3MjgsMjQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIGVudHJpZXM7Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfZ2V0V2Vha01hcEVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdCwgbnVtYmVyVG9G
ZXRjaCkKKyAgICBfZ2V0V2Vha01hcEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC53ZWFrTWFwRW50cmllcyhvYmpl
Y3QsIG51bWJlclRvRmV0Y2gpOwotICAgIH0sCisgICAgfQogCi0gICAgX2dldFdlYWtTZXRFbnRy
aWVzOiBmdW5jdGlvbihvYmplY3QsIG51bWJlclRvRmV0Y2gpCisgICAgX2dldFdlYWtTZXRFbnRy
aWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdEhvc3Qud2Vha1NldEVudHJpZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKTsKLSAgICB9
LAorICAgIH0KIAotICAgIF9nZXRJdGVyYXRvckVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdCwgbnVt
YmVyVG9GZXRjaCkKKyAgICBfZ2V0SXRlcmF0b3JFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRj
aCkKICAgICB7CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QuaXRlcmF0b3JFbnRy
aWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZW50cmll
czogZnVuY3Rpb24ob2JqZWN0LCBzdWJ0eXBlLCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKQor
ICAgIF9lbnRyaWVzKG9iamVjdCwgc3VidHlwZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkK
ICAgICB7CiAgICAgICAgIGlmIChzdWJ0eXBlID09PSAic2V0IikKICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9nZXRTZXRFbnRyaWVzKG9iamVjdCwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCk7
CkBAIC04ODEsMTYgKzc1OSwxNiBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SXRlcmF0b3JFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9G
ZXRjaCk7CiAKICAgICAgICAgdGhyb3cgInVuZXhwZWN0ZWQgdHlwZSI7Ci0gICAgfSwKKyAgICB9
CiAKLSAgICBfc2F2ZVJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KQorICAgIF9zYXZlUmVzdWx0KHJl
c3VsdCkKICAgICB7CiAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSByZXN1bHQ7CiAKICAgICAg
ICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IHJlc3VsdCA9PT0gbnVsbCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICB2YXIgZXhpc3RpbmdJbmRleCA9IHRoaXMuX3NhdmVkUmVz
dWx0cy5pbmRleE9mKHJlc3VsdCk7CisgICAgICAgIGxldCBleGlzdGluZ0luZGV4ID0gdGhpcy5f
c2F2ZWRSZXN1bHRzLmluZGV4T2YocmVzdWx0KTsKICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXgg
IT09IC0xKSB7CiAgICAgICAgICAgICB0aGlzLl9zYXZlZFJlc3VsdEluZGV4ID0gZXhpc3RpbmdJ
bmRleDsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTkwMiw4NCArNzgwLDIxMSBAQCBJbmplY3Rl
ZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vICRuIGlzIGxpbWl0ZWQgZnJvbSAkMS0k
OTkuICQwIGlzIHNwZWNpYWwuCiAgICAgICAgIGlmICh0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRl
eCA+PSAxMDApCiAgICAgICAgICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfc2F2ZWRSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQorICAgIF9z
YXZlZFJlc3VsdChpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zYXZlZFJlc3Vs
dHNbaW5kZXhdOwogICAgIH0KIH0KIAorSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUgPSB7
CisgICAgT3duUHJvcGVydGllczogMSA8PCAwLCAgICAgICAgICAvLyBvd24gcHJvcGVydGllcy4K
KyAgICBOYXRpdmVHZXR0ZXJQcm9wZXJ0aWVzOiAxIDw8IDEsIC8vIG5hdGl2ZSBnZXR0ZXIgcHJv
cGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgorICAgIEFsbFByb3BlcnRpZXM6IDEgPDwg
MiwgICAgICAgICAgLy8gYWxsIHByb3BlcnRpZXMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi4KK307
CisKIHZhciBpbmplY3RlZFNjcmlwdCA9IG5ldyBJbmplY3RlZFNjcmlwdDsKIAorLy8gLS0tLS0t
LQogCi1JbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVj
dEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMp
CitsZXQgUmVtb3RlT2JqZWN0ID0gY2xhc3MgUmVtb3RlT2JqZWN0CiB7Ci0gICAgdGhpcy50eXBl
ID0gdHlwZW9mIG9iamVjdDsKKyAgICBjb25zdHJ1Y3RvcihvYmplY3QsIG9iamVjdEdyb3VwTmFt
ZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCisgICAgewor
ICAgICAgICB0aGlzLnR5cGUgPSB0eXBlb2Ygb2JqZWN0OworCisgICAgICAgIGlmICh0aGlzLnR5
cGUgPT09ICJ1bmRlZmluZWQiICYmIEluamVjdGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxDb2xsZWN0
aW9uKG9iamVjdCkpCisgICAgICAgICAgICB0aGlzLnR5cGUgPSAib2JqZWN0IjsKKworICAgICAg
ICBpZiAoaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpIHx8IG9iamVjdCA9PT0gbnVsbCB8fCBmb3Jj
ZVZhbHVlVHlwZSkgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgc2VuZCB1bmRlZmluZWQgdmFs
dWVzIG92ZXIgSlNPTi4KKyAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICJ1bmRlZmluZWQi
KQorICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvYmplY3Q7CisKKyAgICAgICAgICAgIC8v
IE51bGwgb2JqZWN0IGlzIG9iamVjdCB3aXRoICdudWxsJyBzdWJ0eXBlLgorICAgICAgICAgICAg
aWYgKG9iamVjdCA9PT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aGlzLnN1YnR5cGUgPSAibnVs
bCI7CisKKyAgICAgICAgICAgIC8vIFByb3ZpZGUgdXNlci1mcmllbmRseSBudW1iZXIgdmFsdWVz
LgorICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gIm51bWJlciIpCisgICAgICAgICAgICAg
ICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRvU3RyaW5nRGVzY3JpcHRpb24ob2JqZWN0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMub2JqZWN0SWQgPSBpbmpl
Y3RlZFNjcmlwdC5fYmluZChvYmplY3QsIG9iamVjdEdyb3VwTmFtZSk7CiAKLSAgICBpZiAodGhp
cy50eXBlID09PSAidW5kZWZpbmVkIiAmJiBpbmplY3RlZFNjcmlwdC5faXNIVE1MQWxsQ29sbGVj
dGlvbihvYmplY3QpKQotICAgICAgICB0aGlzLnR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgbGV0
IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZShvYmplY3QpOworICAgICAgICBpZiAoc3Vi
dHlwZSkKKyAgICAgICAgICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7CiAKLSAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHQuaXNQcmltaXRpdmVWYWx1ZShvYmplY3QpIHx8IG9iamVjdCA9PT0gbnVsbCB8
fCBmb3JjZVZhbHVlVHlwZSkgewotICAgICAgICAvLyBXZSBkb24ndCBzZW5kIHVuZGVmaW5lZCB2
YWx1ZXMgb3ZlciBKU09OLgotICAgICAgICBpZiAodGhpcy50eXBlICE9PSAidW5kZWZpbmVkIikK
LSAgICAgICAgICAgIHRoaXMudmFsdWUgPSBvYmplY3Q7CisgICAgICAgIHRoaXMuY2xhc3NOYW1l
ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1lKG9iamVjdCk7Cisg
ICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBSZW1vdGVPYmplY3QuZGVzY3JpYmUob2JqZWN0KTsK
IAotICAgICAgICAvLyBOdWxsIG9iamVjdCBpcyBvYmplY3Qgd2l0aCAnbnVsbCcgc3VidHlwZS4K
LSAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkKLSAgICAgICAgICAgIHRoaXMuc3VidHlwZSA9
ICJudWxsIjsKKyAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJhcnJheSIpCisgICAgICAgICAgICB0
aGlzLnNpemUgPSB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PT0gIm51bWJlciIgPyBvYmplY3QubGVu
Z3RoIDogMDsKKyAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gInNldCIgfHwgc3VidHlwZSA9
PT0gIm1hcCIpCisgICAgICAgICAgICB0aGlzLnNpemUgPSBvYmplY3Quc2l6ZTsKKyAgICAgICAg
ZWxzZSBpZiAoc3VidHlwZSA9PT0gIndlYWttYXAiKQorICAgICAgICAgICAgdGhpcy5zaXplID0g
SW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtNYXBTaXplKG9iamVjdCk7CisgICAgICAgIGVsc2UgaWYg
KHN1YnR5cGUgPT09ICJ3ZWFrc2V0IikKKyAgICAgICAgICAgIHRoaXMuc2l6ZSA9IEluamVjdGVk
U2NyaXB0SG9zdC53ZWFrU2V0U2l6ZShvYmplY3QpOworICAgICAgICBlbHNlIGlmIChzdWJ0eXBl
ID09PSAiY2xhc3MiKSB7CisgICAgICAgICAgICB0aGlzLmNsYXNzUHJvdG90eXBlID0gUmVtb3Rl
T2JqZWN0LmNyZWF0ZShvYmplY3QucHJvdG90eXBlLCBvYmplY3RHcm91cE5hbWUpOworICAgICAg
ICAgICAgdGhpcy5jbGFzc05hbWUgPSBvYmplY3QubmFtZTsKKyAgICAgICAgfQogCi0gICAgICAg
IC8vIFByb3ZpZGUgdXNlci1mcmllbmRseSBudW1iZXIgdmFsdWVzLgotICAgICAgICBpZiAodGhp
cy50eXBlID09PSAibnVtYmVyIikKLSAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0b1N0
cmluZ0Rlc2NyaXB0aW9uKG9iamVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGdl
bmVyYXRlUHJldmlldyAmJiB0aGlzLnR5cGUgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBp
ZiAoc3VidHlwZSA9PT0gInByb3h5IikgeworICAgICAgICAgICAgICAgIHRoaXMucHJldmlldyA9
IHRoaXMuX2dlbmVyYXRlUHJldmlldyhJbmplY3RlZFNjcmlwdEhvc3QucHJveHlUYXJnZXRWYWx1
ZShvYmplY3QpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXcubG9zc2xlc3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRo
aXMuX2dlbmVyYXRlUHJldmlldyhvYmplY3QsIHVuZGVmaW5lZCwgY29sdW1uTmFtZXMpOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgdGhpcy5vYmplY3RJZCA9IGluamVjdGVkU2NyaXB0Ll9iaW5k
KG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lKTsKLQotICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRT
Y3JpcHQuX3N1YnR5cGUob2JqZWN0KTsKLSAgICBpZiAoc3VidHlwZSkKLSAgICAgICAgdGhpcy5z
dWJ0eXBlID0gc3VidHlwZTsKLQotICAgIHRoaXMuY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRI
b3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1lKG9iamVjdCk7Ci0gICAgdGhpcy5kZXNjcmlwdGlv
biA9IGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZShvYmplY3QpOwotCi0gICAgaWYgKHN1YnR5cGUg
PT09ICJhcnJheSIpCi0gICAgICAgIHRoaXMuc2l6ZSA9IHR5cGVvZiBvYmplY3QubGVuZ3RoID09
PSAibnVtYmVyIiA/IG9iamVjdC5sZW5ndGggOiAwOwotICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09
ICJzZXQiIHx8IHN1YnR5cGUgPT09ICJtYXAiKQotICAgICAgICB0aGlzLnNpemUgPSBvYmplY3Qu
c2l6ZTsKLSAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAid2Vha21hcCIpCi0gICAgICAgIHRoaXMu
c2l6ZSA9IEluamVjdGVkU2NyaXB0SG9zdC53ZWFrTWFwU2l6ZShvYmplY3QpOwotICAgIGVsc2Ug
aWYgKHN1YnR5cGUgPT09ICJ3ZWFrc2V0IikKLSAgICAgICAgdGhpcy5zaXplID0gSW5qZWN0ZWRT
Y3JpcHRIb3N0LndlYWtTZXRTaXplKG9iamVjdCk7Ci0gICAgZWxzZSBpZiAoc3VidHlwZSA9PT0g
ImNsYXNzIikgewotICAgICAgICB0aGlzLmNsYXNzUHJvdG90eXBlID0gaW5qZWN0ZWRTY3JpcHQu
X3dyYXBPYmplY3Qob2JqZWN0LnByb3RvdHlwZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICAgICAg
dGhpcy5jbGFzc05hbWUgPSBvYmplY3QubmFtZTsKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRp
YyBjcmVhdGUob2JqZWN0LCBvYmplY3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBnZW5lcmF0
ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgUmVtb3RlT2JqZWN0KG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZh
bHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcyk7CisgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBSZW1vdGVPYmplY3QuZGVzY3JpYmUoZSk7Cisg
ICAgICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgIGFsZXJ0KGV4Lm1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gIjxmYWlsZWQgdG8gY29udmVydCBl
eGNlcHRpb24gdG8gc3RyaW5nPiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bmV3IFJlbW90ZU9iamVjdChkZXNjcmlwdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoZ2VuZXJhdGVQcmV2aWV3ICYmIHRoaXMudHlwZSA9PT0gIm9iamVjdCIpIHsKLSAgICAgICAg
aWYgKHN1YnR5cGUgPT09ICJwcm94eSIpIHsKLSAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRo
aXMuX2dlbmVyYXRlUHJldmlldyhJbmplY3RlZFNjcmlwdEhvc3QucHJveHlUYXJnZXRWYWx1ZShv
YmplY3QpKTsKLSAgICAgICAgICAgIHRoaXMucHJldmlldy5sb3NzbGVzcyA9IGZhbHNlOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRoaXMuX2dlbmVyYXRlUHJl
dmlldyhvYmplY3QsIHVuZGVmaW5lZCwgY29sdW1uTmFtZXMpOworICAgIHN0YXRpYyBjcmVhdGVP
YmplY3RQcmV2aWV3Rm9yVmFsdWUodmFsdWUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMp
CisgICAgeworICAgICAgICBsZXQgcmVtb3RlT2JqZWN0ID0gbmV3IFJlbW90ZU9iamVjdCh2YWx1
ZSwgdW5kZWZpbmVkLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3LCBjb2x1bW5OYW1lcyk7CisgICAg
ICAgIGlmIChyZW1vdGVPYmplY3Qub2JqZWN0SWQpCisgICAgICAgICAgICBpbmplY3RlZFNjcmlw
dC5yZWxlYXNlT2JqZWN0KHJlbW90ZU9iamVjdC5vYmplY3RJZCk7CisgICAgICAgIGlmIChyZW1v
dGVPYmplY3QuY2xhc3NQcm90b3R5cGUgJiYgcmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90eXBlLm9i
amVjdElkKQorICAgICAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVP
YmplY3QuY2xhc3NQcm90b3R5cGUub2JqZWN0SWQpOworICAgICAgICByZXR1cm4gcmVtb3RlT2Jq
ZWN0LnByZXZpZXcgfHwgcmVtb3RlT2JqZWN0Ll9lbXB0eVByZXZpZXcoKTsKICAgICB9Ci19Owog
Ci1JbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVl
ID0gZnVuY3Rpb24odmFsdWUsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCi17Ci0gICAg
dmFyIHJlbW90ZU9iamVjdCA9IG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QodmFsdWUs
IHVuZGVmaW5lZCwgZmFsc2UsIGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpOwotICAgIGlm
IChyZW1vdGVPYmplY3Qub2JqZWN0SWQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VP
YmplY3QocmVtb3RlT2JqZWN0Lm9iamVjdElkKTsKLSAgICBpZiAocmVtb3RlT2JqZWN0LmNsYXNz
UHJvdG90eXBlICYmIHJlbW90ZU9iamVjdC5jbGFzc1Byb3RvdHlwZS5vYmplY3RJZCkKLSAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5
cGUub2JqZWN0SWQpOwotICAgIHJldHVybiByZW1vdGVPYmplY3QucHJldmlldyB8fCByZW1vdGVP
YmplY3QuX2VtcHR5UHJldmlldygpOwotfTsKLQotSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0
LnByb3RvdHlwZSA9IHsKLSAgICBfaW5pdGlhbFByZXZpZXc6IGZ1bmN0aW9uKCkKKyAgICBzdGF0
aWMgc3VidHlwZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkKKyAg
ICAgICAgICAgIHJldHVybiAibnVsbCI7CisKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlVmFsdWUo
dmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisg
ICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKworICAgICAgICBsZXQgcHJlY2lzZVR5cGUg
PSBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZSh2YWx1ZSk7CisgICAgICAgIGlmIChwcmVjaXNl
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNlVHlwZTsKKworICAgICAgICAvLyBGaXJl
QnVnJ3MgYXJyYXkgZGV0ZWN0aW9uLgorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHR5
cGVvZiB2YWx1ZS5zcGxpY2UgPT09ICJmdW5jdGlvbiIgJiYgaXNGaW5pdGUodmFsdWUubGVuZ3Ro
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKyAgICAgICAgfSBjYXRjaCAoZSkg
e30KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBzdGF0aWMgZGVzY3JpYmUo
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKTsKKworICAgICAgICBsZXQgc3VidHlwZSA9
IFJlbW90ZU9iamVjdC5zdWJ0eXBlKHZhbHVlKTsKKworICAgICAgICBpZiAoc3VidHlwZSA9PT0g
InJlZ2V4cCIpCisgICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpOworCisgICAgICAg
IGlmIChzdWJ0eXBlID09PSAiZGF0ZSIpCisgICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcodmFs
dWUpOworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAiZXJyb3IiKQorICAgICAgICAgICAgcmV0
dXJuIHRvU3RyaW5nKHZhbHVlKTsKKworICAgICAgICBpZiAoc3VidHlwZSA9PT0gInByb3h5IikK
KyAgICAgICAgICAgIHJldHVybiAiUHJveHkiOworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAi
bm9kZSIpCisgICAgICAgICAgICByZXR1cm4gUmVtb3RlT2JqZWN0Lm5vZGVQcmV2aWV3KHZhbHVl
KTsKKworICAgICAgICBsZXQgY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVybmFs
Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKKyAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJhcnJheSIp
CisgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOworCisgICAgICAgIGlmIChzdWJ0eXBlID09
PSAiaXRlcmF0b3IiICYmIFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddOworCisgICAgICAgIC8vIE5vZGVMaXN0
IGluIEpTQyBpcyBhIGZ1bmN0aW9uLCBjaGVjayBmb3IgYXJyYXkgcHJpb3IgdG8gdGhpcy4KKyAg
ICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS50b1N0cmluZygpOworCisgICAgICAgIC8vIElmIE9iamVjdCwgdHJ5IGZvciBhIGJl
dHRlciBuYW1lIGZyb20gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAoY2xhc3NOYW1lID09
PSAiT2JqZWN0IikgeworICAgICAgICAgICAgbGV0IGNvbnN0cnVjdG9yTmFtZSA9IHZhbHVlLmNv
bnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7CisgICAgICAgICAgICBpZiAoY29u
c3RydWN0b3JOYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2xhc3NOYW1lOworICAgIH0KKworICAgIHN0YXRp
YyBub2RlUHJldmlldyhub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGlzWE1MRG9jdW1lbnQgPSBu
b2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKKyAg
ICAgICAgbGV0IG5vZGVOYW1lID0gaXNYTUxEb2N1bWVudCA/IG5vZGUubm9kZU5hbWUgOiBub2Rl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBl
KSB7CisgICAgICAgIGNhc2UgMTogLy8gTm9kZS5FTEVNRU5UX05PREUKKyAgICAgICAgICAgIGlm
IChub2RlLmlkKQorICAgICAgICAgICAgICAgIHJldHVybiAiPCIgKyBub2RlTmFtZSArICIgaWQ9
XCIiICsgbm9kZS5pZCArICJcIj4iOworICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0Lmxl
bmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIGNsYXNzPVwi
IiArIG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrLywgIiAiKSArICJcIj4i
OworICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAiaW5wdXQiICYmIG5vZGUudHlwZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiIHR5cGU9XCIiICsgbm9kZS50
eXBlICsgIlwiPiI7CisgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiPiI7CisK
KyAgICAgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRfTk9ERQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGVOYW1lICsgIiBcIiIgKyBub2RlLm5vZGVWYWx1ZSArICJcIiI7CisKKyAgICAgICAgY2FzZSA4
OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQorICAgICAgICAgICAgcmV0dXJuICI8IS0tIiArIG5vZGUu
bm9kZVZhbHVlICsgIi0tPiI7CisKKyAgICAgICAgY2FzZSAxMDogLy8gTm9kZS5ET0NVTUVOVF9U
WVBFX05PREUKKyAgICAgICAgICAgIHJldHVybiAiPCFET0NUWVBFICIgKyBub2RlTmFtZSArICI+
IjsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1lOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2luaXRpYWxQcmV2aWV3KCkK
ICAgICB7Ci0gICAgICAgIHZhciBwcmV2aWV3ID0geworICAgICAgICBsZXQgcHJldmlldyA9IHsK
ICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSwKICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0
aGlzLmRlc2NyaXB0aW9uIHx8IHRvU3RyaW5nKHRoaXMudmFsdWUpLAogICAgICAgICAgICAgbG9z
c2xlc3M6IHRydWUsCkBAIC05OTcsMTEgKzEwMDIsMTEgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3Rl
T2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHByZXZpZXcuc2l6ZSA9IHRoaXMuc2l6
ZTsKIAogICAgICAgICByZXR1cm4gcHJldmlldzsKLSAgICB9LAorICAgIH0KIAotICAgIF9lbXB0
eVByZXZpZXc6IGZ1bmN0aW9uKCkKKyAgICBfZW1wdHlQcmV2aWV3KCkKICAgICB7Ci0gICAgICAg
IHZhciBwcmV2aWV3ID0gdGhpcy5faW5pdGlhbFByZXZpZXcoKTsKKyAgICAgICAgbGV0IHByZXZp
ZXcgPSB0aGlzLl9pbml0aWFsUHJldmlldygpOwogCiAgICAgICAgIGlmICh0aGlzLnN1YnR5cGUg
PT09ICJtYXAiIHx8IHRoaXMuc3VidHlwZSA9PT0gInNldCIgfHwgdGhpcy5zdWJ0eXBlID09PSAi
d2Vha21hcCIgfHwgdGhpcy5zdWJ0eXBlID09PSAid2Vha3NldCIgfHwgdGhpcy5zdWJ0eXBlID09
PSAiaXRlcmF0b3IiKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5zaXplKSB7CkBAIC0xMDEyLDE1
ICsxMDE3LDE1IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXR1cm4gcHJldmlldzsKLSAgICB9LAorICAgIH0KIAotICAg
IF9nZW5lcmF0ZVByZXZpZXc6IGZ1bmN0aW9uKG9iamVjdCwgZmlyc3RMZXZlbEtleXMsIHNlY29u
ZExldmVsS2V5cykKKyAgICBfZ2VuZXJhdGVQcmV2aWV3KG9iamVjdCwgZmlyc3RMZXZlbEtleXMs
IHNlY29uZExldmVsS2V5cykKICAgICB7Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGhpcy5faW5p
dGlhbFByZXZpZXcoKTsKLSAgICAgICAgdmFyIGlzVGFibGVSb3dzUmVxdWVzdCA9IHNlY29uZExl
dmVsS2V5cyA9PT0gbnVsbCB8fCBzZWNvbmRMZXZlbEtleXM7Ci0gICAgICAgIHZhciBmaXJzdExl
dmVsS2V5c0NvdW50ID0gZmlyc3RMZXZlbEtleXMgPyBmaXJzdExldmVsS2V5cy5sZW5ndGggOiAw
OworICAgICAgICBsZXQgcHJldmlldyA9IHRoaXMuX2luaXRpYWxQcmV2aWV3KCk7CisgICAgICAg
IGxldCBpc1RhYmxlUm93c1JlcXVlc3QgPSBzZWNvbmRMZXZlbEtleXMgPT09IG51bGwgfHwgc2Vj
b25kTGV2ZWxLZXlzOworICAgICAgICBsZXQgZmlyc3RMZXZlbEtleXNDb3VudCA9IGZpcnN0TGV2
ZWxLZXlzID8gZmlyc3RMZXZlbEtleXMubGVuZ3RoIDogMDsKIAotICAgICAgICB2YXIgcHJvcGVy
dGllc1RocmVzaG9sZCA9IHsKKyAgICAgICAgbGV0IHByb3BlcnRpZXNUaHJlc2hvbGQgPSB7CiAg
ICAgICAgICAgICBwcm9wZXJ0aWVzOiBpc1RhYmxlUm93c1JlcXVlc3QgPyAxMDAwIDogTWF0aC5t
YXgoNSwgZmlyc3RMZXZlbEtleXNDb3VudCksCiAgICAgICAgICAgICBpbmRleGVzOiBpc1RhYmxl
Um93c1JlcXVlc3QgPyAxMDAwIDogTWF0aC5tYXgoMTAsIGZpcnN0TGV2ZWxLZXlzQ291bnQpCiAg
ICAgICAgIH07CkBAIC0xMDMzLDcgKzEwMzgsNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmpl
Y3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgcHJldmlldy5wcm9wZXJ0aWVzID0gW107CiAK
ICAgICAgICAgICAgIC8vIEludGVybmFsIFByb3BlcnRpZXMuCi0gICAgICAgICAgICB2YXIgaW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzID0gaW5qZWN0ZWRTY3JpcHQuX2ludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9ycyhvYmplY3QsIHRydWUpOworICAgICAgICAgICAgbGV0IGludGVybmFsUHJv
cGVydHlEZXNjcmlwdG9ycyA9IGluamVjdGVkU2NyaXB0Ll9pbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvcnMob2JqZWN0LCB0cnVlKTsKICAgICAgICAgICAgIGlmIChpbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcnMpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXdz
KG9iamVjdCwgcHJldmlldywgaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzLCB0cnVlLCBwcm9w
ZXJ0aWVzVGhyZXNob2xkLCBmaXJzdExldmVsS2V5cywgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydGllc1RocmVzaG9sZC5pbmRleGVzIDwgMCB8fCBwcm9wZXJ0
aWVzVGhyZXNob2xkLnByb3BlcnRpZXMgPCAwKQpAQCAtMTA0NCw4ICsxMDQ5LDggQEAgSW5qZWN0
ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1
cm4gcHJldmlldzsKIAogICAgICAgICAgICAgLy8gUHJvcGVydGllcy4KLSAgICAgICAgICAgIHZh
ciBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0cnVlOwotICAgICAgICAgICAgdmFyIGRlc2NyaXB0
b3JzID0gaW5qZWN0ZWRTY3JpcHQuX3Byb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCBJbmplY3Rl
ZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5BbGxQcm9wZXJ0aWVzLCBuYXRpdmVHZXR0ZXJzQXNWYWx1
ZXMpOworICAgICAgICAgICAgbGV0IG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyA9IHRydWU7CisgICAg
ICAgICAgICBsZXQgZGVzY3JpcHRvcnMgPSBpbmplY3RlZFNjcmlwdC5fcHJvcGVydHlEZXNjcmlw
dG9ycyhvYmplY3QsIEluamVjdGVkU2NyaXB0LkNvbGxlY3Rpb25Nb2RlLkFsbFByb3BlcnRpZXMs
IG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CiAgICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0
eVByZXZpZXdzKG9iamVjdCwgcHJldmlldywgZGVzY3JpcHRvcnMsIGZhbHNlLCBwcm9wZXJ0aWVz
VGhyZXNob2xkLCBmaXJzdExldmVsS2V5cywgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAg
IGlmIChwcm9wZXJ0aWVzVGhyZXNob2xkLmluZGV4ZXMgPCAwIHx8IHByb3BlcnRpZXNUaHJlc2hv
bGQucHJvcGVydGllcyA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpZXc7CkBAIC0x
MDU0LDkgKzEwNTksOSBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0g
ewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHByZXZpZXc7Ci0gICAgfSwKKyAgICB9CiAK
LSAgICBfYXBwZW5kUHJvcGVydHlQcmV2aWV3czogZnVuY3Rpb24ob2JqZWN0LCBwcmV2aWV3LCBk
ZXNjcmlwdG9ycywgaW50ZXJuYWwsIHByb3BlcnRpZXNUaHJlc2hvbGQsIGZpcnN0TGV2ZWxLZXlz
LCBzZWNvbmRMZXZlbEtleXMpCisgICAgX2FwcGVuZFByb3BlcnR5UHJldmlld3Mob2JqZWN0LCBw
cmV2aWV3LCBkZXNjcmlwdG9ycywgaW50ZXJuYWwsIHByb3BlcnRpZXNUaHJlc2hvbGQsIGZpcnN0
TGV2ZWxLZXlzLCBzZWNvbmRMZXZlbEtleXMpCiAgICAgewogICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IGRlc2NyaXB0b3JzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBsZXQgZGVzY3Jp
cHRvciA9IGRlc2NyaXB0b3JzW2ldOwpAQCAtMTA3Miw3ICsxMDc3LDcgQEAgSW5qZWN0ZWRTY3Jp
cHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gRG8gbm90IHNob3cgIl9fcHJvdG9fXyIgaW4gcHJldmlldy4KLSAgICAgICAgICAgIHZh
ciBuYW1lID0gZGVzY3JpcHRvci5uYW1lOworICAgICAgICAgICAgbGV0IG5hbWUgPSBkZXNjcmlw
dG9yLm5hbWU7CiAgICAgICAgICAgICBpZiAobmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAg
ICAgICAgICAgICAvLyBOb24gYmFzaWMgX19wcm90b19fIG9iamVjdHMgbWF5IGhhdmUgaW50ZXJl
c3RpbmcsIG5vbi1lbnVtZXJhYmxlLCBtZXRob2RzIHRvIHNob3cuCiAgICAgICAgICAgICAgICAg
aWYgKGRlc2NyaXB0b3IudmFsdWUgJiYgZGVzY3JpcHRvci52YWx1ZS5jb25zdHJ1Y3RvcgpAQCAt
MTEwNiwyNCArMTExMSwyNCBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBOdWxsIHZhbHVlLgotICAgICAg
ICAgICAgdmFyIHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZTsKKyAgICAgICAgICAgIGxldCB2YWx1
ZSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsK
ICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXcocHJldmlldywgaW50
ZXJuYWwsIHtuYW1lLCB0eXBlOiAib2JqZWN0Iiwgc3VidHlwZTogIm51bGwiLCB2YWx1ZTogIm51
bGwifSwgcHJvcGVydGllc1RocmVzaG9sZCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElnbm9yZSBub24tZW51bWVyYWJsZSBmdW5j
dGlvbnMuCi0gICAgICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKKyAgICAgICAgICAg
IGxldCB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVu
dW1lcmFibGUgJiYgdHlwZSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgLy8gRml4IHR5cGUgb2YgZG9jdW1lbnQuYWxsLgotICAgICAgICAg
ICAgaWYgKHR5cGUgPT09ICJ1bmRlZmluZWQiICYmIGluamVjdGVkU2NyaXB0Ll9pc0hUTUxBbGxD
b2xsZWN0aW9uKHZhbHVlKSkKKyAgICAgICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3QuaXNI
VE1MQWxsQ29sbGVjdGlvbih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgdHlwZSA9ICJvYmplY3Qi
OwogCiAgICAgICAgICAgICAvLyBQcmltaXRpdmUuCiAgICAgICAgICAgICBjb25zdCBtYXhMZW5n
dGggPSAxMDA7Ci0gICAgICAgICAgICBpZiAoSW5qZWN0ZWRTY3JpcHQucHJpbWl0aXZlVHlwZXNb
dHlwZV0pIHsKKyAgICAgICAgICAgIGlmIChpc1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkgewogICAg
ICAgICAgICAgICAgIGlmICh0eXBlID09PSAic3RyaW5nIiAmJiB2YWx1ZS5sZW5ndGggPiBtYXhM
ZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9hYmJyZXZpYXRlU3Ry
aW5nKHZhbHVlLCBtYXhMZW5ndGgsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBwcmV2aWV3
Lmxvc3NsZXNzID0gZmFsc2U7CkBAIC0xMTM0LDcgKzExMzksNyBAQCBJbmplY3RlZFNjcmlwdC5S
ZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogCiAgICAgICAgICAgICAvLyBTeW1ib2wuCiAgICAg
ICAgICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN5bWJv
bFN0cmluZyA9IHRvU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBsZXQgc3ltYm9sU3Ry
aW5nID0gdG9TdHJpbmcodmFsdWUpOwogICAgICAgICAgICAgICAgIGlmIChzeW1ib2xTdHJpbmcu
bGVuZ3RoID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFN0cmluZyA9
IHRoaXMuX2FiYnJldmlhdGVTdHJpbmcoc3ltYm9sU3RyaW5nLCBtYXhMZW5ndGgsIHRydWUpOwog
ICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Lmxvc3NsZXNzID0gZmFsc2U7CkBAIC0xMTQ0LDMw
ICsxMTQ5LDMwIEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE9iamVjdC4KLSAgICAgICAgICAgIHZhciBw
cm9wZXJ0eSA9IHtuYW1lLCB0eXBlfTsKLSAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0
ZWRTY3JpcHQuX3N1YnR5cGUodmFsdWUpOworICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0ge25h
bWUsIHR5cGV9OworICAgICAgICAgICAgbGV0IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3VidHlw
ZSh2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoc3VidHlwZSkKICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eS5zdWJ0eXBlID0gc3VidHlwZTsKIAogICAgICAgICAgICAgLy8gU2Vjb25kIGxldmVsLgog
ICAgICAgICAgICAgaWYgKChzZWNvbmRMZXZlbEtleXMgPT09IG51bGwgfHwgc2Vjb25kTGV2ZWxL
ZXlzKSB8fCB0aGlzLl9pc1ByZXZpZXdhYmxlT2JqZWN0KHZhbHVlLCBvYmplY3QpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIHdhbnQgc2Vjb25kTGV2ZWxLZXlzIGZpbHRlciB0
byBjb250aW51ZSB3ZSB3b3VsZCBuZWVkIHNvbWUgcmVmYWN0b3JpbmcuCi0gICAgICAgICAgICAg
ICAgdmFyIHN1YlByZXZpZXcgPSBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2Jq
ZWN0UHJldmlld0ZvclZhbHVlKHZhbHVlLCB2YWx1ZSAhPT0gb2JqZWN0LCBzZWNvbmRMZXZlbEtl
eXMpOworICAgICAgICAgICAgICAgIGxldCBzdWJQcmV2aWV3ID0gUmVtb3RlT2JqZWN0LmNyZWF0
ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1ZSwgdmFsdWUgIT09IG9iamVjdCwgc2Vjb25kTGV2
ZWxLZXlzKTsKICAgICAgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZVByZXZpZXcgPSBzdWJQcmV2
aWV3OwogICAgICAgICAgICAgICAgIGlmICghc3ViUHJldmlldy5sb3NzbGVzcykKICAgICAgICAg
ICAgICAgICAgICAgcHJldmlldy5sb3NzbGVzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlm
IChzdWJQcmV2aWV3Lm92ZXJmbG93KQogICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Lm92ZXJm
bG93ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRl
c2NyaXB0aW9uID0gIiI7CisgICAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gIiI7CiAg
ICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09ICJmdW5jdGlvbiIgfHwgc3VidHlwZSA9PT0gImNs
YXNzIikgewotICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbERlc2NyaXB0aW9uOworICAgICAg
ICAgICAgICAgICAgICBsZXQgZnVsbERlc2NyaXB0aW9uOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoc3VidHlwZSA9PT0gImNsYXNzIikKICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxEZXNj
cmlwdGlvbiA9ICJjbGFzcyAiICsgdmFsdWUubmFtZTsKICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc3VidHlwZSA9PT0gIm5vZGUiKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVsbERl
c2NyaXB0aW9uID0gaW5qZWN0ZWRTY3JpcHQuX25vZGVQcmV2aWV3KHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bGxEZXNjcmlwdGlvbiA9IFJlbW90ZU9iamVjdC5ub2RlUHJldmll
dyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bGxEZXNjcmlwdGlvbiA9IGluamVjdGVkU2NyaXB0Ll9kZXNjcmliZSh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmdWxsRGVzY3JpcHRpb24gPSBSZW1vdGVPYmplY3QuZGVz
Y3JpYmUodmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuX2Fi
YnJldmlhdGVTdHJpbmcoZnVsbERlc2NyaXB0aW9uLCBtYXhMZW5ndGgsIHN1YnR5cGUgPT09ICJy
ZWdleHAiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJvcGVydHkudmFs
dWUgPSBkZXNjcmlwdGlvbjsKQEAgLTExNzYsOSArMTE4MSw5IEBAIEluamVjdGVkU2NyaXB0LlJl
bW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFByb3Bl
cnR5UHJldmlldyhwcmV2aWV3LCBpbnRlcm5hbCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJlc2hv
bGQpOwogICAgICAgICB9Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXBwZW5kUHJvcGVydHlQcmV2
aWV3OiBmdW5jdGlvbihwcmV2aWV3LCBpbnRlcm5hbCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJl
c2hvbGQpCisgICAgX2FwcGVuZFByb3BlcnR5UHJldmlldyhwcmV2aWV3LCBpbnRlcm5hbCwgcHJv
cGVydHksIHByb3BlcnRpZXNUaHJlc2hvbGQpCiAgICAgewogICAgICAgICBpZiAodG9TdHJpbmco
cHJvcGVydHkubmFtZSA+Pj4gMCkgPT09IHByb3BlcnR5Lm5hbWUpCiAgICAgICAgICAgICBwcm9w
ZXJ0aWVzVGhyZXNob2xkLmluZGV4ZXMtLTsKQEAgLTExOTUsMTIgKzEyMDAsMTIgQEAgSW5qZWN0
ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHByb3BlcnR5
LmludGVybmFsID0gdHJ1ZTsKIAogICAgICAgICBwcmV2aWV3LnByb3BlcnRpZXMucHVzaChwcm9w
ZXJ0eSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXBwZW5kRW50cnlQcmV2aWV3czogZnVuY3Rp
b24ob2JqZWN0LCBwcmV2aWV3KQorICAgIF9hcHBlbmRFbnRyeVByZXZpZXdzKG9iamVjdCwgcHJl
dmlldykKICAgICB7CiAgICAgICAgIC8vIEZldGNoIDYsIGJ1dCBvbmx5IHJldHVybiA1LCBzbyB3
ZSBjYW4gdGVsbCBpZiB3ZSBvdmVyZmxvd2VkLgotICAgICAgICB2YXIgZW50cmllcyA9IGluamVj
dGVkU2NyaXB0Ll9lbnRyaWVzKG9iamVjdCwgdGhpcy5zdWJ0eXBlLCAwLCA2KTsKKyAgICAgICAg
bGV0IGVudHJpZXMgPSBpbmplY3RlZFNjcmlwdC5fZW50cmllcyhvYmplY3QsIHRoaXMuc3VidHlw
ZSwgMCwgNik7CiAgICAgICAgIGlmICghZW50cmllcykKICAgICAgICAgICAgIHJldHVybjsKIApA
QCAtMTIxNiwzMiArMTIyMSwzMiBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90
eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcHJldmlldy5lbnRyaWVzID0gZW50cmllcy5t
YXAoZnVuY3Rpb24oZW50cnkpIHsKLSAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gSW5qZWN0ZWRT
Y3JpcHQuUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZShlbnRyeS52YWx1
ZSwgZW50cnkudmFsdWUgIT09IG9iamVjdCk7CisgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IFJl
bW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUoZW50cnkudmFsdWUsIGVudHJ5
LnZhbHVlICE9PSBvYmplY3QpOwogICAgICAgICAgICAgdXBkYXRlTWFpblByZXZpZXcoZW50cnku
dmFsdWUpOwogICAgICAgICAgICAgaWYgKCJrZXkiIGluIGVudHJ5KSB7Ci0gICAgICAgICAgICAg
ICAgZW50cnkua2V5ID0gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFBy
ZXZpZXdGb3JWYWx1ZShlbnRyeS5rZXksIGVudHJ5LmtleSAhPT0gb2JqZWN0KTsKKyAgICAgICAg
ICAgICAgICBlbnRyeS5rZXkgPSBSZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZh
bHVlKGVudHJ5LmtleSwgZW50cnkua2V5ICE9PSBvYmplY3QpOwogICAgICAgICAgICAgICAgIHVw
ZGF0ZU1haW5QcmV2aWV3KGVudHJ5LmtleSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gZW50cnk7Ci0gICAgICAgIH0sIHRoaXMpOwotICAgIH0sCisgICAgICAgIH0pOworICAg
IH0KIAotICAgIF9pc1ByZXZpZXdhYmxlT2JqZWN0OiBmdW5jdGlvbih2YWx1ZSwgb2JqZWN0KQor
ICAgIF9pc1ByZXZpZXdhYmxlT2JqZWN0KHZhbHVlLCBvYmplY3QpCiAgICAgewogICAgICAgICBs
ZXQgc2V0ID0gbmV3IFNldDsKICAgICAgICAgc2V0LmFkZChvYmplY3QpOwogCiAgICAgICAgIHJl
dHVybiB0aGlzLl9pc1ByZXZpZXdhYmxlT2JqZWN0SW50ZXJuYWwodmFsdWUsIHNldCwgMSk7Ci0g
ICAgfSwKKyAgICB9CiAKLSAgICBfaXNQcmV2aWV3YWJsZU9iamVjdEludGVybmFsOiBmdW5jdGlv
bihvYmplY3QsIGtub3duT2JqZWN0cywgZGVwdGgpCisgICAgX2lzUHJldmlld2FibGVPYmplY3RJ
bnRlcm5hbChvYmplY3QsIGtub3duT2JqZWN0cywgZGVwdGgpCiAgICAgewogICAgICAgICAvLyBE
ZWVwIG9iamVjdC4KICAgICAgICAgaWYgKGRlcHRoID4gMykKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAvLyBQcmltaXRpdmUuCi0gICAgICAgIGlmIChpbmplY3RlZFNjcmlw
dC5pc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkgfHwgaXNTeW1ib2wob2JqZWN0KSkKKyAgICAgICAg
aWYgKGlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSB8fCBpc1N5bWJvbChvYmplY3QpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gTnVsbC4KQEAgLTEyNTYsMTIgKzEyNjEs
MTIgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
a25vd25PYmplY3RzLmFkZChvYmplY3QpOwogCiAgICAgICAgIC8vIEFycmF5cyBhcmUgc2ltcGxl
IGlmIHRoZXkgaGF2ZSA1IG9yIGxlc3Mgc2ltcGxlIG9iamVjdHMuCi0gICAgICAgIHZhciBzdWJ0
eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUob2JqZWN0KTsKKyAgICAgICAgbGV0IHN1YnR5
cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZShvYmplY3QpOwogICAgICAgICBpZiAoc3VidHlwZSA9
PT0gImFycmF5IikgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7Cisg
ICAgICAgICAgICBsZXQgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsKICAgICAgICAgICAgIGlmIChs
ZW5ndGggPiA1KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2lzUHJl
dmlld2FibGVPYmplY3RJbnRlcm5hbChvYmplY3RbaV0sIGtub3duT2JqZWN0cywgZGVwdGgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0xMjgz
LDE2ICsxMjg4LDE2IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAg
IF9hYmJyZXZpYXRlU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcsIG1heExlbmd0aCwgbWlkZGxlKQor
ICAgIF9hYmJyZXZpYXRlU3RyaW5nKHN0cmluZywgbWF4TGVuZ3RoLCBtaWRkbGUpCiAgICAgewog
ICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA8PSBtYXhMZW5ndGgpCiAgICAgICAgICAgICByZXR1
cm4gc3RyaW5nOwogCiAgICAgICAgIGlmIChtaWRkbGUpIHsKLSAgICAgICAgICAgIHZhciBsZWZ0
SGFsZiA9IG1heExlbmd0aCA+PiAxOwotICAgICAgICAgICAgdmFyIHJpZ2h0SGFsZiA9IG1heExl
bmd0aCAtIGxlZnRIYWxmIC0gMTsKKyAgICAgICAgICAgIGxldCBsZWZ0SGFsZiA9IG1heExlbmd0
aCA+PiAxOworICAgICAgICAgICAgbGV0IHJpZ2h0SGFsZiA9IG1heExlbmd0aCAtIGxlZnRIYWxm
IC0gMTsKICAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc3Vic3RyKDAsIGxlZnRIYWxmKSArICJc
dTIwMjYiICsgc3RyaW5nLnN1YnN0cihzdHJpbmcubGVuZ3RoIC0gcmlnaHRIYWxmLCByaWdodEhh
bGYpOwogICAgICAgICB9CiAKQEAgLTEzMDAsMjQgKzEzMDUsMjYgQEAgSW5qZWN0ZWRTY3JpcHQu
UmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKKy8vIC0tLS0tLS0KKwogSW5q
ZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkgPSBmdW5jdGlvbihvcmRpbmFsLCBjYWxsRnJhbWUp
CiB7Ci0gICAgdGhpcy5jYWxsRnJhbWVJZCA9ICJ7XCJvcmRpbmFsXCI6IiArIG9yZGluYWwgKyAi
LFwiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3RlZFNjcmlwdElkICsgIn0iOworICAgIHRo
aXMuY2FsbEZyYW1lSWQgPSBgeyJvcmRpbmFsIjoke29yZGluYWx9LCJpbmplY3RlZFNjcmlwdElk
Ijoke2luamVjdGVkU2NyaXB0SWR9fWA7CiAgICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBjYWxsRnJh
bWUuZnVuY3Rpb25OYW1lOwogICAgIHRoaXMubG9jYXRpb24gPSB7c2NyaXB0SWQ6IFN0cmluZyhj
YWxsRnJhbWUuc291cmNlSUQpLCBsaW5lTnVtYmVyOiBjYWxsRnJhbWUubGluZSwgY29sdW1uTnVt
YmVyOiBjYWxsRnJhbWUuY29sdW1ufTsKICAgICB0aGlzLnNjb3BlQ2hhaW4gPSB0aGlzLl93cmFw
U2NvcGVDaGFpbihjYWxsRnJhbWUpOwotICAgIHRoaXMudGhpcyA9IGluamVjdGVkU2NyaXB0Ll93
cmFwT2JqZWN0KGNhbGxGcmFtZS50aGlzT2JqZWN0LCAiYmFja3RyYWNlIik7CisgICAgdGhpcy50
aGlzID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShjYWxsRnJhbWUudGhpc09iamVjdCwgImJhY2t0cmFj
ZSIpOwogICAgIHRoaXMuaXNUYWlsRGVsZXRlZCA9IGNhbGxGcmFtZS5pc1RhaWxEZWxldGVkOwog
fQogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5wcm90b3R5cGUgPSB7Ci0gICAgX3dy
YXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxsRnJhbWUpCisgICAgX3dyYXBTY29wZUNoYWluKGNh
bGxGcmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBzY29wZUNoYWluID0gY2FsbEZyYW1lLnNjb3Bl
Q2hhaW47Ci0gICAgICAgIHZhciBzY29wZURlc2NyaXB0aW9ucyA9IGNhbGxGcmFtZS5zY29wZURl
c2NyaXB0aW9ucygpOworICAgICAgICBsZXQgc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS5zY29wZUNo
YWluOworICAgICAgICBsZXQgc2NvcGVEZXNjcmlwdGlvbnMgPSBjYWxsRnJhbWUuc2NvcGVEZXNj
cmlwdGlvbnMoKTsKIAotICAgICAgICB2YXIgc2NvcGVDaGFpblByb3h5ID0gW107Ci0gICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc2NvcGVDaGFpbi5sZW5ndGg7IGkrKykKKyAgICAgICAgbGV0
IHNjb3BlQ2hhaW5Qcm94eSA9IFtdOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb3Bl
Q2hhaW4ubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICBzY29wZUNoYWluUHJveHlbaV0gPSBJbmpl
Y3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fY3JlYXRlU2NvcGVKc29uKHNjb3BlQ2hhaW5baV0s
IHNjb3BlRGVzY3JpcHRpb25zW2ldLCAiYmFja3RyYWNlIik7CiAgICAgICAgIHJldHVybiBzY29w
ZUNoYWluUHJveHk7CiAgICAgfQpAQCAtMTMzNiw3ICsxMzQzLDcgQEAgSW5qZWN0ZWRTY3JpcHQu
Q2FsbEZyYW1lUHJveHkuX3Njb3BlVHlwZU5hbWVzID0gewogSW5qZWN0ZWRTY3JpcHQuQ2FsbEZy
YW1lUHJveHkuX2NyZWF0ZVNjb3BlSnNvbiA9IGZ1bmN0aW9uKG9iamVjdCwge25hbWUsIHR5cGUs
IGxvY2F0aW9ufSwgZ3JvdXBJZCkKIHsKICAgICBsZXQgc2NvcGUgPSB7Ci0gICAgICAgIG9iamVj
dDogaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmplY3Qob2JqZWN0LCBncm91cElkKSwKKyAgICAgICAg
b2JqZWN0OiBSZW1vdGVPYmplY3QuY3JlYXRlKG9iamVjdCwgZ3JvdXBJZCksCiAgICAgICAgIHR5
cGU6IEluamVjdGVkU2NyaXB0LkNhbGxGcmFtZVByb3h5Ll9zY29wZVR5cGVOYW1lc1t0eXBlXSwK
ICAgICB9OwogCkBAIC0xMzUyLDYgKzEzNTksNyBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQ
cm94eS5fY3JlYXRlU2NvcGVKc29uID0gZnVuY3Rpb24ob2JqZWN0LCB7bmFtZSwgdHlwZSwgbAog
ICAgIHJldHVybiBzY29wZTsKIH0KIAorLy8gLS0tLS0tLQogCiBmdW5jdGlvbiBiaW5kKGZ1bmMs
IHRoaXNPYmplY3QsIC4uLm91dGVyQXJncykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZmY0ZTY4ZTlkZi4u
NjZjZTY1NTFiNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNi0yNyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IE1vZGVybml6ZSBJbmplY3RlZFNjcmlwdFNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qczoKKyAgICAg
ICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90b3R5cGUuY29weSk6CisgICAgICAgIChDb21tYW5k
TGluZUFQSUltcGwucHJvdG90eXBlLl9pbnNwZWN0KToKKyAgICAgICAgVXNlIFJlbW90ZU9iamVj
dCwgYSBuZXcgcGFyYW1ldGVyLgorCiAyMDE3LTA2LTI3ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdA
aWdhbGlhLmNvbT4KIAogICAgICAgICBTb21lIHRlc3RzIHRvIHZlcmlmeSBmb3JiaWRkZW4gZnJh
bWUgbmF2aWdhdGlvbiB0aW1lIG91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzCmluZGV4IDkzYWM4ZTk3MDEwLi4yNGM3
NzBjMDZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5l
QVBJTW9kdWxlU291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5k
TGluZUFQSU1vZHVsZVNvdXJjZS5qcwpAQCAtMjgsMTQgKzI4LDcgQEAKIAogLy8jIHNvdXJjZVVS
TD1fX0luamVjdGVkU2NyaXB0X0NvbW1hbmRMaW5lQVBJTW9kdWxlU291cmNlLmpzCiAKLS8qKgot
ICogQHBhcmFtIHtJbmplY3RlZFNjcmlwdEhvc3R9IEluamVjdGVkU2NyaXB0SG9zdAotICogQHBh
cmFtIHtXaW5kb3d9IGluc3BlY3RlZFdpbmRvdwotICogQHBhcmFtIHtudW1iZXJ9IGluamVjdGVk
U2NyaXB0SWQKLSAqIEBwYXJhbSB7SW5qZWN0ZWRTY3JpcHR9IGluamVjdGVkU2NyaXB0Ci0gKiBA
cGFyYW0ge0NvbW1hbmRMaW5lQVBJSG9zdH0gQ29tbWFuZExpbmVBUElIb3N0Ci0gKi8KLShmdW5j
dGlvbiAoSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0
SWQsIGluamVjdGVkU2NyaXB0LCBDb21tYW5kTGluZUFQSUhvc3QpIHsKKyhmdW5jdGlvbiAoSW5q
ZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRXaW5kb3csIGluamVjdGVkU2NyaXB0SWQsIGluamVj
dGVkU2NyaXB0LCBSZW1vdGVPYmplY3QsIENvbW1hbmRMaW5lQVBJSG9zdCkgewogCiAvLyBGSVhN
RTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MjI5ND4gV2ViIEluc3BlY3RvcjogUGFyc2UgSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UgYXMgYSBidWlsdC1pbiB0byBnZXQgZ3VhcmFudGVlZCBub24tdXNl
ci1vdmVycmlkZW4gYnVpbHQtaW5zCiAKQEAgLTIzMSw3ICsyMjQsNyBAQCBDb21tYW5kTGluZUFQ
SUltcGwucHJvdG90eXBlID0gewogICAgIGNvcHk6IGZ1bmN0aW9uKG9iamVjdCkKICAgICB7CiAg
ICAgICAgIHZhciBzdHJpbmc7Ci0gICAgICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQu
X3N1YnR5cGUob2JqZWN0KTsKKyAgICAgICAgdmFyIHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3Vi
dHlwZShvYmplY3QpOwogICAgICAgICBpZiAoc3VidHlwZSA9PT0gIm5vZGUiKQogICAgICAgICAg
ICAgc3RyaW5nID0gb2JqZWN0Lm91dGVySFRNTDsKICAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9
PT0gInJlZ2V4cCIpCkBAIC0zMTUsMTAgKzMwOCwxMCBAQCBDb21tYW5kTGluZUFQSUltcGwucHJv
dG90eXBlID0gewogICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICB2YXIgb2JqZWN0SWQgPSBpbmplY3RlZFNjcmlwdC5fd3Jh
cE9iamVjdChvYmplY3QsICIiKTsKKyAgICAgICAgdmFyIG9iamVjdElkID0gUmVtb3RlT2JqZWN0
LmNyZWF0ZShvYmplY3QsICIiKTsKICAgICAgICAgdmFyIGhpbnRzID0ge307CiAKLSAgICAgICAg
c3dpdGNoIChpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUob2JqZWN0KSkgeworICAgICAgICBzd2l0
Y2ggKFJlbW90ZU9iamVjdC5kZXNjcmliZShvYmplY3QpKSB7CiAgICAgICAgIGNhc2UgIkRhdGFi
YXNlIjoKICAgICAgICAgICAgIHZhciBkYXRhYmFzZUlkID0gQ29tbWFuZExpbmVBUElIb3N0LmRh
dGFiYXNlSWQob2JqZWN0KQogICAgICAgICAgICAgaWYgKGRhdGFiYXNlSWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313985</attachid>
            <date>2017-06-27 21:24:46 -0700</date>
            <delta_ts>2017-07-18 15:46:45 -0700</delta_ts>
            <desc>[PATCH] Combined - Proposed Fix</desc>
            <filename>refactor-2.patch</filename>
            <type>text/plain</type>
            <size>75008</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IDc4NjFlNmM4YTY5YWUzYTg0ZGM5MDkxZmY1NzkwMmFlZWNjZmU2NzkKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgSnVuIDI3IDIw
OjU5OjIyIDIwMTcgLTA3MDAKCiAgICBMT0NBTDogSW5qZWN0ZWRTY3JpcHRTb3VyY2UgcmVmYWN0
b3IKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggNzgzNGQ0Mjg3ZTUuLmQzODE3YmQ4NWE1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcg
QEAKIDIwMTctMDYtMjcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBNb2Rlcm5pemUgSW5qZWN0ZWRTY3JpcHRTb3VyY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Mzg5MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9y
L21vZGVsL3JlbW90ZS1vYmplY3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9t
b2RlbC9zdGFjay10cmFjZS1leHBlY3RlZC50eHQ6CisgICAgICAgIE5vdyB0aGF0IHdlIHVzZSBj
bGFzc2VzLCBpbXBsaWNpdGx5IHN0cmljdCBtb2RlLCB0aGUgY2FsbCBmcmFtZQorICAgICAgICBm
b3IgZXZhbHVhdGUgZ2V0cyB0YWlsIGNhbGwgZWxpbWluYXRlZC4KKworMjAxNy0wNi0yNyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IENsZWFudXAgUmVtb3RlT2JqZWN0IHRlc3RzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzM4ODUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL21vZGVsL3JlbW90ZS1vYmplY3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL21vZGVsL3JlbW90ZS1vYmplY3QtZXhwZWN0ZWQudHh0CmluZGV4IDBjZTJjNWU2
N2JmLi42MWQwYjVlZWVjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVs
L3JlbW90ZS1vYmplY3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9t
b2RlbC9yZW1vdGUtb2JqZWN0LWV4cGVjdGVkLnR4dApAQCAtMTY1Niw3ICsxNjU2LDcgQEAgRVhQ
UkVTU0lPTjogZXJyb3IgPSBudWxsOyB0cnkgeyBbXS54Lng7IH0gY2F0Y2ggKGUpIHsgZXJyb3Ig
PSBlOyB9OyBlcnJvcgogICAgICAgewogICAgICAgICAiX25hbWUiOiAic3RhY2siLAogICAgICAg
ICAiX3R5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgIl92YWx1ZSI6ICJnbG9iYWwgY29kZVxuZXZh
bHVhdGVXaXRoU2NvcGVFeHRlbnNpb25AW25hdGl2ZSBjb2RlXVxuX2V2YWx1YXRlT25cbl9ldmFs
dWF0ZUFuZFdyYXBcbmV2YWx1YXRlIgorICAgICAgICAiX3ZhbHVlIjogImdsb2JhbCBjb2RlXG5l
dmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbkBbbmF0aXZlIGNvZGVdXG5fZXZhbHVhdGVPblxuX2V2
YWx1YXRlQW5kV3JhcCIKICAgICAgIH0KICAgICBdLAogICAgICJfZW50cmllcyI6IG51bGwKQEAg
LTE2OTUsNyArMTY5NSw3IEBAIEVYUFJFU1NJT046IGVycm9yID0gbnVsbDsgdHJ5IHsgZXZhbCgi
aWYoKSIpOyB9IGNhdGNoIChlKSB7IGVycm9yID0gZTsgfTsgZXJyb3IKICAgICAgIHsKICAgICAg
ICAgIl9uYW1lIjogInN0YWNrIiwKICAgICAgICAgIl90eXBlIjogInN0cmluZyIsCi0gICAgICAg
ICJfdmFsdWUiOiAiZXZhbEBbbmF0aXZlIGNvZGVdXG5nbG9iYWwgY29kZVxuZXZhbHVhdGVXaXRo
U2NvcGVFeOKApmF0aXZlIGNvZGVdXG5fZXZhbHVhdGVPblxuX2V2YWx1YXRlQW5kV3JhcFxuZXZh
bHVhdGUiCisgICAgICAgICJfdmFsdWUiOiAiZXZhbEBbbmF0aXZlIGNvZGVdXG5nbG9iYWwgY29k
ZVxuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb25AW25hdGl2ZSBjb2RlXVxuX2V2YWx1YXRlT25c
bl9ldmFsdWF0ZUFuZFdyYXAiCiAgICAgICB9CiAgICAgXSwKICAgICAiX2VudHJpZXMiOiBudWxs
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvbW9kZWwvc3RhY2stdHJhY2UtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3N0YWNrLXRyYWNlLWV4cGVj
dGVkLnR4dAppbmRleCAxZDY3MmVhNjcwMi4uOTdmODg0Njk2YWIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9tb2RlbC9zdGFjay10cmFjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL21vZGVsL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dApAQCAtOCw3
ICs4LDcgQEAgUEFTUzogQ29uc29sZU1lc3NhZ2Ugc2hvdWxkIGhhdmUgU3RhY2tUcmFjZS4KIFBB
U1M6IENhbGxGcmFtZSBpbiBTdGFja1RyYWNlIGhhcyBubyBpZGVudGlmaWVyLgogUEFTUzogQ2Fs
bEZyYW1lIGluIFN0YWNrVHJhY2UgaGFzIG5vIHRoaXNPYmplY3QuCiBQQVNTOiBDYWxsRnJhbWUg
aW4gU3RhY2tUcmFjZSBoYXMgbm8gc2NvcGVDaGFpbi4KLVN0YWNrVHJhY2U6IDExCitTdGFja1Ry
YWNlOiAxMAogICAxOiBmb28gKEFub255bW91cyBTY3JpcHQgMSAobGluZSAxKSkgLSBuYXRpdmVD
b2RlIChmYWxzZSkgcHJvZ3JhbUNvZGUgKGZhbHNlKQogICAyOiBFdmFsIENvZGUgKEFub255bW91
cyBTY3JpcHQgMSAobGluZSAxKSkgLSBuYXRpdmVDb2RlIChmYWxzZSkgcHJvZ3JhbUNvZGUgKHRy
dWUpCiAgIDM6IGV2YWwgLSBuYXRpdmVDb2RlICh0cnVlKSBwcm9ncmFtQ29kZSAoZmFsc2UpCkBA
IC0xOSw1ICsxOSw0IEBAIFN0YWNrVHJhY2U6IDExCiAgIDg6IGV2YWx1YXRlV2l0aFNjb3BlRXh0
ZW5zaW9uIC0gbmF0aXZlQ29kZSAodHJ1ZSkgcHJvZ3JhbUNvZGUgKGZhbHNlKQogICA5OiBfZXZh
bHVhdGVPbiAtIG5hdGl2ZUNvZGUgKHRydWUpIHByb2dyYW1Db2RlIChmYWxzZSkKICAgMTA6IF9l
dmFsdWF0ZUFuZFdyYXAgLSBuYXRpdmVDb2RlICh0cnVlKSBwcm9ncmFtQ29kZSAoZmFsc2UpCi0g
IDExOiBldmFsdWF0ZSAtIG5hdGl2ZUNvZGUgKHRydWUpIHByb2dyYW1Db2RlIChmYWxzZSkKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggYWJmOWU2NDA1ZDMuLjc3MmYzMzlmYzRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxNy0wNi0yNyAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IE1vZGVybml6ZSBJbmplY3RlZFNjcmlwdFNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAg
ICAgICAgUmVvcmRlciBmdW5jdGlvbnMgdG8gYmUgc2xpZ2h0bHkgYmV0dGVyLgorCisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzOgorICAgICAgICAtIENvbnZlcnQg
dG8gY2xhc3NlcyBuYW1lZCBJbmplY3RlZFNjcmlwdCBhbmQgUmVtb3RlT2JqZWN0CisgICAgICAg
IC0gQWxpZ24gSW5qZWN0ZWRTY3JpcHQncyBBUEkgd2l0aCB0aGUgd3JhcHBlciBDKysgaW50ZXJm
YWNlcworICAgICAgICAtIE1vdmUgc29tZSBjb2RlIHRvIFJlbW90ZU9iamVjdCB3aGVyZSBhcHBy
b3ByaWF0ZSAoc3VidHlwZSwgZGVzY3JpYmUpCisgICAgICAgIC0gTW92ZSBzb21lIGNvZGUgdG8g
aGVscGVyIGZ1bmN0aW9ucyAoaXNQcmltaXRpdmVWYWx1ZSwgaXNEZWZpbmVkKQorICAgICAgICAt
IFJlZmFjdG9yIGZvciByZWFkYWJpbGl0eSBhbmQgbW9kZXJuIGZlYXR1cmVzCisgICAgICAgIC0g
UmVtb3ZlIHNvbWUgdW51c2VkIC8gdW5uZWNlc3NhcnkgY29kZQorCiAyMDE3LTA2LTI3ICBDYWlv
IExpbWEgIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVNuZXh0XSBJbXBsZW1l
bnQgT2JqZWN0IFJlc3QgLSBJbXBsZW1lbnRpbmcgT2JqZWN0IFJlc3QgRGVzdHJ1Y3R1cmluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmlu
ZGV4IDIxMTc1ZmYxYWNhLi40MDk4ZDc2NGE3MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+SW5qZWN0ZWRTY3JpcHQoKTsKIAogICAgIHZvaWQgZXZhbHVhdGUoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiogcmVzdWx0LCBQcm90b2NvbDo6T3B0T3V0cHV0PGJvb2w+KiB3
YXNUaHJvd24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBzYXZlZFJlc3Vs
dEluZGV4KTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFy
Z3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29sOjpPcHRP
dXRwdXQ8Ym9vbD4qIHdhc1Rocm93bik7CiAgICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVy
cm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+KiByZXN1bHQsIFByb3RvY29sOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Ro
cm93biwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIHNhdmVkUmVzdWx0SW5k
ZXgpOworICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1l
bnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qIHJlc3VsdCwgUHJvdG9jb2w6Ok9wdE91dHB1
dDxib29sPiogd2FzVGhyb3duKTsKICAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhF
cnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVu
Y3Rpb25EZXRhaWxzPiogcmVzdWx0KTsKICAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+KiByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKaW5kZXggYWMwMThmM2E4ZjEuLjkyY2E2
ZmI0MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0U291cmNlLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMKQEAgLTY3LDgwICs2NywyMTAgQEAgZnVuY3Rpb24gaXNF
bXB0eU9iamVjdChvYmplY3QpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZhciBJbmplY3RlZFNj
cmlwdCA9IGZ1bmN0aW9uKCkKK2Z1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkKIHsKLSAgICB0aGlz
Ll9sYXN0Qm91bmRPYmplY3RJZCA9IDE7Ci0gICAgdGhpcy5faWRUb1dyYXBwZWRPYmplY3QgPSB7
fTsKLSAgICB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lID0ge307Ci0gICAgdGhpcy5fb2JqZWN0
R3JvdXBzID0ge307Ci0gICAgdGhpcy5fbW9kdWxlcyA9IHt9OwotICAgIHRoaXMuX25leHRTYXZl
ZFJlc3VsdEluZGV4ID0gMTsKLSAgICB0aGlzLl9zYXZlZFJlc3VsdHMgPSBbXTsKKyAgICByZXR1
cm4gISF2YWx1ZSB8fCBJbmplY3RlZFNjcmlwdEhvc3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1
ZSk7CiB9CiAKLUluamVjdGVkU2NyaXB0LnByaW1pdGl2ZVR5cGVzID0gewotICAgIHVuZGVmaW5l
ZDogdHJ1ZSwKLSAgICBib29sZWFuOiB0cnVlLAotICAgIG51bWJlcjogdHJ1ZSwKLSAgICBzdHJp
bmc6IHRydWUsCitmdW5jdGlvbiBpc1ByaW1pdGl2ZVZhbHVlKHZhbHVlKQoreworICAgIHN3aXRj
aCAodHlwZW9mIHZhbHVlKSB7CisgICAgY2FzZSAiYm9vbGVhbiI6CisgICAgY2FzZSAibnVtYmVy
IjoKKyAgICBjYXNlICJzdHJpbmciOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlICJ1
bmRlZmluZWQiOgorICAgICAgICByZXR1cm4gIUluamVjdGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxD
b2xsZWN0aW9uKHZhbHVlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZSA9IHsKLSAgICBPd25Qcm9w
ZXJ0aWVzOiAxIDw8IDAsICAgICAgICAgIC8vIG93biBwcm9wZXJ0aWVzLgotICAgIE5hdGl2ZUdl
dHRlclByb3BlcnRpZXM6IDEgPDwgMSwgLy8gbmF0aXZlIGdldHRlciBwcm9wZXJ0aWVzIGluIHRo
ZSBwcm90b3R5cGUgY2hhaW4uCi0gICAgQWxsUHJvcGVydGllczogMSA8PCAyLCAgICAgICAgICAv
LyBhbGwgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNoYWluLgotfQorLy8gLS0tLS0tLQor
CitsZXQgSW5qZWN0ZWRTY3JpcHQgPSBjbGFzcyBJbmplY3RlZFNjcmlwdAoreworICAgIGNvbnN0
cnVjdG9yKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xhc3RCb3VuZE9iamVjdElkID0gMTsKKyAg
ICAgICAgdGhpcy5faWRUb1dyYXBwZWRPYmplY3QgPSB7fTsKKyAgICAgICAgdGhpcy5faWRUb09i
amVjdEdyb3VwTmFtZSA9IHt9OworICAgICAgICB0aGlzLl9vYmplY3RHcm91cHMgPSB7fTsKKyAg
ICAgICAgdGhpcy5fbW9kdWxlcyA9IHt9OworICAgICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJ
bmRleCA9IDE7CisgICAgICAgIHRoaXMuX3NhdmVkUmVzdWx0cyA9IFtdOworICAgIH0KKworICAg
IC8vIEluamVjdGVkU2NyaXB0IEMrKyBBUEkKKworICAgIGV2YWx1YXRlKGV4cHJlc3Npb24sIG9i
amVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQ
cmV2aWV3LCBzYXZlUmVzdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRl
QW5kV3JhcChJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIElu
amVjdGVkU2NyaXB0SG9zdCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGZhbHNlLCBpbmplY3RD
b21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0
KTsKKyAgICB9CisKKyAgICBldmFsdWF0ZU9uQ2FsbEZyYW1lKHRvcENhbGxGcmFtZSwgY2FsbEZy
YW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0
dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQorICAgIHsKKyAgICAgICAg
bGV0IGNhbGxGcmFtZSA9IHRoaXMuX2NhbGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZy
YW1lSWQpOworICAgICAgICBpZiAoIWNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiAiQ291
bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3aXRoIGdpdmVuIGlkIjsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24s
IGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIHRydWUsIGluamVjdENvbW1hbmRM
aW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQpOworICAg
IH0KIAotSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewotICAgIGlzUHJpbWl0aXZlVmFsdWU6
IGZ1bmN0aW9uKG9iamVjdCkKKyAgICBjYWxsRnVuY3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lv
biwgYXJncywgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAg
Ly8gRklYTUUoMzM3MTYpOiB0eXBlb2YgZG9jdW1lbnQuYWxsIGlzIGFsd2F5cyAndW5kZWZpbmVk
Jy4KLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LnByaW1pdGl2ZVR5cGVzW3R5cGVvZiBv
YmplY3RdICYmICF0aGlzLl9pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCk7Ci0gICAgfSwKKyAg
ICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7
CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7
CisgICAgICAgIGxldCBvYmplY3RHcm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1l
W3BhcnNlZE9iamVjdElkLmlkXTsKKworICAgICAgICBpZiAoIWlzRGVmaW5lZChvYmplY3QpKQor
ICAgICAgICAgICAgcmV0dXJuICJDb3VsZCBub3QgZmluZCBvYmplY3Qgd2l0aCBnaXZlbiBpZCI7
CisKKyAgICAgICAgbGV0IHJlc29sdmVkQXJncyA9IFtdOworICAgICAgICBpZiAoYXJncykgewor
ICAgICAgICAgICAgbGV0IGNhbGxBcmdzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKGFy
Z3MpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsQXJncy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVk
QXJnc1tpXSA9IHRoaXMuX3Jlc29sdmVDYWxsQXJndW1lbnQoY2FsbEFyZ3NbaV0pOworICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICB0cnkgeworICAgICAgICAgICAgbGV0IGZ1bmMgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZh
bHVhdGUoIigiICsgZXhwcmVzc2lvbiArICIpIik7CisgICAgICAgICAgICBpZiAodHlwZW9mIGZ1
bmMgIT09ICJmdW5jdGlvbiIpCisgICAgICAgICAgICAgICAgcmV0dXJuICJHaXZlbiBleHByZXNz
aW9uIGRvZXMgbm90IGV2YWx1YXRlIHRvIGEgZnVuY3Rpb24iOworCisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHdhc1Rocm93bjogZmFsc2UsCisgICAgICAgICAgICAgICAg
cmVzdWx0OiBSZW1vdGVPYmplY3QuY3JlYXRlKGZ1bmMuYXBwbHkob2JqZWN0LCByZXNvbHZlZEFy
Z3MpLCBvYmplY3RHcm91cE5hbWUsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmplY3RHcm91cE5hbWUpOworICAgICAgICB9Cisg
ICAgfQogCi0gICAgcHJldmlld1ZhbHVlOiBmdW5jdGlvbih2YWx1ZSkKKyAgICBnZXRGdW5jdGlv
bkRldGFpbHMob2JqZWN0SWQpCiAgICAgewotICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQu
UmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1ZSwgdHJ1ZSk7Ci0g
ICAgfSwKKyAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChv
YmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRP
YmplY3RJZCk7CisgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAiZnVuY3Rpb24iKQorICAg
ICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBieSBpZC4iOworICAgICAg
ICByZXR1cm4gdGhpcy5mdW5jdGlvbkRldGFpbHMob2JqZWN0KTsKKyAgICB9CiAKLSAgICBmdW5j
dGlvbkRldGFpbHM6IGZ1bmN0aW9uKGZ1bmMpCisgICAgZnVuY3Rpb25EZXRhaWxzKGZ1bmMpCiAg
ICAgewotICAgICAgICB2YXIgZGV0YWlscyA9IEluamVjdGVkU2NyaXB0SG9zdC5mdW5jdGlvbkRl
dGFpbHMoZnVuYyk7CisgICAgICAgIGxldCBkZXRhaWxzID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmZ1
bmN0aW9uRGV0YWlscyhmdW5jKTsKICAgICAgICAgaWYgKCFkZXRhaWxzKQogICAgICAgICAgICAg
cmV0dXJuICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBkZXRhaWxzLiI7Ci0KICAgICAgICAgcmV0
dXJuIGRldGFpbHM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICB3cmFwT2JqZWN0OiBmdW5jdGlvbihv
YmplY3QsIGdyb3VwTmFtZSwgY2FuQWNjZXNzSW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBnZW5lcmF0
ZVByZXZpZXcpCisgICAgZ2V0UHJldmlldyhvYmplY3RJZCkKICAgICB7Ci0gICAgICAgIGlmIChj
YW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5f
d3JhcE9iamVjdChvYmplY3QsIGdyb3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1dyYXBwZXIob2JqZWN0KTsKLSAgICB9LAorICAg
ICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsK
KyAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsK
KyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUo
b2JqZWN0LCB0cnVlKTsKKyAgICB9CiAKLSAgICBzZXRFeGNlcHRpb25WYWx1ZTogZnVuY3Rpb24o
dmFsdWUpCisgICAgZ2V0UHJvcGVydGllcyhvYmplY3RJZCwgb3duUHJvcGVydGllcywgZ2VuZXJh
dGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgdGhpcy5fZXhjZXB0aW9uVmFsdWUgPSB2YWx1ZTsK
LSAgICB9LAorICAgICAgICBsZXQgbmF0aXZlR2V0dGVyc0FzVmFsdWVzID0gZmFsc2U7CisgICAg
ICAgIGxldCBjb2xsZWN0aW9uTW9kZSA9IG93blByb3BlcnRpZXMgPyBJbmplY3RlZFNjcmlwdC5D
b2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIDogSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1v
ZGUuQWxsUHJvcGVydGllczsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2Jq
ZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1Zh
bHVlcyk7CisgICAgfQogCi0gICAgY2xlYXJFeGNlcHRpb25WYWx1ZTogZnVuY3Rpb24oKQorICAg
IGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQogICAg
IHsKLSAgICAgICAgZGVsZXRlIHRoaXMuX2V4Y2VwdGlvblZhbHVlOwotICAgIH0sCisgICAgICAg
IGxldCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0cnVlOworICAgICAgICBsZXQgY29sbGVjdGlv
bk1vZGUgPSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5q
ZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0aXZlR2V0dGVyUHJvcGVydGllczsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBn
ZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CisgICAgfQogCi0gICAgX2Zh
bGxiYWNrV3JhcHBlcjogZnVuY3Rpb24ob2JqZWN0KQorICAgIGdldEludGVybmFsUHJvcGVydGll
cyhvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3KQogICAgIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9
IHt9OwotICAgICAgICByZXN1bHQudHlwZSA9IHR5cGVvZiBvYmplY3Q7Ci0gICAgICAgIGlmICh0
aGlzLmlzUHJpbWl0aXZlVmFsdWUob2JqZWN0KSkKLSAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9
IG9iamVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0g
dG9TdHJpbmcob2JqZWN0KTsKKyAgICAgICAgbGV0IHBhcnNlZE9iamVjdElkID0gdGhpcy5fcGFy
c2VPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3QgPSB0aGlzLl9vYmplY3RG
b3JJZChwYXJzZWRPYmplY3RJZCk7CisgICAgICAgIGxldCBvYmplY3RHcm91cE5hbWUgPSB0aGlz
Ll9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKKworICAgICAgICBpZiAo
IWlzRGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChpc1N5bWJvbChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGxldCBkZXNjcmlwdG9ycyA9IHRoaXMuX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyhv
YmplY3QpOworICAgICAgICBpZiAoIWRlc2NyaXB0b3JzKQorICAgICAgICAgICAgcmV0dXJuIFtd
OworCisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnNbaV07CisgICAgICAg
ICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0
b3IudmFsdWUgPSBSZW1vdGVPYmplY3QuY3JlYXRlKGRlc2NyaXB0b3IudmFsdWUsIG9iamVjdEdy
b3VwTmFtZSwgZmFsc2UsIGdlbmVyYXRlUHJldmlldyk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZGVzY3JpcHRvcnM7CisgICAgfQorCisgICAgZ2V0Q29sbGVjdGlvbkVudHJpZXMob2Jq
ZWN0SWQsIG9iamVjdEdyb3VwTmFtZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkKKyAgICB7
CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0
SWQpOworICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0
SWQpOworICAgICAgICBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cE5hbWUgfHwgdGhpcy5f
aWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CisKKyAgICAgICAgaWYgKCFp
c0RlZmluZWQob2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodHlw
ZW9mIG9iamVjdCAhPT0gIm9iamVjdCIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
bGV0IGVudHJpZXMgPSB0aGlzLl9lbnRyaWVzKG9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LnN1
YnR5cGUob2JqZWN0KSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCk7CisgICAgICAgIHJldHVy
biBlbnRyaWVzLm1hcChmdW5jdGlvbihlbnRyeSkgeworICAgICAgICAgICAgZW50cnkudmFsdWUg
PSBSZW1vdGVPYmplY3QuY3JlYXRlKGVudHJ5LnZhbHVlLCBvYmplY3RHcm91cE5hbWUsIGZhbHNl
LCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgia2V5IiBpbiBlbnRyeSkKKyAgICAgICAgICAgICAg
ICBlbnRyeS5rZXkgPSBSZW1vdGVPYmplY3QuY3JlYXRlKGVudHJ5LmtleSwgb2JqZWN0R3JvdXBO
YW1lLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHNhdmVSZXN1bHQoY2FsbEFyZ3VtZW50SlNPTikKKyAgICB7CisgICAg
ICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAwOworCisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICBsZXQgY2FsbEFyZ3VtZW50ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiAr
IGNhbGxBcmd1bWVudEpTT04gKyAiKSIpOworICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5f
cmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJndW1lbnQpOworICAgICAgICAgICAgdGhpcy5fc2F2
ZVJlc3VsdCh2YWx1ZSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7CisgICAgfQorCisgICAgd3JhcENhbGxGcmFtZXMoY2Fs
bEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFjYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAgICBsZXQgZGVwdGgg
PSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgSW5qZWN0ZWRT
Y3JpcHQuQ2FsbEZyYW1lUHJveHkoZGVwdGgrKywgY2FsbEZyYW1lKSk7CisgICAgICAgICAgICBj
YWxsRnJhbWUgPSBjYWxsRnJhbWUuY2FsbGVyOworICAgICAgICB9IHdoaWxlIChjYWxsRnJhbWUp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCisgICAgfQogCi0gICAgd3JhcFRhYmxl
OiBmdW5jdGlvbihjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5z
KQorICAgIHdyYXBPYmplY3Qob2JqZWN0LCBncm91cE5hbWUsIGNhbkFjY2Vzc0luc3BlY3RlZEds
b2JhbE9iamVjdCwgZ2VuZXJhdGVQcmV2aWV3KQorICAgIHsKKyAgICAgICAgaWYgKCFjYW5BY2Nl
c3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJh
Y2tXcmFwcGVyKG9iamVjdCk7CisKKyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGUo
b2JqZWN0LCBncm91cE5hbWUsIGZhbHNlLCBnZW5lcmF0ZVByZXZpZXcpOworICAgIH0KKworICAg
IHdyYXBUYWJsZShjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QsIHRhYmxlLCBjb2x1bW5z
KQogICAgIHsKICAgICAgICAgaWYgKCFjYW5BY2Nlc3NJbnNwZWN0ZWRHbG9iYWxPYmplY3QpCiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2tXcmFwcGVyKHRhYmxlKTsKQEAgLTE0OSw0
NiArMjc5LDEyMSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIHBy
b3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbHVtbiBuYW1lcyBhbmQgaW4gdGhlIHBy
b3ZpZGVkIG9yZGVyLgogICAgICAgICAvLyBXZSBjb3VsZCBmaWx0ZXIgaGVyZSB0byBhdm9pZCBz
ZW5kaW5nIHZlcnkgbGFyZ2UgcHJldmlldyBvYmplY3RzLgogCi0gICAgICAgIHZhciBjb2x1bW5O
YW1lcyA9IG51bGw7CisgICAgICAgIGxldCBjb2x1bW5OYW1lcyA9IG51bGw7CiAgICAgICAgIGlm
ICh0eXBlb2YgY29sdW1ucyA9PT0gInN0cmluZyIpCiAgICAgICAgICAgICBjb2x1bW5zID0gW2Nv
bHVtbnNdOwogCiAgICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShjb2x1bW5z
KSA9PT0gImFycmF5IikgewogICAgICAgICAgICAgY29sdW1uTmFtZXMgPSBbXTsKLSAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAg
ICBjb2x1bW5OYW1lcy5wdXNoKHRvU3RyaW5nKGNvbHVtbnNbaV0pKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHJldHVybiB0aGlzLl93cmFwT2JqZWN0KHRhYmxlLCAiY29uc29sZSIsIGZhbHNlLCB0
cnVlLCBjb2x1bW5OYW1lcyk7Ci0gICAgfSwKKyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5j
cmVhdGUodGFibGUsICJjb25zb2xlIiwgZmFsc2UsIHRydWUsIGNvbHVtbk5hbWVzKTsKKyAgICB9
CiAKLSAgICBpbnNwZWN0T2JqZWN0OiBmdW5jdGlvbihvYmplY3QpCisgICAgcHJldmlld1ZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQ
cmV2aWV3Rm9yVmFsdWUodmFsdWUsIHRydWUpOworICAgIH0KKworICAgIHNldEV4Y2VwdGlvblZh
bHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZXhjZXB0aW9uVmFsdWUgPSB2YWx1ZTsK
KyAgICB9CisKKyAgICBjbGVhckV4Y2VwdGlvblZhbHVlKCkKKyAgICB7CisgICAgICAgIGRlbGV0
ZSB0aGlzLl9leGNlcHRpb25WYWx1ZTsKKyAgICB9CisKKyAgICBmaW5kT2JqZWN0QnlJZChvYmpl
Y3RJZCkKKyAgICB7CisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2Jq
ZWN0SWQob2JqZWN0SWQpOworICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2Vk
T2JqZWN0SWQpOworICAgIH0KKworICAgIGluc3BlY3RPYmplY3Qob2JqZWN0KQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMuX2NvbW1hbmRMaW5lQVBJSW1wbCkKICAgICAgICAgICAgIHRoaXMuX2Nv
bW1hbmRMaW5lQVBJSW1wbC5pbnNwZWN0KG9iamVjdCk7Ci0gICAgfSwKLQotICAgIF93cmFwT2Jq
ZWN0OiBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdl
bmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCi0gICAgewotICAgICAgICB0cnkgewotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3Qob2JqZWN0LCBvYmpl
Y3RHcm91cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVz
KTsKLSAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICB2YXIgZGVzY3JpcHRpb24gPSBpbmplY3RlZFNjcmlwdC5fZGVzY3JpYmUoZSk7Ci0gICAg
ICAgICAgICB9IGNhdGNoIChleCkgewotICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
ICI8ZmFpbGVkIHRvIGNvbnZlcnQgZXhjZXB0aW9uIHRvIHN0cmluZz4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QoZGVz
Y3JpcHRpb24pOworICAgIH0KKworICAgIHJlbGVhc2VPYmplY3Qob2JqZWN0SWQpCisgICAgewor
ICAgICAgICBsZXQgcGFyc2VkT2JqZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElk
KTsKKyAgICAgICAgdGhpcy5fcmVsZWFzZU9iamVjdChwYXJzZWRPYmplY3RJZC5pZCk7CisgICAg
fQorCisgICAgcmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwTmFtZSkKKyAgICB7CisgICAg
ICAgIGlmIChvYmplY3RHcm91cE5hbWUgPT09ICJjb25zb2xlIikgeworICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2xhc3RSZXN1bHQ7CisgICAgICAgICAgICB0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJ
bmRleCA9IDE7CisgICAgICAgICAgICB0aGlzLl9zYXZlZFJlc3VsdHMgPSBbXTsKKyAgICAgICAg
fQorCisgICAgICAgIGxldCBncm91cCA9IHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5h
bWVdOworICAgICAgICBpZiAoIWdyb3VwKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspCisgICAgICAgICAgICB0aGlz
Ll9yZWxlYXNlT2JqZWN0KGdyb3VwW2ldKTsKKworICAgICAgICBkZWxldGUgdGhpcy5fb2JqZWN0
R3JvdXBzW29iamVjdEdyb3VwTmFtZV07CisgICAgfQorCisgICAgLy8gSW5qZWN0ZWRTY3JpcHRN
b2R1bGUgQysrIEFQSQorCisgICAgbW9kdWxlKG5hbWUpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fbW9kdWxlc1tuYW1lXTsKKyAgICB9CisKKyAgICBpbmplY3RNb2R1bGUobmFtZSwgc291
cmNlLCBob3N0KQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXMuX21vZHVsZXNbbmFtZV07CisK
KyAgICAgICAgbGV0IG1vZHVsZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRl
KCIoIiArIHNvdXJjZSArICIpIik7CisgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24g
IT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3Qu
Y29uc29sZSkKKyAgICAgICAgICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5l
cnJvcigiV2ViIEluc3BlY3RvciBlcnJvcjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1v
ZHVsZSAlcyBldmFsdWF0aW9uIiwgbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAg
ICAgICAgfQotICAgIH0sCiAKLSAgICBfYmluZDogZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91
cE5hbWUpCisgICAgICAgIGxldCBtb2R1bGUgPSBtb2R1bGVGdW5jdGlvbi5jYWxsKGluc3BlY3Rl
ZEdsb2JhbE9iamVjdCwgSW5qZWN0ZWRTY3JpcHRIb3N0LCBpbnNwZWN0ZWRHbG9iYWxPYmplY3Qs
IGluamVjdGVkU2NyaXB0SWQsIHRoaXMsIFJlbW90ZU9iamVjdCwgaG9zdCk7CisgICAgICAgIHRo
aXMuX21vZHVsZXNbbmFtZV0gPSBtb2R1bGU7CisgICAgICAgIHJldHVybiBtb2R1bGU7CisgICAg
fQorCisgICAgLy8gSW5qZWN0ZWRTY3JpcHRNb2R1bGUgSmF2YVNjcmlwdCBBUEkKKworICAgIGlz
UHJpbWl0aXZlVmFsdWUodmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7CisgICAgfQorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX3BhcnNlT2JqZWN0
SWQob2JqZWN0SWQpCisgICAgeworICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2
YWx1YXRlKCIoIiArIG9iamVjdElkICsgIikiKTsKKyAgICB9CisKKyAgICBfb2JqZWN0Rm9ySWQo
b2JqZWN0SWQpCiAgICAgewotICAgICAgICB2YXIgaWQgPSB0aGlzLl9sYXN0Qm91bmRPYmplY3RJ
ZCsrOworICAgICAgICByZXR1cm4gdGhpcy5faWRUb1dyYXBwZWRPYmplY3Rbb2JqZWN0SWQuaWRd
OworICAgIH0KKworICAgIF9iaW5kKG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lKQorICAgIHsKKyAg
ICAgICAgbGV0IGlkID0gdGhpcy5fbGFzdEJvdW5kT2JqZWN0SWQrKzsKKyAgICAgICAgbGV0IG9i
amVjdElkID0gYHsiaW5qZWN0ZWRTY3JpcHRJZCI6JHtpbmplY3RlZFNjcmlwdElkfSwiaWQiOiR7
aWR9fWA7CisKICAgICAgICAgdGhpcy5faWRUb1dyYXBwZWRPYmplY3RbaWRdID0gb2JqZWN0Owot
ICAgICAgICB2YXIgb2JqZWN0SWQgPSAie1wiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBpbmplY3Rl
ZFNjcmlwdElkICsgIixcImlkXCI6IiArIGlkICsgIn0iOworCiAgICAgICAgIGlmIChvYmplY3RH
cm91cE5hbWUpIHsKLSAgICAgICAgICAgIHZhciBncm91cCA9IHRoaXMuX29iamVjdEdyb3Vwc1tv
YmplY3RHcm91cE5hbWVdOworICAgICAgICAgICAgbGV0IGdyb3VwID0gdGhpcy5fb2JqZWN0R3Jv
dXBzW29iamVjdEdyb3VwTmFtZV07CiAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7CiAgICAgICAg
ICAgICAgICAgZ3JvdXAgPSBbXTsKICAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RHcm91cHNb
b2JqZWN0R3JvdXBOYW1lXSA9IGdyb3VwOwpAQCAtMTk2LDI2MyArNDAxLDUxIEBAIEluamVjdGVk
U2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGdyb3VwLnB1c2goaWQpOwogICAgICAg
ICAgICAgdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtpZF0gPSBvYmplY3RHcm91cE5hbWU7CiAg
ICAgICAgIH0KKwogICAgICAgICByZXR1cm4gb2JqZWN0SWQ7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfcGFyc2VPYmplY3RJZDogZnVuY3Rpb24ob2JqZWN0SWQpCi0gICAgewotICAgICAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIG9iamVjdElkICsgIikiKTsKLSAg
ICB9LAotCi0gICAgcmVsZWFzZU9iamVjdEdyb3VwOiBmdW5jdGlvbihvYmplY3RHcm91cE5hbWUp
Ci0gICAgewotICAgICAgICBpZiAob2JqZWN0R3JvdXBOYW1lID09PSAiY29uc29sZSIpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UmVzdWx0OwotICAgICAgICAgICAgdGhpcy5fbmV4
dFNhdmVkUmVzdWx0SW5kZXggPSAxOwotICAgICAgICAgICAgdGhpcy5fc2F2ZWRSZXN1bHRzID0g
W107Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZ3JvdXAgPSB0aGlzLl9vYmplY3RHcm91cHNb
b2JqZWN0R3JvdXBOYW1lXTsKLSAgICAgICAgaWYgKCFncm91cCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKQotICAg
ICAgICAgICAgdGhpcy5fcmVsZWFzZU9iamVjdChncm91cFtpXSk7Ci0KLSAgICAgICAgZGVsZXRl
IHRoaXMuX29iamVjdEdyb3Vwc1tvYmplY3RHcm91cE5hbWVdOwotICAgIH0sCi0KLSAgICBkaXNw
YXRjaDogZnVuY3Rpb24obWV0aG9kTmFtZSwgYXJncykKLSAgICB7Ci0gICAgICAgIHZhciBhcmdz
QXJyYXkgPSBJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgYXJncyArICIpIik7Ci0g
ICAgICAgIHZhciByZXN1bHQgPSB0aGlzW21ldGhvZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3NBcnJh
eSk7Ci0gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAidW5kZWZpbmVkIikgewotICAgICAg
ICAgICAgaWYgKGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlKQotICAgICAgICAgICAgICAg
IGluc3BlY3RlZEdsb2JhbE9iamVjdC5jb25zb2xlLmVycm9yKCJXZWIgSW5zcGVjdG9yIGVycm9y
OiBJbmplY3RlZFNjcmlwdC4lcyByZXR1cm5zIHVuZGVmaW5lZCIsIG1ldGhvZE5hbWUpOwotICAg
ICAgICAgICAgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0sCi0KLSAgICBnZXRQcmV2aWV3OiBmdW5jdGlvbihvYmplY3RJZCkKLSAgICB7Ci0g
ICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQp
OwotICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQp
OwotCi0gICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2Jq
ZWN0UHJldmlld0ZvclZhbHVlKG9iamVjdCwgdHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9nZXRQcm9w
ZXJ0aWVzOiBmdW5jdGlvbihvYmplY3RJZCwgY29sbGVjdGlvbk1vZGUsIGdlbmVyYXRlUHJldmll
dywgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKQotICAgIHsKLSAgICAgICAgdmFyIHBhcnNlZE9iamVj
dElkID0gdGhpcy5fcGFyc2VPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3Qg
PSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRPYmplY3RJZCk7Ci0gICAgICAgIHZhciBvYmplY3RH
cm91cE5hbWUgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsK
LQotICAgICAgICBpZiAoIXRoaXMuX2lzRGVmaW5lZChvYmplY3QpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChpc1N5bWJvbChvYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBkZXNjcmlwdG9ycyA9IHRoaXMuX3Byb3BlcnR5
RGVzY3JpcHRvcnMob2JqZWN0LCBjb2xsZWN0aW9uTW9kZSwgbmF0aXZlR2V0dGVyc0FzVmFsdWVz
KTsKLQotICAgICAgICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHdyYXAgb2JqZWN0IHZhbHVlcy4K
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKLSAgICAgICAgICAg
IGlmICgiZ2V0IiBpbiBkZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0
ID0gdGhpcy5fd3JhcE9iamVjdChkZXNjcmlwdG9yLmdldCwgb2JqZWN0R3JvdXBOYW1lKTsKLSAg
ICAgICAgICAgIGlmICgic2V0IiBpbiBkZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGRlc2Ny
aXB0b3Iuc2V0ID0gdGhpcy5fd3JhcE9iamVjdChkZXNjcmlwdG9yLnNldCwgb2JqZWN0R3JvdXBO
YW1lKTsKLSAgICAgICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci52YWx1
ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3KTsKLSAgICAgICAgICAg
IGlmICghKCJjb25maWd1cmFibGUiIGluIGRlc2NyaXB0b3IpKQotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoISgiZW51bWVy
YWJsZSIgaW4gZGVzY3JpcHRvcikpCi0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJh
YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoInN5bWJvbCIgaW4gZGVzY3JpcHRvcikKLSAg
ICAgICAgICAgICAgICBkZXNjcmlwdG9yLnN5bWJvbCA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3Jp
cHRvci5zeW1ib2wsIG9iamVjdEdyb3VwTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gZGVzY3JpcHRvcnM7Ci0gICAgfSwKLQotICAgIGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uKG9i
amVjdElkLCBvd25Qcm9wZXJ0aWVzLCBnZW5lcmF0ZVByZXZpZXcpCi0gICAgewotICAgICAgICB2
YXIgbmF0aXZlR2V0dGVyc0FzVmFsdWVzID0gZmFsc2U7Ci0gICAgICAgIHZhciBjb2xsZWN0aW9u
TW9kZSA9IG93blByb3BlcnRpZXMgPyBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5Pd25Q
cm9wZXJ0aWVzIDogSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuQWxsUHJvcGVydGllczsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2JqZWN0SWQsIGNvbGxlY3Rpb25N
b2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7Ci0gICAgfSwKLQot
ICAgIGdldERpc3BsYXlhYmxlUHJvcGVydGllczogZnVuY3Rpb24ob2JqZWN0SWQsIGdlbmVyYXRl
UHJldmlldykKLSAgICB7Ci0gICAgICAgIHZhciBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0cnVl
OwotICAgICAgICB2YXIgY29sbGVjdGlvbk1vZGUgPSBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9u
TW9kZS5Pd25Qcm9wZXJ0aWVzIHwgSW5qZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUuTmF0aXZl
R2V0dGVyUHJvcGVydGllczsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2dldFByb3BlcnRpZXMob2Jq
ZWN0SWQsIGNvbGxlY3Rpb25Nb2RlLCBnZW5lcmF0ZVByZXZpZXcsIG5hdGl2ZUdldHRlcnNBc1Zh
bHVlcyk7Ci0gICAgfSwKLQotICAgIGdldEludGVybmFsUHJvcGVydGllczogZnVuY3Rpb24ob2Jq
ZWN0SWQsIGdlbmVyYXRlUHJldmlldykKLSAgICB7Ci0gICAgICAgIHZhciBwYXJzZWRPYmplY3RJ
ZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICB2YXIgb2JqZWN0ID0g
dGhpcy5fb2JqZWN0Rm9ySWQocGFyc2VkT2JqZWN0SWQpOwotICAgICAgICB2YXIgb2JqZWN0R3Jv
dXBOYW1lID0gdGhpcy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07Ci0K
LSAgICAgICAgaWYgKCF0aGlzLl9pc0RlZmluZWQob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBpZiAoaXNTeW1ib2wob2JqZWN0KSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgZGVzY3JpcHRvcnMgPSB0aGlzLl9pbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKLSAgICAgICAgaWYgKCFkZXNjcmlwdG9ycykKLSAg
ICAgICAgICAgIHJldHVybiBbXTsKLQotICAgICAgICAvLyBHbyBvdmVyIHByb3BlcnRpZXMsIHdy
YXAgb2JqZWN0IHZhbHVlcy4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXNjcmlwdG9y
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9y
c1tpXTsKLSAgICAgICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpCi0gICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRoaXMuX3dyYXBPYmplY3QoZGVzY3JpcHRvci52YWx1
ZSwgb2JqZWN0R3JvdXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKLSAgICB9LAotCi0gICAgZ2V0Q29sbGVjdGlv
bkVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdElkLCBvYmplY3RHcm91cE5hbWUsIHN0YXJ0SW5kZXgs
IG51bWJlclRvRmV0Y2gpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkT2JqZWN0SWQgPSB0aGlz
Ll9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuX29i
amVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKLSAgICAgICAgdmFyIG9iamVjdEdyb3VwTmFtZSA9
IG9iamVjdEdyb3VwTmFtZSB8fCB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVj
dElkLmlkXTsKLQotICAgICAgICBpZiAoIXRoaXMuX2lzRGVmaW5lZChvYmplY3QpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAib2JqZWN0IikK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuX2VudHJp
ZXMob2JqZWN0LCBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlwZShvYmplY3QpLCBzdGFydEluZGV4
LCBudW1iZXJUb0ZldGNoKTsKLSAgICAgICAgcmV0dXJuIGVudHJpZXMubWFwKGZ1bmN0aW9uKGVu
dHJ5KSB7Ci0gICAgICAgICAgICBlbnRyeS52YWx1ZSA9IGluamVjdGVkU2NyaXB0Ll93cmFwT2Jq
ZWN0KGVudHJ5LnZhbHVlLCBvYmplY3RHcm91cE5hbWUsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAg
ICAgIGlmICgia2V5IiBpbiBlbnRyeSkKLSAgICAgICAgICAgICAgICBlbnRyeS5rZXkgPSBpbmpl
Y3RlZFNjcmlwdC5fd3JhcE9iamVjdChlbnRyeS5rZXksIG9iamVjdEdyb3VwTmFtZSwgZmFsc2Us
IHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICB9KTsKLSAgICB9LAot
Ci0gICAgc2F2ZVJlc3VsdDogZnVuY3Rpb24oY2FsbEFyZ3VtZW50SlNPTikKLSAgICB7Ci0gICAg
ICAgIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXggPSAwOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgICB2YXIgY2FsbEFyZ3VtZW50ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiAr
IGNhbGxBcmd1bWVudEpTT04gKyAiKSIpOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5f
cmVzb2x2ZUNhbGxBcmd1bWVudChjYWxsQXJndW1lbnQpOwotICAgICAgICAgICAgdGhpcy5fc2F2
ZVJlc3VsdCh2YWx1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHt9Ci0KLSAgICAgICAgcmV0dXJu
IHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7Ci0gICAgfSwKLQotICAgIGdldEZ1bmN0aW9uRGV0YWls
czogZnVuY3Rpb24oZnVuY3Rpb25JZCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXJzZWRGdW5jdGlv
bklkID0gdGhpcy5fcGFyc2VPYmplY3RJZChmdW5jdGlvbklkKTsKLSAgICAgICAgdmFyIGZ1bmMg
PSB0aGlzLl9vYmplY3RGb3JJZChwYXJzZWRGdW5jdGlvbklkKTsKLSAgICAgICAgaWYgKHR5cGVv
ZiBmdW5jICE9PSAiZnVuY3Rpb24iKQotICAgICAgICAgICAgcmV0dXJuICJDYW5ub3QgcmVzb2x2
ZSBmdW5jdGlvbiBieSBpZC4iOwotICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHQuZnVuY3Rp
b25EZXRhaWxzKGZ1bmMpOwotICAgIH0sCi0KLSAgICByZWxlYXNlT2JqZWN0OiBmdW5jdGlvbihv
YmplY3RJZCkKLSAgICB7Ci0gICAgICAgIHZhciBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3BhcnNl
T2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICB0aGlzLl9yZWxlYXNlT2JqZWN0KHBhcnNlZE9i
amVjdElkLmlkKTsKLSAgICB9LAotCi0gICAgX3JlbGVhc2VPYmplY3Q6IGZ1bmN0aW9uKGlkKQor
ICAgIF9yZWxlYXNlT2JqZWN0KGlkKQogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9X
cmFwcGVkT2JqZWN0W2lkXTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9PYmplY3RHcm91cE5h
bWVbaWRdOwotICAgIH0sCisgICAgfQogCi0gICAgZXZhbHVhdGU6IGZ1bmN0aW9uKGV4cHJlc3Np
b24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQorICAgIF9mYWxsYmFja1dyYXBwZXIob2JqZWN0KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChJbmplY3RlZFNjcmlw
dEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24sIEluamVjdGVkU2NyaXB0SG9zdCwgZXhw
cmVzc2lvbiwgb2JqZWN0R3JvdXAsIGZhbHNlLCBpbmplY3RDb21tYW5kTGluZUFQSSwgcmV0dXJu
QnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KTsKLSAgICB9LAotCi0gICAgY2Fs
bEZ1bmN0aW9uT246IGZ1bmN0aW9uKG9iamVjdElkLCBleHByZXNzaW9uLCBhcmdzLCByZXR1cm5C
eVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkT2JqZWN0
SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAgdmFyIG9iamVjdCA9
IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKLSAgICAgICAgaWYgKCF0aGlzLl9p
c0RlZmluZWQob2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAiQ291bGQgbm90IGZpbmQgb2Jq
ZWN0IHdpdGggZ2l2ZW4gaWQiOwotCi0gICAgICAgIGlmIChhcmdzKSB7Ci0gICAgICAgICAgICB2
YXIgcmVzb2x2ZWRBcmdzID0gW107Ci0gICAgICAgICAgICB2YXIgY2FsbEFyZ3MgPSBJbmplY3Rl
ZFNjcmlwdEhvc3QuZXZhbHVhdGUoYXJncyk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGNhbGxBcmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZWRBcmdzW2ldID0gdGhpcy5fcmVzb2x2ZUNhbGxBcmd1bWVu
dChjYWxsQXJnc1tpXSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgb2JqZWN0
R3JvdXAgPSB0aGlzLl9pZFRvT2JqZWN0R3JvdXBOYW1lW3BhcnNlZE9iamVjdElkLmlkXTsKLSAg
ICAgICAgICAgIHZhciBmdW5jID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIGV4
cHJlc3Npb24gKyAiKSIpOwotICAgICAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rp
b24iKQotICAgICAgICAgICAgICAgIHJldHVybiAiR2l2ZW4gZXhwcmVzc2lvbiBkb2VzIG5vdCBl
dmFsdWF0ZSB0byBhIGZ1bmN0aW9uIjsKLQotICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAg
ICAgICAgICB3YXNUaHJvd246IGZhbHNlLAotICAgICAgICAgICAgICAgIHJlc3VsdDogdGhpcy5f
d3JhcE9iamVjdChmdW5jLmFwcGx5KG9iamVjdCwgcmVzb2x2ZWRBcmdzKSwgb2JqZWN0R3JvdXAs
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKLSAgICAgICAgICAgIH07Ci0gICAgICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVUaHJvd25WYWx1
ZShlLCBvYmplY3RHcm91cCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3Jlc29sdmVDYWxs
QXJndW1lbnQ6IGZ1bmN0aW9uKGNhbGxBcmd1bWVudEpTT04pCisgICAgICAgIGxldCByZXN1bHQg
PSB7fTsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSB0eXBlb2Ygb2JqZWN0OworICAgICAgICBpZiAo
aXNQcmltaXRpdmVWYWx1ZShvYmplY3QpKQorICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gb2Jq
ZWN0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuZGVzY3JpcHRpb24gPSB0b1N0
cmluZyhvYmplY3QpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIF9yZXNv
bHZlQ2FsbEFyZ3VtZW50KGNhbGxBcmd1bWVudEpTT04pCiAgICAgewogICAgICAgICBpZiAoInZh
bHVlIiBpbiBjYWxsQXJndW1lbnRKU09OKQogICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmd1bWVu
dEpTT04udmFsdWU7CiAKLSAgICAgICAgdmFyIG9iamVjdElkID0gY2FsbEFyZ3VtZW50SlNPTi5v
YmplY3RJZDsKKyAgICAgICAgbGV0IG9iamVjdElkID0gY2FsbEFyZ3VtZW50SlNPTi5vYmplY3RJ
ZDsKICAgICAgICAgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgICAgICB2YXIgcGFyc2VkQXJnSWQg
PSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgICAgIGxldCBwYXJzZWRB
cmdJZCA9IHRoaXMuX3BhcnNlT2JqZWN0SWQob2JqZWN0SWQpOwogICAgICAgICAgICAgaWYgKCFw
YXJzZWRBcmdJZCB8fCBwYXJzZWRBcmdJZFsiaW5qZWN0ZWRTY3JpcHRJZCJdICE9PSBpbmplY3Rl
ZFNjcmlwdElkKQogICAgICAgICAgICAgICAgIHRocm93ICJBcmd1bWVudHMgc2hvdWxkIGJlbG9u
ZyB0byB0aGUgc2FtZSBKYXZhU2NyaXB0IHdvcmxkIGFzIHRoZSB0YXJnZXQgb2JqZWN0LiI7CiAK
LSAgICAgICAgICAgIHZhciByZXNvbHZlZEFyZyA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZEFy
Z0lkKTsKLSAgICAgICAgICAgIGlmICghdGhpcy5faXNEZWZpbmVkKHJlc29sdmVkQXJnKSkKKyAg
ICAgICAgICAgIGxldCByZXNvbHZlZEFyZyA9IHRoaXMuX29iamVjdEZvcklkKHBhcnNlZEFyZ0lk
KTsKKyAgICAgICAgICAgIGlmICghaXNEZWZpbmVkKHJlc29sdmVkQXJnKSkKICAgICAgICAgICAg
ICAgICB0aHJvdyAiQ291bGQgbm90IGZpbmQgb2JqZWN0IHdpdGggZ2l2ZW4gaWQiOwogCiAgICAg
ICAgICAgICByZXR1cm4gcmVzb2x2ZWRBcmc7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
dW5kZWZpbmVkOwotICAgIH0sCisgICAgfQogCi0gICAgX2V2YWx1YXRlQW5kV3JhcDogZnVuY3Rp
b24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpc0V2YWxP
bkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRl
UHJldmlldywgc2F2ZVJlc3VsdCkKKyAgICBfY3JlYXRlVGhyb3duVmFsdWUodmFsdWUsIG9iamVj
dEdyb3VwKQogICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuX3NhdmVkUmVz
dWx0SW5kZXggPSAwOwotCi0gICAgICAgICAgICB2YXIgcmV0dXJuT2JqZWN0ID0gewotICAgICAg
ICAgICAgICAgIHdhc1Rocm93bjogZmFsc2UsCi0gICAgICAgICAgICAgICAgcmVzdWx0OiB0aGlz
Ll93cmFwT2JqZWN0KHRoaXMuX2V2YWx1YXRlT24oZXZhbEZ1bmN0aW9uLCBvYmplY3QsIG9iamVj
dEdyb3VwLCBleHByZXNzaW9uLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExpbmVB
UEksIHNhdmVSZXN1bHQpLCBvYmplY3RHcm91cCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2
aWV3KQotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgaWYgKHNhdmVSZXN1bHQgJiYgdGhp
cy5fc2F2ZWRSZXN1bHRJbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm5PYmplY3Quc2F2ZWRS
ZXN1bHRJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7Ci0KLSAgICAgICAgICAgIHJldHVy
biByZXR1cm5PYmplY3Q7Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9jcmVhdGVUaHJvd25WYWx1ZShlLCBvYmplY3RHcm91cCk7Ci0gICAgICAgIH0KLSAg
ICB9LAotCi0gICAgX2NyZWF0ZVRocm93blZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgb2JqZWN0R3Jv
dXApCi0gICAgewotICAgICAgICB2YXIgcmVtb3RlT2JqZWN0ID0gdGhpcy5fd3JhcE9iamVjdCh2
YWx1ZSwgb2JqZWN0R3JvdXApOworICAgICAgICBsZXQgcmVtb3RlT2JqZWN0ID0gUmVtb3RlT2Jq
ZWN0LmNyZWF0ZSh2YWx1ZSwgb2JqZWN0R3JvdXApOwogICAgICAgICB0cnkgewogICAgICAgICAg
ICAgcmVtb3RlT2JqZWN0LmRlc2NyaXB0aW9uID0gdG9TdHJpbmdEZXNjcmlwdGlvbih2YWx1ZSk7
CiAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CkBAIC00NjAsMTEgKzQ1MywzMCBAQCBJbmplY3RlZFNj
cmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB3YXNUaHJvd246IHRydWUsCiAgICAgICAg
ICAgICByZXN1bHQ6IHJlbW90ZU9iamVjdAogICAgICAgICB9OwotICAgIH0sCisgICAgfQogCi0g
ICAgX2V2YWx1YXRlT246IGZ1bmN0aW9uKGV2YWxGdW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91
cCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxsRnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBz
YXZlUmVzdWx0KQorICAgIF9ldmFsdWF0ZUFuZFdyYXAoZXZhbEZ1bmN0aW9uLCBvYmplY3QsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpc0V2YWxPbkNhbGxGcmFtZSwgaW5qZWN0Q29tbWFuZExp
bmVBUEksIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCkKICAgICB7
Ci0gICAgICAgIHZhciBjb21tYW5kTGluZUFQSSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICB0aGlzLl9zYXZlZFJlc3VsdEluZGV4ID0gMDsKKworICAgICAgICAgICAgbGV0IHJl
dHVybk9iamVjdCA9IHsKKyAgICAgICAgICAgICAgICB3YXNUaHJvd246IGZhbHNlLAorICAgICAg
ICAgICAgICAgIHJlc3VsdDogUmVtb3RlT2JqZWN0LmNyZWF0ZSh0aGlzLl9ldmFsdWF0ZU9uKGV2
YWxGdW5jdGlvbiwgb2JqZWN0LCBvYmplY3RHcm91cCwgZXhwcmVzc2lvbiwgaXNFdmFsT25DYWxs
RnJhbWUsIGluamVjdENvbW1hbmRMaW5lQVBJLCBzYXZlUmVzdWx0KSwgb2JqZWN0R3JvdXAsIHJl
dHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldykKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGlmIChzYXZlUmVzdWx0ICYmIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgICAg
ICAgICAgcmV0dXJuT2JqZWN0LnNhdmVkUmVzdWx0SW5kZXggPSB0aGlzLl9zYXZlZFJlc3VsdElu
ZGV4OworCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuT2JqZWN0OworICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlVGhyb3duVmFsdWUoZSwgb2Jq
ZWN0R3JvdXApOworICAgICAgICB9CisgICAgfQorCisgICAgX2V2YWx1YXRlT24oZXZhbEZ1bmN0
aW9uLCBvYmplY3QsIG9iamVjdEdyb3VwLCBleHByZXNzaW9uLCBpc0V2YWxPbkNhbGxGcmFtZSwg
aW5qZWN0Q29tbWFuZExpbmVBUEksIHNhdmVSZXN1bHQpCisgICAgeworICAgICAgICBsZXQgY29t
bWFuZExpbmVBUEkgPSBudWxsOwogICAgICAgICBpZiAoaW5qZWN0Q29tbWFuZExpbmVBUEkpIHsK
ICAgICAgICAgICAgIGlmICh0aGlzLkNvbW1hbmRMaW5lQVBJKQogICAgICAgICAgICAgICAgIGNv
bW1hbmRMaW5lQVBJID0gbmV3IHRoaXMuQ29tbWFuZExpbmVBUEkodGhpcy5fY29tbWFuZExpbmVB
UElJbXBsLCBpc0V2YWxPbkNhbGxGcmFtZSA/IG9iamVjdCA6IG51bGwpOwpAQCAtNDcyLDg2ICs0
ODQsNjUgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGNv
bW1hbmRMaW5lQVBJID0gbmV3IEJhc2ljQ29tbWFuZExpbmVBUEkoaXNFdmFsT25DYWxsRnJhbWUg
PyBvYmplY3QgOiBudWxsKTsKICAgICAgICAgfQogCi0gICAgICAgIHZhciByZXN1bHQgPSBldmFs
RnVuY3Rpb24uY2FsbChvYmplY3QsIGV4cHJlc3Npb24sIGNvbW1hbmRMaW5lQVBJKTsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IGV2YWxGdW5jdGlvbi5jYWxsKG9iamVjdCwgZXhwcmVzc2lvbiwgY29t
bWFuZExpbmVBUEkpOwogICAgICAgICBpZiAoc2F2ZVJlc3VsdCkKICAgICAgICAgICAgIHRoaXMu
X3NhdmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAorICAg
IH0KIAotICAgIHdyYXBDYWxsRnJhbWVzOiBmdW5jdGlvbihjYWxsRnJhbWUpCisgICAgX2NhbGxG
cmFtZUZvcklkKHRvcENhbGxGcmFtZSwgY2FsbEZyYW1lSWQpCiAgICAgewotICAgICAgICBpZiAo
IWNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2YXIgcmVz
dWx0ID0gW107Ci0gICAgICAgIHZhciBkZXB0aCA9IDA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5wdXNoKG5ldyBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eShkZXB0aCsr
LCBjYWxsRnJhbWUpKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFtZS5jYWxsZXI7
Ci0gICAgICAgIH0gd2hpbGUgKGNhbGxGcmFtZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfSwKLQotICAgIGV2YWx1YXRlT25DYWxsRnJhbWU6IGZ1bmN0aW9uKHRvcENhbGxGcmFtZSwg
Y2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmplY3RDb21tYW5kTGluZUFQ
SSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0KQotICAgIHsKLSAg
ICAgICAgdmFyIGNhbGxGcmFtZSA9IHRoaXMuX2NhbGxGcmFtZUZvcklkKHRvcENhbGxGcmFtZSwg
Y2FsbEZyYW1lSWQpOwotICAgICAgICBpZiAoIWNhbGxGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
biAiQ291bGQgbm90IGZpbmQgY2FsbCBmcmFtZSB3aXRoIGdpdmVuIGlkIjsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX2V2YWx1YXRlQW5kV3JhcChjYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRl
bnNpb24sIGNhbGxGcmFtZSwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIHRydWUsIGluamVjdENv
bW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQp
OwotICAgIH0sCi0KLSAgICBfY2FsbEZyYW1lRm9ySWQ6IGZ1bmN0aW9uKHRvcENhbGxGcmFtZSwg
Y2FsbEZyYW1lSWQpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkQ2FsbEZyYW1lSWQgPSBJbmpl
Y3RlZFNjcmlwdEhvc3QuZXZhbHVhdGUoIigiICsgY2FsbEZyYW1lSWQgKyAiKSIpOwotICAgICAg
ICB2YXIgb3JkaW5hbCA9IHBhcnNlZENhbGxGcmFtZUlkWyJvcmRpbmFsIl07Ci0gICAgICAgIHZh
ciBjYWxsRnJhbWUgPSB0b3BDYWxsRnJhbWU7CisgICAgICAgIGxldCBwYXJzZWRDYWxsRnJhbWVJ
ZCA9IEluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZSgiKCIgKyBjYWxsRnJhbWVJZCArICIpIik7
CisgICAgICAgIGxldCBvcmRpbmFsID0gcGFyc2VkQ2FsbEZyYW1lSWRbIm9yZGluYWwiXTsKKyAg
ICAgICAgbGV0IGNhbGxGcmFtZSA9IHRvcENhbGxGcmFtZTsKICAgICAgICAgd2hpbGUgKC0tb3Jk
aW5hbCA+PSAwICYmIGNhbGxGcmFtZSkKICAgICAgICAgICAgIGNhbGxGcmFtZSA9IGNhbGxGcmFt
ZS5jYWxsZXI7CiAgICAgICAgIHJldHVybiBjYWxsRnJhbWU7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfb2JqZWN0Rm9ySWQ6IGZ1bmN0aW9uKG9iamVjdElkKQorICAgIF9nZXRQcm9wZXJ0aWVzKG9i
amVjdElkLCBjb2xsZWN0aW9uTW9kZSwgZ2VuZXJhdGVQcmV2aWV3LCBuYXRpdmVHZXR0ZXJzQXNW
YWx1ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5faWRUb1dyYXBwZWRPYmplY3Rbb2Jq
ZWN0SWQuaWRdOwotICAgIH0sCisgICAgICAgIGxldCBwYXJzZWRPYmplY3RJZCA9IHRoaXMuX3Bh
cnNlT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0ID0gdGhpcy5fb2JqZWN0
Rm9ySWQocGFyc2VkT2JqZWN0SWQpOworICAgICAgICBsZXQgb2JqZWN0R3JvdXBOYW1lID0gdGhp
cy5faWRUb09iamVjdEdyb3VwTmFtZVtwYXJzZWRPYmplY3RJZC5pZF07CiAKLSAgICBmaW5kT2Jq
ZWN0QnlJZDogZnVuY3Rpb24ob2JqZWN0SWQpCi0gICAgewotICAgICAgICB2YXIgcGFyc2VkT2Jq
ZWN0SWQgPSB0aGlzLl9wYXJzZU9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX29iamVjdEZvcklkKHBhcnNlZE9iamVjdElkKTsKLSAgICB9LAorICAgICAgICBpZiAoIWlz
RGVmaW5lZChvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbW9kdWxl
OiBmdW5jdGlvbihuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX21vZHVsZXNbbmFt
ZV07Ci0gICAgfSwKKyAgICAgICAgaWYgKGlzU3ltYm9sKG9iamVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpbmplY3RNb2R1bGU6IGZ1bmN0aW9uKG5hbWUsIHNvdXJjZSwg
aG9zdCkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9tb2R1bGVzW25hbWVdOworICAgICAg
ICBsZXQgZGVzY3JpcHRvcnMgPSB0aGlzLl9wcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCwgY29s
bGVjdGlvbk1vZGUsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CiAKLSAgICAgICAgdmFyIG1vZHVs
ZUZ1bmN0aW9uID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1YXRlKCIoIiArIHNvdXJjZSArICIp
Iik7Ci0gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlRnVuY3Rpb24gIT09ICJmdW5jdGlvbiIpIHsK
LSAgICAgICAgICAgIGlmIChpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZSkKLSAgICAgICAg
ICAgICAgICBpbnNwZWN0ZWRHbG9iYWxPYmplY3QuY29uc29sZS5lcnJvcigiV2ViIEluc3BlY3Rv
ciBlcnJvcjogQSBmdW5jdGlvbiB3YXMgZXhwZWN0ZWQgZm9yIG1vZHVsZSAlcyBldmFsdWF0aW9u
IiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgbGV0IGRlc2Ny
aXB0b3IgPSBkZXNjcmlwdG9yc1tpXTsKKyAgICAgICAgICAgIGlmICgiZ2V0IiBpbiBkZXNjcmlw
dG9yKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gUmVtb3RlT2JqZWN0LmNyZWF0
ZShkZXNjcmlwdG9yLmdldCwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICAgICAgICAgIGlmICgic2V0
IiBpbiBkZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gUmVtb3Rl
T2JqZWN0LmNyZWF0ZShkZXNjcmlwdG9yLnNldCwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICAgICAg
ICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci52YWx1ZSA9IFJlbW90ZU9iamVjdC5jcmVhdGUoZGVzY3JpcHRvci52YWx1ZSwgb2JqZWN0R3Jv
dXBOYW1lLCBmYWxzZSwgZ2VuZXJhdGVQcmV2aWV3KTsKKyAgICAgICAgICAgIGlmICghKCJjb25m
aWd1cmFibGUiIGluIGRlc2NyaXB0b3IpKQorICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29u
ZmlndXJhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoISgiZW51bWVyYWJsZSIgaW4gZGVz
Y3JpcHRvcikpCisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7
CisgICAgICAgICAgICBpZiAoInN5bWJvbCIgaW4gZGVzY3JpcHRvcikKKyAgICAgICAgICAgICAg
ICBkZXNjcmlwdG9yLnN5bWJvbCA9IFJlbW90ZU9iamVjdC5jcmVhdGUoZGVzY3JpcHRvci5zeW1i
b2wsIG9iamVjdEdyb3VwTmFtZSk7CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgbW9kdWxlID0g
bW9kdWxlRnVuY3Rpb24uY2FsbChpbnNwZWN0ZWRHbG9iYWxPYmplY3QsIEluamVjdGVkU2NyaXB0
SG9zdCwgaW5zcGVjdGVkR2xvYmFsT2JqZWN0LCBpbmplY3RlZFNjcmlwdElkLCB0aGlzLCBob3N0
KTsKLSAgICAgICAgdGhpcy5fbW9kdWxlc1tuYW1lXSA9IG1vZHVsZTsKLSAgICAgICAgcmV0dXJu
IG1vZHVsZTsKLSAgICB9LAorICAgICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CisgICAgfQogCi0g
ICAgX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24ob2JqZWN0LCBjb21wbGV0
ZURlc2NyaXB0b3IpCisgICAgX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIGNv
bXBsZXRlRGVzY3JpcHRvcikKICAgICB7Ci0gICAgICAgIHZhciBpbnRlcm5hbFByb3BlcnRpZXMg
PSBJbmplY3RlZFNjcmlwdEhvc3QuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKG9iamVjdCk7CisgICAg
ICAgIGxldCBpbnRlcm5hbFByb3BlcnRpZXMgPSBJbmplY3RlZFNjcmlwdEhvc3QuZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKG9iamVjdCk7CiAgICAgICAgIGlmICghaW50ZXJuYWxQcm9wZXJ0aWVzKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgdmFyIGRlc2NyaXB0b3JzID0gW107
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50ZXJuYWxQcm9wZXJ0aWVzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBpbnRlcm5hbFByb3BlcnRpZXNbaV07
Ci0gICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHtuYW1lOiBwcm9wZXJ0eS5uYW1lLCB2YWx1
ZTogcHJvcGVydHkudmFsdWV9OworICAgICAgICBsZXQgZGVzY3JpcHRvcnMgPSBbXTsKKyAgICAg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlcm5hbFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IGludGVybmFsUHJvcGVydGllc1tpXTsKKyAgICAg
ICAgICAgIGxldCBkZXNjcmlwdG9yID0ge25hbWU6IHByb3BlcnR5Lm5hbWUsIHZhbHVlOiBwcm9w
ZXJ0eS52YWx1ZX07CiAgICAgICAgICAgICBpZiAoY29tcGxldGVEZXNjcmlwdG9yKSB7CiAgICAg
ICAgICAgICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gZmFsc2U7CkBAIC01NjEsMzIgKzU1MiwzMiBAQCBJ
bmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBkZXNjcmlwdG9ycy5wdXNo
KGRlc2NyaXB0b3IpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKLSAg
ICB9LAorICAgIH0KIAotICAgIF9wcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbihvYmplY3Qs
IGNvbGxlY3Rpb25Nb2RlLCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpCisgICAgX3Byb3BlcnR5RGVz
Y3JpcHRvcnMob2JqZWN0LCBjb2xsZWN0aW9uTW9kZSwgbmF0aXZlR2V0dGVyc0FzVmFsdWVzKQog
ICAgIHsKICAgICAgICAgaWYgKEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBlKG9iamVjdCkgPT09
ICJwcm94eSIpCiAgICAgICAgICAgICByZXR1cm4gW107CiAKLSAgICAgICAgdmFyIGRlc2NyaXB0
b3JzID0gW107Ci0gICAgICAgIHZhciBuYW1lUHJvY2Vzc2VkID0gbmV3IFNldDsKKyAgICAgICAg
bGV0IGRlc2NyaXB0b3JzID0gW107CisgICAgICAgIGxldCBuYW1lUHJvY2Vzc2VkID0gbmV3IFNl
dDsKIAogICAgICAgICBmdW5jdGlvbiBjcmVhdGVGYWtlVmFsdWVEZXNjcmlwdG9yKG5hbWUsIHN5
bWJvbCwgZGVzY3JpcHRvciwgaXNPd25Qcm9wZXJ0eSwgcG9zc2libGVOYXRpdmVCaW5kaW5nR2V0
dGVyKQogICAgICAgICB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHZhciBk
ZXNjcmlwdG9yID0ge25hbWUsIHZhbHVlOiBvYmplY3RbbmFtZV0sIHdyaXRhYmxlOiBkZXNjcmlw
dG9yLndyaXRhYmxlIHx8IGZhbHNlLCBjb25maWd1cmFibGU6IGRlc2NyaXB0b3IuY29uZmlndXJh
YmxlIHx8IGZhbHNlLCBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2V9
OworICAgICAgICAgICAgICAgIGxldCBmYWtlRGVzY3JpcHRvciA9IHtuYW1lLCB2YWx1ZTogb2Jq
ZWN0W25hbWVdLCB3cml0YWJsZTogZGVzY3JpcHRvci53cml0YWJsZSB8fCBmYWxzZSwgY29uZmln
dXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSB8fCBmYWxzZSwgZW51bWVyYWJsZTogZGVz
Y3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlfTsKICAgICAgICAgICAgICAgICBpZiAocG9zc2li
bGVOYXRpdmVCaW5kaW5nR2V0dGVyKQotICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm5h
dGl2ZUdldHRlciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGZha2VEZXNjcmlwdG9yLm5h
dGl2ZUdldHRlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKGlzT3duUHJvcGVydHkpCi0g
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuaXNPd24gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBmYWtlRGVzY3JpcHRvci5pc093biA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYg
KHN5bWJvbCkKLSAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zeW1ib2wgPSBzeW1ib2w7
CisgICAgICAgICAgICAgICAgICAgIGZha2VEZXNjcmlwdG9yLnN5bWJvbCA9IHN5bWJvbDsKICAg
ICAgICAgICAgICAgICAvLyBTaWxlbmNlIGFueSBwb3NzaWJsZSB1bmhhbmRsZWRyZWplY3Rpb24g
ZXhjZXB0aW9ucyBjcmVhdGVkIGZyb20gYWNjZXNzaW5nIGEgbmF0aXZlIGFjY2Vzc29yIHdpdGgg
YSB3cm9uZyB0aGlzIG9iamVjdC4KLSAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1
ZSBpbnN0YW5jZW9mIFByb21pc2UpCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFs
dWUuY2F0Y2goZnVuY3Rpb24oKXt9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRv
cjsKKyAgICAgICAgICAgICAgICBpZiAoZmFrZURlc2NyaXB0b3IudmFsdWUgaW5zdGFuY2VvZiBQ
cm9taXNlKQorICAgICAgICAgICAgICAgICAgICBmYWtlRGVzY3JpcHRvci52YWx1ZS5jYXRjaChm
dW5jdGlvbigpe30pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWtlRGVzY3JpcHRvcjsKICAg
ICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICB2YXIgZXJyb3JEZXNjcmlw
dG9yID0ge25hbWUsIHZhbHVlOiBlLCB3YXNUaHJvd246IHRydWV9OworICAgICAgICAgICAgICAg
IGxldCBlcnJvckRlc2NyaXB0b3IgPSB7bmFtZSwgdmFsdWU6IGUsIHdhc1Rocm93bjogdHJ1ZX07
CiAgICAgICAgICAgICAgICAgaWYgKGlzT3duUHJvcGVydHkpCiAgICAgICAgICAgICAgICAgICAg
IGVycm9yRGVzY3JpcHRvci5pc093biA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bCkKQEAgLTYyMCwyMSArNjExLDIxIEBAIEluamVjdGVkU2NyaXB0LnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUHJvcGVydGllcyhvLCBwcm9wZXJ0aWVzLCBpc093blBy
b3BlcnR5KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3Bl
cnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9w
ZXJ0aWVzW2ldOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gcHJvcGVydGllc1tp
XTsKICAgICAgICAgICAgICAgICBpZiAobmFtZVByb2Nlc3NlZC5oYXMocHJvcGVydHkpIHx8IHBy
b3BlcnR5ID09PSAiX19wcm90b19fIikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgICAgICBuYW1lUHJvY2Vzc2VkLmFkZChwcm9wZXJ0eSk7CiAKLSAgICAgICAg
ICAgICAgICB2YXIgbmFtZSA9IHRvU3RyaW5nKHByb3BlcnR5KTsKLSAgICAgICAgICAgICAgICB2
YXIgc3ltYm9sID0gaXNTeW1ib2wocHJvcGVydHkpID8gcHJvcGVydHkgOiBudWxsOworICAgICAg
ICAgICAgICAgIGxldCBuYW1lID0gdG9TdHJpbmcocHJvcGVydHkpOworICAgICAgICAgICAgICAg
IGxldCBzeW1ib2wgPSBpc1N5bWJvbChwcm9wZXJ0eSkgPyBwcm9wZXJ0eSA6IG51bGw7CiAKLSAg
ICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IobywgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBCYWQg
ZGVzY3JpcHRvci4gQ2FuIHdlIGdldCBoZXJlPwogICAgICAgICAgICAgICAgICAgICAvLyBGYWxs
IGJhY2sgdG8gdmVyeSByZXN0cmljdGl2ZSBzZXR0aW5ncy4KLSAgICAgICAgICAgICAgICAgICAg
dmFyIGZha2VEZXNjcmlwdG9yID0gY3JlYXRlRmFrZVZhbHVlRGVzY3JpcHRvcihuYW1lLCBzeW1i
b2wsIHt3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2UsIGVudW1lcmFibGU6IGZh
bHNlfSwgaXNPd25Qcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIGxldCBmYWtlRGVzY3Jp
cHRvciA9IGNyZWF0ZUZha2VWYWx1ZURlc2NyaXB0b3IobmFtZSwgc3ltYm9sLCB7d3JpdGFibGU6
IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiBmYWxzZX0sIGlzT3duUHJv
cGVydHkpOwogICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRGVzY3JpcHRvcihmYWtlRGVzY3Jp
cHRvciwgaXNPd25Qcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTY0Miw4ICs2MzMsOCBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUdldHRlcnNBc1ZhbHVlcykgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nKGRlc2NyaXB0b3IuZ2V0KS5lbmRzV2l0aCgiW25h
dGl2ZSBjb2RlXVxufSIpIHx8ICghZGVzY3JpcHRvci5nZXQgJiYgZGVzY3JpcHRvci5oYXNPd25Q
cm9wZXJ0eSgiZ2V0IikgJiYgIWRlc2NyaXB0b3Iuc2V0ICYmIGRlc2NyaXB0b3IuaGFzT3duUHJv
cGVydHkoInNldCIpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV2ZWxvcGVycyBt
YXkgY3JlYXRlIHN1Y2ggYSBkZXNjcmlwdG9yLCBzbyB3ZSBzaG91bGQgYmUgcmVzaWxpZW50Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIHggPSB7fTsgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHgsICJwIiwge2dldDp1bmRlZmluZWR9KTsgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcih4LCAicCIpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmFrZURlc2NyaXB0b3Ig
PSBjcmVhdGVGYWtlVmFsdWVEZXNjcmlwdG9yKG5hbWUsIHN5bWJvbCwgZGVzY3JpcHRvciwgaXNP
d25Qcm9wZXJ0eSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgeCA9IHt9
OyBPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwgInAiLCB7Z2V0OnVuZGVmaW5lZH0pOyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHgsICJwIikKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxldCBmYWtlRGVzY3JpcHRvciA9IGNyZWF0ZUZha2VWYWx1ZURlc2NyaXB0b3IobmFtZSwgc3lt
Ym9sLCBkZXNjcmlwdG9yLCBpc093blByb3BlcnR5LCB0cnVlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NEZXNjcmlwdG9yKGZha2VEZXNjcmlwdG9yLCBpc093blByb3BlcnR5LCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC02NjAsOCArNjUxLDggQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewog
CiAgICAgICAgIGZ1bmN0aW9uIGFycmF5SW5kZXhQcm9wZXJ0eU5hbWVzKG8sIGxlbmd0aCkKICAg
ICAgICAgewotICAgICAgICAgICAgdmFyIGFycmF5ID0gW107Ci0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBsZXQgYXJyYXkgPSBbXTsK
KyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBpZiAoaSBpbiBvKQogICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKCIiICsg
aSk7CiAgICAgICAgICAgICB9CkBAIC02NzAsMTMgKzY2MSwxMyBAQCBJbmplY3RlZFNjcmlwdC5w
cm90b3R5cGUgPSB7CiAKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8x
NDM1ODk+IFdlYiBJbnNwZWN0b3I6IEJldHRlciBoYW5kbGluZyBmb3IgbGFyZ2UgY29sbGVjdGlv
bnMgaW4gT2JqZWN0IFRyZWVzCiAgICAgICAgIC8vIEZvciBhcnJheSB0eXBlcyB3aXRoIGEgbGFy
Z2UgbGVuZ3RoIHdlIGF0dGVtcHQgdG8gc2tpcCBnZXRPd25Qcm9wZXJ0eU5hbWVzIGFuZCBpbnN0
ZWFkIGp1c3Qgc3VibGlzdCBvZiBpbmRleGVzLgotICAgICAgICB2YXIgaXNBcnJheUxpa2UgPSBm
YWxzZTsKKyAgICAgICAgbGV0IGlzQXJyYXlMaWtlID0gZmFsc2U7CiAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICBpc0FycmF5TGlrZSA9IGluamVjdGVkU2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCkg
PT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2JqZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0aCA+
IDA7CisgICAgICAgICAgICBpc0FycmF5TGlrZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKG9iamVj
dCkgPT09ICJhcnJheSIgJiYgaXNGaW5pdGUob2JqZWN0Lmxlbmd0aCkgJiYgb2JqZWN0Lmxlbmd0
aCA+IDA7CiAgICAgICAgIH0gY2F0Y2goZSkge30KIAotICAgICAgICBmb3IgKHZhciBvID0gb2Jq
ZWN0OyB0aGlzLl9pc0RlZmluZWQobyk7IG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobykpIHsK
LSAgICAgICAgICAgIHZhciBpc093blByb3BlcnR5ID0gbyA9PT0gb2JqZWN0OworICAgICAgICBm
b3IgKGxldCBvID0gb2JqZWN0OyBpc0RlZmluZWQobyk7IG8gPSBPYmplY3QuZ2V0UHJvdG90eXBl
T2YobykpIHsKKyAgICAgICAgICAgIGxldCBpc093blByb3BlcnR5ID0gbyA9PT0gb2JqZWN0Owog
CiAgICAgICAgICAgICBpZiAoaXNBcnJheUxpa2UgJiYgaXNPd25Qcm9wZXJ0eSkKICAgICAgICAg
ICAgICAgICBwcm9jZXNzUHJvcGVydGllcyhvLCBhcnJheUluZGV4UHJvcGVydHlOYW1lcyhvLCBN
YXRoLm1pbihvYmplY3QubGVuZ3RoLCAxMDApKSwgaXNPd25Qcm9wZXJ0eSk7CkBAIC02OTcsMTI4
ICs2ODgsMTQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9IGNhdGNo
IChlKSB7fQogCiAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yczsKLSAgICB9LAorICAgIH0KIAot
ICAgIF9pc0RlZmluZWQ6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICBfZ2V0U2V0RW50cmllcyhvYmpl
Y3QsIHNraXAsIG51bWJlclRvRmV0Y2gpCiAgICAgewotICAgICAgICByZXR1cm4gISFvYmplY3Qg
fHwgdGhpcy5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpOwotICAgIH0sCisgICAgICAgIGxl
dCBlbnRyaWVzID0gW107CiAKLSAgICBfaXNIVE1MQWxsQ29sbGVjdGlvbjogZnVuY3Rpb24ob2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgLy8gZG9jdW1lbnQuYWxsIGlzIHJlcG9ydGVkIGFzIHVuZGVm
aW5lZCwgYnV0IHdlIHN0aWxsIHdhbnQgdG8gcHJvY2VzcyBpdC4KLSAgICAgICAgcmV0dXJuICh0
eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIikgJiYgSW5qZWN0ZWRTY3JpcHRIb3N0LmlzSFRN
TEFsbENvbGxlY3Rpb24ob2JqZWN0KTsKLSAgICB9LAotCi0gICAgX3N1YnR5cGU6IGZ1bmN0aW9u
KG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT09IG51bGwpCi0gICAgICAgICAgICByZXR1
cm4gIm51bGwiOwotCi0gICAgICAgIGlmICh0aGlzLmlzUHJpbWl0aXZlVmFsdWUob2JqKSB8fCBp
c1N5bWJvbChvYmopKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgaWYgKHRo
aXMuX2lzSFRNTEFsbENvbGxlY3Rpb24ob2JqKSkKLSAgICAgICAgICAgIHJldHVybiAiYXJyYXki
OwotCi0gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IEluamVjdGVkU2NyaXB0SG9zdC5zdWJ0eXBl
KG9iaik7Ci0gICAgICAgIGlmIChwcmVjaXNlVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBwcmVj
aXNlVHlwZTsKLQotICAgICAgICAvLyBGaXJlQnVnJ3MgYXJyYXkgZGV0ZWN0aW9uLgotICAgICAg
ICB0cnkgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmouc3BsaWNlID09PSAiZnVuY3Rpb24i
ICYmIGlzRmluaXRlKG9iai5sZW5ndGgpKQotICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXki
OwotICAgICAgICB9IGNhdGNoIChlKSB7fQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0s
Ci0KLSAgICBfY2xhc3NQcmV2aWV3OiBmdW5jdGlvbihjbGFzc0NvbnN0cnVjdG9yVmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gImNsYXNzICIgKyBjbGFzc0NvbnN0cnVjdG9yVmFsdWUubmFt
ZTsKLSAgICB9LAotCi0gICAgX25vZGVQcmV2aWV3OiBmdW5jdGlvbihub2RlKQotICAgIHsKLSAg
ICAgICAgdmFyIGlzWE1MRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2RlLm93
bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKLSAgICAgICAgdmFyIG5vZGVOYW1lID0gaXNYTUxEb2N1
bWVudCA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAg
ICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgMTogLy8gTm9kZS5F
TEVNRU5UX05PREUKLSAgICAgICAgICAgIGlmIChub2RlLmlkKQotICAgICAgICAgICAgICAgIHJl
dHVybiAiPCIgKyBub2RlTmFtZSArICIgaWQ9XCIiICsgbm9kZS5pZCArICJcIj4iOwotICAgICAg
ICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0Lmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
IjwiICsgbm9kZU5hbWUgKyAiIGNsYXNzPVwiIiArIG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5nKCku
cmVwbGFjZSgvXHMrLywgIiAiKSArICJcIj4iOwotICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09
PSAiaW5wdXQiICYmIG5vZGUudHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsgbm9k
ZU5hbWUgKyAiIHR5cGU9XCIiICsgbm9kZS50eXBlICsgIlwiPiI7Ci0gICAgICAgICAgICByZXR1
cm4gIjwiICsgbm9kZU5hbWUgKyAiPiI7Ci0KLSAgICAgICAgY2FzZSAzOiAvLyBOb2RlLlRFWFRf
Tk9ERQotICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1lICsgIiBcIiIgKyBub2RlLm5vZGVWYWx1
ZSArICJcIiI7Ci0KLSAgICAgICAgY2FzZSA4OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQotICAgICAg
ICAgICAgcmV0dXJuICI8IS0tIiArIG5vZGUubm9kZVZhbHVlICsgIi0tPiI7Ci0KLSAgICAgICAg
Y2FzZSAxMDogLy8gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUKLSAgICAgICAgICAgIHJldHVybiAi
PCFET0NUWVBFICIgKyBub2RlTmFtZSArICI+IjsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVOYW1lOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIF9kZXNjcmli
ZTogZnVuY3Rpb24ob2JqKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuaXNQcmltaXRpdmVWYWx1
ZShvYmopKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgaWYgKGlzU3ltYm9s
KG9iaikpCi0gICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcob2JqKTsKLQotICAgICAgICB2YXIg
c3VidHlwZSA9IHRoaXMuX3N1YnR5cGUob2JqKTsKLQotICAgICAgICBpZiAoc3VidHlwZSA9PT0g
InJlZ2V4cCIpCi0gICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcob2JqKTsKLQotICAgICAgICBp
ZiAoc3VidHlwZSA9PT0gImRhdGUiKQotICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKG9iaik7
Ci0KLSAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJlcnJvciIpCi0gICAgICAgICAgICByZXR1cm4g
dG9TdHJpbmcob2JqKTsKLQotICAgICAgICBpZiAoc3VidHlwZSA9PT0gInByb3h5IikKLSAgICAg
ICAgICAgIHJldHVybiAiUHJveHkiOwotCi0gICAgICAgIGlmIChzdWJ0eXBlID09PSAibm9kZSIp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9kZVByZXZpZXcob2JqKTsKLQotICAgICAgICB2
YXIgY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1l
KG9iaik7Ci0gICAgICAgIGlmIChzdWJ0eXBlID09PSAiYXJyYXkiKQotICAgICAgICAgICAgcmV0
dXJuIGNsYXNzTmFtZTsKLQotICAgICAgICBpZiAoc3VidHlwZSA9PT0gIml0ZXJhdG9yIiAmJiBT
eW1ib2wudG9TdHJpbmdUYWcgaW4gb2JqKQotICAgICAgICAgICAgcmV0dXJuIG9ialtTeW1ib2wu
dG9TdHJpbmdUYWddOwotCi0gICAgICAgIC8vIE5vZGVMaXN0IGluIEpTQyBpcyBhIGZ1bmN0aW9u
LCBjaGVjayBmb3IgYXJyYXkgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgaWYgKHR5cGVvZiBvYmog
PT09ICJmdW5jdGlvbiIpCi0gICAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7Ci0KLSAg
ICAgICAgLy8gSWYgT2JqZWN0LCB0cnkgZm9yIGEgYmV0dGVyIG5hbWUgZnJvbSB0aGUgY29uc3Ry
dWN0b3IuCi0gICAgICAgIGlmIChjbGFzc05hbWUgPT09ICJPYmplY3QiKSB7Ci0gICAgICAgICAg
ICB2YXIgY29uc3RydWN0b3JOYW1lID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rv
ci5uYW1lOwotICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTmFtZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY29uc3RydWN0b3JOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNs
YXNzTmFtZTsKLSAgICB9LAotCi0gICAgX2dldFNldEVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdCwg
c2tpcCwgbnVtYmVyVG9GZXRjaCkKLSAgICB7Ci0gICAgICAgIHZhciBlbnRyaWVzID0gW107Ci0K
LSAgICAgICAgZm9yICh2YXIgdmFsdWUgb2Ygb2JqZWN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG9ic2VydmFibGUgaWYgdGhlIHBhZ2Ugb3ZlcnJpZGVzIFNldC5wcm90b3R5cGVbU3lt
Ym9sLml0ZXJhdG9yXS4KKyAgICAgICAgZm9yIChsZXQgdmFsdWUgb2Ygb2JqZWN0KSB7CiAgICAg
ICAgICAgICBpZiAoc2tpcCA+IDApIHsKICAgICAgICAgICAgICAgICBza2lwLS07CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC04MzEsMTMgKzcwOCwxNCBAQCBJbmplY3RlZFNjcmlwdC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZW50cmllczsKLSAgICB9
LAorICAgIH0KIAotICAgIF9nZXRNYXBFbnRyaWVzOiBmdW5jdGlvbihvYmplY3QsIHNraXAsIG51
bWJlclRvRmV0Y2gpCisgICAgX2dldE1hcEVudHJpZXMob2JqZWN0LCBza2lwLCBudW1iZXJUb0Zl
dGNoKQogICAgIHsKLSAgICAgICAgdmFyIGVudHJpZXMgPSBbXTsKKyAgICAgICAgbGV0IGVudHJp
ZXMgPSBbXTsKIAotICAgICAgICBmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ic2VydmFibGUgaWYgdGhlIHBhZ2Ugb3ZlcnJpZGVz
IE1hcC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXS4KKyAgICAgICAgZm9yIChsZXQgW2tleSwg
dmFsdWVdIG9mIG9iamVjdCkgewogICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CiAgICAgICAg
ICAgICAgICAgc2tpcC0tOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODUwLDI0ICs3
MjgsMjQgQEAgSW5qZWN0ZWRTY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAg
ICAgcmV0dXJuIGVudHJpZXM7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZ2V0V2Vha01hcEVudHJp
ZXM6IGZ1bmN0aW9uKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKKyAgICBfZ2V0V2Vha01hcEVudHJp
ZXMob2JqZWN0LCBudW1iZXJUb0ZldGNoKQogICAgIHsKICAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0SG9zdC53ZWFrTWFwRW50cmllcyhvYmplY3QsIG51bWJlclRvRmV0Y2gpOwotICAgIH0s
CisgICAgfQogCi0gICAgX2dldFdlYWtTZXRFbnRyaWVzOiBmdW5jdGlvbihvYmplY3QsIG51bWJl
clRvRmV0Y2gpCisgICAgX2dldFdlYWtTZXRFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3Qud2Vha1NldEVudHJpZXMo
b2JqZWN0LCBudW1iZXJUb0ZldGNoKTsKLSAgICB9LAorICAgIH0KIAotICAgIF9nZXRJdGVyYXRv
ckVudHJpZXM6IGZ1bmN0aW9uKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKKyAgICBfZ2V0SXRlcmF0
b3JFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIHJldHVybiBJ
bmplY3RlZFNjcmlwdEhvc3QuaXRlcmF0b3JFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCk7
Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfZW50cmllczogZnVuY3Rpb24ob2JqZWN0LCBzdWJ0eXBl
LCBzdGFydEluZGV4LCBudW1iZXJUb0ZldGNoKQorICAgIF9lbnRyaWVzKG9iamVjdCwgc3VidHlw
ZSwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCkKICAgICB7CiAgICAgICAgIGlmIChzdWJ0eXBl
ID09PSAic2V0IikKICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTZXRFbnRyaWVzKG9iamVj
dCwgc3RhcnRJbmRleCwgbnVtYmVyVG9GZXRjaCk7CkBAIC04ODEsMTYgKzc1OSwxNiBAQCBJbmpl
Y3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SXRl
cmF0b3JFbnRyaWVzKG9iamVjdCwgbnVtYmVyVG9GZXRjaCk7CiAKICAgICAgICAgdGhyb3cgInVu
ZXhwZWN0ZWQgdHlwZSI7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2F2ZVJlc3VsdDogZnVuY3Rp
b24ocmVzdWx0KQorICAgIF9zYXZlUmVzdWx0KHJlc3VsdCkKICAgICB7CiAgICAgICAgIHRoaXMu
X2xhc3RSZXN1bHQgPSByZXN1bHQ7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVk
IHx8IHJlc3VsdCA9PT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIg
ZXhpc3RpbmdJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0cy5pbmRleE9mKHJlc3VsdCk7CisgICAg
ICAgIGxldCBleGlzdGluZ0luZGV4ID0gdGhpcy5fc2F2ZWRSZXN1bHRzLmluZGV4T2YocmVzdWx0
KTsKICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgICB0aGlz
Ll9zYXZlZFJlc3VsdEluZGV4ID0gZXhpc3RpbmdJbmRleDsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTkwMiw4NCArNzgwLDIxMSBAQCBJbmplY3RlZFNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIC8vICRuIGlzIGxpbWl0ZWQgZnJvbSAkMS0kOTkuICQwIGlzIHNwZWNpYWwuCiAgICAgICAg
IGlmICh0aGlzLl9uZXh0U2F2ZWRSZXN1bHRJbmRleCA+PSAxMDApCiAgICAgICAgICAgICB0aGlz
Ll9uZXh0U2F2ZWRSZXN1bHRJbmRleCA9IDE7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfc2F2ZWRS
ZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQorICAgIF9zYXZlZFJlc3VsdChpbmRleCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9zYXZlZFJlc3VsdHNbaW5kZXhdOwogICAgIH0KIH0KIAorSW5q
ZWN0ZWRTY3JpcHQuQ29sbGVjdGlvbk1vZGUgPSB7CisgICAgT3duUHJvcGVydGllczogMSA8PCAw
LCAgICAgICAgICAvLyBvd24gcHJvcGVydGllcy4KKyAgICBOYXRpdmVHZXR0ZXJQcm9wZXJ0aWVz
OiAxIDw8IDEsIC8vIG5hdGl2ZSBnZXR0ZXIgcHJvcGVydGllcyBpbiB0aGUgcHJvdG90eXBlIGNo
YWluLgorICAgIEFsbFByb3BlcnRpZXM6IDEgPDwgMiwgICAgICAgICAgLy8gYWxsIHByb3BlcnRp
ZXMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbi4KK307CisKIHZhciBpbmplY3RlZFNjcmlwdCA9IG5l
dyBJbmplY3RlZFNjcmlwdDsKIAorLy8gLS0tLS0tLQogCi1JbmplY3RlZFNjcmlwdC5SZW1vdGVP
YmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUs
IGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCitsZXQgUmVtb3RlT2JqZWN0ID0gY2xhc3Mg
UmVtb3RlT2JqZWN0CiB7Ci0gICAgdGhpcy50eXBlID0gdHlwZW9mIG9iamVjdDsKKyAgICBjb25z
dHJ1Y3RvcihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSwgZm9yY2VWYWx1ZVR5cGUsIGdlbmVyYXRl
UHJldmlldywgY29sdW1uTmFtZXMpCisgICAgeworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlb2Yg
b2JqZWN0OworCisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJ1bmRlZmluZWQiICYmIEluamVj
dGVkU2NyaXB0SG9zdC5pc0hUTUxBbGxDb2xsZWN0aW9uKG9iamVjdCkpCisgICAgICAgICAgICB0
aGlzLnR5cGUgPSAib2JqZWN0IjsKKworICAgICAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZShvYmpl
Y3QpIHx8IG9iamVjdCA9PT0gbnVsbCB8fCBmb3JjZVZhbHVlVHlwZSkgeworICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgc2VuZCB1bmRlZmluZWQgdmFsdWVzIG92ZXIgSlNPTi4KKyAgICAgICAgICAg
IGlmICh0aGlzLnR5cGUgIT09ICJ1bmRlZmluZWQiKQorICAgICAgICAgICAgICAgIHRoaXMudmFs
dWUgPSBvYmplY3Q7CisKKyAgICAgICAgICAgIC8vIE51bGwgb2JqZWN0IGlzIG9iamVjdCB3aXRo
ICdudWxsJyBzdWJ0eXBlLgorICAgICAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkKKyAgICAg
ICAgICAgICAgICB0aGlzLnN1YnR5cGUgPSAibnVsbCI7CisKKyAgICAgICAgICAgIC8vIFByb3Zp
ZGUgdXNlci1mcmllbmRseSBudW1iZXIgdmFsdWVzLgorICAgICAgICAgICAgaWYgKHRoaXMudHlw
ZSA9PT0gIm51bWJlciIpCisgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRvU3Ry
aW5nRGVzY3JpcHRpb24ob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMub2JqZWN0SWQgPSBpbmplY3RlZFNjcmlwdC5fYmluZChvYmplY3QsIG9i
amVjdEdyb3VwTmFtZSk7CiAKLSAgICBpZiAodGhpcy50eXBlID09PSAidW5kZWZpbmVkIiAmJiBp
bmplY3RlZFNjcmlwdC5faXNIVE1MQWxsQ29sbGVjdGlvbihvYmplY3QpKQotICAgICAgICB0aGlz
LnR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgbGV0IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3Vi
dHlwZShvYmplY3QpOworICAgICAgICBpZiAoc3VidHlwZSkKKyAgICAgICAgICAgIHRoaXMuc3Vi
dHlwZSA9IHN1YnR5cGU7CiAKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaXNQcmltaXRpdmVWYWx1
ZShvYmplY3QpIHx8IG9iamVjdCA9PT0gbnVsbCB8fCBmb3JjZVZhbHVlVHlwZSkgewotICAgICAg
ICAvLyBXZSBkb24ndCBzZW5kIHVuZGVmaW5lZCB2YWx1ZXMgb3ZlciBKU09OLgotICAgICAgICBp
ZiAodGhpcy50eXBlICE9PSAidW5kZWZpbmVkIikKLSAgICAgICAgICAgIHRoaXMudmFsdWUgPSBv
YmplY3Q7CisgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVy
bmFsQ29uc3RydWN0b3JOYW1lKG9iamVjdCk7CisgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBS
ZW1vdGVPYmplY3QuZGVzY3JpYmUob2JqZWN0KTsKIAotICAgICAgICAvLyBOdWxsIG9iamVjdCBp
cyBvYmplY3Qgd2l0aCAnbnVsbCcgc3VidHlwZS4KLSAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVs
bCkKLSAgICAgICAgICAgIHRoaXMuc3VidHlwZSA9ICJudWxsIjsKKyAgICAgICAgaWYgKHN1YnR5
cGUgPT09ICJhcnJheSIpCisgICAgICAgICAgICB0aGlzLnNpemUgPSB0eXBlb2Ygb2JqZWN0Lmxl
bmd0aCA9PT0gIm51bWJlciIgPyBvYmplY3QubGVuZ3RoIDogMDsKKyAgICAgICAgZWxzZSBpZiAo
c3VidHlwZSA9PT0gInNldCIgfHwgc3VidHlwZSA9PT0gIm1hcCIpCisgICAgICAgICAgICB0aGlz
LnNpemUgPSBvYmplY3Quc2l6ZTsKKyAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gIndlYWtt
YXAiKQorICAgICAgICAgICAgdGhpcy5zaXplID0gSW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtNYXBT
aXplKG9iamVjdCk7CisgICAgICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJ3ZWFrc2V0IikKKyAg
ICAgICAgICAgIHRoaXMuc2l6ZSA9IEluamVjdGVkU2NyaXB0SG9zdC53ZWFrU2V0U2l6ZShvYmpl
Y3QpOworICAgICAgICBlbHNlIGlmIChzdWJ0eXBlID09PSAiY2xhc3MiKSB7CisgICAgICAgICAg
ICB0aGlzLmNsYXNzUHJvdG90eXBlID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShvYmplY3QucHJvdG90
eXBlLCBvYmplY3RHcm91cE5hbWUpOworICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBvYmpl
Y3QubmFtZTsKKyAgICAgICAgfQogCi0gICAgICAgIC8vIFByb3ZpZGUgdXNlci1mcmllbmRseSBu
dW1iZXIgdmFsdWVzLgotICAgICAgICBpZiAodGhpcy50eXBlID09PSAibnVtYmVyIikKLSAgICAg
ICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0b1N0cmluZ0Rlc2NyaXB0aW9uKG9iamVjdCk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGdlbmVyYXRlUHJldmlldyAmJiB0aGlzLnR5cGUg
PT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICBpZiAoc3VidHlwZSA9PT0gInByb3h5Iikgewor
ICAgICAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRoaXMuX2dlbmVyYXRlUHJldmlldyhJbmpl
Y3RlZFNjcmlwdEhvc3QucHJveHlUYXJnZXRWYWx1ZShvYmplY3QpKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLnByZXZpZXcubG9zc2xlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRoaXMuX2dlbmVyYXRlUHJldmlldyhvYmplY3Qs
IHVuZGVmaW5lZCwgY29sdW1uTmFtZXMpOworICAgICAgICB9CiAgICAgfQogCi0gICAgdGhpcy5v
YmplY3RJZCA9IGluamVjdGVkU2NyaXB0Ll9iaW5kKG9iamVjdCwgb2JqZWN0R3JvdXBOYW1lKTsK
LQotICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUob2JqZWN0KTsKLSAg
ICBpZiAoc3VidHlwZSkKLSAgICAgICAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTsKLQotICAgIHRo
aXMuY2xhc3NOYW1lID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1l
KG9iamVjdCk7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGluamVjdGVkU2NyaXB0Ll9kZXNjcmli
ZShvYmplY3QpOwotCi0gICAgaWYgKHN1YnR5cGUgPT09ICJhcnJheSIpCi0gICAgICAgIHRoaXMu
c2l6ZSA9IHR5cGVvZiBvYmplY3QubGVuZ3RoID09PSAibnVtYmVyIiA/IG9iamVjdC5sZW5ndGgg
OiAwOwotICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJzZXQiIHx8IHN1YnR5cGUgPT09ICJtYXAi
KQotICAgICAgICB0aGlzLnNpemUgPSBvYmplY3Quc2l6ZTsKLSAgICBlbHNlIGlmIChzdWJ0eXBl
ID09PSAid2Vha21hcCIpCi0gICAgICAgIHRoaXMuc2l6ZSA9IEluamVjdGVkU2NyaXB0SG9zdC53
ZWFrTWFwU2l6ZShvYmplY3QpOwotICAgIGVsc2UgaWYgKHN1YnR5cGUgPT09ICJ3ZWFrc2V0IikK
LSAgICAgICAgdGhpcy5zaXplID0gSW5qZWN0ZWRTY3JpcHRIb3N0LndlYWtTZXRTaXplKG9iamVj
dCk7Ci0gICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gImNsYXNzIikgewotICAgICAgICB0aGlzLmNs
YXNzUHJvdG90eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmplY3Qob2JqZWN0LnByb3RvdHlw
ZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBvYmplY3QubmFt
ZTsKKyAgICAvLyBTdGF0aWMKKworICAgIHN0YXRpYyBjcmVhdGUob2JqZWN0LCBvYmplY3RHcm91
cE5hbWUsIGZvcmNlVmFsdWVUeXBlLCBnZW5lcmF0ZVByZXZpZXcsIGNvbHVtbk5hbWVzKQorICAg
IHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVtb3RlT2JqZWN0KG9i
amVjdCwgb2JqZWN0R3JvdXBOYW1lLCBmb3JjZVZhbHVlVHlwZSwgZ2VuZXJhdGVQcmV2aWV3LCBj
b2x1bW5OYW1lcyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGxldCBkZXNj
cmlwdGlvbjsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24g
PSBSZW1vdGVPYmplY3QuZGVzY3JpYmUoZSk7CisgICAgICAgICAgICB9IGNhdGNoIChleCkgewor
ICAgICAgICAgICAgICAgIGFsZXJ0KGV4Lm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uID0gIjxmYWlsZWQgdG8gY29udmVydCBleGNlcHRpb24gdG8gc3RyaW5nPiI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IFJlbW90ZU9iamVjdChkZXNjcmlwdGlv
bik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZ2VuZXJhdGVQcmV2aWV3ICYmIHRoaXMu
dHlwZSA9PT0gIm9iamVjdCIpIHsKLSAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJwcm94eSIpIHsK
LSAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHRoaXMuX2dlbmVyYXRlUHJldmlldyhJbmplY3Rl
ZFNjcmlwdEhvc3QucHJveHlUYXJnZXRWYWx1ZShvYmplY3QpKTsKLSAgICAgICAgICAgIHRoaXMu
cHJldmlldy5sb3NzbGVzcyA9IGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRo
aXMucHJldmlldyA9IHRoaXMuX2dlbmVyYXRlUHJldmlldyhvYmplY3QsIHVuZGVmaW5lZCwgY29s
dW1uTmFtZXMpOworICAgIHN0YXRpYyBjcmVhdGVPYmplY3RQcmV2aWV3Rm9yVmFsdWUodmFsdWUs
IGdlbmVyYXRlUHJldmlldywgY29sdW1uTmFtZXMpCisgICAgeworICAgICAgICBsZXQgcmVtb3Rl
T2JqZWN0ID0gbmV3IFJlbW90ZU9iamVjdCh2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSwgZ2VuZXJh
dGVQcmV2aWV3LCBjb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChyZW1vdGVPYmplY3Qub2JqZWN0
SWQpCisgICAgICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0KHJlbW90ZU9iamVj
dC5vYmplY3RJZCk7CisgICAgICAgIGlmIChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUgJiYg
cmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90eXBlLm9iamVjdElkKQorICAgICAgICAgICAgaW5qZWN0
ZWRTY3JpcHQucmVsZWFzZU9iamVjdChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUub2JqZWN0
SWQpOworICAgICAgICByZXR1cm4gcmVtb3RlT2JqZWN0LnByZXZpZXcgfHwgcmVtb3RlT2JqZWN0
Ll9lbXB0eVByZXZpZXcoKTsKICAgICB9Ci19OwogCi1JbmplY3RlZFNjcmlwdC5SZW1vdGVPYmpl
Y3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlID0gZnVuY3Rpb24odmFsdWUsIGdlbmVyYXRl
UHJldmlldywgY29sdW1uTmFtZXMpCi17Ci0gICAgdmFyIHJlbW90ZU9iamVjdCA9IG5ldyBJbmpl
Y3RlZFNjcmlwdC5SZW1vdGVPYmplY3QodmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UsIGdlbmVyYXRl
UHJldmlldywgY29sdW1uTmFtZXMpOwotICAgIGlmIChyZW1vdGVPYmplY3Qub2JqZWN0SWQpCi0g
ICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VPYmplY3QocmVtb3RlT2JqZWN0Lm9iamVjdElk
KTsKLSAgICBpZiAocmVtb3RlT2JqZWN0LmNsYXNzUHJvdG90eXBlICYmIHJlbW90ZU9iamVjdC5j
bGFzc1Byb3RvdHlwZS5vYmplY3RJZCkKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9i
amVjdChyZW1vdGVPYmplY3QuY2xhc3NQcm90b3R5cGUub2JqZWN0SWQpOwotICAgIHJldHVybiBy
ZW1vdGVPYmplY3QucHJldmlldyB8fCByZW1vdGVPYmplY3QuX2VtcHR5UHJldmlldygpOwotfTsK
LQotSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKLSAgICBfaW5pdGlh
bFByZXZpZXc6IGZ1bmN0aW9uKCkKKyAgICBzdGF0aWMgc3VidHlwZSh2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisK
KyAgICAgICAgaWYgKGlzUHJpbWl0aXZlVmFsdWUodmFsdWUpIHx8IGlzU3ltYm9sKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIGlmIChJbmplY3RlZFNjcmlwdEhv
c3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gImFycmF5
IjsKKworICAgICAgICBsZXQgcHJlY2lzZVR5cGUgPSBJbmplY3RlZFNjcmlwdEhvc3Quc3VidHlw
ZSh2YWx1ZSk7CisgICAgICAgIGlmIChwcmVjaXNlVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBw
cmVjaXNlVHlwZTsKKworICAgICAgICAvLyBGaXJlQnVnJ3MgYXJyYXkgZGV0ZWN0aW9uLgorICAg
ICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT09ICJmdW5j
dGlvbiIgJiYgaXNGaW5pdGUodmFsdWUubGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ImFycmF5IjsKKyAgICAgICAgfSBjYXRjaCAoZSkge30KKworICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisKKyAgICBzdGF0aWMgZGVzY3JpYmUodmFsdWUpCisgICAgeworICAgICAgICBpZiAo
aXNQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAg
ICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHZh
bHVlKTsKKworICAgICAgICBsZXQgc3VidHlwZSA9IFJlbW90ZU9iamVjdC5zdWJ0eXBlKHZhbHVl
KTsKKworICAgICAgICBpZiAoc3VidHlwZSA9PT0gInJlZ2V4cCIpCisgICAgICAgICAgICByZXR1
cm4gdG9TdHJpbmcodmFsdWUpOworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAiZGF0ZSIpCisg
ICAgICAgICAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpOworCisgICAgICAgIGlmIChzdWJ0eXBl
ID09PSAiZXJyb3IiKQorICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKTsKKworICAg
ICAgICBpZiAoc3VidHlwZSA9PT0gInByb3h5IikKKyAgICAgICAgICAgIHJldHVybiAiUHJveHki
OworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAibm9kZSIpCisgICAgICAgICAgICByZXR1cm4g
UmVtb3RlT2JqZWN0Lm5vZGVQcmV2aWV3KHZhbHVlKTsKKworICAgICAgICBsZXQgY2xhc3NOYW1l
ID0gSW5qZWN0ZWRTY3JpcHRIb3N0LmludGVybmFsQ29uc3RydWN0b3JOYW1lKHZhbHVlKTsKKyAg
ICAgICAgaWYgKHN1YnR5cGUgPT09ICJhcnJheSIpCisgICAgICAgICAgICByZXR1cm4gY2xhc3NO
YW1lOworCisgICAgICAgIGlmIChzdWJ0eXBlID09PSAiaXRlcmF0b3IiICYmIFN5bWJvbC50b1N0
cmluZ1RhZyBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZVtTeW1ib2wudG9TdHJp
bmdUYWddOworCisgICAgICAgIC8vIE5vZGVMaXN0IGluIEpTQyBpcyBhIGZ1bmN0aW9uLCBjaGVj
ayBmb3IgYXJyYXkgcHJpb3IgdG8gdGhpcy4KKyAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0g
ImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOworCisgICAg
ICAgIC8vIElmIE9iamVjdCwgdHJ5IGZvciBhIGJldHRlciBuYW1lIGZyb20gdGhlIGNvbnN0cnVj
dG9yLgorICAgICAgICBpZiAoY2xhc3NOYW1lID09PSAiT2JqZWN0IikgeworICAgICAgICAgICAg
bGV0IGNvbnN0cnVjdG9yTmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yICYmIHZhbHVlLmNvbnN0cnVj
dG9yLm5hbWU7CisgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JOYW1lKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb25zdHJ1Y3Rvck5hbWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
Y2xhc3NOYW1lOworICAgIH0KKworICAgIHN0YXRpYyBub2RlUHJldmlldyhub2RlKQorICAgIHsK
KyAgICAgICAgbGV0IGlzWE1MRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgISFub2Rl
Lm93bmVyRG9jdW1lbnQueG1sVmVyc2lvbjsKKyAgICAgICAgbGV0IG5vZGVOYW1lID0gaXNYTUxE
b2N1bWVudCA/IG5vZGUubm9kZU5hbWUgOiBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisK
KyAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7CisgICAgICAgIGNhc2UgMTogLy8gTm9k
ZS5FTEVNRU5UX05PREUKKyAgICAgICAgICAgIGlmIChub2RlLmlkKQorICAgICAgICAgICAgICAg
IHJldHVybiAiPCIgKyBub2RlTmFtZSArICIgaWQ9XCIiICsgbm9kZS5pZCArICJcIj4iOworICAg
ICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gIjwiICsgbm9kZU5hbWUgKyAiIGNsYXNzPVwiIiArIG5vZGUuY2xhc3NMaXN0LnRvU3RyaW5n
KCkucmVwbGFjZSgvXHMrLywgIiAiKSArICJcIj4iOworICAgICAgICAgICAgaWYgKG5vZGVOYW1l
ID09PSAiaW5wdXQiICYmIG5vZGUudHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIjwiICsg
bm9kZU5hbWUgKyAiIHR5cGU9XCIiICsgbm9kZS50eXBlICsgIlwiPiI7CisgICAgICAgICAgICBy
ZXR1cm4gIjwiICsgbm9kZU5hbWUgKyAiPiI7CisKKyAgICAgICAgY2FzZSAzOiAvLyBOb2RlLlRF
WFRfTk9ERQorICAgICAgICAgICAgcmV0dXJuIG5vZGVOYW1lICsgIiBcIiIgKyBub2RlLm5vZGVW
YWx1ZSArICJcIiI7CisKKyAgICAgICAgY2FzZSA4OiAvLyBOb2RlLkNPTU1FTlRfTk9ERQorICAg
ICAgICAgICAgcmV0dXJuICI8IS0tIiArIG5vZGUubm9kZVZhbHVlICsgIi0tPiI7CisKKyAgICAg
ICAgY2FzZSAxMDogLy8gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUKKyAgICAgICAgICAgIHJldHVy
biAiPCFET0NUWVBFICIgKyBub2RlTmFtZSArICI+IjsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIG5vZGVOYW1lOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUHJp
dmF0ZQorCisgICAgX2luaXRpYWxQcmV2aWV3KCkKICAgICB7Ci0gICAgICAgIHZhciBwcmV2aWV3
ID0geworICAgICAgICBsZXQgcHJldmlldyA9IHsKICAgICAgICAgICAgIHR5cGU6IHRoaXMudHlw
ZSwKICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHRvU3RyaW5n
KHRoaXMudmFsdWUpLAogICAgICAgICAgICAgbG9zc2xlc3M6IHRydWUsCkBAIC05OTcsMTEgKzEw
MDIsMTEgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHByZXZpZXcuc2l6ZSA9IHRoaXMuc2l6ZTsKIAogICAgICAgICByZXR1cm4gcHJldmll
dzsKLSAgICB9LAorICAgIH0KIAotICAgIF9lbXB0eVByZXZpZXc6IGZ1bmN0aW9uKCkKKyAgICBf
ZW1wdHlQcmV2aWV3KCkKICAgICB7Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGhpcy5faW5pdGlh
bFByZXZpZXcoKTsKKyAgICAgICAgbGV0IHByZXZpZXcgPSB0aGlzLl9pbml0aWFsUHJldmlldygp
OwogCiAgICAgICAgIGlmICh0aGlzLnN1YnR5cGUgPT09ICJtYXAiIHx8IHRoaXMuc3VidHlwZSA9
PT0gInNldCIgfHwgdGhpcy5zdWJ0eXBlID09PSAid2Vha21hcCIgfHwgdGhpcy5zdWJ0eXBlID09
PSAid2Vha3NldCIgfHwgdGhpcy5zdWJ0eXBlID09PSAiaXRlcmF0b3IiKSB7CiAgICAgICAgICAg
ICBpZiAodGhpcy5zaXplKSB7CkBAIC0xMDEyLDE1ICsxMDE3LDE1IEBAIEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
cHJldmlldzsKLSAgICB9LAorICAgIH0KIAotICAgIF9nZW5lcmF0ZVByZXZpZXc6IGZ1bmN0aW9u
KG9iamVjdCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykKKyAgICBfZ2VuZXJhdGVQ
cmV2aWV3KG9iamVjdCwgZmlyc3RMZXZlbEtleXMsIHNlY29uZExldmVsS2V5cykKICAgICB7Ci0g
ICAgICAgIHZhciBwcmV2aWV3ID0gdGhpcy5faW5pdGlhbFByZXZpZXcoKTsKLSAgICAgICAgdmFy
IGlzVGFibGVSb3dzUmVxdWVzdCA9IHNlY29uZExldmVsS2V5cyA9PT0gbnVsbCB8fCBzZWNvbmRM
ZXZlbEtleXM7Ci0gICAgICAgIHZhciBmaXJzdExldmVsS2V5c0NvdW50ID0gZmlyc3RMZXZlbEtl
eXMgPyBmaXJzdExldmVsS2V5cy5sZW5ndGggOiAwOworICAgICAgICBsZXQgcHJldmlldyA9IHRo
aXMuX2luaXRpYWxQcmV2aWV3KCk7CisgICAgICAgIGxldCBpc1RhYmxlUm93c1JlcXVlc3QgPSBz
ZWNvbmRMZXZlbEtleXMgPT09IG51bGwgfHwgc2Vjb25kTGV2ZWxLZXlzOworICAgICAgICBsZXQg
Zmlyc3RMZXZlbEtleXNDb3VudCA9IGZpcnN0TGV2ZWxLZXlzID8gZmlyc3RMZXZlbEtleXMubGVu
Z3RoIDogMDsKIAotICAgICAgICB2YXIgcHJvcGVydGllc1RocmVzaG9sZCA9IHsKKyAgICAgICAg
bGV0IHByb3BlcnRpZXNUaHJlc2hvbGQgPSB7CiAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBpc1Rh
YmxlUm93c1JlcXVlc3QgPyAxMDAwIDogTWF0aC5tYXgoNSwgZmlyc3RMZXZlbEtleXNDb3VudCks
CiAgICAgICAgICAgICBpbmRleGVzOiBpc1RhYmxlUm93c1JlcXVlc3QgPyAxMDAwIDogTWF0aC5t
YXgoMTAsIGZpcnN0TGV2ZWxLZXlzQ291bnQpCiAgICAgICAgIH07CkBAIC0xMDMzLDcgKzEwMzgs
NyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcHJldmlldy5wcm9wZXJ0aWVzID0gW107CiAKICAgICAgICAgICAgIC8vIEludGVybmFsIFBy
b3BlcnRpZXMuCi0gICAgICAgICAgICB2YXIgaW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3JzID0g
aW5qZWN0ZWRTY3JpcHQuX2ludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIHRydWUp
OworICAgICAgICAgICAgbGV0IGludGVybmFsUHJvcGVydHlEZXNjcmlwdG9ycyA9IGluamVjdGVk
U2NyaXB0Ll9pbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0LCB0cnVlKTsKICAgICAg
ICAgICAgIGlmIChpbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcnMpIHsKICAgICAgICAgICAgICAg
ICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXdzKG9iamVjdCwgcHJldmlldywgaW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3JzLCB0cnVlLCBwcm9wZXJ0aWVzVGhyZXNob2xkLCBmaXJzdExldmVs
S2V5cywgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1Ro
cmVzaG9sZC5pbmRleGVzIDwgMCB8fCBwcm9wZXJ0aWVzVGhyZXNob2xkLnByb3BlcnRpZXMgPCAw
KQpAQCAtMTA0NCw4ICsxMDQ5LDggQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlldzsKIAogICAgICAgICAgICAg
Ly8gUHJvcGVydGllcy4KLSAgICAgICAgICAgIHZhciBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMgPSB0
cnVlOwotICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3JzID0gaW5qZWN0ZWRTY3JpcHQuX3Byb3Bl
cnR5RGVzY3JpcHRvcnMob2JqZWN0LCBJbmplY3RlZFNjcmlwdC5Db2xsZWN0aW9uTW9kZS5BbGxQ
cm9wZXJ0aWVzLCBuYXRpdmVHZXR0ZXJzQXNWYWx1ZXMpOworICAgICAgICAgICAgbGV0IG5hdGl2
ZUdldHRlcnNBc1ZhbHVlcyA9IHRydWU7CisgICAgICAgICAgICBsZXQgZGVzY3JpcHRvcnMgPSBp
bmplY3RlZFNjcmlwdC5fcHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QsIEluamVjdGVkU2NyaXB0
LkNvbGxlY3Rpb25Nb2RlLkFsbFByb3BlcnRpZXMsIG5hdGl2ZUdldHRlcnNBc1ZhbHVlcyk7CiAg
ICAgICAgICAgICB0aGlzLl9hcHBlbmRQcm9wZXJ0eVByZXZpZXdzKG9iamVjdCwgcHJldmlldywg
ZGVzY3JpcHRvcnMsIGZhbHNlLCBwcm9wZXJ0aWVzVGhyZXNob2xkLCBmaXJzdExldmVsS2V5cywg
c2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVGhyZXNob2xkLmlu
ZGV4ZXMgPCAwIHx8IHByb3BlcnRpZXNUaHJlc2hvbGQucHJvcGVydGllcyA8IDApCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHByZXZpZXc7CkBAIC0xMDU0LDkgKzEwNTksOSBAQCBJbmplY3RlZFNj
cmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIHByZXZpZXc7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfYXBwZW5kUHJvcGVydHlQcmV2aWV3
czogZnVuY3Rpb24ob2JqZWN0LCBwcmV2aWV3LCBkZXNjcmlwdG9ycywgaW50ZXJuYWwsIHByb3Bl
cnRpZXNUaHJlc2hvbGQsIGZpcnN0TGV2ZWxLZXlzLCBzZWNvbmRMZXZlbEtleXMpCisgICAgX2Fw
cGVuZFByb3BlcnR5UHJldmlld3Mob2JqZWN0LCBwcmV2aWV3LCBkZXNjcmlwdG9ycywgaW50ZXJu
YWwsIHByb3BlcnRpZXNUaHJlc2hvbGQsIGZpcnN0TGV2ZWxLZXlzLCBzZWNvbmRMZXZlbEtleXMp
CiAgICAgewogICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc2NyaXB0b3JzLmxlbmd0aDsg
KytpKSB7CiAgICAgICAgICAgICBsZXQgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzW2ldOwpAQCAt
MTA3Miw3ICsxMDc3LDcgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRG8gbm90IHNob3cgIl9fcHJvdG9f
XyIgaW4gcHJldmlldy4KLSAgICAgICAgICAgIHZhciBuYW1lID0gZGVzY3JpcHRvci5uYW1lOwor
ICAgICAgICAgICAgbGV0IG5hbWUgPSBkZXNjcmlwdG9yLm5hbWU7CiAgICAgICAgICAgICBpZiAo
bmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICAgICAgICAgICAvLyBOb24gYmFzaWMgX19w
cm90b19fIG9iamVjdHMgbWF5IGhhdmUgaW50ZXJlc3RpbmcsIG5vbi1lbnVtZXJhYmxlLCBtZXRo
b2RzIHRvIHNob3cuCiAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUgJiYgZGVz
Y3JpcHRvci52YWx1ZS5jb25zdHJ1Y3RvcgpAQCAtMTEwNiwyNCArMTExMSwyNCBAQCBJbmplY3Rl
ZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBOdWxsIHZhbHVlLgotICAgICAgICAgICAgdmFyIHZhbHVlID0gZGVzY3JpcHRv
ci52YWx1ZTsKKyAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAg
ICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aGlzLl9hcHBl
bmRQcm9wZXJ0eVByZXZpZXcocHJldmlldywgaW50ZXJuYWwsIHtuYW1lLCB0eXBlOiAib2JqZWN0
Iiwgc3VidHlwZTogIm51bGwiLCB2YWx1ZTogIm51bGwifSwgcHJvcGVydGllc1RocmVzaG9sZCk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIElnbm9yZSBub24tZW51bWVyYWJsZSBmdW5jdGlvbnMuCi0gICAgICAgICAgICB2YXIgdHlw
ZSA9IHR5cGVvZiB2YWx1ZTsKKyAgICAgICAgICAgIGxldCB0eXBlID0gdHlwZW9mIHZhbHVlOwog
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgdHlwZSA9PT0gImZ1bmN0
aW9uIikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgLy8gRml4IHR5
cGUgb2YgZG9jdW1lbnQuYWxsLgotICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJ1bmRlZmluZWQi
ICYmIGluamVjdGVkU2NyaXB0Ll9pc0hUTUxBbGxDb2xsZWN0aW9uKHZhbHVlKSkKKyAgICAgICAg
ICAgIGlmIChJbmplY3RlZFNjcmlwdEhvc3QuaXNIVE1MQWxsQ29sbGVjdGlvbih2YWx1ZSkpCiAg
ICAgICAgICAgICAgICAgdHlwZSA9ICJvYmplY3QiOwogCiAgICAgICAgICAgICAvLyBQcmltaXRp
dmUuCiAgICAgICAgICAgICBjb25zdCBtYXhMZW5ndGggPSAxMDA7Ci0gICAgICAgICAgICBpZiAo
SW5qZWN0ZWRTY3JpcHQucHJpbWl0aXZlVHlwZXNbdHlwZV0pIHsKKyAgICAgICAgICAgIGlmIChp
c1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkgewogICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAi
c3RyaW5nIiAmJiB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSB0aGlzLl9hYmJyZXZpYXRlU3RyaW5nKHZhbHVlLCBtYXhMZW5ndGgsIHRydWUp
OwogICAgICAgICAgICAgICAgICAgICBwcmV2aWV3Lmxvc3NsZXNzID0gZmFsc2U7CkBAIC0xMTM0
LDcgKzExMzksNyBAQCBJbmplY3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewog
CiAgICAgICAgICAgICAvLyBTeW1ib2wuCiAgICAgICAgICAgICBpZiAoaXNTeW1ib2wodmFsdWUp
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHN5bWJvbFN0cmluZyA9IHRvU3RyaW5nKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBsZXQgc3ltYm9sU3RyaW5nID0gdG9TdHJpbmcodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGlmIChzeW1ib2xTdHJpbmcubGVuZ3RoID4gbWF4TGVuZ3RoKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFN0cmluZyA9IHRoaXMuX2FiYnJldmlhdGVTdHJpbmcoc3lt
Ym9sU3RyaW5nLCBtYXhMZW5ndGgsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBwcmV2aWV3
Lmxvc3NsZXNzID0gZmFsc2U7CkBAIC0xMTQ0LDMwICsxMTQ5LDMwIEBAIEluamVjdGVkU2NyaXB0
LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIE9iamVjdC4KLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHtuYW1lLCB0eXBlfTsKLSAg
ICAgICAgICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5cGUodmFsdWUpOwor
ICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0ge25hbWUsIHR5cGV9OworICAgICAgICAgICAgbGV0
IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZSh2YWx1ZSk7CiAgICAgICAgICAgICBpZiAo
c3VidHlwZSkKICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5zdWJ0eXBlID0gc3VidHlwZTsKIAog
ICAgICAgICAgICAgLy8gU2Vjb25kIGxldmVsLgogICAgICAgICAgICAgaWYgKChzZWNvbmRMZXZl
bEtleXMgPT09IG51bGwgfHwgc2Vjb25kTGV2ZWxLZXlzKSB8fCB0aGlzLl9pc1ByZXZpZXdhYmxl
T2JqZWN0KHZhbHVlLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdl
IHdhbnQgc2Vjb25kTGV2ZWxLZXlzIGZpbHRlciB0byBjb250aW51ZSB3ZSB3b3VsZCBuZWVkIHNv
bWUgcmVmYWN0b3JpbmcuCi0gICAgICAgICAgICAgICAgdmFyIHN1YlByZXZpZXcgPSBJbmplY3Rl
ZFNjcmlwdC5SZW1vdGVPYmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKHZhbHVlLCB2
YWx1ZSAhPT0gb2JqZWN0LCBzZWNvbmRMZXZlbEtleXMpOworICAgICAgICAgICAgICAgIGxldCBz
dWJQcmV2aWV3ID0gUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZSh2YWx1
ZSwgdmFsdWUgIT09IG9iamVjdCwgc2Vjb25kTGV2ZWxLZXlzKTsKICAgICAgICAgICAgICAgICBw
cm9wZXJ0eS52YWx1ZVByZXZpZXcgPSBzdWJQcmV2aWV3OwogICAgICAgICAgICAgICAgIGlmICgh
c3ViUHJldmlldy5sb3NzbGVzcykKICAgICAgICAgICAgICAgICAgICAgcHJldmlldy5sb3NzbGVz
cyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmIChzdWJQcmV2aWV3Lm92ZXJmbG93KQogICAg
ICAgICAgICAgICAgICAgICBwcmV2aWV3Lm92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gIiI7CisgICAgICAgICAg
ICAgICAgbGV0IGRlc2NyaXB0aW9uID0gIiI7CiAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09
ICJmdW5jdGlvbiIgfHwgc3VidHlwZSA9PT0gImNsYXNzIikgewotICAgICAgICAgICAgICAgICAg
ICB2YXIgZnVsbERlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgICAgICBsZXQgZnVsbERlc2Ny
aXB0aW9uOwogICAgICAgICAgICAgICAgICAgICBpZiAoc3VidHlwZSA9PT0gImNsYXNzIikKICAg
ICAgICAgICAgICAgICAgICAgICAgIGZ1bGxEZXNjcmlwdGlvbiA9ICJjbGFzcyAiICsgdmFsdWUu
bmFtZTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3VidHlwZSA9PT0gIm5vZGUiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZnVsbERlc2NyaXB0aW9uID0gaW5qZWN0ZWRTY3JpcHQu
X25vZGVQcmV2aWV3KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxEZXNjcmlw
dGlvbiA9IFJlbW90ZU9iamVjdC5ub2RlUHJldmlldyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxEZXNjcmlwdGlvbiA9IGluamVj
dGVkU2NyaXB0Ll9kZXNjcmliZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxs
RGVzY3JpcHRpb24gPSBSZW1vdGVPYmplY3QuZGVzY3JpYmUodmFsdWUpOwogICAgICAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuX2FiYnJldmlhdGVTdHJpbmcoZnVsbERlc2NyaXB0
aW9uLCBtYXhMZW5ndGgsIHN1YnR5cGUgPT09ICJyZWdleHAiKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcHJvcGVydHkudmFsdWUgPSBkZXNjcmlwdGlvbjsKQEAgLTExNzYs
OSArMTE4MSw5IEBAIEluamVjdGVkU2NyaXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFByb3BlcnR5UHJldmlldyhwcmV2aWV3LCBpbnRlcm5h
bCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJlc2hvbGQpOwogICAgICAgICB9Ci0gICAgfSwKKyAg
ICB9CiAKLSAgICBfYXBwZW5kUHJvcGVydHlQcmV2aWV3OiBmdW5jdGlvbihwcmV2aWV3LCBpbnRl
cm5hbCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJlc2hvbGQpCisgICAgX2FwcGVuZFByb3BlcnR5
UHJldmlldyhwcmV2aWV3LCBpbnRlcm5hbCwgcHJvcGVydHksIHByb3BlcnRpZXNUaHJlc2hvbGQp
CiAgICAgewogICAgICAgICBpZiAodG9TdHJpbmcocHJvcGVydHkubmFtZSA+Pj4gMCkgPT09IHBy
b3BlcnR5Lm5hbWUpCiAgICAgICAgICAgICBwcm9wZXJ0aWVzVGhyZXNob2xkLmluZGV4ZXMtLTsK
QEAgLTExOTUsMTIgKzEyMDAsMTIgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHByb3BlcnR5LmludGVybmFsID0gdHJ1ZTsKIAogICAgICAg
ICBwcmV2aWV3LnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgfSwKKyAgICB9CiAKLSAg
ICBfYXBwZW5kRW50cnlQcmV2aWV3czogZnVuY3Rpb24ob2JqZWN0LCBwcmV2aWV3KQorICAgIF9h
cHBlbmRFbnRyeVByZXZpZXdzKG9iamVjdCwgcHJldmlldykKICAgICB7CiAgICAgICAgIC8vIEZl
dGNoIDYsIGJ1dCBvbmx5IHJldHVybiA1LCBzbyB3ZSBjYW4gdGVsbCBpZiB3ZSBvdmVyZmxvd2Vk
LgotICAgICAgICB2YXIgZW50cmllcyA9IGluamVjdGVkU2NyaXB0Ll9lbnRyaWVzKG9iamVjdCwg
dGhpcy5zdWJ0eXBlLCAwLCA2KTsKKyAgICAgICAgbGV0IGVudHJpZXMgPSBpbmplY3RlZFNjcmlw
dC5fZW50cmllcyhvYmplY3QsIHRoaXMuc3VidHlwZSwgMCwgNik7CiAgICAgICAgIGlmICghZW50
cmllcykKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTIxNiwzMiArMTIyMSwzMiBAQCBJbmpl
Y3RlZFNjcmlwdC5SZW1vdGVPYmplY3QucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAg
ICAgcHJldmlldy5lbnRyaWVzID0gZW50cmllcy5tYXAoZnVuY3Rpb24oZW50cnkpIHsKLSAgICAg
ICAgICAgIGVudHJ5LnZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LmNyZWF0ZU9i
amVjdFByZXZpZXdGb3JWYWx1ZShlbnRyeS52YWx1ZSwgZW50cnkudmFsdWUgIT09IG9iamVjdCk7
CisgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IFJlbW90ZU9iamVjdC5jcmVhdGVPYmplY3RQcmV2
aWV3Rm9yVmFsdWUoZW50cnkudmFsdWUsIGVudHJ5LnZhbHVlICE9PSBvYmplY3QpOwogICAgICAg
ICAgICAgdXBkYXRlTWFpblByZXZpZXcoZW50cnkudmFsdWUpOwogICAgICAgICAgICAgaWYgKCJr
ZXkiIGluIGVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgZW50cnkua2V5ID0gSW5qZWN0ZWRTY3Jp
cHQuUmVtb3RlT2JqZWN0LmNyZWF0ZU9iamVjdFByZXZpZXdGb3JWYWx1ZShlbnRyeS5rZXksIGVu
dHJ5LmtleSAhPT0gb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBlbnRyeS5rZXkgPSBSZW1vdGVP
YmplY3QuY3JlYXRlT2JqZWN0UHJldmlld0ZvclZhbHVlKGVudHJ5LmtleSwgZW50cnkua2V5ICE9
PSBvYmplY3QpOwogICAgICAgICAgICAgICAgIHVwZGF0ZU1haW5QcmV2aWV3KGVudHJ5LmtleSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIH0sIHRo
aXMpOwotICAgIH0sCisgICAgICAgIH0pOworICAgIH0KIAotICAgIF9pc1ByZXZpZXdhYmxlT2Jq
ZWN0OiBmdW5jdGlvbih2YWx1ZSwgb2JqZWN0KQorICAgIF9pc1ByZXZpZXdhYmxlT2JqZWN0KHZh
bHVlLCBvYmplY3QpCiAgICAgewogICAgICAgICBsZXQgc2V0ID0gbmV3IFNldDsKICAgICAgICAg
c2V0LmFkZChvYmplY3QpOwogCiAgICAgICAgIHJldHVybiB0aGlzLl9pc1ByZXZpZXdhYmxlT2Jq
ZWN0SW50ZXJuYWwodmFsdWUsIHNldCwgMSk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBfaXNQcmV2
aWV3YWJsZU9iamVjdEludGVybmFsOiBmdW5jdGlvbihvYmplY3QsIGtub3duT2JqZWN0cywgZGVw
dGgpCisgICAgX2lzUHJldmlld2FibGVPYmplY3RJbnRlcm5hbChvYmplY3QsIGtub3duT2JqZWN0
cywgZGVwdGgpCiAgICAgewogICAgICAgICAvLyBEZWVwIG9iamVjdC4KICAgICAgICAgaWYgKGRl
cHRoID4gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBQcmltaXRp
dmUuCi0gICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5pc1ByaW1pdGl2ZVZhbHVlKG9iamVjdCkg
fHwgaXNTeW1ib2wob2JqZWN0KSkKKyAgICAgICAgaWYgKGlzUHJpbWl0aXZlVmFsdWUob2JqZWN0
KSB8fCBpc1N5bWJvbChvYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAg
ICAgLy8gTnVsbC4KQEAgLTEyNTYsMTIgKzEyNjEsMTIgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3Rl
T2JqZWN0LnByb3RvdHlwZSA9IHsKICAgICAgICAga25vd25PYmplY3RzLmFkZChvYmplY3QpOwog
CiAgICAgICAgIC8vIEFycmF5cyBhcmUgc2ltcGxlIGlmIHRoZXkgaGF2ZSA1IG9yIGxlc3Mgc2lt
cGxlIG9iamVjdHMuCi0gICAgICAgIHZhciBzdWJ0eXBlID0gaW5qZWN0ZWRTY3JpcHQuX3N1YnR5
cGUob2JqZWN0KTsKKyAgICAgICAgbGV0IHN1YnR5cGUgPSBSZW1vdGVPYmplY3Quc3VidHlwZShv
YmplY3QpOwogICAgICAgICBpZiAoc3VidHlwZSA9PT0gImFycmF5IikgewotICAgICAgICAgICAg
dmFyIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7CisgICAgICAgICAgICBsZXQgbGVuZ3RoID0gb2Jq
ZWN0Lmxlbmd0aDsKICAgICAgICAgICAgIGlmIChsZW5ndGggPiA1KQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuX2lzUHJldmlld2FibGVPYmplY3RJbnRlcm5hbChvYmpl
Y3RbaV0sIGtub3duT2JqZWN0cywgZGVwdGgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0xMjgzLDE2ICsxMjg4LDE2IEBAIEluamVjdGVkU2Ny
aXB0LlJlbW90ZU9iamVjdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9LAorICAgIH0KIAotICAgIF9hYmJyZXZpYXRlU3RyaW5nOiBmdW5jdGlv
bihzdHJpbmcsIG1heExlbmd0aCwgbWlkZGxlKQorICAgIF9hYmJyZXZpYXRlU3RyaW5nKHN0cmlu
ZywgbWF4TGVuZ3RoLCBtaWRkbGUpCiAgICAgewogICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA8
PSBtYXhMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gc3RyaW5nOwogCiAgICAgICAgIGlmICht
aWRkbGUpIHsKLSAgICAgICAgICAgIHZhciBsZWZ0SGFsZiA9IG1heExlbmd0aCA+PiAxOwotICAg
ICAgICAgICAgdmFyIHJpZ2h0SGFsZiA9IG1heExlbmd0aCAtIGxlZnRIYWxmIC0gMTsKKyAgICAg
ICAgICAgIGxldCBsZWZ0SGFsZiA9IG1heExlbmd0aCA+PiAxOworICAgICAgICAgICAgbGV0IHJp
Z2h0SGFsZiA9IG1heExlbmd0aCAtIGxlZnRIYWxmIC0gMTsKICAgICAgICAgICAgIHJldHVybiBz
dHJpbmcuc3Vic3RyKDAsIGxlZnRIYWxmKSArICJcdTIwMjYiICsgc3RyaW5nLnN1YnN0cihzdHJp
bmcubGVuZ3RoIC0gcmlnaHRIYWxmLCByaWdodEhhbGYpOwogICAgICAgICB9CiAKQEAgLTEzMDAs
MjQgKzEzMDUsMjYgQEAgSW5qZWN0ZWRTY3JpcHQuUmVtb3RlT2JqZWN0LnByb3RvdHlwZSA9IHsK
ICAgICB9CiB9CiAKKy8vIC0tLS0tLS0KKwogSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkg
PSBmdW5jdGlvbihvcmRpbmFsLCBjYWxsRnJhbWUpCiB7Ci0gICAgdGhpcy5jYWxsRnJhbWVJZCA9
ICJ7XCJvcmRpbmFsXCI6IiArIG9yZGluYWwgKyAiLFwiaW5qZWN0ZWRTY3JpcHRJZFwiOiIgKyBp
bmplY3RlZFNjcmlwdElkICsgIn0iOworICAgIHRoaXMuY2FsbEZyYW1lSWQgPSBgeyJvcmRpbmFs
Ijoke29yZGluYWx9LCJpbmplY3RlZFNjcmlwdElkIjoke2luamVjdGVkU2NyaXB0SWR9fWA7CiAg
ICAgdGhpcy5mdW5jdGlvbk5hbWUgPSBjYWxsRnJhbWUuZnVuY3Rpb25OYW1lOwogICAgIHRoaXMu
bG9jYXRpb24gPSB7c2NyaXB0SWQ6IFN0cmluZyhjYWxsRnJhbWUuc291cmNlSUQpLCBsaW5lTnVt
YmVyOiBjYWxsRnJhbWUubGluZSwgY29sdW1uTnVtYmVyOiBjYWxsRnJhbWUuY29sdW1ufTsKICAg
ICB0aGlzLnNjb3BlQ2hhaW4gPSB0aGlzLl93cmFwU2NvcGVDaGFpbihjYWxsRnJhbWUpOwotICAg
IHRoaXMudGhpcyA9IGluamVjdGVkU2NyaXB0Ll93cmFwT2JqZWN0KGNhbGxGcmFtZS50aGlzT2Jq
ZWN0LCAiYmFja3RyYWNlIik7CisgICAgdGhpcy50aGlzID0gUmVtb3RlT2JqZWN0LmNyZWF0ZShj
YWxsRnJhbWUudGhpc09iamVjdCwgImJhY2t0cmFjZSIpOwogICAgIHRoaXMuaXNUYWlsRGVsZXRl
ZCA9IGNhbGxGcmFtZS5pc1RhaWxEZWxldGVkOwogfQogCiBJbmplY3RlZFNjcmlwdC5DYWxsRnJh
bWVQcm94eS5wcm90b3R5cGUgPSB7Ci0gICAgX3dyYXBTY29wZUNoYWluOiBmdW5jdGlvbihjYWxs
RnJhbWUpCisgICAgX3dyYXBTY29wZUNoYWluKGNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIHZh
ciBzY29wZUNoYWluID0gY2FsbEZyYW1lLnNjb3BlQ2hhaW47Ci0gICAgICAgIHZhciBzY29wZURl
c2NyaXB0aW9ucyA9IGNhbGxGcmFtZS5zY29wZURlc2NyaXB0aW9ucygpOworICAgICAgICBsZXQg
c2NvcGVDaGFpbiA9IGNhbGxGcmFtZS5zY29wZUNoYWluOworICAgICAgICBsZXQgc2NvcGVEZXNj
cmlwdGlvbnMgPSBjYWxsRnJhbWUuc2NvcGVEZXNjcmlwdGlvbnMoKTsKIAotICAgICAgICB2YXIg
c2NvcGVDaGFpblByb3h5ID0gW107Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NvcGVD
aGFpbi5sZW5ndGg7IGkrKykKKyAgICAgICAgbGV0IHNjb3BlQ2hhaW5Qcm94eSA9IFtdOworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjb3BlQ2hhaW4ubGVuZ3RoOyBpKyspCiAgICAgICAg
ICAgICBzY29wZUNoYWluUHJveHlbaV0gPSBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5f
Y3JlYXRlU2NvcGVKc29uKHNjb3BlQ2hhaW5baV0sIHNjb3BlRGVzY3JpcHRpb25zW2ldLCAiYmFj
a3RyYWNlIik7CiAgICAgICAgIHJldHVybiBzY29wZUNoYWluUHJveHk7CiAgICAgfQpAQCAtMTMz
Niw3ICsxMzQzLDcgQEAgSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkuX3Njb3BlVHlwZU5h
bWVzID0gewogSW5qZWN0ZWRTY3JpcHQuQ2FsbEZyYW1lUHJveHkuX2NyZWF0ZVNjb3BlSnNvbiA9
IGZ1bmN0aW9uKG9iamVjdCwge25hbWUsIHR5cGUsIGxvY2F0aW9ufSwgZ3JvdXBJZCkKIHsKICAg
ICBsZXQgc2NvcGUgPSB7Ci0gICAgICAgIG9iamVjdDogaW5qZWN0ZWRTY3JpcHQuX3dyYXBPYmpl
Y3Qob2JqZWN0LCBncm91cElkKSwKKyAgICAgICAgb2JqZWN0OiBSZW1vdGVPYmplY3QuY3JlYXRl
KG9iamVjdCwgZ3JvdXBJZCksCiAgICAgICAgIHR5cGU6IEluamVjdGVkU2NyaXB0LkNhbGxGcmFt
ZVByb3h5Ll9zY29wZVR5cGVOYW1lc1t0eXBlXSwKICAgICB9OwogCkBAIC0xMzUyLDYgKzEzNTks
NyBAQCBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eS5fY3JlYXRlU2NvcGVKc29uID0gZnVu
Y3Rpb24ob2JqZWN0LCB7bmFtZSwgdHlwZSwgbAogICAgIHJldHVybiBzY29wZTsKIH0KIAorLy8g
LS0tLS0tLQogCiBmdW5jdGlvbiBiaW5kKGZ1bmMsIHRoaXNPYmplY3QsIC4uLm91dGVyQXJncykK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCBlMWVkYmRjNzAwZi4uOWFiNDM5ODg4MTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAxNy0wNi0yNyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1vZGVybml6ZSBJbmplY3RlZFNjcmlw
dFNvdXJjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTczODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5k
TGluZUFQSU1vZHVsZVNvdXJjZS5qczoKKyAgICAgICAgKENvbW1hbmRMaW5lQVBJSW1wbC5wcm90
b3R5cGUuY29weSk6CisgICAgICAgIChDb21tYW5kTGluZUFQSUltcGwucHJvdG90eXBlLl9pbnNw
ZWN0KToKKyAgICAgICAgVXNlIFJlbW90ZU9iamVjdCwgYSBuZXcgcGFyYW1ldGVyLgorCiAyMDE3
LTA2LTI3ICBKZXJlbXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRp
YVBsYXllclByaXZhdGUgbV9wcml2YXRlIG1heSBub3QgeWV0IGJlIGNyZWF0ZWQgd2hlbiBzZXRQ
cml2YXRlQnJvd3NpbmdNb2RlIGlzIGNhbGxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcwppbmRleCA5M2FjOGU5NzAx
MC4uMjRjNzcwYzA2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElNb2R1bGVTb3VyY2UuanMKQEAgLTI4LDE0ICsyOCw3IEBACiAKIC8vIyBz
b3VyY2VVUkw9X19JbmplY3RlZFNjcmlwdF9Db21tYW5kTGluZUFQSU1vZHVsZVNvdXJjZS5qcwog
Ci0vKioKLSAqIEBwYXJhbSB7SW5qZWN0ZWRTY3JpcHRIb3N0fSBJbmplY3RlZFNjcmlwdEhvc3QK
LSAqIEBwYXJhbSB7V2luZG93fSBpbnNwZWN0ZWRXaW5kb3cKLSAqIEBwYXJhbSB7bnVtYmVyfSBp
bmplY3RlZFNjcmlwdElkCi0gKiBAcGFyYW0ge0luamVjdGVkU2NyaXB0fSBpbmplY3RlZFNjcmlw
dAotICogQHBhcmFtIHtDb21tYW5kTGluZUFQSUhvc3R9IENvbW1hbmRMaW5lQVBJSG9zdAotICov
Ci0oZnVuY3Rpb24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3Rl
ZFNjcmlwdElkLCBpbmplY3RlZFNjcmlwdCwgQ29tbWFuZExpbmVBUElIb3N0KSB7CisoZnVuY3Rp
b24gKEluamVjdGVkU2NyaXB0SG9zdCwgaW5zcGVjdGVkV2luZG93LCBpbmplY3RlZFNjcmlwdElk
LCBpbmplY3RlZFNjcmlwdCwgUmVtb3RlT2JqZWN0LCBDb21tYW5kTGluZUFQSUhvc3QpIHsKIAog
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNTIyOTQ+IFdlYiBJbnNwZWN0b3I6IFBh
cnNlIEluamVjdGVkU2NyaXB0U291cmNlIGFzIGEgYnVpbHQtaW4gdG8gZ2V0IGd1YXJhbnRlZWQg
bm9uLXVzZXItb3ZlcnJpZGVuIGJ1aWx0LWlucwogCkBAIC0yMzEsNyArMjI0LDcgQEAgQ29tbWFu
ZExpbmVBUElJbXBsLnByb3RvdHlwZSA9IHsKICAgICBjb3B5OiBmdW5jdGlvbihvYmplY3QpCiAg
ICAgewogICAgICAgICB2YXIgc3RyaW5nOwotICAgICAgICB2YXIgc3VidHlwZSA9IGluamVjdGVk
U2NyaXB0Ll9zdWJ0eXBlKG9iamVjdCk7CisgICAgICAgIHZhciBzdWJ0eXBlID0gUmVtb3RlT2Jq
ZWN0LnN1YnR5cGUob2JqZWN0KTsKICAgICAgICAgaWYgKHN1YnR5cGUgPT09ICJub2RlIikKICAg
ICAgICAgICAgIHN0cmluZyA9IG9iamVjdC5vdXRlckhUTUw7CiAgICAgICAgIGVsc2UgaWYgKHN1
YnR5cGUgPT09ICJyZWdleHAiKQpAQCAtMzE1LDEwICszMDgsMTAgQEAgQ29tbWFuZExpbmVBUElJ
bXBsLnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIG9iamVjdElkID0gaW5qZWN0ZWRTY3Jp
cHQuX3dyYXBPYmplY3Qob2JqZWN0LCAiIik7CisgICAgICAgIHZhciBvYmplY3RJZCA9IFJlbW90
ZU9iamVjdC5jcmVhdGUob2JqZWN0LCAiIik7CiAgICAgICAgIHZhciBoaW50cyA9IHt9OwogCi0g
ICAgICAgIHN3aXRjaCAoaW5qZWN0ZWRTY3JpcHQuX2Rlc2NyaWJlKG9iamVjdCkpIHsKKyAgICAg
ICAgc3dpdGNoIChSZW1vdGVPYmplY3QuZGVzY3JpYmUob2JqZWN0KSkgewogICAgICAgICBjYXNl
ICJEYXRhYmFzZSI6CiAgICAgICAgICAgICB2YXIgZGF0YWJhc2VJZCA9IENvbW1hbmRMaW5lQVBJ
SG9zdC5kYXRhYmFzZUlkKG9iamVjdCkKICAgICAgICAgICAgIGlmIChkYXRhYmFzZUlkKQo=
</data>
<flag name="review"
          id="335111"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>