<?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>59596</bug_id>
          
          <creation_ts>2011-04-27 04:30:10 -0700</creation_ts>
          <short_desc>Web Inspector: Move Resources Panel search to backend</short_desc>
          <delta_ts>2011-05-16 05:57: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 (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vsevolod Vlasov">vsevik</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>393485</commentid>
    <comment_count>0</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-27 04:30:10 -0700</bug_when>
    <thetext>Move Resources Panel search to backend. 
We should not need to request all content to do search.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393490</commentid>
    <comment_count>1</comment_count>
      <attachid>91267</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-27 04:36:55 -0700</bug_when>
    <thetext>Created attachment 91267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393513</commentid>
    <comment_count>2</comment_count>
      <attachid>91267</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-04-27 05:34:39 -0700</bug_when>
    <thetext>Comment on attachment 91267
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:101
&gt; +                &quot;id&quot;: &quot;ResourceSearchResult&quot;,

&quot;SearchResult&quot;

&gt; Source/WebCore/inspector/Inspector.json:108
&gt; +                            &quot;properties&quot;: [

I&apos;d suggest making &quot;SearchResult&quot; type for this item and return array of these in the protocol method.

&gt; Source/WebCore/inspector/Inspector.json:183
&gt; +                    { &quot;name&quot;: &quot;query&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;String to search for.&quot;  },

query -&gt; &quot;text&quot; or &quot;regex&quot;

&gt; Source/WebCore/inspector/Inspector.json:184
&gt; +                    { &quot;name&quot;: &quot;ignoreCase&quot;, &quot;type&quot;: &quot;boolean&quot;, &quot;description&quot;: &quot;Specifies whether case should be ignored or not.&quot;  }

&quot;optional&quot;: true

&gt; Source/WebCore/inspector/Inspector.json:187
&gt; +                    { &quot;name&quot;: &quot;searchResult&quot;, &quot;$ref&quot;: &quot;ResourceSearchResult&quot;, &quot;description&quot;: &quot;Resource content search result.&quot; }

name: &quot;result&quot;, &quot;type&quot;:&quot;array&quot;, &quot;items&quot;: { &quot;$ref&quot;:&quot;SearchResult&quot; }

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:478
&gt; +int InspectorPageAgent::countRegularExpressionMatches(const RegularExpression&amp; regex, const String&amp; content)

You could define static functions in WebCore namespace for helper routines.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:483
&gt; +    while ((position = regex.match(content, start)) != -1) {

Sounds like you could provide offsets easily too.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:501
&gt; +PassRefPtr&lt;InspectorObject&gt; InspectorPageAgent::buildObjectForSearchMatch(Frame* frame, const String&amp; url, int matches)

ditto

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:513
&gt; +    const CachedResourceLoader::DocumentResourceMap&amp; allResources = frame-&gt;document()-&gt;cachedResourceLoader()-&gt;allCachedResources();

We already have this logic somewhere. Could you reuse it?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:520
&gt; +        if (equalIgnoringFragmentIdentifier(kurl, frame-&gt;loader()-&gt;iconURL()))

Why this check?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:530
&gt; +            matches = countMatchesInResourceContent(frame, kurl, regex);

You could shortcut and use cached resource instance to get its content.

&gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:730
&gt; +                var match = searchResult.matchesList[i];

this code is way too messy. you should refactor it.

&gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:748
&gt; +            PageAgent.searchInResources(regexes[i].source, regexes[i].ignoreCase, callback.bind(this));

can there be multiple search queries?

&gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:826
&gt; +    jumpToNextSearchResult: function()

It looks like too much code. I am sure it can be simpler :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394323</commentid>
    <comment_count>3</comment_count>
      <attachid>91453</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-28 03:04:30 -0700</bug_when>
    <thetext>Created attachment 91453
Patch with fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394325</commentid>
    <comment_count>4</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-28 03:08:47 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/Inspector.json:101
&gt; &gt; +                &quot;id&quot;: &quot;ResourceSearchResult&quot;,
&gt; 
&gt; &quot;SearchResult&quot;
Comments about protocol addressed.
 

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:478
&gt; &gt; +int InspectorPageAgent::countRegularExpressionMatches(const RegularExpression&amp; regex, const String&amp; content)
&gt; 
&gt; You could define static functions in WebCore namespace for helper routines.
Done.
 
&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:483
&gt; &gt; +    while ((position = regex.match(content, start)) != -1) {
&gt; 
&gt; Sounds like you could provide offsets easily too.
I could if we need that. We do not need that on front-end currently.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:513
&gt; &gt; +    const CachedResourceLoader::DocumentResourceMap&amp; allResources = frame-&gt;document()-&gt;cachedResourceLoader()-&gt;allCachedResources();
&gt; 
&gt; We already have this logic somewhere. Could you reuse it?
This is rewritten using frame traversing.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:520
&gt; &gt; +        if (equalIgnoringFragmentIdentifier(kurl, frame-&gt;loader()-&gt;iconURL()))
&gt; 
&gt; Why this check?
Removed.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:530
&gt; &gt; +            matches = countMatchesInResourceContent(frame, kurl, regex);
&gt; 
&gt; You could shortcut and use cached resource instance to get its content.
Done.

&gt; &gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:748
&gt; &gt; +            PageAgent.searchInResources(regexes[i].source, regexes[i].ignoreCase, callback.bind(this));
&gt; 
&gt; can there be multiple search queries?
Search changed to always use only one regular expression.

&gt; &gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:826
&gt; &gt; +    jumpToNextSearchResult: function()
&gt; 
&gt; It looks like too much code. I am sure it can be simpler :)
Extracted logic for selecting next/previous search result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394337</commentid>
    <comment_count>5</comment_count>
      <attachid>91453</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-04-28 03:32:31 -0700</bug_when>
    <thetext>Comment on attachment 91453
Patch with fixes

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

&gt; Source/WebCore/inspector/Inspector.json:107
&gt; +                    { &quot;name&quot;: &quot;matches&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Number of matches in resource.&quot; }

a better name for the property is &quot;matchCount&quot;, as it is not immediately clear whether &quot;matches&quot; is boolean or holds the actual match results (in our frontend, we use everywhere: var matches = /regex/.match(string))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394439</commentid>
    <comment_count>6</comment_count>
      <attachid>91495</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-28 08:28:10 -0700</bug_when>
    <thetext>Created attachment 91495
Patch + matchesCount renaming + fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394451</commentid>
    <comment_count>7</comment_count>
      <attachid>91499</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-28 08:49:29 -0700</bug_when>
    <thetext>Created attachment 91499
Patch (rebaselined, refactored)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394537</commentid>
    <comment_count>8</comment_count>
      <attachid>91499</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-04-28 10:43:17 -0700</bug_when>
    <thetext>Comment on attachment 91499
Patch (rebaselined, refactored)

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

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:424
&gt; +        result.append(&quot;[&quot;);

&quot;^&quot; will convert into [^], will it work?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:440
&gt; +    while (start &lt; content.length() &amp;&amp; (position = regex.match(content, start, &amp;matchLength)) != -1) {

Could you break this down for better readability?

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:458
&gt; +void InspectorPageAgent::searchInResources(ErrorString* errorString, const String&amp; text, const bool* const optionalCaseSensitive, const bool* const optionalIsRegex, RefPtr&lt;InspectorArray&gt;* object)

Order of methods in the .cpp should match the one in .h when possible.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:469
&gt; +        const CachedResourceLoader::DocumentResourceMap&amp; allResources = frame-&gt;document()-&gt;cachedResourceLoader()-&gt;allCachedResources();

It would be great if we could extract cached resource traversal logic into one place. I think I mentioned it earlier.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:474
&gt; +            switch (InspectorPageAgent::cachedResourceType(*cachedResource)) {

Ditto. Can we extract method for this logic (and use ::resourceContent(cachedResource))?

&gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:690
&gt; +        function searchInEditedResource(treeElement)

Lets add it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395249</commentid>
    <comment_count>9</comment_count>
      <attachid>91676</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-29 07:05:33 -0700</bug_when>
    <thetext>Created attachment 91676
Patch with fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395250</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-29 07:07:01 -0700</bug_when>
    <thetext>Attachment 91676 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorPageAgent.cpp:65:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
Source/WebCore/inspector/InspectorPageAgent.cpp:65:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395265</commentid>
    <comment_count>11</comment_count>
      <attachid>91680</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-04-29 07:55:48 -0700</bug_when>
    <thetext>Created attachment 91680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403092</commentid>
    <comment_count>12</comment_count>
      <attachid>91680</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-12 13:02:15 -0700</bug_when>
    <thetext>Comment on attachment 91680
Patch

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

Couple of nits, otherwise looks good.

&gt; Source/WebCore/inspector/Inspector.json:107
&gt; +                    { &quot;name&quot;: &quot;matchesCount&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Number of matches in resource content.&quot; }

in _the_ resource content.

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:531
&gt; +void InspectorPageAgent::domContentEventFired()

I thought these were already a part of the file.

&gt; Source/WebCore/inspector/front-end/ResourcesPanel.js:706
&gt; +                    var resource = frameTreeElement.resourceByURL(searchResult.url);

You should check frame tree elements for null - they are very dynamic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403473</commentid>
    <comment_count>13</comment_count>
      <attachid>93433</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-05-13 04:46:34 -0700</bug_when>
    <thetext>Created attachment 93433
Patch with fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403474</commentid>
    <comment_count>14</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-05-13 04:47:31 -0700</bug_when>
    <thetext>Done.

&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:531
&gt; &gt; +void InspectorPageAgent::domContentEventFired()
&gt; 
&gt; I thought these were already a part of the file.
Rebaselined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403476</commentid>
    <comment_count>15</comment_count>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-05-13 04:52:59 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/InspectorPageAgent.cpp:531
&gt; &gt; +void InspectorPageAgent::domContentEventFired()
&gt; 
&gt; I thought these were already a part of the file.
I checked once again and apparently the thing is I inserted some methods before these ones and diff treats them weirdly. These methods are not changed at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403771</commentid>
    <comment_count>16</comment_count>
      <attachid>93433</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-13 12:59:43 -0700</bug_when>
    <thetext>Comment on attachment 93433
Patch with fixes

Rejecting attachment 93433 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;build&apos;...&quot; exit_code: 2

Last 500 characters of output:
20
    setenv YACC /Developer/usr/bin/yacc
    /bin/sh -c /mnt/git/webkit-commit-queue/WebKitBuild/WebCore.build/Debug/WebCore.build/Script-5DF50887116F3077005202AB.sh

** BUILD FAILED **


The following build commands failed:
WebCore:
	CompileC /mnt/git/webkit-commit-queue/WebKitBuild/WebCore.build/Debug/WebCore.build/Objects-normal/x86_64/InspectorPageAgent.o /mnt/git/webkit-commit-queue/Source/WebCore/inspector/InspectorPageAgent.cpp normal x86_64 c++ com.apple.compilers.gcc.4_2
(1 failure)


Full output: http://queues.webkit.org/results/8695186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404399</commentid>
    <comment_count>17</comment_count>
      <attachid>93631</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2011-05-16 03:43:54 -0700</bug_when>
    <thetext>Created attachment 93631
Fixed mac build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404435</commentid>
    <comment_count>18</comment_count>
      <attachid>93631</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-16 05:57:09 -0700</bug_when>
    <thetext>Comment on attachment 93631
Fixed mac build

Clearing flags on attachment: 93631

Committed r86562: &lt;http://trac.webkit.org/changeset/86562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404436</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-16 05:57:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91267</attachid>
            <date>2011-04-27 04:36:55 -0700</date>
            <delta_ts>2011-04-28 03:04:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>25892</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjU0ZDU1Li40YmNhZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDQtMjcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJj
aEluUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Y291
bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UGFnZUFnZW50Ojpjb3VudE1hdGNoZXNJblJlc291cmNlQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJbkZyYW1lVHJlZVJlc291
cmNlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9zaG93UmVzb3VyY2VWaWV3KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3BlcmZvcm1TZWFy
Y2hJbkVkaXRlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guY2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dOZXh0U2VhcmNoVmlld1N0
YXJ0aW5nRnJvbSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLl9zaG93UHJldmlvdXNTZWFyY2hWaWV3U3RhcnRpbmdGcm9tKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fc2V0Vmlld1NlYXJjaFJl
c3VsdEluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5
cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VzUGFuZWwucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5G
cmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5hcHBlbmRSZXNvdXJjZSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUucmVzb3VyY2VCeVVSTCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5fcmVz
ZXRTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJl
ZUVsZW1lbnQucHJvdG90eXBlLmdldCBzZWFyY2hNYXRjaGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlYXJjaE1hdGNoRm91bmQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXhlcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZG9GaW5k
U2VhcmNoTWF0Y2hlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZS5oYXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9MYXN0U2VhcmNoUmVzdWx0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJj
aFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1
bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUuanVtcFRvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKyAgICAgICAgKCk6CisKIDIwMTEtMDQtMjYgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRl
bC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA1NzFkYmI2Li4y
OGU2NzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC05Niw2
ICs5NiwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9y
bWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICJpZCI6ICJSZXNvdXJjZVNlYXJjaFJlc3VsdCIsCisgICAgICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRp
b24gYWJvdXQgc2VhcmNoIG1hdGNoZXMuIiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaGVzTGlzdCIsICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJj
ZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZy
YW1lSWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgZnJhbWUg
aWQuIiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNo
ZXMiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIG1hdGNoZXMg
aW4gcmVzb3VyY2UuIiB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMaXN0IG9mIHNlYXJjaCBtYXRjaGVzLiIKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRz
IjogWwpAQCAtMTU3LDYgKzE3NSwxNyBAQAogICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnRlbnQiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgY29udGVudC4iIH0KICAgICAgICAgICAgICAgICBd
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjog
InNlYXJjaEluUmVzb3VyY2VzIiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2Vh
cmNoZXMgZm9yIGdpdmVuIHN0cmluZyBpbiBmcmFtZSAvIHJlc291cmNlIHRyZWUgc3RydWN0dXJl
LiIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3Ry
aW5nIHRvIHNlYXJjaCBmb3IuIiAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
Z25vcmVDYXNlIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJTcGVjaWZpZXMg
d2hldGhlciBjYXNlIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC4iICB9CisgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzZWFyY2hSZXN1bHQiLCAiJHJlZiI6ICJSZXNvdXJjZVNlYXJjaFJlc3VsdCIs
ICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBjb250ZW50IHNlYXJjaCByZXN1bHQuIiB9CisgICAg
ICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiZXZlbnRz
IjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAppbmRleCBjYTI4M2UyLi5kM2I1MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIklu
c3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNjcmlw
dE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgpAQCAtMzQ3LDYgKzM0OCwxNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0
UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogICAg
ICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJh
bWUsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBjb250ZW50KTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZWdleFNvdXJjZSwgYm9vbCBpZ25vcmVDYXNlLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Piogb2JqZWN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBtYXRjaGVzTGlzdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICByZXN1bHQt
PnNldEFycmF5KCJtYXRjaGVzTGlzdCIsIG1hdGNoZXNMaXN0KTsKKyAgICBSZWd1bGFyRXhwcmVz
c2lvbiByZWdleChyZWdleFNvdXJjZSwgaWdub3JlQ2FzZSA/IFRleHRDYXNlSW5zZW5zaXRpdmUg
OiBUZXh0Q2FzZVNlbnNpdGl2ZSk7CisgICAgc2VhcmNoSW5GcmFtZVRyZWVSZXNvdXJjZXMobV9w
YWdlLT5tYWluRnJhbWUoKSwgcmVnZXgsIG1hdGNoZXNMaXN0LmdldCgpKTsKKyAgICAqb2JqZWN0
ID0gcmVzdWx0OworfQorCisKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpkb21Db250ZW50RXZl
bnRGaXJlZCgpCiB7CiAgICAgIG1fZnJvbnRlbmQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKGN1cnJl
bnRUaW1lKCkpOwpAQCAtNDYyLDYgKzQ3NCw3NSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZgog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKworaW50IEluc3BlY3RvclBhZ2VBZ2VudDo6Y291bnRS
ZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCit7CisgICAgaW50IG1hdGNoZXMgPSAwOworICAgIGludCBw
b3NpdGlvbjsKKyAgICBpbnQgc3RhcnQgPSAwOworICAgIHdoaWxlICgocG9zaXRpb24gPSByZWdl
eC5tYXRjaChjb250ZW50LCBzdGFydCkpICE9IC0xKSB7CisgICAgICAgIHN0YXJ0ID0gcG9zaXRp
b24gKyAxOworICAgICAgICArK21hdGNoZXM7CisgICAgfQorICAgIHJldHVybiBtYXRjaGVzOwor
fQorCitpbnQgSW5zcGVjdG9yUGFnZUFnZW50Ojpjb3VudE1hdGNoZXNJblJlc291cmNlQ29udGVu
dChGcmFtZSogZnJhbWUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgUmVndWxhckV4cHJlc3Npb24m
IHJlZ2V4KQoreworICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFN0cmluZyBjb250
ZW50OworICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KCZlcnJvclN0cmlu
ZywgZnJhbWUsIHVybCwgJmNvbnRlbnQpOworICAgIGlmICghY29udGVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaW50IG1hdGNoZXMgPSBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhy
ZWdleCwgY29udGVudCk7CisgICAgcmV0dXJuIG1hdGNoZXM7Cit9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0
Y2goRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXMpCit7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIHBvaW50ZXJBc0lkKGZyYW1lKSk7
CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CisgICAgcmVzdWx0LT5zZXROdW1i
ZXIoIm1hdGNoZXMiLCBtYXRjaGVzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJbkZyYW1lVHJlZVJlc291cmNlcyhGcmFtZSogZnJh
bWUsIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgSW5zcGVjdG9yQXJyYXkqIG1hdGNo
ZXNMaXN0KQoreworICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5l
bmQoKTsKKyAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29u
ZC5nZXQoKTsKKyAgICAgICAgS1VSTCBrdXJsKFBhcnNlZFVSTFN0cmluZywgY2FjaGVkUmVzb3Vy
Y2UtPnVybCgpKTsKKworICAgICAgICBpbnQgbWF0Y2hlczsKKyAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdGcmFnbWVudElkZW50aWZpZXIoa3VybCwgZnJhbWUtPmxvYWRlcigpLT5pY29uVVJMKCkp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3dpdGNoIChjYWNoZWRSZXNvdXJj
ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6
CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guCisjaWYgRU5BQkxFKFhTTFQpCisgICAgICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgorICAgICAgICAgICAgbWF0Y2hlcyA9IGNvdW50TWF0
Y2hlc0luUmVzb3VyY2VDb250ZW50KGZyYW1lLCBrdXJsLCByZWdleCk7CisgICAgICAgICAgICBp
ZiAobWF0Y2hlcykKKyAgICAgICAgICAgICAgICBtYXRjaGVzTGlzdC0+cHVzaFZhbHVlKGJ1aWxk
T2JqZWN0Rm9yU2VhcmNoTWF0Y2goZnJhbWUsIGt1cmwsIG1hdGNoZXMpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgaW50IG1hdGNoZXMgPSBjb3VudE1hdGNoZXNJblJlc291cmNlQ29udGVudChm
cmFtZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIHJl
Z2V4KTsKKyAgICBpZiAobWF0Y2hlcykKKyAgICAgICAgbWF0Y2hlc0xpc3QtPnB1c2hWYWx1ZShi
dWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lLCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCks
IG1hdGNoZXMpKTsKKworICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUtPnRyZWUoKS0+Zmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKQor
ICAgICAgICBzZWFyY2hJbkZyYW1lVHJlZVJlc291cmNlcyhjaGlsZCwgcmVnZXgsIG1hdGNoZXNM
aXN0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
aAppbmRleCAwNWFlNTdiLi42Y2RmNjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEluc3BlY3Rvck9i
amVjdDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwogY2xhc3MgUGFn
ZTsKK2NsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKIApAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb29raWUoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KTsKICAgICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+Kik7CiAgICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBjb25z
dCBiYXNlNjRFbmNvZGUsIFN0cmluZyogY29udGVudCk7CisgICAgdm9pZCBzZWFyY2hJblJlc291
cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgaWdub3JlQ2FzZSwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbiBBUEkKICAgICB2b2lkIGRpZENvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpOwpAQCAt
MTE0LDYgKzExNiwxMSBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKik7CiAKKyAgICBpbnQgY291bnRS
ZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBpbnQgY291bnRNYXRjaGVzSW5SZXNvdXJjZUNvbnRlbnQoRnJhbWUqLCBj
b25zdCBLVVJMJiwgY29uc3QgUmVndWxhckV4cHJlc3Npb24mKTsKKyAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChGcmFtZSosIGNvbnN0IFN0
cmluZyYgdXJsLCBpbnQgbWF0Y2hlcyk7CisgICAgdm9pZCBzZWFyY2hJbkZyYW1lVHJlZVJlc291
cmNlcyhGcmFtZSosIGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiwgSW5zcGVjdG9yQXJyYXkqIG1h
dGNoZXNMaXN0KTsKKwogICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIG1faW5zdHJ1bWVudGluZ0Fn
ZW50czsKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4IDAxOGQxNGIuLmViODQ1NjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qcwpAQCAtMzgzLDYgKzM4Myw5IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgX3Nob3dSZXNvdXJjZVZpZXc6IGZ1bmN0aW9uKHJlc291cmNlKQogICAg
IHsKICAgICAgICAgdmFyIHZpZXcgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VWaWV3LnJlc291cmNl
Vmlld0ZvclJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQg
YmUgcmVtb3ZlZCBvbmNlIHdlIHN0b3AgY2FjaGluZyBTb3VyY2VGcmFtZXMuICAgICAgICAKKyAg
ICAgICAgaWYgKHZpZXcuc2VhcmNoQ2FuY2VsZWQpCisgICAgICAgICAgICB2aWV3LnNlYXJjaENh
bmNlbGVkKCk7CiAgICAgICAgIHRoaXMuX2ZldGNoQW5kQXBwbHlEaWZmTWFya3VwKHZpZXcsIHJl
c291cmNlKTsKICAgICAgICAgdGhpcy5faW5uZXJTaG93Vmlldyh2aWV3KTsKICAgICB9LApAQCAt
Njg5LDI1ICs2OTIsMTc5IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgfSwKIAotICAgIGdldCBzZWFyY2hhYmxl
Vmlld3MoKQorICAgIF9wZXJmb3JtU2VhcmNoSW5FZGl0ZWRSZXNvdXJjZXM6IGZ1bmN0aW9uKHJl
Z2V4ZXMpCiAgICAgewotICAgICAgICB2YXIgdmlld3MgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24g
Y2FsbGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IHJlc291cmNlID0gcmVzb3VyY2VUcmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAg
ICAgICAgIGlmIChyZXNvdXJjZS5oaXN0b3J5ICYmIHJlc291cmNlLmhpc3RvcnkubGVuZ3RoID4g
MCAmJiByZXNvdXJjZS5jb250ZW50KSB7CisgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSAw
OworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnZXhlcy5sZW5ndGg7IGkr
KykKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyArPSBjb3VudFJlZ2V4TWF0Y2hlcyhyZWdl
eGVzW2ldLCByZXNvdXJjZS5jb250ZW50KTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcykg
eworICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50LnNlYXJjaE1hdGNoRm91
bmQobWF0Y2hlcyk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsU2VhcmNoTWF0Y2hlcyArPSBt
YXRjaGVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdmFyIHRvdGFsU2VhcmNoTWF0Y2hlcyA9IDA7CisgICAgICAgIHRoaXMu
X2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAg
ICByZXR1cm4gdG90YWxTZWFyY2hNYXRjaGVzOworICAgIH0sCiAKLSAgICAgICAgY29uc3Qgdmlz
aWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3OwotICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYg
dmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCkKLSAgICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJs
ZVZpZXcpOworICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5KSAKKyAgICB7CisgICAg
ICAgIHRoaXMuc2VhcmNoQ2FuY2VsZWQoKTsKKyAgICAgICAgCisgICAgICAgIHZhciByZWdleGVz
ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ZXMocXVlcnkpOwor
ICAgICAgICB2YXIgdG90YWxTZWFyY2hNYXRjaGVzID0gdGhpcy5fcGVyZm9ybVNlYXJjaEluRWRp
dGVkUmVzb3VyY2VzKHJlZ2V4ZXMpOworICAgICAgICB2YXIgcGVuZGluZ0JhY2tFbmRSZXF1ZXN0
c0NvdW50ID0gcmVnZXhlcy5sZW5ndGg7CiAKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJy
b3IsIHNlYXJjaFJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcGVuZGluZ0JhY2tFbmRS
ZXF1ZXN0c0NvdW50LS07CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWFyY2hSZXN1bHQubWF0
Y2hlc0xpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBzZWFy
Y2hSZXN1bHQubWF0Y2hlc0xpc3RbaV07CisgICAgICAgICAgICAgICAgdmFyIGZyYW1lVHJlZUVs
ZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZvckZyYW1lSWRbbWF0Y2guZnJhbWVJZF07CisgICAg
ICAgICAgICAgICAgdmFyIHJlc291cmNlID0gZnJhbWVUcmVlRWxlbWVudC5yZXNvdXJjZUJ5VVJM
KG1hdGNoLnVybCkKKyAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuaGlzdG9yeSAmJiByZXNv
dXJjZS5oaXN0b3J5Lmxlbmd0aCA+IDApIAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gc2tpcCBlZGl0ZWQgcmVzb3VyY2VzCisKKyAgICAgICAgICAgICAgICB2YXIgdHJlZUVsZW1l
bnQgPSB0aGlzLl9maW5kVHJlZUVsZW1lbnRGb3JSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAg
ICAgICAgICAgdHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hGb3VuZChtYXRjaC5tYXRjaGVzKTsKKyAg
ICAgICAgICAgICAgICB0b3RhbFNlYXJjaE1hdGNoZXMgKz0gbWF0Y2gubWF0Y2hlczsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwZW5kaW5nQmFja0VuZFJlcXVlc3RzQ291bnQgPT0g
MCkgeworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCh0b3RhbFNlYXJjaE1hdGNoZXMsIHRoaXMpOworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQgJiYgdGhpcy5z
aWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXMpCisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2V4ZXMu
bGVuZ3RoOyBpKyspCisgICAgICAgICAgICBQYWdlQWdlbnQuc2VhcmNoSW5SZXNvdXJjZXMocmVn
ZXhlc1tpXS5zb3VyY2UsIHJlZ2V4ZXNbaV0uaWdub3JlQ2FzZSwgY2FsbGJhY2suYmluZCh0aGlz
KSk7CisgICAgICAgIAorICAgIH0sCisgICAgCisgICAgX3Nob3dOZXh0U2VhcmNoVmlld1N0YXJ0
aW5nRnJvbTogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0
cmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2Us
IHRoaXMucmVzb3VyY2VzTGlzdFRyZWVFbGVtZW50LCB0cnVlKTsKKyAgICAgICAgICAgIGlmICgh
dHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLnJlc291cmNl
c0xpc3RUcmVlRWxlbWVudDsKKyAgICAgICAgICAgIGlmICh0cmVlRWxlbWVudCBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQgJiYgdHJlZUVsZW1lbnQuc2Vh
cmNoTWF0Y2hlcykgeworICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Jlc291cmNlKHRyZWVFbGVt
ZW50LnJlcHJlc2VudGVkT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2Vh
cmNoQ29udHJvbGxlci5mb2N1c1NlYXJjaEZpZWxkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRy
ZWVFbGVtZW50KTsKKyAgICB9LAorCisgICAgX3Nob3dQcmV2aW91c1NlYXJjaFZpZXdTdGFydGlu
Z0Zyb206IGZ1bmN0aW9uKHN0YXJ0VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgdHJl
ZUVsZW1lbnQgPSBzdGFydFRyZWVFbGVtZW50OworICAgICAgICBkbyB7CisgICAgICAgICAgICB0
cmVlRWxlbWVudCA9IHRyZWVFbGVtZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAoIXRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAg
ICAgdHJlZUVsZW1lbnQgPSB0aGlzLnJlc291cmNlc0xpc3RUcmVlRWxlbWVudDsKKyAgICAgICAg
ICAgICAgICB2YXIgbmV4dFRyZWVFbGVtZW50OyAKKyAgICAgICAgICAgICAgICB3aGlsZSAobmV4
dFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFsc2Us
IHRoaXMucmVzb3VyY2VzTGlzdFRyZWVFbGVtZW50LCB0cnVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHJlZUVsZW1lbnQgPSBuZXh0VHJlZUVsZW1lbnQ7IAorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHRyZWVFbGVtZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3Vy
Y2VUcmVlRWxlbWVudCAmJiB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5zaG93UmVzb3VyY2UodHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QpOwor
ICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLmZvY3VzU2VhcmNo
RmllbGQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0gd2hpbGUgKHRyZWVFbGVtZW50ICE9IHN0YXJ0VHJlZUVsZW1lbnQpOworICAgIH0sCisgICAg
CisgICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1lbnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZh
ciByZXNvdXJjZSA9IHJlc291cmNlVHJlZUVsZW1lbnQuX3Jlc291cmNlOwotICAgICAgICAgICAg
dmFyIHJlc291cmNlVmlldyA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucmVzb3VyY2VWaWV3
Rm9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICAgICAgaWYgKHJlc291cmNlVmlldy5wZXJm
b3JtU2VhcmNoICYmIHJlc291cmNlVmlldyAhPT0gdmlzaWJsZVZpZXcpCi0gICAgICAgICAgICAg
ICAgdmlld3MucHVzaChyZXNvdXJjZVZpZXcpOworICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxl
bWVudC5fcmVzZXRTZWFyY2hSZXN1bHRzKCk7CiAgICAgICAgIH0KKwogICAgICAgICB0aGlzLl9m
b3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50cyhjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybiB2aWV3
czsKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcgJiYgdGhpcy52aXNpYmxlVmlldy5zZWFy
Y2hDYW5jZWxlZCkKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2VhcmNoQ2FuY2VsZWQo
KTsKKworICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFyY2hN
YXRjaGVzQ291bnQoMCwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0c1ZpZXcg
PSBudWxsOworICAgICAgICB0aGlzLl92aWV3U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKKyAgICB9
LAorCisgICAgX3NldFZpZXdTZWFyY2hSZXN1bHRJbmRleDogZnVuY3Rpb24oaW5kZXgpCisgICAg
eworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRo
aXMuX3ZpZXdTZWFyY2hJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodGhpcy52
aXNpYmxlVmlldyAmJiB0aGlzLnZpc2libGVWaWV3ID09PSB0aGlzLl9zZWFyY2hSZXN1bHRzVmll
dyAmJiB0aGlzLl92aWV3U2VhcmNoUmVzdWx0SW5kZXggIT0gLTEpCisgICAgICAgICAgICAgICAg
dGhpcy5fc2VhcmNoUmVzdWx0c1ZpZXcuanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX3ZpZXdTZWFy
Y2hSZXN1bHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXMuX3ZpZXdT
ZWFyY2hSZXN1bHRJbmRleCA9IGluZGV4OworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyA9
PT0gdGhpcy5fc2VhcmNoUmVzdWx0c1ZpZXcpeworICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJs
ZVZpZXcuaGFzU2VhcmNoUmVzdWx0cygpKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2suY2Fs
bCh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHNWaWV3ID0gdGhpcy52
aXNpYmxlVmlldzsKKyAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MgPSB0cnVlOwor
ICAgICAgICB0aGlzLnZpc2libGVWaWV3LnBlcmZvcm1TZWFyY2godGhpcy5jdXJyZW50UXVlcnks
IGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgIH0sCisgICAgCisgICAganVtcFRvTmV4dFNlYXJj
aFJlc3VsdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVu
dCA9IHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgaWYgKCFj
dXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dOZXh0U2VhcmNoVmll
d1N0YXJ0aW5nRnJvbSh0aGlzLnJlc291cmNlc0xpc3RUcmVlRWxlbWVudCk7CisgICAgICAgICAg
ICB0aGlzLl9zZXRWaWV3U2VhcmNoUmVzdWx0SW5kZXgoMCk7CisgICAgICAgICAgICByZXR1cm47
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVsZW1lbnQuc2VhcmNoTWF0
Y2hlcykgeworICAgICAgICAgICAgdGhpcy5fc2hvd05leHRTZWFyY2hWaWV3U3RhcnRpbmdGcm9t
KHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudCk7CisgICAgICAgICAgICB0aGlz
Ll9zZXRWaWV3U2VhcmNoUmVzdWx0SW5kZXgoMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ICE9PSB0aGlzLl9z
ZWFyY2hSZXN1bHRzVmlldyB8fCB0aGlzLl92aWV3U2VhcmNoUmVzdWx0SW5kZXggPT0gLTEpCisg
ICAgICAgICAgICB0aGlzLl9zZXRWaWV3U2VhcmNoUmVzdWx0SW5kZXgoMCk7CisgICAgICAgIGVs
c2UgaWYgKHRoaXMuX3ZpZXdTZWFyY2hSZXN1bHRJbmRleCA9PSBjdXJyZW50VHJlZUVsZW1lbnQu
c2VhcmNoTWF0Y2hlcyAtIDEpIHsgCisgICAgICAgICAgICB0aGlzLl9zaG93TmV4dFNlYXJjaFZp
ZXdTdGFydGluZ0Zyb20odGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50KTsKKyAg
ICAgICAgICAgIHRoaXMuX3NldFZpZXdTZWFyY2hSZXN1bHRJbmRleCgwKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB0aGlzLl9zZXRWaWV3U2VhcmNoUmVzdWx0SW5kZXgodGhpcy5fdmll
d1NlYXJjaFJlc3VsdEluZGV4ICsgMSk7CiAgICAgfSwKKyAgICAKKyAgICBqdW1wVG9QcmV2aW91
c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVl
RWxlbWVudCA9IHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAg
aWYgKCFjdXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dQcmV2aW91
c1NlYXJjaFZpZXdTdGFydGluZ0Zyb20odGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVsZW1lbnQpOwor
ICAgICAgICAgICAgdGhpcy5fc2V0Vmlld1NlYXJjaFJlc3VsdEluZGV4KHRoaXMuc2lkZWJhclRy
ZWUuc2VsZWN0ZWRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzIC0gMSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50VHJlZUVsZW1l
bnQuc2VhcmNoTWF0Y2hlcyAmJiB0aGlzLnZpc2libGVWaWV3ID09PSB0aGlzLl9zZWFyY2hSZXN1
bHRzVmlldyAmJiB0aGlzLl92aWV3U2VhcmNoUmVzdWx0SW5kZXggPiAwKSB7CisgICAgICAgICAg
ICB0aGlzLl9zZXRWaWV3U2VhcmNoUmVzdWx0SW5kZXgodGhpcy5fdmlld1NlYXJjaFJlc3VsdElu
ZGV4IC0gMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAorICAgICAgICB0aGlz
Ll9zaG93UHJldmlvdXNTZWFyY2hWaWV3U3RhcnRpbmdGcm9tKHRoaXMuc2lkZWJhclRyZWUuc2Vs
ZWN0ZWRUcmVlRWxlbWVudCk7CisgICAgICAgIHRoaXMuX3NldFZpZXdTZWFyY2hSZXN1bHRJbmRl
eCh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlcyAtIDEp
OworICAgIH0sCisgICAgCiAgICAgX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzOiBmdW5jdGlv
bihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBzdG9wID0gZmFsc2U7CkBAIC03MTcsMTUg
Kzg3NCw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KICAgICB9LAogCi0gICAgc2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24odmlldywgbWF0
Y2hlcykKLSAgICB7Ci0gICAgICAgIGlmICghdmlldy5yZXNvdXJjZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fZmluZFRyZWVFbGVtZW50Rm9y
UmVzb3VyY2Uodmlldy5yZXNvdXJjZSk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAg
ICAgICAgIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoRm91bmQobWF0Y2hlcyk7Ci0gICAgfSwKLQog
ICAgIF9maW5kVHJlZUVsZW1lbnRGb3JSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCiAgICAg
ewogICAgICAgICBmdW5jdGlvbiBpc0FuY2VzdG9yKGFuY2VzdG9yLCBvYmplY3QpCkBAIC03NDMs
MzAgKzg5MSw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiB0aGlzLnNpZGViYXJUcmVlLmZpbmRUcmVlRWxlbWVudChyZXNvdXJjZSwg
aXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKICAgICB9LAogCi0gICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1
bmN0aW9uKHN0YXJ0aW5nTmV3U2VhcmNoKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBh
bmVsLnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZC5jYWxsKHRoaXMsIHN0YXJ0aW5nTmV3U2VhcmNo
KTsKLQotICAgICAgICBpZiAoc3RhcnRpbmdOZXdTZWFyY2gpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVudC5fZXJyb3JzV2FybmluZ3NVcGRh
dGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVu
dHMoY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVy
eSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1lbnQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX3Jlc2V0QnViYmxl
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHMo
Y2FsbGJhY2spOwotICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLnBlcmZvcm1T
ZWFyY2guY2FsbCh0aGlzLCBxdWVyeSk7Ci0gICAgfSwKLQogICAgIHNob3dWaWV3OiBmdW5jdGlv
bih2aWV3KQogICAgIHsKICAgICAgICAgaWYgKHZpZXcpCkBAIC05MjYsNiArMTA1MCw3IEBAIFdl
Ykluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc3RvcmFnZVBhbmVsLCBmcmFt
ZUlkLCB0aXRsZSwgc3VidGl0bGUpCiAgICAgdGhpcy5fZnJhbWVJZCA9IGZyYW1lSWQ7CiAgICAg
dGhpcy5zZXRUaXRsZXModGl0bGUsIHN1YnRpdGxlKTsKICAgICB0aGlzLl9jYXRlZ29yeUVsZW1l
bnRzID0ge307CisgICAgdGhpcy5fcmVzb3VyY2VzQnlVUkwgPSB7fTsKIH0KIAogV2ViSW5zcGVj
dG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewpAQCAtMTAwMSw2ICsxMTI2LDEyIEBA
IFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFy
IHJlc291cmNlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVl
RWxlbWVudCh0aGlzLl9zdG9yYWdlUGFuZWwsIHJlc291cmNlKTsKICAgICAgICAgdGhpcy5faW5z
ZXJ0SW5QcmVzZW50YXRpb25PcmRlcihjYXRlZ29yeUVsZW1lbnQsIHJlc291cmNlVHJlZUVsZW1l
bnQpOwogICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9wb3B1bGF0ZVJldmlzaW9ucygpOwor
ICAgICAgICB0aGlzLl9yZXNvdXJjZXNCeVVSTFtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2U7Cisg
ICAgfSwKKworICAgIHJlc291cmNlQnlVUkw6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9yZXNvdXJjZXNCeVVSTFt1cmxdOwogICAgIH0sCiAKICAgICBhcHBlbmRD
aGlsZDogZnVuY3Rpb24odHJlZUVsZW1lbnQpCkBAIC0xMTQ4LDExICsxMjc5LDIzIEBAIFdlYklu
c3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9
CiAgICAgfSwKIAorICAgIF9yZXNldFNlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3Jlc2V0QnViYmxlKCk7CisgICAgICAgIHRoaXMuX3NlYXJjaE1hdGNoZXMg
PSAwOworICAgIH0sCisKKyAgICBnZXQgc2VhcmNoTWF0Y2hlcygpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc2VhcmNoTWF0Y2hlczsKKyAgICB9LAorCiAgICAgc2VhcmNoTWF0Y2hGb3Vu
ZDogZnVuY3Rpb24obWF0Y2hlcykKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc2V0QnViYmxlKCk7
CiAKLSAgICAgICAgdGhpcy5fc2V0QnViYmxlVGV4dChtYXRjaGVzKTsKKyAgICAgICAgdGhpcy5f
c2VhcmNoTWF0Y2hlcyArPSBtYXRjaGVzOworICAgICAgICB0aGlzLl9zZXRCdWJibGVUZXh0KHRo
aXMuX3NlYXJjaE1hdGNoZXMpOwogICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInNlYXJjaC1tYXRjaGVzIik7CiAKICAgICAgICAgLy8gRXhwYW5kLCBkbyBub3Qgc2Ny
b2xsIGludG8gdmlldy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCmluZGV4IGEyZDYyMzYuLjBkYmFkN2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNTYsNiArNTYs
MjMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cyA9IHsKICAgICBMb2FkZWQ6ICJs
b2FkZWQiCiB9CiAKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleGVz
ID0gZnVuY3Rpb24ocXVlcnkpCit7CisgICAgdmFyIHJlZ2V4ZXMgPSBbXTsKKyAgICAvLyBGaXJz
dCBkbyBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KKyAgICByZWdleGVzLnB1c2goY3JlYXRlU2Vh
cmNoUmVnZXgocXVlcnkpKTsKKworICAgIC8vIFRoZW4gdHJ5IHJlZ2V4IHNlYXJjaCBpZiB1c2Vy
IGtub3dzIHRoZSAvIC8gaGludC4KKyAgICB0cnkgeworICAgICAgICBpZiAoL15cLy4qXC8kLy50
ZXN0KHF1ZXJ5KSkKKyAgICAgICAgICAgIHJlZ2V4ZXMucHVzaChuZXcgUmVnRXhwKHF1ZXJ5LnN1
YnN0cmluZygxLCBxdWVyeS5sZW5ndGggLSAxKSkpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgLy8gU2lsZW50IGNhdGNoLgorICAgIH0KKyAgICByZXR1cm4gcmVnZXhlczsKK30KKworCiBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIGdldCB2aXNpYmxlKCkK
ICAgICB7CkBAIC0zNjcsMTcgKzM4NCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAt
MTsKICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMgPSBbXTsKIAotICAgICAgICAgICAg
Ly8gRmlyc3QgZG8gY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guCi0gICAgICAgICAgICB2YXIgcmVn
ZXhPYmplY3QgPSBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7Ci0gICAgICAgICAgICB0aGlzLl9j
b2xsZWN0UmVnZXhNYXRjaGVzKHJlZ2V4T2JqZWN0LCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLQot
ICAgICAgICAgICAgLy8gVGhlbiB0cnkgcmVnZXggc2VhcmNoIGlmIHVzZXIga25vd3MgdGhlIC8g
LyBoaW50LgotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoL15cLy4qXC8k
Ly50ZXN0KHF1ZXJ5KSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29sbGVjdFJlZ2V4TWF0
Y2hlcyhuZXcgUmVnRXhwKHF1ZXJ5LnN1YnN0cmluZygxLCBxdWVyeS5sZW5ndGggLSAxKSksIHRo
aXMuX3NlYXJjaFJlc3VsdHMpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg
ICAgICAgIC8vIFNpbGVudCBjYXRjaC4KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBy
ZWdleGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ZXMocXVl
cnkpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWdleGVzLmxlbmd0aDsgaSsr
KQorICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMocmVnZXhlc1tpXSwg
dGhpcy5fc2VhcmNoUmVzdWx0cyk7CiAKICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMsIHRoaXMu
X3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKICAgICAgICAgfQpAQCAtNDAxLDI0ICs0MTAsMjkgQEAg
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7CiAgICAgfSwKIAorICAgIGhhc1NlYXJj
aFJlc3VsdHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCA+IDA7CisgICAgfSwKKwogICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQoMCk7
CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVzdWx0KDApOwogICAgIH0sCiAKICAgICBqdW1w
VG9MYXN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1w
VG9TZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKKyAgICAgICAg
dGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsK
ICAgICB9LAogCiAgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsK
LSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1
bHRJbmRleCArIDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJy
ZW50U2VhcmNoUmVzdWx0SW5kZXggKyAxKTsKICAgICB9LAogCiAgICAganVtcFRvUHJldmlvdXNT
ZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1NlYXJj
aFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggLSAxKTsKKyAgICAgICAgdGhp
cy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4IC0gMSk7
CiAgICAgfSwKIAogICAgIHNob3dpbmdGaXJzdFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQpAQCAt
NDMxLDcgKzQ0NSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAmJiB0aGlzLl9jdXJyZW50
U2VhcmNoUmVzdWx0SW5kZXggPT09ICh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAtIDEpOwog
ICAgIH0sCiAKLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBmdW5jdGlvbihpbmRleCkKKyAgICBq
dW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCF0
aGlzLmxvYWRlZCB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzCmluZGV4IDY0YTdhOWYuLmY4YTUxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC0xMDQwLDMgKzEwNDAsMTUgQEAgZnVuY3Rp
b24gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnksIGV4dHJhRmxhZ3MpCiAgICAgfQogICAgIHJldHVy
biBuZXcgUmVnRXhwKHJlZ2V4LCAiaSIgKyAoZXh0cmFGbGFncyB8fCAiIikpOwogfQorCitmdW5j
dGlvbiBjb3VudFJlZ2V4TWF0Y2hlcyhyZWdleCwgY29udGVudCkKK3sKKyAgICB2YXIgdGV4dCA9
IGNvbnRlbnQ7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG1hdGNoOworICAgIHdoaWxl
IChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpIHsKKyAgICAgICAgKytyZXN1bHQ7CisgICAgICAg
IHRleHQgPSB0ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQo=
</data>
<flag name="review"
          id="84081"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="84082"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91453</attachid>
            <date>2011-04-28 03:04:30 -0700</date>
            <delta_ts>2011-04-28 08:28:10 -0700</delta_ts>
            <desc>Patch with fixes</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>29903</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NmZmYThmLi42MzJmYmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTEtMDQtMjggIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Y291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JTZWFyY2hNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3No
b3dSZXNvdXJjZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5wZXJmb3JtU2VhcmNoLnNlYXJjaEluRWRpdGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLl9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQuY2FsbGJhY2spOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fc2hvd1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNl
YXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VzUGFuZWwucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5hcHBlbmRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUucmVzb3VyY2VCeVVSTCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5f
cmVzZXRTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNl
VHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBzZWFyY2hNYXRjaGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlYXJjaE1hdGNoRm91
bmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90eXBl
Lm5leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJj
aENvbnRyb2xsZXIucHJvdG90eXBlLnByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5fc2VhcmNoUmVz
dWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJh
dmVyc2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRz
VHJhdmVyc2VyLnByb3RvdHlwZS5maXJzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNo
UmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUubGFzdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUu
bmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1Ry
YXZlcnNlci5wcm90b3R5cGUucHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJj
aFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl90cmF2ZXJzZU5leHQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIu
cHJvdG90eXBlLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX3RyYXZlcnNl
UHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVu
dHNUcmF2ZXJzZXIucHJvdG90eXBlLl9sYXN0VHJlZUVsZW1lbnQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvRmluZFNlYXJjaE1hdGNoZXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuaGFzU2VhcmNoUmVz
dWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBU
b0ZpcnN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9QcmV2aW91c1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLl9jb2xsZWN0UmVnZXhNYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qczoKKyAgICAgICAgKCk6CisKIDIwMTEtMDQtMjYgIEFsZXhhbmRlciBQYXZs
b3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBG
ZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IGM2MGIy
YTYuLmUyYjU1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAg
LTk2LDYgKzk2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
SW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgImlkIjogIlNlYXJjaFJlc3VsdCIsCisgICAgICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2VhcmNoIHJlc3Vs
dCBmb3IgcmVzb3VyY2UuIiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKwkgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJm
cmFtZUlkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIGZyYW1l
IGlkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaGVzIiwgInR5cGUi
OiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBtYXRjaGVzIGluIHJlc291cmNl
LiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAg
ICAgImNvbW1hbmRzIjogWwpAQCAtMTU3LDYgKzE2NywxOCBAQAogICAgICAgICAgICAgICAgICJy
ZXR1cm5zIjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnRlbnQiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgY29udGVudC4iIH0KICAgICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICJuYW1lIjogInNlYXJjaEluUmVzb3VyY2VzIiwKKyAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiU2VhcmNoZXMgZm9yIGdpdmVuIHN0cmluZyBpbiBmcmFtZSAvIHJlc291cmNlIHRy
ZWUgc3RydWN0dXJlLiIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJTdHJpbmcgdG8gc2VhcmNoIGZvci4iICB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNhc2VTZW5zaXRpdmUiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjog
dHJ1ZSwgImRlc2NyaXB0aW9uIjogIklmIHRydWUsIHNlYXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4i
IH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNSZWdleCIsICJ0eXBlIjogImJv
b2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYgdHJ1ZSwgdHJlYXRz
IHN0cmluZyBwYXJhbWV0ZXIgYXMgcmVnZXguIiB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXN1bHQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU2VhcmNoUmVzdWx0
IiB9LCAiZGVzY3JpcHRpb24iOiAiTGlzdCBvZiBzZWFyY2ggcmVzdWx0cy4iIH0KKyAgICAgICAg
ICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVudHMiOiBb
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmlu
ZGV4IDY2NzVjMjIuLmFjZjdlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1
bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCkBAIC0xMjgsNiArMTI5LDEzIEBAIHN0YXRpYyBib29sIGRlY29kZUNhY2hlZFJlc291cmNl
KENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1bHQpCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitzdGF0aWMgYm9vbCBkZWNvZGVNYWluUmVzb3VyY2UoRnJhbWUqIGZy
YW1lLCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGZy
YW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYnVmZmVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3Vy
Y2VEYXRhKCk7CisgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNv
ZGluZ05hbWUsIHJlc3VsdCk7Cit9CisKIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50
aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2Ny
aXB0TWFuYWdlcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2Vu
dChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKQEAg
LTE0NCwxMSArMTUyLDggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVu
dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSwKICAgICBEb2N1bWVudExv
YWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOwogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlm
IChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgbG9hZGVyLT51cmwoKSkpIHsK
LSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5w
dXRFbmNvZGluZygpOwotICAgICAgICBidWZmZXIgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOwotICAgICAgICBzdWNjZXNzID0gZGVjb2RlU2hhcmVk
QnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsKLSAgICB9CisgICAgaWYg
KGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBsb2FkZXItPnVybCgpKSkKKyAg
ICAgICAgc3VjY2VzcyA9IGRlY29kZU1haW5SZXNvdXJjZShmcmFtZSwgcmVzdWx0KTsKICAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHN1Y2Nlc3MgPSBkZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNo
ZWRSZXNvdXJjZShmcmFtZSwgdXJsKSwgcmVzdWx0KTsKIApAQCAtNDEwLDYgKzQxNSw4NSBAQCB2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaQogICAgICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291
cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
LCBjb250ZW50KTsKIH0KIAorc3RhdGljIFN0cmluZyBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZShj
b25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycyA9IHRleHQuY2hhcmFjdGVycygpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgeworICAgICAgICByZXN1bHQuYXBwZW5kKCJb
Iik7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICddJykKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIlxcIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyc1tpXSk7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIl0iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgaW50IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKGNvbnN0IFJlZ3Vs
YXJFeHByZXNzaW9uJiByZWdleCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQoreworICAgIGludCBy
ZXN1bHQgPSAwOworICAgIGludCBwb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBzdGFydCA9IDA7Cisg
ICAgaW50IG1hdGNoTGVuZ3RoOworICAgIHdoaWxlIChzdGFydCA8IGNvbnRlbnQubGVuZ3RoKCkg
JiYgKHBvc2l0aW9uID0gcmVnZXgubWF0Y2goY29udGVudCwgc3RhcnQsICZtYXRjaExlbmd0aCkp
ICE9IC0xKSB7CisgICAgICAgIGlmIChtYXRjaExlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jl
c3VsdDsKKyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbiArIDE7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmpl
Y3RGb3JTZWFyY2hNYXRjaChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJs
LCBpbnQgbWF0Y2hlcykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlk
IiwgZnJhbWVJZCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CisgICAgcmVz
dWx0LT5zZXROdW1iZXIoIm1hdGNoZXMiLCBtYXRjaGVzKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qg
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIG9iamVjdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgIGJvb2wgaXNS
ZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKKyAgICBT
dHJpbmcgcmVnZXhTb3VyY2UgPSBpc1JlZ2V4ID8gdGV4dCA6IGNyZWF0ZVNlYXJjaFJlZ2V4U291
cmNlKHRleHQpOworCisgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOworICAgIFJlZ3VsYXJFeHByZXNz
aW9uIHJlZ2V4KHJlZ2V4U291cmNlLCBjYXNlU2Vuc2l0aXZlID8gVGV4dENhc2VTZW5zaXRpdmUg
OiBUZXh0Q2FzZUluc2Vuc2l0aXZlKTsKKworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0
KG1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CisgICAgICAg
IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CisgICAgICAgIFN0cmluZyBjb250ZW50OworICAg
ICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQu
Z2V0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJjZSkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9y
UGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2U6CisgICAgICAgICAgICBjYXNlIEluc3BlY3Rv
clBhZ2VBZ2VudDo6U2NyaXB0UmVzb3VyY2U6CisgICAgICAgICAgICAgICAgaWYgKGRlY29kZUNh
Y2hlZFJlc291cmNlKGNhY2hlZFJlc291cmNlLCAmY29udGVudCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IG1hdGNoZXMgPSBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwg
Y29udGVudCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LT5wdXNoVmFsdWUoYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChm
cmFtZUlkKGZyYW1lKSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzKSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoZGVjb2RlTWFpblJlc291cmNlKGZyYW1lLCAmY29udGVudCkpIHsKKyAgICAgICAgICAg
IGludCBtYXRjaGVzID0gY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMocmVnZXgsIGNvbnRl
bnQpOworICAgICAgICAgICAgaWYgKG1hdGNoZXMpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5w
dXNoVmFsdWUoYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChmcmFtZUlkKGZyYW1lKSwgZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLCBtYXRjaGVzKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAq
b2JqZWN0ID0gcmVzdWx0OworfQorCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVu
dEV2ZW50RmlyZWQoKQogewogICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChj
dXJyZW50VGltZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuaAppbmRleCAwNWFlNTdiLi5kMTNlYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEluc3Bl
Y3Rvck9iamVjdDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwogY2xh
c3MgUGFnZTsKK2NsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogCiB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIApAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb29r
aWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYg
ZG9tYWluKTsKICAgICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+Kik7CiAgICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29s
KiBjb25zdCBiYXNlNjRFbmNvZGUsIFN0cmluZyogY29udGVudCk7CisgICAgdm9pZCBzZWFyY2hJ
blJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0
IGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IGlzUmVnZXgsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKICAgICB2
b2lkIGRpZENvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKaW5kZXggNTYzOWZi
OC4uOGZiNTBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0zOTEsNiArMzkxLDkgQEAgV2ViSW5zcGVjdG9yLlJl
c291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfc2hvd1Jlc291cmNlVmlldzogZnVuY3Rp
b24ocmVzb3VyY2UpCiAgICAgewogICAgICAgICB2YXIgdmlldyA9IFdlYkluc3BlY3Rvci5SZXNv
dXJjZVZpZXcucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICAvLyBG
SVhNRTogVGhpcyBjb3VsZCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCBjYWNoaW5nIFNvdXJjZUZy
YW1lcy4gICAgICAgIAorICAgICAgICBpZiAodmlldy5zZWFyY2hDYW5jZWxlZCkKKyAgICAgICAg
ICAgIHZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKICAgICAgICAgdGhpcy5fZmV0Y2hBbmRBcHBseURp
ZmZNYXJrdXAodmlldywgcmVzb3VyY2UpOwogICAgICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHZp
ZXcpOwogICAgIH0sCkBAIC02OTcsMjUgKzcwMCwxMjYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICB9LAogCi0g
ICAgZ2V0IHNlYXJjaGFibGVWaWV3cygpCisgICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVl
cnkpIAogICAgIHsKLSAgICAgICAgdmFyIHZpZXdzID0gW107CisgICAgICAgIHRoaXMuc2VhcmNo
Q2FuY2VsZWQoKTsKKyAgICAgICAgdmFyIHJlZ2V4ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAgICAgdmFyIHRvdGFsU2VhcmNoTWF0Y2hl
cyA9IDA7CiAKLSAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3Owot
ICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCkKLSAg
ICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICBmdW5jdGlvbiBzZWFy
Y2hJbkVkaXRlZFJlc291cmNlKHRyZWVFbGVtZW50KQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgcmVzb3VyY2UgPSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAgICAgICAg
IGlmIChyZXNvdXJjZS5oaXN0b3J5Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHZhciBtYXRjaGVzID0gY291bnRSZWdleE1hdGNoZXMocmVnZXgsIHJl
c291cmNlLmNvbnRlbnQpCisgICAgICAgICAgICB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaEZvdW5k
KG1hdGNoZXMpOworICAgICAgICAgICAgdG90YWxTZWFyY2hNYXRjaGVzICs9IG1hdGNoZXM7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgcmVzdWx0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgdG90YWxTZWFyY2hNYXRjaGVzID0gMDsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVzdWx0W2ldOworICAgICAgICAgICAgICAgIHZhciBm
cmFtZVRyZWVFbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW21hdGNoLmZyYW1l
SWRdOworICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGZyYW1lVHJlZUVsZW1lbnQucmVz
b3VyY2VCeVVSTChtYXRjaC51cmwpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmhp
c3RvcnkubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAg
ZWRpdGVkIHJlc291cmNlcy4KKyAgICAgICAgICAgICAgICB0aGlzLl9maW5kVHJlZUVsZW1lbnRG
b3JSZXNvdXJjZShyZXNvdXJjZSkuc2VhcmNoTWF0Y2hGb3VuZChtYXRjaC5tYXRjaGVzKTsKKyAg
ICAgICAgICAgICAgICB0b3RhbFNlYXJjaE1hdGNoZXMgKz0gbWF0Y2gubWF0Y2hlczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBk
YXRlU2VhcmNoTWF0Y2hlc0NvdW50KHRvdGFsU2VhcmNoTWF0Y2hlcywgdGhpcyk7CisgICAgICAg
ICAgICB0aGlzLl9zZWFyY2hDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJjZXNT
ZWFyY2hDb250cm9sbGVyKHRoaXMucmVzb3VyY2VzTGlzdFRyZWVFbGVtZW50KTsKKworICAgICAg
ICAgICAgaWYgKHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudCAmJiB0aGlzLnNp
ZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlcykKKyAgICAgICAgICAg
ICAgICB0aGlzLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHMoc2VhcmNoSW5FZGl0ZWRS
ZXNvdXJjZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgUGFnZUFnZW50LnNlYXJjaEluUmVzb3VyY2Vz
KHJlZ2V4LnNvdXJjZSwgIXJlZ2V4Lmlnbm9yZUNhc2UsIHRydWUsIGNhbGxiYWNrLmJpbmQodGhp
cykpOyAgICAgICAgICAgIAorICAgIH0sCisgICAgCisgICAgX2Vuc3VyZVZpZXdTZWFyY2hQZXJm
b3JtZWQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gdmlld1Nl
YXJjaFBlcmZvcm1lZENhbGxiYWNrKHNlYXJjaElkKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoc2VhcmNoSWQgIT09IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBTZWFyY2ggaXMgb2Jzb2xldGUuCisgICAgICAgICAgICB0aGlzLl92aWV3U2Vh
cmNoSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVlLnNl
bGVjdGVkVHJlZUVsZW1lbnQ7CisgICAgICAgIGlmIChjdXJyZW50VHJlZUVsZW1lbnQgIT09IHRo
aXMuX2xhc3RTZWFyY2hSZXN1bHRUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgdGhpcy5fbGFz
dFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFdlIGdpdmUgaWQgdG8gZWFjaCBzZWFyY2gsIHNvIHRoYXQgd2UgY2FuIHNr
aXAgY2FsbGJhY2tzIGZvciBvYnNvbGV0ZSBzZWFyY2hlcy4KKyAgICAgICAgICAgIHRoaXMuX2xh
c3RWaWV3U2VhcmNoSWQgPSB0aGlzLl9sYXN0Vmlld1NlYXJjaElkID8gdGhpcy5fbGFzdFZpZXdT
ZWFyY2hJZCArIDEgOiAwOworICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3Mg
PSB0cnVlOworICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5wZXJmb3JtU2VhcmNoKHRoaXMu
Y3VycmVudFF1ZXJ5LCB2aWV3U2VhcmNoUGVyZm9ybWVkQ2FsbGJhY2suYmluZCh0aGlzLCB0aGlz
Ll9sYXN0Vmlld1NlYXJjaElkKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3ZpZXdTZWFy
Y2hJblByb2dyZXNzKQorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9LAorCisgICAgX3No
b3dTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHNlYXJjaFJlc3VsdCkKKyAgICB7CisgICAgICAgIHRo
aXMuX2xhc3RTZWFyY2hSZXN1bHRJbmRleCA9IHNlYXJjaFJlc3VsdC5pbmRleDsKKworICAgICAg
ICAvLyBBdCBmaXJzdCBzaG93IHZpZXcgZm9yIHRyZWVFbGVtZW50LgorICAgICAgICBpZiAoc2Vh
cmNoUmVzdWx0LnRyZWVFbGVtZW50ICE9PSB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuc2hvd1Jlc291cmNlKHRyZWVFbGVtZW50LnJlcHJl
c2VudGVkT2JqZWN0KTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVy
LmZvY3VzU2VhcmNoRmllbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rp
b24gY2FsbGJhY2soc2VhcmNoSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnNp
ZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQgIT09IHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRU
cmVlRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47IC8vIFVzZXIgaGFzIHNlbGVjdGVk
IGFub3RoZXIgdmlldyB3aGlsZSB3ZSB3ZXJlIHNlYXJjaGluZy4KKyAgICAgICAgICAgIGlmICh0
aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXggIT0gLTEpCisgICAgICAgICAgICAgICAgdGhpcy52
aXNpYmxlVmlldy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZW4gcnVuIFNvdXJjZUZyYW1lIHNlYXJjaCBp
ZiBuZWVkZWQgYW5kIGp1bXAgdG8gc2VhcmNoIHJlc3VsdCBpbmRleCB3aGVuIGRvbmUuCisgICAg
ICAgIHRoaXMuX2Vuc3VyZVZpZXdTZWFyY2hQZXJmb3JtZWQoY2FsbGJhY2suYmluZCh0aGlzKSk7
CisgICAgfSwKIAorICAgIHNlYXJjaENhbmNlbGVkOiBmdW5jdGlvbigpCisgICAgewogICAgICAg
ICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQogICAgICAgICB7Ci0gICAg
ICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNvdXJjZTsKLSAg
ICAgICAgICAgIHZhciByZXNvdXJjZVZpZXcgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VWaWV3LnJl
c291cmNlVmlld0ZvclJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJj
ZVZpZXcucGVyZm9ybVNlYXJjaCAmJiByZXNvdXJjZVZpZXcgIT09IHZpc2libGVWaWV3KQotICAg
ICAgICAgICAgICAgIHZpZXdzLnB1c2gocmVzb3VyY2VWaWV3KTsKKyAgICAgICAgICAgIHJlc291
cmNlVHJlZUVsZW1lbnQuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOwogICAgICAgICB9CisKICAgICAg
ICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHMoY2FsbGJhY2spOwotICAgICAgICBy
ZXR1cm4gdmlld3M7CisgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ICYmIHRoaXMudmlzaWJs
ZVZpZXcuc2VhcmNoQ2FuY2VsZWQpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LnNlYXJj
aENhbmNlbGVkKCk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBk
YXRlU2VhcmNoTWF0Y2hlc0NvdW50KDAsIHRoaXMpOworCisgICAgICAgIHRoaXMuX2xhc3RTZWFy
Y2hSZXN1bHRUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2xhc3RTZWFyY2hSZXN1
bHRJbmRleCA9IC0xOworICAgICAgICB0aGlzLl92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNl
OwogICAgIH0sCiAKKyAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgY3VycmVudFRyZWVFbGVtZW50ID0gdGhpcy5zaWRlYmFyVHJlZS5zZWxl
Y3RlZFRyZWVFbGVtZW50OworICAgICAgICB2YXIgbmV4dFNlYXJjaFJlc3VsdCA9IHRoaXMuX3Nl
YXJjaENvbnRyb2xsZXIubmV4dFNlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQpOworICAg
ICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KG5leHRTZWFyY2hSZXN1bHQpOworICAgIH0sCisg
ICAgCisgICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVk
VHJlZUVsZW1lbnQ7CisgICAgICAgIHZhciBwcmV2aW91c1NlYXJjaFJlc3VsdCA9IHRoaXMuX3Nl
YXJjaENvbnRyb2xsZXIucHJldmlvdXNTZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50KTsK
KyAgICAgICAgdGhpcy5fc2hvd1NlYXJjaFJlc3VsdChwcmV2aW91c1NlYXJjaFJlc3VsdCk7Cisg
ICAgfSwKKyAgICAKICAgICBfZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHM6IGZ1bmN0aW9uKGNh
bGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTsKQEAgLTcyNSwxNSArODI5
LDYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
fQogICAgIH0sCiAKLSAgICBzZWFyY2hNYXRjaEZvdW5kOiBmdW5jdGlvbih2aWV3LCBtYXRjaGVz
KQotICAgIHsKLSAgICAgICAgaWYgKCF2aWV3LnJlc291cmNlKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl9maW5kVHJlZUVsZW1lbnRGb3JSZXNv
dXJjZSh2aWV3LnJlc291cmNlKTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50KQotICAgICAgICAg
ICAgdHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hGb3VuZChtYXRjaGVzKTsKLSAgICB9LAotCiAgICAg
X2ZpbmRUcmVlRWxlbWVudEZvclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKICAgICB7CiAg
ICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0b3IoYW5jZXN0b3IsIG9iamVjdCkKQEAgLTc1MSwzMCAr
ODQ2LDYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuc2lkZWJhclRyZWUuZmluZFRyZWVFbGVtZW50KHJlc291cmNlLCBpc0Fu
Y2VzdG9yLCBnZXRQYXJlbnQpOwogICAgIH0sCiAKLSAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rp
b24oc3RhcnRpbmdOZXdTZWFyY2gpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwu
cHJvdG90eXBlLnNlYXJjaENhbmNlbGVkLmNhbGwodGhpcywgc3RhcnRpbmdOZXdTZWFyY2gpOwot
Ci0gICAgICAgIGlmIChzdGFydGluZ05ld1NlYXJjaCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9lcnJvcnNXYXJuaW5nc1VwZGF0ZWQo
KTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50cyhj
YWxsYmFjayk7Ci0gICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5KQot
ICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVudC5fcmVzZXRCdWJibGUoKTsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50cyhjYWxs
YmFjayk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJj
aC5jYWxsKHRoaXMsIHF1ZXJ5KTsKLSAgICB9LAotCiAgICAgc2hvd1ZpZXc6IGZ1bmN0aW9uKHZp
ZXcpCiAgICAgewogICAgICAgICBpZiAodmlldykKQEAgLTkzNSw2ICsxMDA2LDcgQEAgV2ViSW5z
cGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdG9yYWdlUGFuZWwsIGZyYW1lSWQs
IHRpdGxlLCBzdWJ0aXRsZSkKICAgICB0aGlzLnNldFRpdGxlcyh0aXRsZSwgc3VidGl0bGUpOwog
ICAgIHRoaXMuX2NhdGVnb3J5RWxlbWVudHMgPSB7fTsKICAgICB0aGlzLl90cmVlRWxlbWVudEZv
clJlc291cmNlID0ge307CisgICAgdGhpcy5fcmVzb3VyY2VzQnlVUkwgPSB7fTsKIH0KIAogV2Vi
SW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewpAQCAtMTAxMyw2ICsxMDg1
LDcgQEAgV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAg
ICB2YXIgcmVzb3VyY2VUcmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJj
ZVRyZWVFbGVtZW50KHRoaXMuX3N0b3JhZ2VQYW5lbCwgcmVzb3VyY2UpOwogICAgICAgICB0aGlz
Ll9pbnNlcnRJblByZXNlbnRhdGlvbk9yZGVyKGNhdGVnb3J5RWxlbWVudCwgcmVzb3VyY2VUcmVl
RWxlbWVudCk7CiAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX3BvcHVsYXRlUmV2aXNpb25z
KCk7CisgICAgICAgIHRoaXMuX3Jlc291cmNlc0J5VVJMW3Jlc291cmNlLnVybF0gPSByZXNvdXJj
ZTsKIAogICAgICAgICB0aGlzLl90cmVlRWxlbWVudEZvclJlc291cmNlW3Jlc291cmNlLnVybF0g
PSByZXNvdXJjZVRyZWVFbGVtZW50OwogICAgIH0sCkBAIC0xMDIzLDYgKzEwOTYsMTEgQEAgV2Vi
SW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90
cmVlRWxlbWVudEZvclJlc291cmNlID0gW107CiAgICAgfSwKIAorICAgIHJlc291cmNlQnlVUkw6
IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZXNCeVVS
TFt1cmxdOworICAgIH0sCisKICAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24odHJlZUVsZW1lbnQp
CiAgICAgewogICAgICAgICB0aGlzLl9pbnNlcnRJblByZXNlbnRhdGlvbk9yZGVyKHRoaXMsIHRy
ZWVFbGVtZW50KTsKQEAgLTExNjgsMTAgKzEyNDYsMjIgQEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVz
b3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAg
c2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24obWF0Y2hlcykKKyAgICBfcmVzZXRTZWFyY2hSZXN1
bHRzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9yZXNldEJ1YmJsZSgpOworICAg
ICAgICB0aGlzLl9zZWFyY2hNYXRjaGVzID0gMDsKKyAgICB9LAogCisgICAgZ2V0IHNlYXJjaE1h
dGNoZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaE1hdGNoZXM7CisgICAg
fSwKKworICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXMpCisgICAgeworICAg
ICAgICB0aGlzLl9yZXNldFNlYXJjaFJlc3VsdHMoKTsKKworICAgICAgICB0aGlzLl9zZWFyY2hN
YXRjaGVzID0gbWF0Y2hlczsKICAgICAgICAgdGhpcy5fc2V0QnViYmxlVGV4dChtYXRjaGVzKTsK
ICAgICAgICAgdGhpcy5fYnViYmxlRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzZWFyY2gtbWF0Y2hl
cyIpOwogCkBAIC0xNDMzLDMgKzE1MjMsMTEwIEBAIFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdv
cnlWaWV3LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVZp
ZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKKwor
V2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIgPSBmdW5jdGlvbihyb290RWxl
bWVudCkKK3sKKyAgICB0aGlzLl9yb290ID0gcm9vdEVsZW1lbnQ7CisgICAgdGhpcy5fdHJhdmVy
c2VyID0gbmV3IFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2Vy
KHJvb3RFbGVtZW50KTsKKyAgICB0aGlzLl9sYXN0VHJlZUVsZW1lbnQgPSBudWxsOworICAgIHRo
aXMuX2xhc3RJbmRleCA9IC0xOworfQorCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29u
dHJvbGxlci5wcm90b3R5cGUgPSB7CisgICAgbmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oY3Vy
cmVudFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVsZW1lbnQp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRoaXMuX3RyYXZlcnNlci5m
aXJzdCgpLCAwKTsKKworICAgICAgICBpZiAoIWN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRj
aGVzKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJz
ZXIubmV4dChjdXJyZW50VHJlZUVsZW1lbnQpLCAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0
aGlzLl9sYXN0VHJlZUVsZW1lbnQgIT09IGN1cnJlbnRUcmVlRWxlbWVudCB8fCB0aGlzLl9sYXN0
SW5kZXggPT09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdChjdXJy
ZW50VHJlZUVsZW1lbnQsIDApOworCisgICAgICAgIGlmICh0aGlzLl9sYXN0SW5kZXggPT0gY3Vy
cmVudFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXMgLSAxKQorICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIubmV4dChjdXJyZW50VHJlZUVsZW1lbnQp
LCAwKTsKKworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxl
bWVudCwgdGhpcy5fbGFzdEluZGV4ICsgMSk7CisgICAgfSwKKyAgICAKKyAgICBwcmV2aW91c1Nl
YXJjaFJlc3VsdDogZnVuY3Rpb24oY3VycmVudFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAg
aWYgKCFjdXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9
IHRoaXMuX3RyYXZlcnNlci5sYXN0KCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNo
UmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzIC0gMSk7ICAgICAg
ICAgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50VHJlZUVsZW1l
bnQuc2VhcmNoTWF0Y2hlcyAmJiB0aGlzLl9sYXN0VHJlZUVsZW1lbnQgPT09IGN1cnJlbnRUcmVl
RWxlbWVudCAmJiB0aGlzLl9sYXN0SW5kZXggPiAwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQsIHRoaXMuX2xhc3RJbmRleCAtIDEpOwor
ICAgICAgICAgCisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5wcmV2
aW91cyhjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1
bHQodHJlZUVsZW1lbnQsIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXMgLSAxKTsKKyAgICB9LAor
CisgICAgX3NlYXJjaFJlc3VsdDogZnVuY3Rpb24odHJlZUVsZW1lbnQsIGluZGV4KQorICAgIHsK
KyAgICAgICAgdGhpcy5fbGFzdFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgIHRo
aXMuX2xhc3RJbmRleCA9IGluZGV4OworICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVl
RWxlbWVudCwgaW5kZXg6IGluZGV4fTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hS
ZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7Cisg
ICAgdGhpcy5fcm9vdCA9IHJvb3RFbGVtZW50OworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVz
dWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5fcm9vdCk7CisgICAg
fSwKKyAgICAgICAgCisgICAgbGFzdDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKHRoaXMuX3Jvb3QpOyAgICAKKyAgICB9LAor
CisgICAgbmV4dDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZh
ciB0cmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlz
Ll9yb290OworICAgICAgICB9IHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50
ICYmICF0aGlzLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAg
ICByZXR1cm4gdHJlZUVsZW1lbnQ7CisgICAgfSwKKworICAgIHByZXZpb3VzOiBmdW5jdGlvbihz
dGFydFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRU
cmVlRWxlbWVudDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlz
Ll90cmF2ZXJzZVByZXZpb3VzKHRyZWVFbGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQo
KTsKKyAgICAgICAgfSB3aGlsZSAodHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAh
dGhpcy5fZWxlbWVudEhhc1NlYXJjaFJlc3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0
dXJuIHRyZWVFbGVtZW50OworICAgIH0sCisKKyAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0
cmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZU5l
eHRUcmVlRWxlbWVudChmYWxzZSwgdGhpcy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9l
bGVtZW50SGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNv
dXJjZVRyZWVFbGVtZW50ICYmIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXM7CisgICAgfSwKKwor
ICAgIF90cmF2ZXJzZVByZXZpb3VzOiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZVByZXZpb3VzVHJlZUVsZW1lbnQoZmFsc2Us
IHRoaXMuX3Jvb3QsIHRydWUpOworICAgIH0sCisKKyAgICBfbGFzdFRyZWVFbGVtZW50OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl9yb290OworICAg
ICAgICB2YXIgbmV4dFRyZWVFbGVtZW50OyAKKyAgICAgICAgd2hpbGUgKG5leHRUcmVlRWxlbWVu
dCA9IHRoaXMuX3RyYXZlcnNlTmV4dCh0cmVlRWxlbWVudCkpCisgICAgICAgICAgICB0cmVlRWxl
bWVudCA9IG5leHRUcmVlRWxlbWVudDsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OyAgICAg
ICAgCisgICAgfSwKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCmluZGV4IGEyZDYyMzYuLjRmNzdjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNTYsNiArNTYs
MjYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cyA9IHsKICAgICBMb2FkZWQ6ICJs
b2FkZWQiCiB9CiAKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCA9
IGZ1bmN0aW9uKHF1ZXJ5KQoreworICAgIHZhciByZWdleDsKKyAgICAKKyAgICAvLyBGaXJzdCB0
cnkgY3JlYXRpbmcgcmVnZXggaWYgdXNlciBrbm93cyB0aGUgLyAvIGhpbnQuCisgICAgdHJ5IHsK
KyAgICAgICAgaWYgKC9eXC8uKlwvJC8udGVzdChxdWVyeSkpCisgICAgICAgICAgICByZWdleCA9
IG5ldyBSZWdFeHAocXVlcnkuc3Vic3RyaW5nKDEsIHF1ZXJ5Lmxlbmd0aCAtIDEpKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIC8vIFNpbGVudCBjYXRjaC4KKyAgICB9CisKKyAgICAvLyBP
dGhlcndpc2UganVzdCBkbyBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KKyAgICBpZiAoIXJlZ2V4
KSAKKyAgICAgICAgcmVnZXggPSBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgCisgICAg
cmV0dXJuIHJlZ2V4OworfQorCisKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgZ2V0IHZpc2libGUoKQogICAgIHsKQEAgLTM2NywxOCArMzg3LDkgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCA9IC0xOwogICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0
cyA9IFtdOwogCi0gICAgICAgICAgICAvLyBGaXJzdCBkbyBjYXNlLWluc2Vuc2l0aXZlIHNlYXJj
aC4KLSAgICAgICAgICAgIHZhciByZWdleE9iamVjdCA9IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5
KTsKLSAgICAgICAgICAgIHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMocmVnZXhPYmplY3QsIHRo
aXMuX3NlYXJjaFJlc3VsdHMpOwotCi0gICAgICAgICAgICAvLyBUaGVuIHRyeSByZWdleCBzZWFy
Y2ggaWYgdXNlciBrbm93cyB0aGUgLyAvIGhpbnQuCi0gICAgICAgICAgICB0cnkgewotICAgICAg
ICAgICAgICAgIGlmICgvXlwvLipcLyQvLnRlc3QocXVlcnkpKQotICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9jb2xsZWN0UmVnZXhNYXRjaGVzKG5ldyBSZWdFeHAocXVlcnkuc3Vic3RyaW5nKDEs
IHF1ZXJ5Lmxlbmd0aCAtIDEpKSwgdGhpcy5fc2VhcmNoUmVzdWx0cyk7Ci0gICAgICAgICAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2lsZW50IGNhdGNoLgotICAgICAgICAg
ICAgfQotCisgICAgICAgICAgICB2YXIgcmVnZXggPSBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOworICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0
cyA9IHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMocmVnZXgpOworICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYWxsYmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7CiAgICAg
ICAgIH0KIApAQCAtNDAxLDI0ICs0MTIsMjkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5tYXJrQW5kUmV2ZWFsUmFuZ2Uo
bnVsbCk7CiAgICAgfSwKIAorICAgIGhhc1NlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDA7CisgICAgfSwK
KwogICAgIGp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQoMCk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNo
UmVzdWx0KDApOwogICAgIH0sCiAKICAgICBqdW1wVG9MYXN0U2VhcmNoUmVzdWx0OiBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGggLSAxKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhp
cy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKICAgICB9LAogCiAgICAganVtcFRvTmV4dFNl
YXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNo
UmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpOworICAgICAgICB0aGlz
Lmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggKyAxKTsK
ICAgICB9LAogCiAgICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXggLSAxKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5f
Y3VycmVudFNlYXJjaFJlc3VsdEluZGV4IC0gMSk7CiAgICAgfSwKIAogICAgIHNob3dpbmdGaXJz
dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQpAQCAtNDMxLDcgKzQ0Nyw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hS
ZXN1bHRzLmxlbmd0aCAmJiB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09ICh0aGlz
Ll9zZWFyY2hSZXN1bHRzLmxlbmd0aCAtIDEpOwogICAgIH0sCiAKLSAgICBfanVtcFRvU2VhcmNo
UmVzdWx0OiBmdW5jdGlvbihpbmRleCkKKyAgICBqdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9u
KGluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZCB8fCAhdGhpcy5fc2VhcmNo
UmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MzksMTkgKzQ1NSwyMCBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZSh0aGlzLl9zZWFyY2hSZXN1bHRzW3RoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleF0pOwogICAgIH0sCiAKLSAgICBfY29sbGVjdFJlZ2V4TWF0
Y2hlczogZnVuY3Rpb24ocmVnZXhPYmplY3QsIHJhbmdlcykKKyAgICBfY29sbGVjdFJlZ2V4TWF0
Y2hlczogZnVuY3Rpb24ocmVnZXhPYmplY3QpCiAgICAgeworICAgICAgICB2YXIgcmFuZ2VzID0g
W107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291
bnQ7ICsraSkgewogICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShp
KTsKICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOwogICAgICAgICAgICAgZG8gewogICAgICAg
ICAgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4T2JqZWN0LmV4ZWMobGluZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzBd
Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgV2ViSW5zcGVj
dG9yLlRleHRSYW5nZShpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCwgaSwgb2Zmc2V0ICsgbWF0Y2gu
aW5kZXggKyBtYXRjaFswXS5sZW5ndGgpKTsKICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9
IG1hdGNoLmluZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3Ry
aW5nKG1hdGNoLmluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3
aGlsZSAobWF0Y2gpCisgICAgICAgICAgICB9IHdoaWxlIChtYXRjaCAmJiBsaW5lKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDY0YTdhOWYuLmQzOGYxMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpz
CkBAIC0xMDQwLDMgKzEwNDAsMTYgQEAgZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnks
IGV4dHJhRmxhZ3MpCiAgICAgfQogICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4LCAiaSIgKyAo
ZXh0cmFGbGFncyB8fCAiIikpOwogfQorCitmdW5jdGlvbiBjb3VudFJlZ2V4TWF0Y2hlcyhyZWdl
eCwgY29udGVudCkKK3sKKyAgICB2YXIgdGV4dCA9IGNvbnRlbnQ7CisgICAgdmFyIHJlc3VsdCA9
IDA7CisgICAgdmFyIG1hdGNoOworICAgIHdoaWxlICh0ZXh0ICYmIChtYXRjaCA9IHJlZ2V4LmV4
ZWModGV4dCkpKSB7CisgICAgICAgIGlmIChtYXRjaFswXS5sZW5ndGggPiAwKQorICAgICAgICAg
ICAgKytyZXN1bHQ7CisgICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCAr
IDEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91495</attachid>
            <date>2011-04-28 08:28:10 -0700</date>
            <delta_ts>2011-04-28 08:49:29 -0700</delta_ts>
            <desc>Patch + matchesCount renaming + fixes</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>30232</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMTM4NmE1Li45Y2JjMGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTEtMDQtMjggIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Y291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JTZWFyY2hNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3No
b3dSZXNvdXJjZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5wZXJmb3JtU2VhcmNoLnNlYXJjaEluRWRpdGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLl9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQuY2FsbGJhY2spOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fc2hvd1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNl
YXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VzUGFuZWwucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5hcHBlbmRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUucmVzb3VyY2VCeVVSTCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5f
cmVzZXRTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNl
VHJlZUVsZW1lbnQucHJvdG90eXBlLmdldCBzZWFyY2hNYXRjaGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlYXJjaE1hdGNoRm91
bmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90eXBl
Lm5leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJj
aENvbnRyb2xsZXIucHJvdG90eXBlLnByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5fc2VhcmNoUmVz
dWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJh
dmVyc2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRz
VHJhdmVyc2VyLnByb3RvdHlwZS5maXJzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNo
UmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUubGFzdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUu
bmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1Ry
YXZlcnNlci5wcm90b3R5cGUucHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJj
aFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl90cmF2ZXJzZU5leHQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIu
cHJvdG90eXBlLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX3RyYXZlcnNl
UHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVu
dHNUcmF2ZXJzZXIucHJvdG90eXBlLl9sYXN0VHJlZUVsZW1lbnQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvRmluZFNlYXJjaE1hdGNoZXMpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuaGFzU2VhcmNoUmVz
dWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBU
b0ZpcnN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9QcmV2aW91c1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBU
b1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlLl9jb2xsZWN0UmVnZXhNYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qczoKKyAgICAgICAgKCk6CisKIDIwMTEtMDQtMjggIE1pa2hhaWwgTmFnYW5v
diAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNl
bWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IGM2
MGIyYTYuLmQzNzMzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
QEAgLTk2LDYgKzk2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgImlkIjogIlNlYXJjaFJlc3VsdCIsCisgICAgICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2VhcmNoIHJl
c3VsdCBmb3IgcmVzb3VyY2UuIiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKwkg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJmcmFtZUlkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIGZy
YW1lIGlkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaGVzQ291bnQi
LCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIG1hdGNoZXMgaW4g
cmVzb3VyY2UgY29udGVudC4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAg
ICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKQEAgLTE1Nyw2ICsxNjcsMTggQEAKICAg
ICAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb250ZW50IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIGNv
bnRlbnQuIiB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJzZWFyY2hJblJlc291cmNlcyIsCisgICAgICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNlYXJjaGVzIGZvciBnaXZlbiBzdHJpbmcgaW4gZnJh
bWUgLyByZXNvdXJjZSB0cmVlIHN0cnVjdHVyZS4iLAorICAgICAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHRvIHNlYXJjaCBmb3IuIiAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYXNlU2Vuc2l0aXZlIiwgInR5cGUiOiAiYm9vbGVh
biIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0cnVlLCBzZWFyY2ggaXMg
Y2FzZSBzZW5zaXRpdmUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzUmVn
ZXgiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjog
IklmIHRydWUsIHRyZWF0cyBzdHJpbmcgcGFyYW1ldGVyIGFzIHJlZ2V4LiIgfQorICAgICAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVm
IjogIlNlYXJjaFJlc3VsdCIgfSwgImRlc2NyaXB0aW9uIjogIkxpc3Qgb2Ygc2VhcmNoIHJlc3Vs
dHMuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAgICAgICBdLAogICAg
ICAgICAiZXZlbnRzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCA2Njc1YzIyLi5iNmE1MDFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNTMsNiArNTMsNyBAQAog
I2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlRleHRFbmNvZGluZy5oIgpAQCAtMTI4LDYgKzEyOSwxMyBAQCBzdGF0aWMgYm9vbCBkZWNv
ZGVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyog
cmVzdWx0KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGJvb2wgZGVjb2RlTWFpblJl
c291cmNlKEZyYW1lKiBmcmFtZSwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgU3RyaW5nIHRleHRF
bmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpOworICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOworICAgIHJldHVybiBkZWNvZGVTaGFyZWRCdWZmZXIo
YnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOworfQorCiBQYXNzT3duUHRyPEluc3Bl
Y3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFnZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgUGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJ
bnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgcGFnZSwgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKSk7CkBAIC0xNDQsMTEgKzE1Miw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUs
CiAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRl
cigpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKICAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIGxv
YWRlci0+dXJsKCkpKSB7Ci0gICAgICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gZnJhbWUt
PmRvY3VtZW50KCktPmlucHV0RW5jb2RpbmcoKTsKLSAgICAgICAgYnVmZmVyID0gZnJhbWVMb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEoKTsKLSAgICAgICAgc3VjY2Vz
cyA9IGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7
Ci0gICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgbG9h
ZGVyLT51cmwoKSkpCisgICAgICAgIHN1Y2Nlc3MgPSBkZWNvZGVNYWluUmVzb3VyY2UoZnJhbWUs
IHJlc3VsdCk7CiAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBzdWNjZXNzID0gZGVjb2RlQ2Fj
aGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UoZnJhbWUsIHVybCksIHJlc3VsdCk7CiAKQEAgLTQx
MCw2ICs0MTUsODUgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVu
dChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmkKICAgICAgICAgSW5zcGVjdG9y
UGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKSwgY29udGVudCk7CiB9CiAKK3N0YXRpYyBTdHJpbmcgY3JlYXRlU2Vh
cmNoUmVnZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIFN0cmluZyByZXN1bHQ7
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiWyIpOworICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnXScpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXCIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNo
YXJhY3RlcnNbaV0pOworICAgICAgICByZXN1bHQuYXBwZW5kKCJdIik7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0
Y2hlcyhjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpbnQgcG9zaXRpb247CisgICAgdW5zaWdu
ZWQgc3RhcnQgPSAwOworICAgIGludCBtYXRjaExlbmd0aDsKKyAgICB3aGlsZSAoc3RhcnQgPCBj
b250ZW50Lmxlbmd0aCgpICYmIChwb3NpdGlvbiA9IHJlZ2V4Lm1hdGNoKGNvbnRlbnQsIHN0YXJ0
LCAmbWF0Y2hMZW5ndGgpKSAhPSAtMSkgeworICAgICAgICBpZiAobWF0Y2hMZW5ndGggPiAwKQor
ICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAgIHN0YXJ0ID0gcG9zaXRpb24gKyAxOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHVybCk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIG1hdGNo
ZXNDb3VudCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBv
YmplY3QpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAq
b3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7CisgICAgU3RyaW5nIHJlZ2V4U291cmNlID0gaXNSZWdl
eCA/IHRleHQgOiBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZSh0ZXh0KTsKKworICAgIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRp
dmUgOiBmYWxzZTsKKyAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWdleChyZWdleFNvdXJjZSwgY2Fz
ZVNlbnNpdGl2ZSA/IFRleHRDYXNlU2Vuc2l0aXZlIDogVGV4dENhc2VJbnNlbnNpdGl2ZSk7CisK
KyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX3BhZ2UtPm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYg
YWxsUmVzb3VyY2VzID0gZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkt
PmFsbENhY2hlZFJlc291cmNlcygpOworICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9j
dW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgp
OworICAgICAgICBTdHJpbmcgY29udGVudDsKKyAgICAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICAgICAgc3dpdGNo
IChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2FjaGVkUmVzb3VyY2Up
KSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291
cmNlOgorICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNl
OgorICAgICAgICAgICAgICAgIGlmIChkZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNoZWRSZXNvdXJj
ZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBj
b3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtYXRjaGVzQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQtPnB1c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJhbWUpLCBj
YWNoZWRSZXNvdXJjZS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29k
ZU1haW5SZXNvdXJjZShmcmFtZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICBpbnQgbWF0Y2hl
c0NvdW50ID0gY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMocmVnZXgsIGNvbnRlbnQpOwor
ICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1
c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJhbWUpLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgKm9iamVjdCA9IHJlc3VsdDsKK30KKwogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNv
bnRlbnRFdmVudEZpcmVkKCkKIHsKICAgICAgbV9mcm9udGVuZC0+ZG9tQ29udGVudEV2ZW50Rmly
ZWQoY3VycmVudFRpbWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmgKaW5kZXggMDVhZTU3Yi4uZDEzZWI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBJ
bnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgS1VSTDsK
IGNsYXNzIFBhZ2U7CitjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbjsKIAogdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAKQEAgLTg5LDYgKzkwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRl
Q29va2llKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJp
bmcmIGRvbWFpbik7CiAgICAgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiopOwogICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
Ym9vbCogY29uc3QgYmFzZTY0RW5jb2RlLCBTdHJpbmcqIGNvbnRlbnQpOworICAgIHZvaWQgc2Vh
cmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBj
b25zdCBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBpc1JlZ2V4LCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCiAg
ICAgdm9pZCBkaWRDb21taXRMb2FkKGNvbnN0IFN0cmluZyYgdXJsKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4IDU2
MzlmYjguLjM5NWViNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwpAQCAtMzkxLDYgKzM5MSw5IEBAIFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgX3Nob3dSZXNvdXJjZVZpZXc6IGZ1
bmN0aW9uKHJlc291cmNlKQogICAgIHsKICAgICAgICAgdmFyIHZpZXcgPSBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VWaWV3LnJlc291cmNlVmlld0ZvclJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgcmVtb3ZlZCBvbmNlIHdlIHN0b3AgY2FjaGluZyBTb3Vy
Y2VGcmFtZXMuICAgICAgICAKKyAgICAgICAgaWYgKHZpZXcuc2VhcmNoQ2FuY2VsZWQpCisgICAg
ICAgICAgICB2aWV3LnNlYXJjaENhbmNlbGVkKCk7CiAgICAgICAgIHRoaXMuX2ZldGNoQW5kQXBw
bHlEaWZmTWFya3VwKHZpZXcsIHJlc291cmNlKTsKICAgICAgICAgdGhpcy5faW5uZXJTaG93Vmll
dyh2aWV3KTsKICAgICB9LApAQCAtNjk3LDI1ICs3MDAsMTI1IEBAIFdlYkluc3BlY3Rvci5SZXNv
dXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgfSwK
IAotICAgIGdldCBzZWFyY2hhYmxlVmlld3MoKQorICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9u
KHF1ZXJ5KSAKICAgICB7Ci0gICAgICAgIHZhciB2aWV3cyA9IFtdOworICAgICAgICB0aGlzLnNl
YXJjaENhbmNlbGVkKCk7CisgICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5jcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgICAgIHZhciB0b3RhbE1hdGNoZXND
b3VudCA9IDA7CiAKLSAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3
OwotICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCkK
LSAgICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICBmdW5jdGlvbiBz
ZWFyY2hJbkVkaXRlZFJlc291cmNlKHRyZWVFbGVtZW50KQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgcmVzb3VyY2UgPSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAgICAg
ICAgIGlmIChyZXNvdXJjZS5oaXN0b3J5Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHZhciBtYXRjaGVzQ291bnQgPSBjb3VudFJlZ2V4TWF0Y2hlcyhy
ZWdleCwgcmVzb3VyY2UuY29udGVudCkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50LnNlYXJjaE1h
dGNoZXNGb3VuZChtYXRjaGVzQ291bnQpOworICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291bnQg
Kz0gbWF0Y2hlc0NvdW50OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2so
ZXJyb3IsIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgc2VhcmNo
UmVzdWx0ID0gcmVzdWx0W2ldOworICAgICAgICAgICAgICAgIHZhciBmcmFtZVRyZWVFbGVtZW50
ID0gdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFtZUlkW3NlYXJjaFJlc3VsdC5mcmFtZUlkXTsKKyAg
ICAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBmcmFtZVRyZWVFbGVtZW50LnJlc291cmNlQnlV
Ukwoc2VhcmNoUmVzdWx0LnVybCk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuaGlz
dG9yeS5sZW5ndGggPiAwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBl
ZGl0ZWQgcmVzb3VyY2VzLgorICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRUcmVlRWxlbWVudEZv
clJlc291cmNlKHJlc291cmNlKS5zZWFyY2hNYXRjaGVzRm91bmQoc2VhcmNoUmVzdWx0Lm1hdGNo
ZXNDb3VudCk7CisgICAgICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291bnQgKz0gc2VhcmNoUmVz
dWx0Lm1hdGNoZXNDb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KHRvdGFsTWF0Y2hl
c0NvdW50LCB0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuX3NlYXJjaENvbnRyb2xsZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIodGhpcy5yZXNvdXJjZXNMaXN0
VHJlZUVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAodGhpcy5zaWRlYmFyVHJlZS5zZWxlY3Rl
ZFRyZWVFbGVtZW50ICYmIHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudC5zZWFy
Y2hNYXRjaGVzQ291bnQpCisgICAgICAgICAgICAgICAgdGhpcy5qdW1wVG9OZXh0U2VhcmNoUmVz
dWx0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNl
VHJlZUVsZW1lbnRzKHNlYXJjaEluRWRpdGVkUmVzb3VyY2UuYmluZCh0aGlzKSk7CisgICAgICAg
IFBhZ2VBZ2VudC5zZWFyY2hJblJlc291cmNlcyhyZWdleC5zb3VyY2UsICFyZWdleC5pZ25vcmVD
YXNlLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsgICAgICAgICAgICAKKyAgICB9LAorICAg
IAorICAgIF9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkOiBmdW5jdGlvbihjYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIGZ1bmN0aW9uIHZpZXdTZWFyY2hQZXJmb3JtZWRDYWxsYmFjayhzZWFyY2hJ
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNlYXJjaElkICE9PSB0aGlzLl9sYXN0Vmll
d1NlYXJjaElkKQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8gU2VhcmNoIGlzIG9ic29sZXRl
LgorICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY3VycmVudFRyZWVF
bGVtZW50ID0gdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50OworICAgICAgICBp
ZiAoY3VycmVudFRyZWVFbGVtZW50ICE9PSB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1l
bnQgfHwgKCF0aGlzLnZpc2libGVWaWV3Lmhhc1NlYXJjaFJlc3VsdHMoKSAmJiAhdGhpcy5fdmll
d1NlYXJjaEluUHJvZ3Jlc3MpKSB7CisgICAgICAgICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0
VHJlZUVsZW1lbnQgPSBjdXJyZW50VHJlZUVsZW1lbnQ7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFdlIGdpdmUgaWQgdG8gZWFjaCBzZWFyY2gsIHNvIHRoYXQgd2UgY2FuIHNraXAgY2Fs
bGJhY2tzIGZvciBvYnNvbGV0ZSBzZWFyY2hlcy4KKyAgICAgICAgICAgIHRoaXMuX2xhc3RWaWV3
U2VhcmNoSWQgPSB0aGlzLl9sYXN0Vmlld1NlYXJjaElkID8gdGhpcy5fbGFzdFZpZXdTZWFyY2hJ
ZCArIDEgOiAwOworICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MgPSB0cnVl
OworICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5wZXJmb3JtU2VhcmNoKHRoaXMuY3VycmVu
dFF1ZXJ5LCB2aWV3U2VhcmNoUGVyZm9ybWVkQ2FsbGJhY2suYmluZCh0aGlzLCB0aGlzLl9sYXN0
Vmlld1NlYXJjaElkKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX3ZpZXdTZWFyY2hJblBy
b2dyZXNzKQorICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9LAorCisgICAgX3Nob3dTZWFy
Y2hSZXN1bHQ6IGZ1bmN0aW9uKHNlYXJjaFJlc3VsdCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xh
c3RTZWFyY2hSZXN1bHRJbmRleCA9IHNlYXJjaFJlc3VsdC5pbmRleDsKKworICAgICAgICAvLyBB
dCBmaXJzdCBzaG93IHZpZXcgZm9yIHRyZWVFbGVtZW50LgorICAgICAgICBpZiAoc2VhcmNoUmVz
dWx0LnRyZWVFbGVtZW50ICE9PSB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQp
IHsKKyAgICAgICAgICAgIHRoaXMuc2hvd1Jlc291cmNlKHNlYXJjaFJlc3VsdC50cmVlRWxlbWVu
dC5yZXByZXNlbnRlZE9iamVjdCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29u
dHJvbGxlci5mb2N1c1NlYXJjaEZpZWxkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKHNlYXJjaElkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
dGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50ICE9PSB0aGlzLl9sYXN0U2VhcmNo
UmVzdWx0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBVc2VyIGhhcyBz
ZWxlY3RlZCBhbm90aGVyIHZpZXcgd2hpbGUgd2Ugd2VyZSBzZWFyY2hpbmcuCisgICAgICAgICAg
ICBpZiAodGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4ICE9IC0xKQorICAgICAgICAgICAgICAg
IHRoaXMudmlzaWJsZVZpZXcuanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2xhc3RTZWFyY2hSZXN1
bHRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVuIHJ1biBTb3VyY2VGcmFtZSBz
ZWFyY2ggaWYgbmVlZGVkIGFuZCBqdW1wIHRvIHNlYXJjaCByZXN1bHQgaW5kZXggd2hlbiBkb25l
LgorICAgICAgICB0aGlzLl9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkKGNhbGxiYWNrLmJpbmQo
dGhpcykpOworICAgIH0sCiAKKyAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQorICAgIHsK
ICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKICAgICAgICAg
ewotICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVzb3VyY2VUcmVlRWxlbWVudC5fcmVzb3Vy
Y2U7Ci0gICAgICAgICAgICB2YXIgcmVzb3VyY2VWaWV3ID0gV2ViSW5zcGVjdG9yLlJlc291cmNl
Vmlldy5yZXNvdXJjZVZpZXdGb3JSZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAo
cmVzb3VyY2VWaWV3LnBlcmZvcm1TZWFyY2ggJiYgcmVzb3VyY2VWaWV3ICE9PSB2aXNpYmxlVmll
dykKLSAgICAgICAgICAgICAgICB2aWV3cy5wdXNoKHJlc291cmNlVmlldyk7CisgICAgICAgICAg
ICByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNldFNlYXJjaFJlc3VsdHMoKTsKICAgICAgICAgfQor
CiAgICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrKTsKLSAg
ICAgICAgcmV0dXJuIHZpZXdzOworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyAmJiB0aGlz
LnZpc2libGVWaWV3LnNlYXJjaENhbmNlbGVkKQorICAgICAgICAgICAgdGhpcy52aXNpYmxlVmll
dy5zZWFyY2hDYW5jZWxlZCgpOworCisgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9s
bGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKKworICAgICAgICB0aGlzLl9s
YXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLl9sYXN0U2Vh
cmNoUmVzdWx0SW5kZXggPSAtMTsKKyAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3Mg
PSBmYWxzZTsKICAgICB9LAogCisgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVudCA9IHRoaXMuc2lkZWJhclRy
ZWUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgdmFyIG5leHRTZWFyY2hSZXN1bHQgPSB0
aGlzLl9zZWFyY2hDb250cm9sbGVyLm5leHRTZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50
KTsKKyAgICAgICAgdGhpcy5fc2hvd1NlYXJjaFJlc3VsdChuZXh0U2VhcmNoUmVzdWx0KTsKKyAg
ICB9LAorICAgIAorICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgY3VycmVudFRyZWVFbGVtZW50ID0gdGhpcy5zaWRlYmFyVHJlZS5z
ZWxlY3RlZFRyZWVFbGVtZW50OworICAgICAgICB2YXIgcHJldmlvdXNTZWFyY2hSZXN1bHQgPSB0
aGlzLl9zZWFyY2hDb250cm9sbGVyLnByZXZpb3VzU2VhcmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxl
bWVudCk7CisgICAgICAgIHRoaXMuX3Nob3dTZWFyY2hSZXN1bHQocHJldmlvdXNTZWFyY2hSZXN1
bHQpOworICAgIH0sCisgICAgCiAgICAgX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzOiBmdW5j
dGlvbihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBzdG9wID0gZmFsc2U7CkBAIC03MjUs
MTUgKzgyOCw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgc2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24odmlldywg
bWF0Y2hlcykKLSAgICB7Ci0gICAgICAgIGlmICghdmlldy5yZXNvdXJjZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fZmluZFRyZWVFbGVtZW50
Rm9yUmVzb3VyY2Uodmlldy5yZXNvdXJjZSk7Ci0gICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAg
ICAgICAgICAgIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoRm91bmQobWF0Y2hlcyk7Ci0gICAgfSwK
LQogICAgIF9maW5kVHJlZUVsZW1lbnRGb3JSZXNvdXJjZTogZnVuY3Rpb24ocmVzb3VyY2UpCiAg
ICAgewogICAgICAgICBmdW5jdGlvbiBpc0FuY2VzdG9yKGFuY2VzdG9yLCBvYmplY3QpCkBAIC03
NTEsMzAgKzg0NSw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0aGlzLnNpZGViYXJUcmVlLmZpbmRUcmVlRWxlbWVudChyZXNvdXJj
ZSwgaXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKICAgICB9LAogCi0gICAgc2VhcmNoQ2FuY2VsZWQ6
IGZ1bmN0aW9uKHN0YXJ0aW5nTmV3U2VhcmNoKQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LlBhbmVsLnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZC5jYWxsKHRoaXMsIHN0YXJ0aW5nTmV3U2Vh
cmNoKTsKLQotICAgICAgICBpZiAoc3RhcnRpbmdOZXdTZWFyY2gpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVudC5fZXJyb3JzV2FybmluZ3NV
cGRhdGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxl
bWVudHMoY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihx
dWVyeSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1l
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX3Jlc2V0QnVi
YmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVu
dHMoY2FsbGJhY2spOwotICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLnBlcmZv
cm1TZWFyY2guY2FsbCh0aGlzLCBxdWVyeSk7Ci0gICAgfSwKLQogICAgIHNob3dWaWV3OiBmdW5j
dGlvbih2aWV3KQogICAgIHsKICAgICAgICAgaWYgKHZpZXcpCkBAIC05MzUsNiArMTAwNSw3IEBA
IFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50ID0gZnVuY3Rpb24oc3RvcmFnZVBhbmVsLCBm
cmFtZUlkLCB0aXRsZSwgc3VidGl0bGUpCiAgICAgdGhpcy5zZXRUaXRsZXModGl0bGUsIHN1YnRp
dGxlKTsKICAgICB0aGlzLl9jYXRlZ29yeUVsZW1lbnRzID0ge307CiAgICAgdGhpcy5fdHJlZUVs
ZW1lbnRGb3JSZXNvdXJjZSA9IHt9OworICAgIHRoaXMuX3Jlc291cmNlc0J5VVJMID0ge307CiB9
CiAKIFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKQEAgLTEwMTMs
NiArMTA4NCw3IEBAIFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIHJlc291cmNlVHJlZUVsZW1lbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkZyYW1l
UmVzb3VyY2VUcmVlRWxlbWVudCh0aGlzLl9zdG9yYWdlUGFuZWwsIHJlc291cmNlKTsKICAgICAg
ICAgdGhpcy5faW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcihjYXRlZ29yeUVsZW1lbnQsIHJlc291
cmNlVHJlZUVsZW1lbnQpOwogICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9wb3B1bGF0ZVJl
dmlzaW9ucygpOworICAgICAgICB0aGlzLl9yZXNvdXJjZXNCeVVSTFtyZXNvdXJjZS51cmxdID0g
cmVzb3VyY2U7CiAKICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZVtyZXNvdXJj
ZS51cmxdID0gcmVzb3VyY2VUcmVlRWxlbWVudDsKICAgICB9LApAQCAtMTAyMyw2ICsxMDk1LDEx
IEBAIFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZSA9IFtdOwogICAgIH0sCiAKKyAgICByZXNvdXJj
ZUJ5VVJMOiBmdW5jdGlvbih1cmwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3Vy
Y2VzQnlVUkxbdXJsXTsKKyAgICB9LAorCiAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKHRyZWVF
bGVtZW50KQogICAgIHsKICAgICAgICAgdGhpcy5faW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcih0
aGlzLCB0cmVlRWxlbWVudCk7CkBAIC0xMTY4LDExICsxMjQ1LDIzIEBAIFdlYkluc3BlY3Rvci5G
cmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwK
IAotICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXMpCisgICAgX3Jlc2V0U2Vh
cmNoUmVzdWx0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzZXRCdWJibGUo
KTsKKyAgICAgICAgdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50ID0gMDsKKyAgICB9LAogCi0gICAg
ICAgIHRoaXMuX3NldEJ1YmJsZVRleHQobWF0Y2hlcyk7CisgICAgZ2V0IHNlYXJjaE1hdGNoZXND
b3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50Owor
ICAgIH0sCisKKyAgICBzZWFyY2hNYXRjaGVzRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXNDb3VudCkK
KyAgICB7CisgICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOworCisgICAgICAgIHRo
aXMuX3NlYXJjaE1hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3VudDsKKyAgICAgICAgdGhpcy5fc2V0
QnViYmxlVGV4dChtYXRjaGVzQ291bnQpOwogICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoInNlYXJjaC1tYXRjaGVzIik7CiAKICAgICAgICAgLy8gRXhwYW5kLCBkbyBu
b3Qgc2Nyb2xsIGludG8gdmlldy4KQEAgLTE0MzMsMyArMTUyMiwxMTAgQEAgV2ViSW5zcGVjdG9y
LlN0b3JhZ2VDYXRlZ29yeVZpZXcucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuU3Rv
cmFnZUNhdGVnb3J5Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlciA9IGZ1
bmN0aW9uKHJvb3RFbGVtZW50KQoreworICAgIHRoaXMuX3Jvb3QgPSByb290RWxlbWVudDsKKyAg
ICB0aGlzLl90cmF2ZXJzZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxl
bWVudHNUcmF2ZXJzZXIocm9vdEVsZW1lbnQpOworICAgIHRoaXMuX2xhc3RUcmVlRWxlbWVudCA9
IG51bGw7CisgICAgdGhpcy5fbGFzdEluZGV4ID0gLTE7Cit9CisKK1dlYkluc3BlY3Rvci5SZXNv
dXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICBuZXh0U2VhcmNoUmVzdWx0
OiBmdW5jdGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWN1cnJl
bnRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhp
cy5fdHJhdmVyc2VyLmZpcnN0KCksIDApOworCisgICAgICAgIGlmICghY3VycmVudFRyZWVFbGVt
ZW50LnNlYXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hS
ZXN1bHQodGhpcy5fdHJhdmVyc2VyLm5leHQoY3VycmVudFRyZWVFbGVtZW50KSwgMCk7CisgICAg
ICAgIAorICAgICAgICBpZiAodGhpcy5fbGFzdFRyZWVFbGVtZW50ICE9PSBjdXJyZW50VHJlZUVs
ZW1lbnQgfHwgdGhpcy5fbGFzdEluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9zZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCAwKTsKKworICAgICAgICBpZiAodGhp
cy5fbGFzdEluZGV4ID09IGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAx
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIu
bmV4dChjdXJyZW50VHJlZUVsZW1lbnQpLCAwKTsKKworICAgICAgICByZXR1cm4gdGhpcy5fc2Vh
cmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCwgdGhpcy5fbGFzdEluZGV4ICsgMSk7CisgICAg
fSwKKyAgICAKKyAgICBwcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oY3VycmVudFRyZWVF
bGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAg
ICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5sYXN0KCk7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVudC5z
ZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgJiYgdGhp
cy5fbGFzdFRyZWVFbGVtZW50ID09PSBjdXJyZW50VHJlZUVsZW1lbnQgJiYgdGhpcy5fbGFzdElu
ZGV4ID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQoY3VycmVudFRy
ZWVFbGVtZW50LCB0aGlzLl9sYXN0SW5kZXggLSAxKTsKKyAgICAgICAgIAorICAgICAgICB2YXIg
dHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZXIucHJldmlvdXMoY3VycmVudFRyZWVFbGVtZW50
KQorICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxl
bWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsKKyAgICB9LAorCisgICAgX3NlYXJjaFJlc3Vs
dDogZnVuY3Rpb24odHJlZUVsZW1lbnQsIGluZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFz
dFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2xhc3RJbmRleCA9IGlu
ZGV4OworICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVlRWxlbWVudCwgaW5kZXg6IGlu
ZGV4fTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRz
VHJhdmVyc2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7CisgICAgdGhpcy5fcm9vdCA9IHJv
b3RFbGVtZW50OworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1Ry
YXZlcnNlci5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5fcm9vdCk7CisgICAgfSwKKyAgICAgICAgCisgICAg
bGFzdDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLnByZXZpb3VzKHRoaXMuX3Jvb3QpOyAgICAKKyAgICB9LAorCisgICAgbmV4dDogZnVuY3Rp
b24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHN0
YXJ0VHJlZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0g
dGhpcy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9yb290OworICAgICAgICB9
IHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYmICF0aGlzLl9lbGVtZW50
SGFzU2VhcmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAgICByZXR1cm4gdHJlZUVsZW1l
bnQ7CisgICAgfSwKKworICAgIHByZXZpb3VzOiBmdW5jdGlvbihzdGFydFRyZWVFbGVtZW50KQor
ICAgIHsKKyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRUcmVlRWxlbWVudDsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZVByZXZpb3Vz
KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQoKTsKKyAgICAgICAgfSB3aGls
ZSAodHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhpcy5fZWxlbWVudEhhc1Nl
YXJjaFJlc3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50Owor
ICAgIH0sCisKKyAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxz
ZSwgdGhpcy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9lbGVtZW50SGFzU2VhcmNoUmVz
dWx0czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gdHJlZUVs
ZW1lbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50ICYm
IHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudDsKKyAgICB9LAorCisgICAgX3RyYXZlcnNl
UHJldmlvdXM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
ZWVFbGVtZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxzZSwgdGhpcy5fcm9vdCwg
dHJ1ZSk7CisgICAgfSwKKworICAgIF9sYXN0VHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3Jvb3Q7CisgICAgICAgIHZhciBuZXh0
VHJlZUVsZW1lbnQ7IAorICAgICAgICB3aGlsZSAobmV4dFRyZWVFbGVtZW50ID0gdGhpcy5fdHJh
dmVyc2VOZXh0KHRyZWVFbGVtZW50KSkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gbmV4dFRy
ZWVFbGVtZW50OworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7ICAgICAgICAKKyAgICB9LAor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUu
anMKaW5kZXggYTJkNjIzNi4uNGY3N2NlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC01Niw2ICs1NiwyNiBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzID0gewogICAgIExvYWRlZDogImxvYWRlZCIKIH0KIAor
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVl
cnkpCit7CisgICAgdmFyIHJlZ2V4OworICAgIAorICAgIC8vIEZpcnN0IHRyeSBjcmVhdGluZyBy
ZWdleCBpZiB1c2VyIGtub3dzIHRoZSAvIC8gaGludC4KKyAgICB0cnkgeworICAgICAgICBpZiAo
L15cLy4qXC8kLy50ZXN0KHF1ZXJ5KSkKKyAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChx
dWVyeS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0gMSkpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgLy8gU2lsZW50IGNhdGNoLgorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSBqdXN0
IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgorICAgIGlmICghcmVnZXgpIAorICAgICAgICBy
ZWdleCA9IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAKKyAgICByZXR1cm4gcmVnZXg7
Cit9CisKKwogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICBnZXQg
dmlzaWJsZSgpCiAgICAgewpAQCAtMzY3LDE4ICszODcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3Vs
dEluZGV4ID0gLTE7CiAgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAKLSAg
ICAgICAgICAgIC8vIEZpcnN0IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgotICAgICAgICAg
ICAgdmFyIHJlZ2V4T2JqZWN0ID0gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOwotICAgICAgICAg
ICAgdGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhyZWdleE9iamVjdCwgdGhpcy5fc2VhcmNoUmVz
dWx0cyk7Ci0KLSAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHJlZ2V4IHNlYXJjaCBpZiB1c2VyIGtu
b3dzIHRoZSAvIC8gaGludC4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYg
KC9eXC8uKlwvJC8udGVzdChxdWVyeSkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxl
Y3RSZWdleE1hdGNoZXMobmV3IFJlZ0V4cChxdWVyeS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3Ro
IC0gMSkpLCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
LSAgICAgICAgICAgICAgICAvLyBTaWxlbnQgY2F0Y2guCi0gICAgICAgICAgICB9Ci0KKyAgICAg
ICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hS
ZWdleChxdWVyeSk7CisgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gdGhpcy5fY29s
bGVjdFJlZ2V4TWF0Y2hlcyhyZWdleCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKICAgICAgICAgfQogCkBAIC00
MDEsMjQgKzQxMiwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShudWxsKTsKICAgICB9
LAogCisgICAgaGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoID4gMDsKKyAgICB9LAorCiAgICAganVtcFRv
Rmlyc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBU
b1NlYXJjaFJlc3VsdCgwKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQoMCk7CiAg
ICAgfSwKIAogICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0g
ICAgICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0
aCAtIDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1
bHRzLmxlbmd0aCAtIDEpOwogICAgIH0sCiAKICAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBm
dW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5f
Y3VycmVudFNlYXJjaFJlc3VsdEluZGV4ICsgMSk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNo
UmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpOwogICAgIH0sCiAKICAg
ICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCAt
IDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXggLSAxKTsKICAgICB9LAogCiAgICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0
OiBmdW5jdGlvbigpCkBAIC00MzEsNyArNDQ3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3Ro
ICYmIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRoaXMuX3NlYXJjaFJlc3Vs
dHMubGVuZ3RoIC0gMSk7CiAgICAgfSwKIAotICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0
aW9uKGluZGV4KQorICAgIGp1bXBUb1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oaW5kZXgpCiAgICAg
ewogICAgICAgICBpZiAoIXRoaXMubG9hZGVkIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0
aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzOSwxOSArNDU1LDIwIEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFy
a0FuZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJl
c3VsdEluZGV4XSk7CiAgICAgfSwKIAotICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlv
bihyZWdleE9iamVjdCwgcmFuZ2VzKQorICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlv
bihyZWdleE9iamVjdCkKICAgICB7CisgICAgICAgIHZhciByYW5nZXMgPSBbXTsKICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKSB7CiAg
ICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpOwogICAgICAgICAg
ICAgdmFyIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgdmFy
IG1hdGNoID0gcmVnZXhPYmplY3QuZXhlYyhsaW5lKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0
Y2gpIHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0ubGVuZ3RoKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdl
KGksIG9mZnNldCArIG1hdGNoLmluZGV4LCBpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNo
WzBdLmxlbmd0aCkpOwogICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWF0Y2guaW5kZXgg
KyAxOwogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcobWF0Y2guaW5k
ZXggKyAxKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlIChtYXRjaCkK
KyAgICAgICAgICAgIH0gd2hpbGUgKG1hdGNoICYmIGxpbmUpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiByYW5nZXM7CiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggNjRhN2E5Zi4uZDM4ZjEyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTEwNDAsMyAr
MTA0MCwxNiBAQCBmdW5jdGlvbiBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwgZXh0cmFGbGFncykK
ICAgICB9CiAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsICJpIiArIChleHRyYUZsYWdzIHx8
ICIiKSk7CiB9CisKK2Z1bmN0aW9uIGNvdW50UmVnZXhNYXRjaGVzKHJlZ2V4LCBjb250ZW50KQor
eworICAgIHZhciB0ZXh0ID0gY29udGVudDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIg
bWF0Y2g7CisgICAgd2hpbGUgKHRleHQgJiYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHsK
KyAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91499</attachid>
            <date>2011-04-28 08:49:29 -0700</date>
            <delta_ts>2011-04-29 07:05:33 -0700</delta_ts>
            <desc>Patch (rebaselined, refactored)</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>29314</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZDY2YWYwLi5hNzkzMWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTEtMDQtMjggIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Y291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JTZWFyY2hNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3No
b3dSZXNvdXJjZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5wZXJmb3JtU2VhcmNoLnNlYXJjaEluRWRpdGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLl9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQuY2FsbGJhY2spOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fc2hvd1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNl
YXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VzUGFuZWwucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5yZXNvdXJjZUJ5VVJM
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90
eXBlLl9yZXNldFNlYXJjaFJlc3VsdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVz
b3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHNlYXJjaE1hdGNoZXNDb3VudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWFy
Y2hNYXRjaGVzRm91bmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xs
ZXIucHJvdG90eXBlLm5leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
c291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLnByZXZpb3VzU2VhcmNoUmVzdWx0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlw
ZS5fc2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJl
ZUVsZW1lbnRzVHJhdmVyc2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5maXJzdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUubGFzdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1Ry
ZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUucHJldmlvdXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl90cmF2
ZXJzZU5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVu
dHNUcmF2ZXJzZXIucHJvdG90eXBlLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5
cGUuX3RyYXZlcnNlUHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3Vs
dHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl9sYXN0VHJlZUVsZW1lbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXgpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvRmluZFNlYXJjaE1h
dGNoZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
aGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9QcmV2
aW91c1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLmp1bXBUb1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLl9jb2xsZWN0UmVnZXhNYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKyAgICAgICAgKCk6CisKIDIwMTEtMDQtMjggIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
aW5kZXggYzYwYjJhNi4uZDM3MzMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbgpAQCAtOTYsNiArOTYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMuIgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiU2VhcmNoUmVzdWx0IiwKKyAgICAgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJT
ZWFyY2ggcmVzdWx0IGZvciByZXNvdXJjZS4iLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworCSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyYW1lSWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgZnJhbWUgaWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNo
ZXNDb3VudCIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgbWF0
Y2hlcyBpbiByZXNvdXJjZSBjb250ZW50LiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAg
ICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwpAQCAtMTU3LDYgKzE2Nywx
OCBAQAogICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbnRlbnQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgY29udGVudC4iIH0KICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNlYXJjaEluUmVzb3VyY2VzIiwK
KyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2VhcmNoZXMgZm9yIGdpdmVuIHN0cmlu
ZyBpbiBmcmFtZSAvIHJlc291cmNlIHRyZWUgc3RydWN0dXJlLiIsCisgICAgICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdG8gc2VhcmNoIGZvci4iICB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhc2VTZW5zaXRpdmUiLCAidHlwZSI6
ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIklmIHRydWUsIHNl
YXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaXNSZWdleCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiSWYgdHJ1ZSwgdHJlYXRzIHN0cmluZyBwYXJhbWV0ZXIgYXMgcmVnZXguIiB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgIiRyZWYiOiAiU2VhcmNoUmVzdWx0IiB9LCAiZGVzY3JpcHRpb24iOiAiTGlzdCBvZiBzZWFy
Y2ggcmVzdWx0cy4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAg
IF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDY2NzVjMjIuLmI2YTUwMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCkBAIC0xMjgsNiArMTI5LDEzIEBAIHN0YXRpYyBi
b29sIGRlY29kZUNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwg
U3RyaW5nKiByZXN1bHQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgYm9vbCBkZWNv
ZGVNYWluUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBTdHJp
bmcgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCk7CisgICAgcmV0dXJuIGRlY29kZVNoYXJl
ZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7Cit9CisKIFBhc3NPd25Q
dHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNj
cmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0TWFuYWdlcikKIHsKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIpKTsKQEAgLTE0NCwxMSArMTUyLDggQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIEZyYW1l
KiBmcmFtZSwKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXItPmRvY3Vt
ZW50TG9hZGVyKCk7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOwogICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVy
KHVybCwgbG9hZGVyLT51cmwoKSkpIHsKLSAgICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRFbmNvZGluZygpOwotICAgICAgICBidWZmZXIgPSBm
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOwotICAgICAg
ICBzdWNjZXNzID0gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwg
cmVzdWx0KTsKLSAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
dXJsLCBsb2FkZXItPnVybCgpKSkKKyAgICAgICAgc3VjY2VzcyA9IGRlY29kZU1haW5SZXNvdXJj
ZShmcmFtZSwgcmVzdWx0KTsKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHN1Y2Nlc3MgPSBk
ZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNoZWRSZXNvdXJjZShmcmFtZSwgdXJsKSwgcmVzdWx0KTsK
IApAQCAtNDEwLDYgKzQxNSw4NSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3Vy
Y2VDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogICAgICAgICBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBjb250ZW50KTsKIH0KIAorc3RhdGljIFN0cmluZyBj
cmVhdGVTZWFyY2hSZWdleFNvdXJjZShjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgU3RyaW5n
IHJlc3VsdDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHQuY2hhcmFjdGVycygp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJbIik7CisgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09
ICddJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxcIik7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQoY2hhcmFjdGVyc1tpXSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIl0iKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNvdW50UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzKGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgY29uc3QgU3RyaW5n
JiBjb250ZW50KQoreworICAgIGludCByZXN1bHQgPSAwOworICAgIGludCBwb3NpdGlvbjsKKyAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CisgICAgaW50IG1hdGNoTGVuZ3RoOworICAgIHdoaWxlIChz
dGFydCA8IGNvbnRlbnQubGVuZ3RoKCkgJiYgKHBvc2l0aW9uID0gcmVnZXgubWF0Y2goY29udGVu
dCwgc3RhcnQsICZtYXRjaExlbmd0aCkpICE9IC0xKSB7CisgICAgICAgIGlmIChtYXRjaExlbmd0
aCA+IDApCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbiAr
IDE7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKKyAgICByZXN1bHQtPnNl
dFN0cmluZygidXJsIiwgdXJsKTsKKyAgICByZXN1bHQtPnNldE51bWJlcigibWF0Y2hlc0NvdW50
IiwgbWF0Y2hlc0NvdW50KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIG9iamVjdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNS
ZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKKyAgICBTdHJpbmcgcmVnZXhTb3VyY2Ug
PSBpc1JlZ2V4ID8gdGV4dCA6IGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKHRleHQpOworCisgICAg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSA6IGZhbHNlOworICAgIFJlZ3VsYXJFeHByZXNzaW9uIHJlZ2V4KHJlZ2V4U291
cmNlLCBjYXNlU2Vuc2l0aXZlID8gVGV4dENhc2VTZW5zaXRpdmUgOiBUZXh0Q2FzZUluc2Vuc2l0
aXZlKTsKKworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fcGFnZS0+bWFpbkZyYW1l
KCkpKSB7CisgICAgICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7CisgICAgICAgIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJj
ZXMuZW5kKCk7CisgICAgICAgIFN0cmluZyBjb250ZW50OworICAgICAgICBmb3IgKENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFs
bFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIENhY2hl
ZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBzd2l0Y2ggKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRS
ZXNvdXJjZSkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNo
ZWV0UmVzb3VyY2U6CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0
UmVzb3VyY2U6CisgICAgICAgICAgICAgICAgaWYgKGRlY29kZUNhY2hlZFJlc291cmNlKGNhY2hl
ZFJlc291cmNlLCAmY29udGVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1hdGNoZXND
b3VudCA9IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKHJlZ2V4LCBjb250ZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC0+cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goZnJhbWVJZChm
cmFtZSksIGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoZGVjb2RlTWFpblJlc291cmNlKGZyYW1lLCAmY29udGVudCkpIHsKKyAgICAgICAgICAgIGlu
dCBtYXRjaGVzQ291bnQgPSBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29u
dGVudCk7CisgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQorICAgICAgICAgICAgICAgIHJl
c3VsdC0+cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goZnJhbWVJZChmcmFtZSks
IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAqb2JqZWN0ID0gcmVzdWx0OworfQorCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQogewogICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50
RXZlbnRGaXJlZChjdXJyZW50VGltZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCAwNWFlNTdiLi5kMTNlYjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01MSw2ICs1MSw3IEBA
IGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNsYXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFz
cyBLVVJMOwogY2xhc3MgUGFnZTsKK2NsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogCiB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAtODksNiArOTAsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNv
bnN0IFN0cmluZyYgZG9tYWluKTsKICAgICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmlu
ZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kik7CiAgICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRl
bnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBib29sKiBjb25zdCBiYXNlNjRFbmNvZGUsIFN0cmluZyogY29udGVudCk7CisgICAg
dm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYsIGNvbnN0
IGJvb2wqIGNvbnN0IGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGNvbnN0IGlzUmVnZXgsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
biBBUEkKICAgICB2b2lkIGRpZENvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMK
aW5kZXggMDFiY2UxMS4uMjRkYzk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0zNzIsNiArMzcyLDkgQEAgV2Vi
SW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfc2hvd1Jlc291cmNl
VmlldzogZnVuY3Rpb24ocmVzb3VyY2UpCiAgICAgewogICAgICAgICB2YXIgdmlldyA9IFdlYklu
c3BlY3Rvci5SZXNvdXJjZVZpZXcucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3VyY2UpOwor
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCBjYWNo
aW5nIFNvdXJjZUZyYW1lcy4gICAgICAgIAorICAgICAgICBpZiAodmlldy5zZWFyY2hDYW5jZWxl
ZCkKKyAgICAgICAgICAgIHZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKICAgICAgICAgdGhpcy5fZmV0
Y2hBbmRBcHBseURpZmZNYXJrdXAodmlldywgcmVzb3VyY2UpOwogICAgICAgICB0aGlzLl9pbm5l
clNob3dWaWV3KHZpZXcpOwogICAgIH0sCkBAIC02NzgsMjUgKzY4MSwxMjUgQEAgV2ViSW5zcGVj
dG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5yZXNpemUoKTsK
ICAgICB9LAogCi0gICAgZ2V0IHNlYXJjaGFibGVWaWV3cygpCisgICAgcGVyZm9ybVNlYXJjaDog
ZnVuY3Rpb24ocXVlcnkpIAogICAgIHsKLSAgICAgICAgdmFyIHZpZXdzID0gW107CisgICAgICAg
IHRoaXMuc2VhcmNoQ2FuY2VsZWQoKTsKKyAgICAgICAgdmFyIHJlZ2V4ID0gV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAgICAgdmFyIHRvdGFs
TWF0Y2hlc0NvdW50ID0gMDsKIAotICAgICAgICBjb25zdCB2aXNpYmxlVmlldyA9IHRoaXMudmlz
aWJsZVZpZXc7Ci0gICAgICAgIGlmICh2aXNpYmxlVmlldyAmJiB2aXNpYmxlVmlldy5wZXJmb3Jt
U2VhcmNoKQotICAgICAgICAgICAgdmlld3MucHVzaCh2aXNpYmxlVmlldyk7CisgICAgICAgIGZ1
bmN0aW9uIHNlYXJjaEluRWRpdGVkUmVzb3VyY2UodHJlZUVsZW1lbnQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhciByZXNvdXJjZSA9IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0Owor
ICAgICAgICAgICAgaWYgKHJlc291cmNlLmhpc3RvcnkubGVuZ3RoID09IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIG1hdGNoZXNDb3VudCA9IGNvdW50UmVnZXhN
YXRjaGVzKHJlZ2V4LCByZXNvdXJjZS5jb250ZW50KQorICAgICAgICAgICAgdHJlZUVsZW1lbnQu
c2VhcmNoTWF0Y2hlc0ZvdW5kKG1hdGNoZXNDb3VudCk7CisgICAgICAgICAgICB0b3RhbE1hdGNo
ZXNDb3VudCArPSBtYXRjaGVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBj
YWxsYmFjayhlcnJvciwgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3Ip
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZh
ciBzZWFyY2hSZXN1bHQgPSByZXN1bHRbaV07CisgICAgICAgICAgICAgICAgdmFyIGZyYW1lVHJl
ZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZvckZyYW1lSWRbc2VhcmNoUmVzdWx0LmZyYW1l
SWRdOworICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGZyYW1lVHJlZUVsZW1lbnQucmVz
b3VyY2VCeVVSTChzZWFyY2hSZXN1bHQudXJsKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXNv
dXJjZS5oaXN0b3J5Lmxlbmd0aCA+IDApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBTa2lwIGVkaXRlZCByZXNvdXJjZXMuCisgICAgICAgICAgICAgICAgdGhpcy5fZmluZFRyZWVF
bGVtZW50Rm9yUmVzb3VyY2UocmVzb3VyY2UpLnNlYXJjaE1hdGNoZXNGb3VuZChzZWFyY2hSZXN1
bHQubWF0Y2hlc0NvdW50KTsKKyAgICAgICAgICAgICAgICB0b3RhbE1hdGNoZXNDb3VudCArPSBz
ZWFyY2hSZXN1bHQubWF0Y2hlc0NvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBX
ZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodG90
YWxNYXRjaGVzQ291bnQsIHRoaXMpOworICAgICAgICAgICAgdGhpcy5fc2VhcmNoQ29udHJvbGxl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlcih0aGlzLnJlc291
cmNlc0xpc3RUcmVlRWxlbWVudCk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNpZGViYXJUcmVl
LnNlbGVjdGVkVHJlZUVsZW1lbnQgJiYgdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVt
ZW50LnNlYXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRT
ZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5fZm9yQWxs
UmVzb3VyY2VUcmVlRWxlbWVudHMoc2VhcmNoSW5FZGl0ZWRSZXNvdXJjZS5iaW5kKHRoaXMpKTsK
KyAgICAgICAgUGFnZUFnZW50LnNlYXJjaEluUmVzb3VyY2VzKHJlZ2V4LnNvdXJjZSwgIXJlZ2V4
Lmlnbm9yZUNhc2UsIHRydWUsIGNhbGxiYWNrLmJpbmQodGhpcykpOyAgICAgICAgICAgIAorICAg
IH0sCisgICAgCisgICAgX2Vuc3VyZVZpZXdTZWFyY2hQZXJmb3JtZWQ6IGZ1bmN0aW9uKGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gdmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNr
KHNlYXJjaElkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMu
X2xhc3RWaWV3U2VhcmNoSWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTZWFyY2ggaXMg
b2Jzb2xldGUuCisgICAgICAgICAgICB0aGlzLl92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNl
OworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhp
cy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxl
Vmlldy5oYXNTZWFyY2hSZXN1bHRzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIGlk
IHRvIGVhY2ggc2VhcmNoLCBzbyB0aGF0IHdlIGNhbiBza2lwIGNhbGxiYWNrcyBmb3Igb2Jzb2xl
dGUgc2VhcmNoZXMuCisgICAgICAgICAgICAgICAgdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCA9IHRo
aXMuX2xhc3RWaWV3U2VhcmNoSWQgPyB0aGlzLl9sYXN0Vmlld1NlYXJjaElkICsgMSA6IDA7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVy
eSwgdmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNrLmJpbmQodGhpcywgdGhpcy5fbGFzdFZpZXdT
ZWFyY2hJZCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc2hvd1NlYXJjaFJlc3VsdDogZnVuY3Rpb24o
c2VhcmNoUmVzdWx0KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4
ID0gc2VhcmNoUmVzdWx0LmluZGV4OworICAgICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJl
ZUVsZW1lbnQgPSBzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQ7CisKKyAgICAgICAgLy8gQXQgZmly
c3Qgc2hvdyB2aWV3IGZvciB0cmVlRWxlbWVudC4KKyAgICAgICAgaWYgKHNlYXJjaFJlc3VsdC50
cmVlRWxlbWVudCAhPT0gdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50KSB7Cisg
ICAgICAgICAgICB0aGlzLnNob3dSZXNvdXJjZShzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQucmVw
cmVzZW50ZWRPYmplY3QpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xs
ZXIuZm9jdXNTZWFyY2hGaWVsZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayhzZWFyY2hJZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMu
c2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhpcy5fbGFzdFNlYXJjaFJlc3Vs
dFRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8gVXNlciBoYXMgc2VsZWN0
ZWQgYW5vdGhlciB2aWV3IHdoaWxlIHdlIHdlcmUgc2VhcmNoaW5nLgorICAgICAgICAgICAgaWYg
KHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgICAgICB0aGlz
LnZpc2libGVWaWV3Lmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5k
ZXgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlbiBydW4gU291cmNlRnJhbWUgc2VhcmNo
IGlmIG5lZWRlZCBhbmQganVtcCB0byBzZWFyY2ggcmVzdWx0IGluZGV4IHdoZW4gZG9uZS4KKyAg
ICAgICAgdGhpcy5fZW5zdXJlVmlld1NlYXJjaFBlcmZvcm1lZChjYWxsYmFjay5iaW5kKHRoaXMp
KTsKKyAgICB9LAogCisgICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAg
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1lbnQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHZhciByZXNvdXJjZSA9IHJlc291cmNlVHJlZUVsZW1lbnQuX3Jlc291cmNlOwot
ICAgICAgICAgICAgdmFyIHJlc291cmNlVmlldyA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcu
cmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3VyY2UpOwotICAgICAgICAgICAgaWYgKHJlc291
cmNlVmlldy5wZXJmb3JtU2VhcmNoICYmIHJlc291cmNlVmlldyAhPT0gdmlzaWJsZVZpZXcpCi0g
ICAgICAgICAgICAgICAgdmlld3MucHVzaChyZXNvdXJjZVZpZXcpOworICAgICAgICAgICAgcmVz
b3VyY2VUcmVlRWxlbWVudC5fcmVzZXRTZWFyY2hSZXN1bHRzKCk7CiAgICAgICAgIH0KKwogICAg
ICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50cyhjYWxsYmFjayk7Ci0gICAgICAg
IHJldHVybiB2aWV3czsKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcgJiYgdGhpcy52aXNp
YmxlVmlldy5zZWFyY2hDYW5jZWxlZCkKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2Vh
cmNoQ2FuY2VsZWQoKTsKKworICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51
cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoMCwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fbGFzdFNl
YXJjaFJlc3VsdFRyZWVFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fbGFzdFNlYXJjaFJl
c3VsdEluZGV4ID0gLTE7CisgICAgICAgIHRoaXMuX3ZpZXdTZWFyY2hJblByb2dyZXNzID0gZmFs
c2U7CiAgICAgfSwKIAorICAgIGp1bXBUb05leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVlLnNl
bGVjdGVkVHJlZUVsZW1lbnQ7CisgICAgICAgIHZhciBuZXh0U2VhcmNoUmVzdWx0ID0gdGhpcy5f
c2VhcmNoQ29udHJvbGxlci5uZXh0U2VhcmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCk7Cisg
ICAgICAgIHRoaXMuX3Nob3dTZWFyY2hSZXN1bHQobmV4dFNlYXJjaFJlc3VsdCk7CisgICAgfSwK
KyAgICAKKyAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVudCA9IHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0
ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgdmFyIHByZXZpb3VzU2VhcmNoUmVzdWx0ID0gdGhpcy5f
c2VhcmNoQ29udHJvbGxlci5wcmV2aW91c1NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQp
OworICAgICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KHByZXZpb3VzU2VhcmNoUmVzdWx0KTsK
KyAgICB9LAorICAgIAogICAgIF9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50czogZnVuY3Rpb24o
Y2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgc3RvcCA9IGZhbHNlOwpAQCAtNzA2LDE1ICs4
MDksNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICB9CiAgICAgfSwKIAotICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKHZpZXcsIG1hdGNo
ZXMpCi0gICAgewotICAgICAgICBpZiAoIXZpZXcucmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX2ZpbmRUcmVlRWxlbWVudEZvclJl
c291cmNlKHZpZXcucmVzb3VyY2UpOwotICAgICAgICBpZiAodHJlZUVsZW1lbnQpCi0gICAgICAg
ICAgICB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaEZvdW5kKG1hdGNoZXMpOwotICAgIH0sCi0KICAg
ICBfZmluZFRyZWVFbGVtZW50Rm9yUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsK
ICAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3RvcihhbmNlc3Rvciwgb2JqZWN0KQpAQCAtNzMyLDMw
ICs4MjYsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICByZXR1cm4gdGhpcy5zaWRlYmFyVHJlZS5maW5kVHJlZUVsZW1lbnQocmVzb3VyY2UsIGlz
QW5jZXN0b3IsIGdldFBhcmVudCk7CiAgICAgfSwKIAotICAgIHNlYXJjaENhbmNlbGVkOiBmdW5j
dGlvbihzdGFydGluZ05ld1NlYXJjaCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5l
bC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQuY2FsbCh0aGlzLCBzdGFydGluZ05ld1NlYXJjaCk7
Ci0KLSAgICAgICAgaWYgKHN0YXJ0aW5nTmV3U2VhcmNoKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1lbnQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX2Vycm9yc1dhcm5pbmdzVXBkYXRl
ZCgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRz
KGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnkp
Ci0gICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNldEJ1YmJsZSgp
OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzKGNh
bGxiYWNrKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2Vh
cmNoLmNhbGwodGhpcywgcXVlcnkpOwotICAgIH0sCi0KICAgICBzaG93VmlldzogZnVuY3Rpb24o
dmlldykKICAgICB7CiAgICAgICAgIGlmICh2aWV3KQpAQCAtMTAxMSw2ICsxMDgxLDExIEBAIFdl
Ykluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
dHJlZUVsZW1lbnRGb3JSZXNvdXJjZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2VUcmVlRWxlbWVu
dDsKICAgICB9LAogCisgICAgcmVzb3VyY2VCeVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3RyZWVFbGVtZW50Rm9yUmVzb3VyY2VbdXJsXS5yZXByZXNlbnRl
ZE9iamVjdDsKKyAgICB9LAorCiAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKHRyZWVFbGVtZW50
KQogICAgIHsKICAgICAgICAgdGhpcy5faW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcih0aGlzLCB0
cmVlRWxlbWVudCk7CkBAIC0xMTU2LDExICsxMjMxLDIzIEBAIFdlYkluc3BlY3Rvci5GcmFtZVJl
c291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAg
IHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXMpCisgICAgX3Jlc2V0U2VhcmNoUmVz
dWx0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzZXRCdWJibGUoKTsKKyAg
ICAgICAgdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50ID0gMDsKKyAgICB9LAogCi0gICAgICAgIHRo
aXMuX3NldEJ1YmJsZVRleHQobWF0Y2hlcyk7CisgICAgZ2V0IHNlYXJjaE1hdGNoZXNDb3VudCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50OworICAgIH0s
CisKKyAgICBzZWFyY2hNYXRjaGVzRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXNDb3VudCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOworCisgICAgICAgIHRoaXMuX3Nl
YXJjaE1hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3VudDsKKyAgICAgICAgdGhpcy5fc2V0QnViYmxl
VGV4dChtYXRjaGVzQ291bnQpOwogICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFkZFN0eWxl
Q2xhc3MoInNlYXJjaC1tYXRjaGVzIik7CiAKICAgICAgICAgLy8gRXhwYW5kLCBkbyBub3Qgc2Ny
b2xsIGludG8gdmlldy4KQEAgLTE0MjEsMyArMTUwOCwxMTAgQEAgV2ViSW5zcGVjdG9yLlN0b3Jh
Z2VDYXRlZ29yeVZpZXcucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuU3RvcmFnZUNh
dGVnb3J5Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlciA9IGZ1bmN0aW9u
KHJvb3RFbGVtZW50KQoreworICAgIHRoaXMuX3Jvb3QgPSByb290RWxlbWVudDsKKyAgICB0aGlz
Ll90cmF2ZXJzZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNU
cmF2ZXJzZXIocm9vdEVsZW1lbnQpOworICAgIHRoaXMuX2xhc3RUcmVlRWxlbWVudCA9IG51bGw7
CisgICAgdGhpcy5fbGFzdEluZGV4ID0gLTE7Cit9CisKK1dlYkluc3BlY3Rvci5SZXNvdXJjZXNT
ZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICBuZXh0U2VhcmNoUmVzdWx0OiBmdW5j
dGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWN1cnJlbnRUcmVl
RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5fdHJh
dmVyc2VyLmZpcnN0KCksIDApOworCisgICAgICAgIGlmICghY3VycmVudFRyZWVFbGVtZW50LnNl
YXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQo
dGhpcy5fdHJhdmVyc2VyLm5leHQoY3VycmVudFRyZWVFbGVtZW50KSwgMCk7CisgICAgICAgIAor
ICAgICAgICBpZiAodGhpcy5fbGFzdFRyZWVFbGVtZW50ICE9PSBjdXJyZW50VHJlZUVsZW1lbnQg
fHwgdGhpcy5fbGFzdEluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFy
Y2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCAwKTsKKworICAgICAgICBpZiAodGhpcy5fbGFz
dEluZGV4ID09IGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIubmV4dChj
dXJyZW50VHJlZUVsZW1lbnQpLCAwKTsKKworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVz
dWx0KGN1cnJlbnRUcmVlRWxlbWVudCwgdGhpcy5fbGFzdEluZGV4ICsgMSk7CisgICAgfSwKKyAg
ICAKKyAgICBwcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oY3VycmVudFRyZWVFbGVtZW50
KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAg
IHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5sYXN0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVudC5zZWFyY2hN
YXRjaGVzQ291bnQgLSAxKTsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgJiYgdGhpcy5fbGFz
dFRyZWVFbGVtZW50ID09PSBjdXJyZW50VHJlZUVsZW1lbnQgJiYgdGhpcy5fbGFzdEluZGV4ID4g
MCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVt
ZW50LCB0aGlzLl9sYXN0SW5kZXggLSAxKTsKKyAgICAgICAgIAorICAgICAgICB2YXIgdHJlZUVs
ZW1lbnQgPSB0aGlzLl90cmF2ZXJzZXIucHJldmlvdXMoY3VycmVudFRyZWVFbGVtZW50KQorICAg
ICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVudC5z
ZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsKKyAgICB9LAorCisgICAgX3NlYXJjaFJlc3VsdDogZnVu
Y3Rpb24odHJlZUVsZW1lbnQsIGluZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdFRyZWVF
bGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2xhc3RJbmRleCA9IGluZGV4Owor
ICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVlRWxlbWVudCwgaW5kZXg6IGluZGV4fTsK
KyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVy
c2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7CisgICAgdGhpcy5fcm9vdCA9IHJvb3RFbGVt
ZW50OworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNl
ci5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLm5leHQodGhpcy5fcm9vdCk7CisgICAgfSwKKyAgICAgICAgCisgICAgbGFzdDog
ZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLnBy
ZXZpb3VzKHRoaXMuX3Jvb3QpOyAgICAKKyAgICB9LAorCisgICAgbmV4dDogZnVuY3Rpb24oc3Rh
cnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHN0YXJ0VHJl
ZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5f
dHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9yb290OworICAgICAgICB9IHdoaWxl
ICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYmICF0aGlzLl9lbGVtZW50SGFzU2Vh
cmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7Cisg
ICAgfSwKKworICAgIHByZXZpb3VzOiBmdW5jdGlvbihzdGFydFRyZWVFbGVtZW50KQorICAgIHsK
KyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRUcmVlRWxlbWVudDsKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZVByZXZpb3VzKHRyZWVF
bGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQoKTsKKyAgICAgICAgfSB3aGlsZSAodHJl
ZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhpcy5fZWxlbWVudEhhc1NlYXJjaFJl
c3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OworICAgIH0s
CisKKyAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwgdGhp
cy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9lbGVtZW50SGFzU2VhcmNoUmVzdWx0czog
ZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQg
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50ICYmIHRyZWVF
bGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudDsKKyAgICB9LAorCisgICAgX3RyYXZlcnNlUHJldmlv
dXM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVt
ZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxzZSwgdGhpcy5fcm9vdCwgdHJ1ZSk7
CisgICAgfSwKKworICAgIF9sYXN0VHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3Jvb3Q7CisgICAgICAgIHZhciBuZXh0VHJlZUVs
ZW1lbnQ7IAorICAgICAgICB3aGlsZSAobmV4dFRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VO
ZXh0KHRyZWVFbGVtZW50KSkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gbmV4dFRyZWVFbGVt
ZW50OworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7ICAgICAgICAKKyAgICB9LAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5k
ZXggYTJkNjIzNi4uNGY3N2NlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC01Niw2ICs1NiwyNiBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUuRXZlbnRzID0gewogICAgIExvYWRlZDogImxvYWRlZCIKIH0KIAorV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVlcnkpCit7
CisgICAgdmFyIHJlZ2V4OworICAgIAorICAgIC8vIEZpcnN0IHRyeSBjcmVhdGluZyByZWdleCBp
ZiB1c2VyIGtub3dzIHRoZSAvIC8gaGludC4KKyAgICB0cnkgeworICAgICAgICBpZiAoL15cLy4q
XC8kLy50ZXN0KHF1ZXJ5KSkKKyAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChxdWVyeS5z
dWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0gMSkpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgLy8gU2lsZW50IGNhdGNoLgorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSBqdXN0IGRvIGNh
c2UtaW5zZW5zaXRpdmUgc2VhcmNoLgorICAgIGlmICghcmVnZXgpIAorICAgICAgICByZWdleCA9
IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAKKyAgICByZXR1cm4gcmVnZXg7Cit9CisK
KwogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICBnZXQgdmlzaWJs
ZSgpCiAgICAgewpAQCAtMzY3LDE4ICszODcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4
ID0gLTE7CiAgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAKLSAgICAgICAg
ICAgIC8vIEZpcnN0IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgotICAgICAgICAgICAgdmFy
IHJlZ2V4T2JqZWN0ID0gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOwotICAgICAgICAgICAgdGhp
cy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhyZWdleE9iamVjdCwgdGhpcy5fc2VhcmNoUmVzdWx0cyk7
Ci0KLSAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHJlZ2V4IHNlYXJjaCBpZiB1c2VyIGtub3dzIHRo
ZSAvIC8gaGludC4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKC9eXC8u
KlwvJC8udGVzdChxdWVyeSkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxlY3RSZWdl
eE1hdGNoZXMobmV3IFJlZ0V4cChxdWVyeS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0gMSkp
LCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAg
ICAgICAgICAgICAvLyBTaWxlbnQgY2F0Y2guCi0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAg
IHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleChx
dWVyeSk7CisgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gdGhpcy5fY29sbGVjdFJl
Z2V4TWF0Y2hlcyhyZWdleCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGNhbGxiYWNrKHRo
aXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKICAgICAgICAgfQogCkBAIC00MDEsMjQg
KzQxMiwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShudWxsKTsKICAgICB9LAogCisg
ICAgaGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoID4gMDsKKyAgICB9LAorCiAgICAganVtcFRvRmlyc3RT
ZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1NlYXJj
aFJlc3VsdCgwKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQoMCk7CiAgICAgfSwK
IAogICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAg
IHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAtIDEp
OworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxl
bmd0aCAtIDEpOwogICAgIH0sCiAKICAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlv
bigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVu
dFNlYXJjaFJlc3VsdEluZGV4ICsgMSk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVzdWx0
KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpOwogICAgIH0sCiAKICAgICBqdW1w
VG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5f
anVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCAtIDEpOwor
ICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0
SW5kZXggLSAxKTsKICAgICB9LAogCiAgICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5j
dGlvbigpCkBAIC00MzEsNyArNDQ3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoICYmIHRo
aXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRoaXMuX3NlYXJjaFJlc3VsdHMubGVu
Z3RoIC0gMSk7CiAgICAgfSwKIAotICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGlu
ZGV4KQorICAgIGp1bXBUb1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oaW5kZXgpCiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMubG9hZGVkIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQzOSwxOSArNDU1LDIwIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFya0FuZFJl
dmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4XSk7CiAgICAgfSwKIAotICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlvbihyZWdl
eE9iamVjdCwgcmFuZ2VzKQorICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlvbihyZWdl
eE9iamVjdCkKICAgICB7CisgICAgICAgIHZhciByYW5nZXMgPSBbXTsKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKSB7CiAgICAgICAg
ICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpOwogICAgICAgICAgICAgdmFy
IG9mZnNldCA9IDA7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgdmFyIG1hdGNo
ID0gcmVnZXhPYmplY3QuZXhlYyhsaW5lKTsKLSAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHsK
KyAgICAgICAgICAgICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0ubGVuZ3RoKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKGksIG9m
ZnNldCArIG1hdGNoLmluZGV4LCBpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxl
bmd0aCkpOwogICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWF0Y2guaW5kZXggKyAxOwog
ICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyAx
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IHdoaWxlIChtYXRjaCkKKyAgICAg
ICAgICAgIH0gd2hpbGUgKG1hdGNoICYmIGxpbmUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biByYW5nZXM7CiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvdXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC91dGlsaXRpZXMuanMKaW5kZXggNjRhN2E5Zi4uZDM4ZjEyMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTEwNDAsMyArMTA0MCwx
NiBAQCBmdW5jdGlvbiBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwgZXh0cmFGbGFncykKICAgICB9
CiAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsICJpIiArIChleHRyYUZsYWdzIHx8ICIiKSk7
CiB9CisKK2Z1bmN0aW9uIGNvdW50UmVnZXhNYXRjaGVzKHJlZ2V4LCBjb250ZW50KQoreworICAg
IHZhciB0ZXh0ID0gY29udGVudDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbWF0Y2g7
CisgICAgd2hpbGUgKHRleHQgJiYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHsKKyAgICAg
ICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAg
ICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9Cg==
</data>
<flag name="review"
          id="84342"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91676</attachid>
            <date>2011-04-29 07:05:33 -0700</date>
            <delta_ts>2011-04-29 07:55:48 -0700</delta_ts>
            <desc>Patch with fixes</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>35749</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYTFjMWI5Li5jZDg0Nzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTEtMDQtMjggIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Y291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JTZWFyY2hNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3No
b3dSZXNvdXJjZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5wZXJmb3JtU2VhcmNoLnNlYXJjaEluRWRpdGVkUmVzb3VyY2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90
eXBlLl9lbnN1cmVWaWV3U2VhcmNoUGVyZm9ybWVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQuY2FsbGJhY2spOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fc2hvd1NlYXJjaFJl
c3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnNl
YXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90
b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVz
b3VyY2VzUGFuZWwucHJvdG90eXBlLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZS5yZXNvdXJjZUJ5VVJM
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90
eXBlLl9yZXNldFNlYXJjaFJlc3VsdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVz
b3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUuZ2V0IHNlYXJjaE1hdGNoZXNDb3VudCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWFy
Y2hNYXRjaGVzRm91bmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xs
ZXIucHJvdG90eXBlLm5leHRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJl
c291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLnByZXZpb3VzU2VhcmNoUmVzdWx0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlw
ZS5fc2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJl
ZUVsZW1lbnRzVHJhdmVyc2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5maXJzdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUubGFzdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNl
ci5wcm90b3R5cGUubmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1Ry
ZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUucHJldmlvdXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl90cmF2
ZXJzZU5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVu
dHNUcmF2ZXJzZXIucHJvdG90eXBlLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5
cGUuX3RyYXZlcnNlUHJldmlvdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3Vs
dHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLl9sYXN0VHJlZUVsZW1lbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVnZXgpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmRvRmluZFNlYXJjaE1h
dGNoZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5wZXJm
b3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
aGFzU2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLmp1bXBUb0ZpcnN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTGFzdFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb05leHRTZWFyY2hSZXN1bHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9QcmV2
aW91c1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLmp1bXBUb1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLl9jb2xsZWN0UmVnZXhNYXRjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKyAgICAgICAgKCk6CisKIDIwMTEtMDQtMjkgIFBh
dmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
aW5kZXggYzYwYjJhNi4uZDM3MzMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbgpAQCAtOTYsNiArOTYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMuIgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiU2VhcmNoUmVzdWx0IiwKKyAgICAgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJT
ZWFyY2ggcmVzdWx0IGZvciByZXNvdXJjZS4iLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworCSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImZyYW1lSWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgZnJhbWUgaWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNo
ZXNDb3VudCIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgbWF0
Y2hlcyBpbiByZXNvdXJjZSBjb250ZW50LiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAg
ICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwpAQCAtMTU3LDYgKzE2Nywx
OCBAQAogICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbnRlbnQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgY29udGVudC4iIH0KICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogInNlYXJjaEluUmVzb3VyY2VzIiwK
KyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2VhcmNoZXMgZm9yIGdpdmVuIHN0cmlu
ZyBpbiBmcmFtZSAvIHJlc291cmNlIHRyZWUgc3RydWN0dXJlLiIsCisgICAgICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdG8gc2VhcmNoIGZvci4iICB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhc2VTZW5zaXRpdmUiLCAidHlwZSI6
ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIklmIHRydWUsIHNl
YXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaXNSZWdleCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiSWYgdHJ1ZSwgdHJlYXRzIHN0cmluZyBwYXJhbWV0ZXIgYXMgcmVnZXguIiB9Cisg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgIiRyZWYiOiAiU2VhcmNoUmVzdWx0IiB9LCAiZGVzY3JpcHRpb24iOiAiTGlzdCBvZiBzZWFy
Y2ggcmVzdWx0cy4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAg
IF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDY2NzVjMjIuLmIxODMzZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCkBAIC02MSw5ICs2MiwxNSBAQAogCiAjaW5jbHVk
ZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5j
bHVkZSAid3RmL1ZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK25hbWVzcGFjZSB7
CisvLyBUaGlzIHNob3VsZCBiZSBrZXB0IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gZnJvbnQtZW5k
L3V0aWxpdGllcy5qcworc3RhdGljIGNvbnN0IGNoYXIgcmVnZXhTcGVjaWFsQ2hhcmFjdGVyc1td
ID0gIltdKCl7fSstKi4sP1xcXiR8IjsKK30KKwogc3RhdGljIGJvb2wgZGVjb2RlU2hhcmVkQnVm
ZmVyKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGNvbnN0IFN0cmluZyYgdGV4dEVu
Y29kaW5nTmFtZSwgU3RyaW5nKiByZXN1bHQpCiB7CiAgICAgaWYgKGJ1ZmZlcikgewpAQCAtMTI4
LDYgKzEzNSwxMyBAQCBzdGF0aWMgYm9vbCBkZWNvZGVDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNv
dXJjZSogY2FjaGVkUmVzb3VyY2UsIFN0cmluZyogcmVzdWx0KQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorc3RhdGljIGJvb2wgZGVjb2RlTWFpblJlc291cmNlKEZyYW1lKiBmcmFtZSwgU3RyaW5n
KiByZXN1bHQpCit7CisgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1l
bnQoKS0+aW5wdXRFbmNvZGluZygpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9
IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOwor
ICAgIHJldHVybiBkZWNvZGVTaGFyZWRCdWZmZXIoYnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCBy
ZXN1bHQpOworfQorCiBQYXNzT3duUHRyPEluc3BlY3RvclBhZ2VBZ2VudD4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywg
UGFnZSogcGFnZSwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBpbmplY3RlZFNjcmlwdE1hbmFnZXIp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQYWdlQWdlbnQoaW5zdHJ1bWVu
dGluZ0FnZW50cywgcGFnZSwgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKSk7CkBAIC0xNDQsMTEgKzE1
OCw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsCiAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRl
ciA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGJ1ZmZlcjsKICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIGxvYWRlci0+dXJsKCkpKSB7Ci0gICAgICAgIFN0
cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gZnJhbWUtPmRvY3VtZW50KCktPmlucHV0RW5jb2Rpbmco
KTsKLSAgICAgICAgYnVmZmVyID0gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPm1haW5S
ZXNvdXJjZURhdGEoKTsKLSAgICAgICAgc3VjY2VzcyA9IGRlY29kZVNoYXJlZEJ1ZmZlcihidWZm
ZXIsIHRleHRFbmNvZGluZ05hbWUsIHJlc3VsdCk7Ci0gICAgfQorICAgIGlmIChlcXVhbElnbm9y
aW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgbG9hZGVyLT51cmwoKSkpCisgICAgICAgIHN1Y2Nl
c3MgPSBkZWNvZGVNYWluUmVzb3VyY2UoZnJhbWUsIHJlc3VsdCk7CiAgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICBzdWNjZXNzID0gZGVjb2RlQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2Uo
ZnJhbWUsIHVybCksIHJlc3VsdCk7CiAKQEAgLTMzNSw2ICszNDYsMTggQEAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENv
b2tpZT4mIGNvb2sKICAgICByZXR1cm4gY29va2llczsKIH0KIAorc3RhdGljIFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiByZXN1bHQ7CisKKyAgICBjb25zdCBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZnJhbWUtPmRv
Y3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwor
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICByZXN1bHQuYXBwZW5kKGl0LT5z
ZWNvbmQuZ2V0KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKIHsKICAgICAvLyBJZiB3ZSBj
YW4gZ2V0IHJhdyBjb29raWVzLgpAQCAtMzUwLDExICszNzMsMTAgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBjb29raWUKIAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGNvbnN0
IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMg
PSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7
Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
YWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPiBhbGxSZXNvdXJjZXMgPSBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShm
cmFtZSk7CisgICAgICAgIGZvciAoVmVjdG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsg
KytpdCkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29va2llc0xpc3Q7Ci0gICAg
ICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3VtZW50LCBL
VVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkpLCBkb2NDb29raWVzTGlzdCk7
CisgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3Vt
ZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgKCppdCktPnVybCgpKSwgZG9jQ29va2llc0xpc3Qp
OwogCiAgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5nIGZvciB0aGUgU3Ry
aW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCkBAIC0zODUsMTAgKzQwNywxMCBAQCB2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBjb29raWVOYW1lLCBjbwogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKGRvY3VtZW50LT51cmwoKS5ob3N0KCkgIT0gZG9tYWlu
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVk
UmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7Ci0gICAgICAgIENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBh
bGxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRv
Y3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShk
b2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgY29va2ll
TmFtZSk7CisKKyAgICAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gYWxsUmVzb3VyY2VzID0g
Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpOworICAgICAgICBmb3IgKFZlY3RvcjxDYWNo
ZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBp
dCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBXZWJDb3JlOjpkZWxl
dGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAoKml0KS0+dXJsKCkpLCBj
b29raWVOYW1lKTsKICAgICB9CiB9CiAKQEAgLTQxMCwyNCArNDMyLDgzIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpCiAgICAgICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KGVycm9yU3RyaW5nLCBmcmFtZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIGNvbnRlbnQp
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQor
c3RhdGljIFN0cmluZyBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZShjb25zdCBTdHJpbmcmIHRleHQp
CiB7Ci0gICAgIG1fZnJvbnRlbmQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkp
OworICAgIFN0cmluZyByZXN1bHQ7CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0
LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmcgc3BlY2lhbHMocmVnZXhTcGVjaWFsQ2hhcmFjdGVy
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7
CisgICAgICAgIGlmIChzcGVjaWFscy5maW5kKGNoYXJhY3RlcnNbaV0pKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgiXFwiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjaGFyYWN0ZXJzW2ld
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6bG9hZEV2ZW50RmlyZWQoKQorc3RhdGljIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9u
TWF0Y2hlcyhjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIGNvbnN0IFN0cmluZyYgY29u
dGVudCkKIHsKLSAgICAgbV9mcm9udGVuZC0+bG9hZEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7
CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaW50IHBvc2l0aW9uOworICAgIHVuc2lnbmVkIHN0
YXJ0ID0gMDsKKyAgICBpbnQgbWF0Y2hMZW5ndGg7CisgICAgd2hpbGUgKChwb3NpdGlvbiA9IHJl
Z2V4Lm1hdGNoKGNvbnRlbnQsIHN0YXJ0LCAmbWF0Y2hMZW5ndGgpKSAhPSAtMSkgeworICAgICAg
ICBpZiAoc3RhcnQgPj0gY29udGVudC5sZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAobWF0Y2hMZW5ndGggPiAwKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAg
IHN0YXJ0ID0gcG9zaXRpb24gKyAxOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlcikKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JT
ZWFyY2hNYXRjaChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQg
bWF0Y2hlc0NvdW50KQogewotICAgIG1fZnJvbnRlbmQtPmZyYW1lTmF2aWdhdGVkKGJ1aWxkT2Jq
ZWN0Rm9yRnJhbWUobG9hZGVyLT5mcmFtZSgpKSwgbG9hZGVySWQobG9hZGVyKSk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICByZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIGZyYW1lSWQpOworICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJ1cmwiLCB1cmwpOworICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291
bnQiLCBtYXRjaGVzQ291bnQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbENhc2VTZW5zaXRp
dmUsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFy
cmF5Piogb2JqZWN0KQogewotICAgIG1fZnJvbnRlbmQtPmZyYW1lRGV0YWNoZWQoZnJhbWVJZChm
cmFtZSkpOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworCisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9w
dGlvbmFsSXNSZWdleCA6IGZhbHNlOworICAgIFN0cmluZyByZWdleFNvdXJjZSA9IGlzUmVnZXgg
PyB0ZXh0IDogY3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UodGV4dCk7CisKKyAgICBib29sIGNhc2VT
ZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
IDogZmFsc2U7CisgICAgUmVndWxhckV4cHJlc3Npb24gcmVnZXgocmVnZXhTb3VyY2UsIGNhc2VT
ZW5zaXRpdmUgPyBUZXh0Q2FzZVNlbnNpdGl2ZSA6IFRleHRDYXNlSW5zZW5zaXRpdmUpOworCisg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobV9wYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAg
ICAgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFs
bFJlc291cmNlcyA9IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgZm9y
IChWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gYWxsUmVzb3VyY2VzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSAqaXQ7CisgICAgICAgICAgICBzd2l0
Y2ggKEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJj
ZSkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVz
b3VyY2U6CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVzb3Vy
Y2U6CisgICAgICAgICAgICAgICAgaWYgKGRlY29kZUNhY2hlZFJlc291cmNlKGNhY2hlZFJlc291
cmNlLCAmY29udGVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1hdGNoZXNDb3VudCA9
IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKHJlZ2V4LCBjb250ZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC0+cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goZnJhbWVJZChmcmFtZSks
IGNhY2hlZFJlc291cmNlLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZGVj
b2RlTWFpblJlc291cmNlKGZyYW1lLCAmY29udGVudCkpIHsKKyAgICAgICAgICAgIGludCBtYXRj
aGVzQ291bnQgPSBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7
CisgICAgICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQorICAgICAgICAgICAgICAgIHJlc3VsdC0+
cHVzaFZhbHVlKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2goZnJhbWVJZChmcmFtZSksIGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKSwgbWF0Y2hlc0NvdW50KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAqb2JqZWN0ID0gcmVzdWx0OwogfQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlk
Q2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCkKQEAgLTQ0Nyw2ICs1MjgsMjYgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3IKICAgICB9
CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCit7
CisgICAgIG1fZnJvbnRlbmQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwor
fQorCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZEV2ZW50RmlyZWQoKQoreworICAgICBt
X2Zyb250ZW5kLT5sb2FkRXZlbnRGaXJlZChjdXJyZW50VGltZSgpKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit7
CisgICAgbV9mcm9udGVuZC0+ZnJhbWVOYXZpZ2F0ZWQoYnVpbGRPYmplY3RGb3JGcmFtZShsb2Fk
ZXItPmZyYW1lKCkpLCBsb2FkZXJJZChsb2FkZXIpKTsKK30KKwordm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQoreworICAgIG1fZnJvbnRlbmQtPmZy
YW1lRGV0YWNoZWQoZnJhbWVJZChmcmFtZSkpOworfQorCiBGcmFtZSogSW5zcGVjdG9yUGFnZUFn
ZW50OjptYWluRnJhbWUoKQogewogICAgIHJldHVybiBtX3BhZ2UtPm1haW5GcmFtZSgpOwpAQCAt
NTA0LDEwICs2MDUsMTAgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBh
Z2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGYKIAogICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwog
ICAgIHJlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHN1YnJlc291cmNlcyk7Ci0gICAgY29u
c3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNl
cyA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRS
ZXNvdXJjZXMoKTsKLSAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBDYWNo
ZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOworCisgICAgVmVj
dG9yPENhY2hlZFJlc291cmNlKj4gYWxsUmVzb3VyY2VzID0gY2FjaGVkUmVzb3VyY2VzRm9yRnJh
bWUoZnJhbWUpOworICAgIGZvciAoVmVjdG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsg
KytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSAqaXQ7CiAg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFN0cmluZygidXJs
IiwgY2FjaGVkUmVzb3VyY2UtPnVybCgpKTsKICAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFN0
cmluZygidHlwZSIsIGNhY2hlZFJlc291cmNlVHlwZVN0cmluZygqY2FjaGVkUmVzb3VyY2UpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCAw
NWFlNTdiLi5jMTJkNzliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oCkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNs
YXNzIEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBLVVJMOwogY2xhc3MgUGFnZTsKK2NsYXNz
IFJlZ3VsYXJFeHByZXNzaW9uOwogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIApAQCAt
ODksOSArOTAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKICAgICB2
b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
Kik7CiAgICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBjb25zdCBiYXNlNjRF
bmNvZGUsIFN0cmluZyogY29udGVudCk7CisgICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNvbnN0IGNhc2VTZW5zaXRpdmUs
IGNvbnN0IGJvb2wqIGNvbnN0IGlzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qKTsKIAog
ICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKLSAgICB2b2lkIGRpZENvbW1pdExv
YWQoY29uc3QgU3RyaW5nJiB1cmwpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldv
cmxkKEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkKik7CiAgICAgdm9pZCBkb21Db250ZW50RXZlbnRG
aXJlZCgpOwogICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4IDY5NmQ3Mzgu
LjI2NzI3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmVzb3VyY2VzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZXNQYW5lbC5qcwpAQCAtMzcyLDYgKzM3Miw5IEBAIFdlYkluc3BlY3Rvci5SZXNv
dXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgX3Nob3dSZXNvdXJjZVZpZXc6IGZ1bmN0aW9u
KHJlc291cmNlKQogICAgIHsKICAgICAgICAgdmFyIHZpZXcgPSBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VWaWV3LnJlc291cmNlVmlld0ZvclJlc291cmNlKHJlc291cmNlKTsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgY291bGQgYmUgcmVtb3ZlZCBvbmNlIHdlIHN0b3AgY2FjaGluZyBTb3VyY2VGcmFt
ZXMuICAgICAgICAKKyAgICAgICAgaWYgKHZpZXcuc2VhcmNoQ2FuY2VsZWQpCisgICAgICAgICAg
ICB2aWV3LnNlYXJjaENhbmNlbGVkKCk7CiAgICAgICAgIHRoaXMuX2ZldGNoQW5kQXBwbHlEaWZm
TWFya3VwKHZpZXcsIHJlc291cmNlKTsKICAgICAgICAgdGhpcy5faW5uZXJTaG93Vmlldyh2aWV3
KTsKICAgICB9LApAQCAtNjc4LDI1ICs2ODEsMTMyIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgfSwKIAotICAg
IGdldCBzZWFyY2hhYmxlVmlld3MoKQorICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5
KSAKICAgICB7Ci0gICAgICAgIHZhciB2aWV3cyA9IFtdOworICAgICAgICB0aGlzLl9yZXNldFNl
YXJjaFJlc3VsdHMoKTsKKyAgICAgICAgdmFyIHJlZ2V4ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAgICAgdmFyIHRvdGFsTWF0Y2hlc0Nv
dW50ID0gMDsKIAotICAgICAgICBjb25zdCB2aXNpYmxlVmlldyA9IHRoaXMudmlzaWJsZVZpZXc7
Ci0gICAgICAgIGlmICh2aXNpYmxlVmlldyAmJiB2aXNpYmxlVmlldy5wZXJmb3JtU2VhcmNoKQot
ICAgICAgICAgICAgdmlld3MucHVzaCh2aXNpYmxlVmlldyk7CisgICAgICAgIGZ1bmN0aW9uIHNl
YXJjaEluRWRpdGVkUmVzb3VyY2UodHJlZUVsZW1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciByZXNvdXJjZSA9IHRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0OworICAgICAgICAg
ICAgaWYgKHJlc291cmNlLmhpc3RvcnkubGVuZ3RoID09IDApCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgdmFyIG1hdGNoZXNDb3VudCA9IGNvdW50UmVnZXhNYXRjaGVzKHJl
Z2V4LCByZXNvdXJjZS5jb250ZW50KQorICAgICAgICAgICAgdHJlZUVsZW1lbnQuc2VhcmNoTWF0
Y2hlc0ZvdW5kKG1hdGNoZXNDb3VudCk7CisgICAgICAgICAgICB0b3RhbE1hdGNoZXNDb3VudCAr
PSBtYXRjaGVzQ291bnQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhl
cnJvciwgcmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVycm9yKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFJlc3VsdCA9IHJlc3VsdFtpXTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIGZyYW1lVHJlZUVsZW1lbnQgPSB0aGlzLl90cmVlRWxlbWVudEZvckZy
YW1lSWRbc2VhcmNoUmVzdWx0LmZyYW1lSWRdOworICAgICAgICAgICAgICAgICAgICB2YXIgcmVz
b3VyY2UgPSBmcmFtZVRyZWVFbGVtZW50LnJlc291cmNlQnlVUkwoc2VhcmNoUmVzdWx0LnVybCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmhpc3RvcnkubGVuZ3RoID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGVkaXRlZCByZXNvdXJj
ZXMuCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRUcmVlRWxlbWVudEZvclJlc291cmNl
KHJlc291cmNlKS5zZWFyY2hNYXRjaGVzRm91bmQoc2VhcmNoUmVzdWx0Lm1hdGNoZXNDb3VudCk7
CisgICAgICAgICAgICAgICAgICAgIHRvdGFsTWF0Y2hlc0NvdW50ICs9IHNlYXJjaFJlc3VsdC5t
YXRjaGVzQ291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVTZWFy
Y2hNYXRjaGVzQ291bnQodG90YWxNYXRjaGVzQ291bnQsIHRoaXMpOworICAgICAgICAgICAgdGhp
cy5fc2VhcmNoQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29u
dHJvbGxlcih0aGlzLnJlc291cmNlc0xpc3RUcmVlRWxlbWVudCk7CisKKyAgICAgICAgICAgIGlm
ICh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQgJiYgdGhpcy5zaWRlYmFyVHJl
ZS5zZWxlY3RlZFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAg
ICB0aGlzLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHMoc2VhcmNoSW5FZGl0ZWRSZXNv
dXJjZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgUGFnZUFnZW50LnNlYXJjaEluUmVzb3VyY2VzKHJl
Z2V4LnNvdXJjZSwgIXJlZ2V4Lmlnbm9yZUNhc2UsIHRydWUsIGNhbGxiYWNrLmJpbmQodGhpcykp
OyAgICAgICAgICAgIAorICAgIH0sCisgICAgCisgICAgX2Vuc3VyZVZpZXdTZWFyY2hQZXJmb3Jt
ZWQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gdmlld1NlYXJj
aFBlcmZvcm1lZENhbGxiYWNrKHNlYXJjaElkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
c2VhcmNoSWQgIT09IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuOyAvLyBTZWFyY2ggaXMgb2Jzb2xldGUuCisgICAgICAgICAgICB0aGlzLl92aWV3U2VhcmNo
SW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy52aXNpYmxlVmlldy5oYXNTZWFyY2hSZXN1bHRzKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBnaXZlIGlkIHRvIGVhY2ggc2VhcmNoLCBzbyB0aGF0IHdlIGNhbiBza2lwIGNh
bGxiYWNrcyBmb3Igb2Jzb2xldGUgc2VhcmNoZXMuCisgICAgICAgICAgICAgICAgdGhpcy5fbGFz
dFZpZXdTZWFyY2hJZCA9IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQgPyB0aGlzLl9sYXN0Vmlld1Nl
YXJjaElkICsgMSA6IDA7CisgICAgICAgICAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jl
c3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcucGVyZm9ybVNlYXJj
aCh0aGlzLmN1cnJlbnRRdWVyeSwgdmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNrLmJpbmQodGhp
cywgdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfc2hvd1NlYXJj
aFJlc3VsdDogZnVuY3Rpb24oc2VhcmNoUmVzdWx0KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFz
dFNlYXJjaFJlc3VsdEluZGV4ID0gc2VhcmNoUmVzdWx0LmluZGV4OworICAgICAgICB0aGlzLl9s
YXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQgPSBzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQ7CiAK
KyAgICAgICAgLy8gQXQgZmlyc3Qgc2hvdyB2aWV3IGZvciB0cmVlRWxlbWVudC4KKyAgICAgICAg
aWYgKHNlYXJjaFJlc3VsdC50cmVlRWxlbWVudCAhPT0gdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3Rl
ZFRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLnNob3dSZXNvdXJjZShzZWFyY2hSZXN1
bHQudHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QpOworICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLnNlYXJjaENvbnRyb2xsZXIuZm9jdXNTZWFyY2hGaWVsZCgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzZWFyY2hJZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudCAhPT0gdGhp
cy5fbGFzdFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gVXNlciBoYXMgc2VsZWN0ZWQgYW5vdGhlciB2aWV3IHdoaWxlIHdlIHdlcmUgc2VhcmNoaW5n
LgorICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRJbmRleCAhPSAtMSkKKyAg
ICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3Lmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9s
YXN0U2VhcmNoUmVzdWx0SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlbiBydW4g
U291cmNlRnJhbWUgc2VhcmNoIGlmIG5lZWRlZCBhbmQganVtcCB0byBzZWFyY2ggcmVzdWx0IGlu
ZGV4IHdoZW4gZG9uZS4KKyAgICAgICAgdGhpcy5fZW5zdXJlVmlld1NlYXJjaFBlcmZvcm1lZChj
YWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Jlc2V0U2VhcmNoUmVzdWx0czog
ZnVuY3Rpb24oKQorICAgIHsKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVl
RWxlbWVudCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVzb3VyY2VU
cmVlRWxlbWVudC5fcmVzb3VyY2U7Ci0gICAgICAgICAgICB2YXIgcmVzb3VyY2VWaWV3ID0gV2Vi
SW5zcGVjdG9yLlJlc291cmNlVmlldy5yZXNvdXJjZVZpZXdGb3JSZXNvdXJjZShyZXNvdXJjZSk7
Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VWaWV3LnBlcmZvcm1TZWFyY2ggJiYgcmVzb3VyY2VW
aWV3ICE9PSB2aXNpYmxlVmlldykKLSAgICAgICAgICAgICAgICB2aWV3cy5wdXNoKHJlc291cmNl
Vmlldyk7CisgICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNldFNlYXJjaFJlc3Vs
dHMoKTsKICAgICAgICAgfQorCiAgICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1l
bnRzKGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHZpZXdzOworICAgICAgICBpZiAodGhpcy52
aXNpYmxlVmlldyAmJiB0aGlzLnZpc2libGVWaWV3LnNlYXJjaENhbmNlbGVkKQorICAgICAgICAg
ICAgdGhpcy52aXNpYmxlVmlldy5zZWFyY2hDYW5jZWxlZCgpOworCisgICAgICAgIHRoaXMuX2xh
c3RTZWFyY2hSZXN1bHRUcmVlRWxlbWVudCA9IG51bGw7CisgICAgICAgIHRoaXMuX2xhc3RTZWFy
Y2hSZXN1bHRJbmRleCA9IC0xOworICAgICAgICB0aGlzLl92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9
IGZhbHNlOworICAgIH0sCisKKyAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hl
c0NvdW50KDAsIHRoaXMpOworICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFJlc3VsdHMoKTsKICAg
ICB9LAogCisgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTZWFyY2hNYXRjaGVzKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB2YXIgY3VycmVudFRyZWVFbGVtZW50ID0gdGhpcy5zaWRlYmFyVHJlZS5zZWxl
Y3RlZFRyZWVFbGVtZW50OworICAgICAgICB2YXIgbmV4dFNlYXJjaFJlc3VsdCA9IHRoaXMuX3Nl
YXJjaENvbnRyb2xsZXIubmV4dFNlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQpOworICAg
ICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KG5leHRTZWFyY2hSZXN1bHQpOworICAgIH0sCisg
ICAgCisgICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5jdXJyZW50U2VhcmNoTWF0Y2hlcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVudCA9IHRoaXMuc2lkZWJhclRyZWUuc2Vs
ZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgdmFyIHByZXZpb3VzU2VhcmNoUmVzdWx0ID0gdGhp
cy5fc2VhcmNoQ29udHJvbGxlci5wcmV2aW91c1NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1l
bnQpOworICAgICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KHByZXZpb3VzU2VhcmNoUmVzdWx0
KTsKKyAgICB9LAorICAgIAogICAgIF9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50czogZnVuY3Rp
b24oY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgc3RvcCA9IGZhbHNlOwpAQCAtNzA2LDE1
ICs4MTYsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAgICAgfSwKIAotICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKHZpZXcsIG1h
dGNoZXMpCi0gICAgewotICAgICAgICBpZiAoIXZpZXcucmVzb3VyY2UpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX2ZpbmRUcmVlRWxlbWVudEZv
clJlc291cmNlKHZpZXcucmVzb3VyY2UpOwotICAgICAgICBpZiAodHJlZUVsZW1lbnQpCi0gICAg
ICAgICAgICB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaEZvdW5kKG1hdGNoZXMpOwotICAgIH0sCi0K
ICAgICBfZmluZFRyZWVFbGVtZW50Rm9yUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAg
IHsKICAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3RvcihhbmNlc3Rvciwgb2JqZWN0KQpAQCAtNzMy
LDMwICs4MzMsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyVHJlZS5maW5kVHJlZUVsZW1lbnQocmVzb3VyY2Us
IGlzQW5jZXN0b3IsIGdldFBhcmVudCk7CiAgICAgfSwKIAotICAgIHNlYXJjaENhbmNlbGVkOiBm
dW5jdGlvbihzdGFydGluZ05ld1NlYXJjaCkKLSAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5Q
YW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQuY2FsbCh0aGlzLCBzdGFydGluZ05ld1NlYXJj
aCk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0aW5nTmV3U2VhcmNoKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNlVHJlZUVsZW1lbnQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQuX2Vycm9yc1dhcm5pbmdzVXBk
YXRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1l
bnRzKGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVl
cnkpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNldEJ1YmJs
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRz
KGNhbGxiYWNrKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5wZXJmb3Jt
U2VhcmNoLmNhbGwodGhpcywgcXVlcnkpOwotICAgIH0sCi0KICAgICBzaG93VmlldzogZnVuY3Rp
b24odmlldykKICAgICB7CiAgICAgICAgIGlmICh2aWV3KQpAQCAtMTAxMSw2ICsxMDg4LDExIEBA
IFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZVtyZXNvdXJjZS51cmxdID0gcmVzb3VyY2VUcmVlRWxl
bWVudDsKICAgICB9LAogCisgICAgcmVzb3VyY2VCeVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVFbGVtZW50Rm9yUmVzb3VyY2VbdXJsXS5yZXByZXNl
bnRlZE9iamVjdDsKKyAgICB9LAorCiAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKHRyZWVFbGVt
ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5faW5zZXJ0SW5QcmVzZW50YXRpb25PcmRlcih0aGlz
LCB0cmVlRWxlbWVudCk7CkBAIC0xMTY0LDExICsxMjQ2LDIzIEBAIFdlYkluc3BlY3Rvci5GcmFt
ZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAot
ICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXMpCisgICAgX3Jlc2V0U2VhcmNo
UmVzdWx0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcmVzZXRCdWJibGUoKTsK
KyAgICAgICAgdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50ID0gMDsKKyAgICB9LAogCi0gICAgICAg
IHRoaXMuX3NldEJ1YmJsZVRleHQobWF0Y2hlcyk7CisgICAgZ2V0IHNlYXJjaE1hdGNoZXNDb3Vu
dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50OworICAg
IH0sCisKKyAgICBzZWFyY2hNYXRjaGVzRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXNDb3VudCkKKyAg
ICB7CisgICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOworCisgICAgICAgIHRoaXMu
X3NlYXJjaE1hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3VudDsKKyAgICAgICAgdGhpcy5fc2V0QnVi
YmxlVGV4dChtYXRjaGVzQ291bnQpOwogICAgICAgICB0aGlzLl9idWJibGVFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoInNlYXJjaC1tYXRjaGVzIik7CiAKICAgICAgICAgLy8gRXhwYW5kLCBkbyBub3Qg
c2Nyb2xsIGludG8gdmlldy4KQEAgLTE0MjksMyArMTUyMywxMTAgQEAgV2ViSW5zcGVjdG9yLlN0
b3JhZ2VDYXRlZ29yeVZpZXcucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuU3RvcmFn
ZUNhdGVnb3J5Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJv
dG90eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlciA9IGZ1bmN0
aW9uKHJvb3RFbGVtZW50KQoreworICAgIHRoaXMuX3Jvb3QgPSByb290RWxlbWVudDsKKyAgICB0
aGlzLl90cmF2ZXJzZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVu
dHNUcmF2ZXJzZXIocm9vdEVsZW1lbnQpOworICAgIHRoaXMuX2xhc3RUcmVlRWxlbWVudCA9IG51
bGw7CisgICAgdGhpcy5fbGFzdEluZGV4ID0gLTE7Cit9CisKK1dlYkluc3BlY3Rvci5SZXNvdXJj
ZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICBuZXh0U2VhcmNoUmVzdWx0OiBm
dW5jdGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWN1cnJlbnRU
cmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5f
dHJhdmVyc2VyLmZpcnN0KCksIDApOworCisgICAgICAgIGlmICghY3VycmVudFRyZWVFbGVtZW50
LnNlYXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1
bHQodGhpcy5fdHJhdmVyc2VyLm5leHQoY3VycmVudFRyZWVFbGVtZW50KSwgMCk7CisgICAgICAg
IAorICAgICAgICBpZiAodGhpcy5fbGFzdFRyZWVFbGVtZW50ICE9PSBjdXJyZW50VHJlZUVsZW1l
bnQgfHwgdGhpcy5fbGFzdEluZGV4ID09PSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9z
ZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCAwKTsKKworICAgICAgICBpZiAodGhpcy5f
bGFzdEluZGV4ID09IGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKQor
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIubmV4
dChjdXJyZW50VHJlZUVsZW1lbnQpLCAwKTsKKworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNo
UmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCwgdGhpcy5fbGFzdEluZGV4ICsgMSk7CisgICAgfSwK
KyAgICAKKyAgICBwcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oY3VycmVudFRyZWVFbGVt
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVsZW1lbnQpIHsKKyAgICAgICAg
ICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5sYXN0KCk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVudC5zZWFy
Y2hNYXRjaGVzQ291bnQgLSAxKTsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgJiYgdGhpcy5f
bGFzdFRyZWVFbGVtZW50ID09PSBjdXJyZW50VHJlZUVsZW1lbnQgJiYgdGhpcy5fbGFzdEluZGV4
ID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQoY3VycmVudFRyZWVF
bGVtZW50LCB0aGlzLl9sYXN0SW5kZXggLSAxKTsKKyAgICAgICAgIAorICAgICAgICB2YXIgdHJl
ZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZXIucHJldmlvdXMoY3VycmVudFRyZWVFbGVtZW50KQor
ICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50LCB0cmVlRWxlbWVu
dC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsKKyAgICB9LAorCisgICAgX3NlYXJjaFJlc3VsdDog
ZnVuY3Rpb24odHJlZUVsZW1lbnQsIGluZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGFzdFRy
ZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2xhc3RJbmRleCA9IGluZGV4
OworICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVlRWxlbWVudCwgaW5kZXg6IGluZGV4
fTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJh
dmVyc2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7CisgICAgdGhpcy5fcm9vdCA9IHJvb3RF
bGVtZW50OworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZl
cnNlci5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLm5leHQodGhpcy5fcm9vdCk7CisgICAgfSwKKyAgICAgICAgCisgICAgbGFz
dDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
LnByZXZpb3VzKHRoaXMuX3Jvb3QpOyAgICAKKyAgICB9LAorCisgICAgbmV4dDogZnVuY3Rpb24o
c3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHN0YXJ0
VHJlZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhp
cy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9yb290OworICAgICAgICB9IHdo
aWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYmICF0aGlzLl9lbGVtZW50SGFz
U2VhcmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7
CisgICAgfSwKKworICAgIHByZXZpb3VzOiBmdW5jdGlvbihzdGFydFRyZWVFbGVtZW50KQorICAg
IHsKKyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRUcmVlRWxlbWVudDsKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZVByZXZpb3VzKHRy
ZWVFbGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQoKTsKKyAgICAgICAgfSB3aGlsZSAo
dHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhpcy5fZWxlbWVudEhhc1NlYXJj
aFJlc3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OworICAg
IH0sCisKKyAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZU5leHRUcmVlRWxlbWVudChmYWxzZSwg
dGhpcy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9lbGVtZW50SGFzU2VhcmNoUmVzdWx0
czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gdHJlZUVsZW1l
bnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50ICYmIHRy
ZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudDsKKyAgICB9LAorCisgICAgX3RyYXZlcnNlUHJl
dmlvdXM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyZWVF
bGVtZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxzZSwgdGhpcy5fcm9vdCwgdHJ1
ZSk7CisgICAgfSwKKworICAgIF9sYXN0VHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3Jvb3Q7CisgICAgICAgIHZhciBuZXh0VHJl
ZUVsZW1lbnQ7IAorICAgICAgICB3aGlsZSAobmV4dFRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVy
c2VOZXh0KHRyZWVFbGVtZW50KSkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gbmV4dFRyZWVF
bGVtZW50OworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7ICAgICAgICAKKyAgICB9LAorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFt
ZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMK
aW5kZXggYjJmZTUxZi4uNmM3NmUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC01Niw2ICs1NiwyNiBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUuRXZlbnRzID0gewogICAgIExvYWRlZDogImxvYWRlZCIKIH0KIAorV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4ID0gZnVuY3Rpb24ocXVlcnkp
Cit7CisgICAgdmFyIHJlZ2V4OworICAgIAorICAgIC8vIEZpcnN0IHRyeSBjcmVhdGluZyByZWdl
eCBpZiB1c2VyIGtub3dzIHRoZSAvIC8gaGludC4KKyAgICB0cnkgeworICAgICAgICBpZiAoL15c
Ly4qXC8kLy50ZXN0KHF1ZXJ5KSkKKyAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChxdWVy
eS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0gMSkpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgLy8gU2lsZW50IGNhdGNoLgorICAgIH0KKworICAgIC8vIE90aGVyd2lzZSBqdXN0IGRv
IGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgorICAgIGlmICghcmVnZXgpIAorICAgICAgICByZWdl
eCA9IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAKKyAgICByZXR1cm4gcmVnZXg7Cit9
CisKKwogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICBnZXQgdmlz
aWJsZSgpCiAgICAgewpAQCAtMzY3LDE4ICszODcsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4ID0gLTE7CiAgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAKLSAgICAg
ICAgICAgIC8vIEZpcnN0IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgotICAgICAgICAgICAg
dmFyIHJlZ2V4T2JqZWN0ID0gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOwotICAgICAgICAgICAg
dGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhyZWdleE9iamVjdCwgdGhpcy5fc2VhcmNoUmVzdWx0
cyk7Ci0KLSAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHJlZ2V4IHNlYXJjaCBpZiB1c2VyIGtub3dz
IHRoZSAvIC8gaGludC4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKC9e
XC8uKlwvJC8udGVzdChxdWVyeSkpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbGxlY3RS
ZWdleE1hdGNoZXMobmV3IFJlZ0V4cChxdWVyeS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0g
MSkpLCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTaWxlbnQgY2F0Y2guCi0gICAgICAgICAgICB9Ci0KKyAgICAgICAg
ICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdl
eChxdWVyeSk7CisgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gdGhpcy5fY29sbGVj
dFJlZ2V4TWF0Y2hlcyhyZWdleCk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGNhbGxiYWNr
KHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKICAgICAgICAgfQogCkBAIC00MDEs
MjQgKzQxMiwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5nZShudWxsKTsKICAgICB9LAog
CisgICAgaGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoID4gMDsKKyAgICB9LAorCiAgICAganVtcFRvRmly
c3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1Nl
YXJjaFJlc3VsdCgwKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQoMCk7CiAgICAg
fSwKIAogICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAt
IDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFyY2hSZXN1bHRz
Lmxlbmd0aCAtIDEpOwogICAgIH0sCiAKICAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ICsgMSk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVz
dWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpOwogICAgIH0sCiAKICAgICBq
dW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhp
cy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCAtIDEp
OworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVz
dWx0SW5kZXggLSAxKTsKICAgICB9LAogCiAgICAgc2hvd2luZ0ZpcnN0U2VhcmNoUmVzdWx0OiBm
dW5jdGlvbigpCkBAIC00MzEsNyArNDQ3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoICYm
IHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRoaXMuX3NlYXJjaFJlc3VsdHMu
bGVuZ3RoIC0gMSk7CiAgICAgfSwKIAotICAgIF9qdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9u
KGluZGV4KQorICAgIGp1bXBUb1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oaW5kZXgpCiAgICAgewog
ICAgICAgICBpZiAoIXRoaXMubG9hZGVkIHx8ICF0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzOSwxOSArNDU1LDIxIEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFya0Fu
ZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5fY3VycmVudFNlYXJjaFJlc3Vs
dEluZGV4XSk7CiAgICAgfSwKIAotICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlvbihy
ZWdleE9iamVjdCwgcmFuZ2VzKQorICAgIF9jb2xsZWN0UmVnZXhNYXRjaGVzOiBmdW5jdGlvbihy
ZWdleE9iamVjdCkKICAgICB7CisgICAgICAgIHZhciByYW5nZXMgPSBbXTsKICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGkpOwogICAgICAgICAgICAg
dmFyIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgdmFyIG1h
dGNoID0gcmVnZXhPYmplY3QuZXhlYyhsaW5lKTsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2UoaSwgb2Zmc2V0ICsgbWF0Y2guaW5kZXgsIGksIG9mZnNldCArIG1hdGNoLmluZGV4ICsg
bWF0Y2hbMF0ubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFswXS5sZW5n
dGgpCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgV2ViSW5zcGVjdG9y
LlRleHRSYW5nZShpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCwgaSwgb2Zmc2V0ICsgbWF0Y2guaW5k
ZXggKyBtYXRjaFswXS5sZW5ndGgpKTsKICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1h
dGNoLmluZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5n
KG1hdGNoLmluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSB3aGls
ZSAobWF0Y2gpCisgICAgICAgICAgICB9IHdoaWxlIChtYXRjaCAmJiBsaW5lKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDY0YTdhOWYuLmFhMDRjNTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBA
IC0xMDMxLDEyICsxMDMxLDI3IEBAIGZ1bmN0aW9uIGhpZ2hsaWdodFNlYXJjaFJlc3VsdHMoZWxl
bWVudCwgcmVzdWx0UmFuZ2VzKQogCiBmdW5jdGlvbiBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSwg
ZXh0cmFGbGFncykKIHsKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBrZXB0IHRoZSBzYW1lIGFzIHRo
ZSBvbmUgaW4gSW5zcGVjdG9yUGFnZUFnZW50LmNwcC4KKyAgICByZWdleFNwZWNpYWxDaGFyYWN0
ZXJzID0gIltdKCl7fSstKi4sP1xcXiR8IjsKICAgICB2YXIgcmVnZXggPSAiIjsKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHF1ZXJ5Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBjaGFyID0g
cXVlcnkuY2hhckF0KGkpOwotICAgICAgICBpZiAoY2hhciA9PT0gIl0iKQotICAgICAgICAgICAg
Y2hhciA9ICJcXF0iOwotICAgICAgICByZWdleCArPSAiWyIgKyBjaGFyICsgIl0iOworICAgICAg
ICBpZiAocmVnZXhTcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKGNoYXIpICE9IC0xKQorICAgICAg
ICAgICAgcmVnZXggKz0gIlxcIjsKKyAgICAgICAgcmVnZXggKz0gY2hhcjsKICAgICB9CiAgICAg
cmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsICJpIiArIChleHRyYUZsYWdzIHx8ICIiKSk7CiB9CisK
K2Z1bmN0aW9uIGNvdW50UmVnZXhNYXRjaGVzKHJlZ2V4LCBjb250ZW50KQoreworICAgIHZhciB0
ZXh0ID0gY29udGVudDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbWF0Y2g7CisgICAg
d2hpbGUgKHRleHQgJiYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHsKKyAgICAgICAgaWYg
KG1hdGNoWzBdLmxlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jlc3VsdDsKKyAgICAgICAgdGV4
dCA9IHRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91680</attachid>
            <date>2011-04-29 07:55:48 -0700</date>
            <delta_ts>2011-05-13 04:46:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>36266</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ODBjNWEzLi5mMjNhZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAg
QEAKKzIwMTEtMDQtMjkgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlYXJjaFJlZ2V4U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRF
dmVudEZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZEV2
ZW50RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5h
dmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0
YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9zaG93UmVzb3VyY2VW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaC5zZWFyY2hJbkVkaXRlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5jYWxsYmFjayk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fZW5zdXJl
Vmlld1NlYXJjaFBlcmZvcm1lZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlLl9zaG93U2VhcmNoUmVzdWx0LmNhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fcmVzZXRTZWFyY2hS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUu
c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlc291cmNlQnlV
UkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90
b3R5cGUuX3Jlc2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVS
ZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgc2VhcmNoTWF0Y2hlc0NvdW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNl
YXJjaE1hdGNoZXNGb3VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNo
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJv
bGxlci5wcm90b3R5cGUubmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUucHJldmlvdXNTZWFyY2hSZXN1bHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90
eXBlLl9zZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNU
cmVlRWxlbWVudHNUcmF2ZXJzZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3Vs
dHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLmZpcnN0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5sYXN0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVy
c2VyLnByb3RvdHlwZS5uZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5wcmV2aW91cyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX3Ry
YXZlcnNlTmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVt
ZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2VsZW1lbnRIYXNTZWFyY2hSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3Rv
dHlwZS5fdHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVz
dWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2xhc3RUcmVlRWxlbWVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZG9GaW5kU2VhcmNo
TWF0Y2hlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBl
cmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5oYXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9MYXN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3Vs
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb1By
ZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NvbGxlY3RSZWdleE1hdGNoZXMpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoKToKKwogMjAxMS0wNC0yOSAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uCmluZGV4IGU1ZDMyOGYuLjQ4Mzk1NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24KQEAgLTk2LDYgKzk2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjogIlNlYXJjaFJlc3VsdCIsCisgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuIiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKwkgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJmcmFtZUlkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IlJlc291cmNlIGZyYW1lIGlkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJt
YXRjaGVzQ291bnQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9m
IG1hdGNoZXMgaW4gcmVzb3VyY2UgY29udGVudC4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAg
ICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKQEAgLTE1Nyw2ICsx
NjcsMTggQEAKICAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb250ZW50IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IlJlc291cmNlIGNvbnRlbnQuIiB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJzZWFyY2hJblJlc291cmNl
cyIsCisgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNlYXJjaGVzIGZvciBnaXZlbiBz
dHJpbmcgaW4gZnJhbWUgLyByZXNvdXJjZSB0cmVlIHN0cnVjdHVyZS4iLAorICAgICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQi
LCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHRvIHNlYXJjaCBmb3Iu
IiAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYXNlU2Vuc2l0aXZlIiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0cnVl
LCBzZWFyY2ggaXMgY2FzZSBzZW5zaXRpdmUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImlzUmVnZXgiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIklmIHRydWUsIHRyZWF0cyBzdHJpbmcgcGFyYW1ldGVyIGFzIHJlZ2V4LiIg
fQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICIkcmVmIjogIlNlYXJjaFJlc3VsdCIgfSwgImRlc2NyaXB0aW9uIjogIkxpc3Qgb2Yg
c2VhcmNoIHJlc3VsdHMuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAg
ICAgICBdLAogICAgICAgICAiZXZlbnRzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCA2Njc1YzIyLi4wYjczY2Y3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNTMs
NiArNTMsNyBAQAogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJN
ZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZWd1bGFyRXhwcmVz
c2lvbi5oIgogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgpAQCAtNjEsOSArNjIsMTUgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3Bh
Y2UgeworLy8gVGhpcyBzaG91bGQgYmUga2VwdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIGZyb250
LWVuZC91dGlsaXRpZXMuanMKK3N0YXRpYyBjb25zdCBjaGFyIHJlZ2V4U3BlY2lhbENoYXJhY3Rl
cnNbXSA9ICJbXSgpe30rLSouLD9cXF4kfCI7Cit9CisKIHN0YXRpYyBib29sIGRlY29kZVNoYXJl
ZEJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHRl
eHRFbmNvZGluZ05hbWUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmIChidWZmZXIpIHsKQEAg
LTEyOCw2ICsxMzUsMTMgQEAgc3RhdGljIGJvb2wgZGVjb2RlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqIHJlc3VsdCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3N0YXRpYyBib29sIGRlY29kZU1haW5SZXNvdXJjZShGcmFtZSogZnJhbWUsIFN0
cmluZyogcmVzdWx0KQoreworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gZnJhbWUtPmRv
Y3VtZW50KCktPmlucHV0RW5jb2RpbmcoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZm
ZXIgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEo
KTsKKyAgICByZXR1cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFt
ZSwgcmVzdWx0KTsKK30KKwogUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2Vu
dHMsIFBhZ2UqIHBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3Ry
dW1lbnRpbmdBZ2VudHMsIHBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOwpAQCAtMTQ0LDEx
ICsxNTgsOCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLAogICAgIERvY3VtZW50TG9hZGVyKiBs
b2FkZXIgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBidWZmZXI7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBsb2FkZXItPnVybCgpKSkgewotICAgICAg
ICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29k
aW5nKCk7Ci0gICAgICAgIGJ1ZmZlciA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5t
YWluUmVzb3VyY2VEYXRhKCk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBkZWNvZGVTaGFyZWRCdWZmZXIo
YnVmZmVyLCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOwotICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIGxvYWRlci0+dXJsKCkpKQorICAgICAgICBz
dWNjZXNzID0gZGVjb2RlTWFpblJlc291cmNlKGZyYW1lLCByZXN1bHQpOwogICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgc3VjY2VzcyA9IGRlY29kZUNhY2hlZFJlc291cmNlKGNhY2hlZFJlc291
cmNlKGZyYW1lLCB1cmwpLCByZXN1bHQpOwogCkBAIC0zMzUsNiArMzQ2LDE4IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNl
dDxDb29raWU+JiBjb29rCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKK3N0YXRpYyBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCit7
CisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzdWx0OworCisgICAgY29uc3QgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1l
LT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMo
KTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChp
dC0+c2Vjb25kLmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7CiAgICAgLy8gSWYg
d2UgY2FuIGdldCByYXcgY29va2llcy4KQEAgLTM1MCwxMSArMzczLDEwIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogY29va2llCiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobWFpbkZyYW1lKCkpKSB7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBj
b25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3Vy
Y2VzID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNl
cygpOwotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwotICAgICAgICBmb3IgKENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVj
dG9yPENhY2hlZFJlc291cmNlKj4gYWxsUmVzb3VyY2VzID0gY2FjaGVkUmVzb3VyY2VzRm9yRnJh
bWUoZnJhbWUpOworICAgICAgICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0Owot
ICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVu
dCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgZG9jQ29va2llc0xp
c3QpOworICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhk
b2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICgqaXQpLT51cmwoKSksIGRvY0Nvb2tpZXNM
aXN0KTsKIAogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhl
IFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgpAQCAtMzg1LDEwICs0MDcsMTAgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSwgY28KICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7CiAgICAgICAgIGlmIChkb2N1bWVudC0+dXJsKCkuaG9zdCgpICE9IGRv
bWFpbikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwotICAgICAgICBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gYWxsUmVzb3VyY2VzLmVuZCgpOwotICAgICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVy
OjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSksIGNv
b2tpZU5hbWUpOworCisgICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNl
cyA9IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgZm9yIChWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4o
KTsgaXQgIT0gYWxsUmVzb3VyY2VzLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgV2ViQ29yZTo6
ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgKCppdCktPnVybCgp
KSwgY29va2llTmFtZSk7CiAgICAgfQogfQogCkBAIC00MTAsMjQgKzQzMiw4MyBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgY29uc3QgU3RyaQogICAgICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29u
dGVudChlcnJvclN0cmluZywgZnJhbWUsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBjb250
ZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZpcmVk
KCkKK3N0YXRpYyBTdHJpbmcgY3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0
ZXh0KQogewotICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50VGlt
ZSgpKTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
dGV4dC5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nIHNwZWNpYWxzKHJlZ2V4U3BlY2lhbENoYXJh
Y3RlcnMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkr
KykgeworICAgICAgICBpZiAoc3BlY2lhbHMuZmluZChjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIlxcIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVy
c1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmxvYWRFdmVudEZpcmVkKCkKK3N0YXRpYyBpbnQgY291bnRSZWd1bGFyRXhwcmVz
c2lvbk1hdGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQpCiB7Ci0gICAgIG1fZnJvbnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1l
KCkpOworICAgIGludCByZXN1bHQgPSAwOworICAgIGludCBwb3NpdGlvbjsKKyAgICB1bnNpZ25l
ZCBzdGFydCA9IDA7CisgICAgaW50IG1hdGNoTGVuZ3RoOworICAgIHdoaWxlICgocG9zaXRpb24g
PSByZWdleC5tYXRjaChjb250ZW50LCBzdGFydCwgJm1hdGNoTGVuZ3RoKSkgIT0gLTEpIHsKKyAg
ICAgICAgaWYgKHN0YXJ0ID49IGNvbnRlbnQubGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKG1hdGNoTGVuZ3RoID4gMCkKKyAgICAgICAgICAgICsrcmVzdWx0OworICAg
ICAgICBzdGFydCA9IHBvc2l0aW9uICsgMTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVy
KiBsb2FkZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yU2VhcmNoTWF0Y2goY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwg
aW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICBtX2Zyb250ZW5kLT5mcmFtZU5hdmlnYXRlZChidWls
ZE9iamVjdEZvckZyYW1lKGxvYWRlci0+ZnJhbWUoKSksIGxvYWRlcklkKGxvYWRlcikpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKKyAgICByZXN1
bHQtPnNldFN0cmluZygidXJsIiwgdXJsKTsKKyAgICByZXN1bHQtPnNldE51bWJlcigibWF0Y2hl
c0NvdW50IiwgbWF0Y2hlc0NvdW50KTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIG9iamVjdCkKIHsKLSAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGZyYW1l
SWQoZnJhbWUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKworICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/
ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKKyAgICBTdHJpbmcgcmVnZXhTb3VyY2UgPSBpc1Jl
Z2V4ID8gdGV4dCA6IGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKHRleHQpOworCisgICAgYm9vbCBj
YXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNp
dGl2ZSA6IGZhbHNlOworICAgIFJlZ3VsYXJFeHByZXNzaW9uIHJlZ2V4KHJlZ2V4U291cmNlLCBj
YXNlU2Vuc2l0aXZlID8gVGV4dENhc2VTZW5zaXRpdmUgOiBUZXh0Q2FzZUluc2Vuc2l0aXZlKTsK
KworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7
CisgICAgICAgIFN0cmluZyBjb250ZW50OworICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2Uq
PiBhbGxSZXNvdXJjZXMgPSBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSk7CisgICAgICAg
IGZvciAoVmVjdG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAg
ICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gKml0OworICAgICAgICAgICAg
c3dpdGNoIChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2FjaGVkUmVz
b3VyY2UpKSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVl
dFJlc291cmNlOgorICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJl
c291cmNlOgorICAgICAgICAgICAgICAgIGlmIChkZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNoZWRS
ZXNvdXJjZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291
bnQgPSBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQtPnB1c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJh
bWUpLCBjYWNoZWRSZXNvdXJjZS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGRlY29kZU1haW5SZXNvdXJjZShmcmFtZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICBpbnQg
bWF0Y2hlc0NvdW50ID0gY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMocmVnZXgsIGNvbnRl
bnQpOworICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICByZXN1
bHQtPnB1c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJhbWUpLCBm
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgKm9iamVjdCA9IHJlc3VsdDsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3Js
ZCogd29ybGQpCkBAIC00NDcsNiArNTI4LDI2IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpk
aWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29yCiAg
ICAgfQogfQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQo
KQoreworICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50VGltZSgp
KTsKK30KKwordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRFdmVudEZpcmVkKCkKK3sKKyAg
ICAgbV9mcm9udGVuZC0+bG9hZEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVy
KQoreworICAgIG1fZnJvbnRlbmQtPmZyYW1lTmF2aWdhdGVkKGJ1aWxkT2JqZWN0Rm9yRnJhbWUo
bG9hZGVyLT5mcmFtZSgpKSwgbG9hZGVySWQobG9hZGVyKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBtX2Zyb250ZW5k
LT5mcmFtZURldGFjaGVkKGZyYW1lSWQoZnJhbWUpKTsKK30KKwogRnJhbWUqIEluc3BlY3RvclBh
Z2VBZ2VudDo6bWFpbkZyYW1lKCkKIHsKICAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKTsK
QEAgLTUwNCwxMCArNjA1LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmCiAKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHN1YnJlc291cmNlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKICAgICByZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCBzdWJyZXNvdXJjZXMpOwotICAg
IGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNv
dXJjZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2Fj
aGVkUmVzb3VyY2VzKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3Vy
Y2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICBmb3Ig
KENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKworICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9IGNhY2hlZFJlc291cmNlc0Zv
ckZyYW1lKGZyYW1lKTsKKyAgICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gKml0
OwogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZU9iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTdHJpbmco
InVybCIsIGNhY2hlZFJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIHJlc291cmNlT2JqZWN0LT5z
ZXRTdHJpbmcoInR5cGUiLCBjYWNoZWRSZXNvdXJjZVR5cGVTdHJpbmcoKmNhY2hlZFJlc291cmNl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5k
ZXggMDVhZTU3Yi4uYzEyZDc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7
CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgS1VSTDsKIGNsYXNzIFBhZ2U7Citj
bGFzcyBSZWd1bGFyRXhwcmVzc2lvbjsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAK
QEAgLTg5LDkgKzkwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQ29va2llKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAg
ICAgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiopOwogICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogY29uc3QgYmFz
ZTY0RW5jb2RlLCBTdHJpbmcqIGNvbnRlbnQpOworICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjb25zdCBjYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBjb25zdCBpc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Kik7
CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCi0gICAgdm9pZCBkaWRDb21t
aXRMb2FkKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwogICAgIHZvaWQgZG9tQ29udGVudEV2
ZW50RmlyZWQoKTsKICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwppbmRleCA2OTZk
NzM4Li4yNjcyNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKQEAgLTM3Miw2ICszNzIsOSBAQCBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgIF9zaG93UmVzb3VyY2VWaWV3OiBmdW5j
dGlvbihyZXNvdXJjZSkKICAgICB7CiAgICAgICAgIHZhciB2aWV3ID0gV2ViSW5zcGVjdG9yLlJl
c291cmNlVmlldy5yZXNvdXJjZVZpZXdGb3JSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGNvdWxkIGJlIHJlbW92ZWQgb25jZSB3ZSBzdG9wIGNhY2hpbmcgU291cmNl
RnJhbWVzLiAgICAgICAgCisgICAgICAgIGlmICh2aWV3LnNlYXJjaENhbmNlbGVkKQorICAgICAg
ICAgICAgdmlldy5zZWFyY2hDYW5jZWxlZCgpOwogICAgICAgICB0aGlzLl9mZXRjaEFuZEFwcGx5
RGlmZk1hcmt1cCh2aWV3LCByZXNvdXJjZSk7CiAgICAgICAgIHRoaXMuX2lubmVyU2hvd1ZpZXco
dmlldyk7CiAgICAgfSwKQEAgLTY3OCwyNSArNjgxLDEzMiBAQCBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgIH0sCiAK
LSAgICBnZXQgc2VhcmNoYWJsZVZpZXdzKCkKKyAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihx
dWVyeSkgCiAgICAgewotICAgICAgICB2YXIgdmlld3MgPSBbXTsKKyAgICAgICAgdGhpcy5fcmVz
ZXRTZWFyY2hSZXN1bHRzKCk7CisgICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgICAgIHZhciB0b3RhbE1hdGNo
ZXNDb3VudCA9IDA7CiAKLSAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVW
aWV3OwotICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNlYXJj
aCkKLSAgICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICBmdW5jdGlv
biBzZWFyY2hJbkVkaXRlZFJlc291cmNlKHRyZWVFbGVtZW50KQorICAgICAgICB7CisgICAgICAg
ICAgICB2YXIgcmVzb3VyY2UgPSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAg
ICAgICAgIGlmIChyZXNvdXJjZS5oaXN0b3J5Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHZhciBtYXRjaGVzQ291bnQgPSBjb3VudFJlZ2V4TWF0Y2hl
cyhyZWdleCwgcmVzb3VyY2UuY29udGVudCkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50LnNlYXJj
aE1hdGNoZXNGb3VuZChtYXRjaGVzQ291bnQpOworICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291
bnQgKz0gbWF0Y2hlc0NvdW50OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJh
Y2soZXJyb3IsIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFlcnJvcikgewor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hSZXN1bHQgPSByZXN1bHRbaV07CisgICAg
ICAgICAgICAgICAgICAgIHZhciBmcmFtZVRyZWVFbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1lbnRG
b3JGcmFtZUlkW3NlYXJjaFJlc3VsdC5mcmFtZUlkXTsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJlc291cmNlID0gZnJhbWVUcmVlRWxlbWVudC5yZXNvdXJjZUJ5VVJMKHNlYXJjaFJlc3VsdC51
cmwpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZS5oaXN0b3J5Lmxlbmd0aCA+
IDApCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBlZGl0ZWQgcmVz
b3VyY2VzLgorICAgICAgICAgICAgICAgICAgICB0aGlzLl9maW5kVHJlZUVsZW1lbnRGb3JSZXNv
dXJjZShyZXNvdXJjZSkuc2VhcmNoTWF0Y2hlc0ZvdW5kKHNlYXJjaFJlc3VsdC5tYXRjaGVzQ291
bnQpOworICAgICAgICAgICAgICAgICAgICB0b3RhbE1hdGNoZXNDb3VudCArPSBzZWFyY2hSZXN1
bHQubWF0Y2hlc0NvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRl
U2VhcmNoTWF0Y2hlc0NvdW50KHRvdGFsTWF0Y2hlc0NvdW50LCB0aGlzKTsKKyAgICAgICAgICAg
IHRoaXMuX3NlYXJjaENvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJj
aENvbnRyb2xsZXIodGhpcy5yZXNvdXJjZXNMaXN0VHJlZUVsZW1lbnQpOworCisgICAgICAgICAg
ICBpZiAodGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50ICYmIHRoaXMuc2lkZWJh
clRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQpCisgICAgICAgICAg
ICAgICAgdGhpcy5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHRoaXMuX2ZvckFsbFJlc291cmNlVHJlZUVsZW1lbnRzKHNlYXJjaEluRWRpdGVk
UmVzb3VyY2UuYmluZCh0aGlzKSk7CisgICAgICAgIFBhZ2VBZ2VudC5zZWFyY2hJblJlc291cmNl
cyhyZWdleC5zb3VyY2UsICFyZWdleC5pZ25vcmVDYXNlLCB0cnVlLCBjYWxsYmFjay5iaW5kKHRo
aXMpKTsgICAgICAgICAgICAKKyAgICB9LAorICAgIAorICAgIF9lbnN1cmVWaWV3U2VhcmNoUGVy
Zm9ybWVkOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHZpZXdT
ZWFyY2hQZXJmb3JtZWRDYWxsYmFjayhzZWFyY2hJZCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHNlYXJjaElkICE9PSB0aGlzLl9sYXN0Vmlld1NlYXJjaElkKQorICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gU2VhcmNoIGlzIG9ic29sZXRlLgorICAgICAgICAgICAgdGhpcy5fdmlld1Nl
YXJjaEluUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXRoaXMuX3ZpZXdTZWFyY2hJblByb2dyZXNzKSB7CisgICAgICAg
ICAgICBpZiAoIXRoaXMudmlzaWJsZVZpZXcuaGFzU2VhcmNoUmVzdWx0cygpKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2UgZ2l2ZSBpZCB0byBlYWNoIHNlYXJjaCwgc28gdGhhdCB3ZSBjYW4gc2tp
cCBjYWxsYmFja3MgZm9yIG9ic29sZXRlIHNlYXJjaGVzLgorICAgICAgICAgICAgICAgIHRoaXMu
X2xhc3RWaWV3U2VhcmNoSWQgPSB0aGlzLl9sYXN0Vmlld1NlYXJjaElkID8gdGhpcy5fbGFzdFZp
ZXdTZWFyY2hJZCArIDEgOiAwOworICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdTZWFyY2hJblBy
b2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LnBlcmZvcm1T
ZWFyY2godGhpcy5jdXJyZW50UXVlcnksIHZpZXdTZWFyY2hQZXJmb3JtZWRDYWxsYmFjay5iaW5k
KHRoaXMsIHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3Nob3dT
ZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKHNlYXJjaFJlc3VsdCkKKyAgICB7CisgICAgICAgIHRoaXMu
X2xhc3RTZWFyY2hSZXN1bHRJbmRleCA9IHNlYXJjaFJlc3VsdC5pbmRleDsKKyAgICAgICAgdGhp
cy5fbGFzdFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50ID0gc2VhcmNoUmVzdWx0LnRyZWVFbGVtZW50
OwogCisgICAgICAgIC8vIEF0IGZpcnN0IHNob3cgdmlldyBmb3IgdHJlZUVsZW1lbnQuCisgICAg
ICAgIGlmIChzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQgIT09IHRoaXMuc2lkZWJhclRyZWUuc2Vs
ZWN0ZWRUcmVlRWxlbWVudCkgeworICAgICAgICAgICAgdGhpcy5zaG93UmVzb3VyY2Uoc2VhcmNo
UmVzdWx0LnRyZWVFbGVtZW50LnJlcHJlc2VudGVkT2JqZWN0KTsKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLmZvY3VzU2VhcmNoRmllbGQoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc2VhcmNoSWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQgIT09
IHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm47IC8vIFVzZXIgaGFzIHNlbGVjdGVkIGFub3RoZXIgdmlldyB3aGlsZSB3ZSB3ZXJlIHNlYXJj
aGluZy4KKyAgICAgICAgICAgIGlmICh0aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXggIT0gLTEp
CisgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5qdW1wVG9TZWFyY2hSZXN1bHQodGhp
cy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZW4g
cnVuIFNvdXJjZUZyYW1lIHNlYXJjaCBpZiBuZWVkZWQgYW5kIGp1bXAgdG8gc2VhcmNoIHJlc3Vs
dCBpbmRleCB3aGVuIGRvbmUuCisgICAgICAgIHRoaXMuX2Vuc3VyZVZpZXdTZWFyY2hQZXJmb3Jt
ZWQoY2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIF9yZXNldFNlYXJjaFJlc3Vs
dHM6IGZ1bmN0aW9uKCkKKyAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNl
VHJlZUVsZW1lbnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHJlc291
cmNlVHJlZUVsZW1lbnQuX3Jlc291cmNlOwotICAgICAgICAgICAgdmFyIHJlc291cmNlVmlldyA9
IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZpZXcucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3Vy
Y2UpOwotICAgICAgICAgICAgaWYgKHJlc291cmNlVmlldy5wZXJmb3JtU2VhcmNoICYmIHJlc291
cmNlVmlldyAhPT0gdmlzaWJsZVZpZXcpCi0gICAgICAgICAgICAgICAgdmlld3MucHVzaChyZXNv
dXJjZVZpZXcpOworICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVudC5fcmVzZXRTZWFyY2hS
ZXN1bHRzKCk7CiAgICAgICAgIH0KKwogICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVF
bGVtZW50cyhjYWxsYmFjayk7Ci0gICAgICAgIHJldHVybiB2aWV3czsKKyAgICAgICAgaWYgKHRo
aXMudmlzaWJsZVZpZXcgJiYgdGhpcy52aXNpYmxlVmlldy5zZWFyY2hDYW5jZWxlZCkKKyAgICAg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKKworICAgICAgICB0aGlz
Ll9sYXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQgPSBudWxsOworICAgICAgICB0aGlzLl9sYXN0
U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKKyAgICAgICAgdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jl
c3MgPSBmYWxzZTsKKyAgICB9LAorCisgICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1h
dGNoZXNDb3VudCgwLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fcmVzZXRTZWFyY2hSZXN1bHRzKCk7
CiAgICAgfSwKIAorICAgIGp1bXBUb05leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5jdXJyZW50U2VhcmNoTWF0Y2hlcykKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVudCA9IHRoaXMuc2lkZWJhclRyZWUu
c2VsZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgdmFyIG5leHRTZWFyY2hSZXN1bHQgPSB0aGlz
Ll9zZWFyY2hDb250cm9sbGVyLm5leHRTZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50KTsK
KyAgICAgICAgdGhpcy5fc2hvd1NlYXJjaFJlc3VsdChuZXh0U2VhcmNoUmVzdWx0KTsKKyAgICB9
LAorICAgIAorICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNlYXJjaE1hdGNoZXMpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0aGlzLnNpZGViYXJUcmVl
LnNlbGVjdGVkVHJlZUVsZW1lbnQ7CisgICAgICAgIHZhciBwcmV2aW91c1NlYXJjaFJlc3VsdCA9
IHRoaXMuX3NlYXJjaENvbnRyb2xsZXIucHJldmlvdXNTZWFyY2hSZXN1bHQoY3VycmVudFRyZWVF
bGVtZW50KTsKKyAgICAgICAgdGhpcy5fc2hvd1NlYXJjaFJlc3VsdChwcmV2aW91c1NlYXJjaFJl
c3VsdCk7CisgICAgfSwKKyAgICAKICAgICBfZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHM6IGZ1
bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIHN0b3AgPSBmYWxzZTsKQEAgLTcw
NiwxNSArODE2LDYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgfQogICAgIH0sCiAKLSAgICBzZWFyY2hNYXRjaEZvdW5kOiBmdW5jdGlvbih2aWV3
LCBtYXRjaGVzKQotICAgIHsKLSAgICAgICAgaWYgKCF2aWV3LnJlc291cmNlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl9maW5kVHJlZUVsZW1l
bnRGb3JSZXNvdXJjZSh2aWV3LnJlc291cmNlKTsKLSAgICAgICAgaWYgKHRyZWVFbGVtZW50KQot
ICAgICAgICAgICAgdHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hGb3VuZChtYXRjaGVzKTsKLSAgICB9
LAotCiAgICAgX2ZpbmRUcmVlRWxlbWVudEZvclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkK
ICAgICB7CiAgICAgICAgIGZ1bmN0aW9uIGlzQW5jZXN0b3IoYW5jZXN0b3IsIG9iamVjdCkKQEAg
LTczMiwzMCArODMzLDYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhclRyZWUuZmluZFRyZWVFbGVtZW50KHJlc291
cmNlLCBpc0FuY2VzdG9yLCBnZXRQYXJlbnQpOwogICAgIH0sCiAKLSAgICBzZWFyY2hDYW5jZWxl
ZDogZnVuY3Rpb24oc3RhcnRpbmdOZXdTZWFyY2gpCi0gICAgewotICAgICAgICBXZWJJbnNwZWN0
b3IuUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkLmNhbGwodGhpcywgc3RhcnRpbmdOZXdT
ZWFyY2gpOwotCi0gICAgICAgIGlmIChzdGFydGluZ05ld1NlYXJjaCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50Ll9lcnJvcnNXYXJuaW5n
c1VwZGF0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVF
bGVtZW50cyhjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9u
KHF1ZXJ5KQotICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3VyY2VUcmVlRWxl
bWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVudC5fcmVzZXRC
dWJibGUoKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVFbGVt
ZW50cyhjYWxsYmFjayk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaC5jYWxsKHRoaXMsIHF1ZXJ5KTsKLSAgICB9LAotCiAgICAgc2hvd1ZpZXc6IGZ1
bmN0aW9uKHZpZXcpCiAgICAgewogICAgICAgICBpZiAodmlldykKQEAgLTEwMTEsNiArMTA4OCwx
MSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHRoaXMuX3RyZWVFbGVtZW50Rm9yUmVzb3VyY2VbcmVzb3VyY2UudXJsXSA9IHJlc291cmNlVHJl
ZUVsZW1lbnQ7CiAgICAgfSwKIAorICAgIHJlc291cmNlQnlVUkw6IGZ1bmN0aW9uKHVybCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl90cmVlRWxlbWVudEZvclJlc291cmNlW3VybF0ucmVw
cmVzZW50ZWRPYmplY3Q7CisgICAgfSwKKwogICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbih0cmVl
RWxlbWVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX2luc2VydEluUHJlc2VudGF0aW9uT3JkZXIo
dGhpcywgdHJlZUVsZW1lbnQpOwpAQCAtMTE2NCwxMSArMTI0NiwyMyBAQCBXZWJJbnNwZWN0b3Iu
RnJhbWVSZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0s
CiAKLSAgICBzZWFyY2hNYXRjaEZvdW5kOiBmdW5jdGlvbihtYXRjaGVzKQorICAgIF9yZXNldFNl
YXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Jlc2V0QnViYmxl
KCk7CisgICAgICAgIHRoaXMuX3NlYXJjaE1hdGNoZXNDb3VudCA9IDA7CisgICAgfSwKIAotICAg
ICAgICB0aGlzLl9zZXRCdWJibGVUZXh0KG1hdGNoZXMpOworICAgIGdldCBzZWFyY2hNYXRjaGVz
Q291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaE1hdGNoZXNDb3VudDsK
KyAgICB9LAorCisgICAgc2VhcmNoTWF0Y2hlc0ZvdW5kOiBmdW5jdGlvbihtYXRjaGVzQ291bnQp
CisgICAgeworICAgICAgICB0aGlzLl9yZXNldFNlYXJjaFJlc3VsdHMoKTsKKworICAgICAgICB0
aGlzLl9zZWFyY2hNYXRjaGVzQ291bnQgPSBtYXRjaGVzQ291bnQ7CisgICAgICAgIHRoaXMuX3Nl
dEJ1YmJsZVRleHQobWF0Y2hlc0NvdW50KTsKICAgICAgICAgdGhpcy5fYnViYmxlRWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJzZWFyY2gtbWF0Y2hlcyIpOwogCiAgICAgICAgIC8vIEV4cGFuZCwgZG8g
bm90IHNjcm9sbCBpbnRvIHZpZXcuCkBAIC0xNDI5LDMgKzE1MjMsMTEwIEBAIFdlYkluc3BlY3Rv
ci5TdG9yYWdlQ2F0ZWdvcnlWaWV3LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVjdG9yLlN0
b3JhZ2VDYXRlZ29yeVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3
LnByb3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIgPSBm
dW5jdGlvbihyb290RWxlbWVudCkKK3sKKyAgICB0aGlzLl9yb290ID0gcm9vdEVsZW1lbnQ7Cisg
ICAgdGhpcy5fdHJhdmVyc2VyID0gbmV3IFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVs
ZW1lbnRzVHJhdmVyc2VyKHJvb3RFbGVtZW50KTsKKyAgICB0aGlzLl9sYXN0VHJlZUVsZW1lbnQg
PSBudWxsOworICAgIHRoaXMuX2xhc3RJbmRleCA9IC0xOworfQorCitXZWJJbnNwZWN0b3IuUmVz
b3VyY2VzU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUgPSB7CisgICAgbmV4dFNlYXJjaFJlc3Vs
dDogZnVuY3Rpb24oY3VycmVudFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJy
ZW50VHJlZUVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRo
aXMuX3RyYXZlcnNlci5maXJzdCgpLCAwKTsKKworICAgICAgICBpZiAoIWN1cnJlbnRUcmVlRWxl
bWVudC5zZWFyY2hNYXRjaGVzQ291bnQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNo
UmVzdWx0KHRoaXMuX3RyYXZlcnNlci5uZXh0KGN1cnJlbnRUcmVlRWxlbWVudCksIDApOworICAg
ICAgICAKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RUcmVlRWxlbWVudCAhPT0gY3VycmVudFRyZWVF
bGVtZW50IHx8IHRoaXMuX2xhc3RJbmRleCA9PT0gLTEpCisgICAgICAgICAgICByZXR1cm4gdGhp
cy5fc2VhcmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCwgMCk7CisKKyAgICAgICAgaWYgKHRo
aXMuX2xhc3RJbmRleCA9PSBjdXJyZW50VHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50IC0g
MSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5fdHJhdmVyc2Vy
Lm5leHQoY3VycmVudFRyZWVFbGVtZW50KSwgMCk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Nl
YXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQsIHRoaXMuX2xhc3RJbmRleCArIDEpOworICAg
IH0sCisgICAgCisgICAgcHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGN1cnJlbnRUcmVl
RWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghY3VycmVudFRyZWVFbGVtZW50KSB7CisgICAg
ICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZXIubGFzdCgpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0cmVlRWxlbWVudCwgdHJlZUVsZW1lbnQu
c2VhcmNoTWF0Y2hlc0NvdW50IC0gMSk7ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChjdXJyZW50VHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50ICYmIHRo
aXMuX2xhc3RUcmVlRWxlbWVudCA9PT0gY3VycmVudFRyZWVFbGVtZW50ICYmIHRoaXMuX2xhc3RJ
bmRleCA+IDApCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KGN1cnJlbnRU
cmVlRWxlbWVudCwgdGhpcy5fbGFzdEluZGV4IC0gMSk7CisgICAgICAgICAKKyAgICAgICAgdmFy
IHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VyLnByZXZpb3VzKGN1cnJlbnRUcmVlRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0cmVlRWxlbWVudCwgdHJlZUVs
ZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50IC0gMSk7CisgICAgfSwKKworICAgIF9zZWFyY2hSZXN1
bHQ6IGZ1bmN0aW9uKHRyZWVFbGVtZW50LCBpbmRleCkKKyAgICB7CisgICAgICAgIHRoaXMuX2xh
c3RUcmVlRWxlbWVudCA9IHRyZWVFbGVtZW50OworICAgICAgICB0aGlzLl9sYXN0SW5kZXggPSBp
bmRleDsKKyAgICAgICAgcmV0dXJuIHt0cmVlRWxlbWVudDogdHJlZUVsZW1lbnQsIGluZGV4OiBp
bmRleH07CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50
c1RyYXZlcnNlciA9IGZ1bmN0aW9uKHJvb3RFbGVtZW50KQoreworICAgIHRoaXMuX3Jvb3QgPSBy
b290RWxlbWVudDsKK30KKworV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNUcmVlRWxlbWVudHNU
cmF2ZXJzZXIucHJvdG90eXBlID0geworICAgIGZpcnN0OiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMuX3Jvb3QpOworICAgIH0sCisgICAgICAgIAorICAg
IGxhc3Q6IGZ1bmN0aW9uKHN0YXJ0VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5wcmV2aW91cyh0aGlzLl9yb290KTsgICAgCisgICAgfSwKKworICAgIG5leHQ6IGZ1bmN0
aW9uKHN0YXJ0VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBz
dGFydFRyZWVFbGVtZW50OworICAgICAgICBkbyB7CisgICAgICAgICAgICB0cmVlRWxlbWVudCA9
IHRoaXMuX3RyYXZlcnNlTmV4dCh0cmVlRWxlbWVudCkgfHwgdGhpcy5fcm9vdDsKKyAgICAgICAg
fSB3aGlsZSAodHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhpcy5fZWxlbWVu
dEhhc1NlYXJjaFJlc3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVt
ZW50OworICAgIH0sCisKKyAgICBwcmV2aW91czogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkK
KyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VQcmV2aW91
cyh0cmVlRWxlbWVudCkgfHwgdGhpcy5fbGFzdFRyZWVFbGVtZW50KCk7CisgICAgICAgIH0gd2hp
bGUgKHRyZWVFbGVtZW50ICE9IHN0YXJ0VHJlZUVsZW1lbnQgJiYgIXRoaXMuX2VsZW1lbnRIYXNT
ZWFyY2hSZXN1bHRzKHRyZWVFbGVtZW50KSk7CisgICAgICAgIHJldHVybiB0cmVlRWxlbWVudDsK
KyAgICB9LAorCisgICAgX3RyYXZlcnNlTmV4dDogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAg
eworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQudHJhdmVyc2VOZXh0VHJlZUVsZW1lbnQoZmFs
c2UsIHRoaXMuX3Jvb3QsIHRydWUpOworICAgIH0sCisKKyAgICBfZWxlbWVudEhhc1NlYXJjaFJl
c3VsdHM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyZWVF
bGVtZW50IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVlRWxlbWVudCAm
JiB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQ7CisgICAgfSwKKworICAgIF90cmF2ZXJz
ZVByZXZpb3VzOiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
cmVlRWxlbWVudC50cmF2ZXJzZVByZXZpb3VzVHJlZUVsZW1lbnQoZmFsc2UsIHRoaXMuX3Jvb3Qs
IHRydWUpOworICAgIH0sCisKKyAgICBfbGFzdFRyZWVFbGVtZW50OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl9yb290OworICAgICAgICB2YXIgbmV4
dFRyZWVFbGVtZW50OyAKKyAgICAgICAgd2hpbGUgKG5leHRUcmVlRWxlbWVudCA9IHRoaXMuX3Ry
YXZlcnNlTmV4dCh0cmVlRWxlbWVudCkpCisgICAgICAgICAgICB0cmVlRWxlbWVudCA9IG5leHRU
cmVlRWxlbWVudDsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50OyAgICAgICAgCisgICAgfSwK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNl
RnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1l
LmpzCmluZGV4IDZkN2UxNzEuLmI2MjU5Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNTYsNiArNTYsMjYgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLkV2ZW50cyA9IHsKICAgICBMb2FkZWQ6ICJsb2FkZWQiCiB9CiAK
K1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCA9IGZ1bmN0aW9uKHF1
ZXJ5KQoreworICAgIHZhciByZWdleDsKKyAgICAKKyAgICAvLyBGaXJzdCB0cnkgY3JlYXRpbmcg
cmVnZXggaWYgdXNlciBrbm93cyB0aGUgLyAvIGhpbnQuCisgICAgdHJ5IHsKKyAgICAgICAgaWYg
KC9eXC8uKlwvJC8udGVzdChxdWVyeSkpCisgICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAo
cXVlcnkuc3Vic3RyaW5nKDEsIHF1ZXJ5Lmxlbmd0aCAtIDEpKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIC8vIFNpbGVudCBjYXRjaC4KKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UganVz
dCBkbyBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KKyAgICBpZiAoIXJlZ2V4KSAKKyAgICAgICAg
cmVnZXggPSBjcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgCisgICAgcmV0dXJuIHJlZ2V4
OworfQorCisKIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgZ2V0
IHZpc2libGUoKQogICAgIHsKQEAgLTM2NywxOCArMzg3LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1
bHRJbmRleCA9IC0xOwogICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOwogCi0g
ICAgICAgICAgICAvLyBGaXJzdCBkbyBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4KLSAgICAgICAg
ICAgIHZhciByZWdleE9iamVjdCA9IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKLSAgICAgICAg
ICAgIHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMocmVnZXhPYmplY3QsIHRoaXMuX3NlYXJjaFJl
c3VsdHMpOwotCi0gICAgICAgICAgICAvLyBUaGVuIHRyeSByZWdleCBzZWFyY2ggaWYgdXNlciBr
bm93cyB0aGUgLyAvIGhpbnQuCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlm
ICgvXlwvLipcLyQvLnRlc3QocXVlcnkpKQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2xs
ZWN0UmVnZXhNYXRjaGVzKG5ldyBSZWdFeHAocXVlcnkuc3Vic3RyaW5nKDEsIHF1ZXJ5Lmxlbmd0
aCAtIDEpKSwgdGhpcy5fc2VhcmNoUmVzdWx0cyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgICAgICAgICAgLy8gU2lsZW50IGNhdGNoLgotICAgICAgICAgICAgfQotCisgICAg
ICAgICAgICB2YXIgcmVnZXggPSBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNo
UmVnZXgocXVlcnkpOworICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IHRoaXMuX2Nv
bGxlY3RSZWdleE1hdGNoZXMocmVnZXgpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBjYWxs
YmFjayh0aGlzLCB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCk7CiAgICAgICAgIH0KIApAQCAt
NDAxLDI0ICs0MTIsMjkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5tYXJrQW5kUmV2ZWFsUmFuZ2UobnVsbCk7CiAgICAg
fSwKIAorICAgIGhhc1NlYXJjaFJlc3VsdHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCA+IDA7CisgICAgfSwKKwogICAgIGp1bXBU
b0ZpcnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1w
VG9TZWFyY2hSZXN1bHQoMCk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVzdWx0KDApOwog
ICAgIH0sCiAKICAgICBqdW1wVG9MYXN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5n
dGggLSAxKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fc2VhcmNoUmVz
dWx0cy5sZW5ndGggLSAxKTsKICAgICB9LAogCiAgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDog
ZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMu
X2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJj
aFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggKyAxKTsKICAgICB9LAogCiAg
ICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAg
IHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXgg
LSAxKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJj
aFJlc3VsdEluZGV4IC0gMSk7CiAgICAgfSwKIAogICAgIHNob3dpbmdGaXJzdFNlYXJjaFJlc3Vs
dDogZnVuY3Rpb24oKQpAQCAtNDMxLDcgKzQ0Nyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0
aCAmJiB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPT09ICh0aGlzLl9zZWFyY2hSZXN1
bHRzLmxlbmd0aCAtIDEpOwogICAgIH0sCiAKLSAgICBfanVtcFRvU2VhcmNoUmVzdWx0OiBmdW5j
dGlvbihpbmRleCkKKyAgICBqdW1wVG9TZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZCB8fCAhdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5n
dGgpCiAgICAgICAgICAgICByZXR1cm47CkBAIC00MzksMTkgKzQ1NSwyMSBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1h
cmtBbmRSZXZlYWxSYW5nZSh0aGlzLl9zZWFyY2hSZXN1bHRzW3RoaXMuX2N1cnJlbnRTZWFyY2hS
ZXN1bHRJbmRleF0pOwogICAgIH0sCiAKLSAgICBfY29sbGVjdFJlZ2V4TWF0Y2hlczogZnVuY3Rp
b24ocmVnZXhPYmplY3QsIHJhbmdlcykKKyAgICBfY29sbGVjdFJlZ2V4TWF0Y2hlczogZnVuY3Rp
b24ocmVnZXhPYmplY3QpCiAgICAgeworICAgICAgICB2YXIgcmFuZ2VzID0gW107CiAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQ7ICsraSkgewog
ICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLl90ZXh0TW9kZWwubGluZShpKTsKICAgICAgICAg
ICAgIHZhciBvZmZzZXQgPSAwOwogICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgIHZh
ciBtYXRjaCA9IHJlZ2V4T2JqZWN0LmV4ZWMobGluZSk7CiAgICAgICAgICAgICAgICAgaWYgKG1h
dGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKG5ldyBXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlKGksIG9mZnNldCArIG1hdGNoLmluZGV4LCBpLCBvZmZzZXQgKyBtYXRjaC5pbmRl
eCArIG1hdGNoWzBdLmxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMF0u
bGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3IFdlYkluc3Bl
Y3Rvci5UZXh0UmFuZ2UoaSwgb2Zmc2V0ICsgbWF0Y2guaW5kZXgsIGksIG9mZnNldCArIG1hdGNo
LmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSk7CiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAr
PSBtYXRjaC5pbmRleCArIDE7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0
cmluZyhtYXRjaC5pbmRleCArIDEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
d2hpbGUgKG1hdGNoKQorICAgICAgICAgICAgfSB3aGlsZSAobWF0Y2ggJiYgbGluZSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwppbmRleCA2NGE3YTlmLi5hYTA0YzUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGll
cy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5q
cwpAQCAtMTAzMSwxMiArMTAzMSwyNyBAQCBmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hSZXN1bHRz
KGVsZW1lbnQsIHJlc3VsdFJhbmdlcykKIAogZnVuY3Rpb24gY3JlYXRlU2VhcmNoUmVnZXgocXVl
cnksIGV4dHJhRmxhZ3MpCiB7CisgICAgLy8gVGhpcyBzaG91bGQgYmUga2VwdCB0aGUgc2FtZSBh
cyB0aGUgb25lIGluIEluc3BlY3RvclBhZ2VBZ2VudC5jcHAuCisgICAgcmVnZXhTcGVjaWFsQ2hh
cmFjdGVycyA9ICJbXSgpe30rLSouLD9cXF4kfCI7CiAgICAgdmFyIHJlZ2V4ID0gIiI7CiAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBxdWVyeS5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgY2hh
ciA9IHF1ZXJ5LmNoYXJBdChpKTsKLSAgICAgICAgaWYgKGNoYXIgPT09ICJdIikKLSAgICAgICAg
ICAgIGNoYXIgPSAiXFxdIjsKLSAgICAgICAgcmVnZXggKz0gIlsiICsgY2hhciArICJdIjsKKyAg
ICAgICAgaWYgKHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMuaW5kZXhPZihjaGFyKSAhPSAtMSkKKyAg
ICAgICAgICAgIHJlZ2V4ICs9ICJcXCI7CisgICAgICAgIHJlZ2V4ICs9IGNoYXI7CiAgICAgfQog
ICAgIHJldHVybiBuZXcgUmVnRXhwKHJlZ2V4LCAiaSIgKyAoZXh0cmFGbGFncyB8fCAiIikpOwog
fQorCitmdW5jdGlvbiBjb3VudFJlZ2V4TWF0Y2hlcyhyZWdleCwgY29udGVudCkKK3sKKyAgICB2
YXIgdGV4dCA9IGNvbnRlbnQ7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG1hdGNoOwor
ICAgIHdoaWxlICh0ZXh0ICYmIChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpKSB7CisgICAgICAg
IGlmIChtYXRjaFswXS5sZW5ndGggPiAwKQorICAgICAgICAgICAgKytyZXN1bHQ7CisgICAgICAg
IHRleHQgPSB0ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93433</attachid>
            <date>2011-05-13 04:46:34 -0700</date>
            <delta_ts>2011-05-16 03:43:54 -0700</delta_ts>
            <desc>Patch with fixes</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>36339</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZjcxNzBlLi5jYWI2NzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAg
QEAKKzIwMTEtMDUtMTMgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlYXJjaFJlZ2V4U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRF
dmVudEZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZEV2
ZW50RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5h
dmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0
YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9zaG93UmVzb3VyY2VW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaC5zZWFyY2hJbkVkaXRlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5jYWxsYmFjayk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fZW5zdXJl
Vmlld1NlYXJjaFBlcmZvcm1lZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlLl9zaG93U2VhcmNoUmVzdWx0LmNhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fcmVzZXRTZWFyY2hS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUu
c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlc291cmNlQnlV
UkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90
b3R5cGUuX3Jlc2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVS
ZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgc2VhcmNoTWF0Y2hlc0NvdW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNl
YXJjaE1hdGNoZXNGb3VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNo
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJv
bGxlci5wcm90b3R5cGUubmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUucHJldmlvdXNTZWFyY2hSZXN1bHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90
eXBlLl9zZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNU
cmVlRWxlbWVudHNUcmF2ZXJzZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3Vs
dHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLmZpcnN0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5sYXN0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVy
c2VyLnByb3RvdHlwZS5uZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5wcmV2aW91cyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX3Ry
YXZlcnNlTmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVt
ZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2VsZW1lbnRIYXNTZWFyY2hSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3Rv
dHlwZS5fdHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVz
dWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2xhc3RUcmVlRWxlbWVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZG9GaW5kU2VhcmNo
TWF0Y2hlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBl
cmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5oYXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9MYXN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3Vs
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb1By
ZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NvbGxlY3RSZWdleE1hdGNoZXMpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoKToKKwogMjAxMS0wNS0xMSAg
RW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXgg
NWI2YWNmNC4uOGU1MWU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgpAQCAtOTYsNiArOTYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMuIgogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAiaWQiOiAiU2VhcmNoUmVzdWx0IiwKKyAgICAgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWFyY2gg
cmVzdWx0IGZvciByZXNvdXJjZS4iLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
CSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImZyYW1lSWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2Ug
ZnJhbWUgaWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNoZXNDb3Vu
dCIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgbWF0Y2hlcyBp
biB0aGUgcmVzb3VyY2UgY29udGVudC4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAg
ICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKQEAgLTE1Nyw2ICsxNjcsMTgg
QEAKICAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb250ZW50IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291
cmNlIGNvbnRlbnQuIiB9CiAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJzZWFyY2hJblJlc291cmNlcyIsCisg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNlYXJjaGVzIGZvciBnaXZlbiBzdHJpbmcg
aW4gZnJhbWUgLyByZXNvdXJjZSB0cmVlIHN0cnVjdHVyZS4iLAorICAgICAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHRvIHNlYXJjaCBmb3IuIiAgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYXNlU2Vuc2l0aXZlIiwgInR5cGUiOiAi
Ym9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJZiB0cnVlLCBzZWFy
Y2ggaXMgY2FzZSBzZW5zaXRpdmUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImlzUmVnZXgiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIklmIHRydWUsIHRyZWF0cyBzdHJpbmcgcGFyYW1ldGVyIGFzIHJlZ2V4LiIgfQorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmVzdWx0IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICIkcmVmIjogIlNlYXJjaFJlc3VsdCIgfSwgImRlc2NyaXB0aW9uIjogIkxpc3Qgb2Ygc2VhcmNo
IHJlc3VsdHMuIiB9CisgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfQogICAgICAgICBd
LAogICAgICAgICAiZXZlbnRzIjogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCA2Njc1YzIyLi4wYjczY2Y3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNTMsNiArNTMs
NyBAQAogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJNZW1vcnlD
YWNoZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5o
IgogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgpAQCAtNjEsOSArNjIsMTUgQEAKIAogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2Ugewor
Ly8gVGhpcyBzaG91bGQgYmUga2VwdCB0aGUgc2FtZSBhcyB0aGUgb25lIGluIGZyb250LWVuZC91
dGlsaXRpZXMuanMKK3N0YXRpYyBjb25zdCBjaGFyIHJlZ2V4U3BlY2lhbENoYXJhY3RlcnNbXSA9
ICJbXSgpe30rLSouLD9cXF4kfCI7Cit9CisKIHN0YXRpYyBib29sIGRlY29kZVNoYXJlZEJ1ZmZl
cihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHRleHRFbmNv
ZGluZ05hbWUsIFN0cmluZyogcmVzdWx0KQogewogICAgIGlmIChidWZmZXIpIHsKQEAgLTEyOCw2
ICsxMzUsMTMgQEAgc3RhdGljIGJvb2wgZGVjb2RlQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3Vy
Y2UqIGNhY2hlZFJlc291cmNlLCBTdHJpbmcqIHJlc3VsdCkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3N0YXRpYyBib29sIGRlY29kZU1haW5SZXNvdXJjZShGcmFtZSogZnJhbWUsIFN0cmluZyog
cmVzdWx0KQoreworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lID0gZnJhbWUtPmRvY3VtZW50
KCktPmlucHV0RW5jb2RpbmcoKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEoKTsKKyAg
ICByZXR1cm4gZGVjb2RlU2hhcmVkQnVmZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVz
dWx0KTsKK30KKwogUGFzc093blB0cjxJbnNwZWN0b3JQYWdlQWdlbnQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIFBh
Z2UqIHBhZ2UsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUGFnZUFnZW50KGluc3RydW1lbnRp
bmdBZ2VudHMsIHBhZ2UsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOwpAQCAtMTQ0LDExICsxNTgs
OCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLAogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIg
PSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXI7CiAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBsb2FkZXItPnVybCgpKSkgewotICAgICAgICBTdHJp
bmcgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7
Ci0gICAgICAgIGJ1ZmZlciA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVz
b3VyY2VEYXRhKCk7Ci0gICAgICAgIHN1Y2Nlc3MgPSBkZWNvZGVTaGFyZWRCdWZmZXIoYnVmZmVy
LCB0ZXh0RW5jb2RpbmdOYW1lLCByZXN1bHQpOwotICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmlu
Z0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIGxvYWRlci0+dXJsKCkpKQorICAgICAgICBzdWNjZXNz
ID0gZGVjb2RlTWFpblJlc291cmNlKGZyYW1lLCByZXN1bHQpOwogICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgc3VjY2VzcyA9IGRlY29kZUNhY2hlZFJlc291cmNlKGNhY2hlZFJlc291cmNlKGZy
YW1lLCB1cmwpLCByZXN1bHQpOwogCkBAIC0zMzUsNiArMzQ2LDE4IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29r
aWU+JiBjb29rCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKK3N0YXRpYyBWZWN0b3I8Q2FjaGVk
UmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAg
VmVjdG9yPENhY2hlZFJlc291cmNlKj4gcmVzdWx0OworCisgICAgY29uc3QgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGZyYW1lLT5kb2N1
bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKKyAg
ICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChpdC0+c2Vj
b25kLmdldCgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5Piog
Y29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCiB7CiAgICAgLy8gSWYgd2UgY2Fu
IGdldCByYXcgY29va2llcy4KQEAgLTM1MCwxMSArMzczLDEwIEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5Piog
Y29va2llCiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobWFpbkZyYW1lKCkpKSB7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBjb25zdCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0g
ZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwot
ICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOwotICAgICAgICBmb3IgKENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFs
bFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgVmVjdG9yPENh
Y2hlZFJlc291cmNlKj4gYWxsUmVzb3VyY2VzID0gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJh
bWUpOworICAgICAgICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsr
aXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAg
ICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgZG9jQ29va2llc0xpc3QpOwor
ICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVu
dCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICgqaXQpLT51cmwoKSksIGRvY0Nvb2tpZXNMaXN0KTsK
IAogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmlu
ZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgpAQCAtMzg1LDEwICs0MDcsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgY28KICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CiAgICAgICAgIGlmIChkb2N1bWVudC0+dXJsKCkuaG9zdCgpICE9IGRvbWFpbikK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJl
c291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwotICAgICAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxs
UmVzb3VyY2VzLmVuZCgpOwotICAgICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1
bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9j
dW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSksIGNvb2tpZU5h
bWUpOworCisgICAgICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9IGNh
Y2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgZm9yIChWZWN0b3I8Q2FjaGVk
UmVzb3VyY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gYWxsUmVzb3VyY2VzLmVuZCgpOyArK2l0KQorICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRl
Q29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgKCppdCktPnVybCgpKSwgY29v
a2llTmFtZSk7CiAgICAgfQogfQogCkBAIC00MTAsMjQgKzQzMiw4MyBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaQogICAgICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChl
cnJvclN0cmluZywgZnJhbWUsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBjb250ZW50KTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZpcmVkKCkKK3N0
YXRpYyBTdHJpbmcgY3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewotICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50VGltZSgpKTsK
KyAgICBTdHJpbmcgcmVzdWx0OworICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gdGV4dC5j
aGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nIHNwZWNpYWxzKHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICBpZiAoc3BlY2lhbHMuZmluZChjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoIlxcIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyc1tpXSk7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmxvYWRFdmVudEZpcmVkKCkKK3N0YXRpYyBpbnQgY291bnRSZWd1bGFyRXhwcmVzc2lvbk1h
dGNoZXMoY29uc3QgUmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcmIGNvbnRl
bnQpCiB7Ci0gICAgIG1fZnJvbnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwor
ICAgIGludCByZXN1bHQgPSAwOworICAgIGludCBwb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBzdGFy
dCA9IDA7CisgICAgaW50IG1hdGNoTGVuZ3RoOworICAgIHdoaWxlICgocG9zaXRpb24gPSByZWdl
eC5tYXRjaChjb250ZW50LCBzdGFydCwgJm1hdGNoTGVuZ3RoKSkgIT0gLTEpIHsKKyAgICAgICAg
aWYgKHN0YXJ0ID49IGNvbnRlbnQubGVuZ3RoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKG1hdGNoTGVuZ3RoID4gMCkKKyAgICAgICAgICAgICsrcmVzdWx0OworICAgICAgICBz
dGFydCA9IHBvc2l0aW9uICsgMTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU2Vh
cmNoTWF0Y2goY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKIHsKLSAgICBtX2Zyb250ZW5kLT5mcmFtZU5hdmlnYXRlZChidWlsZE9iamVj
dEZvckZyYW1lKGxvYWRlci0+ZnJhbWUoKSksIGxvYWRlcklkKGxvYWRlcikpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCBmcmFtZUlkKTsKKyAgICByZXN1bHQtPnNl
dFN0cmluZygidXJsIiwgdXJsKTsKKyAgICByZXN1bHQtPnNldE51bWJlcigibWF0Y2hlc0NvdW50
IiwgbWF0Y2hlc0NvdW50KTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBjb25zdCBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIG9iamVjdCkKIHsKLSAgICBtX2Zyb250ZW5kLT5mcmFtZURldGFjaGVkKGZyYW1lSWQoZnJh
bWUpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKworICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKKyAgICBTdHJpbmcgcmVnZXhTb3VyY2UgPSBpc1JlZ2V4ID8g
dGV4dCA6IGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKHRleHQpOworCisgICAgYm9vbCBjYXNlU2Vu
c2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6
IGZhbHNlOworICAgIFJlZ3VsYXJFeHByZXNzaW9uIHJlZ2V4KHJlZ2V4U291cmNlLCBjYXNlU2Vu
c2l0aXZlID8gVGV4dENhc2VTZW5zaXRpdmUgOiBUZXh0Q2FzZUluc2Vuc2l0aXZlKTsKKworICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1fcGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAg
ICAgIFN0cmluZyBjb250ZW50OworICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBhbGxS
ZXNvdXJjZXMgPSBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSk7CisgICAgICAgIGZvciAo
VmVjdG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gKml0OworICAgICAgICAgICAgc3dpdGNo
IChJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSgqY2FjaGVkUmVzb3VyY2Up
KSB7CisgICAgICAgICAgICBjYXNlIEluc3BlY3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291
cmNlOgorICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNl
OgorICAgICAgICAgICAgICAgIGlmIChkZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNoZWRSZXNvdXJj
ZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBtYXRjaGVzQ291bnQgPSBj
b3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhyZWdleCwgY29udGVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtYXRjaGVzQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQtPnB1c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJhbWUpLCBj
YWNoZWRSZXNvdXJjZS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29k
ZU1haW5SZXNvdXJjZShmcmFtZSwgJmNvbnRlbnQpKSB7CisgICAgICAgICAgICBpbnQgbWF0Y2hl
c0NvdW50ID0gY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMocmVnZXgsIGNvbnRlbnQpOwor
ICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnB1
c2hWYWx1ZShidWlsZE9iamVjdEZvclNlYXJjaE1hdGNoKGZyYW1lSWQoZnJhbWUpLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCksIG1hdGNoZXNDb3VudCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgKm9iamVjdCA9IHJlc3VsdDsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29y
bGQpCkBAIC00NDcsNiArNTI4LDI2IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29yCiAgICAgfQog
fQogCit2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQorewor
ICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50VGltZSgpKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRFdmVudEZpcmVkKCkKK3sKKyAgICAgbV9m
cm9udGVuZC0+bG9hZEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQorewor
ICAgIG1fZnJvbnRlbmQtPmZyYW1lTmF2aWdhdGVkKGJ1aWxkT2JqZWN0Rm9yRnJhbWUobG9hZGVy
LT5mcmFtZSgpKSwgbG9hZGVySWQobG9hZGVyKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBtX2Zyb250ZW5kLT5mcmFt
ZURldGFjaGVkKGZyYW1lSWQoZnJhbWUpKTsKK30KKwogRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6bWFpbkZyYW1lKCkKIHsKICAgICByZXR1cm4gbV9wYWdlLT5tYWluRnJhbWUoKTsKQEAgLTUw
NCwxMCArNjA1LDEwIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmCiAKICAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHN1YnJlc291cmNlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAg
ICByZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCBzdWJyZXNvdXJjZXMpOwotICAgIGNvbnN0
IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVz
b3VyY2VzKCk7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKENhY2hl
ZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKKworICAgIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9IGNhY2hlZFJlc291cmNlc0ZvckZyYW1l
KGZyYW1lKTsKKyAgICBmb3IgKFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gKml0OwogICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInVybCIs
IGNhY2hlZFJlc291cmNlLT51cmwoKSk7CiAgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRTdHJp
bmcoInR5cGUiLCBjYWNoZWRSZXNvdXJjZVR5cGVTdHJpbmcoKmNhY2hlZFJlc291cmNlKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggMDVh
ZTU3Yi4uYzEyZDc5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuaApAQCAtNTEsNiArNTEsNyBAQCBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFz
cyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgS1VSTDsKIGNsYXNzIFBhZ2U7CitjbGFzcyBS
ZWd1bGFyRXhwcmVzc2lvbjsKIAogdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKQEAgLTg5
LDkgKzkwLDkgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQ29va2llKEVycm9yU3RyaW5nKiwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CiAgICAgdm9p
ZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piop
OwogICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogY29uc3QgYmFzZTY0RW5j
b2RlLCBTdHJpbmcqIGNvbnRlbnQpOworICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JT
dHJpbmcqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjb25zdCBjYXNlU2Vuc2l0aXZlLCBj
b25zdCBib29sKiBjb25zdCBpc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+Kik7CiAKICAg
ICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gQVBJCi0gICAgdm9pZCBkaWRDb21taXRMb2Fk
KGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwogICAgIHZvaWQgZG9tQ29udGVudEV2ZW50Rmly
ZWQoKTsKICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwppbmRleCA2OTZkNzM4Li4y
MmVkZWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlc1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmVzb3VyY2VzUGFuZWwuanMKQEAgLTM3Miw2ICszNzIsOSBAQCBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VzUGFuZWwucHJvdG90eXBlID0gewogICAgIF9zaG93UmVzb3VyY2VWaWV3OiBmdW5jdGlvbihy
ZXNvdXJjZSkKICAgICB7CiAgICAgICAgIHZhciB2aWV3ID0gV2ViSW5zcGVjdG9yLlJlc291cmNl
Vmlldy5yZXNvdXJjZVZpZXdGb3JSZXNvdXJjZShyZXNvdXJjZSk7CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIHJlbW92ZWQgb25jZSB3ZSBzdG9wIGNhY2hpbmcgU291cmNlRnJhbWVz
LiAgICAgICAgCisgICAgICAgIGlmICh2aWV3LnNlYXJjaENhbmNlbGVkKQorICAgICAgICAgICAg
dmlldy5zZWFyY2hDYW5jZWxlZCgpOwogICAgICAgICB0aGlzLl9mZXRjaEFuZEFwcGx5RGlmZk1h
cmt1cCh2aWV3LCByZXNvdXJjZSk7CiAgICAgICAgIHRoaXMuX2lubmVyU2hvd1ZpZXcodmlldyk7
CiAgICAgfSwKQEAgLTY3OCwyNSArNjgxLDEzNCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgIH0sCiAKLSAgICBn
ZXQgc2VhcmNoYWJsZVZpZXdzKCkKKyAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkg
CiAgICAgewotICAgICAgICB2YXIgdmlld3MgPSBbXTsKKyAgICAgICAgdGhpcy5fcmVzZXRTZWFy
Y2hSZXN1bHRzKCk7CisgICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5jcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgICAgIHZhciB0b3RhbE1hdGNoZXNDb3Vu
dCA9IDA7CiAKLSAgICAgICAgY29uc3QgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3Owot
ICAgICAgICBpZiAodmlzaWJsZVZpZXcgJiYgdmlzaWJsZVZpZXcucGVyZm9ybVNlYXJjaCkKLSAg
ICAgICAgICAgIHZpZXdzLnB1c2godmlzaWJsZVZpZXcpOworICAgICAgICBmdW5jdGlvbiBzZWFy
Y2hJbkVkaXRlZFJlc291cmNlKHRyZWVFbGVtZW50KQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgcmVzb3VyY2UgPSB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdDsKKyAgICAgICAgICAg
IGlmIChyZXNvdXJjZS5oaXN0b3J5Lmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHZhciBtYXRjaGVzQ291bnQgPSBjb3VudFJlZ2V4TWF0Y2hlcyhyZWdl
eCwgcmVzb3VyY2UuY29udGVudCkKKyAgICAgICAgICAgIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNo
ZXNGb3VuZChtYXRjaGVzQ291bnQpOworICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291bnQgKz0g
bWF0Y2hlc0NvdW50OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJy
b3IsIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFlcnJvcikgeworICAgICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBzZWFyY2hSZXN1bHQgPSByZXN1bHRbaV07CisgICAgICAgICAg
ICAgICAgICAgIHZhciBmcmFtZVRyZWVFbGVtZW50ID0gdGhpcy5fdHJlZUVsZW1lbnRGb3JGcmFt
ZUlkW3NlYXJjaFJlc3VsdC5mcmFtZUlkXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFt
ZVRyZWVFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGZyYW1lVHJlZUVsZW1lbnQucmVzb3VyY2VCeVVS
TChzZWFyY2hSZXN1bHQudXJsKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2Uu
aGlzdG9yeS5sZW5ndGggPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8v
IFNraXAgZWRpdGVkIHJlc291cmNlcy4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmluZFRy
ZWVFbGVtZW50Rm9yUmVzb3VyY2UocmVzb3VyY2UpLnNlYXJjaE1hdGNoZXNGb3VuZChzZWFyY2hS
ZXN1bHQubWF0Y2hlc0NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxNYXRjaGVzQ291
bnQgKz0gc2VhcmNoUmVzdWx0Lm1hdGNoZXNDb3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hD
b250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCh0b3RhbE1hdGNoZXNDb3VudCwgdGhp
cyk7CisgICAgICAgICAgICB0aGlzLl9zZWFyY2hDb250cm9sbGVyID0gbmV3IFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyKHRoaXMucmVzb3VyY2VzTGlzdFRyZWVFbGVtZW50
KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVu
dCAmJiB0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0Nv
dW50KQorICAgICAgICAgICAgICAgIHRoaXMuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB0aGlzLl9mb3JBbGxSZXNvdXJjZVRyZWVFbGVtZW50
cyhzZWFyY2hJbkVkaXRlZFJlc291cmNlLmJpbmQodGhpcykpOworICAgICAgICBQYWdlQWdlbnQu
c2VhcmNoSW5SZXNvdXJjZXMocmVnZXguc291cmNlLCAhcmVnZXguaWdub3JlQ2FzZSwgdHJ1ZSwg
Y2FsbGJhY2suYmluZCh0aGlzKSk7ICAgICAgICAgICAgCisgICAgfSwKKyAgICAKKyAgICBfZW5z
dXJlVmlld1NlYXJjaFBlcmZvcm1lZDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAg
ICBmdW5jdGlvbiB2aWV3U2VhcmNoUGVyZm9ybWVkQ2FsbGJhY2soc2VhcmNoSWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChzZWFyY2hJZCAhPT0gdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCkK
KyAgICAgICAgICAgICAgICByZXR1cm47IC8vIFNlYXJjaCBpcyBvYnNvbGV0ZS4KKyAgICAgICAg
ICAgIHRoaXMuX3ZpZXdTZWFyY2hJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl92aWV3U2VhcmNoSW5Qcm9n
cmVzcykgeworICAgICAgICAgICAgaWYgKCF0aGlzLnZpc2libGVWaWV3Lmhhc1NlYXJjaFJlc3Vs
dHMoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGdpdmUgaWQgdG8gZWFjaCBzZWFyY2gsIHNv
IHRoYXQgd2UgY2FuIHNraXAgY2FsbGJhY2tzIGZvciBvYnNvbGV0ZSBzZWFyY2hlcy4KKyAgICAg
ICAgICAgICAgICB0aGlzLl9sYXN0Vmlld1NlYXJjaElkID0gdGhpcy5fbGFzdFZpZXdTZWFyY2hJ
ZCA/IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQgKyAxIDogMDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhpcy52aXNp
YmxlVmlldy5wZXJmb3JtU2VhcmNoKHRoaXMuY3VycmVudFF1ZXJ5LCB2aWV3U2VhcmNoUGVyZm9y
bWVkQ2FsbGJhY2suYmluZCh0aGlzLCB0aGlzLl9sYXN0Vmlld1NlYXJjaElkKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisgICAg
fSwKKworICAgIF9zaG93U2VhcmNoUmVzdWx0OiBmdW5jdGlvbihzZWFyY2hSZXN1bHQpCisgICAg
eworICAgICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXggPSBzZWFyY2hSZXN1bHQuaW5k
ZXg7CisgICAgICAgIHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRUcmVlRWxlbWVudCA9IHNlYXJjaFJl
c3VsdC50cmVlRWxlbWVudDsKIAorICAgICAgICAvLyBBdCBmaXJzdCBzaG93IHZpZXcgZm9yIHRy
ZWVFbGVtZW50LgorICAgICAgICBpZiAoc2VhcmNoUmVzdWx0LnRyZWVFbGVtZW50ICE9PSB0aGlz
LnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuc2hv
d1Jlc291cmNlKHNlYXJjaFJlc3VsdC50cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCk7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci5mb2N1c1NlYXJjaEZpZWxk
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHNlYXJj
aElkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcy5zaWRlYmFyVHJlZS5zZWxlY3Rl
ZFRyZWVFbGVtZW50ICE9PSB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBVc2VyIGhhcyBzZWxlY3RlZCBhbm90aGVyIHZpZXcgd2hp
bGUgd2Ugd2VyZSBzZWFyY2hpbmcuCisgICAgICAgICAgICBpZiAodGhpcy5fbGFzdFNlYXJjaFJl
c3VsdEluZGV4ICE9IC0xKQorICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuanVtcFRv
U2VhcmNoUmVzdWx0KHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRJbmRleCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUaGVuIHJ1biBTb3VyY2VGcmFtZSBzZWFyY2ggaWYgbmVlZGVkIGFuZCBqdW1w
IHRvIHNlYXJjaCByZXN1bHQgaW5kZXggd2hlbiBkb25lLgorICAgICAgICB0aGlzLl9lbnN1cmVW
aWV3U2VhcmNoUGVyZm9ybWVkKGNhbGxiYWNrLmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBf
cmVzZXRTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbigpCisgICAgewogICAgICAgICBmdW5jdGlvbiBj
YWxsYmFjayhyZXNvdXJjZVRyZWVFbGVtZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
cmVzb3VyY2UgPSByZXNvdXJjZVRyZWVFbGVtZW50Ll9yZXNvdXJjZTsKLSAgICAgICAgICAgIHZh
ciByZXNvdXJjZVZpZXcgPSBXZWJJbnNwZWN0b3IuUmVzb3VyY2VWaWV3LnJlc291cmNlVmlld0Zv
clJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgIGlmIChyZXNvdXJjZVZpZXcucGVyZm9y
bVNlYXJjaCAmJiByZXNvdXJjZVZpZXcgIT09IHZpc2libGVWaWV3KQotICAgICAgICAgICAgICAg
IHZpZXdzLnB1c2gocmVzb3VyY2VWaWV3KTsKKyAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1l
bnQuX3Jlc2V0U2VhcmNoUmVzdWx0cygpOwogICAgICAgICB9CisKICAgICAgICAgdGhpcy5fZm9y
QWxsUmVzb3VyY2VUcmVlRWxlbWVudHMoY2FsbGJhY2spOwotICAgICAgICByZXR1cm4gdmlld3M7
CisgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ICYmIHRoaXMudmlzaWJsZVZpZXcuc2VhcmNo
Q2FuY2VsZWQpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LnNlYXJjaENhbmNlbGVkKCk7
CisKKyAgICAgICAgdGhpcy5fbGFzdFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50ID0gbnVsbDsKKyAg
ICAgICAgdGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CisgICAgICAgIHRoaXMuX3Zp
ZXdTZWFyY2hJblByb2dyZXNzID0gZmFsc2U7CisgICAgfSwKKworICAgIHNlYXJjaENhbmNlbGVk
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxl
ci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoMCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3Jlc2V0
U2VhcmNoUmVzdWx0cygpOwogICAgIH0sCiAKKyAgICBqdW1wVG9OZXh0U2VhcmNoUmVzdWx0OiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNlYXJjaE1hdGNoZXMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBjdXJyZW50VHJlZUVsZW1lbnQgPSB0
aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQ7CisgICAgICAgIHZhciBuZXh0U2Vh
cmNoUmVzdWx0ID0gdGhpcy5fc2VhcmNoQ29udHJvbGxlci5uZXh0U2VhcmNoUmVzdWx0KGN1cnJl
bnRUcmVlRWxlbWVudCk7CisgICAgICAgIHRoaXMuX3Nob3dTZWFyY2hSZXN1bHQobmV4dFNlYXJj
aFJlc3VsdCk7CisgICAgfSwKKyAgICAKKyAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTZWFyY2hNYXRjaGVz
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgY3VycmVudFRyZWVFbGVtZW50ID0g
dGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50OworICAgICAgICB2YXIgcHJldmlv
dXNTZWFyY2hSZXN1bHQgPSB0aGlzLl9zZWFyY2hDb250cm9sbGVyLnByZXZpb3VzU2VhcmNoUmVz
dWx0KGN1cnJlbnRUcmVlRWxlbWVudCk7CisgICAgICAgIHRoaXMuX3Nob3dTZWFyY2hSZXN1bHQo
cHJldmlvdXNTZWFyY2hSZXN1bHQpOworICAgIH0sCisgICAgCiAgICAgX2ZvckFsbFJlc291cmNl
VHJlZUVsZW1lbnRzOiBmdW5jdGlvbihjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBzdG9w
ID0gZmFsc2U7CkBAIC03MDYsMTUgKzgxOCw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAgc2VhcmNoTWF0Y2hGb3Vu
ZDogZnVuY3Rpb24odmlldywgbWF0Y2hlcykKLSAgICB7Ci0gICAgICAgIGlmICghdmlldy5yZXNv
dXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhp
cy5fZmluZFRyZWVFbGVtZW50Rm9yUmVzb3VyY2Uodmlldy5yZXNvdXJjZSk7Ci0gICAgICAgIGlm
ICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoRm91bmQo
bWF0Y2hlcyk7Ci0gICAgfSwKLQogICAgIF9maW5kVHJlZUVsZW1lbnRGb3JSZXNvdXJjZTogZnVu
Y3Rpb24ocmVzb3VyY2UpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBpc0FuY2VzdG9yKGFuY2Vz
dG9yLCBvYmplY3QpCkBAIC03MzIsMzAgKzgzNSw2IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLnNpZGViYXJUcmVlLmZpbmRU
cmVlRWxlbWVudChyZXNvdXJjZSwgaXNBbmNlc3RvciwgZ2V0UGFyZW50KTsKICAgICB9LAogCi0g
ICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9uKHN0YXJ0aW5nTmV3U2VhcmNoKQotICAgIHsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZC5jYWxsKHRo
aXMsIHN0YXJ0aW5nTmV3U2VhcmNoKTsKLQotICAgICAgICBpZiAoc3RhcnRpbmdOZXdTZWFyY2gp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzb3Vy
Y2VUcmVlRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzb3VyY2VUcmVlRWxlbWVu
dC5fZXJyb3JzV2FybmluZ3NVcGRhdGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9y
QWxsUmVzb3VyY2VUcmVlRWxlbWVudHMoY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBwZXJmb3Jt
U2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KHJlc291cmNlVHJlZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJl
ZUVsZW1lbnQuX3Jlc2V0QnViYmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9yQWxs
UmVzb3VyY2VUcmVlRWxlbWVudHMoY2FsbGJhY2spOwotICAgICAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guY2FsbCh0aGlzLCBxdWVyeSk7Ci0gICAgfSwKLQog
ICAgIHNob3dWaWV3OiBmdW5jdGlvbih2aWV3KQogICAgIHsKICAgICAgICAgaWYgKHZpZXcpCkBA
IC0xMDExLDYgKzEwOTAsMTEgQEAgV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl90cmVlRWxlbWVudEZvclJlc291cmNlW3Jlc291cmNlLnVy
bF0gPSByZXNvdXJjZVRyZWVFbGVtZW50OwogICAgIH0sCiAKKyAgICByZXNvdXJjZUJ5VVJMOiBm
dW5jdGlvbih1cmwpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHJlZUVsZW1lbnRGb3JS
ZXNvdXJjZVt1cmxdLnJlcHJlc2VudGVkT2JqZWN0OworICAgIH0sCisKICAgICBhcHBlbmRDaGls
ZDogZnVuY3Rpb24odHJlZUVsZW1lbnQpCiAgICAgewogICAgICAgICB0aGlzLl9pbnNlcnRJblBy
ZXNlbnRhdGlvbk9yZGVyKHRoaXMsIHRyZWVFbGVtZW50KTsKQEAgLTExNjQsMTEgKzEyNDgsMjMg
QEAgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KICAgICB9LAogCi0gICAgc2VhcmNoTWF0Y2hGb3VuZDogZnVuY3Rpb24obWF0Y2hl
cykKKyAgICBfcmVzZXRTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0
aGlzLl9yZXNldEJ1YmJsZSgpOworICAgICAgICB0aGlzLl9zZWFyY2hNYXRjaGVzQ291bnQgPSAw
OworICAgIH0sCiAKLSAgICAgICAgdGhpcy5fc2V0QnViYmxlVGV4dChtYXRjaGVzKTsKKyAgICBn
ZXQgc2VhcmNoTWF0Y2hlc0NvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWFy
Y2hNYXRjaGVzQ291bnQ7CisgICAgfSwKKworICAgIHNlYXJjaE1hdGNoZXNGb3VuZDogZnVuY3Rp
b24obWF0Y2hlc0NvdW50KQorICAgIHsKKyAgICAgICAgdGhpcy5fcmVzZXRTZWFyY2hSZXN1bHRz
KCk7CisKKyAgICAgICAgdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50ID0gbWF0Y2hlc0NvdW50Owor
ICAgICAgICB0aGlzLl9zZXRCdWJibGVUZXh0KG1hdGNoZXNDb3VudCk7CiAgICAgICAgIHRoaXMu
X2J1YmJsZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2VhcmNoLW1hdGNoZXMiKTsKIAogICAgICAg
ICAvLyBFeHBhbmQsIGRvIG5vdCBzY3JvbGwgaW50byB2aWV3LgpAQCAtMTQyOSwzICsxNTI1LDEx
MCBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5Vmlldy5wcm90b3R5cGUgPSB7CiB9CiAK
IFdlYkluc3BlY3Rvci5TdG9yYWdlQ2F0ZWdvcnlWaWV3LnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5SZXNvdXJjZXNTZWFy
Y2hDb250cm9sbGVyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7CisgICAgdGhpcy5fcm9vdCA9
IHJvb3RFbGVtZW50OworICAgIHRoaXMuX3RyYXZlcnNlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2Vh
cmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlcihyb290RWxlbWVudCk7CisgICAgdGhpcy5f
bGFzdFRyZWVFbGVtZW50ID0gbnVsbDsKKyAgICB0aGlzLl9sYXN0SW5kZXggPSAtMTsKK30KKwor
V2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlID0geworICAg
IG5leHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKGN1cnJlbnRUcmVlRWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIGlmICghY3VycmVudFRyZWVFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIuZmlyc3QoKSwgMCk7CisKKyAgICAgICAgaWYg
KCFjdXJyZW50VHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50KQorICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0aGlzLl90cmF2ZXJzZXIubmV4dChjdXJyZW50VHJlZUVs
ZW1lbnQpLCAwKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLl9sYXN0VHJlZUVsZW1lbnQg
IT09IGN1cnJlbnRUcmVlRWxlbWVudCB8fCB0aGlzLl9sYXN0SW5kZXggPT09IC0xKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQsIDApOwor
CisgICAgICAgIGlmICh0aGlzLl9sYXN0SW5kZXggPT0gY3VycmVudFRyZWVFbGVtZW50LnNlYXJj
aE1hdGNoZXNDb3VudCAtIDEpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0
KHRoaXMuX3RyYXZlcnNlci5uZXh0KGN1cnJlbnRUcmVlRWxlbWVudCksIDApOworCisgICAgICAg
IHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCB0aGlzLl9sYXN0
SW5kZXggKyAxKTsKKyAgICB9LAorICAgIAorICAgIHByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5j
dGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWN1cnJlbnRUcmVl
RWxlbWVudCkgeworICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2Vy
Lmxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodHJlZUVsZW1l
bnQsIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCAtIDEpOyAgICAgICAgICAgIAorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudFRyZWVFbGVtZW50LnNlYXJjaE1h
dGNoZXNDb3VudCAmJiB0aGlzLl9sYXN0VHJlZUVsZW1lbnQgPT09IGN1cnJlbnRUcmVlRWxlbWVu
dCAmJiB0aGlzLl9sYXN0SW5kZXggPiAwKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJj
aFJlc3VsdChjdXJyZW50VHJlZUVsZW1lbnQsIHRoaXMuX2xhc3RJbmRleCAtIDEpOworICAgICAg
ICAgCisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5wcmV2aW91cyhj
dXJyZW50VHJlZUVsZW1lbnQpCisgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQodHJl
ZUVsZW1lbnQsIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCAtIDEpOworICAgIH0sCisK
KyAgICBfc2VhcmNoUmVzdWx0OiBmdW5jdGlvbih0cmVlRWxlbWVudCwgaW5kZXgpCisgICAgewor
ICAgICAgICB0aGlzLl9sYXN0VHJlZUVsZW1lbnQgPSB0cmVlRWxlbWVudDsKKyAgICAgICAgdGhp
cy5fbGFzdEluZGV4ID0gaW5kZXg7CisgICAgICAgIHJldHVybiB7dHJlZUVsZW1lbnQ6IHRyZWVF
bGVtZW50LCBpbmRleDogaW5kZXh9OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLlNlYXJjaFJl
c3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIgPSBmdW5jdGlvbihyb290RWxlbWVudCkKK3sKKyAg
ICB0aGlzLl9yb290ID0gcm9vdEVsZW1lbnQ7Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hSZXN1
bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZSA9IHsKKyAgICBmaXJzdDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLl9yb290KTsKKyAgICB9
LAorICAgICAgICAKKyAgICBsYXN0OiBmdW5jdGlvbihzdGFydFRyZWVFbGVtZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXModGhpcy5fcm9vdCk7ICAgIAorICAgIH0sCisK
KyAgICBuZXh0OiBmdW5jdGlvbihzdGFydFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFy
IHRyZWVFbGVtZW50ID0gc3RhcnRUcmVlRWxlbWVudDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZU5leHQodHJlZUVsZW1lbnQpIHx8IHRoaXMu
X3Jvb3Q7CisgICAgICAgIH0gd2hpbGUgKHRyZWVFbGVtZW50ICE9IHN0YXJ0VHJlZUVsZW1lbnQg
JiYgIXRoaXMuX2VsZW1lbnRIYXNTZWFyY2hSZXN1bHRzKHRyZWVFbGVtZW50KSk7CisgICAgICAg
IHJldHVybiB0cmVlRWxlbWVudDsKKyAgICB9LAorCisgICAgcHJldmlvdXM6IGZ1bmN0aW9uKHN0
YXJ0VHJlZUVsZW1lbnQpCisgICAgeworICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBzdGFydFRy
ZWVFbGVtZW50OworICAgICAgICBkbyB7CisgICAgICAgICAgICB0cmVlRWxlbWVudCA9IHRoaXMu
X3RyYXZlcnNlUHJldmlvdXModHJlZUVsZW1lbnQpIHx8IHRoaXMuX2xhc3RUcmVlRWxlbWVudCgp
OworICAgICAgICB9IHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYmICF0
aGlzLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAgICByZXR1
cm4gdHJlZUVsZW1lbnQ7CisgICAgfSwKKworICAgIF90cmF2ZXJzZU5leHQ6IGZ1bmN0aW9uKHRy
ZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LnRyYXZlcnNlTmV4
dFRyZWVFbGVtZW50KGZhbHNlLCB0aGlzLl9yb290LCB0cnVlKTsKKyAgICB9LAorCisgICAgX2Vs
ZW1lbnRIYXNTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbih0cmVlRWxlbWVudCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cmVlRWxlbWVudCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5GcmFtZVJlc291
cmNlVHJlZUVsZW1lbnQgJiYgdHJlZUVsZW1lbnQuc2VhcmNoTWF0Y2hlc0NvdW50OworICAgIH0s
CisKKyAgICBfdHJhdmVyc2VQcmV2aW91czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQudHJhdmVyc2VQcmV2aW91c1RyZWVFbGVtZW50KGZh
bHNlLCB0aGlzLl9yb290LCB0cnVlKTsKKyAgICB9LAorCisgICAgX2xhc3RUcmVlRWxlbWVudDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy5fcm9vdDsK
KyAgICAgICAgdmFyIG5leHRUcmVlRWxlbWVudDsgCisgICAgICAgIHdoaWxlIChuZXh0VHJlZUVs
ZW1lbnQgPSB0aGlzLl90cmF2ZXJzZU5leHQodHJlZUVsZW1lbnQpKQorICAgICAgICAgICAgdHJl
ZUVsZW1lbnQgPSBuZXh0VHJlZUVsZW1lbnQ7CisgICAgICAgIHJldHVybiB0cmVlRWxlbWVudDsg
ICAgICAgIAorICAgIH0sCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCA2ZDdlMTcxLi5iNjI1OWNkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKQEAgLTU2LDYg
KzU2LDI2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5FdmVudHMgPSB7CiAgICAgTG9hZGVk
OiAibG9hZGVkIgogfQogCitXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuY3JlYXRlU2VhcmNoUmVn
ZXggPSBmdW5jdGlvbihxdWVyeSkKK3sKKyAgICB2YXIgcmVnZXg7CisgICAgCisgICAgLy8gRmly
c3QgdHJ5IGNyZWF0aW5nIHJlZ2V4IGlmIHVzZXIga25vd3MgdGhlIC8gLyBoaW50LgorICAgIHRy
eSB7CisgICAgICAgIGlmICgvXlwvLipcLyQvLnRlc3QocXVlcnkpKQorICAgICAgICAgICAgcmVn
ZXggPSBuZXcgUmVnRXhwKHF1ZXJ5LnN1YnN0cmluZygxLCBxdWVyeS5sZW5ndGggLSAxKSk7Cisg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAvLyBTaWxlbnQgY2F0Y2guCisgICAgfQorCisgICAg
Ly8gT3RoZXJ3aXNlIGp1c3QgZG8gY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guCisgICAgaWYgKCFy
ZWdleCkgCisgICAgICAgIHJlZ2V4ID0gY3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOworICAgIAor
ICAgIHJldHVybiByZWdleDsKK30KKworCiBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgIGdldCB2aXNpYmxlKCkKICAgICB7CkBAIC0zNjcsMTggKzM4Nyw5IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAtMTsKICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJl
c3VsdHMgPSBbXTsKIAotICAgICAgICAgICAgLy8gRmlyc3QgZG8gY2FzZS1pbnNlbnNpdGl2ZSBz
ZWFyY2guCi0gICAgICAgICAgICB2YXIgcmVnZXhPYmplY3QgPSBjcmVhdGVTZWFyY2hSZWdleChx
dWVyeSk7Ci0gICAgICAgICAgICB0aGlzLl9jb2xsZWN0UmVnZXhNYXRjaGVzKHJlZ2V4T2JqZWN0
LCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLQotICAgICAgICAgICAgLy8gVGhlbiB0cnkgcmVnZXgg
c2VhcmNoIGlmIHVzZXIga25vd3MgdGhlIC8gLyBoaW50LgotICAgICAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgICBpZiAoL15cLy4qXC8kLy50ZXN0KHF1ZXJ5KSkKLSAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhuZXcgUmVnRXhwKHF1ZXJ5LnN1YnN0cmlu
ZygxLCBxdWVyeS5sZW5ndGggLSAxKSksIHRoaXMuX3NlYXJjaFJlc3VsdHMpOwotICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIC8vIFNpbGVudCBjYXRjaC4KLSAgICAg
ICAgICAgIH0KLQorICAgICAgICAgICAgdmFyIHJlZ2V4ID0gV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAgICAgICAgIHRoaXMuX3NlYXJjaFJl
c3VsdHMgPSB0aGlzLl9jb2xsZWN0UmVnZXhNYXRjaGVzKHJlZ2V4KTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FsbGJhY2sodGhpcywgdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgpOwog
ICAgICAgICB9CiAKQEAgLTQwMSwyNCArNDEyLDI5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIubWFya0FuZFJldmVhbFJh
bmdlKG51bGwpOwogICAgIH0sCiAKKyAgICBoYXNTZWFyY2hSZXN1bHRzOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggPiAwOworICAg
IH0sCisKICAgICBqdW1wVG9GaXJzdFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQogICAgIHsKLSAg
ICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KDApOworICAgICAgICB0aGlzLmp1bXBUb1Nl
YXJjaFJlc3VsdCgwKTsKICAgICB9LAogCiAgICAganVtcFRvTGFzdFNlYXJjaFJlc3VsdDogZnVu
Y3Rpb24oKQogICAgIHsKLSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX3Nl
YXJjaFJlc3VsdHMubGVuZ3RoIC0gMSk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVzdWx0
KHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSk7CiAgICAgfSwKIAogICAgIGp1bXBUb05l
eHRTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1Nl
YXJjaFJlc3VsdCh0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggKyAxKTsKKyAgICAgICAg
dGhpcy5qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ICsg
MSk7CiAgICAgfSwKIAogICAgIGp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0OiBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFyY2hSZXN1bHQodGhpcy5fY3VycmVudFNl
YXJjaFJlc3VsdEluZGV4IC0gMSk7CisgICAgICAgIHRoaXMuanVtcFRvU2VhcmNoUmVzdWx0KHRo
aXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCAtIDEpOwogICAgIH0sCiAKICAgICBzaG93aW5n
Rmlyc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKQEAgLTQzMSw3ICs0NDcsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fc2Vh
cmNoUmVzdWx0cy5sZW5ndGggJiYgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID09PSAo
dGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGggLSAxKTsKICAgICB9LAogCi0gICAgX2p1bXBUb1Nl
YXJjaFJlc3VsdDogZnVuY3Rpb24oaW5kZXgpCisgICAganVtcFRvU2VhcmNoUmVzdWx0OiBmdW5j
dGlvbihpbmRleCkKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5sb2FkZWQgfHwgIXRoaXMuX3Nl
YXJjaFJlc3VsdHMubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDM5LDE5ICs0NTUs
MjEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5fdGV4dFZpZXdlci5tYXJrQW5kUmV2ZWFsUmFuZ2UodGhpcy5fc2VhcmNoUmVzdWx0c1t0aGlz
Ll9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXhdKTsKICAgICB9LAogCi0gICAgX2NvbGxlY3RSZWdl
eE1hdGNoZXM6IGZ1bmN0aW9uKHJlZ2V4T2JqZWN0LCByYW5nZXMpCisgICAgX2NvbGxlY3RSZWdl
eE1hdGNoZXM6IGZ1bmN0aW9uKHJlZ2V4T2JqZWN0KQogICAgIHsKKyAgICAgICAgdmFyIHJhbmdl
cyA9IFtdOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3RleHRNb2RlbC5saW5l
c0NvdW50OyArK2kpIHsKICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5fdGV4dE1vZGVsLmxp
bmUoaSk7CiAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSByZWdleE9iamVjdC5leGVjKGxpbmUpOwogICAgICAg
ICAgICAgICAgIGlmIChtYXRjaCkgewotICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChu
ZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCwgaSwgb2Zm
c2V0ICsgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoWzBdLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5w
dXNoKG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKGksIG9mZnNldCArIG1hdGNoLmluZGV4LCBp
LCBvZmZzZXQgKyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCkpOwogICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgKz0gbWF0Y2guaW5kZXggKyAxOwogICAgICAgICAgICAgICAgICAgICBs
aW5lID0gbGluZS5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IHdoaWxlIChtYXRjaCkKKyAgICAgICAgICAgIH0gd2hpbGUgKG1hdGNo
ICYmIGxpbmUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByYW5nZXM7CiAgICAgfSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXgg
YzMzYWRlMi4uYjRiNzE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMKQEAgLTEwMzMsMTIgKzEwMzMsMjcgQEAgZnVuY3Rpb24gaGlnaGxp
Z2h0U2VhcmNoUmVzdWx0cyhlbGVtZW50LCByZXN1bHRSYW5nZXMpCiAKIGZ1bmN0aW9uIGNyZWF0
ZVNlYXJjaFJlZ2V4KHF1ZXJ5LCBleHRyYUZsYWdzKQogeworICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGtlcHQgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBJbnNwZWN0b3JQYWdlQWdlbnQuY3BwLgorICAg
IHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMgPSAiW10oKXt9Ky0qLiw/XFxeJHwiOwogICAgIHZhciBy
ZWdleCA9ICIiOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlcnkubGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgdmFyIGNoYXIgPSBxdWVyeS5jaGFyQXQoaSk7Ci0gICAgICAgIGlmIChjaGFyID09
PSAiXSIpCi0gICAgICAgICAgICBjaGFyID0gIlxcXSI7Ci0gICAgICAgIHJlZ2V4ICs9ICJbIiAr
IGNoYXIgKyAiXSI7CisgICAgICAgIGlmIChyZWdleFNwZWNpYWxDaGFyYWN0ZXJzLmluZGV4T2Yo
Y2hhcikgIT0gLTEpCisgICAgICAgICAgICByZWdleCArPSAiXFwiOworICAgICAgICByZWdleCAr
PSBjaGFyOwogICAgIH0KICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleCwgImkiICsgKGV4dHJh
RmxhZ3MgfHwgIiIpKTsKIH0KKworZnVuY3Rpb24gY291bnRSZWdleE1hdGNoZXMocmVnZXgsIGNv
bnRlbnQpCit7CisgICAgdmFyIHRleHQgPSBjb250ZW50OworICAgIHZhciByZXN1bHQgPSAwOwor
ICAgIHZhciBtYXRjaDsKKyAgICB3aGlsZSAodGV4dCAmJiAobWF0Y2ggPSByZWdleC5leGVjKHRl
eHQpKSkgeworICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICsr
cmVzdWx0OworICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyAxKTsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
</data>
<flag name="review"
          id="86584"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="86585"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93631</attachid>
            <date>2011-05-16 03:43:54 -0700</date>
            <delta_ts>2011-05-16 05:57:09 -0700</delta_ts>
            <desc>Fixed mac build</desc>
            <filename>newsear</filename>
            <type>text/plain</type>
            <size>36337</size>
            <attacher name="Vsevolod Vlasov">vsevik</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmYTQwNWNhLi43OWNmZTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAg
QEAKKzIwMTEtMDUtMTMgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTW92ZSBSZXNvdXJjZXMgUGFuZWwgc2VhcmNoIHRvIGJhY2tlbmQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5NTk2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVNYWluUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZVNlYXJjaFJlZ2V4U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50UmVndWxhckV4cHJl
c3Npb25NYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRF
dmVudEZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZEV2
ZW50RmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5h
dmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRGV0
YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVj
dEZvckZyYW1lVHJlZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLl9zaG93UmVzb3VyY2VW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVy
Zm9ybVNlYXJjaC5zZWFyY2hJbkVkaXRlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUucGVyZm9ybVNlYXJjaC5jYWxsYmFjayk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fZW5zdXJl
Vmlld1NlYXJjaFBlcmZvcm1lZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlLl9zaG93U2VhcmNoUmVzdWx0LmNhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuX3Nob3dTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZS5fcmVzZXRTZWFyY2hS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUu
c2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnBy
b3RvdHlwZS5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lVHJlZUVsZW1lbnQucHJvdG90eXBlLnJlc291cmNlQnlV
UkwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VUcmVlRWxlbWVudC5wcm90
b3R5cGUuX3Jlc2V0U2VhcmNoUmVzdWx0cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRnJhbWVS
ZXNvdXJjZVRyZWVFbGVtZW50LnByb3RvdHlwZS5nZXQgc2VhcmNoTWF0Y2hlc0NvdW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlLnNl
YXJjaE1hdGNoZXNGb3VuZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNo
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNoQ29udHJv
bGxlci5wcm90b3R5cGUubmV4dFNlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUucHJldmlvdXNTZWFyY2hSZXN1bHQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlc1NlYXJjaENvbnRyb2xsZXIucHJvdG90
eXBlLl9zZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3VsdHNU
cmVlRWxlbWVudHNUcmF2ZXJzZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaFJlc3Vs
dHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIucHJvdG90eXBlLmZpcnN0KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5sYXN0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVy
c2VyLnByb3RvdHlwZS5uZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRz
VHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3RvdHlwZS5wcmV2aW91cyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX3Ry
YXZlcnNlTmV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0c1RyZWVFbGVt
ZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2VsZW1lbnRIYXNTZWFyY2hSZXN1bHRzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TZWFyY2hSZXN1bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyLnByb3Rv
dHlwZS5fdHJhdmVyc2VQcmV2aW91cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoUmVz
dWx0c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUuX2xhc3RUcmVlRWxlbWVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5jcmVhdGVTZWFyY2hSZWdleCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZG9GaW5kU2VhcmNo
TWF0Y2hlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLnBl
cmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5oYXNTZWFyY2hSZXN1bHRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5qdW1wVG9MYXN0U2VhcmNoUmVzdWx0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuanVtcFRvTmV4dFNlYXJjaFJlc3Vs
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmp1bXBUb1By
ZXZpb3VzU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUuanVtcFRvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NvbGxlY3RSZWdleE1hdGNoZXMpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoKToKKwogMjAxMS0wNS0wNSAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uCmluZGV4IDViNmFjZjQuLjhlNTFlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24KQEAgLTk2LDYgKzk2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjogIlNlYXJjaFJlc3VsdCIsCisgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuIiwKKyAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKwkgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJmcmFtZUlkIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IlJlc291cmNlIGZyYW1lIGlkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJt
YXRjaGVzQ291bnQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9m
IG1hdGNoZXMgaW4gdGhlIHJlc291cmNlIGNvbnRlbnQuIiB9CisgICAgICAgICAgICAgICAgXQog
ICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCkBAIC0xNTcs
NiArMTY3LDE4IEBACiAgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29udGVudCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJSZXNvdXJjZSBjb250ZW50LiIgfQogICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm5hbWUiOiAic2VhcmNoSW5SZXNv
dXJjZXMiLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWFyY2hlcyBmb3IgZ2l2
ZW4gc3RyaW5nIGluIGZyYW1lIC8gcmVzb3VyY2UgdHJlZSBzdHJ1Y3R1cmUuIiwKKyAgICAgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
ZXh0IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyB0byBzZWFyY2gg
Zm9yLiIgIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FzZVNlbnNpdGl2ZSIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSWYg
dHJ1ZSwgc2VhcmNoIGlzIGNhc2Ugc2Vuc2l0aXZlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJpc1JlZ2V4IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJJZiB0cnVlLCB0cmVhdHMgc3RyaW5nIHBhcmFtZXRlciBhcyByZWdl
eC4iIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAiJHJlZiI6ICJTZWFyY2hSZXN1bHQiIH0sICJkZXNjcmlwdGlvbiI6ICJMaXN0
IG9mIHNlYXJjaCByZXN1bHRzLiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0K
ICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNjY3NWMyMi4uNThlYTY5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAg
LTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCiAjaW5jbHVk
ZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUmVndWxhckV4
cHJlc3Npb24uaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKQEAgLTYxLDkgKzYyLDE1IEBACiAK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFt
ZXNwYWNlIHsKKy8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBm
cm9udC1lbmQvdXRpbGl0aWVzLmpzCitzdGF0aWMgY29uc3QgY2hhciByZWdleFNwZWNpYWxDaGFy
YWN0ZXJzW10gPSAiW10oKXt9Ky0qLiw/XFxeJHwiOworfQorCiBzdGF0aWMgYm9vbCBkZWNvZGVT
aGFyZWRCdWZmZXIoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY29uc3QgU3RyaW5n
JiB0ZXh0RW5jb2RpbmdOYW1lLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBpZiAoYnVmZmVyKSB7
CkBAIC0xMjgsNiArMTM1LDEzIEBAIHN0YXRpYyBib29sIGRlY29kZUNhY2hlZFJlc291cmNlKENh
Y2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSwgU3RyaW5nKiByZXN1bHQpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitzdGF0aWMgYm9vbCBkZWNvZGVNYWluUmVzb3VyY2UoRnJhbWUqIGZyYW1l
LCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1l
LT5kb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCk7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VE
YXRhKCk7CisgICAgcmV0dXJuIGRlY29kZVNoYXJlZEJ1ZmZlcihidWZmZXIsIHRleHRFbmNvZGlu
Z05hbWUsIHJlc3VsdCk7Cit9CisKIFBhc3NPd25QdHI8SW5zcGVjdG9yUGFnZUFnZW50PiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5n
QWdlbnRzLCBQYWdlKiBwYWdlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlcikKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3RvclBhZ2VBZ2VudChp
bnN0cnVtZW50aW5nQWdlbnRzLCBwYWdlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKQEAgLTE0
NCwxMSArMTU4LDggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChF
cnJvclN0cmluZyogZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSwKICAgICBEb2N1bWVudExvYWRl
ciogbG9hZGVyID0gZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyOwogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIGlmIChl
cXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgbG9hZGVyLT51cmwoKSkpIHsKLSAg
ICAgICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5wdXRF
bmNvZGluZygpOwotICAgICAgICBidWZmZXIgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIo
KS0+bWFpblJlc291cmNlRGF0YSgpOwotICAgICAgICBzdWNjZXNzID0gZGVjb2RlU2hhcmVkQnVm
ZmVyKGJ1ZmZlciwgdGV4dEVuY29kaW5nTmFtZSwgcmVzdWx0KTsKLSAgICB9CisgICAgaWYgKGVx
dWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIodXJsLCBsb2FkZXItPnVybCgpKSkKKyAgICAg
ICAgc3VjY2VzcyA9IGRlY29kZU1haW5SZXNvdXJjZShmcmFtZSwgcmVzdWx0KTsKICAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHN1Y2Nlc3MgPSBkZWNvZGVDYWNoZWRSZXNvdXJjZShjYWNoZWRS
ZXNvdXJjZShmcmFtZSwgdXJsKSwgcmVzdWx0KTsKIApAQCAtMzM1LDYgKzM0NiwxOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhh
c2hTZXQ8Q29va2llPiYgY29vawogICAgIHJldHVybiBjb29raWVzOwogfQogCitzdGF0aWMgVmVj
dG9yPENhY2hlZFJlc291cmNlKj4gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1l
KQoreworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IHJlc3VsdDsKKworICAgIGNvbnN0IENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3Vy
Y2VzKCk7CisgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKENhY2hlZFJl
c291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFs
bFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoaXQtPnNlY29uZC5nZXQoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQogewogICAgIC8v
IElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCkBAIC0zNTAsMTEgKzM3MywxMCBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGNvb2tpZQogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1haW5GcmFtZSgpKSkg
ewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAg
ICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJl
c291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNv
dXJjZXMoKTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9y
IChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+IGFsbFJlc291cmNlcyA9IGNhY2hlZFJlc291cmNlc0Zv
ckZyYW1lKGZyYW1lKTsKKyAgICAgICAgZm9yIChWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gYWxsUmVzb3VyY2Vz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29raWVzTGlz
dDsKLSAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tpZXMoZG9j
dW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSksIGRvY0Nvb2tp
ZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tp
ZXMoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAoKml0KS0+dXJsKCkpLCBkb2NDb29r
aWVzTGlzdCk7CiAKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcgZm9y
IHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KQEAgLTM4NSwxMCArNDA3LDEw
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvCiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQtPnVybCgpLmhvc3QoKSAh
PSBkb21haW4pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgQ2FjaGVkUmVz
b3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKLSAgICAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRl
Q29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkp
LCBjb29raWVOYW1lKTsKKworICAgICAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBhbGxSZXNv
dXJjZXMgPSBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSk7CisgICAgICAgIGZvciAoVmVj
dG9yPENhY2hlZFJlc291cmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGFsbFJlc291cmNlcy5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgIFdlYkNv
cmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICgqaXQpLT51
cmwoKSksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApAQCAtNDEwLDI0ICs0MzIsODMgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmkKICAgICAgICAgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJj
ZUNvbnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwg
Y29udGVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpkb21Db250ZW50RXZlbnRG
aXJlZCgpCitzdGF0aWMgU3RyaW5nIGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKLSAgICAgbV9mcm9udGVuZC0+ZG9tQ29udGVudEV2ZW50RmlyZWQoY3VycmVu
dFRpbWUoKSk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cyA9IHRleHQuY2hhcmFjdGVycygpOworICAgIFN0cmluZyBzcGVjaWFscyhyZWdleFNwZWNpYWxD
aGFyYWN0ZXJzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgp
OyBpKyspIHsKKyAgICAgICAgaWYgKHNwZWNpYWxzLmZpbmQoY2hhcmFjdGVyc1tpXSkpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJcXCIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGNoYXJh
Y3RlcnNbaV0pOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50Ojpsb2FkRXZlbnRGaXJlZCgpCitzdGF0aWMgaW50IGNvdW50UmVndWxhckV4
cHJlc3Npb25NYXRjaGVzKGNvbnN0IFJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50KQogewotICAgICBtX2Zyb250ZW5kLT5sb2FkRXZlbnRGaXJlZChjdXJyZW50
VGltZSgpKTsKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpbnQgcG9zaXRpb247CisgICAgdW5z
aWduZWQgc3RhcnQgPSAwOworICAgIGludCBtYXRjaExlbmd0aDsKKyAgICB3aGlsZSAoKHBvc2l0
aW9uID0gcmVnZXgubWF0Y2goY29udGVudCwgc3RhcnQsICZtYXRjaExlbmd0aCkpICE9IC0xKSB7
CisgICAgICAgIGlmIChzdGFydCA+PSBjb250ZW50Lmxlbmd0aCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmIChtYXRjaExlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jlc3VsdDsK
KyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbiArIDE7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExv
YWRlciogbG9hZGVyKQorc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9i
amVjdEZvclNlYXJjaE1hdGNoKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1
cmwsIGludCBtYXRjaGVzQ291bnQpCiB7Ci0gICAgbV9mcm9udGVuZC0+ZnJhbWVOYXZpZ2F0ZWQo
YnVpbGRPYmplY3RGb3JGcmFtZShsb2FkZXItPmZyYW1lKCkpLCBsb2FkZXJJZChsb2FkZXIpKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgZnJhbWVJZCk7CisgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoIm1h
dGNoZXNDb3VudCIsIG1hdGNoZXNDb3VudCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCit2b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIGNvbnN0IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwg
Y29uc3QgYm9vbCogY29uc3Qgb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBvYmplY3QpCiB7Ci0gICAgbV9mcm9udGVuZC0+ZnJhbWVEZXRhY2hlZChmcmFtZUlkKGZyYW1l
KSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9u
YWxJc1JlZ2V4IDogZmFsc2U7CisgICAgU3RyaW5nIHJlZ2V4U291cmNlID0gaXNSZWdleCA/IHRl
eHQgOiBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZSh0ZXh0KTsKKworICAgIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBm
YWxzZTsKKyAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWdleChyZWdleFNvdXJjZSwgY2FzZVNlbnNp
dGl2ZSA/IFRleHRDYXNlU2Vuc2l0aXZlIDogVGV4dENhc2VJbnNlbnNpdGl2ZSk7CisKKyAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX3BhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAg
ICBTdHJpbmcgY29udGVudDsKKyAgICAgICAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gYWxsUmVz
b3VyY2VzID0gY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpOworICAgICAgICBmb3IgKFZl
Y3RvcjxDYWNoZWRSZXNvdXJjZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5i
ZWdpbigpOyBpdCAhPSBhbGxSZXNvdXJjZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIENh
Y2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9ICppdDsKKyAgICAgICAgICAgIHN3aXRjaCAo
SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoKmNhY2hlZFJlc291cmNlKSkg
eworICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0eWxlc2hlZXRSZXNvdXJj
ZToKKyAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yUGFnZUFnZW50OjpTY3JpcHRSZXNvdXJjZToK
KyAgICAgICAgICAgICAgICBpZiAoZGVjb2RlQ2FjaGVkUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2Us
ICZjb250ZW50KSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgbWF0Y2hlc0NvdW50ID0gY291
bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMocmVnZXgsIGNvbnRlbnQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2hlc0NvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LT5wdXNoVmFsdWUoYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChmcmFtZUlkKGZyYW1lKSwgY2Fj
aGVkUmVzb3VyY2UtPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChkZWNvZGVN
YWluUmVzb3VyY2UoZnJhbWUsICZjb250ZW50KSkgeworICAgICAgICAgICAgaW50IG1hdGNoZXND
b3VudCA9IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKHJlZ2V4LCBjb250ZW50KTsKKyAg
ICAgICAgICAgIGlmIChtYXRjaGVzQ291bnQpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXNo
VmFsdWUoYnVpbGRPYmplY3RGb3JTZWFyY2hNYXRjaChmcmFtZUlkKGZyYW1lKSwgZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLCBtYXRjaGVzQ291bnQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
ICpvYmplY3QgPSByZXN1bHQ7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdvcmxk
KQpAQCAtNDQ3LDYgKzUyOCwyNiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ2xlYXJX
aW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcgogICAgIH0KIH0K
IAordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZpcmVkKCkKK3sKKyAg
ICAgbV9mcm9udGVuZC0+ZG9tQ29udGVudEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkRXZlbnRGaXJlZCgpCit7CisgICAgIG1fZnJv
bnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOworfQorCit2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK3sKKyAg
ICBtX2Zyb250ZW5kLT5mcmFtZU5hdmlnYXRlZChidWlsZE9iamVjdEZvckZyYW1lKGxvYWRlci0+
ZnJhbWUoKSksIGxvYWRlcklkKGxvYWRlcikpOworfQorCit2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZnJhbWVEZXRhY2hlZChGcmFtZSogZnJhbWUpCit7CisgICAgbV9mcm9udGVuZC0+ZnJhbWVE
ZXRhY2hlZChmcmFtZUlkKGZyYW1lKSk7Cit9CisKIEZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6
Om1haW5GcmFtZSgpCiB7CiAgICAgcmV0dXJuIG1fcGFnZS0+bWFpbkZyYW1lKCk7CkBAIC01MDQs
MTAgKzYwNSwxMCBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZgogCiAgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAg
cmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgc3VicmVzb3VyY2VzKTsKLSAgICBjb25zdCBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0g
ZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291
cmNlcygpOwotICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIENhY2hlZFJl
c291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisKKyAgICBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPiBhbGxSZXNvdXJjZXMgPSBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShm
cmFtZSk7CisgICAgZm9yIChWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gYWxsUmVzb3VyY2VzLmVuZCgpOyArK2l0
KSB7CisgICAgICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9ICppdDsKICAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCBj
YWNoZWRSZXNvdXJjZS0+dXJsKCkpOwogICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0U3RyaW5n
KCJ0eXBlIiwgY2FjaGVkUmVzb3VyY2VUeXBlU3RyaW5nKCpjYWNoZWRSZXNvdXJjZSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IDA1YWU1
N2IuLmMxMmQ3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmgKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3Mg
SW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIEtVUkw7CiBjbGFzcyBQYWdlOworY2xhc3MgUmVn
dWxhckV4cHJlc3Npb247CiAKIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCkBAIC04OSw5
ICs5MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwogICAgIHZvaWQg
Z2V0UmVzb3VyY2VUcmVlKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qKTsK
ICAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIGNvbnN0IGJhc2U2NEVuY29k
ZSwgU3RyaW5nKiBjb250ZW50KTsKKyAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgYm9vbCogY29uc3QgY2FzZVNlbnNpdGl2ZSwgY29u
c3QgYm9vbCogY29uc3QgaXNSZWdleCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiopOwogCiAgICAg
Ly8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIEFQSQotICAgIHZvaWQgZGlkQ29tbWl0TG9hZChj
b25zdCBTdHJpbmcmIHVybCk7CiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVk
KCk7CiAgICAgdm9pZCBsb2FkRXZlbnRGaXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKaW5kZXggNjk2ZDczOC4uMjJl
ZGVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlc1BhbmVsLmpzCkBAIC0zNzIsNiArMzcyLDkgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNl
c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfc2hvd1Jlc291cmNlVmlldzogZnVuY3Rpb24ocmVz
b3VyY2UpCiAgICAgewogICAgICAgICB2YXIgdmlldyA9IFdlYkluc3BlY3Rvci5SZXNvdXJjZVZp
ZXcucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3VyY2UpOworICAgICAgICAvLyBGSVhNRTog
VGhpcyBjb3VsZCBiZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCBjYWNoaW5nIFNvdXJjZUZyYW1lcy4g
ICAgICAgIAorICAgICAgICBpZiAodmlldy5zZWFyY2hDYW5jZWxlZCkKKyAgICAgICAgICAgIHZp
ZXcuc2VhcmNoQ2FuY2VsZWQoKTsKICAgICAgICAgdGhpcy5fZmV0Y2hBbmRBcHBseURpZmZNYXJr
dXAodmlldywgcmVzb3VyY2UpOwogICAgICAgICB0aGlzLl9pbm5lclNob3dWaWV3KHZpZXcpOwog
ICAgIH0sCkBAIC02NzgsMjUgKzY4MSwxMzQgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICB9LAogCi0gICAgZ2V0
IHNlYXJjaGFibGVWaWV3cygpCisgICAgcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnkpIAog
ICAgIHsKLSAgICAgICAgdmFyIHZpZXdzID0gW107CisgICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNo
UmVzdWx0cygpOworICAgICAgICB2YXIgcmVnZXggPSBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
Y3JlYXRlU2VhcmNoUmVnZXgocXVlcnkpOworICAgICAgICB2YXIgdG90YWxNYXRjaGVzQ291bnQg
PSAwOwogCi0gICAgICAgIGNvbnN0IHZpc2libGVWaWV3ID0gdGhpcy52aXNpYmxlVmlldzsKLSAg
ICAgICAgaWYgKHZpc2libGVWaWV3ICYmIHZpc2libGVWaWV3LnBlcmZvcm1TZWFyY2gpCi0gICAg
ICAgICAgICB2aWV3cy5wdXNoKHZpc2libGVWaWV3KTsKKyAgICAgICAgZnVuY3Rpb24gc2VhcmNo
SW5FZGl0ZWRSZXNvdXJjZSh0cmVlRWxlbWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IHJlc291cmNlID0gdHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3Q7CisgICAgICAgICAgICBp
ZiAocmVzb3VyY2UuaGlzdG9yeS5sZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB2YXIgbWF0Y2hlc0NvdW50ID0gY291bnRSZWdleE1hdGNoZXMocmVnZXgs
IHJlc291cmNlLmNvbnRlbnQpCisgICAgICAgICAgICB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVz
Rm91bmQobWF0Y2hlc0NvdW50KTsKKyAgICAgICAgICAgIHRvdGFsTWF0Y2hlc0NvdW50ICs9IG1h
dGNoZXNDb3VudDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9y
LCByZXN1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgc2VhcmNoUmVzdWx0ID0gcmVzdWx0W2ldOworICAgICAgICAgICAg
ICAgICAgICB2YXIgZnJhbWVUcmVlRWxlbWVudCA9IHRoaXMuX3RyZWVFbGVtZW50Rm9yRnJhbWVJ
ZFtzZWFyY2hSZXN1bHQuZnJhbWVJZF07CisgICAgICAgICAgICAgICAgICAgIGlmICghZnJhbWVU
cmVlRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBmcmFtZVRyZWVFbGVtZW50LnJlc291cmNlQnlVUkwo
c2VhcmNoUmVzdWx0LnVybCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlLmhp
c3RvcnkubGVuZ3RoID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBT
a2lwIGVkaXRlZCByZXNvdXJjZXMuCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmRUcmVl
RWxlbWVudEZvclJlc291cmNlKHJlc291cmNlKS5zZWFyY2hNYXRjaGVzRm91bmQoc2VhcmNoUmVz
dWx0Lm1hdGNoZXNDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIHRvdGFsTWF0Y2hlc0NvdW50
ICs9IHNlYXJjaFJlc3VsdC5tYXRjaGVzQ291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29u
dHJvbGxlci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodG90YWxNYXRjaGVzQ291bnQsIHRoaXMp
OworICAgICAgICAgICAgdGhpcy5fc2VhcmNoQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VzU2VhcmNoQ29udHJvbGxlcih0aGlzLnJlc291cmNlc0xpc3RUcmVlRWxlbWVudCk7
CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNpZGViYXJUcmVlLnNlbGVjdGVkVHJlZUVsZW1lbnQg
JiYgdGhpcy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3Vu
dCkKKyAgICAgICAgICAgICAgICB0aGlzLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5fZm9yQWxsUmVzb3VyY2VUcmVlRWxlbWVudHMo
c2VhcmNoSW5FZGl0ZWRSZXNvdXJjZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgUGFnZUFnZW50LnNl
YXJjaEluUmVzb3VyY2VzKHJlZ2V4LnNvdXJjZSwgIXJlZ2V4Lmlnbm9yZUNhc2UsIHRydWUsIGNh
bGxiYWNrLmJpbmQodGhpcykpOyAgICAgICAgICAgIAorICAgIH0sCisgICAgCisgICAgX2Vuc3Vy
ZVZpZXdTZWFyY2hQZXJmb3JtZWQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAg
ZnVuY3Rpb24gdmlld1NlYXJjaFBlcmZvcm1lZENhbGxiYWNrKHNlYXJjaElkKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoc2VhcmNoSWQgIT09IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBTZWFyY2ggaXMgb2Jzb2xldGUuCisgICAgICAgICAg
ICB0aGlzLl92aWV3U2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgY2FsbGJh
Y2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5fdmlld1NlYXJjaEluUHJvZ3Jl
c3MpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlVmlldy5oYXNTZWFyY2hSZXN1bHRz
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIGlkIHRvIGVhY2ggc2VhcmNoLCBzbyB0
aGF0IHdlIGNhbiBza2lwIGNhbGxiYWNrcyBmb3Igb2Jzb2xldGUgc2VhcmNoZXMuCisgICAgICAg
ICAgICAgICAgdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCA9IHRoaXMuX2xhc3RWaWV3U2VhcmNoSWQg
PyB0aGlzLl9sYXN0Vmlld1NlYXJjaElkICsgMSA6IDA7CisgICAgICAgICAgICAgICAgdGhpcy5f
dmlld1NlYXJjaEluUHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMudmlzaWJs
ZVZpZXcucGVyZm9ybVNlYXJjaCh0aGlzLmN1cnJlbnRRdWVyeSwgdmlld1NlYXJjaFBlcmZvcm1l
ZENhbGxiYWNrLmJpbmQodGhpcywgdGhpcy5fbGFzdFZpZXdTZWFyY2hJZCkpOworICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICBfc2hvd1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oc2VhcmNoUmVzdWx0KQorICAgIHsK
KyAgICAgICAgdGhpcy5fbGFzdFNlYXJjaFJlc3VsdEluZGV4ID0gc2VhcmNoUmVzdWx0LmluZGV4
OworICAgICAgICB0aGlzLl9sYXN0U2VhcmNoUmVzdWx0VHJlZUVsZW1lbnQgPSBzZWFyY2hSZXN1
bHQudHJlZUVsZW1lbnQ7CiAKKyAgICAgICAgLy8gQXQgZmlyc3Qgc2hvdyB2aWV3IGZvciB0cmVl
RWxlbWVudC4KKyAgICAgICAgaWYgKHNlYXJjaFJlc3VsdC50cmVlRWxlbWVudCAhPT0gdGhpcy5z
aWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLnNob3dS
ZXNvdXJjZShzZWFyY2hSZXN1bHQudHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QpOworICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIuZm9jdXNTZWFyY2hGaWVsZCgp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzZWFyY2hJ
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRU
cmVlRWxlbWVudCAhPT0gdGhpcy5fbGFzdFNlYXJjaFJlc3VsdFRyZWVFbGVtZW50KQorICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gVXNlciBoYXMgc2VsZWN0ZWQgYW5vdGhlciB2aWV3IHdoaWxl
IHdlIHdlcmUgc2VhcmNoaW5nLgorICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RTZWFyY2hSZXN1
bHRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3Lmp1bXBUb1Nl
YXJjaFJlc3VsdCh0aGlzLl9sYXN0U2VhcmNoUmVzdWx0SW5kZXgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlbiBydW4gU291cmNlRnJhbWUgc2VhcmNoIGlmIG5lZWRlZCBhbmQganVtcCB0
byBzZWFyY2ggcmVzdWx0IGluZGV4IHdoZW4gZG9uZS4KKyAgICAgICAgdGhpcy5fZW5zdXJlVmll
d1NlYXJjaFBlcmZvcm1lZChjYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Jl
c2V0U2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQorICAgIHsKICAgICAgICAgZnVuY3Rpb24gY2Fs
bGJhY2socmVzb3VyY2VUcmVlRWxlbWVudCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHJl
c291cmNlID0gcmVzb3VyY2VUcmVlRWxlbWVudC5fcmVzb3VyY2U7Ci0gICAgICAgICAgICB2YXIg
cmVzb3VyY2VWaWV3ID0gV2ViSW5zcGVjdG9yLlJlc291cmNlVmlldy5yZXNvdXJjZVZpZXdGb3JS
ZXNvdXJjZShyZXNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2VWaWV3LnBlcmZvcm1T
ZWFyY2ggJiYgcmVzb3VyY2VWaWV3ICE9PSB2aXNpYmxlVmlldykKLSAgICAgICAgICAgICAgICB2
aWV3cy5wdXNoKHJlc291cmNlVmlldyk7CisgICAgICAgICAgICByZXNvdXJjZVRyZWVFbGVtZW50
Ll9yZXNldFNlYXJjaFJlc3VsdHMoKTsKICAgICAgICAgfQorCiAgICAgICAgIHRoaXMuX2ZvckFs
bFJlc291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHZpZXdzOwor
ICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyAmJiB0aGlzLnZpc2libGVWaWV3LnNlYXJjaENh
bmNlbGVkKQorICAgICAgICAgICAgdGhpcy52aXNpYmxlVmlldy5zZWFyY2hDYW5jZWxlZCgpOwor
CisgICAgICAgIHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRUcmVlRWxlbWVudCA9IG51bGw7CisgICAg
ICAgIHRoaXMuX2xhc3RTZWFyY2hSZXN1bHRJbmRleCA9IC0xOworICAgICAgICB0aGlzLl92aWV3
U2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIH0sCisKKyAgICBzZWFyY2hDYW5jZWxlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIu
dXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KDAsIHRoaXMpOworICAgICAgICB0aGlzLl9yZXNldFNl
YXJjaFJlc3VsdHMoKTsKICAgICB9LAogCisgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTZWFyY2hNYXRjaGVzKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgY3VycmVudFRyZWVFbGVtZW50ID0gdGhp
cy5zaWRlYmFyVHJlZS5zZWxlY3RlZFRyZWVFbGVtZW50OworICAgICAgICB2YXIgbmV4dFNlYXJj
aFJlc3VsdCA9IHRoaXMuX3NlYXJjaENvbnRyb2xsZXIubmV4dFNlYXJjaFJlc3VsdChjdXJyZW50
VHJlZUVsZW1lbnQpOworICAgICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KG5leHRTZWFyY2hS
ZXN1bHQpOworICAgIH0sCisgICAgCisgICAganVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5jdXJyZW50U2VhcmNoTWF0Y2hlcykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGN1cnJlbnRUcmVlRWxlbWVudCA9IHRo
aXMuc2lkZWJhclRyZWUuc2VsZWN0ZWRUcmVlRWxlbWVudDsKKyAgICAgICAgdmFyIHByZXZpb3Vz
U2VhcmNoUmVzdWx0ID0gdGhpcy5fc2VhcmNoQ29udHJvbGxlci5wcmV2aW91c1NlYXJjaFJlc3Vs
dChjdXJyZW50VHJlZUVsZW1lbnQpOworICAgICAgICB0aGlzLl9zaG93U2VhcmNoUmVzdWx0KHBy
ZXZpb3VzU2VhcmNoUmVzdWx0KTsKKyAgICB9LAorICAgIAogICAgIF9mb3JBbGxSZXNvdXJjZVRy
ZWVFbGVtZW50czogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgc3RvcCA9
IGZhbHNlOwpAQCAtNzA2LDE1ICs4MTgsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIHNlYXJjaE1hdGNoRm91bmQ6
IGZ1bmN0aW9uKHZpZXcsIG1hdGNoZXMpCi0gICAgewotICAgICAgICBpZiAoIXZpZXcucmVzb3Vy
Y2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMu
X2ZpbmRUcmVlRWxlbWVudEZvclJlc291cmNlKHZpZXcucmVzb3VyY2UpOwotICAgICAgICBpZiAo
dHJlZUVsZW1lbnQpCi0gICAgICAgICAgICB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaEZvdW5kKG1h
dGNoZXMpOwotICAgIH0sCi0KICAgICBfZmluZFRyZWVFbGVtZW50Rm9yUmVzb3VyY2U6IGZ1bmN0
aW9uKHJlc291cmNlKQogICAgIHsKICAgICAgICAgZnVuY3Rpb24gaXNBbmNlc3RvcihhbmNlc3Rv
ciwgb2JqZWN0KQpAQCAtNzMyLDMwICs4MzUsNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5zaWRlYmFyVHJlZS5maW5kVHJl
ZUVsZW1lbnQocmVzb3VyY2UsIGlzQW5jZXN0b3IsIGdldFBhcmVudCk7CiAgICAgfSwKIAotICAg
IHNlYXJjaENhbmNlbGVkOiBmdW5jdGlvbihzdGFydGluZ05ld1NlYXJjaCkKLSAgICB7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQuY2FsbCh0aGlz
LCBzdGFydGluZ05ld1NlYXJjaCk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0aW5nTmV3U2VhcmNoKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc291cmNl
VHJlZUVsZW1lbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc291cmNlVHJlZUVsZW1lbnQu
X2Vycm9yc1dhcm5pbmdzVXBkYXRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFs
bFJlc291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgcGVyZm9ybVNl
YXJjaDogZnVuY3Rpb24ocXVlcnkpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhy
ZXNvdXJjZVRyZWVFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXNvdXJjZVRyZWVF
bGVtZW50Ll9yZXNldEJ1YmJsZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2ZvckFsbFJl
c291cmNlVHJlZUVsZW1lbnRzKGNhbGxiYWNrKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoLmNhbGwodGhpcywgcXVlcnkpOwotICAgIH0sCi0KICAg
ICBzaG93VmlldzogZnVuY3Rpb24odmlldykKICAgICB7CiAgICAgICAgIGlmICh2aWV3KQpAQCAt
MTAxMSw2ICsxMDkwLDExIEBAIFdlYkluc3BlY3Rvci5GcmFtZVRyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgdGhpcy5fdHJlZUVsZW1lbnRGb3JSZXNvdXJjZVtyZXNvdXJjZS51cmxd
ID0gcmVzb3VyY2VUcmVlRWxlbWVudDsKICAgICB9LAogCisgICAgcmVzb3VyY2VCeVVSTDogZnVu
Y3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVFbGVtZW50Rm9yUmVz
b3VyY2VbdXJsXS5yZXByZXNlbnRlZE9iamVjdDsKKyAgICB9LAorCiAgICAgYXBwZW5kQ2hpbGQ6
IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQogICAgIHsKICAgICAgICAgdGhpcy5faW5zZXJ0SW5QcmVz
ZW50YXRpb25PcmRlcih0aGlzLCB0cmVlRWxlbWVudCk7CkBAIC0xMTY0LDExICsxMjQ4LDIzIEBA
IFdlYkluc3BlY3Rvci5GcmFtZVJlc291cmNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAgICAgfSwKIAotICAgIHNlYXJjaE1hdGNoRm91bmQ6IGZ1bmN0aW9uKG1hdGNoZXMp
CisgICAgX3Jlc2V0U2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhp
cy5fcmVzZXRCdWJibGUoKTsKKyAgICAgICAgdGhpcy5fc2VhcmNoTWF0Y2hlc0NvdW50ID0gMDsK
KyAgICB9LAogCi0gICAgICAgIHRoaXMuX3NldEJ1YmJsZVRleHQobWF0Y2hlcyk7CisgICAgZ2V0
IHNlYXJjaE1hdGNoZXNDb3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNo
TWF0Y2hlc0NvdW50OworICAgIH0sCisKKyAgICBzZWFyY2hNYXRjaGVzRm91bmQ6IGZ1bmN0aW9u
KG1hdGNoZXNDb3VudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Jlc2V0U2VhcmNoUmVzdWx0cygp
OworCisgICAgICAgIHRoaXMuX3NlYXJjaE1hdGNoZXNDb3VudCA9IG1hdGNoZXNDb3VudDsKKyAg
ICAgICAgdGhpcy5fc2V0QnViYmxlVGV4dChtYXRjaGVzQ291bnQpOwogICAgICAgICB0aGlzLl9i
dWJibGVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNlYXJjaC1tYXRjaGVzIik7CiAKICAgICAgICAg
Ly8gRXhwYW5kLCBkbyBub3Qgc2Nyb2xsIGludG8gdmlldy4KQEAgLTE0MjksMyArMTUyNSwxMTAg
QEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VDYXRlZ29yeVZpZXcucHJvdG90eXBlID0gewogfQogCiBX
ZWJJbnNwZWN0b3IuU3RvcmFnZUNhdGVnb3J5Vmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuUmVzb3VyY2VzU2VhcmNo
Q29udHJvbGxlciA9IGZ1bmN0aW9uKHJvb3RFbGVtZW50KQoreworICAgIHRoaXMuX3Jvb3QgPSBy
b290RWxlbWVudDsKKyAgICB0aGlzLl90cmF2ZXJzZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJj
aFJlc3VsdHNUcmVlRWxlbWVudHNUcmF2ZXJzZXIocm9vdEVsZW1lbnQpOworICAgIHRoaXMuX2xh
c3RUcmVlRWxlbWVudCA9IG51bGw7CisgICAgdGhpcy5fbGFzdEluZGV4ID0gLTE7Cit9CisKK1dl
Ykluc3BlY3Rvci5SZXNvdXJjZXNTZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICBu
ZXh0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbihjdXJyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAg
ICAgICBpZiAoIWN1cnJlbnRUcmVlRWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9z
ZWFyY2hSZXN1bHQodGhpcy5fdHJhdmVyc2VyLmZpcnN0KCksIDApOworCisgICAgICAgIGlmICgh
Y3VycmVudFRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLl9zZWFyY2hSZXN1bHQodGhpcy5fdHJhdmVyc2VyLm5leHQoY3VycmVudFRyZWVFbGVt
ZW50KSwgMCk7CisgICAgICAgIAorICAgICAgICBpZiAodGhpcy5fbGFzdFRyZWVFbGVtZW50ICE9
PSBjdXJyZW50VHJlZUVsZW1lbnQgfHwgdGhpcy5fbGFzdEluZGV4ID09PSAtMSkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zZWFyY2hSZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCAwKTsKKwor
ICAgICAgICBpZiAodGhpcy5fbGFzdEluZGV4ID09IGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hN
YXRjaGVzQ291bnQgLSAxKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdCh0
aGlzLl90cmF2ZXJzZXIubmV4dChjdXJyZW50VHJlZUVsZW1lbnQpLCAwKTsKKworICAgICAgICBy
ZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KGN1cnJlbnRUcmVlRWxlbWVudCwgdGhpcy5fbGFzdElu
ZGV4ICsgMSk7CisgICAgfSwKKyAgICAKKyAgICBwcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rp
b24oY3VycmVudFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50VHJlZUVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3RyYXZlcnNlci5s
YXN0KCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVFbGVtZW50
LCB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsgICAgICAgICAgICAKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnRUcmVlRWxlbWVudC5zZWFyY2hNYXRj
aGVzQ291bnQgJiYgdGhpcy5fbGFzdFRyZWVFbGVtZW50ID09PSBjdXJyZW50VHJlZUVsZW1lbnQg
JiYgdGhpcy5fbGFzdEluZGV4ID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hS
ZXN1bHQoY3VycmVudFRyZWVFbGVtZW50LCB0aGlzLl9sYXN0SW5kZXggLSAxKTsKKyAgICAgICAg
IAorICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSB0aGlzLl90cmF2ZXJzZXIucHJldmlvdXMoY3Vy
cmVudFRyZWVFbGVtZW50KQorICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoUmVzdWx0KHRyZWVF
bGVtZW50LCB0cmVlRWxlbWVudC5zZWFyY2hNYXRjaGVzQ291bnQgLSAxKTsKKyAgICB9LAorCisg
ICAgX3NlYXJjaFJlc3VsdDogZnVuY3Rpb24odHJlZUVsZW1lbnQsIGluZGV4KQorICAgIHsKKyAg
ICAgICAgdGhpcy5fbGFzdFRyZWVFbGVtZW50ID0gdHJlZUVsZW1lbnQ7CisgICAgICAgIHRoaXMu
X2xhc3RJbmRleCA9IGluZGV4OworICAgICAgICByZXR1cm4ge3RyZWVFbGVtZW50OiB0cmVlRWxl
bWVudCwgaW5kZXg6IGluZGV4fTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5TZWFyY2hSZXN1
bHRzVHJlZUVsZW1lbnRzVHJhdmVyc2VyID0gZnVuY3Rpb24ocm9vdEVsZW1lbnQpCit7CisgICAg
dGhpcy5fcm9vdCA9IHJvb3RFbGVtZW50OworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoUmVzdWx0
c1RyZWVFbGVtZW50c1RyYXZlcnNlci5wcm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5fcm9vdCk7CisgICAgfSwK
KyAgICAgICAgCisgICAgbGFzdDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKHRoaXMuX3Jvb3QpOyAgICAKKyAgICB9LAorCisg
ICAgbmV4dDogZnVuY3Rpb24oc3RhcnRUcmVlRWxlbWVudCkKKyAgICB7CisgICAgICAgIHZhciB0
cmVlRWxlbWVudCA9IHN0YXJ0VHJlZUVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHRyZWVFbGVtZW50ID0gdGhpcy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSB8fCB0aGlzLl9y
b290OworICAgICAgICB9IHdoaWxlICh0cmVlRWxlbWVudCAhPSBzdGFydFRyZWVFbGVtZW50ICYm
ICF0aGlzLl9lbGVtZW50SGFzU2VhcmNoUmVzdWx0cyh0cmVlRWxlbWVudCkpOworICAgICAgICBy
ZXR1cm4gdHJlZUVsZW1lbnQ7CisgICAgfSwKKworICAgIHByZXZpb3VzOiBmdW5jdGlvbihzdGFy
dFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc3RhcnRUcmVl
RWxlbWVudDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgdHJlZUVsZW1lbnQgPSB0aGlzLl90
cmF2ZXJzZVByZXZpb3VzKHRyZWVFbGVtZW50KSB8fCB0aGlzLl9sYXN0VHJlZUVsZW1lbnQoKTsK
KyAgICAgICAgfSB3aGlsZSAodHJlZUVsZW1lbnQgIT0gc3RhcnRUcmVlRWxlbWVudCAmJiAhdGhp
cy5fZWxlbWVudEhhc1NlYXJjaFJlc3VsdHModHJlZUVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJu
IHRyZWVFbGVtZW50OworICAgIH0sCisKKyAgICBfdHJhdmVyc2VOZXh0OiBmdW5jdGlvbih0cmVl
RWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cmVlRWxlbWVudC50cmF2ZXJzZU5leHRU
cmVlRWxlbWVudChmYWxzZSwgdGhpcy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9lbGVt
ZW50SGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24odHJlZUVsZW1lbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gdHJlZUVsZW1lbnQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuRnJhbWVSZXNvdXJj
ZVRyZWVFbGVtZW50ICYmIHRyZWVFbGVtZW50LnNlYXJjaE1hdGNoZXNDb3VudDsKKyAgICB9LAor
CisgICAgX3RyYXZlcnNlUHJldmlvdXM6IGZ1bmN0aW9uKHRyZWVFbGVtZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRyZWVFbGVtZW50LnRyYXZlcnNlUHJldmlvdXNUcmVlRWxlbWVudChmYWxz
ZSwgdGhpcy5fcm9vdCwgdHJ1ZSk7CisgICAgfSwKKworICAgIF9sYXN0VHJlZUVsZW1lbnQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMuX3Jvb3Q7Cisg
ICAgICAgIHZhciBuZXh0VHJlZUVsZW1lbnQ7IAorICAgICAgICB3aGlsZSAobmV4dFRyZWVFbGVt
ZW50ID0gdGhpcy5fdHJhdmVyc2VOZXh0KHRyZWVFbGVtZW50KSkKKyAgICAgICAgICAgIHRyZWVF
bGVtZW50ID0gbmV4dFRyZWVFbGVtZW50OworICAgICAgICByZXR1cm4gdHJlZUVsZW1lbnQ7ICAg
ICAgICAKKyAgICB9LAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Tb3VyY2VGcmFtZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKaW5kZXggZWFmZTFmYS4uNDI3MmY5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCkBAIC01Niw2ICs1
NiwyNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUuRXZlbnRzID0gewogICAgIExvYWRlZDog
ImxvYWRlZCIKIH0KIAorV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLmNyZWF0ZVNlYXJjaFJlZ2V4
ID0gZnVuY3Rpb24ocXVlcnkpCit7CisgICAgdmFyIHJlZ2V4OworICAgIAorICAgIC8vIEZpcnN0
IHRyeSBjcmVhdGluZyByZWdleCBpZiB1c2VyIGtub3dzIHRoZSAvIC8gaGludC4KKyAgICB0cnkg
eworICAgICAgICBpZiAoL15cLy4qXC8kLy50ZXN0KHF1ZXJ5KSkKKyAgICAgICAgICAgIHJlZ2V4
ID0gbmV3IFJlZ0V4cChxdWVyeS5zdWJzdHJpbmcoMSwgcXVlcnkubGVuZ3RoIC0gMSkpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgLy8gU2lsZW50IGNhdGNoLgorICAgIH0KKworICAgIC8v
IE90aGVyd2lzZSBqdXN0IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLgorICAgIGlmICghcmVn
ZXgpIAorICAgICAgICByZWdleCA9IGNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5KTsKKyAgICAKKyAg
ICByZXR1cm4gcmVnZXg7Cit9CisKKwogV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZSA9IHsKICAgICBnZXQgdmlzaWJsZSgpCiAgICAgewpAQCAtMzU3LDE4ICszNzcsOSBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fY3Vy
cmVudFNlYXJjaFJlc3VsdEluZGV4ID0gLTE7CiAgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1
bHRzID0gW107CiAKLSAgICAgICAgICAgIC8vIEZpcnN0IGRvIGNhc2UtaW5zZW5zaXRpdmUgc2Vh
cmNoLgotICAgICAgICAgICAgdmFyIHJlZ2V4T2JqZWN0ID0gY3JlYXRlU2VhcmNoUmVnZXgocXVl
cnkpOwotICAgICAgICAgICAgdGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhyZWdleE9iamVjdCwg
dGhpcy5fc2VhcmNoUmVzdWx0cyk7Ci0KLSAgICAgICAgICAgIC8vIFRoZW4gdHJ5IHJlZ2V4IHNl
YXJjaCBpZiB1c2VyIGtub3dzIHRoZSAvIC8gaGludC4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKC9eXC8uKlwvJC8udGVzdChxdWVyeSkpCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2NvbGxlY3RSZWdleE1hdGNoZXMobmV3IFJlZ0V4cChxdWVyeS5zdWJzdHJpbmco
MSwgcXVlcnkubGVuZ3RoIC0gMSkpLCB0aGlzLl9zZWFyY2hSZXN1bHRzKTsKLSAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICAvLyBTaWxlbnQgY2F0Y2guCi0gICAgICAg
ICAgICB9Ci0KKyAgICAgICAgICAgIHZhciByZWdleCA9IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFt
ZS5jcmVhdGVTZWFyY2hSZWdleChxdWVyeSk7CisgICAgICAgICAgICB0aGlzLl9zZWFyY2hSZXN1
bHRzID0gdGhpcy5fY29sbGVjdFJlZ2V4TWF0Y2hlcyhyZWdleCk7CisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhbGxiYWNrKHRoaXMsIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoKTsKICAg
ICAgICAgfQogCkBAIC0zOTEsMjQgKzQwMiwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLm1hcmtBbmRSZXZlYWxSYW5n
ZShudWxsKTsKICAgICB9LAogCisgICAgaGFzU2VhcmNoUmVzdWx0czogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoID4gMDsKKyAgICB9
LAorCiAgICAganVtcFRvRmlyc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCgwKTsKKyAgICAgICAgdGhpcy5qdW1wVG9TZWFy
Y2hSZXN1bHQoMCk7CiAgICAgfSwKIAogICAgIGp1bXBUb0xhc3RTZWFyY2hSZXN1bHQ6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2p1bXBUb1NlYXJjaFJlc3VsdCh0aGlzLl9zZWFy
Y2hSZXN1bHRzLmxlbmd0aCAtIDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0
aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCAtIDEpOwogICAgIH0sCiAKICAgICBqdW1wVG9OZXh0
U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB0aGlzLl9qdW1wVG9TZWFy
Y2hSZXN1bHQodGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ICsgMSk7CisgICAgICAgIHRo
aXMuanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCArIDEp
OwogICAgIH0sCiAKICAgICBqdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgdGhpcy5fanVtcFRvU2VhcmNoUmVzdWx0KHRoaXMuX2N1cnJlbnRTZWFy
Y2hSZXN1bHRJbmRleCAtIDEpOworICAgICAgICB0aGlzLmp1bXBUb1NlYXJjaFJlc3VsdCh0aGlz
Ll9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggLSAxKTsKICAgICB9LAogCiAgICAgc2hvd2luZ0Zp
cnN0U2VhcmNoUmVzdWx0OiBmdW5jdGlvbigpCkBAIC00MjEsNyArNDM3LDcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJj
aFJlc3VsdHMubGVuZ3RoICYmIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9PT0gKHRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoIC0gMSk7CiAgICAgfSwKIAotICAgIF9qdW1wVG9TZWFy
Y2hSZXN1bHQ6IGZ1bmN0aW9uKGluZGV4KQorICAgIGp1bXBUb1NlYXJjaFJlc3VsdDogZnVuY3Rp
b24oaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMubG9hZGVkIHx8ICF0aGlzLl9zZWFy
Y2hSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQyOSwxOSArNDQ1LDIx
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMu
X3RleHRWaWV3ZXIubWFya0FuZFJldmVhbFJhbmdlKHRoaXMuX3NlYXJjaFJlc3VsdHNbdGhpcy5f
Y3VycmVudFNlYXJjaFJlc3VsdEluZGV4XSk7CiAgICAgfSwKIAotICAgIF9jb2xsZWN0UmVnZXhN
YXRjaGVzOiBmdW5jdGlvbihyZWdleE9iamVjdCwgcmFuZ2VzKQorICAgIF9jb2xsZWN0UmVnZXhN
YXRjaGVzOiBmdW5jdGlvbihyZWdleE9iamVjdCkKICAgICB7CisgICAgICAgIHZhciByYW5nZXMg
PSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudDsgKytpKSB7CiAgICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5l
KGkpOwogICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7CiAgICAgICAgICAgICBkbyB7CiAgICAg
ICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVnZXhPYmplY3QuZXhlYyhsaW5lKTsKICAgICAgICAg
ICAgICAgICBpZiAobWF0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gobmV3
IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UoaSwgb2Zmc2V0ICsgbWF0Y2guaW5kZXgsIGksIG9mZnNl
dCArIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtYXRjaFswXS5sZW5ndGgpCisgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVz
aChuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShpLCBvZmZzZXQgKyBtYXRjaC5pbmRleCwgaSwg
b2Zmc2V0ICsgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpKTsKICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ICs9IG1hdGNoLmluZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgbGlu
ZSA9IGxpbmUuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSB3aGlsZSAobWF0Y2gpCisgICAgICAgICAgICB9IHdoaWxlIChtYXRjaCAm
JiBsaW5lKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAgIH0sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCmluZGV4IDgw
MGU1N2YuLjYyNzkyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvdXRpbGl0aWVzLmpzCkBAIC0xMDMzLDEyICsxMDMzLDI3IEBAIGZ1bmN0aW9uIGhpZ2hsaWdo
dFNlYXJjaFJlc3VsdHMoZWxlbWVudCwgcmVzdWx0UmFuZ2VzKQogCiBmdW5jdGlvbiBjcmVhdGVT
ZWFyY2hSZWdleChxdWVyeSwgZXh0cmFGbGFncykKIHsKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBr
ZXB0IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gSW5zcGVjdG9yUGFnZUFnZW50LmNwcC4KKyAgICBy
ZWdleFNwZWNpYWxDaGFyYWN0ZXJzID0gIltdKCl7fSstKi4sP1xcXiR8IjsKICAgICB2YXIgcmVn
ZXggPSAiIjsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXJ5Lmxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIHZhciBjaGFyID0gcXVlcnkuY2hhckF0KGkpOwotICAgICAgICBpZiAoY2hhciA9PT0g
Il0iKQotICAgICAgICAgICAgY2hhciA9ICJcXF0iOwotICAgICAgICByZWdleCArPSAiWyIgKyBj
aGFyICsgIl0iOworICAgICAgICBpZiAocmVnZXhTcGVjaWFsQ2hhcmFjdGVycy5pbmRleE9mKGNo
YXIpICE9IC0xKQorICAgICAgICAgICAgcmVnZXggKz0gIlxcIjsKKyAgICAgICAgcmVnZXggKz0g
Y2hhcjsKICAgICB9CiAgICAgcmV0dXJuIG5ldyBSZWdFeHAocmVnZXgsICJpIiArIChleHRyYUZs
YWdzIHx8ICIiKSk7CiB9CisKK2Z1bmN0aW9uIGNvdW50UmVnZXhNYXRjaGVzKHJlZ2V4LCBjb250
ZW50KQoreworICAgIHZhciB0ZXh0ID0gY29udGVudDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICB2YXIgbWF0Y2g7CisgICAgd2hpbGUgKHRleHQgJiYgKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0
KSkpIHsKKyAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA+IDApCisgICAgICAgICAgICArK3Jl
c3VsdDsKKyAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSk7Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>