<?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>50295</bug_id>
          
          <creation_ts>2010-11-30 16:47:43 -0800</creation_ts>
          <short_desc>Regexp JIT&apos;ed Code Contains Branches to Branches for Backtracking</short_desc>
          <delta_ts>2010-12-03 14:48:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>loki</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315405</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-11-30 16:47:43 -0800</bug_when>
    <thetext>The regular expression JIT compiler currently generates code one term at a time.  A term may contain backtracking logic to handle trying another alternative of a parenthetical subexpression.  The generated code often contains sequences of branches to branches.  There are also branches around some logic.  If that logic was moved some of those jumps could be eliminated.

This is one of the issues covered by &lt;rdar://problem/8511767&gt;.

Here is a symbolic version of the code generated for /(a|A)(b|B)/ 
		push   %rbp
		mov    %rsp,%rbp
		push   %rbx
		mov    %esi,(%rcx)
		sub    $0x10,%rsp
		add    $0x2,%esi
		cmp    %edx,%esi
		ja     nextChar
loop:
		mov    %rsi,%rax
		add    $0xfffffffffffffffe,%eax
		mov    %eax,0x8(%rcx)
		cmpw   $0x61,-0x4(%rdi,%rsi,2)
		jne    tryAlt1A
		mov    $tryAlt1A,%r11
		mov    %r11,(%rsp)
		jmpq   term1Match
tryAlt1A:
		cmpw   $0x41,-0x4(%rdi,%rsi,2)
		jne    term1AFail  // Jump to a jump
		mov    $term1AFail,%r11
		mov    %r11,(%rsp)
		jmpq   term1Match  // Jump around two other jumps
term1AFail:
		jmpq   term1Fail
backTrackTerm1Select:
		jmpq   *(%rsp)
term1Match:
		mov    %rsi,%rax
		add    $0xffffffffffffffff,%eax
		mov    %eax,0xc(%rcx)
		jmpq   startTerm2  // Jump around &quot;fail&quot; code
backTrackTerm1:
		jmpq   backTrackTerm1Select  // Jump to an indirect jump
term1Fail:
		movl   $0xffffffff,0x8(%rcx)
		jmpq   nextChar
startTerm2:
		mov    %rsi,%rax
		add    $0xffffffffffffffff,%eax
		mov    %eax,0x10(%rcx)
		cmpw   $0x62,-0x2(%rdi,%rsi,2)
		jne    tryAlt2B
		mov    $tryAlt2B,%r11
		mov    %r11,0x8(%rsp)
		jmpq   term2Match
tryAlt2B:
		cmpw   $0x42,-0x2(%rdi,%rsi,2)
		jne    term2BFail
		mov    $term2BFail,%r11
		mov    %r11,0x8(%rsp)
		jmpq   term2Match  // Jump around jumps
term2BFail:
		jmpq   term2Fail
backTrackTerm2Select:
		jmpq   *0x8(%rsp)  // Unused code
term2Match:
		mov    %esi,0x14(%rcx)
		jmpq   matchSuccess  // Jump around &quot;fail&quot; logic
		jmpq   backTrackTerm2Select  // Jump to an indirect jump - also not used!!
term2Fail:
		movl   $0xffffffff,0x10(%rcx)
		jmpq   backTrackTerm1  // &lt;&lt; Jump to a jump to an indirect jump
matchSuccess:
		add    $0x10,%rsp
		mov    (%rcx),%eax
		mov    %esi,0x4(%rcx)
		pop    %rbx
		pop    %rbp
		retq   
nextChar:
		mov    %rsi,%rax
		sub    $0x1,%eax
		mov    %eax,(%rcx)
		add    $0x1,%esi
		cmp    %edx,%esi
		jbe    loop
		add    $0x10,%rsp
		mov    $0xffffffff,%eax
		pop    %rbx
		pop    %rbp
		retq</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315421</commentid>
    <comment_count>1</comment_count>
      <attachid>75232</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-11-30 17:03:51 -0800</bug_when>
    <thetext>Created attachment 75232
Patch to remove most paren related branches to branches

This patch propagates branches from within parentheses backtracking code to later alternatives.  It also emits the parentheses failure code at the end of the routine.  It handles indirect branches as backtracking destinations and emits a trampoline to an indirect branch when needed.

Some cleanups were done as part of this patch.  Specifically the invertOrCapture flag was separated into two.

The code generated by this patch for the same regular expression in the description is:

        push   %rbp     
        mov    %rsp,%rbp
        push   %rbx     
        mov    %esi,(%rcx)
        sub    $0x10,%rsp
        add    $0x2,%esi
        cmp    %edx,%esi
        ja     nextChar
loop:
        mov    %rsi,%rax
        add    $0xfffffffffffffffe,%eax
        mov    %eax,0x8(%rcx)  
        cmpw   $0x61,-0x4(%rdi,%rsi,2)
        jne    tryAlt1A 
        mov    $tryAlt1A,%r11  
        mov    %r11,(%rsp)
        jmpq   term1Match
tryAlt1A:
        cmpw   $0x41,-0x4(%rdi,%rsi,2)
        jne    term1Fail
        mov    $term1Fail,%r11 
        mov    %r11,(%rsp)
        jmpq   term1Match
term1Match:
        mov    %rsi,%rax
        add    $0xffffffffffffffff,%eax
        mov    %eax,0xc(%rcx)  
        mov    %rsi,%rax
        add    $0xffffffffffffffff,%eax
        mov    %eax,0x10(%rcx) 
        cmpw   $0x62,-0x2(%rdi,%rsi,2)
        jne    tryAlt2B 
        mov    $tryAlt2B,%r11  
        mov    %r11,0x8(%rsp)  
        jmpq   term2Match
tryAlt2B:
        cmpw   $0x42,-0x2(%rdi,%rsi,2)
        jne    term2Fail
        mov    $term2Fail,%r11 
        mov    %r11,0x8(%rsp)  
        jmpq   term2Match
term2Match:
        mov    %esi,0x14(%rcx) 
        add    $0x10,%rsp
        mov    (%rcx),%eax
        mov    %esi,0x4(%rcx)  
        pop    %rbx     
        pop    %rbp     
        retq   
nextChar:
        mov    %rsi,%rax
        sub    $0x1,%eax
        mov    %eax,(%rcx)
        add    $0x1,%esi
        cmp    %edx,%esi
        jbe    loop:    
        add    $0x10,%rsp
        mov    $0xffffffff,%eax
        pop    %rbx     
        pop    %rbp     
        retq   
term2Fail:
        movl   $0xffffffff,0x10(%rcx)
        jmpq   *(%rsp)  
term1Fail:
        movl   $0xffffffff,0x8(%rcx)
        jmpq   nextChar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315662</commentid>
    <comment_count>2</comment_count>
      <attachid>75232</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-12-01 08:34:09 -0800</bug_when>
    <thetext>Comment on attachment 75232
Patch to remove most paren related branches to branches

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

&gt; JavaScriptCore/yarr/RegexJIT.cpp:295
&gt; +    struct OffsetHashTraits : GenericHashTraits&lt;int&gt; {
&gt; +        static const bool emptyValueIsZero = false;
&gt; +        static const bool needsDestruction = false;
&gt; +        static int emptyValue() { return -1; }
&gt; +    };

As discussed in person, I think it would be better to store the stack offset as a uint32_t and use UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt; from HashTraits.h instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315884</commentid>
    <comment_count>3</comment_count>
      <attachid>75323</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-12-01 14:41:01 -0800</bug_when>
    <thetext>Created attachment 75323
Updated Proposed Patch

This patch addresses the concern raised by the prior patch and now uses UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;.
Fixed the jump to next instruction in the success case.  Fixed a bug in the updated fast/regex/pcre tests.
Added ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316230</commentid>
    <comment_count>4</comment_count>
      <attachid>75323</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-12-02 10:28:53 -0800</bug_when>
    <thetext>Comment on attachment 75323
Updated Proposed Patch

working on a bug.  Will post an updated patch when available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316400</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-02 13:38:41 -0800</bug_when>
    <thetext>Hi Michael, 

The patch generally looks fine, few small issues.

(1) You use the variable name &apos;reGen&apos;, but our style guidelines do not allow abbreviations.  I suggest renaming to &apos;generator&apos;.

(2) You add a couple of methods with names prefixed &apos;have&apos; to BacktrackDestination – throughout JSC we tend to use &apos;has&apos; for these kinds of method names.  Though objectively equivalent to each other, for consistency I think we should stick to &apos;has&apos;.

(3) You add a method used() to DataLabelPtr – in the long run, I&apos;m not sure this is safe, so I&apos;d rather not take this step at this point.  From a security perspective, we&apos;ll want to harder the assembler against integer overflow.  I think logically in the assembler we want all 32bit values to be valid (otherwise converting an offset to a label would require a guard).  So we should not be stealing bits from these offsets.  I&apos;m aware that in label we already do so, but I think we should consider that a bug to be fixed, rather than a design pattern to copy.  (On the other hand I&apos;m fine with exposing the isSet() method from the assembler).  Rather than stealing bits from DataLabelPtr, there are bits you could steal from within BacktrackDestination – BacktrackType doesn&apos;t need to be using a full 32-bits, you could steal from here, and this would reduce the size of the patch.

(4) Also in BacktrackDestination - setDataLabelPtr.  I think this method could do with a slightly more descriptive name, that describes more why you are calling it rather than what it does.  The DataLabelPtr is recording a store instruction that we be be repatched to write the address to be jumped to to resume this disjunction when matching, right?  Errk, not sure how succinct and descriptive a name we can come up with for this, I think setBacktrackStoreLocation would be an improvement, feel free to do better.

(5) Finally, in these cases the extra braces around the else statements should be removed.

 996                 } else {
 997                     m_backtrack.setBacktrackJumpList(&amp;jumpsToNext);
 998                 }
 999             } else {
 1000                 nextBacktrackFallThrough = false;
 1001             }

1504                 } else if (state.isLastAlternative()) {
 1505                     propogateBacktrack = true;
1506                 }

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316470</commentid>
    <comment_count>6</comment_count>
      <attachid>75425</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-12-02 15:48:49 -0800</bug_when>
    <thetext>Created attachment 75425
Updated patch addressing reviewers concerns and fixing a bug.

Fixed a bug where non fixed sized paren backtrack handling was going to the outside of the paren code instead of the inside the paren code and a related issue were some nested paren handling wasn&apos;t saving the right backtrack address on the stack.  Added test cases for this fix.

Addressed the concerns raised from the prior patch.  For point 3, changed the dataLabelPtr.isUsed() to .isSet(), which is more in keeping with the logic. For point 4, changed BacktrackDestination::setDataLabelPtr to setBacktrackDataLabel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316516</commentid>
    <comment_count>7</comment_count>
      <attachid>75425</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-02 16:52:21 -0800</bug_when>
    <thetext>Comment on attachment 75425
Updated patch addressing reviewers concerns and fixing a bug.

Looks great Michael.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316676</commentid>
    <comment_count>8</comment_count>
      <attachid>75425</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-02 22:18:28 -0800</bug_when>
    <thetext>Comment on attachment 75425
Updated patch addressing reviewers concerns and fixing a bug.

Rejecting patch 75425 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=abarth-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 75425]&quot; exit_code: 2
Last 500 characters of output:
et -15 lines).
patching file JavaScriptCore/yarr/RegexPattern.h
Hunk #5 succeeded at 166 with fuzz 2.
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file LayoutTests/fast/regex/parentheses-expected.txt
patching file LayoutTests/fast/regex/parentheses.html
patching file LayoutTests/fast/regex/script-tests/parentheses.js

Failed to run &quot;[u&apos;/Users/abarth/git/webkit-queue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Gavin Barraclough&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/6804018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316873</commentid>
    <comment_count>9</comment_count>
      <attachid>75507</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2010-12-03 10:18:59 -0800</bug_when>
    <thetext>Created attachment 75507
Patch with updates for latest top of trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317071</commentid>
    <comment_count>10</comment_count>
      <attachid>75507</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-03 14:48:40 -0800</bug_when>
    <thetext>Comment on attachment 75507
Patch with updates for latest top of trunk.

Clearing flags on attachment: 75507

Committed r73307: &lt;http://trac.webkit.org/changeset/73307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317072</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-03 14:48:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75232</attachid>
            <date>2010-11-30 17:03:51 -0800</date>
            <delta_ts>2010-12-01 14:41:01 -0800</delta_ts>
            <desc>Patch to remove most paren related branches to branches</desc>
            <filename>anti-pasta.patch</filename>
            <type>text/plain</type>
            <size>83182</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzI5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDQ2LDYgKzI0NDYsNyBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAxNDlDMjc3MTA4OTAyQUZFMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJKYXZhU2NyaXB0Q29yZSIgKi87CiAJCQljb21wYXRp
YmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmds
aXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAo
CiAJCQkJRW5nbGlzaCwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDcyOTUxKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAsNiArMjQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1
cm4gbV91c2VkOyB9CisgICAgICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1f
b2Zmc2V0ICE9IC0xKTsgfQogICAgICAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVl
OyB9CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lvbiA3
Mjk1MSkKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMsNiArNTUzLDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAg
ICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgYm9vbCBp
c1NldCgpIGNvbnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KICAgICAgICAgdm9pZCB1
c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wRHN0KGlu
dCBvZmZzZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDcyOTUxKQorKysgSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDYg
KzI0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBpc1Vz
ZWQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzVXNlZCgpOyB9CisgICAgICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsLmlzU2V0KCk7IH0KICAgICAgICAgdm9pZCB1c2Vk
KCkgeyBtX2xhYmVsLnVzZWQoKTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcERzdCBtX2xh
YmVsOwpAQCAtMjY0LDYgKzI2NSw5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICBib29sIGlzVXNlZCgpIHsgcmV0dXJuIG1fbGFiZWwuaXNVc2VkKCk7
IH0KKyAgICAgICAgdm9pZCB1c2VkKCkgeyBtX2xhYmVsLnVzZWQoKTsgfQorICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICBKbXBEc3QgbV9sYWJlbDsKICAgICB9OwpAQCAtNDEwLDYgKzQx
NCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gIW1fanVtcHMuc2l6ZSgpOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9qdW1wcy5jbGVhcigpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBjb25z
dCBKdW1wVmVjdG9yJiBqdW1wcygpIHsgcmV0dXJuIG1fanVtcHM7IH0KIAogICAgIHByaXZhdGU6
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDcyOTUxKQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
ICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9CiAgICAgICAgIHZvaWQg
dXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcERzdChp
bnQgb2Zmc2V0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
cmV2aXNpb24gNzI5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw2ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
IAogICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQogICAgICAg
ICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBK
bXBEc3QoaW50IG9mZnNldCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNw
cAkocmV2aXNpb24gNzI5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTksNyArNDU5LDcgQEAgcHVibGljOgogCiAgICAgICAg
IFBhdHRlcm5EaXNqdW5jdGlvbiogcGFyZW50aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBQYXR0ZXJu
RGlzanVuY3Rpb24obV9hbHRlcm5hdGl2ZSk7CiAgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0
aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0gICAgICAgIG1fYWx0ZXJuYXRp
dmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuLCBzdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGNhcHR1
cmUpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0o
UGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1YnBhdHRlcm5JZCwgcGFy
ZW50aGVzZXNEaXNqdW5jdGlvbiwgY2FwdHVyZSwgZmFsc2UpKTsKICAgICAgICAgbV9hbHRlcm5h
dGl2ZSA9IHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CiAgICAg
fQogCkBAIC00NjcsNyArNDY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgUGF0dGVybkRp
c2p1bmN0aW9uKiBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uID0gbmV3IFBhdHRlcm5EaXNqdW5jdGlv
bihtX2FsdGVybmF0aXZlKTsKICAgICAgICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVu
ZChwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKTsKLSAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJt
cy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0
aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDEsIHBhcmVudGhlc2VzRGlzanVuY3Rp
b24sIGludmVydCkpOworICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0
ZXJuVGVybShQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24sIG1fcGF0dGVy
bi5tX251bVN1YnBhdHRlcm5zICsgMSwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgZmFsc2UsIGlu
dmVydCkpOwogICAgICAgICBtX2FsdGVybmF0aXZlID0gcGFyZW50aGVzZXNEaXNqdW5jdGlvbi0+
YWRkTmV3QWx0ZXJuYXRpdmUoKTsKICAgICAgICAgbV9pbnZlcnRQYXJlbnRoZXRpY2FsQXNzZXJ0
aW9uID0gaW52ZXJ0OwogICAgIH0KQEAgLTUyMCw3ICs1MjAsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBQYXR0ZXJuVGVybSYgdGVybSA9IGN1cnJlbnRBbHRlcm5hdGl2ZS0+bGFzdFRlcm0oKTsK
ICAgICAgICAgICAgIEFTU0VSVCgodGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGVzZXNTdWJwYXR0ZXJuKSB8fCAodGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbikpOwogCi0gICAgICAgICAgICBpZiAoKHRlcm0udHlwZSA9PSBQYXR0
ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybikgJiYgdGVybS5pbnZlcnRPckNhcHR1
cmUgJiYgKHN1YnBhdHRlcm5JZCA9PSB0ZXJtLnN1YnBhdHRlcm5JZCkpIHsKKyAgICAgICAgICAg
IGlmICgodGVybS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJu
KSAmJiB0ZXJtLmNhcHR1cmUoKSAmJiAoc3VicGF0dGVybklkID09IHRlcm0uc3VicGF0dGVybklk
KSkgewogICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRl
cm5UZXJtOjpGb3J3YXJkUmVmZXJlbmNlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KQEAgLTg0NCw3ICs4NDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbjoKLSAgICAgICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1
cmUpCisgICAgICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBh
cmVudGhlc2VzU3VicGF0dGVybjoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gNzI5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4
SW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBpbnQgYmVnaW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLnNpemUoKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5
dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luLCBzdWJw
YXR0ZXJuSWQsIGNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3Vi
cGF0dGVybk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3Np
dGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpBbHRlcm5hdGl2
ZUJlZ2luKCkpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBhbHRlcm5hdGl2ZUZyYW1l
TG9jYXRpb247CkBAIC0xNTM3LDcgKzE1MzcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBp
bnQgYmVnaW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKTsKIAotICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBl
UGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJl
LCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBl
bmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJl
Z2luLCBzdWJwYXR0ZXJuSWQsIGNhcHR1cmUsIGZhbHNlLCBpbnB1dFBvc2l0aW9uKSk7CiAgICAg
ICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6
ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OkFsdGVybmF0aXZlQmVnaW4oKSk7CiAg
ICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMu
c2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbjsKQEAg
LTE1NTQsNyArMTU1NCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBpbnQgYmVnaW5UZXJtID0gbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuT25jZUJlZ2luLCBzdWJwYXR0ZXJuSWQsIGNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6
VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJl
LCBmYWxzZSwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBm
cmFtZUxvY2F0aW9uOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5
dGVUZXJtOjpBbHRlcm5hdGl2ZUJlZ2luKCkpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24g
PSBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb247CkBAIC0xNTY3LDcgKzE1NjcsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBpbnQgYmVnaW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
LnNpemUoKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVU
ZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luLCBzdWJwYXR0ZXJu
SWQsIGludmVydCwgMCkpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5k
KEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luLCBzdWJw
YXR0ZXJuSWQsIGZhbHNlLCBpbnZlcnQsIDApKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9u
ID0gZnJhbWVMb2NhdGlvbjsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVu
ZChCeXRlVGVybTo6QWx0ZXJuYXRpdmVCZWdpbigpKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0
aW9uID0gYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uOwpAQCAtMTU4NCwxMCArMTU4NCwxMCBAQCBw
dWJsaWM6CiAKICAgICAgICAgQVNTRVJUKG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLnR5cGUgPT0gQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4pOwog
Ci0gICAgICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W2JlZ2luVGVybV0uaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICBib29sIGludmVydCA9IG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmludmVydCgpOwogICAgICAgICB1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9t
LnN1YnBhdHRlcm5JZDsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5k
KEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCwgc3VicGF0
dGVybklkLCBpbnZlcnRPckNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhl
dGljYWxBc3NlcnRpb25FbmQsIHN1YnBhdHRlcm5JZCwgZmFsc2UsIGludmVydCwgaW5wdXRQb3Np
dGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9t
LnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVy
bSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1d
LmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwpAQCAtMTY3OSw3ICsxNjc5LDcgQEAgcHVi
bGljOgogCiAgICAgICAgIEJ5dGVUZXJtJiBwYXJlbnRoZXNlc0JlZ2luID0gbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2JlZ2luVGVybV07CiAKLSAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUg
PSBwYXJlbnRoZXNlc0JlZ2luLmludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgYm9vbCBjYXB0dXJl
ID0gcGFyZW50aGVzZXNCZWdpbi5jYXB0dXJlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRl
cm5JZCA9IHBhcmVudGhlc2VzQmVnaW4uYXRvbS5zdWJwYXR0ZXJuSWQ7CiAKICAgICAgICAgdW5z
aWduZWQgbnVtU3VicGF0dGVybnMgPSBsYXN0U3VicGF0dGVybklkIC0gc3VicGF0dGVybklkICsg
MTsKQEAgLTE2OTMsNyArMTY5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zLnNocmluayhiZWdpblRlcm0pOwogCiAgICAgICAgIG1fYWxsUGFyZW50aGVzZXNJ
bmZvLmFwcGVuZChwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKTsKLSAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3Vi
cGF0dGVybiwgc3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBpbnZlcnRPckNh
cHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
LmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3Vi
cGF0dGVybklkLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9u
KSk7CiAKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5x
dWFudGl0eUNvdW50ID0gcXVhbnRpdHlDb3VudDsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CkBAIC0x
NzA4LDEwICsxNzA4LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBBU1NFUlQobV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2JlZ2luVGVybV0udHlwZSA9PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2Vz
U3VicGF0dGVybk9uY2VCZWdpbik7CiAKLSAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUgPSBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5pbnZlcnRPckNhcHR1cmU7CisgICAg
ICAgIGJvb2wgY2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmNh
cHR1cmUoKTsKICAgICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5zdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhl
c2VzU3VicGF0dGVybk9uY2VFbmQsIHN1YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1
dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0
ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kLCBzdWJwYXR0
ZXJuSWQsIGNhcHR1cmUsIGZhbHNlLCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRl
cm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJt
XS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9j
YXRpb247CkBAIC0xNzMwLDEwICsxNzMwLDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBBU1NFUlQo
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0udHlwZSA9PSBCeXRlVGVybTo6VHlw
ZVBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW4pOwogCi0gICAgICAgIGJvb2wgaW52
ZXJ0T3JDYXB0dXJlID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uaW52ZXJ0
T3JDYXB0dXJlOworICAgICAgICBib29sIGNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXNbYmVnaW5UZXJtXS5jYXB0dXJlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20uc3VicGF0dGVybklkOwog
Ci0gICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRl
cm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZCwgc3VicGF0dGVybklkLCBp
bnZlcnRPckNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0
dGVyblRlcm1pbmFsRW5kLCBzdWJwYXR0ZXJuSWQsIGNhcHR1cmUsIGZhbHNlLCBpbnB1dFBvc2l0
aW9uKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20u
cGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJt
IC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0u
ZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CkBAIC0xODE2LDcgKzE4MTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQ
YXR0ZXJuVGVybTo6VHlwZUFzc2VydGlvbldvcmRCb3VuZGFyeToKLSAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0aW9uV29yZEJvdW5kYXJ5KHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0ZXJtLmlucHV0
UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VydGlvbldvcmRCb3VuZGFyeSh0ZXJtLmludmVydCgpLCB0ZXJtLmlucHV0UG9zaXRp
b24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFy
YWN0ZXI6CkBAIC0xODI0LDcgKzE4MjQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUNoYXJhY3Rl
ckNsYXNzOgotICAgICAgICAgICAgICAgICAgICBhdG9tQ2hhcmFjdGVyQ2xhc3ModGVybS5jaGFy
YWN0ZXJDbGFzcywgdGVybS5pbnZlcnRPckNhcHR1cmUsIHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1
cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRp
dHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOworICAgICAgICAgICAgICAgICAgICBhdG9tQ2hh
cmFjdGVyQ2xhc3ModGVybS5jaGFyYWN0ZXJDbGFzcywgdGVybS5pbnZlcnQoKSwgdGVybS5pbnB1
dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIHRlcm0uZnJhbWVMb2NhdGlv
biwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJh
Y2tSZWZlcmVuY2U6CkBAIC0xODQ0LDE3ICsxODQ0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2
ZUZyYW1lTG9jYXRpb24gKz0gUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhl
c2VzT25jZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5w
dXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tl
ZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc09uY2VCZWdpbih0ZXJt
LnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVnYXRl
RW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJh
bWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF0b21QYXJlbnRoZXNlc09uY2VCZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRl
cm5JZCwgdGVybS5jYXB0dXJlKCksIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlv
bkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVGcmFt
ZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXREaXNqdW5jdGlvbih0ZXJt
LnBhcmVudGhlc2VzLmRpc2p1bmN0aW9uLCBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgZGlz
anVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF0
b21QYXJlbnRoZXNlc09uY2VFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxv
Y2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnBhcmVudGhlc2VzLmlzVGVybWluYWwpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0
ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1Rlcm1pbmFsQmVnaW4odGVybS5wYXJlbnRo
ZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCBkZWxlZ2F0ZUVuZElucHV0
T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRp
b24sIHRlcm0uZnJhbWVMb2NhdGlvbiArIFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9Q
YXJlbnRoZXNlc09uY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2Vz
VGVybWluYWxCZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJl
KCksIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291
bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5mcmFtZUxvY2F0aW9uICsgUmVnZXhTdGFja1Nw
YWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVu
dENvdW50QWxyZWFkeUNoZWNrZWQsIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZChkZWxlZ2F0
ZUVuZElucHV0T2Zmc2V0LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwg
dGVybS5xdWFudGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCA9IHRlcm0u
aW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJlZ2luKHRlcm0ucGFyZW50aGVz
ZXMuc3VicGF0dGVybklkLCB0ZXJtLmludmVydE9yQ2FwdHVyZSwgZGVsZWdhdGVFbmRJbnB1dE9m
ZnNldCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9u
LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5C
ZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCksIGRlbGVn
YXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0u
ZnJhbWVMb2NhdGlvbiwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rp
b24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNr
ZWQsIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVy
bkVuZCh0ZXJtLnBhcmVudGhlc2VzLmxhc3RTdWJwYXR0ZXJuSWQsIGRlbGVnYXRlRW5kSW5wdXRP
ZmZzZXQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50
aXR5VHlwZSwgdGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbi0+bV9jYWxsRnJhbWVTaXplKTsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTg2Nyw3ICsxODY3LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgPj0gKHVu
c2lnbmVkKXRlcm0uaW5wdXRQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGludCBwb3Np
dGl2ZUlucHV0T2Zmc2V0ID0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgLSB0ZXJtLmlucHV0
UG9zaXRpb247CiAKLSAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhldGljYWxBc3NlcnRp
b25CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5pbnZlcnRPckNhcHR1
cmUsIHRlcm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbih0ZXJtLnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5pbnZlcnQoKSwgdGVybS5mcmFtZUxvY2F0aW9uLCBh
bHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVu
Y3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNo
ZWNrZWQsIHBvc2l0aXZlSW5wdXRPZmZzZXQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBh
dG9tUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCgwLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0u
cXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCShyZXZpc2lv
biA3Mjk1MSkKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw2IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIFR5
cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kLAogICAgICAgICBUeXBlQ2hlY2tJbnB1dCwKICAg
ICB9IHR5cGU7Ci0gICAgYm9vbCBpbnZlcnRPckNhcHR1cmU7CiAgICAgdW5pb24gewogICAgICAg
ICBzdHJ1Y3QgewogICAgICAgICAgICAgdW5pb24gewpAQCAtMTE0LDEwICsxMTMsMTQgQEAgc3Ry
dWN0IEJ5dGVUZXJtIHsKICAgICAgICAgdW5zaWduZWQgY2hlY2tJbnB1dENvdW50OwogICAgIH07
CiAgICAgdW5zaWduZWQgZnJhbWVMb2NhdGlvbjsKKyAgICBib29sIG1fY2FwdHVyZSA6IDE7Cisg
ICAgYm9vbCBtX2ludmVydCA6IDE7CiAgICAgaW50IGlucHV0UG9zaXRpb247CiAKICAgICBCeXRl
VGVybShVQ2hhciBjaCwgaW50IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNp
Z25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAg
IDogZnJhbWVMb2NhdGlvbihmcmFtZUxvY2F0aW9uKQorICAgICAgICAsIG1fY2FwdHVyZShmYWxz
ZSkKKyAgICAgICAgLCBtX2ludmVydChmYWxzZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAocXVh
bnRpdHlUeXBlKSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllckZpeGVkQ291bnQ6CkBAIC0xMzks
NiArMTQyLDggQEAgc3RydWN0IEJ5dGVUZXJtIHsKIAogICAgIEJ5dGVUZXJtKFVDaGFyIGxvLCBV
Q2hhciBoaSwgaW50IGlucHV0UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBx
dWFudGl0eUNvdW50LCBRdWFudGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAgIDogZnJh
bWVMb2NhdGlvbihmcmFtZUxvY2F0aW9uKQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAg
ICAgICAgLCBtX2ludmVydChmYWxzZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAocXVhbnRpdHlU
eXBlKSB7CiAgICAgICAgIGNhc2UgUXVhbnRpZmllckZpeGVkQ291bnQ6CkBAIC0xNjEsNyArMTY2
LDggQEAgc3RydWN0IEJ5dGVUZXJtIHsKIAogICAgIEJ5dGVUZXJtKENoYXJhY3RlckNsYXNzKiBj
aGFyYWN0ZXJDbGFzcywgYm9vbCBpbnZlcnQsIGludCBpbnB1dFBvcykKICAgICAgICAgOiB0eXBl
KEJ5dGVUZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3MpCi0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJl
KGludmVydCkKKyAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQo
aW52ZXJ0KQogICAgIHsKICAgICAgICAgYXRvbS5jaGFyYWN0ZXJDbGFzcyA9IGNoYXJhY3RlckNs
YXNzOwogICAgICAgICBhdG9tLnF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJGaXhlZENvdW50OwpA
QCAtMTY5LDkgKzE3NSwxMCBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBpbnB1dFBvc2l0
aW9uID0gaW5wdXRQb3M7CiAgICAgfQogCi0gICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25l
ZCBzdWJwYXR0ZXJuSWQsIEJ5dGVEaXNqdW5jdGlvbiogcGFyZW50aGVzZXNJbmZvLCBib29sIGlu
dmVydE9yQ2FwdHVyZSwgaW50IGlucHV0UG9zKQorICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5z
aWduZWQgc3VicGF0dGVybklkLCBCeXRlRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzSW5mbywgYm9v
bCBjYXB0dXJlLCBpbnQgaW5wdXRQb3MpCiAgICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAs
IGludmVydE9yQ2FwdHVyZShpbnZlcnRPckNhcHR1cmUpCisgICAgICAgICwgbV9jYXB0dXJlKGNh
cHR1cmUpCisgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBhdG9tLnN1
YnBhdHRlcm5JZCA9IHN1YnBhdHRlcm5JZDsKICAgICAgICAgYXRvbS5wYXJlbnRoZXNlc0Rpc2p1
bmN0aW9uID0gcGFyZW50aGVzZXNJbmZvOwpAQCAtMTgyLDE1ICsxODksMTcgQEAgc3RydWN0IEJ5
dGVUZXJtIHsKICAgICAKICAgICBCeXRlVGVybShUeXBlIHR5cGUsIGJvb2wgaW52ZXJ0ID0gZmFs
c2UpCiAgICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZl
cnQpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAgICAgICAsIG1faW52ZXJ0KGludmVy
dCkKICAgICB7CiAgICAgICAgIGF0b20ucXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291
bnQ7CiAgICAgICAgIGF0b20ucXVhbnRpdHlDb3VudCA9IDE7CiAgICAgfQogCi0gICAgQnl0ZVRl
cm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGJvb2wgaW52ZXJ0T3JDYXB0dXJl
LCBpbnQgaW5wdXRQb3MpCisgICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0
ZXJuSWQsIGJvb2wgY2FwdHVyZSwgYm9vbCBpbnZlcnQsIGludCBpbnB1dFBvcykKICAgICAgICAg
OiB0eXBlKHR5cGUpCi0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGludmVydE9yQ2FwdHVyZSkK
KyAgICAgICAgLCBtX2NhcHR1cmUoY2FwdHVyZSkKKyAgICAgICAgLCBtX2ludmVydChpbnZlcnQp
CiAgICAgewogICAgICAgICBhdG9tLnN1YnBhdHRlcm5JZCA9IHN1YnBhdHRlcm5JZDsKICAgICAg
ICAgYXRvbS5xdWFudGl0eVR5cGUgPSBRdWFudGlmaWVyRml4ZWRDb3VudDsKQEAgLTIyOCw3ICsy
MzcsNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgIAogICAgIHN0YXRpYyBCeXRlVGVybSBCYWNr
UmVmZXJlbmNlKHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgaW50IGlucHV0UG9zKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJ5dGVUZXJtKFR5cGVCYWNrUmVmZXJlbmNlLCBzdWJwYXR0ZXJuSWQsIGZh
bHNlLCBpbnB1dFBvcyk7CisgICAgICAgIHJldHVybiBCeXRlVGVybShUeXBlQmFja1JlZmVyZW5j
ZSwgc3VicGF0dGVybklkLCBmYWxzZSwgZmFsc2UsIGlucHV0UG9zKTsKICAgICB9CiAKICAgICBz
dGF0aWMgQnl0ZVRlcm0gQm9keUFsdGVybmF0aXZlQmVnaW4oYm9vbCBvbmNlVGhyb3VnaCkKQEAg
LTI5NywxMiArMzA2LDEyIEBAIHN0cnVjdCBCeXRlVGVybSB7CiAKICAgICBib29sIGludmVydCgp
CiAgICAgewotICAgICAgICByZXR1cm4gaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICByZXR1cm4g
bV9pbnZlcnQ7CiAgICAgfQogCiAgICAgYm9vbCBjYXB0dXJlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBpbnZlcnRPckNhcHR1cmU7CisgICAgICAgIHJldHVybiBtX2NhcHR1cmU7CiAgICAgfQog
fTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHJldmlzaW9uIDcyOTUxKQorKysg
SmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2
ICsyODgsMzMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAg
ICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBz
aXplb2Yodm9pZCopKSk7CiAgICAgfQogCisgICAgc3RydWN0IE9mZnNldEhhc2hUcmFpdHMgOiBH
ZW5lcmljSGFzaFRyYWl0czxpbnQ+IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IGZhbHNlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3Ry
dWN0aW9uID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBpbnQgZW1wdHlWYWx1ZSgpIHsgcmV0dXJu
IC0xOyB9CisgICAgfTsKKyAgICAKKyAgICBzdHJ1Y3QgSW5kaXJlY3RKdW1wRW50cnkgeworICAg
ICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNrT2Zmc2V0KQorICAgICAgICAgICAg
OiBtX3N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0YWNrT2Zmc2V0LCBKdW1wIGp1bXApCisg
ICAgICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFkZEp1bXAoanVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
YWRkSnVtcChKdW1wIGp1bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVsSnVtcHMuYXBw
ZW5kKGp1bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IG1fc3RhY2tP
ZmZzZXQ7CisgICAgICAgIEp1bXBMaXN0IG1fcmVsSnVtcHM7CisgICAgfTsKKyAgICAgICAgCiAg
ICAgc3RydWN0IEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkIHsKICAgICAgICAgRGF0YUxhYmVs
UHRyIGRhdGFMYWJlbDsKICAgICAgICAgTGFiZWwgYmFja3RyYWNrTG9jYXRpb247CkBAIC0yOTks
MTYgKzMyNiw0NDMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQog
ICAgICAgICB9CiAgICAgfTsKIAorICAgIHN0cnVjdCBQYXJlbnRoZXNlc1RhaWw7CisgICAgc3Ry
dWN0IFRlcm1HZW5lcmF0aW9uU3RhdGU7CisgICAgCisgICAgc3RydWN0IEdlbmVyYXRpb25TdGF0
ZSB7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEluZGlyZWN0SnVtcEVudHJ5KiwgV1RG
OjpJbnRIYXNoPGludD4sIE9mZnNldEhhc2hUcmFpdHM+IEluZGlyZWN0SnVtcEhhc2hNYXA7Cisg
ICAgICAgIAorICAgICAgICBHZW5lcmF0aW9uU3RhdGUoKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSW5kaXJlY3RKdW1wRW50cnkoaW50MzJfdCBzdGFj
a09mZnNldCwgSnVtcCBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBJbmRpcmVjdEp1bXBI
YXNoTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2luZGlyZWN0SnVtcE1hcC5maW5kKHN0YWNrT2Zm
c2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX2luZGlyZWN0
SnVtcE1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBtX2luZGlyZWN0SnVtcE1hcC5hZGQoc3Rh
Y2tPZmZzZXQsIG5ldyBJbmRpcmVjdEp1bXBFbnRyeShzdGFja09mZnNldCwganVtcCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2Vjb25kLT5hZGRKdW1wKGp1
bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVu
dHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXBMaXN0IGp1bXBzKQorICAgICAgICB7CisgICAg
ICAgICAgICBKdW1wTGlzdDo6SnVtcFZlY3RvciBqdW1wVmVjdG9yID0ganVtcHMuanVtcHMoKTsK
KyAgICAgICAgICAgIHNpemVfdCBzaXplID0ganVtcFZlY3Rvci5zaXplKCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBhZGRJ
bmRpcmVjdEp1bXBFbnRyeShzdGFja09mZnNldCwganVtcFZlY3RvcltpXSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGp1bXBzLmVtcHR5KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgZW1pdEluZGlyZWN0SnVtcFRhYmxlKE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKEluZGlyZWN0SnVtcEhhc2hNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX2luZGlyZWN0SnVtcE1hcC5iZWdpbigpOyBpdGVyICE9IG1faW5kaXJlY3RKdW1wTWFw
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAgICBJbmRpcmVjdEp1bXBFbnRyeSogaW5k
SnVtcEVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgICAgIGluZEp1bXBFbnRyeS0+
bV9yZWxKdW1wcy5saW5rKG1hc20pOworICAgICAgICAgICAgICAgIG1hc20tPmp1bXAoQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgaW5kSnVtcEVudHJ5LT5tX3N0YWNrT2Zmc2V0KSk7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIGluZEp1bXBFbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUGFyZW50aGVzZXNUYWlsKiBhZGRQYXJlbnRoZXNlc1Rh
aWwoUGF0dGVyblRlcm0mIHRlcm0pCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmVudGhlc2Vz
VGFpbCogcGFyZW50aGVzZXNUYWlsID0gbmV3IFBhcmVudGhlc2VzVGFpbCh0ZXJtKTsKKyAgICAg
ICAgICAgIG1fcGFyZW5UYWlscy5hcHBlbmQocGFyZW50aGVzZXNUYWlsKTsKKyAgICAgICAgICAg
IG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbi5hcHBlbmQocGFyZW50aGVzZXNUYWlsKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHBhcmVudGhlc2VzVGFpbDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBlbWl0UGFyZW50aGVzZXNUYWlsKFJlZ2V4R2VuZXJhdG9y
KiByZUdlbikKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgdmVjdG9yU2l6ZSA9IG1f
cGFyZW5UYWlscy5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEVtaXQgaW4g
cmV2ZXJzZSBvcmRlciBzbyBwYXJlbnRUYWlsIE4gY2FuIGZhbGwgdGhyb3VnaCB0byBOLTEKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSB2ZWN0b3JTaXplOyBpbmRleCA+IDA7IC0t
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICBKdW1wTGlzdCBqdW1wc1RvTmV4dDsKKyAgICAgICAg
ICAgICAgICBtX3BhcmVuVGFpbHNbaW5kZXgtMV0uZ2V0KCktPmdlbmVyYXRlQ29kZShyZUdlbiwg
anVtcHNUb05leHQsIGluZGV4ID4gMSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMSkK
KyAgICAgICAgICAgICAgICAgICAganVtcHNUb05leHQubGlua1RvKHJlR2VuLT5sYWJlbCgpLCBy
ZUdlbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhZGRKdW1w
c1RvTmV4dEludGVyYXRpb24oanVtcHNUb05leHQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9wYXJlblRhaWxzLmNsZWFyKCk7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICAKKyAg
ICAgICAgdm9pZCBhZGRKdW1wVG9OZXh0SW50ZXJhdGlvbihKdW1wIGp1bXApCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fanVtcHNUb05leHRJbnRlcmF0aW9uLmFwcGVuZChqdW1wKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRKdW1wc1RvTmV4dEludGVyYXRpb24oSnVt
cExpc3QganVtcHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fanVtcHNUb05leHRJbnRlcmF0
aW9uLmFwcGVuZChqdW1wcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRk
RGF0YUxhYmVsVG9OZXh0SXRlcmF0aW9uKERhdGFMYWJlbFB0ciBkYXRhTGFiZWwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb24uYXBwZW5kKGRhdGFMYWJl
bCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgbGlua1RvTmV4dEl0ZXJhdGlv
bihMYWJlbCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9uZXh0SXRlcmF0aW9uID0g
bGFiZWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQobV9k
YXRhUHRyc1RvTmV4dEl0ZXJhdGlvbltpXSwgbV9uZXh0SXRlcmF0aW9uKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb24uY2xlYXIoKTsKKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlv
bi5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb25b
aV0tPnNldE5leHRJdGVyYXRpb24obV9uZXh0SXRlcmF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uLmNsZWFyKCk7ICAgICAgICAgICAgCisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtUb05leHRJdGVyYXRpb24oUmVnZXhHZW5lcmF0
b3IqIHJlR2VuKQorICAgICAgICB7CisgICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlv
bi5saW5rVG8obV9uZXh0SXRlcmF0aW9uLCByZUdlbik7CisgICAgICAgIH0gICAgICAgIAorICAg
ICAgICAKKyAgICAgICAgVmVjdG9yPEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkPiBtX2JhY2t0
cmFja1JlY29yZHM7CisgICAgICAgIEluZGlyZWN0SnVtcEhhc2hNYXAgbV9pbmRpcmVjdEp1bXBN
YXA7CisgICAgICAgIExhYmVsIG1fbmV4dEl0ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPE93blB0
cjxQYXJlbnRoZXNlc1RhaWw+ID4gbV9wYXJlblRhaWxzOworICAgICAgICBKdW1wTGlzdCBtX2p1
bXBzVG9OZXh0SW50ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPERhdGFMYWJlbFB0cj4gbV9kYXRh
UHRyc1RvTmV4dEl0ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPFBhcmVudGhlc2VzVGFpbCo+IG1f
cGFyZW5UYWlsc0Zvckl0ZXJhdGlvbjsKKyAgICB9OworCisgICAgc3RydWN0IEJhY2t0cmFja0Rl
c3RpbmF0aW9uIHsKKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgICAgIE5vQmFja3Ry
YWNrLAorICAgICAgICAgICAgQmFja3RyYWNrTGFiZWwsCisgICAgICAgICAgICBCYWNrdHJhY2tT
dGFja09mZnNldCwKKyAgICAgICAgICAgIEJhY2t0cmFja0p1bXBMaXN0LAorICAgICAgICAgICAg
QmFja3RyYWNrTGlua2VkCisgICAgICAgIH0gQmFja3RyYWNrVHlwZTsKKyAgICAgICAgCisgICAg
ICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkKKyAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBl
KE5vQmFja3RyYWNrKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAg
ICAgICAgICwgbV9zdWJEYXRhTGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3Ry
YWNrKDApCisgICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAg
ICAgICwgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKGludDMyX3Qgc3RhY2tPZmZzZXQp
IAorICAgICAgICAgICAgOiBtX2JhY2t0cmFja1R5cGUoQmFja3RyYWNrU3RhY2tPZmZzZXQpCisg
ICAgICAgICAgICAsIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCisgICAgICAg
ICAgICAsIG1fYmFja3RyYWNrVG9MYWJlbCgwKQorICAgICAgICAgICAgLCBtX3N1YkRhdGFMYWJl
bFB0cigwKQorICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKKyAgICAgICAgICAgICwg
bV9iYWNrdHJhY2tTb3VyY2VMYWJlbCgwKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJj
ZUp1bXBzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFja3Ry
YWNrRGVzdGluYXRpb24oTGFiZWwgbGFiZWwpIAorICAgICAgICAgICAgOiBtX2JhY2t0cmFja1R5
cGUoQmFja3RyYWNrTGFiZWwpCisgICAgICAgICAgICAsIG1fYmFja3RyYWNrTGFiZWwobGFiZWwp
CisgICAgICAgICAgICAsIG1fYmFja3RyYWNrVG9MYWJlbCgwKQorICAgICAgICAgICAgLCBtX3N1
YkRhdGFMYWJlbFB0cigwKQorICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKKyAgICAg
ICAgICAgICwgbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCgwKQorICAgICAgICAgICAgLCBtX2JhY2t0
cmFja1NvdXJjZUp1bXBzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrVHlwZSA9
IE5vQmFja3RyYWNrOworICAgICAgICAgICAgbV9kYXRhTGFiZWxQdHIgPSBEYXRhTGFiZWxQdHIo
KTsKKyAgICAgICAgICAgIG1fbmV4dEJhY2t0cmFjayA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgY2xlYXJEYXRhTGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2RhdGFMYWJlbFB0ciA9IERhdGFMYWJlbFB0cigpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIGhhdmVEZXN0aW5hdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAobV9iYWNrdHJhY2tUeXBlICE9IE5vQmFja3RyYWNrKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBpc1N0YWNrT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIGlzTGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNKdW1wTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0p1bXBMaXN0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBoYXZlRGF0YUxhYmVsKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fZGF0YUxhYmVsUHRyLmlzVXNlZCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGNvcHlUYXJnZXQoQmFja3RyYWNrRGVzdGluYXRpb24mIHJo
cywgYm9vbCBjb3B5RGF0YUxhYmVsID0gdHJ1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
YWNrdHJhY2tUeXBlID0gcmhzLm1fYmFja3RyYWNrVHlwZTsKKyAgICAgICAgICAgIGlmIChtX2Jh
Y2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpCisgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tTdGFja09mZnNldCA9IHJocy5tX2JhY2t0cmFja1N0YWNrT2Zmc2V0OworICAgICAg
ICAgICAgZWxzZSBpZiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0xhYmVsKQorICAgICAg
ICAgICAgICAgIG1fYmFja3RyYWNrTGFiZWwgPSByaHMubV9iYWNrdHJhY2tMYWJlbDsKKyAgICAg
ICAgICAgIGlmIChjb3B5RGF0YUxhYmVsKQorICAgICAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRy
ID0gcmhzLm1fZGF0YUxhYmVsUHRyOworICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1w
cyA9IHJocy5tX2JhY2t0cmFja1NvdXJjZUp1bXBzOworICAgICAgICAgICAgbV9iYWNrdHJhY2tT
b3VyY2VMYWJlbCA9IHJocy5tX2JhY2t0cmFja1NvdXJjZUxhYmVsOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIGNvcHlUbyhCYWNrdHJhY2tEZXN0aW5hdGlvbiYgbGhzKQorICAg
ICAgICB7CisgICAgICAgICAgICBsaHMubV9iYWNrdHJhY2tUeXBlID0gbV9iYWNrdHJhY2tUeXBl
OworICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tTdGFja09mZnNl
dCkKKyAgICAgICAgICAgICAgICBsaHMubV9iYWNrdHJhY2tTdGFja09mZnNldCA9IG1fYmFja3Ry
YWNrU3RhY2tPZmZzZXQ7CisgICAgICAgICAgICBlbHNlIGlmIChtX2JhY2t0cmFja1R5cGUgPT0g
QmFja3RyYWNrTGFiZWwpCisgICAgICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrTGFiZWwgPSBt
X2JhY2t0cmFja0xhYmVsOworICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrU291cmNlSnVtcHMg
PSBtX2JhY2t0cmFja1NvdXJjZUp1bXBzOworICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrU291
cmNlTGFiZWwgPSBtX2JhY2t0cmFja1NvdXJjZUxhYmVsOworICAgICAgICAgICAgbGhzLm1fZGF0
YUxhYmVsUHRyID0gbV9kYXRhTGFiZWxQdHI7CisgICAgICAgICAgICBsaHMubV9iYWNrVHJhY2tK
dW1wcyA9IG1fYmFja1RyYWNrSnVtcHM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgYWRkQmFja3RyYWNrSnVtcChKdW1wIGp1bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
YmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
ZXRTdGFja09mZnNldChpbnQzMl90IHN0YWNrT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2JhY2t0cmFja1R5cGUgPSBCYWNrdHJhY2tTdGFja09mZnNldDsKKyAgICAgICAgICAgIG1f
YmFja3RyYWNrU3RhY2tPZmZzZXQgPSBzdGFja09mZnNldDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBzZXRMYWJlbChMYWJlbCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9iYWNrdHJhY2tUeXBlID0gQmFja3RyYWNrTGFiZWw7CisgICAgICAgICAgICBtX2JhY2t0
cmFja0xhYmVsID0gbGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0
TmV4dEJhY2t0cmFja0xhYmVsKExhYmVsIGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9uZXh0QmFja3RyYWNrKQorICAgICAgICAgICAgICAgIG1fbmV4dEJhY2t0cmFjay0+c2V0
TGFiZWwobGFiZWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldEJhY2t0
cmFja1RvTGFiZWwoTGFiZWwqIGJhY2t0cmFja1RvTGFiZWwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fYmFja3RyYWNrVG9MYWJlbCA9IGJhY2t0cmFja1RvTGFiZWw7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFja3RyYWNrSnVtcExpc3QoSnVtcExpc3QqIGp1bXBM
aXN0KQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFja1R5cGUgPSBCYWNrdHJhY2tK
dW1wTGlzdDsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMgPSBqdW1wTGlzdDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tTb3VyY2VMYWJl
bChMYWJlbCogYmFja3RyYWNrU291cmNlTGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
YmFja3RyYWNrU291cmNlTGFiZWwgPSBiYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBzZXREYXRhTGFiZWwoRGF0YUxhYmVsUHRyIGRwKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV9zdWJEYXRhTGFiZWxQdHIpIHsKKyAgICAgICAgICAg
ICAgICAqbV9zdWJEYXRhTGFiZWxQdHIgPSBkcDsKKyAgICAgICAgICAgICAgICBtX3N1YkRhdGFM
YWJlbFB0ci0+dXNlZCgpOworICAgICAgICAgICAgICAgIG1fc3ViRGF0YUxhYmVsUHRyID0gMDsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9kYXRhTGFiZWxQdHIgPSBk
cDsKKyAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ci51c2VkKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0U3ViRGF0YUxhYmVsUHRyKERh
dGFMYWJlbFB0ciogc3ViRGF0YUxhYmVsUHRyKQorICAgICAgICB7CisgICAgICAgICAgICBtX3N1
YkRhdGFMYWJlbFB0ciA9IHN1YkRhdGFMYWJlbFB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgbGlua1RvTmV4dEJhY2t0cmFjayhCYWNrdHJhY2tEZXN0aW5hdGlvbiogbmV4dEJhY2t0cmFj
aykKKyAgICAgICAgeworICAgICAgICAgICAgbV9uZXh0QmFja3RyYWNrID0gbmV4dEJhY2t0cmFj
azsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
IGludDMyX3QgZ2V0U3RhY2tPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
bV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja1N0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBMYWJlbCBnZXRMYWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2JhY2t0
cmFja1R5cGUgPT0gQmFja3RyYWNrTGFiZWwpOworICAgICAgICAgICAgcmV0dXJuIG1fYmFja3Ry
YWNrTGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEp1bXBMaXN0JiBnZXRCYWNr
dHJhY2tKdW1wcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2tUcmFja0p1
bXBzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEYXRhTGFiZWxQdHImIGdldERhdGFM
YWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGFMYWJlbFB0cjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soTWFjcm9Bc3Nl
bWJsZXIqIG1hc20pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNrdHJh
Y2tTb3VyY2VMYWJlbC0+aXNTZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIG1hc20tPmp1bXAo
KS5saW5rVG8oKm1fYmFja3RyYWNrU291cmNlTGFiZWwsIG1hc20pOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5k
KG1hc20tPmp1bXAoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkK
KyAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IG1fYmFja3RyYWNrU3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTGFiZWwo
KSkKKyAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKCkubGlua1RvKG1fYmFja3RyYWNrTGFiZWws
IG1hc20pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYmFja1RyYWNrSnVt
cHMuYXBwZW5kKG1hc20tPmp1bXAoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQganVtcFRvQmFja3RyYWNrKFJlZ2V4R2VuZXJhdG9yKiByZUdlbiwgSnVtcCBqdW1wKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwtPmlz
U2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBqdW1wLmxpbmtUbygqbV9iYWNrdHJhY2tTb3Vy
Y2VMYWJlbCwgcmVHZW4pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKGp1bXApOworICAgICAgICAgICAgfSBl
bHNlIGlmIChpc1N0YWNrT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVz
c2lvblN0YXRlLmFkZEluZGlyZWN0SnVtcEVudHJ5KGdldFN0YWNrT2Zmc2V0KCksIGp1bXApOwor
ICAgICAgICAgICAgZWxzZSBpZiAoaXNMYWJlbCgpKQorICAgICAgICAgICAgICAgIGp1bXAubGlu
a1RvKGdldExhYmVsKCksIHJlR2VuKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBKdW1wTGlz
dCYganVtcHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNrdHJhY2tT
b3VyY2VMYWJlbC0+aXNTZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGp1bXBzLmxpbmtUbygq
bV9iYWNrdHJhY2tTb3VyY2VMYWJlbCwgcmVHZW4pOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKGp1bXBzKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNldCgpKQorICAgICAgICAgICAgICAg
IHJlR2VuLT5tX2V4cHJlc3Npb25TdGF0ZS5hZGRJbmRpcmVjdEp1bXBFbnRyeShnZXRTdGFja09m
ZnNldCgpLCBqdW1wcyk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0xhYmVsKCkpCisgICAgICAg
ICAgICAgICAganVtcHMubGlua1RvKGdldExhYmVsKCksIHJlR2VuKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1wcyk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIGxpbmtEYXRhTGFiZWxUb0hlcmVJZkV4aXN0cyhSZWdleEdl
bmVyYXRvciogcmVHZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoYXZlRGF0YUxhYmVs
KCkpIHsKKyAgICAgICAgICAgICAgICByZUdlbi0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJh
Y2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChnZXREYXRhTGFiZWwo
KSwgcmVHZW4tPmxhYmVsKCkpKTsKKyAgICAgICAgICAgICAgICBjbGVhckRhdGFMYWJlbCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICAg
ICAgICAgIAorICAgICAgICBib29sIHBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoUmVnZXhH
ZW5lcmF0b3IqIHJlR2VuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFj
a3RyYWNrU291cmNlTGFiZWwtPmlzU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZUdlbi0+
anVtcCgqbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzLT5hcHBlbmQocmVHZW4tPmp1
bXAoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGlzU3RhY2tPZmZzZXQoKSkgeworICAgICAgICAgICAgICAgIHJlR2Vu
LT5qdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGdldFN0YWNrT2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlzTGFiZWwoKSkgeworICAgICAgICAgICAgICAgIHJlR2VuLT5q
dW1wKGdldExhYmVsKCkpOworICAgICAgICAgICAgICAgIGlmIChoYXZlRGF0YUxhYmVsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNr
UmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoZ2V0RGF0YUxhYmVsKCks
IGdldExhYmVsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAg
ICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3Mo
UmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgTGFiZWwgaGVyZUxhYmVsID0gcmVHZW4tPmxhYmVsKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1RvTGFiZWwpIHsKKyAgICAgICAg
ICAgICAgICAqbV9iYWNrdHJhY2tUb0xhYmVsID0gaGVyZUxhYmVsOworICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNrVG9MYWJlbCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMubGluayhyZUdlbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChuZXh0SXRlcmF0aW9uKQorICAgICAgICAgICAgICAgIHJlR2VuLT5tX2V4
cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRlcmF0aW9uKGhlcmVMYWJlbCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChoYXZlRGF0YUxhYmVsKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZUdlbi0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5h
dGl2ZUJhY2t0cmFja1JlY29yZChnZXREYXRhTGFiZWwoKSwgaGVyZUxhYmVsKSk7CisgICAgICAg
ICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oUmVnZXhHZW5l
cmF0b3IqIHJlR2VuLCBMYWJlbCBsYWJlbCwgYm9vbCBuZXh0SXRlcmF0aW9uID0gZmFsc2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMubGlua1RvKGxhYmVsLCByZUdl
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChuZXh0SXRlcmF0aW9uKQorICAgICAg
ICAgICAgICAgIHJlR2VuLT5tX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRlcmF0aW9uKGxh
YmVsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGhhdmVEYXRhTGFiZWwoKSkgewor
ICAgICAgICAgICAgICAgIHJlR2VuLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29y
ZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBsYWJl
bCkpOworICAgICAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQmFja3RyYWNrVHlwZSBt
X2JhY2t0cmFja1R5cGU7CisgICAgICAgIGludDMyX3QgbV9iYWNrdHJhY2tTdGFja09mZnNldDsK
KyAgICAgICAgTGFiZWwgbV9iYWNrdHJhY2tMYWJlbDsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1f
ZGF0YUxhYmVsUHRyOworICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tUb0xhYmVsOworICAgICAg
ICBEYXRhTGFiZWxQdHIqIG1fc3ViRGF0YUxhYmVsUHRyOworICAgICAgICBCYWNrdHJhY2tEZXN0
aW5hdGlvbiogbV9uZXh0QmFja3RyYWNrOworICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tTb3Vy
Y2VMYWJlbDsKKyAgICAgICAgSnVtcExpc3QqIG1fYmFja3RyYWNrU291cmNlSnVtcHM7CisgICAg
ICAgIEp1bXBMaXN0IG1fYmFja1RyYWNrSnVtcHM7CisgICAgfTsKKyAgICAgICAgCiAgICAgc3Ry
dWN0IFRlcm1HZW5lcmF0aW9uU3RhdGUgewogICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlKFBh
dHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb24sIHVuc2lnbmVkIGNoZWNrZWRUb3RhbCkKICAg
ICAgICAgICAgIDogZGlzanVuY3Rpb24oZGlzanVuY3Rpb24pCiAgICAgICAgICAgICAsIGNoZWNr
ZWRUb3RhbChjaGVja2VkVG90YWwpCisgICAgICAgICAgICAsIG1fbGlua2VkQmFja3RyYWNrKDAp
CiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmVzZXRBbHRlcm5hdGl2ZSgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzQmFja1RyYWNrR2VuZXJhdGVkID0gZmFsc2U7Cisg
ICAgICAgICAgICBtX2JhY2t0cmFjay5jbGVhcigpOwogICAgICAgICAgICAgYWx0ID0gMDsKICAg
ICAgICAgfQogICAgICAgICBib29sIGFsdGVybmF0aXZlVmFsaWQoKQpAQCAtMzIzLDcgKzc3Nywx
MSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XTsKICAg
ICAgICAgfQotCisgICAgICAgIGJvb2wgaXNMYXN0QWx0ZXJuYXRpdmUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKGFsdCArIDEpID09IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZl
cy5zaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRUZXJtKCkK
ICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZlVmFsaWQoKSk7CkBAIC0z
NzQsNTIgKzgzMiwxMDUgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZQogICAgICAgICAgICAgcmV0dXJuIHRlcm0oKS5pbnB1dFBvc2l0aW9uIC0gY2hlY2tlZFRvdGFs
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soSnVtcCBqdW1wLCBN
YWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgdm9pZCBjbGVhckJhY2t0cmFjaygpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChpc0JhY2tUcmFja0dlbmVyYXRlZCkKLSAgICAgICAgICAg
ICAgICBqdW1wLmxpbmtUbyhiYWNrdHJhY2tMYWJlbCwgbWFzbSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICAg
ICAgbV9iYWNrdHJhY2suY2xlYXIoKTsKKyAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0g
MDsKICAgICAgICAgfQotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhKdW1wTGlzdCYganVt
cHMsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICAKKyAgICAgICAgdm9pZCBqdW1wVG9C
YWNrdHJhY2soTWFjcm9Bc3NlbWJsZXIqIG1hc20pCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChpc0JhY2tUcmFja0dlbmVyYXRlZCkKLSAgICAgICAgICAgICAgICBqdW1wcy5saW5rVG8oYmFj
a3RyYWNrTGFiZWwsIG1hc20pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJh
Y2tUcmFja0p1bXBzLmFwcGVuZChqdW1wcyk7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1w
VG9CYWNrdHJhY2sobWFzbSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQganVt
cFRvQmFja3RyYWNrKFJlZ2V4R2VuZXJhdG9yKiByZUdlbiwgSnVtcCBqdW1wKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2socmVHZW4sIGp1bXApOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5lcmF0b3Iq
IHJlR2VuLCBKdW1wTGlzdCYganVtcHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3Ry
YWNrLmp1bXBUb0JhY2t0cmFjayhyZUdlbiwganVtcHMpOwogICAgICAgICB9Ci0gICAgICAgIGJv
b2wgcGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgcGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhSZWdleEdl
bmVyYXRvciogcmVHZW4pCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0JhY2tUcmFja0dl
bmVyYXRlZCkgewotICAgICAgICAgICAgICAgIG1hc20tPmp1bXAoYmFja3RyYWNrTGFiZWwpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYmFja3RyYWNrLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlz
dHMocmVHZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGxpbmtEYXRhTGFi
ZWxUb0JhY2t0cmFja0lmRXhpc3RzKFJlZ2V4R2VuZXJhdG9yKiByZUdlbikKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKChtX2JhY2t0cmFjay5pc0xhYmVsKCkpICYmIChtX2JhY2t0cmFjay5o
YXZlRGF0YUxhYmVsKCkpKSB7CisgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0
YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQo
bV9iYWNrdHJhY2suZ2V0RGF0YUxhYmVsKCksIG1fYmFja3RyYWNrLmdldExhYmVsKCkpKTsKKyAg
ICAgICAgICAgICAgICBtX2JhY2t0cmFjay5jbGVhckRhdGFMYWJlbCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgCisKICAgICAgICAg
dm9pZCBhZGRCYWNrdHJhY2tKdW1wKEp1bXAganVtcCkKICAgICAgICAgewotICAgICAgICAgICAg
YmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICAgICAgbV9iYWNrdHJhY2suYWRk
QmFja3RyYWNrSnVtcChqdW1wKTsKICAgICAgICAgfQotICAgICAgICB2b2lkIHNldEJhY2t0cmFj
a0dlbmVyYXRlZChMYWJlbCBsYWJlbCkKKworICAgICAgICB2b2lkIHNldERhdGFMYWJlbFB0cihE
YXRhTGFiZWxQdHIgZHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzQmFja1RyYWNrR2VuZXJh
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJhY2t0cmFja0xhYmVsID0gbGFiZWw7CisgICAgICAg
ICAgICBtX2JhY2t0cmFjay5zZXREYXRhTGFiZWwoZHApOwogICAgICAgICB9Ci0gICAgICAgIHZv
aWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyhNYWNyb0Fzc2VtYmxlciogbWFzbSkKKworICAg
ICAgICB2b2lkIHNldEJhY2tUcmFja1N0YWNrT2Zmc2V0KGludDMyX3Qgc3RhY2tPZmZzZXQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlzQmFja1RyYWNrR2VuZXJhdGVkID0gZmFsc2U7Ci0gICAg
ICAgICAgICBiYWNrVHJhY2tKdW1wcy5saW5rKG1hc20pOworICAgICAgICAgICAgbV9iYWNrdHJh
Y2suc2V0U3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQg
bGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKExhYmVsIGxhYmVsLCBNYWNyb0Fzc2VtYmxlciog
bWFzbSkKKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFja3RyYWNrTGFiZWwoTGFiZWwgbGFi
ZWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzQmFja1RyYWNrR2VuZXJhdGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBiYWNrVHJhY2tKdW1wcy5saW5rVG8obGFiZWwsIG1hc20pOworICAgICAg
ICAgICAgbV9iYWNrdHJhY2suc2V0TGFiZWwobGFiZWwpOwogICAgICAgICB9Ci0gICAgICAgIHZv
aWQgcHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbShUZXJtR2VuZXJhdGlvblN0YXRlJiBuZXN0ZWRQ
YXJlbnRoZXNlc1N0YXRlLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKworICAgICAgICB2b2lkIGxp
bmtBbHRlcm5hdGl2ZUJhY2t0cmFja3MoUmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBib29sIG5leHRJ
dGVyYXRpb24gPSBmYWxzZSkKICAgICAgICAgewotICAgICAgICAgICAganVtcFRvQmFja3RyYWNr
KG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuYmFja1RyYWNrSnVtcHMsIG1hc20pOwotICAgICAgICAg
ICAgaWYgKG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuaXNCYWNrVHJhY2tHZW5lcmF0ZWQpCi0gICAg
ICAgICAgICAgICAgc2V0QmFja3RyYWNrR2VuZXJhdGVkKG5lc3RlZFBhcmVudGhlc2VzU3RhdGUu
YmFja3RyYWNrTGFiZWwpOworICAgICAgICAgICAgbV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZl
QmFja3RyYWNrcyhyZUdlbiwgbmV4dEl0ZXJhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3NUbyhSZWdleEdlbmVyYXRvciogcmVHZW4sIExh
YmVsIGxhYmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKHJlR2VuLCBsYWJl
bCwgbmV4dEl0ZXJhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEJhY2t0cmFj
a0xpbmsoQmFja3RyYWNrRGVzdGluYXRpb24qIGxpbmtlZEJhY2t0cmFjaykKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9saW5rZWRCYWNrdHJhY2sgPSBsaW5rZWRCYWNrdHJhY2s7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY2hhaW5CYWNrdHJhY2tzKEJhY2t0cmFja0Rlc3Rp
bmF0aW9uKiBmb2xsb3dvbkJhY2t0cmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
bGlua2VkQmFja3RyYWNrKQorICAgICAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrLT5saW5r
VG9OZXh0QmFja3RyYWNrKGZvbGxvd29uQmFja3RyYWNrKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBjaGFpbkJhY2t0cmFja0p1bXBzKEp1bXBMaXN0KiBqdW1wTGlzdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGlua2VkQmFja3RyYWNrICYmICEobV9saW5rZWRC
YWNrdHJhY2stPmhhdmVEZXN0aW5hdGlvbigpKSkKKyAgICAgICAgICAgICAgICBtX2xpbmtlZEJh
Y2t0cmFjay0+c2V0QmFja3RyYWNrSnVtcExpc3QoanVtcExpc3QpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgZ2V0QmFja3RyYWNrRGVzdGluYXRp
b24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2s7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHByb3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20oUmVnZXhHZW5lcmF0
b3IqIHJlR2VuLCBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgYmFja3RyYWNrLCBib29sIGRvSnVtcCA9
IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkb0p1bXApCisgICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2suanVtcFRvQmFja3RyYWNrKHJlR2VuLCBiYWNrdHJhY2suZ2V0QmFja3Ry
YWNrSnVtcHMoKSk7CisgICAgICAgICAgICBpZiAoYmFja3RyYWNrLmhhdmVEZXN0aW5hdGlvbigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrLmhhdmVEYXRhTGFiZWwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0YXRlLmFkZERhdGFMYWJlbFRv
TmV4dEl0ZXJhdGlvbihtX2JhY2t0cmFjay5nZXREYXRhTGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suY29weVRhcmdldChiYWNrdHJhY2ssIGRv
SnVtcCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBQYXR0ZXJuRGlzanVu
Y3Rpb24qIGRpc2p1bmN0aW9uOwpAQCAtNDI3LDExICs5MzgsMTE3IEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25l
ZCBhbHQ7CiAgICAgICAgIHVuc2lnbmVkIHQ7Ci0gICAgICAgIEp1bXBMaXN0IGJhY2tUcmFja0p1
bXBzOwotICAgICAgICBMYWJlbCBiYWNrdHJhY2tMYWJlbDsKLSAgICAgICAgYm9vbCBpc0JhY2tU
cmFja0dlbmVyYXRlZDsKKyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9iYWNrdHJhY2s7
CisgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBtX2xpbmtlZEJhY2t0cmFjazsKKyAgICAg
ICAgCiAgICAgfTsKIAorICAgIHN0cnVjdCBQYXJlbnRoZXNlc1RhaWwgeworICAgICAgICBQYXJl
bnRoZXNlc1RhaWwoUGF0dGVyblRlcm0mIHRlcm0pCisgICAgICAgICAgICA6IG1fdGVybSh0ZXJt
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJvY2Vzc0Jh
Y2t0cmFja3MoUmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0
ZSwgVGVybUdlbmVyYXRpb25TdGF0ZSYgcGFyZW50aGVzZXNTdGF0ZSwgTGFiZWwgbm9uR3JlZWR5
VHJ5UGFyZW50aGVzZXMsIExhYmVsIGZhbGxUaHJvdWdoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX25vbkdyZWVkeVRyeVBhcmVudGhlc2VzID0gbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7Cisg
ICAgICAgICAgICBtX2ZhbGxUaHJvdWdoID0gZmFsbFRocm91Z2g7CisKKyAgICAgICAgICAgIHBh
cmVudGhlc2VzU3RhdGUuZ2V0QmFja3RyYWNrRGVzdGluYXRpb24oKS5jb3B5VG8obV9wYXJlbkJh
Y2t0cmFjayk7CisgICAgICAgICAgICBzdGF0ZS5jaGFpbkJhY2t0cmFja3MoJm1fYmFja3RyYWNr
KTsKKyAgICAgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uJiBzdGF0ZUJhY2t0cmFjayA9IHN0
YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCk7CisgICAgICAgICAgICBzdGF0ZUJhY2t0cmFj
ay5jb3B5VG8obV9iYWNrdHJhY2spOworICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0QmFj
a3RyYWNrVG9MYWJlbCgmbV9iYWNrdHJhY2tUb0xhYmVsKTsKKyAgICAgICAgICAgIHN0YXRlLnNl
dEJhY2t0cmFja0xpbmsoJm1fYmFja3RyYWNrKTsKKyAgICAgICAgICAgIHN0YXRlQmFja3RyYWNr
LnNldFN1YkRhdGFMYWJlbFB0cigmbV9wYXJlbkJhY2t0cmFjay5nZXREYXRhTGFiZWwoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZG9EaXJlY3RCYWNrdHJhY2sgPSBtX3BhcmVuQmFj
a3RyYWNrLmhhdmVEZXN0aW5hdGlvbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
KG1fdGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgfHwgKG1fdGVybS5xdWFu
dGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkpCisgICAgICAgICAgICAgICAgbV9kb0Rp
cmVjdEJhY2t0cmFjayA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAobV9kb0RpcmVjdEJhY2t0
cmFjaykKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9tKHJl
R2VuLCBtX3BhcmVuQmFja3RyYWNrLCBmYWxzZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRCYWNrdHJhY2tKdW1wTGlzdCgmbV9wYXR0QmFj
a3RyYWNrSnVtcHMpOworICAgICAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLnNldEJhY2t0cmFj
a1NvdXJjZUxhYmVsKCZtX2JhY2t0cmFja0Zyb21BZnRlclBhcmVucyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuY2hhaW5CYWNrdHJh
Y2tKdW1wcygmbV9wYXR0QmFja3RyYWNrSnVtcHMpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBzZXROZXh0SXRlcmF0aW9uKExhYmVsIG5leHRJdGVyYXRpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghbV9iYWNrdHJhY2tUb0xhYmVsLmlzU2V0KCkpCisgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2tUb0xhYmVsID0gbmV4dEl0ZXJhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZ2VuZXJhdGVDb2RlKFJlZ2V4R2VuZXJhdG9yKiByZUdlbiwgSnVtcExpc3QmIGp1bXBz
VG9OZXh0LCBib29sIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgUmVnaXN0ZXJJRCBpbmRleFRlbXBvcmFyeSA9IHJlZ1QwOworICAgICAgICAg
ICAgdW5zaWduZWQgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uID0gbV90ZXJtLmZyYW1lTG9jYXRp
b247CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9iYWNrdHJhY2suaGF2ZURlc3Rp
bmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUb0xhYmVsLmlzU2V0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suc2V0TGFiZWwobV9iYWNrdHJh
Y2tUb0xhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdo
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9iYWNrdHJhY2suc2V0QmFja3RyYWNrSnVtcExpc3QoJmp1bXBzVG9OZXh0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5leHRCYWNr
dHJhY2tGYWxsVGhyb3VnaCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBBIGZhaWx1cmUgQUZURVIgdGhlIHBhcmVucyBqdW1wcyBoZXJlIC0gQmFj
a3RyYWNrIHRvIHRoaXMgcGFyZW4KKyAgICAgICAgICAgIG1fcGFyZW5CYWNrdHJhY2subGlua0Rh
dGFMYWJlbFRvSGVyZUlmRXhpc3RzKHJlR2VuKTsKKworICAgICAgICAgICAgbV9iYWNrdHJhY2tG
cm9tQWZ0ZXJQYXJlbnMgPSByZUdlbi0+bGFiZWwoKTsKKworICAgICAgICAgICAgbV9wYXR0QmFj
a3RyYWNrSnVtcHMubGluayhyZUdlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICht
X3Rlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQg
d2l0aG91dCB0aGUgcGFyZW5zLgorICAgICAgICAgICAgICAgIHJlR2VuLT5sb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhyZUdlbiwgcmVHZW4tPmJyYW5jaDMyKEVx
dWFsLCBpbmRleFRlbXBvcmFyeSwgSW1tMzIoLTEpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG1fdGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkgeworICAgICAgICAg
ICAgICAgIC8vIElmIHRoaXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRo
IGFuZCB3aXRob3V0IHRoZSBwYXJlbnMuCisgICAgICAgICAgICAgICAgcmVHZW4tPmxvYWRGcm9t
RnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAg
ICAgICAgICAgcmVHZW4tPmJyYW5jaDMyKEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgSW1tMzIoLTEp
KS5saW5rVG8obV9ub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgcmVHZW4pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fZG9EaXJlY3RCYWNrdHJhY2spCisg
ICAgICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFjay5wbGFudEp1bXBUb0JhY2t0cmFja0lmRXhp
c3RzKHJlR2VuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQSBmYWlsdXJlIFdJVEhJ
TiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKKyAgICAgICAgICAgIG1fcGFyZW5CYWNrdHJhY2subGlu
a0FsdGVybmF0aXZlQmFja3RyYWNrcyhyZUdlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX3Rlcm0uY2FwdHVyZSgpKQorICAgICAgICAgICAgICAgIHJlR2VuLT5zdG9yZTMyKElt
bTMyKC0xKSwgQWRkcmVzcyhvdXRwdXQsIChtX3Rlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklk
IDw8IDEpICogc2l6ZW9mKGludCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAg
IHJlR2VuLT5zdG9yZVRvRnJhbWUoSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24p
OworICAgICAgICAgICAgICAgIHJlR2VuLT5qdW1wKCkubGlua1RvKG1fZmFsbFRocm91Z2gsIHJl
R2VuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFuZXh0QmFj
a3RyYWNrRmFsbFRocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLmp1bXBU
b0JhY2t0cmFjayhyZUdlbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9k
b0RpcmVjdEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXROZXh0QmFj
a3RyYWNrTGFiZWwobV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBQYXR0ZXJuVGVybSYgbV90ZXJtOworICAgICAgICBMYWJlbCBtX25vbkdy
ZWVkeVRyeVBhcmVudGhlc2VzOworICAgICAgICBMYWJlbCBtX2ZhbGxUaHJvdWdoOworICAgICAg
ICBMYWJlbCBtX2JhY2t0cmFja1RvTGFiZWw7CisgICAgICAgIExhYmVsIG1fYmFja3RyYWNrRnJv
bUFmdGVyUGFyZW5zOworICAgICAgICBKdW1wTGlzdCBtX3BhdHRCYWNrdHJhY2tKdW1wczsKKyAg
ICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9wYXJlbkJhY2t0cmFjazsKKyAgICAgICAgQmFj
a3RyYWNrRGVzdGluYXRpb24gbV9iYWNrdHJhY2s7CisgICAgICAgIGJvb2wgbV9kb0RpcmVjdEJh
Y2t0cmFjazsKKyAgICB9OworICAgIAorICAgIAogICAgIHZvaWQgZ2VuZXJhdGVBc3NlcnRpb25C
T0woVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBQYXR0ZXJuVGVy
bSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKQEAgLTQ0NSwxNSArMTA2MiwxNSBAQCBjbGFzcyBSZWdl
eEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgICAgIHJlYWRDaGFyYWN0
ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSAtIDEsIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRj
aENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNo
YXJhY3RlckNsYXNzKCkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAo
KSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAg
ICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2UgYWx0ZXJuYXRpdmVz
IGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24pCi0gICAgICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2gzMihOb3RFcXVhbCwgaW5k
ZXgsIEltbTMyKHN0YXRlLmNoZWNrZWRUb3RhbCkpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBJbW0z
MihzdGF0ZS5jaGVja2VkVG90YWwpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ3MCwxNSAr
MTA4NywxNSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAg
ICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1f
cGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayh0aGlzKTsKIAogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodGVybS5pbnB1dFBvc2l0aW9uID09IHN0YXRlLmNo
ZWNrZWRUb3RhbCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sobm90QXRF
bmRPZklucHV0KCksIHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFj
ayh0aGlzLCBub3RBdEVuZE9mSW5wdXQoKSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxseSBz
aG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRo
aXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNTEyLDIwICsxMTI5LDIwIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgLy8gV2UgZmFsbCB0aHJvdWdoIHRvIGhlcmUg
aWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBub3QgYSB3b3JkY2hhci4KICAgICAgICAgSnVtcExp
c3Qgbm9uV29yZENoYXJUaGVuV29yZENoYXI7CiAgICAgICAgIEp1bXBMaXN0IG5vbldvcmRDaGFy
VGhlbk5vbldvcmRDaGFyOwotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAg
ICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29y
ZGNoYXIoc3RhdGUsIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5X
b3JkQ2hhcik7CiAgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29yZGNo
YXIoc3RhdGUsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Ob25Xb3Jk
Q2hhcik7CiAgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5hcHBlbmQoanVt
cCgpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sobm9uV29yZENo
YXJUaGVuTm9uV29yZENoYXIsIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2so
dGhpcywgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogCiAgICAgICAgIC8vIFdlIGp1bXAg
aGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIGEgd29yZGNoYXIuCiAgICAgICAgIG1hdGNo
RGVzdC5saW5rKHRoaXMpOwogICAgICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcjsK
ICAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuTm9uV29yZENoYXI7Ci0gICAgICAgIGlmICh0
ZXJtLmludmVydE9yQ2FwdHVyZSkgeworICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewogICAg
ICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzdGF0ZSwgd29yZENoYXJUaGVuTm9uV29y
ZENoYXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKICAgICAgICAgICAgIHdvcmRDaGFyVGhlbldv
cmRDaGFyLmFwcGVuZChqdW1wKCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTMzLDcgKzExNTAs
NyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAg
ICAvLyBUaGlzIGNhbiBmYWxsLXRob3VnaCEKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRlLmp1
bXBUb0JhY2t0cmFjayh3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgdGhpcyk7CisgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayh0aGlzLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAgICAgICAgIAog
ICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5saW5rKHRoaXMpOwogICAgICAgICB3b3Jk
Q2hhclRoZW5Ob25Xb3JkQ2hhci5saW5rKHRoaXMpOwpAQCAtNTQ3LDEwICsxMTY0LDEwIEBAIGNs
YXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgaWYgKG1fcGF0
dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewogICAgICAgICAgICAgcmVh
ZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
b3IzMihJbW0zMigzMiksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2soYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dl
cihjaCkpKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywg
YnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkp
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2ln
bm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gp
KSk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcElmQ2hhck5vdEVxdWFs
cyhjaCwgc3RhdGUuaW5wdXRPZmZzZXQoKSksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKHRoaXMsIGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHN0YXRlLmlucHV0T2Zm
c2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTczLDkgKzExOTAsOSBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGlmIChtYXNrKSB7CiAg
ICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKEJhc2VJbmRleChpbnB1dCwg
aW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFyKSksIGNo
YXJhY3Rlcik7CiAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwotICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFyYWN0
ZXIsIEltbTMyKGNoUGFpciB8IG1hc2spKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoY2hQ
YWlyIHwgbWFzaykpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9C
YWNrdHJhY2soYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBCYXNlSW5k
ZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVvZihV
Q2hhcikpLCBJbW0zMihjaFBhaXIpKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9C
YWNrdHJhY2sodGhpcywgYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBC
YXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNp
emVvZihVQ2hhcikpLCBJbW0zMihjaFBhaXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0
ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZChUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAgLTU5
MiwxMCArMTIwOSwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShjaCkp
IHsKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRp
bWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBzaXpl
b2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9yMzIoSW1tMzIoMzIpLCBjaGFy
YWN0ZXIpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5vdEVx
dWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSksIHRoaXMpOworICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDMyKE5vdEVxdWFsLCBj
aGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2Rl
Ojp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAgc3Rh
dGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDE2KE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQsIGNv
dW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRp
dHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2gpKSwgdGhpcyk7CisgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMTYoTm90RXF1YWwsIEJhc2VJbmRl
eChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChzdGF0ZS5pbnB1dE9mZnNldCgpICsg
dGVybS5xdWFudGl0eUNvdW50KSAqIHNpemVvZihVQ2hhcikpLCBJbW0zMihjaCkpKTsKICAgICAg
ICAgfQogICAgICAgICBhZGQzMihJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAgIGJy
YW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRleCkubGlua1RvKGxvb3AsIHRoaXMp
OwpAQCAtNjMyLDcgKzEyNDksNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7CiAgICAgICAgIGxv
YWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAgICAg
c3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSwg
dGhpcyk7CisgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2hUZXN0MzIo
WmVybywgY291bnRSZWdpc3RlcikpOwogICAgICAgICBzdWIzMihJbW0zMigxKSwgY291bnRSZWdp
c3Rlcik7CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBpbmRleCk7CiAKQEAgLTY0MCw3ICsxMjU3
LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAg
IHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwogCi0gICAg
ICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdpbik7CisgICAgICAg
IHN0YXRlLnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKICAgICB9CiAKICAgICB2
b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShUZXJtR2VuZXJhdGlvblN0YXRl
JiBzdGF0ZSkKQEAgLTY1Niw3ICsxMjczLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExhYmVsIGhhcmRGYWlsKHRoaXMpOwogICAgICAgICBz
dWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFj
ayhqdW1wKCksIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAK
ICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7CiAgICAgICAgIGxvYWRGcm9tRnJh
bWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKQEAgLTY3OSw3ICsxMjk2LDcg
QEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBmaXJz
dFRpbWVEb05vdGhpbmcubGluayh0aGlzKTsKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVn
aXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNr
R2VuZXJhdGVkKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFi
ZWwoYmFja3RyYWNrQmVnaW4pOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJD
bGFzc1NpbmdsZShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAgLTY5MSwxMCArMTMwOCwx
MCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIHJl
YWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0
Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJDbGFz
cyk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAgc3Rh
dGUuanVtcFRvQmFja3RyYWNrKG1hdGNoRGVzdCwgdGhpcyk7CisgICAgICAgIGlmICh0ZXJtLmlu
dmVydCgpKQorICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNoRGVz
dCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1
bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAg
ICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTcx
MywxMCArMTMzMCwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdv
LCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBzaXplb2YoVUNo
YXIpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIs
IG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJDbGFzcyk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW52
ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKG1hdGNoRGVz
dCwgdGhpcyk7CisgICAgICAgIGlmICh0ZXJtLmludmVydCgpKQorICAgICAgICAgICAgc3RhdGUu
anVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNoRGVzdCk7CiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAgICAgICAgICAgICBtYXRjaERlc3QubGluayh0
aGlzKTsKICAgICAgICAgfQogCkBAIC03MzYsNyArMTM1Myw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAgICAg
ICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKIAotICAgICAgICBpZiAodGVybS5p
bnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAgICAg
ICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKICAgICAg
ICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmYWlsdXJlcywgdGVybS5jaGFy
YWN0ZXJDbGFzcyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NTcsNyArMTM3NCw3IEBAIGNsYXNz
IFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICBMYWJlbCBiYWNr
dHJhY2tCZWdpbih0aGlzKTsKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRp
b24sIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNo
VGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpLCB0aGlzKTsKKyAgICAgICAgc3RhdGUuanVtcFRv
QmFja3RyYWNrKHRoaXMsIGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CiAgICAg
ICAgIHN1YjMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgc3ViMzIoSW1tMzIo
MSksIGluZGV4KTsKIApAQCAtNzY1LDcgKzEzODIsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIs
IHRlcm0uZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJh
dGVkKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFj
a3RyYWNrQmVnaW4pOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc05v
bkdyZWVkeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAgLTc4MCw3ICsxMzk3LDcgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExhYmVs
IGhhcmRGYWlsKHRoaXMpOwogICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7Ci0g
ICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICBzdGF0
ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4o
dGhpcyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJl
Z2lzdGVyKTsKQEAgLTc5Miw3ICsxNDA5LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZQogICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCks
IGNoYXJhY3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRj
aERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVydE9y
Q2FwdHVyZSkKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpCiAgICAgICAgICAgICBtYXRjaERl
c3QubGlua1RvKGhhcmRGYWlsLCB0aGlzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBq
dW1wKGhhcmRGYWlsKTsKQEAgLTgwNSw3ICsxNDIyLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBmaXJzdFRpbWVEb05vdGhpbmcubGluayh0aGlz
KTsKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlv
bik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0JlZ2lu
KTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOwogICAg
IH0KIAogICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKFBhdHRlcm5UZXJt
JiBwYXJlbnRoZXNlc1Rlcm0sIFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCB1bnNpZ25lZCBh
bHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pCkBAIC04MzcsOSArMTQ1NCw5IEBAIGNsYXNzIFJlZ2V4
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBza2lwLmxpbmsodGhpcyk7CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRCYWNr
dHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOworICAgICAgICAgICAgICAgIHN0YXRlLnNl
dEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKIAotICAgICAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayhqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVjayksIHRo
aXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBqdW1wSWZO
b0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVjaykpOwogICAgICAgICAgICAgICAgIHN0YXRlLmNo
ZWNrZWRUb3RhbCArPSBjb3VudFRvQ2hlY2s7CiAgICAgICAgICAgICB9CiAKQEAgLTg0OSw2ICsx
NDY2LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAg
ICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVjazsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEp1bXBMaXN0IHN1Y2Nlc3NlczsKKyAgICAgICAgICAgIGJvb2wgcHJv
cG9nYXRlQmFja3RyYWNrID0gZmFsc2U7CiAKICAgICAgICAgICAgIGZvciAoc3RhdGUucmVzZXRB
bHRlcm5hdGl2ZSgpOyBzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCk7IHN0YXRlLm5leHRBbHRlcm5h
dGl2ZSgpKSB7CiAKQEAgLTg2NywzNyArMTQ4NSwzNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGFuIGFsdGVy
bmF0aXZlLgogICAgICAgICAgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBzdG9yZVRv
RnJhbWVXaXRoUGF0Y2goYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgICAg
ICBzdWNjZXNzZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgKCFzdGF0ZS5pc0xhc3RUZXJtKCkgfHwgY291bnRUb0NoZWNrKQorICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAgICAgICAgICAgICAv
LyBBbHRlcm5hdGl2ZSBkaWQgbm90IG1hdGNoLgotICAgICAgICAgICAgICAgIExhYmVsIGJhY2t0
cmFja0xvY2F0aW9uKHRoaXMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IENhbiB3ZSBiYWNrdHJhY2sgdGhlIGFsdGVybmF0aXZlPyAtIGlmIHNvLCBkbyBzby4gIElmIG5v
dCwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgb25lLgotICAgICAgICAgICAgICAgIHN0
YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7CisgICAgICAgICAgICAgICAg
c3RhdGUuc2V0RGF0YUxhYmVsUHRyKGRhdGFMYWJlbCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAg
ICAgICAgICAgICAvLyBEbyB3ZSBoYXZlIGEgYmFja3RyYWNrIGRlc3RpbmF0aW9uPyAKKyAgICAg
ICAgICAgICAgICAvLyAgICBpZiBzbywgbGluayB0aGUgZGF0YSBsYWJlbCB0byBpdC4KKyAgICAg
ICAgICAgICAgICBzdGF0ZS5saW5rRGF0YUxhYmVsVG9CYWNrdHJhY2tJZkV4aXN0cyh0aGlzKTsK
KworICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNMYXN0QWx0ZXJuYXRpdmUoKSB8fCBjb3Vu
dFRvQ2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFj
a3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2xlYXJCYWNrdHJhY2so
KTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoY291bnRUb0NoZWNr
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN1YjMyKEltbTMyKGNvdW50VG9DaGVjayksIGluZGV4
KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVj
azsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmlzTGFzdEFsdGVybmF0aXZlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcG9nYXRlQmFja3RyYWNrID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1JlY29yZHMuYXBwZW5k
KEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGRhdGFMYWJlbCwgYmFja3RyYWNrTG9jYXRpb24p
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJl
IHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbHMuCiAgICAgICAgICAgICAvLyBBZGQgYSBi
YWNrdHJhY2sgb3V0IG9mIGhlcmUgZm9yIHRoZSBwYXJlbnRoZXNlIGhhbmRsaW5nIGNvZGUgdG8g
bGluayB1cC4KLSAgICAgICAgICAgIHN0YXRlLmFkZEJhY2t0cmFja0p1bXAoanVtcCgpKTsKKyAg
ICAgICAgICAgIGlmICghcHJvcG9nYXRlQmFja3RyYWNrKQorICAgICAgICAgICAgICAgIHN0YXRl
LmFkZEJhY2t0cmFja0p1bXAoanVtcCgpKTsKIAotICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSB0
cmFtcG9saW5lIGZvciB0aGUgcGFyZW5zIGNvZGUgdG8gYmFja3RyYWNrIHRvLCB0byByZXRyeSB0
aGUKKyAgICAgICAgICAgIC8vIFNhdmUgYWRkcmVzcyBvbiBzdGFjayBmb3IgdGhlIHBhcmVucyBj
b2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkgdGhlCiAgICAgICAgICAgICAvLyBuZXh0IGFs
dGVybmF0aXZlLgotICAgICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGxhYmVs
KCkpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFtZUFuZEp1bXAoYWx0ZXJuYXRpdmVGcmFtZUxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IGJvdGggb2YgdGhlIGFib3ZlIGhvb2tz
IGFyZSBhIGxpdHRsZSBpbmVmZmljaWVudCwgaW4gdGhhdCB5b3UKLSAgICAgICAgICAgIC8vIG1h
eSBlbmQgdXAgdHJhbXBvbGluaW5nIGhlcmUsIGp1c3QgdG8gdHJhbXBvbGluZSBiYWNrIG91dCB0
byB0aGUKLSAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzIGNvZGUsIG9yIHZpY2UgdmVyc2EuICBX
ZSBjYW4gcHJvYmFibHkgZWxpbWluYXRlIGEganVtcAotICAgICAgICAgICAgLy8gYnkgcmVzdHJ1
Y3R1cmluZywgYnV0IGNvZGluZyB0aGlzIHdheSBmb3Igbm93IGZvciBzaW1wbGljaXR5IGR1cmlu
ZwotICAgICAgICAgICAgLy8gZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBzdGF0ZS5zZXRCYWNr
VHJhY2tTdGFja09mZnNldChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCop
KTsKIAogICAgICAgICAgICAgc3VjY2Vzc2VzLmxpbmsodGhpcyk7CiAgICAgICAgIH0KQEAgLTkx
OCwxMyArMTUzNiwxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKz0gUmVnZXhTdGFja1NwYWNl
Rm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKIAogICAgICAgICAvLyBvcHRpbWl6ZWQg
Y2FzZSAtIG5vIGNhcHR1cmUgJiBubyBxdWFudGlmaWVyIGNhbiBiZSBoYW5kbGVkIGluIGEgbGln
aHQtd2VpZ2h0IG1hbm5lci4KLSAgICAgICAgaWYgKCF0ZXJtLmludmVydE9yQ2FwdHVyZSAmJiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpKSB7CisgICAgICAgIGlm
ICghdGVybS5jYXB0dXJlKCkgJiYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhl
ZENvdW50KSkgewogICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBwYXJlbnRoZXNlc1N0
YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwogICAgICAgICAgICAgZ2VuZXJh
dGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFyZW50aGVzZXNTdGF0ZSwg
YWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgIC8vIHRoaXMgZXhwZWN0cyB0
aGF0IGFueSBiYWNrdHJhY2tzIGJhY2sgb3V0IG9mIHRoZSBwYXJlbnRoZXNlcyB3aWxsIGJlIGlu
IHRoZQotICAgICAgICAgICAgLy8gcGFyZW50aGVzZXNTdGF0ZSdzIGJhY2tUcmFja0p1bXBzIHZl
Y3RvciwgYW5kIHRoYXQgaWYgdGhleSBuZWVkIGJhY2t0cmFja2luZwotICAgICAgICAgICAgLy8g
dGhleSB3aWxsIGhhdmUgc2V0IGFuIGVudHJ5IHBvaW50IG9uIHRoZSBwYXJlbnRoZXNlc1N0YXRl
J3MgYmFja3RyYWNrTGFiZWwuCi0gICAgICAgICAgICBzdGF0ZS5wcm9wYWdhdGVCYWNrdHJhY2tp
bmdGcm9tKHBhcmVudGhlc2VzU3RhdGUsIHRoaXMpOworICAgICAgICAgICAgLy8gcGFyZW50aGVz
ZXNTdGF0ZSdzIG1fYmFja1RyYWNrSnVtcHMgdmVjdG9yLCBhbmQgdGhhdCBpZiB0aGV5IG5lZWQg
YmFja3RyYWNraW5nCisgICAgICAgICAgICAvLyB0aGV5IHdpbGwgaGF2ZSBzZXQgYW4gZW50cnkg
cG9pbnQgb24gdGhlIHBhcmVudGhlc2VzU3RhdGUncyBtX2JhY2t0cmFja0xhYmVsLgorICAgICAg
ICAgICAgc3RhdGUucHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbSh0aGlzLCBwYXJlbnRoZXNlc1N0
YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgSnVtcCBub25HcmVlZHlTa2lwUGFyZW50aGVzZXM7CiAgICAgICAgICAgICBMYWJlbCBu
b25HcmVlZHlUcnlQYXJlbnRoZXNlczsKQEAgLTkzOCw3ICsxNTU2LDcgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgKLSAgICAgICAgICAgIGlmICh0ZXJtLmlu
dmVydE9yQ2FwdHVyZSkgeworICAgICAgICAgICAgaWYgKHRlcm0uY2FwdHVyZSgpKSB7CiAgICAg
ICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gc3RhdGUuaW5wdXRPZmZzZXQoKSAtIHByZUNo
ZWNrZWRDb3VudDsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKICAgICAgICAg
ICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOwpAQCAtOTQ4LDQ1ICsxNTY2
LDE4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhl
c2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIFBhcmVudGhlc2VzVGFpbCogcGFyZW50aGVzZXNUYWlsID0gbV9leHByZXNz
aW9uU3RhdGUuYWRkUGFyZW50aGVzZXNUYWlsKHRlcm0pOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBnZW5lcmF0ZSB0aGUgYm9keSBvZiB0aGUgcGFyZW50aGVzZXMKICAgICAgICAgICAg
IFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUu
Y2hlY2tlZFRvdGFsKTsKICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNEaXNqdW5jdGlv
bihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2VzU3RhdGUsIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlv
bik7CiAKLSAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9ICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyRml4ZWRDb3VudCkgPwotICAgICAgICAgICAgICAgIGp1bXAoKSA6Ci0gICAgICAg
ICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKLQot
ICAgICAgICAgICAgLy8gQSBmYWlsdXJlIEFGVEVSIHRoZSBwYXJlbnMganVtcHMgaGVyZQotICAg
ICAgICAgICAgTGFiZWwgYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKHRoaXMpOwotCi0gICAgICAg
ICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgewotICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3
aXRoIGFuZCB3aXRob3V0IHRoZSBwYXJlbnMuCi0gICAgICAgICAgICAgICAgbG9hZEZyb21GcmFt
ZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5
LCBJbW0zMigtMSkpLCB0aGlzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRo
aXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGhvdXQgdGhlIHBhcmVucywgbm93IHRlc3Qg
d2l0aC4KLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiwgaW5kZXhUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgIGJyYW5jaDMyKEVxdWFsLCBp
bmRleFRlbXBvcmFyeSwgSW1tMzIoLTEpKS5saW5rVG8obm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMs
IHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBs
YW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7Ci0gICAgICAgICAgICAvLyBBIGZhaWx1
cmUgV0lUSElOIHRoZSBwYXJlbnMganVtcHMgaGVyZQotICAgICAgICAgICAgcGFyZW50aGVzZXNT
dGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOwotICAgICAgICAgICAgaWYgKHRl
cm0uaW52ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAgICAgIHN0b3JlMzIoSW1tMzIoLTEpLCBB
ZGRyZXNzKG91dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICogc2l6
ZW9mKGludCkpKTsKLQotICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50
aWZpZXJHcmVlZHkpCi0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKC0xKSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKLQotICAgICAgICAgICAgc3Rh
dGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyk7Ci0gICAg
ICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkKLSAg
ICAgICAgICAgICAgICBub25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0aGlzKTsKLSAgICAg
ICAgICAgIHN1Y2Nlc3MubGluayh0aGlzKTsKKyAgICAgICAgICAgIC8vIEZvciBub24tZml4ZWQg
Y291bnRzLCBiYWNrdHJhY2sgaWYgd2UgZGlkbid0IG1hdGNoIGFueXRoaW5nLgorICAgICAgICAg
ICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlICE9IFF1YW50aWZpZXJGaXhlZENvdW50KQorICAgICAg
ICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDMy
KEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSkpOwogCiAgICAgICAgICAgICAvLyBzdG9y
ZSB0aGUgbWF0Y2ggZW5kIGluZGV4Ci0gICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1
cmUpIHsKKyAgICAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewogICAgICAgICAgICAgICAg
IGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAg
aWYgKGlucHV0T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4
VGVtcG9yYXJ5KTsKQEAgLTk5NSw2ICsxNTg2LDEzIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICgodGVybS5wYXJlbnRoZXNlcy5z
dWJwYXR0ZXJuSWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHBhcmVudGhlc2VzVGFpbC0+cHJvY2Vzc0JhY2t0cmFj
a3ModGhpcywgc3RhdGUsIHBhcmVudGhlc2VzU3RhdGUsIG5vbkdyZWVkeVRyeVBhcmVudGhlc2Vz
LCBsYWJlbCgpKTsKKworICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5nZXRCYWNrdHJhY2tE
ZXN0aW5hdGlvbigpLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0ZXJt
LnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KQorICAgICAgICAgICAgICAgIG5v
bkdyZWVkeVNraXBQYXJlbnRoZXNlcy5saW5rKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xMDMzLDYgKzE2MzEsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlCiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZF
eGlzdHModGhpcyk7CiAKICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuY2xlYXJC
YWNrdHJhY2soKTsKICAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIHRoZSBhbHRlcm5hdGl2
ZSBmYWlscyB0byBtYXRjaCAtIGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBpdGVyYXRpb24sIG9y
IG91dCBvZiB0aGUgbG9vcC4KIAogICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykgewpAQCAt
MTA1Nyw3ICsxNjU2LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZQogCiAgICAgICAgIGludCBjb3VudENoZWNrZWRBZnRlckFzc2VydGlvbiA9IHN0YXRlLmNoZWNr
ZWRUb3RhbCAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKIAotICAgICAgICBpZiAodGVybS5pbnZlcnRP
ckNhcHR1cmUpIHsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAgICAgICAgIC8v
IEludmVydGVkIGNhc2UKICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRleCwgcGFyZW50aGVz
ZXNGcmFtZUxvY2F0aW9uKTsKIApAQCAtMTA2OSwxMCArMTY2OCwxMSBAQCBjbGFzcyBSZWdleEdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhl
c2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2
ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgLy8gU3VjY2VzcyEgLSB3aGljaCBtZWFucyAt
IEZhaWwhCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlv
biwgaW5kZXgpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhp
cyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAgICAg
ICAgIC8vIEFuZCBmYWlsIG1lYW5zIHN1Y2Nlc3MuCiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0
YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICBwYXJlbnRo
ZXNlc1N0YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOwogCiAgICAgICAgICAgICBzdGF0ZS5jaGVj
a2VkVG90YWwgKz0gY291bnRDaGVja2VkQWZ0ZXJBc3NlcnRpb247CkBAIC0xMDkxLDggKzE2OTEs
OSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUu
bGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIHBhcmVudGhlc2Vz
U3RhdGUuY2xlYXJCYWNrdHJhY2soKTsKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50
aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0
aGlzKTsKIAogICAgICAgICAgICAgc3VjY2Vzcy5saW5rKHRoaXMpOwogCkBAIC0xMjQyLDYgKzE4
NDMsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
ICAgICBnZW5lcmF0ZVJldHVybigpOwogCiAgICAgICAgICAgICBzdGF0ZS5uZXh0QWx0ZXJuYXRp
dmUoKTsKKyAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkKKyAgICAg
ICAgICAgICAgICBzdGF0ZS5jbGVhckJhY2t0cmFjaygpOwogCiAgICAgICAgICAgICAvLyBpZiB0
aGVyZSBhcmUgYW55IG1vcmUgYWx0ZXJuYXRpdmVzLCBwbGFudCB0aGUgY2hlY2sgZm9yIGlucHV0
IGJlZm9yZSBsb29waW5nLgogICAgICAgICAgICAgaWYgKHN0YXRlLmFsdGVybmF0aXZlVmFsaWQo
KSkgewpAQCAtMTI0OSw3ICsxODUyLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZQogICAgICAgICAgICAgICAgIGlmICghc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJl
bHMgJiYgIW5leHRBbHRlcm5hdGl2ZS0+b25jZVRocm91Z2goKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIGhhbmRsZWQgbm9uLXJlcGVhdGluZyBhbHRlcm5hdGl2ZXMsIGp1bXAg
dG8gbmV4dCBpdGVyYXRpb24gCiAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIg
cmVwZWF0aW5nIGFsdGVybmF0aXZlcy4KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRv
QmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBU
b0JhY2t0cmFjayh0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgPSBuZXh0QWx0ZXJuYXRpdmUtPm1f
bWluaW11bVNpemU7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTI1Nyw2ICsxODYwLDcgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAg
ICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUubGluayh0aGlzKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5h
dGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFj
a3RyYWNrKCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQmFjayB1cCB0byBzdGFydCB0aGUg
bG9vcGluZyBhbHRlcm5hdGl2ZXMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudENoZWNr
ZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUpCkBAIC0xMjg4LDYgKzE4OTIsNyBAQCBjbGFzcyBSZWdl
eEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB0aGVuIHRoZSBsYXN0
IGlucHV0IGNoZWNrZWQgcGFzc2VkLgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlu
a0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVk
IHRvIGNoZWNrIGlmIHdlIGNhbiBydW4gdGhlIG5leHQgYWx0ZXJuYXRpdmUsIHNpbmNlIGl0IGlz
IHNob3J0ZXIgLQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCB1cGRhdGUgaW5kZXgu
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudENoZWNrZWRGb3JDdXJy
ZW50QWx0ZXJuYXRpdmUgLSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUpLCBpbmRleCk7
CkBAIC0xMzAyLDYgKzE5MDcsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoZSBuZXh0IGFsdGVybmF0aXZlIGlzIGxvbmdlciB0aGFuIHRoZSBjdXJyZW50IG9uZTsg
Y2hlY2sgdGhlIGRpZmZlcmVuY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5r
QWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuY2xlYXJCYWNrdHJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdEVub3VnaElu
cHV0Rm9yUHJldmlvdXNBbHRlcm5hdGl2ZS5hcHBlbmQoanVtcElmTm9BdmFpbGFibGVJbnB1dChj
b3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJuYXRpdmUgLSBjb3VudENoZWNrZWRGb3JDdXJyZW50QWx0
ZXJuYXRpdmUpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gQ0FTRSAzOiBCb3Ro
IGFsdGVybmF0aXZlcyBhcmUgdGhlIHNhbWUgbGVuZ3RoLgogICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSA9PSBjb3VudFRvQ2hl
Y2tGb3JOZXh0QWx0ZXJuYXRpdmUpOwpAQCAtMTMxMCw2ICsxOTE2LDcgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgdGhlcmUgd2FzIHN1ZmZpY2VudCBpbnB1dCB0byBydW4gdGhlIGN1cnJlbnQgYWx0ZXJuYXRp
dmUgdGhlbiB0aGVyZSBpcyBzdWZmaWNpZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bnB1dCB0byBydW4gdGhlIG5leHQgb25lOyBpZiBub3QsIHRoZXJlIGlzbid0LgogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNv
dW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgY291
bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVy
bmF0aXZlOwpAQCAtMTMyNSw3ICsxOTMyLDggQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZQogICAgICAgICBpZiAoIXNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gYWx0ZXJuYXRpdmVzIHRoYXQgbmVlZCBy
ZXBlYXRpbmcgKGFsbCBhcmUgbWFya2VkICdvbmNlVGhyb3VnaCcpIHRoZW4ganVzdCBsaW5rCiAg
ICAgICAgICAgICAvLyB0aGUgbWF0Y2ggZmFpbHVyZXMgdG8gdGhpcyBwb2ludCwgYW5kIGZhbGwg
dGhyb3VnaCB0byB0aGUgcmV0dXJuIGJlbG93LgotICAgICAgICAgICAgc3RhdGUubGlua0FsdGVy
bmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2
ZUJhY2t0cmFja3ModGhpcywgdHJ1ZSk7CisgICAgICAgICAgICBzdGF0ZS5jbGVhckJhY2t0cmFj
aygpOwogICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0aXZlLmxp
bmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBIb3cgbXVjaCBtb3Jl
IGlucHV0IG5lZWQgdGhlcmUgYmUgdG8gYmUgYWJsZSB0byByZXRyeSBmcm9tIHRoZSBmaXJzdCBh
bHRlcm5hdGl2ZT8KQEAgLTEzNDQsMTIgKzE5NTIsMTUgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgaW50IGluY3JlbWVudEZvck5leHRJdGVy
ID0gKGNvdW50VG9DaGVja0ZvckZpcnN0QWx0ZXJuYXRpdmUgLSBjb3VudENoZWNrZWRGb3JDdXJy
ZW50QWx0ZXJuYXRpdmUpICsgMTsKIAogICAgICAgICAgICAgLy8gRmlyc3QsIGRlYWwgd2l0aCB0
aGUgY2FzZXMgd2hlcmUgdGhlcmUgd2FzIHN1ZmZpY2llbnQgaW5wdXQgdG8gdHJ5IHRoZSBsYXN0
IGFsdGVybmF0aXZlLgotICAgICAgICAgICAgaWYgKGluY3JlbWVudEZvck5leHRJdGVyID4gMCkg
Ly8gV2UgbmVlZCB0byBjaGVjayBmb3IgbW9yZSBpbnB1dCBhbnl3YXksIGZhbGwgdGhyb3VnaCB0
byB0aGUgY2hlY2tpbmcgYmVsb3cuCi0gICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyh0aGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fcGF0dGVybi5tX2Jv
ZHktPm1faGFzRml4ZWRTaXplICYmICFpbmNyZW1lbnRGb3JOZXh0SXRlcikgLy8gTm8gbmVlZCB0
byB1cGRhdGUgYW55dGhpbmcsIGxpbmsgdGhlc2UgYmFja3RyYWNrcyBzdHJhaWdodCB0byB0aGUg
dG8gcG9mIHRoZSBsb29wIQotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJh
Y2t0cmFja3NUbyhmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkLCB0aGlzKTsKLSAgICAgICAg
ICAgIGVsc2UgeyAvLyBubyBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCwgYnV0IHdlIGRvIGhhdmUg
c29tZSBib29ra2VlcGluZyB0byBkbyBmaXJzdC4KLSAgICAgICAgICAgICAgICBzdGF0ZS5saW5r
QWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAgaWYgKGluY3JlbWVudEZv
ck5leHRJdGVyID4gMCkgeyAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBtb3JlIGlucHV0IGFueXdh
eSwgZmFsbCB0aHJvdWdoIHRvIHRoZSBjaGVja2luZyBiZWxvdy4KKyAgICAgICAgICAgICAgICBz
dGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMsIHRydWUpOworICAgICAgICAgICAg
ICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcGF0
dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplICYmICFpbmNyZW1lbnRGb3JOZXh0SXRlcikgeyAv
LyBObyBuZWVkIHRvIHVwZGF0ZSBhbnl0aGluZywgbGluayB0aGVzZSBiYWNrdHJhY2tzIHN0cmFp
Z2h0IHRvIHRoZSB0byBwb2YgdGhlIGxvb3AhCisgICAgICAgICAgICAgICAgc3RhdGUubGlua0Fs
dGVybmF0aXZlQmFja3RyYWNrc1RvKHRoaXMsIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQs
IHRydWUpOworICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CisgICAgICAg
ICAgICB9IGVsc2UgeyAvLyBubyBuZWVkIHRvIGNoZWNrIHRoZSBpbnB1dCwgYnV0IHdlIGRvIGhh
dmUgc29tZSBib29ra2VlcGluZyB0byBkbyBmaXJzdC4KKyAgICAgICAgICAgICAgICBzdGF0ZS5s
aW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMsIHRydWUpOworICAgICAgICAgICAgICAgIHN0
YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAKICAgICAgICAgICAgICAgICAvLyBXaGVyZSBuZWNlc3Nh
cnkgdXBkYXRlIG91ciBwcmVzZXJ2ZWQgc3RhcnQgcG9zaXRpb24uCiAgICAgICAgICAgICAgICAg
aWYgKCFtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSkgewpAQCAtMTQwNiw2ICsyMDE3
LDEwIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAg
bW92ZShJbW0zMigtMSksIHJldHVyblJlZ2lzdGVyKTsKIAogICAgICAgICBnZW5lcmF0ZVJldHVy
bigpOworCisgICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmVtaXRQYXJlbnRoZXNlc1RhaWwodGhp
cyk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmVtaXRJbmRpcmVjdEp1bXBUYWJsZSh0aGlz
KTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhdGUubGlua1RvTmV4dEl0ZXJhdGlvbih0aGlzKTsK
ICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlRW50ZXIoKQpAQCAtMTQ5Miw4ICsyMTA3LDggQEAg
cHVibGljOgogCiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIodGhpcywgZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5wb29sRm9yU2l6ZShzaXplKCkpLCAwKTsKIAotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9iYWNrdHJhY2tSZWNvcmRzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIucGF0Y2gobV9iYWNrdHJhY2tSZWNvcmRzW2ldLmRh
dGFMYWJlbCwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2JhY2t0cmFja1JlY29yZHNbaV0uYmFj
a3RyYWNrTG9jYXRpb24pKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXhw
cmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IHBhdGNoQnVmZmVyLnBhdGNoKG1fZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkc1tp
XS5kYXRhTGFiZWwsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9leHByZXNzaW9uU3RhdGUubV9i
YWNrdHJhY2tSZWNvcmRzW2ldLmJhY2t0cmFja0xvY2F0aW9uKSk7CiAKICAgICAgICAgaml0T2Jq
ZWN0LnNldChwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgfQpAQCAtMTUwNiw3ICsy
MTIxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZWdleFBhdHRlcm4mIG1fcGF0dGVybjsK
ICAgICBib29sIG1fc2hvdWxkRmFsbEJhY2s7Ci0gICAgVmVjdG9yPEFsdGVybmF0aXZlQmFja3Ry
YWNrUmVjb3JkPiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgR2VuZXJhdGlvblN0YXRlIG1fZXhw
cmVzc2lvblN0YXRlOwogfTsKIAogdm9pZCBqaXRDb21waWxlUmVnZXgoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBSZWdleENvZGVCbG9jayYgaml0T2JqZWN0LCBjb25zdCBVU3RyaW5nJiBwYXR0
ZXJuU3RyaW5nLCB1bnNpZ25lZCYgbnVtU3VicGF0dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwg
QnVtcFBvaW50ZXJBbGxvY2F0b3IqIGFsbG9jYXRvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11
bHRpbGluZSkKQEAgLTE1MjksOCArMjE0NCwzIEBAIHZvaWQgaml0Q29tcGlsZVJlZ2V4KEpTR2xv
YmFsRGF0YSogZ2xvYmEKIH19CiAKICNlbmRpZgotCi0KLQotCi0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFy
ci9SZWdleFBhdHRlcm4uaAkocmV2aXNpb24gNzI5NTEpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJy
L1JlZ2V4UGF0dGVybi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDggQEAgc3RydWN0
IFBhdHRlcm5UZXJtIHsKICAgICAgICAgVHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwKICAgICAg
ICAgVHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24sCiAgICAgfSB0eXBlOwotICAgIGJvb2wgaW52
ZXJ0T3JDYXB0dXJlOworICAgIGJvb2wgbV9jYXB0dXJlIDoxOworICAgIGJvb2wgbV9pbnZlcnQg
OjE7CiAgICAgdW5pb24gewogICAgICAgICBVQ2hhciBwYXR0ZXJuQ2hhcmFjdGVyOwogICAgICAg
ICBDaGFyYWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3M7CkBAIC0xMjMsNiArMTI0LDggQEAgc3Ry
dWN0IFBhdHRlcm5UZXJtIHsKIAogICAgIFBhdHRlcm5UZXJtKFVDaGFyIGNoKQogICAgICAgICA6
IHR5cGUoUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVyKQorICAgICAgICAsIG1fY2Fw
dHVyZShmYWxzZSkKKyAgICAgICAgLCBtX2ludmVydChmYWxzZSkKICAgICB7CiAgICAgICAgIHBh
dHRlcm5DaGFyYWN0ZXIgPSBjaDsKICAgICAgICAgcXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZp
eGVkQ291bnQ7CkBAIC0xMzEsMTYgKzEzNCwxOCBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogCiAg
ICAgUGF0dGVyblRlcm0oQ2hhcmFjdGVyQ2xhc3MqIGNoYXJDbGFzcywgYm9vbCBpbnZlcnQpCiAg
ICAgICAgIDogdHlwZShQYXR0ZXJuVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzKQotICAgICAgICAs
IGludmVydE9yQ2FwdHVyZShpbnZlcnQpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAg
ICAgICAsIG1faW52ZXJ0KGludmVydCkKICAgICB7CiAgICAgICAgIGNoYXJhY3RlckNsYXNzID0g
Y2hhckNsYXNzOwogICAgICAgICBxdWFudGl0eVR5cGUgPSBRdWFudGlmaWVyRml4ZWRDb3VudDsK
ICAgICAgICAgcXVhbnRpdHlDb3VudCA9IDE7CiAgICAgfQogCi0gICAgUGF0dGVyblRlcm0oVHlw
ZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVu
Y3Rpb24sIGJvb2wgaW52ZXJ0T3JDYXB0dXJlKQorICAgIFBhdHRlcm5UZXJtKFR5cGUgdHlwZSwg
dW5zaWduZWQgc3VicGF0dGVybklkLCBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uLCBi
b29sIGNhcHR1cmUgPSBmYWxzZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSkKICAgICAgICAgOiB0eXBl
KHR5cGUpCi0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGludmVydE9yQ2FwdHVyZSkKKyAgICAg
ICAgLCBtX2NhcHR1cmUoY2FwdHVyZSkKKyAgICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAg
ewogICAgICAgICBwYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiA9IGRpc2p1bmN0aW9uOwogICAgICAg
ICBwYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPSBzdWJwYXR0ZXJuSWQ7CkBAIC0xNTIsNyArMTU3
LDggQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKICAgICAKICAgICBQYXR0ZXJuVGVybShUeXBlIHR5
cGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpCiAgICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAs
IGludmVydE9yQ2FwdHVyZShpbnZlcnQpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAg
ICAgICAsIG1faW52ZXJ0KGludmVydCkKICAgICB7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1
YW50aWZpZXJGaXhlZENvdW50OwogICAgICAgICBxdWFudGl0eUNvdW50ID0gMTsKQEAgLTE2MCw3
ICsxNjYsOCBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogCiAgICAgUGF0dGVyblRlcm0odW5zaWdu
ZWQgc3BhdHRlcm5JZCkKICAgICAgICAgOiB0eXBlKFR5cGVCYWNrUmVmZXJlbmNlKQotICAgICAg
ICAsIGludmVydE9yQ2FwdHVyZShmYWxzZSkKKyAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCisg
ICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBzdWJwYXR0ZXJuSWQgPSBz
cGF0dGVybklkOwogICAgICAgICBxdWFudGl0eVR5cGUgPSBRdWFudGlmaWVyRml4ZWRDb3VudDsK
QEAgLTE4OSwxMiArMTk2LDEyIEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiAgICAgCiAgICAgYm9v
bCBpbnZlcnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGludmVydE9yQ2FwdHVyZTsKKyAgICAg
ICAgcmV0dXJuIG1faW52ZXJ0OwogICAgIH0KIAogICAgIGJvb2wgY2FwdHVyZSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICByZXR1cm4gbV9jYXB0dXJl
OwogICAgIH0KICAgICAKICAgICB2b2lkIHF1YW50aWZ5KHVuc2lnbmVkIGNvdW50LCBRdWFudGlm
aWVyVHlwZSB0eXBlKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRo
ZXNlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4
L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNCBAQAor
VGhpcyBwYWdlIHRlc3RzIGhhbmRsaW5nIG9mIHBhcmVudGhlc2VzIHN1YmV4cHJlc3Npb25zLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyByZWdleHAxLmV4ZWMoJ2FiYycp
IGlzIFsnYWInLCdhJywnYiddCitQQVNTIHJlZ2V4cDIuZXhlYygnYWJhY2FkYWJlJykgaXMgWydh
YmUnLCdhYicsJ2InLCdiJ10KK1BBU1MgcmVnZXhwMy5leGVjKCdhYmFjYWRhYmUnKSBpcyBbJ2Fi
ZScsJ2FiJywnYicsdW5kZWZpbmVkXQorUEFTUyByZWdleHA0LmV4ZWMoJ2FiYWNhZGFiZScpIGlz
IFsnYWJlJywnYWInLCdiJyx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDUuZXhlYygnYWJhY2FkYWJl
JykgaXMgWydhYmUnLCdhYicsJ2InLCdiJyx1bmRlZmluZWQsdW5kZWZpbmVkXQorUEFTUyByZWdl
eHA2LmV4ZWMoJ2FiY2RlJykgaXMgWydhYicsJ2FiJywnYicsJ2InLHVuZGVmaW5lZCx1bmRlZmlu
ZWRdCitQQVNTIHJlZ2V4cDcuZXhlYygnYWJjJykgaXMgWydhYmMnLCdhYicsJ2InXQorUEFTUyBy
ZWdleHA4LmV4ZWMoJ2JjYWRkeHF5JykgaXMgWydxeScsJ3EnLCdxJywneSddCitQQVNTIHJlZ2V4
cDkuZXhlYygnYXNkZmplamdzZGZsYWtzZGZqa2Vsamdoa2plYScpIGlzIFsnYScsJ2EnLHVuZGVm
aW5lZF0KK1BBU1MgcmVnZXhwMTAuZXhlYygnYXNkZmplamdzZGZsYWtzZGZqa2VsamdoYXQnKSBp
cyBbJ2F0J10KK1BBU1MgcmVnZXhwMTEuZXhlYygnRGV2ZWxvcGluZyB3aXRoIEphdmFTY3JpcHQg
aXMgZGFuZ2Vyb3VzLCBkbyBub3QgdHJ5IGl0IHdpdGhvdXQgYXNzaXN0YW5jZScpIGlzIG51bGwK
K1BBU1MgcmVnZXhwMTIuZXhlYygnU2VhdHRsZSwgV0EgdG8gQnVja2xleSwgV0EnKSBpcyBbJ1Nl
YXR0bGUsIFdBIHRvIEJ1Y2tsZXksIFdBJywgdW5kZWZpbmVkLCAnU2VhdHRsZScsICdXQScsIHVu
ZGVmaW5lZCwgJ0J1Y2tsZXknLCAnV0EnXQorUEFTUyByZWdleHAxMy5leGVjKCd6eGNhc2Q7Zmwg
XkFhYUFBYWFhZjtscmxyenMnKSBpcyBbJ0FhYUFBYWFhZjtscmxyenMnLHVuZGVmaW5lZCwnQWFh
QUFhYWFmO2xybHJ6cyddCitQQVNTIHJlZ2V4cDE0LmV4ZWMoJ2InKSBpcyBbJ2InLHVuZGVmaW5l
ZCwnYiddCitQQVNTIHJlZ2V4cDE1LmV4ZWMoJ2FiZGYnKSBpcyBbJ2FiZGYnLHVuZGVmaW5lZCwn
YWJkJywnZiddCitQQVNTIHJlZ2V4cDE2LmV4ZWMoJ2FiYycpIGlzIFsnYWInLCdhJywnYiddCitQ
QVNTIHJlZ2V4cDE3LmV4ZWMoJ2JjYUR4cXknKSBpcyBbJ0R4JywnRCddCitQQVNTIHJlZ2V4cDE4
LmV4ZWMoJ0hlbGxvOiBXb3JsZCcpIGlzIFsnSGVsbG86JywnOiddCitQQVNTIHJlZ2V4cDE5LmV4
ZWMoJ2JhcnJlbCcpIGlzIFsnYmFyJywnJ10KK1BBU1MgcmVnZXhwMjAuZXhlYygnYmFycmVsJykg
aXMgWydiYXJyZWwnLCdyZWwnXQorUEFTUyByZWdleHAyMC5leGVjKCcyYmFycmVsJykgaXMgWycy
YmFycmVsJywncmVsJ10KK1BBU1MgcmVnZXhwMjEuZXhlYygnYWJjJykgaXMgWydhYicsJ2FiJywn
YiddCitQQVNTIHJlZ2V4cDIyLmV4ZWMoJ2FiY2Rsc2tmZ2pkc2xrZmcnKSBpcyBudWxsCitQQVNT
IHJlZ2V4cDIzLmV4ZWMoJzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1s
IicpIGlzIFsnImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiJ10KK1BBU1MgJ0hpIEJvYicu
bWF0Y2goLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvKSBpcyBbJ0JvYicsdW5kZWZpbmVk
LCdCb2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJl
bnRoZXNlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcGFyZW50
aGVzZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcGFyZW50
aGVzZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3Nj
cmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3JlZ2V4L3NjcmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc2IEBACitkZXNjcmlwdGlvbigiVGhpcyBwYWdlIHRlc3RzIGhhbmRsaW5n
IG9mIHBhcmVudGhlc2VzIHN1YmV4cHJlc3Npb25zLiIpOworCit2YXIgcmVnZXhwMSA9IC8oYXxB
KShifEIpLzsKK3Nob3VsZEJlKCJyZWdleHAxLmV4ZWMoJ2FiYycpIiwgIlsnYWInLCdhJywnYidd
Iik7CisKK3ZhciByZWdleHAyID0gLyhhKChiKXxjfGQpKWUvOworc2hvdWxkQmUoInJlZ2V4cDIu
ZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUnLCdhYicsJ2InLCdiJ10iKTsKKwordmFyIHJlZ2V4
cDMgPSAvKGEoYnwoYyl8ZCkpZS87CitzaG91bGRCZSgicmVnZXhwMy5leGVjKCdhYmFjYWRhYmUn
KSIsICJbJ2FiZScsJ2FiJywnYicsdW5kZWZpbmVkXSIpOworCit2YXIgcmVnZXhwNCA9IC8oYShi
fGN8KGQpKSllLzsKK3Nob3VsZEJlKCJyZWdleHA0LmV4ZWMoJ2FiYWNhZGFiZScpIiwgIlsnYWJl
JywnYWInLCdiJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA1ID0gLyhhKChiKXwoYyl8KGQp
KSllLzsKK3Nob3VsZEJlKCJyZWdleHA1LmV4ZWMoJ2FiYWNhZGFiZScpIiwgIlsnYWJlJywnYWIn
LCdiJywnYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKKwordmFyIHJlZ2V4cDYgPSAvKGEoKGIp
fChjKXwoZCkpKS87CitzaG91bGRCZSgicmVnZXhwNi5leGVjKCdhYmNkZScpIiwgIlsnYWInLCdh
YicsJ2InLCdiJyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOworCit2YXIgcmVnZXhwNyA9IC8oYShi
KT8/KT8/Yy87CitzaG91bGRCZSgicmVnZXhwNy5leGVjKCdhYmMnKSIsICJbJ2FiYycsJ2FiJywn
YiddIik7CisKK3ZhciByZWdleHA4ID0gLyhhfChlfHEpKSh4fHkpLzsKK3Nob3VsZEJlKCJyZWdl
eHA4LmV4ZWMoJ2JjYWRkeHF5JykiICwgIlsncXknLCdxJywncScsJ3knXSIpOworCit2YXIgcmVn
ZXhwOSA9IC8oKHR8Yik/fGEpJC87CitzaG91bGRCZSgicmVnZXhwOS5leGVjKCdhc2RmamVqZ3Nk
Zmxha3NkZmprZWxqZ2hramVhJykiLCAiWydhJywnYScsdW5kZWZpbmVkXSIpOworCit2YXIgcmVn
ZXhwMTAgPSAvKD86aHxlPyg/OnR8Yik/fGE/KD86dHxiKT8pKD86JCkvOworc2hvdWxkQmUoInJl
Z2V4cDEwLmV4ZWMoJ2FzZGZqZWpnc2RmbGFrc2RmamtlbGpnaGF0JykiLCAiWydhdCddIik7CisK
K3ZhciByZWdleHAxMSA9IC8oW0pqXWF2YShbU3NdY3JpcHQpPylcc2lzXHMoZnVuXHcqKS87Citz
aG91bGRCZU51bGwoInJlZ2V4cDExLmV4ZWMoJ0RldmVsb3Bpbmcgd2l0aCBKYXZhU2NyaXB0IGlz
IGRhbmdlcm91cywgZG8gbm90IHRyeSBpdCB3aXRob3V0IGFzc2lzdGFuY2UnKSIpOworCit2YXIg
cmVnZXhwMTIgPSAvKD86KC4rKSwgKT8oLispLCAoLi4pIHRvICg/OiguKyksICk/KC4rKSwgKC4u
KS87CitzaG91bGRCZSgicmVnZXhwMTIuZXhlYygnU2VhdHRsZSwgV0EgdG8gQnVja2xleSwgV0En
KSIsICJbJ1NlYXR0bGUsIFdBIHRvIEJ1Y2tsZXksIFdBJywgdW5kZWZpbmVkLCAnU2VhdHRsZScs
ICdXQScsIHVuZGVmaW5lZCwgJ0J1Y2tsZXknLCAnV0EnXSIpOworCit2YXIgcmVnZXhwMTMgPSAv
KEEpPyhBLiopLzsKK3Nob3VsZEJlKCJyZWdleHAxMy5leGVjKCd6eGNhc2Q7ZmxcIF5BYWFBQWFh
YWY7bHJscnpzJykiLCAiWydBYWFBQWFhYWY7bHJscnpzJyx1bmRlZmluZWQsJ0FhYUFBYWFhZjts
cmxyenMnXSIpOworCit2YXIgcmVnZXhwMTQgPSAvKGEpfChiKS87CitzaG91bGRCZSgicmVnZXhw
MTQuZXhlYygnYicpIiwgIlsnYicsdW5kZWZpbmVkLCdiJ10iKTsKKwordmFyIHJlZ2V4cDE1ID0g
L14oPyEoYWIpZGV8eCkoYWJkKShmKS87CitzaG91bGRCZSgicmVnZXhwMTUuZXhlYygnYWJkZicp
IiwgIlsnYWJkZicsdW5kZWZpbmVkLCdhYmQnLCdmJ10iKTsKKwordmFyIHJlZ2V4cDE2ID0gLyhh
fEEpKGJ8QikvOworc2hvdWxkQmUoInJlZ2V4cDE2LmV4ZWMoJ2FiYycpIiwgIlsnYWInLCdhJywn
YiddIik7CisKK3ZhciByZWdleHAxNyA9IC8oYXxkfHF8KXgvaTsKK3Nob3VsZEJlKCJyZWdleHAx
Ny5leGVjKCdiY2FEeHF5JykiLCAiWydEeCcsJ0QnXSIpOworCit2YXIgcmVnZXhwMTggPSAvXi4q
Pyg6fCQpLzsKK3Nob3VsZEJlKCJyZWdleHAxOC5leGVjKCdIZWxsbzogV29ybGQnKSIsICJbJ0hl
bGxvOicsJzonXSIpOworCit2YXIgcmVnZXhwMTkgPSAvKGFifF4uezAsMn0pYmFyLzsKK3Nob3Vs
ZEJlKCJyZWdleHAxOS5leGVjKCdiYXJyZWwnKSIsICJbJ2JhcicsJyddIik7CisKK3ZhciByZWdl
eHAyMCA9IC8oPzooPyFmb28pLi4ufF4uezAsMn0pYmFyKC4qKS87CitzaG91bGRCZSgicmVnZXhw
MjAuZXhlYygnYmFycmVsJykiLCAiWydiYXJyZWwnLCdyZWwnXSIpOworc2hvdWxkQmUoInJlZ2V4
cDIwLmV4ZWMoJzJiYXJyZWwnKSIsICJbJzJiYXJyZWwnLCdyZWwnXSIpOworCit2YXIgcmVnZXhw
MjEgPSAvKFthLWddKGJ8Qil8eHl6KS87CitzaG91bGRCZSgicmVnZXhwMjEuZXhlYygnYWJjJyki
LCAiWydhYicsJ2FiJywnYiddIik7CisKK3ZhciByZWdleHAyMiA9IC8oPzpefDspXHMqYWJjPShb
XjtdKikvOworc2hvdWxkQmVOdWxsKCJyZWdleHAyMi5leGVjKCdhYmNkbHNrZmdqZHNsa2ZnJyki
KTsKKwordmFyIHJlZ2V4cDIzID0gLyJbXjwiXSoifCdbXjwnXSonLzsKK3Nob3VsZEJlKCJyZWdl
eHAyMy5leGVjKCc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIicp
IiwgIlsnXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCInXSIpOworCitzaG91bGRCZSgi
J0hpIEJvYicubWF0Y2goLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvKSIsICJbJ0JvYics
dW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRlZmluZWRdIik7CisKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75323</attachid>
            <date>2010-12-01 14:41:01 -0800</date>
            <delta_ts>2010-12-02 15:48:49 -0800</delta_ts>
            <desc>Updated Proposed Patch</desc>
            <filename>anti-pasta3b.patch</filename>
            <type>text/plain</type>
            <size>91768</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDEwLTEyLTAxICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZXMgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgYnJh
bmNoZXMgdG8gYnJhbmNoZXMgaW4gSklUJ2VkCisgICAgICAgIHBhcmVudGhlc2VzIGJhY2t0cmFj
ayBwcm9jZXNzaW5nLiAgVGhlIGNoYW5nZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAg
ICAtIFRha2luZyB0aGUgYmFja3RyYWNraW5nIHByb2Nlc3Npbmcgb3V0IG9mIGxpbmUgYW5kIGFk
ZGluZyBpdCBhcworICAgICAgICAgIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgSklUJ2VkIHJvdXRp
bmUuCisgICAgICAgIC0gQWxsb3cgYmFja3RyYWNrcyB0byBiZSBkaXJlY3QgdmlhIGFuIGluZGly
ZWN0IGJyYW5jaCBmb3IgYW4gYWRkcmVzcworICAgICAgICAgIHB1c2hlZCBvbnRvIHRoZSBzdGFj
ay4gIElmIHRoZSB1c2Ugb2YgYW4gaW5kaXJlY3QgYnJhbmNoIGlzIGZyb20gYQorICAgICAgICAg
IGNvbmRpdGlvbmFsIGp1bXAsIHRoZW4gd2UgZW1pdCBhIHRyYW1wb2xpbmUgYXQgdGhlIGVuZCBv
ZiB0aGUgCisgICAgICAgICAgcm91dGluZS4KKyAgICAgICAgLSBQcm9wb2dhdGUgYmFja3RyYWNr
cyBpbnN0ZWFkIG9mIGFkZGluZyB0cmFtcG9saW5lcy4gIEJhY2t0cmFja3MgYXJlCisgICAgICAg
ICAgcHJvcG9nYXRlZCB0byB3aGVyZSB0aGV5IGFyZSB1c2VkLiAgVGhpcyBjaGFuZ2UgYWxzbyBl
bGltaW5hdGVkIAorICAgICAgICAgIHRyYW1wb2xpbmUgYnJhbmNoIGNvZGUgdGhhdCBhcmVuJ3Qg
dXNlZC4KKyAgICAgICAgLSBBZGRlZCBnbG9iYWwgZXhwcmVzc2lvbiBzdGF0ZSB0byBrZWVwIHRy
YWNrIG9mIHBhcmVudGhlc2VzIHRhaWwKKyAgICAgICAgICBjb2RlIGFuZCBpbmRpcmVjdCBicmFu
Y2hlcy4KKyAgICAgICAgT3RoZXIgY2hhbmdlcyBtYWRlIHRvIHN1cHBvcnQgdGhlc2UgY2hhbmdl
cy4KKyAgICAgICAgLSBTcGxpdCBpbnZlcnRPckNhcHR1cmUgZmxhZyBvbiBQYXR0ZXJucyB0byB0
d28gc2VwYXJhdGUgZmxhZ3MuICBBZGRlZAorICAgICAgICAgIGdldHRlcnMgZm9yIHRoZXNlIGZs
YWdzLiAgUmlwcGxlZCB0aGVzZSBjaGFuZ2VzIHRvIGJvdGggdGhlIEpJVCAKKyAgICAgICAgICBh
bmQgaW50ZXJwcmV0ZXIgY29kZS4KKyAgICAgICAgLSBTcGxpdCBCYWNrdHJhY2tEZXN0aW5hdGlv
biBvdXQgb2ZmIFRlcm1HZW5lcmF0aW9uU3RhdGUgc3RydWN0LgorICAgICAgICAgIFRoaXMgaXMg
ZG9uZSB0byBob2xkIHJlZmVyZW5jZXMgdG8gYSBiYWNrdHJhY2sgZm9yIGxhdGVyIGNvZGUKKyAg
ICAgICAgICBnZW5lcmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTAyOTUKKworICAgICAgICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBEc3Q6OmlzU2V0KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6
OkptcERzdDo6aXNTZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjppc1Nl
dCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0cjo6
aXNVc2VkKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyOjp1c2VkKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Q6OmNsZWFyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpKbXBEc3Q6OmlzU2V0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Sm1wRHN0Ojpp
c1NldCk6CisgICAgICAgICogeWFyci9SZWdleENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5C
ZWdpbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjphdG9t
UGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQ
YXR0ZXJuQ29uc3RydWN0b3I6OmF0b21CYWNrUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKToK
KyAgICAgICAgKiB5YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc09uY2VCZWdpbik6CisgICAgICAgIChKU0M6
OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzVGVybWluYWxCZWdpbik6CisgICAg
ICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJl
Z2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGV0aWNh
bEFzc2VydGlvbkJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9t
UGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21w
aWxlcjo6YXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVuZCk6CisgICAgICAgIChKU0M6OllhcnI6
OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzT25jZUVuZCk6CisgICAgICAgIChKU0M6Ollh
cnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQpOgorICAgICAgICAo
SlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmVtaXREaXNqdW5jdGlvbik6CisgICAgICAgICogeWFy
ci9SZWdleEludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpCeXRl
VGVybSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OmludmVydCk6CisgICAgICAgIChKU0M6OllhcnI6
OkJ5dGVUZXJtOjpjYXB0dXJlKToKKyAgICAgICAgKiB5YXJyL1JlZ2V4SklULmNwcDoKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkluZGlyZWN0SnVtcEVudHJ5OjpJbmRpcmVj
dEp1bXBFbnRyeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpJbmRpcmVj
dEp1bXBFbnRyeTo6YWRkSnVtcCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9y
OjpHZW5lcmF0aW9uU3RhdGU6OkdlbmVyYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpHZW5lcmF0aW9uU3RhdGU6OmFkZEluZGlyZWN0SnVtcEVudHJ5KToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6ZW1p
dEluZGlyZWN0SnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OkdlbmVyYXRpb25TdGF0ZTo6YWRkUGFyZW50aGVzZXNUYWlsKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6ZW1pdFBhcmVudGhlc2VzVGFpbCk6
CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpHZW5lcmF0aW9uU3RhdGU6OmFk
ZEp1bXBUb05leHRJbnRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0
b3I6OkdlbmVyYXRpb25TdGF0ZTo6YWRkSnVtcHNUb05leHRJbnRlcmF0aW9uKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6YWRkRGF0YUxhYmVs
VG9OZXh0SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6Okdl
bmVyYXRpb25TdGF0ZTo6bGlua1RvTmV4dEl0ZXJhdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6QmFja3RyYWNrRGVzdGluYXRp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGlu
YXRpb246OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0
cmFja0Rlc3RpbmF0aW9uOjpjbGVhckRhdGFMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6aGF2ZURlc3RpbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpp
c1N0YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0
cmFja0Rlc3RpbmF0aW9uOjppc0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5l
cmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjppc0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpoYXZlRGF0YUxhYmVs
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0
aW9uOjpjb3B5VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpjb3B5VG8pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OmFkZEJhY2t0cmFja0p1bXApOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OnNldFN0
YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFj
a0Rlc3RpbmF0aW9uOjpzZXRMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0TmV4dEJhY2t0cmFja0xhYmVsKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRC
YWNrdHJhY2tUb0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRCYWNrdHJhY2tKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0QmFja3RyYWNr
U291cmNlTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3Ry
YWNrRGVzdGluYXRpb246OnNldERhdGFMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4
R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0U3ViRGF0YUxhYmVsUHRyKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjps
aW5rVG9OZXh0QmFja3RyYWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpnZXRTdGFja09mZnNldCk6CisgICAgICAgIChKU0M6Ollh
cnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6Z2V0TGFiZWwpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246Omdl
dEJhY2t0cmFja0p1bXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpnZXREYXRhTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpS
ZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246Omp1bXBUb0JhY2t0cmFjayk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6
bGlua0RhdGFMYWJlbFRvSGVyZUlmRXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhH
ZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhp
c3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3Rp
bmF0aW9uOjpsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpsaW5rQWx0ZXJuYXRpdmVCYWNr
dHJhY2tzVG8pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVy
YXRpb25TdGF0ZTo6VGVybUdlbmVyYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpyZXNldEFsdGVybmF0aXZlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6Omlz
TGFzdEFsdGVybmF0aXZlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRl
cm1HZW5lcmF0aW9uU3RhdGU6OmNsZWFyQmFja3RyYWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6Omp1bXBUb0JhY2t0cmFjayk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpw
bGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhH
ZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmxpbmtEYXRhTGFiZWxUb0JhY2t0cmFja0lm
RXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0
aW9uU3RhdGU6OmFkZEJhY2t0cmFja0p1bXApOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6c2V0RGF0YUxhYmVsUHRyKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2tU
cmFja1N0YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRl
cm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2t0cmFja0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmxpbmtBbHRlcm5hdGl2ZUJh
Y2t0cmFja3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVy
YXRpb25TdGF0ZTo6bGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2t0cmFja0xp
bmspOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25T
dGF0ZTo6Y2hhaW5CYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0
b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmNoYWluQmFja3RyYWNrSnVtcHMpOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6Z2V0QmFja3Ry
YWNrRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVy
bUdlbmVyYXRpb25TdGF0ZTo6cHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbSk6CisgICAgICAgIChK
U0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6OlBhcmVudGhlc2VzVGFp
bCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6
OnByb2Nlc3NCYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OlBhcmVudGhlc2VzVGFpbDo6c2V0TmV4dEl0ZXJhdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6OmdlbmVyYXRlQ29kZSk6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkJPTCk6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkVPTCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbldvcmRC
b3VuZGFyeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBh
dHRlcm5DaGFyYWN0ZXJTaW5nbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcik6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZCk6CisgICAgICAgIChK
U0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkp
OgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hh
cmFjdGVyTm9uR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6Omdl
bmVyYXRlQ2hhcmFjdGVyQ2xhc3NTaW5nbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NHcmVlZHkpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc05vbkdy
ZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhcmVu
dGhlc2VzRGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
Z2VuZXJhdGVQYXJlbnRoZXNlc1NpbmdsZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2Vu
ZXJhdG9yOjpnZW5lcmF0ZVBhcmVudGhlc2VzR3JlZWR5Tm9CYWNrdHJhY2spOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlRGlzanVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Y29tcGlsZSk6CisgICAg
ICAgICogeWFyci9SZWdleFBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVyblRl
cm06OlBhdHRlcm5UZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVyblRlcm06OmludmVy
dCk6CisgICAgICAgIChKU0M6OllhcnI6OlBhdHRlcm5UZXJtOjpjYXB0dXJlKToKKwogMjAxMC0x
MS0zMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGlzVXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KICAgICAgICAgICAgIHZvaWQgdXNlZCgpIHsg
bV91c2VkID0gdHJ1ZTsgfQogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgSm1wRHN0KGlu
dCBvZmZzZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAkocmV2aXNpb24gNzMwNDYpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDYgKzU1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgfQogCiAgICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9Cisg
ICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9CiAg
ICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIEptcERzdChpbnQgb2Zmc2V0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbC5pc1VzZWQoKTsgfQorICAg
ICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbC5pc1NldCgpOyB9CiAgICAg
ICAgIHZvaWQgdXNlZCgpIHsgbV9sYWJlbC51c2VkKCk7IH0KICAgICBwcml2YXRlOgogICAgICAg
ICBKbXBEc3QgbV9sYWJlbDsKQEAgLTI2NCw2ICsyNjUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgYm9vbCBpc1VzZWQoKSB7IHJldHVybiBtX2xh
YmVsLmlzVXNlZCgpOyB9CisgICAgICAgIHZvaWQgdXNlZCgpIHsgbV9sYWJlbC51c2VkKCk7IH0K
KyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wRHN0IG1fbGFiZWw7CiAgICAgfTsK
QEAgLTQxMCw2ICs0MTQsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICFtX2p1bXBz
LnNpemUoKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fanVtcHMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgY29uc3QgSnVtcFZlY3RvciYganVtcHMoKSB7IHJldHVybiBtX2p1bXBzOyB9CiAK
ICAgICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01JUFNBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KIAogICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQor
ICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQog
ICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KICAgICBwcml2YXRlOgogICAg
ICAgICBKbXBEc3QoaW50IG9mZnNldCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Y
ODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZWQ7IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIChtX29mZnNldCAhPSAt
MSk7IH0KICAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CiAgICAgcHJpdmF0
ZToKICAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJy
L1JlZ2V4Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVn
ZXhDb21waWxlci5jcHAJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUveWFyci9S
ZWdleENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDcgKzQ1OSw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzRGlzanVuY3Rpb24g
PSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRpdmUpOwogICAgICAgICBtX3BhdHRl
cm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBhcmVudGhlc2VzRGlzanVuY3Rpb24pOwotICAgICAg
ICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVybShQYXR0ZXJuVGVybTo6
VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0Rpc2p1
bmN0aW9uLCBjYXB0dXJlKSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5k
KFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuLCBzdWJw
YXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGNhcHR1cmUsIGZhbHNlKSk7CiAgICAg
ICAgIG1fYWx0ZXJuYXRpdmUgPSBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLT5hZGROZXdBbHRlcm5h
dGl2ZSgpOwogICAgIH0KIApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogcGFyZW50aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBQYXR0
ZXJuRGlzanVuY3Rpb24obV9hbHRlcm5hdGl2ZSk7CiAgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1
bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0gICAgICAgIG1fYWx0ZXJu
YXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbiwgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVybnMgKyAxLCBwYXJlbnRo
ZXNlc0Rpc2p1bmN0aW9uLCBpbnZlcnQpKTsKKyAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJt
cy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0
aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDEsIHBhcmVudGhlc2VzRGlzanVuY3Rp
b24sIGZhbHNlLCBpbnZlcnQpKTsKICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9IHBhcmVudGhlc2Vz
RGlzanVuY3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CiAgICAgICAgIG1faW52ZXJ0UGFyZW50
aGV0aWNhbEFzc2VydGlvbiA9IGludmVydDsKICAgICB9CkBAIC01MjAsNyArNTIwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBjdXJyZW50QWx0ZXJuYXRpdmUt
Pmxhc3RUZXJtKCk7CiAgICAgICAgICAgICBBU1NFUlQoKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybikgfHwgKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24pKTsKIAotICAgICAgICAgICAgaWYgKCh0ZXJt
LnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4pICYmIHRlcm0u
aW52ZXJ0T3JDYXB0dXJlICYmIChzdWJwYXR0ZXJuSWQgPT0gdGVybS5zdWJwYXR0ZXJuSWQpKSB7
CisgICAgICAgICAgICBpZiAoKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhl
c2VzU3VicGF0dGVybikgJiYgdGVybS5jYXB0dXJlKCkgJiYgKHN1YnBhdHRlcm5JZCA9PSB0ZXJt
LnN1YnBhdHRlcm5JZCkpIHsKICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1z
LmFwcGVuZChQYXR0ZXJuVGVybTo6Rm9yd2FyZFJlZmVyZW5jZSgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC04NDUsNyArODQ1LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVy
bTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb246Ci0gICAgICAgICAgICAgICAgaWYgKHRlcm0u
aW52ZXJ0T3JDYXB0dXJlKQorICAgICAgICAgICAgICAgIGlmICh0ZXJtLmludmVydCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVy
blRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm46CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95
YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lh
cnIvUmVnZXhJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENv
cmUveWFyci9SZWdleEludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyNCw3ICsx
NTI0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9u
Y2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQ
YXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW4sIHN1YnBhdHRlcm5JZCwgY2FwdHVyZSwgZmFs
c2UsIGlucHV0UG9zaXRpb24pKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVM
b2NhdGlvbjsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVy
bTo6QWx0ZXJuYXRpdmVCZWdpbigpKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gYWx0
ZXJuYXRpdmVGcmFtZUxvY2F0aW9uOwpAQCAtMTUzNyw3ICsxNTM3LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXpl
KCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShC
eXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW4sIHN1YnBhdHRl
cm5JZCwgY2FwdHVyZSwgaW5wdXRQb3NpdGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuVGVybWluYWxCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3Np
dGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rp
b24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpBbHRlcm5hdGl2
ZUJlZ2luKCkpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBhbHRlcm5hdGl2ZUZyYW1l
TG9jYXRpb247CkBAIC0xNTU0LDcgKzE1NTQsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaW50IGJl
Z2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVu
dGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBv
c2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRl
cm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW4sIHN1YnBhdHRl
cm5JZCwgY2FwdHVyZSwgZmFsc2UsIGlucHV0UG9zaXRpb24pKTsKICAgICAgICAgbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFt
ZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLmFwcGVuZChCeXRlVGVybTo6QWx0ZXJuYXRpdmVCZWdpbigpKTsKICAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5m
cmFtZUxvY2F0aW9uID0gYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uOwpAQCAtMTU2Nyw3ICsxNTY3
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
LmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdp
biwgc3VicGF0dGVybklkLCBpbnZlcnQsIDApKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRp
b25CZWdpbiwgc3VicGF0dGVybklkLCBmYWxzZSwgaW52ZXJ0LCAwKSk7CiAgICAgICAgIG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0u
ZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm06OkFsdGVybmF0aXZlQmVnaW4oKSk7CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0g
MV0uZnJhbWVMb2NhdGlvbiA9IGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbjsKQEAgLTE1ODQsMTAg
KzE1ODQsMTAgQEAgcHVibGljOgogCiAgICAgICAgIEFTU0VSVChtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbYmVnaW5UZXJtXS50eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2Vy
dGlvbkJlZ2luKTsKIAotICAgICAgICBib29sIGludmVydE9yQ2FwdHVyZSA9IG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgYm9vbCBp
bnZlcnQgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5pbnZlcnQoKTsKICAg
ICAgICAgdW5zaWduZWQgc3VicGF0dGVybklkID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Jl
Z2luVGVybV0uYXRvbS5zdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRp
b25FbmQsIHN1YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7Cisg
ICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06
OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kLCBzdWJwYXR0ZXJuSWQsIGZhbHNlLCBpbnZl
cnQsIGlucHV0UG9zaXRpb24pKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Jl
Z2luVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAg
ICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucGFyZW50aGVzZXNX
aWR0aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tlbmRUZXJtXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKQEAgLTE2NzksNyAr
MTY3OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBCeXRlVGVybSYgcGFyZW50aGVzZXNCZWdpbiA9
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dOwogCi0gICAgICAgIGJvb2wgaW52
ZXJ0T3JDYXB0dXJlID0gcGFyZW50aGVzZXNCZWdpbi5pbnZlcnRPckNhcHR1cmU7CisgICAgICAg
IGJvb2wgY2FwdHVyZSA9IHBhcmVudGhlc2VzQmVnaW4uY2FwdHVyZSgpOwogICAgICAgICB1bnNp
Z25lZCBzdWJwYXR0ZXJuSWQgPSBwYXJlbnRoZXNlc0JlZ2luLmF0b20uc3VicGF0dGVybklkOwog
CiAgICAgICAgIHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gbGFzdFN1YnBhdHRlcm5JZCAtIHN1
YnBhdHRlcm5JZCArIDE7CkBAIC0xNjkzLDcgKzE2OTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5zaHJpbmsoYmVnaW5UZXJtKTsKIAogICAgICAgICBtX2Fs
bFBhcmVudGhlc2VzSW5mby5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0gICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQ
YXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlv
biwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1
YnBhdHRlcm4sIHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgY2FwdHVyZSwg
aW5wdXRQb3NpdGlvbikpOwogCiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdp
blRlcm1dLmF0b20ucXVhbnRpdHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CiAgICAgICAgIG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRp
dHlUeXBlOwpAQCAtMTcwOCwxMCArMTcwOCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgQVNTRVJU
KG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLnR5cGUgPT0gQnl0ZVRlcm06OlR5
cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW4pOwogCi0gICAgICAgIGJvb2wgaW52ZXJ0
T3JDYXB0dXJlID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uaW52ZXJ0T3JD
YXB0dXJlOworICAgICAgICBib29sIGNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
YmVnaW5UZXJtXS5jYXB0dXJlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20uc3VicGF0dGVybklkOwogCi0g
ICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06
OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kLCBzdWJwYXR0ZXJuSWQsIGludmVydE9y
Q2FwdHVyZSwgaW5wdXRQb3NpdGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25j
ZUVuZCwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikpOwogICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnBhcmVudGhlc2Vz
V2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVy
bTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRp
b24gPSBmcmFtZUxvY2F0aW9uOwpAQCAtMTczMCwxMCArMTczMCwxMCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgQVNTRVJUKG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLnR5cGUgPT0g
Qnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luKTsKIAotICAg
ICAgICBib29sIGludmVydE9yQ2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdp
blRlcm1dLmludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgYm9vbCBjYXB0dXJlID0gbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uY2FwdHVyZSgpOwogICAgICAgICB1bnNpZ25lZCBz
dWJwYXR0ZXJuSWQgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnN1
YnBhdHRlcm5JZDsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5
dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxFbmQsIHN1
YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJl
bnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEVuZCwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxz
ZSwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVn
aW5UZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dp
ZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwpAQCAtMTgxNiw3ICsx
ODE2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAg
ICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAg
ICAgICAgICAgICAgICAgIGFzc2VydGlvbldvcmRCb3VuZGFyeSh0ZXJtLmludmVydE9yQ2FwdHVy
ZSwgdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpOworICAg
ICAgICAgICAgICAgICAgICBhc3NlcnRpb25Xb3JkQm91bmRhcnkodGVybS5pbnZlcnQoKSwgdGVy
bS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5
cGVQYXR0ZXJuQ2hhcmFjdGVyOgpAQCAtMTgyNCw3ICsxODI0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06
OlR5cGVDaGFyYWN0ZXJDbGFzczoKLSAgICAgICAgICAgICAgICAgICAgYXRvbUNoYXJhY3RlckNs
YXNzKHRlcm0uY2hhcmFjdGVyQ2xhc3MsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0ZXJtLmlucHV0
UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgdGVybS5mcmFtZUxvY2F0aW9u
LCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXRvbUNoYXJhY3RlckNsYXNzKHRlcm0uY2hhcmFjdGVyQ2xhc3MsIHRlcm0uaW52ZXJ0
KCksIHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCB0ZXJt
LmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVy
blRlcm06OlR5cGVCYWNrUmVmZXJlbmNlOgpAQCAtMTg0NCwxNyArMTg0NCwxNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uICs9IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFj
a0luZm9QYXJlbnRoZXNlc09uY2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBk
ZWxlZ2F0ZUVuZElucHV0T2Zmc2V0ID0gdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50
QWxyZWFkeUNoZWNrZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNP
bmNlQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0
dXJlLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENv
dW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNPbmNlQmVnaW4odGVybS5wYXJlbnRo
ZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uY2FwdHVyZSgpLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0
IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIGFs
dGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlz
anVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFk
eUNoZWNrZWQsIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNPbmNlRW5kKGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQs
IHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlw
ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5wYXJlbnRoZXNlcy5pc1Rl
cm1pbmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElu
cHV0T2Zmc2V0ID0gdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNr
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2lu
KHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmludmVydE9yQ2FwdHVyZSwgZGVs
ZWdhdGVFbmRJbnB1dE9mZnNldCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVy
bS5mcmFtZUxvY2F0aW9uLCB0ZXJtLmZyYW1lTG9jYXRpb24gKyBSZWdleFN0YWNrU3BhY2VGb3JC
YWNrVHJhY2tJbmZvUGFyZW50aGVzZXNPbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0
b21QYXJlbnRoZXNlc1Rlcm1pbmFsQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQs
IHRlcm0uY2FwdHVyZSgpLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJl
YWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0uZnJhbWVMb2NhdGlvbiAr
IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2UpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZW1pdERpc2p1bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVu
Y3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVj
a2VkQ291bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzVGVybWlu
YWxFbmQoZGVsZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1
YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRP
ZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5CZWdpbih0
ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVn
YXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0u
ZnJhbWVMb2NhdGlvbiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVz
ZXNTdWJwYXR0ZXJuQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uY2Fw
dHVyZSgpLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tl
ZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIDApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZW1pdERpc2p1bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3Vu
dEFscmVhZHlDaGVja2VkLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRo
ZXNlc1N1YnBhdHRlcm5FbmQodGVybS5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklkLCBkZWxl
Z2F0ZUVuZElucHV0T2Zmc2V0LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3Vu
dCwgdGVybS5xdWFudGl0eVR5cGUsIHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fY2Fs
bEZyYW1lU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4NjcsNyArMTg2Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb3VudEFscmVhZHlD
aGVja2VkID49ICh1bnNpZ25lZCl0ZXJtLmlucHV0UG9zaXRpb24pOwogICAgICAgICAgICAgICAg
ICAgICBpbnQgcG9zaXRpdmVJbnB1dE9mZnNldCA9IGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2Vk
IC0gdGVybS5pbnB1dFBvc2l0aW9uOwogCi0gICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRo
ZXRpY2FsQXNzZXJ0aW9uQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0u
aW52ZXJ0T3JDYXB0dXJlLCB0ZXJtLmZyYW1lTG9jYXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVn
aW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0KCksIHRlcm0uZnJh
bWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAg
ICAgZW1pdERpc2p1bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRD
b3VudEFscmVhZHlDaGVja2VkLCBwb3NpdGl2ZUlucHV0T2Zmc2V0LCB0cnVlKTsKICAgICAgICAg
ICAgICAgICAgICAgYXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQoMCwgdGVybS5mcmFtZUxv
Y2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0
ZXIuaAkocmV2aXNpb24gNzMwNDYpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJw
cmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNiBAQCBzdHJ1Y3QgQnl0ZVRlcm0g
ewogICAgICAgICBUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCwKICAgICAgICAgVHlwZUNo
ZWNrSW5wdXQsCiAgICAgfSB0eXBlOwotICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlOwogICAgIHVu
aW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIHVuaW9uIHsKQEAgLTExNCwxMCAr
MTEzLDE0IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIHVuc2lnbmVkIGNoZWNrSW5wdXRD
b3VudDsKICAgICB9OwogICAgIHVuc2lnbmVkIGZyYW1lTG9jYXRpb247CisgICAgYm9vbCBtX2Nh
cHR1cmUgOiAxOworICAgIGJvb2wgbV9pbnZlcnQgOiAxOwogICAgIGludCBpbnB1dFBvc2l0aW9u
OwogCiAgICAgQnl0ZVRlcm0oVUNoYXIgY2gsIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVM
b2NhdGlvbiwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlU
eXBlKQogICAgICAgICA6IGZyYW1lTG9jYXRpb24oZnJhbWVMb2NhdGlvbikKKyAgICAgICAgLCBt
X2NhcHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKHF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENv
dW50OgpAQCAtMTM5LDYgKzE0Miw4IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAKICAgICBCeXRlVGVy
bShVQ2hhciBsbywgVUNoYXIgaGksIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlv
biwgdW5zaWduZWQgcXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQog
ICAgICAgICA6IGZyYW1lTG9jYXRpb24oZnJhbWVMb2NhdGlvbikKKyAgICAgICAgLCBtX2NhcHR1
cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKHF1YW50aXR5VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OgpA
QCAtMTYxLDcgKzE2Niw4IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAKICAgICBCeXRlVGVybShDaGFy
YWN0ZXJDbGFzcyogY2hhcmFjdGVyQ2xhc3MsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCiAg
ICAgICAgIDogdHlwZShCeXRlVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzKQotICAgICAgICAsIGlu
dmVydE9yQ2FwdHVyZShpbnZlcnQpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAgICAg
ICAsIG1faW52ZXJ0KGludmVydCkKICAgICB7CiAgICAgICAgIGF0b20uY2hhcmFjdGVyQ2xhc3Mg
PSBjaGFyYWN0ZXJDbGFzczsKICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBRdWFudGlmaWVy
Rml4ZWRDb3VudDsKQEAgLTE2OSw5ICsxNzUsMTAgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAg
ICAgaW5wdXRQb3NpdGlvbiA9IGlucHV0UG9zOwogICAgIH0KIAotICAgIEJ5dGVUZXJtKFR5cGUg
dHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBCeXRlRGlzanVuY3Rpb24qIHBhcmVudGhlc2Vz
SW5mbywgYm9vbCBpbnZlcnRPckNhcHR1cmUsIGludCBpbnB1dFBvcykKKyAgICBCeXRlVGVybShU
eXBlIHR5cGUsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgQnl0ZURpc2p1bmN0aW9uKiBwYXJlbnRo
ZXNlc0luZm8sIGJvb2wgY2FwdHVyZSwgaW50IGlucHV0UG9zKQogICAgICAgICA6IHR5cGUodHlw
ZSkKLSAgICAgICAgLCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0T3JDYXB0dXJlKQorICAgICAgICAs
IG1fY2FwdHVyZShjYXB0dXJlKQorICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQogICAgIHsKICAg
ICAgICAgYXRvbS5zdWJwYXR0ZXJuSWQgPSBzdWJwYXR0ZXJuSWQ7CiAgICAgICAgIGF0b20ucGFy
ZW50aGVzZXNEaXNqdW5jdGlvbiA9IHBhcmVudGhlc2VzSW5mbzsKQEAgLTE4MiwxNSArMTg5LDE3
IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgCiAgICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCBib29s
IGludmVydCA9IGZhbHNlKQogICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAgLCBpbnZlcnRP
ckNhcHR1cmUoaW52ZXJ0KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAgICAgICAgLCBt
X2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBhdG9tLnF1YW50aXR5VHlwZSA9IFF1YW50
aWZpZXJGaXhlZENvdW50OwogICAgICAgICBhdG9tLnF1YW50aXR5Q291bnQgPSAxOwogICAgIH0K
IAotICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBib29sIGlu
dmVydE9yQ2FwdHVyZSwgaW50IGlucHV0UG9zKQorICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5z
aWduZWQgc3VicGF0dGVybklkLCBib29sIGNhcHR1cmUsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQ
b3MpCiAgICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZl
cnRPckNhcHR1cmUpCisgICAgICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgICAgICwgbV9p
bnZlcnQoaW52ZXJ0KQogICAgIHsKICAgICAgICAgYXRvbS5zdWJwYXR0ZXJuSWQgPSBzdWJwYXR0
ZXJuSWQ7CiAgICAgICAgIGF0b20ucXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7
CkBAIC0yMjgsNyArMjM3LDcgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAKICAgICBzdGF0aWMg
Qnl0ZVRlcm0gQmFja1JlZmVyZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBv
cykKICAgICB7Ci0gICAgICAgIHJldHVybiBCeXRlVGVybShUeXBlQmFja1JlZmVyZW5jZSwgc3Vi
cGF0dGVybklkLCBmYWxzZSwgaW5wdXRQb3MpOworICAgICAgICByZXR1cm4gQnl0ZVRlcm0oVHlw
ZUJhY2tSZWZlcmVuY2UsIHN1YnBhdHRlcm5JZCwgZmFsc2UsIGZhbHNlLCBpbnB1dFBvcyk7CiAg
ICAgfQogCiAgICAgc3RhdGljIEJ5dGVUZXJtIEJvZHlBbHRlcm5hdGl2ZUJlZ2luKGJvb2wgb25j
ZVRocm91Z2gpCkBAIC0yOTcsMTIgKzMwNiwxMiBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogCiAgICAg
Ym9vbCBpbnZlcnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGludmVydE9yQ2FwdHVyZTsKKyAg
ICAgICAgcmV0dXJuIG1faW52ZXJ0OwogICAgIH0KIAogICAgIGJvb2wgY2FwdHVyZSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICByZXR1cm4gbV9jYXB0
dXJlOwogICAgIH0KIH07CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCShyZXZpc2lv
biA3MzA0NikKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODgsNiArMjg4LDI3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2UKICAgICAgICAganVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFt
ZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpOwogICAgIH0KIAorICAgIHN0cnVjdCBJbmRpcmVj
dEp1bXBFbnRyeSB7CisgICAgICAgIEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZz
ZXQpCisgICAgICAgICAgICA6IG1fc3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZz
ZXQsIEp1bXAganVtcCkKKyAgICAgICAgICAgIDogbV9zdGFja09mZnNldChzdGFja09mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgYWRkSnVtcChqdW1wKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAganVtcCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9yZWxKdW1wcy5hcHBlbmQoanVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGludDMyX3QgbV9zdGFja09mZnNldDsKKyAgICAgICAgSnVtcExpc3QgbV9yZWxKdW1wczsKKyAg
ICB9OworICAgICAgICAKICAgICBzdHJ1Y3QgQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQgewog
ICAgICAgICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsOwogICAgICAgICBMYWJlbCBiYWNrdHJhY2tM
b2NhdGlvbjsKQEAgLTI5OSwxNiArMzIwLDQ0OSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIH0KICAgICB9OwogCisgICAgc3RydWN0IFBhcmVudGhl
c2VzVGFpbDsKKyAgICBzdHJ1Y3QgVGVybUdlbmVyYXRpb25TdGF0ZTsKKyAgICAKKyAgICBzdHJ1
Y3QgR2VuZXJhdGlvblN0YXRlIHsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW5kaXJl
Y3RKdW1wRW50cnkqLCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1aW50MzJfdD4gPiBJbmRpcmVjdEp1bXBIYXNoTWFwOworICAgICAgICAKKyAg
ICAgICAgR2VuZXJhdGlvblN0YXRlKCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1
bXAganVtcCkKKyAgICAgICAgeworICAgICAgICAgICAgSW5kaXJlY3RKdW1wSGFzaE1hcDo6aXRl
cmF0b3IgcmVzdWx0ID0gbV9pbmRpcmVjdEp1bXBNYXAuZmluZChzdGFja09mZnNldCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChzdGFja09mZnNldCA+PSAwKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBt
X2luZGlyZWN0SnVtcE1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBtX2luZGlyZWN0SnVtcE1h
cC5hZGQob2Zmc2V0LCBuZXcgSW5kaXJlY3RKdW1wRW50cnkoc3RhY2tPZmZzZXQsIGp1bXApKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNlY29uZC0+YWRkSnVt
cChqdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRJbmRpcmVjdEp1
bXBFbnRyeShpbnQzMl90IHN0YWNrT2Zmc2V0LCBKdW1wTGlzdCBqdW1wcykKKyAgICAgICAgewor
ICAgICAgICAgICAgSnVtcExpc3Q6Okp1bXBWZWN0b3IganVtcFZlY3RvciA9IGp1bXBzLmp1bXBz
KCk7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGp1bXBWZWN0b3Iuc2l6ZSgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAg
YWRkSW5kaXJlY3RKdW1wRW50cnkoc3RhY2tPZmZzZXQsIGp1bXBWZWN0b3JbaV0pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBqdW1wcy5lbXB0eSgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGVtaXRJbmRpcmVjdEp1bXBUYWJsZShNYWNyb0Fzc2VtYmxlciogbWFzbSkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChJbmRpcmVjdEp1bXBIYXNoTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9pbmRpcmVjdEp1bXBNYXAuYmVnaW4oKTsgaXRlciAhPSBtX2luZGlyZWN0SnVt
cE1hcC5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgSW5kaXJlY3RKdW1wRW50cnkq
IGluZEp1bXBFbnRyeSA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBpbmRKdW1wRW50
cnktPm1fcmVsSnVtcHMubGluayhtYXNtKTsKKyAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGluZEp1bXBFbnRyeS0+bV9zdGFja09mZnNldCkp
OworICAgICAgICAgICAgICAgIGRlbGV0ZSBpbmRKdW1wRW50cnk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBhcmVudGhlc2VzVGFpbCogYWRkUGFyZW50aGVz
ZXNUYWlsKFBhdHRlcm5UZXJtJiB0ZXJtKQorICAgICAgICB7CisgICAgICAgICAgICBQYXJlbnRo
ZXNlc1RhaWwqIHBhcmVudGhlc2VzVGFpbCA9IG5ldyBQYXJlbnRoZXNlc1RhaWwodGVybSk7Cisg
ICAgICAgICAgICBtX3BhcmVuVGFpbHMuYXBwZW5kKHBhcmVudGhlc2VzVGFpbCk7CisgICAgICAg
ICAgICBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb24uYXBwZW5kKHBhcmVudGhlc2VzVGFpbCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRoZXNlc1RhaWw7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW1pdFBhcmVudGhlc2VzVGFpbChSZWdleEdlbmVy
YXRvciogcmVHZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZlY3RvclNpemUg
PSBtX3BhcmVuVGFpbHMuc2l6ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBFbWl0
IGluIHJldmVyc2Ugb3JkZXIgc28gcGFyZW50VGFpbCBOIGNhbiBmYWxsIHRocm91Z2ggdG8gTi0x
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gdmVjdG9yU2l6ZTsgaW5kZXggPiAw
OyAtLWluZGV4KSB7CisgICAgICAgICAgICAgICAgSnVtcExpc3QganVtcHNUb05leHQ7CisgICAg
ICAgICAgICAgICAgbV9wYXJlblRhaWxzW2luZGV4LTFdLmdldCgpLT5nZW5lcmF0ZUNvZGUocmVH
ZW4sIGp1bXBzVG9OZXh0LCBpbmRleCA+IDEpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
IDEpCisgICAgICAgICAgICAgICAgICAgIGp1bXBzVG9OZXh0LmxpbmtUbyhyZUdlbi0+bGFiZWwo
KSwgcmVHZW4pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRk
SnVtcHNUb05leHRJbnRlcmF0aW9uKGp1bXBzVG9OZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fcGFyZW5UYWlscy5jbGVhcigpOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAg
CisgICAgICAgIHZvaWQgYWRkSnVtcFRvTmV4dEludGVyYXRpb24oSnVtcCBqdW1wKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbi5hcHBlbmQoanVtcCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSnVtcHNUb05leHRJbnRlcmF0aW9u
KEp1bXBMaXN0IGp1bXBzKQorICAgICAgICB7CisgICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50
ZXJhdGlvbi5hcHBlbmQoanVtcHMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGFkZERhdGFMYWJlbFRvTmV4dEl0ZXJhdGlvbihEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLmFwcGVuZChkYXRh
TGFiZWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGxpbmtUb05leHRJdGVy
YXRpb24oTGFiZWwgbGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlv
biA9IGxhYmVsOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9kYXRhUHRyc1RvTmV4dEl0ZXJhdGlvbi5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3Jk
KG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb25baV0sIG1fbmV4dEl0ZXJhdGlvbikpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLmNsZWFyKCk7CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcmVuVGFpbHNGb3JJdGVy
YXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0
aW9uW2ldLT5zZXROZXh0SXRlcmF0aW9uKG1fbmV4dEl0ZXJhdGlvbik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbi5jbGVhcigpOyAgICAgICAgICAg
IAorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsaW5rVG9OZXh0SXRlcmF0aW9uKFJlZ2V4R2Vu
ZXJhdG9yKiByZUdlbikKKyAgICAgICAgeworICAgICAgICAgICAgbV9qdW1wc1RvTmV4dEludGVy
YXRpb24ubGlua1RvKG1fbmV4dEl0ZXJhdGlvbiwgcmVHZW4pOworICAgICAgICB9ICAgICAgICAK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZD4gbV9i
YWNrdHJhY2tSZWNvcmRzOworICAgICAgICBJbmRpcmVjdEp1bXBIYXNoTWFwIG1faW5kaXJlY3RK
dW1wTWFwOworICAgICAgICBMYWJlbCBtX25leHRJdGVyYXRpb247CisgICAgICAgIFZlY3RvcjxP
d25QdHI8UGFyZW50aGVzZXNUYWlsPiA+IG1fcGFyZW5UYWlsczsKKyAgICAgICAgSnVtcExpc3Qg
bV9qdW1wc1RvTmV4dEludGVyYXRpb247CisgICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQdHI+IG1f
ZGF0YVB0cnNUb05leHRJdGVyYXRpb247CisgICAgICAgIFZlY3RvcjxQYXJlbnRoZXNlc1RhaWwq
PiBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb247CisgICAgfTsKKworICAgIHN0cnVjdCBCYWNrdHJh
Y2tEZXN0aW5hdGlvbiB7CisgICAgICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgICAgICBOb0Jh
Y2t0cmFjaywKKyAgICAgICAgICAgIEJhY2t0cmFja0xhYmVsLAorICAgICAgICAgICAgQmFja3Ry
YWNrU3RhY2tPZmZzZXQsCisgICAgICAgICAgICBCYWNrdHJhY2tKdW1wTGlzdCwKKyAgICAgICAg
ICAgIEJhY2t0cmFja0xpbmtlZAorICAgICAgICB9IEJhY2t0cmFja1R5cGU7CisgICAgICAgIAor
ICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbigpCisgICAgICAgICAgICA6IG1fYmFja3RyYWNr
VHlwZShOb0JhY2t0cmFjaykKKyAgICAgICAgICAgICwgbV9iYWNrdHJhY2tUb0xhYmVsKDApCisg
ICAgICAgICAgICAsIG1fc3ViRGF0YUxhYmVsUHRyKDApCisgICAgICAgICAgICAsIG1fbmV4dEJh
Y2t0cmFjaygwKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJjZUxhYmVsKDApCisgICAg
ICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlSnVtcHMoMCkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbihpbnQzMl90IHN0YWNrT2Zm
c2V0KSAKKyAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBlKEJhY2t0cmFja1N0YWNrT2Zmc2V0
KQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0KQorICAg
ICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9zdWJEYXRh
TGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCisgICAgICAgICAg
ICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9iYWNrdHJhY2tT
b3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJh
Y2t0cmFja0Rlc3RpbmF0aW9uKExhYmVsIGxhYmVsKSAKKyAgICAgICAgICAgIDogbV9iYWNrdHJh
Y2tUeXBlKEJhY2t0cmFja0xhYmVsKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja0xhYmVsKGxh
YmVsKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAgICAgICAgICwg
bV9zdWJEYXRhTGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCisg
ICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tTb3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFja1R5
cGUgPSBOb0JhY2t0cmFjazsKKyAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAg
ICAgICBtX25leHRCYWNrdHJhY2sgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGNsZWFyRGF0YUxhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9kYXRhTGFiZWxQ
dHIgPSBEYXRhTGFiZWxQdHIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBo
YXZlRGVzdGluYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fYmFja3Ry
YWNrVHlwZSAhPSBOb0JhY2t0cmFjayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgaXNTdGFja09mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9iYWNr
dHJhY2tUeXBlID09IEJhY2t0cmFja1N0YWNrT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBpc0xhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICht
X2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrTGFiZWwpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIGlzSnVtcExpc3QoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
KG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tKdW1wTGlzdCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaGF2ZURhdGFMYWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGFMYWJlbFB0ci5pc1VzZWQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBjb3B5VGFyZ2V0KEJhY2t0cmFja0Rlc3RpbmF0aW9uJiByaHMsIGJvb2wgY29w
eURhdGFMYWJlbCA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrVHlw
ZSA9IHJocy5tX2JhY2t0cmFja1R5cGU7CisgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUeXBl
ID09IEJhY2t0cmFja1N0YWNrT2Zmc2V0KQorICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU3Rh
Y2tPZmZzZXQgPSByaHMubV9iYWNrdHJhY2tTdGFja09mZnNldDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCkKKyAgICAgICAgICAgICAgICBt
X2JhY2t0cmFja0xhYmVsID0gcmhzLm1fYmFja3RyYWNrTGFiZWw7CisgICAgICAgICAgICBpZiAo
Y29weURhdGFMYWJlbCkKKyAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IHJocy5tX2Rh
dGFMYWJlbFB0cjsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMgPSByaHMubV9i
YWNrdHJhY2tTb3VyY2VKdW1wczsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlTGFiZWwg
PSByaHMubV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBjb3B5VG8oQmFja3RyYWNrRGVzdGluYXRpb24mIGxocykKKyAgICAgICAgeworICAg
ICAgICAgICAgbGhzLm1fYmFja3RyYWNrVHlwZSA9IG1fYmFja3RyYWNrVHlwZTsKKyAgICAgICAg
ICAgIGlmIChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpCisgICAgICAg
ICAgICAgICAgbGhzLm1fYmFja3RyYWNrU3RhY2tPZmZzZXQgPSBtX2JhY2t0cmFja1N0YWNrT2Zm
c2V0OworICAgICAgICAgICAgZWxzZSBpZiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0xh
YmVsKQorICAgICAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja0xhYmVsID0gbV9iYWNrdHJhY2tM
YWJlbDsKKyAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUp1bXBzID0gbV9iYWNrdHJh
Y2tTb3VyY2VKdW1wczsKKyAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUxhYmVsID0g
bV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgICAgIGxocy5tX2RhdGFMYWJlbFB0ciA9
IG1fZGF0YUxhYmVsUHRyOworICAgICAgICAgICAgbGhzLm1fYmFja1RyYWNrSnVtcHMgPSBtX2Jh
Y2tUcmFja0p1bXBzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEJhY2t0
cmFja0p1bXAoSnVtcCBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2tUcmFja0p1
bXBzLmFwcGVuZChqdW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0U3RhY2tPZmZz
ZXQoaW50MzJfdCBzdGFja09mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJh
Y2tUeXBlID0gQmFja3RyYWNrU3RhY2tPZmZzZXQ7CisgICAgICAgICAgICBtX2JhY2t0cmFja1N0
YWNrT2Zmc2V0ID0gc3RhY2tPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZv
aWQgc2V0TGFiZWwoTGFiZWwgbGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3Ry
YWNrVHlwZSA9IEJhY2t0cmFja0xhYmVsOworICAgICAgICAgICAgbV9iYWNrdHJhY2tMYWJlbCA9
IGxhYmVsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldE5leHRCYWNrdHJh
Y2tMYWJlbChMYWJlbCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbmV4dEJh
Y2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX25leHRCYWNrdHJhY2stPnNldExhYmVsKGxhYmVs
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tUb0xhYmVs
KExhYmVsKiBiYWNrdHJhY2tUb0xhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0
cmFja1RvTGFiZWwgPSBiYWNrdHJhY2tUb0xhYmVsOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIHNldEJhY2t0cmFja0p1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gQmFja3RyYWNrSnVtcExpc3Q7Cisg
ICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzID0ganVtcExpc3Q7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFja3RyYWNrU291cmNlTGFiZWwoTGFiZWwqIGJh
Y2t0cmFja1NvdXJjZUxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFja1Nv
dXJjZUxhYmVsID0gYmFja3RyYWNrU291cmNlTGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2V0RGF0YUxhYmVsKERhdGFMYWJlbFB0ciBkcCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fc3ViRGF0YUxhYmVsUHRyKSB7CisgICAgICAgICAgICAgICAgKm1fc3Vi
RGF0YUxhYmVsUHRyID0gZHA7CisgICAgICAgICAgICAgICAgbV9zdWJEYXRhTGFiZWxQdHItPnVz
ZWQoKTsKKyAgICAgICAgICAgICAgICBtX3N1YkRhdGFMYWJlbFB0ciA9IDA7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRyID0gZHA7CisgICAgICAg
ICAgICAgICAgbV9kYXRhTGFiZWxQdHIudXNlZCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFN1YkRhdGFMYWJlbFB0cihEYXRhTGFiZWxQdHIq
IHN1YkRhdGFMYWJlbFB0cikKKyAgICAgICAgeworICAgICAgICAgICAgbV9zdWJEYXRhTGFiZWxQ
dHIgPSBzdWJEYXRhTGFiZWxQdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtUb05l
eHRCYWNrdHJhY2soQmFja3RyYWNrRGVzdGluYXRpb24qIG5leHRCYWNrdHJhY2spCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fbmV4dEJhY2t0cmFjayA9IG5leHRCYWNrdHJhY2s7CisgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpbnQzMl90IGdl
dFN0YWNrT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYmFja3RyYWNr
VHlwZSA9PSBCYWNrdHJhY2tTdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNr
dHJhY2tTdGFja09mZnNldDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTGFiZWwgZ2V0
TGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9iYWNrdHJhY2tUeXBlID09
IEJhY2t0cmFja0xhYmVsKTsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFja0xhYmVsOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKdW1wTGlzdCYgZ2V0QmFja3RyYWNrSnVtcHMo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrVHJhY2tKdW1wczsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsUHRyJiBnZXREYXRhTGFiZWwoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhTGFiZWxQdHI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKE1hY3JvQXNzZW1ibGVyKiBtYXNt
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFi
ZWwtPmlzU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKCkubGlua1RvKCpt
X2JhY2t0cmFja1NvdXJjZUxhYmVsLCBtYXNtKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChtYXNtLT5qdW1w
KCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0YWNrT2Zmc2V0KCkpCisgICAgICAgICAg
ICAgICAgbWFzbS0+anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX2JhY2t0cmFj
a1N0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0xhYmVsKCkpCisgICAgICAg
ICAgICAgICAgbWFzbS0+anVtcCgpLmxpbmtUbyhtX2JhY2t0cmFja0xhYmVsLCBtYXNtKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZCht
YXNtLT5qdW1wKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGp1bXBUb0Jh
Y2t0cmFjayhSZWdleEdlbmVyYXRvciogcmVHZW4sIEp1bXAganVtcCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0
cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsLT5pc1NldCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAganVtcC5saW5rVG8oKm1fYmFja3RyYWNrU291cmNlTGFiZWwsIHJl
R2VuKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3Ry
YWNrU291cmNlSnVtcHMtPmFwcGVuZChqdW1wKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNT
dGFja09mZnNldCgpKQorICAgICAgICAgICAgICAgIHJlR2VuLT5tX2V4cHJlc3Npb25TdGF0ZS5h
ZGRJbmRpcmVjdEp1bXBFbnRyeShnZXRTdGFja09mZnNldCgpLCBqdW1wKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGlzTGFiZWwoKSkKKyAgICAgICAgICAgICAgICBqdW1wLmxpbmtUbyhnZXRMYWJl
bCgpLCByZUdlbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9iYWNrVHJh
Y2tKdW1wcy5hcHBlbmQoanVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
anVtcFRvQmFja3RyYWNrKFJlZ2V4R2VuZXJhdG9yKiByZUdlbiwgSnVtcExpc3QmIGp1bXBzKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwt
PmlzU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBqdW1wcy5saW5rVG8oKm1fYmFja3RyYWNr
U291cmNlTGFiZWwsIHJlR2VuKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChqdW1wcyk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkKKyAgICAgICAgICAgICAgICByZUdlbi0+bV9l
eHByZXNzaW9uU3RhdGUuYWRkSW5kaXJlY3RKdW1wRW50cnkoZ2V0U3RhY2tPZmZzZXQoKSwganVt
cHMpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNMYWJlbCgpKQorICAgICAgICAgICAgICAgIGp1
bXBzLmxpbmtUbyhnZXRMYWJlbCgpLCByZUdlbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcHMpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBsaW5rRGF0YUxhYmVsVG9IZXJlSWZFeGlzdHMoUmVnZXhHZW5lcmF0b3IqIHJl
R2VuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaGF2ZURhdGFMYWJlbCgpKSB7CisgICAg
ICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5h
cHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoZ2V0RGF0YUxhYmVsKCksIHJlR2VuLT5s
YWJlbCgpKSk7CisgICAgICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgYm9vbCBwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKFJlZ2V4R2VuZXJhdG9yKiBy
ZUdlbikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0cmFja1NvdXJj
ZUxhYmVsLT5pc1NldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVHZW4tPmp1bXAoKm1fYmFj
a3RyYWNrU291cmNlTGFiZWwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKHJlR2VuLT5qdW1wKCkpOworCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpc1N0YWNrT2Zmc2V0KCkpIHsKKyAgICAgICAgICAgICAgICByZUdlbi0+anVtcChBZGRy
ZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBnZXRTdGFja09mZnNldCgpKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpc0xhYmVsKCkpIHsKKyAgICAgICAgICAgICAgICByZUdlbi0+anVtcChnZXRMYWJl
bCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaGF2ZURhdGFMYWJlbCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlR2VuLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBw
ZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBnZXRMYWJlbCgp
KSk7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAgICAgICAg
ICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKFJlZ2V4R2VuZXJh
dG9yKiByZUdlbiwgYm9vbCBuZXh0SXRlcmF0aW9uID0gZmFsc2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIExhYmVsIGhlcmVMYWJlbCA9IHJlR2VuLT5sYWJlbCgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tUb0xhYmVsKSB7CisgICAgICAgICAgICAgICAgKm1f
YmFja3RyYWNrVG9MYWJlbCA9IGhlcmVMYWJlbDsKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a1RvTGFiZWwgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2JhY2tUcmFja0p1bXBzLmxpbmsocmVHZW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobmV4dEl0ZXJhdGlvbikKKyAgICAgICAgICAgICAgICByZUdlbi0+bV9leHByZXNzaW9uU3Rh
dGUubGlua1RvTmV4dEl0ZXJhdGlvbihoZXJlTGFiZWwpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaGF2ZURhdGFMYWJlbCgpKSB7CisgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhw
cmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJh
Y2tSZWNvcmQoZ2V0RGF0YUxhYmVsKCksIGhlcmVMYWJlbCkpOworICAgICAgICAgICAgICAgIC8v
IGRhdGEgbGFiZWwgY2xlYXJlZCBhcyBhIHJlc3VsdCBvZiB0aGUgY2xlYXIoKSBiZWxvdworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIGxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3NUbyhSZWdl
eEdlbmVyYXRvciogcmVHZW4sIExhYmVsIGxhYmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5saW5rVG8obGFiZWws
IHJlR2VuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5leHRJdGVyYXRpb24pCisg
ICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0YXRlLmxpbmtUb05leHRJdGVyYXRp
b24obGFiZWwpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaGF2ZURhdGFMYWJlbCgp
KSB7CisgICAgICAgICAgICAgICAgcmVHZW4tPm1fZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNr
UmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoZ2V0RGF0YUxhYmVsKCks
IGxhYmVsKSk7CisgICAgICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBCYWNrdHJhY2tU
eXBlIG1fYmFja3RyYWNrVHlwZTsKKyAgICAgICAgaW50MzJfdCBtX2JhY2t0cmFja1N0YWNrT2Zm
c2V0OworICAgICAgICBMYWJlbCBtX2JhY2t0cmFja0xhYmVsOworICAgICAgICBEYXRhTGFiZWxQ
dHIgbV9kYXRhTGFiZWxQdHI7CisgICAgICAgIExhYmVsKiBtX2JhY2t0cmFja1RvTGFiZWw7Cisg
ICAgICAgIERhdGFMYWJlbFB0ciogbV9zdWJEYXRhTGFiZWxQdHI7CisgICAgICAgIEJhY2t0cmFj
a0Rlc3RpbmF0aW9uKiBtX25leHRCYWNrdHJhY2s7CisgICAgICAgIExhYmVsKiBtX2JhY2t0cmFj
a1NvdXJjZUxhYmVsOworICAgICAgICBKdW1wTGlzdCogbV9iYWNrdHJhY2tTb3VyY2VKdW1wczsK
KyAgICAgICAgSnVtcExpc3QgbV9iYWNrVHJhY2tKdW1wczsKKyAgICB9OworICAgICAgICAKICAg
ICBzdHJ1Y3QgVGVybUdlbmVyYXRpb25TdGF0ZSB7CiAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3Rh
dGUoUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwgdW5zaWduZWQgY2hlY2tlZFRvdGFs
KQogICAgICAgICAgICAgOiBkaXNqdW5jdGlvbihkaXNqdW5jdGlvbikKICAgICAgICAgICAgICwg
Y2hlY2tlZFRvdGFsKGNoZWNrZWRUb3RhbCkKKyAgICAgICAgICAgICwgbV9saW5rZWRCYWNrdHJh
Y2soMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZXNldEFsdGVybmF0
aXZlKCkKICAgICAgICAgewotICAgICAgICAgICAgaXNCYWNrVHJhY2tHZW5lcmF0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLmNsZWFyKCk7CiAgICAgICAgICAgICBhbHQgPSAw
OwogICAgICAgICB9CiAgICAgICAgIGJvb2wgYWx0ZXJuYXRpdmVWYWxpZCgpCkBAIC0zMjMsNyAr
Nzc3LDExIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlc1thbHRd
OwogICAgICAgICB9Ci0KKyAgICAgICAgYm9vbCBpc0xhc3RBbHRlcm5hdGl2ZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAoYWx0ICsgMSkgPT0gZGlzanVuY3Rpb24tPm1fYWx0ZXJu
YXRpdmVzLnNpemUoKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdm9pZCByZXNldFRl
cm0oKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoYWx0ZXJuYXRpdmVWYWxpZCgpKTsK
QEAgLTM3NCw1MiArODMyLDEwNiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAgICAgICAgICAgICByZXR1cm4gdGVybSgpLmlucHV0UG9zaXRpb24gLSBjaGVja2Vk
VG90YWw7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhKdW1wIGp1
bXAsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICB2b2lkIGNsZWFyQmFja3RyYWNrKCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzQmFja1RyYWNrR2VuZXJhdGVkKQotICAgICAg
ICAgICAgICAgIGp1bXAubGlua1RvKGJhY2t0cmFja0xhYmVsLCBtYXNtKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBiYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcCk7CisgICAg
ICAgICAgICBtX2JhY2t0cmFjay5jbGVhcigpOworICAgICAgICAgICAgbV9saW5rZWRCYWNrdHJh
Y2sgPSAwOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKEp1bXBMaXN0
JiBqdW1wcywgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisgICAgICAgIAorICAgICAgICB2b2lkIGp1
bXBUb0JhY2t0cmFjayhNYWNyb0Fzc2VtYmxlciogbWFzbSkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGlzQmFja1RyYWNrR2VuZXJhdGVkKQotICAgICAgICAgICAgICAgIGp1bXBzLmxpbmtU
byhiYWNrdHJhY2tMYWJlbCwgbWFzbSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXBzKTsKKyAgICAgICAgICAgIG1fYmFja3RyYWNr
Lmp1bXBUb0JhY2t0cmFjayhtYXNtKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBKdW1wIGp1bXApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhyZUdlbiwganVt
cCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhSZWdleEdlbmVy
YXRvciogcmVHZW4sIEp1bXBMaXN0JiBqdW1wcykKKyAgICAgICAgeworICAgICAgICAgICAgbV9i
YWNrdHJhY2suanVtcFRvQmFja3RyYWNrKHJlR2VuLCBqdW1wcyk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgcGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhSZWdleEdlbmVy
YXRvciogcmVHZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFjay5w
bGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKHJlR2VuKTsKICAgICAgICAgfQotICAgICAgICBi
b29sIHBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisg
ICAgICAgIAorICAgICAgICBib29sIGxpbmtEYXRhTGFiZWxUb0JhY2t0cmFja0lmRXhpc3RzKFJl
Z2V4R2VuZXJhdG9yKiByZUdlbikKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzQmFja1Ry
YWNrR2VuZXJhdGVkKSB7Ci0gICAgICAgICAgICAgICAgbWFzbS0+anVtcChiYWNrdHJhY2tMYWJl
bCk7CisgICAgICAgICAgICBpZiAoKG1fYmFja3RyYWNrLmlzTGFiZWwoKSkgJiYgKG1fYmFja3Ry
YWNrLmhhdmVEYXRhTGFiZWwoKSkpIHsKKyAgICAgICAgICAgICAgICByZUdlbi0+bV9leHByZXNz
aW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1Jl
Y29yZChtX2JhY2t0cmFjay5nZXREYXRhTGFiZWwoKSwgbV9iYWNrdHJhY2suZ2V0TGFiZWwoKSkp
OworICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLmNsZWFyRGF0YUxhYmVsKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICB9ICAgICAgICAKKwogICAg
ICAgICB2b2lkIGFkZEJhY2t0cmFja0p1bXAoSnVtcCBqdW1wKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBiYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcCk7CisgICAgICAgICAgICBtX2JhY2t0cmFj
ay5hZGRCYWNrdHJhY2tKdW1wKGp1bXApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRE
YXRhTGFiZWxQdHIoRGF0YUxhYmVsUHRyIGRwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Jh
Y2t0cmFjay5zZXREYXRhTGFiZWwoZHApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRC
YWNrVHJhY2tTdGFja09mZnNldChpbnQzMl90IHN0YWNrT2Zmc2V0KQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2JhY2t0cmFjay5zZXRTdGFja09mZnNldChzdGFja09mZnNldCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFja3RyYWNrTGFiZWwoTGFiZWwgbGFiZWwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldExhYmVsKGxhYmVsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyhSZWdleEdl
bmVyYXRvciogcmVHZW4sIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2JhY2t0cmFjay5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHJlR2VuLCBu
ZXh0SXRlcmF0aW9uKTsKKyAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKFJlZ2V4R2Vu
ZXJhdG9yKiByZUdlbiwgTGFiZWwgbGFiZWwsIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5saW5rQWx0ZXJuYXRpdmVCYWNrdHJh
Y2tzVG8ocmVHZW4sIGxhYmVsLCBuZXh0SXRlcmF0aW9uKTsKICAgICAgICAgfQotICAgICAgICB2
b2lkIHNldEJhY2t0cmFja0dlbmVyYXRlZChMYWJlbCBsYWJlbCkKKworICAgICAgICB2b2lkIHNl
dEJhY2t0cmFja0xpbmsoQmFja3RyYWNrRGVzdGluYXRpb24qIGxpbmtlZEJhY2t0cmFjaykKICAg
ICAgICAgewotICAgICAgICAgICAgaXNCYWNrVHJhY2tHZW5lcmF0ZWQgPSB0cnVlOwotICAgICAg
ICAgICAgYmFja3RyYWNrTGFiZWwgPSBsYWJlbDsKKyAgICAgICAgICAgIG1fbGlua2VkQmFja3Ry
YWNrID0gbGlua2VkQmFja3RyYWNrOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0FsdGVy
bmF0aXZlQmFja3RyYWNrcyhNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgCisgICAgICAg
IHZvaWQgY2hhaW5CYWNrdHJhY2tzKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBmb2xsb3dvbkJhY2t0
cmFjaykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGlua2VkQmFja3RyYWNrKQorICAg
ICAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrLT5saW5rVG9OZXh0QmFja3RyYWNrKGZvbGxv
d29uQmFja3RyYWNrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjaGFpbkJh
Y2t0cmFja0p1bXBzKEp1bXBMaXN0KiBqdW1wTGlzdCkKICAgICAgICAgewotICAgICAgICAgICAg
aXNCYWNrVHJhY2tHZW5lcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJhY2tUcmFja0p1bXBz
LmxpbmsobWFzbSk7CisgICAgICAgICAgICBpZiAobV9saW5rZWRCYWNrdHJhY2sgJiYgIShtX2xp
bmtlZEJhY2t0cmFjay0+aGF2ZURlc3RpbmF0aW9uKCkpKQorICAgICAgICAgICAgICAgIG1fbGlu
a2VkQmFja3RyYWNrLT5zZXRCYWNrdHJhY2tKdW1wTGlzdChqdW1wTGlzdCk7CiAgICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oTGFiZWwgbGFiZWwsIE1h
Y3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICAKKyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRp
b24mIGdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkKICAgICAgICAgewotICAgICAgICAgICAgaXNC
YWNrVHJhY2tHZW5lcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJhY2tUcmFja0p1bXBzLmxp
bmtUbyhsYWJlbCwgbWFzbSk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2s7CiAgICAg
ICAgIH0KLSAgICAgICAgdm9pZCBwcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9tKFRlcm1HZW5lcmF0
aW9uU3RhdGUmIG5lc3RlZFBhcmVudGhlc2VzU3RhdGUsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQor
CisgICAgICAgIHZvaWQgcHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbShSZWdleEdlbmVyYXRvciog
cmVHZW4sIEJhY2t0cmFja0Rlc3RpbmF0aW9uJiBiYWNrdHJhY2ssIGJvb2wgZG9KdW1wID0gdHJ1
ZSkKICAgICAgICAgewotICAgICAgICAgICAganVtcFRvQmFja3RyYWNrKG5lc3RlZFBhcmVudGhl
c2VzU3RhdGUuYmFja1RyYWNrSnVtcHMsIG1hc20pOwotICAgICAgICAgICAgaWYgKG5lc3RlZFBh
cmVudGhlc2VzU3RhdGUuaXNCYWNrVHJhY2tHZW5lcmF0ZWQpCi0gICAgICAgICAgICAgICAgc2V0
QmFja3RyYWNrR2VuZXJhdGVkKG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuYmFja3RyYWNrTGFiZWwp
OworICAgICAgICAgICAgaWYgKGRvSnVtcCkKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5q
dW1wVG9CYWNrdHJhY2socmVHZW4sIGJhY2t0cmFjay5nZXRCYWNrdHJhY2tKdW1wcygpKTsKKyAg
ICAgICAgICAgIGlmIChiYWNrdHJhY2suaGF2ZURlc3RpbmF0aW9uKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9iYWNrdHJhY2suaGF2ZURhdGFMYWJlbCgpKQorICAgICAgICAgICAgICAgICAg
ICByZUdlbi0+bV9leHByZXNzaW9uU3RhdGUuYWRkRGF0YUxhYmVsVG9OZXh0SXRlcmF0aW9uKG1f
YmFja3RyYWNrLmdldERhdGFMYWJlbCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2JhY2t0cmFjay5jb3B5VGFyZ2V0KGJhY2t0cmFjaywgZG9KdW1wKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rp
b247CkBAIC00MjcsMTEgKzkzOSwxMTUgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZQogICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFsdDsKICAgICAgICAg
dW5zaWduZWQgdDsKLSAgICAgICAgSnVtcExpc3QgYmFja1RyYWNrSnVtcHM7Ci0gICAgICAgIExh
YmVsIGJhY2t0cmFja0xhYmVsOwotICAgICAgICBib29sIGlzQmFja1RyYWNrR2VuZXJhdGVkOwor
ICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiBtX2JhY2t0cmFjazsKKyAgICAgICAgQmFja3Ry
YWNrRGVzdGluYXRpb24qIG1fbGlua2VkQmFja3RyYWNrOworICAgICAgICAKICAgICB9OwogCisg
ICAgc3RydWN0IFBhcmVudGhlc2VzVGFpbCB7CisgICAgICAgIFBhcmVudGhlc2VzVGFpbChQYXR0
ZXJuVGVybSYgdGVybSkKKyAgICAgICAgICAgIDogbV90ZXJtKHRlcm0pCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBwcm9jZXNzQmFja3RyYWNrcyhSZWdleEdl
bmVyYXRvciogcmVHZW4sIFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBUZXJtR2VuZXJhdGlv
blN0YXRlJiBwYXJlbnRoZXNlc1N0YXRlLCBMYWJlbCBub25HcmVlZHlUcnlQYXJlbnRoZXNlcywg
TGFiZWwgZmFsbFRocm91Z2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbm9uR3JlZWR5VHJ5
UGFyZW50aGVzZXMgPSBub25HcmVlZHlUcnlQYXJlbnRoZXNlczsKKyAgICAgICAgICAgIG1fZmFs
bFRocm91Z2ggPSBmYWxsVGhyb3VnaDsKKworICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5n
ZXRCYWNrdHJhY2tEZXN0aW5hdGlvbigpLmNvcHlUbyhtX3BhcmVuQmFja3RyYWNrKTsKKyAgICAg
ICAgICAgIHN0YXRlLmNoYWluQmFja3RyYWNrcygmbV9iYWNrdHJhY2spOworICAgICAgICAgICAg
QmFja3RyYWNrRGVzdGluYXRpb24mIHN0YXRlQmFja3RyYWNrID0gc3RhdGUuZ2V0QmFja3RyYWNr
RGVzdGluYXRpb24oKTsKKyAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLmNvcHlUbyhtX2JhY2t0
cmFjayk7CisgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRCYWNrdHJhY2tUb0xhYmVsKCZt
X2JhY2t0cmFja1RvTGFiZWwpOworICAgICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGluaygm
bV9iYWNrdHJhY2spOworICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0U3ViRGF0YUxhYmVs
UHRyKCZtX3BhcmVuQmFja3RyYWNrLmdldERhdGFMYWJlbCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9kb0RpcmVjdEJhY2t0cmFjayA9IG1fcGFyZW5CYWNrdHJhY2suaGF2ZURlc3Rp
bmF0aW9uKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgobV90ZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB8fCAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFu
dGlmaWVyTm9uR3JlZWR5KSkKKyAgICAgICAgICAgICAgICBtX2RvRGlyZWN0QmFja3RyYWNrID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChtX2RvRGlyZWN0QmFja3RyYWNrKQorICAgICAgICAg
ICAgICAgIHN0YXRlLnByb3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20ocmVHZW4sIG1fcGFyZW5CYWNr
dHJhY2ssIGZhbHNlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRl
QmFja3RyYWNrLnNldEJhY2t0cmFja0p1bXBMaXN0KCZtX3BhdHRCYWNrdHJhY2tKdW1wcyk7Cisg
ICAgICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0QmFja3RyYWNrU291cmNlTGFiZWwoJm1f
YmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5jaGFpbkJhY2t0cmFja0p1bXBzKCZtX3BhdHRC
YWNrdHJhY2tKdW1wcyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldE5leHRJdGVyYXRp
b24oTGFiZWwgbmV4dEl0ZXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Jh
Y2t0cmFja1RvTGFiZWwuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1RvTGFi
ZWwgPSBuZXh0SXRlcmF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBnZW5lcmF0ZUNv
ZGUoUmVnZXhHZW5lcmF0b3IqIHJlR2VuLCBKdW1wTGlzdCYganVtcHNUb05leHQsIGJvb2wgbmV4
dEJhY2t0cmFja0ZhbGxUaHJvdWdoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBSZWdp
c3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAgICB1bnNpZ25lZCBwYXJl
bnRoZXNlc0ZyYW1lTG9jYXRpb24gPSBtX3Rlcm0uZnJhbWVMb2NhdGlvbjsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFtX2JhY2t0cmFjay5oYXZlRGVzdGluYXRpb24oKSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1RvTGFiZWwuaXNTZXQoKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRMYWJlbChtX2JhY2t0cmFja1RvTGFiZWwpOworICAg
ICAgICAgICAgICAgICAgICBuZXh0QmFja3RyYWNrRmFsbFRocm91Z2ggPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXRC
YWNrdHJhY2tKdW1wTGlzdCgmanVtcHNUb05leHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdo
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEg
ZmFpbHVyZSBBRlRFUiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUgLSBCYWNrdHJhY2sgdG8gdGhpcyBw
YXJlbgorICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFjay5saW5rRGF0YUxhYmVsVG9IZXJlSWZF
eGlzdHMocmVHZW4pOworCisgICAgICAgICAgICBtX2JhY2t0cmFja0Zyb21BZnRlclBhcmVucyA9
IHJlR2VuLT5sYWJlbCgpOworCisgICAgICAgICAgICBtX3BhdHRCYWNrdHJhY2tKdW1wcy5saW5r
KHJlR2VuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdGVybS5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
LTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRob3V0IHRoZSBwYXJl
bnMuCisgICAgICAgICAgICAgICAgcmVHZW4tPmxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFt
ZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2su
anVtcFRvQmFja3RyYWNrKHJlR2VuLCByZUdlbi0+YnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9y
YXJ5LCBJbW0zMigtMSkpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV90ZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhp
cyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhl
IHBhcmVucy4KKyAgICAgICAgICAgICAgICByZUdlbi0+bG9hZEZyb21GcmFtZShwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAgICByZUdlbi0+
YnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5LCBJbW0zMigtMSkpLmxpbmtUbyhtX25vbkdy
ZWVkeVRyeVBhcmVudGhlc2VzLCByZUdlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghbV9kb0RpcmVjdEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBt
X3BhcmVuQmFja3RyYWNrLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMocmVHZW4pOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBBIGZhaWx1cmUgV0lUSElOIHRoZSBwYXJlbnMganVt
cHMgaGVyZQorICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFjay5saW5rQWx0ZXJuYXRpdmVCYWNr
dHJhY2tzKHJlR2VuKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdGVybS5jYXB0
dXJlKCkpCisgICAgICAgICAgICAgICAgcmVHZW4tPnN0b3JlMzIoSW1tMzIoLTEpLCBBZGRyZXNz
KG91dHB1dCwgKG1fdGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2Yo
aW50KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV90ZXJtLnF1YW50aXR5VHlw
ZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgcmVHZW4tPnN0b3JlVG9G
cmFtZShJbW0zMigtMSksIHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAg
ICAgcmVHZW4tPmp1bXAoKS5saW5rVG8obV9mYWxsVGhyb3VnaCwgcmVHZW4pOworICAgICAgICAg
ICAgfSBlbHNlIGlmICghbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoKQorICAgICAgICAgICAgICAg
IG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhyZUdlbik7CisKKyAgICAgICAgICAgIGlmICgh
bV9kb0RpcmVjdEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXROZXh0
QmFja3RyYWNrTGFiZWwobV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBQYXR0ZXJuVGVybSYgbV90ZXJtOworICAgICAgICBMYWJlbCBtX25v
bkdyZWVkeVRyeVBhcmVudGhlc2VzOworICAgICAgICBMYWJlbCBtX2ZhbGxUaHJvdWdoOworICAg
ICAgICBMYWJlbCBtX2JhY2t0cmFja1RvTGFiZWw7CisgICAgICAgIExhYmVsIG1fYmFja3RyYWNr
RnJvbUFmdGVyUGFyZW5zOworICAgICAgICBKdW1wTGlzdCBtX3BhdHRCYWNrdHJhY2tKdW1wczsK
KyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9wYXJlbkJhY2t0cmFjazsKKyAgICAgICAg
QmFja3RyYWNrRGVzdGluYXRpb24gbV9iYWNrdHJhY2s7CisgICAgICAgIGJvb2wgbV9kb0RpcmVj
dEJhY2t0cmFjazsKKyAgICB9OworICAgIAorICAgIAogICAgIHZvaWQgZ2VuZXJhdGVBc3NlcnRp
b25CT0woVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCiAgICAgewogICAgICAgICBQYXR0ZXJu
VGVybSYgdGVybSA9IHN0YXRlLnRlcm0oKTsKQEAgLTQ0NSwxNSArMTA2MSwxNSBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgICAgIHJlYWRDaGFy
YWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSAtIDEsIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBt
YXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGlu
ZUNoYXJhY3RlckNsYXNzKCkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1
bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAK
ICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2UgYWx0ZXJuYXRp
dmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24pCi0gICAg
ICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2gzMihOb3RFcXVhbCwg
aW5kZXgsIEltbTMyKHN0YXRlLmNoZWNrZWRUb3RhbCkpLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBJ
bW0zMihzdGF0ZS5jaGVja2VkVG90YWwpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ3MCwx
NSArMTA4NiwxNSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAK
ICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVy
KTsKICAgICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3Qs
IG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFjdGVyQ2xhc3MoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayh0aGlzKTsKIAogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAodGVybS5pbnB1dFBvc2l0aW9uID09IHN0YXRl
LmNoZWNrZWRUb3RhbCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sobm90
QXRFbmRPZklucHV0KCksIHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayh0aGlzLCBub3RBdEVuZE9mSW5wdXQoKSk7CiAgICAgICAgICAgICAvLyBFcmssIHJlYWxs
eSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFybHkuIDotLwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCks
IHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNTEyLDIwICsxMTI4LDIwIEBAIGNsYXNzIFJlZ2V4R2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgLy8gV2UgZmFsbCB0aHJvdWdoIHRvIGhl
cmUgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIHdhcyBub3QgYSB3b3JkY2hhci4KICAgICAgICAgSnVt
cExpc3Qgbm9uV29yZENoYXJUaGVuV29yZENoYXI7CiAgICAgICAgIEp1bXBMaXN0IG5vbldvcmRD
aGFyVGhlbk5vbldvcmRDaGFyOwotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsK
KyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9u
V29yZGNoYXIoc3RhdGUsIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCBub25Xb3JkQ2hhclRo
ZW5Xb3JkQ2hhcik7CiAgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9uV29y
ZGNoYXIoc3RhdGUsIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLCBub25Xb3JkQ2hhclRoZW5Ob25X
b3JkQ2hhcik7CiAgICAgICAgICAgICBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5hcHBlbmQo
anVtcCgpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sobm9uV29y
ZENoYXJUaGVuTm9uV29yZENoYXIsIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2sodGhpcywgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogCiAgICAgICAgIC8vIFdlIGp1
bXAgaGVyZSBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIGEgd29yZGNoYXIuCiAgICAgICAgIG1h
dGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Xb3JkQ2hh
cjsKICAgICAgICAgSnVtcExpc3Qgd29yZENoYXJUaGVuTm9uV29yZENoYXI7Ci0gICAgICAgIGlm
ICh0ZXJtLmludmVydE9yQ2FwdHVyZSkgeworICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewog
ICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihzdGF0ZSwgd29yZENoYXJUaGVuTm9u
V29yZENoYXIsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKICAgICAgICAgICAgIHdvcmRDaGFyVGhl
bldvcmRDaGFyLmFwcGVuZChqdW1wKCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTMzLDcgKzEx
NDksNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
ICAgICAvLyBUaGlzIGNhbiBmYWxsLXRob3VnaCEKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayh3b3JkQ2hhclRoZW5Xb3JkQ2hhciwgdGhpcyk7CisgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCB3b3JkQ2hhclRoZW5Xb3JkQ2hhcik7CiAgICAgICAg
IAogICAgICAgICBub25Xb3JkQ2hhclRoZW5Xb3JkQ2hhci5saW5rKHRoaXMpOwogICAgICAgICB3
b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhci5saW5rKHRoaXMpOwpAQCAtNTQ3LDEwICsxMTYzLDEwIEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgaWYgKG1f
cGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewogICAgICAgICAgICAg
cmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAg
ICAgb3IzMihJbW0zMigzMiksIGNoYXJhY3Rlcik7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9C
YWNrdHJhY2soYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9M
b3dlcihjaCkpKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhp
cywgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihj
aCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5t
X2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRvTG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIo
Y2gpKSk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcElmQ2hhck5vdEVx
dWFscyhjaCwgc3RhdGUuaW5wdXRPZmZzZXQoKSksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUu
anVtcFRvQmFja3RyYWNrKHRoaXMsIGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHN0YXRlLmlucHV0
T2Zmc2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTczLDkgKzExODksOSBAQCBjbGFz
cyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGlmIChtYXNrKSB7
CiAgICAgICAgICAgICBsb2FkMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKEJhc2VJbmRleChpbnB1
dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFyKSks
IGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBvcjMyKEltbTMyKG1hc2spLCBjaGFyYWN0ZXIpOwot
ICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFy
YWN0ZXIsIEltbTMyKGNoUGFpciB8IG1hc2spKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3RlciwgSW1tMzIo
Y2hQYWlyIHwgbWFzaykpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFsLCBCYXNl
SW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAqIHNpemVv
ZihVQ2hhcikpLCBJbW0zMihjaFBhaXIpKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzJXaXRoVW5hbGlnbmVkSGFsZldvcmRzKE5vdEVxdWFs
LCBCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUuaW5wdXRPZmZzZXQoKSAq
IHNpemVvZihVQ2hhcikpLCBJbW0zMihjaFBhaXIpKSk7CiAgICAgfQogCiAgICAgdm9pZCBnZW5l
cmF0ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZChUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAg
LTU5MiwxMCArMTIwOCwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlCiAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlzQVNDSUlBbHBoYShj
aCkpIHsKICAgICAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIs
IFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBz
aXplb2YoVUNoYXIpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9yMzIoSW1tMzIoMzIpLCBj
aGFyYWN0ZXIpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5v
dEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSksIHRoaXMpOwor
ICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDMyKE5vdEVxdWFs
LCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmlj
b2RlOjp0b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAg
c3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDE2KE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQs
IGNvdW50UmVnaXN0ZXIsIFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVh
bnRpdHlDb3VudCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2gpKSwgdGhpcyk7CisgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMTYoTm90RXF1YWwsIEJhc2VJ
bmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChzdGF0ZS5pbnB1dE9mZnNldCgp
ICsgdGVybS5xdWFudGl0eUNvdW50KSAqIHNpemVvZihVQ2hhcikpLCBJbW0zMihjaCkpKTsKICAg
ICAgICAgfQogICAgICAgICBhZGQzMihJbW0zMigxKSwgY291bnRSZWdpc3Rlcik7CiAgICAgICAg
IGJyYW5jaDMyKE5vdEVxdWFsLCBjb3VudFJlZ2lzdGVyLCBpbmRleCkubGlua1RvKGxvb3AsIHRo
aXMpOwpAQCAtNjMyLDcgKzEyNDgsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7CiAgICAgICAg
IGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLSAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVy
KSwgdGhpcyk7CisgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2hUZXN0
MzIoWmVybywgY291bnRSZWdpc3RlcikpOwogICAgICAgICBzdWIzMihJbW0zMigxKSwgY291bnRS
ZWdpc3Rlcik7CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBpbmRleCk7CiAKQEAgLTY0MCw3ICsx
MjU2LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAg
ICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwogCi0g
ICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdpbik7CisgICAg
ICAgIHN0YXRlLnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKICAgICB9CiAKICAg
ICB2b2lkIGdlbmVyYXRlUGF0dGVybkNoYXJhY3Rlck5vbkdyZWVkeShUZXJtR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKQEAgLTY1Niw3ICsxMjcyLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExhYmVsIGhhcmRGYWlsKHRoaXMpOwogICAgICAg
ICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7
CiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7CiAgICAgICAgIGxvYWRGcm9t
RnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKQEAgLTY3OSw3ICsxMjk1
LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBm
aXJzdFRpbWVEb05vdGhpbmcubGluayh0aGlzKTsKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50
UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3Ry
YWNrR2VuZXJhdGVkKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNr
TGFiZWwoYmFja3RyYWNrQmVnaW4pOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0
ZXJDbGFzc1NpbmdsZShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAgLTY5MSwxMCArMTMw
NywxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
IHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAg
bWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJD
bGFzcyk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAg
c3RhdGUuanVtcFRvQmFja3RyYWNrKG1hdGNoRGVzdCwgdGhpcyk7CisgICAgICAgIGlmICh0ZXJt
LmludmVydCgpKQorICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNo
RGVzdCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7
CiAgICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTcxMywxMCArMTMyOSwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlCiAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIsIFRpbWVz
VHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBzaXplb2Yo
VUNoYXIpKSwgY2hhcmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0
ZXIsIG1hdGNoRGVzdCwgdGVybS5jaGFyYWN0ZXJDbGFzcyk7CiAKLSAgICAgICAgaWYgKHRlcm0u
aW52ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKG1hdGNo
RGVzdCwgdGhpcyk7CisgICAgICAgIGlmICh0ZXJtLmludmVydCgpKQorICAgICAgICAgICAgc3Rh
dGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG1hdGNoRGVzdCk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAgICAgICAgICAgICBtYXRjaERlc3QubGlu
ayh0aGlzKTsKICAgICAgICAgfQogCkBAIC03MzYsNyArMTM1Miw3IEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgTGFiZWwgbG9vcCh0aGlzKTsKICAg
ICAgICAgZmFpbHVyZXMuYXBwZW5kKGF0RW5kT2ZJbnB1dCgpKTsKIAotICAgICAgICBpZiAodGVy
bS5pbnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAg
ICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hhcmFjdGVyKTsKICAg
ICAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBmYWlsdXJlcywgdGVybS5j
aGFyYWN0ZXJDbGFzcyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NTcsNyArMTM3Myw3IEBAIGNs
YXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICBMYWJlbCBi
YWNrdHJhY2tCZWdpbih0aGlzKTsKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9j
YXRpb24sIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJh
bmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpLCB0aGlzKTsKKyAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lzdGVyKSk7CiAg
ICAgICAgIHN1YjMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgc3ViMzIoSW1t
MzIoMSksIGluZGV4KTsKIApAQCAtNzY1LDcgKzEzODEsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0
ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2Vu
ZXJhdGVkKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwo
YmFja3RyYWNrQmVnaW4pOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFz
c05vbkdyZWVkeShUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKQEAgLTc4MCw3ICsxMzk2LDcg
QEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExh
YmVsIGhhcmRGYWlsKHRoaXMpOwogICAgICAgICBzdWIzMihjb3VudFJlZ2lzdGVyLCBpbmRleCk7
Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVn
aW4odGhpcyk7CiAgICAgICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3Vu
dFJlZ2lzdGVyKTsKQEAgLTc5Miw3ICsxNDA4LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZQogICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0
KCksIGNoYXJhY3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBt
YXRjaERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVy
dE9yQ2FwdHVyZSkKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpCiAgICAgICAgICAgICBtYXRj
aERlc3QubGlua1RvKGhhcmRGYWlsLCB0aGlzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBqdW1wKGhhcmRGYWlsKTsKQEAgLTgwNSw3ICsxNDIxLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBmaXJzdFRpbWVEb05vdGhpbmcubGluayh0
aGlzKTsKICAgICAgICAgc3RvcmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2Nh
dGlvbik7CiAKLSAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0Jl
Z2luKTsKKyAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOwog
ICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKFBhdHRlcm5U
ZXJtJiBwYXJlbnRoZXNlc1Rlcm0sIFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCB1bnNpZ25l
ZCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pCkBAIC04MzcsOSArMTQ1Myw5IEBAIGNsYXNzIFJl
Z2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBza2lwLmxpbmsodGhpcyk7CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRC
YWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOworICAgICAgICAgICAgICAgIHN0YXRl
LnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKIAotICAgICAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVjayks
IHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBqdW1w
SWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVjaykpOwogICAgICAgICAgICAgICAgIHN0YXRl
LmNoZWNrZWRUb3RhbCArPSBjb3VudFRvQ2hlY2s7CiAgICAgICAgICAgICB9CiAKQEAgLTg0OSw2
ICsxNDY1LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAg
ICAgICAgICAgc3RhdGUuY2hlY2tlZFRvdGFsIC09IGNvdW50VG9DaGVjazsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEp1bXBMaXN0IHN1Y2Nlc3NlczsKKyAgICAgICAgICAgIGJvb2wg
cHJvcG9nYXRlQmFja3RyYWNrID0gZmFsc2U7CiAKICAgICAgICAgICAgIGZvciAoc3RhdGUucmVz
ZXRBbHRlcm5hdGl2ZSgpOyBzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCk7IHN0YXRlLm5leHRBbHRl
cm5hdGl2ZSgpKSB7CiAKQEAgLTg2NywzNyArMTQ4NCwzNSBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGFuIGFs
dGVybmF0aXZlLgogICAgICAgICAgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBzdG9y
ZVRvRnJhbWVXaXRoUGF0Y2goYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAg
ICAgICBzdWNjZXNzZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2ZSgpIHx8IGNvdW50VG9DaGVjaykK
KyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2VzLmFwcGVuZChqdW1wKCkpOwogCiAgICAgICAg
ICAgICAgICAgLy8gQWx0ZXJuYXRpdmUgZGlkIG5vdCBtYXRjaC4KLSAgICAgICAgICAgICAgICBM
YWJlbCBiYWNrdHJhY2tMb2NhdGlvbih0aGlzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBDYW4gd2UgYmFja3RyYWNrIHRoZSBhbHRlcm5hdGl2ZT8gLSBpZiBzbywgZG8g
c28uICBJZiBub3QsIGp1c3QgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IG9uZS4KLSAgICAgICAg
ICAgICAgICBzdGF0ZS5wbGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKHRoaXMpOworICAgICAg
ICAgICAgICAgIHN0YXRlLnNldERhdGFMYWJlbFB0cihkYXRhTGFiZWwpOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhp
cyk7CisgICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIGJhY2t0cmFjayBkZXN0aW5hdGlv
bj8gCisgICAgICAgICAgICAgICAgLy8gICAgaWYgc28sIGxpbmsgdGhlIGRhdGEgbGFiZWwgdG8g
aXQuCisgICAgICAgICAgICAgICAgc3RhdGUubGlua0RhdGFMYWJlbFRvQmFja3RyYWNrSWZFeGlz
dHModGhpcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmlzTGFzdEFsdGVybmF0aXZl
KCkgfHwgY291bnRUb0NoZWNrKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJu
YXRpdmVCYWNrdHJhY2tzKHRoaXMpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVj
aykgewogICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudFRvQ2hl
Y2s7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHByb3BvZ2F0ZUJhY2t0cmFjayA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVu
ZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChkYXRhTGFiZWwsIGJhY2t0cmFja0xvY2F0aW9u
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBXZSBmYWxsIHRocm91Z2ggdG8gaGVy
ZSB3aGVuIHRoZSBsYXN0IGFsdGVybmF0aXZlIGZhaWxzLgogICAgICAgICAgICAgLy8gQWRkIGEg
YmFja3RyYWNrIG91dCBvZiBoZXJlIGZvciB0aGUgcGFyZW50aGVzZSBoYW5kbGluZyBjb2RlIHRv
IGxpbmsgdXAuCi0gICAgICAgICAgICBzdGF0ZS5hZGRCYWNrdHJhY2tKdW1wKGp1bXAoKSk7Cisg
ICAgICAgICAgICBpZiAoIXByb3BvZ2F0ZUJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBzdGF0
ZS5hZGRCYWNrdHJhY2tKdW1wKGp1bXAoKSk7CiAKLSAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEg
dHJhbXBvbGluZSBmb3IgdGhlIHBhcmVucyBjb2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkg
dGhlCisgICAgICAgICAgICAvLyBTYXZlIGFkZHJlc3Mgb24gc3RhY2sgZm9yIHRoZSBwYXJlbnMg
Y29kZSB0byBiYWNrdHJhY2sgdG8sIHRvIHJldHJ5IHRoZQogICAgICAgICAgICAgLy8gbmV4dCBh
bHRlcm5hdGl2ZS4KLSAgICAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChsYWJl
bCgpKTsKLSAgICAgICAgICAgIGxvYWRGcm9tRnJhbWVBbmRKdW1wKGFsdGVybmF0aXZlRnJhbWVM
b2NhdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBib3RoIG9mIHRoZSBhYm92ZSBob29r
cyBhcmUgYSBsaXR0bGUgaW5lZmZpY2llbnQsIGluIHRoYXQgeW91Ci0gICAgICAgICAgICAvLyBt
YXkgZW5kIHVwIHRyYW1wb2xpbmluZyBoZXJlLCBqdXN0IHRvIHRyYW1wb2xpbmUgYmFjayBvdXQg
dG8gdGhlCi0gICAgICAgICAgICAvLyBwYXJlbnRoZXNlcyBjb2RlLCBvciB2aWNlIHZlcnNhLiAg
V2UgY2FuIHByb2JhYmx5IGVsaW1pbmF0ZSBhIGp1bXAKLSAgICAgICAgICAgIC8vIGJ5IHJlc3Ry
dWN0dXJpbmcsIGJ1dCBjb2RpbmcgdGhpcyB3YXkgZm9yIG5vdyBmb3Igc2ltcGxpY2l0eSBkdXJp
bmcKLSAgICAgICAgICAgIC8vIGRldmVsb3BtZW50LgorICAgICAgICAgICAgc3RhdGUuc2V0QmFj
a1RyYWNrU3RhY2tPZmZzZXQoYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQq
KSk7CiAKICAgICAgICAgICAgIHN1Y2Nlc3Nlcy5saW5rKHRoaXMpOwogICAgICAgICB9CkBAIC05
MTgsMTMgKzE1MzMsMTMgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZQogICAgICAgICAgICAgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uICs9IFJlZ2V4U3RhY2tTcGFj
ZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2U7CiAKICAgICAgICAgLy8gb3B0aW1pemVk
IGNhc2UgLSBubyBjYXB0dXJlICYgbm8gcXVhbnRpZmllciBjYW4gYmUgaGFuZGxlZCBpbiBhIGxp
Z2h0LXdlaWdodCBtYW5uZXIuCi0gICAgICAgIGlmICghdGVybS5pbnZlcnRPckNhcHR1cmUgJiYg
KHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50KSkgeworICAgICAgICBp
ZiAoIXRlcm0uY2FwdHVyZSgpICYmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyRml4
ZWRDb3VudCkpIHsKICAgICAgICAgICAgIFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNT
dGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUuY2hlY2tlZFRvdGFsKTsKICAgICAgICAgICAgIGdlbmVy
YXRlUGFyZW50aGVzZXNEaXNqdW5jdGlvbihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2VzU3RhdGUs
IGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAvLyB0aGlzIGV4cGVjdHMg
dGhhdCBhbnkgYmFja3RyYWNrcyBiYWNrIG91dCBvZiB0aGUgcGFyZW50aGVzZXMgd2lsbCBiZSBp
biB0aGUKLSAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzU3RhdGUncyBiYWNrVHJhY2tKdW1wcyB2
ZWN0b3IsIGFuZCB0aGF0IGlmIHRoZXkgbmVlZCBiYWNrdHJhY2tpbmcKLSAgICAgICAgICAgIC8v
IHRoZXkgd2lsbCBoYXZlIHNldCBhbiBlbnRyeSBwb2ludCBvbiB0aGUgcGFyZW50aGVzZXNTdGF0
ZSdzIGJhY2t0cmFja0xhYmVsLgotICAgICAgICAgICAgc3RhdGUucHJvcGFnYXRlQmFja3RyYWNr
aW5nRnJvbShwYXJlbnRoZXNlc1N0YXRlLCB0aGlzKTsKKyAgICAgICAgICAgIC8vIHBhcmVudGhl
c2VzU3RhdGUncyBtX2JhY2tUcmFja0p1bXBzIHZlY3RvciwgYW5kIHRoYXQgaWYgdGhleSBuZWVk
IGJhY2t0cmFja2luZworICAgICAgICAgICAgLy8gdGhleSB3aWxsIGhhdmUgc2V0IGFuIGVudHJ5
IHBvaW50IG9uIHRoZSBwYXJlbnRoZXNlc1N0YXRlJ3MgbV9iYWNrdHJhY2tMYWJlbC4KKyAgICAg
ICAgICAgIHN0YXRlLnByb3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20odGhpcywgcGFyZW50aGVzZXNT
dGF0ZS5nZXRCYWNrdHJhY2tEZXN0aW5hdGlvbigpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIEp1bXAgbm9uR3JlZWR5U2tpcFBhcmVudGhlc2VzOwogICAgICAgICAgICAgTGFiZWwg
bm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7CkBAIC05MzgsNyArMTU1Myw3IEBAIGNsYXNzIFJlZ2V4
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gc3RvcmUgdGhlIG1hdGNoIHN0YXJ0IGluZGV4Ci0gICAgICAgICAgICBpZiAodGVybS5p
bnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewogICAg
ICAgICAgICAgICAgIGludCBpbnB1dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0KCkgLSBwcmVD
aGVja2VkQ291bnQ7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0T2Zmc2V0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5KTsKQEAgLTk0OCw0NSArMTU2
MywxOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
ICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCAodGVybS5wYXJlbnRo
ZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBQYXJlbnRoZXNlc1RhaWwqIHBhcmVudGhlc2VzVGFpbCA9IG1fZXhwcmVz
c2lvblN0YXRlLmFkZFBhcmVudGhlc2VzVGFpbCh0ZXJtKTsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gZ2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHBhcmVudGhlc2VzCiAgICAgICAgICAg
ICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0YXRl
LmNoZWNrZWRUb3RhbCk7CiAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rp
b24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRp
b24pOwogCi0gICAgICAgICAgICBKdW1wIHN1Y2Nlc3MgPSAodGVybS5xdWFudGl0eVR5cGUgPT0g
UXVhbnRpZmllckZpeGVkQ291bnQpID8KLSAgICAgICAgICAgICAgICBqdW1wKCkgOgotICAgICAg
ICAgICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgQWRkcmVzcyhzdGFja1BvaW50ZXJS
ZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpKSk7Ci0K
LSAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBBRlRFUiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKLSAg
ICAgICAgICAgIExhYmVsIGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyh0aGlzKTsKLQotICAgICAg
ICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGgg
d2l0aCBhbmQgd2l0aG91dCB0aGUgcGFyZW5zLgotICAgICAgICAgICAgICAgIGxvYWRGcm9tRnJh
bWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7Ci0gICAgICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKEVxdWFsLCBpbmRleFRlbXBvcmFy
eSwgSW1tMzIoLTEpKSwgdGhpcyk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRlcm0ucXVhbnRp
dHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRob3V0IHRoZSBwYXJlbnMsIG5vdyB0ZXN0
IHdpdGguCi0gICAgICAgICAgICAgICAgbG9hZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9j
YXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAgICAgICBicmFuY2gzMihFcXVhbCwg
aW5kZXhUZW1wb3JhcnksIEltbTMyKC0xKSkubGlua1RvKG5vbkdyZWVkeVRyeVBhcmVudGhlc2Vz
LCB0aGlzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5w
bGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKHRoaXMpOwotICAgICAgICAgICAgLy8gQSBmYWls
dXJlIFdJVEhJTiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKLSAgICAgICAgICAgIHBhcmVudGhlc2Vz
U3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKLSAgICAgICAgICAgIGlmICh0
ZXJtLmludmVydE9yQ2FwdHVyZSkKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEltbTMyKC0xKSwg
QWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNp
emVvZihpbnQpKSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFu
dGlmaWVyR3JlZWR5KQotICAgICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShJbW0zMigtMSksIHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7Ci0KLSAgICAgICAgICAgIHN0
YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOwotICAg
ICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpCi0g
ICAgICAgICAgICAgICAgbm9uR3JlZWR5U2tpcFBhcmVudGhlc2VzLmxpbmsodGhpcyk7Ci0gICAg
ICAgICAgICBzdWNjZXNzLmxpbmsodGhpcyk7CisgICAgICAgICAgICAvLyBGb3Igbm9uLWZpeGVk
IGNvdW50cywgYmFja3RyYWNrIGlmIHdlIGRpZG4ndCBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAg
ICAgIGlmICh0ZXJtLnF1YW50aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKKyAgICAg
ICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gz
MihFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpKTsKIAogICAgICAgICAgICAgLy8gc3Rv
cmUgdGhlIG1hdGNoIGVuZCBpbmRleAotICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0
dXJlKSB7CisgICAgICAgICAgICBpZiAodGVybS5jYXB0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRPZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpOwogICAgICAgICAgICAgICAg
IGlmIChpbnB1dE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICBtb3ZlKGluZGV4LCBpbmRl
eFRlbXBvcmFyeSk7CkBAIC05OTUsNiArMTU4MywxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFyZW50aGVzZXMu
c3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBwYXJlbnRoZXNlc1RhaWwtPnByb2Nlc3NCYWNrdHJh
Y2tzKHRoaXMsIHN0YXRlLCBwYXJlbnRoZXNlc1N0YXRlLCBub25HcmVlZHlUcnlQYXJlbnRoZXNl
cywgbGFiZWwoKSk7CisKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuZ2V0QmFja3RyYWNr
RGVzdGluYXRpb24oKS5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodGVy
bS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkKKyAgICAgICAgICAgICAgICBu
b25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTAzMyw2ICsxNjI4LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3Jv
QXNzZQogICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5wbGFudEp1bXBUb0JhY2t0cmFja0lm
RXhpc3RzKHRoaXMpOwogCiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5h
dGl2ZUJhY2t0cmFja3ModGhpcyk7CisKICAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIHRo
ZSBhbHRlcm5hdGl2ZSBmYWlscyB0byBtYXRjaCAtIGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBp
dGVyYXRpb24sIG9yIG91dCBvZiB0aGUgbG9vcC4KIAogICAgICAgICAgICAgaWYgKGNvdW50VG9D
aGVjaykgewpAQCAtMTA1Nyw3ICsxNjUzLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIGludCBjb3VudENoZWNrZWRBZnRlckFzc2VydGlvbiA9
IHN0YXRlLmNoZWNrZWRUb3RhbCAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKIAotICAgICAgICBpZiAo
dGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAg
ICAgICAgICAgIC8vIEludmVydGVkIGNhc2UKICAgICAgICAgICAgIHN0b3JlVG9GcmFtZShpbmRl
eCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKIApAQCAtMTA2OSwxMCArMTY2NSwxMSBAQCBj
bGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICBnZW5l
cmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRl
LCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgLy8gU3VjY2VzcyEgLSB3
aGljaCBtZWFucyAtIEZhaWwhCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2Vz
RnJhbWVMb2NhdGlvbiwgaW5kZXgpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7
CiAKICAgICAgICAgICAgIC8vIEFuZCBmYWlsIG1lYW5zIHN1Y2Nlc3MuCiAgICAgICAgICAgICBw
YXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisKICAgICAg
ICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7CiAK
ICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudENoZWNrZWRBZnRlckFzc2Vy
dGlvbjsKQEAgLTEwOTEsOCArMTY4OCw5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAogICAgICAg
ICAgICAgcGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOwor
CiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5k
ZXgpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7Cisg
ICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAgICAgICAgIHN1
Y2Nlc3MubGluayh0aGlzKTsKIApAQCAtMTI0Miw2ICsxODQwLDggQEAgY2xhc3MgUmVnZXhHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgZ2VuZXJhdGVSZXR1cm4oKTsK
IAogICAgICAgICAgICAgc3RhdGUubmV4dEFsdGVybmF0aXZlKCk7CisgICAgICAgICAgICBpZiAo
YWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkgJiYgc3RhdGUuYWx0ZXJuYXRpdmVWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAKICAgICAgICAgICAgIC8v
IGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBhbHRlcm5hdGl2ZXMsIHBsYW50IHRoZSBjaGVjayBmb3Ig
aW5wdXQgYmVmb3JlIGxvb3BpbmcuCiAgICAgICAgICAgICBpZiAoc3RhdGUuYWx0ZXJuYXRpdmVW
YWxpZCgpKSB7CkBAIC0xMjQ5LDcgKzE4NDksNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgaWYgKCFzZXRSZXBlYXRBbHRlcm5hdGl2
ZUxhYmVscyAmJiAhbmV4dEFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgaGFuZGxlZCBub24tcmVwZWF0aW5nIGFsdGVybmF0aXZlcywg
anVtcCB0byBuZXh0IGl0ZXJhdGlvbiAKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGxvb3Ag
b3ZlciByZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLgotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUu
anVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSA9IG5leHRBbHRlcm5hdGl2
ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMjg4LDYgKzE4ODgs
NyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGdldCBoZXJl
LCB0aGVuIHRoZSBsYXN0IGlucHV0IGNoZWNrZWQgcGFzc2VkLgogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gcnVuIHRoZSBuZXh0
IGFsdGVybmF0aXZlLCBzaW5jZSBpdCBpcyBzaG9ydGVyIC0KICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGp1c3QgdXBkYXRlIGluZGV4LgogICAgICAgICAgICAgICAgICAgICAgICAgc3ViMzIo
SW1tMzIoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlIC0gY291bnRUb0NoZWNrRm9y
TmV4dEFsdGVybmF0aXZlKSwgaW5kZXgpOwpAQCAtMTMwMiw2ICsxOTAzLDcgQEAgY2xhc3MgUmVn
ZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhbHRlcm5hdGl2ZSBpcyBsb25n
ZXIgdGhhbiB0aGUgY3VycmVudCBvbmU7IGNoZWNrIHRoZSBkaWZmZXJlbmNlLgogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91c0FsdGVybmF0
aXZlLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVja0Zvck5leHRBbHRl
cm5hdGl2ZSAtIGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSkpOwogICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeyAvLyBDQVNFIDM6IEJvdGggYWx0ZXJuYXRpdmVzIGFyZSB0aGUg
c2FtZSBsZW5ndGguCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY291bnRDaGVja2Vk
Rm9yQ3VycmVudEFsdGVybmF0aXZlID09IGNvdW50VG9DaGVja0Zvck5leHRBbHRlcm5hdGl2ZSk7
CkBAIC0xMzI1LDcgKzE5MjcsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAgICAgICAgIGlmICghc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMpIHsKICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBhbHRlcm5hdGl2ZXMgdGhhdCBuZWVkIHJlcGVhdGlu
ZyAoYWxsIGFyZSBtYXJrZWQgJ29uY2VUaHJvdWdoJykgdGhlbiBqdXN0IGxpbmsKICAgICAgICAg
ICAgIC8vIHRoZSBtYXRjaCBmYWlsdXJlcyB0byB0aGlzIHBvaW50LCBhbmQgZmFsbCB0aHJvdWdo
IHRvIHRoZSByZXR1cm4gYmVsb3cuCi0gICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVC
YWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3Ry
YWNrcyh0aGlzLCB0cnVlKTsKKwogICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91
c0FsdGVybmF0aXZlLmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBIb3cgbXVjaCBtb3JlIGlucHV0IG5lZWQgdGhlcmUgYmUgdG8gYmUgYWJsZSB0byByZXRyeSBm
cm9tIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZT8KQEAgLTEzNDUsMTEgKzE5NDgsMTEgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgICAgICAvLyBGaXJz
dCwgZGVhbCB3aXRoIHRoZSBjYXNlcyB3aGVyZSB0aGVyZSB3YXMgc3VmZmljaWVudCBpbnB1dCB0
byB0cnkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICBpZiAoaW5jcmVtZW50Rm9y
TmV4dEl0ZXIgPiAwKSAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBtb3JlIGlucHV0IGFueXdheSwg
ZmFsbCB0aHJvdWdoIHRvIHRoZSBjaGVja2luZyBiZWxvdy4KLSAgICAgICAgICAgICAgICBzdGF0
ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRl
LmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICBlbHNl
IGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSAmJiAhaW5jcmVtZW50Rm9yTmV4
dEl0ZXIpIC8vIE5vIG5lZWQgdG8gdXBkYXRlIGFueXRoaW5nLCBsaW5rIHRoZXNlIGJhY2t0cmFj
a3Mgc3RyYWlnaHQgdG8gdGhlIHRvIHBvZiB0aGUgbG9vcCEKLSAgICAgICAgICAgICAgICBzdGF0
ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oZmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tl
ZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNr
c1RvKHRoaXMsIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQsIHRydWUpOwogICAgICAgICAg
ICAgZWxzZSB7IC8vIG5vIG5lZWQgdG8gY2hlY2sgdGhlIGlucHV0LCBidXQgd2UgZG8gaGF2ZSBz
b21lIGJvb2trZWVwaW5nIHRvIGRvIGZpcnN0LgotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtB
bHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUubGlua0Fs
dGVybmF0aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsKIAogICAgICAgICAgICAgICAgIC8vIFdo
ZXJlIG5lY2Vzc2FyeSB1cGRhdGUgb3VyIHByZXNlcnZlZCBzdGFydCBwb3NpdGlvbi4KICAgICAg
ICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplKSB7CkBAIC0x
NDA2LDYgKzIwMDksMTAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZQogICAgICAgICBtb3ZlKEltbTMyKC0xKSwgcmV0dXJuUmVnaXN0ZXIpOwogCiAgICAgICAgIGdl
bmVyYXRlUmV0dXJuKCk7CisKKyAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuZW1pdFBhcmVudGhl
c2VzVGFpbCh0aGlzKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuZW1pdEluZGlyZWN0SnVt
cFRhYmxlKHRoaXMpOworICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRlcmF0
aW9uKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVFbnRlcigpCkBAIC0xNDkyLDgg
KzIwOTksOCBAQCBwdWJsaWM6CiAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcih0aGlz
LCBnbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLnBvb2xGb3JTaXplKHNpemUoKSksIDAp
OwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JhY2t0cmFja1JlY29yZHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5wYXRjaChtX2JhY2t0cmFja1Jl
Y29yZHNbaV0uZGF0YUxhYmVsLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYmFja3RyYWNrUmVj
b3Jkc1tpXS5iYWNrdHJhY2tMb2NhdGlvbikpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIucGF0Y2gobV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJh
Y2tSZWNvcmRzW2ldLmRhdGFMYWJlbCwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2V4cHJlc3Np
b25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHNbaV0uYmFja3RyYWNrTG9jYXRpb24pKTsKIAogICAg
ICAgICBqaXRPYmplY3Quc2V0KHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICB9CkBA
IC0xNTA2LDcgKzIxMTMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlZ2V4UGF0dGVybiYg
bV9wYXR0ZXJuOwogICAgIGJvb2wgbV9zaG91bGRGYWxsQmFjazsKLSAgICBWZWN0b3I8QWx0ZXJu
YXRpdmVCYWNrdHJhY2tSZWNvcmQ+IG1fYmFja3RyYWNrUmVjb3JkczsKKyAgICBHZW5lcmF0aW9u
U3RhdGUgbV9leHByZXNzaW9uU3RhdGU7CiB9OwogCiB2b2lkIGppdENvbXBpbGVSZWdleChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZ2V4Q29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm5TdHJpbmcsIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hh
ciomIGVycm9yLCBCdW1wUG9pbnRlckFsbG9jYXRvciogYWxsb2NhdG9yLCBib29sIGlnbm9yZUNh
c2UsIGJvb2wgbXVsdGlsaW5lKQpAQCAtMTUyOSw4ICsyMTM2LDMgQEAgdm9pZCBqaXRDb21waWxl
UmVnZXgoSlNHbG9iYWxEYXRhKiBnbG9iYQogfX0KIAogI2VuZGlmCi0KLQotCi0KLQpJbmRleDog
SmF2YVNjcmlwdENvcmUveWFyci9SZWdleFBhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhQYXR0ZXJuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMs
OCBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogICAgICAgICBUeXBlUGFyZW50aGVzZXNTdWJwYXR0
ZXJuLAogICAgICAgICBUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbiwKICAgICB9IHR5cGU7Ci0g
ICAgYm9vbCBpbnZlcnRPckNhcHR1cmU7CisgICAgYm9vbCBtX2NhcHR1cmUgOjE7CisgICAgYm9v
bCBtX2ludmVydCA6MTsKICAgICB1bmlvbiB7CiAgICAgICAgIFVDaGFyIHBhdHRlcm5DaGFyYWN0
ZXI7CiAgICAgICAgIENoYXJhY3RlckNsYXNzKiBjaGFyYWN0ZXJDbGFzczsKQEAgLTEyMyw2ICsx
MjQsOCBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogCiAgICAgUGF0dGVyblRlcm0oVUNoYXIgY2gp
CiAgICAgICAgIDogdHlwZShQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXIpCisgICAg
ICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQogICAgIHsK
ICAgICAgICAgcGF0dGVybkNoYXJhY3RlciA9IGNoOwogICAgICAgICBxdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKQEAgLTEzMSwxNiArMTM0LDE4IEBAIHN0cnVjdCBQYXR0ZXJu
VGVybSB7CiAKICAgICBQYXR0ZXJuVGVybShDaGFyYWN0ZXJDbGFzcyogY2hhckNsYXNzLCBib29s
IGludmVydCkKICAgICAgICAgOiB0eXBlKFBhdHRlcm5UZXJtOjpUeXBlQ2hhcmFjdGVyQ2xhc3Mp
Ci0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGludmVydCkKKyAgICAgICAgLCBtX2NhcHR1cmUo
ZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAgIHsKICAgICAgICAgY2hhcmFj
dGVyQ2xhc3MgPSBjaGFyQ2xhc3M7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJG
aXhlZENvdW50OwogICAgICAgICBxdWFudGl0eUNvdW50ID0gMTsKICAgICB9CiAKLSAgICBQYXR0
ZXJuVGVybShUeXBlIHR5cGUsIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgUGF0dGVybkRpc2p1bmN0
aW9uKiBkaXNqdW5jdGlvbiwgYm9vbCBpbnZlcnRPckNhcHR1cmUpCisgICAgUGF0dGVyblRlcm0o
VHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlz
anVuY3Rpb24sIGJvb2wgY2FwdHVyZSA9IGZhbHNlLCBib29sIGludmVydCA9IGZhbHNlKQogICAg
ICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAgLCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0T3JDYXB0
dXJlKQorICAgICAgICAsIG1fY2FwdHVyZShjYXB0dXJlKQorICAgICAgICAsIG1faW52ZXJ0KGlu
dmVydCkKICAgICB7CiAgICAgICAgIHBhcmVudGhlc2VzLmRpc2p1bmN0aW9uID0gZGlzanVuY3Rp
b247CiAgICAgICAgIHBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCA9IHN1YnBhdHRlcm5JZDsKQEAg
LTE1Miw3ICsxNTcsOCBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogICAgIAogICAgIFBhdHRlcm5U
ZXJtKFR5cGUgdHlwZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSkKICAgICAgICAgOiB0eXBlKHR5cGUp
Ci0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGludmVydCkKKyAgICAgICAgLCBtX2NhcHR1cmUo
ZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAgIHsKICAgICAgICAgcXVhbnRp
dHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7CiAgICAgICAgIHF1YW50aXR5Q291bnQgPSAx
OwpAQCAtMTYwLDcgKzE2Niw4IEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiAKICAgICBQYXR0ZXJu
VGVybSh1bnNpZ25lZCBzcGF0dGVybklkKQogICAgICAgICA6IHR5cGUoVHlwZUJhY2tSZWZlcmVu
Y2UpCi0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGZhbHNlKQorICAgICAgICAsIG1fY2FwdHVy
ZShmYWxzZSkKKyAgICAgICAgLCBtX2ludmVydChmYWxzZSkKICAgICB7CiAgICAgICAgIHN1YnBh
dHRlcm5JZCA9IHNwYXR0ZXJuSWQ7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJG
aXhlZENvdW50OwpAQCAtMTg5LDEyICsxOTYsMTIgQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKICAg
ICAKICAgICBib29sIGludmVydCgpCiAgICAgewotICAgICAgICByZXR1cm4gaW52ZXJ0T3JDYXB0
dXJlOworICAgICAgICByZXR1cm4gbV9pbnZlcnQ7CiAgICAgfQogCiAgICAgYm9vbCBjYXB0dXJl
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRPckNhcHR1cmU7CisgICAgICAgIHJldHVy
biBtX2NhcHR1cmU7CiAgICAgfQogICAgIAogICAgIHZvaWQgcXVhbnRpZnkodW5zaWduZWQgY291
bnQsIFF1YW50aWZpZXJUeXBlIHR5cGUpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzA0NikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEw
LTEyLTAxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5ldyB0ZXN0cyB0byBz
dXBwb3J0IGNoYW5nZXMgdG8gUmVnZXhwIEpJVCBjb2RlIGhhbmRsaW5nCisgICAgICAgIG9mIHBh
cmVudGhlc2VzLiAgVGVzdHMgZm9jdXNlZCBvbiBiYWNrdHJhY2tpbmcgYW5kIG5lc3RlZCAKKyAg
ICAgICAgc3ViZXhwcmVzc2lvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MDI5NQorCisgICAgICAgICogZmFzdC9yZWdleC9wYXJlbnRoZXNlcy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvcmVnZXgvcGFyZW50aGVzZXMuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9yZWdleC9zY3JpcHQtdGVzdHMvcGFyZW50aGVzZXMu
anM6IEFkZGVkLgorCiAyMDEwLTEyLTAxICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBTa2lwIGFub3RoZXIgSFRNTFByb2dyZXNzRWxlbWVudCB0ZXN0
IG9uIFdpbmRvd3MsIGJlY2F1c2UgaXQncyBub3QgdHVybmVkIG9uIGZvciBXaW5kb3dzIHlldC4g
QWRkaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcGFyZW50
aGVzZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACitUaGlzIHBh
Z2UgdGVzdHMgaGFuZGxpbmcgb2YgcGFyZW50aGVzZXMgc3ViZXhwcmVzc2lvbnMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHJlZ2V4cDEuZXhlYygnYWJjJykgaXMgWydh
YicsJ2EnLCdiJ10KK1BBU1MgcmVnZXhwMi5leGVjKCdhYmFjYWRhYmUnKSBpcyBbJ2FiZScsJ2Fi
JywnYicsJ2InXQorUEFTUyByZWdleHAzLmV4ZWMoJ2FiYWNhZGFiZScpIGlzIFsnYWJlJywnYWIn
LCdiJyx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDQuZXhlYygnYWJhY2FkYWJlJykgaXMgWydhYmUn
LCdhYicsJ2InLHVuZGVmaW5lZF0KK1BBU1MgcmVnZXhwNS5leGVjKCdhYmFjYWRhYmUnKSBpcyBb
J2FiZScsJ2FiJywnYicsJ2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDYuZXhl
YygnYWJjZGUnKSBpcyBbJ2FiJywnYWInLCdiJywnYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0KK1BB
U1MgcmVnZXhwNy5leGVjKCdhYmMnKSBpcyBbJ2FiYycsJ2FiJywnYiddCitQQVNTIHJlZ2V4cDgu
ZXhlYygnYmNhZGR4cXknKSBpcyBbJ3F5JywncScsJ3EnLCd5J10KK1BBU1MgcmVnZXhwOS5leGVj
KCdhc2RmamVqZ3NkZmxha3NkZmprZWxqZ2hramVhJykgaXMgWydhJywnYScsdW5kZWZpbmVkXQor
UEFTUyByZWdleHAxMC5leGVjKCdhc2RmamVqZ3NkZmxha3NkZmprZWxqZ2hhdCcpIGlzIFsnYXQn
XQorUEFTUyByZWdleHAxMS5leGVjKCdEZXZlbG9waW5nIHdpdGggSmF2YVNjcmlwdCBpcyBkYW5n
ZXJvdXMsIGRvIG5vdCB0cnkgaXQgd2l0aG91dCBhc3Npc3RhbmNlJykgaXMgbnVsbAorUEFTUyBy
ZWdleHAxMi5leGVjKCdTZWF0dGxlLCBXQSB0byBCdWNrbGV5LCBXQScpIGlzIFsnU2VhdHRsZSwg
V0EgdG8gQnVja2xleSwgV0EnLCB1bmRlZmluZWQsICdTZWF0dGxlJywgJ1dBJywgdW5kZWZpbmVk
LCAnQnVja2xleScsICdXQSddCitQQVNTIHJlZ2V4cDEzLmV4ZWMoJ3p4Y2FzZDtmbCBeQWFhQUFh
YWFmO2xybHJ6cycpIGlzIFsnQWFhQUFhYWFmO2xybHJ6cycsdW5kZWZpbmVkLCdBYWFBQWFhYWY7
bHJscnpzJ10KK1BBU1MgcmVnZXhwMTQuZXhlYygnYicpIGlzIFsnYicsdW5kZWZpbmVkLCdiJ10K
K1BBU1MgcmVnZXhwMTUuZXhlYygnYWJkZicpIGlzIFsnYWJkZicsdW5kZWZpbmVkLCdhYmQnLCdm
J10KK1BBU1MgcmVnZXhwMTYuZXhlYygnYWJjJykgaXMgWydhYicsJ2EnLCdiJ10KK1BBU1MgcmVn
ZXhwMTcuZXhlYygnYmNhRHhxeScpIGlzIFsnRHgnLCdEJ10KK1BBU1MgcmVnZXhwMTguZXhlYygn
SGVsbG86IFdvcmxkJykgaXMgWydIZWxsbzonLCc6J10KK1BBU1MgcmVnZXhwMTkuZXhlYygnYmFy
cmVsJykgaXMgWydiYXInLCcnXQorUEFTUyByZWdleHAyMC5leGVjKCdiYXJyZWwnKSBpcyBbJ2Jh
cnJlbCcsJ3JlbCddCitQQVNTIHJlZ2V4cDIwLmV4ZWMoJzJiYXJyZWwnKSBpcyBbJzJiYXJyZWwn
LCdyZWwnXQorUEFTUyByZWdleHAyMS5leGVjKCdhYmMnKSBpcyBbJ2FiJywnYWInLCdiJ10KK1BB
U1MgcmVnZXhwMjIuZXhlYygnYWJjZGxza2ZnamRzbGtmZycpIGlzIG51bGwKK1BBU1MgcmVnZXhw
MjMuZXhlYygnPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiJykgaXMg
WyciaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCInXQorUEFTUyAnSGkgQm9iJy5tYXRjaCgv
KFJvYil8KEJvYil8KFJvYmVydCl8KEJvYmJ5KS8pIGlzIFsnQm9iJyx1bmRlZmluZWQsJ0JvYics
dW5kZWZpbmVkLHVuZGVmaW5lZF0KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2Vz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRl
c3RzL3BhcmVudGhlc2VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgv
c2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9yZWdleC9zY3JpcHQtdGVzdHMvcGFyZW50aGVzZXMuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzYgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHBhZ2UgdGVzdHMgaGFuZGxpbmcgb2YgcGFy
ZW50aGVzZXMgc3ViZXhwcmVzc2lvbnMuIik7CisKK3ZhciByZWdleHAxID0gLyhhfEEpKGJ8Qikv
Oworc2hvdWxkQmUoInJlZ2V4cDEuZXhlYygnYWJjJykiLCAiWydhYicsJ2EnLCdiJ10iKTsKKwor
dmFyIHJlZ2V4cDIgPSAvKGEoKGIpfGN8ZCkpZS87CitzaG91bGRCZSgicmVnZXhwMi5leGVjKCdh
YmFjYWRhYmUnKSIsICJbJ2FiZScsJ2FiJywnYicsJ2InXSIpOworCit2YXIgcmVnZXhwMyA9IC8o
YShifChjKXxkKSllLzsKK3Nob3VsZEJlKCJyZWdleHAzLmV4ZWMoJ2FiYWNhZGFiZScpIiwgIlsn
YWJlJywnYWInLCdiJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA0ID0gLyhhKGJ8Y3woZCkp
KWUvOworc2hvdWxkQmUoInJlZ2V4cDQuZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUnLCdhYics
J2InLHVuZGVmaW5lZF0iKTsKKwordmFyIHJlZ2V4cDUgPSAvKGEoKGIpfChjKXwoZCkpKWUvOwor
c2hvdWxkQmUoInJlZ2V4cDUuZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUnLCdhYicsJ2InLCdi
Jyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOworCit2YXIgcmVnZXhwNiA9IC8oYSgoYil8KGMpfChk
KSkpLzsKK3Nob3VsZEJlKCJyZWdleHA2LmV4ZWMoJ2FiY2RlJykiLCAiWydhYicsJ2FiJywnYics
J2InLHVuZGVmaW5lZCx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA3ID0gLyhhKGIpPz8pPz9j
LzsKK3Nob3VsZEJlKCJyZWdleHA3LmV4ZWMoJ2FiYycpIiwgIlsnYWJjJywnYWInLCdiJ10iKTsK
KwordmFyIHJlZ2V4cDggPSAvKGF8KGV8cSkpKHh8eSkvOworc2hvdWxkQmUoInJlZ2V4cDguZXhl
YygnYmNhZGR4cXknKSIgLCAiWydxeScsJ3EnLCdxJywneSddIik7CisKK3ZhciByZWdleHA5ID0g
LygodHxiKT98YSkkLzsKK3Nob3VsZEJlKCJyZWdleHA5LmV4ZWMoJ2FzZGZqZWpnc2RmbGFrc2Rm
amtlbGpnaGtqZWEnKSIsICJbJ2EnLCdhJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHAxMCA9
IC8oPzpofGU/KD86dHxiKT98YT8oPzp0fGIpPykoPzokKS87CitzaG91bGRCZSgicmVnZXhwMTAu
ZXhlYygnYXNkZmplamdzZGZsYWtzZGZqa2VsamdoYXQnKSIsICJbJ2F0J10iKTsKKwordmFyIHJl
Z2V4cDExID0gLyhbSmpdYXZhKFtTc11jcmlwdCk/KVxzaXNccyhmdW5cdyopLzsKK3Nob3VsZEJl
TnVsbCgicmVnZXhwMTEuZXhlYygnRGV2ZWxvcGluZyB3aXRoIEphdmFTY3JpcHQgaXMgZGFuZ2Vy
b3VzLCBkbyBub3QgdHJ5IGl0IHdpdGhvdXQgYXNzaXN0YW5jZScpIik7CisKK3ZhciByZWdleHAx
MiA9IC8oPzooLispLCApPyguKyksICguLikgdG8gKD86KC4rKSwgKT8oLispLCAoLi4pLzsKK3No
b3VsZEJlKCJyZWdleHAxMi5leGVjKCdTZWF0dGxlLCBXQSB0byBCdWNrbGV5LCBXQScpIiwgIlsn
U2VhdHRsZSwgV0EgdG8gQnVja2xleSwgV0EnLCB1bmRlZmluZWQsICdTZWF0dGxlJywgJ1dBJywg
dW5kZWZpbmVkLCAnQnVja2xleScsICdXQSddIik7CisKK3ZhciByZWdleHAxMyA9IC8oQSk/KEEu
KikvOworc2hvdWxkQmUoInJlZ2V4cDEzLmV4ZWMoJ3p4Y2FzZDtmbFwgXkFhYUFBYWFhZjtscmxy
enMnKSIsICJbJ0FhYUFBYWFhZjtscmxyenMnLHVuZGVmaW5lZCwnQWFhQUFhYWFmO2xybHJ6cydd
Iik7CisKK3ZhciByZWdleHAxNCA9IC8oYSl8KGIpLzsKK3Nob3VsZEJlKCJyZWdleHAxNC5leGVj
KCdiJykiLCAiWydiJyx1bmRlZmluZWQsJ2InXSIpOworCit2YXIgcmVnZXhwMTUgPSAvXig/IShh
YilkZXx4KShhYmQpKGYpLzsKK3Nob3VsZEJlKCJyZWdleHAxNS5leGVjKCdhYmRmJykiLCAiWydh
YmRmJyx1bmRlZmluZWQsJ2FiZCcsJ2YnXSIpOworCit2YXIgcmVnZXhwMTYgPSAvKGF8QSkoYnxC
KS87CitzaG91bGRCZSgicmVnZXhwMTYuZXhlYygnYWJjJykiLCAiWydhYicsJ2EnLCdiJ10iKTsK
KwordmFyIHJlZ2V4cDE3ID0gLyhhfGR8cXwpeC9pOworc2hvdWxkQmUoInJlZ2V4cDE3LmV4ZWMo
J2JjYUR4cXknKSIsICJbJ0R4JywnRCddIik7CisKK3ZhciByZWdleHAxOCA9IC9eLio/KDp8JCkv
Oworc2hvdWxkQmUoInJlZ2V4cDE4LmV4ZWMoJ0hlbGxvOiBXb3JsZCcpIiwgIlsnSGVsbG86Jywn
OiddIik7CisKK3ZhciByZWdleHAxOSA9IC8oYWJ8Xi57MCwyfSliYXIvOworc2hvdWxkQmUoInJl
Z2V4cDE5LmV4ZWMoJ2JhcnJlbCcpIiwgIlsnYmFyJywnJ10iKTsKKwordmFyIHJlZ2V4cDIwID0g
Lyg/Oig/IWZvbykuLi58Xi57MCwyfSliYXIoLiopLzsKK3Nob3VsZEJlKCJyZWdleHAyMC5leGVj
KCdiYXJyZWwnKSIsICJbJ2JhcnJlbCcsJ3JlbCddIik7CitzaG91bGRCZSgicmVnZXhwMjAuZXhl
YygnMmJhcnJlbCcpIiwgIlsnMmJhcnJlbCcsJ3JlbCddIik7CisKK3ZhciByZWdleHAyMSA9IC8o
W2EtZ10oYnxCKXx4eXopLzsKK3Nob3VsZEJlKCJyZWdleHAyMS5leGVjKCdhYmMnKSIsICJbJ2Fi
JywnYWInLCdiJ10iKTsKKwordmFyIHJlZ2V4cDIyID0gLyg/Ol58OylccyphYmM9KFteO10qKS87
CitzaG91bGRCZU51bGwoInJlZ2V4cDIyLmV4ZWMoJ2FiY2Rsc2tmZ2pkc2xrZmcnKSIpOworCit2
YXIgcmVnZXhwMjMgPSAvIltePCJdKiJ8J1tePCddKicvOworc2hvdWxkQmUoInJlZ2V4cDIzLmV4
ZWMoJzxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiJykiLCAiWydc
Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiddIik7CisKK3Nob3VsZEJlKCInSGkgQm9i
Jy5tYXRjaCgvKFJvYil8KEJvYil8KFJvYmVydCl8KEJvYmJ5KS8pIiwgIlsnQm9iJyx1bmRlZmlu
ZWQsJ0JvYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3Bj
cmUtdGVzdC0xLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0
LXRlc3RzL3BjcmUtdGVzdC0xLmpzCShyZXZpc2lvbiA3MzA0NikKKysrIExheW91dFRlc3RzL2Zh
c3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BjcmUtdGVzdC0xLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02
MDI5LDQgKzYwMjksNCBAQCBzaG91bGRCZSgnaW5wdXQwLm1hdGNoKHJlZ2V4R2xvYmFsOSk7Jywg
CiAvL3ZhciByZXN1bHRzID0gWyJ4Il07CiAvL3Nob3VsZEJlKCdyZWdleDYxNS5leGVjKGlucHV0
MCk7JywgJ3Jlc3VsdHMnKTsKIAotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75425</attachid>
            <date>2010-12-02 15:48:49 -0800</date>
            <delta_ts>2010-12-03 10:18:59 -0800</delta_ts>
            <desc>Updated patch addressing reviewers concerns and fixing a bug.</desc>
            <filename>anti-pasta5.patch</filename>
            <type>text/plain</type>
            <size>92063</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDEwLTEyLTAyICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZXMgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgYnJh
bmNoZXMgdG8gYnJhbmNoZXMgaW4gSklUJ2VkCisgICAgICAgIHBhcmVudGhlc2VzIGJhY2t0cmFj
ayBwcm9jZXNzaW5nLiAgVGhlIGNoYW5nZXMgaW5jbHVkZSB0aGUgZm9sbG93aW5nOgorICAgICAg
ICAtIFRha2luZyB0aGUgYmFja3RyYWNraW5nIHByb2Nlc3Npbmcgb3V0IG9mIGxpbmUgYW5kIGFk
ZGluZyBpdCBhcworICAgICAgICAgIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgSklUJ2VkIHJvdXRp
bmUuCisgICAgICAgIC0gQWxsb3cgYmFja3RyYWNrcyB0byBiZSBkaXJlY3QgdmlhIGFuIGluZGly
ZWN0IGJyYW5jaCBmb3IgYW4gYWRkcmVzcworICAgICAgICAgIHB1c2hlZCBvbnRvIHRoZSBzdGFj
ay4gIElmIHRoZSB1c2Ugb2YgYW4gaW5kaXJlY3QgYnJhbmNoIGlzIGZyb20gYQorICAgICAgICAg
IGNvbmRpdGlvbmFsIGp1bXAsIHRoZW4gd2UgZW1pdCBhIHRyYW1wb2xpbmUgYXQgdGhlIGVuZCBv
ZiB0aGUgCisgICAgICAgICAgcm91dGluZS4KKyAgICAgICAgLSBQcm9wb2dhdGUgYmFja3RyYWNr
cyBpbnN0ZWFkIG9mIGFkZGluZyB0cmFtcG9saW5lcy4gIEJhY2t0cmFja3MgYXJlCisgICAgICAg
ICAgcHJvcG9nYXRlZCB0byB3aGVyZSB0aGV5IGFyZSB1c2VkLiAgVGhpcyBjaGFuZ2UgYWxzbyBl
bGltaW5hdGVkIAorICAgICAgICAgIHRyYW1wb2xpbmUgYnJhbmNoIGNvZGUgdGhhdCBhcmVuJ3Qg
dXNlZC4KKyAgICAgICAgLSBBZGRlZCBnbG9iYWwgZXhwcmVzc2lvbiBzdGF0ZSB0byBrZWVwIHRy
YWNrIG9mIHBhcmVudGhlc2VzIHRhaWwKKyAgICAgICAgICBjb2RlIGFuZCBpbmRpcmVjdCBicmFu
Y2hlcy4KKyAgICAgICAgT3RoZXIgY2hhbmdlcyBtYWRlIHRvIHN1cHBvcnQgdGhlc2UgY2hhbmdl
cy4KKyAgICAgICAgLSBTcGxpdCBpbnZlcnRPckNhcHR1cmUgZmxhZyBvbiBQYXR0ZXJucyB0byB0
d28gc2VwYXJhdGUgZmxhZ3MuICBBZGRlZAorICAgICAgICAgIGdldHRlcnMgZm9yIHRoZXNlIGZs
YWdzLiAgUmlwcGxlZCB0aGVzZSBjaGFuZ2VzIHRvIGJvdGggdGhlIEpJVCAKKyAgICAgICAgICBh
bmQgaW50ZXJwcmV0ZXIgY29kZS4KKyAgICAgICAgLSBTcGxpdCBCYWNrdHJhY2tEZXN0aW5hdGlv
biBvdXQgb2ZmIFRlcm1HZW5lcmF0aW9uU3RhdGUgc3RydWN0LgorICAgICAgICAgIFRoaXMgaXMg
ZG9uZSB0byBob2xkIHJlZmVyZW5jZXMgdG8gYSBiYWNrdHJhY2sgZm9yIGxhdGVyIGNvZGUKKyAg
ICAgICAgICBnZW5lcmF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTAyOTUKKworICAgICAgICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBEc3Q6OmlzU2V0KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6
OkptcERzdDo6aXNTZXQpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkxhYmVsOjppc1Nl
dCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0cjo6
aXNVc2VkKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVs
UHRyOjp1c2VkKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Q6OmNsZWFyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpNSVBTQXNzZW1ibGVyOjpKbXBEc3Q6OmlzU2V0KToKKyAgICAgICAgKiBhc3NlbWJs
ZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Sm1wRHN0Ojpp
c1NldCk6CisgICAgICAgICogeWFyci9SZWdleENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5C
ZWdpbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4UGF0dGVybkNvbnN0cnVjdG9yOjphdG9t
UGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQ
YXR0ZXJuQ29uc3RydWN0b3I6OmF0b21CYWNrUmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OnNldHVwQWx0ZXJuYXRpdmVCZWdpblRlcm1zKToK
KyAgICAgICAgKiB5YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXNlc09uY2VCZWdpbik6CisgICAgICAgIChKU0M6
OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzVGVybWluYWxCZWdpbik6CisgICAg
ICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkJl
Z2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGV0aWNh
bEFzc2VydGlvbkJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9t
UGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVDb21w
aWxlcjo6YXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVuZCk6CisgICAgICAgIChKU0M6OllhcnI6
OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzT25jZUVuZCk6CisgICAgICAgIChKU0M6Ollh
cnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQpOgorICAgICAgICAo
SlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmVtaXREaXNqdW5jdGlvbik6CisgICAgICAgICogeWFy
ci9SZWdleEludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpCeXRl
VGVybSk6CisgICAgICAgIChKU0M6OllhcnI6OkJ5dGVUZXJtOjpCYWNrUmVmZXJlbmNlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OmludmVydCk6CisgICAgICAgIChKU0M6OllhcnI6
OkJ5dGVUZXJtOjpjYXB0dXJlKToKKyAgICAgICAgKiB5YXJyL1JlZ2V4SklULmNwcDoKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkluZGlyZWN0SnVtcEVudHJ5OjpJbmRpcmVj
dEp1bXBFbnRyeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpJbmRpcmVj
dEp1bXBFbnRyeTo6YWRkSnVtcCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9y
OjpHZW5lcmF0aW9uU3RhdGU6OkdlbmVyYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpHZW5lcmF0aW9uU3RhdGU6OmFkZEluZGlyZWN0SnVtcEVudHJ5KToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6ZW1p
dEluZGlyZWN0SnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OkdlbmVyYXRpb25TdGF0ZTo6YWRkUGFyZW50aGVzZXNUYWlsKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6ZW1pdFBhcmVudGhlc2VzVGFpbCk6
CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpHZW5lcmF0aW9uU3RhdGU6OmFk
ZEp1bXBUb05leHRJbnRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0
b3I6OkdlbmVyYXRpb25TdGF0ZTo6YWRkSnVtcHNUb05leHRJbnRlcmF0aW9uKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6YWRkRGF0YUxhYmVs
VG9OZXh0SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6Okdl
bmVyYXRpb25TdGF0ZTo6bGlua1RvTmV4dEl0ZXJhdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6QmFja3RyYWNrRGVzdGluYXRp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGlu
YXRpb246OmNsZWFyKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0
cmFja0Rlc3RpbmF0aW9uOjpjbGVhckRhdGFMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6aGF2ZURlc3RpbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpp
c1N0YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0
cmFja0Rlc3RpbmF0aW9uOjppc0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5l
cmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjppc0p1bXBMaXN0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpoYXZlRGF0YUxhYmVs
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0
aW9uOjpjb3B5VGFyZ2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpjb3B5VG8pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OmFkZEJhY2t0cmFja0p1bXApOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OnNldFN0
YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFj
a0Rlc3RpbmF0aW9uOjpzZXRMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0TmV4dEJhY2t0cmFja0xhYmVsKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRC
YWNrdHJhY2tUb0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRCYWNrdHJhY2tKdW1wTGlzdCk6CisgICAgICAgIChKU0M6
OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0QmFja3RyYWNr
U291cmNlTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3Ry
YWNrRGVzdGluYXRpb246OnNldERhdGFMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4
R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0U3ViRGF0YUxhYmVsUHRyKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjps
aW5rVG9OZXh0QmFja3RyYWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpnZXRTdGFja09mZnNldCk6CisgICAgICAgIChKU0M6Ollh
cnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6Z2V0TGFiZWwpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246Omdl
dEJhY2t0cmFja0p1bXBzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJh
Y2t0cmFja0Rlc3RpbmF0aW9uOjpnZXREYXRhTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpS
ZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246Omp1bXBUb0JhY2t0cmFjayk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6
bGlua0RhdGFMYWJlbFRvSGVyZUlmRXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhH
ZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhp
c3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3Rp
bmF0aW9uOjpsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpsaW5rQWx0ZXJuYXRpdmVCYWNr
dHJhY2tzVG8pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVy
YXRpb25TdGF0ZTo6VGVybUdlbmVyYXRpb25TdGF0ZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpyZXNldEFsdGVybmF0aXZlKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6Omlz
TGFzdEFsdGVybmF0aXZlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRl
cm1HZW5lcmF0aW9uU3RhdGU6OmNsZWFyQmFja3RyYWNrKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6Omp1bXBUb0JhY2t0cmFjayk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpw
bGFudEp1bXBUb0JhY2t0cmFja0lmRXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhH
ZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmxpbmtEYXRhTGFiZWxUb0JhY2t0cmFja0lm
RXhpc3RzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0
aW9uU3RhdGU6OmFkZEJhY2t0cmFja0p1bXApOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6c2V0RGF0YUxhYmVsUHRyKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2tU
cmFja1N0YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRl
cm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2t0cmFja0xhYmVsKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmxpbmtBbHRlcm5hdGl2ZUJh
Y2t0cmFja3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVy
YXRpb25TdGF0ZTo6bGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OnNldEJhY2t0cmFja0xp
bmspOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25T
dGF0ZTo6Y2hhaW5CYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0
b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OmNoYWluQmFja3RyYWNrSnVtcHMpOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6Z2V0QmFja3Ry
YWNrRGVzdGluYXRpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVy
bUdlbmVyYXRpb25TdGF0ZTo6cHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbSk6CisgICAgICAgIChK
U0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6OlBhcmVudGhlc2VzVGFp
bCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6
OnByb2Nlc3NCYWNrdHJhY2tzKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6
OlBhcmVudGhlc2VzVGFpbDo6c2V0TmV4dEl0ZXJhdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpQYXJlbnRoZXNlc1RhaWw6OmdlbmVyYXRlQ29kZSk6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkJPTCk6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkVPTCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbldvcmRC
b3VuZGFyeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBh
dHRlcm5DaGFyYWN0ZXJTaW5nbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcik6CisgICAgICAgIChKU0M6OllhcnI6OlJl
Z2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJGaXhlZCk6CisgICAgICAgIChK
U0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJHcmVlZHkp
OgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hh
cmFjdGVyTm9uR3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6Omdl
bmVyYXRlQ2hhcmFjdGVyQ2xhc3NTaW5nbGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ZpeGVkKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NHcmVlZHkpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc05vbkdy
ZWVkeSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhcmVu
dGhlc2VzRGlzanVuY3Rpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
Z2VuZXJhdGVQYXJlbnRoZXNlc1NpbmdsZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2Vu
ZXJhdG9yOjpnZW5lcmF0ZVBhcmVudGhlc2VzR3JlZWR5Tm9CYWNrdHJhY2spOgorICAgICAgICAo
SlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlRGlzanVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Y29tcGlsZSk6CisgICAg
ICAgICogeWFyci9SZWdleFBhdHRlcm4uaDoKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVyblRl
cm06OlBhdHRlcm5UZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVyblRlcm06OmludmVy
dCk6CisgICAgICAgIChKU0M6OllhcnI6OlBhdHRlcm5UZXJtOjpjYXB0dXJlKToKKwogMjAxMC0x
MS0zMCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDYgKzI0MCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGlzVXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KICAgICAgICAgICAgIHZvaWQgdXNlZCgpIHsg
bV91c2VkID0gdHJ1ZTsgfQogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgSm1wRHN0KGlu
dCBvZmZzZXQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aAkocmV2aXNpb24gNzMwNDYpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUzLDYgKzU1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgfQogCiAgICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9Cisg
ICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9CiAg
ICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIEptcERzdChpbnQgb2Zmc2V0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbC5pc1VzZWQoKTsgfQorICAg
ICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9sYWJlbC5pc1NldCgpOyB9CiAgICAg
ICAgIHZvaWQgdXNlZCgpIHsgbV9sYWJlbC51c2VkKCk7IH0KICAgICBwcml2YXRlOgogICAgICAg
ICBKbXBEc3QgbV9sYWJlbDsKQEAgLTI2NCw2ICsyNjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFiZWwuaXNTZXQoKTsgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBKbXBE
c3QgbV9sYWJlbDsKICAgICB9OwpAQCAtNDEwLDYgKzQxMywxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gIW1fanVtcHMuc2l6ZSgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAg
ICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9qdW1wcy5jbGVhcigpOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBjb25zdCBKdW1wVmVjdG9yJiBqdW1wcygpIHsg
cmV0dXJuIG1fanVtcHM7IH0KIAogICAgIHByaXZhdGU6CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAo
bV9vZmZzZXQgIT0gLTEpOyB9CiAgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsg
fQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQpJbmRleDogSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gNzMwNDYpCisrKyBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
OCw2ICsyNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzVXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQogICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9
IHRydWU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAkocmV2aXNpb24gNzMwNDYpCisrKyBK
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTksNyArNDU5LDcgQEAgcHVibGljOgogCiAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogcGFy
ZW50aGVzZXNEaXNqdW5jdGlvbiA9IG5ldyBQYXR0ZXJuRGlzanVuY3Rpb24obV9hbHRlcm5hdGl2
ZSk7CiAgICAgICAgIG1fcGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNE
aXNqdW5jdGlvbik7Ci0gICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRl
cm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuLCBzdWJwYXR0ZXJu
SWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGNhcHR1cmUpKTsKKyAgICAgICAgbV9hbHRlcm5h
dGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJlbnRo
ZXNlc1N1YnBhdHRlcm4sIHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgY2Fw
dHVyZSwgZmFsc2UpKTsKICAgICAgICAgbV9hbHRlcm5hdGl2ZSA9IHBhcmVudGhlc2VzRGlzanVu
Y3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CiAgICAgfQogCkBAIC00NjcsNyArNDY3LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgUGF0dGVybkRpc2p1bmN0aW9uKiBwYXJlbnRoZXNlc0Rp
c2p1bmN0aW9uID0gbmV3IFBhdHRlcm5EaXNqdW5jdGlvbihtX2FsdGVybmF0aXZlKTsKICAgICAg
ICAgbV9wYXR0ZXJuLm1fZGlzanVuY3Rpb25zLmFwcGVuZChwYXJlbnRoZXNlc0Rpc2p1bmN0aW9u
KTsKLSAgICAgICAgbV9hbHRlcm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0
dGVyblRlcm06OlR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJw
YXR0ZXJucyArIDEsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGludmVydCkpOworICAgICAgICBt
X2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVybShQYXR0ZXJuVGVybTo6VHlw
ZVBhcmVudGhldGljYWxBc3NlcnRpb24sIG1fcGF0dGVybi5tX251bVN1YnBhdHRlcm5zICsgMSwg
cGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgZmFsc2UsIGludmVydCkpOwogICAgICAgICBtX2FsdGVy
bmF0aXZlID0gcGFyZW50aGVzZXNEaXNqdW5jdGlvbi0+YWRkTmV3QWx0ZXJuYXRpdmUoKTsKICAg
ICAgICAgbV9pbnZlcnRQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uID0gaW52ZXJ0OwogICAgIH0KQEAg
LTUyMCw3ICs1MjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBQYXR0ZXJuVGVybSYgdGVybSA9
IGN1cnJlbnRBbHRlcm5hdGl2ZS0+bGFzdFRlcm0oKTsKICAgICAgICAgICAgIEFTU0VSVCgodGVy
bS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuKSB8fCAodGVy
bS50eXBlID09IFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbikpOwogCi0g
ICAgICAgICAgICBpZiAoKHRlcm0udHlwZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2Vz
U3VicGF0dGVybikgJiYgdGVybS5pbnZlcnRPckNhcHR1cmUgJiYgKHN1YnBhdHRlcm5JZCA9PSB0
ZXJtLnN1YnBhdHRlcm5JZCkpIHsKKyAgICAgICAgICAgIGlmICgodGVybS50eXBlID09IFBhdHRl
cm5UZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuKSAmJiB0ZXJtLmNhcHR1cmUoKSAmJiAo
c3VicGF0dGVybklkID09IHRlcm0uc3VicGF0dGVybklkKSkgewogICAgICAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtOjpGb3J3YXJkUmVmZXJlbmNl
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTg0NSw3ICs4
NDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICBjYXNlIFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbjoKLSAgICAg
ICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpCisgICAgICAgICAgICAgICAgaWYg
KHRlcm0uaW52ZXJ0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybjoKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVycHJldGVyLmNwcAkocmV2aXNpb24gNzMw
NDYpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnQg
YmVnaW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKTsKIAotICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFy
ZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luLCBzdWJwYXR0ZXJuSWQsIGNhcHR1cmUsIGlucHV0
UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRl
VGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwgc3VicGF0
dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFdLmZy
YW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+
dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpBbHRlcm5hdGl2ZUJlZ2luKCkpOwogICAgICAgICBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAtIDFd
LmZyYW1lTG9jYXRpb24gPSBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb247CkBAIC0xNTM3LDcgKzE1
MzcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnQgYmVnaW5UZXJtID0gbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zLnNpemUoKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVy
bXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVy
bWluYWxCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAg
ICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5
cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luLCBzdWJwYXR0ZXJuSWQsIGNhcHR1
cmUsIGZhbHNlLCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9
IGZyYW1lTG9jYXRpb247CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQo
Qnl0ZVRlcm06OkFsdGVybmF0aXZlQmVnaW4oKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlv
biA9IGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbjsKQEAgLTE1NTQsNyArMTU1NCw3IEBAIHB1Ymxp
YzoKIAogICAgICAgICBpbnQgYmVnaW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNp
emUoKTsKIAotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJt
KEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUJlZ2luLCBzdWJwYXR0ZXJu
SWQsIGNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVy
bk9uY2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikp
OwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpBbHRlcm5hdGl2ZUJlZ2lu
KCkpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24t
PnRlcm1zLnNpemUoKSAtIDFdLmZyYW1lTG9jYXRpb24gPSBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRp
b247CkBAIC0xNTY3LDcgKzE1NjcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnQgYmVn
aW5UZXJtID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKTsKIAotICAgICAgICBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50
aGV0aWNhbEFzc2VydGlvbkJlZ2luLCBzdWJwYXR0ZXJuSWQsIGludmVydCwgMCkpOworICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBl
UGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luLCBzdWJwYXR0ZXJuSWQsIGZhbHNlLCBpbnZlcnQs
IDApKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9u
LT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICAg
ICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybTo6QWx0ZXJuYXRpdmVC
ZWdpbigpKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0
aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gYWx0ZXJuYXRpdmVGcmFtZUxv
Y2F0aW9uOwpAQCAtMTU4NCwxMCArMTU4NCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgQVNTRVJU
KG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLnR5cGUgPT0gQnl0ZVRlcm06OlR5
cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4pOwogCi0gICAgICAgIGJvb2wgaW52ZXJ0T3JD
YXB0dXJlID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uaW52ZXJ0T3JDYXB0
dXJlOworICAgICAgICBib29sIGludmVydCA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdp
blRlcm1dLmludmVydCgpOwogICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnN1YnBhdHRlcm5JZDsKIAotICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpUeXBl
UGFyZW50aGV0aWNhbEFzc2VydGlvbkVuZCwgc3VicGF0dGVybklkLCBpbnZlcnRPckNhcHR1cmUs
IGlucHV0UG9zaXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVu
ZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQsIHN1YnBh
dHRlcm5JZCwgZmFsc2UsIGludmVydCwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBtX2JvZHlE
aXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRU
ZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVy
bV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAg
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxv
Y2F0aW9uOwpAQCAtMTY3OSw3ICsxNjc5LDcgQEAgcHVibGljOgogCiAgICAgICAgIEJ5dGVUZXJt
JiBwYXJlbnRoZXNlc0JlZ2luID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV07
CiAKLSAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUgPSBwYXJlbnRoZXNlc0JlZ2luLmludmVy
dE9yQ2FwdHVyZTsKKyAgICAgICAgYm9vbCBjYXB0dXJlID0gcGFyZW50aGVzZXNCZWdpbi5jYXB0
dXJlKCk7CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IHBhcmVudGhlc2VzQmVnaW4u
YXRvbS5zdWJwYXR0ZXJuSWQ7CiAKICAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSBs
YXN0U3VicGF0dGVybklkIC0gc3VicGF0dGVybklkICsgMTsKQEAgLTE2OTMsNyArMTY5Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNocmluayhiZWdpblRl
cm0pOwogCiAgICAgICAgIG1fYWxsUGFyZW50aGVzZXNJbmZvLmFwcGVuZChwYXJlbnRoZXNlc0Rp
c2p1bmN0aW9uKTsKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRl
VGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBw
YXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBpbnZlcnRPckNhcHR1cmUsIGlucHV0UG9zaXRpb24pKTsK
KyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVy
bTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBwYXJlbnRoZXNlc0Rp
c2p1bmN0aW9uLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CiAKICAgICAgICAgbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5xdWFudGl0eUNvdW50ID0gcXVhbnRpdHlD
b3VudDsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5x
dWFudGl0eVR5cGUgPSBxdWFudGl0eVR5cGU7CkBAIC0xNzA4LDEwICsxNzA4LDEwIEBAIHB1Ymxp
YzoKIAogICAgICAgICBBU1NFUlQobV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0u
dHlwZSA9PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbik7CiAK
LSAgICAgICAgYm9vbCBpbnZlcnRPckNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
YmVnaW5UZXJtXS5pbnZlcnRPckNhcHR1cmU7CisgICAgICAgIGJvb2wgY2FwdHVyZSA9IG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmNhcHR1cmUoKTsKICAgICAgICAgdW5zaWdu
ZWQgc3VicGF0dGVybklkID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRv
bS5zdWJwYXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVu
ZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VFbmQsIHN1
YnBhdHRlcm5JZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJl
bnRoZXNlc1N1YnBhdHRlcm5PbmNlRW5kLCBzdWJwYXR0ZXJuSWQsIGNhcHR1cmUsIGZhbHNlLCBp
bnB1dFBvc2l0aW9uKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRl
cm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBiZWdpblRlcm07CiAgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGgg
PSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNb
ZW5kVGVybV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9jYXRpb247CkBAIC0xNzMwLDEwICsxNzMw
LDEwIEBAIHB1YmxpYzoKIAogICAgICAgICBBU1NFUlQobV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W2JlZ2luVGVybV0udHlwZSA9PSBCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVyblRl
cm1pbmFsQmVnaW4pOwogCi0gICAgICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlID0gbV9ib2R5RGlz
anVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICBib29s
IGNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5jYXB0dXJlKCk7
CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tiZWdpblRlcm1dLmF0b20uc3VicGF0dGVybklkOwogCi0gICAgICAgIG1fYm9keURpc2p1bmN0
aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBh
dHRlcm5UZXJtaW5hbEVuZCwgc3VicGF0dGVybklkLCBpbnZlcnRPckNhcHR1cmUsIGlucHV0UG9z
aXRpb24pKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVy
bShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVyblRlcm1pbmFsRW5kLCBzdWJwYXR0
ZXJuSWQsIGNhcHR1cmUsIGZhbHNlLCBpbnB1dFBvc2l0aW9uKSk7CiAgICAgICAgIG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRl
cm0gLSBiZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJt
XS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uZnJhbWVMb2NhdGlvbiA9IGZyYW1lTG9j
YXRpb247CkBAIC0xODE2LDcgKzE4MTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUFzc2VydGlv
bldvcmRCb3VuZGFyeToKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0aW9uV29yZEJvdW5kYXJ5
KHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRB
bHJlYWR5Q2hlY2tlZCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydGlvbldvcmRCb3VuZGFy
eSh0ZXJtLmludmVydCgpLCB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5
Q2hlY2tlZCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAg
Y2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhdHRlcm5DaGFyYWN0ZXI6CkBAIC0xODI0LDcgKzE4MjQs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAg
ICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUNoYXJhY3RlckNsYXNzOgotICAgICAgICAgICAgICAg
ICAgICBhdG9tQ2hhcmFjdGVyQ2xhc3ModGVybS5jaGFyYWN0ZXJDbGFzcywgdGVybS5pbnZlcnRP
ckNhcHR1cmUsIHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2Vk
LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5
cGUpOworICAgICAgICAgICAgICAgICAgICBhdG9tQ2hhcmFjdGVyQ2xhc3ModGVybS5jaGFyYWN0
ZXJDbGFzcywgdGVybS5pbnZlcnQoKSwgdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50
QWxyZWFkeUNoZWNrZWQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgdGVybS5xdWFudGl0eUNvdW50LCB0
ZXJtLnF1YW50aXR5VHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZUJhY2tSZWZlcmVuY2U6CkBAIC0xODQ0LDE3
ICsxODQ0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKz0gUmVnZXhT
dGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9z
aXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF0b21QYXJlbnRoZXNlc09uY2VCZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5J
ZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5j
dGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVG
cmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc09u
Y2VCZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCksIGRl
bGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRl
cm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVtaXREaXNqdW5jdGlvbih0ZXJtLnBhcmVudGhlc2VzLmRpc2p1bmN0aW9u
LCBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZCwgZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENv
dW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc09uY2VFbmQoZGVs
ZWdhdGVFbmRJbnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291
bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0
ZXJtLnBhcmVudGhlc2VzLmlzVGVybWluYWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJy
ZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJl
bnRoZXNlc1Rlcm1pbmFsQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0u
aW52ZXJ0T3JDYXB0dXJlLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJl
YWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0uZnJhbWVMb2NhdGlvbiAr
IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzVGVybWluYWxCZWdpbih0ZXJtLnBhcmVu
dGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCksIGRlbGVnYXRlRW5kSW5wdXRPZmZz
ZXQgLSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwg
dGVybS5mcmFtZUxvY2F0aW9uICsgUmVnZXhTdGFja1NwYWNlRm9yQmFja1RyYWNrSW5mb1BhcmVu
dGhlc2VzT25jZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVy
bS5wYXJlbnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIGRp
c2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBh
dG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZChkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0LCB0ZXJtLmZy
YW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCA9IHRlcm0uaW5wdXRQb3NpdGlvbiAtIGN1cnJlbnRD
b3VudEFscmVhZHlDaGVja2VkOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhl
c2VzU3VicGF0dGVybkJlZ2luKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkLCB0ZXJtLmlu
dmVydE9yQ2FwdHVyZSwgZGVsZWdhdGVFbmRJbnB1dE9mZnNldCAtIGRpc2p1bmN0aW9uQWxyZWFk
eUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9uLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1
YnBhdHRlcm5JZCwgdGVybS5jYXB0dXJlKCksIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgLSBkaXNq
dW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgMCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5kaXNq
dW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIDApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhlc2VzU3VicGF0dGVybkVuZCh0ZXJtLnBhcmVudGhlc2VzLmxh
c3RTdWJwYXR0ZXJuSWQsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQsIHRlcm0uZnJhbWVMb2NhdGlv
biwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSwgdGVybS5wYXJlbnRoZXNl
cy5kaXNqdW5jdGlvbi0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtMTg2Nyw3ICsxODY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQgPj0gKHVuc2lnbmVkKXRlcm0uaW5wdXRQb3NpdGlv
bik7CiAgICAgICAgICAgICAgICAgICAgIGludCBwb3NpdGl2ZUlucHV0T2Zmc2V0ID0gY3VycmVu
dENvdW50QWxyZWFkeUNoZWNrZWQgLSB0ZXJtLmlucHV0UG9zaXRpb247CiAKLSAgICAgICAgICAg
ICAgICAgICAgYXRvbVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbih0ZXJtLnBhcmVudGhlc2Vz
LnN1YnBhdHRlcm5JZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIHRlcm0uZnJhbWVMb2NhdGlvbiwg
YWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYXRvbVBhcmVu
dGhldGljYWxBc3NlcnRpb25CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCwgdGVy
bS5pbnZlcnQoKSwgdGVybS5mcmFtZUxvY2F0aW9uLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24p
OwogICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJlbnRoZXNlcy5k
aXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIHBvc2l0aXZlSW5wdXRPZmZz
ZXQsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGV0aWNhbEFzc2VydGlv
bkVuZCgwLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFu
dGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCShyZXZpc2lvbiA3MzA0NikKKysrIEphdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw2
IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAgICAgICAgIFR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9u
RW5kLAogICAgICAgICBUeXBlQ2hlY2tJbnB1dCwKICAgICB9IHR5cGU7Ci0gICAgYm9vbCBpbnZl
cnRPckNhcHR1cmU7CiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
dW5pb24gewpAQCAtMTE0LDEwICsxMTMsMTQgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAgICAg
dW5zaWduZWQgY2hlY2tJbnB1dENvdW50OwogICAgIH07CiAgICAgdW5zaWduZWQgZnJhbWVMb2Nh
dGlvbjsKKyAgICBib29sIG1fY2FwdHVyZSA6IDE7CisgICAgYm9vbCBtX2ludmVydCA6IDE7CiAg
ICAgaW50IGlucHV0UG9zaXRpb247CiAKICAgICBCeXRlVGVybShVQ2hhciBjaCwgaW50IGlucHV0
UG9zLCB1bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFu
dGlmaWVyVHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAgIDogZnJhbWVMb2NhdGlvbihmcmFtZUxv
Y2F0aW9uKQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAgICAgICAgLCBtX2ludmVydChm
YWxzZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAocXVhbnRpdHlUeXBlKSB7CiAgICAgICAgIGNh
c2UgUXVhbnRpZmllckZpeGVkQ291bnQ6CkBAIC0xMzksNiArMTQyLDggQEAgc3RydWN0IEJ5dGVU
ZXJtIHsKIAogICAgIEJ5dGVUZXJtKFVDaGFyIGxvLCBVQ2hhciBoaSwgaW50IGlucHV0UG9zLCB1
bnNpZ25lZCBmcmFtZUxvY2F0aW9uLCB1bnNpZ25lZCBxdWFudGl0eUNvdW50LCBRdWFudGlmaWVy
VHlwZSBxdWFudGl0eVR5cGUpCiAgICAgICAgIDogZnJhbWVMb2NhdGlvbihmcmFtZUxvY2F0aW9u
KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAgICAgICAgLCBtX2ludmVydChmYWxzZSkK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAocXVhbnRpdHlUeXBlKSB7CiAgICAgICAgIGNhc2UgUXVh
bnRpZmllckZpeGVkQ291bnQ6CkBAIC0xNjEsNyArMTY2LDggQEAgc3RydWN0IEJ5dGVUZXJtIHsK
IAogICAgIEJ5dGVUZXJtKENoYXJhY3RlckNsYXNzKiBjaGFyYWN0ZXJDbGFzcywgYm9vbCBpbnZl
cnQsIGludCBpbnB1dFBvcykKICAgICAgICAgOiB0eXBlKEJ5dGVUZXJtOjpUeXBlQ2hhcmFjdGVy
Q2xhc3MpCi0gICAgICAgICwgaW52ZXJ0T3JDYXB0dXJlKGludmVydCkKKyAgICAgICAgLCBtX2Nh
cHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAgIHsKICAgICAgICAg
YXRvbS5jaGFyYWN0ZXJDbGFzcyA9IGNoYXJhY3RlckNsYXNzOwogICAgICAgICBhdG9tLnF1YW50
aXR5VHlwZSA9IFF1YW50aWZpZXJGaXhlZENvdW50OwpAQCAtMTY5LDkgKzE3NSwxMCBAQCBzdHJ1
Y3QgQnl0ZVRlcm0gewogICAgICAgICBpbnB1dFBvc2l0aW9uID0gaW5wdXRQb3M7CiAgICAgfQog
Ci0gICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIEJ5dGVEaXNq
dW5jdGlvbiogcGFyZW50aGVzZXNJbmZvLCBib29sIGludmVydE9yQ2FwdHVyZSwgaW50IGlucHV0
UG9zKQorICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBCeXRl
RGlzanVuY3Rpb24qIHBhcmVudGhlc2VzSW5mbywgYm9vbCBjYXB0dXJlLCBpbnQgaW5wdXRQb3Mp
CiAgICAgICAgIDogdHlwZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnRP
ckNhcHR1cmUpCisgICAgICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgICAgICwgbV9pbnZl
cnQoZmFsc2UpCiAgICAgewogICAgICAgICBhdG9tLnN1YnBhdHRlcm5JZCA9IHN1YnBhdHRlcm5J
ZDsKICAgICAgICAgYXRvbS5wYXJlbnRoZXNlc0Rpc2p1bmN0aW9uID0gcGFyZW50aGVzZXNJbmZv
OwpAQCAtMTgyLDE1ICsxODksMTcgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAKICAgICBCeXRl
VGVybShUeXBlIHR5cGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpCiAgICAgICAgIDogdHlwZSh0eXBl
KQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnQpCisgICAgICAgICwgbV9jYXB0dXJl
KGZhbHNlKQorICAgICAgICAsIG1faW52ZXJ0KGludmVydCkKICAgICB7CiAgICAgICAgIGF0b20u
cXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7CiAgICAgICAgIGF0b20ucXVhbnRp
dHlDb3VudCA9IDE7CiAgICAgfQogCi0gICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBz
dWJwYXR0ZXJuSWQsIGJvb2wgaW52ZXJ0T3JDYXB0dXJlLCBpbnQgaW5wdXRQb3MpCisgICAgQnl0
ZVRlcm0oVHlwZSB0eXBlLCB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGJvb2wgY2FwdHVyZSwgYm9v
bCBpbnZlcnQsIGludCBpbnB1dFBvcykKICAgICAgICAgOiB0eXBlKHR5cGUpCi0gICAgICAgICwg
aW52ZXJ0T3JDYXB0dXJlKGludmVydE9yQ2FwdHVyZSkKKyAgICAgICAgLCBtX2NhcHR1cmUoY2Fw
dHVyZSkKKyAgICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBhdG9tLnN1
YnBhdHRlcm5JZCA9IHN1YnBhdHRlcm5JZDsKICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKQEAgLTIyOCw3ICsyMzcsNyBAQCBzdHJ1Y3QgQnl0ZVRlcm0g
ewogICAgIAogICAgIHN0YXRpYyBCeXRlVGVybSBCYWNrUmVmZXJlbmNlKHVuc2lnbmVkIHN1YnBh
dHRlcm5JZCwgaW50IGlucHV0UG9zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ5dGVUZXJtKFR5
cGVCYWNrUmVmZXJlbmNlLCBzdWJwYXR0ZXJuSWQsIGZhbHNlLCBpbnB1dFBvcyk7CisgICAgICAg
IHJldHVybiBCeXRlVGVybShUeXBlQmFja1JlZmVyZW5jZSwgc3VicGF0dGVybklkLCBmYWxzZSwg
ZmFsc2UsIGlucHV0UG9zKTsKICAgICB9CiAKICAgICBzdGF0aWMgQnl0ZVRlcm0gQm9keUFsdGVy
bmF0aXZlQmVnaW4oYm9vbCBvbmNlVGhyb3VnaCkKQEAgLTI5NywxMiArMzA2LDEyIEBAIHN0cnVj
dCBCeXRlVGVybSB7CiAKICAgICBib29sIGludmVydCgpCiAgICAgewotICAgICAgICByZXR1cm4g
aW52ZXJ0T3JDYXB0dXJlOworICAgICAgICByZXR1cm4gbV9pbnZlcnQ7CiAgICAgfQogCiAgICAg
Ym9vbCBjYXB0dXJlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRPckNhcHR1cmU7Cisg
ICAgICAgIHJldHVybiBtX2NhcHR1cmU7CiAgICAgfQogfTsKIApJbmRleDogSmF2YVNjcmlwdENv
cmUveWFyci9SZWdleEpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUveWFyci9S
ZWdleEpJVC5jcHAJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eEpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2ICsyODgsMjcgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBqdW1wKEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIGZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSk7CiAgICAgfQog
CisgICAgc3RydWN0IEluZGlyZWN0SnVtcEVudHJ5IHsKKyAgICAgICAgSW5kaXJlY3RKdW1wRW50
cnkoaW50MzJfdCBzdGFja09mZnNldCkKKyAgICAgICAgICAgIDogbV9zdGFja09mZnNldChzdGFj
a09mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgSW5kaXJlY3RKdW1wRW50
cnkoaW50MzJfdCBzdGFja09mZnNldCwgSnVtcCBqdW1wKQorICAgICAgICAgICAgOiBtX3N0YWNr
T2Zmc2V0KHN0YWNrT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBhZGRKdW1wKGp1bXAp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEp1bXAoSnVtcCBqdW1wKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3JlbEp1bXBzLmFwcGVuZChqdW1wKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBtX3N0YWNrT2Zmc2V0OworICAgICAgICBKdW1w
TGlzdCBtX3JlbEp1bXBzOworICAgIH07CisgICAgICAgIAogICAgIHN0cnVjdCBBbHRlcm5hdGl2
ZUJhY2t0cmFja1JlY29yZCB7CiAgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWw7CiAgICAg
ICAgIExhYmVsIGJhY2t0cmFja0xvY2F0aW9uOwpAQCAtMjk5LDE2ICszMjAsNDQ2IEBAIGNsYXNz
IFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgfQogICAgIH07CiAK
KyAgICBzdHJ1Y3QgUGFyZW50aGVzZXNUYWlsOworICAgIHN0cnVjdCBUZXJtR2VuZXJhdGlvblN0
YXRlOworICAgIAorICAgIHN0cnVjdCBHZW5lcmF0aW9uU3RhdGUgeworICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8aW50LCBJbmRpcmVjdEp1bXBFbnRyeSosIFdURjo6SW50SGFzaDx1aW50MzJfdD4s
IFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90PiA+IEluZGlyZWN0SnVtcEhh
c2hNYXA7CisgICAgICAgIAorICAgICAgICBHZW5lcmF0aW9uU3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSW5kaXJlY3RKdW1wRW50cnkoaW50
MzJfdCBzdGFja09mZnNldCwgSnVtcCBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBJbmRp
cmVjdEp1bXBIYXNoTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX2luZGlyZWN0SnVtcE1hcC5maW5k
KHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHN0YWNrT2Zm
c2V0ID49IDApOworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oc3RhY2tPZmZzZXQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IG1faW5kaXJlY3RKdW1wTWFwLmVuZCgpKQorICAgICAgICAgICAg
ICAgIG1faW5kaXJlY3RKdW1wTWFwLmFkZChvZmZzZXQsIG5ldyBJbmRpcmVjdEp1bXBFbnRyeShz
dGFja09mZnNldCwganVtcCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJl
c3VsdC0+c2Vjb25kLT5hZGRKdW1wKGp1bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB2b2lkIGFkZEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXBMaXN0
IGp1bXBzKQorICAgICAgICB7CisgICAgICAgICAgICBKdW1wTGlzdDo6SnVtcFZlY3RvciBqdW1w
VmVjdG9yID0ganVtcHMuanVtcHMoKTsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0ganVtcFZl
Y3Rvci5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgICAgICAgICBhZGRJbmRpcmVjdEp1bXBFbnRyeShzdGFja09mZnNldCwganVt
cFZlY3RvcltpXSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGp1bXBzLmVtcHR5KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZW1pdEluZGlyZWN0SnVtcFRhYmxlKE1h
Y3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKEluZGlyZWN0
SnVtcEhhc2hNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2luZGlyZWN0SnVtcE1hcC5iZWdpbigpOyBp
dGVyICE9IG1faW5kaXJlY3RKdW1wTWFwLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgICAg
ICBJbmRpcmVjdEp1bXBFbnRyeSogaW5kSnVtcEVudHJ5ID0gaXRlci0+c2Vjb25kOworICAgICAg
ICAgICAgICAgIGluZEp1bXBFbnRyeS0+bV9yZWxKdW1wcy5saW5rKG1hc20pOworICAgICAgICAg
ICAgICAgIG1hc20tPmp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgaW5kSnVtcEVu
dHJ5LT5tX3N0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIGluZEp1bXBFbnRy
eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGFyZW50aGVz
ZXNUYWlsKiBhZGRQYXJlbnRoZXNlc1RhaWwoUGF0dGVyblRlcm0mIHRlcm0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIFBhcmVudGhlc2VzVGFpbCogcGFyZW50aGVzZXNUYWlsID0gbmV3IFBhcmVu
dGhlc2VzVGFpbCh0ZXJtKTsKKyAgICAgICAgICAgIG1fcGFyZW5UYWlscy5hcHBlbmQocGFyZW50
aGVzZXNUYWlsKTsKKyAgICAgICAgICAgIG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlvbi5hcHBlbmQo
cGFyZW50aGVzZXNUYWlsKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHBhcmVu
dGhlc2VzVGFpbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBlbWl0UGFyZW50
aGVzZXNUYWlsKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0b3IpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHZlY3RvclNpemUgPSBtX3BhcmVuVGFpbHMuc2l6ZSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBFbWl0IGluIHJldmVyc2Ugb3JkZXIgc28gcGFyZW50VGFpbCBO
IGNhbiBmYWxsIHRocm91Z2ggdG8gTi0xCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gdmVjdG9yU2l6ZTsgaW5kZXggPiAwOyAtLWluZGV4KSB7CisgICAgICAgICAgICAgICAgSnVt
cExpc3QganVtcHNUb05leHQ7CisgICAgICAgICAgICAgICAgbV9wYXJlblRhaWxzW2luZGV4LTFd
LmdldCgpLT5nZW5lcmF0ZUNvZGUoZ2VuZXJhdG9yLCBqdW1wc1RvTmV4dCwgaW5kZXggPiAxKTsK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAxKQorICAgICAgICAgICAgICAgICAgICBqdW1w
c1RvTmV4dC5saW5rVG8oZ2VuZXJhdG9yLT5sYWJlbCgpLCBnZW5lcmF0b3IpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRkSnVtcHNUb05leHRJbnRlcmF0aW9u
KGp1bXBzVG9OZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGFyZW5UYWlscy5j
bGVhcigpOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSnVt
cFRvTmV4dEludGVyYXRpb24oSnVtcCBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBtX2p1
bXBzVG9OZXh0SW50ZXJhdGlvbi5hcHBlbmQoanVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgYWRkSnVtcHNUb05leHRJbnRlcmF0aW9uKEp1bXBMaXN0IGp1bXBzKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50ZXJhdGlvbi5hcHBlbmQoanVtcHMp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZERhdGFMYWJlbFRvTmV4dEl0
ZXJhdGlvbihEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLmFwcGVuZChkYXRhTGFiZWwpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGxpbmtUb05leHRJdGVyYXRpb24oTGFiZWwgbGFiZWwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbiA9IGxhYmVsOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kYXRhUHRyc1RvTmV4
dEl0ZXJhdGlvbi5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1JlY29y
ZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKG1fZGF0YVB0cnNUb05leHRJdGVy
YXRpb25baV0sIG1fbmV4dEl0ZXJhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uLmNsZWFyKCk7CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb24uc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgbV9wYXJlblRhaWxzRm9ySXRlcmF0aW9uW2ldLT5zZXROZXh0SXRlcmF0
aW9uKG1fbmV4dEl0ZXJhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcGFyZW5U
YWlsc0Zvckl0ZXJhdGlvbi5jbGVhcigpOyAgICAgICAgICAgIAorICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBsaW5rVG9OZXh0SXRlcmF0aW9uKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0b3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fanVtcHNUb05leHRJbnRlcmF0aW9uLmxpbmtUbyhtX25l
eHRJdGVyYXRpb24sIGdlbmVyYXRvcik7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkPiBtX2JhY2t0cmFja1JlY29y
ZHM7CisgICAgICAgIEluZGlyZWN0SnVtcEhhc2hNYXAgbV9pbmRpcmVjdEp1bXBNYXA7CisgICAg
ICAgIExhYmVsIG1fbmV4dEl0ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPE93blB0cjxQYXJlbnRo
ZXNlc1RhaWw+ID4gbV9wYXJlblRhaWxzOworICAgICAgICBKdW1wTGlzdCBtX2p1bXBzVG9OZXh0
SW50ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPERhdGFMYWJlbFB0cj4gbV9kYXRhUHRyc1RvTmV4
dEl0ZXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPFBhcmVudGhlc2VzVGFpbCo+IG1fcGFyZW5UYWls
c0Zvckl0ZXJhdGlvbjsKKyAgICB9OworCisgICAgc3RydWN0IEJhY2t0cmFja0Rlc3RpbmF0aW9u
IHsKKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgICAgIE5vQmFja3RyYWNrLAorICAg
ICAgICAgICAgQmFja3RyYWNrTGFiZWwsCisgICAgICAgICAgICBCYWNrdHJhY2tTdGFja09mZnNl
dCwKKyAgICAgICAgICAgIEJhY2t0cmFja0p1bXBMaXN0LAorICAgICAgICAgICAgQmFja3RyYWNr
TGlua2VkCisgICAgICAgIH0gQmFja3RyYWNrVHlwZTsKKyAgICAgICAgCisgICAgICAgIEJhY2t0
cmFja0Rlc3RpbmF0aW9uKCkKKyAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBlKE5vQmFja3Ry
YWNrKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAgICAgICAgICwg
bV9zdWJEYXRhTGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCisg
ICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9i
YWNrdHJhY2tTb3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKGludDMyX3Qgc3RhY2tPZmZzZXQpIAorICAgICAg
ICAgICAgOiBtX2JhY2t0cmFja1R5cGUoQmFja3RyYWNrU3RhY2tPZmZzZXQpCisgICAgICAgICAg
ICAsIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCisgICAgICAgICAgICAsIG1f
YmFja3RyYWNrVG9MYWJlbCgwKQorICAgICAgICAgICAgLCBtX3N1YkRhdGFMYWJlbFB0cigwKQor
ICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKKyAgICAgICAgICAgICwgbV9iYWNrdHJh
Y2tTb3VyY2VMYWJlbCgwKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJjZUp1bXBzKDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFja3RyYWNrRGVzdGlu
YXRpb24oTGFiZWwgbGFiZWwpIAorICAgICAgICAgICAgOiBtX2JhY2t0cmFja1R5cGUoQmFja3Ry
YWNrTGFiZWwpCisgICAgICAgICAgICAsIG1fYmFja3RyYWNrTGFiZWwobGFiZWwpCisgICAgICAg
ICAgICAsIG1fYmFja3RyYWNrVG9MYWJlbCgwKQorICAgICAgICAgICAgLCBtX3N1YkRhdGFMYWJl
bFB0cigwKQorICAgICAgICAgICAgLCBtX25leHRCYWNrdHJhY2soMCkKKyAgICAgICAgICAgICwg
bV9iYWNrdHJhY2tTb3VyY2VMYWJlbCgwKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJj
ZUp1bXBzKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBj
bGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrVHlwZSA9IE5vQmFja3Ry
YWNrOworICAgICAgICAgICAgY2xlYXJEYXRhTGFiZWwoKTsKKyAgICAgICAgICAgIG1fbmV4dEJh
Y2t0cmFjayA9IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJEYXRh
TGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IERhdGFMYWJl
bFB0cigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGhhc0Rlc3RpbmF0aW9u
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChtX2JhY2t0cmFja1R5cGUgIT0gTm9C
YWNrdHJhY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzU3RhY2tPZmZz
ZXQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBC
YWNrdHJhY2tTdGFja09mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
aXNMYWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9iYWNrdHJhY2tUeXBl
ID09IEJhY2t0cmFja0xhYmVsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBp
c0p1bXBMaXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChtX2JhY2t0cmFja1R5
cGUgPT0gQmFja3RyYWNrSnVtcExpc3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIGhhc0RhdGFMYWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGFM
YWJlbFB0ci5pc1NldCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlU
YXJnZXQoQmFja3RyYWNrRGVzdGluYXRpb24mIHJocywgYm9vbCBjb3B5RGF0YUxhYmVsID0gdHJ1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gcmhzLm1fYmFja3Ry
YWNrVHlwZTsKKyAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3Rh
Y2tPZmZzZXQpCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tTdGFja09mZnNldCA9IHJocy5t
X2JhY2t0cmFja1N0YWNrT2Zmc2V0OworICAgICAgICAgICAgZWxzZSBpZiAobV9iYWNrdHJhY2tU
eXBlID09IEJhY2t0cmFja0xhYmVsKQorICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrTGFiZWwg
PSByaHMubV9iYWNrdHJhY2tMYWJlbDsKKyAgICAgICAgICAgIGlmIChjb3B5RGF0YUxhYmVsKQor
ICAgICAgICAgICAgICAgIG1fZGF0YUxhYmVsUHRyID0gcmhzLm1fZGF0YUxhYmVsUHRyOworICAg
ICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcyA9IHJocy5tX2JhY2t0cmFja1NvdXJjZUp1
bXBzOworICAgICAgICAgICAgbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCA9IHJocy5tX2JhY2t0cmFj
a1NvdXJjZUxhYmVsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvcHlUbyhC
YWNrdHJhY2tEZXN0aW5hdGlvbiYgbGhzKQorICAgICAgICB7CisgICAgICAgICAgICBsaHMubV9i
YWNrdHJhY2tUeXBlID0gbV9iYWNrdHJhY2tUeXBlOworICAgICAgICAgICAgaWYgKG1fYmFja3Ry
YWNrVHlwZSA9PSBCYWNrdHJhY2tTdGFja09mZnNldCkKKyAgICAgICAgICAgICAgICBsaHMubV9i
YWNrdHJhY2tTdGFja09mZnNldCA9IG1fYmFja3RyYWNrU3RhY2tPZmZzZXQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrTGFiZWwpCisgICAgICAgICAg
ICAgICAgbGhzLm1fYmFja3RyYWNrTGFiZWwgPSBtX2JhY2t0cmFja0xhYmVsOworICAgICAgICAg
ICAgbGhzLm1fYmFja3RyYWNrU291cmNlSnVtcHMgPSBtX2JhY2t0cmFja1NvdXJjZUp1bXBzOwor
ICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrU291cmNlTGFiZWwgPSBtX2JhY2t0cmFja1NvdXJj
ZUxhYmVsOworICAgICAgICAgICAgbGhzLm1fZGF0YUxhYmVsUHRyID0gbV9kYXRhTGFiZWxQdHI7
CisgICAgICAgICAgICBsaHMubV9iYWNrVHJhY2tKdW1wcyA9IG1fYmFja1RyYWNrSnVtcHM7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkQmFja3RyYWNrSnVtcChKdW1wIGp1
bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXAp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRTdGFja09mZnNldChpbnQzMl90IHN0YWNr
T2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFja1R5cGUgPSBCYWNrdHJh
Y2tTdGFja09mZnNldDsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQgPSBzdGFj
a09mZnNldDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRMYWJlbChMYWJl
bCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gQmFja3Ry
YWNrTGFiZWw7CisgICAgICAgICAgICBtX2JhY2t0cmFja0xhYmVsID0gbGFiZWw7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TmV4dEJhY2t0cmFja0xhYmVsKExhYmVsIGxh
YmVsKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9uZXh0QmFja3RyYWNrKQorICAgICAg
ICAgICAgICAgIG1fbmV4dEJhY2t0cmFjay0+c2V0TGFiZWwobGFiZWwpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNldEJhY2t0cmFja1RvTGFiZWwoTGFiZWwqIGJhY2t0cmFj
a1RvTGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrVG9MYWJlbCA9IGJh
Y2t0cmFja1RvTGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFj
a3RyYWNrSnVtcExpc3QoSnVtcExpc3QqIGp1bXBMaXN0KQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2JhY2t0cmFja1R5cGUgPSBCYWNrdHJhY2tKdW1wTGlzdDsKKyAgICAgICAgICAgIG1fYmFj
a3RyYWNrU291cmNlSnVtcHMgPSBqdW1wTGlzdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBzZXRCYWNrdHJhY2tTb3VyY2VMYWJlbChMYWJlbCogYmFja3RyYWNrU291cmNlTGFi
ZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlTGFiZWwgPSBiYWNr
dHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRE
YXRhTGFiZWwoRGF0YUxhYmVsUHRyIGRwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9z
dWJEYXRhTGFiZWxQdHIpIHsKKyAgICAgICAgICAgICAgICAqbV9zdWJEYXRhTGFiZWxQdHIgPSBk
cDsKKyAgICAgICAgICAgICAgICBtX3N1YkRhdGFMYWJlbFB0ciA9IDA7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IGRwOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIHNldFN1YkRhdGFMYWJlbFB0cihEYXRhTGFiZWxQdHIqIHN1
YkRhdGFMYWJlbFB0cikKKyAgICAgICAgeworICAgICAgICAgICAgbV9zdWJEYXRhTGFiZWxQdHIg
PSBzdWJEYXRhTGFiZWxQdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtUb05leHRC
YWNrdHJhY2soQmFja3RyYWNrRGVzdGluYXRpb24qIG5leHRCYWNrdHJhY2spCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fbmV4dEJhY2t0cmFjayA9IG5leHRCYWNrdHJhY2s7CisgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpbnQzMl90IGdldFN0
YWNrT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYmFja3RyYWNrVHlw
ZSA9PSBCYWNrdHJhY2tTdGFja09mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJh
Y2tTdGFja09mZnNldDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTGFiZWwgZ2V0TGFi
ZWwoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9iYWNrdHJhY2tUeXBlID09IEJh
Y2t0cmFja0xhYmVsKTsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFja0xhYmVsOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBKdW1wTGlzdCYgZ2V0QmFja3RyYWNrSnVtcHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrVHJhY2tKdW1wczsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgRGF0YUxhYmVsUHRyJiBnZXREYXRhTGFiZWwoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhTGFiZWxQdHI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKE1hY3JvQXNzZW1ibGVyKiBtYXNtKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwt
PmlzU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKCkubGlua1RvKCptX2Jh
Y2t0cmFja1NvdXJjZUxhYmVsLCBtYXNtKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChtYXNtLT5qdW1wKCkp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0YWNrT2Zmc2V0KCkpCisgICAgICAgICAgICAg
ICAgbWFzbS0+anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX2JhY2t0cmFja1N0
YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0xhYmVsKCkpCisgICAgICAgICAg
ICAgICAgbWFzbS0+anVtcCgpLmxpbmtUbyhtX2JhY2t0cmFja0xhYmVsLCBtYXNtKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZChtYXNt
LT5qdW1wKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGp1bXBUb0JhY2t0
cmFjayhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yLCBKdW1wIGp1bXApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9iYWNr
dHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbC0+aXNTZXQoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGp1bXAubGlua1RvKCptX2JhY2t0cmFja1NvdXJjZUxhYmVsLCBn
ZW5lcmF0b3IpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKGp1bXApOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpc1N0YWNrT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Np
b25TdGF0ZS5hZGRJbmRpcmVjdEp1bXBFbnRyeShnZXRTdGFja09mZnNldCgpLCBqdW1wKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGlzTGFiZWwoKSkKKyAgICAgICAgICAgICAgICBqdW1wLmxpbmtU
byhnZXRMYWJlbCgpLCBnZW5lcmF0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yLCBK
dW1wTGlzdCYganVtcHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0p1bXBMaXN0KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tTb3VyY2VMYWJlbCAmJiAobV9iYWNr
dHJhY2tTb3VyY2VMYWJlbC0+aXNTZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGp1bXBzLmxp
bmtUbygqbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCwgZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVu
ZChqdW1wcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RhY2tPZmZzZXQoKSkKKyAgICAg
ICAgICAgICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmFkZEluZGlyZWN0SnVtcEVu
dHJ5KGdldFN0YWNrT2Zmc2V0KCksIGp1bXBzKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTGFi
ZWwoKSkKKyAgICAgICAgICAgICAgICBqdW1wcy5saW5rVG8oZ2V0TGFiZWwoKSwgZ2VuZXJhdG9y
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFw
cGVuZChqdW1wcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGxpbmtEYXRhTGFiZWxUb0hl
cmVJZkV4aXN0cyhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaGFzRGF0YUxhYmVsKCkpIHsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1f
ZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNr
dHJhY2tSZWNvcmQoZ2V0RGF0YUxhYmVsKCksIGdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAg
ICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfSAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgIGJvb2wgcGxhbnRK
dW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwtPmlzU2V0
KCkpKQorICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmp1bXAoKm1fYmFja3RyYWNrU291
cmNlTGFiZWwpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9i
YWNrdHJhY2tTb3VyY2VKdW1wcy0+YXBwZW5kKGdlbmVyYXRvci0+anVtcCgpKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aXNTdGFja09mZnNldCgpKSB7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5qdW1wKEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGdldFN0YWNrT2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlzTGFiZWwoKSkgeworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+anVtcChnZXRM
YWJlbCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaGFzRGF0YUxhYmVsKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29y
ZHMuYXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBnZXRM
YWJlbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKFJlZ2V4
R2VuZXJhdG9yKiBnZW5lcmF0b3IsIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQorICAgICAg
ICB7CisgICAgICAgICAgICBMYWJlbCBoZXJlTGFiZWwgPSBnZW5lcmF0b3ItPmxhYmVsKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1RvTGFiZWwpIHsKKyAgICAg
ICAgICAgICAgICAqbV9iYWNrdHJhY2tUb0xhYmVsID0gaGVyZUxhYmVsOworICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNrVG9MYWJlbCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fYmFja1RyYWNrSnVtcHMubGluayhnZW5lcmF0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobmV4dEl0ZXJhdGlvbikKKyAgICAgICAgICAgICAgICBnZW5l
cmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmxpbmtUb05leHRJdGVyYXRpb24oaGVyZUxhYmVsKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgpKSB7CisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMu
YXBwZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBoZXJlTGFi
ZWwpKTsKKyAgICAgICAgICAgICAgICAvLyBkYXRhIGxhYmVsIGNsZWFyZWQgYXMgYSByZXN1bHQg
b2YgdGhlIGNsZWFyKCkgYmVsb3cKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBsaW5rQWx0
ZXJuYXRpdmVCYWNrdHJhY2tzVG8oUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgTGFiZWwgbGFi
ZWwsIGJvb2wgbmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2JhY2tUcmFja0p1bXBzLmxpbmtUbyhsYWJlbCwgZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG5leHRJdGVyYXRpb24pCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5tX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRlcmF0aW9uKGxhYmVsKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgpKSB7CisgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFs
dGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBsYWJlbCkpOworICAgICAg
ICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQmFja3RyYWNrVHlwZSBtX2JhY2t0cmFja1R5
cGU7CisgICAgICAgIGludDMyX3QgbV9iYWNrdHJhY2tTdGFja09mZnNldDsKKyAgICAgICAgTGFi
ZWwgbV9iYWNrdHJhY2tMYWJlbDsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUxhYmVsUHRy
OworICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tUb0xhYmVsOworICAgICAgICBEYXRhTGFiZWxQ
dHIqIG1fc3ViRGF0YUxhYmVsUHRyOworICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiogbV9u
ZXh0QmFja3RyYWNrOworICAgICAgICBMYWJlbCogbV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAg
ICAgICAgSnVtcExpc3QqIG1fYmFja3RyYWNrU291cmNlSnVtcHM7CisgICAgICAgIEp1bXBMaXN0
IG1fYmFja1RyYWNrSnVtcHM7CisgICAgfTsKKyAgICAgICAgCiAgICAgc3RydWN0IFRlcm1HZW5l
cmF0aW9uU3RhdGUgewogICAgICAgICBUZXJtR2VuZXJhdGlvblN0YXRlKFBhdHRlcm5EaXNqdW5j
dGlvbiogZGlzanVuY3Rpb24sIHVuc2lnbmVkIGNoZWNrZWRUb3RhbCkKICAgICAgICAgICAgIDog
ZGlzanVuY3Rpb24oZGlzanVuY3Rpb24pCiAgICAgICAgICAgICAsIGNoZWNrZWRUb3RhbChjaGVj
a2VkVG90YWwpCisgICAgICAgICAgICAsIG1fbGlua2VkQmFja3RyYWNrKDApCiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmVzZXRBbHRlcm5hdGl2ZSgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlzQmFja1RyYWNrR2VuZXJhdGVkID0gZmFsc2U7CisgICAgICAgICAgICBt
X2JhY2t0cmFjay5jbGVhcigpOwogICAgICAgICAgICAgYWx0ID0gMDsKICAgICAgICAgfQogICAg
ICAgICBib29sIGFsdGVybmF0aXZlVmFsaWQoKQpAQCAtMzIzLDcgKzc3NCwxMSBAQCBjbGFzcyBS
ZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBkaXNqdW5jdGlvbi0+bV9hbHRlcm5hdGl2ZXNbYWx0XTsKICAgICAgICAgfQotCisg
ICAgICAgIGJvb2wgaXNMYXN0QWx0ZXJuYXRpdmUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKGFsdCArIDEpID09IGRpc2p1bmN0aW9uLT5tX2FsdGVybmF0aXZlcy5zaXplKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRUZXJtKCkKICAgICAgICAgewog
ICAgICAgICAgICAgQVNTRVJUKGFsdGVybmF0aXZlVmFsaWQoKSk7CkBAIC0zNzQsNTIgKzgyOSwx
MDYgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAg
ICAgcmV0dXJuIHRlcm0oKS5pbnB1dFBvc2l0aW9uIC0gY2hlY2tlZFRvdGFsOwogICAgICAgICB9
CiAKLSAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soSnVtcCBqdW1wLCBNYWNyb0Fzc2VtYmxl
ciogbWFzbSkKKyAgICAgICAgdm9pZCBjbGVhckJhY2t0cmFjaygpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChpc0JhY2tUcmFja0dlbmVyYXRlZCkKLSAgICAgICAgICAgICAgICBqdW1wLmxp
bmtUbyhiYWNrdHJhY2tMYWJlbCwgbWFzbSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgYmFja1RyYWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICAgICAgbV9iYWNrdHJh
Y2suY2xlYXIoKTsKKyAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gMDsKICAgICAgICAg
fQotICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhKdW1wTGlzdCYganVtcHMsIE1hY3JvQXNz
ZW1ibGVyKiBtYXNtKQorICAgICAgICAKKyAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soTWFj
cm9Bc3NlbWJsZXIqIG1hc20pCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0JhY2tUcmFj
a0dlbmVyYXRlZCkKLSAgICAgICAgICAgICAgICBqdW1wcy5saW5rVG8oYmFja3RyYWNrTGFiZWws
IG1hc20pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhY2tUcmFja0p1bXBz
LmFwcGVuZChqdW1wcyk7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2so
bWFzbSk7CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBwbGFudEp1bXBUb0JhY2t0cmFja0lmRXhp
c3RzKE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICAKKyAgICAgICAgdm9pZCBqdW1wVG9C
YWNrdHJhY2soUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgSnVtcCBqdW1wKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoaXNCYWNrVHJhY2tHZW5lcmF0ZWQpIHsKLSAgICAgICAgICAgICAg
ICBtYXNtLT5qdW1wKGJhY2t0cmFja0xhYmVsKTsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLmp1
bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IsIGp1bXApOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgSnVtcExpc3QmIGp1
bXBzKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2so
Z2VuZXJhdG9yLCBqdW1wcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgcGxh
bnRKdW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2sucGxhbnRKdW1wVG9CYWNrdHJh
Y2tJZkV4aXN0cyhnZW5lcmF0b3IpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGxpbmtEYXRhTGFiZWxUb0JhY2t0cmFja0lmRXhpc3RzKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobV9iYWNrdHJhY2suaXNMYWJlbCgpKSAm
JiAobV9iYWNrdHJhY2suaGFzRGF0YUxhYmVsKCkpKSB7CisgICAgICAgICAgICAgICAgZ2VuZXJh
dG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBwZW5kKEFsdGVybmF0
aXZlQmFja3RyYWNrUmVjb3JkKG1fYmFja3RyYWNrLmdldERhdGFMYWJlbCgpLCBtX2JhY2t0cmFj
ay5nZXRMYWJlbCgpKSk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suY2xlYXJEYXRhTGFi
ZWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIH0g
ICAgICAgIAorCiAgICAgICAgIHZvaWQgYWRkQmFja3RyYWNrSnVtcChKdW1wIGp1bXApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGJhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1wKTsKKyAgICAgICAg
ICAgIG1fYmFja3RyYWNrLmFkZEJhY2t0cmFja0p1bXAoanVtcCk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNldEJhY2t0cmFja0RhdGFMYWJlbChEYXRhTGFiZWxQdHIgZHApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldERhdGFMYWJlbChkcCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIHNldEJhY2tUcmFja1N0YWNrT2Zmc2V0KGludDMyX3Qgc3RhY2tPZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldFN0YWNrT2Zmc2V0KHN0
YWNrT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRCYWNrdHJh
Y2tMYWJlbChMYWJlbCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2su
c2V0TGFiZWwobGFiZWwpOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0QmFja3RyYWNrR2Vu
ZXJhdGVkKExhYmVsIGxhYmVsKQorCisgICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3Ry
YWNrcyhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxz
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZlQmFj
a3RyYWNrcyhnZW5lcmF0b3IsIG5leHRJdGVyYXRpb24pOworICAgICAgICAgICAgbV9saW5rZWRC
YWNrdHJhY2sgPSAwOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVC
YWNrdHJhY2tzVG8oUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgTGFiZWwgbGFiZWwsIGJvb2wg
bmV4dEl0ZXJhdGlvbiA9IGZhbHNlKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFj
ay5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oZ2VuZXJhdG9yLCBsYWJlbCwgbmV4dEl0ZXJh
dGlvbik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldEJhY2t0cmFja0xpbmsoQmFja3Ry
YWNrRGVzdGluYXRpb24qIGxpbmtlZEJhY2t0cmFjaykKKyAgICAgICAgeworICAgICAgICAgICAg
bV9saW5rZWRCYWNrdHJhY2sgPSBsaW5rZWRCYWNrdHJhY2s7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgY2hhaW5CYWNrdHJhY2tzKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBmb2xs
b3dvbkJhY2t0cmFjaykKICAgICAgICAgewotICAgICAgICAgICAgaXNCYWNrVHJhY2tHZW5lcmF0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgYmFja3RyYWNrTGFiZWwgPSBsYWJlbDsKKyAgICAgICAg
ICAgIGlmIChtX2xpbmtlZEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX2xpbmtlZEJhY2t0
cmFjay0+bGlua1RvTmV4dEJhY2t0cmFjayhmb2xsb3dvbkJhY2t0cmFjayk7CiAgICAgICAgIH0K
LSAgICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKE1hY3JvQXNzZW1ibGVyKiBt
YXNtKQorICAgICAgICAKKyAgICAgICAgdm9pZCBjaGFpbkJhY2t0cmFja0p1bXBzKEp1bXBMaXN0
KiBqdW1wTGlzdCkKICAgICAgICAgewotICAgICAgICAgICAgaXNCYWNrVHJhY2tHZW5lcmF0ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGJhY2tUcmFja0p1bXBzLmxpbmsobWFzbSk7CisgICAgICAg
ICAgICBpZiAobV9saW5rZWRCYWNrdHJhY2sgJiYgIShtX2xpbmtlZEJhY2t0cmFjay0+aGFzRGVz
dGluYXRpb24oKSkpCisgICAgICAgICAgICAgICAgbV9saW5rZWRCYWNrdHJhY2stPnNldEJhY2t0
cmFja0p1bXBMaXN0KGp1bXBMaXN0KTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGxpbmtBbHRl
cm5hdGl2ZUJhY2t0cmFja3NUbyhMYWJlbCBsYWJlbCwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisg
ICAgICAgIAorICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgZ2V0QmFja3RyYWNrRGVzdGlu
YXRpb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBpc0JhY2tUcmFja0dlbmVyYXRlZCA9IGZh
bHNlOwotICAgICAgICAgICAgYmFja1RyYWNrSnVtcHMubGlua1RvKGxhYmVsLCBtYXNtKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2JhY2t0cmFjazsKICAgICAgICAgfQotICAgICAgICB2b2lkIHBy
b3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20oVGVybUdlbmVyYXRpb25TdGF0ZSYgbmVzdGVkUGFyZW50
aGVzZXNTdGF0ZSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisKKyAgICAgICAgdm9pZCBwcm9wYWdh
dGVCYWNrdHJhY2tpbmdGcm9tKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0b3IsIEJhY2t0cmFja0Rl
c3RpbmF0aW9uJiBiYWNrdHJhY2ssIGJvb2wgZG9KdW1wID0gdHJ1ZSkKICAgICAgICAgewotICAg
ICAgICAgICAganVtcFRvQmFja3RyYWNrKG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuYmFja1RyYWNr
SnVtcHMsIG1hc20pOwotICAgICAgICAgICAgaWYgKG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuaXNC
YWNrVHJhY2tHZW5lcmF0ZWQpCi0gICAgICAgICAgICAgICAgc2V0QmFja3RyYWNrR2VuZXJhdGVk
KG5lc3RlZFBhcmVudGhlc2VzU3RhdGUuYmFja3RyYWNrTGFiZWwpOworICAgICAgICAgICAgaWYg
KGRvSnVtcCkKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2soZ2Vu
ZXJhdG9yLCBiYWNrdHJhY2suZ2V0QmFja3RyYWNrSnVtcHMoKSk7CisgICAgICAgICAgICBpZiAo
YmFja3RyYWNrLmhhc0Rlc3RpbmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9iYWNr
dHJhY2suaGFzRGF0YUxhYmVsKCkpCisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9l
eHByZXNzaW9uU3RhdGUuYWRkRGF0YUxhYmVsVG9OZXh0SXRlcmF0aW9uKG1fYmFja3RyYWNrLmdl
dERhdGFMYWJlbCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2JhY2t0
cmFjay5jb3B5VGFyZ2V0KGJhY2t0cmFjaywgZG9KdW1wKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCiAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogZGlzanVuY3Rpb247CkBAIC00Mjcs
MTEgKzkzNiwxMjAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQog
ICAgIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFsdDsKICAgICAgICAgdW5zaWduZWQgdDsK
LSAgICAgICAgSnVtcExpc3QgYmFja1RyYWNrSnVtcHM7Ci0gICAgICAgIExhYmVsIGJhY2t0cmFj
a0xhYmVsOwotICAgICAgICBib29sIGlzQmFja1RyYWNrR2VuZXJhdGVkOworICAgICAgICBCYWNr
dHJhY2tEZXN0aW5hdGlvbiBtX2JhY2t0cmFjazsKKyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRp
b24qIG1fbGlua2VkQmFja3RyYWNrOworICAgICAgICAKICAgICB9OwogCisgICAgc3RydWN0IFBh
cmVudGhlc2VzVGFpbCB7CisgICAgICAgIFBhcmVudGhlc2VzVGFpbChQYXR0ZXJuVGVybSYgdGVy
bSkKKyAgICAgICAgICAgIDogbV90ZXJtKHRlcm0pCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBwcm9jZXNzQmFja3RyYWNrcyhSZWdleEdlbmVyYXRvciogZ2Vu
ZXJhdG9yLCBUZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgVGVybUdlbmVyYXRpb25TdGF0ZSYg
cGFyZW50aGVzZXNTdGF0ZSwgTGFiZWwgbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIExhYmVsIGZh
bGxUaHJvdWdoKQorICAgICAgICB7CisgICAgICAgICAgICBtX25vbkdyZWVkeVRyeVBhcmVudGhl
c2VzID0gbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXM7CisgICAgICAgICAgICBtX2ZhbGxUaHJvdWdo
ID0gZmFsbFRocm91Z2g7CisKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuZ2V0QmFja3Ry
YWNrRGVzdGluYXRpb24oKS5jb3B5VG8obV9wYXJlbkJhY2t0cmFjayk7CisgICAgICAgICAgICBz
dGF0ZS5jaGFpbkJhY2t0cmFja3MoJm1fYmFja3RyYWNrKTsKKyAgICAgICAgICAgIEJhY2t0cmFj
a0Rlc3RpbmF0aW9uJiBzdGF0ZUJhY2t0cmFjayA9IHN0YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0
aW9uKCk7CisgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5jb3B5VG8obV9iYWNrdHJhY2spOwor
ICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suc2V0QmFja3RyYWNrVG9MYWJlbCgmbV9iYWNrdHJh
Y2tUb0xhYmVsKTsKKyAgICAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0xpbmsoJm1fYmFja3Ry
YWNrKTsKKyAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLnNldFN1YkRhdGFMYWJlbFB0cigmbV9k
YXRhQWZ0ZXJMYWJlbFB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZG9EaXJlY3RC
YWNrdHJhY2sgPSBtX3BhcmVuQmFja3RyYWNrLmhhc0Rlc3RpbmF0aW9uKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICgobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyR3Jl
ZWR5KSB8fCAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSkKKyAg
ICAgICAgICAgICAgICBtX2RvRGlyZWN0QmFja3RyYWNrID0gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmIChtX2RvRGlyZWN0QmFja3RyYWNrKQorICAgICAgICAgICAgICAgIHN0YXRlLnByb3BhZ2F0
ZUJhY2t0cmFja2luZ0Zyb20oZ2VuZXJhdG9yLCBtX3BhcmVuQmFja3RyYWNrLCBmYWxzZSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRCYWNr
dHJhY2tKdW1wTGlzdCgmbV9wYXR0QmFja3RyYWNrSnVtcHMpOworICAgICAgICAgICAgICAgIHN0
YXRlQmFja3RyYWNrLnNldEJhY2t0cmFja1NvdXJjZUxhYmVsKCZtX2JhY2t0cmFja0Zyb21BZnRl
clBhcmVucyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHBhcmVu
dGhlc2VzU3RhdGUuY2hhaW5CYWNrdHJhY2tKdW1wcygmbV9wYXR0QmFja3RyYWNrSnVtcHMpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXROZXh0SXRlcmF0aW9uKExhYmVsIG5leHRJdGVy
YXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9iYWNrdHJhY2tUb0xhYmVsLmlz
U2V0KCkpCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tUb0xhYmVsID0gbmV4dEl0ZXJhdGlv
bjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRkQWZ0ZXJQYXJlbkp1bXAoSnVtcCBqdW1w
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3BhdHRCYWNrdHJhY2tKdW1wcy5hcHBlbmQoanVt
cCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFJlZ2V4
R2VuZXJhdG9yKiBnZW5lcmF0b3IsIEp1bXBMaXN0JiBqdW1wc1RvTmV4dCwgYm9vbCBuZXh0QmFj
a3RyYWNrRmFsbFRocm91Z2gpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFJlZ2lzdGVy
SUQgaW5kZXhUZW1wb3JhcnkgPSByZWdUMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbiA9IG1fdGVybS5mcmFtZUxvY2F0aW9uOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIW1fYmFja3RyYWNrLmhhc0Rlc3RpbmF0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9iYWNrdHJhY2tUb0xhYmVsLmlzU2V0KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9iYWNrdHJhY2suc2V0TGFiZWwobV9iYWNrdHJhY2tUb0xhYmVsKTsKKyAgICAgICAg
ICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldEJhY2t0cmFj
a0p1bXBMaXN0KCZqdW1wc1RvTmV4dCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXh0QmFja3RyYWNrRmFsbFRocm91Z2ggPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gQSBmYWlsdXJlIEFGVEVSIHRoZSBwYXJlbnMganVtcHMgaGVyZSAtIEJhY2t0
cmFjayB0byB0aGlzIHBhcmVuCisgICAgICAgICAgICBtX2JhY2t0cmFja0Zyb21BZnRlclBhcmVu
cyA9IGdlbmVyYXRvci0+bGFiZWwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
ZGF0YUFmdGVyTGFiZWxQdHIuaXNTZXQoKSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPm1f
ZXhwcmVzc2lvblN0YXRlLm1fYmFja3RyYWNrUmVjb3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNr
dHJhY2tSZWNvcmQobV9kYXRhQWZ0ZXJMYWJlbFB0ciwgbV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJl
bnMpKTsKKworICAgICAgICAgICAgbV9wYXR0QmFja3RyYWNrSnVtcHMubGluayhnZW5lcmF0b3Ip
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyAtMSB3ZSBo
YXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3ItPmxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxv
Y2F0aW9uLCBpbmRleFRlbXBvcmFyeSk7CisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suanVt
cFRvQmFja3RyYWNrKGdlbmVyYXRvciwgZ2VuZXJhdG9yLT5icmFuY2gzMihFcXVhbCwgaW5kZXhU
ZW1wb3JhcnksIEltbTMyKC0xKSkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Rlcm0ucXVh
bnRpdHlUeXBlID09IFF1YW50aWZpZXJOb25HcmVlZHkpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGlzIC0xIHdlIGhhdmUgbm93IHRlc3RlZCB3aXRoIGJvdGggd2l0aCBhbmQgd2l0aG91
dCB0aGUgcGFyZW5zLgorICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bG9hZEZyb21GcmFtZShw
YXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKKyAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPmJyYW5jaDMyKEVxdWFsLCBpbmRleFRlbXBvcmFyeSwgSW1tMzIoLTEpKS5s
aW5rVG8obV9ub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgZ2VuZXJhdG9yKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2RvRGlyZWN0QmFja3RyYWNrKQor
ICAgICAgICAgICAgICAgIG1fcGFyZW5CYWNrdHJhY2sucGxhbnRKdW1wVG9CYWNrdHJhY2tJZkV4
aXN0cyhnZW5lcmF0b3IpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBBIGZhaWx1cmUg
V0lUSElOIHRoZSBwYXJlbnMganVtcHMgaGVyZQorICAgICAgICAgICAgbV9wYXJlbkJhY2t0cmFj
ay5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKGdlbmVyYXRvcik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX3Rlcm0uY2FwdHVyZSgpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+c3RvcmUzMihJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAobV90ZXJtLnBhcmVudGhlc2Vz
LnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX3Rlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJHcmVlZHkpIHsKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3ItPnN0b3JlVG9GcmFtZShJbW0zMigtMSksIHBhcmVudGhl
c2VzRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5qdW1wKCkubGlu
a1RvKG1fZmFsbFRocm91Z2gsIGdlbmVyYXRvcik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFu
ZXh0QmFja3RyYWNrRmFsbFRocm91Z2gpCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2suanVt
cFRvQmFja3RyYWNrKGdlbmVyYXRvcik7CisKKyAgICAgICAgICAgIGlmICghbV9kb0RpcmVjdEJh
Y2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXROZXh0QmFja3RyYWNrTGFi
ZWwobV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBQYXR0ZXJuVGVybSYgbV90ZXJtOworICAgICAgICBMYWJlbCBtX25vbkdyZWVkeVRyeVBh
cmVudGhlc2VzOworICAgICAgICBMYWJlbCBtX2ZhbGxUaHJvdWdoOworICAgICAgICBMYWJlbCBt
X2JhY2t0cmFja1RvTGFiZWw7CisgICAgICAgIExhYmVsIG1fYmFja3RyYWNrRnJvbUFmdGVyUGFy
ZW5zOworICAgICAgICBEYXRhTGFiZWxQdHIgbV9kYXRhQWZ0ZXJMYWJlbFB0cjsKKyAgICAgICAg
SnVtcExpc3QgbV9wYXR0QmFja3RyYWNrSnVtcHM7CisgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0
aW9uIG1fcGFyZW5CYWNrdHJhY2s7CisgICAgICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uIG1fYmFj
a3RyYWNrOworICAgICAgICBib29sIG1fZG9EaXJlY3RCYWNrdHJhY2s7CisgICAgfTsKKyAgICAK
KyAgICAKICAgICB2b2lkIGdlbmVyYXRlQXNzZXJ0aW9uQk9MKFRlcm1HZW5lcmF0aW9uU3RhdGUm
IHN0YXRlKQogICAgIHsKICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBzdGF0ZS50ZXJtKCk7
CkBAIC00NDUsMTUgKzEwNjMsMTUgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1h
Y3JvQXNzZQogCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCkg
LSAxLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0
ZXIsIG1hdGNoRGVzdCwgbV9wYXR0ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAg
ICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAgICAg
c3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogCiAgICAgICAgICAgICBtYXRjaERlc3QubGlu
ayh0aGlzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEVyaywgcmVhbGx5IHNo
b3VsZCBwb2lzb24gb3V0IHRoZXNlIGFsdGVybmF0aXZlcyBlYXJseS4gOi0vCiAgICAgICAgICAg
ICBpZiAodGVybS5pbnB1dFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayh0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2soYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBJbW0zMihzdGF0ZS5jaGVja2Vk
VG90YWwpKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRo
aXMsIGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwgSW1tMzIoc3RhdGUuY2hlY2tlZFRvdGFsKSkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC00NzAsMTUgKzEwODgsMTUgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVy
KHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJh
Y3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCBtX3BhdHRlcm4ubmV3bGluZUNoYXJhY3Rl
ckNsYXNzKCkpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhp
cyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAgICAg
ICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKHRlcm0uaW5wdXRQb3NpdGlvbiA9PSBzdGF0ZS5jaGVja2VkVG90YWwpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKG5vdEF0RW5kT2ZJbnB1dCgpLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgbm90QXRFbmRPZklucHV0
KCkpOwogICAgICAgICAgICAgLy8gRXJrLCByZWFsbHkgc2hvdWxkIHBvaXNvbiBvdXQgdGhlc2Ug
YWx0ZXJuYXRpdmVzIGVhcmx5LiA6LS8KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUxMiwy
MCArMTEzMCwyMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAg
ICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJlIGlmIHRoZSBsYXN0IGNoYXJhY3RlciB3
YXMgbm90IGEgd29yZGNoYXIuCiAgICAgICAgIEp1bXBMaXN0IG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyOwogICAgICAgICBKdW1wTGlzdCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcjsKLSAgICAg
ICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7CisgICAgICAgIGlmICh0ZXJtLmludmVydCgp
KSB7CiAgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHN0YXRlLCBub25Xb3JkQ2hh
clRoZW5Ob25Xb3JkQ2hhciwgbm9uV29yZENoYXJUaGVuV29yZENoYXIpOwogICAgICAgICAgICAg
bm9uV29yZENoYXJUaGVuV29yZENoYXIuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHN0YXRlLCBub25Xb3JkQ2hhclRo
ZW5Xb3JkQ2hhciwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIpOwogICAgICAgICAgICAgbm9u
V29yZENoYXJUaGVuTm9uV29yZENoYXIuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB0aGlz
KTsKKyAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIG5vbldvcmRDaGFyVGhlbk5v
bldvcmRDaGFyKTsKIAogICAgICAgICAvLyBXZSBqdW1wIGhlcmUgaWYgdGhlIGxhc3QgY2hhcmFj
dGVyIHdhcyBhIHdvcmRjaGFyLgogICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAg
ICAgSnVtcExpc3Qgd29yZENoYXJUaGVuV29yZENoYXI7CiAgICAgICAgIEp1bXBMaXN0IHdvcmRD
aGFyVGhlbk5vbldvcmRDaGFyOwotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsK
KyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpIHsKICAgICAgICAgICAgIG1hdGNoQXNzZXJ0aW9u
V29yZGNoYXIoc3RhdGUsIHdvcmRDaGFyVGhlbk5vbldvcmRDaGFyLCB3b3JkQ2hhclRoZW5Xb3Jk
Q2hhcik7CiAgICAgICAgICAgICB3b3JkQ2hhclRoZW5Xb3JkQ2hhci5hcHBlbmQoanVtcCgpKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTUzMyw3ICsxMTUxLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgLy8gVGhpcyBjYW4gZmFsbC10aG91
Z2ghCiAgICAgICAgIH0KIAotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sod29yZENoYXJU
aGVuV29yZENoYXIsIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywg
d29yZENoYXJUaGVuV29yZENoYXIpOwogICAgICAgICAKICAgICAgICAgbm9uV29yZENoYXJUaGVu
V29yZENoYXIubGluayh0aGlzKTsKICAgICAgICAgd29yZENoYXJUaGVuTm9uV29yZENoYXIubGlu
ayh0aGlzKTsKQEAgLTU0NywxMCArMTE2NSwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGlmIChtX3BhdHRlcm4ubV9pZ25vcmVDYXNlICYmIGlz
QVNDSUlBbHBoYShjaCkpIHsKICAgICAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRP
ZmZzZXQoKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG9yMzIoSW1tMzIoMzIpLCBjaGFyYWN0
ZXIpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5vdEVxdWFs
LCBjaGFyYWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSksIHRoaXMpOworICAgICAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDMyKE5vdEVxdWFsLCBjaGFy
YWN0ZXIsIEltbTMyKFVuaWNvZGU6OnRvTG93ZXIoY2gpKSkpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKCFtX3BhdHRlcm4ubV9pZ25vcmVDYXNlIHx8IChVbmljb2RlOjp0
b0xvd2VyKGNoKSA9PSBVbmljb2RlOjp0b1VwcGVyKGNoKSkpOwotICAgICAgICAgICAgc3RhdGUu
anVtcFRvQmFja3RyYWNrKGp1bXBJZkNoYXJOb3RFcXVhbHMoY2gsIHN0YXRlLmlucHV0T2Zmc2V0
KCkpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBqdW1w
SWZDaGFyTm90RXF1YWxzKGNoLCBzdGF0ZS5pbnB1dE9mZnNldCgpKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTU3Myw5ICsxMTkxLDkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZQogICAgICAgICBpZiAobWFzaykgewogICAgICAgICAgICAgbG9hZDMyV2l0aFVu
YWxpZ25lZEhhbGZXb3JkcyhCYXNlSW5kZXgoaW5wdXQsIGluZGV4LCBUaW1lc1R3bywgc3RhdGUu
aW5wdXRPZmZzZXQoKSAqIHNpemVvZihVQ2hhcikpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAg
b3IzMihJbW0zMihtYXNrKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayhicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIgfCBtYXNr
KSksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5j
aDMyKE5vdEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGNoUGFpciB8IG1hc2spKSk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyV2l0aFVu
YWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNU
d28sIHN0YXRlLmlucHV0T2Zmc2V0KCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2hQYWlyKSks
IHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaDMy
V2l0aFVuYWxpZ25lZEhhbGZXb3JkcyhOb3RFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwg
VGltZXNUd28sIHN0YXRlLmlucHV0T2Zmc2V0KCkgKiBzaXplb2YoVUNoYXIpKSwgSW1tMzIoY2hQ
YWlyKSkpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyRml4ZWQo
VGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCkBAIC01OTIsMTAgKzEyMTAsMTAgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CiAgICAgICAgICAgICBsb2FkMTYo
QmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0YXRlLmlucHV0T2Zm
c2V0KCkgKyB0ZXJtLnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSksIGNoYXJhY3Rlcik7
CiAgICAgICAgICAgICBvcjMyKEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihV
bmljb2RlOjp0b0xvd2VyKGNoKSkpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2Rl
Ojp0b0xvd2VyKGNoKSkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCgh
bV9wYXR0ZXJuLm1faWdub3JlQ2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29k
ZTo6dG9VcHBlcihjaCkpKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFu
Y2gxNihOb3RFcXVhbCwgQmFzZUluZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywg
KHN0YXRlLmlucHV0T2Zmc2V0KCkgKyB0ZXJtLnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFy
KSksIEltbTMyKGNoKSksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KHRoaXMsIGJyYW5jaDE2KE5vdEVxdWFsLCBCYXNlSW5kZXgoaW5wdXQsIGNvdW50UmVnaXN0ZXIs
IFRpbWVzVHdvLCAoc3RhdGUuaW5wdXRPZmZzZXQoKSArIHRlcm0ucXVhbnRpdHlDb3VudCkgKiBz
aXplb2YoVUNoYXIpKSwgSW1tMzIoY2gpKSk7CiAgICAgICAgIH0KICAgICAgICAgYWRkMzIoSW1t
MzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBicmFuY2gzMihOb3RFcXVhbCwgY291bnRS
ZWdpc3RlciwgaW5kZXgpLmxpbmtUbyhsb29wLCB0aGlzKTsKQEAgLTYzMiw3ICsxMjUwLDcgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExhYmVs
IGJhY2t0cmFja0JlZ2luKHRoaXMpOwogICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVM
b2NhdGlvbiwgY291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhi
cmFuY2hUZXN0MzIoWmVybywgY291bnRSZWdpc3RlciksIHRoaXMpOworICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpKTsK
ICAgICAgICAgc3ViMzIoSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBzdWIzMihJ
bW0zMigxKSwgaW5kZXgpOwogCkBAIC02NDAsNyArMTI1OCw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJh
dG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdp
c3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKIAotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tH
ZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOworICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJl
bChiYWNrdHJhY2tCZWdpbik7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZVBhdHRlcm5DaGFy
YWN0ZXJOb25HcmVlZHkoVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUpCkBAIC02NTYsNyArMTI3
NCw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAg
ICBMYWJlbCBoYXJkRmFpbCh0aGlzKTsKICAgICAgICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5k
ZXgpOwotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogCiAgICAgICAgIExhYmVsIGJhY2t0cmFj
a0JlZ2luKHRoaXMpOwogICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwg
Y291bnRSZWdpc3Rlcik7CkBAIC02NzksNyArMTI5Nyw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgZmlyc3RUaW1lRG9Ob3RoaW5nLmxpbmsodGhp
cyk7CiAgICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRp
b24pOwogCi0gICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdp
bik7CisgICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKICAg
ICB9CiAKICAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NTaW5nbGUoVGVybUdlbmVyYXRp
b25TdGF0ZSYgc3RhdGUpCkBAIC02OTEsMTAgKzEzMDksMTAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRlLmlucHV0
T2Zmc2V0KCksIGNoYXJhY3Rlcik7CiAgICAgICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFj
dGVyLCBtYXRjaERlc3QsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwogCi0gICAgICAgIGlmICh0ZXJt
LmludmVydE9yQ2FwdHVyZSkKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhtYXRj
aERlc3QsIHRoaXMpOworICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkKKyAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBtYXRjaERlc3QpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICAgICAgbWF0Y2hEZXN0Lmxp
bmsodGhpcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MTMsMTAgKzEzMzEsMTAgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBsb2FkMTYoQmFzZUlu
ZGV4KGlucHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0YXRlLmlucHV0T2Zmc2V0KCkg
KyB0ZXJtLnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSksIGNoYXJhY3Rlcik7CiAgICAg
ICAgIG1hdGNoQ2hhcmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIHRlcm0uY2hhcmFj
dGVyQ2xhc3MpOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVydE9yQ2FwdHVyZSkKLSAgICAgICAg
ICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhtYXRjaERlc3QsIHRoaXMpOworICAgICAgICBpZiAo
dGVybS5pbnZlcnQoKSkKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBt
YXRjaERlc3QpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRo
aXMpOwogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0KIApAQCAt
NzM2LDcgKzEzNTQsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgIExhYmVsIGxvb3AodGhpcyk7CiAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChhdEVu
ZE9mSW5wdXQoKSk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7CisgICAg
ICAgIGlmICh0ZXJtLmludmVydCgpKSB7CiAgICAgICAgICAgICByZWFkQ2hhcmFjdGVyKHN0YXRl
LmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBtYXRjaENoYXJhY3RlckNs
YXNzKGNoYXJhY3RlciwgZmFpbHVyZXMsIHRlcm0uY2hhcmFjdGVyQ2xhc3MpOwogICAgICAgICB9
IGVsc2UgewpAQCAtNzU3LDcgKzEzNzUsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZh
dGUgTWFjcm9Bc3NlCiAKICAgICAgICAgTGFiZWwgYmFja3RyYWNrQmVnaW4odGhpcyk7CiAgICAg
ICAgIGxvYWRGcm9tRnJhbWUodGVybS5mcmFtZUxvY2F0aW9uLCBjb3VudFJlZ2lzdGVyKTsKLSAg
ICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaFRlc3QzMihaZXJvLCBjb3VudFJlZ2lz
dGVyKSwgdGhpcyk7CisgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2hU
ZXN0MzIoWmVybywgY291bnRSZWdpc3RlcikpOwogICAgICAgICBzdWIzMihJbW0zMigxKSwgY291
bnRSZWdpc3Rlcik7CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBpbmRleCk7CiAKQEAgLTc2NSw3
ICsxMzgzLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAg
ICAgICAgIHN0b3JlVG9GcmFtZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwog
Ci0gICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdpbik7Cisg
ICAgICAgIHN0YXRlLnNldEJhY2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKICAgICB9CiAK
ICAgICB2b2lkIGdlbmVyYXRlQ2hhcmFjdGVyQ2xhc3NOb25HcmVlZHkoVGVybUdlbmVyYXRpb25T
dGF0ZSYgc3RhdGUpCkBAIC03ODAsNyArMTM5OCw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICBMYWJlbCBoYXJkRmFpbCh0aGlzKTsKICAgICAg
ICAgc3ViMzIoY291bnRSZWdpc3RlciwgaW5kZXgpOwotICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMp
OwogCiAgICAgICAgIExhYmVsIGJhY2t0cmFja0JlZ2luKHRoaXMpOwogICAgICAgICBsb2FkRnJv
bUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwgY291bnRSZWdpc3Rlcik7CkBAIC03OTIsNyArMTQx
MCw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAg
cmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICBt
YXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLmNoYXJhY3RlckNs
YXNzKTsKIAotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpCisgICAgICAgIGlmICh0
ZXJtLmludmVydCgpKQogICAgICAgICAgICAgbWF0Y2hEZXN0LmxpbmtUbyhoYXJkRmFpbCwgdGhp
cyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAganVtcChoYXJkRmFpbCk7CkBAIC04MDUs
NyArMTQyMyw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAg
ICAgICAgZmlyc3RUaW1lRG9Ob3RoaW5nLmxpbmsodGhpcyk7CiAgICAgICAgIHN0b3JlVG9GcmFt
ZShjb3VudFJlZ2lzdGVyLCB0ZXJtLmZyYW1lTG9jYXRpb24pOwogCi0gICAgICAgIHN0YXRlLnNl
dEJhY2t0cmFja0dlbmVyYXRlZChiYWNrdHJhY2tCZWdpbik7CisgICAgICAgIHN0YXRlLnNldEJh
Y2t0cmFja0xhYmVsKGJhY2t0cmFja0JlZ2luKTsKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRl
UGFyZW50aGVzZXNEaXNqdW5jdGlvbihQYXR0ZXJuVGVybSYgcGFyZW50aGVzZXNUZXJtLCBUZXJt
R2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgdW5zaWduZWQgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9u
KQpAQCAtODM3LDkgKzE0NTUsOSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFj
cm9Bc3NlCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc2tpcC5saW5rKHRoaXMp
OwogCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFj
a0JlZ2luKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChiYWNrdHJh
Y2tCZWdpbik7CiAKLSAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcElm
Tm9BdmFpbGFibGVJbnB1dChjb3VudFRvQ2hlY2spLCB0aGlzKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywganVtcElmTm9BdmFpbGFibGVJbnB1dChjb3VudFRv
Q2hlY2spKTsKICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgKz0gY291bnRUb0No
ZWNrOwogICAgICAgICAgICAgfQogCkBAIC04NDksNiArMTQ2Nyw3IEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3Rh
bCAtPSBjb3VudFRvQ2hlY2s7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKdW1wTGlz
dCBzdWNjZXNzZXM7CisgICAgICAgICAgICBib29sIHByb3BvZ2F0ZUJhY2t0cmFjayA9IGZhbHNl
OwogCiAgICAgICAgICAgICBmb3IgKHN0YXRlLnJlc2V0QWx0ZXJuYXRpdmUoKTsgc3RhdGUuYWx0
ZXJuYXRpdmVWYWxpZCgpOyBzdGF0ZS5uZXh0QWx0ZXJuYXRpdmUoKSkgewogCkBAIC04NjcsMzcg
KzE0ODYsMzUgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAg
ICAgICAgICAgICAgICAgLy8gTWF0Y2hlZCBhbiBhbHRlcm5hdGl2ZS4KICAgICAgICAgICAgICAg
ICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsID0gc3RvcmVUb0ZyYW1lV2l0aFBhdGNoKGFsdGVybmF0
aXZlRnJhbWVMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgc3VjY2Vzc2VzLmFwcGVuZChqdW1w
KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghc3RhdGUuaXNMYXN0
QWx0ZXJuYXRpdmUoKSB8fCBjb3VudFRvQ2hlY2spCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3Nlcy5hcHBlbmQoanVtcCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEFsdGVybmF0aXZlIGRp
ZCBub3QgbWF0Y2guCi0gICAgICAgICAgICAgICAgTGFiZWwgYmFja3RyYWNrTG9jYXRpb24odGhp
cyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gQ2FuIHdlIGJhY2t0cmFj
ayB0aGUgYWx0ZXJuYXRpdmU/IC0gaWYgc28sIGRvIHNvLiAgSWYgbm90LCBqdXN0IGZhbGwgdGhy
b3VnaCB0byB0aGUgbmV4dCBvbmUuCi0gICAgICAgICAgICAgICAgc3RhdGUucGxhbnRKdW1wVG9C
YWNrdHJhY2tJZkV4aXN0cyh0aGlzKTsKKworICAgICAgICAgICAgICAgIHN0YXRlLnNldEJhY2t0
cmFja0RhdGFMYWJlbChkYXRhTGFiZWwpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICAg
ICAgLy8gRG8gd2UgaGF2ZSBhIGJhY2t0cmFjayBkZXN0aW5hdGlvbj8gCisgICAgICAgICAgICAg
ICAgLy8gICAgaWYgc28sIGxpbmsgdGhlIGRhdGEgbGFiZWwgdG8gaXQuCisgICAgICAgICAgICAg
ICAgc3RhdGUubGlua0RhdGFMYWJlbFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIXN0YXRlLmlzTGFzdEFsdGVybmF0aXZlKCkgfHwgY291bnRUb0NoZWNr
KQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRo
aXMpOwogCiAgICAgICAgICAgICAgICAgaWYgKGNvdW50VG9DaGVjaykgewogICAgICAgICAgICAg
ICAgICAgICBzdWIzMihJbW0zMihjb3VudFRvQ2hlY2spLCBpbmRleCk7CiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCAtPSBjb3VudFRvQ2hlY2s7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5h
dGl2ZUJhY2t0cmFja1JlY29yZChkYXRhTGFiZWwsIGJhY2t0cmFja0xvY2F0aW9uKSk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBwcm9wb2dhdGVCYWNrdHJhY2sgPSB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgLy8gV2UgZmFsbCB0aHJvdWdoIHRvIGhlcmUgd2hlbiB0aGUgbGFzdCBhbHRl
cm5hdGl2ZSBmYWlscy4KICAgICAgICAgICAgIC8vIEFkZCBhIGJhY2t0cmFjayBvdXQgb2YgaGVy
ZSBmb3IgdGhlIHBhcmVudGhlc2UgaGFuZGxpbmcgY29kZSB0byBsaW5rIHVwLgotICAgICAgICAg
ICAgc3RhdGUuYWRkQmFja3RyYWNrSnVtcChqdW1wKCkpOworICAgICAgICAgICAgaWYgKCFwcm9w
b2dhdGVCYWNrdHJhY2spCisgICAgICAgICAgICAgICAgc3RhdGUuYWRkQmFja3RyYWNrSnVtcChq
dW1wKCkpOwogCi0gICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIHRyYW1wb2xpbmUgZm9yIHRoZSBw
YXJlbnMgY29kZSB0byBiYWNrdHJhY2sgdG8sIHRvIHJldHJ5IHRoZQorICAgICAgICAgICAgLy8g
U2F2ZSBhZGRyZXNzIG9uIHN0YWNrIGZvciB0aGUgcGFyZW5zIGNvZGUgdG8gYmFja3RyYWNrIHRv
LCB0byByZXRyeSB0aGUKICAgICAgICAgICAgIC8vIG5leHQgYWx0ZXJuYXRpdmUuCi0gICAgICAg
ICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQobGFiZWwoKSk7Ci0gICAgICAgICAgICBs
b2FkRnJvbUZyYW1lQW5kSnVtcChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwotCi0gICAgICAg
ICAgICAvLyBGSVhNRTogYm90aCBvZiB0aGUgYWJvdmUgaG9va3MgYXJlIGEgbGl0dGxlIGluZWZm
aWNpZW50LCBpbiB0aGF0IHlvdQotICAgICAgICAgICAgLy8gbWF5IGVuZCB1cCB0cmFtcG9saW5p
bmcgaGVyZSwganVzdCB0byB0cmFtcG9saW5lIGJhY2sgb3V0IHRvIHRoZQotICAgICAgICAgICAg
Ly8gcGFyZW50aGVzZXMgY29kZSwgb3IgdmljZSB2ZXJzYS4gIFdlIGNhbiBwcm9iYWJseSBlbGlt
aW5hdGUgYSBqdW1wCi0gICAgICAgICAgICAvLyBieSByZXN0cnVjdHVyaW5nLCBidXQgY29kaW5n
IHRoaXMgd2F5IGZvciBub3cgZm9yIHNpbXBsaWNpdHkgZHVyaW5nCi0gICAgICAgICAgICAvLyBk
ZXZlbG9wbWVudC4KKyAgICAgICAgICAgIHN0YXRlLnNldEJhY2tUcmFja1N0YWNrT2Zmc2V0KGFs
dGVybmF0aXZlRnJhbWVMb2NhdGlvbiAqIHNpemVvZih2b2lkKikpOwogCiAgICAgICAgICAgICBz
dWNjZXNzZXMubGluayh0aGlzKTsKICAgICAgICAgfQpAQCAtOTE4LDEzICsxNTM1LDEzIEBAIGNs
YXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIGFsdGVy
bmF0aXZlRnJhbWVMb2NhdGlvbiArPSBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFy
ZW50aGVzZXNPbmNlOwogCiAgICAgICAgIC8vIG9wdGltaXplZCBjYXNlIC0gbm8gY2FwdHVyZSAm
IG5vIHF1YW50aWZpZXIgY2FuIGJlIGhhbmRsZWQgaW4gYSBsaWdodC13ZWlnaHQgbWFubmVyLgot
ICAgICAgICBpZiAoIXRlcm0uaW52ZXJ0T3JDYXB0dXJlICYmICh0ZXJtLnF1YW50aXR5VHlwZSA9
PSBRdWFudGlmaWVyRml4ZWRDb3VudCkpIHsKKyAgICAgICAgaWYgKCF0ZXJtLmNhcHR1cmUoKSAm
JiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpKSB7CiAgICAgICAg
ICAgICBUZXJtR2VuZXJhdGlvblN0YXRlIHBhcmVudGhlc2VzU3RhdGUoZGlzanVuY3Rpb24sIHN0
YXRlLmNoZWNrZWRUb3RhbCk7CiAgICAgICAgICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVu
Y3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRoZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9j
YXRpb24pOwogICAgICAgICAgICAgLy8gdGhpcyBleHBlY3RzIHRoYXQgYW55IGJhY2t0cmFja3Mg
YmFjayBvdXQgb2YgdGhlIHBhcmVudGhlc2VzIHdpbGwgYmUgaW4gdGhlCi0gICAgICAgICAgICAv
LyBwYXJlbnRoZXNlc1N0YXRlJ3MgYmFja1RyYWNrSnVtcHMgdmVjdG9yLCBhbmQgdGhhdCBpZiB0
aGV5IG5lZWQgYmFja3RyYWNraW5nCi0gICAgICAgICAgICAvLyB0aGV5IHdpbGwgaGF2ZSBzZXQg
YW4gZW50cnkgcG9pbnQgb24gdGhlIHBhcmVudGhlc2VzU3RhdGUncyBiYWNrdHJhY2tMYWJlbC4K
LSAgICAgICAgICAgIHN0YXRlLnByb3BhZ2F0ZUJhY2t0cmFja2luZ0Zyb20ocGFyZW50aGVzZXNT
dGF0ZSwgdGhpcyk7CisgICAgICAgICAgICAvLyBwYXJlbnRoZXNlc1N0YXRlJ3MgbV9iYWNrVHJh
Y2tKdW1wcyB2ZWN0b3IsIGFuZCB0aGF0IGlmIHRoZXkgbmVlZCBiYWNrdHJhY2tpbmcKKyAgICAg
ICAgICAgIC8vIHRoZXkgd2lsbCBoYXZlIHNldCBhbiBlbnRyeSBwb2ludCBvbiB0aGUgcGFyZW50
aGVzZXNTdGF0ZSdzIG1fYmFja3RyYWNrTGFiZWwuCisgICAgICAgICAgICBzdGF0ZS5wcm9wYWdh
dGVCYWNrdHJhY2tpbmdGcm9tKHRoaXMsIHBhcmVudGhlc2VzU3RhdGUuZ2V0QmFja3RyYWNrRGVz
dGluYXRpb24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKdW1wIG5vbkdyZWVk
eVNraXBQYXJlbnRoZXNlczsKICAgICAgICAgICAgIExhYmVsIG5vbkdyZWVkeVRyeVBhcmVudGhl
c2VzOwpAQCAtOTM4LDcgKzE1NTUsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBtYXRj
aCBzdGFydCBpbmRleAotICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKSB7Cisg
ICAgICAgICAgICBpZiAodGVybS5jYXB0dXJlKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRPZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpIC0gcHJlQ2hlY2tlZENvdW50OwogICAgICAg
ICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICBtb3ZlKGlu
ZGV4LCBpbmRleFRlbXBvcmFyeSk7CkBAIC05NDgsNDUgKzE1NjUsMTggQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAgICAgICBzdG9yZTMy
KGluZGV4LCBBZGRyZXNzKG91dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8
IDEpICogc2l6ZW9mKGludCkpKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgUGFyZW50
aGVzZXNUYWlsKiBwYXJlbnRoZXNlc1RhaWwgPSBtX2V4cHJlc3Npb25TdGF0ZS5hZGRQYXJlbnRo
ZXNlc1RhaWwodGVybSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGdlbmVyYXRlIHRo
ZSBib2R5IG9mIHRoZSBwYXJlbnRoZXNlcwogICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0
ZSBwYXJlbnRoZXNlc1N0YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwogICAg
ICAgICAgICAgZ2VuZXJhdGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFy
ZW50aGVzZXNTdGF0ZSwgYWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKIAotICAgICAgICAgICAg
SnVtcCBzdWNjZXNzID0gKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhlZENvdW50
KSA/Ci0gICAgICAgICAgICAgICAganVtcCgpIDoKLSAgICAgICAgICAgICAgICBicmFuY2gzMihO
b3RFcXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNl
c0ZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpOwotCi0gICAgICAgICAgICAvLyBBIGZh
aWx1cmUgQUZURVIgdGhlIHBhcmVucyBqdW1wcyBoZXJlCi0gICAgICAgICAgICBMYWJlbCBiYWNr
dHJhY2tGcm9tQWZ0ZXJQYXJlbnModGhpcyk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50
aXR5VHlwZSA9PSBRdWFudGlmaWVyR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhp
cyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0aCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhl
IHBhcmVucy4KLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVM
b2NhdGlvbiwgaW5kZXhUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayhicmFuY2gzMihFcXVhbCwgaW5kZXhUZW1wb3JhcnksIEltbTMyKC0xKSksIHRoaXMp
OwotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVy
Tm9uR3JlZWR5KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyAtMSB3ZSBoYXZlIG5v
dyB0ZXN0ZWQgd2l0aG91dCB0aGUgcGFyZW5zLCBub3cgdGVzdCB3aXRoLgotICAgICAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFy
eSk7Ci0gICAgICAgICAgICAgICAgYnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5LCBJbW0z
MigtMSkpLmxpbmtUbyhub25HcmVlZHlUcnlQYXJlbnRoZXNlcywgdGhpcyk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUucGxhbnRKdW1wVG9CYWNrdHJhY2tJ
ZkV4aXN0cyh0aGlzKTsKLSAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBXSVRISU4gdGhlIHBhcmVu
cyBqdW1wcyBoZXJlCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2
ZUJhY2t0cmFja3ModGhpcyk7Ci0gICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUp
Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihJbW0zMigtMSksIEFkZHJlc3Mob3V0cHV0LCAodGVy
bS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwotCi0gICAg
ICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkKLSAgICAg
ICAgICAgICAgICBzdG9yZVRvRnJhbWUoSW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRp
b24pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhqdW1wKCksIHRoaXMpOwotCi0gICAgICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5l
cmF0ZWQoYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKTsKLSAgICAgICAgICAgIGlmICh0ZXJtLnF1
YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KQotICAgICAgICAgICAgICAgIG5vbkdy
ZWVkeVNraXBQYXJlbnRoZXNlcy5saW5rKHRoaXMpOwotICAgICAgICAgICAgc3VjY2Vzcy5saW5r
KHRoaXMpOwotCisgICAgICAgICAgICAvLyBGb3Igbm9uLWZpeGVkIGNvdW50cywgYmFja3RyYWNr
IGlmIHdlIGRpZG4ndCBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50
aXR5VHlwZSAhPSBRdWFudGlmaWVyRml4ZWRDb3VudCkKKyAgICAgICAgICAgICAgICBwYXJlbnRo
ZXNlc1RhaWwtPmFkZEFmdGVyUGFyZW5KdW1wKGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgQWRkcmVz
cyhzdGFja1BvaW50ZXJSZWdpc3RlciwgKHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiAqIHNpemVv
Zih2b2lkKikpKSkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBzdG9yZSB0aGUgbWF0
Y2ggZW5kIGluZGV4Ci0gICAgICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAg
ICAgICAgICAgIGlmICh0ZXJtLmNhcHR1cmUoKSkgewogICAgICAgICAgICAgICAgIGludCBpbnB1
dE9mZnNldCA9IHN0YXRlLmlucHV0T2Zmc2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0
T2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgIG1vdmUoaW5kZXgsIGluZGV4VGVtcG9yYXJ5
KTsKQEAgLTk5NSw2ICsxNTg1LDEzIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2UKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3Rv
cmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICgodGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJu
SWQgPDwgMSkgKyAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHBhcmVudGhlc2VzVGFpbC0+cHJvY2Vzc0JhY2t0cmFja3ModGhpcywg
c3RhdGUsIHBhcmVudGhlc2VzU3RhdGUsIG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzLCBsYWJlbCgp
KTsKKworICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5nZXRCYWNrdHJhY2tEZXN0aW5hdGlv
bigpLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh0ZXJtLnF1YW50aXR5
VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KQorICAgICAgICAgICAgICAgIG5vbkdyZWVkeVNr
aXBQYXJlbnRoZXNlcy5saW5rKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDMzLDYg
KzE2MzAsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAg
ICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhp
cyk7CiAKICAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUubGlua0FsdGVybmF0aXZlQmFja3Ry
YWNrcyh0aGlzKTsKKwogICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgdGhlIGFsdGVybmF0
aXZlIGZhaWxzIHRvIG1hdGNoIC0gZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiwg
b3Igb3V0IG9mIHRoZSBsb29wLgogCiAgICAgICAgICAgICBpZiAoY291bnRUb0NoZWNrKSB7CkBA
IC0xMDU3LDcgKzE2NTUsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9B
c3NlCiAKICAgICAgICAgaW50IGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0aW9uID0gc3RhdGUuY2hl
Y2tlZFRvdGFsIC0gdGVybS5pbnB1dFBvc2l0aW9uOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVy
dE9yQ2FwdHVyZSkgeworICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewogICAgICAgICAgICAg
Ly8gSW52ZXJ0ZWQgY2FzZQogICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKGluZGV4LCBwYXJlbnRo
ZXNlc0ZyYW1lTG9jYXRpb24pOwogCkBAIC0xMDY5LDEwICsxNjY3LDExIEBAIGNsYXNzIFJlZ2V4
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50
aGVzZXNEaXNqdW5jdGlvbihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2VzU3RhdGUsIGFsdGVybmF0
aXZlRnJhbWVMb2NhdGlvbik7CiAgICAgICAgICAgICAvLyBTdWNjZXNzISAtIHdoaWNoIG1lYW5z
IC0gRmFpbCEKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0
aW9uLCBpbmRleCk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0
aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKIAogICAgICAg
ICAgICAgLy8gQW5kIGZhaWwgbWVhbnMgc3VjY2Vzcy4KICAgICAgICAgICAgIHBhcmVudGhlc2Vz
U3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKwogICAgICAgICAgICAgbG9h
ZEZyb21GcmFtZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4KTsKIAogICAgICAgICAg
ICAgc3RhdGUuY2hlY2tlZFRvdGFsICs9IGNvdW50Q2hlY2tlZEFmdGVyQXNzZXJ0aW9uOwpAQCAt
MTA5MSw4ICsxNjkwLDkgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZQogICAgICAgICAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCiAgICAgICAgICAgICBwYXJl
bnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisKICAgICAgICAg
ICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleCk7Ci0gICAg
ICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAg
IHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKIAogICAgICAgICAgICAgc3VjY2Vzcy5saW5r
KHRoaXMpOwogCkBAIC0xMjQyLDYgKzE4NDIsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICBnZW5lcmF0ZVJldHVybigpOwogCiAgICAgICAg
ICAgICBzdGF0ZS5uZXh0QWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2
ZS0+b25jZVRocm91Z2goKSAmJiBzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgc3RhdGUuY2xlYXJCYWNrdHJhY2soKTsKIAogICAgICAgICAgICAgLy8gaWYgdGhlcmUg
YXJlIGFueSBtb3JlIGFsdGVybmF0aXZlcywgcGxhbnQgdGhlIGNoZWNrIGZvciBpbnB1dCBiZWZv
cmUgbG9vcGluZy4KICAgICAgICAgICAgIGlmIChzdGF0ZS5hbHRlcm5hdGl2ZVZhbGlkKCkpIHsK
QEAgLTEyNDksNyArMTg1MSw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2UKICAgICAgICAgICAgICAgICBpZiAoIXNldFJlcGVhdEFsdGVybmF0aXZlTGFiZWxzICYm
ICFuZXh0QWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSBoYW5kbGVkIG5vbi1yZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLCBqdW1wIHRvIG5l
eHQgaXRlcmF0aW9uIAogICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbG9vcCBvdmVyIHJlcGVh
dGluZyBhbHRlcm5hdGl2ZXMuCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2sodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBj
b3VudFRvQ2hlY2tGb3JGaXJzdEFsdGVybmF0aXZlID0gbmV4dEFsdGVybmF0aXZlLT5tX21pbmlt
dW1TaXplOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTEyODgsNiArMTg5MCw3IEBAIGNsYXNz
IFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZW4gdGhl
IGxhc3QgaW5wdXQgY2hlY2tlZCBwYXNzZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGlmIHdlIGNhbiBydW4gdGhlIG5leHQgYWx0ZXJuYXRp
dmUsIHNpbmNlIGl0IGlzIHNob3J0ZXIgLQogICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVz
dCB1cGRhdGUgaW5kZXguCiAgICAgICAgICAgICAgICAgICAgICAgICBzdWIzMihJbW0zMihjb3Vu
dENoZWNrZWRGb3JDdXJyZW50QWx0ZXJuYXRpdmUgLSBjb3VudFRvQ2hlY2tGb3JOZXh0QWx0ZXJu
YXRpdmUpLCBpbmRleCk7CkBAIC0xMzAyLDYgKzE5MDUsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRv
ciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IGFsdGVybmF0aXZlIGlzIGxvbmdlciB0aGFuIHRo
ZSBjdXJyZW50IG9uZTsgY2hlY2sgdGhlIGRpZmZlcmVuY2UuCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworCiAgICAgICAgICAg
ICAgICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRpdmUuYXBwZW5k
KGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlIC0g
Y291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7IC8vIENBU0UgMzogQm90aCBhbHRlcm5hdGl2ZXMgYXJlIHRoZSBzYW1lIGxlbmd0
aC4KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb3VudENoZWNrZWRGb3JDdXJyZW50
QWx0ZXJuYXRpdmUgPT0gY291bnRUb0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlKTsKQEAgLTEzMjUs
NyArMTkyOSw4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAg
ICAgICAgaWYgKCFzZXRSZXBlYXRBbHRlcm5hdGl2ZUxhYmVscykgewogICAgICAgICAgICAgLy8g
SWYgdGhlcmUgYXJlIG5vIGFsdGVybmF0aXZlcyB0aGF0IG5lZWQgcmVwZWF0aW5nIChhbGwgYXJl
IG1hcmtlZCAnb25jZVRocm91Z2gnKSB0aGVuIGp1c3QgbGluawogICAgICAgICAgICAgLy8gdGhl
IG1hdGNoIGZhaWx1cmVzIHRvIHRoaXMgcG9pbnQsIGFuZCBmYWxsIHRocm91Z2ggdG8gdGhlIHJl
dHVybiBiZWxvdy4KLSAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3Mo
dGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMs
IHRydWUpOworCiAgICAgICAgICAgICBub3RFbm91Z2hJbnB1dEZvclByZXZpb3VzQWx0ZXJuYXRp
dmUubGluayh0aGlzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEhvdyBtdWNo
IG1vcmUgaW5wdXQgbmVlZCB0aGVyZSBiZSB0byBiZSBhYmxlIHRvIHJldHJ5IGZyb20gdGhlIGZp
cnN0IGFsdGVybmF0aXZlPwpAQCAtMTM0NSwxMSArMTk1MCwxMSBAQCBjbGFzcyBSZWdleEdlbmVy
YXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdp
dGggdGhlIGNhc2VzIHdoZXJlIHRoZXJlIHdhcyBzdWZmaWNpZW50IGlucHV0IHRvIHRyeSB0aGUg
bGFzdCBhbHRlcm5hdGl2ZS4KICAgICAgICAgICAgIGlmIChpbmNyZW1lbnRGb3JOZXh0SXRlciA+
IDApIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIG1vcmUgaW5wdXQgYW55d2F5LCBmYWxsIHRocm91
Z2ggdG8gdGhlIGNoZWNraW5nIGJlbG93LgotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRl
cm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVy
bmF0aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG1fcGF0
dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXplICYmICFpbmNyZW1lbnRGb3JOZXh0SXRlcikgLy8g
Tm8gbmVlZCB0byB1cGRhdGUgYW55dGhpbmcsIGxpbmsgdGhlc2UgYmFja3RyYWNrcyBzdHJhaWdo
dCB0byB0aGUgdG8gcG9mIHRoZSBsb29wIQotICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtBbHRl
cm5hdGl2ZUJhY2t0cmFja3NUbyhmaXJzdEFsdGVybmF0aXZlSW5wdXRDaGVja2VkLCB0aGlzKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8odGhpcywg
Zmlyc3RBbHRlcm5hdGl2ZUlucHV0Q2hlY2tlZCwgdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIHsg
Ly8gbm8gbmVlZCB0byBjaGVjayB0aGUgaW5wdXQsIGJ1dCB3ZSBkbyBoYXZlIHNvbWUgYm9va2tl
ZXBpbmcgdG8gZG8gZmlyc3QuCi0gICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZl
QmFja3RyYWNrcyh0aGlzKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVC
YWNrdHJhY2tzKHRoaXMsIHRydWUpOwogCiAgICAgICAgICAgICAgICAgLy8gV2hlcmUgbmVjZXNz
YXJ5IHVwZGF0ZSBvdXIgcHJlc2VydmVkIHN0YXJ0IHBvc2l0aW9uLgogICAgICAgICAgICAgICAg
IGlmICghbV9wYXR0ZXJuLm1fYm9keS0+bV9oYXNGaXhlZFNpemUpIHsKQEAgLTE0MDYsNiArMjAx
MSwxMCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
IG1vdmUoSW1tMzIoLTEpLCByZXR1cm5SZWdpc3Rlcik7CiAKICAgICAgICAgZ2VuZXJhdGVSZXR1
cm4oKTsKKworICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5lbWl0UGFyZW50aGVzZXNUYWlsKHRo
aXMpOworICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5lbWl0SW5kaXJlY3RKdW1wVGFibGUodGhp
cyk7CisgICAgICAgIG1fZXhwcmVzc2lvblN0YXRlLmxpbmtUb05leHRJdGVyYXRpb24odGhpcyk7
CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUVudGVyKCkKQEAgLTE0OTIsOCArMjEwMSw4IEBA
IHB1YmxpYzoKIAogICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKHRoaXMsIGdsb2JhbERh
dGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IucG9vbEZvclNpemUoc2l6ZSgpKSwgMCk7CiAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYmFja3RyYWNrUmVjb3Jkcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLnBhdGNoKG1fYmFja3RyYWNrUmVjb3Jkc1tpXS5k
YXRhTGFiZWwsIHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9iYWNrdHJhY2tSZWNvcmRzW2ldLmJh
Y2t0cmFja0xvY2F0aW9uKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4
cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBwYXRjaEJ1ZmZlci5wYXRjaChtX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHNb
aV0uZGF0YUxhYmVsLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fZXhwcmVzc2lvblN0YXRlLm1f
YmFja3RyYWNrUmVjb3Jkc1tpXS5iYWNrdHJhY2tMb2NhdGlvbikpOwogCiAgICAgICAgIGppdE9i
amVjdC5zZXQocGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkpOwogICAgIH0KQEAgLTE1MDYsNyAr
MjExNSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47
CiAgICAgYm9vbCBtX3Nob3VsZEZhbGxCYWNrOwotICAgIFZlY3RvcjxBbHRlcm5hdGl2ZUJhY2t0
cmFja1JlY29yZD4gbV9iYWNrdHJhY2tSZWNvcmRzOworICAgIEdlbmVyYXRpb25TdGF0ZSBtX2V4
cHJlc3Npb25TdGF0ZTsKIH07CiAKIHZvaWQgaml0Q29tcGlsZVJlZ2V4KEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgUmVnZXhDb2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgVVN0cmluZyYgcGF0
dGVyblN0cmluZywgdW5zaWduZWQmIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3Is
IEJ1bXBQb2ludGVyQWxsb2NhdG9yKiBhbGxvY2F0b3IsIGJvb2wgaWdub3JlQ2FzZSwgYm9vbCBt
dWx0aWxpbmUpCkBAIC0xNTI5LDggKzIxMzgsMyBAQCB2b2lkIGppdENvbXBpbGVSZWdleChKU0ds
b2JhbERhdGEqIGdsb2JhCiB9fQogCiAjZW5kaWYKLQotCi0KLQotCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lh
cnIvUmVnZXhQYXR0ZXJuLmgJKHJldmlzaW9uIDczMDQ2KQorKysgSmF2YVNjcmlwdENvcmUveWFy
ci9SZWdleFBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBAIHN0cnVj
dCBQYXR0ZXJuVGVybSB7CiAgICAgICAgIFR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sCiAgICAg
ICAgIFR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLAogICAgIH0gdHlwZTsKLSAgICBib29sIGlu
dmVydE9yQ2FwdHVyZTsKKyAgICBib29sIG1fY2FwdHVyZSA6MTsKKyAgICBib29sIG1faW52ZXJ0
IDoxOwogICAgIHVuaW9uIHsKICAgICAgICAgVUNoYXIgcGF0dGVybkNoYXJhY3RlcjsKICAgICAg
ICAgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzOwpAQCAtMTIzLDYgKzEyNCw4IEBAIHN0
cnVjdCBQYXR0ZXJuVGVybSB7CiAKICAgICBQYXR0ZXJuVGVybShVQ2hhciBjaCkKICAgICAgICAg
OiB0eXBlKFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcikKKyAgICAgICAgLCBtX2Nh
cHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBw
YXR0ZXJuQ2hhcmFjdGVyID0gY2g7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJG
aXhlZENvdW50OwpAQCAtMTMxLDE2ICsxMzQsMTggQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKIAog
ICAgIFBhdHRlcm5UZXJtKENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MsIGJvb2wgaW52ZXJ0KQog
ICAgICAgICA6IHR5cGUoUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzcykKLSAgICAgICAg
LCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAg
ICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBjaGFyYWN0ZXJDbGFzcyA9
IGNoYXJDbGFzczsKICAgICAgICAgcXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7
CiAgICAgICAgIHF1YW50aXR5Q291bnQgPSAxOwogICAgIH0KIAotICAgIFBhdHRlcm5UZXJtKFR5
cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1
bmN0aW9uLCBib29sIGludmVydE9yQ2FwdHVyZSkKKyAgICBQYXR0ZXJuVGVybShUeXBlIHR5cGUs
IHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwg
Ym9vbCBjYXB0dXJlID0gZmFsc2UsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpCiAgICAgICAgIDogdHlw
ZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnRPckNhcHR1cmUpCisgICAg
ICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAg
IHsKICAgICAgICAgcGFyZW50aGVzZXMuZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbjsKICAgICAg
ICAgcGFyZW50aGVzZXMuc3VicGF0dGVybklkID0gc3VicGF0dGVybklkOwpAQCAtMTUyLDcgKzE1
Nyw4IEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiAgICAgCiAgICAgUGF0dGVyblRlcm0oVHlwZSB0
eXBlLCBib29sIGludmVydCA9IGZhbHNlKQogICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAg
LCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAg
ICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBxdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKICAgICAgICAgcXVhbnRpdHlDb3VudCA9IDE7CkBAIC0xNjAs
NyArMTY2LDggQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKIAogICAgIFBhdHRlcm5UZXJtKHVuc2ln
bmVkIHNwYXR0ZXJuSWQpCiAgICAgICAgIDogdHlwZShUeXBlQmFja1JlZmVyZW5jZSkKLSAgICAg
ICAgLCBpbnZlcnRPckNhcHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQor
ICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQogICAgIHsKICAgICAgICAgc3VicGF0dGVybklkID0g
c3BhdHRlcm5JZDsKICAgICAgICAgcXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7
CkBAIC0xODksMTIgKzE5NiwxMiBAQCBzdHJ1Y3QgUGF0dGVyblRlcm0gewogICAgIAogICAgIGJv
b2wgaW52ZXJ0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRPckNhcHR1cmU7CisgICAg
ICAgIHJldHVybiBtX2ludmVydDsKICAgICB9CiAKICAgICBib29sIGNhcHR1cmUoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgcmV0dXJuIG1fY2FwdHVy
ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBxdWFudGlmeSh1bnNpZ25lZCBjb3VudCwgUXVhbnRp
ZmllclR5cGUgdHlwZSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMDQ2KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTItMDIgIE1p
Y2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgbmV3IHRlc3RzIHRvIHN1cHBvcnQgY2hh
bmdlcyB0byBSZWdleHAgSklUIGNvZGUgaGFuZGxpbmcKKyAgICAgICAgb2YgcGFyZW50aGVzZXMu
ICBUZXN0cyBmb2N1c2VkIG9uIGJhY2t0cmFja2luZyBhbmQgbmVzdGVkIAorICAgICAgICBzdWJl
eHByZXNzaW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUwMjk1CisKKyAgICAgICAgKiBmYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9yZWdleC9wYXJlbnRoZXNlcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qczogQWRkZWQu
CisKIDIwMTAtMTItMDEgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFNraXAgYW5vdGhlciBIVE1MUHJvZ3Jlc3NFbGVtZW50IHRlc3Qgb24gV2luZG93
cywgYmVjYXVzZSBpdCdzIG5vdCB0dXJuZWQgb24gZm9yIFdpbmRvd3MgeWV0LiBBZGRpbmcKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcGFyZW50aGVzZXMtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvcGFyZW50aGVzZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKK1RoaXMgcGFnZSB0ZXN0cyBo
YW5kbGluZyBvZiBwYXJlbnRoZXNlcyBzdWJleHByZXNzaW9ucy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1MgcmVnZXhwMS5leGVjKCdhYmMnKSBpcyBbJ2FiJywnYScsJ2In
XQorUEFTUyByZWdleHAyLmV4ZWMoJ2FiYWNhZGFiZScpIGlzIFsnYWJlJywnYWInLCdiJywnYidd
CitQQVNTIHJlZ2V4cDMuZXhlYygnYWJhY2FkYWJlJykgaXMgWydhYmUnLCdhYicsJ2InLHVuZGVm
aW5lZF0KK1BBU1MgcmVnZXhwNC5leGVjKCdhYmFjYWRhYmUnKSBpcyBbJ2FiZScsJ2FiJywnYics
dW5kZWZpbmVkXQorUEFTUyByZWdleHA1LmV4ZWMoJ2FiYWNhZGFiZScpIGlzIFsnYWJlJywnYWIn
LCdiJywnYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0KK1BBU1MgcmVnZXhwNi5leGVjKCdhYmNkZScp
IGlzIFsnYWInLCdhYicsJ2InLCdiJyx1bmRlZmluZWQsdW5kZWZpbmVkXQorUEFTUyByZWdleHA3
LmV4ZWMoJ2FiYycpIGlzIFsnYWJjJywnYWInLCdiJ10KK1BBU1MgcmVnZXhwOC5leGVjKCdiY2Fk
ZHhxeScpIGlzIFsncXknLCdxJywncScsJ3knXQorUEFTUyByZWdleHA5LmV4ZWMoJ2FzZGZqZWpn
c2RmbGFrc2RmamtlbGpnaGtqZWEnKSBpcyBbJ2EnLCdhJyx1bmRlZmluZWRdCitQQVNTIHJlZ2V4
cDEwLmV4ZWMoJ2FzZGZqZWpnc2RmbGFrc2RmamtlbGpnaGF0JykgaXMgWydhdCddCitQQVNTIHJl
Z2V4cDExLmV4ZWMoJ0RldmVsb3Bpbmcgd2l0aCBKYXZhU2NyaXB0IGlzIGRhbmdlcm91cywgZG8g
bm90IHRyeSBpdCB3aXRob3V0IGFzc2lzdGFuY2UnKSBpcyBudWxsCitQQVNTIHJlZ2V4cDEyLmV4
ZWMoJ1NlYXR0bGUsIFdBIHRvIEJ1Y2tsZXksIFdBJykgaXMgWydTZWF0dGxlLCBXQSB0byBCdWNr
bGV5LCBXQScsIHVuZGVmaW5lZCwgJ1NlYXR0bGUnLCAnV0EnLCB1bmRlZmluZWQsICdCdWNrbGV5
JywgJ1dBJ10KK1BBU1MgcmVnZXhwMTMuZXhlYygnenhjYXNkO2ZsIF5BYWFBQWFhYWY7bHJscnpz
JykgaXMgWydBYWFBQWFhYWY7bHJscnpzJyx1bmRlZmluZWQsJ0FhYUFBYWFhZjtscmxyenMnXQor
UEFTUyByZWdleHAxNC5leGVjKCdiJykgaXMgWydiJyx1bmRlZmluZWQsJ2InXQorUEFTUyByZWdl
eHAxNS5leGVjKCdhYmRmJykgaXMgWydhYmRmJyx1bmRlZmluZWQsJ2FiZCcsJ2YnXQorUEFTUyBy
ZWdleHAxNi5leGVjKCdhYmMnKSBpcyBbJ2FiJywnYScsJ2InXQorUEFTUyByZWdleHAxNy5leGVj
KCdiY2FEeHF5JykgaXMgWydEeCcsJ0QnXQorUEFTUyByZWdleHAxOC5leGVjKCdIZWxsbzogV29y
bGQnKSBpcyBbJ0hlbGxvOicsJzonXQorUEFTUyByZWdleHAxOS5leGVjKCdiYXJyZWwnKSBpcyBb
J2JhcicsJyddCitQQVNTIHJlZ2V4cDIwLmV4ZWMoJ2JhcnJlbCcpIGlzIFsnYmFycmVsJywncmVs
J10KK1BBU1MgcmVnZXhwMjAuZXhlYygnMmJhcnJlbCcpIGlzIFsnMmJhcnJlbCcsJ3JlbCddCitQ
QVNTIHJlZ2V4cDIxLmV4ZWMoJ2FiYycpIGlzIFsnYWInLCdhYicsJ2InXQorUEFTUyByZWdleHAy
Mi5leGVjKCdhYmNkbHNrZmdqZHNsa2ZnJykgaXMgbnVsbAorUEFTUyByZWdleHAyMy5leGVjKCc8
aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCInKSBpcyBbJyJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIiddCitQQVNTIHJlZ2V4cDI0LmV4ZWMoJzEyMycpIGlzIG51
bGwKK1BBU1MgcmVnZXhwMjUuZXhlYygndGhpcyBpcyBhIHRlc3QnKSBpcyBbJ3RoaXMnLCd0aGlz
Jyx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDI1LmV4ZWMoJyF0aGlzIGlzIGEgdGVzdCcpIGlzIG51
bGwKK1BBU1MgJ0hpIEJvYicubWF0Y2goLyhSb2IpfChCb2IpfChSb2JlcnQpfChCb2JieSkvKSBp
cyBbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvcmVnZXgvcGFyZW50aGVzZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvcmVnZXgvcGFyZW50aGVzZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9w
YXJlbnRoZXNlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9wYXJlbnRoZXNlcy5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhl
c2VzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBACitkZXNjcmlwdGlvbigiVGhpcyBw
YWdlIHRlc3RzIGhhbmRsaW5nIG9mIHBhcmVudGhlc2VzIHN1YmV4cHJlc3Npb25zLiIpOworCit2
YXIgcmVnZXhwMSA9IC8oYXxBKShifEIpLzsKK3Nob3VsZEJlKCJyZWdleHAxLmV4ZWMoJ2FiYycp
IiwgIlsnYWInLCdhJywnYiddIik7CisKK3ZhciByZWdleHAyID0gLyhhKChiKXxjfGQpKWUvOwor
c2hvdWxkQmUoInJlZ2V4cDIuZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUnLCdhYicsJ2InLCdi
J10iKTsKKwordmFyIHJlZ2V4cDMgPSAvKGEoYnwoYyl8ZCkpZS87CitzaG91bGRCZSgicmVnZXhw
My5leGVjKCdhYmFjYWRhYmUnKSIsICJbJ2FiZScsJ2FiJywnYicsdW5kZWZpbmVkXSIpOworCit2
YXIgcmVnZXhwNCA9IC8oYShifGN8KGQpKSllLzsKK3Nob3VsZEJlKCJyZWdleHA0LmV4ZWMoJ2Fi
YWNhZGFiZScpIiwgIlsnYWJlJywnYWInLCdiJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA1
ID0gLyhhKChiKXwoYyl8KGQpKSllLzsKK3Nob3VsZEJlKCJyZWdleHA1LmV4ZWMoJ2FiYWNhZGFi
ZScpIiwgIlsnYWJlJywnYWInLCdiJywnYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0iKTsKKwordmFy
IHJlZ2V4cDYgPSAvKGEoKGIpfChjKXwoZCkpKS87CitzaG91bGRCZSgicmVnZXhwNi5leGVjKCdh
YmNkZScpIiwgIlsnYWInLCdhYicsJ2InLCdiJyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOworCit2
YXIgcmVnZXhwNyA9IC8oYShiKT8/KT8/Yy87CitzaG91bGRCZSgicmVnZXhwNy5leGVjKCdhYmMn
KSIsICJbJ2FiYycsJ2FiJywnYiddIik7CisKK3ZhciByZWdleHA4ID0gLyhhfChlfHEpKSh4fHkp
LzsKK3Nob3VsZEJlKCJyZWdleHA4LmV4ZWMoJ2JjYWRkeHF5JykiICwgIlsncXknLCdxJywncScs
J3knXSIpOworCit2YXIgcmVnZXhwOSA9IC8oKHR8Yik/fGEpJC87CitzaG91bGRCZSgicmVnZXhw
OS5leGVjKCdhc2RmamVqZ3NkZmxha3NkZmprZWxqZ2hramVhJykiLCAiWydhJywnYScsdW5kZWZp
bmVkXSIpOworCit2YXIgcmVnZXhwMTAgPSAvKD86aHxlPyg/OnR8Yik/fGE/KD86dHxiKT8pKD86
JCkvOworc2hvdWxkQmUoInJlZ2V4cDEwLmV4ZWMoJ2FzZGZqZWpnc2RmbGFrc2RmamtlbGpnaGF0
JykiLCAiWydhdCddIik7CisKK3ZhciByZWdleHAxMSA9IC8oW0pqXWF2YShbU3NdY3JpcHQpPylc
c2lzXHMoZnVuXHcqKS87CitzaG91bGRCZU51bGwoInJlZ2V4cDExLmV4ZWMoJ0RldmVsb3Bpbmcg
d2l0aCBKYXZhU2NyaXB0IGlzIGRhbmdlcm91cywgZG8gbm90IHRyeSBpdCB3aXRob3V0IGFzc2lz
dGFuY2UnKSIpOworCit2YXIgcmVnZXhwMTIgPSAvKD86KC4rKSwgKT8oLispLCAoLi4pIHRvICg/
OiguKyksICk/KC4rKSwgKC4uKS87CitzaG91bGRCZSgicmVnZXhwMTIuZXhlYygnU2VhdHRsZSwg
V0EgdG8gQnVja2xleSwgV0EnKSIsICJbJ1NlYXR0bGUsIFdBIHRvIEJ1Y2tsZXksIFdBJywgdW5k
ZWZpbmVkLCAnU2VhdHRsZScsICdXQScsIHVuZGVmaW5lZCwgJ0J1Y2tsZXknLCAnV0EnXSIpOwor
Cit2YXIgcmVnZXhwMTMgPSAvKEEpPyhBLiopLzsKK3Nob3VsZEJlKCJyZWdleHAxMy5leGVjKCd6
eGNhc2Q7ZmxcIF5BYWFBQWFhYWY7bHJscnpzJykiLCAiWydBYWFBQWFhYWY7bHJscnpzJyx1bmRl
ZmluZWQsJ0FhYUFBYWFhZjtscmxyenMnXSIpOworCit2YXIgcmVnZXhwMTQgPSAvKGEpfChiKS87
CitzaG91bGRCZSgicmVnZXhwMTQuZXhlYygnYicpIiwgIlsnYicsdW5kZWZpbmVkLCdiJ10iKTsK
KwordmFyIHJlZ2V4cDE1ID0gL14oPyEoYWIpZGV8eCkoYWJkKShmKS87CitzaG91bGRCZSgicmVn
ZXhwMTUuZXhlYygnYWJkZicpIiwgIlsnYWJkZicsdW5kZWZpbmVkLCdhYmQnLCdmJ10iKTsKKwor
dmFyIHJlZ2V4cDE2ID0gLyhhfEEpKGJ8QikvOworc2hvdWxkQmUoInJlZ2V4cDE2LmV4ZWMoJ2Fi
YycpIiwgIlsnYWInLCdhJywnYiddIik7CisKK3ZhciByZWdleHAxNyA9IC8oYXxkfHF8KXgvaTsK
K3Nob3VsZEJlKCJyZWdleHAxNy5leGVjKCdiY2FEeHF5JykiLCAiWydEeCcsJ0QnXSIpOworCit2
YXIgcmVnZXhwMTggPSAvXi4qPyg6fCQpLzsKK3Nob3VsZEJlKCJyZWdleHAxOC5leGVjKCdIZWxs
bzogV29ybGQnKSIsICJbJ0hlbGxvOicsJzonXSIpOworCit2YXIgcmVnZXhwMTkgPSAvKGFifF4u
ezAsMn0pYmFyLzsKK3Nob3VsZEJlKCJyZWdleHAxOS5leGVjKCdiYXJyZWwnKSIsICJbJ2Jhcics
JyddIik7CisKK3ZhciByZWdleHAyMCA9IC8oPzooPyFmb28pLi4ufF4uezAsMn0pYmFyKC4qKS87
CitzaG91bGRCZSgicmVnZXhwMjAuZXhlYygnYmFycmVsJykiLCAiWydiYXJyZWwnLCdyZWwnXSIp
Oworc2hvdWxkQmUoInJlZ2V4cDIwLmV4ZWMoJzJiYXJyZWwnKSIsICJbJzJiYXJyZWwnLCdyZWwn
XSIpOworCit2YXIgcmVnZXhwMjEgPSAvKFthLWddKGJ8Qil8eHl6KS87CitzaG91bGRCZSgicmVn
ZXhwMjEuZXhlYygnYWJjJykiLCAiWydhYicsJ2FiJywnYiddIik7CisKK3ZhciByZWdleHAyMiA9
IC8oPzpefDspXHMqYWJjPShbXjtdKikvOworc2hvdWxkQmVOdWxsKCJyZWdleHAyMi5leGVjKCdh
YmNkbHNrZmdqZHNsa2ZnJykiKTsKKwordmFyIHJlZ2V4cDIzID0gLyJbXjwiXSoifCdbXjwnXSon
LzsKK3Nob3VsZEJlKCJyZWdleHAyMy5leGVjKCc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMu
b3JnLzE5OTkveGh0bWxcIicpIiwgIlsnXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIn
XSIpOworCit2YXIgcmVnZXhwMjQgPSAvXig/Oig/PWFiYylcd3szfTp8XGRcZCkkLzsKK3Nob3Vs
ZEJlTnVsbCgicmVnZXhwMjQuZXhlYygnMTIzJykiKTsKKwordmFyIHJlZ2V4cDI1ID0gL15ccyoo
XCp8W1x3XC1dKykoXGJ8JCk/LzsKK3Nob3VsZEJlKCJyZWdleHAyNS5leGVjKCd0aGlzIGlzIGEg
dGVzdCcpIiwgIlsndGhpcycsJ3RoaXMnLHVuZGVmaW5lZF0iKTsKK3Nob3VsZEJlTnVsbCgicmVn
ZXhwMjUuZXhlYygnIXRoaXMgaXMgYSB0ZXN0JykiKTsKKworc2hvdWxkQmUoIidIaSBCb2InLm1h
dGNoKC8oUm9iKXwoQm9iKXwoUm9iZXJ0KXwoQm9iYnkpLykiLCAiWydCb2InLHVuZGVmaW5lZCwn
Qm9iJyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKwo=
</data>
<flag name="review"
          id="66223"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="66224"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75507</attachid>
            <date>2010-12-03 10:18:59 -0800</date>
            <delta_ts>2010-12-03 14:48:40 -0800</delta_ts>
            <desc>Patch with updates for latest top of trunk.</desc>
            <filename>anti-pasta6.patch</filename>
            <type>text/plain</type>
            <size>91930</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDczMjY3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ4IEBACisyMDEwLTEyLTAzICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IEdhdmlu
IEJhcnJhY2xvdWdoCisKKyAgICAgICAgQ2hhbmdlcyB0byBzaWduaWZpY2FudGx5IHJlZHVjZSBi
cmFuY2hlcyB0byBicmFuY2hlcyBpbiBKSVQnZWQKKyAgICAgICAgcGFyZW50aGVzZXMgYmFja3Ry
YWNrIHByb2Nlc3NpbmcuICBUaGUgY2hhbmdlcyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgICAg
ICAgIC0gVGFraW5nIHRoZSBiYWNrdHJhY2tpbmcgcHJvY2Vzc2luZyBvdXQgb2YgbGluZSBhbmQg
YWRkaW5nIGl0IGFzCisgICAgICAgICAgY29kZSBhdCB0aGUgZW5kIG9mIHRoZSBKSVQnZWQgcm91
dGluZS4KKyAgICAgICAgLSBBbGxvdyBiYWNrdHJhY2tzIHRvIGJlIGRpcmVjdCB2aWEgYW4gaW5k
aXJlY3QgYnJhbmNoIGZvciBhbiBhZGRyZXNzCisgICAgICAgICAgcHVzaGVkIG9udG8gdGhlIHN0
YWNrLiAgSWYgdGhlIHVzZSBvZiBhbiBpbmRpcmVjdCBicmFuY2ggaXMgZnJvbSBhCisgICAgICAg
ICAgY29uZGl0aW9uYWwganVtcCwgdGhlbiB3ZSBlbWl0IGEgdHJhbXBvbGluZSBhdCB0aGUgZW5k
IG9mIHRoZSAKKyAgICAgICAgICByb3V0aW5lLgorICAgICAgICAtIFByb3BvZ2F0ZSBiYWNrdHJh
Y2tzIGluc3RlYWQgb2YgYWRkaW5nIHRyYW1wb2xpbmVzLiAgQmFja3RyYWNrcyBhcmUKKyAgICAg
ICAgICBwcm9wb2dhdGVkIHRvIHdoZXJlIHRoZXkgYXJlIHVzZWQuICBUaGlzIGNoYW5nZSBhbHNv
IGVsaW1pbmF0ZWQgCisgICAgICAgICAgdHJhbXBvbGluZSBicmFuY2ggY29kZSB0aGF0IGFyZW4n
dCB1c2VkLgorICAgICAgICAtIEFkZGVkIGdsb2JhbCBleHByZXNzaW9uIHN0YXRlIHRvIGtlZXAg
dHJhY2sgb2YgcGFyZW50aGVzZXMgdGFpbAorICAgICAgICAgIGNvZGUgYW5kIGluZGlyZWN0IGJy
YW5jaGVzLgorICAgICAgICBPdGhlciBjaGFuZ2VzIG1hZGUgdG8gc3VwcG9ydCB0aGVzZSBjaGFu
Z2VzLgorICAgICAgICAtIFNwbGl0IGludmVydE9yQ2FwdHVyZSBmbGFnIG9uIFBhdHRlcm5zIHRv
IHR3byBzZXBhcmF0ZSBmbGFncy4gIEFkZGVkCisgICAgICAgICAgZ2V0dGVycyBmb3IgdGhlc2Ug
ZmxhZ3MuICBSaXBwbGVkIHRoZXNlIGNoYW5nZXMgdG8gYm90aCB0aGUgSklUIAorICAgICAgICAg
IGFuZCBpbnRlcnByZXRlciBjb2RlLgorICAgICAgICAtIFNwbGl0IEJhY2t0cmFja0Rlc3RpbmF0
aW9uIG91dCBvZmYgVGVybUdlbmVyYXRpb25TdGF0ZSBzdHJ1Y3QuCisgICAgICAgICAgVGhpcyBp
cyBkb25lIHRvIGhvbGQgcmVmZXJlbmNlcyB0byBhIGJhY2t0cmFjayBmb3IgbGF0ZXIgY29kZQor
ICAgICAgICAgIGdlbmVyYXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MDI5NQorCisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkptcERzdDo6aXNTZXQpOgorICAgICAgICAq
IGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6Sm1wRHN0Ojppc1NldCk6CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6TGFiZWw6Omlz
U2V0KToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRy
Ojppc1VzZWQpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpEYXRhTGFi
ZWxQdHI6OnVzZWQpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdDo6Y2xlYXIpOgorICAgICAgICAqIGFzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OkptcERzdDo6aXNTZXQpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpKbXBEc3Q6
OmlzU2V0KToKKyAgICAgICAgKiB5YXJyL1JlZ2V4Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlND
OjpZYXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6YXRvbVBhcmVudGhlc2VzU3VicGF0dGVy
bkJlZ2luKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhQYXR0ZXJuQ29uc3RydWN0b3I6OmF0
b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdl
eFBhdHRlcm5Db25zdHJ1Y3Rvcjo6YXRvbUJhY2tSZWZlcmVuY2UpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleFBhdHRlcm5Db25zdHJ1Y3Rvcjo6c2V0dXBBbHRlcm5hdGl2ZUJlZ2luVGVybXMp
OgorICAgICAgICAqIHlhcnIvUmVnZXhJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6Ollh
cnI6OkJ5dGVDb21waWxlcjo6YXRvbVBhcmVudGhlc2VzT25jZUJlZ2luKToKKyAgICAgICAgKEpT
Qzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJu
QmVnaW4pOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0b21QYXJlbnRoZXRp
Y2FsQXNzZXJ0aW9uQmVnaW4pOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OmF0
b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uRW5kKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZUNv
bXBpbGVyOjphdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuRW5kKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNPbmNlRW5kKToKKyAgICAgICAgKEpTQzo6
WWFycjo6Qnl0ZUNvbXBpbGVyOjphdG9tUGFyZW50aGVzZXNUZXJtaW5hbEVuZCk6CisgICAgICAg
IChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6ZW1pdERpc2p1bmN0aW9uKToKKyAgICAgICAgKiB5
YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OkJ5
dGVUZXJtKToKKyAgICAgICAgKEpTQzo6WWFycjo6Qnl0ZVRlcm06OkJhY2tSZWZlcmVuY2UpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpCeXRlVGVybTo6aW52ZXJ0KToKKyAgICAgICAgKEpTQzo6WWFy
cjo6Qnl0ZVRlcm06OmNhcHR1cmUpOgorICAgICAgICAqIHlhcnIvUmVnZXhKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6SW5kaXJlY3RKdW1wRW50cnk6OkluZGly
ZWN0SnVtcEVudHJ5KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkluZGly
ZWN0SnVtcEVudHJ5OjphZGRKdW1wKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0
b3I6OkdlbmVyYXRpb25TdGF0ZTo6R2VuZXJhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6YWRkSW5kaXJlY3RKdW1wRW50cnkp
OgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6R2VuZXJhdGlvblN0YXRlOjpl
bWl0SW5kaXJlY3RKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6R2VuZXJhdGlvblN0YXRlOjphZGRQYXJlbnRoZXNlc1RhaWwpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleEdlbmVyYXRvcjo6R2VuZXJhdGlvblN0YXRlOjplbWl0UGFyZW50aGVzZXNUYWls
KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkdlbmVyYXRpb25TdGF0ZTo6
YWRkSnVtcFRvTmV4dEludGVyYXRpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVy
YXRvcjo6R2VuZXJhdGlvblN0YXRlOjphZGRKdW1wc1RvTmV4dEludGVyYXRpb24pOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6R2VuZXJhdGlvblN0YXRlOjphZGREYXRhTGFi
ZWxUb05leHRJdGVyYXRpb24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
R2VuZXJhdGlvblN0YXRlOjpsaW5rVG9OZXh0SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpCYWNrdHJhY2tEZXN0aW5h
dGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0
aW5hdGlvbjo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFj
a3RyYWNrRGVzdGluYXRpb246OmNsZWFyRGF0YUxhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpoYXZlRGVzdGluYXRpb24pOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246
OmlzU3RhY2tPZmZzZXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFj
a3RyYWNrRGVzdGluYXRpb246OmlzTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdl
bmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OmlzSnVtcExpc3QpOgorICAgICAgICAoSlND
OjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OmhhdmVEYXRhTGFi
ZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGlu
YXRpb246OmNvcHlUYXJnZXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
QmFja3RyYWNrRGVzdGluYXRpb246OmNvcHlUbyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4
R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6YWRkQmFja3RyYWNrSnVtcCk6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6c2V0
U3RhY2tPZmZzZXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3Ry
YWNrRGVzdGluYXRpb246OnNldExhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5l
cmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpzZXROZXh0QmFja3RyYWNrTGFiZWwpOgorICAg
ICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OnNl
dEJhY2t0cmFja1RvTGFiZWwpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
QmFja3RyYWNrRGVzdGluYXRpb246OnNldEJhY2t0cmFja0p1bXBMaXN0KToKKyAgICAgICAgKEpT
Qzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRCYWNrdHJh
Y2tTb3VyY2VMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNr
dHJhY2tEZXN0aW5hdGlvbjo6c2V0RGF0YUxhYmVsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVn
ZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpzZXRTdWJEYXRhTGFiZWxQdHIpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246
OmxpbmtUb05leHRCYWNrdHJhY2spOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6QmFja3RyYWNrRGVzdGluYXRpb246OmdldFN0YWNrT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9uOjpnZXRMYWJlbCk6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6
Z2V0QmFja3RyYWNrSnVtcHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
QmFja3RyYWNrRGVzdGluYXRpb246OmdldERhdGFMYWJlbCk6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpCYWNrdHJhY2tEZXN0aW5hdGlvbjo6anVtcFRvQmFja3RyYWNrKToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OkJhY2t0cmFja0Rlc3RpbmF0aW9u
OjpsaW5rRGF0YUxhYmVsVG9IZXJlSWZFeGlzdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdl
eEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OnBsYW50SnVtcFRvQmFja3RyYWNrSWZF
eGlzdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVz
dGluYXRpb246OmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3MpOgorICAgICAgICAoSlNDOjpZYXJy
OjpSZWdleEdlbmVyYXRvcjo6QmFja3RyYWNrRGVzdGluYXRpb246OmxpbmtBbHRlcm5hdGl2ZUJh
Y2t0cmFja3NUbyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2Vu
ZXJhdGlvblN0YXRlOjpUZXJtR2VuZXJhdGlvblN0YXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6OnJlc2V0QWx0ZXJuYXRpdmUpOgor
ICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6
aXNMYXN0QWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
VGVybUdlbmVyYXRpb25TdGF0ZTo6Y2xlYXJCYWNrdHJhY2spOgorICAgICAgICAoSlNDOjpZYXJy
OjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6anVtcFRvQmFja3RyYWNrKToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlRlcm1HZW5lcmF0aW9uU3RhdGU6
OnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdl
eEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6bGlua0RhdGFMYWJlbFRvQmFja3RyYWNr
SWZFeGlzdHMpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVy
YXRpb25TdGF0ZTo6YWRkQmFja3RyYWNrSnVtcCk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4
R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpzZXREYXRhTGFiZWxQdHIpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6c2V0QmFj
a1RyYWNrU3RhY2tPZmZzZXQpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
VGVybUdlbmVyYXRpb25TdGF0ZTo6c2V0QmFja3RyYWNrTGFiZWwpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6bGlua0FsdGVybmF0aXZl
QmFja3RyYWNrcyk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2Vu
ZXJhdGlvblN0YXRlOjpsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8pOgorICAgICAgICAoSlND
OjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6c2V0QmFja3RyYWNr
TGluayk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlv
blN0YXRlOjpjaGFpbkJhY2t0cmFja3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVy
YXRvcjo6VGVybUdlbmVyYXRpb25TdGF0ZTo6Y2hhaW5CYWNrdHJhY2tKdW1wcyk6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpUZXJtR2VuZXJhdGlvblN0YXRlOjpnZXRCYWNr
dHJhY2tEZXN0aW5hdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpU
ZXJtR2VuZXJhdGlvblN0YXRlOjpwcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9tKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlBhcmVudGhlc2VzVGFpbDo6UGFyZW50aGVzZXNU
YWlsKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OlBhcmVudGhlc2VzVGFp
bDo6cHJvY2Vzc0JhY2t0cmFja3MpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRv
cjo6UGFyZW50aGVzZXNUYWlsOjpzZXROZXh0SXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6WWFy
cjo6UmVnZXhHZW5lcmF0b3I6OlBhcmVudGhlc2VzVGFpbDo6Z2VuZXJhdGVDb2RlKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uQk9MKToKKyAg
ICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uRU9MKToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uV29y
ZEJvdW5kYXJ5KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRl
UGF0dGVybkNoYXJhY3RlclNpbmdsZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJh
dG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXJQYWlyKToKKyAgICAgICAgKEpTQzo6WWFycjo6
UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckZpeGVkKToKKyAgICAgICAg
KEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUGF0dGVybkNoYXJhY3RlckdyZWVk
eSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5D
aGFyYWN0ZXJOb25HcmVlZHkpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6
Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc1NpbmdsZSk6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4
R2VuZXJhdG9yOjpnZW5lcmF0ZUNoYXJhY3RlckNsYXNzRml4ZWQpOgorICAgICAgICAoSlNDOjpZ
YXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0dyZWVkeSk6CisgICAg
ICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9u
R3JlZWR5KToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUGFy
ZW50aGVzZXNEaXNqdW5jdGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9y
OjpnZW5lcmF0ZVBhcmVudGhlc2VzU2luZ2xlKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhH
ZW5lcmF0b3I6OmdlbmVyYXRlUGFyZW50aGVzZXNHcmVlZHlOb0JhY2t0cmFjayk6CisgICAgICAg
IChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVBhcmVudGhldGljYWxBc3NlcnRp
b24pOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVEaXNqdW5j
dGlvbik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpjb21waWxlKToKKyAg
ICAgICAgKiB5YXJyL1JlZ2V4UGF0dGVybi5oOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0ZXJu
VGVybTo6UGF0dGVyblRlcm0pOgorICAgICAgICAoSlNDOjpZYXJyOjpQYXR0ZXJuVGVybTo6aW52
ZXJ0KToKKyAgICAgICAgKEpTQzo6WWFycjo6UGF0dGVyblRlcm06OmNhcHR1cmUpOgorCiAyMDEw
LTEyLTAyICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IHRvIGZpeCBXaW5kb3dzIGJ1aWxkLgpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TUFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1B
c3NlbWJsZXIuaAkocmV2aXNpb24gNzMyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QVJNQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw2ICsyNDAsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25z
dCB7IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiAobV9vZmZzZXQgIT0gLTEpOyB9CiAgICAgICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNl
ZCA9IHRydWU7IH0KICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEptcERzdChpbnQgb2Zm
c2V0KQpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDczMjY3KQorKysgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Myw2ICs1NTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIH0K
IAogICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZDsgfQorICAgICAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQogICAgICAg
ICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBK
bXBEc3QoaW50IG9mZnNldCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNzMyNjcpCisrKyBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDEsNiArMjQxLDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBi
b29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwuaXNVc2VkKCk7IH0KKyAgICAgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwuaXNTZXQoKTsgfQogICAgICAgICB2
b2lkIHVzZWQoKSB7IG1fbGFiZWwudXNlZCgpOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1w
RHN0IG1fbGFiZWw7CkBAIC0yNjQsNiArMjY1LDggQEAgcHVibGljOgogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xh
YmVsLmlzU2V0KCk7IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wRHN0IG1f
bGFiZWw7CiAgICAgfTsKQEAgLTQxMCw2ICs0MTMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuICFtX2p1bXBzLnNpemUoKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9p
ZCBjbGVhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fanVtcHMuY2xlYXIoKTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgSnVtcFZlY3RvciYganVtcHMoKSB7IHJldHVy
biBtX2p1bXBzOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01JUFNBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTUlQU0Fzc2VtYmxlci5oCShyZXZpc2lvbiA3MzI2NykKKysrIEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlZDsgfQorICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gKG1fb2Zm
c2V0ICE9IC0xKTsgfQogICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KICAg
ICBwcml2YXRlOgogICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDczMjY3KQorKysgSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiAr
MjQ4LDcgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25z
dCB7IHJldHVybiBtX3VzZWQ7IH0KKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
IChtX29mZnNldCAhPSAtMSk7IH0KICAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVl
OyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS95YXJyL1JlZ2V4Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3lhcnIvUmVnZXhDb21waWxlci5jcHAJKHJldmlzaW9uIDczMjY3KQorKysgSmF2YVNj
cmlwdENvcmUveWFyci9SZWdleENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDcg
KzQ1OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIHBhcmVudGhl
c2VzRGlzanVuY3Rpb24gPSBuZXcgUGF0dGVybkRpc2p1bmN0aW9uKG1fYWx0ZXJuYXRpdmUpOwog
ICAgICAgICBtX3BhdHRlcm4ubV9kaXNqdW5jdGlvbnMuYXBwZW5kKHBhcmVudGhlc2VzRGlzanVu
Y3Rpb24pOwotICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVy
bShQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybiwgc3VicGF0dGVybklkLCBw
YXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBjYXB0dXJlKSk7CisgICAgICAgIG1fYWx0ZXJuYXRpdmUt
Pm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5UZXJtOjpUeXBlUGFyZW50aGVzZXNT
dWJwYXR0ZXJuLCBzdWJwYXR0ZXJuSWQsIHBhcmVudGhlc2VzRGlzanVuY3Rpb24sIGNhcHR1cmUs
IGZhbHNlKSk7CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUgPSBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9u
LT5hZGROZXdBbHRlcm5hdGl2ZSgpOwogICAgIH0KIApAQCAtNDY3LDcgKzQ2Nyw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIFBhdHRlcm5EaXNqdW5jdGlvbiogcGFyZW50aGVzZXNEaXNqdW5j
dGlvbiA9IG5ldyBQYXR0ZXJuRGlzanVuY3Rpb24obV9hbHRlcm5hdGl2ZSk7CiAgICAgICAgIG1f
cGF0dGVybi5tX2Rpc2p1bmN0aW9ucy5hcHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRpdmUtPm1fdGVybXMuYXBwZW5kKFBhdHRlcm5UZXJtKFBhdHRlcm5U
ZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbiwgbV9wYXR0ZXJuLm1fbnVtU3VicGF0dGVy
bnMgKyAxLCBwYXJlbnRoZXNlc0Rpc2p1bmN0aW9uLCBpbnZlcnQpKTsKKyAgICAgICAgbV9hbHRl
cm5hdGl2ZS0+bV90ZXJtcy5hcHBlbmQoUGF0dGVyblRlcm0oUGF0dGVyblRlcm06OlR5cGVQYXJl
bnRoZXRpY2FsQXNzZXJ0aW9uLCBtX3BhdHRlcm4ubV9udW1TdWJwYXR0ZXJucyArIDEsIHBhcmVu
dGhlc2VzRGlzanVuY3Rpb24sIGZhbHNlLCBpbnZlcnQpKTsKICAgICAgICAgbV9hbHRlcm5hdGl2
ZSA9IHBhcmVudGhlc2VzRGlzanVuY3Rpb24tPmFkZE5ld0FsdGVybmF0aXZlKCk7CiAgICAgICAg
IG1faW52ZXJ0UGFyZW50aGV0aWNhbEFzc2VydGlvbiA9IGludmVydDsKICAgICB9CkBAIC01MjAs
NyArNTIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgUGF0dGVyblRlcm0mIHRlcm0gPSBjdXJy
ZW50QWx0ZXJuYXRpdmUtPmxhc3RUZXJtKCk7CiAgICAgICAgICAgICBBU1NFUlQoKHRlcm0udHlw
ZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybikgfHwgKHRlcm0udHlw
ZSA9PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb24pKTsKIAotICAgICAg
ICAgICAgaWYgKCh0ZXJtLnR5cGUgPT0gUGF0dGVyblRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBh
dHRlcm4pICYmIHRlcm0uaW52ZXJ0T3JDYXB0dXJlICYmIChzdWJwYXR0ZXJuSWQgPT0gdGVybS5w
YXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQpKSB7CisgICAgICAgICAgICBpZiAoKHRlcm0udHlwZSA9
PSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybikgJiYgdGVybS5jYXB0dXJl
KCkgJiYgKHN1YnBhdHRlcm5JZCA9PSB0ZXJtLnBhcmVudGhlc2VzLnN1YnBhdHRlcm5JZCkpIHsK
ICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlLT5tX3Rlcm1zLmFwcGVuZChQYXR0ZXJuVGVy
bTo6Rm9yd2FyZFJlZmVyZW5jZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CkBAIC04NDUsNyArODQ1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAgICAgY2FzZSBQYXR0ZXJuVGVybTo6VHlwZVBhcmVudGhldGlj
YWxBc3NlcnRpb246Ci0gICAgICAgICAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0dXJlKQor
ICAgICAgICAgICAgICAgIGlmICh0ZXJtLmludmVydCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXJlbnRo
ZXNlc1N1YnBhdHRlcm46CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhJbnRlcnByZXRl
ci5jcHAJKHJldmlzaW9uIDczMjY3KQorKysgSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyMiw3ICsxNTIyLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5z
aXplKCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVy
bShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9uY2VCZWdpbiwgc3VicGF0dGVy
bklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRl
cm5PbmNlQmVnaW4sIHN1YnBhdHRlcm5JZCwgY2FwdHVyZSwgZmFsc2UsIGlucHV0UG9zaXRpb24p
KTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9uLT50
ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKICAgICAgICAg
bV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybTo6QWx0ZXJuYXRpdmVCZWdp
bigpKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21fYm9keURpc2p1bmN0aW9u
LT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gYWx0ZXJuYXRpdmVGcmFtZUxvY2F0
aW9uOwpAQCAtMTUzNSw3ICsxNTM1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaW50IGJl
Z2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgbV9i
b2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVu
dGhlc2VzU3VicGF0dGVyblRlcm1pbmFsQmVnaW4sIHN1YnBhdHRlcm5JZCwgY2FwdHVyZSwgaW5w
dXRQb3NpdGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5
dGVUZXJtKEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxCZWdpbiwg
c3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBt
X2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUoKSAt
IDFdLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwogICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtOjpBbHRlcm5hdGl2ZUJlZ2luKCkpOwogICAgICAg
ICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLnNpemUo
KSAtIDFdLmZyYW1lTG9jYXRpb24gPSBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb247CkBAIC0xNTUy
LDcgKzE1NTIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURp
c2p1bmN0aW9uLT50ZXJtcy5zaXplKCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRl
cm1zLmFwcGVuZChCeXRlVGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhlc2VzU3VicGF0dGVybk9u
Y2VCZWdpbiwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAg
IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQ
YXJlbnRoZXNlc1N1YnBhdHRlcm5PbmNlQmVnaW4sIHN1YnBhdHRlcm5JZCwgY2FwdHVyZSwgZmFs
c2UsIGlucHV0UG9zaXRpb24pKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW21f
Ym9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gZnJhbWVM
b2NhdGlvbjsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVy
bTo6QWx0ZXJuYXRpdmVCZWdpbigpKTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1z
W21fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXplKCkgLSAxXS5mcmFtZUxvY2F0aW9uID0gYWx0
ZXJuYXRpdmVGcmFtZUxvY2F0aW9uOwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgaW50IGJlZ2luVGVybSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5zaXpl
KCk7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRlVGVybShC
eXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbiwgc3VicGF0dGVybklkLCBp
bnZlcnQsIDApKTsKKyAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRl
VGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25CZWdpbiwgc3VicGF0dGVy
bklkLCBmYWxzZSwgaW52ZXJ0LCAwKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9IGZy
YW1lTG9jYXRpb247CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0
ZVRlcm06OkFsdGVybmF0aXZlQmVnaW4oKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1ttX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuc2l6ZSgpIC0gMV0uZnJhbWVMb2NhdGlvbiA9
IGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbjsKQEAgLTE1ODIsMTAgKzE1ODIsMTAgQEAgcHVibGlj
OgogCiAgICAgICAgIEFTU0VSVChtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS50
eXBlID09IEJ5dGVUZXJtOjpUeXBlUGFyZW50aGV0aWNhbEFzc2VydGlvbkJlZ2luKTsKIAotICAg
ICAgICBib29sIGludmVydE9yQ2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdp
blRlcm1dLmludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgYm9vbCBpbnZlcnQgPSBtX2JvZHlEaXNq
dW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5pbnZlcnQoKTsKICAgICAgICAgdW5zaWduZWQgc3Vi
cGF0dGVybklkID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5zdWJw
YXR0ZXJuSWQ7CiAKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zLmFwcGVuZChCeXRl
VGVybShCeXRlVGVybTo6VHlwZVBhcmVudGhldGljYWxBc3NlcnRpb25FbmQsIHN1YnBhdHRlcm5J
ZCwgaW52ZXJ0T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXRpY2Fs
QXNzZXJ0aW9uRW5kLCBzdWJwYXR0ZXJuSWQsIGZhbHNlLCBpbnZlcnQsIGlucHV0UG9zaXRpb24p
KTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uYXRvbS5wYXJl
bnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24tPnRlcm1zW2VuZFRlcm1dLmF0b20ucGFyZW50aGVzZXNXaWR0aCA9IGVuZFRlcm0gLSBi
ZWdpblRlcm07CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tlbmRUZXJtXS5mcmFt
ZUxvY2F0aW9uID0gZnJhbWVMb2NhdGlvbjsKQEAgLTE2NzcsNyArMTY3Nyw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBCeXRlVGVybSYgcGFyZW50aGVzZXNCZWdpbiA9IG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tiZWdpblRlcm1dOwogCi0gICAgICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlID0gcGFy
ZW50aGVzZXNCZWdpbi5pbnZlcnRPckNhcHR1cmU7CisgICAgICAgIGJvb2wgY2FwdHVyZSA9IHBh
cmVudGhlc2VzQmVnaW4uY2FwdHVyZSgpOwogICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQg
PSBwYXJlbnRoZXNlc0JlZ2luLmF0b20uc3VicGF0dGVybklkOwogCiAgICAgICAgIHVuc2lnbmVk
IG51bVN1YnBhdHRlcm5zID0gbGFzdFN1YnBhdHRlcm5JZCAtIHN1YnBhdHRlcm5JZCArIDE7CkBA
IC0xNjkxLDcgKzE2OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtcy5zaHJpbmsoYmVnaW5UZXJtKTsKIAogICAgICAgICBtX2FsbFBhcmVudGhlc2VzSW5mby5h
cHBlbmQocGFyZW50aGVzZXNEaXNqdW5jdGlvbik7Ci0gICAgICAgIG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRl
cm4sIHN1YnBhdHRlcm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgaW52ZXJ0T3JDYXB0dXJl
LCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBl
bmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sIHN1YnBhdHRl
cm5JZCwgcGFyZW50aGVzZXNEaXNqdW5jdGlvbiwgY2FwdHVyZSwgaW5wdXRQb3NpdGlvbikpOwog
CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmF0b20ucXVhbnRp
dHlDb3VudCA9IHF1YW50aXR5Q291bnQ7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJt
c1tiZWdpblRlcm1dLmF0b20ucXVhbnRpdHlUeXBlID0gcXVhbnRpdHlUeXBlOwpAQCAtMTcwNiwx
MCArMTcwNiwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgQVNTRVJUKG1fYm9keURpc2p1bmN0aW9u
LT50ZXJtc1tiZWdpblRlcm1dLnR5cGUgPT0gQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBh
dHRlcm5PbmNlQmVnaW4pOwogCi0gICAgICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlID0gbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW2JlZ2luVGVybV0uaW52ZXJ0T3JDYXB0dXJlOworICAgICAgICBi
b29sIGNhcHR1cmUgPSBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5jYXB0dXJl
KCk7CiAgICAgICAgIHVuc2lnbmVkIHN1YnBhdHRlcm5JZCA9IG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtc1tiZWdpblRlcm1dLmF0b20uc3VicGF0dGVybklkOwogCi0gICAgICAgIG1fYm9keURpc2p1
bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1
YnBhdHRlcm5PbmNlRW5kLCBzdWJwYXR0ZXJuSWQsIGludmVydE9yQ2FwdHVyZSwgaW5wdXRQb3Np
dGlvbikpOworICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJt
KEJ5dGVUZXJtOjpUeXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuT25jZUVuZCwgc3VicGF0dGVybklk
LCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikpOwogICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnBhcmVudGhlc2VzV2lkdGggPSBlbmRUZXJtIC0g
YmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbZW5kVGVybV0uYXRv
bS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJlZ2luVGVybTsKICAgICAgICAgbV9ib2R5
RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1lTG9jYXRpb24gPSBmcmFtZUxvY2F0aW9u
OwpAQCAtMTcyOCwxMCArMTcyOCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgQVNTRVJUKG1fYm9k
eURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLnR5cGUgPT0gQnl0ZVRlcm06OlR5cGVQYXJl
bnRoZXNlc1N1YnBhdHRlcm5UZXJtaW5hbEJlZ2luKTsKIAotICAgICAgICBib29sIGludmVydE9y
Q2FwdHVyZSA9IG1fYm9keURpc2p1bmN0aW9uLT50ZXJtc1tiZWdpblRlcm1dLmludmVydE9yQ2Fw
dHVyZTsKKyAgICAgICAgYm9vbCBjYXB0dXJlID0gbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2Jl
Z2luVGVybV0uY2FwdHVyZSgpOwogICAgICAgICB1bnNpZ25lZCBzdWJwYXR0ZXJuSWQgPSBtX2Jv
ZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnN1YnBhdHRlcm5JZDsKIAotICAg
ICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXMuYXBwZW5kKEJ5dGVUZXJtKEJ5dGVUZXJtOjpU
eXBlUGFyZW50aGVzZXNTdWJwYXR0ZXJuVGVybWluYWxFbmQsIHN1YnBhdHRlcm5JZCwgaW52ZXJ0
T3JDYXB0dXJlLCBpbnB1dFBvc2l0aW9uKSk7CisgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50
ZXJtcy5hcHBlbmQoQnl0ZVRlcm0oQnl0ZVRlcm06OlR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm5U
ZXJtaW5hbEVuZCwgc3VicGF0dGVybklkLCBjYXB0dXJlLCBmYWxzZSwgaW5wdXRQb3NpdGlvbikp
OwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbi0+dGVybXNbYmVnaW5UZXJtXS5hdG9tLnBhcmVu
dGhlc2VzV2lkdGggPSBlbmRUZXJtIC0gYmVnaW5UZXJtOwogICAgICAgICBtX2JvZHlEaXNqdW5j
dGlvbi0+dGVybXNbZW5kVGVybV0uYXRvbS5wYXJlbnRoZXNlc1dpZHRoID0gZW5kVGVybSAtIGJl
Z2luVGVybTsKICAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24tPnRlcm1zW2VuZFRlcm1dLmZyYW1l
TG9jYXRpb24gPSBmcmFtZUxvY2F0aW9uOwpAQCAtMTgxNCw3ICsxODE0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVy
blRlcm06OlR5cGVBc3NlcnRpb25Xb3JkQm91bmRhcnk6Ci0gICAgICAgICAgICAgICAgICAgIGFz
c2VydGlvbldvcmRCb3VuZGFyeSh0ZXJtLmludmVydE9yQ2FwdHVyZSwgdGVybS5pbnB1dFBvc2l0
aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpOworICAgICAgICAgICAgICAgICAgICBh
c3NlcnRpb25Xb3JkQm91bmRhcnkodGVybS5pbnZlcnQoKSwgdGVybS5pbnB1dFBvc2l0aW9uIC0g
Y3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVQYXR0ZXJuQ2hhcmFjdGVy
OgpAQCAtMTgyMiw3ICsxODIyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFz
czoKLSAgICAgICAgICAgICAgICAgICAgYXRvbUNoYXJhY3RlckNsYXNzKHRlcm0uY2hhcmFjdGVy
Q2xhc3MsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0ZXJtLmlucHV0UG9zaXRpb24gLSBjdXJyZW50
Q291bnRBbHJlYWR5Q2hlY2tlZCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291
bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgYXRvbUNoYXJhY3Rl
ckNsYXNzKHRlcm0uY2hhcmFjdGVyQ2xhc3MsIHRlcm0uaW52ZXJ0KCksIHRlcm0uaW5wdXRQb3Np
dGlvbiAtIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRl
cm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5cGUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgUGF0dGVyblRlcm06OlR5cGVCYWNrUmVm
ZXJlbmNlOgpAQCAtMTg0MiwxNyArMTg0MiwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVGcmFt
ZUxvY2F0aW9uICs9IFJlZ2V4U3RhY2tTcGFjZUZvckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09u
Y2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zm
c2V0ID0gdGVybS5pbnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNPbmNlQmVnaW4odGVybS5wYXJl
bnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCBkZWxlZ2F0ZUVuZElu
cHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9j
YXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdG9tUGFyZW50aGVzZXNPbmNlQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQs
IHRlcm0uY2FwdHVyZSgpLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJl
YWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1lTG9jYXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2Nh
dGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RGlzanVuY3Rpb24odGVybS5wYXJl
bnRoZXNlcy5kaXNqdW5jdGlvbiwgY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQsIGRpc2p1bmN0
aW9uQWxyZWFkeUNoZWNrZWRDb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFy
ZW50aGVzZXNPbmNlRW5kKGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQsIHRlcm0uZnJhbWVMb2NhdGlv
biwgdGVybS5xdWFudGl0eUNvdW50LCB0ZXJtLnF1YW50aXR5VHlwZSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAodGVybS5wYXJlbnRoZXNlcy5pc1Rlcm1pbmFsKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0ID0gdGVybS5p
bnB1dFBvc2l0aW9uIC0gY3VycmVudENvdW50QWxyZWFkeUNoZWNrZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNUZXJtaW5hbEJlZ2luKHRlcm0ucGFyZW50aGVzZXMu
c3VicGF0dGVybklkLCB0ZXJtLmludmVydE9yQ2FwdHVyZSwgZGVsZWdhdGVFbmRJbnB1dE9mZnNl
dCAtIGRpc2p1bmN0aW9uQWxyZWFkeUNoZWNrZWRDb3VudCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0
ZXJtLmZyYW1lTG9jYXRpb24gKyBSZWdleFN0YWNrU3BhY2VGb3JCYWNrVHJhY2tJbmZvUGFyZW50
aGVzZXNPbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1Rlcm1p
bmFsQmVnaW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uY2FwdHVyZSgpLCBk
ZWxlZ2F0ZUVuZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0
ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0uZnJhbWVMb2NhdGlvbiArIFJlZ2V4U3RhY2tTcGFjZUZv
ckJhY2tUcmFja0luZm9QYXJlbnRoZXNlc09uY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ZW1pdERpc2p1bmN0aW9uKHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3Vu
dEFscmVhZHlDaGVja2VkLCBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYXRvbVBhcmVudGhlc2VzVGVybWluYWxFbmQoZGVsZWdhdGVFbmRJ
bnB1dE9mZnNldCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50aXR5Q291bnQsIHRlcm0u
cXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQgPSB0ZXJtLmlucHV0
UG9zaXRpb24gLSBjdXJyZW50Q291bnRBbHJlYWR5Q2hlY2tlZDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5CZWdpbih0ZXJtLnBhcmVudGhlc2VzLnN1
YnBhdHRlcm5JZCwgdGVybS5pbnZlcnRPckNhcHR1cmUsIGRlbGVnYXRlRW5kSW5wdXRPZmZzZXQg
LSBkaXNqdW5jdGlvbkFscmVhZHlDaGVja2VkQ291bnQsIHRlcm0uZnJhbWVMb2NhdGlvbiwgMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuQmVnaW4o
dGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uY2FwdHVyZSgpLCBkZWxlZ2F0ZUVu
ZElucHV0T2Zmc2V0IC0gZGlzanVuY3Rpb25BbHJlYWR5Q2hlY2tlZENvdW50LCB0ZXJtLmZyYW1l
TG9jYXRpb24sIDApOwogICAgICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1bmN0aW9uKHRl
cm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkLCAw
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXNlc1N1YnBhdHRlcm5FbmQo
dGVybS5wYXJlbnRoZXNlcy5sYXN0U3VicGF0dGVybklkLCBkZWxlZ2F0ZUVuZElucHV0T2Zmc2V0
LCB0ZXJtLmZyYW1lTG9jYXRpb24sIHRlcm0ucXVhbnRpdHlDb3VudCwgdGVybS5xdWFudGl0eVR5
cGUsIHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24tPm1fY2FsbEZyYW1lU2l6ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTE4NjUsNyArMTg2NSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkID49ICh1bnNpZ25l
ZCl0ZXJtLmlucHV0UG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICBpbnQgcG9zaXRpdmVJ
bnB1dE9mZnNldCA9IGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2VkIC0gdGVybS5pbnB1dFBvc2l0
aW9uOwogCi0gICAgICAgICAgICAgICAgICAgIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVn
aW4odGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0T3JDYXB0dXJlLCB0
ZXJtLmZyYW1lTG9jYXRpb24sIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIGF0b21QYXJlbnRoZXRpY2FsQXNzZXJ0aW9uQmVnaW4odGVybS5wYXJlbnRoZXNl
cy5zdWJwYXR0ZXJuSWQsIHRlcm0uaW52ZXJ0KCksIHRlcm0uZnJhbWVMb2NhdGlvbiwgYWx0ZXJu
YXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgZW1pdERpc2p1bmN0aW9u
KHRlcm0ucGFyZW50aGVzZXMuZGlzanVuY3Rpb24sIGN1cnJlbnRDb3VudEFscmVhZHlDaGVja2Vk
LCBwb3NpdGl2ZUlucHV0T2Zmc2V0LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYXRvbVBh
cmVudGhldGljYWxBc3NlcnRpb25FbmQoMCwgdGVybS5mcmFtZUxvY2F0aW9uLCB0ZXJtLnF1YW50
aXR5Q291bnQsIHRlcm0ucXVhbnRpdHlUeXBlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gNzMy
NjcpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODcsNyArODcsNiBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogICAgICAgICBUeXBlUGFy
ZW50aGV0aWNhbEFzc2VydGlvbkVuZCwKICAgICAgICAgVHlwZUNoZWNrSW5wdXQsCiAgICAgfSB0
eXBlOwotICAgIGJvb2wgaW52ZXJ0T3JDYXB0dXJlOwogICAgIHVuaW9uIHsKICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgIHVuaW9uIHsKQEAgLTExNCwxMCArMTEzLDE0IEBAIHN0cnVjdCBC
eXRlVGVybSB7CiAgICAgICAgIHVuc2lnbmVkIGNoZWNrSW5wdXRDb3VudDsKICAgICB9OwogICAg
IHVuc2lnbmVkIGZyYW1lTG9jYXRpb247CisgICAgYm9vbCBtX2NhcHR1cmUgOiAxOworICAgIGJv
b2wgbV9pbnZlcnQgOiAxOwogICAgIGludCBpbnB1dFBvc2l0aW9uOwogCiAgICAgQnl0ZVRlcm0o
VUNoYXIgY2gsIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQg
cXVhbnRpdHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgICAgICA6IGZy
YW1lTG9jYXRpb24oZnJhbWVMb2NhdGlvbikKKyAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCisg
ICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHF1YW50aXR5
VHlwZSkgewogICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OgpAQCAtMTM5LDYgKzE0
Miw4IEBAIHN0cnVjdCBCeXRlVGVybSB7CiAKICAgICBCeXRlVGVybShVQ2hhciBsbywgVUNoYXIg
aGksIGludCBpbnB1dFBvcywgdW5zaWduZWQgZnJhbWVMb2NhdGlvbiwgdW5zaWduZWQgcXVhbnRp
dHlDb3VudCwgUXVhbnRpZmllclR5cGUgcXVhbnRpdHlUeXBlKQogICAgICAgICA6IGZyYW1lTG9j
YXRpb24oZnJhbWVMb2NhdGlvbikKKyAgICAgICAgLCBtX2NhcHR1cmUoZmFsc2UpCisgICAgICAg
ICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHF1YW50aXR5VHlwZSkg
ewogICAgICAgICBjYXNlIFF1YW50aWZpZXJGaXhlZENvdW50OgpAQCAtMTYxLDcgKzE2Niw4IEBA
IHN0cnVjdCBCeXRlVGVybSB7CiAKICAgICBCeXRlVGVybShDaGFyYWN0ZXJDbGFzcyogY2hhcmFj
dGVyQ2xhc3MsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCiAgICAgICAgIDogdHlwZShCeXRl
VGVybTo6VHlwZUNoYXJhY3RlckNsYXNzKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZl
cnQpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQorICAgICAgICAsIG1faW52ZXJ0KGludmVy
dCkKICAgICB7CiAgICAgICAgIGF0b20uY2hhcmFjdGVyQ2xhc3MgPSBjaGFyYWN0ZXJDbGFzczsK
ICAgICAgICAgYXRvbS5xdWFudGl0eVR5cGUgPSBRdWFudGlmaWVyRml4ZWRDb3VudDsKQEAgLTE2
OSw5ICsxNzUsMTAgQEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAgICAgaW5wdXRQb3NpdGlvbiA9
IGlucHV0UG9zOwogICAgIH0KIAotICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3Vi
cGF0dGVybklkLCBCeXRlRGlzanVuY3Rpb24qIHBhcmVudGhlc2VzSW5mbywgYm9vbCBpbnZlcnRP
ckNhcHR1cmUsIGludCBpbnB1dFBvcykKKyAgICBCeXRlVGVybShUeXBlIHR5cGUsIHVuc2lnbmVk
IHN1YnBhdHRlcm5JZCwgQnl0ZURpc2p1bmN0aW9uKiBwYXJlbnRoZXNlc0luZm8sIGJvb2wgY2Fw
dHVyZSwgaW50IGlucHV0UG9zKQogICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAgLCBpbnZl
cnRPckNhcHR1cmUoaW52ZXJ0T3JDYXB0dXJlKQorICAgICAgICAsIG1fY2FwdHVyZShjYXB0dXJl
KQorICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQogICAgIHsKICAgICAgICAgYXRvbS5zdWJwYXR0
ZXJuSWQgPSBzdWJwYXR0ZXJuSWQ7CiAgICAgICAgIGF0b20ucGFyZW50aGVzZXNEaXNqdW5jdGlv
biA9IHBhcmVudGhlc2VzSW5mbzsKQEAgLTE4MiwxNSArMTg5LDE3IEBAIHN0cnVjdCBCeXRlVGVy
bSB7CiAgICAgCiAgICAgQnl0ZVRlcm0oVHlwZSB0eXBlLCBib29sIGludmVydCA9IGZhbHNlKQog
ICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAgLCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0KQor
ICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAgICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAg
ICAgewogICAgICAgICBhdG9tLnF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJGaXhlZENvdW50Owog
ICAgICAgICBhdG9tLnF1YW50aXR5Q291bnQgPSAxOwogICAgIH0KIAotICAgIEJ5dGVUZXJtKFR5
cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBib29sIGludmVydE9yQ2FwdHVyZSwgaW50
IGlucHV0UG9zKQorICAgIEJ5dGVUZXJtKFR5cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklk
LCBib29sIGNhcHR1cmUsIGJvb2wgaW52ZXJ0LCBpbnQgaW5wdXRQb3MpCiAgICAgICAgIDogdHlw
ZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnRPckNhcHR1cmUpCisgICAg
ICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAg
IHsKICAgICAgICAgYXRvbS5zdWJwYXR0ZXJuSWQgPSBzdWJwYXR0ZXJuSWQ7CiAgICAgICAgIGF0
b20ucXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7CkBAIC0yMjgsNyArMjM3LDcg
QEAgc3RydWN0IEJ5dGVUZXJtIHsKICAgICAKICAgICBzdGF0aWMgQnl0ZVRlcm0gQmFja1JlZmVy
ZW5jZSh1bnNpZ25lZCBzdWJwYXR0ZXJuSWQsIGludCBpbnB1dFBvcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBCeXRlVGVybShUeXBlQmFja1JlZmVyZW5jZSwgc3VicGF0dGVybklkLCBmYWxzZSwg
aW5wdXRQb3MpOworICAgICAgICByZXR1cm4gQnl0ZVRlcm0oVHlwZUJhY2tSZWZlcmVuY2UsIHN1
YnBhdHRlcm5JZCwgZmFsc2UsIGZhbHNlLCBpbnB1dFBvcyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IEJ5dGVUZXJtIEJvZHlBbHRlcm5hdGl2ZUJlZ2luKGJvb2wgb25jZVRocm91Z2gpCkBAIC0yOTcs
MTIgKzMwNiwxMiBAQCBzdHJ1Y3QgQnl0ZVRlcm0gewogCiAgICAgYm9vbCBpbnZlcnQoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGludmVydE9yQ2FwdHVyZTsKKyAgICAgICAgcmV0dXJuIG1faW52
ZXJ0OwogICAgIH0KIAogICAgIGJvb2wgY2FwdHVyZSgpCiAgICAgewotICAgICAgICByZXR1cm4g
aW52ZXJ0T3JDYXB0dXJlOworICAgICAgICByZXR1cm4gbV9jYXB0dXJlOwogICAgIH0KIH07CiAK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCShyZXZpc2lvbiA3MzI2NykKKysrIEphdmFT
Y3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNiArMjg3
LDI3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAg
anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmcmFtZUxvY2F0aW9uICogc2l6ZW9m
KHZvaWQqKSkpOwogICAgIH0KIAorICAgIHN0cnVjdCBJbmRpcmVjdEp1bXBFbnRyeSB7CisgICAg
ICAgIEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQpCisgICAgICAgICAgICA6
IG1fc3RhY2tPZmZzZXQoc3RhY2tPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEluZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXAganVtcCkKKyAg
ICAgICAgICAgIDogbV9zdGFja09mZnNldChzdGFja09mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYWRkSnVtcChqdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBh
ZGRKdW1wKEp1bXAganVtcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9yZWxKdW1wcy5hcHBl
bmQoanVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgbV9zdGFja09m
ZnNldDsKKyAgICAgICAgSnVtcExpc3QgbV9yZWxKdW1wczsKKyAgICB9OworICAgICAgICAKICAg
ICBzdHJ1Y3QgQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQgewogICAgICAgICBEYXRhTGFiZWxQ
dHIgZGF0YUxhYmVsOwogICAgICAgICBMYWJlbCBiYWNrdHJhY2tMb2NhdGlvbjsKQEAgLTI5OCwx
NiArMzE5LDQ0NiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAg
ICAgICAgIH0KICAgICB9OwogCisgICAgc3RydWN0IFBhcmVudGhlc2VzVGFpbDsKKyAgICBzdHJ1
Y3QgVGVybUdlbmVyYXRpb25TdGF0ZTsKKyAgICAKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblN0YXRl
IHsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgSW5kaXJlY3RKdW1wRW50cnkqLCBXVEY6
OkludEhhc2g8dWludDMyX3Q+LCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJf
dD4gPiBJbmRpcmVjdEp1bXBIYXNoTWFwOworICAgICAgICAKKyAgICAgICAgR2VuZXJhdGlvblN0
YXRlKCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZElu
ZGlyZWN0SnVtcEVudHJ5KGludDMyX3Qgc3RhY2tPZmZzZXQsIEp1bXAganVtcCkKKyAgICAgICAg
eworICAgICAgICAgICAgSW5kaXJlY3RKdW1wSGFzaE1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9p
bmRpcmVjdEp1bXBNYXAuZmluZChzdGFja09mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEFTU0VSVChzdGFja09mZnNldCA+PSAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
dWludDMyX3Qgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YWNrT2Zmc2V0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX2luZGlyZWN0SnVtcE1hcC5l
bmQoKSkKKyAgICAgICAgICAgICAgICBtX2luZGlyZWN0SnVtcE1hcC5hZGQob2Zmc2V0LCBuZXcg
SW5kaXJlY3RKdW1wRW50cnkoc3RhY2tPZmZzZXQsIGp1bXApKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXN1bHQtPnNlY29uZC0+YWRkSnVtcChqdW1wKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRJbmRpcmVjdEp1bXBFbnRyeShpbnQzMl90IHN0
YWNrT2Zmc2V0LCBKdW1wTGlzdCBqdW1wcykKKyAgICAgICAgeworICAgICAgICAgICAgSnVtcExp
c3Q6Okp1bXBWZWN0b3IganVtcFZlY3RvciA9IGp1bXBzLmp1bXBzKCk7CisgICAgICAgICAgICBz
aXplX3Qgc2l6ZSA9IGp1bXBWZWN0b3Iuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgYWRkSW5kaXJlY3RKdW1wRW50
cnkoc3RhY2tPZmZzZXQsIGp1bXBWZWN0b3JbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBqdW1wcy5lbXB0eSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGVtaXRJ
bmRpcmVjdEp1bXBUYWJsZShNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChJbmRpcmVjdEp1bXBIYXNoTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbmRpcmVj
dEp1bXBNYXAuYmVnaW4oKTsgaXRlciAhPSBtX2luZGlyZWN0SnVtcE1hcC5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgSW5kaXJlY3RKdW1wRW50cnkqIGluZEp1bXBFbnRyeSA9IGl0
ZXItPnNlY29uZDsKKyAgICAgICAgICAgICAgICBpbmRKdW1wRW50cnktPm1fcmVsSnVtcHMubGlu
ayhtYXNtKTsKKyAgICAgICAgICAgICAgICBtYXNtLT5qdW1wKEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIGluZEp1bXBFbnRyeS0+bV9zdGFja09mZnNldCkpOworICAgICAgICAgICAgICAg
IGRlbGV0ZSBpbmRKdW1wRW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFBhcmVudGhlc2VzVGFpbCogYWRkUGFyZW50aGVzZXNUYWlsKFBhdHRlcm5UZXJt
JiB0ZXJtKQorICAgICAgICB7CisgICAgICAgICAgICBQYXJlbnRoZXNlc1RhaWwqIHBhcmVudGhl
c2VzVGFpbCA9IG5ldyBQYXJlbnRoZXNlc1RhaWwodGVybSk7CisgICAgICAgICAgICBtX3BhcmVu
VGFpbHMuYXBwZW5kKHBhcmVudGhlc2VzVGFpbCk7CisgICAgICAgICAgICBtX3BhcmVuVGFpbHNG
b3JJdGVyYXRpb24uYXBwZW5kKHBhcmVudGhlc2VzVGFpbCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBwYXJlbnRoZXNlc1RhaWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgZW1pdFBhcmVudGhlc2VzVGFpbChSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB2ZWN0b3JTaXplID0gbV9wYXJlblRhaWxz
LnNpemUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRW1pdCBpbiByZXZlcnNlIG9y
ZGVyIHNvIHBhcmVudFRhaWwgTiBjYW4gZmFsbCB0aHJvdWdoIHRvIE4tMQorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IHZlY3RvclNpemU7IGluZGV4ID4gMDsgLS1pbmRleCkgewor
ICAgICAgICAgICAgICAgIEp1bXBMaXN0IGp1bXBzVG9OZXh0OworICAgICAgICAgICAgICAgIG1f
cGFyZW5UYWlsc1tpbmRleC0xXS5nZXQoKS0+Z2VuZXJhdGVDb2RlKGdlbmVyYXRvciwganVtcHNU
b05leHQsIGluZGV4ID4gMSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMSkKKyAgICAg
ICAgICAgICAgICAgICAganVtcHNUb05leHQubGlua1RvKGdlbmVyYXRvci0+bGFiZWwoKSwgZ2Vu
ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFkZEp1
bXBzVG9OZXh0SW50ZXJhdGlvbihqdW1wc1RvTmV4dCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX3BhcmVuVGFpbHMuY2xlYXIoKTsKKyAgICAgICAgfSAgICAgICAgCisgICAgICAgIAor
ICAgICAgICB2b2lkIGFkZEp1bXBUb05leHRJbnRlcmF0aW9uKEp1bXAganVtcCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9qdW1wc1RvTmV4dEludGVyYXRpb24uYXBwZW5kKGp1bXApOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEp1bXBzVG9OZXh0SW50ZXJhdGlvbihK
dW1wTGlzdCBqdW1wcykKKyAgICAgICAgeworICAgICAgICAgICAgbV9qdW1wc1RvTmV4dEludGVy
YXRpb24uYXBwZW5kKGp1bXBzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBh
ZGREYXRhTGFiZWxUb05leHRJdGVyYXRpb24oRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9kYXRhUHRyc1RvTmV4dEl0ZXJhdGlvbi5hcHBlbmQoZGF0YUxh
YmVsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBsaW5rVG9OZXh0SXRlcmF0
aW9uKExhYmVsIGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBtX25leHRJdGVyYXRpb24g
PSBsYWJlbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb24uc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgbV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZCht
X2RhdGFQdHJzVG9OZXh0SXRlcmF0aW9uW2ldLCBtX25leHRJdGVyYXRpb24pKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9kYXRhUHRyc1RvTmV4dEl0ZXJhdGlvbi5jbGVhcigpOworCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJlblRhaWxzRm9ySXRlcmF0
aW9uLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fcGFyZW5UYWlsc0Zvckl0ZXJhdGlv
bltpXS0+c2V0TmV4dEl0ZXJhdGlvbihtX25leHRJdGVyYXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb24uY2xlYXIoKTsgICAgICAgICAgICAK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbGlua1RvTmV4dEl0ZXJhdGlvbihSZWdleEdlbmVy
YXRvciogZ2VuZXJhdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBtX2p1bXBzVG9OZXh0SW50
ZXJhdGlvbi5saW5rVG8obV9uZXh0SXRlcmF0aW9uLCBnZW5lcmF0b3IpOworICAgICAgICB9ICAg
ICAgICAKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29y
ZD4gbV9iYWNrdHJhY2tSZWNvcmRzOworICAgICAgICBJbmRpcmVjdEp1bXBIYXNoTWFwIG1faW5k
aXJlY3RKdW1wTWFwOworICAgICAgICBMYWJlbCBtX25leHRJdGVyYXRpb247CisgICAgICAgIFZl
Y3RvcjxPd25QdHI8UGFyZW50aGVzZXNUYWlsPiA+IG1fcGFyZW5UYWlsczsKKyAgICAgICAgSnVt
cExpc3QgbV9qdW1wc1RvTmV4dEludGVyYXRpb247CisgICAgICAgIFZlY3RvcjxEYXRhTGFiZWxQ
dHI+IG1fZGF0YVB0cnNUb05leHRJdGVyYXRpb247CisgICAgICAgIFZlY3RvcjxQYXJlbnRoZXNl
c1RhaWwqPiBtX3BhcmVuVGFpbHNGb3JJdGVyYXRpb247CisgICAgfTsKKworICAgIHN0cnVjdCBC
YWNrdHJhY2tEZXN0aW5hdGlvbiB7CisgICAgICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgICAg
ICBOb0JhY2t0cmFjaywKKyAgICAgICAgICAgIEJhY2t0cmFja0xhYmVsLAorICAgICAgICAgICAg
QmFja3RyYWNrU3RhY2tPZmZzZXQsCisgICAgICAgICAgICBCYWNrdHJhY2tKdW1wTGlzdCwKKyAg
ICAgICAgICAgIEJhY2t0cmFja0xpbmtlZAorICAgICAgICB9IEJhY2t0cmFja1R5cGU7CisgICAg
ICAgIAorICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbigpCisgICAgICAgICAgICA6IG1fYmFj
a3RyYWNrVHlwZShOb0JhY2t0cmFjaykKKyAgICAgICAgICAgICwgbV9iYWNrdHJhY2tUb0xhYmVs
KDApCisgICAgICAgICAgICAsIG1fc3ViRGF0YUxhYmVsUHRyKDApCisgICAgICAgICAgICAsIG1f
bmV4dEJhY2t0cmFjaygwKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1NvdXJjZUxhYmVsKDAp
CisgICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlSnVtcHMoMCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbihpbnQzMl90IHN0
YWNrT2Zmc2V0KSAKKyAgICAgICAgICAgIDogbV9iYWNrdHJhY2tUeXBlKEJhY2t0cmFja1N0YWNr
T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1N0YWNrT2Zmc2V0KHN0YWNrT2Zmc2V0
KQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9z
dWJEYXRhTGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNrKDApCisgICAg
ICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAgICAgICwgbV9iYWNr
dHJhY2tTb3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEJhY2t0cmFja0Rlc3RpbmF0aW9uKExhYmVsIGxhYmVsKSAKKyAgICAgICAgICAgIDogbV9i
YWNrdHJhY2tUeXBlKEJhY2t0cmFja0xhYmVsKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja0xh
YmVsKGxhYmVsKQorICAgICAgICAgICAgLCBtX2JhY2t0cmFja1RvTGFiZWwoMCkKKyAgICAgICAg
ICAgICwgbV9zdWJEYXRhTGFiZWxQdHIoMCkKKyAgICAgICAgICAgICwgbV9uZXh0QmFja3RyYWNr
KDApCisgICAgICAgICAgICAsIG1fYmFja3RyYWNrU291cmNlTGFiZWwoMCkKKyAgICAgICAgICAg
ICwgbV9iYWNrdHJhY2tTb3VyY2VKdW1wcygwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0
cmFja1R5cGUgPSBOb0JhY2t0cmFjazsKKyAgICAgICAgICAgIGNsZWFyRGF0YUxhYmVsKCk7Cisg
ICAgICAgICAgICBtX25leHRCYWNrdHJhY2sgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIGNsZWFyRGF0YUxhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9kYXRh
TGFiZWxQdHIgPSBEYXRhTGFiZWxQdHIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBoYXNEZXN0aW5hdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9i
YWNrdHJhY2tUeXBlICE9IE5vQmFja3RyYWNrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBpc1N0YWNrT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICht
X2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGlzTGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNKdW1wTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFja0p1bXBMaXN0KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNEYXRhTGFiZWwoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9kYXRhTGFiZWxQdHIuaXNTZXQoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBjb3B5VGFyZ2V0KEJhY2t0cmFja0Rlc3RpbmF0aW9uJiByaHMsIGJvb2wg
Y29weURhdGFMYWJlbCA9IHRydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNr
VHlwZSA9IHJocy5tX2JhY2t0cmFja1R5cGU7CisgICAgICAgICAgICBpZiAobV9iYWNrdHJhY2tU
eXBlID09IEJhY2t0cmFja1N0YWNrT2Zmc2V0KQorICAgICAgICAgICAgICAgIG1fYmFja3RyYWNr
U3RhY2tPZmZzZXQgPSByaHMubV9iYWNrdHJhY2tTdGFja09mZnNldDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1fYmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCkKKyAgICAgICAgICAgICAg
ICBtX2JhY2t0cmFja0xhYmVsID0gcmhzLm1fYmFja3RyYWNrTGFiZWw7CisgICAgICAgICAgICBp
ZiAoY29weURhdGFMYWJlbCkKKyAgICAgICAgICAgICAgICBtX2RhdGFMYWJlbFB0ciA9IHJocy5t
X2RhdGFMYWJlbFB0cjsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMgPSByaHMu
bV9iYWNrdHJhY2tTb3VyY2VKdW1wczsKKyAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlTGFi
ZWwgPSByaHMubV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCBjb3B5VG8oQmFja3RyYWNrRGVzdGluYXRpb24mIGxocykKKyAgICAgICAgewor
ICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrVHlwZSA9IG1fYmFja3RyYWNrVHlwZTsKKyAgICAg
ICAgICAgIGlmIChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpCisgICAg
ICAgICAgICAgICAgbGhzLm1fYmFja3RyYWNrU3RhY2tPZmZzZXQgPSBtX2JhY2t0cmFja1N0YWNr
T2Zmc2V0OworICAgICAgICAgICAgZWxzZSBpZiAobV9iYWNrdHJhY2tUeXBlID09IEJhY2t0cmFj
a0xhYmVsKQorICAgICAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja0xhYmVsID0gbV9iYWNrdHJh
Y2tMYWJlbDsKKyAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUp1bXBzID0gbV9iYWNr
dHJhY2tTb3VyY2VKdW1wczsKKyAgICAgICAgICAgIGxocy5tX2JhY2t0cmFja1NvdXJjZUxhYmVs
ID0gbV9iYWNrdHJhY2tTb3VyY2VMYWJlbDsKKyAgICAgICAgICAgIGxocy5tX2RhdGFMYWJlbFB0
ciA9IG1fZGF0YUxhYmVsUHRyOworICAgICAgICAgICAgbGhzLm1fYmFja1RyYWNrSnVtcHMgPSBt
X2JhY2tUcmFja0p1bXBzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZEJh
Y2t0cmFja0p1bXAoSnVtcCBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2tUcmFj
a0p1bXBzLmFwcGVuZChqdW1wKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0U3RhY2tP
ZmZzZXQoaW50MzJfdCBzdGFja09mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNr
dHJhY2tUeXBlID0gQmFja3RyYWNrU3RhY2tPZmZzZXQ7CisgICAgICAgICAgICBtX2JhY2t0cmFj
a1N0YWNrT2Zmc2V0ID0gc3RhY2tPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgc2V0TGFiZWwoTGFiZWwgbGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFj
a3RyYWNrVHlwZSA9IEJhY2t0cmFja0xhYmVsOworICAgICAgICAgICAgbV9iYWNrdHJhY2tMYWJl
bCA9IGxhYmVsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldE5leHRCYWNr
dHJhY2tMYWJlbChMYWJlbCBsYWJlbCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbmV4
dEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX25leHRCYWNrdHJhY2stPnNldExhYmVsKGxh
YmVsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tUb0xh
YmVsKExhYmVsKiBiYWNrdHJhY2tUb0xhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Jh
Y2t0cmFja1RvTGFiZWwgPSBiYWNrdHJhY2tUb0xhYmVsOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIHNldEJhY2t0cmFja0p1bXBMaXN0KEp1bXBMaXN0KiBqdW1wTGlzdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJhY2tUeXBlID0gQmFja3RyYWNrSnVtcExpc3Q7
CisgICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzID0ganVtcExpc3Q7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0QmFja3RyYWNrU291cmNlTGFiZWwoTGFiZWwq
IGJhY2t0cmFja1NvdXJjZUxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFj
a1NvdXJjZUxhYmVsID0gYmFja3RyYWNrU291cmNlTGFiZWw7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgc2V0RGF0YUxhYmVsKERhdGFMYWJlbFB0ciBkcCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1fc3ViRGF0YUxhYmVsUHRyKSB7CisgICAgICAgICAgICAgICAgKm1f
c3ViRGF0YUxhYmVsUHRyID0gZHA7CisgICAgICAgICAgICAgICAgbV9zdWJEYXRhTGFiZWxQdHIg
PSAwOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9kYXRhTGFiZWxQdHIg
PSBkcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRTdWJEYXRhTGFiZWxQ
dHIoRGF0YUxhYmVsUHRyKiBzdWJEYXRhTGFiZWxQdHIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fc3ViRGF0YUxhYmVsUHRyID0gc3ViRGF0YUxhYmVsUHRyOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBsaW5rVG9OZXh0QmFja3RyYWNrKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBuZXh0QmFj
a3RyYWNrKQorICAgICAgICB7CisgICAgICAgICAgICBtX25leHRCYWNrdHJhY2sgPSBuZXh0QmFj
a3RyYWNrOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgaW50MzJfdCBnZXRTdGFja09mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX2JhY2t0cmFja1R5cGUgPT0gQmFja3RyYWNrU3RhY2tPZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYmFja3RyYWNrU3RhY2tPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIExhYmVsIGdldExhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1f
YmFja3RyYWNrVHlwZSA9PSBCYWNrdHJhY2tMYWJlbCk7CisgICAgICAgICAgICByZXR1cm4gbV9i
YWNrdHJhY2tMYWJlbDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSnVtcExpc3QmIGdl
dEJhY2t0cmFja0p1bXBzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFja1Ry
YWNrSnVtcHM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERhdGFMYWJlbFB0ciYgZ2V0
RGF0YUxhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZGF0YUxhYmVsUHRy
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGp1bXBUb0JhY2t0cmFjayhNYWNy
b0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzSnVtcExpc3Qo
KSkgeworICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2Jh
Y2t0cmFja1NvdXJjZUxhYmVsLT5pc1NldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbWFzbS0+
anVtcCgpLmxpbmtUbygqbV9iYWNrdHJhY2tTb3VyY2VMYWJlbCwgbWFzbSk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1NvdXJjZUp1bXBzLT5h
cHBlbmQobWFzbS0+anVtcCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNl
dCgpKQorICAgICAgICAgICAgICAgIG1hc20tPmp1bXAoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgbV9iYWNrdHJhY2tTdGFja09mZnNldCkpOworICAgICAgICAgICAgZWxzZSBpZiAoaXNM
YWJlbCgpKQorICAgICAgICAgICAgICAgIG1hc20tPmp1bXAoKS5saW5rVG8obV9iYWNrdHJhY2tM
YWJlbCwgbWFzbSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9iYWNrVHJh
Y2tKdW1wcy5hcHBlbmQobWFzbS0+anVtcCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgSnVtcCBq
dW1wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNl
TGFiZWwtPmlzU2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBqdW1wLmxpbmtUbygqbV9iYWNr
dHJhY2tTb3VyY2VMYWJlbCwgZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChqdW1wKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGFja09mZnNldCgpKQorICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUuYWRkSW5kaXJlY3RKdW1wRW50cnkoZ2V0U3RhY2tP
ZmZzZXQoKSwganVtcCk7CisgICAgICAgICAgICBlbHNlIGlmIChpc0xhYmVsKCkpCisgICAgICAg
ICAgICAgICAganVtcC5saW5rVG8oZ2V0TGFiZWwoKSwgZ2VuZXJhdG9yKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1wKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soUmVnZXhHZW5l
cmF0b3IqIGdlbmVyYXRvciwgSnVtcExpc3QmIGp1bXBzKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaXNKdW1wTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrU291
cmNlTGFiZWwgJiYgKG1fYmFja3RyYWNrU291cmNlTGFiZWwtPmlzU2V0KCkpKQorICAgICAgICAg
ICAgICAgICAgICBqdW1wcy5saW5rVG8oKm1fYmFja3RyYWNrU291cmNlTGFiZWwsIGdlbmVyYXRv
cik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2JhY2t0cmFj
a1NvdXJjZUp1bXBzLT5hcHBlbmQoanVtcHMpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0
YWNrT2Zmc2V0KCkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0
ZS5hZGRJbmRpcmVjdEp1bXBFbnRyeShnZXRTdGFja09mZnNldCgpLCBqdW1wcyk7CisgICAgICAg
ICAgICBlbHNlIGlmIChpc0xhYmVsKCkpCisgICAgICAgICAgICAgICAganVtcHMubGlua1RvKGdl
dExhYmVsKCksIGdlbmVyYXRvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bV9iYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcHMpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBsaW5rRGF0YUxhYmVsVG9IZXJlSWZFeGlzdHMoUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvcikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhc0RhdGFMYWJlbCgpKSB7CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBw
ZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKGdldERhdGFMYWJlbCgpLCBnZW5lcmF0b3It
PmxhYmVsKCkpKTsKKyAgICAgICAgICAgICAgICBjbGVhckRhdGFMYWJlbCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gICAgICAgIAorICAgICAgICAgICAgICAgIAor
ICAgICAgICBib29sIHBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoUmVnZXhHZW5lcmF0b3Iq
IGdlbmVyYXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzSnVtcExpc3QoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2JhY2t0cmFja1NvdXJjZUxhYmVsICYmIChtX2JhY2t0cmFj
a1NvdXJjZUxhYmVsLT5pc1NldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5q
dW1wKCptX2JhY2t0cmFja1NvdXJjZUxhYmVsKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrU291cmNlSnVtcHMtPmFwcGVuZChnZW5lcmF0b3It
Pmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlzU3RhY2tPZmZzZXQoKSkgeworICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+anVtcChBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBnZXRTdGFja09mZnNl
dCgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0xhYmVsKCkpIHsKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmp1bXAoZ2V0TGFiZWwoKSk7CisgICAgICAgICAgICAgICAgaWYgKGhhc0RhdGFM
YWJlbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3Rh
dGUubV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChn
ZXREYXRhTGFiZWwoKSwgZ2V0TGFiZWwoKSkpOworICAgICAgICAgICAgICAgICAgICBjbGVhckRh
dGFMYWJlbCgpOworICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyhSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yLCBib29sIG5leHRJdGVyYXRp
b24gPSBmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAgTGFiZWwgaGVyZUxhYmVsID0gZ2Vu
ZXJhdG9yLT5sYWJlbCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9iYWNrdHJh
Y2tUb0xhYmVsKSB7CisgICAgICAgICAgICAgICAgKm1fYmFja3RyYWNrVG9MYWJlbCA9IGhlcmVM
YWJlbDsKKyAgICAgICAgICAgICAgICBtX2JhY2t0cmFja1RvTGFiZWwgPSAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2JhY2tUcmFja0p1bXBzLmxpbmsoZ2Vu
ZXJhdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5leHRJdGVyYXRpb24pCisg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9OZXh0SXRl
cmF0aW9uKGhlcmVMYWJlbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYXNEYXRh
TGFiZWwoKSkgeworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUu
bV9iYWNrdHJhY2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChnZXRE
YXRhTGFiZWwoKSwgaGVyZUxhYmVsKSk7CisgICAgICAgICAgICAgICAgLy8gZGF0YSBsYWJlbCBj
bGVhcmVkIGFzIGEgcmVzdWx0IG9mIHRoZSBjbGVhcigpIGJlbG93CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKFJlZ2V4R2VuZXJhdG9yKiBn
ZW5lcmF0b3IsIExhYmVsIGxhYmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9iYWNrVHJhY2tKdW1wcy5saW5rVG8obGFiZWwsIGdlbmVyYXRv
cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChuZXh0SXRlcmF0aW9uKQorICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubGlua1RvTmV4dEl0ZXJhdGlv
bihsYWJlbCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYXNEYXRhTGFiZWwoKSkg
eworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJh
Y2tSZWNvcmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChnZXREYXRhTGFiZWwo
KSwgbGFiZWwpKTsKKyAgICAgICAgICAgICAgICBjbGVhckRhdGFMYWJlbCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEJhY2t0cmFj
a1R5cGUgbV9iYWNrdHJhY2tUeXBlOworICAgICAgICBpbnQzMl90IG1fYmFja3RyYWNrU3RhY2tP
ZmZzZXQ7CisgICAgICAgIExhYmVsIG1fYmFja3RyYWNrTGFiZWw7CisgICAgICAgIERhdGFMYWJl
bFB0ciBtX2RhdGFMYWJlbFB0cjsKKyAgICAgICAgTGFiZWwqIG1fYmFja3RyYWNrVG9MYWJlbDsK
KyAgICAgICAgRGF0YUxhYmVsUHRyKiBtX3N1YkRhdGFMYWJlbFB0cjsKKyAgICAgICAgQmFja3Ry
YWNrRGVzdGluYXRpb24qIG1fbmV4dEJhY2t0cmFjazsKKyAgICAgICAgTGFiZWwqIG1fYmFja3Ry
YWNrU291cmNlTGFiZWw7CisgICAgICAgIEp1bXBMaXN0KiBtX2JhY2t0cmFja1NvdXJjZUp1bXBz
OworICAgICAgICBKdW1wTGlzdCBtX2JhY2tUcmFja0p1bXBzOworICAgIH07CisgICAgICAgIAog
ICAgIHN0cnVjdCBUZXJtR2VuZXJhdGlvblN0YXRlIHsKICAgICAgICAgVGVybUdlbmVyYXRpb25T
dGF0ZShQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1bmN0aW9uLCB1bnNpZ25lZCBjaGVja2VkVG90
YWwpCiAgICAgICAgICAgICA6IGRpc2p1bmN0aW9uKGRpc2p1bmN0aW9uKQogICAgICAgICAgICAg
LCBjaGVja2VkVG90YWwoY2hlY2tlZFRvdGFsKQorICAgICAgICAgICAgLCBtX2xpbmtlZEJhY2t0
cmFjaygwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJlc2V0QWx0ZXJu
YXRpdmUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpc0JhY2tUcmFja0dlbmVyYXRlZCA9IGZh
bHNlOworICAgICAgICAgICAgbV9iYWNrdHJhY2suY2xlYXIoKTsKICAgICAgICAgICAgIGFsdCA9
IDA7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBhbHRlcm5hdGl2ZVZhbGlkKCkKQEAgLTMyMiw3
ICs3NzMsMTEgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZGlzanVuY3Rpb24tPm1fYWx0ZXJuYXRpdmVzW2Fs
dF07CiAgICAgICAgIH0KLQorICAgICAgICBib29sIGlzTGFzdEFsdGVybmF0aXZlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIChhbHQgKyAxKSA9PSBkaXNqdW5jdGlvbi0+bV9hbHRl
cm5hdGl2ZXMuc2l6ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0
VGVybSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChhbHRlcm5hdGl2ZVZhbGlkKCkp
OwpAQCAtMzczLDUyICs4MjgsMTA2IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBN
YWNyb0Fzc2UKICAgICAgICAgICAgIHJldHVybiB0ZXJtKCkuaW5wdXRQb3NpdGlvbiAtIGNoZWNr
ZWRUb3RhbDsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKEp1bXAg
anVtcCwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisgICAgICAgIHZvaWQgY2xlYXJCYWNrdHJhY2so
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNCYWNrVHJhY2tHZW5lcmF0ZWQpCi0gICAg
ICAgICAgICAgICAganVtcC5saW5rVG8oYmFja3RyYWNrTGFiZWwsIG1hc20pOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGJhY2tUcmFja0p1bXBzLmFwcGVuZChqdW1wKTsKKyAg
ICAgICAgICAgIG1fYmFja3RyYWNrLmNsZWFyKCk7CisgICAgICAgICAgICBtX2xpbmtlZEJhY2t0
cmFjayA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBqdW1wVG9CYWNrdHJhY2soSnVtcExp
c3QmIGp1bXBzLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgCisgICAgICAgIHZvaWQg
anVtcFRvQmFja3RyYWNrKE1hY3JvQXNzZW1ibGVyKiBtYXNtKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoaXNCYWNrVHJhY2tHZW5lcmF0ZWQpCi0gICAgICAgICAgICAgICAganVtcHMubGlu
a1RvKGJhY2t0cmFja0xhYmVsLCBtYXNtKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBiYWNrVHJhY2tKdW1wcy5hcHBlbmQoanVtcHMpOworICAgICAgICAgICAgbV9iYWNrdHJh
Y2suanVtcFRvQmFja3RyYWNrKG1hc20pOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgcGxhbnRK
dW1wVG9CYWNrdHJhY2tJZkV4aXN0cyhNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgCisg
ICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0b3IsIEp1
bXAganVtcCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzQmFja1RyYWNrR2VuZXJhdGVk
KSB7Ci0gICAgICAgICAgICAgICAgbWFzbS0+anVtcChiYWNrdHJhY2tMYWJlbCk7CisgICAgICAg
ICAgICBtX2JhY2t0cmFjay5qdW1wVG9CYWNrdHJhY2soZ2VuZXJhdG9yLCBqdW1wKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQganVtcFRvQmFja3RyYWNrKFJlZ2V4R2VuZXJhdG9yKiBnZW5l
cmF0b3IsIEp1bXBMaXN0JiBqdW1wcykKKyAgICAgICAgeworICAgICAgICAgICAgbV9iYWNrdHJh
Y2suanVtcFRvQmFja3RyYWNrKGdlbmVyYXRvciwganVtcHMpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIHBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoUmVnZXhHZW5lcmF0
b3IqIGdlbmVyYXRvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFja3RyYWNr
LnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoZ2VuZXJhdG9yKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBsaW5rRGF0YUxhYmVsVG9CYWNrdHJhY2tJZkV4aXN0cyhSZWdl
eEdlbmVyYXRvciogZ2VuZXJhdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1fYmFj
a3RyYWNrLmlzTGFiZWwoKSkgJiYgKG1fYmFja3RyYWNrLmhhc0RhdGFMYWJlbCgpKSkgeworICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci0+bV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNv
cmRzLmFwcGVuZChBbHRlcm5hdGl2ZUJhY2t0cmFja1JlY29yZChtX2JhY2t0cmFjay5nZXREYXRh
TGFiZWwoKSwgbV9iYWNrdHJhY2suZ2V0TGFiZWwoKSkpOworICAgICAgICAgICAgICAgIG1fYmFj
a3RyYWNrLmNsZWFyRGF0YUxhYmVsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQorICAgICAgICB9ICAgICAgICAKKwogICAgICAgICB2b2lkIGFkZEJhY2t0cmFja0p1
bXAoSnVtcCBqdW1wKQogICAgICAgICB7Ci0gICAgICAgICAgICBiYWNrVHJhY2tKdW1wcy5hcHBl
bmQoanVtcCk7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5hZGRCYWNrdHJhY2tKdW1wKGp1bXAp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRCYWNrdHJhY2tEYXRhTGFiZWwoRGF0YUxh
YmVsUHRyIGRwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFjay5zZXREYXRhTGFi
ZWwoZHApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRCYWNrVHJhY2tTdGFja09mZnNl
dChpbnQzMl90IHN0YWNrT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBtX2JhY2t0cmFj
ay5zZXRTdGFja09mZnNldChzdGFja09mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgc2V0QmFja3RyYWNrTGFiZWwoTGFiZWwgbGFiZWwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fYmFja3RyYWNrLnNldExhYmVsKGxhYmVsKTsKICAgICAgICAgfQotICAgICAgICB2
b2lkIHNldEJhY2t0cmFja0dlbmVyYXRlZChMYWJlbCBsYWJlbCkKKworICAgICAgICB2b2lkIGxp
bmtBbHRlcm5hdGl2ZUJhY2t0cmFja3MoUmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgYm9vbCBu
ZXh0SXRlcmF0aW9uID0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYmFja3RyYWNr
LmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3MoZ2VuZXJhdG9yLCBuZXh0SXRlcmF0aW9uKTsKKyAg
ICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKFJlZ2V4R2VuZXJhdG9yKiBnZW5lcmF0b3Is
IExhYmVsIGxhYmVsLCBib29sIG5leHRJdGVyYXRpb24gPSBmYWxzZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9iYWNrdHJhY2subGlua0FsdGVybmF0aXZlQmFja3RyYWNrc1RvKGdlbmVyYXRv
ciwgbGFiZWwsIG5leHRJdGVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRC
YWNrdHJhY2tMaW5rKEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBsaW5rZWRCYWNrdHJhY2spCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fbGlua2VkQmFja3RyYWNrID0gbGlua2VkQmFja3RyYWNrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNoYWluQmFja3RyYWNrcyhCYWNrdHJh
Y2tEZXN0aW5hdGlvbiogZm9sbG93b25CYWNrdHJhY2spCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlzQmFja1RyYWNrR2VuZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJhY2t0cmFja0xhYmVs
ID0gbGFiZWw7CisgICAgICAgICAgICBpZiAobV9saW5rZWRCYWNrdHJhY2spCisgICAgICAgICAg
ICAgICAgbV9saW5rZWRCYWNrdHJhY2stPmxpbmtUb05leHRCYWNrdHJhY2soZm9sbG93b25CYWNr
dHJhY2spOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgbGlua0FsdGVybmF0aXZlQmFja3RyYWNr
cyhNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2hhaW5CYWNr
dHJhY2tKdW1wcyhKdW1wTGlzdCoganVtcExpc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlz
QmFja1RyYWNrR2VuZXJhdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBiYWNrVHJhY2tKdW1wcy5s
aW5rKG1hc20pOworICAgICAgICAgICAgaWYgKG1fbGlua2VkQmFja3RyYWNrICYmICEobV9saW5r
ZWRCYWNrdHJhY2stPmhhc0Rlc3RpbmF0aW9uKCkpKQorICAgICAgICAgICAgICAgIG1fbGlua2Vk
QmFja3RyYWNrLT5zZXRCYWNrdHJhY2tKdW1wTGlzdChqdW1wTGlzdCk7CiAgICAgICAgIH0KLSAg
ICAgICAgdm9pZCBsaW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oTGFiZWwgbGFiZWwsIE1hY3Jv
QXNzZW1ibGVyKiBtYXNtKQorICAgICAgICAKKyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24m
IGdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkKICAgICAgICAgewotICAgICAgICAgICAgaXNCYWNr
VHJhY2tHZW5lcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJhY2tUcmFja0p1bXBzLmxpbmtU
byhsYWJlbCwgbWFzbSk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNrdHJhY2s7CiAgICAgICAg
IH0KLSAgICAgICAgdm9pZCBwcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9tKFRlcm1HZW5lcmF0aW9u
U3RhdGUmIG5lc3RlZFBhcmVudGhlc2VzU3RhdGUsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorCisg
ICAgICAgIHZvaWQgcHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbShSZWdleEdlbmVyYXRvciogZ2Vu
ZXJhdG9yLCBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgYmFja3RyYWNrLCBib29sIGRvSnVtcCA9IHRy
dWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGp1bXBUb0JhY2t0cmFjayhuZXN0ZWRQYXJlbnRo
ZXNlc1N0YXRlLmJhY2tUcmFja0p1bXBzLCBtYXNtKTsKLSAgICAgICAgICAgIGlmIChuZXN0ZWRQ
YXJlbnRoZXNlc1N0YXRlLmlzQmFja1RyYWNrR2VuZXJhdGVkKQotICAgICAgICAgICAgICAgIHNl
dEJhY2t0cmFja0dlbmVyYXRlZChuZXN0ZWRQYXJlbnRoZXNlc1N0YXRlLmJhY2t0cmFja0xhYmVs
KTsKKyAgICAgICAgICAgIGlmIChkb0p1bXApCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2su
anVtcFRvQmFja3RyYWNrKGdlbmVyYXRvciwgYmFja3RyYWNrLmdldEJhY2t0cmFja0p1bXBzKCkp
OworICAgICAgICAgICAgaWYgKGJhY2t0cmFjay5oYXNEZXN0aW5hdGlvbigpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYmFja3RyYWNrLmhhc0RhdGFMYWJlbCgpKQorICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0b3ItPm1fZXhwcmVzc2lvblN0YXRlLmFkZERhdGFMYWJlbFRvTmV4dEl0ZXJh
dGlvbihtX2JhY2t0cmFjay5nZXREYXRhTGFiZWwoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9iYWNrdHJhY2suY29weVRhcmdldChiYWNrdHJhY2ssIGRvSnVtcCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBQYXR0ZXJuRGlzanVuY3Rpb24qIGRp
c2p1bmN0aW9uOwpAQCAtNDI2LDExICs5MzUsMTIwIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDog
cHJpdmF0ZSBNYWNyb0Fzc2UKICAgICBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhbHQ7CiAg
ICAgICAgIHVuc2lnbmVkIHQ7Ci0gICAgICAgIEp1bXBMaXN0IGJhY2tUcmFja0p1bXBzOwotICAg
ICAgICBMYWJlbCBiYWNrdHJhY2tMYWJlbDsKLSAgICAgICAgYm9vbCBpc0JhY2tUcmFja0dlbmVy
YXRlZDsKKyAgICAgICAgQmFja3RyYWNrRGVzdGluYXRpb24gbV9iYWNrdHJhY2s7CisgICAgICAg
IEJhY2t0cmFja0Rlc3RpbmF0aW9uKiBtX2xpbmtlZEJhY2t0cmFjazsKKyAgICAgICAgCiAgICAg
fTsKIAorICAgIHN0cnVjdCBQYXJlbnRoZXNlc1RhaWwgeworICAgICAgICBQYXJlbnRoZXNlc1Rh
aWwoUGF0dGVyblRlcm0mIHRlcm0pCisgICAgICAgICAgICA6IG1fdGVybSh0ZXJtKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJvY2Vzc0JhY2t0cmFja3Mo
UmVnZXhHZW5lcmF0b3IqIGdlbmVyYXRvciwgVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIFRl
cm1HZW5lcmF0aW9uU3RhdGUmIHBhcmVudGhlc2VzU3RhdGUsIExhYmVsIG5vbkdyZWVkeVRyeVBh
cmVudGhlc2VzLCBMYWJlbCBmYWxsVGhyb3VnaCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9u
b25HcmVlZHlUcnlQYXJlbnRoZXNlcyA9IG5vbkdyZWVkeVRyeVBhcmVudGhlc2VzOworICAgICAg
ICAgICAgbV9mYWxsVGhyb3VnaCA9IGZhbGxUaHJvdWdoOworCisgICAgICAgICAgICBwYXJlbnRo
ZXNlc1N0YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkuY29weVRvKG1fcGFyZW5CYWNrdHJh
Y2spOworICAgICAgICAgICAgc3RhdGUuY2hhaW5CYWNrdHJhY2tzKCZtX2JhY2t0cmFjayk7Cisg
ICAgICAgICAgICBCYWNrdHJhY2tEZXN0aW5hdGlvbiYgc3RhdGVCYWNrdHJhY2sgPSBzdGF0ZS5n
ZXRCYWNrdHJhY2tEZXN0aW5hdGlvbigpOworICAgICAgICAgICAgc3RhdGVCYWNrdHJhY2suY29w
eVRvKG1fYmFja3RyYWNrKTsKKyAgICAgICAgICAgIHN0YXRlQmFja3RyYWNrLnNldEJhY2t0cmFj
a1RvTGFiZWwoJm1fYmFja3RyYWNrVG9MYWJlbCk7CisgICAgICAgICAgICBzdGF0ZS5zZXRCYWNr
dHJhY2tMaW5rKCZtX2JhY2t0cmFjayk7CisgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRT
dWJEYXRhTGFiZWxQdHIoJm1fZGF0YUFmdGVyTGFiZWxQdHIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2RvRGlyZWN0QmFja3RyYWNrID0gbV9wYXJlbkJhY2t0cmFjay5oYXNEZXN0aW5h
dGlvbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKG1fdGVybS5xdWFudGl0eVR5
cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgfHwgKG1fdGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRp
Zmllck5vbkdyZWVkeSkpCisgICAgICAgICAgICAgICAgbV9kb0RpcmVjdEJhY2t0cmFjayA9IGZh
bHNlOworCisgICAgICAgICAgICBpZiAobV9kb0RpcmVjdEJhY2t0cmFjaykKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5wcm9wYWdhdGVCYWNrdHJhY2tpbmdGcm9tKGdlbmVyYXRvciwgbV9wYXJlbkJh
Y2t0cmFjaywgZmFsc2UpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3Rh
dGVCYWNrdHJhY2suc2V0QmFja3RyYWNrSnVtcExpc3QoJm1fcGF0dEJhY2t0cmFja0p1bXBzKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZUJhY2t0cmFjay5zZXRCYWNrdHJhY2tTb3VyY2VMYWJlbCgm
bV9iYWNrdHJhY2tGcm9tQWZ0ZXJQYXJlbnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmNoYWluQmFja3RyYWNrSnVtcHMoJm1fcGF0
dEJhY2t0cmFja0p1bXBzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0TmV4dEl0ZXJh
dGlvbihMYWJlbCBuZXh0SXRlcmF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1f
YmFja3RyYWNrVG9MYWJlbC5pc1NldCgpKQorICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrVG9M
YWJlbCA9IG5leHRJdGVyYXRpb247CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZEFmdGVy
UGFyZW5KdW1wKEp1bXAganVtcCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wYXR0QmFja3Ry
YWNrSnVtcHMuYXBwZW5kKGp1bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGdlbmVyYXRlQ29kZShSZWdleEdlbmVyYXRvciogZ2VuZXJhdG9yLCBKdW1wTGlzdCYganVtcHNU
b05leHQsIGJvb2wgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBSZWdpc3RlcklEIGluZGV4VGVtcG9yYXJ5ID0gcmVnVDA7CisgICAgICAgICAg
ICB1bnNpZ25lZCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24gPSBtX3Rlcm0uZnJhbWVMb2NhdGlv
bjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2JhY2t0cmFjay5oYXNEZXN0aW5h
dGlvbigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYmFja3RyYWNrVG9MYWJlbC5pc1NldCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrLnNldExhYmVsKG1fYmFja3RyYWNr
VG9MYWJlbCk7CisgICAgICAgICAgICAgICAgICAgIG5leHRCYWNrdHJhY2tGYWxsVGhyb3VnaCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2Jh
Y2t0cmFjay5zZXRCYWNrdHJhY2tKdW1wTGlzdCgmanVtcHNUb05leHQpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoID0gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEEgZmFpbHVyZSBBRlRFUiB0aGUgcGFyZW5z
IGp1bXBzIGhlcmUgLSBCYWNrdHJhY2sgdG8gdGhpcyBwYXJlbgorICAgICAgICAgICAgbV9iYWNr
dHJhY2tGcm9tQWZ0ZXJQYXJlbnMgPSBnZW5lcmF0b3ItPmxhYmVsKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX2RhdGFBZnRlckxhYmVsUHRyLmlzU2V0KCkpCisgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5tX2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHMuYXBw
ZW5kKEFsdGVybmF0aXZlQmFja3RyYWNrUmVjb3JkKG1fZGF0YUFmdGVyTGFiZWxQdHIsIG1fYmFj
a3RyYWNrRnJvbUFmdGVyUGFyZW5zKSk7CisKKyAgICAgICAgICAgIG1fcGF0dEJhY2t0cmFja0p1
bXBzLmxpbmsoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdGVy
bS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgeworICAgICAgICAgICAgICAgIC8v
IElmIHRoaXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3aXRoIGFuZCB3aXRo
b3V0IHRoZSBwYXJlbnMuCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5sb2FkRnJvbUZyYW1l
KHBhcmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXhUZW1wb3JhcnkpOworICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IsIGdlbmVyYXRvci0+YnJh
bmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5LCBJbW0zMigtMSkpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFudGlmaWVyTm9uR3JlZWR5KSB7Cisg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyAtMSB3ZSBoYXZlIG5vdyB0ZXN0ZWQgd2l0aCBi
b3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlIHBhcmVucy4KKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBpbmRleFRlbXBvcmFy
eSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5icmFuY2gzMihFcXVhbCwgaW5kZXhUZW1w
b3JhcnksIEltbTMyKC0xKSkubGlua1RvKG1fbm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMsIGdlbmVy
YXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9k
b0RpcmVjdEJhY2t0cmFjaykKKyAgICAgICAgICAgICAgICBtX3BhcmVuQmFja3RyYWNrLnBsYW50
SnVtcFRvQmFja3RyYWNrSWZFeGlzdHMoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gQSBmYWlsdXJlIFdJVEhJTiB0aGUgcGFyZW5zIGp1bXBzIGhlcmUKKyAgICAgICAg
ICAgIG1fcGFyZW5CYWNrdHJhY2subGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyhnZW5lcmF0b3Ip
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV90ZXJtLmNhcHR1cmUoKSkKKyAgICAg
ICAgICAgICAgICBnZW5lcmF0b3ItPnN0b3JlMzIoSW1tMzIoLTEpLCBBZGRyZXNzKG91dHB1dCwg
KG1fdGVybS5wYXJlbnRoZXNlcy5zdWJwYXR0ZXJuSWQgPDwgMSkgKiBzaXplb2YoaW50KSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV90ZXJtLnF1YW50aXR5VHlwZSA9PSBRdWFu
dGlmaWVyR3JlZWR5KSB7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zdG9yZVRvRnJhbWUo
SW1tMzIoLTEpLCBwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24pOworICAgICAgICAgICAgICAgIGdl
bmVyYXRvci0+anVtcCgpLmxpbmtUbyhtX2ZhbGxUaHJvdWdoLCBnZW5lcmF0b3IpOworICAgICAg
ICAgICAgfSBlbHNlIGlmICghbmV4dEJhY2t0cmFja0ZhbGxUaHJvdWdoKQorICAgICAgICAgICAg
ICAgIG1fYmFja3RyYWNrLmp1bXBUb0JhY2t0cmFjayhnZW5lcmF0b3IpOworCisgICAgICAgICAg
ICBpZiAoIW1fZG9EaXJlY3RCYWNrdHJhY2spCisgICAgICAgICAgICAgICAgbV9iYWNrdHJhY2su
c2V0TmV4dEJhY2t0cmFja0xhYmVsKG1fYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUGF0dGVyblRlcm0mIG1fdGVybTsKKyAgICAgICAgTGFi
ZWwgbV9ub25HcmVlZHlUcnlQYXJlbnRoZXNlczsKKyAgICAgICAgTGFiZWwgbV9mYWxsVGhyb3Vn
aDsKKyAgICAgICAgTGFiZWwgbV9iYWNrdHJhY2tUb0xhYmVsOworICAgICAgICBMYWJlbCBtX2Jh
Y2t0cmFja0Zyb21BZnRlclBhcmVuczsKKyAgICAgICAgRGF0YUxhYmVsUHRyIG1fZGF0YUFmdGVy
TGFiZWxQdHI7CisgICAgICAgIEp1bXBMaXN0IG1fcGF0dEJhY2t0cmFja0p1bXBzOworICAgICAg
ICBCYWNrdHJhY2tEZXN0aW5hdGlvbiBtX3BhcmVuQmFja3RyYWNrOworICAgICAgICBCYWNrdHJh
Y2tEZXN0aW5hdGlvbiBtX2JhY2t0cmFjazsKKyAgICAgICAgYm9vbCBtX2RvRGlyZWN0QmFja3Ry
YWNrOworICAgIH07CisgICAgCisgICAgCiAgICAgdm9pZCBnZW5lcmF0ZUFzc2VydGlvbkJPTChU
ZXJtR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICB7CiAgICAgICAgIFBhdHRlcm5UZXJtJiB0
ZXJtID0gc3RhdGUudGVybSgpOwpAQCAtNDQ0LDE1ICsxMDYyLDE1IEBAIGNsYXNzIFJlZ2V4R2Vu
ZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICAgICAgcmVhZENoYXJhY3Rlcihz
dGF0ZS5pbnB1dE9mZnNldCgpIC0gMSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIG1hdGNoQ2hh
cmFjdGVyQ2xhc3MoY2hhcmFjdGVyLCBtYXRjaERlc3QsIG1fcGF0dGVybi5uZXdsaW5lQ2hhcmFj
dGVyQ2xhc3MoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0
aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKIAogICAgICAg
ICAgICAgbWF0Y2hEZXN0LmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBFcmssIHJlYWxseSBzaG91bGQgcG9pc29uIG91dCB0aGVzZSBhbHRlcm5hdGl2ZXMgZWFy
bHkuIDotLwogICAgICAgICAgICAgaWYgKHRlcm0uaW5wdXRQb3NpdGlvbikKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRleCwg
SW1tMzIoc3RhdGUuY2hlY2tlZFRvdGFsKSksIHRoaXMpOworICAgICAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgaW5kZXgsIEltbTMyKHN0
YXRlLmNoZWNrZWRUb3RhbCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDY5LDE1ICsxMDg3
LDE1IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKIAogICAgICAg
ICAgICAgcmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAg
ICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVzdCwgbV9wYXR0
ZXJuLm5ld2xpbmVDaGFyYWN0ZXJDbGFzcygpKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayhqdW1wKCksIHRoaXMpOworICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNr
KHRoaXMpOwogCiAgICAgICAgICAgICBtYXRjaERlc3QubGluayh0aGlzKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICh0ZXJtLmlucHV0UG9zaXRpb24gPT0gc3RhdGUuY2hlY2tl
ZFRvdGFsKQotICAgICAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhub3RBdEVuZE9m
SW5wdXQoKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRo
aXMsIG5vdEF0RW5kT2ZJbnB1dCgpKTsKICAgICAgICAgICAgIC8vIEVyaywgcmVhbGx5IHNob3Vs
ZCBwb2lzb24gb3V0IHRoZXNlIGFsdGVybmF0aXZlcyBlYXJseS4gOi0vCiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7
CisgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC01MTEsMjAgKzExMjksMjAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZQogICAgICAgICAvLyBXZSBmYWxsIHRocm91Z2ggdG8gaGVyZSBpZiB0
aGUgbGFzdCBjaGFyYWN0ZXIgd2FzIG5vdCBhIHdvcmRjaGFyLgogICAgICAgICBKdW1wTGlzdCBu
b25Xb3JkQ2hhclRoZW5Xb3JkQ2hhcjsKICAgICAgICAgSnVtcExpc3Qgbm9uV29yZENoYXJUaGVu
Tm9uV29yZENoYXI7Ci0gICAgICAgIGlmICh0ZXJtLmludmVydE9yQ2FwdHVyZSkgeworICAgICAg
ICBpZiAodGVybS5pbnZlcnQoKSkgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hh
cihzdGF0ZSwgbm9uV29yZENoYXJUaGVuTm9uV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbldvcmRD
aGFyKTsKICAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbWF0Y2hBc3NlcnRpb25Xb3JkY2hhcihz
dGF0ZSwgbm9uV29yZENoYXJUaGVuV29yZENoYXIsIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFy
KTsKICAgICAgICAgICAgIG5vbldvcmRDaGFyVGhlbk5vbldvcmRDaGFyLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhub25Xb3JkQ2hhclRo
ZW5Ob25Xb3JkQ2hhciwgdGhpcyk7CisgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlz
LCBub25Xb3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcik7CiAKICAgICAgICAgLy8gV2UganVtcCBoZXJl
IGlmIHRoZSBsYXN0IGNoYXJhY3RlciB3YXMgYSB3b3JkY2hhci4KICAgICAgICAgbWF0Y2hEZXN0
LmxpbmsodGhpcyk7CiAgICAgICAgIEp1bXBMaXN0IHdvcmRDaGFyVGhlbldvcmRDaGFyOwogICAg
ICAgICBKdW1wTGlzdCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hhcjsKLSAgICAgICAgaWYgKHRlcm0u
aW52ZXJ0T3JDYXB0dXJlKSB7CisgICAgICAgIGlmICh0ZXJtLmludmVydCgpKSB7CiAgICAgICAg
ICAgICBtYXRjaEFzc2VydGlvbldvcmRjaGFyKHN0YXRlLCB3b3JkQ2hhclRoZW5Ob25Xb3JkQ2hh
ciwgd29yZENoYXJUaGVuV29yZENoYXIpOwogICAgICAgICAgICAgd29yZENoYXJUaGVuV29yZENo
YXIuYXBwZW5kKGp1bXAoKSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01MzIsNyArMTE1MCw3IEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGZhbGwtdGhvdWdoIQogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGUuanVtcFRv
QmFja3RyYWNrKHdvcmRDaGFyVGhlbldvcmRDaGFyLCB0aGlzKTsKKyAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKHRoaXMsIHdvcmRDaGFyVGhlbldvcmRDaGFyKTsKICAgICAgICAgCiAgICAg
ICAgIG5vbldvcmRDaGFyVGhlbldvcmRDaGFyLmxpbmsodGhpcyk7CiAgICAgICAgIHdvcmRDaGFy
VGhlbk5vbldvcmRDaGFyLmxpbmsodGhpcyk7CkBAIC01NDYsMTAgKzExNjQsMTAgQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBpZiAobV9wYXR0ZXJu
Lm1faWdub3JlQ2FzZSAmJiBpc0FTQ0lJQWxwaGEoY2gpKSB7CiAgICAgICAgICAgICByZWFkQ2hh
cmFjdGVyKHN0YXRlLmlucHV0T2Zmc2V0KCksIGNoYXJhY3Rlcik7CiAgICAgICAgICAgICBvcjMy
KEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFj
ayhicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNo
KSkpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFu
Y2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihVbmljb2RlOjp0b0xvd2VyKGNoKSkpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9wYXR0ZXJuLm1faWdub3Jl
Q2FzZSB8fCAoVW5pY29kZTo6dG9Mb3dlcihjaCkgPT0gVW5pY29kZTo6dG9VcHBlcihjaCkpKTsK
LSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhqdW1wSWZDaGFyTm90RXF1YWxzKGNo
LCBzdGF0ZS5pbnB1dE9mZnNldCgpKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9C
YWNrdHJhY2sodGhpcywganVtcElmQ2hhck5vdEVxdWFscyhjaCwgc3RhdGUuaW5wdXRPZmZzZXQo
KSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NzIsOSArMTE5MCw5IEBAIGNsYXNzIFJlZ2V4
R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgaWYgKG1hc2spIHsKICAgICAg
ICAgICAgIGxvYWQzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoQmFzZUluZGV4KGlucHV0LCBpbmRl
eCwgVGltZXNUd28sIHN0YXRlLmlucHV0T2Zmc2V0KCkgKiBzaXplb2YoVUNoYXIpKSwgY2hhcmFj
dGVyKTsKICAgICAgICAgICAgIG9yMzIoSW1tMzIobWFzayksIGNoYXJhY3Rlcik7Ci0gICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJhY3Rlciwg
SW1tMzIoY2hQYWlyIHwgbWFzaykpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0Jh
Y2t0cmFjayh0aGlzLCBicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaFBhaXIg
fCBtYXNrKSkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayhicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIEJhc2VJbmRleChp
bnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9mKFVDaGFy
KSksIEltbTMyKGNoUGFpcikpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0
cmFjayh0aGlzLCBicmFuY2gzMldpdGhVbmFsaWduZWRIYWxmV29yZHMoTm90RXF1YWwsIEJhc2VJ
bmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvLCBzdGF0ZS5pbnB1dE9mZnNldCgpICogc2l6ZW9m
KFVDaGFyKSksIEltbTMyKGNoUGFpcikpKTsKICAgICB9CiAKICAgICB2b2lkIGdlbmVyYXRlUGF0
dGVybkNoYXJhY3RlckZpeGVkKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQpAQCAtNTkxLDEw
ICsxMjA5LDEwIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAg
ICAgICAgaWYgKG1fcGF0dGVybi5tX2lnbm9yZUNhc2UgJiYgaXNBU0NJSUFscGhhKGNoKSkgewog
ICAgICAgICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNU
d28sIChzdGF0ZS5pbnB1dE9mZnNldCgpICsgdGVybS5xdWFudGl0eUNvdW50KSAqIHNpemVvZihV
Q2hhcikpLCBjaGFyYWN0ZXIpOwogICAgICAgICAgICAgb3IzMihJbW0zMigzMiksIGNoYXJhY3Rl
cik7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoMzIoTm90RXF1YWws
IGNoYXJhY3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSwgdGhpcyk7CisgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgYnJhbmNoMzIoTm90RXF1YWwsIGNoYXJh
Y3RlciwgSW1tMzIoVW5pY29kZTo6dG9Mb3dlcihjaCkpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIW1fcGF0dGVybi5tX2lnbm9yZUNhc2UgfHwgKFVuaWNvZGU6OnRv
TG93ZXIoY2gpID09IFVuaWNvZGU6OnRvVXBwZXIoY2gpKSk7Ci0gICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2soYnJhbmNoMTYoTm90RXF1YWwsIEJhc2VJbmRleChpbnB1dCwgY291bnRS
ZWdpc3RlciwgVGltZXNUd28sIChzdGF0ZS5pbnB1dE9mZnNldCgpICsgdGVybS5xdWFudGl0eUNv
dW50KSAqIHNpemVvZihVQ2hhcikpLCBJbW0zMihjaCkpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0
YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzLCBicmFuY2gxNihOb3RFcXVhbCwgQmFzZUluZGV4KGlu
cHV0LCBjb3VudFJlZ2lzdGVyLCBUaW1lc1R3bywgKHN0YXRlLmlucHV0T2Zmc2V0KCkgKyB0ZXJt
LnF1YW50aXR5Q291bnQpICogc2l6ZW9mKFVDaGFyKSksIEltbTMyKGNoKSkpOwogICAgICAgICB9
CiAgICAgICAgIGFkZDMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNo
MzIoTm90RXF1YWwsIGNvdW50UmVnaXN0ZXIsIGluZGV4KS5saW5rVG8obG9vcCwgdGhpcyk7CkBA
IC02MzEsNyArMTI0OSw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fz
c2UKIAogICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKICAgICAgICAgbG9hZEZy
b21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwotICAgICAgICBzdGF0
ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpLCB0aGlz
KTsKKyAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGJyYW5jaFRlc3QzMihaZXJv
LCBjb3VudFJlZ2lzdGVyKSk7CiAgICAgICAgIHN1YjMyKEltbTMyKDEpLCBjb3VudFJlZ2lzdGVy
KTsKICAgICAgICAgc3ViMzIoSW1tMzIoMSksIGluZGV4KTsKIApAQCAtNjM5LDcgKzEyNTcsNyBA
QCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgc3Rv
cmVUb0ZyYW1lKGNvdW50UmVnaXN0ZXIsIHRlcm0uZnJhbWVMb2NhdGlvbik7CiAKLSAgICAgICAg
c3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0JlZ2luKTsKKyAgICAgICAgc3Rh
dGUuc2V0QmFja3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOwogICAgIH0KIAogICAgIHZvaWQg
Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyTm9uR3JlZWR5KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0
YXRlKQpAQCAtNjU1LDcgKzEyNzMsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAKICAgICAgICAgTGFiZWwgaGFyZEZhaWwodGhpcyk7CiAgICAgICAgIHN1YjMy
KGNvdW50UmVnaXN0ZXIsIGluZGV4KTsKLSAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1
bXAoKSwgdGhpcyk7CisgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKIAogICAg
ICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlzKTsKICAgICAgICAgbG9hZEZyb21GcmFtZSh0
ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0ZXIpOwpAQCAtNjc4LDcgKzEyOTYsNyBAQCBj
bGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGZpcnN0VGlt
ZURvTm90aGluZy5saW5rKHRoaXMpOwogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3Rl
ciwgdGVybS5mcmFtZUxvY2F0aW9uKTsKIAotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5l
cmF0ZWQoYmFja3RyYWNrQmVnaW4pOworICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChi
YWNrdHJhY2tCZWdpbik7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUNoYXJhY3RlckNsYXNz
U2luZ2xlKFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQpAQCAtNjkwLDEwICsxMzA4LDEwIEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgcmVhZENo
YXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENo
YXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0Y2hEZXN0LCB0ZXJtLmNoYXJhY3RlckNsYXNzKTsK
IAotICAgICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpCi0gICAgICAgICAgICBzdGF0ZS5q
dW1wVG9CYWNrdHJhY2sobWF0Y2hEZXN0LCB0aGlzKTsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0
KCkpCisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcywgbWF0Y2hEZXN0KTsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgp
LCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKICAgICAg
ICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzEyLDEw
ICsxMzMwLDEwIEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAg
ICAgICAgbG9hZDE2KEJhc2VJbmRleChpbnB1dCwgY291bnRSZWdpc3RlciwgVGltZXNUd28sIChz
dGF0ZS5pbnB1dE9mZnNldCgpICsgdGVybS5xdWFudGl0eUNvdW50KSAqIHNpemVvZihVQ2hhcikp
LCBjaGFyYWN0ZXIpOwogICAgICAgICBtYXRjaENoYXJhY3RlckNsYXNzKGNoYXJhY3RlciwgbWF0
Y2hEZXN0LCB0ZXJtLmNoYXJhY3RlckNsYXNzKTsKIAotICAgICAgICBpZiAodGVybS5pbnZlcnRP
ckNhcHR1cmUpCi0gICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sobWF0Y2hEZXN0LCB0
aGlzKTsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0KCkpCisgICAgICAgICAgICBzdGF0ZS5qdW1w
VG9CYWNrdHJhY2sodGhpcywgbWF0Y2hEZXN0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgIHN0YXRl
Lmp1bXBUb0JhY2t0cmFjayh0aGlzKTsKICAgICAgICAgICAgIG1hdGNoRGVzdC5saW5rKHRoaXMp
OwogICAgICAgICB9CiAKQEAgLTczNSw3ICsxMzUzLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3Ig
OiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICBMYWJlbCBsb29wKHRoaXMpOwogICAgICAgICBm
YWlsdXJlcy5hcHBlbmQoYXRFbmRPZklucHV0KCkpOwogCi0gICAgICAgIGlmICh0ZXJtLmludmVy
dE9yQ2FwdHVyZSkgeworICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkgewogICAgICAgICAgICAg
cmVhZENoYXJhY3RlcihzdGF0ZS5pbnB1dE9mZnNldCgpLCBjaGFyYWN0ZXIpOwogICAgICAgICAg
ICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIGZhaWx1cmVzLCB0ZXJtLmNoYXJhY3Rl
ckNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTc1Niw3ICsxMzc0LDcgQEAgY2xhc3MgUmVn
ZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIExhYmVsIGJhY2t0cmFj
a0JlZ2luKHRoaXMpOwogICAgICAgICBsb2FkRnJvbUZyYW1lKHRlcm0uZnJhbWVMb2NhdGlvbiwg
Y291bnRSZWdpc3Rlcik7Ci0gICAgICAgIHN0YXRlLmp1bXBUb0JhY2t0cmFjayhicmFuY2hUZXN0
MzIoWmVybywgY291bnRSZWdpc3RlciksIHRoaXMpOworICAgICAgICBzdGF0ZS5qdW1wVG9CYWNr
dHJhY2sodGhpcywgYnJhbmNoVGVzdDMyKFplcm8sIGNvdW50UmVnaXN0ZXIpKTsKICAgICAgICAg
c3ViMzIoSW1tMzIoMSksIGNvdW50UmVnaXN0ZXIpOwogICAgICAgICBzdWIzMihJbW0zMigxKSwg
aW5kZXgpOwogCkBAIC03NjQsNyArMTM4Miw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVy
bS5mcmFtZUxvY2F0aW9uKTsKIAotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQo
YmFja3RyYWNrQmVnaW4pOworICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChiYWNrdHJh
Y2tCZWdpbik7CiAgICAgfQogCiAgICAgdm9pZCBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzTm9uR3Jl
ZWR5KFRlcm1HZW5lcmF0aW9uU3RhdGUmIHN0YXRlKQpAQCAtNzc5LDcgKzEzOTcsNyBAQCBjbGFz
cyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAKICAgICAgICAgTGFiZWwgaGFy
ZEZhaWwodGhpcyk7CiAgICAgICAgIHN1YjMyKGNvdW50UmVnaXN0ZXIsIGluZGV4KTsKLSAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgIHN0YXRlLmp1
bXBUb0JhY2t0cmFjayh0aGlzKTsKIAogICAgICAgICBMYWJlbCBiYWNrdHJhY2tCZWdpbih0aGlz
KTsKICAgICAgICAgbG9hZEZyb21GcmFtZSh0ZXJtLmZyYW1lTG9jYXRpb24sIGNvdW50UmVnaXN0
ZXIpOwpAQCAtNzkxLDcgKzE0MDksNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUg
TWFjcm9Bc3NlCiAgICAgICAgIHJlYWRDaGFyYWN0ZXIoc3RhdGUuaW5wdXRPZmZzZXQoKSwgY2hh
cmFjdGVyKTsKICAgICAgICAgbWF0Y2hDaGFyYWN0ZXJDbGFzcyhjaGFyYWN0ZXIsIG1hdGNoRGVz
dCwgdGVybS5jaGFyYWN0ZXJDbGFzcyk7CiAKLSAgICAgICAgaWYgKHRlcm0uaW52ZXJ0T3JDYXB0
dXJlKQorICAgICAgICBpZiAodGVybS5pbnZlcnQoKSkKICAgICAgICAgICAgIG1hdGNoRGVzdC5s
aW5rVG8oaGFyZEZhaWwsIHRoaXMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGp1bXAo
aGFyZEZhaWwpOwpAQCAtODA0LDcgKzE0MjIsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGZpcnN0VGltZURvTm90aGluZy5saW5rKHRoaXMpOwog
ICAgICAgICBzdG9yZVRvRnJhbWUoY291bnRSZWdpc3RlciwgdGVybS5mcmFtZUxvY2F0aW9uKTsK
IAotICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tHZW5lcmF0ZWQoYmFja3RyYWNrQmVnaW4pOwor
ICAgICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tMYWJlbChiYWNrdHJhY2tCZWdpbik7CiAgICAgfQog
CiAgICAgdm9pZCBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oUGF0dGVyblRlcm0mIHBh
cmVudGhlc2VzVGVybSwgVGVybUdlbmVyYXRpb25TdGF0ZSYgc3RhdGUsIHVuc2lnbmVkIGFsdGVy
bmF0aXZlRnJhbWVMb2NhdGlvbikKQEAgLTgzNiw5ICsxNDU0LDkgQEAgY2xhc3MgUmVnZXhHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIHNraXAubGluayh0aGlzKTsKIAotICAgICAgICAgICAgICAgIHN0YXRlLnNldEJhY2t0cmFj
a0dlbmVyYXRlZChiYWNrdHJhY2tCZWdpbik7CisgICAgICAgICAgICAgICAgc3RhdGUuc2V0QmFj
a3RyYWNrTGFiZWwoYmFja3RyYWNrQmVnaW4pOwogCi0gICAgICAgICAgICAgICAgc3RhdGUuanVt
cFRvQmFja3RyYWNrKGp1bXBJZk5vQXZhaWxhYmxlSW5wdXQoY291bnRUb0NoZWNrKSwgdGhpcyk7
CisgICAgICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMsIGp1bXBJZk5vQXZh
aWxhYmxlSW5wdXQoY291bnRUb0NoZWNrKSk7CiAgICAgICAgICAgICAgICAgc3RhdGUuY2hlY2tl
ZFRvdGFsICs9IGNvdW50VG9DaGVjazsKICAgICAgICAgICAgIH0KIApAQCAtODQ4LDYgKzE0NjYs
NyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAg
ICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRUb0NoZWNrOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgSnVtcExpc3Qgc3VjY2Vzc2VzOworICAgICAgICAgICAgYm9vbCBwcm9wb2dh
dGVCYWNrdHJhY2sgPSBmYWxzZTsKIAogICAgICAgICAgICAgZm9yIChzdGF0ZS5yZXNldEFsdGVy
bmF0aXZlKCk7IHN0YXRlLmFsdGVybmF0aXZlVmFsaWQoKTsgc3RhdGUubmV4dEFsdGVybmF0aXZl
KCkpIHsKIApAQCAtODY2LDM3ICsxNDg1LDM1IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2UKIAogICAgICAgICAgICAgICAgIC8vIE1hdGNoZWQgYW4gYWx0ZXJuYXRp
dmUuCiAgICAgICAgICAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCA9IHN0b3JlVG9GcmFt
ZVdpdGhQYXRjaChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHN1
Y2Nlc3Nlcy5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoIXN0YXRlLmlzTGFzdEFsdGVybmF0aXZlKCkgfHwgY291bnRUb0NoZWNrKQorICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzZXMuYXBwZW5kKGp1bXAoKSk7CiAKICAgICAgICAgICAgICAg
ICAvLyBBbHRlcm5hdGl2ZSBkaWQgbm90IG1hdGNoLgotICAgICAgICAgICAgICAgIExhYmVsIGJh
Y2t0cmFja0xvY2F0aW9uKHRoaXMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIENhbiB3ZSBiYWNrdHJhY2sgdGhlIGFsdGVybmF0aXZlPyAtIGlmIHNvLCBkbyBzby4gIElm
IG5vdCwganVzdCBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgb25lLgotICAgICAgICAgICAgICAg
IHN0YXRlLnBsYW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7CisKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zZXRCYWNrdHJhY2tEYXRhTGFiZWwoZGF0YUxhYmVsKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRo
aXMpOworICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSBiYWNrdHJhY2sgZGVzdGluYXRp
b24/IAorICAgICAgICAgICAgICAgIC8vICAgIGlmIHNvLCBsaW5rIHRoZSBkYXRhIGxhYmVsIHRv
IGl0LgorICAgICAgICAgICAgICAgIHN0YXRlLmxpbmtEYXRhTGFiZWxUb0JhY2t0cmFja0lmRXhp
c3RzKHRoaXMpOworCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5pc0xhc3RBbHRlcm5hdGl2
ZSgpIHx8IGNvdW50VG9DaGVjaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVy
bmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKIAogICAgICAgICAgICAgICAgIGlmIChjb3VudFRvQ2hl
Y2spIHsKICAgICAgICAgICAgICAgICAgICAgc3ViMzIoSW1tMzIoY291bnRUb0NoZWNrKSwgaW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jaGVja2VkVG90YWwgLT0gY291bnRUb0No
ZWNrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1fYmFja3RyYWNrUmVj
b3Jkcy5hcHBlbmQoQWx0ZXJuYXRpdmVCYWNrdHJhY2tSZWNvcmQoZGF0YUxhYmVsLCBiYWNrdHJh
Y2tMb2NhdGlvbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaXNMYXN0QWx0
ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJvcG9nYXRlQmFja3RyYWNrID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFdlIGZhbGwgdGhyb3VnaCB0byBoZXJl
IHdoZW4gdGhlIGxhc3QgYWx0ZXJuYXRpdmUgZmFpbHMuCiAgICAgICAgICAgICAvLyBBZGQgYSBi
YWNrdHJhY2sgb3V0IG9mIGhlcmUgZm9yIHRoZSBwYXJlbnRoZXNlIGhhbmRsaW5nIGNvZGUgdG8g
bGluayB1cC4KLSAgICAgICAgICAgIHN0YXRlLmFkZEJhY2t0cmFja0p1bXAoanVtcCgpKTsKKyAg
ICAgICAgICAgIGlmICghcHJvcG9nYXRlQmFja3RyYWNrKQorICAgICAgICAgICAgICAgIHN0YXRl
LmFkZEJhY2t0cmFja0p1bXAoanVtcCgpKTsKIAotICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSB0
cmFtcG9saW5lIGZvciB0aGUgcGFyZW5zIGNvZGUgdG8gYmFja3RyYWNrIHRvLCB0byByZXRyeSB0
aGUKKyAgICAgICAgICAgIC8vIFNhdmUgYWRkcmVzcyBvbiBzdGFjayBmb3IgdGhlIHBhcmVucyBj
b2RlIHRvIGJhY2t0cmFjayB0bywgdG8gcmV0cnkgdGhlCiAgICAgICAgICAgICAvLyBuZXh0IGFs
dGVybmF0aXZlLgotICAgICAgICAgICAgc3RhdGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGxhYmVs
KCkpOwotICAgICAgICAgICAgbG9hZEZyb21GcmFtZUFuZEp1bXAoYWx0ZXJuYXRpdmVGcmFtZUxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IGJvdGggb2YgdGhlIGFib3ZlIGhvb2tz
IGFyZSBhIGxpdHRsZSBpbmVmZmljaWVudCwgaW4gdGhhdCB5b3UKLSAgICAgICAgICAgIC8vIG1h
eSBlbmQgdXAgdHJhbXBvbGluaW5nIGhlcmUsIGp1c3QgdG8gdHJhbXBvbGluZSBiYWNrIG91dCB0
byB0aGUKLSAgICAgICAgICAgIC8vIHBhcmVudGhlc2VzIGNvZGUsIG9yIHZpY2UgdmVyc2EuICBX
ZSBjYW4gcHJvYmFibHkgZWxpbWluYXRlIGEganVtcAotICAgICAgICAgICAgLy8gYnkgcmVzdHJ1
Y3R1cmluZywgYnV0IGNvZGluZyB0aGlzIHdheSBmb3Igbm93IGZvciBzaW1wbGljaXR5IGR1cmlu
ZwotICAgICAgICAgICAgLy8gZGV2ZWxvcG1lbnQuCisgICAgICAgICAgICBzdGF0ZS5zZXRCYWNr
VHJhY2tTdGFja09mZnNldChhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCop
KTsKIAogICAgICAgICAgICAgc3VjY2Vzc2VzLmxpbmsodGhpcyk7CiAgICAgICAgIH0KQEAgLTkx
NywxMyArMTUzNCwxMyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
CiAgICAgICAgICAgICBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24gKz0gUmVnZXhTdGFja1NwYWNl
Rm9yQmFja1RyYWNrSW5mb1BhcmVudGhlc2VzT25jZTsKIAogICAgICAgICAvLyBvcHRpbWl6ZWQg
Y2FzZSAtIG5vIGNhcHR1cmUgJiBubyBxdWFudGlmaWVyIGNhbiBiZSBoYW5kbGVkIGluIGEgbGln
aHQtd2VpZ2h0IG1hbm5lci4KLSAgICAgICAgaWYgKCF0ZXJtLmludmVydE9yQ2FwdHVyZSAmJiAo
dGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckZpeGVkQ291bnQpKSB7CisgICAgICAgIGlm
ICghdGVybS5jYXB0dXJlKCkgJiYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50aWZpZXJGaXhl
ZENvdW50KSkgewogICAgICAgICAgICAgVGVybUdlbmVyYXRpb25TdGF0ZSBwYXJlbnRoZXNlc1N0
YXRlKGRpc2p1bmN0aW9uLCBzdGF0ZS5jaGVja2VkVG90YWwpOwogICAgICAgICAgICAgZ2VuZXJh
dGVQYXJlbnRoZXNlc0Rpc2p1bmN0aW9uKHN0YXRlLnRlcm0oKSwgcGFyZW50aGVzZXNTdGF0ZSwg
YWx0ZXJuYXRpdmVGcmFtZUxvY2F0aW9uKTsKICAgICAgICAgICAgIC8vIHRoaXMgZXhwZWN0cyB0
aGF0IGFueSBiYWNrdHJhY2tzIGJhY2sgb3V0IG9mIHRoZSBwYXJlbnRoZXNlcyB3aWxsIGJlIGlu
IHRoZQotICAgICAgICAgICAgLy8gcGFyZW50aGVzZXNTdGF0ZSdzIGJhY2tUcmFja0p1bXBzIHZl
Y3RvciwgYW5kIHRoYXQgaWYgdGhleSBuZWVkIGJhY2t0cmFja2luZwotICAgICAgICAgICAgLy8g
dGhleSB3aWxsIGhhdmUgc2V0IGFuIGVudHJ5IHBvaW50IG9uIHRoZSBwYXJlbnRoZXNlc1N0YXRl
J3MgYmFja3RyYWNrTGFiZWwuCi0gICAgICAgICAgICBzdGF0ZS5wcm9wYWdhdGVCYWNrdHJhY2tp
bmdGcm9tKHBhcmVudGhlc2VzU3RhdGUsIHRoaXMpOworICAgICAgICAgICAgLy8gcGFyZW50aGVz
ZXNTdGF0ZSdzIG1fYmFja1RyYWNrSnVtcHMgdmVjdG9yLCBhbmQgdGhhdCBpZiB0aGV5IG5lZWQg
YmFja3RyYWNraW5nCisgICAgICAgICAgICAvLyB0aGV5IHdpbGwgaGF2ZSBzZXQgYW4gZW50cnkg
cG9pbnQgb24gdGhlIHBhcmVudGhlc2VzU3RhdGUncyBtX2JhY2t0cmFja0xhYmVsLgorICAgICAg
ICAgICAgc3RhdGUucHJvcGFnYXRlQmFja3RyYWNraW5nRnJvbSh0aGlzLCBwYXJlbnRoZXNlc1N0
YXRlLmdldEJhY2t0cmFja0Rlc3RpbmF0aW9uKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgSnVtcCBub25HcmVlZHlTa2lwUGFyZW50aGVzZXM7CiAgICAgICAgICAgICBMYWJlbCBu
b25HcmVlZHlUcnlQYXJlbnRoZXNlczsKQEAgLTkzNyw3ICsxNTU0LDcgQEAgY2xhc3MgUmVnZXhH
ZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAvLyBzdG9yZSB0aGUgbWF0Y2ggc3RhcnQgaW5kZXgKLSAgICAgICAgICAgIGlmICh0ZXJtLmlu
dmVydE9yQ2FwdHVyZSkgeworICAgICAgICAgICAgaWYgKHRlcm0uY2FwdHVyZSgpKSB7CiAgICAg
ICAgICAgICAgICAgaW50IGlucHV0T2Zmc2V0ID0gc3RhdGUuaW5wdXRPZmZzZXQoKSAtIHByZUNo
ZWNrZWRDb3VudDsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRPZmZzZXQpIHsKICAgICAgICAg
ICAgICAgICAgICAgbW92ZShpbmRleCwgaW5kZXhUZW1wb3JhcnkpOwpAQCAtOTQ3LDQ1ICsxNTY0
LDE4IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmUzMihpbmRleCwgQWRkcmVzcyhvdXRwdXQsICh0ZXJtLnBhcmVudGhl
c2VzLnN1YnBhdHRlcm5JZCA8PCAxKSAqIHNpemVvZihpbnQpKSk7CiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIFBhcmVudGhlc2VzVGFpbCogcGFyZW50aGVzZXNUYWlsID0gbV9leHByZXNz
aW9uU3RhdGUuYWRkUGFyZW50aGVzZXNUYWlsKHRlcm0pOworICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBnZW5lcmF0ZSB0aGUgYm9keSBvZiB0aGUgcGFyZW50aGVzZXMKICAgICAgICAgICAg
IFRlcm1HZW5lcmF0aW9uU3RhdGUgcGFyZW50aGVzZXNTdGF0ZShkaXNqdW5jdGlvbiwgc3RhdGUu
Y2hlY2tlZFRvdGFsKTsKICAgICAgICAgICAgIGdlbmVyYXRlUGFyZW50aGVzZXNEaXNqdW5jdGlv
bihzdGF0ZS50ZXJtKCksIHBhcmVudGhlc2VzU3RhdGUsIGFsdGVybmF0aXZlRnJhbWVMb2NhdGlv
bik7CiAKLSAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9ICh0ZXJtLnF1YW50aXR5VHlwZSA9PSBR
dWFudGlmaWVyRml4ZWRDb3VudCkgPwotICAgICAgICAgICAgICAgIGp1bXAoKSA6Ci0gICAgICAg
ICAgICAgICAgYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCAocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uICogc2l6ZW9mKHZvaWQqKSkpKTsKLQot
ICAgICAgICAgICAgLy8gQSBmYWlsdXJlIEFGVEVSIHRoZSBwYXJlbnMganVtcHMgaGVyZQotICAg
ICAgICAgICAgTGFiZWwgYmFja3RyYWNrRnJvbUFmdGVyUGFyZW5zKHRoaXMpOwotCi0gICAgICAg
ICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllckdyZWVkeSkgewotICAgICAg
ICAgICAgICAgIC8vIElmIHRoaXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGggYm90aCB3
aXRoIGFuZCB3aXRob3V0IHRoZSBwYXJlbnMuCi0gICAgICAgICAgICAgICAgbG9hZEZyb21GcmFt
ZShwYXJlbnRoZXNlc0ZyYW1lTG9jYXRpb24sIGluZGV4VGVtcG9yYXJ5KTsKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soYnJhbmNoMzIoRXF1YWwsIGluZGV4VGVtcG9yYXJ5
LCBJbW0zMigtMSkpLCB0aGlzKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGVybS5xdWFudGl0
eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRo
aXMgaXMgLTEgd2UgaGF2ZSBub3cgdGVzdGVkIHdpdGhvdXQgdGhlIHBhcmVucywgbm93IHRlc3Qg
d2l0aC4KLSAgICAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiwgaW5kZXhUZW1wb3JhcnkpOwotICAgICAgICAgICAgICAgIGJyYW5jaDMyKEVxdWFsLCBp
bmRleFRlbXBvcmFyeSwgSW1tMzIoLTEpKS5saW5rVG8obm9uR3JlZWR5VHJ5UGFyZW50aGVzZXMs
IHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLnBs
YW50SnVtcFRvQmFja3RyYWNrSWZFeGlzdHModGhpcyk7Ci0gICAgICAgICAgICAvLyBBIGZhaWx1
cmUgV0lUSElOIHRoZSBwYXJlbnMganVtcHMgaGVyZQotICAgICAgICAgICAgcGFyZW50aGVzZXNT
dGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOwotICAgICAgICAgICAgaWYgKHRl
cm0uaW52ZXJ0T3JDYXB0dXJlKQotICAgICAgICAgICAgICAgIHN0b3JlMzIoSW1tMzIoLTEpLCBB
ZGRyZXNzKG91dHB1dCwgKHRlcm0ucGFyZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICogc2l6
ZW9mKGludCkpKTsKLQotICAgICAgICAgICAgaWYgKHRlcm0ucXVhbnRpdHlUeXBlID09IFF1YW50
aWZpZXJHcmVlZHkpCi0gICAgICAgICAgICAgICAgc3RvcmVUb0ZyYW1lKEltbTMyKC0xKSwgcGFy
ZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKLQotICAgICAgICAgICAgc3Rh
dGUuc2V0QmFja3RyYWNrR2VuZXJhdGVkKGJhY2t0cmFja0Zyb21BZnRlclBhcmVucyk7Ci0gICAg
ICAgICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkKLSAg
ICAgICAgICAgICAgICBub25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0aGlzKTsKLSAgICAg
ICAgICAgIHN1Y2Nlc3MubGluayh0aGlzKTsKLQorICAgICAgICAgICAgLy8gRm9yIG5vbi1maXhl
ZCBjb3VudHMsIGJhY2t0cmFjayBpZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcuCisgICAgICAg
ICAgICBpZiAodGVybS5xdWFudGl0eVR5cGUgIT0gUXVhbnRpZmllckZpeGVkQ291bnQpCisgICAg
ICAgICAgICAgICAgcGFyZW50aGVzZXNUYWlsLT5hZGRBZnRlclBhcmVuSnVtcChicmFuY2gzMihF
cXVhbCwgaW5kZXgsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIChwYXJlbnRoZXNlc0Zy
YW1lTG9jYXRpb24gKiBzaXplb2Yodm9pZCopKSkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gc3RvcmUgdGhlIG1hdGNoIGVuZCBpbmRleAotICAgICAgICAgICAgaWYgKHRlcm0uaW52
ZXJ0T3JDYXB0dXJlKSB7CisgICAgICAgICAgICBpZiAodGVybS5jYXB0dXJlKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRPZmZzZXQgPSBzdGF0ZS5pbnB1dE9mZnNldCgpOwogICAgICAg
ICAgICAgICAgIGlmIChpbnB1dE9mZnNldCkgewogICAgICAgICAgICAgICAgICAgICBtb3ZlKGlu
ZGV4LCBpbmRleFRlbXBvcmFyeSk7CkBAIC05OTQsNiArMTU4NCwxMyBAQCBjbGFzcyBSZWdleEdl
bmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHN0b3JlMzIoaW5kZXgsIEFkZHJlc3Mob3V0cHV0LCAoKHRlcm0ucGFy
ZW50aGVzZXMuc3VicGF0dGVybklkIDw8IDEpICsgMSkgKiBzaXplb2YoaW50KSkpOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBwYXJlbnRoZXNlc1RhaWwtPnByb2Nl
c3NCYWNrdHJhY2tzKHRoaXMsIHN0YXRlLCBwYXJlbnRoZXNlc1N0YXRlLCBub25HcmVlZHlUcnlQ
YXJlbnRoZXNlcywgbGFiZWwoKSk7CisKKyAgICAgICAgICAgIHBhcmVudGhlc2VzU3RhdGUuZ2V0
QmFja3RyYWNrRGVzdGluYXRpb24oKS5jbGVhcigpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAodGVybS5xdWFudGl0eVR5cGUgPT0gUXVhbnRpZmllck5vbkdyZWVkeSkKKyAgICAgICAg
ICAgICAgICBub25HcmVlZHlTa2lwUGFyZW50aGVzZXMubGluayh0aGlzKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTAzMiw2ICsxNjI5LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2
YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5wbGFudEp1bXBUb0Jh
Y2t0cmFja0lmRXhpc3RzKHRoaXMpOwogCiAgICAgICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmxp
bmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisKICAgICAgICAgICAgIC8vIFdlIGdldCBo
ZXJlIGlmIHRoZSBhbHRlcm5hdGl2ZSBmYWlscyB0byBtYXRjaCAtIGZhbGwgdGhyb3VnaCB0byB0
aGUgbmV4dCBpdGVyYXRpb24sIG9yIG91dCBvZiB0aGUgbG9vcC4KIAogICAgICAgICAgICAgaWYg
KGNvdW50VG9DaGVjaykgewpAQCAtMTA1Niw3ICsxNjU0LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgIGludCBjb3VudENoZWNrZWRBZnRlckFz
c2VydGlvbiA9IHN0YXRlLmNoZWNrZWRUb3RhbCAtIHRlcm0uaW5wdXRQb3NpdGlvbjsKIAotICAg
ICAgICBpZiAodGVybS5pbnZlcnRPckNhcHR1cmUpIHsKKyAgICAgICAgaWYgKHRlcm0uaW52ZXJ0
KCkpIHsKICAgICAgICAgICAgIC8vIEludmVydGVkIGNhc2UKICAgICAgICAgICAgIHN0b3JlVG9G
cmFtZShpbmRleCwgcGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uKTsKIApAQCAtMTA2OCwxMCArMTY2
NiwxMSBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAg
ICAgICBnZW5lcmF0ZVBhcmVudGhlc2VzRGlzanVuY3Rpb24oc3RhdGUudGVybSgpLCBwYXJlbnRo
ZXNlc1N0YXRlLCBhbHRlcm5hdGl2ZUZyYW1lTG9jYXRpb24pOwogICAgICAgICAgICAgLy8gU3Vj
Y2VzcyEgLSB3aGljaCBtZWFucyAtIEZhaWwhCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBh
cmVudGhlc2VzRnJhbWVMb2NhdGlvbiwgaW5kZXgpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRv
QmFja3RyYWNrKGp1bXAoKSwgdGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJh
Y2sodGhpcyk7CiAKICAgICAgICAgICAgIC8vIEFuZCBmYWlsIG1lYW5zIHN1Y2Nlc3MuCiAgICAg
ICAgICAgICBwYXJlbnRoZXNlc1N0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7
CisKICAgICAgICAgICAgIGxvYWRGcm9tRnJhbWUocGFyZW50aGVzZXNGcmFtZUxvY2F0aW9uLCBp
bmRleCk7CiAKICAgICAgICAgICAgIHN0YXRlLmNoZWNrZWRUb3RhbCArPSBjb3VudENoZWNrZWRB
ZnRlckFzc2VydGlvbjsKQEAgLTEwOTAsOCArMTY4OSw5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9y
IDogcHJpdmF0ZSBNYWNyb0Fzc2UKICAgICAgICAgICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
IAogICAgICAgICAgICAgcGFyZW50aGVzZXNTdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tz
KHRoaXMpOworCiAgICAgICAgICAgICBsb2FkRnJvbUZyYW1lKHBhcmVudGhlc2VzRnJhbWVMb2Nh
dGlvbiwgaW5kZXgpOwotICAgICAgICAgICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKGp1bXAoKSwg
dGhpcyk7CisgICAgICAgICAgICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2sodGhpcyk7CiAKICAgICAg
ICAgICAgIHN1Y2Nlc3MubGluayh0aGlzKTsKIApAQCAtMTI0MSw2ICsxODQxLDggQEAgY2xhc3Mg
UmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgZ2VuZXJhdGVS
ZXR1cm4oKTsKIAogICAgICAgICAgICAgc3RhdGUubmV4dEFsdGVybmF0aXZlKCk7CisgICAgICAg
ICAgICBpZiAoYWx0ZXJuYXRpdmUtPm9uY2VUaHJvdWdoKCkgJiYgc3RhdGUuYWx0ZXJuYXRpdmVW
YWxpZCgpKQorICAgICAgICAgICAgICAgIHN0YXRlLmNsZWFyQmFja3RyYWNrKCk7CiAKICAgICAg
ICAgICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBhbHRlcm5hdGl2ZXMsIHBsYW50IHRoZSBj
aGVjayBmb3IgaW5wdXQgYmVmb3JlIGxvb3BpbmcuCiAgICAgICAgICAgICBpZiAoc3RhdGUuYWx0
ZXJuYXRpdmVWYWxpZCgpKSB7CkBAIC0xMjQ4LDcgKzE4NTAsNyBAQCBjbGFzcyBSZWdleEdlbmVy
YXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgICAgICAgICAgaWYgKCFzZXRSZXBlYXRB
bHRlcm5hdGl2ZUxhYmVscyAmJiAhbmV4dEFsdGVybmF0aXZlLT5vbmNlVGhyb3VnaCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgaGFuZGxlZCBub24tcmVwZWF0aW5nIGFsdGVy
bmF0aXZlcywganVtcCB0byBuZXh0IGl0ZXJhdGlvbiAKICAgICAgICAgICAgICAgICAgICAgLy8g
YW5kIGxvb3Agb3ZlciByZXBlYXRpbmcgYWx0ZXJuYXRpdmVzLgotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5qdW1wVG9CYWNrdHJhY2soanVtcCgpLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuanVtcFRvQmFja3RyYWNrKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgY291bnRUb0NoZWNrRm9yRmlyc3RBbHRlcm5hdGl2ZSA9IG5leHRB
bHRlcm5hdGl2ZS0+bV9taW5pbXVtU2l6ZTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMjg3
LDYgKzE4ODksNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGdldCBoZXJlLCB0aGVuIHRoZSBsYXN0IGlucHV0IGNoZWNrZWQgcGFzc2VkLgogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzKTsKKwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBpZiB3ZSBjYW4gcnVu
IHRoZSBuZXh0IGFsdGVybmF0aXZlLCBzaW5jZSBpdCBpcyBzaG9ydGVyIC0KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGp1c3QgdXBkYXRlIGluZGV4LgogICAgICAgICAgICAgICAgICAgICAg
ICAgc3ViMzIoSW1tMzIoY291bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlIC0gY291bnRU
b0NoZWNrRm9yTmV4dEFsdGVybmF0aXZlKSwgaW5kZXgpOwpAQCAtMTMwMSw2ICsxOTA0LDcgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBhbHRlcm5hdGl2
ZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudCBvbmU7IGNoZWNrIHRoZSBkaWZmZXJlbmNlLgog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0
aGlzKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRGb3JQcmV2aW91
c0FsdGVybmF0aXZlLmFwcGVuZChqdW1wSWZOb0F2YWlsYWJsZUlucHV0KGNvdW50VG9DaGVja0Zv
ck5leHRBbHRlcm5hdGl2ZSAtIGNvdW50Q2hlY2tlZEZvckN1cnJlbnRBbHRlcm5hdGl2ZSkpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBDQVNFIDM6IEJvdGggYWx0ZXJuYXRpdmVz
IGFyZSB0aGUgc2FtZSBsZW5ndGguCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY291
bnRDaGVja2VkRm9yQ3VycmVudEFsdGVybmF0aXZlID09IGNvdW50VG9DaGVja0Zvck5leHRBbHRl
cm5hdGl2ZSk7CkBAIC0xMzI0LDcgKzE5MjgsOCBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHBy
aXZhdGUgTWFjcm9Bc3NlCiAgICAgICAgIGlmICghc2V0UmVwZWF0QWx0ZXJuYXRpdmVMYWJlbHMp
IHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBhbHRlcm5hdGl2ZXMgdGhhdCBuZWVk
IHJlcGVhdGluZyAoYWxsIGFyZSBtYXJrZWQgJ29uY2VUaHJvdWdoJykgdGhlbiBqdXN0IGxpbmsK
ICAgICAgICAgICAgIC8vIHRoZSBtYXRjaCBmYWlsdXJlcyB0byB0aGlzIHBvaW50LCBhbmQgZmFs
bCB0aHJvdWdoIHRvIHRoZSByZXR1cm4gYmVsb3cuCi0gICAgICAgICAgICBzdGF0ZS5saW5rQWx0
ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0
aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsKKwogICAgICAgICAgICAgbm90RW5vdWdoSW5wdXRG
b3JQcmV2aW91c0FsdGVybmF0aXZlLmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBIb3cgbXVjaCBtb3JlIGlucHV0IG5lZWQgdGhlcmUgYmUgdG8gYmUgYWJsZSB0
byByZXRyeSBmcm9tIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZT8KQEAgLTEzNDQsMTEgKzE5NDksMTEg
QEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZQogCiAgICAgICAgICAg
ICAvLyBGaXJzdCwgZGVhbCB3aXRoIHRoZSBjYXNlcyB3aGVyZSB0aGVyZSB3YXMgc3VmZmljaWVu
dCBpbnB1dCB0byB0cnkgdGhlIGxhc3QgYWx0ZXJuYXRpdmUuCiAgICAgICAgICAgICBpZiAoaW5j
cmVtZW50Rm9yTmV4dEl0ZXIgPiAwKSAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBtb3JlIGlucHV0
IGFueXdheSwgZmFsbCB0aHJvdWdoIHRvIHRoZSBjaGVja2luZyBiZWxvdy4KLSAgICAgICAgICAg
ICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzKHRoaXMpOworICAgICAgICAgICAg
ICAgIHN0YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcywgdHJ1ZSk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChtX3BhdHRlcm4ubV9ib2R5LT5tX2hhc0ZpeGVkU2l6ZSAmJiAhaW5jcmVt
ZW50Rm9yTmV4dEl0ZXIpIC8vIE5vIG5lZWQgdG8gdXBkYXRlIGFueXRoaW5nLCBsaW5rIHRoZXNl
IGJhY2t0cmFja3Mgc3RyYWlnaHQgdG8gdGhlIHRvIHBvZiB0aGUgbG9vcCEKLSAgICAgICAgICAg
ICAgICBzdGF0ZS5saW5rQWx0ZXJuYXRpdmVCYWNrdHJhY2tzVG8oZmlyc3RBbHRlcm5hdGl2ZUlu
cHV0Q2hlY2tlZCwgdGhpcyk7CisgICAgICAgICAgICAgICAgc3RhdGUubGlua0FsdGVybmF0aXZl
QmFja3RyYWNrc1RvKHRoaXMsIGZpcnN0QWx0ZXJuYXRpdmVJbnB1dENoZWNrZWQsIHRydWUpOwog
ICAgICAgICAgICAgZWxzZSB7IC8vIG5vIG5lZWQgdG8gY2hlY2sgdGhlIGlucHV0LCBidXQgd2Ug
ZG8gaGF2ZSBzb21lIGJvb2trZWVwaW5nIHRvIGRvIGZpcnN0LgotICAgICAgICAgICAgICAgIHN0
YXRlLmxpbmtBbHRlcm5hdGl2ZUJhY2t0cmFja3ModGhpcyk7CisgICAgICAgICAgICAgICAgc3Rh
dGUubGlua0FsdGVybmF0aXZlQmFja3RyYWNrcyh0aGlzLCB0cnVlKTsKIAogICAgICAgICAgICAg
ICAgIC8vIFdoZXJlIG5lY2Vzc2FyeSB1cGRhdGUgb3VyIHByZXNlcnZlZCBzdGFydCBwb3NpdGlv
bi4KICAgICAgICAgICAgICAgICBpZiAoIW1fcGF0dGVybi5tX2JvZHktPm1faGFzRml4ZWRTaXpl
KSB7CkBAIC0xNDA1LDYgKzIwMTAsMTAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRl
IE1hY3JvQXNzZQogICAgICAgICBtb3ZlKEltbTMyKC0xKSwgcmV0dXJuUmVnaXN0ZXIpOwogCiAg
ICAgICAgIGdlbmVyYXRlUmV0dXJuKCk7CisKKyAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuZW1p
dFBhcmVudGhlc2VzVGFpbCh0aGlzKTsKKyAgICAgICAgbV9leHByZXNzaW9uU3RhdGUuZW1pdElu
ZGlyZWN0SnVtcFRhYmxlKHRoaXMpOworICAgICAgICBtX2V4cHJlc3Npb25TdGF0ZS5saW5rVG9O
ZXh0SXRlcmF0aW9uKHRoaXMpOwogICAgIH0KIAogICAgIHZvaWQgZ2VuZXJhdGVFbnRlcigpCkBA
IC0xNDkxLDggKzIxMDAsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcih0aGlzLCBnbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLnBvb2xGb3JTaXplKHNp
emUoKSksIDApOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2JhY2t0cmFj
a1JlY29yZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBwYXRjaEJ1ZmZlci5wYXRjaChtX2Jh
Y2t0cmFja1JlY29yZHNbaV0uZGF0YUxhYmVsLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fYmFj
a3RyYWNrUmVjb3Jkc1tpXS5iYWNrdHJhY2tMb2NhdGlvbikpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9leHByZXNzaW9uU3RhdGUubV9iYWNrdHJhY2tSZWNvcmRzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIucGF0Y2gobV9leHByZXNzaW9uU3RhdGUu
bV9iYWNrdHJhY2tSZWNvcmRzW2ldLmRhdGFMYWJlbCwgcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2V4cHJlc3Npb25TdGF0ZS5tX2JhY2t0cmFja1JlY29yZHNbaV0uYmFja3RyYWNrTG9jYXRpb24p
KTsKIAogICAgICAgICBqaXRPYmplY3Quc2V0KHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsK
ICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpAQCAtMTUw
MSw3ICsyMTEwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBSZWdleFBhdHRlcm4mIG1fcGF0
dGVybjsKICAgICBib29sIG1fc2hvdWxkRmFsbEJhY2s7Ci0gICAgVmVjdG9yPEFsdGVybmF0aXZl
QmFja3RyYWNrUmVjb3JkPiBtX2JhY2t0cmFja1JlY29yZHM7CisgICAgR2VuZXJhdGlvblN0YXRl
IG1fZXhwcmVzc2lvblN0YXRlOwogfTsKIAogdm9pZCBqaXRDb21waWxlUmVnZXgoUmVnZXhQYXR0
ZXJuJiBwYXR0ZXJuLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZ2V4Q29kZUJsb2NrJiBq
aXRPYmplY3QpCkBAIC0xNTE0LDggKzIxMjMsMyBAQCB2b2lkIGppdENvbXBpbGVSZWdleChSZWdl
eFBhdHRlcm4mIHBhdHRlCiB9fQogCiAjZW5kaWYKLQotCi0KLQotCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS95YXJyL1JlZ2V4UGF0dGVybi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3lh
cnIvUmVnZXhQYXR0ZXJuLmgJKHJldmlzaW9uIDczMjY3KQorKysgSmF2YVNjcmlwdENvcmUveWFy
ci9SZWdleFBhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw4IEBAIHN0cnVj
dCBQYXR0ZXJuVGVybSB7CiAgICAgICAgIFR5cGVQYXJlbnRoZXNlc1N1YnBhdHRlcm4sCiAgICAg
ICAgIFR5cGVQYXJlbnRoZXRpY2FsQXNzZXJ0aW9uLAogICAgIH0gdHlwZTsKLSAgICBib29sIGlu
dmVydE9yQ2FwdHVyZTsKKyAgICBib29sIG1fY2FwdHVyZSA6MTsKKyAgICBib29sIG1faW52ZXJ0
IDoxOwogICAgIHVuaW9uIHsKICAgICAgICAgVUNoYXIgcGF0dGVybkNoYXJhY3RlcjsKICAgICAg
ICAgQ2hhcmFjdGVyQ2xhc3MqIGNoYXJhY3RlckNsYXNzOwpAQCAtMTIzLDYgKzEyNCw4IEBAIHN0
cnVjdCBQYXR0ZXJuVGVybSB7CiAKICAgICBQYXR0ZXJuVGVybShVQ2hhciBjaCkKICAgICAgICAg
OiB0eXBlKFBhdHRlcm5UZXJtOjpUeXBlUGF0dGVybkNoYXJhY3RlcikKKyAgICAgICAgLCBtX2Nh
cHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9pbnZlcnQoZmFsc2UpCiAgICAgewogICAgICAgICBw
YXR0ZXJuQ2hhcmFjdGVyID0gY2g7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1YW50aWZpZXJG
aXhlZENvdW50OwpAQCAtMTMxLDE2ICsxMzQsMTggQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKIAog
ICAgIFBhdHRlcm5UZXJtKENoYXJhY3RlckNsYXNzKiBjaGFyQ2xhc3MsIGJvb2wgaW52ZXJ0KQog
ICAgICAgICA6IHR5cGUoUGF0dGVyblRlcm06OlR5cGVDaGFyYWN0ZXJDbGFzcykKLSAgICAgICAg
LCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAg
ICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBjaGFyYWN0ZXJDbGFzcyA9
IGNoYXJDbGFzczsKICAgICAgICAgcXVhbnRpdHlUeXBlID0gUXVhbnRpZmllckZpeGVkQ291bnQ7
CiAgICAgICAgIHF1YW50aXR5Q291bnQgPSAxOwogICAgIH0KIAotICAgIFBhdHRlcm5UZXJtKFR5
cGUgdHlwZSwgdW5zaWduZWQgc3VicGF0dGVybklkLCBQYXR0ZXJuRGlzanVuY3Rpb24qIGRpc2p1
bmN0aW9uLCBib29sIGludmVydE9yQ2FwdHVyZSkKKyAgICBQYXR0ZXJuVGVybShUeXBlIHR5cGUs
IHVuc2lnbmVkIHN1YnBhdHRlcm5JZCwgUGF0dGVybkRpc2p1bmN0aW9uKiBkaXNqdW5jdGlvbiwg
Ym9vbCBjYXB0dXJlID0gZmFsc2UsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpCiAgICAgICAgIDogdHlw
ZSh0eXBlKQotICAgICAgICAsIGludmVydE9yQ2FwdHVyZShpbnZlcnRPckNhcHR1cmUpCisgICAg
ICAgICwgbV9jYXB0dXJlKGNhcHR1cmUpCisgICAgICAgICwgbV9pbnZlcnQoaW52ZXJ0KQogICAg
IHsKICAgICAgICAgcGFyZW50aGVzZXMuZGlzanVuY3Rpb24gPSBkaXNqdW5jdGlvbjsKICAgICAg
ICAgcGFyZW50aGVzZXMuc3VicGF0dGVybklkID0gc3VicGF0dGVybklkOwpAQCAtMTUyLDcgKzE1
Nyw4IEBAIHN0cnVjdCBQYXR0ZXJuVGVybSB7CiAgICAgCiAgICAgUGF0dGVyblRlcm0oVHlwZSB0
eXBlLCBib29sIGludmVydCA9IGZhbHNlKQogICAgICAgICA6IHR5cGUodHlwZSkKLSAgICAgICAg
LCBpbnZlcnRPckNhcHR1cmUoaW52ZXJ0KQorICAgICAgICAsIG1fY2FwdHVyZShmYWxzZSkKKyAg
ICAgICAgLCBtX2ludmVydChpbnZlcnQpCiAgICAgewogICAgICAgICBxdWFudGl0eVR5cGUgPSBR
dWFudGlmaWVyRml4ZWRDb3VudDsKICAgICAgICAgcXVhbnRpdHlDb3VudCA9IDE7CkBAIC0xNjAs
NyArMTY2LDggQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsKIAogICAgIFBhdHRlcm5UZXJtKHVuc2ln
bmVkIHNwYXR0ZXJuSWQpCiAgICAgICAgIDogdHlwZShUeXBlQmFja1JlZmVyZW5jZSkKLSAgICAg
ICAgLCBpbnZlcnRPckNhcHR1cmUoZmFsc2UpCisgICAgICAgICwgbV9jYXB0dXJlKGZhbHNlKQor
ICAgICAgICAsIG1faW52ZXJ0KGZhbHNlKQogICAgIHsKICAgICAgICAgYmFja1JlZmVyZW5jZVN1
YnBhdHRlcm5JZCA9IHNwYXR0ZXJuSWQ7CiAgICAgICAgIHF1YW50aXR5VHlwZSA9IFF1YW50aWZp
ZXJGaXhlZENvdW50OwpAQCAtMTg5LDEyICsxOTYsMTIgQEAgc3RydWN0IFBhdHRlcm5UZXJtIHsK
ICAgICAKICAgICBib29sIGludmVydCgpCiAgICAgewotICAgICAgICByZXR1cm4gaW52ZXJ0T3JD
YXB0dXJlOworICAgICAgICByZXR1cm4gbV9pbnZlcnQ7CiAgICAgfQogCiAgICAgYm9vbCBjYXB0
dXJlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpbnZlcnRPckNhcHR1cmU7CisgICAgICAgIHJl
dHVybiBtX2NhcHR1cmU7CiAgICAgfQogICAgIAogICAgIHZvaWQgcXVhbnRpZnkodW5zaWduZWQg
Y291bnQsIFF1YW50aWZpZXJUeXBlIHR5cGUpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzI2NykKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDEwLTEyLTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoCisKKyAgICAgICAgQWRkZWQgbmV3IHRlc3Rz
IHRvIHN1cHBvcnQgY2hhbmdlcyB0byBSZWdleHAgSklUIGNvZGUgaGFuZGxpbmcKKyAgICAgICAg
b2YgcGFyZW50aGVzZXMuICBUZXN0cyBmb2N1c2VkIG9uIGJhY2t0cmFja2luZyBhbmQgbmVzdGVk
IAorICAgICAgICBzdWJleHByZXNzaW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUwMjk1CisKKyAgICAgICAgKiBmYXN0L3JlZ2V4L3BhcmVudGhl
c2VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9yZWdleC9wYXJlbnRoZXNl
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3JlZ2V4L3NjcmlwdC10ZXN0cy9wYXJlbnRo
ZXNlcy5qczogQWRkZWQuCisKIDIwMTAtMTItMDMgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9yZWdleC9wYXJlbnRoZXNlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9yZWdleC9wYXJlbnRoZXNlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVudGhlc2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzNyBAQAorVGhpcyBwYWdlIHRlc3RzIGhhbmRsaW5nIG9mIHBhcmVudGhl
c2VzIHN1YmV4cHJlc3Npb25zLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyByZWdleHAxLmV4ZWMoJ2FiYycpIGlzIFsnYWInLCdhJywnYiddCitQQVNTIHJlZ2V4cDIuZXhl
YygnYWJhY2FkYWJlJykgaXMgWydhYmUnLCdhYicsJ2InLCdiJ10KK1BBU1MgcmVnZXhwMy5leGVj
KCdhYmFjYWRhYmUnKSBpcyBbJ2FiZScsJ2FiJywnYicsdW5kZWZpbmVkXQorUEFTUyByZWdleHA0
LmV4ZWMoJ2FiYWNhZGFiZScpIGlzIFsnYWJlJywnYWInLCdiJyx1bmRlZmluZWRdCitQQVNTIHJl
Z2V4cDUuZXhlYygnYWJhY2FkYWJlJykgaXMgWydhYmUnLCdhYicsJ2InLCdiJyx1bmRlZmluZWQs
dW5kZWZpbmVkXQorUEFTUyByZWdleHA2LmV4ZWMoJ2FiY2RlJykgaXMgWydhYicsJ2FiJywnYics
J2InLHVuZGVmaW5lZCx1bmRlZmluZWRdCitQQVNTIHJlZ2V4cDcuZXhlYygnYWJjJykgaXMgWydh
YmMnLCdhYicsJ2InXQorUEFTUyByZWdleHA4LmV4ZWMoJ2JjYWRkeHF5JykgaXMgWydxeScsJ3En
LCdxJywneSddCitQQVNTIHJlZ2V4cDkuZXhlYygnYXNkZmplamdzZGZsYWtzZGZqa2Vsamdoa2pl
YScpIGlzIFsnYScsJ2EnLHVuZGVmaW5lZF0KK1BBU1MgcmVnZXhwMTAuZXhlYygnYXNkZmplamdz
ZGZsYWtzZGZqa2VsamdoYXQnKSBpcyBbJ2F0J10KK1BBU1MgcmVnZXhwMTEuZXhlYygnRGV2ZWxv
cGluZyB3aXRoIEphdmFTY3JpcHQgaXMgZGFuZ2Vyb3VzLCBkbyBub3QgdHJ5IGl0IHdpdGhvdXQg
YXNzaXN0YW5jZScpIGlzIG51bGwKK1BBU1MgcmVnZXhwMTIuZXhlYygnU2VhdHRsZSwgV0EgdG8g
QnVja2xleSwgV0EnKSBpcyBbJ1NlYXR0bGUsIFdBIHRvIEJ1Y2tsZXksIFdBJywgdW5kZWZpbmVk
LCAnU2VhdHRsZScsICdXQScsIHVuZGVmaW5lZCwgJ0J1Y2tsZXknLCAnV0EnXQorUEFTUyByZWdl
eHAxMy5leGVjKCd6eGNhc2Q7ZmwgXkFhYUFBYWFhZjtscmxyenMnKSBpcyBbJ0FhYUFBYWFhZjts
cmxyenMnLHVuZGVmaW5lZCwnQWFhQUFhYWFmO2xybHJ6cyddCitQQVNTIHJlZ2V4cDE0LmV4ZWMo
J2InKSBpcyBbJ2InLHVuZGVmaW5lZCwnYiddCitQQVNTIHJlZ2V4cDE1LmV4ZWMoJ2FiZGYnKSBp
cyBbJ2FiZGYnLHVuZGVmaW5lZCwnYWJkJywnZiddCitQQVNTIHJlZ2V4cDE2LmV4ZWMoJ2FiYycp
IGlzIFsnYWInLCdhJywnYiddCitQQVNTIHJlZ2V4cDE3LmV4ZWMoJ2JjYUR4cXknKSBpcyBbJ0R4
JywnRCddCitQQVNTIHJlZ2V4cDE4LmV4ZWMoJ0hlbGxvOiBXb3JsZCcpIGlzIFsnSGVsbG86Jywn
OiddCitQQVNTIHJlZ2V4cDE5LmV4ZWMoJ2JhcnJlbCcpIGlzIFsnYmFyJywnJ10KK1BBU1MgcmVn
ZXhwMjAuZXhlYygnYmFycmVsJykgaXMgWydiYXJyZWwnLCdyZWwnXQorUEFTUyByZWdleHAyMC5l
eGVjKCcyYmFycmVsJykgaXMgWycyYmFycmVsJywncmVsJ10KK1BBU1MgcmVnZXhwMjEuZXhlYygn
YWJjJykgaXMgWydhYicsJ2FiJywnYiddCitQQVNTIHJlZ2V4cDIyLmV4ZWMoJ2FiY2Rsc2tmZ2pk
c2xrZmcnKSBpcyBudWxsCitQQVNTIHJlZ2V4cDIzLmV4ZWMoJzxodG1sIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hodG1sIicpIGlzIFsnImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0
bWwiJ10KK1BBU1MgcmVnZXhwMjQuZXhlYygnMTIzJykgaXMgbnVsbAorUEFTUyByZWdleHAyNS5l
eGVjKCd0aGlzIGlzIGEgdGVzdCcpIGlzIFsndGhpcycsJ3RoaXMnLHVuZGVmaW5lZF0KK1BBU1Mg
cmVnZXhwMjUuZXhlYygnIXRoaXMgaXMgYSB0ZXN0JykgaXMgbnVsbAorUEFTUyAnSGkgQm9iJy5t
YXRjaCgvKFJvYil8KEJvYil8KFJvYmVydCl8KEJvYmJ5KS8pIGlzIFsnQm9iJyx1bmRlZmluZWQs
J0JvYicsdW5kZWZpbmVkLHVuZGVmaW5lZF0KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3JlZ2V4L3BhcmVu
dGhlc2VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRo
ZXNlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9yZWdleC9wYXJlbnRo
ZXNlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvcmVnZXgvc2Ny
aXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
cmVnZXgvc2NyaXB0LXRlc3RzL3BhcmVudGhlc2VzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9yZWdleC9zY3JpcHQtdGVzdHMvcGFyZW50aGVzZXMuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODMgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHBhZ2UgdGVzdHMgaGFuZGxpbmcg
b2YgcGFyZW50aGVzZXMgc3ViZXhwcmVzc2lvbnMuIik7CisKK3ZhciByZWdleHAxID0gLyhhfEEp
KGJ8QikvOworc2hvdWxkQmUoInJlZ2V4cDEuZXhlYygnYWJjJykiLCAiWydhYicsJ2EnLCdiJ10i
KTsKKwordmFyIHJlZ2V4cDIgPSAvKGEoKGIpfGN8ZCkpZS87CitzaG91bGRCZSgicmVnZXhwMi5l
eGVjKCdhYmFjYWRhYmUnKSIsICJbJ2FiZScsJ2FiJywnYicsJ2InXSIpOworCit2YXIgcmVnZXhw
MyA9IC8oYShifChjKXxkKSllLzsKK3Nob3VsZEJlKCJyZWdleHAzLmV4ZWMoJ2FiYWNhZGFiZScp
IiwgIlsnYWJlJywnYWInLCdiJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA0ID0gLyhhKGJ8
Y3woZCkpKWUvOworc2hvdWxkQmUoInJlZ2V4cDQuZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUn
LCdhYicsJ2InLHVuZGVmaW5lZF0iKTsKKwordmFyIHJlZ2V4cDUgPSAvKGEoKGIpfChjKXwoZCkp
KWUvOworc2hvdWxkQmUoInJlZ2V4cDUuZXhlYygnYWJhY2FkYWJlJykiLCAiWydhYmUnLCdhYics
J2InLCdiJyx1bmRlZmluZWQsdW5kZWZpbmVkXSIpOworCit2YXIgcmVnZXhwNiA9IC8oYSgoYil8
KGMpfChkKSkpLzsKK3Nob3VsZEJlKCJyZWdleHA2LmV4ZWMoJ2FiY2RlJykiLCAiWydhYicsJ2Fi
JywnYicsJ2InLHVuZGVmaW5lZCx1bmRlZmluZWRdIik7CisKK3ZhciByZWdleHA3ID0gLyhhKGIp
Pz8pPz9jLzsKK3Nob3VsZEJlKCJyZWdleHA3LmV4ZWMoJ2FiYycpIiwgIlsnYWJjJywnYWInLCdi
J10iKTsKKwordmFyIHJlZ2V4cDggPSAvKGF8KGV8cSkpKHh8eSkvOworc2hvdWxkQmUoInJlZ2V4
cDguZXhlYygnYmNhZGR4cXknKSIgLCAiWydxeScsJ3EnLCdxJywneSddIik7CisKK3ZhciByZWdl
eHA5ID0gLygodHxiKT98YSkkLzsKK3Nob3VsZEJlKCJyZWdleHA5LmV4ZWMoJ2FzZGZqZWpnc2Rm
bGFrc2RmamtlbGpnaGtqZWEnKSIsICJbJ2EnLCdhJyx1bmRlZmluZWRdIik7CisKK3ZhciByZWdl
eHAxMCA9IC8oPzpofGU/KD86dHxiKT98YT8oPzp0fGIpPykoPzokKS87CitzaG91bGRCZSgicmVn
ZXhwMTAuZXhlYygnYXNkZmplamdzZGZsYWtzZGZqa2VsamdoYXQnKSIsICJbJ2F0J10iKTsKKwor
dmFyIHJlZ2V4cDExID0gLyhbSmpdYXZhKFtTc11jcmlwdCk/KVxzaXNccyhmdW5cdyopLzsKK3No
b3VsZEJlTnVsbCgicmVnZXhwMTEuZXhlYygnRGV2ZWxvcGluZyB3aXRoIEphdmFTY3JpcHQgaXMg
ZGFuZ2Vyb3VzLCBkbyBub3QgdHJ5IGl0IHdpdGhvdXQgYXNzaXN0YW5jZScpIik7CisKK3ZhciBy
ZWdleHAxMiA9IC8oPzooLispLCApPyguKyksICguLikgdG8gKD86KC4rKSwgKT8oLispLCAoLi4p
LzsKK3Nob3VsZEJlKCJyZWdleHAxMi5leGVjKCdTZWF0dGxlLCBXQSB0byBCdWNrbGV5LCBXQScp
IiwgIlsnU2VhdHRsZSwgV0EgdG8gQnVja2xleSwgV0EnLCB1bmRlZmluZWQsICdTZWF0dGxlJywg
J1dBJywgdW5kZWZpbmVkLCAnQnVja2xleScsICdXQSddIik7CisKK3ZhciByZWdleHAxMyA9IC8o
QSk/KEEuKikvOworc2hvdWxkQmUoInJlZ2V4cDEzLmV4ZWMoJ3p4Y2FzZDtmbFwgXkFhYUFBYWFh
ZjtscmxyenMnKSIsICJbJ0FhYUFBYWFhZjtscmxyenMnLHVuZGVmaW5lZCwnQWFhQUFhYWFmO2xy
bHJ6cyddIik7CisKK3ZhciByZWdleHAxNCA9IC8oYSl8KGIpLzsKK3Nob3VsZEJlKCJyZWdleHAx
NC5leGVjKCdiJykiLCAiWydiJyx1bmRlZmluZWQsJ2InXSIpOworCit2YXIgcmVnZXhwMTUgPSAv
Xig/IShhYilkZXx4KShhYmQpKGYpLzsKK3Nob3VsZEJlKCJyZWdleHAxNS5leGVjKCdhYmRmJyki
LCAiWydhYmRmJyx1bmRlZmluZWQsJ2FiZCcsJ2YnXSIpOworCit2YXIgcmVnZXhwMTYgPSAvKGF8
QSkoYnxCKS87CitzaG91bGRCZSgicmVnZXhwMTYuZXhlYygnYWJjJykiLCAiWydhYicsJ2EnLCdi
J10iKTsKKwordmFyIHJlZ2V4cDE3ID0gLyhhfGR8cXwpeC9pOworc2hvdWxkQmUoInJlZ2V4cDE3
LmV4ZWMoJ2JjYUR4cXknKSIsICJbJ0R4JywnRCddIik7CisKK3ZhciByZWdleHAxOCA9IC9eLio/
KDp8JCkvOworc2hvdWxkQmUoInJlZ2V4cDE4LmV4ZWMoJ0hlbGxvOiBXb3JsZCcpIiwgIlsnSGVs
bG86JywnOiddIik7CisKK3ZhciByZWdleHAxOSA9IC8oYWJ8Xi57MCwyfSliYXIvOworc2hvdWxk
QmUoInJlZ2V4cDE5LmV4ZWMoJ2JhcnJlbCcpIiwgIlsnYmFyJywnJ10iKTsKKwordmFyIHJlZ2V4
cDIwID0gLyg/Oig/IWZvbykuLi58Xi57MCwyfSliYXIoLiopLzsKK3Nob3VsZEJlKCJyZWdleHAy
MC5leGVjKCdiYXJyZWwnKSIsICJbJ2JhcnJlbCcsJ3JlbCddIik7CitzaG91bGRCZSgicmVnZXhw
MjAuZXhlYygnMmJhcnJlbCcpIiwgIlsnMmJhcnJlbCcsJ3JlbCddIik7CisKK3ZhciByZWdleHAy
MSA9IC8oW2EtZ10oYnxCKXx4eXopLzsKK3Nob3VsZEJlKCJyZWdleHAyMS5leGVjKCdhYmMnKSIs
ICJbJ2FiJywnYWInLCdiJ10iKTsKKwordmFyIHJlZ2V4cDIyID0gLyg/Ol58OylccyphYmM9KFte
O10qKS87CitzaG91bGRCZU51bGwoInJlZ2V4cDIyLmV4ZWMoJ2FiY2Rsc2tmZ2pkc2xrZmcnKSIp
OworCit2YXIgcmVnZXhwMjMgPSAvIltePCJdKiJ8J1tePCddKicvOworc2hvdWxkQmUoInJlZ2V4
cDIzLmV4ZWMoJzxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiJyki
LCAiWydcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIiddIik7CisKK3ZhciByZWdleHAy
NCA9IC9eKD86KD89YWJjKVx3ezN9OnxcZFxkKSQvOworc2hvdWxkQmVOdWxsKCJyZWdleHAyNC5l
eGVjKCcxMjMnKSIpOworCit2YXIgcmVnZXhwMjUgPSAvXlxzKihcKnxbXHdcLV0rKShcYnwkKT8v
Oworc2hvdWxkQmUoInJlZ2V4cDI1LmV4ZWMoJ3RoaXMgaXMgYSB0ZXN0JykiLCAiWyd0aGlzJywn
dGhpcycsdW5kZWZpbmVkXSIpOworc2hvdWxkQmVOdWxsKCJyZWdleHAyNS5leGVjKCchdGhpcyBp
cyBhIHRlc3QnKSIpOworCitzaG91bGRCZSgiJ0hpIEJvYicubWF0Y2goLyhSb2IpfChCb2IpfChS
b2JlcnQpfChCb2JieSkvKSIsICJbJ0JvYicsdW5kZWZpbmVkLCdCb2InLHVuZGVmaW5lZCx1bmRl
ZmluZWRdIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>