<?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>143501</bug_id>
          
          <creation_ts>2015-04-07 15:22:32 -0700</creation_ts>
          <short_desc>Add a conservative DFA minimizer for the content extension matcher</short_desc>
          <delta_ts>2015-04-14 14:09:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>barraclough</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083458</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-07 15:22:32 -0700</bug_when>
    <thetext>Add a conservative DFA minimizer for the content extension matcher</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083464</commentid>
    <comment_count>1</comment_count>
      <attachid>250311</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-07 16:00:07 -0700</bug_when>
    <thetext>Created attachment 250311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083466</commentid>
    <comment_count>2</comment_count>
      <attachid>250312</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-07 16:06:10 -0700</bug_when>
    <thetext>Created attachment 250312
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083700</commentid>
    <comment_count>3</comment_count>
      <attachid>250312</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-08 12:42:09 -0700</bug_when>
    <thetext>Comment on attachment 250312
Patch

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

I still need to look at DFAMinimizer.cpp, but there are some other things that need to be addressed.

&gt; Source/WebCore/ChangeLog:110
&gt; +        Antti Valmari, Petri Lehtinen, Marie-Pierre BÃ©al and Maxime Crochemore deserve credit for their indirect
&gt; +        work on this patch. Thanks for your wonderful papers about DFA minimization.

It might be nice to put links to the free articles here for reference.  http://arxiv.org/pdf/0802.2826v1.pdf etc.

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:-192
&gt; -    double dfaBuildTimeStart = monotonicallyIncreasingTime();

Also remove line 228 which still uses this.  And line 227, which declares dfaBuildTimeEnd, which would also become unused.

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:100
&gt; +        m_nodeStartOffsets[index] = std::numeric_limits&lt;unsigned&gt;::max();

You could add an assertion when linking that this value is never used.

&gt; Source/WebCore/contentextensions/DFAMinimizer.h:37
&gt; +namespace DFAMinimizer {

It seems a little excessive to make a namespace just for this.  This is WebCore, where we don&apos;t believe in namespaces ;)
What about a class with static methods like NFAToDFA?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:732
&gt; +TEST_F(ContentExtensionTest, MinimizingWithMoreFinalStatesThanNonFinalStates)

It would be nice to add an EXPECT_EQ with the number of non-killed DFA nodes.  I don&apos;t think these tests accurately test minimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083710</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2015-04-08 12:57:02 -0700</bug_when>
    <thetext>Ben, do you have any performance results? – say, a percent reduction on nodes in the graph for some representative input?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083713</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-08 13:07:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Ben, do you have any performance results? – say, a percent reduction on
&gt; nodes in the graph for some representative input?

I was working with one of the two lists. The bytecode size shrinks by &gt;15% IIRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083717</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-08 13:24:24 -0700</bug_when>
    <thetext>Here is the output of a large content extension with CONTENT_EXTENSIONS_PERFORMANCE_REPORTING set to 1:

Time spent loading extension 0.120485
    Time spent partitioning the rules into groups: 0.307346
    Time spent building the NFAs: 0.184733
    Time spent building and compiling the DFAs: 8.248510
    Bytecode size 26787531
    DFA count 2

Here&apos;s the output of the same content extension with this patch applied:

Time spent loading extension 0.112486
    Time spent partitioning the rules into groups: 0.298134
    Time spent building the NFAs: 0.203010
    Time spent building the DFA 0: 1.145915
    Time spent miniminizing the DFA 0: 0.889264
    Time spent building the DFA 1: 5.517612
    Time spent miniminizing the DFA 1: 3.532788
    Bytecode size 18704055
    DFA count 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084063</commentid>
    <comment_count>7</comment_count>
      <attachid>250312</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-09 14:50:52 -0700</bug_when>
    <thetext>Comment on attachment 250312
Patch

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

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:2
&gt; + * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.

2014?

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:326
&gt; +            m_transitionPartition.refineGeneration([](unsigned) { });

This seems a little strange.

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:435
&gt; +        hasher.addCharactersAssumingAligned(reinterpret_cast&lt;const UChar*&gt;(actions.data()), sizeof(uint64_t) / sizeof(UChar));

Don&apos;t you want actions.size() in here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084984</commentid>
    <comment_count>8</comment_count>
      <attachid>250680</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-13 15:48:46 -0700</bug_when>
    <thetext>Created attachment 250680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084985</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-13 15:49:45 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Source/WebCore/ChangeLog:110
&gt; &gt; +        Antti Valmari, Petri Lehtinen, Marie-Pierre BÃ©al and Maxime Crochemore deserve credit for their indirect
&gt; &gt; +        work on this patch. Thanks for your wonderful papers about DFA minimization.
&gt; 
&gt; It might be nice to put links to the free articles here for reference. 
&gt; http://arxiv.org/pdf/0802.2826v1.pdf etc.

Both teams published several papers, I did not bother linking to every one of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085015</commentid>
    <comment_count>10</comment_count>
      <attachid>250680</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-13 17:42:35 -0700</bug_when>
    <thetext>Comment on attachment 250680
Patch

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

r=me, with some comments:

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:224
&gt; +        set32Bits(m_bytecode, offset, m_nodeStartOffsets[linkRecord.second]);

Add this assertion here:
ASSERT(m_nodeStartOffsets[linkRecord.second] != std::numeric_limits&lt;unsigned&gt;::max());

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:37
&gt; +namespace {

Does this add any useful organization?

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:102
&gt; +        m_sets.append(SetDescriptor({ 0, size, 0 }));

m_sets.append({ 0, size, 0 });

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:171
&gt; +    void iterateSets(const Function&amp; function)

I believe this is unused.  Remove!

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:188
&gt; +    size_t findInSet(unsigned setIndex, const TestFunction&amp; testFunction)

Also unused! Remove!

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:206
&gt; +    unsigned firstElementInSet(unsigned setIndex) const

This is not mentioned in the ChangeLog entry.

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:303
&gt; +                m_flattenedTransitions[start + offset] = Transition({ i, targetNodeIndex, transition.key });

I think this also unnecessarily calls the copy constructor.

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:356
&gt; +            m_transitionPartition.refineGeneration([](unsigned) { });
&gt; +            m_fallbackTransitionPartition.refineGeneration([](unsigned) { });

These need a comment explaining why it is a good idea to use a lambda that does nothing.

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:418
&gt; +struct Transition {

This is defined as a private struct on line 397.  Remove this unused definition.

&gt; Source/WebCore/contentextensions/DFAMinimizer.cpp:469
&gt; +}

Is this the end of the unnamed namespace?  If we keep that, there should be a comment here.

&gt; Tools/TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:70
&gt; +    EXPECT_EQ(static_cast&lt;size_t&gt;(10), countLiveNodes(dfa));

10u should work here instead of static_cast&lt;size_t&gt;(10).  Similar elsewhere in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085254</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-14 14:09:02 -0700</bug_when>
    <thetext>Committed r182808: &lt;http://trac.webkit.org/changeset/182808&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250311</attachid>
            <date>2015-04-07 16:00:07 -0700</date>
            <delta_ts>2015-04-07 16:06:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143501-20150407155917.patch</filename>
            <type>text/plain</type>
            <size>58830</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ5NDkxZDhjMzVmZjQx
MjY5ZGRjNDdmMmM5NzQzYzQwMzA3Y2ZkOS4uMmU0NTJiM2Y4Y2Y3Y2MwNDMyMGQyMzhhOTAwMDUy
MTMyNzA3ZWJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAxNS0wNC0wNyAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgY29u
c2VydmF0aXZlIERGQSBtaW5pbWl6ZXIgZm9yIHRoZSBjb250ZW50IGV4dGVuc2lvbiBtYXRjaGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM1MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBzaW1wbGUgbWluaW1pemVyIGZvciBERkEgZ3JhcGhzLiBJdCBpcyBub3QgYSBw
ZXJmZWN0IG1pbmltaXplcjoKKyAgICAgICAgc29tZSBpbmRpc3Rpbmd1aXNoYWJsZSBhcmUgbm90
IG1lcmdlZCwgYnV0IG5vIHR3byBkaXN0aW5ndWlzaGFibGUgYXJlIG1lcmdlZC4KKworICAgICAg
ICBUaGUgZ2VuZXJhbCBpZGVhIG9mIHRoZSBhbGdvcml0aG0gaXMgdG8gcHV0IGFsbCB0aGUgc3Rh
dGUgaW50byBhIHNpbmdsZSBzZXQKKyAgICAgICAgYW5kIHBhcnRpdGlvbiBpdGVyYXRpdmVseSB1
bnRpbCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNwbGl0IGFueSBzdWJzZXQgYnkgdXNpbmcKKyAgICAg
ICAgYSB0cmFuc2l0aW9uIHRvIGRpc3Rpbmd1aXNoIHR3byBzdGF0ZXMuCisKKyAgICAgICAgTGV0
J3MgaWdub3JlIGZhbGxiYWNrIHRyYW5zaXRpb24gZm9yIG5vdywgYW5kIEknbGwgZXhwbGFpbiBs
YXRlciBob3cgdGhleSBmaXQgaW4KKyAgICAgICAgdGhlIGJpZyBwaWN0dXJlLgorCisKKyAgICAg
ICAgVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIGNyZWF0ZSBhIHBhcnRpdGlvbiBvZiB0aGUgdHJh
bnNpdGlvbiBieSBncm91cGluZyBldmVyeQorICAgICAgICB0cmFuc2l0aW9uIGJ5IHRoZSBzYW1l
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSBzdWJzZXQuIFRoaXMgcGFydGl0aW9uIG9mIHRyYW5zaXRp
b25zCisgICAgICAgIGlzIHRoZSBiYXNlIGJ5IHdoaWNoIHdlIHdpbGwgcGFydGl0aW9uIHRoZSBz
dGF0ZXMuCisKKyAgICAgICAgRWFjaCBzdWJzZXQgaW4gdGhlIHRyYW5zaXRpb24gcGFydGl0aW9u
IGlzIGEgImRpc3Rpbmd1aXNoZXIiIGJ5IHdoaWNoIHdlIGNhbgorICAgICAgICBzZXBhcmF0ZSB0
aGUgc3RhdGUgcGFydGl0aW9uLgorCisgICAgICAgIFdlIGFsc28gY3JlYXRlIGEgc2Vjb25kIHBh
cnRpdGlvbiwgdGhlIHN0YXRlIHBhcnRpdGlvbi4gVGhpcyBpcyB3aGVyZSB3ZSBrZWVwCisgICAg
ICAgIGFsbCB0aGUgc3Vic2V0cyBvZiBzdGF0ZXMgdGhhdCBoYXZlIGJlZW4gc3BsaXQgc28gZmFy
LgorCisgICAgICAgIExldCBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGdyYXBoLgorCisgICAg
ICAgICAgICAxIC0tYS0tPiAyCisgICAgICAgICAgICAxIC0tYi0tPiAzCisgICAgICAgICAgICAy
IC0tYy0tPiA0IChmaW5hbCkKKyAgICAgICAgICAgIDMgLS1jLS0+IDQgKGZpbmFsKQorCisgICAg
ICAgIFRoZSBwYXJ0aXRpb24gb2YgdHJhbnNpdGlvbiB3b3VsZCBzdGFydCB3aXRoOgorICAgICAg
ICBTZXQgMDoKKyAgICAgICAgICAgIDEgLS1hLS0+IDIKKyAgICAgICAgU2V0IDE6CisgICAgICAg
ICAgICAxIC0tYi0tPiAzCisgICAgICAgIFNldCAyOgorICAgICAgICAgICAgMiAtLWMtLT4gNAor
ICAgICAgICAgICAgMyAtLWMtLT4gNAorCisgICAgICAgIFRoZSBzdGF0ZSBwYXJ0aXRpb24gd291
bGQgaGF2ZSBhIHNpbmdsZSBzZXQgd2l0aCB7IDEsIDIsIDMsIDQgfS4KKworCisgICAgICAgIE5l
eHQsIHdlIHNwbGl0IHRoZSBzdGF0ZSBwYXJ0aXRpb24gYnkgZGlzdGluZ3Vpc2hhYmxlIGZpbmFs
IHN0YXRlcy4gSW4gdGhpcyBjYXNlLAorICAgICAgICB3ZSB3b3VsZCBzcGxpdCBpdCBpbnRvIHsg
MSwgMiwgMyB9LCB7IDQgfS4KKworICAgICAgICBXZSB0aGVuIHJlZmluZSB0aGUgdHJhbnNpdGlv
biBwYXJ0aXRpb24gYnkgc3BsaXR0aW5nIGl0IGJ5IHRoZSBzdGF0ZXMgdGhhdCBoYXZlCisgICAg
ICAgIGJlZW4gZGlzdGluZ3Vpc2hlZC4gSGVyZSwgdGhlIG9ubHkgdHJhbnNpdGlvbnMgdG8gNCBh
cmUgYm90aCBpcyB0aGUgc2FtZSBzZXQgKHNldCAyKSwKKyAgICAgICAgc28gdGhlIHRyYW5zaXRp
b24gcGFydGl0aW9uIHJlbWFpbnMgdGhlIHNhbWUuCisKKworICAgICAgICBXZSBjYW4gbm93IGV4
ZWN1dGUgdGhlIG1haW4gbG9vcCBvZiB0aGUgYWxnb3JpdGhtOgorICAgICAgICAxKSBTcGxpdCB0
aGUgc3RhdGVzIGJ5IHRoZSB0cmFuc2l0aW9ucy4KKyAgICAgICAgMikgU3BsaXQgdGhlIHRyYW5z
aXRpb25zIHRoYXQgYXJlIG5vdyByZWFjaGluZyB0d28gZGlmZmVyZW50IHNldHMgb2YgdGhlIHN0
YXRlIHBhcnRpdGlvbi4KKyAgICAgICAgMykgQWRkIGFueSBuZXdseSBkaXNjb3ZlcmVkICJkaXN0
aW5ndWlzaGVyIiAodGhlIG9uZXMgd2Ugc3BsaXQpIHRvIHRoZSBsaXN0IG9mICJkaXN0aW5ndWlz
aGVyIgorICAgICAgICAgICB0byBwcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgY2FzZSwgd2Ug
anVzdCBpdGVyYXRlIG92ZXIgdGhlIHBhcnRpdGlvbiBzZXQgaW4gb3JkZXIsIGFuZCBhZGQgbmV3
bHkgc3BsaXQgdHJhbnNpdGlvbnMKKyAgICAgICAgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKwor
ICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2Ugd291bGQgZmlyc3QgdmlzaXQgc2V0IDAuIFdlIGhh
dmUgdGhhdCBzdGF0ZSAxIGlzIGRpc3Rpbmd1aXNoYWJsZQorICAgICAgICBieSAiYSIsIGFuZCB0
aGUgc3RhdGUgcGFydGl0aW9uIHdvdWxkIGJlY29tZSB7IDEgfSwgeyAyLCAzIH0sIHsgNCB9Lgor
CisgICAgICAgIFdlIHRoZW4gdmlzaXQgdHJhbnNpdGlvbiBzZXQgMSwgaXQgZGlzdGluZ3Vpc2hl
cyBzdGF0ZSAxIHdoaWNoIGlzIGFscmVhZHkgYWxvbmUgLT4gbm90aGluZyB0byBkby4KKworICAg
ICAgICBGaW5hbGx5LCB3ZSBwcm9jZXNzIHRoZSB0cmFuc2l0aW9uIHNldCAyLCBpdCBkaXN0aW5n
dWlzaGVzIDIgYW5kIDMsIHRoZXkgYXJlIGFscmVhZHkgaW4gdGhlIHNhbWUKKyAgICAgICAgc2V0
IC0+IG5vdGhpbmcgdG8gZG8uCisKKyAgICAgICAgVGhlcmUgaXMgbm8gbW9yZSB0cmFuc2l0aW9u
IHRvIHByb2Nlc3MsIHdlIGhhdmUgMyB1bmlxdWUgc3Vic2V0cyBhbmQgd2Ugc2hvdWxkIG1lcmdl
IDIgYW5kIDMuCisKKyAgICAgICAgLS0tCisKKyAgICAgICAgT2theSwgbm93IGhvdyB0byB3ZSBm
aXQgZmFsbGJhY2sgdHJhbnNpdGlvbiBpbiB0aGlzIG1vZGVsLiBJbiB0aGlzIHBhdGNoLCBJIHRh
a2UgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBhcHByb2FjaDogd2Ugc3BsaXQgZXZlcnl0aGlu
ZyBhc3N1bWluZyBmYWxsYmFjayB0cmFuc2l0aW9uIGRvIG5vdCBleGlzdCwgdGhlbiB3ZSByZWZp
bmUKKyAgICAgICAgYnkgdGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zLgorCisgICAgICAgIExldCdz
IHRha2UgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgMSAtLWEtLT4gMworICAg
ICAgICAgICAgMiAtLWEtLT4gMworICAgICAgICAgICAgMSAtW2ZdLT4gNAorICAgICAgICAgICAg
MiAtW2ZdLT4gNQorCisgICAgICAgIGFuZCBhdCB0aGlzIHN0YWdlIGluIHRoZSBhbGdvcml0aG0s
IHdlIGhhdmUgdGhlIHNldHMgeyAxLCAyIH0sIHsgMyB9LCB7IDQgfSwgeyA1IH0uCisgICAgICAg
IFRoZSBzdGF0ZXMgMSBhbmQgMiBhcmUgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBk
aXN0aW5ndWlzaGVkIGJ5ICdhJywgYnV0CisgICAgICAgIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGRpc3Rpbmd1aXNoZXMgdGhlbS4KKworICAgICAgICBTaW5jZSB3ZSBoYXZlIGRvbmUgZXZlcnkg
b3RoZXIgc3BsaXQsIHdlIGhhdmUgb25lIHVzZWZ1bCBwcm9wZXJ0eTogd2Uga25vdyB0aGF0IGV2
ZXJ5CisgICAgICAgIHN0YXRlIGluIGV2ZXJ5IHNldCB0cmFuc2l0aW9uIHdpdGggdGhlIGV4YWN0
IHNldCBvZiBjaGFyYWN0ZXJzIHdpdGhpbiB0aGF0IHNldC4KKyAgICAgICAgSWYgdGhhdCB3YXMg
bm90IHRydWUsIHRoZXJlIHdvdWxkIGJlIG9uZSAiZGlzdGluZ3Vpc2hlciIgJ3gnIHRoYXQgY291
bGQgc3BpdCB0aGUgc2V0CisgICAgICAgIGludG8gdHdvIHN1YnNldHM6IHRoZSBvbmUgd2l0aCB0
aGUgdHJhbnNpdGlvbiAneCcgYW5kIHRoZSBvbmVzIHdpdGhvdXQuCisKKyAgICAgICAgU2luY2Ug
YWxsIHRoZSB0cmFuc2l0aW9ucyBhcmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIG92ZXJsYXAgYmV0
d2VlbiB0aGUgZGVmaW5lZCB0cmFuc2l0aW9uCisgICAgICAgIGFuZCB0aGUgZmFsbGJhY2sgdHJh
bnNpdGlvbi4gQ29uc2VxdWVudGx5LCB3ZSBjYW4gdXNlIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGFzIGEgd2hvbGUKKyAgICAgICAgdHJhbnNpdGlvbiBhbmQgdXNlIGl0IHRvIGRpc3Rpbmd1aXNo
IHRoZSBzdGF0ZXMuCisKKyAgICAgICAgVGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zIGFyZSBoYW5k
bGVkIGxpa2UgYW55IG90aGVyIHRyYW5zaXRpb24sIHdlIGhhdmUgYSBwYXJ0aXRpb24gb2Ygc3Vj
aAorICAgICAgICB0cmFuc2l0aW9ucyBhbmQgc3BsaXQgYnkgZWFjaCBvZiB0aGVtLiBCVVQsIHdl
IGNhbiBvbmx5IHVzZSB0aGVtIGFmdGVyIGV2ZXJ5IHVuaXF1ZSB0cmFuc2l0aW9uCisgICAgICAg
IGhhcyBiZWVuIGNvdmVyZWQuCisKKyAgICAgICAgVGhpcyB0cmljayBpcyBhbHNvIHdoYXQgbWFr
ZXMgdGhlIG1pbmltaXphdGlvbiBpbXBlcmZlY3Q6IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBt
ZXJnZQorICAgICAgICBzdGF0ZXMgd2l0aCBvdmVybGFwIGluIHRoZWlyIGZhbGxiYWNrIHRyYW5z
aXRpb25zIGJ1dCB3ZSB3b3VsZCBzcGxpdCB0aGVtLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6bWluaW1pemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6ZGVidWdQcmludERv
dCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBLmg6CisgICAgICAgICogY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQU1pbmltaXplci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6c2ltcGxpZnlUcmFu
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1p
emVyOjpQYXJ0aXRpb246OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjptYXJrRWxlbWVudEluQ3VycmVudEdl
bmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmlt
aXplcjo6UGFydGl0aW9uOjpyZWZpbmVHZW5lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OlBhcnRpdGlvbjo6aXRlcmF0ZVNldHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0
aW9uOjppdGVyYXRlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFNaW5pbWl6ZXI6OlBhcnRpdGlvbjo6ZmluZEluU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OlBhcnRpdGlvbjo6c2V0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9u
OjpmaXJzdEVsZW1lbnRJblNldCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjpTZXREZXNjcmlwdG9yOjpp
bmRleEFmdGVyTWFya2VkRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjpTZXREZXNjcmlwdG9yOjplbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6RnVsbEdyYXBo
UGFydGl0aW9uOjpGdWxsR3JhcGhQYXJ0aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6RnVsbEdyYXBoUGFydGl0aW9uOjptYXJrTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpGdWxs
R3JhcGhQYXJ0aXRpb246OnJlZmluZVBhcnRpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6RnVsbEdyYXBoUGFydGl0aW9uOjpzcGxpdEJ5
VW5pcXVlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OkRGQU1pbmltaXplcjo6RnVsbEdyYXBoUGFydGl0aW9uOjpzcGxpdEJ5RmFsbGJhY2tUcmFuc2l0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVy
OjpGdWxsR3JhcGhQYXJ0aXRpb246Om5vZGVSZXBsYWNlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpBY3Rpb25LZXk6OkFjdGlvbktleSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpBY3Rp
b25LZXk6OmlzRW1wdHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBTWluaW1pemVyOjpBY3Rpb25LZXk6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkFjdGlvbktleUhhc2g6Omhh
c2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6
QWN0aW9uS2V5SGFzaDo6ZXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OkRGQU1pbmltaXplcjo6bWluaW1pemUpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L0RGQU1pbmltaXplci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkEuaC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmg6CisgICAg
ICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6Ok5GQVRvREZBOjpjb252ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpzaW1wbGlmeVRyYW5zaXRpb25zKTogRGVsZXRlZC4KKwogMjAx
NS0wNC0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIE9wdGltaXplIGNvbnRlbnQgZXh0ZW5zaW9ucyBpbnRlcnByZXRpbmcgc3BlZWQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNTdmNGMxYTY4NWJkOGFkMzUwOGM3YzgwOTM1NTc1Y2I1N2U5ZDcwOC4uMDAxM2E0YWM3NTc2
YjEyNTNkZmQ4NDkyYWQzYWZhYWMyNTkxZjg0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTAxOSw2ICsxMDE5LDggQEAKIAkJ
MjY5Mzk3MjIxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTM5NzIwMUE0QTQxMkYwMEU4MzQ5RCAvKiBO
RkFOb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMjY5Mzk3MjQxQTRBNUI2NDAwRTgzNDlEIC8qIE5GQS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5Mzk3MjMxQTRBNUI2NDAwRTgzNDlEIC8qIE5G
QS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2
OTM5NzI2MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5Mzk3MjUxQTRBNUZCRDAwRTgzNDlEIC8qIE5GQS5j
cHAgKi87IH07CisJCTI2QTUxN0ZEMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZBNTE3RkIx
QUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgKi87IH07CisJCTI2QTUxN0ZFMUFC
OTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QTUxN0ZDMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5p
bWl6ZXIuaCAqLzsgfTsKIAkJMjZBQTBGOUUxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNl
dWRvRWxlbWVudFR5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxl
bWVudFR5cGVNYXAuY3BwICovOyB9OwogCQkyNkI5OTk4RjE4MDNBRTcyMDBEMDExMjEgLyogUmVn
aXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2Qjk5OThFMTgwM0FFNzIwMEQwMTEyMSAvKiBSZWdpc3RlckFsbG9jYXRvci5oICov
OyB9OwogCQkyNkI5OTk5MTE4MDNCM0M5MDBEMDExMjEgLyogU3RhY2tBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OTkwMTgwM0Iz
QzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5oICovOyB9OwpAQCAtODExNyw2ICs4MTE5LDgg
QEAKIAkJMjY5Mzk3MjAxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTkZBTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNjkzOTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5GQS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjkz
OTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5GQS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2QTUx
N0ZCMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gREZBTWluaW1pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFNaW5pbWl6ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZBQTBGOTkxOEQyOTczRDAwNDE5MzgxIC8qIG1ha2VTZWxl
Y3RvclBzZXVkb0VsZW1lbnRzTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gbWFrZVNlbGVjdG9y
UHNldWRvRWxlbWVudHNNYXAucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QUEw
RjlBMThEMjk3M0QwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmluICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI2QUEwRjlEMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1l
bnRUeXBlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVj
dG9yUHNldWRvRWxlbWVudFR5cGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU1NjEsNiArMTU1NjUsOCBAQAogCQkJCTVDMzkzMDVGMUFBMEY2QTkwMDI5QzgxNiAvKiBE
RkFCeXRlY29kZUNvbXBpbGVyLmggKi8sCiAJCQkJNUMzOTMwNjAxQUEwRjZBOTAwMjlDODE2IC8q
IERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovLAogCQkJCTVDMzkzMDYxMUFBMEY2QTkwMDI5
QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi8sCisJCQkJMjZBNTE3RkIxQUI5MjIz
ODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgKi8sCisJCQkJMjZBNTE3RkMxQUI5MjIzODAw
NjMzNURGIC8qIERGQU1pbmltaXplci5oICovLAogCQkJCTI2NzcyNUY5MUE1QjNBRDkwMDNDMjRE
RCAvKiBERkFOb2RlLmggKi8sCiAJCQkJMjY5Mzk3MjUxQTRBNUZCRDAwRTgzNDlEIC8qIE5GQS5j
cHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRBNUI2NDAwRTgzNDlEIC8qIE5GQS5oICovLApAQCAtMjM2
ODUsNiArMjM2OTEsNyBAQAogCQkJCTMxNkZFMTEyMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExNDBFNkUxREE3MDBCRjYwODggLyog
QW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNURBOEEwRjNBQUVF
NzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkyNkE1MTdGRTFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0JDOERBRDFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFBY2Nlc3NpYmlsaXR5
U29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFEMEVGQUM5MDYwMDlEMENBRiAv
KiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QzU2OENCMTE5REFGRUEwMDA0
MzBDQTIgLyogTWFza0ltYWdlT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzk3LDYg
KzMwNDA0LDcgQEAKIAkJCQlBODMzQzdDQzBBMkNGMDc0MDBENTc2NjQgLyogWExpbmtOYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwMEI5MzE4NzEzQkE4REIzMDAzNUE5NDggLyogWE1MRG9j
dW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBCOTMxODkxM0JBOERCQzAwMzVB
OTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQky
NkE1MTdGRDFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5QzI4MDQ1MTM4REMyNDEwMDc5QjdFMiAvKiBYTUxF
cnJvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJDNDYwQzRFQjJDNjAwODMyODVGIC8q
IFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5j
cHAKaW5kZXggODNjMGIwOWU2NDA4M2RlNDk3OTJmOWJhZjhjNGEzYTQzMmQxOTVkNi4uOGIyNTlh
MDMyMWFlZTg2NDJiZjk5ZTY3MTY1NjA4MDQ3NzU2MDgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuY3BwCkBAIC0xODgsMTIgKzE4OCwyNSBAQCBzdGQ6OmVycm9yX2NvZGUgY29tcGlsZVJ1bGVM
aXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50LCBjb25zdAogICAg
IH0KICNlbmRpZgogCi0jaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElO
RwotICAgIGRvdWJsZSBkZmFCdWlsZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpOwotI2VuZGlmCiAgICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBieXRlY29kZTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG5mYXMuc2l6ZSgpOyArK2kpIHsKKyNpZiBDT05URU5UX0VY
VEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgICAgIGRvdWJsZSBkZmFCdWlsZFRp
bWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworI2VuZGlmCiAgICAgICAg
IERGQSBkZmEgPSBORkFUb0RGQTo6Y29udmVydChuZmFzW2ldKTsKKyNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgICAgIGRvdWJsZSBkZmFCdWlsZFRpbWVF
bmQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAgICAgZGF0YUxvZ0YoIiAg
ICBUaW1lIHNwZW50IGJ1aWxkaW5nIHRoZSBERkEgJXp1OiAlZlxuIiwgaSwgKGRmYUJ1aWxkVGlt
ZUVuZCAtIGRmYUJ1aWxkVGltZVN0YXJ0KSk7CisjZW5kaWYKKworI2lmIENPTlRFTlRfRVhURU5T
SU9OU19QRVJGT1JNQU5DRV9SRVBPUlRJTkcKKyAgICAgICAgZG91YmxlIGRmYU1pbmltaXphdGlv
blRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworI2VuZGlmCisgICAg
ICAgIGRmYS5taW5pbWl6ZSgpOworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJGT1JNQU5DRV9S
RVBPUlRJTkcKKyAgICAgICAgZG91YmxlIGRmYU1pbmltaXphdGlvblRpbWVFbmQgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAgICAgZGF0YUxvZ0YoIiAgICBUaW1lIHNwZW50
IG1pbmltaW5pemluZyB0aGUgREZBICV6dTogJWZcbiIsIGksIChkZmFNaW5pbWl6YXRpb25UaW1l
RW5kIC0gZGZhTWluaW1pemF0aW9uVGltZVN0YXJ0KSk7CisjZW5kaWYKIAogI2lmIENPTlRFTlRf
RVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgICAgICBXVEZMb2dBbHdheXMo
IkRGQSAlenUiLCBpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCmlu
ZGV4IDI2ODZlNWI1OTU0MzgxMzUzZDA0Yzk5MjAzMTZlNWNlNjdiNzkxZTMuLmUzNWYyNjhhNTBj
M2UwNDYwYjVjNjhjMjA1ZjdlMDRlOGZlNTZiZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkRGQU1pbmltaXplci5oIgogI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDYgKzYwLDExIEBAIERGQSYg
REZBOjpvcGVyYXRvcj0oY29uc3QgREZBJiBkZmEpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCit2
b2lkIERGQTo6bWluaW1pemUoKQoreworICAgIG1fcm9vdCA9IERGQU1pbmltaXplcjo6bWluaW1p
emUobV9ub2RlcywgbV9yb290KTsKK30KKwogI2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9N
QUNISU5FX0RFQlVHR0lORwogc3RhdGljIHZvaWQgcHJpbnRSYW5nZShib29sIGZpcnN0UmFuZ2Us
IGNoYXIgcmFuZ2VTdGFydCwgY2hhciByYW5nZUVuZCkKIHsKQEAgLTEyOSw2ICsxMzUsOSBAQCB2
b2lkIERGQTo6ZGVidWdQcmludERvdCgpIGNvbnN0CiAgICAgZGF0YUxvZ0YoIiAgICBub2RlIFtz
aGFwZT1jaXJjbGVdO1xuIik7CiAgICAgZGF0YUxvZ0YoIiAgICB7XG4iKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9u
b2Rlc1tpXS5pc0tpbGxlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGRhdGFM
b2dGKCIgICAgICAgICAlZCBbbGFiZWw9PE5vZGUgJWQiLCBpLCBpKTsKICAgICAgICAgY29uc3Qg
VmVjdG9yPHVpbnQ2NF90PiYgYWN0aW9ucyA9IG1fbm9kZXNbaV0uYWN0aW9uczsKICAgICAgICAg
aWYgKCFhY3Rpb25zLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkEuaAppbmRleCA5MmEyNzA4MmI3NmVmMTc4Y2IxNDFhNmQ1OWVmNzI2NDAwYTRhN2FlLi5jOGNj
ODUxNGQwNGVkOGVmMzRmMGIxMjQxMWRmOWNjOTI2NTM1MjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkEuaApAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
REZBTm9kZSYgbm9kZUF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0K
ICAgICBERkFOb2RlJiBub2RlQXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQog
CisgICAgdm9pZCBtaW5pbWl6ZSgpOworCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01B
Q0hJTkVfREVCVUdHSU5HCiAgICAgdm9pZCBkZWJ1Z1ByaW50RG90KCkgY29uc3Q7CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2Rl
Q29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNv
ZGVDb21waWxlci5jcHAKaW5kZXggYTIzNTg5ODVjNDliMWQxYjRjYmQwYmRlMjg4OTg1N2Q2ZGY1
ODlkYi4uNzdiMThkMjdkNjA1NjdkM2VkMTJiMDJhYTQzODZiNThjNzMwM2FjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5jcHAKQEAgLTk2LDYgKzk2LDEwIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6ZW1p
dFRlcm1pbmF0ZSgpCiB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVOb2RlKHVuc2ln
bmVkIGluZGV4LCBib29sIHJvb3QpCiB7CiAgICAgY29uc3QgREZBTm9kZSYgbm9kZSA9IG1fZGZh
Lm5vZGVBdChpbmRleCk7CisgICAgaWYgKG5vZGUuaXNLaWxsZWQpIHsKKyAgICAgICAgbV9ub2Rl
U3RhcnRPZmZzZXRzW2luZGV4XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFJlY29yZCBzdGFydGluZyBpbmRl
eCBmb3IgbGlua2luZy4KICAgICBpZiAoIXJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWJlY2EwMzM2MDI2
NWRiNWYzYzNlYTNmOTYwMmU3ZmZjZDY3NGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmNwcApAQCAtMCwwICsxLDU0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkFN
aW5pbWl6ZXIuaCIKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKK25hbWVzcGFjZSBE
RkFNaW5pbWl6ZXIgeworCisvLyBzaW1wbGlmeVRyYW5zaXRpb25zKCkgdHJpZXMgdG8gY29sbGFw
c2UgaW5kaXZpZHVhbCB0cmFuc2l0aW9ucyBpbnRvIGZhbGxiYWNrIHRyYW5zaXRpb25zLgorLy8g
QWZ0ZXIgc2ltcGxpZnlUcmFuc2l0aW9ucygpLCB5b3UgY2FuIGFsc28gbWFrZSB0aGUgYXNzdW1w
dGlvbiB0aGF0IGEgZmFsbGJhY2sgdHJhbnNpdGlvbiB0YXJnZXQgd2lsbCBuZXZlciBiZQorLy8g
YWxzbyB0aGUgdGFyZ2V0IG9mIGFuIGluZGl2aWR1YWwgdHJhbnNpdGlvbi4KK3N0YXRpYyB2b2lk
IHNpbXBsaWZ5VHJhbnNpdGlvbnMoVmVjdG9yPERGQU5vZGU+JiBkZmFHcmFwaCkKK3sKKyAgICBm
b3IgKERGQU5vZGUmIGRmYU5vZGUgOiBkZmFHcmFwaCkgeworICAgICAgICBpZiAoIWRmYU5vZGUu
aGFzRmFsbGJhY2tUcmFuc2l0aW9uCisgICAgICAgICAgICAmJiAoKGRmYU5vZGUudHJhbnNpdGlv
bnMuc2l6ZSgpID09IDEyNiAmJiAhZGZhTm9kZS50cmFuc2l0aW9ucy5jb250YWlucygwKSkKKyAg
ICAgICAgICAgICAgICB8fCAoZGZhTm9kZS50cmFuc2l0aW9ucy5zaXplKCkgPT0gMTI3ICYmIGRm
YU5vZGUudHJhbnNpdGlvbnMuY29udGFpbnMoMCkpKSkgeworICAgICAgICAgICAgdW5zaWduZWQg
YmVzdFRhcmdldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGJlc3RUYXJnZXRTY29yZSA9IDA7CisgICAgICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gdGFyZ2V0SGlzdG9ncmFtOwor
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2l0aW9uIDogZGZhTm9kZS50cmFuc2l0
aW9ucykgeworICAgICAgICAgICAgICAgIGlmICghdHJhbnNpdGlvbi5rZXkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgdHJhbnNpdGlv
blRhcmdldCA9IHRyYW5zaXRpb24udmFsdWU7CisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSB0YXJnZXRIaXN0b2dyYW0uYWRkKHRyYW5zaXRpb25UYXJnZXQsIDEpOworICAgICAgICAg
ICAgICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKKworICAgICAgICAgICAgICAgIGlmIChhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID4gYmVzdFRhcmdldFNjb3JlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGJlc3RUYXJnZXRTY29yZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIGJlc3RUYXJnZXQgPSB0cmFuc2l0aW9uVGFyZ2V0OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmVz
dFRhcmdldFNjb3JlLCAiVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSB2YWxpZCB0YXJnZXQg
c2luY2UgaGF2aW5nIHRyYW5zaXRpb25zIGlzIGEgcHJlY29uZGl0aW9uIHRvIGVudGVyIHRoaXMg
cGF0aC4iKTsKKworICAgICAgICAgICAgZGZhTm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24gPSB0
cnVlOworICAgICAgICAgICAgZGZhTm9kZS5mYWxsYmFja1RyYW5zaXRpb24gPSBiZXN0VGFyZ2V0
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9u
KSB7CisgICAgICAgICAgICBWZWN0b3I8dWludDE2X3QsIDEyOD4ga2V5czsKKyAgICAgICAgICAg
IERGQU5vZGVUcmFuc2l0aW9ucyYgdHJhbnNpdGlvbnMgPSBkZmFOb2RlLnRyYW5zaXRpb25zOwor
ICAgICAgICAgICAgY29weUtleXNUb1ZlY3Rvcih0cmFuc2l0aW9ucywga2V5cyk7CisKKyAgICAg
ICAgICAgIGZvciAodWludDE2X3Qga2V5IDoga2V5cykgeworICAgICAgICAgICAgICAgIGF1dG8g
dHJhbnNpdGlvbkl0ZXJhdG9yID0gdHJhbnNpdGlvbnMuZmluZChrZXkpOworICAgICAgICAgICAg
ICAgIGlmICh0cmFuc2l0aW9uSXRlcmF0b3ItPnZhbHVlID09IGRmYU5vZGUuZmFsbGJhY2tUcmFu
c2l0aW9uKQorICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9ucy5yZW1vdmUodHJhbnNpdGlv
bkl0ZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworY2xhc3Mg
UGFydGl0aW9uIHsKK3B1YmxpYzoKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgc2l6ZSkK
KyAgICB7CisgICAgICAgIGlmICghc2l6ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBtX3NldHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplKTsKKyAgICAgICAgbV9wYXJ0aXRp
b25lZEVsZW1lbnRzLnJlc2l6ZShzaXplKTsKKyAgICAgICAgbV9lbGVtZW50UG9zaXRpb25JblBh
cnRpdGlvbmVkTm9kZXMucmVzaXplKHNpemUpOworICAgICAgICBtX2VsZW1lbnRUb1NldE1hcC5y
ZXNpemUoc2l6ZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICAgICAgbV9wYXJ0aXRpb25lZEVsZW1lbnRzW2ldID0gaTsKKyAgICAgICAg
ICAgIG1fZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVzW2ldID0gaTsKKyAgICAgICAg
ICAgIG1fZWxlbWVudFRvU2V0TWFwW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICBtX3NldHMu
YXBwZW5kKFNldERlc2NyaXB0b3IoeyAwLCBzaXplLCAwIH0pKTsKKyAgICB9CisKKyAgICB2b2lk
IG1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbih1bnNpZ25lZCBlbGVtZW50SW5kZXgpCisg
ICAgeworICAgICAgICAvLyBTd2FwIHRoZSBub2RlIHdpdGggdGhlIGZpcnN0IHVubWFya2VkIG5v
ZGUuCisgICAgICAgIHVuc2lnbmVkIHNldEluZGV4ID0gbV9lbGVtZW50VG9TZXRNYXBbZWxlbWVu
dEluZGV4XTsKKyAgICAgICAgU2V0RGVzY3JpcHRvciYgc2V0RGVzY3JpcHRvciA9IG1fc2V0c1tz
ZXRJbmRleF07CisKKyAgICAgICAgdW5zaWduZWQgZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb24g
PSBtX2VsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uZWROb2Rlc1tlbGVtZW50SW5kZXhdOworICAg
ICAgICBBU1NFUlQoZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb24gPj0gc2V0RGVzY3JpcHRvci5z
dGFydCk7CisgICAgICAgIEFTU0VSVChlbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA8IHNldERl
c2NyaXB0b3IuZW5kKCkpOworCisgICAgICAgIHVuc2lnbmVkIGZpcnN0VW5tYXJrZWRFbGVtZW50
UG9zaXRpb25JblBhcnRpdGlvbiA9IHNldERlc2NyaXB0b3IuaW5kZXhBZnRlck1hcmtlZEVsZW1l
bnRzKCk7CisgICAgICAgIEFTU0VSVChmaXJzdFVubWFya2VkRWxlbWVudFBvc2l0aW9uSW5QYXJ0
aXRpb24gPj0gc2V0RGVzY3JpcHRvci5zdGFydCAmJiBmaXJzdFVubWFya2VkRWxlbWVudFBvc2l0
aW9uSW5QYXJ0aXRpb24gPCBzZXREZXNjcmlwdG9yLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGZp
cnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA+PSBmaXJzdFVubWFya2VkRWxl
bWVudFBvc2l0aW9uSW5QYXJ0aXRpb24pOworCisgICAgICAgIC8vIFN3YXAgdGhlIG5vZGVzIGlu
IHRoZSBzZXQuCisgICAgICAgIHVuc2lnbmVkIGZpcnN0VW5tYXJrZWRFbGVtZW50ID0gbV9wYXJ0
aXRpb25lZEVsZW1lbnRzW2ZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbl07
CisgICAgICAgIG1fcGFydGl0aW9uZWRFbGVtZW50c1tmaXJzdFVubWFya2VkRWxlbWVudFBvc2l0
aW9uSW5QYXJ0aXRpb25dID0gZWxlbWVudEluZGV4OworICAgICAgICBtX3BhcnRpdGlvbmVkRWxl
bWVudHNbZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb25dID0gZmlyc3RVbm1hcmtlZEVsZW1lbnQ7
CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZWlyIGluZGV4LgorICAgICAgICBtX2VsZW1lbnRQb3Np
dGlvbkluUGFydGl0aW9uZWROb2Rlc1tlbGVtZW50SW5kZXhdID0gZmlyc3RVbm1hcmtlZEVsZW1l
bnRQb3NpdGlvbkluUGFydGl0aW9uOworICAgICAgICBtX2VsZW1lbnRQb3NpdGlvbkluUGFydGl0
aW9uZWROb2Rlc1tmaXJzdFVubWFya2VkRWxlbWVudF0gPSBlbGVtZW50UG9zaXRpb25JblBhcnRp
dGlvbjsKKworICAgICAgICBpZiAoIXNldERlc2NyaXB0b3IubWFya2VkQ291bnQpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghbV9zZXRzTWFya2VkSW5DdXJyZW50R2VuZXJhdGlvbi5jb250YWlucyhz
ZXRJbmRleCkpOworICAgICAgICAgICAgbV9zZXRzTWFya2VkSW5DdXJyZW50R2VuZXJhdGlvbi5h
cHBlbmQoc2V0SW5kZXgpOworICAgICAgICB9CisgICAgICAgICsrc2V0RGVzY3JpcHRvci5tYXJr
ZWRDb3VudDsKKyAgICB9CisKKyAgICAvLyBUaGUgZnVuY3Rpb24gcGFzc2VkIGFzIGFyZ3VtZW50
IE1VU1Qgbm90IG1vZGlmeSB0aGUgcGFydGl0aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uPgorICAgIHZvaWQgcmVmaW5lR2VuZXJhdGlvbihjb25zdCBGdW5jdGlvbiYgZnVuY3Rp
b24pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHNldEluZGV4IDogbV9zZXRzTWFya2Vk
SW5DdXJyZW50R2VuZXJhdGlvbikgeworICAgICAgICAgICAgU2V0RGVzY3JpcHRvciYgc2V0RGVz
Y3JpcHRvciA9IG1fc2V0c1tzZXRJbmRleF07CisgICAgICAgICAgICBpZiAoc2V0RGVzY3JpcHRv
ci5tYXJrZWRDb3VudCA9PSBzZXREZXNjcmlwdG9yLnNpemUpIHsKKyAgICAgICAgICAgICAgICAv
LyBFdmVyeXRoaW5nIGlzIG1hcmtlZCwgdGhlcmUgaXMgbm90aGluZyB0byByZWZpbmUuCisgICAg
ICAgICAgICAgICAgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCA9IDA7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNldERlc2NyaXB0b3Ig
bmV3U2V0OworICAgICAgICAgICAgYm9vbCBuZXdTZXRJc01hcmtlZFNldCA9IHNldERlc2NyaXB0
b3IubWFya2VkQ291bnQgKiAyIDw9IHNldERlc2NyaXB0b3Iuc2l6ZTsKKyAgICAgICAgICAgIGlm
IChuZXdTZXRJc01hcmtlZFNldCkgeworICAgICAgICAgICAgICAgIC8vIExlc3MgdGhhbiBoYWxm
IG9mIHRoZSBub2RlcyBoYXZlIGJlZW4gbWFya2VkLgorICAgICAgICAgICAgICAgIG5ld1NldCA9
IHsgc2V0RGVzY3JpcHRvci5zdGFydCwgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCwgMCB9Owor
ICAgICAgICAgICAgICAgIHNldERlc2NyaXB0b3Iuc3RhcnQgPSBzZXREZXNjcmlwdG9yLnN0YXJ0
ICsgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIG5ld1NldCA9IHsgc2V0RGVzY3JpcHRvci5zdGFydCArIHNldERlc2NyaXB0b3Iu
bWFya2VkQ291bnQsIHNldERlc2NyaXB0b3Iuc2l6ZSAtIHNldERlc2NyaXB0b3IubWFya2VkQ291
bnQsIDAgfTsKKyAgICAgICAgICAgIHNldERlc2NyaXB0b3Iuc2l6ZSAtPSBuZXdTZXQuc2l6ZTsK
KyAgICAgICAgICAgIHNldERlc2NyaXB0b3IubWFya2VkQ291bnQgPSAwOworCisgICAgICAgICAg
ICB1bnNpZ25lZCBuZXdTZXRJbmRleCA9IG1fc2V0cy5zaXplKCk7CisgICAgICAgICAgICBtX3Nl
dHMuYXBwZW5kKG5ld1NldCk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5ld1Nl
dC5zdGFydDsgaSA8IG5ld1NldC5lbmQoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fZWxlbWVu
dFRvU2V0TWFwW21fcGFydGl0aW9uZWRFbGVtZW50c1tpXV0gPSBuZXdTZXRJbmRleDsKKworICAg
ICAgICAgICAgZnVuY3Rpb24obmV3U2V0SW5kZXgpOworICAgICAgICB9CisgICAgICAgIG1fc2V0
c01hcmtlZEluQ3VycmVudEdlbmVyYXRpb24uY2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBDYWxs
IEZ1bmN0aW9uKCkgb24gZXZlcnkgbm9kZSBvZiBhIGdpdmVuIHN1YnNldC4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGl0ZXJhdGVTZXRzKGNvbnN0IEZ1bmN0aW9u
JiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSA9IG1fc2V0
cy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcmlnaW5hbFNpemU7
ICsraSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKGkpOworICAgIH0KKworICAgIC8vIENhbGwgRnVu
Y3Rpb24oKSBvbiBldmVyeSBub2RlIG9mIGEgZ2l2ZW4gc3Vic2V0LgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0ZVNldCh1bnNpZ25lZCBzZXRJbmRleCwg
Y29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgU2V0RGVzY3JpcHRvciYg
c2V0RGVzY3JpcHRvciA9IG1fc2V0c1tzZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHNldERlc2NyaXB0b3Iuc3RhcnQ7IGkgPCBzZXREZXNjcmlwdG9yLmVuZCgpOyArK2kpCisg
ICAgICAgICAgICBmdW5jdGlvbihtX3BhcnRpdGlvbmVkRWxlbWVudHNbaV0pOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RGdW5jdGlvbj4KKyAgICBzaXplX3QgZmluZEluU2V0
KHVuc2lnbmVkIHNldEluZGV4LCBjb25zdCBUZXN0RnVuY3Rpb24mIHRlc3RGdW5jdGlvbikKKyAg
ICB7CisgICAgICAgIFNldERlc2NyaXB0b3ImIHNldERlc2NyaXB0b3IgPSBtX3NldHNbc2V0SW5k
ZXhdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXREZXNjcmlwdG9yLnN0YXJ0OyBpIDwg
c2V0RGVzY3JpcHRvci5lbmQoKTsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBlbGVtZW50
SW5kZXggPSBtX3BhcnRpdGlvbmVkRWxlbWVudHNbaV07CisgICAgICAgICAgICBpZiAodGVzdEZ1
bmN0aW9uKGVsZW1lbnRJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRJbmRl
eDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV1RGOjpub3RGb3VuZDsKKyAgICB9CisKKyAg
ICAvLyBJbmRleCBvZiB0aGUgc2V0IGNvbnRhaW5pbmcgdGhlIE5vZGUuCisgICAgdW5zaWduZWQg
c2V0SW5kZXgodW5zaWduZWQgZWxlbWVudEluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fZWxlbWVudFRvU2V0TWFwW2VsZW1lbnRJbmRleF07CisgICAgfQorCisgICAgLy8gTm9k
ZUluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQuCisgICAgdW5zaWduZWQgZmly
c3RFbGVtZW50SW5TZXQodW5zaWduZWQgc2V0SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9wYXJ0aXRpb25lZEVsZW1lbnRzW21fc2V0c1tzZXRJbmRleF0uc3RhcnRdOworICAg
IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2V0cy5zaXplKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBTZXREZXNjcmlwdG9y
IHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIHNpemU7CisgICAg
ICAgIHVuc2lnbmVkIG1hcmtlZENvdW50OworCisgICAgICAgIHVuc2lnbmVkIGluZGV4QWZ0ZXJN
YXJrZWRFbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0ICsgbWFya2VkQ291bnQ7IH0KKyAg
ICAgICAgdW5zaWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgKyBzaXplOyB9CisgICAg
fTsKKworICAgIC8vIExpc3Qgb2Ygc2V0cy4KKyAgICBWZWN0b3I8U2V0RGVzY3JpcHRvcj4gbV9z
ZXRzOworCisgICAgLy8gQWxsIHRoZSBlbGVtZW50IGluZGljZXMgc3VjaCB0aGF0IHR3byBlbGVt
ZW50cyBvZiB0aGUgc2FtZSBzZXQgbmV2ZXIgaGF2ZSBhIGVsZW1lbnQgb2YgYSBkaWZmZXJlbnQg
c2V0IGJldHdlZW4gdGhlbS4KKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcGFydGl0aW9uZWRFbGVt
ZW50czsKKworICAgIC8vIE1hcCBlbGVtZW50SW5kZXgtPnBvc2l0aW9uIGluIHRoZSBwYXJ0aXRp
b25lZEVsZW1lbnRzLgorICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9lbGVtZW50UG9zaXRpb25JblBh
cnRpdGlvbmVkTm9kZXM7CisKKyAgICAvLyBNYXAgZWxlbWVudEluZGV4LT5TZXRJbmRleC4KKyAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fZWxlbWVudFRvU2V0TWFwOworCisgICAgLy8gTGlzdCBvZiBz
ZXRzIHdpdGggYW55IG1hcmtlZCBub2RlLiBFYWNoIHNldCBjYW4gYXBwZWFyIGF0IG1vc3Qgb25j
ZS4KKyAgICAvLyBGSVhNRTogZmluZCBhIGdvb2QgaW5saW5lIHNpemUgZm9yIHRoaXMuCisgICAg
VmVjdG9yPHVuc2lnbmVkLCAxMjg+IG1fc2V0c01hcmtlZEluQ3VycmVudEdlbmVyYXRpb247Cit9
OworCitjbGFzcyBGdWxsR3JhcGhQYXJ0aXRpb24geworcHVibGljOgorICAgIEZ1bGxHcmFwaFBh
cnRpdGlvbihjb25zdCBWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoKQorICAgIHsKKyAgICAgICAg
bV9ub2RlUGFydGl0aW9uLmluaXRpYWxpemUoZGZhR3JhcGguc2l6ZSgpKTsKKworICAgICAgICBt
X2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlLnJlc2l6ZShkZmFHcmFwaC5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkJiBjb3VudGVyIDogbV9mbGF0dGVuZWRUcmFu
c2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZSkKKyAgICAgICAgICAgIGNvdW50ZXIgPSAwOworCisg
ICAgICAgIG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZS5y
ZXNpemUoZGZhR3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCYgY291bnRlciA6
IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZSkKKyAgICAg
ICAgICAgIGNvdW50ZXIgPSAwOworCisgICAgICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgaW5j
b21pbmcgdHJhbnNpdGlvbnMgcGVyIG5vZGUuCisgICAgICAgIGZvciAoY29uc3QgREZBTm9kZSYg
ZGZhTm9kZSA6IGRmYUdyYXBoKSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5z
aXRpb24gOiBkZmFOb2RlLnRyYW5zaXRpb25zKQorICAgICAgICAgICAgICAgICsrbV9mbGF0dGVu
ZWRUcmFuc2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZVt0cmFuc2l0aW9uLnZhbHVlXTsKKyAgICAg
ICAgICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikKKyAgICAgICAgICAgICAg
ICArK21fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZVtkZmFO
b2RlLmZhbGxiYWNrVHJhbnNpdGlvbl07CisgICAgICAgIH0KKworICAgICAgICAvLyBBY2N1bXVs
YXRlIHRoZSBvZmZzZXRzLgorICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uQWNjdW11bGF0b3Ig
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mbGF0dGVuZWRUcmFuc2l0
aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgdW5zaWdu
ZWQgdHJhbnNpdGlvbnNDb3VudEZvck5vZGUgPSBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRP
ZmZzZXRQZXJOb2RlW2ldOworICAgICAgICAgICAgbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1N0YXJ0
T2Zmc2V0UGVyTm9kZVtpXSA9IHRyYW5zaXRpb25BY2N1bXVsYXRvcjsKKyAgICAgICAgICAgIHRy
YW5zaXRpb25BY2N1bXVsYXRvciArPSB0cmFuc2l0aW9uc0NvdW50Rm9yTm9kZTsKKyAgICAgICAg
fQorICAgICAgICB1bnNpZ25lZCBmbGF0dGVuZWRUcmFuc2l0aW9uc1NpemUgPSB0cmFuc2l0aW9u
QWNjdW11bGF0b3I7CisKKyAgICAgICAgdW5zaWduZWQgZmFsbGJhY2tUcmFuc2l0aW9uQWNjdW11
bGF0b3IgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mbGF0dGVuZWRG
YWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBmYWxsYmFja1RyYW5zaXRpb25zQ291bnRGb3JOb2RlID0gbV9mbGF0
dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW2ldOworICAgICAgICAg
ICAgbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW2ldID0g
ZmFsbGJhY2tUcmFuc2l0aW9uQWNjdW11bGF0b3I7CisgICAgICAgICAgICBmYWxsYmFja1RyYW5z
aXRpb25BY2N1bXVsYXRvciArPSBmYWxsYmFja1RyYW5zaXRpb25zQ291bnRGb3JOb2RlOworICAg
ICAgICB9CisgICAgICAgIHVuc2lnbmVkIGZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXpl
ID0gZmFsbGJhY2tUcmFuc2l0aW9uQWNjdW11bGF0b3I7CisKKyAgICAgICAgLy8gTmV4dCwgbGV0
J3MgZmlsbCB0aGUgdHJhbnNpdGlvbiB0YWJsZSBhbmQgc2V0IHVwIHRoZSBzaXplIG9mIGVhY2gg
Z3JvdXAgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1Np
emVQZXJOb2RlLnJlc2l6ZShkZmFHcmFwaC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
JiBjb3VudGVyIDogbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1NpemVQZXJOb2RlKQorICAgICAgICAg
ICAgY291bnRlciA9IDA7CisKKyAgICAgICAgbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25z
U2l6ZVBlck5vZGUucmVzaXplKGRmYUdyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQmIGNvdW50ZXIgOiBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplUGVyTm9kZSkK
KyAgICAgICAgICAgIGNvdW50ZXIgPSAwOworCisgICAgICAgIG1fZmxhdHRlbmVkVHJhbnNpdGlv
bnMucmVzaXplKGZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZSk7CisKKyAgICAgICAgbV9mbGF0dGVu
ZWRGYWxsYmFja1RyYW5zaXRpb25zLnJlc2l6ZShmbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25z
U2l6ZSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmYUdyYXBoLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBERkFOb2RlJiBkZmFOb2RlID0gZGZhR3JhcGhb
aV07CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBkZmFOb2RlLnRy
YW5zaXRpb25zKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0Tm9kZUluZGV4ID0g
dHJhbnNpdGlvbi52YWx1ZTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9m
bGF0dGVuZWRUcmFuc2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZVt0YXJnZXROb2RlSW5kZXhdOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnNT
aXplUGVyTm9kZVt0YXJnZXROb2RlSW5kZXhdOworCisgICAgICAgICAgICAgICAgbV9mbGF0dGVu
ZWRUcmFuc2l0aW9uc1tzdGFydCArIG9mZnNldF0gPSBUcmFuc2l0aW9uKHsgaSwgdGFyZ2V0Tm9k
ZUluZGV4LCB0cmFuc2l0aW9uLmtleSB9KTsKKworICAgICAgICAgICAgICAgICsrbV9mbGF0dGVu
ZWRUcmFuc2l0aW9uc1NpemVQZXJOb2RlW3RhcmdldE5vZGVJbmRleF07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZGZhTm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24pIHsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXROb2RlSW5kZXggPSBkZmFOb2RlLmZhbGxiYWNrVHJh
bnNpdGlvbjsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gbV9mbGF0dGVuZWRG
YWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW3RhcmdldE5vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5z
aXRpb25zU2l6ZVBlck5vZGVbdGFyZ2V0Tm9kZUluZGV4XTsKKworICAgICAgICAgICAgICAgIG1f
ZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1tzdGFydCArIG9mZnNldF0gPSBpOworICAgICAg
ICAgICAgICAgICsrbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU2l6ZVBlck5vZGVbdGFy
Z2V0Tm9kZUluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENy
ZWF0ZSB0aGUgaW5pdGlhbCBwYXJ0aXRpb24gb2YgdHJhbnNpdGlvbi4gRWFjaCBjaGFyYWN0ZXIg
ZGlmZmVyZW50aWF0aW5nIGEgdHJhbnNpdG9uCisgICAgICAgIC8vIGZyb20gYW4gb3RoZXIgZ2V0
cyBpdHMgb3duIHNldCBpbiB0aGUgcGFydGl0aW9uLgorICAgICAgICBtX3RyYW5zaXRpb25QYXJ0
aXRpb24uaW5pdGlhbGl6ZShtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zLnNpemUoKSk7CisgICAgICAg
IGZvciAodWludDE2X3QgaSA9IDA7IGkgPCAxMjg7ICsraSkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCB0cmFuc2l0aW9uSW5kZXggPSAwOyB0cmFuc2l0aW9uSW5kZXggPCBtX2ZsYXR0ZW5l
ZFRyYW5zaXRpb25zLnNpemUoKTsgKyt0cmFuc2l0aW9uSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUcmFuc2l0aW9uJiB0cmFuc2l0aW9uID0gbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1t0
cmFuc2l0aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLmNoYXJhY3Rl
ciA9PSBpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25QYXJ0aXRpb24ubWFya0Vs
ZW1lbnRJbkN1cnJlbnRHZW5lcmF0aW9uKHRyYW5zaXRpb25JbmRleCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX3RyYW5zaXRpb25QYXJ0aXRpb24ucmVmaW5lR2VuZXJhdGlvbihbXSh1
bnNpZ25lZCkgeyB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHBhcnRpdGlv
bnMgYXJlIGNvbnNpZGVyZWQgYXMgYSBzcGVjaWFsIHR5cGUgb2YgZGlmZmVyZW50aWF0b3IsIHdl
IGRvbid0IHNwbGl0IHRoZW0gaW5pdGlhbGx5LgorICAgICAgICBtX2ZhbGxiYWNrVHJhbnNpdGlv
blBhcnRpdGlvbi5pbml0aWFsaXplKG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9ucy5zaXpl
KCkpOworICAgIH0KKworICAgIHZvaWQgbWFya05vZGUodW5zaWduZWQgbm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgbV9ub2RlUGFydGl0aW9uLm1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlv
bihub2RlSW5kZXgpOworICAgIH0KKworICAgIHZvaWQgcmVmaW5lUGFydGl0aW9ucygpCisgICAg
eworICAgICAgICBtX25vZGVQYXJ0aXRpb24ucmVmaW5lR2VuZXJhdGlvbihbJl0odW5zaWduZWQg
c21hbGxlc3RTZXRJbmRleCkgeworICAgICAgICAgICAgbV9ub2RlUGFydGl0aW9uLml0ZXJhdGVT
ZXQoc21hbGxlc3RTZXRJbmRleCwgWyZdKHVuc2lnbmVkIG5vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGluY29taW5nVHJhbnNpdGlvbnNTdGFydEZvck5vZGUgPSBtX2ZsYXR0
ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW25vZGVJbmRleF07CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5jb21pbmdUcmFuc2l0aW9uc1NpemVGb3JOb2RlID0gbV9mbGF0dGVu
ZWRUcmFuc2l0aW9uc1NpemVQZXJOb2RlW25vZGVJbmRleF07CisKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5jb21pbmdUcmFuc2l0aW9uc1NpemVGb3JOb2RlOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5tYXJrRWxlbWVu
dEluQ3VycmVudEdlbmVyYXRpb24oaW5jb21pbmdUcmFuc2l0aW9uc1N0YXJ0Rm9yTm9kZSArIGkp
OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5jb21pbmdGYWxsYmFja1RyYW5zaXRpb25z
U3RhcnRGb3JOb2RlID0gbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQ
ZXJOb2RlW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5jb21pbmdGYWxs
YmFja1RyYW5zaXRpb25zU2l6ZUZvck5vZGUgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlv
bnNTaXplUGVyTm9kZVtub2RlSW5kZXhdOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluY29taW5nRmFsbGJhY2tUcmFuc2l0aW9uc1NpemVGb3JOb2RlOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIG1fZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9uLm1hcmtF
bGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbihpbmNvbWluZ0ZhbGxiYWNrVHJhbnNpdGlvbnNTdGFy
dEZvck5vZGUgKyBpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbV90cmFuc2l0aW9u
UGFydGl0aW9uLnJlZmluZUdlbmVyYXRpb24oW10odW5zaWduZWQpIHsgfSk7CisgICAgICAgICAg
ICBtX2ZhbGxiYWNrVHJhbnNpdGlvblBhcnRpdGlvbi5yZWZpbmVHZW5lcmF0aW9uKFtdKHVuc2ln
bmVkKSB7IH0pOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIHNwbGl0QnlVbmlxdWVU
cmFuc2l0aW9ucygpCisgICAgeworICAgICAgICBmb3IgKDsgbV9uZXh0VHJhbnNpdGlvblNldFRv
UHJvY2VzcyA8IG1fdHJhbnNpdGlvblBhcnRpdGlvbi5zaXplKCk7ICsrbV9uZXh0VHJhbnNpdGlv
blNldFRvUHJvY2VzcykgeworICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSBrbm93biBzcGxpdHRl
cnMgdG8gcmVmaW5lIHRoZSBzZXQuCisgICAgICAgICAgICBtX3RyYW5zaXRpb25QYXJ0aXRpb24u
aXRlcmF0ZVNldChtX25leHRUcmFuc2l0aW9uU2V0VG9Qcm9jZXNzLCBbJl0odW5zaWduZWQgdHJh
bnNpdGlvbkluZGV4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc291cmNlTm9kZUluZGV4
ID0gbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1t0cmFuc2l0aW9uSW5kZXhdLnNvdXJjZTsKKyAgICAg
ICAgICAgICAgICBtX25vZGVQYXJ0aXRpb24ubWFya0VsZW1lbnRJbkN1cnJlbnRHZW5lcmF0aW9u
KHNvdXJjZU5vZGVJbmRleCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmVmaW5l
UGFydGl0aW9ucygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzcGxpdEJ5RmFsbGJh
Y2tUcmFuc2l0aW9ucygpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fbmV4
dFRyYW5zaXRpb25TZXRUb1Byb2Nlc3MgfHwgIW1fdHJhbnNpdGlvblBhcnRpdGlvbi5zaXplKCks
ICJXZSBjYW4gb25seSBkaXN0aW5ndWlzaCBub2RlcyBieSBmYWxsYmFjayB0cmFuc2l0aW9uICph
ZnRlciogYWxsIG90aGVyIHRyYW5zaXRpb25zIGFyZSBjb3ZlcmVkLiBEb2luZyBvdGhlcndpc2Ug
d291bGQgYmUgaW5jb3JyZWN0IHNpbmNlIHRoZSB1bmlxdWUgdHJhbnNpdGlvbnMgZnJvbSAyIG5v
ZGVzIGNvdWxkIGNvdmVyIGFsbCBwb3NzaWJsZSB0cmFuc2l0aW9ucy4iKTsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGZhbGxiYWNrVHJhbnNpdGlvblNldEluZGV4ID0gMDsgZmFsbGJhY2tUcmFu
c2l0aW9uU2V0SW5kZXggPCBtX2ZhbGxiYWNrVHJhbnNpdGlvblBhcnRpdGlvbi5zaXplKCk7ICsr
ZmFsbGJhY2tUcmFuc2l0aW9uU2V0SW5kZXgpIHsKKworICAgICAgICAgICAgbV9mYWxsYmFja1Ry
YW5zaXRpb25QYXJ0aXRpb24uaXRlcmF0ZVNldChmYWxsYmFja1RyYW5zaXRpb25TZXRJbmRleCwg
WyZdKHVuc2lnbmVkIHRyYW5zaXRpb25JbmRleCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNvdXJjZU5vZGVJbmRleCA9IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1t0cmFuc2l0
aW9uSW5kZXhdOworICAgICAgICAgICAgICAgIG1fbm9kZVBhcnRpdGlvbi5tYXJrRWxlbWVudElu
Q3VycmVudEdlbmVyYXRpb24oc291cmNlTm9kZUluZGV4KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmVmaW5lUGFydGl0aW9ucygpOworCisgICAgICAgICAgICAvLyBBbnkgbmV3IHNw
bGl0IG5lZWQgdG8gc3ByZWFkIHRvIGFsbCB0aGUgdW5pcXVlIHRyYW5zaXRpb24gdGhhdCBjYW4g
cmVhY2ggdGhlIHR3byBuZXcgc2V0cy4KKyAgICAgICAgICAgIHNwbGl0QnlVbmlxdWVUcmFuc2l0
aW9ucygpOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbm9kZVJlcGxhY2VtZW50
KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNldEluZGV4ID0g
bV9ub2RlUGFydGl0aW9uLnNldEluZGV4KG5vZGVJbmRleCk7CisgICAgICAgIHJldHVybiBtX25v
ZGVQYXJ0aXRpb24uZmlyc3RFbGVtZW50SW5TZXQoc2V0SW5kZXgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBzdHJ1Y3QgVHJhbnNpdGlvbiB7CisgICAgICAgIHVuc2lnbmVkIHNvdXJjZTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0OworICAgICAgICB1aW50MTZfdCBjaGFyYWN0ZXI7CisgICAg
fTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1N0YXJ0T2Zm
c2V0UGVyTm9kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnNT
aXplUGVyTm9kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFu
c2l0aW9uc1N0YXJ0T2Zmc2V0UGVyTm9kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZmxhdHRl
bmVkRmFsbGJhY2tUcmFuc2l0aW9uc1NpemVQZXJOb2RlOworCisgICAgVmVjdG9yPFRyYW5zaXRp
b24+IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnM7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZsYXR0
ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnM7CisKKyAgICBQYXJ0aXRpb24gbV9ub2RlUGFydGl0aW9u
OworICAgIFBhcnRpdGlvbiBtX3RyYW5zaXRpb25QYXJ0aXRpb247CisgICAgUGFydGl0aW9uIG1f
ZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9uOworCisgICAgdW5zaWduZWQgbV9uZXh0VHJhbnNp
dGlvblNldFRvUHJvY2VzcyB7IDAgfTsKK307CisKK3N0cnVjdCBUcmFuc2l0aW9uIHsKKyAgICB1
bnNpZ25lZCBzb3VyY2U7CisgICAgdW5zaWduZWQgdGFyZ2V0OworICAgIHVpbnQxNl90IGNoYXJh
Y3RlcjsKK307CisKK3N0cnVjdCBBY3Rpb25LZXkgeworICAgIGVudW0gRGVsZXRlZFZhbHVlVGFn
IHsgRGVsZXRlZFZhbHVlIH07CisgICAgZXhwbGljaXQgQWN0aW9uS2V5KERlbGV0ZWRWYWx1ZVRh
ZykgeyBzdGF0ZSA9IERlbGV0ZWQ7IH0KKworICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5
VmFsdWUgfTsKKyAgICBleHBsaWNpdCBBY3Rpb25LZXkoRW1wdHlWYWx1ZVRhZykgeyBzdGF0ZSA9
IEVtcHR5OyB9CisKKyAgICBleHBsaWNpdCBBY3Rpb25LZXkoY29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYgYWN0aW9ucykKKyAgICAgICAgOiBhY3Rpb25zKCZhY3Rpb25zKQorICAgICAgICAsIHN0YXRl
KFZhbGlkKQorICAgIHsKKyAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsKKyAgICAgICAgaGFz
aGVyLmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
Q2hhcio+KGFjdGlvbnMuZGF0YSgpKSwgc2l6ZW9mKHVpbnQ2NF90KSAvIHNpemVvZihVQ2hhcikp
OworICAgICAgICBoYXNoID0gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICBib29sIGlzRW1w
dHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IEVtcHR5OyB9CisgICAgYm9vbCBpc0Rl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IERlbGV0ZWQ7IH0KKworICAgIGNv
bnN0IFZlY3Rvcjx1aW50NjRfdD4qIGFjdGlvbnM7CisgICAgdW5zaWduZWQgaGFzaDsKKyAgICBl
bnVtIHsKKyAgICAgICAgVmFsaWQsCisgICAgICAgIEVtcHR5LAorICAgICAgICBEZWxldGVkCisg
ICAgfSBzdGF0ZTsKK307CisKK3N0cnVjdCBBY3Rpb25LZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBBY3Rpb25LZXkmIGFjdGlvbktleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhY3Rpb25LZXkuaGFzaDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBBY3Rpb25LZXkmIGEsIGNvbnN0IEFjdGlvbktleSYgYikKKyAgICB7CisgICAgICAgIHJldHVy
biBhLnN0YXRlID09IGIuc3RhdGUgJiYgKmEuYWN0aW9ucyA9PSAqYi5hY3Rpb25zOworICAgIH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZh
bHNlOworfTsKKworc3RydWN0IEFjdGlvbktleUhhc2hUcmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0
b21IYXNoVHJhaXRzPEFjdGlvbktleT4geworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFs
dWVJc1plcm8gPSB0cnVlOworfTsKKwordW5zaWduZWQgbWluaW1pemUoVmVjdG9yPERGQU5vZGU+
JiBkZmFHcmFwaCwgdW5zaWduZWQgcm9vdCkKK3sKKyAgICBzaW1wbGlmeVRyYW5zaXRpb25zKGRm
YUdyYXBoKTsKKworICAgIEZ1bGxHcmFwaFBhcnRpdGlvbiBmdWxsR3JhcGhQYXJ0aXRpb24oZGZh
R3JhcGgpOworCisgICAgLy8gVW5saWtlIHRyYWRpdGlvbmFsIG1pbmltaXphdGlvbiBmaW5hbCBz
dGF0ZXMgY2FuIGJlIGRpZmZlcmVudGlhdGVkIGJ5IHRoZWlyIGFjdGlvbi4KKyAgICAvLyBJbnN0
ZWFkIG9mIGNyZWF0aW5nIGEgc2luZ2xlIHNldCBmb3IgdGhlIGZpbmFsIHN0YXRlLCB3ZSBwYXJ0
aXRpb24gYnkgYWN0aW9ucyBmcm9tCisgICAgLy8gdGhlIHN0YXJ0LgorICAgIEhhc2hNYXA8QWN0
aW9uS2V5LCBWZWN0b3I8dW5zaWduZWQ+LCBBY3Rpb25LZXlIYXNoLCBBY3Rpb25LZXlIYXNoVHJh
aXRzPiBmaW5hbFN0YXRlczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhR3JhcGgu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmVjdG9yPHVpbnQ2NF90PiYgYWN0aW9ucyA9IGRmYUdy
YXBoW2ldLmFjdGlvbnM7CisgICAgICAgIGlmIChhY3Rpb25zLnNpemUoKSkgeworICAgICAgICAg
ICAgc3RkOjpzb3J0KGFjdGlvbnMuYmVnaW4oKSwgYWN0aW9ucy5lbmQoKSk7CisgICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IGZpbmFsU3RhdGVzLmFkZChBY3Rpb25LZXkoYWN0aW9ucyksIFZl
Y3Rvcjx1bnNpZ25lZD4oKSk7CisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVl
LmFwcGVuZChpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoY29uc3QgYXV0byYgc2xv
dCA6IGZpbmFsU3RhdGVzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgZmluYWxTdGF0ZUluZGV4
IDogc2xvdC52YWx1ZSkKKyAgICAgICAgICAgIGZ1bGxHcmFwaFBhcnRpdGlvbi5tYXJrTm9kZShm
aW5hbFN0YXRlSW5kZXgpOworICAgICAgICBmdWxsR3JhcGhQYXJ0aXRpb24ucmVmaW5lUGFydGl0
aW9ucygpOworICAgIH0KKworICAgIC8vIFVzZSBldmVyeSBzcGxpdHRlciB0byByZWZpbmUgdGhl
IG5vZGUgcGFydGl0aW9ucy4KKyAgICBmdWxsR3JhcGhQYXJ0aXRpb24uc3BsaXRCeVVuaXF1ZVRy
YW5zaXRpb25zKCk7CisKKyAgICAvLyBBdCB0aGlzIHN0YWdlLCB3ZSBrbm93IHRoYXQgbm8gcGFp
ciBvZiBzdGF0ZSBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0
aW9ucy4gVGhleSBjYW4gc3RpbGwKKyAgICAvLyBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZWlyIGZh
bGxiYWNrIHRyYW5zaXRpb25zLgorICAgIC8vCisgICAgLy8gRm9yIGV4YW1wbGUsIHR3byBzdGF0
ZXMgWzEsIDJdIGNhbiBib3RoIGhhdmUgYSB0cmFuc2l0aW9uIG9uICd4JyB0byBhIHN0YXRlIFsz
XSwgYnV0IGVhY2ggaGF2ZSBmYWxsYmFjayB0cmFuc2l0aW9uCisgICAgLy8gdG8gZGlmZmVyZW50
IHN0YXRlcyBbNF0gYW5kIFs1XS4KKyAgICAvLworICAgIC8vIEhlcmUsIHdlIGRpc3Rpbmd1aXNo
IHN1Y2ggY2FzZXMgYW5kIGF0IGVhY2ggc3RhZ2UgcmVmaW5lIHRoZSBuZXcgZGlzY292ZXJlZCBz
ZXRzIGJ5IHRoZWlyIGluZGl2aWR1YWwgdHJhbnNpdGlvbnMuCisgICAgZnVsbEdyYXBoUGFydGl0
aW9uLnNwbGl0QnlGYWxsYmFja1RyYW5zaXRpb25zKCk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+
IHJlbG9jYXRpb25WZWN0b3I7CisgICAgcmVsb2NhdGlvblZlY3Rvci5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGRmYUdyYXBoLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRm
YUdyYXBoLnNpemUoKTsgKytpKQorICAgICAgICByZWxvY2F0aW9uVmVjdG9yLmFwcGVuZChpKTsK
KworICAgIC8vIEtpbGwgdGhlIHVzZWxlc3Mgbm9kZXMgYW5kIGtlZXAgdHJhY2sgb2YgdGhlIG5l
dyBub2RlIHRyYW5zaXRpb25zIHNob3VsZCBwb2ludCB0by4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGZhR3JhcGguc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgcmVwbGFj
ZW1lbnQgPSBmdWxsR3JhcGhQYXJ0aXRpb24ubm9kZVJlcGxhY2VtZW50KGkpOworICAgICAgICBp
ZiAoaSAhPSByZXBsYWNlbWVudCkgeworICAgICAgICAgICAgcmVsb2NhdGlvblZlY3RvcltpXSA9
IHJlcGxhY2VtZW50OworCisgICAgICAgICAgICBERkFOb2RlJiBub2RlID0gZGZhR3JhcGhbaV07
CisgICAgICAgICAgICBub2RlLmFjdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIG5vZGUudHJh
bnNpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9u
ID0gZmFsc2U7CisgICAgICAgICAgICBub2RlLmlzS2lsbGVkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoREZBTm9kZSYgbm9kZSA6IGRmYUdyYXBoKSB7CisgICAgICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG5vZGUudHJhbnNpdGlvbnMpCisgICAgICAgICAgICB0cmFu
c2l0aW9uLnZhbHVlID0gcmVsb2NhdGlvblZlY3Rvclt0cmFuc2l0aW9uLnZhbHVlXTsKKyAgICAg
ICAgaWYgKG5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKQorICAgICAgICAgICAgbm9kZS5mYWxs
YmFja1RyYW5zaXRpb24gPSByZWxvY2F0aW9uVmVjdG9yW25vZGUuZmFsbGJhY2tUcmFuc2l0aW9u
XTsKKyAgICB9CisKKyAgICAvLyBBZnRlciBtaW5pbWl6aW5nLCB0aGVyZSBpcyBubyBndWFyYW50
ZWUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uIGFyZSBzdGlsbCBwb2l0aW5nIHRvIGRpZmZlcmVudCBz
dGF0ZXMuCisgICAgLy8gVGhlIHN0YXRlIHBvaW50ZWQgYnkgb25lIGluZGl2aWR1YWwgdHJhbnNp
dGlvbiBhbmQgdGhlIGZhbGxiYWNrIHN0YXRlcyBtYXkgaGF2ZSBiZWVuIG1lcmdlZC4KKyAgICBz
aW1wbGlmeVRyYW5zaXRpb25zKGRmYUdyYXBoKTsKKworICAgIHJldHVybiByZWxvY2F0aW9uVmVj
dG9yW3Jvb3RdOworfQorCit9IC8vIG5hbWVzcGFjZSBERkFNaW5pbWl6ZXIKK30gLy8gbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTMyM2RiOTY3NjE4MDU3MWNl
ZGRlMTBiMGQ1YWIwYWEzMmQzYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgREZBTWluaW1pemVyX2gKKyNkZWZpbmUgREZBTWluaW1pemVy
X2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlICJERkFOb2Rl
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCituYW1lc3BhY2UgREZBTWluaW1pemVyIHsKK3Vu
c2lnbmVkIG1pbmltaXplKFZlY3RvcjxERkFOb2RlPiYgZGZhR3JhcGgsIHVuc2lnbmVkIHJvb3RO
b2RlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNl
bmRpZiAvLyBERkFNaW5pbWl6ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBTm9kZS5oCmluZGV4IDg0OGE5M2ZjNTI5MTczNzcyMWI3NTY5YmRmMWZlYWFlMjhkNzZkNjEu
LjNjNDUzZDQ4ZGRhNmI0YzNlM2Y5NjZhOGY0MDc3ZWJiODI5ZWQxYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgKQEAgLTQ0LDcgKzQ0LDggQEAgdHlwZWRl
ZiBIYXNoTWFwPHVpbnQxNl90LCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dWludDE2X3Q+OjpIYXNo
LCBXVEY6OlVuc2lnbmVkV2kKIGNsYXNzIERGQU5vZGUgewogcHVibGljOgogICAgIERGQU5vZGVU
cmFuc2l0aW9ucyB0cmFuc2l0aW9uczsKLSAgICBib29sIGhhc0ZhbGxiYWNrVHJhbnNpdGlvbiA9
IGZhbHNlOworICAgIGJvb2wgaGFzRmFsbGJhY2tUcmFuc2l0aW9uIHsgZmFsc2UgfTsKKyAgICBi
b29sIGlzS2lsbGVkIHsgZmFsc2UgfTsKICAgICB1bnNpZ25lZCBmYWxsYmFja1RyYW5zaXRpb247
CiAgICAgVmVjdG9yPHVpbnQ2NF90PiBhY3Rpb25zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKaW5kZXggNjA3MjAxNmQyZTMyMzhjYTIxZWY3NWM5
NDY0NGQ5NmMzOWZkOGUzMC4uZTkxODFjNWQ2ZTk3YTY4YTY2ZjM3YjFjZTQzMjJiZjY5MDc2ZWNk
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcApA
QCAtMzM4LDQ5ICszMzgsNiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBnZXRPckNy
ZWF0ZURGQU5vZGUoY29uc3QgTm9kZUlkU2V0JiBuZmFOb2RlU2V0LCBjbwogICAgIHJldHVybiB1
bmlxdWVOb2RlSWRBZGRSZXN1bHQuaXRlcmF0b3ItPmltcGwoKS0+bV9kZmFOb2RlSWQ7CiB9CiAK
LXN0YXRpYyB2b2lkIHNpbXBsaWZ5VHJhbnNpdGlvbnMoVmVjdG9yPERGQU5vZGU+JiBkZmFHcmFw
aCkKLXsKLSAgICBmb3IgKERGQU5vZGUmIGRmYU5vZGUgOiBkZmFHcmFwaCkgewotICAgICAgICBp
ZiAoIWRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uCi0gICAgICAgICAgICAmJiAoKGRmYU5v
ZGUudHJhbnNpdGlvbnMuc2l6ZSgpID09IDEyNiAmJiAhZGZhTm9kZS50cmFuc2l0aW9ucy5jb250
YWlucygwKSkKLSAgICAgICAgICAgICAgICB8fCAoZGZhTm9kZS50cmFuc2l0aW9ucy5zaXplKCkg
PT0gMTI3ICYmIGRmYU5vZGUudHJhbnNpdGlvbnMuY29udGFpbnMoMCkpKSkgewotICAgICAgICAg
ICAgdW5zaWduZWQgYmVzdFRhcmdldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJlc3RUYXJnZXRTY29yZSA9IDA7Ci0gICAgICAg
ICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gdGFyZ2V0
SGlzdG9ncmFtOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvIHRyYW5zaXRpb24gOiBkZmFO
b2RlLnRyYW5zaXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0cmFuc2l0aW9uLmtleSkK
LSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB0cmFuc2l0aW9uVGFyZ2V0ID0gdHJhbnNpdGlvbi52YWx1ZTsKLSAgICAgICAgICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IHRhcmdldEhpc3RvZ3JhbS5hZGQodHJhbnNpdGlvblRhcmdldCwgMSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAg
ICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOwotCi0gICAgICAgICAgICAgICAg
aWYgKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPiBiZXN0VGFyZ2V0U2NvcmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYmVzdFRhcmdldFNjb3JlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgYmVzdFRhcmdldCA9IHRyYW5zaXRpb25UYXJnZXQ7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShiZXN0VGFyZ2V0U2NvcmUsICJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIHZh
bGlkIHRhcmdldCBzaW5jZSBoYXZpbmcgdHJhbnNpdGlvbnMgaXMgYSBwcmVjb25kaXRpb24gdG8g
ZW50ZXIgdGhpcyBwYXRoLiIpOwotCi0gICAgICAgICAgICBkZmFOb2RlLmhhc0ZhbGxiYWNrVHJh
bnNpdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICBkZmFOb2RlLmZhbGxiYWNrVHJhbnNpdGlvbiA9
IGJlc3RUYXJnZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGZhTm9kZS5oYXNGYWxsYmFj
a1RyYW5zaXRpb24pIHsKLSAgICAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMTI4PiBrZXlzOwot
ICAgICAgICAgICAgREZBTm9kZVRyYW5zaXRpb25zJiB0cmFuc2l0aW9ucyA9IGRmYU5vZGUudHJh
bnNpdGlvbnM7Ci0gICAgICAgICAgICBjb3B5S2V5c1RvVmVjdG9yKHRyYW5zaXRpb25zLCBrZXlz
KTsKLQotICAgICAgICAgICAgZm9yICh1aW50MTZfdCBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byB0cmFuc2l0aW9uSXRlcmF0b3IgPSB0cmFuc2l0aW9ucy5maW5kKGtleSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25JdGVyYXRvci0+dmFsdWUgPT0gZGZhTm9kZS5m
YWxsYmFja1RyYW5zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLnJlbW92
ZSh0cmFuc2l0aW9uSXRlcmF0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
fQotCiBERkEgTkZBVG9ERkE6OmNvbnZlcnQoTkZBJiBuZmEpCiB7CiAgICAgVmVjdG9yPE5GQU5v
ZGU+JiBuZmFHcmFwaCA9IG5mYS5tX25vZGVzOwpAQCAtNDMwLDcgKzM4Nyw2IEBAIERGQSBORkFU
b0RGQTo6Y29udmVydChORkEmIG5mYSkKICAgICAgICAgfQogICAgIH0gd2hpbGUgKCF1bnByb2Nl
c3NlZE5vZGVzLmlzRW1wdHkoKSk7CiAKLSAgICBzaW1wbGlmeVRyYW5zaXRpb25zKGRmYUdyYXBo
KTsKICAgICByZXR1cm4gREZBKFdURjo6bW92ZShkZmFHcmFwaCksIDApOwogfQogCmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGRkYjAwZTE1MjZl
YTVkZjkxMmFkYWZiOTkzODQwY2VlNjgwMjA2Ny4uNjZlNjM5YTliZWVlZWMwZjdlMWY2MjYyY2Vk
NTU4ZWQyMDliM2NjYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA0LTA3ICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBjb25zZXJ2YXRpdmUgREZBIG1p
bmltaXplciBmb3IgdGhlIGNvbnRlbnQgZXh0ZW5zaW9uIG1hdGNoZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzUwMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1RfRik6CisKIDIwMTUtMDQtMDcgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNlbGYgYXMgYSBjb21taXR0ZXIu
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4
dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRF
eHRlbnNpb25zLmNwcAppbmRleCAzYTM2YzgyYTE2MmYxM2MzZGRiZDU5N2ZhNTgwNjdjYjljYjJj
ODMzLi5kN2Q2Yjk4OWRiNWQwZWM0OWVkMjJiMGQyNjY2YTM3YzU5ODAxM2ExIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
cy5jcHAKQEAgLTcyOSw0ICs3MjksMTc4IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
UGF0dGVybk1hdGNoaW5nVGhlRW1wdHlTdHJpbmcpCiAgICAgdGVzdFBhdHRlcm5TdGF0dXMoIigo
Zm9vKT8oKC4pKikoYmFyKSopIiwgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6
UGFyc2VTdGF0dXM6Ok1hdGNoZXNFdmVyeXRoaW5nKTsKIH0KIAorVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBNaW5pbWl6aW5nV2l0aE1vcmVGaW5hbFN0YXRlc1RoYW5Ob25GaW5hbFN0YXRl
cykKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5oW2EtejovL10r
XCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL2Zvby5jb20vXCJ9fSwiCisgICAgICAgICJ7
XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVy
XCI6XCJeaHR0cDovL2Jhci5jb20vXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb28uY29tLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jhci5jb20vIiksIHsgQ29udGVudEV4dGVuc2lv
bnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwOi8vZm9vLmNvbS8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwOi8vYmFyLmNvbS8iKSwgeyB9
KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xv
YWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cHM6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
YnR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYnR0cHM6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2Ii
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd2Via2l0Lm9y
Zy9iIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjdHRwOi8vd2Via2l0
Lm9yZy9CIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiY3R0cHM6Ly93ZWJraXQub3JnL0IiKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRF
eHRlbnNpb25UZXN0LCBTdGF0ZXNXaXRoRGlmZmVyZW50QWN0aW9uc0FyZU5vdFVuaWZpZWQpCit7
CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL3d3dy53ZWJr
aXQub3JnL1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29v
a2llc1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cHM6Ly93d3cud2Via2l0
Lm9yZy9cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tp
ZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmF0dHBzOi8vd3d3LndlYmtpdC5v
cmcvXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHBzOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwczovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3d3dy53ZWJraXQub3JnL2EiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd3d3LndlYmtpdC5v
cmcvQiIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYXR0cHM6Ly93
d3cud2Via2l0Lm9yZy9jIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
Q29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vd3d3LndoYXR3Zy5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93d3cud2hhdHdnLm9yZy8iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwczovL3d3
dy53aGF0d2cub3JnLyIpLCB7IH0pOworfQorCisvLyBUaGUgb3JkZXIgaW4gd2hpY2ggdHJhbnNp
dGlvbnMgZnJvbSB0aGUgcm9vdCB3aWxsIGJlIHByb2Nlc3NlZCBpcyB1bnByZWRpY3RhYmxlLgor
Ly8gVG8gZXhlcmNpc2VzIHRoZSB2YXJpb3VzIG9wdGlvbnMsIHRoaXMgdGVzdCBleGlzdHMgaW4g
dmFyaW91cyB2ZXJzaW9uIGV4Y2hhbmdpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIGZpbmFsIHN0
YXRlLgorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0
aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTEpCit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJh
Y2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJeYS5hXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYi5hXCJ9fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJeYmFjXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYmJjXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeQkNDXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImF6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYWM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmNjOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYzovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImFiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFjYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwor
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgfSk7Cit9CitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEZhbGxiYWNrVHJhbnNpdGlv
bnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMikKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBt
YWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIl5iYWNcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iYmNcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5CQ0NcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5hLmFcIn19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5iLmFcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYXphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJhYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmJjOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiY2M6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFjOi8vd3d3Lndl
YmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiYWJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWNjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
fSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyB9KTsKK30KK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRmFsbGJhY2tUcmFu
c2l0aW9uc1dpdGhEaWZmZXJlbnRpYXRvckRvTm90TWVyZ2UzKQoreworICAgIGF1dG8gYmFja2Vu
ZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEuY1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmIuY1wi
fX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXmJhYVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmJiYVwifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiXkJDQVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmFhOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYmE6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJjYTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYWE6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJhYmE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhY2E6Ly93d3cud2Via2l0Lm9yZy8i
KSwgeyB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImJ6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IH0pOworfQorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBGYWxsYmFj
a1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTQpCit7CisgICAgYXV0byBi
YWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYmFhXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJe
YmJhXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeQkNBXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYS5j
XCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYi5jXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImF6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYWE6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJiYTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmNhOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFh
YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImFiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFjYTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
RmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJOb2RlSW5TYW1lR3JvdXBEb2VzTm90RGlmZmVyZW50
aWF0ZUdyb3VwKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmFh
Y1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEuY1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmIuY1wi
fX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJh
YWM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImFiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiYmFjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJhYmM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9u
czo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiYWFhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWNhOi8vd3d3LndlYmtp
dC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYmFhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgU2ltcGxlRmFsbEJhY2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IxKQor
eworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEuYmMuZGVcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5hLmJkLmVmXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFiYmNjZGU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYmNkZGU6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYmRkZWY6Ly93d3cu
d2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYmRk
ZWY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYWJjZGU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYmRlZjovL3d3dy53ZWJraXQub3JnLyIpLCB7
IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNpbXBsZUZhbGxCYWNrVHJh
bnNpdGlvbkRpZmZlcmVudGlhdG9yMikKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl5jYi5cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5kYi5iXCJ9fV0iKTsKKworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImNiYTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiY2JiOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkYmFi
Oi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJkYnhiOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImNjYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImRkZGQ6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYmJi
Oi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250312</attachid>
            <date>2015-04-07 16:06:10 -0700</date>
            <delta_ts>2015-04-13 15:48:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143501-20150407160520.patch</filename>
            <type>text/plain</type>
            <size>59048</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNDkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ5NDkxZDhjMzVmZjQx
MjY5ZGRjNDdmMmM5NzQzYzQwMzA3Y2ZkOS4uMGMwNDJhMTNjMWViZTc1ZDdiNTdjYWY3ZDJjYzUz
YjcxMTNiMDc5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNS0wNC0wNyAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgY29u
c2VydmF0aXZlIERGQSBtaW5pbWl6ZXIgZm9yIHRoZSBjb250ZW50IGV4dGVuc2lvbiBtYXRjaGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM1MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBzaW1wbGUgbWluaW1pemVyIGZvciBERkEgZ3JhcGhzLiBJdCBpcyBub3QgYSBw
ZXJmZWN0IG1pbmltaXplcjoKKyAgICAgICAgc29tZSBpbmRpc3Rpbmd1aXNoYWJsZSBhcmUgbm90
IG1lcmdlZCwgYnV0IG5vIHR3byBkaXN0aW5ndWlzaGFibGUgYXJlIG1lcmdlZC4KKworICAgICAg
ICBUaGUgZ2VuZXJhbCBpZGVhIG9mIHRoZSBhbGdvcml0aG0gaXMgdG8gcHV0IGFsbCB0aGUgc3Rh
dGUgaW50byBhIHNpbmdsZSBzZXQKKyAgICAgICAgYW5kIHBhcnRpdGlvbiBpdGVyYXRpdmVseSB1
bnRpbCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNwbGl0IGFueSBzdWJzZXQgYnkgdXNpbmcKKyAgICAg
ICAgYSB0cmFuc2l0aW9uIHRvIGRpc3Rpbmd1aXNoIHR3byBzdGF0ZXMuCisKKyAgICAgICAgTGV0
J3MgaWdub3JlIGZhbGxiYWNrIHRyYW5zaXRpb24gZm9yIG5vdywgYW5kIEknbGwgZXhwbGFpbiBs
YXRlciBob3cgdGhleSBmaXQgaW4KKyAgICAgICAgdGhlIGJpZyBwaWN0dXJlLgorCisKKyAgICAg
ICAgVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIGNyZWF0ZSBhIHBhcnRpdGlvbiBvZiB0aGUgdHJh
bnNpdGlvbiBieSBncm91cGluZyBldmVyeQorICAgICAgICB0cmFuc2l0aW9uIGJ5IHRoZSBzYW1l
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSBzdWJzZXQuIFRoaXMgcGFydGl0aW9uIG9mIHRyYW5zaXRp
b25zCisgICAgICAgIGlzIHRoZSBiYXNlIGJ5IHdoaWNoIHdlIHdpbGwgcGFydGl0aW9uIHRoZSBz
dGF0ZXMuCisKKyAgICAgICAgRWFjaCBzdWJzZXQgaW4gdGhlIHRyYW5zaXRpb24gcGFydGl0aW9u
IGlzIGEgImRpc3Rpbmd1aXNoZXIiIGJ5IHdoaWNoIHdlIGNhbgorICAgICAgICBzZXBhcmF0ZSB0
aGUgc3RhdGUgcGFydGl0aW9uLgorCisgICAgICAgIFdlIGFsc28gY3JlYXRlIGEgc2Vjb25kIHBh
cnRpdGlvbiwgdGhlIHN0YXRlIHBhcnRpdGlvbi4gVGhpcyBpcyB3aGVyZSB3ZSBrZWVwCisgICAg
ICAgIGFsbCB0aGUgc3Vic2V0cyBvZiBzdGF0ZXMgdGhhdCBoYXZlIGJlZW4gc3BsaXQgc28gZmFy
LgorCisgICAgICAgIExldCBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGdyYXBoLgorCisgICAg
ICAgICAgICAxIC0tYS0tPiAyCisgICAgICAgICAgICAxIC0tYi0tPiAzCisgICAgICAgICAgICAy
IC0tYy0tPiA0IChmaW5hbCkKKyAgICAgICAgICAgIDMgLS1jLS0+IDQgKGZpbmFsKQorCisgICAg
ICAgIFRoZSBwYXJ0aXRpb24gb2YgdHJhbnNpdGlvbiB3b3VsZCBzdGFydCB3aXRoOgorICAgICAg
ICBTZXQgMDoKKyAgICAgICAgICAgIDEgLS1hLS0+IDIKKyAgICAgICAgU2V0IDE6CisgICAgICAg
ICAgICAxIC0tYi0tPiAzCisgICAgICAgIFNldCAyOgorICAgICAgICAgICAgMiAtLWMtLT4gNAor
ICAgICAgICAgICAgMyAtLWMtLT4gNAorCisgICAgICAgIFRoZSBzdGF0ZSBwYXJ0aXRpb24gd291
bGQgaGF2ZSBhIHNpbmdsZSBzZXQgd2l0aCB7IDEsIDIsIDMsIDQgfS4KKworCisgICAgICAgIE5l
eHQsIHdlIHNwbGl0IHRoZSBzdGF0ZSBwYXJ0aXRpb24gYnkgZGlzdGluZ3Vpc2hhYmxlIGZpbmFs
IHN0YXRlcy4gSW4gdGhpcyBjYXNlLAorICAgICAgICB3ZSB3b3VsZCBzcGxpdCBpdCBpbnRvIHsg
MSwgMiwgMyB9LCB7IDQgfS4KKworICAgICAgICBXZSB0aGVuIHJlZmluZSB0aGUgdHJhbnNpdGlv
biBwYXJ0aXRpb24gYnkgc3BsaXR0aW5nIGl0IGJ5IHRoZSBzdGF0ZXMgdGhhdCBoYXZlCisgICAg
ICAgIGJlZW4gZGlzdGluZ3Vpc2hlZC4gSGVyZSwgdGhlIG9ubHkgdHJhbnNpdGlvbnMgdG8gNCBh
cmUgYm90aCBpcyB0aGUgc2FtZSBzZXQgKHNldCAyKSwKKyAgICAgICAgc28gdGhlIHRyYW5zaXRp
b24gcGFydGl0aW9uIHJlbWFpbnMgdGhlIHNhbWUuCisKKworICAgICAgICBXZSBjYW4gbm93IGV4
ZWN1dGUgdGhlIG1haW4gbG9vcCBvZiB0aGUgYWxnb3JpdGhtOgorICAgICAgICAxKSBTcGxpdCB0
aGUgc3RhdGVzIGJ5IHRoZSB0cmFuc2l0aW9ucy4KKyAgICAgICAgMikgU3BsaXQgdGhlIHRyYW5z
aXRpb25zIHRoYXQgYXJlIG5vdyByZWFjaGluZyB0d28gZGlmZmVyZW50IHNldHMgb2YgdGhlIHN0
YXRlIHBhcnRpdGlvbi4KKyAgICAgICAgMykgQWRkIGFueSBuZXdseSBkaXNjb3ZlcmVkICJkaXN0
aW5ndWlzaGVyIiAodGhlIG9uZXMgd2Ugc3BsaXQpIHRvIHRoZSBsaXN0IG9mICJkaXN0aW5ndWlz
aGVyIgorICAgICAgICAgICB0byBwcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgY2FzZSwgd2Ug
anVzdCBpdGVyYXRlIG92ZXIgdGhlIHBhcnRpdGlvbiBzZXQgaW4gb3JkZXIsIGFuZCBhZGQgbmV3
bHkgc3BsaXQgdHJhbnNpdGlvbnMKKyAgICAgICAgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKwor
ICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2Ugd291bGQgZmlyc3QgdmlzaXQgc2V0IDAuIFdlIGhh
dmUgdGhhdCBzdGF0ZSAxIGlzIGRpc3Rpbmd1aXNoYWJsZQorICAgICAgICBieSAiYSIsIGFuZCB0
aGUgc3RhdGUgcGFydGl0aW9uIHdvdWxkIGJlY29tZSB7IDEgfSwgeyAyLCAzIH0sIHsgNCB9Lgor
CisgICAgICAgIFdlIHRoZW4gdmlzaXQgdHJhbnNpdGlvbiBzZXQgMSwgaXQgZGlzdGluZ3Vpc2hl
cyBzdGF0ZSAxIHdoaWNoIGlzIGFscmVhZHkgYWxvbmUgLT4gbm90aGluZyB0byBkby4KKworICAg
ICAgICBGaW5hbGx5LCB3ZSBwcm9jZXNzIHRoZSB0cmFuc2l0aW9uIHNldCAyLCBpdCBkaXN0aW5n
dWlzaGVzIDIgYW5kIDMsIHRoZXkgYXJlIGFscmVhZHkgaW4gdGhlIHNhbWUKKyAgICAgICAgc2V0
IC0+IG5vdGhpbmcgdG8gZG8uCisKKyAgICAgICAgVGhlcmUgaXMgbm8gbW9yZSB0cmFuc2l0aW9u
IHRvIHByb2Nlc3MsIHdlIGhhdmUgMyB1bmlxdWUgc3Vic2V0cyBhbmQgd2Ugc2hvdWxkIG1lcmdl
IDIgYW5kIDMuCisKKyAgICAgICAgLS0tCisKKyAgICAgICAgT2theSwgbm93IGhvdyB0byB3ZSBm
aXQgZmFsbGJhY2sgdHJhbnNpdGlvbiBpbiB0aGlzIG1vZGVsLiBJbiB0aGlzIHBhdGNoLCBJIHRh
a2UgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBhcHByb2FjaDogd2Ugc3BsaXQgZXZlcnl0aGlu
ZyBhc3N1bWluZyBmYWxsYmFjayB0cmFuc2l0aW9uIGRvIG5vdCBleGlzdCwgdGhlbiB3ZSByZWZp
bmUKKyAgICAgICAgYnkgdGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zLgorCisgICAgICAgIExldCdz
IHRha2UgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgMSAtLWEtLT4gMworICAg
ICAgICAgICAgMiAtLWEtLT4gMworICAgICAgICAgICAgMSAtW2ZdLT4gNAorICAgICAgICAgICAg
MiAtW2ZdLT4gNQorCisgICAgICAgIGFuZCBhdCB0aGlzIHN0YWdlIGluIHRoZSBhbGdvcml0aG0s
IHdlIGhhdmUgdGhlIHNldHMgeyAxLCAyIH0sIHsgMyB9LCB7IDQgfSwgeyA1IH0uCisgICAgICAg
IFRoZSBzdGF0ZXMgMSBhbmQgMiBhcmUgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBk
aXN0aW5ndWlzaGVkIGJ5ICdhJywgYnV0CisgICAgICAgIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGRpc3Rpbmd1aXNoZXMgdGhlbS4KKworICAgICAgICBTaW5jZSB3ZSBoYXZlIGRvbmUgZXZlcnkg
b3RoZXIgc3BsaXQsIHdlIGhhdmUgb25lIHVzZWZ1bCBwcm9wZXJ0eTogd2Uga25vdyB0aGF0IGV2
ZXJ5CisgICAgICAgIHN0YXRlIGluIGV2ZXJ5IHNldCB0cmFuc2l0aW9uIHdpdGggdGhlIGV4YWN0
IHNldCBvZiBjaGFyYWN0ZXJzIHdpdGhpbiB0aGF0IHNldC4KKyAgICAgICAgSWYgdGhhdCB3YXMg
bm90IHRydWUsIHRoZXJlIHdvdWxkIGJlIG9uZSAiZGlzdGluZ3Vpc2hlciIgJ3gnIHRoYXQgY291
bGQgc3BpdCB0aGUgc2V0CisgICAgICAgIGludG8gdHdvIHN1YnNldHM6IHRoZSBvbmUgd2l0aCB0
aGUgdHJhbnNpdGlvbiAneCcgYW5kIHRoZSBvbmVzIHdpdGhvdXQuCisKKyAgICAgICAgU2luY2Ug
YWxsIHRoZSB0cmFuc2l0aW9ucyBhcmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIG92ZXJsYXAgYmV0
d2VlbiB0aGUgZGVmaW5lZCB0cmFuc2l0aW9uCisgICAgICAgIGFuZCB0aGUgZmFsbGJhY2sgdHJh
bnNpdGlvbi4gQ29uc2VxdWVudGx5LCB3ZSBjYW4gdXNlIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGFzIGEgd2hvbGUKKyAgICAgICAgdHJhbnNpdGlvbiBhbmQgdXNlIGl0IHRvIGRpc3Rpbmd1aXNo
IHRoZSBzdGF0ZXMuCisKKyAgICAgICAgVGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zIGFyZSBoYW5k
bGVkIGxpa2UgYW55IG90aGVyIHRyYW5zaXRpb24sIHdlIGhhdmUgYSBwYXJ0aXRpb24gb2Ygc3Vj
aAorICAgICAgICB0cmFuc2l0aW9ucyBhbmQgc3BsaXQgYnkgZWFjaCBvZiB0aGVtLiBCVVQsIHdl
IGNhbiBvbmx5IHVzZSB0aGVtIGFmdGVyIGV2ZXJ5IHVuaXF1ZSB0cmFuc2l0aW9uCisgICAgICAg
IGhhcyBiZWVuIGNvdmVyZWQuCisKKyAgICAgICAgVGhpcyB0cmljayBpcyBhbHNvIHdoYXQgbWFr
ZXMgdGhlIG1pbmltaXphdGlvbiBpbXBlcmZlY3Q6IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBt
ZXJnZQorICAgICAgICBzdGF0ZXMgd2l0aCBvdmVybGFwIGluIHRoZWlyIGZhbGxiYWNrIHRyYW5z
aXRpb25zIGJ1dCB3ZSB3b3VsZCBzcGxpdCB0aGVtLgorCisgICAgICAgIC0tLQorCisgICAgICAg
IEFudHRpIFZhbG1hcmksIFBldHJpIExlaHRpbmVuLCBNYXJpZS1QaWVycmUgQsOpYWwgYW5kIE1h
eGltZSBDcm9jaGVtb3JlIGRlc2VydmUgY3JlZGl0IGZvciB0aGVpciBpbmRpcmVjdAorICAgICAg
ICB3b3JrIG9uIHRoaXMgcGF0Y2guIFRoYW5rcyBmb3IgeW91ciB3b25kZXJmdWwgcGFwZXJzIGFi
b3V0IERGQSBtaW5pbWl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21w
aWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjptaW5pbWl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpzaW1wbGlmeVRyYW5zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OlBhcnRp
dGlvbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBTWluaW1pemVyOjpQYXJ0aXRpb246Om1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0
aXRpb246OnJlZmluZUdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjppdGVyYXRlU2V0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246Oml0ZXJh
dGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXpl
cjo6UGFydGl0aW9uOjpmaW5kSW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjpzZXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246OmZpcnN0RWxl
bWVudEluU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5p
bWl6ZXI6OlBhcnRpdGlvbjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246OlNldERlc2NyaXB0b3I6OmluZGV4QWZ0ZXJN
YXJrZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
TWluaW1pemVyOjpQYXJ0aXRpb246OlNldERlc2NyaXB0b3I6OmVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246
OkZ1bGxHcmFwaFBhcnRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246Om1hcmtOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkZ1bGxHcmFwaFBhcnRp
dGlvbjo6cmVmaW5lUGFydGl0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246OnNwbGl0QnlVbmlxdWVUcmFu
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1p
emVyOjpGdWxsR3JhcGhQYXJ0aXRpb246OnNwbGl0QnlGYWxsYmFja1RyYW5zaXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkZ1bGxHcmFw
aFBhcnRpdGlvbjo6bm9kZVJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkFjdGlvbktleTo6QWN0aW9uS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkFjdGlvbktleTo6aXNF
bXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5p
bWl6ZXI6OkFjdGlvbktleTo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6QWN0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpBY3Rpb25LZXlI
YXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWlu
aW1pemVyOjptaW5pbWl6ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1p
emVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5o
LgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaDoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnNpbXBsaWZ5VHJhbnNpdGlvbnMpOiBEZWxldGVkLgorCiAyMDE1LTA0LTA3ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgT3B0
aW1pemUgY29udGVudCBleHRlbnNpb25zIGludGVycHJldGluZyBzcGVlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1N2Y0YzFh
Njg1YmQ4YWQzNTA4YzdjODA5MzU1NzVjYjU3ZTlkNzA4Li4wMDEzYTRhYzc1NzZiMTI1M2RmZDg0
OTJhZDNhZmFhYzI1OTFmODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDE5LDYgKzEwMTksOCBAQAogCQkyNjkzOTcyMjFB
NEE0MTJGMDBFODM0OUQgLyogTkZBTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjY5Mzk3MjAxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNjkzOTcy
NDFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNjkzOTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjY5Mzk3MjYxQTRB
NUZCRDAwRTgzNDlEIC8qIE5GQS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLzsgfTsK
KwkJMjZBNTE3RkQxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkE1MTdGQjFBQjkyMjM4MDA2
MzM1REYgLyogREZBTWluaW1pemVyLmNwcCAqLzsgfTsKKwkJMjZBNTE3RkUxQUI5MjIzODAwNjMz
NURGIC8qIERGQU1pbmltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICov
OyB9OwogCQkyNkFBMEY5RTE4RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50
VHlwZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNkFBMEY5RDE4RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1h
cC5jcHAgKi87IH07CiAJCTI2Qjk5OThGMTgwM0FFNzIwMEQwMTEyMSAvKiBSZWdpc3RlckFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZC
OTk5OEUxODAzQUU3MjAwRDAxMTIxIC8qIFJlZ2lzdGVyQWxsb2NhdG9yLmggKi87IH07CiAJCTI2
Qjk5OTkxMTgwM0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZCOTk5OTAxODAzQjNDOTAwRDAxMTIx
IC8qIFN0YWNrQWxsb2NhdG9yLmggKi87IH07CkBAIC04MTE3LDYgKzgxMTksOCBAQAogCQkyNjkz
OTcyMDFBNEE0MTJGMDBFODM0OUQgLyogTkZBTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBORkFOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTM5
NzIzMUE0QTVCNjQwMEU4MzQ5RCAvKiBORkEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTkZBLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2OTM5NzI1MUE0QTVG
QkQwMEU4MzQ5RCAvKiBORkEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTkZBLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZBNTE3RkIxQUI5MjIz
ODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBERkFNaW5pbWl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyNkE1MTdGQzFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGQU1pbmltaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNkFBMEY5OTE4RDI5NzNEMDA0MTkzODEgLyogbWFrZVNlbGVjdG9yUHNldWRv
RWxlbWVudHNNYXAucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBtYWtlU2VsZWN0b3JQc2V1ZG9FbGVt
ZW50c01hcC5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZBQTBGOUExOEQyOTcz
RDAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU2VsZWN0
b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0b3JQc2V1ZG9F
bGVtZW50VHlwZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTU2MSw2
ICsxNTU2NSw4IEBACiAJCQkJNUMzOTMwNUYxQUEwRjZBOTAwMjlDODE2IC8qIERGQUJ5dGVjb2Rl
Q29tcGlsZXIuaCAqLywKIAkJCQk1QzM5MzA2MDFBQTBGNkE5MDAyOUM4MTYgLyogREZBQnl0ZWNv
ZGVJbnRlcnByZXRlci5jcHAgKi8sCiAJCQkJNUMzOTMwNjExQUEwRjZBOTAwMjlDODE2IC8qIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaCAqLywKKwkJCQkyNkE1MTdGQjFBQjkyMjM4MDA2MzM1REYg
LyogREZBTWluaW1pemVyLmNwcCAqLywKKwkJCQkyNkE1MTdGQzFBQjkyMjM4MDA2MzM1REYgLyog
REZBTWluaW1pemVyLmggKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5v
ZGUuaCAqLywKIAkJCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLywKIAkJ
CQkyNjkzOTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8sCkBAIC0yMzY4NSw2ICsyMzY5
MSw3IEBACiAJCQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcg
LyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2QTUx
N0ZFMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQkM4REFEMUFBQTMwMjIwMEUxQzgwMyAvKiBNZWRpYUFjY2Vzc2liaWxpdHlTb2Z0TGluay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEyQUQwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlv
bkxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZDNTY4Q0IxMTlEQUZFQTAwMDQzMENBMiAvKiBN
YXNrSW1hZ2VPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzAzOTcsNiArMzA0MDQsNyBA
QAogCQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAvKiBYTGlua05hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTAwQjkzMTg3MTNCQThEQjMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwMEI5MzE4OTEzQkE4REJDMDAzNUE5NDggLyogWE1M
RG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2QTUxN0ZEMUFC
OTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBC
OTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTlDMjgwNDUxMzhEQzI0MTAwNzlCN0UyIC8qIFhNTEVycm9ycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAppbmRleCA4
M2MwYjA5ZTY0MDgzZGU0OTc5MmY5YmFmOGM0YTNhNDMyZDE5NWQ2Li44YjI1OWEwMzIxYWVlODY0
MmJmOTllNjcxNjU2MDgwNDc3NTYwODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAKQEAg
LTE4OCwxMiArMTg4LDI1IEBAIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50JiBjbGllbnQsIGNvbnN0CiAgICAgfQogI2VuZGlm
CiAKLSNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0gICAgZG91
YmxlIGRmYUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci0j
ZW5kaWYKICAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbmZhcy5zaXplKCk7ICsraSkgeworI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKKyAgICAgICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0ID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisjZW5kaWYKICAgICAgICAgREZBIGRmYSA9
IE5GQVRvREZBOjpjb252ZXJ0KG5mYXNbaV0pOworI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJG
T1JNQU5DRV9SRVBPUlRJTkcKKyAgICAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgICAgICBkYXRhTG9nRigiICAgIFRpbWUgc3Bl
bnQgYnVpbGRpbmcgdGhlIERGQSAlenU6ICVmXG4iLCBpLCAoZGZhQnVpbGRUaW1lRW5kIC0gZGZh
QnVpbGRUaW1lU3RhcnQpKTsKKyNlbmRpZgorCisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZP
Uk1BTkNFX1JFUE9SVElORworICAgICAgICBkb3VibGUgZGZhTWluaW1pemF0aW9uVGltZVN0YXJ0
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisjZW5kaWYKKyAgICAgICAgZGZhLm1p
bmltaXplKCk7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwor
ICAgICAgICBkb3VibGUgZGZhTWluaW1pemF0aW9uVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgICAgICBkYXRhTG9nRigiICAgIFRpbWUgc3BlbnQgbWluaW1pbml6
aW5nIHRoZSBERkEgJXp1OiAlZlxuIiwgaSwgKGRmYU1pbmltaXphdGlvblRpbWVFbmQgLSBkZmFN
aW5pbWl6YXRpb25UaW1lU3RhcnQpKTsKKyNlbmRpZgogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiREZBICV6dSIs
IGkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKaW5kZXggMjY4NmU1
YjU5NTQzODEzNTNkMDRjOTkyMDMxNmU1Y2U2N2I3OTFlMy4uZTM1ZjI2OGE1MGMzZTA0NjBiNWM2
OGMyMDVmN2UwNGU4ZmU1NmJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkEuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogCisjaW5jbHVkZSAiREZBTWluaW1pemVyLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksNiArNjAsMTEgQEAgREZBJiBERkE6Om9wZXJh
dG9yPShjb25zdCBERkEmIGRmYSkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK3ZvaWQgREZBOjpt
aW5pbWl6ZSgpCit7CisgICAgbV9yb290ID0gREZBTWluaW1pemVyOjptaW5pbWl6ZShtX25vZGVz
LCBtX3Jvb3QpOworfQorCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVC
VUdHSU5HCiBzdGF0aWMgdm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5n
ZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQogewpAQCAtMTI5LDYgKzEzNSw5IEBAIHZvaWQgREZBOjpk
ZWJ1Z1ByaW50RG90KCkgY29uc3QKICAgICBkYXRhTG9nRigiICAgIG5vZGUgW3NoYXBlPWNpcmNs
ZV07XG4iKTsKICAgICBkYXRhTG9nRigiICAgIHtcbiIpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVzW2ldLmlz
S2lsbGVkKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgZGF0YUxvZ0YoIiAgICAg
ICAgICVkIFtsYWJlbD08Tm9kZSAlZCIsIGksIGkpOwogICAgICAgICBjb25zdCBWZWN0b3I8dWlu
dDY0X3Q+JiBhY3Rpb25zID0gbV9ub2Rlc1tpXS5hY3Rpb25zOwogICAgICAgICBpZiAoIWFjdGlv
bnMuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkEuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCmluZGV4
IDkyYTI3MDgyYjc2ZWYxNzhjYjE0MWE2ZDU5ZWY3MjY0MDBhNGE3YWUuLmM4Y2M4NTE0ZDA0ZWQ4
ZWYzNGYwYjEyNDExZGY5Y2M5MjY1MzUyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQS5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBERkFOb2RlJiBu
b2RlQXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQogICAgIERGQU5v
ZGUmIG5vZGVBdCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX25vZGVzW2ldOyB9CiAKKyAgICB2b2lk
IG1pbmltaXplKCk7CisKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJV
R0dJTkcKICAgICB2b2lkIGRlYnVnUHJpbnREb3QoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVy
LmNwcAppbmRleCBhMjM1ODk4NWM0OWIxZDFiNGNiZDBiZGUyODg5ODU3ZDZkZjU4OWRiLi43N2Ix
OGQyN2Q2MDU2N2QzZWQxMmIwMmFhNDM4NmI1OGM3MzAzYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcApA
QCAtOTYsNiArOTYsMTAgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRl
KCkKIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZU5vZGUodW5zaWduZWQgaW5kZXgs
IGJvb2wgcm9vdCkKIHsKICAgICBjb25zdCBERkFOb2RlJiBub2RlID0gbV9kZmEubm9kZUF0KGlu
ZGV4KTsKKyAgICBpZiAobm9kZS5pc0tpbGxlZCkgeworICAgICAgICBtX25vZGVTdGFydE9mZnNl
dHNbaW5kZXhdID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCiAgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZvciBsaW5r
aW5nLgogICAgIGlmICghcm9vdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQU1pbmltaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9ERkFNaW5pbWl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhYmVjYTAzMzYwMjY1ZGI1ZjNjM2Vh
M2Y5NjAyZTdmZmNkNjc0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuY3BwCkBAIC0wLDAgKzEsNTQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGQU1pbmltaXplci5o
IgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0hhc2hlci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworbmFtZXNwYWNlIERGQU1pbmltaXpl
ciB7CisKKy8vIHNpbXBsaWZ5VHJhbnNpdGlvbnMoKSB0cmllcyB0byBjb2xsYXBzZSBpbmRpdmlk
dWFsIHRyYW5zaXRpb25zIGludG8gZmFsbGJhY2sgdHJhbnNpdGlvbnMuCisvLyBBZnRlciBzaW1w
bGlmeVRyYW5zaXRpb25zKCksIHlvdSBjYW4gYWxzbyBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQg
YSBmYWxsYmFjayB0cmFuc2l0aW9uIHRhcmdldCB3aWxsIG5ldmVyIGJlCisvLyBhbHNvIHRoZSB0
YXJnZXQgb2YgYW4gaW5kaXZpZHVhbCB0cmFuc2l0aW9uLgorc3RhdGljIHZvaWQgc2ltcGxpZnlU
cmFuc2l0aW9ucyhWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoKQoreworICAgIGZvciAoREZBTm9k
ZSYgZGZhTm9kZSA6IGRmYUdyYXBoKSB7CisgICAgICAgIGlmICghZGZhTm9kZS5oYXNGYWxsYmFj
a1RyYW5zaXRpb24KKyAgICAgICAgICAgICYmICgoZGZhTm9kZS50cmFuc2l0aW9ucy5zaXplKCkg
PT0gMTI2ICYmICFkZmFOb2RlLnRyYW5zaXRpb25zLmNvbnRhaW5zKDApKQorICAgICAgICAgICAg
ICAgIHx8IChkZmFOb2RlLnRyYW5zaXRpb25zLnNpemUoKSA9PSAxMjcgJiYgZGZhTm9kZS50cmFu
c2l0aW9ucy5jb250YWlucygwKSkpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBiZXN0VGFyZ2V0
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAgICAgdW5z
aWduZWQgYmVzdFRhcmdldFNjb3JlID0gMDsKKyAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0YXJnZXRIaXN0b2dyYW07CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRpb24gOiBkZmFOb2RlLnRyYW5zaXRpb25zKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCF0cmFuc2l0aW9uLmtleSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uVGFyZ2V0ID0g
dHJhbnNpdGlvbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IHRhcmdl
dEhpc3RvZ3JhbS5hZGQodHJhbnNpdGlvblRhcmdldCwgMSk7CisgICAgICAgICAgICAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSsrOworCisgICAgICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPiBiZXN0VGFyZ2V0U2NvcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgYmVzdFRh
cmdldFNjb3JlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYmVzdFRhcmdldCA9IHRyYW5zaXRpb25UYXJnZXQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShiZXN0VGFyZ2V0U2Nv
cmUsICJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIHZhbGlkIHRhcmdldCBzaW5jZSBoYXZp
bmcgdHJhbnNpdGlvbnMgaXMgYSBwcmVjb25kaXRpb24gdG8gZW50ZXIgdGhpcyBwYXRoLiIpOwor
CisgICAgICAgICAgICBkZmFOb2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbiA9IHRydWU7CisgICAg
ICAgICAgICBkZmFOb2RlLmZhbGxiYWNrVHJhbnNpdGlvbiA9IGJlc3RUYXJnZXQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZGZhTm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24pIHsKKyAgICAg
ICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMTI4PiBrZXlzOworICAgICAgICAgICAgREZBTm9kZVRy
YW5zaXRpb25zJiB0cmFuc2l0aW9ucyA9IGRmYU5vZGUudHJhbnNpdGlvbnM7CisgICAgICAgICAg
ICBjb3B5S2V5c1RvVmVjdG9yKHRyYW5zaXRpb25zLCBrZXlzKTsKKworICAgICAgICAgICAgZm9y
ICh1aW50MTZfdCBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAgICAgYXV0byB0cmFuc2l0aW9u
SXRlcmF0b3IgPSB0cmFuc2l0aW9ucy5maW5kKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKHRy
YW5zaXRpb25JdGVyYXRvci0+dmFsdWUgPT0gZGZhTm9kZS5mYWxsYmFja1RyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLnJlbW92ZSh0cmFuc2l0aW9uSXRlcmF0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitjbGFzcyBQYXJ0aXRpb24g
eworcHVibGljOgorICAgIHZvaWQgaW5pdGlhbGl6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKCFzaXplKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2V0cy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOworICAgICAgICBtX3BhcnRpdGlvbmVkRWxlbWVu
dHMucmVzaXplKHNpemUpOworICAgICAgICBtX2VsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uZWRO
b2Rlcy5yZXNpemUoc2l6ZSk7CisgICAgICAgIG1fZWxlbWVudFRvU2V0TWFwLnJlc2l6ZShzaXpl
KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBtX3BhcnRpdGlvbmVkRWxlbWVudHNbaV0gPSBpOworICAgICAgICAgICAgbV9lbGVt
ZW50UG9zaXRpb25JblBhcnRpdGlvbmVkTm9kZXNbaV0gPSBpOworICAgICAgICAgICAgbV9lbGVt
ZW50VG9TZXRNYXBbaV0gPSAwOworICAgICAgICB9CisgICAgICAgIG1fc2V0cy5hcHBlbmQoU2V0
RGVzY3JpcHRvcih7IDAsIHNpemUsIDAgfSkpOworICAgIH0KKworICAgIHZvaWQgbWFya0VsZW1l
bnRJbkN1cnJlbnRHZW5lcmF0aW9uKHVuc2lnbmVkIGVsZW1lbnRJbmRleCkKKyAgICB7CisgICAg
ICAgIC8vIFN3YXAgdGhlIG5vZGUgd2l0aCB0aGUgZmlyc3QgdW5tYXJrZWQgbm9kZS4KKyAgICAg
ICAgdW5zaWduZWQgc2V0SW5kZXggPSBtX2VsZW1lbnRUb1NldE1hcFtlbGVtZW50SW5kZXhdOwor
ICAgICAgICBTZXREZXNjcmlwdG9yJiBzZXREZXNjcmlwdG9yID0gbV9zZXRzW3NldEluZGV4XTsK
KworICAgICAgICB1bnNpZ25lZCBlbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA9IG1fZWxlbWVu
dFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVzW2VsZW1lbnRJbmRleF07CisgICAgICAgIEFTU0VS
VChlbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA+PSBzZXREZXNjcmlwdG9yLnN0YXJ0KTsKKyAg
ICAgICAgQVNTRVJUKGVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uIDwgc2V0RGVzY3JpcHRvci5l
bmQoKSk7CisKKyAgICAgICAgdW5zaWduZWQgZmlyc3RVbm1hcmtlZEVsZW1lbnRQb3NpdGlvbklu
UGFydGl0aW9uID0gc2V0RGVzY3JpcHRvci5pbmRleEFmdGVyTWFya2VkRWxlbWVudHMoKTsKKyAg
ICAgICAgQVNTRVJUKGZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA+PSBz
ZXREZXNjcmlwdG9yLnN0YXJ0ICYmIGZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRp
dGlvbiA8IHNldERlc2NyaXB0b3IuZW5kKCkpOworICAgICAgICBBU1NFUlQoZmlyc3RVbm1hcmtl
ZEVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uID49IGZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRp
b25JblBhcnRpdGlvbik7CisKKyAgICAgICAgLy8gU3dhcCB0aGUgbm9kZXMgaW4gdGhlIHNldC4K
KyAgICAgICAgdW5zaWduZWQgZmlyc3RVbm1hcmtlZEVsZW1lbnQgPSBtX3BhcnRpdGlvbmVkRWxl
bWVudHNbZmlyc3RVbm1hcmtlZEVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uXTsKKyAgICAgICAg
bV9wYXJ0aXRpb25lZEVsZW1lbnRzW2ZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRp
dGlvbl0gPSBlbGVtZW50SW5kZXg7CisgICAgICAgIG1fcGFydGl0aW9uZWRFbGVtZW50c1tlbGVt
ZW50UG9zaXRpb25JblBhcnRpdGlvbl0gPSBmaXJzdFVubWFya2VkRWxlbWVudDsKKworICAgICAg
ICAvLyBVcGRhdGUgdGhlaXIgaW5kZXguCisgICAgICAgIG1fZWxlbWVudFBvc2l0aW9uSW5QYXJ0
aXRpb25lZE5vZGVzW2VsZW1lbnRJbmRleF0gPSBmaXJzdFVubWFya2VkRWxlbWVudFBvc2l0aW9u
SW5QYXJ0aXRpb247CisgICAgICAgIG1fZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVz
W2ZpcnN0VW5tYXJrZWRFbGVtZW50XSA9IGVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uOworCisg
ICAgICAgIGlmICghc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCkgeworICAgICAgICAgICAgQVNT
RVJUKCFtX3NldHNNYXJrZWRJbkN1cnJlbnRHZW5lcmF0aW9uLmNvbnRhaW5zKHNldEluZGV4KSk7
CisgICAgICAgICAgICBtX3NldHNNYXJrZWRJbkN1cnJlbnRHZW5lcmF0aW9uLmFwcGVuZChzZXRJ
bmRleCk7CisgICAgICAgIH0KKyAgICAgICAgKytzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50Owor
ICAgIH0KKworICAgIC8vIFRoZSBmdW5jdGlvbiBwYXNzZWQgYXMgYXJndW1lbnQgTVVTVCBub3Qg
bW9kaWZ5IHRoZSBwYXJ0aXRpb24uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+Cisg
ICAgdm9pZCByZWZpbmVHZW5lcmF0aW9uKGNvbnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgc2V0SW5kZXggOiBtX3NldHNNYXJrZWRJbkN1cnJlbnRH
ZW5lcmF0aW9uKSB7CisgICAgICAgICAgICBTZXREZXNjcmlwdG9yJiBzZXREZXNjcmlwdG9yID0g
bV9zZXRzW3NldEluZGV4XTsKKyAgICAgICAgICAgIGlmIChzZXREZXNjcmlwdG9yLm1hcmtlZENv
dW50ID09IHNldERlc2NyaXB0b3Iuc2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIEV2ZXJ5dGhp
bmcgaXMgbWFya2VkLCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlZmluZS4KKyAgICAgICAgICAgICAg
ICBzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU2V0RGVzY3JpcHRvciBuZXdTZXQ7Cisg
ICAgICAgICAgICBib29sIG5ld1NldElzTWFya2VkU2V0ID0gc2V0RGVzY3JpcHRvci5tYXJrZWRD
b3VudCAqIDIgPD0gc2V0RGVzY3JpcHRvci5zaXplOworICAgICAgICAgICAgaWYgKG5ld1NldElz
TWFya2VkU2V0KSB7CisgICAgICAgICAgICAgICAgLy8gTGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5v
ZGVzIGhhdmUgYmVlbiBtYXJrZWQuCisgICAgICAgICAgICAgICAgbmV3U2V0ID0geyBzZXREZXNj
cmlwdG9yLnN0YXJ0LCBzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50LCAwIH07CisgICAgICAgICAg
ICAgICAgc2V0RGVzY3JpcHRvci5zdGFydCA9IHNldERlc2NyaXB0b3Iuc3RhcnQgKyBzZXREZXNj
cmlwdG9yLm1hcmtlZENvdW50OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bmV3U2V0ID0geyBzZXREZXNjcmlwdG9yLnN0YXJ0ICsgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3Vu
dCwgc2V0RGVzY3JpcHRvci5zaXplIC0gc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCwgMCB9Owor
ICAgICAgICAgICAgc2V0RGVzY3JpcHRvci5zaXplIC09IG5ld1NldC5zaXplOworICAgICAgICAg
ICAgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCA9IDA7CisKKyAgICAgICAgICAgIHVuc2lnbmVk
IG5ld1NldEluZGV4ID0gbV9zZXRzLnNpemUoKTsKKyAgICAgICAgICAgIG1fc2V0cy5hcHBlbmQo
bmV3U2V0KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3U2V0LnN0YXJ0OyBp
IDwgbmV3U2V0LmVuZCgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9lbGVtZW50VG9TZXRNYXBb
bV9wYXJ0aXRpb25lZEVsZW1lbnRzW2ldXSA9IG5ld1NldEluZGV4OworCisgICAgICAgICAgICBm
dW5jdGlvbihuZXdTZXRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgbV9zZXRzTWFya2VkSW5D
dXJyZW50R2VuZXJhdGlvbi5jbGVhcigpOworICAgIH0KKworICAgIC8vIENhbGwgRnVuY3Rpb24o
KSBvbiBldmVyeSBub2RlIG9mIGEgZ2l2ZW4gc3Vic2V0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0ZVNldHMoY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxTaXplID0gbV9zZXRzLnNpemUoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9yaWdpbmFsU2l6ZTsgKytpKQorICAg
ICAgICAgICAgZnVuY3Rpb24oaSk7CisgICAgfQorCisgICAgLy8gQ2FsbCBGdW5jdGlvbigpIG9u
IGV2ZXJ5IG5vZGUgb2YgYSBnaXZlbiBzdWJzZXQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb24+CisgICAgdm9pZCBpdGVyYXRlU2V0KHVuc2lnbmVkIHNldEluZGV4LCBjb25zdCBGdW5j
dGlvbiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBTZXREZXNjcmlwdG9yJiBzZXREZXNjcmlw
dG9yID0gbV9zZXRzW3NldEluZGV4XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0RGVz
Y3JpcHRvci5zdGFydDsgaSA8IHNldERlc2NyaXB0b3IuZW5kKCk7ICsraSkKKyAgICAgICAgICAg
IGZ1bmN0aW9uKG1fcGFydGl0aW9uZWRFbGVtZW50c1tpXSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVGVzdEZ1bmN0aW9uPgorICAgIHNpemVfdCBmaW5kSW5TZXQodW5zaWduZWQg
c2V0SW5kZXgsIGNvbnN0IFRlc3RGdW5jdGlvbiYgdGVzdEZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgU2V0RGVzY3JpcHRvciYgc2V0RGVzY3JpcHRvciA9IG1fc2V0c1tzZXRJbmRleF07CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNldERlc2NyaXB0b3Iuc3RhcnQ7IGkgPCBzZXREZXNjcmlw
dG9yLmVuZCgpOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IG1f
cGFydGl0aW9uZWRFbGVtZW50c1tpXTsKKyAgICAgICAgICAgIGlmICh0ZXN0RnVuY3Rpb24oZWxl
bWVudEluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudEluZGV4OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBXVEY6Om5vdEZvdW5kOworICAgIH0KKworICAgIC8vIEluZGV4
IG9mIHRoZSBzZXQgY29udGFpbmluZyB0aGUgTm9kZS4KKyAgICB1bnNpZ25lZCBzZXRJbmRleCh1
bnNpZ25lZCBlbGVtZW50SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbGVt
ZW50VG9TZXRNYXBbZWxlbWVudEluZGV4XTsKKyAgICB9CisKKyAgICAvLyBOb2RlSW5kZXggb2Yg
dGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldC4KKyAgICB1bnNpZ25lZCBmaXJzdEVsZW1lbnRJ
blNldCh1bnNpZ25lZCBzZXRJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bh
cnRpdGlvbmVkRWxlbWVudHNbbV9zZXRzW3NldEluZGV4XS5zdGFydF07CisgICAgfQorCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zZXRzLnNpemUo
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFNldERlc2NyaXB0b3IgeworICAgICAg
ICB1bnNpZ25lZCBzdGFydDsKKyAgICAgICAgdW5zaWduZWQgc2l6ZTsKKyAgICAgICAgdW5zaWdu
ZWQgbWFya2VkQ291bnQ7CisKKyAgICAgICAgdW5zaWduZWQgaW5kZXhBZnRlck1hcmtlZEVsZW1l
bnRzKCkgY29uc3QgeyByZXR1cm4gc3RhcnQgKyBtYXJrZWRDb3VudDsgfQorICAgICAgICB1bnNp
Z25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBzdGFydCArIHNpemU7IH0KKyAgICB9OworCisgICAg
Ly8gTGlzdCBvZiBzZXRzLgorICAgIFZlY3RvcjxTZXREZXNjcmlwdG9yPiBtX3NldHM7CisKKyAg
ICAvLyBBbGwgdGhlIGVsZW1lbnQgaW5kaWNlcyBzdWNoIHRoYXQgdHdvIGVsZW1lbnRzIG9mIHRo
ZSBzYW1lIHNldCBuZXZlciBoYXZlIGEgZWxlbWVudCBvZiBhIGRpZmZlcmVudCBzZXQgYmV0d2Vl
biB0aGVtLgorICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9wYXJ0aXRpb25lZEVsZW1lbnRzOworCisg
ICAgLy8gTWFwIGVsZW1lbnRJbmRleC0+cG9zaXRpb24gaW4gdGhlIHBhcnRpdGlvbmVkRWxlbWVu
dHMuCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2VsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uZWRO
b2RlczsKKworICAgIC8vIE1hcCBlbGVtZW50SW5kZXgtPlNldEluZGV4LgorICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9lbGVtZW50VG9TZXRNYXA7CisKKyAgICAvLyBMaXN0IG9mIHNldHMgd2l0aCBh
bnkgbWFya2VkIG5vZGUuIEVhY2ggc2V0IGNhbiBhcHBlYXIgYXQgbW9zdCBvbmNlLgorICAgIC8v
IEZJWE1FOiBmaW5kIGEgZ29vZCBpbmxpbmUgc2l6ZSBmb3IgdGhpcy4KKyAgICBWZWN0b3I8dW5z
aWduZWQsIDEyOD4gbV9zZXRzTWFya2VkSW5DdXJyZW50R2VuZXJhdGlvbjsKK307CisKK2NsYXNz
IEZ1bGxHcmFwaFBhcnRpdGlvbiB7CitwdWJsaWM6CisgICAgRnVsbEdyYXBoUGFydGl0aW9uKGNv
bnN0IFZlY3RvcjxERkFOb2RlPiYgZGZhR3JhcGgpCisgICAgeworICAgICAgICBtX25vZGVQYXJ0
aXRpb24uaW5pdGlhbGl6ZShkZmFHcmFwaC5zaXplKCkpOworCisgICAgICAgIG1fZmxhdHRlbmVk
VHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGUucmVzaXplKGRmYUdyYXBoLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQmIGNvdW50ZXIgOiBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3Rh
cnRPZmZzZXRQZXJOb2RlKQorICAgICAgICAgICAgY291bnRlciA9IDA7CisKKyAgICAgICAgbV9m
bGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlLnJlc2l6ZShkZmFH
cmFwaC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkJiBjb3VudGVyIDogbV9mbGF0dGVu
ZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlKQorICAgICAgICAgICAgY291
bnRlciA9IDA7CisKKyAgICAgICAgLy8gQ291bnQgdGhlIG51bWJlciBvZiBpbmNvbWluZyB0cmFu
c2l0aW9ucyBwZXIgbm9kZS4KKyAgICAgICAgZm9yIChjb25zdCBERkFOb2RlJiBkZmFOb2RlIDog
ZGZhR3JhcGgpIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlvbiA6IGRm
YU5vZGUudHJhbnNpdGlvbnMpCisgICAgICAgICAgICAgICAgKyttX2ZsYXR0ZW5lZFRyYW5zaXRp
b25zU3RhcnRPZmZzZXRQZXJOb2RlW3RyYW5zaXRpb24udmFsdWVdOworICAgICAgICAgICAgaWYg
KGRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICsrbV9mbGF0
dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW2RmYU5vZGUuZmFsbGJh
Y2tUcmFuc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFjY3VtdWxhdGUgdGhlIG9m
ZnNldHMuCisgICAgICAgIHVuc2lnbmVkIHRyYW5zaXRpb25BY2N1bXVsYXRvciA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRP
ZmZzZXRQZXJOb2RlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCB0cmFuc2l0
aW9uc0NvdW50Rm9yTm9kZSA9IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5v
ZGVbaV07CisgICAgICAgICAgICBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJO
b2RlW2ldID0gdHJhbnNpdGlvbkFjY3VtdWxhdG9yOworICAgICAgICAgICAgdHJhbnNpdGlvbkFj
Y3VtdWxhdG9yICs9IHRyYW5zaXRpb25zQ291bnRGb3JOb2RlOworICAgICAgICB9CisgICAgICAg
IHVuc2lnbmVkIGZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZSA9IHRyYW5zaXRpb25BY2N1bXVsYXRv
cjsKKworICAgICAgICB1bnNpZ25lZCBmYWxsYmFja1RyYW5zaXRpb25BY2N1bXVsYXRvciA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJh
bnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGZhbGxiYWNrVHJhbnNpdGlvbnNDb3VudEZvck5vZGUgPSBtX2ZsYXR0ZW5lZEZhbGxi
YWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbaV07CisgICAgICAgICAgICBtX2ZsYXR0
ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbaV0gPSBmYWxsYmFja1Ry
YW5zaXRpb25BY2N1bXVsYXRvcjsKKyAgICAgICAgICAgIGZhbGxiYWNrVHJhbnNpdGlvbkFjY3Vt
dWxhdG9yICs9IGZhbGxiYWNrVHJhbnNpdGlvbnNDb3VudEZvck5vZGU7CisgICAgICAgIH0KKyAg
ICAgICAgdW5zaWduZWQgZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1NpemUgPSBmYWxsYmFj
a1RyYW5zaXRpb25BY2N1bXVsYXRvcjsKKworICAgICAgICAvLyBOZXh0LCBsZXQncyBmaWxsIHRo
ZSB0cmFuc2l0aW9uIHRhYmxlIGFuZCBzZXQgdXAgdGhlIHNpemUgb2YgZWFjaCBncm91cCBhdCB0
aGUgc2FtZSB0aW1lLgorICAgICAgICBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZVBlck5vZGUu
cmVzaXplKGRmYUdyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQmIGNvdW50ZXIg
OiBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZVBlck5vZGUpCisgICAgICAgICAgICBjb3VudGVy
ID0gMDsKKworICAgICAgICBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplUGVyTm9k
ZS5yZXNpemUoZGZhR3JhcGguc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCYgY291bnRl
ciA6IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1NpemVQZXJOb2RlKQorICAgICAgICAg
ICAgY291bnRlciA9IDA7CisKKyAgICAgICAgbV9mbGF0dGVuZWRUcmFuc2l0aW9ucy5yZXNpemUo
ZmxhdHRlbmVkVHJhbnNpdGlvbnNTaXplKTsKKworICAgICAgICBtX2ZsYXR0ZW5lZEZhbGxiYWNr
VHJhbnNpdGlvbnMucmVzaXplKGZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplKTsKKwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhR3JhcGguc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGNvbnN0IERGQU5vZGUmIGRmYU5vZGUgPSBkZmFHcmFwaFtpXTsKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNpdGlvbiA6IGRmYU5vZGUudHJhbnNpdGlvbnMp
IHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXROb2RlSW5kZXggPSB0cmFuc2l0aW9u
LnZhbHVlOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBtX2ZsYXR0ZW5lZFRy
YW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW3RhcmdldE5vZGVJbmRleF07CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1NpemVQZXJOb2Rl
W3RhcmdldE5vZGVJbmRleF07CisKKyAgICAgICAgICAgICAgICBtX2ZsYXR0ZW5lZFRyYW5zaXRp
b25zW3N0YXJ0ICsgb2Zmc2V0XSA9IFRyYW5zaXRpb24oeyBpLCB0YXJnZXROb2RlSW5kZXgsIHRy
YW5zaXRpb24ua2V5IH0pOworCisgICAgICAgICAgICAgICAgKyttX2ZsYXR0ZW5lZFRyYW5zaXRp
b25zU2l6ZVBlck5vZGVbdGFyZ2V0Tm9kZUluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldE5vZGVJbmRleCA9IGRmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uOwor
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJh
bnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbdGFyZ2V0Tm9kZUluZGV4XTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXpl
UGVyTm9kZVt0YXJnZXROb2RlSW5kZXhdOworCisgICAgICAgICAgICAgICAgbV9mbGF0dGVuZWRG
YWxsYmFja1RyYW5zaXRpb25zW3N0YXJ0ICsgb2Zmc2V0XSA9IGk7CisgICAgICAgICAgICAgICAg
KyttX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplUGVyTm9kZVt0YXJnZXROb2RlSW5k
ZXhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBp
bml0aWFsIHBhcnRpdGlvbiBvZiB0cmFuc2l0aW9uLiBFYWNoIGNoYXJhY3RlciBkaWZmZXJlbnRp
YXRpbmcgYSB0cmFuc2l0b24KKyAgICAgICAgLy8gZnJvbSBhbiBvdGhlciBnZXRzIGl0cyBvd24g
c2V0IGluIHRoZSBwYXJ0aXRpb24uCisgICAgICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5pbml0
aWFsaXplKG1fZmxhdHRlbmVkVHJhbnNpdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1aW50
MTZfdCBpID0gMDsgaSA8IDEyODsgKytpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRy
YW5zaXRpb25JbmRleCA9IDA7IHRyYW5zaXRpb25JbmRleCA8IG1fZmxhdHRlbmVkVHJhbnNpdGlv
bnMuc2l6ZSgpOyArK3RyYW5zaXRpb25JbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFRy
YW5zaXRpb24mIHRyYW5zaXRpb24gPSBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zW3RyYW5zaXRpb25J
bmRleF07CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24uY2hhcmFjdGVyID09IGkpCisg
ICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5tYXJrRWxlbWVudEluQ3Vy
cmVudEdlbmVyYXRpb24odHJhbnNpdGlvbkluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5yZWZpbmVHZW5lcmF0aW9uKFtdKHVuc2lnbmVkKSB7
IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmFsbGJhY2sgcGFydGl0aW9ucyBhcmUgY29u
c2lkZXJlZCBhcyBhIHNwZWNpYWwgdHlwZSBvZiBkaWZmZXJlbnRpYXRvciwgd2UgZG9uJ3Qgc3Bs
aXQgdGhlbSBpbml0aWFsbHkuCisgICAgICAgIG1fZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9u
LmluaXRpYWxpemUobV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zLnNpemUoKSk7CisgICAg
fQorCisgICAgdm9pZCBtYXJrTm9kZSh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICBtX25vZGVQYXJ0aXRpb24ubWFya0VsZW1lbnRJbkN1cnJlbnRHZW5lcmF0aW9uKG5vZGVJbmRl
eCk7CisgICAgfQorCisgICAgdm9pZCByZWZpbmVQYXJ0aXRpb25zKCkKKyAgICB7CisgICAgICAg
IG1fbm9kZVBhcnRpdGlvbi5yZWZpbmVHZW5lcmF0aW9uKFsmXSh1bnNpZ25lZCBzbWFsbGVzdFNl
dEluZGV4KSB7CisgICAgICAgICAgICBtX25vZGVQYXJ0aXRpb24uaXRlcmF0ZVNldChzbWFsbGVz
dFNldEluZGV4LCBbJl0odW5zaWduZWQgbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW5jb21pbmdUcmFuc2l0aW9uc1N0YXJ0Rm9yTm9kZSA9IG1fZmxhdHRlbmVkVHJhbnNp
dGlvbnNTdGFydE9mZnNldFBlck5vZGVbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbmNvbWluZ1RyYW5zaXRpb25zU2l6ZUZvck5vZGUgPSBtX2ZsYXR0ZW5lZFRyYW5zaXRp
b25zU2l6ZVBlck5vZGVbbm9kZUluZGV4XTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbmNvbWluZ1RyYW5zaXRpb25zU2l6ZUZvck5vZGU7ICsraSkKKyAgICAg
ICAgICAgICAgICAgICAgbV90cmFuc2l0aW9uUGFydGl0aW9uLm1hcmtFbGVtZW50SW5DdXJyZW50
R2VuZXJhdGlvbihpbmNvbWluZ1RyYW5zaXRpb25zU3RhcnRGb3JOb2RlICsgaSk7CisKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbmNvbWluZ0ZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydEZvck5v
ZGUgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbbm9k
ZUluZGV4XTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmNvbWluZ0ZhbGxiYWNrVHJhbnNp
dGlvbnNTaXplRm9yTm9kZSA9IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uc1NpemVQZXJO
b2RlW25vZGVJbmRleF07CisKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5jb21pbmdGYWxsYmFja1RyYW5zaXRpb25zU2l6ZUZvck5vZGU7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgbV9mYWxsYmFja1RyYW5zaXRpb25QYXJ0aXRpb24ubWFya0VsZW1lbnRJbkN1
cnJlbnRHZW5lcmF0aW9uKGluY29taW5nRmFsbGJhY2tUcmFuc2l0aW9uc1N0YXJ0Rm9yTm9kZSAr
IGkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtX3RyYW5zaXRpb25QYXJ0aXRpb24u
cmVmaW5lR2VuZXJhdGlvbihbXSh1bnNpZ25lZCkgeyB9KTsKKyAgICAgICAgICAgIG1fZmFsbGJh
Y2tUcmFuc2l0aW9uUGFydGl0aW9uLnJlZmluZUdlbmVyYXRpb24oW10odW5zaWduZWQpIHsgfSk7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgc3BsaXRCeVVuaXF1ZVRyYW5zaXRpb25z
KCkKKyAgICB7CisgICAgICAgIGZvciAoOyBtX25leHRUcmFuc2l0aW9uU2V0VG9Qcm9jZXNzIDwg
bV90cmFuc2l0aW9uUGFydGl0aW9uLnNpemUoKTsgKyttX25leHRUcmFuc2l0aW9uU2V0VG9Qcm9j
ZXNzKSB7CisgICAgICAgICAgICAvLyBXZSB1c2UgdGhlIGtub3duIHNwbGl0dGVycyB0byByZWZp
bmUgdGhlIHNldC4KKyAgICAgICAgICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5pdGVyYXRlU2V0
KG1fbmV4dFRyYW5zaXRpb25TZXRUb1Byb2Nlc3MsIFsmXSh1bnNpZ25lZCB0cmFuc2l0aW9uSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzb3VyY2VOb2RlSW5kZXggPSBtX2ZsYXR0
ZW5lZFRyYW5zaXRpb25zW3RyYW5zaXRpb25JbmRleF0uc291cmNlOworICAgICAgICAgICAgICAg
IG1fbm9kZVBhcnRpdGlvbi5tYXJrRWxlbWVudEluQ3VycmVudEdlbmVyYXRpb24oc291cmNlTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICByZWZpbmVQYXJ0aXRpb25z
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNwbGl0QnlGYWxsYmFja1RyYW5zaXRp
b25zKCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9uZXh0VHJhbnNpdGlv
blNldFRvUHJvY2VzcyB8fCAhbV90cmFuc2l0aW9uUGFydGl0aW9uLnNpemUoKSwgIldlIGNhbiBv
bmx5IGRpc3Rpbmd1aXNoIG5vZGVzIGJ5IGZhbGxiYWNrIHRyYW5zaXRpb24gKmFmdGVyKiBhbGwg
b3RoZXIgdHJhbnNpdGlvbnMgYXJlIGNvdmVyZWQuIERvaW5nIG90aGVyd2lzZSB3b3VsZCBiZSBp
bmNvcnJlY3Qgc2luY2UgdGhlIHVuaXF1ZSB0cmFuc2l0aW9ucyBmcm9tIDIgbm9kZXMgY291bGQg
Y292ZXIgYWxsIHBvc3NpYmxlIHRyYW5zaXRpb25zLiIpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgZmFsbGJhY2tUcmFuc2l0aW9uU2V0SW5kZXggPSAwOyBmYWxsYmFja1RyYW5zaXRpb25TZXRJ
bmRleCA8IG1fZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9uLnNpemUoKTsgKytmYWxsYmFja1Ry
YW5zaXRpb25TZXRJbmRleCkgeworCisgICAgICAgICAgICBtX2ZhbGxiYWNrVHJhbnNpdGlvblBh
cnRpdGlvbi5pdGVyYXRlU2V0KGZhbGxiYWNrVHJhbnNpdGlvblNldEluZGV4LCBbJl0odW5zaWdu
ZWQgdHJhbnNpdGlvbkluZGV4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc291cmNlTm9k
ZUluZGV4ID0gbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zW3RyYW5zaXRpb25JbmRleF07
CisgICAgICAgICAgICAgICAgbV9ub2RlUGFydGl0aW9uLm1hcmtFbGVtZW50SW5DdXJyZW50R2Vu
ZXJhdGlvbihzb3VyY2VOb2RlSW5kZXgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZWZpbmVQYXJ0aXRpb25zKCk7CisKKyAgICAgICAgICAgIC8vIEFueSBuZXcgc3BsaXQgbmVlZCB0
byBzcHJlYWQgdG8gYWxsIHRoZSB1bmlxdWUgdHJhbnNpdGlvbiB0aGF0IGNhbiByZWFjaCB0aGUg
dHdvIG5ldyBzZXRzLgorICAgICAgICAgICAgc3BsaXRCeVVuaXF1ZVRyYW5zaXRpb25zKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBub2RlUmVwbGFjZW1lbnQodW5zaWduZWQg
bm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2V0SW5kZXggPSBtX25vZGVQYXJ0
aXRpb24uc2V0SW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZVBhcnRpdGlv
bi5maXJzdEVsZW1lbnRJblNldChzZXRJbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
cnVjdCBUcmFuc2l0aW9uIHsKKyAgICAgICAgdW5zaWduZWQgc291cmNlOworICAgICAgICB1bnNp
Z25lZCB0YXJnZXQ7CisgICAgICAgIHVpbnQxNl90IGNoYXJhY3RlcjsKKyAgICB9OworCisgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2Rl
OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mbGF0dGVuZWRUcmFuc2l0aW9uc1NpemVQZXJOb2Rl
OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3Rh
cnRPZmZzZXRQZXJOb2RlOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9mbGF0dGVuZWRGYWxsYmFj
a1RyYW5zaXRpb25zU2l6ZVBlck5vZGU7CisKKyAgICBWZWN0b3I8VHJhbnNpdGlvbj4gbV9mbGF0
dGVuZWRUcmFuc2l0aW9uczsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fZmxhdHRlbmVkRmFsbGJh
Y2tUcmFuc2l0aW9uczsKKworICAgIFBhcnRpdGlvbiBtX25vZGVQYXJ0aXRpb247CisgICAgUGFy
dGl0aW9uIG1fdHJhbnNpdGlvblBhcnRpdGlvbjsKKyAgICBQYXJ0aXRpb24gbV9mYWxsYmFja1Ry
YW5zaXRpb25QYXJ0aXRpb247CisKKyAgICB1bnNpZ25lZCBtX25leHRUcmFuc2l0aW9uU2V0VG9Q
cm9jZXNzIHsgMCB9OworfTsKKworc3RydWN0IFRyYW5zaXRpb24geworICAgIHVuc2lnbmVkIHNv
dXJjZTsKKyAgICB1bnNpZ25lZCB0YXJnZXQ7CisgICAgdWludDE2X3QgY2hhcmFjdGVyOworfTsK
Kworc3RydWN0IEFjdGlvbktleSB7CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVk
VmFsdWUgfTsKKyAgICBleHBsaWNpdCBBY3Rpb25LZXkoRGVsZXRlZFZhbHVlVGFnKSB7IHN0YXRl
ID0gRGVsZXRlZDsgfQorCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9Owor
ICAgIGV4cGxpY2l0IEFjdGlvbktleShFbXB0eVZhbHVlVGFnKSB7IHN0YXRlID0gRW1wdHk7IH0K
KworICAgIGV4cGxpY2l0IEFjdGlvbktleShjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25z
KQorICAgICAgICA6IGFjdGlvbnMoJmFjdGlvbnMpCisgICAgICAgICwgc3RhdGUoVmFsaWQpCisg
ICAgeworICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hh
cmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYWN0
aW9ucy5kYXRhKCkpLCBzaXplb2YodWludDY0X3QpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgICAg
IGhhc2ggPSBoYXNoZXIuaGFzaCgpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eVZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGUgPT0gRW1wdHk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gc3RhdGUgPT0gRGVsZXRlZDsgfQorCisgICAgY29uc3QgVmVjdG9y
PHVpbnQ2NF90PiogYWN0aW9uczsKKyAgICB1bnNpZ25lZCBoYXNoOworICAgIGVudW0geworICAg
ICAgICBWYWxpZCwKKyAgICAgICAgRW1wdHksCisgICAgICAgIERlbGV0ZWQKKyAgICB9IHN0YXRl
OworfTsKKworc3RydWN0IEFjdGlvbktleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEFjdGlvbktleSYgYWN0aW9uS2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjdGlv
bktleS5oYXNoOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFjdGlvbktl
eSYgYSwgY29uc3QgQWN0aW9uS2V5JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuc3RhdGUg
PT0gYi5zdGF0ZSAmJiAqYS5hY3Rpb25zID09ICpiLmFjdGlvbnM7CisgICAgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Cit9Owor
CitzdHJ1Y3QgQWN0aW9uS2V5SGFzaFRyYWl0cyA6IHB1YmxpYyBXVEY6OkN1c3RvbUhhc2hUcmFp
dHM8QWN0aW9uS2V5PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9
IHRydWU7Cit9OworCit1bnNpZ25lZCBtaW5pbWl6ZShWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBo
LCB1bnNpZ25lZCByb290KQoreworICAgIHNpbXBsaWZ5VHJhbnNpdGlvbnMoZGZhR3JhcGgpOwor
CisgICAgRnVsbEdyYXBoUGFydGl0aW9uIGZ1bGxHcmFwaFBhcnRpdGlvbihkZmFHcmFwaCk7CisK
KyAgICAvLyBVbmxpa2UgdHJhZGl0aW9uYWwgbWluaW1pemF0aW9uIGZpbmFsIHN0YXRlcyBjYW4g
YmUgZGlmZmVyZW50aWF0ZWQgYnkgdGhlaXIgYWN0aW9uLgorICAgIC8vIEluc3RlYWQgb2YgY3Jl
YXRpbmcgYSBzaW5nbGUgc2V0IGZvciB0aGUgZmluYWwgc3RhdGUsIHdlIHBhcnRpdGlvbiBieSBh
Y3Rpb25zIGZyb20KKyAgICAvLyB0aGUgc3RhcnQuCisgICAgSGFzaE1hcDxBY3Rpb25LZXksIFZl
Y3Rvcjx1bnNpZ25lZD4sIEFjdGlvbktleUhhc2gsIEFjdGlvbktleUhhc2hUcmFpdHM+IGZpbmFs
U3RhdGVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmFHcmFwaC5zaXplKCk7ICsr
aSkgeworICAgICAgICBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zID0gZGZhR3JhcGhbaV0uYWN0
aW9uczsKKyAgICAgICAgaWYgKGFjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAgICBzdGQ6OnNv
cnQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gZmluYWxTdGF0ZXMuYWRkKEFjdGlvbktleShhY3Rpb25zKSwgVmVjdG9yPHVuc2ln
bmVkPigpKTsKKyAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBzbG90IDogZmluYWxT
dGF0ZXMpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBmaW5hbFN0YXRlSW5kZXggOiBzbG90LnZh
bHVlKQorICAgICAgICAgICAgZnVsbEdyYXBoUGFydGl0aW9uLm1hcmtOb2RlKGZpbmFsU3RhdGVJ
bmRleCk7CisgICAgICAgIGZ1bGxHcmFwaFBhcnRpdGlvbi5yZWZpbmVQYXJ0aXRpb25zKCk7Cisg
ICAgfQorCisgICAgLy8gVXNlIGV2ZXJ5IHNwbGl0dGVyIHRvIHJlZmluZSB0aGUgbm9kZSBwYXJ0
aXRpb25zLgorICAgIGZ1bGxHcmFwaFBhcnRpdGlvbi5zcGxpdEJ5VW5pcXVlVHJhbnNpdGlvbnMo
KTsKKworICAgIC8vIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgdGhhdCBubyBwYWlyIG9mIHN0YXRl
IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25zLiBUaGV5
IGNhbiBzdGlsbAorICAgIC8vIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlaXIgZmFsbGJhY2sgdHJh
bnNpdGlvbnMuCisgICAgLy8KKyAgICAvLyBGb3IgZXhhbXBsZSwgdHdvIHN0YXRlcyBbMSwgMl0g
Y2FuIGJvdGggaGF2ZSBhIHRyYW5zaXRpb24gb24gJ3gnIHRvIGEgc3RhdGUgWzNdLCBidXQgZWFj
aCBoYXZlIGZhbGxiYWNrIHRyYW5zaXRpb24KKyAgICAvLyB0byBkaWZmZXJlbnQgc3RhdGVzIFs0
XSBhbmQgWzVdLgorICAgIC8vCisgICAgLy8gSGVyZSwgd2UgZGlzdGluZ3Vpc2ggc3VjaCBjYXNl
cyBhbmQgYXQgZWFjaCBzdGFnZSByZWZpbmUgdGhlIG5ldyBkaXNjb3ZlcmVkIHNldHMgYnkgdGhl
aXIgaW5kaXZpZHVhbCB0cmFuc2l0aW9ucy4KKyAgICBmdWxsR3JhcGhQYXJ0aXRpb24uc3BsaXRC
eUZhbGxiYWNrVHJhbnNpdGlvbnMoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVsb2NhdGlv
blZlY3RvcjsKKyAgICByZWxvY2F0aW9uVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZGZh
R3JhcGguc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhR3JhcGguc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlbG9jYXRpb25WZWN0b3IuYXBwZW5kKGkpOworCisgICAgLy8g
S2lsbCB0aGUgdXNlbGVzcyBub2RlcyBhbmQga2VlcCB0cmFjayBvZiB0aGUgbmV3IG5vZGUgdHJh
bnNpdGlvbnMgc2hvdWxkIHBvaW50IHRvLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
ZmFHcmFwaC5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCByZXBsYWNlbWVudCA9IGZ1
bGxHcmFwaFBhcnRpdGlvbi5ub2RlUmVwbGFjZW1lbnQoaSk7CisgICAgICAgIGlmIChpICE9IHJl
cGxhY2VtZW50KSB7CisgICAgICAgICAgICByZWxvY2F0aW9uVmVjdG9yW2ldID0gcmVwbGFjZW1l
bnQ7CisKKyAgICAgICAgICAgIERGQU5vZGUmIG5vZGUgPSBkZmFHcmFwaFtpXTsKKyAgICAgICAg
ICAgIG5vZGUuYWN0aW9ucy5jbGVhcigpOworICAgICAgICAgICAgbm9kZS50cmFuc2l0aW9ucy5j
bGVhcigpOworICAgICAgICAgICAgbm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24gPSBmYWxzZTsK
KyAgICAgICAgICAgIG5vZGUuaXNLaWxsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yIChERkFOb2RlJiBub2RlIDogZGZhR3JhcGgpIHsKKyAgICAgICAgZm9yIChhdXRvJiB0
cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykKKyAgICAgICAgICAgIHRyYW5zaXRpb24udmFs
dWUgPSByZWxvY2F0aW9uVmVjdG9yW3RyYW5zaXRpb24udmFsdWVdOworICAgICAgICBpZiAobm9k
ZS5oYXNGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgICAgICBub2RlLmZhbGxiYWNrVHJhbnNp
dGlvbiA9IHJlbG9jYXRpb25WZWN0b3Jbbm9kZS5mYWxsYmFja1RyYW5zaXRpb25dOworICAgIH0K
KworICAgIC8vIEFmdGVyIG1pbmltaXppbmcsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBpbmRpdmlk
dWFsIHRyYW5zaXRpb24gYXJlIHN0aWxsIHBvaXRpbmcgdG8gZGlmZmVyZW50IHN0YXRlcy4KKyAg
ICAvLyBUaGUgc3RhdGUgcG9pbnRlZCBieSBvbmUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uIGFuZCB0
aGUgZmFsbGJhY2sgc3RhdGVzIG1heSBoYXZlIGJlZW4gbWVyZ2VkLgorICAgIHNpbXBsaWZ5VHJh
bnNpdGlvbnMoZGZhR3JhcGgpOworCisgICAgcmV0dXJuIHJlbG9jYXRpb25WZWN0b3Jbcm9vdF07
Cit9CisKK30gLy8gbmFtZXNwYWNlIERGQU1pbmltaXplcgorfSAvLyBuYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQU1pbmltaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhMzIzZGI5Njc2MTgwNTcxY2VkZGUxMGIwZDVh
YjBhYTMyZDNiZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBERkFNaW5pbWl6ZXJfaAorI2RlZmluZSBERkFNaW5pbWl6ZXJfaAorCisjaWYg
RU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkRGQU5vZGUuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBDb250
ZW50RXh0ZW5zaW9ucyB7CisKK25hbWVzcGFjZSBERkFNaW5pbWl6ZXIgewordW5zaWduZWQgbWlu
aW1pemUoVmVjdG9yPERGQU5vZGU+JiBkZmFHcmFwaCwgdW5zaWduZWQgcm9vdE5vZGUpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlmIC8vIERG
QU1pbmltaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9ERkFOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFOb2RlLmgK
aW5kZXggODQ4YTkzZmM1MjkxNzM3NzIxYjc1NjliZGYxZmVhYWUyOGQ3NmQ2MS4uM2M0NTNkNDhk
ZGE2YjRjM2UzZjk2NmE4ZjQwNzdlYmI4MjllZDFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQU5vZGUuaApAQCAtNDQsNyArNDQsOCBAQCB0eXBlZGVmIEhhc2hNYXA8
dWludDE2X3QsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5z
aWduZWRXaQogY2xhc3MgREZBTm9kZSB7CiBwdWJsaWM6CiAgICAgREZBTm9kZVRyYW5zaXRpb25z
IHRyYW5zaXRpb25zOwotICAgIGJvb2wgaGFzRmFsbGJhY2tUcmFuc2l0aW9uID0gZmFsc2U7Cisg
ICAgYm9vbCBoYXNGYWxsYmFja1RyYW5zaXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgaXNLaWxs
ZWQgeyBmYWxzZSB9OwogICAgIHVuc2lnbmVkIGZhbGxiYWNrVHJhbnNpdGlvbjsKICAgICBWZWN0
b3I8dWludDY0X3Q+IGFjdGlvbnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL05GQVRvREZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL05GQVRvREZBLmNwcAppbmRleCA2MDcyMDE2ZDJlMzIzOGNhMjFlZjc1Yzk0NjQ0ZDk2YzM5
ZmQ4ZTMwLi5lOTE4MWM1ZDZlOTdhNjhhNjZmMzdiMWNlNDMyMmJmNjkwNzZlY2Q3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCkBAIC0zMzgsNDkg
KzMzOCw2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldE9yQ3JlYXRlREZBTm9k
ZShjb25zdCBOb2RlSWRTZXQmIG5mYU5vZGVTZXQsIGNvCiAgICAgcmV0dXJuIHVuaXF1ZU5vZGVJ
ZEFkZFJlc3VsdC5pdGVyYXRvci0+aW1wbCgpLT5tX2RmYU5vZGVJZDsKIH0KIAotc3RhdGljIHZv
aWQgc2ltcGxpZnlUcmFuc2l0aW9ucyhWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoKQotewotICAg
IGZvciAoREZBTm9kZSYgZGZhTm9kZSA6IGRmYUdyYXBoKSB7Ci0gICAgICAgIGlmICghZGZhTm9k
ZS5oYXNGYWxsYmFja1RyYW5zaXRpb24KLSAgICAgICAgICAgICYmICgoZGZhTm9kZS50cmFuc2l0
aW9ucy5zaXplKCkgPT0gMTI2ICYmICFkZmFOb2RlLnRyYW5zaXRpb25zLmNvbnRhaW5zKDApKQot
ICAgICAgICAgICAgICAgIHx8IChkZmFOb2RlLnRyYW5zaXRpb25zLnNpemUoKSA9PSAxMjcgJiYg
ZGZhTm9kZS50cmFuc2l0aW9ucy5jb250YWlucygwKSkpKSB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBiZXN0VGFyZ2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAg
ICAgICAgICAgdW5zaWduZWQgYmVzdFRhcmdldFNjb3JlID0gMDsKLSAgICAgICAgICAgIEhhc2hN
YXA8dW5zaWduZWQsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0YXJnZXRIaXN0b2dyYW07
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8gdHJhbnNpdGlvbiA6IGRmYU5vZGUudHJhbnNp
dGlvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRyYW5zaXRpb24ua2V5KQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRyYW5zaXRp
b25UYXJnZXQgPSB0cmFuc2l0aW9uLnZhbHVlOwotICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gdGFyZ2V0SGlzdG9ncmFtLmFkZCh0cmFuc2l0aW9uVGFyZ2V0LCAxKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA+IGJlc3RUYXJnZXRTY29yZSkgewotICAgICAgICAgICAgICAg
ICAgICBiZXN0VGFyZ2V0U2NvcmUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICBiZXN0VGFyZ2V0ID0gdHJhbnNpdGlvblRhcmdldDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJl
c3RUYXJnZXRTY29yZSwgIlRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgdmFsaWQgdGFyZ2V0
IHNpbmNlIGhhdmluZyB0cmFuc2l0aW9ucyBpcyBhIHByZWNvbmRpdGlvbiB0byBlbnRlciB0aGlz
IHBhdGguIik7Ci0KLSAgICAgICAgICAgIGRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0aW9uID0g
dHJ1ZTsKLSAgICAgICAgICAgIGRmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uID0gYmVzdFRhcmdl
dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNrVHJhbnNpdGlv
bikgewotICAgICAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAxMjg+IGtleXM7Ci0gICAgICAgICAg
ICBERkFOb2RlVHJhbnNpdGlvbnMmIHRyYW5zaXRpb25zID0gZGZhTm9kZS50cmFuc2l0aW9uczsK
LSAgICAgICAgICAgIGNvcHlLZXlzVG9WZWN0b3IodHJhbnNpdGlvbnMsIGtleXMpOwotCi0gICAg
ICAgICAgICBmb3IgKHVpbnQxNl90IGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHRyYW5zaXRpb25JdGVyYXRvciA9IHRyYW5zaXRpb25zLmZpbmQoa2V5KTsKLSAgICAgICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbkl0ZXJhdG9yLT52YWx1ZSA9PSBkZmFOb2RlLmZhbGxiYWNrVHJh
bnNpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMucmVtb3ZlKHRyYW5zaXRp
b25JdGVyYXRvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIERGQSBO
RkFUb0RGQTo6Y29udmVydChORkEmIG5mYSkKIHsKICAgICBWZWN0b3I8TkZBTm9kZT4mIG5mYUdy
YXBoID0gbmZhLm1fbm9kZXM7CkBAIC00MzAsNyArMzg3LDYgQEAgREZBIE5GQVRvREZBOjpjb252
ZXJ0KE5GQSYgbmZhKQogICAgICAgICB9CiAgICAgfSB3aGlsZSAoIXVucHJvY2Vzc2VkTm9kZXMu
aXNFbXB0eSgpKTsKIAotICAgIHNpbXBsaWZ5VHJhbnNpdGlvbnMoZGZhR3JhcGgpOwogICAgIHJl
dHVybiBERkEoV1RGOjptb3ZlKGRmYUdyYXBoKSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkZGRiMDBlMTUyNmVhNWRmOTEyYWRh
ZmI5OTM4NDBjZWU2ODAyMDY3Li42NmU2MzlhOWJlZWVlYzBmN2UxZjYyNjJjZWQ1NThlZDIwOWIz
Y2NhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTUtMDQtMDcgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3
ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBhIGNvbnNlcnZhdGl2ZSBERkEgbWluaW1pemVyIGZv
ciB0aGUgY29udGVudCBleHRlbnNpb24gbWF0Y2hlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzNTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29u
dGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwog
MjAxNS0wNC0wNyAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZC4gQWRkIG15c2VsZiBhcyBhIGNvbW1pdHRlci4KZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMu
Y3BwCmluZGV4IDNhMzZjODJhMTYyZjEzYzNkZGJkNTk3ZmE1ODA2N2NiOWNiMmM4MzMuLmQ3ZDZi
OTg5ZGI1ZDBlYzQ5ZWQyMmIwZDI2NjZhMzdjNTk4MDEzYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcApAQCAt
NzI5LDQgKzcyOSwxNzggQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBQYXR0ZXJuTWF0
Y2hpbmdUaGVFbXB0eVN0cmluZykKICAgICB0ZXN0UGF0dGVyblN0YXR1cygiKChmb28pPygoLikq
KShiYXIpKikiLCBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0YXR1
czo6TWF0Y2hlc0V2ZXJ5dGhpbmcpOwogfQogCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IE1pbmltaXppbmdXaXRoTW9yZUZpbmFsU3RhdGVzVGhhbk5vbkZpbmFsU3RhdGVzKQoreworICAg
IGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmhbYS16Oi8vXStcIn19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5odHRwOi8vZm9vLmNvbS9cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5odHRw
Oi8vYmFyLmNvbS9cIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL2Zvby5jb20vIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vYmFyLmNvbS8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImF0dHA6Ly9mb28uY29tLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImF0dHA6Ly9iYXIuY29tLyIpLCB7IH0pOworCisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwczovL3dlYmtp
dC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJidHRwOi8vd2Vi
a2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJidHRwczovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYiIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93ZWJraXQub3JnL2IiKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImN0dHA6Ly93ZWJraXQub3JnL0IiKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjdHRw
czovL3dlYmtpdC5vcmcvQiIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRl
c3QsIFN0YXRlc1dpdGhEaWZmZXJlbnRBY3Rpb25zQXJlTm90VW5pZmllZCkKK3sKKyAgICBhdXRv
IGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5odHRwOi8vd3d3LndlYmtpdC5vcmcvXCJ9
fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5odHRwczovL3d3dy53ZWJraXQub3JnL1wifX0s
IgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYXR0cHM6Ly93d3cud2Via2l0Lm9yZy9cIn19XSIp
OworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cHM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tDb29raWVzIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImF0dHBzOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd3d3LndlYmtpdC5vcmcvYSIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93d3cud2Via2l0Lm9yZy9CIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwczovL3d3dy53ZWJraXQu
b3JnL2MiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzIH0p
OworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93
d3cud2hhdHdnLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwczovL3d3dy53aGF0d2cub3JnLyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImF0dHBzOi8vd3d3LndoYXR3Zy5v
cmcvIiksIHsgfSk7Cit9CisKKy8vIFRoZSBvcmRlciBpbiB3aGljaCB0cmFuc2l0aW9ucyBmcm9t
IHRoZSByb290IHdpbGwgYmUgcHJvY2Vzc2VkIGlzIHVucHJlZGljdGFibGUuCisvLyBUbyBleGVy
Y2lzZXMgdGhlIHZhcmlvdXMgb3B0aW9ucywgdGhpcyB0ZXN0IGV4aXN0cyBpbiB2YXJpb3VzIHZl
cnNpb24gZXhjaGFuZ2luZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgZmluYWwgc3RhdGUuCitURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50
aWF0b3JEb05vdE1lcmdlMSkKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcIl5hLmFcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9
LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iLmFcIn19LCIKKyAgICAgICAgIntcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
Il5iYWNcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iYmNcIn19LCIKKyAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5C
Q0NcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiYXphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJiemE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImJhYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYmJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiY2M6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWJjOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiYWNjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKK30K
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZm
ZXJlbnRpYXRvckRvTm90TWVyZ2UyKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5k
KCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZp
bHRlclwiOlwiXmJhY1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmJiY1wifX0sIgorICAgICAgICAi
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiXkJDQ1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEuYVwifX0sIgorICAgICAgICAie1wi
YWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiXmIuYVwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJhemE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImJ6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYmFjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYmM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJjYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYWM6Ly93d3cud2Via2l0Lm9yZy8i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJh
YmM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhY2M6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YzovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImJ6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0p
OworfQorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0
aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTMpCit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJh
Y2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJeYS5jXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYi5jXCJ9fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJeYmFhXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYmJhXCJ9fSwiCisgICAgICAg
ICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeQkNBXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImF6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYWE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmNhOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImFiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFjYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOwor
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgfSk7Cit9CitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEZhbGxiYWNrVHJhbnNpdGlv
bnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlNCkKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBt
YWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIl5iYWFcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iYmFcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5CQ0FcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5hLmNcIn19LCIKKyAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5iLmNcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYXpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJhYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmJhOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiY2E6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisg
ICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFhOi8vd3d3Lndl
YmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50
UmVxdWVzdCgiYWJhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qo
YmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWNhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsg
fSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemE6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJiemE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemE6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBGYWxsYmFja1Ry
YW5zaXRpb25zVG9PdGhlck5vZGVJblNhbWVHcm91cERvZXNOb3REaWZmZXJlbnRpYXRlR3JvdXAp
Cit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYWFjXCJ9fSwiCisg
ICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJeYS5jXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYi5jXCJ9fV0iKTsKKwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYzovL3d3dy53
ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWJjOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJi
YWM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImFiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJhYWE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhY2E6Ly93d3cud2Via2l0Lm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYWE6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25U
ZXN0LCBTaW1wbGVGYWxsQmFja1RyYW5zaXRpb25EaWZmZXJlbnRpYXRvcjEpCit7CisgICAgYXV0
byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wi
fSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYS5iYy5kZVwifX0sIgorICAgICAgICAi
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiXmEuYmQuZWZcIn19XSIpOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiYWJiY2NkZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFiY2RkZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFiZGRlZjovL3d3dy53ZWJraXQub3Jn
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFiZGRlZjovL3d3dy53
ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYmNk
ZTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImFiZGVmOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2ltcGxlRmFsbEJhY2tUcmFuc2l0aW9uRGlm
ZmVyZW50aWF0b3IyKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XmNiLlwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmRiLmJcIn19XSIpOworCisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiY2JhOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJjYmI6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImRiYWI6Ly93d3cud2Vi
a2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImRieGI6Ly93
d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
Y2NhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiZGRkZDovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJiYmI6Ly93d3cud2Vi
a2l0Lm9yZy8iKSwgeyB9KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250680</attachid>
            <date>2015-04-13 15:48:46 -0700</date>
            <delta_ts>2015-04-13 17:42:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143501-20150413154751.patch</filename>
            <type>text/plain</type>
            <size>73558</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJjM2RlYzMxMTRiNDJl
OTIxY2UzNDdkZDE2M2VkNzAwYTk4YTIwMS4uMjk4ZjA1NWM0Mzc5YjY3OTgxYWI3ZDIxYWU0ZDQw
YzQ5MGY3ODk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNS0wNC0wNyAgQmVu
amFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIGEgY29u
c2VydmF0aXZlIERGQSBtaW5pbWl6ZXIgZm9yIHRoZSBjb250ZW50IGV4dGVuc2lvbiBtYXRjaGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM1MDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFkZHMgYSBzaW1wbGUgbWluaW1pemVyIGZvciBERkEgZ3JhcGhzLiBJdCBpcyBub3QgYSBw
ZXJmZWN0IG1pbmltaXplcjoKKyAgICAgICAgc29tZSBpbmRpc3Rpbmd1aXNoYWJsZSBhcmUgbm90
IG1lcmdlZCwgYnV0IG5vIHR3byBkaXN0aW5ndWlzaGFibGUgYXJlIG1lcmdlZC4KKworICAgICAg
ICBUaGUgZ2VuZXJhbCBpZGVhIG9mIHRoZSBhbGdvcml0aG0gaXMgdG8gcHV0IGFsbCB0aGUgc3Rh
dGUgaW50byBhIHNpbmdsZSBzZXQKKyAgICAgICAgYW5kIHBhcnRpdGlvbiBpdGVyYXRpdmVseSB1
bnRpbCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNwbGl0IGFueSBzdWJzZXQgYnkgdXNpbmcKKyAgICAg
ICAgYSB0cmFuc2l0aW9uIHRvIGRpc3Rpbmd1aXNoIHR3byBzdGF0ZXMuCisKKyAgICAgICAgTGV0
J3MgaWdub3JlIGZhbGxiYWNrIHRyYW5zaXRpb24gZm9yIG5vdywgYW5kIEknbGwgZXhwbGFpbiBs
YXRlciBob3cgdGhleSBmaXQgaW4KKyAgICAgICAgdGhlIGJpZyBwaWN0dXJlLgorCisKKyAgICAg
ICAgVGhlIGZpcnN0IHRoaW5nIHdlIGRvIGlzIGNyZWF0ZSBhIHBhcnRpdGlvbiBvZiB0aGUgdHJh
bnNpdGlvbiBieSBncm91cGluZyBldmVyeQorICAgICAgICB0cmFuc2l0aW9uIGJ5IHRoZSBzYW1l
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSBzdWJzZXQuIFRoaXMgcGFydGl0aW9uIG9mIHRyYW5zaXRp
b25zCisgICAgICAgIGlzIHRoZSBiYXNlIGJ5IHdoaWNoIHdlIHdpbGwgcGFydGl0aW9uIHRoZSBz
dGF0ZXMuCisKKyAgICAgICAgRWFjaCBzdWJzZXQgaW4gdGhlIHRyYW5zaXRpb24gcGFydGl0aW9u
IGlzIGEgImRpc3Rpbmd1aXNoZXIiIGJ5IHdoaWNoIHdlIGNhbgorICAgICAgICBzZXBhcmF0ZSB0
aGUgc3RhdGUgcGFydGl0aW9uLgorCisgICAgICAgIFdlIGFsc28gY3JlYXRlIGEgc2Vjb25kIHBh
cnRpdGlvbiwgdGhlIHN0YXRlIHBhcnRpdGlvbi4gVGhpcyBpcyB3aGVyZSB3ZSBrZWVwCisgICAg
ICAgIGFsbCB0aGUgc3Vic2V0cyBvZiBzdGF0ZXMgdGhhdCBoYXZlIGJlZW4gc3BsaXQgc28gZmFy
LgorCisgICAgICAgIExldCBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGdyYXBoLgorCisgICAg
ICAgICAgICAxIC0tYS0tPiAyCisgICAgICAgICAgICAxIC0tYi0tPiAzCisgICAgICAgICAgICAy
IC0tYy0tPiA0IChmaW5hbCkKKyAgICAgICAgICAgIDMgLS1jLS0+IDQgKGZpbmFsKQorCisgICAg
ICAgIFRoZSBwYXJ0aXRpb24gb2YgdHJhbnNpdGlvbiB3b3VsZCBzdGFydCB3aXRoOgorICAgICAg
ICBTZXQgMDoKKyAgICAgICAgICAgIDEgLS1hLS0+IDIKKyAgICAgICAgU2V0IDE6CisgICAgICAg
ICAgICAxIC0tYi0tPiAzCisgICAgICAgIFNldCAyOgorICAgICAgICAgICAgMiAtLWMtLT4gNAor
ICAgICAgICAgICAgMyAtLWMtLT4gNAorCisgICAgICAgIFRoZSBzdGF0ZSBwYXJ0aXRpb24gd291
bGQgaGF2ZSBhIHNpbmdsZSBzZXQgd2l0aCB7IDEsIDIsIDMsIDQgfS4KKworCisgICAgICAgIE5l
eHQsIHdlIHNwbGl0IHRoZSBzdGF0ZSBwYXJ0aXRpb24gYnkgZGlzdGluZ3Vpc2hhYmxlIGZpbmFs
IHN0YXRlcy4gSW4gdGhpcyBjYXNlLAorICAgICAgICB3ZSB3b3VsZCBzcGxpdCBpdCBpbnRvIHsg
MSwgMiwgMyB9LCB7IDQgfS4KKworICAgICAgICBXZSB0aGVuIHJlZmluZSB0aGUgdHJhbnNpdGlv
biBwYXJ0aXRpb24gYnkgc3BsaXR0aW5nIGl0IGJ5IHRoZSBzdGF0ZXMgdGhhdCBoYXZlCisgICAg
ICAgIGJlZW4gZGlzdGluZ3Vpc2hlZC4gSGVyZSwgdGhlIG9ubHkgdHJhbnNpdGlvbnMgdG8gNCBh
cmUgYm90aCBpcyB0aGUgc2FtZSBzZXQgKHNldCAyKSwKKyAgICAgICAgc28gdGhlIHRyYW5zaXRp
b24gcGFydGl0aW9uIHJlbWFpbnMgdGhlIHNhbWUuCisKKworICAgICAgICBXZSBjYW4gbm93IGV4
ZWN1dGUgdGhlIG1haW4gbG9vcCBvZiB0aGUgYWxnb3JpdGhtOgorICAgICAgICAxKSBTcGxpdCB0
aGUgc3RhdGVzIGJ5IHRoZSB0cmFuc2l0aW9ucy4KKyAgICAgICAgMikgU3BsaXQgdGhlIHRyYW5z
aXRpb25zIHRoYXQgYXJlIG5vdyByZWFjaGluZyB0d28gZGlmZmVyZW50IHNldHMgb2YgdGhlIHN0
YXRlIHBhcnRpdGlvbi4KKyAgICAgICAgMykgQWRkIGFueSBuZXdseSBkaXNjb3ZlcmVkICJkaXN0
aW5ndWlzaGVyIiAodGhlIG9uZXMgd2Ugc3BsaXQpIHRvIHRoZSBsaXN0IG9mICJkaXN0aW5ndWlz
aGVyIgorICAgICAgICAgICB0byBwcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgY2FzZSwgd2Ug
anVzdCBpdGVyYXRlIG92ZXIgdGhlIHBhcnRpdGlvbiBzZXQgaW4gb3JkZXIsIGFuZCBhZGQgbmV3
bHkgc3BsaXQgdHJhbnNpdGlvbnMKKyAgICAgICAgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KKwor
ICAgICAgICBJbiB0aGUgZXhhbXBsZSwgd2Ugd291bGQgZmlyc3QgdmlzaXQgc2V0IDAuIFdlIGhh
dmUgdGhhdCBzdGF0ZSAxIGlzIGRpc3Rpbmd1aXNoYWJsZQorICAgICAgICBieSAiYSIsIGFuZCB0
aGUgc3RhdGUgcGFydGl0aW9uIHdvdWxkIGJlY29tZSB7IDEgfSwgeyAyLCAzIH0sIHsgNCB9Lgor
CisgICAgICAgIFdlIHRoZW4gdmlzaXQgdHJhbnNpdGlvbiBzZXQgMSwgaXQgZGlzdGluZ3Vpc2hl
cyBzdGF0ZSAxIHdoaWNoIGlzIGFscmVhZHkgYWxvbmUgLT4gbm90aGluZyB0byBkby4KKworICAg
ICAgICBGaW5hbGx5LCB3ZSBwcm9jZXNzIHRoZSB0cmFuc2l0aW9uIHNldCAyLCBpdCBkaXN0aW5n
dWlzaGVzIDIgYW5kIDMsIHRoZXkgYXJlIGFscmVhZHkgaW4gdGhlIHNhbWUKKyAgICAgICAgc2V0
IC0+IG5vdGhpbmcgdG8gZG8uCisKKyAgICAgICAgVGhlcmUgaXMgbm8gbW9yZSB0cmFuc2l0aW9u
IHRvIHByb2Nlc3MsIHdlIGhhdmUgMyB1bmlxdWUgc3Vic2V0cyBhbmQgd2Ugc2hvdWxkIG1lcmdl
IDIgYW5kIDMuCisKKyAgICAgICAgLS0tCisKKyAgICAgICAgT2theSwgbm93IGhvdyB0byB3ZSBm
aXQgZmFsbGJhY2sgdHJhbnNpdGlvbiBpbiB0aGlzIG1vZGVsLiBJbiB0aGlzIHBhdGNoLCBJIHRh
a2UgdGhlIGNvbnNlcnZhdGl2ZQorICAgICAgICBhcHByb2FjaDogd2Ugc3BsaXQgZXZlcnl0aGlu
ZyBhc3N1bWluZyBmYWxsYmFjayB0cmFuc2l0aW9uIGRvIG5vdCBleGlzdCwgdGhlbiB3ZSByZWZp
bmUKKyAgICAgICAgYnkgdGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zLgorCisgICAgICAgIExldCdz
IHRha2UgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorICAgICAgICAgICAgMSAtLWEtLT4gMworICAg
ICAgICAgICAgMiAtLWEtLT4gMworICAgICAgICAgICAgMSAtW2ZdLT4gNAorICAgICAgICAgICAg
MiAtW2ZdLT4gNQorCisgICAgICAgIGFuZCBhdCB0aGlzIHN0YWdlIGluIHRoZSBhbGdvcml0aG0s
IHdlIGhhdmUgdGhlIHNldHMgeyAxLCAyIH0sIHsgMyB9LCB7IDQgfSwgeyA1IH0uCisgICAgICAg
IFRoZSBzdGF0ZXMgMSBhbmQgMiBhcmUgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBk
aXN0aW5ndWlzaGVkIGJ5ICdhJywgYnV0CisgICAgICAgIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGRpc3Rpbmd1aXNoZXMgdGhlbS4KKworICAgICAgICBTaW5jZSB3ZSBoYXZlIGRvbmUgZXZlcnkg
b3RoZXIgc3BsaXQsIHdlIGhhdmUgb25lIHVzZWZ1bCBwcm9wZXJ0eTogd2Uga25vdyB0aGF0IGV2
ZXJ5CisgICAgICAgIHN0YXRlIGluIGV2ZXJ5IHNldCB0cmFuc2l0aW9uIHdpdGggdGhlIGV4YWN0
IHNldCBvZiBjaGFyYWN0ZXJzIHdpdGhpbiB0aGF0IHNldC4KKyAgICAgICAgSWYgdGhhdCB3YXMg
bm90IHRydWUsIHRoZXJlIHdvdWxkIGJlIG9uZSAiZGlzdGluZ3Vpc2hlciIgJ3gnIHRoYXQgY291
bGQgc3BpdCB0aGUgc2V0CisgICAgICAgIGludG8gdHdvIHN1YnNldHM6IHRoZSBvbmUgd2l0aCB0
aGUgdHJhbnNpdGlvbiAneCcgYW5kIHRoZSBvbmVzIHdpdGhvdXQuCisKKyAgICAgICAgU2luY2Ug
YWxsIHRoZSB0cmFuc2l0aW9ucyBhcmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIG92ZXJsYXAgYmV0
d2VlbiB0aGUgZGVmaW5lZCB0cmFuc2l0aW9uCisgICAgICAgIGFuZCB0aGUgZmFsbGJhY2sgdHJh
bnNpdGlvbi4gQ29uc2VxdWVudGx5LCB3ZSBjYW4gdXNlIHRoZSBmYWxsYmFjayB0cmFuc2l0aW9u
IGFzIGEgd2hvbGUKKyAgICAgICAgdHJhbnNpdGlvbiBhbmQgdXNlIGl0IHRvIGRpc3Rpbmd1aXNo
IHRoZSBzdGF0ZXMuCisKKyAgICAgICAgVGhlIGZhbGxiYWNrIHRyYW5zaXRpb25zIGFyZSBoYW5k
bGVkIGxpa2UgYW55IG90aGVyIHRyYW5zaXRpb24sIHdlIGhhdmUgYSBwYXJ0aXRpb24gb2Ygc3Vj
aAorICAgICAgICB0cmFuc2l0aW9ucyBhbmQgc3BsaXQgYnkgZWFjaCBvZiB0aGVtLiBCVVQsIHdl
IGNhbiBvbmx5IHVzZSB0aGVtIGFmdGVyIGV2ZXJ5IHVuaXF1ZSB0cmFuc2l0aW9uCisgICAgICAg
IGhhcyBiZWVuIGNvdmVyZWQuCisKKyAgICAgICAgVGhpcyB0cmljayBpcyBhbHNvIHdoYXQgbWFr
ZXMgdGhlIG1pbmltaXphdGlvbiBpbXBlcmZlY3Q6IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBt
ZXJnZQorICAgICAgICBzdGF0ZXMgd2l0aCBvdmVybGFwIGluIHRoZWlyIGZhbGxiYWNrIHRyYW5z
aXRpb25zIGJ1dCB3ZSB3b3VsZCBzcGxpdCB0aGVtLgorCisgICAgICAgIC0tLQorCisgICAgICAg
IEFudHRpIFZhbG1hcmksIFBldHJpIExlaHRpbmVuLCBNYXJpZS1QaWVycmUgQsOpYWwgYW5kIE1h
eGltZSBDcm9jaGVtb3JlIGRlc2VydmUgY3JlZGl0IGZvciB0aGVpciBpbmRpcmVjdAorICAgICAg
ICB3b3JrIG9uIHRoaXMgcGF0Y2guIFRoYW5rcyBmb3IgeW91ciB3b25kZXJmdWwgcGFwZXJzIGFi
b3V0IERGQSBtaW5pbWl6YXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
bkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21w
aWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjptaW5pbWl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSk6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpzaW1wbGlmeVRyYW5zaXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OlBhcnRp
dGlvbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBTWluaW1pemVyOjpQYXJ0aXRpb246Om1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0
aXRpb246OnJlZmluZUdlbmVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjppdGVyYXRlU2V0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246Oml0ZXJh
dGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXpl
cjo6UGFydGl0aW9uOjpmaW5kSW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OkRGQU1pbmltaXplcjo6UGFydGl0aW9uOjpzZXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246OmZpcnN0RWxl
bWVudEluU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5p
bWl6ZXI6OlBhcnRpdGlvbjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBTWluaW1pemVyOjpQYXJ0aXRpb246OlNldERlc2NyaXB0b3I6OmluZGV4QWZ0ZXJN
YXJrZWRFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZB
TWluaW1pemVyOjpQYXJ0aXRpb246OlNldERlc2NyaXB0b3I6OmVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246
OkZ1bGxHcmFwaFBhcnRpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9u
czo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246Om1hcmtOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkZ1bGxHcmFwaFBhcnRp
dGlvbjo6cmVmaW5lUGFydGl0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6REZBTWluaW1pemVyOjpGdWxsR3JhcGhQYXJ0aXRpb246OnNwbGl0QnlVbmlxdWVUcmFu
c2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1p
emVyOjpGdWxsR3JhcGhQYXJ0aXRpb246OnNwbGl0QnlGYWxsYmFja1RyYW5zaXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkZ1bGxHcmFw
aFBhcnRpdGlvbjo6bm9kZVJlcGxhY2VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkFjdGlvbktleTo6QWN0aW9uS2V5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5pbWl6ZXI6OkFjdGlvbktleTo6aXNF
bXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFNaW5p
bWl6ZXI6OkFjdGlvbktleTo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkRGQU1pbmltaXplcjo6QWN0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWluaW1pemVyOjpBY3Rpb25LZXlI
YXNoOjplcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBTWlu
aW1pemVyOjptaW5pbWl6ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1p
emVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5o
LgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaDoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OnNpbXBsaWZ5VHJhbnNpdGlvbnMpOiBEZWxldGVkLgorCiAyMDE1LTA0LTEzICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2Fu
dmFzIGRyYXdJbWFnZSgpIGhhcyBhIHNlY3VyaXR5IGhvbGUgd2hlbiB0aGUgaW1hZ2UgaXNuJ3Qg
eWV0IGZ1bGx5IGxvYWRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBmMjViMDAzZjlhYTBjMTI4OGE1NGMyZTg1Y2U1NjRlNzYy
MjMxYjkxLi4xYzIxM2RiNmZjOGVkM2ZiNzc3N2Q4ZjZkN2YwYzk0YTllYWZmOWUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDAzLDE2ICsxMDAzLDE4IEBACiAJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjY2MDFFQkQxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MjY2MDFFQzAxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY2MDFFQkUxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLm1tICovOyB9OwogCQkyNjc3
MjVGQzFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NzcyNUY2MUE1QjNBRDkwMDNDMjRERCAvKiBERkEuY3Bw
ICovOyB9OwotCQkyNjc3MjVGRDFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjc3MjVGNzFBNUIzQUQ5MDAzQzI0
REQgLyogREZBLmggKi87IH07Ci0JCTI2NzcyNUZGMUE1QjNBRDkwMDNDMjRERCAvKiBERkFOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjc3MjVG
OTFBNUIzQUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovOyB9OworCQkyNjc3MjVGRDFBNUIzQUQ5
MDAzQzI0REQgLyogREZBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNjc3MjVGNzFBNUIzQUQ5MDAzQzI0REQgLyogREZBLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjY3NzI1RkYxQTVCM0FEOTAwM0My
NEREIC8qIERGQU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI2NzcyNUY5MUE1QjNBRDkwMDNDMjRERCAvKiBERkFOb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjY3NzI2MDAxQTVCM0FEOTAw
M0MyNEREIC8qIE5GQVRvREZBLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2NzcyNUZBMUE1QjNBRDkwMDNDMjRERCAvKiBORkFUb0RGQS5jcHAgKi87
IH07Ci0JCTI2NzcyNjAxMUE1QjNBRDkwMDNDMjRERCAvKiBORkFUb0RGQS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY3NzI1RkIxQTVCM0FEOTAwM0My
NEREIC8qIE5GQVRvREZBLmggKi87IH07CisJCTI2NzcyNjAxMUE1QjNBRDkwMDNDMjRERCAvKiBO
RkFUb0RGQS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjY3NzI1RkIxQTVCM0FEOTAwM0MyNEREIC8qIE5GQVRvREZBLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjY3NzI2MDQxQTVERjZGMjAwM0MyNERE
IC8qIFVSTEZpbHRlclBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNjc3MjYwMjFBNURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2Vy
LmNwcCAqLzsgfTsKIAkJMjY3NzI2MDUxQTVERjZGMjAwM0MyNEREIC8qIFVSTEZpbHRlclBhcnNl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY3NzI2
MDMxQTVERjZGMjAwM0MyNEREIC8qIFVSTEZpbHRlclBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2OTIzOTk2MTUwNUUxQUEwMDlFNTdG
QyAvKiBKU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjY5MjM5OTIxNTA1RTFBQTAwOUU1N0ZDIC8qIEpTSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmggKi87IH07CiAJCTI2OTM5NzIyMUE0QTQxMkYwMEU4MzQ5RCAvKiBO
RkFOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NjkzOTcyMDFBNEE0MTJGMDBFODM0OUQgLyogTkZBTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2OTM5NzI0MUE0QTVCNjQwMEU4MzQ5RCAv
KiBORkEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
OTM5NzIzMUE0QTVCNjQwMEU4MzQ5RCAvKiBORkEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNjkzOTcyNjFBNEE1RkJEMDBFODM0OUQgLyogTkZB
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OTM5
NzI1MUE0QTVGQkQwMEU4MzQ5RCAvKiBORkEuY3BwICovOyB9OworCQkyNkE1MTdGRDFBQjkyMjM4
MDA2MzM1REYgLyogREZBTWluaW1pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2QTUxN0ZCMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6
ZXIuY3BwICovOyB9OworCQkyNkE1MTdGRTFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkE1MTdG
QzFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjZBQTBGOUUxOEQyQTE4QjAwNDE5MzgxIC8q
IFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVj
dG9yUHNldWRvRWxlbWVudFR5cGVNYXAuY3BwICovOyB9OwogCQkyNkI5OTk4RjE4MDNBRTcyMDBE
MDExMjEgLyogUmVnaXN0ZXJBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2Qjk5OThFMTgwM0FFNzIwMEQwMTEyMSAvKiBSZWdpc3RlckFs
bG9jYXRvci5oICovOyB9OwogCQkyNkI5OTk5MTE4MDNCM0M5MDBEMDExMjEgLyogU3RhY2tBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
Qjk5OTkwMTgwM0IzQzkwMEQwMTEyMSAvKiBTdGFja0FsbG9jYXRvci5oICovOyB9OwpAQCAtODEw
MCw2ICs4MTAyLDggQEAKIAkJMjY5Mzk3MjAxQTRBNDEyRjAwRTgzNDlEIC8qIE5GQU5vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTkZBTm9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNjkzOTcyMzFBNEE1QjY0MDBFODM0OUQgLyogTkZBLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5GQS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyNjkzOTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5GQS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTI2QTUxN0ZCMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZBTWluaW1pemVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1p
bmltaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFNaW5pbWl6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZBQTBGOTkxOEQyOTczRDAwNDE5Mzgx
IC8qIG1ha2VTZWxlY3RvclBzZXVkb0VsZW1lbnRzTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0g
bWFrZVNlbGVjdG9yUHNldWRvRWxlbWVudHNNYXAucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI2QUEwRjlBMThEMjk3M0QwMDQxOTM4MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRU
eXBlTWFwLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QUEwRjlEMThEMkExOEIwMDQxOTM4MSAvKiBTZWxlY3Rv
clBzZXVkb0VsZW1lbnRUeXBlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU1MzEsNiArMTU1MzUsOCBAQAogCQkJCTVDMzkzMDVGMUFBMEY2QTkw
MDI5QzgxNiAvKiBERkFCeXRlY29kZUNvbXBpbGVyLmggKi8sCiAJCQkJNUMzOTMwNjAxQUEwRjZB
OTAwMjlDODE2IC8qIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuY3BwICovLAogCQkJCTVDMzkzMDYx
MUFBMEY2QTkwMDI5QzgxNiAvKiBERkFCeXRlY29kZUludGVycHJldGVyLmggKi8sCisJCQkJMjZB
NTE3RkIxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5jcHAgKi8sCisJCQkJMjZBNTE3
RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICovLAogCQkJCTI2NzcyNUY5MUE1
QjNBRDkwMDNDMjRERCAvKiBERkFOb2RlLmggKi8sCiAJCQkJMjY5Mzk3MjUxQTRBNUZCRDAwRTgz
NDlEIC8qIE5GQS5jcHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRBNUI2NDAwRTgzNDlEIC8qIE5GQS5o
ICovLApAQCAtMjM2NTIsNiArMjM2NTgsNyBAQAogCQkJCTMxNkZFMTEyMEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExNDBFNkUxREE3
MDBCRjYwODggLyogQW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
NURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNkE1MTdGRTFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0JDOERBRDFBQUEzMDIyMDBFMUM4MDMgLyogTWVkaWFB
Y2Nlc3NpYmlsaXR5U29mdExpbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFEMEVGQUM5
MDYwMDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QzU2OENC
MTE5REFGRUEwMDA0MzBDQTIgLyogTWFza0ltYWdlT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTMwMzU1LDYgKzMwMzYyLDcgQEAKIAkJCQlBODMzQzdDQzBBMkNGMDc0MDBENTc2NjQgLyog
WExpbmtOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwMEI5MzE4NzEzQkE4REIzMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBCOTMxODkx
M0JBOERCQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkyNkE1MTdGRDFBQjkyMjM4MDA2MzM1REYgLyogREZBTWluaW1pemVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTAwQjkzMThCMTNCQThEQzkwMDM1QTk0OCAvKiBYTUxEb2N1bWVu
dFBhcnNlclNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5QzI4MDQ1MTM4REMyNDEwMDc5
QjdFMiAvKiBYTUxFcnJvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3NzJDNDYwQzRFQjJD
NjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5jcHAKaW5kZXggODNjMGIwOWU2NDA4M2RlNDk3OTJmOWJhZjhjNGEzYTQzMmQx
OTVkNi4uY2QzYTNhZGU3OGEwMDBkOTcxZDZjNzYwOGJjNjhlYmJiNmQ1NDE2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBp
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uQ29tcGlsZXIuY3BwCkBAIC0xODksMTEgKzE4OSwyOCBAQCBzdGQ6OmVycm9yX2NvZGUg
Y29tcGlsZVJ1bGVMaXN0KENvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCYgY2xpZW50
LCBjb25zdAogI2VuZGlmCiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQ
T1JUSU5HCi0gICAgZG91YmxlIGRmYUJ1aWxkVGltZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CisgICAgZG91YmxlIHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGltZVN0YXJ0
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKKwogICAgIFZlY3RvcjxE
RkFCeXRlY29kZT4gYnl0ZWNvZGU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZmFzLnNp
emUoKTsgKytpKSB7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElO
RworICAgICAgICBkb3VibGUgZGZhQnVpbGRUaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKKyNlbmRpZgogICAgICAgICBERkEgZGZhID0gTkZBVG9ERkE6OmNvbnZlcnQo
bmZhc1tpXSk7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwor
ICAgICAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CisgICAgICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUgREZB
ICV6dTogJWZcbiIsIGksIChkZmFCdWlsZFRpbWVFbmQgLSBkZmFCdWlsZFRpbWVTdGFydCkpOwor
I2VuZGlmCisKKyNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisg
ICAgICAgIGRvdWJsZSBkZmFNaW5pbWl6YXRpb25UaW1lU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKKyNlbmRpZgorICAgICAgICBkZmEubWluaW1pemUoKTsKKyNpZiBDT05U
RU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgICAgIGRvdWJsZSBkZmFN
aW5pbWl6YXRpb25UaW1lRW5kID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAg
ICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBtaW5pbWluaXppbmcgdGhlIERGQSAlenU6ICVm
XG4iLCBpLCAoZGZhTWluaW1pemF0aW9uVGltZUVuZCAtIGRmYU1pbmltaXphdGlvblRpbWVTdGFy
dCkpOworI2VuZGlmCiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJV
R0dJTkcKICAgICAgICAgV1RGTG9nQWx3YXlzKCJERkEgJXp1IiwgaSk7CkBAIC0yMTEsOCArMjI4
LDggQEAgc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQmIGNsaWVudCwgY29uc3QKICAgICB9CiAKICNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCi0gICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotICAgIGRhdGFMb2dGKCIgICAgVGltZSBz
cGVudCBidWlsZGluZyBhbmQgY29tcGlsaW5nIHRoZSBERkFzOiAlZlxuIiwgKGRmYUJ1aWxkVGlt
ZUVuZCAtIGRmYUJ1aWxkVGltZVN0YXJ0KSk7CisgICAgZG91YmxlIHRvdGFsTkZBVG9CeXRlQ29k
ZUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIGRhdGFM
b2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyBhbmQgY29tcGlsaW5nIHRoZSBERkFzOiAlZlxu
IiwgKHRvdGFsTkZBVG9CeXRlQ29kZUJ1aWxkVGltZUVuZCAtIHRvdGFsTkZBVG9CeXRlQ29kZUJ1
aWxkVGltZVN0YXJ0KSk7CiAgICAgZGF0YUxvZ0YoIiAgICBCeXRlY29kZSBzaXplICV6dVxuIiwg
Ynl0ZWNvZGUuc2l6ZSgpKTsKICAgICBkYXRhTG9nRigiICAgIERGQSBjb3VudCAlenVcbiIsIG5m
YXMuc2l6ZSgpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5j
cHAKaW5kZXggMjY4NmU1YjU5NTQzODEzNTNkMDRjOTkyMDMxNmU1Y2U2N2I3OTFlMy4uZTM1ZjI2
OGE1MGMzZTA0NjBiNWM2OGMyMDVmN2UwNGU4ZmU1NmJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQogCisjaW5jbHVkZSAiREZBTWluaW1pemVyLmgiCiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksNiArNjAsMTEgQEAg
REZBJiBERkE6Om9wZXJhdG9yPShjb25zdCBERkEmIGRmYSkKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKK3ZvaWQgREZBOjptaW5pbWl6ZSgpCit7CisgICAgbV9yb290ID0gREZBTWluaW1pemVyOjpt
aW5pbWl6ZShtX25vZGVzLCBtX3Jvb3QpOworfQorCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NU
QVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMgdm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RS
YW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJhbmdlRW5kKQogewpAQCAtMTI5LDYgKzEzNSw5
IEBAIHZvaWQgREZBOjpkZWJ1Z1ByaW50RG90KCkgY29uc3QKICAgICBkYXRhTG9nRigiICAgIG5v
ZGUgW3NoYXBlPWNpcmNsZV07XG4iKTsKICAgICBkYXRhTG9nRigiICAgIHtcbiIpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX25vZGVzW2ldLmlzS2lsbGVkKQorICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAg
ZGF0YUxvZ0YoIiAgICAgICAgICVkIFtsYWJlbD08Tm9kZSAlZCIsIGksIGkpOwogICAgICAgICBj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zID0gbV9ub2Rlc1tpXS5hY3Rpb25zOwogICAg
ICAgICBpZiAoIWFjdGlvbnMuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQS5oCmluZGV4IDkyYTI3MDgyYjc2ZWYxNzhjYjE0MWE2ZDU5ZWY3MjY0MDBhNGE3YWUu
LjdiMWM0MjEzOGYzNGNiMTg2OTgwOWUzZmY2YmZiNjdjNzMxYmM4MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQS5oCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKIC8vIFRoZSBERkEgYWJzdHJh
Y3QgYSBwYXJ0aWFsIERGQSBncmFwaCBpbiBhIGNvbXBhY3QgZm9ybS4KLWNsYXNzIERGQSB7Citj
bGFzcyBXRUJDT1JFX0VYUE9SVCBERkEgewogcHVibGljOgogICAgIERGQSgpOwogICAgIERGQShW
ZWN0b3I8REZBTm9kZT4mJiBub2RlcywgdW5zaWduZWQgcm9vdEluZGV4KTsKQEAgLTUwLDYgKzUw
LDggQEAgcHVibGljOgogICAgIGNvbnN0IERGQU5vZGUmIG5vZGVBdCh1bnNpZ25lZCBpKSBjb25z
dCB7IHJldHVybiBtX25vZGVzW2ldOyB9CiAgICAgREZBTm9kZSYgbm9kZUF0KHVuc2lnbmVkIGkp
IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KIAorICAgIHZvaWQgbWluaW1pemUoKTsKKwogI2lmIENP
TlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIHZvaWQgZGVidWdQ
cmludERvdCgpIGNvbnN0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCmluZGV4IGEyMzU4OTg1YzQ5
YjFkMWI0Y2JkMGJkZTI4ODk4NTdkNmRmNTg5ZGIuLmE5MzYyODA0OTE5MWRjMmE0ZDM0MDc4YjMx
YjYzYzA3OTFmNTVkZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCkBAIC05Niw2ICs5NiwxMCBAQCB2b2lk
IERGQUJ5dGVjb2RlQ29tcGlsZXI6OmVtaXRUZXJtaW5hdGUoKQogdm9pZCBERkFCeXRlY29kZUNv
bXBpbGVyOjpjb21waWxlTm9kZSh1bnNpZ25lZCBpbmRleCwgYm9vbCByb290KQogewogICAgIGNv
bnN0IERGQU5vZGUmIG5vZGUgPSBtX2RmYS5ub2RlQXQoaW5kZXgpOworICAgIGlmIChub2RlLmlz
S2lsbGVkKSB7CisgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAg
ICAvLyBSZWNvcmQgc3RhcnRpbmcgaW5kZXggZm9yIGxpbmtpbmcuCiAgICAgaWYgKCFyb290KQpA
QCAtMjE0LDggKzIxOCwxMSBAQCB2b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGUoKQog
ICAgIH0KIAogICAgIC8vIExpbmsuCi0gICAgZm9yIChjb25zdCBhdXRvJiBsaW5rUmVjb3JkIDog
bV9saW5rUmVjb3JkcykKLSAgICAgICAgc2V0MzJCaXRzKG1fYnl0ZWNvZGUsIGxpbmtSZWNvcmQu
Zmlyc3QsIG1fbm9kZVN0YXJ0T2Zmc2V0c1tsaW5rUmVjb3JkLnNlY29uZF0pOworICAgIGZvciAo
Y29uc3QgYXV0byYgbGlua1JlY29yZCA6IG1fbGlua1JlY29yZHMpIHsKKyAgICAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0gbGlua1JlY29yZC5maXJzdDsKKyAgICAgICAgQVNTRVJUKCEoKnJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQqPigmbV9ieXRlY29kZVtvZmZzZXRdKSkpOworICAgICAgICBzZXQz
MkJpdHMobV9ieXRlY29kZSwgb2Zmc2V0LCBtX25vZGVTdGFydE9mZnNldHNbbGlua1JlY29yZC5z
ZWNvbmRdKTsKKyAgICB9CiAgICAgCiAgICAgLy8gU2V0IHNpemUgaGVhZGVyLgogICAgIHNldDMy
Qml0cyhtX2J5dGVjb2RlLCBzdGFydExvY2F0aW9uLCBtX2J5dGVjb2RlLnNpemUoKSAtIHN0YXJ0
TG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBTWluaW1pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQU1p
bmltaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA4OTJiOTEyZjkxNmMzOGQ1ZWYzMzljN2VkNTg1ZmE5
ZjBmNjg4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQU1pbmltaXplci5jcHAKQEAgLTAsMCArMSw1NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZBTWluaW1pemVyLmgiCisKKyNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvU3RyaW5nSGFzaGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9ucyB7CisKK25hbWVzcGFjZSB7CisKKy8vIHNpbXBsaWZ5VHJhbnNpdGlv
bnMoKSB0cmllcyB0byBjb2xsYXBzZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25zIGludG8gZmFsbGJh
Y2sgdHJhbnNpdGlvbnMuCisvLyBBZnRlciBzaW1wbGlmeVRyYW5zaXRpb25zKCksIHlvdSBjYW4g
YWxzbyBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSBmYWxsYmFjayB0cmFuc2l0aW9uIHRhcmdl
dCB3aWxsIG5ldmVyIGJlCisvLyBhbHNvIHRoZSB0YXJnZXQgb2YgYW4gaW5kaXZpZHVhbCB0cmFu
c2l0aW9uLgorc3RhdGljIHZvaWQgc2ltcGxpZnlUcmFuc2l0aW9ucyhWZWN0b3I8REZBTm9kZT4m
IGRmYUdyYXBoKQoreworICAgIGZvciAoREZBTm9kZSYgZGZhTm9kZSA6IGRmYUdyYXBoKSB7Cisg
ICAgICAgIGlmICghZGZhTm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24KKyAgICAgICAgICAgICYm
ICgoZGZhTm9kZS50cmFuc2l0aW9ucy5zaXplKCkgPT0gMTI2ICYmICFkZmFOb2RlLnRyYW5zaXRp
b25zLmNvbnRhaW5zKDApKQorICAgICAgICAgICAgICAgIHx8IChkZmFOb2RlLnRyYW5zaXRpb25z
LnNpemUoKSA9PSAxMjcgJiYgZGZhTm9kZS50cmFuc2l0aW9ucy5jb250YWlucygwKSkpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBiZXN0VGFyZ2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworICAgICAgICAgICAgdW5zaWduZWQgYmVzdFRhcmdldFNjb3JlID0gMDsK
KyAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNp
Z25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+
PiB0YXJnZXRIaXN0b2dyYW07CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRp
b24gOiBkZmFOb2RlLnRyYW5zaXRpb25zKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2l0
aW9uLmtleSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB0cmFuc2l0aW9uVGFyZ2V0ID0gdHJhbnNpdGlvbi52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IHRhcmdldEhpc3RvZ3JhbS5hZGQodHJhbnNpdGlvblRh
cmdldCwgMSk7CisgICAgICAgICAgICAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSsrOworCisgICAgICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPiBiZXN0VGFyZ2V0U2NvcmUp
IHsKKyAgICAgICAgICAgICAgICAgICAgYmVzdFRhcmdldFNjb3JlID0gYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmVzdFRhcmdldCA9IHRyYW5zaXRpb25U
YXJnZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShiZXN0VGFyZ2V0U2NvcmUsICJUaGVyZSBzaG91bGQgYmUgYXQgbGVh
c3Qgb25lIHZhbGlkIHRhcmdldCBzaW5jZSBoYXZpbmcgdHJhbnNpdGlvbnMgaXMgYSBwcmVjb25k
aXRpb24gdG8gZW50ZXIgdGhpcyBwYXRoLiIpOworCisgICAgICAgICAgICBkZmFOb2RlLmhhc0Zh
bGxiYWNrVHJhbnNpdGlvbiA9IHRydWU7CisgICAgICAgICAgICBkZmFOb2RlLmZhbGxiYWNrVHJh
bnNpdGlvbiA9IGJlc3RUYXJnZXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGZhTm9kZS5o
YXNGYWxsYmFja1RyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50MTZfdCwgMTI4
PiBrZXlzOworICAgICAgICAgICAgREZBTm9kZVRyYW5zaXRpb25zJiB0cmFuc2l0aW9ucyA9IGRm
YU5vZGUudHJhbnNpdGlvbnM7CisgICAgICAgICAgICBjb3B5S2V5c1RvVmVjdG9yKHRyYW5zaXRp
b25zLCBrZXlzKTsKKworICAgICAgICAgICAgZm9yICh1aW50MTZfdCBrZXkgOiBrZXlzKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byB0cmFuc2l0aW9uSXRlcmF0b3IgPSB0cmFuc2l0aW9ucy5maW5k
KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zaXRpb25JdGVyYXRvci0+dmFsdWUgPT0g
ZGZhTm9kZS5mYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRp
b25zLnJlbW92ZSh0cmFuc2l0aW9uSXRlcmF0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCitjbGFzcyBQYXJ0aXRpb24geworcHVibGljOgorICAgIHZvaWQgaW5pdGlh
bGl6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFzaXplKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1fc2V0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUp
OworICAgICAgICBtX3BhcnRpdGlvbmVkRWxlbWVudHMucmVzaXplKHNpemUpOworICAgICAgICBt
X2VsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uZWROb2Rlcy5yZXNpemUoc2l6ZSk7CisgICAgICAg
IG1fZWxlbWVudFRvU2V0TWFwLnJlc2l6ZShzaXplKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBtX3BhcnRpdGlvbmVkRWxlbWVu
dHNbaV0gPSBpOworICAgICAgICAgICAgbV9lbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbmVkTm9k
ZXNbaV0gPSBpOworICAgICAgICAgICAgbV9lbGVtZW50VG9TZXRNYXBbaV0gPSAwOworICAgICAg
ICB9CisgICAgICAgIG1fc2V0cy5hcHBlbmQoU2V0RGVzY3JpcHRvcih7IDAsIHNpemUsIDAgfSkp
OworICAgIH0KKworICAgIHZvaWQgbWFya0VsZW1lbnRJbkN1cnJlbnRHZW5lcmF0aW9uKHVuc2ln
bmVkIGVsZW1lbnRJbmRleCkKKyAgICB7CisgICAgICAgIC8vIFN3YXAgdGhlIG5vZGUgd2l0aCB0
aGUgZmlyc3QgdW5tYXJrZWQgbm9kZS4KKyAgICAgICAgdW5zaWduZWQgc2V0SW5kZXggPSBtX2Vs
ZW1lbnRUb1NldE1hcFtlbGVtZW50SW5kZXhdOworICAgICAgICBTZXREZXNjcmlwdG9yJiBzZXRE
ZXNjcmlwdG9yID0gbV9zZXRzW3NldEluZGV4XTsKKworICAgICAgICB1bnNpZ25lZCBlbGVtZW50
UG9zaXRpb25JblBhcnRpdGlvbiA9IG1fZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVz
W2VsZW1lbnRJbmRleF07CisgICAgICAgIEFTU0VSVChlbGVtZW50UG9zaXRpb25JblBhcnRpdGlv
biA+PSBzZXREZXNjcmlwdG9yLnN0YXJ0KTsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRQb3NpdGlv
bkluUGFydGl0aW9uIDwgc2V0RGVzY3JpcHRvci5lbmQoKSk7CisKKyAgICAgICAgdW5zaWduZWQg
Zmlyc3RVbm1hcmtlZEVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uID0gc2V0RGVzY3JpcHRvci5p
bmRleEFmdGVyTWFya2VkRWxlbWVudHMoKTsKKyAgICAgICAgQVNTRVJUKGZpcnN0VW5tYXJrZWRF
bGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA+PSBzZXREZXNjcmlwdG9yLnN0YXJ0ICYmIGZpcnN0
VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbiA8IHNldERlc2NyaXB0b3IuZW5kKCkp
OworICAgICAgICBBU1NFUlQoZmlyc3RVbm1hcmtlZEVsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9u
ID49IGZpcnN0VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbik7CisKKyAgICAgICAg
Ly8gU3dhcCB0aGUgbm9kZXMgaW4gdGhlIHNldC4KKyAgICAgICAgdW5zaWduZWQgZmlyc3RVbm1h
cmtlZEVsZW1lbnQgPSBtX3BhcnRpdGlvbmVkRWxlbWVudHNbZmlyc3RVbm1hcmtlZEVsZW1lbnRQ
b3NpdGlvbkluUGFydGl0aW9uXTsKKyAgICAgICAgbV9wYXJ0aXRpb25lZEVsZW1lbnRzW2ZpcnN0
VW5tYXJrZWRFbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbl0gPSBlbGVtZW50SW5kZXg7CisgICAg
ICAgIG1fcGFydGl0aW9uZWRFbGVtZW50c1tlbGVtZW50UG9zaXRpb25JblBhcnRpdGlvbl0gPSBm
aXJzdFVubWFya2VkRWxlbWVudDsKKworICAgICAgICAvLyBVcGRhdGUgdGhlaXIgaW5kZXguCisg
ICAgICAgIG1fZWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVzW2VsZW1lbnRJbmRleF0g
PSBmaXJzdFVubWFya2VkRWxlbWVudFBvc2l0aW9uSW5QYXJ0aXRpb247CisgICAgICAgIG1fZWxl
bWVudFBvc2l0aW9uSW5QYXJ0aXRpb25lZE5vZGVzW2ZpcnN0VW5tYXJrZWRFbGVtZW50XSA9IGVs
ZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uOworCisgICAgICAgIGlmICghc2V0RGVzY3JpcHRvci5t
YXJrZWRDb3VudCkgeworICAgICAgICAgICAgQVNTRVJUKCFtX3NldHNNYXJrZWRJbkN1cnJlbnRH
ZW5lcmF0aW9uLmNvbnRhaW5zKHNldEluZGV4KSk7CisgICAgICAgICAgICBtX3NldHNNYXJrZWRJ
bkN1cnJlbnRHZW5lcmF0aW9uLmFwcGVuZChzZXRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAg
KytzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50OworICAgIH0KKworICAgIC8vIFRoZSBmdW5jdGlv
biBwYXNzZWQgYXMgYXJndW1lbnQgTVVTVCBub3QgbW9kaWZ5IHRoZSBwYXJ0aXRpb24uCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCByZWZpbmVHZW5lcmF0aW9uKGNv
bnN0IEZ1bmN0aW9uJiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgc2V0
SW5kZXggOiBtX3NldHNNYXJrZWRJbkN1cnJlbnRHZW5lcmF0aW9uKSB7CisgICAgICAgICAgICBT
ZXREZXNjcmlwdG9yJiBzZXREZXNjcmlwdG9yID0gbV9zZXRzW3NldEluZGV4XTsKKyAgICAgICAg
ICAgIGlmIChzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50ID09IHNldERlc2NyaXB0b3Iuc2l6ZSkg
eworICAgICAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgbWFya2VkLCB0aGVyZSBpcyBub3Ro
aW5nIHRvIHJlZmluZS4KKyAgICAgICAgICAgICAgICBzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50
ID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU2V0RGVzY3JpcHRvciBuZXdTZXQ7CisgICAgICAgICAgICBib29sIG5ld1NldElzTWFy
a2VkU2V0ID0gc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCAqIDIgPD0gc2V0RGVzY3JpcHRvci5z
aXplOworICAgICAgICAgICAgaWYgKG5ld1NldElzTWFya2VkU2V0KSB7CisgICAgICAgICAgICAg
ICAgLy8gTGVzcyB0aGFuIGhhbGYgb2YgdGhlIG5vZGVzIGhhdmUgYmVlbiBtYXJrZWQuCisgICAg
ICAgICAgICAgICAgbmV3U2V0ID0geyBzZXREZXNjcmlwdG9yLnN0YXJ0LCBzZXREZXNjcmlwdG9y
Lm1hcmtlZENvdW50LCAwIH07CisgICAgICAgICAgICAgICAgc2V0RGVzY3JpcHRvci5zdGFydCA9
IHNldERlc2NyaXB0b3Iuc3RhcnQgKyBzZXREZXNjcmlwdG9yLm1hcmtlZENvdW50OworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbmV3U2V0ID0geyBzZXREZXNjcmlwdG9yLnN0
YXJ0ICsgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3VudCwgc2V0RGVzY3JpcHRvci5zaXplIC0gc2V0
RGVzY3JpcHRvci5tYXJrZWRDb3VudCwgMCB9OworICAgICAgICAgICAgc2V0RGVzY3JpcHRvci5z
aXplIC09IG5ld1NldC5zaXplOworICAgICAgICAgICAgc2V0RGVzY3JpcHRvci5tYXJrZWRDb3Vu
dCA9IDA7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG5ld1NldEluZGV4ID0gbV9zZXRzLnNpemUo
KTsKKyAgICAgICAgICAgIG1fc2V0cy5hcHBlbmQobmV3U2V0KTsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3U2V0LnN0YXJ0OyBpIDwgbmV3U2V0LmVuZCgpOyArK2kpCisgICAg
ICAgICAgICAgICAgbV9lbGVtZW50VG9TZXRNYXBbbV9wYXJ0aXRpb25lZEVsZW1lbnRzW2ldXSA9
IG5ld1NldEluZGV4OworCisgICAgICAgICAgICBmdW5jdGlvbihuZXdTZXRJbmRleCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9zZXRzTWFya2VkSW5DdXJyZW50R2VuZXJhdGlvbi5jbGVhcigpOwor
ICAgIH0KKworICAgIC8vIENhbGwgRnVuY3Rpb24oKSBvbiBldmVyeSBub2RlIG9mIGEgZ2l2ZW4g
c3Vic2V0LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0
ZVNldHMoY29uc3QgRnVuY3Rpb24mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
b3JpZ2luYWxTaXplID0gbV9zZXRzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG9yaWdpbmFsU2l6ZTsgKytpKQorICAgICAgICAgICAgZnVuY3Rpb24oaSk7CisgICAg
fQorCisgICAgLy8gQ2FsbCBGdW5jdGlvbigpIG9uIGV2ZXJ5IG5vZGUgb2YgYSBnaXZlbiBzdWJz
ZXQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBpdGVyYXRlU2V0
KHVuc2lnbmVkIHNldEluZGV4LCBjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCisgICAgeworICAg
ICAgICBTZXREZXNjcmlwdG9yJiBzZXREZXNjcmlwdG9yID0gbV9zZXRzW3NldEluZGV4XTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0RGVzY3JpcHRvci5zdGFydDsgaSA8IHNldERlc2Ny
aXB0b3IuZW5kKCk7ICsraSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKG1fcGFydGl0aW9uZWRFbGVt
ZW50c1tpXSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdEZ1bmN0aW9uPgor
ICAgIHNpemVfdCBmaW5kSW5TZXQodW5zaWduZWQgc2V0SW5kZXgsIGNvbnN0IFRlc3RGdW5jdGlv
biYgdGVzdEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgU2V0RGVzY3JpcHRvciYgc2V0RGVzY3Jp
cHRvciA9IG1fc2V0c1tzZXRJbmRleF07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldERl
c2NyaXB0b3Iuc3RhcnQ7IGkgPCBzZXREZXNjcmlwdG9yLmVuZCgpOyArK2kpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGVsZW1lbnRJbmRleCA9IG1fcGFydGl0aW9uZWRFbGVtZW50c1tpXTsKKyAg
ICAgICAgICAgIGlmICh0ZXN0RnVuY3Rpb24oZWxlbWVudEluZGV4KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudEluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBXVEY6Om5v
dEZvdW5kOworICAgIH0KKworICAgIC8vIEluZGV4IG9mIHRoZSBzZXQgY29udGFpbmluZyB0aGUg
Tm9kZS4KKyAgICB1bnNpZ25lZCBzZXRJbmRleCh1bnNpZ25lZCBlbGVtZW50SW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9lbGVtZW50VG9TZXRNYXBbZWxlbWVudEluZGV4XTsK
KyAgICB9CisKKyAgICAvLyBOb2RlSW5kZXggb2YgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNl
dC4KKyAgICB1bnNpZ25lZCBmaXJzdEVsZW1lbnRJblNldCh1bnNpZ25lZCBzZXRJbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhcnRpdGlvbmVkRWxlbWVudHNbbV9zZXRzW3Nl
dEluZGV4XS5zdGFydF07CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9zZXRzLnNpemUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
c3RydWN0IFNldERlc2NyaXB0b3IgeworICAgICAgICB1bnNpZ25lZCBzdGFydDsKKyAgICAgICAg
dW5zaWduZWQgc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbWFya2VkQ291bnQ7CisKKyAgICAgICAg
dW5zaWduZWQgaW5kZXhBZnRlck1hcmtlZEVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gc3RhcnQg
KyBtYXJrZWRDb3VudDsgfQorICAgICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBz
dGFydCArIHNpemU7IH0KKyAgICB9OworCisgICAgLy8gTGlzdCBvZiBzZXRzLgorICAgIFZlY3Rv
cjxTZXREZXNjcmlwdG9yPiBtX3NldHM7CisKKyAgICAvLyBBbGwgdGhlIGVsZW1lbnQgaW5kaWNl
cyBzdWNoIHRoYXQgdHdvIGVsZW1lbnRzIG9mIHRoZSBzYW1lIHNldCBuZXZlciBoYXZlIGEgZWxl
bWVudCBvZiBhIGRpZmZlcmVudCBzZXQgYmV0d2VlbiB0aGVtLgorICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV9wYXJ0aXRpb25lZEVsZW1lbnRzOworCisgICAgLy8gTWFwIGVsZW1lbnRJbmRleC0+cG9z
aXRpb24gaW4gdGhlIHBhcnRpdGlvbmVkRWxlbWVudHMuCisgICAgVmVjdG9yPHVuc2lnbmVkPiBt
X2VsZW1lbnRQb3NpdGlvbkluUGFydGl0aW9uZWROb2RlczsKKworICAgIC8vIE1hcCBlbGVtZW50
SW5kZXgtPlNldEluZGV4LgorICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9lbGVtZW50VG9TZXRNYXA7
CisKKyAgICAvLyBMaXN0IG9mIHNldHMgd2l0aCBhbnkgbWFya2VkIG5vZGUuIEVhY2ggc2V0IGNh
biBhcHBlYXIgYXQgbW9zdCBvbmNlLgorICAgIC8vIEZJWE1FOiBmaW5kIGEgZ29vZCBpbmxpbmUg
c2l6ZSBmb3IgdGhpcy4KKyAgICBWZWN0b3I8dW5zaWduZWQsIDEyOD4gbV9zZXRzTWFya2VkSW5D
dXJyZW50R2VuZXJhdGlvbjsKK307CisKK2NsYXNzIEZ1bGxHcmFwaFBhcnRpdGlvbiB7CitwdWJs
aWM6CisgICAgRnVsbEdyYXBoUGFydGl0aW9uKGNvbnN0IFZlY3RvcjxERkFOb2RlPiYgZGZhR3Jh
cGgpCisgICAgeworICAgICAgICBtX25vZGVQYXJ0aXRpb24uaW5pdGlhbGl6ZShkZmFHcmFwaC5z
aXplKCkpOworCisgICAgICAgIG1fZmxhdHRlbmVkVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5v
ZGUucmVzaXplKGRmYUdyYXBoLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQmIGNvdW50
ZXIgOiBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlKQorICAgICAgICAg
ICAgY291bnRlciA9IDA7CisKKyAgICAgICAgbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25z
U3RhcnRPZmZzZXRQZXJOb2RlLnJlc2l6ZShkZmFHcmFwaC5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkJiBjb3VudGVyIDogbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRP
ZmZzZXRQZXJOb2RlKQorICAgICAgICAgICAgY291bnRlciA9IDA7CisKKyAgICAgICAgLy8gQ291
bnQgdGhlIG51bWJlciBvZiBpbmNvbWluZyB0cmFuc2l0aW9ucyBwZXIgbm9kZS4KKyAgICAgICAg
Zm9yIChjb25zdCBERkFOb2RlJiBkZmFOb2RlIDogZGZhR3JhcGgpIHsKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgdHJhbnNpdGlvbiA6IGRmYU5vZGUudHJhbnNpdGlvbnMpCisgICAgICAg
ICAgICAgICAgKyttX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW3RyYW5z
aXRpb24udmFsdWVdOworICAgICAgICAgICAgaWYgKGRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0
aW9uKQorICAgICAgICAgICAgICAgICsrbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3Rh
cnRPZmZzZXRQZXJOb2RlW2RmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEFjY3VtdWxhdGUgdGhlIG9mZnNldHMuCisgICAgICAgIHVuc2lnbmVkIHRy
YW5zaXRpb25BY2N1bXVsYXRvciA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCB0cmFuc2l0aW9uc0NvdW50Rm9yTm9kZSA9IG1fZmxhdHRl
bmVkVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbaV07CisgICAgICAgICAgICBtX2ZsYXR0
ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlW2ldID0gdHJhbnNpdGlvbkFjY3VtdWxh
dG9yOworICAgICAgICAgICAgdHJhbnNpdGlvbkFjY3VtdWxhdG9yICs9IHRyYW5zaXRpb25zQ291
bnRGb3JOb2RlOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGZsYXR0ZW5lZFRyYW5zaXRp
b25zU2l6ZSA9IHRyYW5zaXRpb25BY2N1bXVsYXRvcjsKKworICAgICAgICB1bnNpZ25lZCBmYWxs
YmFja1RyYW5zaXRpb25BY2N1bXVsYXRvciA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGUu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZhbGxiYWNrVHJhbnNpdGlvbnND
b3VudEZvck5vZGUgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBl
ck5vZGVbaV07CisgICAgICAgICAgICBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFy
dE9mZnNldFBlck5vZGVbaV0gPSBmYWxsYmFja1RyYW5zaXRpb25BY2N1bXVsYXRvcjsKKyAgICAg
ICAgICAgIGZhbGxiYWNrVHJhbnNpdGlvbkFjY3VtdWxhdG9yICs9IGZhbGxiYWNrVHJhbnNpdGlv
bnNDb3VudEZvck5vZGU7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgZmxhdHRlbmVkRmFs
bGJhY2tUcmFuc2l0aW9uc1NpemUgPSBmYWxsYmFja1RyYW5zaXRpb25BY2N1bXVsYXRvcjsKKwor
ICAgICAgICAvLyBOZXh0LCBsZXQncyBmaWxsIHRoZSB0cmFuc2l0aW9uIHRhYmxlIGFuZCBzZXQg
dXAgdGhlIHNpemUgb2YgZWFjaCBncm91cCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICBtX2Zs
YXR0ZW5lZFRyYW5zaXRpb25zU2l6ZVBlck5vZGUucmVzaXplKGRmYUdyYXBoLnNpemUoKSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQmIGNvdW50ZXIgOiBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6
ZVBlck5vZGUpCisgICAgICAgICAgICBjb3VudGVyID0gMDsKKworICAgICAgICBtX2ZsYXR0ZW5l
ZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplUGVyTm9kZS5yZXNpemUoZGZhR3JhcGguc2l6ZSgpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCYgY291bnRlciA6IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFu
c2l0aW9uc1NpemVQZXJOb2RlKQorICAgICAgICAgICAgY291bnRlciA9IDA7CisKKyAgICAgICAg
bV9mbGF0dGVuZWRUcmFuc2l0aW9ucy5yZXNpemUoZmxhdHRlbmVkVHJhbnNpdGlvbnNTaXplKTsK
KworICAgICAgICBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnMucmVzaXplKGZsYXR0ZW5l
ZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZGZhR3JhcGguc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IERGQU5vZGUm
IGRmYU5vZGUgPSBkZmFHcmFwaFtpXTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdHJh
bnNpdGlvbiA6IGRmYU5vZGUudHJhbnNpdGlvbnMpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXROb2RlSW5kZXggPSB0cmFuc2l0aW9uLnZhbHVlOworCisgICAgICAgICAgICAgICAg
dW5zaWduZWQgc3RhcnQgPSBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2Rl
W3RhcmdldE5vZGVJbmRleF07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9m
bGF0dGVuZWRUcmFuc2l0aW9uc1NpemVQZXJOb2RlW3RhcmdldE5vZGVJbmRleF07CisKKyAgICAg
ICAgICAgICAgICBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zW3N0YXJ0ICsgb2Zmc2V0XSA9IFRyYW5z
aXRpb24oeyBpLCB0YXJnZXROb2RlSW5kZXgsIHRyYW5zaXRpb24ua2V5IH0pOworCisgICAgICAg
ICAgICAgICAgKyttX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZVBlck5vZGVbdGFyZ2V0Tm9kZUlu
ZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNr
VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldE5vZGVJbmRleCA9
IGRmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uOworCisgICAgICAgICAgICAgICAgdW5zaWduZWQg
c3RhcnQgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVb
dGFyZ2V0Tm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBtX2Zs
YXR0ZW5lZEZhbGxiYWNrVHJhbnNpdGlvbnNTaXplUGVyTm9kZVt0YXJnZXROb2RlSW5kZXhdOwor
CisgICAgICAgICAgICAgICAgbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zW3N0YXJ0ICsg
b2Zmc2V0XSA9IGk7CisgICAgICAgICAgICAgICAgKyttX2ZsYXR0ZW5lZEZhbGxiYWNrVHJhbnNp
dGlvbnNTaXplUGVyTm9kZVt0YXJnZXROb2RlSW5kZXhdOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbml0aWFsIHBhcnRpdGlvbiBvZiB0cmFuc2l0
aW9uLiBFYWNoIGNoYXJhY3RlciBkaWZmZXJlbnRpYXRpbmcgYSB0cmFuc2l0b24KKyAgICAgICAg
Ly8gZnJvbSBhbiBvdGhlciBnZXRzIGl0cyBvd24gc2V0IGluIHRoZSBwYXJ0aXRpb24uCisgICAg
ICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5pbml0aWFsaXplKG1fZmxhdHRlbmVkVHJhbnNpdGlv
bnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1aW50MTZfdCBpID0gMDsgaSA8IDEyODsgKytpKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHRyYW5zaXRpb25JbmRleCA9IDA7IHRyYW5zaXRp
b25JbmRleCA8IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnMuc2l6ZSgpOyArK3RyYW5zaXRpb25JbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24mIHRyYW5zaXRpb24gPSBtX2Zs
YXR0ZW5lZFRyYW5zaXRpb25zW3RyYW5zaXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgaWYg
KHRyYW5zaXRpb24uY2hhcmFjdGVyID09IGkpCisgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNp
dGlvblBhcnRpdGlvbi5tYXJrRWxlbWVudEluQ3VycmVudEdlbmVyYXRpb24odHJhbnNpdGlvbklu
ZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fdHJhbnNpdGlvblBhcnRpdGlvbi5y
ZWZpbmVHZW5lcmF0aW9uKFtdKHVuc2lnbmVkKSB7IH0pOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRmFsbGJhY2sgcGFydGl0aW9ucyBhcmUgY29uc2lkZXJlZCBhcyBhIHNwZWNpYWwgdHlwZSBv
ZiBkaWZmZXJlbnRpYXRvciwgd2UgZG9uJ3Qgc3BsaXQgdGhlbSBpbml0aWFsbHkuCisgICAgICAg
IG1fZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9uLmluaXRpYWxpemUobV9mbGF0dGVuZWRGYWxs
YmFja1RyYW5zaXRpb25zLnNpemUoKSk7CisgICAgfQorCisgICAgdm9pZCBtYXJrTm9kZSh1bnNp
Z25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBtX25vZGVQYXJ0aXRpb24ubWFya0VsZW1l
bnRJbkN1cnJlbnRHZW5lcmF0aW9uKG5vZGVJbmRleCk7CisgICAgfQorCisgICAgdm9pZCByZWZp
bmVQYXJ0aXRpb25zKCkKKyAgICB7CisgICAgICAgIG1fbm9kZVBhcnRpdGlvbi5yZWZpbmVHZW5l
cmF0aW9uKFsmXSh1bnNpZ25lZCBzbWFsbGVzdFNldEluZGV4KSB7CisgICAgICAgICAgICBtX25v
ZGVQYXJ0aXRpb24uaXRlcmF0ZVNldChzbWFsbGVzdFNldEluZGV4LCBbJl0odW5zaWduZWQgbm9k
ZUluZGV4KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5jb21pbmdUcmFuc2l0aW9uc1N0
YXJ0Rm9yTm9kZSA9IG1fZmxhdHRlbmVkVHJhbnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbbm9k
ZUluZGV4XTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmNvbWluZ1RyYW5zaXRpb25zU2l6
ZUZvck5vZGUgPSBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zU2l6ZVBlck5vZGVbbm9kZUluZGV4XTsK
KworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmNvbWluZ1RyYW5z
aXRpb25zU2l6ZUZvck5vZGU7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9u
UGFydGl0aW9uLm1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbihpbmNvbWluZ1RyYW5zaXRp
b25zU3RhcnRGb3JOb2RlICsgaSk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmNvbWlu
Z0ZhbGxiYWNrVHJhbnNpdGlvbnNTdGFydEZvck5vZGUgPSBtX2ZsYXR0ZW5lZEZhbGxiYWNrVHJh
bnNpdGlvbnNTdGFydE9mZnNldFBlck5vZGVbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbmNvbWluZ0ZhbGxiYWNrVHJhbnNpdGlvbnNTaXplRm9yTm9kZSA9IG1fZmxhdHRl
bmVkRmFsbGJhY2tUcmFuc2l0aW9uc1NpemVQZXJOb2RlW25vZGVJbmRleF07CisKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5jb21pbmdGYWxsYmFja1RyYW5zaXRp
b25zU2l6ZUZvck5vZGU7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgbV9mYWxsYmFja1RyYW5z
aXRpb25QYXJ0aXRpb24ubWFya0VsZW1lbnRJbkN1cnJlbnRHZW5lcmF0aW9uKGluY29taW5nRmFs
bGJhY2tUcmFuc2l0aW9uc1N0YXJ0Rm9yTm9kZSArIGkpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBtX3RyYW5zaXRpb25QYXJ0aXRpb24ucmVmaW5lR2VuZXJhdGlvbihbXSh1bnNpZ25l
ZCkgeyB9KTsKKyAgICAgICAgICAgIG1fZmFsbGJhY2tUcmFuc2l0aW9uUGFydGl0aW9uLnJlZmlu
ZUdlbmVyYXRpb24oW10odW5zaWduZWQpIHsgfSk7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHZvaWQgc3BsaXRCeVVuaXF1ZVRyYW5zaXRpb25zKCkKKyAgICB7CisgICAgICAgIGZvciAoOyBt
X25leHRUcmFuc2l0aW9uU2V0VG9Qcm9jZXNzIDwgbV90cmFuc2l0aW9uUGFydGl0aW9uLnNpemUo
KTsgKyttX25leHRUcmFuc2l0aW9uU2V0VG9Qcm9jZXNzKSB7CisgICAgICAgICAgICAvLyBXZSB1
c2UgdGhlIGtub3duIHNwbGl0dGVycyB0byByZWZpbmUgdGhlIHNldC4KKyAgICAgICAgICAgIG1f
dHJhbnNpdGlvblBhcnRpdGlvbi5pdGVyYXRlU2V0KG1fbmV4dFRyYW5zaXRpb25TZXRUb1Byb2Nl
c3MsIFsmXSh1bnNpZ25lZCB0cmFuc2l0aW9uSW5kZXgpIHsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzb3VyY2VOb2RlSW5kZXggPSBtX2ZsYXR0ZW5lZFRyYW5zaXRpb25zW3RyYW5zaXRpb25J
bmRleF0uc291cmNlOworICAgICAgICAgICAgICAgIG1fbm9kZVBhcnRpdGlvbi5tYXJrRWxlbWVu
dEluQ3VycmVudEdlbmVyYXRpb24oc291cmNlTm9kZUluZGV4KTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICByZWZpbmVQYXJ0aXRpb25zKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHNwbGl0QnlGYWxsYmFja1RyYW5zaXRpb25zKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9uZXh0VHJhbnNpdGlvblNldFRvUHJvY2VzcyB8fCAhbV90cmFuc2l0
aW9uUGFydGl0aW9uLnNpemUoKSwgIldlIGNhbiBvbmx5IGRpc3Rpbmd1aXNoIG5vZGVzIGJ5IGZh
bGxiYWNrIHRyYW5zaXRpb24gKmFmdGVyKiBhbGwgb3RoZXIgdHJhbnNpdGlvbnMgYXJlIGNvdmVy
ZWQuIERvaW5nIG90aGVyd2lzZSB3b3VsZCBiZSBpbmNvcnJlY3Qgc2luY2UgdGhlIHVuaXF1ZSB0
cmFuc2l0aW9ucyBmcm9tIDIgbm9kZXMgY291bGQgY292ZXIgYWxsIHBvc3NpYmxlIHRyYW5zaXRp
b25zLiIpOworCisgICAgICAgIGZvciAodW5zaWduZWQgZmFsbGJhY2tUcmFuc2l0aW9uU2V0SW5k
ZXggPSAwOyBmYWxsYmFja1RyYW5zaXRpb25TZXRJbmRleCA8IG1fZmFsbGJhY2tUcmFuc2l0aW9u
UGFydGl0aW9uLnNpemUoKTsgKytmYWxsYmFja1RyYW5zaXRpb25TZXRJbmRleCkgeworCisgICAg
ICAgICAgICBtX2ZhbGxiYWNrVHJhbnNpdGlvblBhcnRpdGlvbi5pdGVyYXRlU2V0KGZhbGxiYWNr
VHJhbnNpdGlvblNldEluZGV4LCBbJl0odW5zaWduZWQgdHJhbnNpdGlvbkluZGV4KSB7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc291cmNlTm9kZUluZGV4ID0gbV9mbGF0dGVuZWRGYWxsYmFj
a1RyYW5zaXRpb25zW3RyYW5zaXRpb25JbmRleF07CisgICAgICAgICAgICAgICAgbV9ub2RlUGFy
dGl0aW9uLm1hcmtFbGVtZW50SW5DdXJyZW50R2VuZXJhdGlvbihzb3VyY2VOb2RlSW5kZXgpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZWZpbmVQYXJ0aXRpb25zKCk7CisKKyAgICAg
ICAgICAgIC8vIEFueSBuZXcgc3BsaXQgbmVlZCB0byBzcHJlYWQgdG8gYWxsIHRoZSB1bmlxdWUg
dHJhbnNpdGlvbiB0aGF0IGNhbiByZWFjaCB0aGUgdHdvIG5ldyBzZXRzLgorICAgICAgICAgICAg
c3BsaXRCeVVuaXF1ZVRyYW5zaXRpb25zKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNp
Z25lZCBub2RlUmVwbGFjZW1lbnQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAg
dW5zaWduZWQgc2V0SW5kZXggPSBtX25vZGVQYXJ0aXRpb24uc2V0SW5kZXgobm9kZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuIG1fbm9kZVBhcnRpdGlvbi5maXJzdEVsZW1lbnRJblNldChzZXRJbmRl
eCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0cnVjdCBUcmFuc2l0aW9uIHsKKyAgICAgICAg
dW5zaWduZWQgc291cmNlOworICAgICAgICB1bnNpZ25lZCB0YXJnZXQ7CisgICAgICAgIHVpbnQx
Nl90IGNoYXJhY3RlcjsKKyAgICB9OworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZsYXR0ZW5l
ZFRyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9m
bGF0dGVuZWRUcmFuc2l0aW9uc1NpemVQZXJOb2RlOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9m
bGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU3RhcnRPZmZzZXRQZXJOb2RlOworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gbV9mbGF0dGVuZWRGYWxsYmFja1RyYW5zaXRpb25zU2l6ZVBlck5vZGU7CisK
KyAgICBWZWN0b3I8VHJhbnNpdGlvbj4gbV9mbGF0dGVuZWRUcmFuc2l0aW9uczsKKyAgICBWZWN0
b3I8dW5zaWduZWQ+IG1fZmxhdHRlbmVkRmFsbGJhY2tUcmFuc2l0aW9uczsKKworICAgIFBhcnRp
dGlvbiBtX25vZGVQYXJ0aXRpb247CisgICAgUGFydGl0aW9uIG1fdHJhbnNpdGlvblBhcnRpdGlv
bjsKKyAgICBQYXJ0aXRpb24gbV9mYWxsYmFja1RyYW5zaXRpb25QYXJ0aXRpb247CisKKyAgICB1
bnNpZ25lZCBtX25leHRUcmFuc2l0aW9uU2V0VG9Qcm9jZXNzIHsgMCB9OworfTsKKworc3RydWN0
IFRyYW5zaXRpb24geworICAgIHVuc2lnbmVkIHNvdXJjZTsKKyAgICB1bnNpZ25lZCB0YXJnZXQ7
CisgICAgdWludDE2X3QgY2hhcmFjdGVyOworfTsKKworc3RydWN0IEFjdGlvbktleSB7CisgICAg
ZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBleHBsaWNpdCBBY3Rp
b25LZXkoRGVsZXRlZFZhbHVlVGFnKSB7IHN0YXRlID0gRGVsZXRlZDsgfQorCisgICAgZW51bSBF
bXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGV4cGxpY2l0IEFjdGlvbktleShFbXB0
eVZhbHVlVGFnKSB7IHN0YXRlID0gRW1wdHk7IH0KKworICAgIGV4cGxpY2l0IEFjdGlvbktleShj
b25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zKQorICAgICAgICA6IGFjdGlvbnMoJmFjdGlv
bnMpCisgICAgICAgICwgc3RhdGUoVmFsaWQpCisgICAgeworICAgICAgICBTdHJpbmdIYXNoZXIg
aGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYWN0aW9ucy5kYXRhKCkpLCBhY3Rpb25zLnNpemUo
KSAqIHNpemVvZih1aW50NjRfdCkgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgaGFzaCA9IGhh
c2hlci5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBzdGF0ZSA9PSBFbXB0eTsgfQorICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBzdGF0ZSA9PSBEZWxldGVkOyB9CisKKyAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+
KiBhY3Rpb25zOworICAgIHVuc2lnbmVkIGhhc2g7CisgICAgZW51bSB7CisgICAgICAgIFZhbGlk
LAorICAgICAgICBFbXB0eSwKKyAgICAgICAgRGVsZXRlZAorICAgIH0gc3RhdGU7Cit9OworCitz
dHJ1Y3QgQWN0aW9uS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQWN0
aW9uS2V5JiBhY3Rpb25LZXkpCisgICAgeworICAgICAgICByZXR1cm4gYWN0aW9uS2V5Lmhhc2g7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQWN0aW9uS2V5JiBhLCBjb25z
dCBBY3Rpb25LZXkmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS5zdGF0ZSA9PSBiLnN0YXRl
ICYmICphLmFjdGlvbnMgPT0gKmIuYWN0aW9uczsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3N0cnVjdCBB
Y3Rpb25LZXlIYXNoVHJhaXRzIDogcHVibGljIFdURjo6Q3VzdG9tSGFzaFRyYWl0czxBY3Rpb25L
ZXk+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKK307
CisKK30KKwordW5zaWduZWQgREZBTWluaW1pemVyOjptaW5pbWl6ZShWZWN0b3I8REZBTm9kZT4m
IGRmYUdyYXBoLCB1bnNpZ25lZCByb290KQoreworICAgIHNpbXBsaWZ5VHJhbnNpdGlvbnMoZGZh
R3JhcGgpOworCisgICAgRnVsbEdyYXBoUGFydGl0aW9uIGZ1bGxHcmFwaFBhcnRpdGlvbihkZmFH
cmFwaCk7CisKKyAgICAvLyBVbmxpa2UgdHJhZGl0aW9uYWwgbWluaW1pemF0aW9uIGZpbmFsIHN0
YXRlcyBjYW4gYmUgZGlmZmVyZW50aWF0ZWQgYnkgdGhlaXIgYWN0aW9uLgorICAgIC8vIEluc3Rl
YWQgb2YgY3JlYXRpbmcgYSBzaW5nbGUgc2V0IGZvciB0aGUgZmluYWwgc3RhdGUsIHdlIHBhcnRp
dGlvbiBieSBhY3Rpb25zIGZyb20KKyAgICAvLyB0aGUgc3RhcnQuCisgICAgSGFzaE1hcDxBY3Rp
b25LZXksIFZlY3Rvcjx1bnNpZ25lZD4sIEFjdGlvbktleUhhc2gsIEFjdGlvbktleUhhc2hUcmFp
dHM+IGZpbmFsU3RhdGVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmFHcmFwaC5z
aXplKCk7ICsraSkgeworICAgICAgICBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zID0gZGZhR3Jh
cGhbaV0uYWN0aW9uczsKKyAgICAgICAgaWYgKGFjdGlvbnMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnNvcnQoYWN0aW9ucy5iZWdpbigpLCBhY3Rpb25zLmVuZCgpKTsKKyAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gZmluYWxTdGF0ZXMuYWRkKEFjdGlvbktleShhY3Rpb25zKSwgVmVj
dG9yPHVuc2lnbmVkPigpKTsKKyAgICAgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKGkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChjb25zdCBhdXRvJiBzbG90
IDogZmluYWxTdGF0ZXMpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBmaW5hbFN0YXRlSW5kZXgg
OiBzbG90LnZhbHVlKQorICAgICAgICAgICAgZnVsbEdyYXBoUGFydGl0aW9uLm1hcmtOb2RlKGZp
bmFsU3RhdGVJbmRleCk7CisgICAgICAgIGZ1bGxHcmFwaFBhcnRpdGlvbi5yZWZpbmVQYXJ0aXRp
b25zKCk7CisgICAgfQorCisgICAgLy8gVXNlIGV2ZXJ5IHNwbGl0dGVyIHRvIHJlZmluZSB0aGUg
bm9kZSBwYXJ0aXRpb25zLgorICAgIGZ1bGxHcmFwaFBhcnRpdGlvbi5zcGxpdEJ5VW5pcXVlVHJh
bnNpdGlvbnMoKTsKKworICAgIC8vIEF0IHRoaXMgc3RhZ2UsIHdlIGtub3cgdGhhdCBubyBwYWly
IG9mIHN0YXRlIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRp
b25zLiBUaGV5IGNhbiBzdGlsbAorICAgIC8vIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlaXIgZmFs
bGJhY2sgdHJhbnNpdGlvbnMuCisgICAgLy8KKyAgICAvLyBGb3IgZXhhbXBsZSwgdHdvIHN0YXRl
cyBbMSwgMl0gY2FuIGJvdGggaGF2ZSBhIHRyYW5zaXRpb24gb24gJ3gnIHRvIGEgc3RhdGUgWzNd
LCBidXQgZWFjaCBoYXZlIGZhbGxiYWNrIHRyYW5zaXRpb24KKyAgICAvLyB0byBkaWZmZXJlbnQg
c3RhdGVzIFs0XSBhbmQgWzVdLgorICAgIC8vCisgICAgLy8gSGVyZSwgd2UgZGlzdGluZ3Vpc2gg
c3VjaCBjYXNlcyBhbmQgYXQgZWFjaCBzdGFnZSByZWZpbmUgdGhlIG5ldyBkaXNjb3ZlcmVkIHNl
dHMgYnkgdGhlaXIgaW5kaXZpZHVhbCB0cmFuc2l0aW9ucy4KKyAgICBmdWxsR3JhcGhQYXJ0aXRp
b24uc3BsaXRCeUZhbGxiYWNrVHJhbnNpdGlvbnMoKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
cmVsb2NhdGlvblZlY3RvcjsKKyAgICByZWxvY2F0aW9uVmVjdG9yLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoZGZhR3JhcGguc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZh
R3JhcGguc2l6ZSgpOyArK2kpCisgICAgICAgIHJlbG9jYXRpb25WZWN0b3IuYXBwZW5kKGkpOwor
CisgICAgLy8gS2lsbCB0aGUgdXNlbGVzcyBub2RlcyBhbmQga2VlcCB0cmFjayBvZiB0aGUgbmV3
IG5vZGUgdHJhbnNpdGlvbnMgc2hvdWxkIHBvaW50IHRvLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkZmFHcmFwaC5zaXplKCk7ICsraSkgeworICAgICAgICB1bnNpZ25lZCByZXBsYWNl
bWVudCA9IGZ1bGxHcmFwaFBhcnRpdGlvbi5ub2RlUmVwbGFjZW1lbnQoaSk7CisgICAgICAgIGlm
IChpICE9IHJlcGxhY2VtZW50KSB7CisgICAgICAgICAgICByZWxvY2F0aW9uVmVjdG9yW2ldID0g
cmVwbGFjZW1lbnQ7CisKKyAgICAgICAgICAgIERGQU5vZGUmIG5vZGUgPSBkZmFHcmFwaFtpXTsK
KyAgICAgICAgICAgIG5vZGUuYWN0aW9ucy5jbGVhcigpOworICAgICAgICAgICAgbm9kZS50cmFu
c2l0aW9ucy5jbGVhcigpOworICAgICAgICAgICAgbm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24g
PSBmYWxzZTsKKyAgICAgICAgICAgIG5vZGUuaXNLaWxsZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChERkFOb2RlJiBub2RlIDogZGZhR3JhcGgpIHsKKyAgICAgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbm9kZS50cmFuc2l0aW9ucykKKyAgICAgICAgICAgIHRyYW5z
aXRpb24udmFsdWUgPSByZWxvY2F0aW9uVmVjdG9yW3RyYW5zaXRpb24udmFsdWVdOworICAgICAg
ICBpZiAobm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24pCisgICAgICAgICAgICBub2RlLmZhbGxi
YWNrVHJhbnNpdGlvbiA9IHJlbG9jYXRpb25WZWN0b3Jbbm9kZS5mYWxsYmFja1RyYW5zaXRpb25d
OworICAgIH0KKworICAgIC8vIEFmdGVyIG1pbmltaXppbmcsIHRoZXJlIGlzIG5vIGd1YXJhbnRl
ZSBpbmRpdmlkdWFsIHRyYW5zaXRpb24gYXJlIHN0aWxsIHBvaXRpbmcgdG8gZGlmZmVyZW50IHN0
YXRlcy4KKyAgICAvLyBUaGUgc3RhdGUgcG9pbnRlZCBieSBvbmUgaW5kaXZpZHVhbCB0cmFuc2l0
aW9uIGFuZCB0aGUgZmFsbGJhY2sgc3RhdGVzIG1heSBoYXZlIGJlZW4gbWVyZ2VkLgorICAgIHNp
bXBsaWZ5VHJhbnNpdGlvbnMoZGZhR3JhcGgpOworCisgICAgcmV0dXJuIHJlbG9jYXRpb25WZWN0
b3Jbcm9vdF07Cit9CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFNaW5pbWl6ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xMmU5NDdmNzcxNzg0MzZkYzM0NjJjYzkxYmUzNTkzZWY5OGEzMGRkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTWluaW1pemVy
LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZBTWluaW1pemVyX2gK
KyNkZWZpbmUgREZBTWluaW1pemVyX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
CisKKyNpbmNsdWRlICJERkFOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjbGFzcyBE
RkFNaW5pbWl6ZXIgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB1bnNpZ25l
ZCBtaW5pbWl6ZShWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoLCB1bnNpZ25lZCByb290Tm9kZSk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2VuZGlm
IC8vIERGQU1pbmltaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ERkFOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFO
b2RlLmgKaW5kZXggODQ4YTkzZmM1MjkxNzM3NzIxYjc1NjliZGYxZmVhYWUyOGQ3NmQ2MS4uM2M0
NTNkNDhkZGE2YjRjM2UzZjk2NmE4ZjQwNzdlYmI4MjllZDFhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0RGQU5vZGUuaApAQCAtNDQsNyArNDQsOCBAQCB0eXBlZGVmIEhh
c2hNYXA8dWludDE2X3QsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdU
Rjo6VW5zaWduZWRXaQogY2xhc3MgREZBTm9kZSB7CiBwdWJsaWM6CiAgICAgREZBTm9kZVRyYW5z
aXRpb25zIHRyYW5zaXRpb25zOwotICAgIGJvb2wgaGFzRmFsbGJhY2tUcmFuc2l0aW9uID0gZmFs
c2U7CisgICAgYm9vbCBoYXNGYWxsYmFja1RyYW5zaXRpb24geyBmYWxzZSB9OworICAgIGJvb2wg
aXNLaWxsZWQgeyBmYWxzZSB9OwogICAgIHVuc2lnbmVkIGZhbGxiYWNrVHJhbnNpdGlvbjsKICAg
ICBWZWN0b3I8dWludDY0X3Q+IGFjdGlvbnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL05GQVRvREZBLmNwcAppbmRleCA2MDcyMDE2ZDJlMzIzOGNhMjFlZjc1Yzk0NjQ0
ZDk2YzM5ZmQ4ZTMwLi5lOTE4MWM1ZDZlOTdhNjhhNjZmMzdiMWNlNDMyMmJmNjkwNzZlY2Q3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEuY3BwCkBAIC0z
MzgsNDkgKzMzOCw2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldE9yQ3JlYXRl
REZBTm9kZShjb25zdCBOb2RlSWRTZXQmIG5mYU5vZGVTZXQsIGNvCiAgICAgcmV0dXJuIHVuaXF1
ZU5vZGVJZEFkZFJlc3VsdC5pdGVyYXRvci0+aW1wbCgpLT5tX2RmYU5vZGVJZDsKIH0KIAotc3Rh
dGljIHZvaWQgc2ltcGxpZnlUcmFuc2l0aW9ucyhWZWN0b3I8REZBTm9kZT4mIGRmYUdyYXBoKQot
ewotICAgIGZvciAoREZBTm9kZSYgZGZhTm9kZSA6IGRmYUdyYXBoKSB7Ci0gICAgICAgIGlmICgh
ZGZhTm9kZS5oYXNGYWxsYmFja1RyYW5zaXRpb24KLSAgICAgICAgICAgICYmICgoZGZhTm9kZS50
cmFuc2l0aW9ucy5zaXplKCkgPT0gMTI2ICYmICFkZmFOb2RlLnRyYW5zaXRpb25zLmNvbnRhaW5z
KDApKQotICAgICAgICAgICAgICAgIHx8IChkZmFOb2RlLnRyYW5zaXRpb25zLnNpemUoKSA9PSAx
MjcgJiYgZGZhTm9kZS50cmFuc2l0aW9ucy5jb250YWlucygwKSkpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBiZXN0VGFyZ2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwotICAgICAgICAgICAgdW5zaWduZWQgYmVzdFRhcmdldFNjb3JlID0gMDsKLSAgICAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0YXJnZXRIaXN0
b2dyYW07Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8gdHJhbnNpdGlvbiA6IGRmYU5vZGUu
dHJhbnNpdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRyYW5zaXRpb24ua2V5KQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRy
YW5zaXRpb25UYXJnZXQgPSB0cmFuc2l0aW9uLnZhbHVlOwotICAgICAgICAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gdGFyZ2V0SGlzdG9ncmFtLmFkZCh0cmFuc2l0aW9uVGFyZ2V0LCAxKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKys7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA+IGJlc3RUYXJnZXRTY29yZSkgewotICAgICAgICAg
ICAgICAgICAgICBiZXN0VGFyZ2V0U2NvcmUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwot
ICAgICAgICAgICAgICAgICAgICBiZXN0VGFyZ2V0ID0gdHJhbnNpdGlvblRhcmdldDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGJlc3RUYXJnZXRTY29yZSwgIlRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgdmFsaWQg
dGFyZ2V0IHNpbmNlIGhhdmluZyB0cmFuc2l0aW9ucyBpcyBhIHByZWNvbmRpdGlvbiB0byBlbnRl
ciB0aGlzIHBhdGguIik7Ci0KLSAgICAgICAgICAgIGRmYU5vZGUuaGFzRmFsbGJhY2tUcmFuc2l0
aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIGRmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9uID0gYmVz
dFRhcmdldDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNrVHJh
bnNpdGlvbikgewotICAgICAgICAgICAgVmVjdG9yPHVpbnQxNl90LCAxMjg+IGtleXM7Ci0gICAg
ICAgICAgICBERkFOb2RlVHJhbnNpdGlvbnMmIHRyYW5zaXRpb25zID0gZGZhTm9kZS50cmFuc2l0
aW9uczsKLSAgICAgICAgICAgIGNvcHlLZXlzVG9WZWN0b3IodHJhbnNpdGlvbnMsIGtleXMpOwot
Ci0gICAgICAgICAgICBmb3IgKHVpbnQxNl90IGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHRyYW5zaXRpb25JdGVyYXRvciA9IHRyYW5zaXRpb25zLmZpbmQoa2V5KTsKLSAgICAg
ICAgICAgICAgICBpZiAodHJhbnNpdGlvbkl0ZXJhdG9yLT52YWx1ZSA9PSBkZmFOb2RlLmZhbGxi
YWNrVHJhbnNpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMucmVtb3ZlKHRy
YW5zaXRpb25JdGVyYXRvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
IERGQSBORkFUb0RGQTo6Y29udmVydChORkEmIG5mYSkKIHsKICAgICBWZWN0b3I8TkZBTm9kZT4m
IG5mYUdyYXBoID0gbmZhLm1fbm9kZXM7CkBAIC00MzAsNyArMzg3LDYgQEAgREZBIE5GQVRvREZB
Ojpjb252ZXJ0KE5GQSYgbmZhKQogICAgICAgICB9CiAgICAgfSB3aGlsZSAoIXVucHJvY2Vzc2Vk
Tm9kZXMuaXNFbXB0eSgpKTsKIAotICAgIHNpbXBsaWZ5VHJhbnNpdGlvbnMoZGZhR3JhcGgpOwog
ICAgIHJldHVybiBERkEoV1RGOjptb3ZlKGRmYUdyYXBoKSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQVRvREZBLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFUb0RGQS5oCmluZGV4IDdlZGJkZGI2YWY2Mzg5Yzgw
MGQ0OGU1NzIxYjU1NzY2Yzc4MjJkMWEuLmQxY2IxMTlhOWM3MWIxNWFlZTk1YjVkNTdhODIyYmY2
NzdlMGNmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05G
QVRvREZBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBVG9ERkEu
aApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBORkE7CiAvLyBORkFUb0RGQSBwcm92aWRlcyBhIHdh
eSB0byBidWlsZCBhIERGQSBjb3JyZXNwb25kaW5nIHRvIGEgTkZBLgogY2xhc3MgTkZBVG9ERkEg
ewogcHVibGljOgotICAgIHN0YXRpYyBERkEgY29udmVydChORkEmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgREZBIGNvbnZlcnQoTkZBJik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGUxYzU0NDc4YmQwMjAxMWZiMGJk
ZjlhMGU4NmI2MDdiYzAwZWY3Yy4uNGEyMWVlMGIwMDBkZjE3YTk0MjE0YTI4NWE1MTYzOTM5NzE3
ZjIwOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDE1LTA0LTA3ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBjb25zZXJ2YXRpdmUgREZBIG1pbmltaXplciBm
b3IgdGhlIGNvbnRlbnQgZXh0ZW5zaW9uIG1hdGNoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzUwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0Nv
bnRlbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvREZBTWluaW1pemVyLmNwcDoKKwogMjAxNS0wNC0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBidWlsZC53ZWJraXQub3JnL2Rhc2hib2FyZDogQ3Jh
c2gtb25seSBxdWV1ZXMgc2hvdWxkIHNob3cgZmFpbHVyZSB3aGVuIHRlc3RpbmcgZmFpbHMgdG8g
c3RhcnQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjUwMzlhMmFlOGJlM2ExMzY3ODAzMzEz
YzQxMDIxZDc3ZDU4YmRiNC4uMWVlN2E2Y2QzM2E4ZTY4ZjYyMzVkY2JmNDJjZjY5ZGQ1OTQ4YzQ4
MyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI0LDYgKzI0LDcgQEAKIAkJMjZGNTJFQUYx
ODI4OEMyMzAwMjNENDEyIC8qIGdlb2xvY2F0aW9uR2V0Q3VycmVudFBvc2l0aW9uV2l0aEhpZ2hB
Y2N1cmFjeS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2RjUyRUFFMTgyODhDMDQwMDIzRDQxMiAvKiBnZW9sb2NhdGlvbkdldEN1cnJl
bnRQb3NpdGlvbldpdGhIaWdoQWNjdXJhY3kuaHRtbCAqLzsgfTsKIAkJMjZGNTJFQjIxODI4OEYy
NDAwMjNENDEyIC8qIGdlb2xvY2F0aW9uV2F0Y2hQb3NpdGlvbi5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjUyRUIwMTgyODhGMEYw
MDIzRDQxMiAvKiBnZW9sb2NhdGlvbldhdGNoUG9zaXRpb24uaHRtbCAqLzsgfTsKIAkJMjZGNTJF
QjMxODI4OEYyNDAwMjNENDEyIC8qIGdlb2xvY2F0aW9uV2F0Y2hQb3NpdGlvbldpdGhIaWdoQWNj
dXJhY3kuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNkY1MkVCMTE4Mjg4RjBGMDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25XYXRjaFBvc2l0
aW9uV2l0aEhpZ2hBY2N1cmFjeS5odG1sICovOyB9OworCQkyNkY2RTFGMDFBREM3NDlCMDBERTY5
NkIgLyogREZBTWluaW1pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2RjZFMUVGMUFEQzc0OUIwMERFNjk2QiAvKiBERkFNaW5pbWl6ZXIuY3Bw
ICovOyB9OwogCQkyOTBBOUJCOTE3MzVGNjM4MDBENzFCQkMgLyogT3Blbk5ld1dpbmRvdy5odG1s
IGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
MEE5QkI4MTczNUY0MjMwMEQ3MUJCQyAvKiBPcGVuTmV3V2luZG93Lmh0bWwgKi87IH07CiAJCTI5
MEY0Mjc1MTcyQTIyMUMwMDkzOUZGMCAvKiBjdXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTBG
NDI3NDE3MkExRkRFMDA5MzlGRjAgLyogY3VzdG9tLXByb3RvY29sLXN5bmMteGhyLmh0bWwgKi87
IH07CiAJCTI5NzIzNEI3MTczQUZBQzcwMDk4MzYwMSAvKiBDdXN0b21Qcm90b2NvbHNJbnZhbGlk
U2NoZW1lX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOTcyMzRCNTE3M0FGQUM3MDA5ODM2MDEgLyogQ3VzdG9tUHJvdG9jb2xzSW52YWxp
ZFNjaGVtZV9CdW5kbGUuY3BwICovOyB9OwpAQCAtNDQxLDYgKzQ0Miw3IEBACiAJCTI2RjUyRUFF
MTgyODhDMDQwMDIzRDQxMiAvKiBnZW9sb2NhdGlvbkdldEN1cnJlbnRQb3NpdGlvbldpdGhIaWdo
QWNjdXJhY3kuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGdlb2xvY2F0aW9uR2V0
Q3VycmVudFBvc2l0aW9uV2l0aEhpZ2hBY2N1cmFjeS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNkY1MkVCMDE4Mjg4RjBGMDAyM0Q0MTIgLyogZ2VvbG9jYXRpb25XYXRjaFBv
c2l0aW9uLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBnZW9sb2NhdGlvbldhdGNo
UG9zaXRpb24uaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGNTJFQjExODI4
OEYwRjAwMjNENDEyIC8qIGdlb2xvY2F0aW9uV2F0Y2hQb3NpdGlvbldpdGhIaWdoQWNjdXJhY3ku
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGdlb2xvY2F0aW9uV2F0Y2hQb3NpdGlv
bldpdGhIaWdoQWNjdXJhY3kuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjZG
NkUxRUYxQURDNzQ5QjAwREU2OTZCIC8qIERGQU1pbmltaXplci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFNaW5pbWl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyOTBBOUJCNTE3MzVERThBMDBENzFCQkMgLyogQ2xvc2VOZXdXaW5kb3dJ
bk5hdmlnYXRpb25Qb2xpY3lEZWxlZ2F0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IENsb3NlTmV3V2luZG93SW5OYXZpZ2F0aW9uUG9saWN5RGVsZWdhdGUubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5MEE5QkI4MTczNUY0MjMwMEQ3MUJCQyAv
KiBPcGVuTmV3V2luZG93Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBPcGVuTmV3
V2luZG93Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5MEY0Mjc0MTcyQTFG
REUwMDkzOUZGMCAvKiBjdXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9ICJjdXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NDUsNiArODQ3LDcgQEAKIAkJCQk5M0E3MjBFNTE4RjFB
MEU4MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJN0NCMTg0QzQxQUEz
RjIxMDAwNjZFREZEIC8qIENvbnRlbnRFeHRlbnNpb25zLmNwcCAqLywKIAkJCQlDRDU0NTFFOTE5
RTQxRjlEMDAxNjkzNkYgLyogQ1NTUGFyc2VyLmNwcCAqLywKKwkJCQkyNkY2RTFFRjFBREM3NDlC
MDBERTY5NkIgLyogREZBTWluaW1pemVyLmNwcCAqLywKIAkJCQkxNDQ2NDAxMjE2N0E4MzA1MDAw
QkQyMTggLyogTGF5b3V0VW5pdC5jcHAgKi8sCiAJCQkJQ0RDMkM3MTQxNzk3MDg5RDAwRTYyN0ZC
IC8qIFRpbWVSYW5nZXMuY3BwICovLAogCQkJCTQ0MEExRDM4MTRBMDEwM0EwMDhBNjZGMiAvKiBV
UkwuY3BwICovLApAQCAtMTU4MSw2ICsxNTg0LDcgQEAKIAkJCQk3QUE2QTE1MjFBQUMwQjMxMDAy
QjJFRDMgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFNzc2NUNGMTZDNEQ4
MTEwMEJBMkJCMSAvKiBtYWluTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0E1NjIzMTExQUQ1
QUYzRTAwOTZCOTIwIC8qIE1lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTI2RjZFMUYwMUFEQzc0OUIwMERFNjk2QiAvKiBERkFNaW5pbWl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0E5OUQ5OTQxQUQ0QTI5RDAwMzczMTQxIC8qIE1lbnVUeXBlc0Zvck1v
dXNlRXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAppbmRleCA3ZTJjNWFkN2JjMzEwNmEx
OWUzMGE4ZGQ2ZmRkOTMzMzAwODE2YzdkLi5mNzM3NWY5ZWM4OGI5MzI3OTUzYmY0YWZhZGYxZDFh
ODJjOGNiYzc1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTczMCw0ICs3MzAsMTkwIEBAIFRFU1RfRihD
b250ZW50RXh0ZW5zaW9uVGVzdCwgUGF0dGVybk1hdGNoaW5nVGhlRW1wdHlTdHJpbmcpCiAgICAg
dGVzdFBhdHRlcm5TdGF0dXMoIigoZm9vKT8oKC4pKikoYmFyKSopIiwgQ29udGVudEV4dGVuc2lv
bnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok1hdGNoZXNFdmVyeXRoaW5nKTsKIH0K
IAorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBNaW5pbWl6aW5nV2l0aE1vcmVGaW5hbFN0
YXRlc1RoYW5Ob25GaW5hbFN0YXRlcykKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl5oW2EtejovL10rXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL2Zvby5j
b20vXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL2Jhci5jb20vXCJ9fV0iKTsKKworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb28uY29t
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jhci5jb20v
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwOi8vZm9vLmNvbS8i
KSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJh
dHRwOi8vYmFyLmNvbS8iKSwgeyB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiYnR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnR0cHM6Ly93ZWJraXQub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL2IiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHBzOi8vd2Via2l0Lm9yZy9iIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJjdHRwOi8vd2Via2l0Lm9yZy9CIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiY3R0cHM6Ly93ZWJraXQub3JnL0IiKSwgeyB9KTsK
K30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdGF0ZXNXaXRoRGlmZmVyZW50QWN0
aW9uc0FyZU5vdFVuaWZpZWQxKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJb
e1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRl
clwiOlwiXmh0dHA6Ly93d3cud2Via2l0Lm9yZy9cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwi
OlwiXmh0dHBzOi8vd3d3LndlYmtpdC5vcmcvXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7
XCJ0eXBlXCI6XCJibG9jay1jb29raWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
Il5hdHRwczovL3d3dy53ZWJraXQub3JnL1wifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwczovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYXR0cHM6Ly93d3cud2Vi
a2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVz
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly93d3cud2Via2l0Lm9yZy9hIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwczovL3d3dy53ZWJraXQub3JnL0IiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tDb29raWVzIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImF0dHBzOi8vd3d3LndlYmtpdC5vcmcvYyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3d3dy53aGF0d2cub3JnLyIpLCB7IH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd3d3
LndoYXR3Zy5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiYXR0cHM6Ly93d3cud2hhdHdnLm9yZy8iKSwgeyB9KTsKK30KKworVEVTVF9G
KENvbnRlbnRFeHRlbnNpb25UZXN0LCBTdGF0ZXNXaXRoRGlmZmVyZW50QWN0aW9uc0FyZU5vdFVu
aWZpZWQyKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmh0dHA6
Ly93d3cud2Via2l0Lm9yZy9cIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrLWNvb2tpZXNcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmh0dHBzOi8v
d3d3LndlYmtpdC5vcmcvXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJj
c3MtZGlzcGxheS1ub25lXCIsIFwic2VsZWN0b3JcIjpcIiNmb29cIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiXmh0dHBzOi8vd3d3LndlYmtpdC5vcmcvXCJ9fV0iKTsKKworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93d3cud2Via2l0
Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkNTU0Rpc3Bs
YXlOb25lU2VsZWN0b3IsIENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tp
ZXMgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cHM6Ly93d3cud2hhdHdnLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJhdHRwczovL3d3dy53aGF0d2cub3JnLyIpLCB7IH0pOworfQor
CisvLyBUaGUgb3JkZXIgaW4gd2hpY2ggdHJhbnNpdGlvbnMgZnJvbSB0aGUgcm9vdCB3aWxsIGJl
IHByb2Nlc3NlZCBpcyB1bnByZWRpY3RhYmxlLgorLy8gVG8gZXhlcmNpc2VzIHRoZSB2YXJpb3Vz
IG9wdGlvbnMsIHRoaXMgdGVzdCBleGlzdHMgaW4gdmFyaW91cyB2ZXJzaW9uIGV4Y2hhbmdpbmcg
dGhlIHRyYW5zaXRpb24gdG8gdGhlIGZpbmFsIHN0YXRlLgorVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTEp
Cit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYS5hXCJ9fSwiCisg
ICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJeYi5hXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6
XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYmFjXCJ9fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJeYmJjXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeQkNDXCJ9fV0iKTsKKworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImF6YTovL3d3dy53ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYWM6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImJiYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYmNjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImFhYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFiYzovL3d3dy53ZWJraXQub3JnLyIp
LCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFj
YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnpjOi8vd3d3LndlYmtp
dC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CitURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1l
cmdlMikKK3sKKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iYWNcIn19
LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcIl5iYmNcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5CQ0NcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5hLmFcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5iLmFcIn19XSIpOwor
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYXphOi8vd3d3
LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemE6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImJhYzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYmJjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJiY2M6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiYWFjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWJjOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiYWNjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsK
KyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiemM6Ly93d3cu
d2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJiemM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKK30KK1RFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZmZXJlbnRpYXRvckRv
Tm90TWVyZ2UzKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEu
Y1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmIuY1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmJhYVwi
fX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiXmJiYVwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXkJDQVwifX1d
Iik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhemM6
Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImJ6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYmFhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJiYmE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImJjYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYWE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYmE6Ly93d3cud2Vi
a2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJhY2E6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKworICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImJ6YTov
L3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImJ6YTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworfQorVEVTVF9G
KENvbnRlbnRFeHRlbnNpb25UZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlh
dG9yRG9Ob3RNZXJnZTQpCit7CisgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJeYmFhXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYmJhXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJe
QkNBXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYS5jXCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeYi5j
XCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
ImF6YzovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBl
OjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVx
dWVzdCgiYnpjOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlv
blR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJiYWE6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImJiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiYmNhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFiYTovL3d3
dy53ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImFjYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworCisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcv
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
YnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiYnphOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7Cit9CisK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJO
b2RlSW5TYW1lR3JvdXBEb2VzTm90RGlmZmVyZW50aWF0ZUdyb3VwKQoreworICAgIGF1dG8gYmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmFhY1wifX0sIgorICAgICAgICAie1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmEu
Y1wifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmIuY1wifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYWM6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1
ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFiYzovL3d3dy53ZWJraXQub3JnLyIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmFjOi8vd3d3LndlYmtpdC5v
cmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJhYmM6Ly93d3cud2Vi
a2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWFhOi8v
d3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiYWNhOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYmFhOi8vd3d3LndlYmtpdC5vcmcv
IiksIHsgfSk7Cit9CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2ltcGxlRmFsbEJh
Y2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IxKQoreworICAgIGF1dG8gYmFja2VuZCA9IG1ha2VC
YWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwiXmEuYmMuZGVcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5hLmJkLmVmXCJ9
fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFi
YmNjZGU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJl
cXVlc3QoImFhYmNkZGU6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImFhYmRkZWY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImFhYmRkZWY6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyBD
b250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYWJjZGU6Ly93d3cud2Via2l0Lm9y
Zy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJhYmRlZjovL3d3dy53ZWJraXQub3JnLyIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIFNpbXBsZUZhbGxCYWNrVHJhbnNpdGlvbkRpZmZlcmVudGlhdG9yMikKK3sK
KyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5jYi5cIn19LCIKKyAgICAg
ICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcIl5kYi5iXCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImNiYTovL3d3dy53ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiY2JiOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkYmFiOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgQ29u
dGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVz
dChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkYnhiOi8vd3d3LndlYmtpdC5vcmcvIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImNjYTovL3d3dy53ZWJraXQu
b3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImRkZGQ6Ly93d3cud2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJiYmJiOi8vd3d3LndlYmtpdC5vcmcvIiksIHsgfSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQU1pbmltaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzZkNmFi
ZGIyNzU0NjQ2ZjAzNWE0OWRjYmEyNWMzMDBlYTg0NTg2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
V2ViQ29yZS9Db21iaW5lZFVSTEZpbHRlcnMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05GQS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTkZBVG9ERkEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTEZpbHRl
clBhcnNlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIERGQU1pbmlt
aXplclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsK
KyAgICB9Cit9OworCit1bnNpZ25lZCBjb3VudExpdmVOb2Rlcyhjb25zdCBDb250ZW50RXh0ZW5z
aW9uczo6REZBJiBkZmEpCit7CisgICAgdW5zaWduZWQgY291bnRlciA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRmYS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWRmYS5u
b2RlQXQoaSkuaXNLaWxsZWQpCisgICAgICAgICAgICArK2NvdW50ZXI7CisgICAgfQorICAgIHJl
dHVybiBjb3VudGVyOworfQorCitDb250ZW50RXh0ZW5zaW9uczo6REZBIGJ1aWxkREZBRnJvbVBh
dHRlcm5zKFZlY3Rvcjxjb25zdCBjaGFyKj4gcGF0dGVybnMpCit7CisgICAgQ29udGVudEV4dGVu
c2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5lZFVSTEZpbHRlcnM7CisgICAgQ29udGVu
dEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlciBwYXJzZXIoY29tYmluZWRVUkxGaWx0ZXJzKTsK
KworICAgIGZvciAoY29uc3QgY2hhciogcGF0dGVybiA6IHBhdHRlcm5zKQorICAgICAgICBwYXJz
ZXIuYWRkUGF0dGVybihwYXR0ZXJuLCBmYWxzZSwgMCk7CisgICAgVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25zOjpORkE+IG5mYXMgPSBjb21iaW5lZFVSTEZpbHRlcnMuY3JlYXRlTkZBcygpOworICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uczo6TkZBVG9ERkE6OmNvbnZlcnQobmZhc1swXSk7Cit9
CisKK1RFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBCYXNpY1NlYXJjaCkKK3sKKyAgICBDb250ZW50
RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIi4qZm9vIiwgIi4q
YmFyIiwgIi4qYmFuZyJ9KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMCks
IGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIGRmYS5taW5pbWl6ZSgpOworICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKK30KKworVEVT
VF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0
b3JEb05vdE1lcmdlMSkKK3sKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxk
REZBRnJvbVBhdHRlcm5zKHsgIl5hLmEiLCAiXmIuYSIsICJeYmFjIiwgIl5iYmMiLCAiXkJDQyJ9
KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMyksIGNvdW50TGl2ZU5vZGVz
KGRmYSkpOworICAgIGRmYS5taW5pbWl6ZSgpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKK30KKworVEVTVF9GKERGQU1pbmltaXpl
clRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMikK
K3sKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5z
KHsgIl5iYmMiLCAiXkJDQyIsICJeYS5hIiwgIl5iLmEifSk7CisgICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oMTEpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBkZmEubWluaW1p
emUoKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9k
ZXMoZGZhKSk7Cit9CisKK1RFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRp
b25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTMpCit7CisgICAgQ29udGVudEV4dGVuc2lv
bnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYS5jIiwgIl5iLmMiLCAiXmJh
YSIsICJeYmJhIiwgIl5CQ0EifSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MTMpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBkZmEubWluaW1pemUoKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7Cit9CisK
K1RFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVu
dGlhdG9yRG9Ob3RNZXJnZTQpCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBi
dWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYmFhIiwgIl5iYmEiLCAiXkJDQSIsICJeYS5jIiwgIl5i
LmMifSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTMpLCBjb3VudExpdmVO
b2RlcyhkZmEpKTsKKyAgICBkZmEubWluaW1pemUoKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7Cit9CisKK1RFU1RfRihERkFNaW5p
bWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zVG9PdGhlck5vZGVJblNhbWVHcm91cERvZXNO
b3REaWZmZXJlbnRpYXRlR3JvdXApCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEg
PSBidWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYWFjIiwgIl5hLmMiLCAiXmIuYyJ9KTsKKyAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig5KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7Cisg
ICAgZGZhLm1pbmltaXplKCk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNSks
IGNvdW50TGl2ZU5vZGVzKGRmYSkpOworfQorCitURVNUX0YoREZBTWluaW1pemVyVGVzdCwgU2lt
cGxlRmFsbEJhY2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IxKQoreworICAgIENvbnRlbnRFeHRl
bnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmEuYmMuZGUiLCAiXmEu
YmQuZWYifSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTIpLCBjb3VudExp
dmVOb2RlcyhkZmEpKTsKKyAgICBkZmEubWluaW1pemUoKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigxMSksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworfQorCitURVNUX0YoREZB
TWluaW1pemVyVGVzdCwgU2ltcGxlRmFsbEJhY2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IyKQor
eworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMo
eyAiXmNiLiIsICJeZGIuYiJ9KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig4
KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgZGZhLm1pbmltaXplKCk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="275470"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>