<?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>93361</bug_id>
          
          <creation_ts>2012-08-07 06:11:43 -0700</creation_ts>
          <short_desc>DFG should compute immediate dominators using the O(n log n) form of Lengauer and Tarjan&apos;s &quot;A Fast Algorithm for Finding Dominators in a Flowgraph&quot;</short_desc>
          <delta_ts>2014-09-02 19:54:29 -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>JavaScriptCore</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>
          
          <blocked>136331</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="nare">karapetyan.nare</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>689091</commentid>
    <comment_count>0</comment_count>
      <attachid>156927</attachid>
    <who name="nare">karapetyan.nare</who>
    <bug_when>2012-08-07 06:11:43 -0700</bug_when>
    <thetext>Created attachment 156927
Add in DFGDominators immediate dominators computing function.

Add immediate dominators information in Dominators class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692222</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 22:33:08 -0700</bug_when>
    <thetext>Attachment 156927 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDominators.cp...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGDominators.cpp:55:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:122:  Missing space before ( in for(  [whitespace/parens] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:122:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:123:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:125:  Missing spaces around =  [whitespace/operators] [4]
Source/JavaScriptCore/dfg/DFGDominators.cpp:125:  Missing space before ( in for(  [whitespace/parens] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:125:  Missing space before {  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:126:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/dfg/DFGDominators.cpp:128:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/dfg/DFGDominators.h:46:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.cpp:325:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 11 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692481</commentid>
    <comment_count>2</comment_count>
      <attachid>157712</attachid>
    <who name="nare">karapetyan.nare</who>
    <bug_when>2012-08-10 05:17:22 -0700</bug_when>
    <thetext>Created attachment 157712
Add in DFGDominators immediate dominators computing function.

with correct style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694169</commentid>
    <comment_count>3</comment_count>
      <attachid>157712</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-08-13 15:37:07 -0700</bug_when>
    <thetext>Comment on attachment 157712
Add in DFGDominators immediate dominators computing function.

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

&gt; Source/JavaScriptCore/dfg/DFGDominators.h:59
&gt; +    bool isIDomChilds(BlockIndex from, BlockIndex to) const    

I would change this to immediatelyDominates(from, to).

&gt; Source/JavaScriptCore/dfg/DFGDominators.cpp:133
&gt; +void Dominators::buildIDomRelation(Graph&amp; graph)
&gt; +{
&gt; +    ASSERT(isValid());
&gt; +    unsigned numBlocks = graph.m_blocks.size();
&gt; +
&gt; +    for (unsigned j = 0; j &lt; numBlocks; ++j)
&gt; +    for (size_t i = 0; i &lt; numBlocks; ++i) {
&gt; +        if (!m_results[i].get(j)) // i(to), j(from) I need finde j-&gt;dominates set
&gt; +            continue;
&gt; +        m_resultsIDom[i].set(j);
&gt; +        m_resultsIDom[j].clear(j);
&gt; +    }
&gt; +
&gt; +    for (unsigned i = 0; i &lt; numBlocks; ++i) {
&gt; +        if (!graph.m_blocks[i])
&gt; +            continue;
&gt; +        for (unsigned j = 0; j &lt; numBlocks; ++j) {
&gt; +            if (!graph.m_blocks[j])
&gt; +                continue;
&gt; +            if (!m_resultsIDom[i].get(j))
&gt; +                continue;
&gt; +            m_resultsIDom[i].exclude(m_resultsIDom[j]);
&gt; +        }
&gt; +    }
&gt; +}

This appears to implement the super-slow version of the algorithm.  I would much prefer the Lengauer and Tarjan algorithm.  Having an O(n^3) algorithm is probably not a good thing.

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:325
&gt; -        dataLog(&quot;%s  Dominates:&quot;, prefix);
&gt; +        dataLog(&quot;%s  Immediately Dominates:&quot;, prefix);
&gt;          for (size_t i = 0; i &lt; m_blocks.size(); ++i) {
&gt; -            if (!m_dominators.dominates(blockIndex, i))
&gt; +            if (!m_dominators.isIDomChilds(blockIndex, i))

I would prefer if we printed both dominators and immediate dominators. Known all of the dominators (not just the immediate ones) is useful when looking at IR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031318</commentid>
    <comment_count>4</comment_count>
      <attachid>237133</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-25 21:19:56 -0700</bug_when>
    <thetext>Created attachment 237133
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031507</commentid>
    <comment_count>5</comment_count>
      <attachid>237181</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-26 16:11:57 -0700</bug_when>
    <thetext>Created attachment 237181
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031547</commentid>
    <comment_count>6</comment_count>
      <attachid>237192</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-26 18:50:41 -0700</bug_when>
    <thetext>Created attachment 237192
it&apos;s getting interesting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031584</commentid>
    <comment_count>7</comment_count>
      <attachid>237203</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-26 22:29:59 -0700</bug_when>
    <thetext>Created attachment 237203
it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031743</commentid>
    <comment_count>8</comment_count>
      <attachid>237240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 12:48:45 -0700</bug_when>
    <thetext>Created attachment 237240
debugging

It still has bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031784</commentid>
    <comment_count>9</comment_count>
      <attachid>237254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 14:26:42 -0700</bug_when>
    <thetext>Created attachment 237254
still debugging</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031840</commentid>
    <comment_count>10</comment_count>
      <attachid>237268</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 16:51:57 -0700</bug_when>
    <thetext>Created attachment 237268
more progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031887</commentid>
    <comment_count>11</comment_count>
      <attachid>237283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 20:32:53 -0700</bug_when>
    <thetext>Created attachment 237283
it works?

Seems right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031893</commentid>
    <comment_count>12</comment_count>
      <attachid>237285</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-27 21:11:24 -0700</bug_when>
    <thetext>Created attachment 237285
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031894</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-27 21:13:40 -0700</bug_when>
    <thetext>Attachment 237285 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGDominators.cpp:225:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031973</commentid>
    <comment_count>14</comment_count>
      <attachid>237285</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2014-08-28 06:18:53 -0700</bug_when>
    <thetext>Comment on attachment 237285
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGBlockWorklist.h:152
&gt; +struct BlockWithOrder {
&gt; +    BlockWithOrder()
&gt; +        : block(nullptr)
&gt; +        , order(PreOrder)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    BlockWithOrder(BasicBlock* block, VisitOrder order)
&gt; +        : block(block)
&gt; +        , order(order)
&gt; +    {
&gt; +    }
&gt; +    
&gt; +    typedef void* (BlockWithOrder::*UnspecifiedBoolType);
&gt; +    operator UnspecifiedBoolType*() const
&gt; +    {
&gt; +        return block ? reinterpret_cast&lt;UnspecifiedBoolType*&gt;(1) : nullptr;
&gt; +    }
&gt; +
&gt; +    BasicBlock* block;
&gt; +    VisitOrder order;
&gt; +};

Why not just specialize the BlockWith&lt;&gt; template with VisitOrder? You could even typedef it if you liked how BlockWithOrder reads better than BlockWith&lt;VisitOrder&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031989</commentid>
    <comment_count>15</comment_count>
      <attachid>237285</attachid>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2014-08-28 08:03:44 -0700</bug_when>
    <thetext>Comment on attachment 237285
the patch

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

r=me with comments.

&gt; Source/JavaScriptCore/dfg/DFGDominators.cpp:114
&gt; +            // We&apos;re initially push with successorIndex = 0 regardless of whether or not we have

s/We&apos;re initially/We initially/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032005</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-08-28 09:28:55 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 237285 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237285&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGBlockWorklist.h:152
&gt; &gt; +struct BlockWithOrder {
&gt; &gt; +    BlockWithOrder()
&gt; &gt; +        : block(nullptr)
&gt; &gt; +        , order(PreOrder)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    BlockWithOrder(BasicBlock* block, VisitOrder order)
&gt; &gt; +        : block(block)
&gt; &gt; +        , order(order)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    typedef void* (BlockWithOrder::*UnspecifiedBoolType);
&gt; &gt; +    operator UnspecifiedBoolType*() const
&gt; &gt; +    {
&gt; &gt; +        return block ? reinterpret_cast&lt;UnspecifiedBoolType*&gt;(1) : nullptr;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    BasicBlock* block;
&gt; &gt; +    VisitOrder order;
&gt; &gt; +};
&gt; 
&gt; Why not just specialize the BlockWith&lt;&gt; template with VisitOrder? You could even typedef it if you liked how BlockWithOrder reads better than BlockWith&lt;VisitOrder&gt;.

I almost did that.  I spent a lot of time optimizing for maximum clarity in loops like:

    while (BlockWithOrder item = worklist.pop()) {
        switch (item.order) {
        case PreOrder:
            worklist.pushPost(item.block);
            for (unsigned i = item.block-&gt;numSuccessors(); i--;)
                worklist.push(item.block-&gt;successor(i));
            break;
        case PostOrder:
            result.append(item.block);
            break;
        }

If I had done what you say then I&apos;d be switching on item.data, which I felt was less clear.

Note that we already have two loops that use BlockWithOrder.  I suspect there will be more of them because postorder traversals are important in compilers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032826</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-02 19:54:29 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/173072</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156927</attachid>
            <date>2012-08-07 06:11:43 -0700</date>
            <delta_ts>2012-08-10 05:17:22 -0700</delta_ts>
            <desc>Add in DFGDominators immediate dominators computing function.</desc>
            <filename>DFGIDom.diff</filename>
            <type>text/plain</type>
            <size>4487</size>
            <attacher name="nare">karapetyan.nare</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDc4MCkKKysrIEphdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTA4LTA2ICBJbW1lZGlh
dGUgRG9taW5hdG9ycyBSZWxhdGlvbiAgPGthcmFwZXR5YW4ubmFyZUBnbWFpbC5jb20+CisKKyAg
ICAgICAgQWRkIGltbWVkaWF0ZSBkb21pbmF0b3JzIGluZm9ybWF0aW9uIGluIERvbWluYXRvcnMg
Y2xhc3MKKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBKU0M6OkRGRzo6RG9taW5hdG9y
czo6YnVpbGRJRG9tUmVhbHRpb24gZnVuY3Rpb24sIHdoaWNoIHNhdmUgaW4gbV9yZXN1bHRzSURv
bSBJZG9tIGluZm9ybWF0aW9uCisKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6Y29tcHV0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6RG9taW5hdG9yczo6YnVpbGRJRG9tUmVsYXRpb24pOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOgorICAgICAgICAoRG9taW5hdG9ycyk6CisgICAgICAg
IChKU0M6OkRGRzo6RG9taW5hdG9yczo6aXNJRG9tQ2hpbGRzKToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIp
OgorCiAyMDEyLTA4LTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBkaXN0Y2hlY2suCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTI0Nzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDcgQEAKICAgICB+RG9taW5hdG9ycygpOwogICAgIAogICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYgZ3JhcGgpOworICAgIHZvaWQgYnVpbGRJRG9tUmVsYXRpb24oR3JhcGgm
IGdyYXBoKTsKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgbV92YWxpZCA9
IGZhbHNlOwpAQCAtNTUsNyArNTYsMTEgQEAKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbV92YWxpZDsgfQotICAgIAorICAgIGJvb2wgaXNJRG9tQ2hpbGRz
KEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QgICAgCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0c0lEb21bdG9dLmdl
dChmcm9tKTsKKyAgICB9CiAgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9tLCBCbG9j
a0luZGV4IHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CkBAIC02
OCw2ICs3Myw4IEBACiAgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsKICAgICBG
YXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsKICAgICBib29sIG1fdmFsaWQ7CisKKyAgICBWZWN0b3I8
RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzSURvbTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNw
cAkocmV2aXNpb24gMTI0Nzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21p
bmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE0IEBACiAgICAgQVNTRVJU
KGdyYXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgIAogICAg
IHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsKLSAgICAKKwogICAg
IGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CisgICAgICAgIG1fcmVzdWx0c0lE
b20uZ3JvdyhudW1CbG9ja3MpOwogICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOyl7CiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0u
cmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgICAgICBtX3Jlc3VsdHNJRG9tW2ldLnJlc2l6ZShu
dW1CbG9ja3MpOworICAgIH0KICAgICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1CbG9ja3MpOwog
ICAgIH0KICAgICAKQEAgLTg1LDcgKzg4LDcgQEAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtQmxvY2tzOyBpLS0gPiAxOykKICAgICAgICAgICAgIGNoYW5nZWQgfD0gaXRlcmF0ZUZvckJs
b2NrKGdyYXBoLCBpKTsKICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLSAgICAKKwogICAgIG1fdmFs
aWQgPSB0cnVlOwogfQogCkBAIC0xMDMsNyArMTA2LDMyIEBACiAgICAgcmV0dXJuIG1fcmVzdWx0
c1tpXS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOwogfQogCit2b2lkIERvbWluYXRvcnM6OmJ1aWxk
SURvbVJlbGF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAg
ICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtQmxvY2tzOyArK2opCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1CbG9ja3M7ICsraSkgeworICAgICAgICBpZiAoIW1fcmVzdWx0c1tpXS5nZXQo
aikpIC8vIGkodG8pLCBqKGZyb20pIEkgbmVlZCBmaW5kZSBqLT5kb21pbmF0ZXMgc2V0CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9yZXN1bHRzSURvbVtpXS5zZXQoaik7CisgICAg
ICAgIG1fcmVzdWx0c0lEb21bal0uY2xlYXIoaik7CisgICAgfQorCisgICAgZm9yKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtQmxvY2tzOyArK2kpeworICAgICAgICBpZighZ3JhcGgubV9ibG9ja3Nb
aV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yKHVuc2lnbmVkIGo9MDsgaiA8
IG51bUJsb2NrczsgKytqKXsKKyAgICAgICAgICAgIGlmKCFncmFwaC5tX2Jsb2Nrc1tqXSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmKCFtX3Jlc3VsdHNJRG9tW2ld
LmdldChqKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fcmVzdWx0
c0lEb21baV0uZXhjbHVkZShtX3Jlc3VsdHNJRG9tW2pdKTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
MjQ3NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIwLDkgKzMyMCw5IEBACiAgICAgICAgICAgICBkYXRhTG9nKCIgIyVsdSIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGkpKTsKICAgICAgICAgfQogICAgICAgICBkYXRh
TG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCIlcyAgRG9taW5hdGVzOiIsIHByZWZpeCk7Cisg
ICAgICAgIGRhdGFMb2coIiVzICBJbW1lZGlhdGVseSBEb21pbmF0ZXM6IiwgcHJlZml4KTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrSW5kZXgsIGkpKQorICAg
ICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuaXNJRG9tQ2hpbGRzKGJsb2NrSW5kZXgsaSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBkYXRhTG9nKCIgIyVsdSIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGkpKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157712</attachid>
            <date>2012-08-10 05:17:22 -0700</date>
            <delta_ts>2014-08-25 21:19:56 -0700</delta_ts>
            <desc>Add in DFGDominators immediate dominators computing function.</desc>
            <filename>DFGIDom.diff</filename>
            <type>text/plain</type>
            <size>4626</size>
            <attacher name="nare">karapetyan.nare</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI1MjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDEyLTA4LTA5ICBOYXJlIEthcmFwZXR5YW4gIDxrYXJhcGV0eWFuLm5hcmVAZ21haWwuY29t
PgorCisgICAgICAgIEFkZCBpbW1lZGlhdGUgZG9taW5hdG9ycyBpbmZvcm1hdGlvbiBpbiBEb21p
bmF0b3JzIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MzM2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBKU0M6OkRGRzo6RG9taW5hdG9yczo6YnVpbGRJRG9tUmVhbHRpb24gZnVuY3Rpb24s
IHdoaWNoIHNhdmUgaW4gbV9yZXN1bHRzSURvbSBJZG9tIGluZm9ybWF0aW9uCisKKyAgICAgICAg
KiBkZmcvREZHRG9taW5hdG9ycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6
Y29tcHV0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6YnVpbGRJRG9tUmVsYXRp
b24pOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5oOgorICAg
ICAgICAoRG9taW5hdG9ycyk6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5hdG9yczo6aXNJRG9t
Q2hpbGRzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorCiAyMDEyLTA4LTA5ICBZb25nIExpICA8eW9saUBy
aW0uY29tPgogCiAgICAgICAgIFtRTlhdIEltcGxlbWVudCBnZXRDUFVUaW1lKCkgZm9yIE9TKFFO
WCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZp
c2lvbiAxMjUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOCBAQAogICAgIERvbWluYXRvcnMoKTsKICAg
ICB+RG9taW5hdG9ycygpOwogICAgIAotICAgIHZvaWQgY29tcHV0ZShHcmFwaCYgZ3JhcGgpOwor
ICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOworICAgIHZvaWQgYnVpbGRJRG9tUmVsYXRpb24oR3Jh
cGgmKTsKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgbV92YWxpZCA9IGZh
bHNlOwpAQCAtNTUsNyArNTYsMTEgQEAKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gbV92YWxpZDsgfQotICAgIAorICAgIGJvb2wgaXNJRG9tQ2hpbGRzKEJs
b2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QgICAgCisgICAgeworICAgICAgICBB
U1NFUlQoaXNWYWxpZCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0c0lEb21bdG9dLmdldChm
cm9tKTsKKyAgICB9CiAgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9tLCBCbG9ja0lu
ZGV4IHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CkBAIC02Mywx
MSArNjgsMTMgQEAKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgaXRlcmF0ZUZvckJs
b2NrKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCk7CisgICAgYm9vbCBpdGVyYXRlRm9yQmxvY2so
R3JhcGgmLCBCbG9ja0luZGV4KTsKICAgICAKICAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9y
ZXN1bHRzOwogICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOwogICAgIGJvb2wgbV92YWxpZDsK
KworICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHNJRG9tOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b21pbmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAxMjUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMSArNDgsMTQg
QEAKICAgICBBU1NFUlQoZ3JhcGgubV9ibG9ja3NbMF0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHko
KSk7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OwotICAgIAorCiAgICAgaWYgKG51bUJsb2NrcyA+IG1fcmVzdWx0cy5zaXplKCkpIHsKKyAgICAg
ICAgbV9yZXN1bHRzSURvbS5ncm93KG51bUJsb2Nrcyk7CiAgICAgICAgIG1fcmVzdWx0cy5ncm93
KG51bUJsb2Nrcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7CiAgICAgICAgICAg
ICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgICAgICBtX3Jlc3VsdHNJ
RG9tW2ldLnJlc2l6ZShudW1CbG9ja3MpOworICAgIH0KICAgICAgICAgbV9zY3JhdGNoLnJlc2l6
ZShudW1CbG9ja3MpOwogICAgIH0KICAgICAKQEAgLTg1LDcgKzg4LDcgQEAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gaXRlcmF0ZUZvckJsb2NrKGdyYXBoLCBpKTsKICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLSAg
ICAKKwogICAgIG1fdmFsaWQgPSB0cnVlOwogfQogCkBAIC0xMDMsNyArMTA2LDMyIEBACiAgICAg
cmV0dXJuIG1fcmVzdWx0c1tpXS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOwogfQogCit2b2lkIERv
bWluYXRvcnM6OmJ1aWxkSURvbVJlbGF0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKKyAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbnVtQmxvY2tzOyArK2opCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1CbG9ja3M7ICsraSkgeworICAgICAgICBpZiAoIW1f
cmVzdWx0c1tpXS5nZXQoaikpIC8vIGkodG8pLCBqKGZyb20pIEkgbmVlZCBmaW5kZSBqLT5kb21p
bmF0ZXMgc2V0CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9yZXN1bHRzSURvbVtp
XS5zZXQoaik7CisgICAgICAgIG1fcmVzdWx0c0lEb21bal0uY2xlYXIoaik7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUJsb2NrczsgKytpKSB7CisgICAgICAgIGlm
ICghZ3JhcGgubV9ibG9ja3NbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUJsb2NrczsgKytqKSB7CisgICAgICAgICAgICBpZiAo
IWdyYXBoLm1fYmxvY2tzW2pdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKCFtX3Jlc3VsdHNJRG9tW2ldLmdldChqKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIG1fcmVzdWx0c0lEb21baV0uZXhjbHVkZShtX3Jlc3VsdHNJRG9tW2pd
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxMjUyNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDkgKzMyMCw5IEBACiAgICAg
ICAgICAgICBkYXRhTG9nKCIgIyVsdSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGkpKTsK
ICAgICAgICAgfQogICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICBkYXRhTG9nKCIlcyAg
RG9taW5hdGVzOiIsIHByZWZpeCk7CisgICAgICAgIGRhdGFMb2coIiVzICBJbW1lZGlhdGVseSBE
b21pbmF0ZXM6IiwgcHJlZml4KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Js
b2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5h
dGVzKGJsb2NrSW5kZXgsIGkpKQorICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuaXNJRG9t
Q2hpbGRzKGJsb2NrSW5kZXgsIGkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgZGF0YUxvZygiICMlbHUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihpKSk7CiAg
ICAgICAgIH0K
</data>
<flag name="review"
          id="168182"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237133</attachid>
            <date>2014-08-25 21:19:56 -0700</date>
            <delta_ts>2014-08-26 16:11:57 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2
aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsOTIgKzQxLDE0MCBAQCBEb21pbmF0b3JzOjp+RG9taW5h
dG9ycygpCiB7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17
Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KK25hbWVz
cGFjZSB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEgRmFz
dCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKKy8vIChU
T1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhlICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksg
YW5kIEVWQUwuIFRoZSBmdWxsIHBhcGVyIGlzIGxpbmtlZAorLy8gYmVsb3c7IHRoaXMgY29kZSBh
dHRlbXB0cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzIGl0IGlzIHByZXNlbnRl
ZCBpbiB0aGUgcGFwZXI7IGluCisvLyBwYXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5kIDQuCisvLyBo
dHRwczovL3d3dy5jcy5wcmluY2V0b24uZWR1L2NvdXJzZXMvYXJjaGl2ZS9mYWxsMDMvY3M1Mjgv
aGFuZG91dHMvYSUyMGZhc3QlMjBhbGdvcml0aG0lMjBmb3IlMjBmaW5kaW5nLnBkZgorCitzdHJ1
Y3QgTGFuZ2F1ZXJUYXJqYW4geworICAgIExhbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShncmFw
aC5udW1CbG9ja3MoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZSgpCisgICAgewor
ICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpOyAvLyBTdGVwIDEuCisgICAg
ICAgIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygp
OyAvLyBTdGVwcyAyIGFuZCAzLgorICAgICAgICBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21p
bmF0b3JzKCk7IC8vIFN0ZXAgNC4KKyAgICB9CiAgICAgCi0gICAgQVNTRVJUKGdyYXBoLmJsb2Nr
KDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICB2b2lkIGNvbXB1dGVEZXB0aEZpcnN0
UHJlTnVtYmVyaW5nKCkKKyAgICB7CisgICAgICAgIEJpdFZlY3RvciBzZWVuOworICAgICAgICBW
ZWN0b3I8QmxvY2tEYXRhKiwgMTY+IHdvcmtsaXN0OworICAgICAgICBzZWVuLnNldCgwKTsKKyAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKG1fZ3JhcGguYmxvY2soMCkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbmV4dE51bWJlciA9IDA7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3Jr
bGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgbV9kYXRhW2Jsb2NrLT5pbmRleF0uc2VtaU51
bWJlciA9IG5leHROdW1iZXIrKzsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYg
KHNlZW4uZ2V0KHN1Y2Nlc3NvckJsb2NrLT5pbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHNlZW4uc2V0KHN1Y2Nlc3NvckJsb2NrLT5pbmRleCk7
CisgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckJsb2NrKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1CbG9ja3Mg
PSBncmFwaC5udW1CbG9ja3MoKTsKKyAgICB2b2lkIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZElt
cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgeworICAgICAgICAKKyAgICB9CiAgICAg
Ci0gICAgLy8gQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXgu
IAotICAgIGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fcmVz
dWx0cy5ncm93KG51bUJsb2Nrcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2Nr
czsgaS0tOykKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxvY2tzKTsKLSAg
ICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1CbG9ja3MpOwotICAgIH0KLQotICAgIC8vIFdlIGtu
b3cgdGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAg
IG1fcmVzdWx0c1swXS5jbGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7Ci0KLSAg
ICAvLyBGaW5kIGFsbCBvZiB0aGUgdmFsaWQgYmxvY2tzLgotICAgIG1fc2NyYXRjaC5jbGVhckFs
bCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykgewotICAgICAgICBp
ZiAoIWdyYXBoLmJsb2NrKGkpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fc2Ny
YXRjaC5zZXQoaSk7Ci0gICAgfQotICAgIAotICAgIC8vIE1hcmsgYWxsIG5vZGVzIGFzIGRvbWlu
YXRlZCBieSBldmVyeXRoaW5nLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0t
ID4gMTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+
cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFs
bCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRj
aCk7Ci0gICAgfQotCi0gICAgLy8gSXRlcmF0aXZlbHkgZWxpbWluYXRlIG5vZGVzIHRoYXQgYXJl
IG5vdCBkb21pbmF0b3IuCi0gICAgYm9vbCBjaGFuZ2VkOwotICAgIGRvIHsKLSAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50
cnkgYmxvY2tzOiBmb3J3YXJkIHNjYW4uCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBudW1CbG9ja3M7ICsraSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3Jz
KGdyYXBoLCBpKTsKLQotICAgICAgICBpZiAoIWNoYW5nZWQpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBi
YWNrd2FyZCBzY2FuLgotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IHBy
dW5lRG9taW5hdG9ycyhncmFwaCwgaSk7Ci0gICAgfSB3aGlsZSAoY2hhbmdlZCk7Ci19Ci0KLWJv
b2wgRG9taW5hdG9yczo6cHJ1bmVEb21pbmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBp
ZHgpCi17Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOworICAgIHZv
aWQgbGluayhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKKyAgICB7CisgICAgICAg
IG1fZGF0YVtmcm9tLT5pbmRleF0uYW5jZXN0b3IgPSB0bzsKKyAgICB9CisgICAgCisgICAgQmFz
aWNCbG9jayogZXZhbChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIEJsb2NrRGF0
YSYgZGF0YSA9IG1fZGF0YVtibG9jay0+aW5kZXhdOworICAgICAgICBpZiAoIWRhdGEuYW5jZXN0
b3IpCisgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgIAorICAgICAgICBjb21wcmVz
cyhibG9jayk7CisgICAgICAgIHJldHVybiBkYXRhW2Jsb2NrLT5pbmRleF0ubGFiZWw7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcHJlc3MoQmFzaWNCbG9jayogaW5pdGlhbEJsb2NrKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24s
IGJ1dCB3ZSBkb24ndCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgIC8v
IHdhbnQgdG8gYmxvdyB0aGUgc3RhY2suIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGNhbGwg
Y29tcHJlc3MoKSByZWN1cnNpdmVseSBvbiB0aGUKKyAgICAgICAgLy8gYW5jZXN0b3Igb2YgYW55
dGhpbmcgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFNvLCB3ZSBwb3B1bGF0ZSBvdXIgd29ya2xpc3Qg
d2l0aCB0aGUKKyAgICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFsQmxvY2su
IFRoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jaworICAgICAg
ICAvLyB0aGF0IGlzIGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAgICAgCisg
ICAgICAgIEJhc2ljQmxvY2sqIGFuY2VzdG9yID0gbV9kYXRhW2luaXRpYWxCbG9jay0+aW5kZXhd
LmFuY2VzdG9yOworICAgICAgICBBU1NFUlQoYW5jZXN0b3IpOworICAgICAgICBpZiAoIW1fZGF0
YVthbmNlc3Rvci0+aW5kZXhdLmFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gc3RhY2s7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgPSBpbml0aWFsQmxvY2s7IGJsb2NrOyBibG9jayA9IG1fZGF0YVti
bG9jay0+aW5kZXhdLmFuY2VzdG9yKQorICAgICAgICAgICAgc3RhY2suYXBwZW5kKGJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBibG9ja3MgdGhhdCBoYXZl
IGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBUaGUgbGFzdCB0d28KKyAgICAgICAg
Ly8gZWxlbWVudHMgaW4gdGhlIHN0YWNrIHdvbid0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eS4KKyAg
ICAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSAyKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFb
c3RhY2tbc3RhY2suc2l6ZSgpIC0gMV0tPmluZGV4XS5hbmNlc3Rvcik7CisgICAgICAgIEFTU0VS
VCghbV9kYXRhW21fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAyXS0+aW5kZXhdLmFuY2VzdG9y
LT5pbmRleF0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhY2suc2l6ZSgpIC0gMjsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBzdGFja1tpXTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBsYWJlbE9mQmxvY2sgPSBtX2Rh
dGFbYmxvY2stPmluZGV4XS5sYWJlbDsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBhbmNlc3Rv
ck9mQmxvY2sgPSBtX2RhdGFbYmxvY2stPmluZGV4XS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFT
U0VSVChhbmNlc3Rvck9mQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKG1fZGF0YVthbmNlc3Rv
ck9mQmxvY2stPmluZGV4XS5hbmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGxhYmVsT2ZBbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2Nr
LT5pbmRleF0ubGFiZWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2RhdGFbbGFi
ZWxPZkFuY2Vzb3JPZkJsb2NrLT5pbmRleF0uc2VtaSA8IG1fZGF0YVtsYWJlbE9mQmxvY2stPmlu
ZGV4XS5zZW1pKQorICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVsT2ZBbmNlc3Rv
ck9mQmxvY2s7CisgICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JP
ZkJsb2NrLT5pbmRleF0uYW5jZXN0b3I7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBpZiAoIWJs
b2NrIHx8IGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAg
ICAgICA6IHByZU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgc2VtaU51bWJlcihVSU5U
X01BWCkKKyAgICAgICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICwgbGFi
ZWwobnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHNlbWlOdW1iZXI7CisgICAgICAgIEJh
c2ljQmxvY2sqIGFuY2VzdG9yOworICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbDsKKyAgICB9Owor
ICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxCbG9ja0RhdGE+IG1fZGF0YTsK
K307CiAKLSAgICAvLyBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gb2YgZG9tKHByZWRzKS4KLSAgICBt
X3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBdLT5pbmRleF0pOwot
ICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAx
OykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29y
c1tqXS0+aW5kZXhdKTsKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0gICAgLy8gVGhlIGJs
b2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KLSAgICBtX3NjcmF0Y2guc2V0KGlkeCk7
Cit2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQoreworICAgIExhbmdhdWVy
VGFyamFuIGxhbmdhdWVyVGFyamFuKGdyYXBoKTsKKyAgICBsYW5nYXVlclRhcmphbi5jb21wdXRl
KCk7CiAKLSAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsK
KyAgICAvLyBGSVhNRTsKIH0KIAogdm9pZCBEb21pbmF0b3JzOjpkdW1wKEdyYXBoJiBncmFwaCwg
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0g
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAg
ICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50
KCIgICAgQmxvY2sgIiwgKmJsb2NrLCAiOiIpOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggb3Ro
ZXJJbmRleCA9IDA7IG90aGVySW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytvdGhlckluZGV4
KSB7Ci0gICAgICAgICAgICBpZiAoIWRvbWluYXRlcyhibG9jay0+aW5kZXgsIG90aGVySW5kZXgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgIyIs
IG90aGVySW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKLSAgICB9
CisgICAgRklYTUU7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAxNzI5NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDQsMTAgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbXB1dGUoR3JhcGgm
KTsKICAgICAKLSAgICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5kZXgg
dG8pIGNvbnN0CisgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9tSW5kZXgsIEJsb2Nr
SW5kZXggdG9JbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwot
ICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIEJsb2NrRGF0
YSYgZnJvbSA9IG1fZGF0YVtmcm9tSW5kZXhdOworICAgICAgICBCbG9ja0RhdGEmIHRvID0gbV9k
YXRhW3RvSW5kZXhdOworICAgICAgICByZXR1cm4gdG8ucHJlTnVtYmVyID49IGZyb20ucHJlTnVt
YmVyICYmIHRvLnBvc3ROdW1iZXIgPD0gZnJvbS5wb3N0TnVtYmVyOwogICAgIH0KICAgICAKICAg
ICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QK
QEAgLTU4LDEwICs2MCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRT
dHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgYm9vbCBwcnVuZURvbWluYXRvcnMo
R3JhcGgmLCBCbG9ja0luZGV4KTsKKyAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxv
Y2tEYXRhKCkKKyAgICAgICAgICAgIDogaWRvbVBhcmVudChudWxscHRyKQorICAgICAgICAgICAg
LCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHBvc3ROdW1iZXIoVUlOVF9NQVgp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiBpZG9tS2lkczsKKyAgICAgICAgQmFzaWNCbG9jayogaWRvbVBhcmVudDsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIHByZU51bWJlcjsKKyAgICAgICAgdW5zaWduZWQgcG9zdE51bWJl
cjsKKyAgICB9OwogICAgIAotICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHM7IC8v
IEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0IGRvbWluYXRlIGl0
LgotICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0b3Ig
d2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9kZWxl
dGVzLgorICAgIFZlY3RvcjxCbG9ja0RhdGE+IG1fZGF0YTsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21p
bmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05h
aXZlRG9taW5hdG9ycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05haXZlRG9taW5hdG9ycy5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitOYWl2ZURv
bWluYXRvcnM6Ok5haXZlRG9taW5hdG9ycygpCit7Cit9CisKK05haXZlRG9taW5hdG9yczo6fk5h
aXZlRG9taW5hdG9ycygpCit7Cit9CisKK3ZvaWQgTmFpdmVEb21pbmF0b3JzOjpjb21wdXRlKEdy
YXBoJiBncmFwaCkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBuYWl2ZSBkb21pbmF0b3Ig
c29sdmVyLgorICAgIAorICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlz
RW1wdHkoKSk7CisgICAgCisgICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVtQmxvY2tz
KCk7CisgICAgCisgICAgLy8gQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5j
ZSBtYXRyaXguIAorICAgIGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CisgICAg
ICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUJsb2NrczsgaS0tOykKKyAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxv
Y2tzKTsKKyAgICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1CbG9ja3MpOworICAgIH0KKworICAg
IC8vIFdlIGtub3cgdGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRz
ZWxmLgorICAgIG1fcmVzdWx0c1swXS5jbGVhckFsbCgpOworICAgIG1fcmVzdWx0c1swXS5zZXQo
MCk7CisKKyAgICAvLyBGaW5kIGFsbCBvZiB0aGUgdmFsaWQgYmxvY2tzLgorICAgIG1fc2NyYXRj
aC5jbGVhckFsbCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykgewor
ICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgfQorICAgIAorICAgIC8vIE1hcmsgYWxsIG5vZGVz
IGFzIGRvbWluYXRlZCBieSBldmVyeXRoaW5nLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJs
b2NrczsgaS0tID4gMTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5i
bG9jayhpKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fcmVzdWx0c1tp
XS5jbGVhckFsbCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0
KG1fc2NyYXRjaCk7CisgICAgfQorCisgICAgLy8gSXRlcmF0aXZlbHkgZWxpbWluYXRlIG5vZGVz
IHRoYXQgYXJlIG5vdCBkb21pbmF0b3IuCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFs
bCBub24gZW50cnkgYmxvY2tzOiBmb3J3YXJkIHNjYW4uCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBudW1CbG9ja3M7ICsraSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVE
b21pbmF0b3JzKGdyYXBoLCBpKTsKKworICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50cnkg
YmxvY2tzOiBiYWNrd2FyZCBzY2FuLgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspCisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7
Cit9CisKK2Jvb2wgTmFpdmVEb21pbmF0b3JzOjpwcnVuZURvbWluYXRvcnMoR3JhcGgmIGdyYXBo
LCBCbG9ja0luZGV4IGlkeCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2Nr
KGlkeCk7CisKKyAgICBpZiAoIWJsb2NrIHx8IGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGaW5kIHRoZSBpbnRlcnNlY3Rpb24g
b2YgZG9tKHByZWRzKS4KKyAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+cHJlZGVj
ZXNzb3JzWzBdLT5pbmRleF0pOworICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNl
c3NvcnMuc2l6ZSgpOyBqLS0gPiAxOykKKyAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3Vs
dHNbYmxvY2stPnByZWRlY2Vzc29yc1tqXS0+aW5kZXhdKTsKKworICAgIC8vIFRoZSBibG9jayBp
cyBhbHNvIGRvbWluYXRlZCBieSBpdHNlbGYuCisgICAgbV9zY3JhdGNoLnNldChpZHgpOworCisg
ICAgcmV0dXJuIG1fcmVzdWx0c1tpZHhdLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7Cit9CisKK3Zv
aWQgTmFpdmVEb21pbmF0b3JzOjpkdW1wKEdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgKmJs
b2NrLCAiOiIpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggb3RoZXJJbmRleCA9IDA7IG90aGVy
SW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytvdGhlckluZGV4KSB7CisgICAgICAgICAgICBp
ZiAoIWRvbWluYXRlcyhibG9jay0+aW5kZXgsIG90aGVySW5kZXgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIG90aGVySW5kZXgpOworICAg
ICAgICB9CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdOYWl2ZURvbWluYXRvcnNfaAor
I2RlZmluZSBERkdOYWl2ZURvbWluYXRvcnNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gVGhpcyBjbGFzcyBpcyBvbmx5IHVzZWQgZm9yIHZhbGlk
YXRpbmcgdGhlIHJlYWwgZG9taW5hdG9ycyBpbXBsZW1lbnRhdGlvbi4KKworY2xhc3MgTmFpdmVE
b21pbmF0b3JzIHsKK3B1YmxpYzoKKyAgICBOYWl2ZURvbWluYXRvcnMoKTsKKyAgICB+TmFpdmVE
b21pbmF0b3JzKCk7CisgICAgCisgICAgdm9pZCBjb21wdXRlKEdyYXBoJik7CisgICAgCisgICAg
Ym9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNb
dG9dLmdldChmcm9tKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9j
ayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZG9t
aW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoR3JhcGgmLCBQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBib29s
IHBydW5lRG9taW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgpOworICAgIAorICAgIFZlY3RvcjxG
YXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9y
IG9mIGJsb2NrcyB0aGF0IGRvbWluYXRlIGl0LgorICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNo
OyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJl
Y3ljbGUgdGhpcyB0byBzYXZlIG5ldy9kZWxldGVzLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOYWl2
ZURvbWluYXRvcnNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237181</attachid>
            <date>2014-08-26 16:11:57 -0700</date>
            <delta_ts>2014-08-26 18:50:41 -0700</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19806</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2
aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsOTIgKzQxLDE5OSBAQCBEb21pbmF0b3JzOjp+RG9taW5h
dG9ycygpCiB7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17
Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KK25hbWVz
cGFjZSB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEgRmFz
dCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKKy8vIChU
T1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhlICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksg
YW5kIEVWQUwuIFRoZSBmdWxsIHBhcGVyIGlzIGxpbmtlZAorLy8gYmVsb3c7IHRoaXMgY29kZSBh
dHRlbXB0cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzIGl0IGlzIHByZXNlbnRl
ZCBpbiB0aGUgcGFwZXI7IGluCisvLyBwYXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5kIDQuCisvLyBo
dHRwczovL3d3dy5jcy5wcmluY2V0b24uZWR1L2NvdXJzZXMvYXJjaGl2ZS9mYWxsMDMvY3M1Mjgv
aGFuZG91dHMvYSUyMGZhc3QlMjBhbGdvcml0aG0lMjBmb3IlMjBmaW5kaW5nLnBkZgorCitzdHJ1
Y3QgTGFuZ2F1ZXJUYXJqYW4geworICAgIExhbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAg
ICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgIHsKKyAgICAgICAgbV9kYXRhLnJlc2l6ZShncmFw
aC5udW1CbG9ja3MoKSk7CisKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9kYXRhW2Js
b2NrLT5pbmRleF0ubGFiZWwgPSBibG9jazsKKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICBB
U1NFUlQoZ3JhcGguYmxvY2soMCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIHZvaWQg
Y29tcHV0ZSgpCisgICAgeworICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygp
OyAvLyBTdGVwIDEuCisgICAgICAgIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1t
ZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwcyAyIGFuZCAzLgorICAgICAgICBjb21wdXRlRXhw
bGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXAgNC4KKyAgICB9CiAgICAgCi0gICAg
dW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVtQmxvY2tzKCk7CisgICAgdm9pZCBjb21wdXRl
RGVwdGhGaXJzdFByZU51bWJlcmluZygpCisgICAgeworICAgICAgICBWZWN0b3I8QmxvY2tEYXRh
KiwgMTY+IHdvcmtsaXN0OworICAgICAgICBzZWVuLnNldCgwKTsKKyAgICAgICAgd29ya2xpc3Qu
YXBwZW5kKG1fZ3JhcGguYmxvY2soMCkpOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF3b3Jr
bGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xp
c3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIG1fZGF0YVtibG9jay0+aW5kZXhdLnNlbWlOdW1i
ZXIgPSBibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsKKyAgICAgICAgICAgIGJsb2NrQnlQcmVOdW1i
ZXIuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYgKHNl
ZW4uZ2V0KHN1Y2Nlc3NvckJsb2NrLT5pbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHNlZW4uc2V0KHN1Y2Nlc3NvckJsb2NrLT5pbmRleCk7Cisg
ICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBtX2RhdGFbc3VjY2Vzc29yQmxvY2stPmluZGV4XS5wYXJlbnQgPSBibG9jazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICAvLyBBbGxvY2F0ZSBzdG9y
YWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCi0gICAgaWYgKG51bUJsb2NrcyA+
IG1fcmVzdWx0cy5zaXplKCkpIHsKLSAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KQotICAgICAgICAgICAg
bV9yZXN1bHRzW2ldLnJlc2l6ZShudW1CbG9ja3MpOwotICAgICAgICBtX3NjcmF0Y2gucmVzaXpl
KG51bUJsb2Nrcyk7Ci0gICAgfQotCi0gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBlbnRyeSBibG9j
ayBpcyBvbmx5IGRvbWluYXRlZCBieSBpdHNlbGYuCi0gICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxs
KCk7Ci0gICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKLQotICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2
YWxpZCBibG9ja3MuCi0gICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9zY3JhdGNoLnNldChpKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAgICAgICBpZiAo
IWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKLSAgICB9Ci0KLSAgICAvLyBJ
dGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90IGRvbWluYXRvci4KLSAgICBi
b29sIGNoYW5nZWQ7Ci0gICAgZG8gewotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
IC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nh
bi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUJsb2NrczsgKytpKQotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotCi0gICAgICAg
IGlmICghY2hhbmdlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIFBydW5lIGRv
bWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGJhY2t3YXJkIHNjYW4uCi0gICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBp
LS0gPiAxOykKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGdyYXBoLCBp
KTsKLSAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLX0KKyAgICB2b2lkIGNvbXB1dGVTZW1pRG9taW5h
dG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyBj
dXJyZW50UHJlTnVtYmVyLS0gPiAxOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAgICAgICAgICBCbG9j
a0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9jay0+aW5kZXhdOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBTdGVwIDI6CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yQmxvY2sgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogaW50ZXJtZWRpYXRlQmxvY2sgPSBldmFsKHByZWRlY2Vzc29yQmxvY2spOworICAg
ICAgICAgICAgICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9jay0+aW5kZXhdLnNlbWlOdW1iZXIsIGJs
b2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZGF0YVtt
X2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdLT5pbmRleF0uYnVja2V0LmFw
cGVuZChibG9jayk7CisgICAgICAgICAgICBsaW5rKGJsb2NrRGF0YS5wYXJlbnQsIGJsb2NrKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAzOgorICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzZW1pRG9taW5lZSA9IG1fZGF0YVtibG9ja0RhdGEucGFyZW50LT5pbmRleF0u
YnVja2V0KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcG9zc2libGVEb21pbmF0b3Ig
PSBldmFsKHNlbWlEb21pbmVlKTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHNlbWlEb21p
bmVlRGF0YSA9IG1fZGF0YVtzZW1pRG9taW5lZS0+aW5kZXhdOworICAgICAgICAgICAgICAgIEJs
b2NrRGF0YSYgcG9zc2libGVEb21pbmF0b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9y
LT5pbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1p
TnVtYmVyIDwgc2VtaURvbWluZWVEYXRhLnNlbWlOdW1lcikKKyAgICAgICAgICAgICAgICAgICAg
c2VtaURvbWluZWVEYXRhLmRvbSA9IHBvc3NpYmxlRG9taW5hdG9yOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0
YS5wYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Js
b2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1cnJlbnRQcmVOdW1iZXIpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJd
OworICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2stPmluZGV4
XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrRGF0YS5kb20gIT0gbV9ibG9j
a0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSkKKyAgICAgICAgICAgICAgICBibG9j
a0RhdGEuZG9tID0gbV9kYXRhW2Jsb2NrRGF0YS5kb20tPmluZGV4XS5kb207CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBsaW5rKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKQorICAgIHsKKyAgICAgICAgbV9kYXRhW2Zyb20tPmluZGV4XS5hbmNlc3RvciA9IHRvOwor
ICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
IHsKKyAgICAgICAgQmxvY2tEYXRhJiBkYXRhID0gbV9kYXRhW2Jsb2NrLT5pbmRleF07CisgICAg
ICAgIGlmICghZGF0YS5hbmNlc3RvcikKKyAgICAgICAgICAgIHJldHVybiBibG9jazsKKyAgICAg
ICAgCisgICAgICAgIGNvbXByZXNzKGJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGRhdGFbYmxvY2st
PmluZGV4XS5sYWJlbDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wcmVzcyhCYXNpY0Jsb2Nr
KiBpbml0aWFsQmxvY2spCisgICAgeworICAgICAgICAvLyBUaGlzIHdhcyBtZWFudCB0byBiZSBh
IHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9uIGJlY2F1c2Ug
d2UgZG9uJ3QKKyAgICAgICAgLy8gd2FudCB0byBibG93IHRoZSBzdGFjay4gVGhlIG9yaWdpbmFs
IGZ1bmN0aW9uIHdpbGwgY2FsbCBjb21wcmVzcygpIHJlY3Vyc2l2ZWx5IG9uIHRoZQorICAgICAg
ICAvLyBhbmNlc3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBv
cHVsYXRlIG91ciB3b3JrbGlzdCB3aXRoIHRoZQorICAgICAgICAvLyByZWN1cnNpdmUgYW5jZXN0
b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IHN0YXJ0aW5nIGZy
b20gdGhlIGJsb2NrCisgICAgICAgIC8vIHRoYXQgaXMgZnVydGhlc3QgdXAgdGhlIGFuY2VzdG9y
IGNoYWluLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogYW5jZXN0b3IgPSBtX2RhdGFb
aW5pdGlhbEJsb2NrLT5pbmRleF0uYW5jZXN0b3I7CisgICAgICAgIEFTU0VSVChhbmNlc3Rvcik7
CisgICAgICAgIGlmICghbV9kYXRhW2FuY2VzdG9yLT5pbmRleF0uYW5jZXN0b3IpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiBz
dGFjazsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IGluaXRpYWxCbG9jazsgYmxv
Y2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrLT5pbmRleF0uYW5jZXN0b3IpCisgICAgICAgICAgICBz
dGFjay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFi
b3V0IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRo
ZSBsYXN0IHR3bworICAgICAgICAvLyBlbGVtZW50cyBpbiB0aGUgc3RhY2sgd29uJ3Qgc2F0aXNm
eSB0aGlzIHByb3BlcnR5LgorICAgICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAg
ICAgICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAxXS0+aW5kZXhdLmFuY2Vz
dG9yKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNrW3N0YWNrLnNpemUoKSAt
IDJdLT5pbmRleF0uYW5jZXN0b3ItPmluZGV4XS5hbmNlc3Rvcik7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IHN0YWNrW2ldOworICAgICAgICAgICAgQmFzaWNCbG9jayom
IGxhYmVsT2ZCbG9jayA9IG1fZGF0YVtibG9jay0+aW5kZXhdLmxhYmVsOworICAgICAgICAgICAg
QmFzaWNCbG9jayomIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVtibG9jay0+aW5kZXhdLmFuY2Vz
dG9yOworICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yT2ZCbG9jayk7CisgICAgICAgICAgICBB
U1NFUlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9jay0+aW5kZXhdLmFuY2VzdG9yKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1f
ZGF0YVthbmNlc3Rvck9mQmxvY2stPmluZGV4XS5sYWJlbDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG1fZGF0YVtsYWJlbE9mQW5jZXNvck9mQmxvY2stPmluZGV4XS5zZW1pTnVtYmVy
IDwKKyAgICAgICAgICAgICAgICBtX2RhdGFbbGFiZWxPZkJsb2NrLT5pbmRleF0uc2VtaU51bWJl
cikKKyAgICAgICAgICAgICAgICBsYWJlbE9mQmxvY2sgPSBsYWJlbE9mQW5jZXN0b3JPZkJsb2Nr
OworICAgICAgICAgICAgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2FuY2VzdG9yT2ZCbG9jay0+
aW5kZXhdLmFuY2VzdG9yOworICAgICAgICB9CisgICAgfQogCi1ib29sIERvbWluYXRvcnM6OnBy
dW5lRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaWR4KQotewotICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsKKyAgICBCYXNpY0Jsb2NrKiBpbW1lZGlh
dGVEb21pbmF0b3IoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9k
YXRhW2Jsb2NrLT5pbmRleF0uZG9tOworICAgIH0KIAotICAgIGlmICghYmxvY2sgfHwgYmxvY2st
PnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdHJ1
Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkKKyAgICAgICAgICAgIDogcGFyZW50
KG51bGxwdHIpCisgICAgICAgICAgICAsIHByZU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAg
ICwgc2VtaU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikK
KyAgICAgICAgICAgICwgbGFiZWwobnVsbHB0cikKKyAgICAgICAgICAgICwgZG9tKG51bGxwdHIp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFy
ZW50OworICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHNlbWlO
dW1iZXI7CisgICAgICAgIEJhc2ljQmxvY2sqIGFuY2VzdG9yOworICAgICAgICBCYXNpY0Jsb2Nr
KiBsYWJlbDsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBidWNrZXQ7CisgICAgICAgIEJh
c2ljQmxvY2sqIGRvbTsKKyAgICB9OworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZl
Y3RvcjxCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tC
eVByZU51bWJlcjsKK307CiAKLSAgICAvLyBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gb2YgZG9tKHBy
ZWRzKS4KLSAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBd
LT5pbmRleF0pOwotICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyBqLS0gPiAxOykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2st
PnByZWRlY2Vzc29yc1tqXS0+aW5kZXhdKTsKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0g
ICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KLSAgICBtX3NjcmF0
Y2guc2V0KGlkeCk7Cit2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQorewor
ICAgIExhbmdhdWVyVGFyamFuIGxhbmdhdWVyVGFyamFuKGdyYXBoKTsKKyAgICBsYW5nYXVlclRh
cmphbi5jb21wdXRlKCk7CiAKLSAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2so
bV9zY3JhdGNoKTsKKyAgICBtX2RhdGEuY2xlYXIoKTsKKyAgICBtX2RhdGEucmVzaXplKGdyYXBo
Lm51bUJsb2NrcygpKTsKKyAgICAKKyAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWlsZCBh
IHNwYW5uaW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5kIHdl
IHdhbnQKKyAgICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRlIHBy
ZSBhbmQgcG9zdCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAgIC8v
IHRlc3RzLgorICAgIAorICAgIGZvciAoLi4uCiB9CiAKIHZvaWQgRG9taW5hdG9yczo6ZHVtcChH
cmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIG91dC5wcmludCgiICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKLSAgICAgICAgZm9yIChC
bG9ja0luZGV4IG90aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7
ICsrb3RoZXJJbmRleCkgewotICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4
LCBvdGhlckluZGV4KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91
dC5wcmludCgiICMiLCBvdGhlckluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQo
IlxuIik7Ci0gICAgfQorICAgIEZJWE1FOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNp
b24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ0LDEwICs0NCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBj
b21wdXRlKEdyYXBoJik7CiAgICAgCi0gICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9t
LCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJv
bUluZGV4LCBCbG9ja0luZGV4IHRvSW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0b10uZ2V0KGZyb20pOworICAg
ICAgICBCbG9ja0RhdGEmIGZyb20gPSBtX2RhdGFbZnJvbUluZGV4XTsKKyAgICAgICAgQmxvY2tE
YXRhJiB0byA9IG1fZGF0YVt0b0luZGV4XTsKKyAgICAgICAgcmV0dXJuIHRvLnByZU51bWJlciA+
PSBmcm9tLnByZU51bWJlciAmJiB0by5wb3N0TnVtYmVyIDw9IGZyb20ucG9zdE51bWJlcjsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8pIGNvbnN0CkBAIC01OCwxMCArNjAsMjIgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChH
cmFwaCYsIFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgcHJ1
bmVEb21pbmF0b3JzKEdyYXBoJiwgQmxvY2tJbmRleCk7CisgICAgc3RydWN0IEJsb2NrRGF0YSB7
CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikK
KyAgICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgLCBwb3N0TnVt
YmVyKFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gaWRvbUtpZHM7CisgICAgICAgIEJhc2ljQmxvY2sqIGlkb21QYXJl
bnQ7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2ln
bmVkIHBvc3ROdW1iZXI7CisgICAgfTsKICAgICAKLSAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4g
bV9yZXN1bHRzOyAvLyBGb3IgZWFjaCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhh
dCBkb21pbmF0ZSBpdC4KLSAgICBGYXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3Jh
cnkgYml0dmVjdG9yIHdpdGggYml0IGZvciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8g
c2F2ZSBuZXcvZGVsZXRlcy4KKyAgICBWZWN0b3I8QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05haXZlRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOYWl2ZURvbWlu
YXRvcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworTmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQoreworfQorCitOYWl2ZURv
bWluYXRvcnM6On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lkIE5haXZlRG9taW5hdG9y
czo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFp
dmUgZG9taW5hdG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2soMCktPnBy
ZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdy
YXBoLm51bUJsb2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSBk
ZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1bHRzLnNp
emUoKSkgeworICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICBtX3Jlc3VsdHNbaV0u
cmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxvY2tzKTsK
KyAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9ubHkgZG9t
aW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAgICBtX3Jl
c3VsdHNbMF0uc2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJsb2Nrcy4K
KyAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9j
a3M7IGktLTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0KKyAgICAKKyAgICAvLyBN
YXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlmICghZ3JhcGguYmxvY2so
aSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9y
ZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8vIEl0ZXJhdGl2ZWx5IGVs
aW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAgIGJvb2wgY2hhbmdlZDsK
KyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gUHJ1bmUgZG9t
aW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAgICAgaWYgKCFjaGFuZ2Vk
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBh
bGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgY2hhbmdlZCA9IGZh
bHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworICAgIH0gd2hp
bGUgKGNoYW5nZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6cHJ1bmVEb21pbmF0b3Jz
KEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBncmFwaC5ibG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJlZGVjZXNz
b3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmluZCB0aGUg
aW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNb
YmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBi
bG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5m
aWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CisKKyAgICAv
LyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fc2NyYXRjaC5z
ZXQoaWR4KTsKKworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayhtX3NjcmF0
Y2gpOworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludCgiICAg
IEJsb2NrICIsICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG90aGVySW5k
ZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRleCkgewor
ICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4KSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBvdGhl
ckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9y
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURv
bWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTmFpdmVE
b21pbmF0b3JzX2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgY2xhc3MgaXMgb25seSB1
c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1wbGVtZW50YXRpb24uCisK
K2NsYXNzIE5haXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFpdmVEb21pbmF0b3JzKCk7
CisgICAgfk5haXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQgY29tcHV0ZShHcmFwaCYp
OworICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0
bykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAgICByZXR1
cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9taW5h
dGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9ja0luZGV4KTsKKyAgICAK
KyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3IgZWFjaCBibG9jaywg
dGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KKyAgICBGYXN0Qml0VmVj
dG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9yIHdpdGggYml0IGZvciBlYWNo
IGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVsZXRlcy4KK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHTmFpdmVEb21pbmF0b3JzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237192</attachid>
            <date>2014-08-26 18:50:41 -0700</date>
            <delta_ts>2014-08-26 22:29:59 -0700</delta_ts>
            <desc>it&apos;s getting interesting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42783</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrTWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwX2gKKyNkZWZpbmUgREZHQmxvY2tNYXBfaAor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitjbGFzcyBCbG9ja01hcCB7CitwdWJsaWM6CisgICAgQmxvY2tNYXAoKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgQmxvY2tNYXAoR3JhcGgmKTsKKyAgICAKKyAgICBCbG9j
a0luZGV4IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLnNpemUo
KTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAg
IAorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBU
JiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJhdG9y
W10oQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0
b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1fdmVj
dG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja01hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwSW5saW5lc19oCisjZGVmaW5lIERGR0Js
b2NrTWFwSW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Js
b2NrTWFwLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQmxvY2tNYXA8VD46OkJsb2NrTWFw
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX3ZlY3Rvci5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdCbG9ja1NldF9oCisjZGVmaW5lIERGR0Jsb2NrU2V0X2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEJsb2NrU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1NldCgp
IHsgfQorICAgIAorICAgIGJvb2wgYWRkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc2V0LnNldChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29s
IGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0Lmdl
dChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1f
c2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1NldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQmxvY2tXb3Jr
bGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworQmxvY2tXb3JrbGlzdDo6
QmxvY2tXb3JrbGlzdCgpCit7Cit9CisKK0Jsb2NrV29ya2xpc3Q6On5CbG9ja1dvcmtsaXN0KCkK
K3sKK30KKworYm9vbCBCbG9ja1dvcmtsaXN0OjpwdXNoKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIGlmICghbV9zZWVuLnNldChibG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBtX3N0YWNrLmFwcGVuZChibG9jayk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0Jhc2lj
QmxvY2sqIEJsb2NrV29ya2xpc3Q6OnBvcCgpCit7CisgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gbV9zdGFjay50YWtl
TGFzdCgpOworfQorCitEdXBsZXhCbG9ja1dvcmtsaXN0OjpEdXBsZXhCbG9ja1dvcmtsaXN0KCkK
K3sKK30KKworRHVwbGV4QmxvY2tXb3JrbGlzdDo6fkR1cGxleEJsb2NrV29ybGlzdCgpCit7Cit9
CisKK3ZvaWQgRHVwbGV4QmxvY2tXb3JrbGlzdDo6cHVzaFByZShCYXNpY0Jsb2NrKiBibG9jaykK
K3sKKyAgICBtX3dvcmtsaXN0LnB1c2goYmxvY2ssIFByZU9yZGVyKTsKK30KKwordm9pZCBEdXBs
ZXhCbG9ja1dvcmtsaXN0LnB1c2hQb3N0KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29y
a2xpc3QuZm9yY2VQdXNoKGJsb2NrLCBQb3N0T3JkZXIpOworfQorCitCbG9ja1dpdGhPcmRlciBE
dXBsZXhCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIEJsb2NrV2l0aDxWaXNpdE9yZGVyPiBy
ZXN1bHQgPSBtX3dvcmtsaXN0LnBvcCgpOworICAgIHJldHVybiBCbG9ja1dpdGhPcmRlcihyZXN1
bHQuYmxvY2ssIHJlc3VsdC5kYXRhKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIERGR0Jsb2NrV29ya2xpc3RfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSAiREZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK2NsYXNzIEJsb2Nr
V29ya2xpc3QgeworcHVibGljOgorICAgIEJsb2NrV29ya2xpc3QoKTsKKyAgICB+QmxvY2tXb3Jr
bGlzdCgpOworICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Jsb2NrKik7IC8vIFJldHVybnMgdHJ1
ZSBpZiB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgYmxvY2sgYmVmb3JlLgorICAgIAorICAgIGJv
b2wgbm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBwb3AoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOwor
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IG1fc3RhY2s7Cit9OworCisvLyBXaGVuIHlvdSBz
YXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGlu
dCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJsb2NrV2l0aCB7CisgICAgQmxvY2tX
aXRoKCkKKyAgICAgICAgOiBibG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
QmxvY2tXaXRoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgICAgICA6IGJs
b2NrKGJsb2NrKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHR5cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAg
IG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDog
bnVsbHB0cjsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jazsKKyAgICBUIGRhdGE7Cit9
OworCisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcg
c29tZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMg
Zm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkg
YmVlbiBzZWVuLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEV4dGVuZGVkQmxvY2tXb3Jr
bGlzdCB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0KCkgeyB9CisgICAgCisg
ICAgYm9vbCBmb3JjZVB1c2goY29uc3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAg
ICAgIG1fc3RhY2suYXBwZW5kKGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBmb3JjZVB1
c2goQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAgeworICAgICAgICBmb3Jj
ZVB1c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
cHVzaChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Nl
ZW4uYWRkKGVudHJ5LmJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIGZvcmNlUHVzaChlbnRyeSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Js
b2NrKiBibG9jaywgY29uc3QgVCYgZGF0YSkKKyAgICB7CisgICAgICAgIHB1c2goQmxvY2tXaXRo
PFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbm90RW1wdHkoKSBjb25z
dCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBCbG9ja1dpdGg8VD4g
cG9wKCkKKyAgICB7CisgICAgICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBCbG9ja1dpdGg8VD4oKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX3N0YWNr
LnRha2VMYXN0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJsb2NrU2V0IG1fc2VlbjsKKyAg
ICBWZWN0b3I8QmxvY2tXaXRoPFQ+PiBtX3N0YWNrOworfTsKKworZW51bSBWaXNpdE9yZGVyIHsK
KyAgICBQcmVPcmRlciwKKyAgICBQb3N0T3JkZXIKK307CisKK3N0cnVjdCBCbG9ja1dpdGhPcmRl
ciB7CisgICAgQmxvY2tXaXRoT3JkZXIoKQorICAgICAgICA6IGJsb2NrKG51bGxwdHIpCisgICAg
ICAgICwgb3JkZXIoUHJlT3JkZXIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCbG9ja1dpdGhP
cmRlcihCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRPcmRlciBvcmRlcikKKyAgICAgICAgOiBibG9j
ayhibG9jaykKKyAgICAgICAgLCBvcmRlcihvcmRlcikKKyAgICB7CisgICAgfQorICAgIAorICAg
IHR5cGVkZWYgdm9pZCogKEJsb2NrV2l0aE9yZGVyOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7Cisg
ICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJsb2NrID8gcmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkg
OiBudWxscHRyOworICAgIH0KKworICAgIEJhc2ljQmxvY2sqIGJsb2NrOworICAgIFZpc2l0T3Jk
ZXIgb3JkZXI7Cit9OworCisvLyBCbG9jayB3b3JrbGlzdCBzdWl0YWJsZSBmb3IgcG9zdC1vcmRl
ciB0cmF2ZXJzYWwuCitjbGFzcyBEdXBsZXhCbG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoKKyAgICBE
dXBsZXhCbG9ja1dvcmtsaXN0KCk7CisgICAgfkR1cGxleEJsb2NrV29ya2xpc3QoKTsKKyAgICAK
KyAgICB2b2lkIHB1c2hQcmUoQmFzaWNCbG9jayopOworICAgIHZvaWQgcHVzaFBvc3QoQmFzaWNC
bG9jayopOworICAgIAorICAgIHZvaWQgcHVzaChCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRPcmRl
ciBvcmRlciA9IFByZU9yZGVyKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcmRlcikgeworICAg
ICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgcHVzaFByZShibG9jayk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgcHVzaFBv
c3QoYmxvY2spOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHZv
aWQgcHVzaChjb25zdCBCbG9ja1dpdGhPcmRlciYgZGF0YSkKKyAgICB7CisgICAgICAgIHB1c2go
ZGF0YS5ibG9jaywgZGF0YS5vcmRlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgbm9uRW1wdHko
KSBjb25zdCB7IHJldHVybiAhbV93b3JrbGlzdC5pc0VtcHR5KCk7IH0KKyAgICBCbG9ja1dpdGhP
cmRlciBwb3AoKTsKKworcHJpdmF0ZToKKyAgICBFeHRlbmRlZEJsb2NrV29ya2xpc3Q8VmlzaXRP
cmRlcj4gbV93b3JrbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tXb3JrbGlzdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lv
biAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQWJzdHJhY3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUu
aCIKICNpbmNsdWRlICJERkdFZGdlVXNlc1N0cnVjdHVyZS5oIgpAQCAtMzY0LDYgKzM2NSw3IEBA
IGNsYXNzIEdsb2JhbENTRVBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBHbG9i
YWxDU0VQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwg
Y29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24iKQorICAgICAgICAsIG1faW1wdXJlRGF0
YU1hcChncmFwaCkKICAgICB7CiAgICAgfQogICAgIApAQCAtMzc3LDEzICszNzksMTEgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJl
T3JkZXIpOwogICAgICAgICAKLSAgICAgICAgbV9pbXB1cmVEYXRhTWFwLnJlc2l6ZShtX2dyYXBo
Lm51bUJsb2NrcygpKTsKLSAgICAgICAgCiAgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hh
dCBnZXRzIGNsb2JiZXJlZCBieSBibG9ja3MuIE5vZGUgdGhhdCB0aGlzIHVzZXMgdGhlIHByZU9y
ZGVyIGxpc3QKICAgICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fcHJlT3JkZXIuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX2Js
b2NrID0gbV9wcmVPcmRlcltpXTsKLSAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVy
ZURhdGFNYXBbbV9ibG9jay0+aW5kZXhdOworICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1f
aW1wdXJlRGF0YU1hcFttX2Jsb2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gbV9ibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCiAgICAgICAgICAgICAgICAgYWRk
V3JpdGVzKG1fZ3JhcGgsIG1fYmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJlRGF0YS0+d3Jp
dGVzKTsKICAgICAgICAgfQpAQCAtNDA3LDcgKzQwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIG1fcHVyZVZhbHVlcy5jbGVhcigpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgeworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggaSA9IG1faW1wdXJlRGF0YU1hcC5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1f
aW1wdXJlRGF0YU1hcFtpXS5hdmFpbGFibGVBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAgIG1f
aW1wdXJlRGF0YU1hcFtpXS5kaWRWaXNpdCA9IGZhbHNlOwogICAgICAgICB9CkBAIC00MjMsNyAr
NDIzLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJlT3JkZXIuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3By
ZU9yZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFtt
X2Jsb2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRh
TWFwW21fYmxvY2tdOwogICAgICAgICAgICAgbV93cml0ZXNTb0Zhci5jbGVhcigpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTU2Miw3ICs1NjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgIFNlYXJjaGluZyBpbiBibG9jayAiLCAqYmxvY2ssICJcbiIpOwot
ICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2Nr
LT5pbmRleF07CisgICAgICAgICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZURh
dGFNYXBbYmxvY2tdOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSByZXF1aXJlIHN0
cmljdCBkb21pbmF0aW9uIGJlY2F1c2UgdGhpcyB3b3VsZCBvbmx5IHNlZSB0aGluZ3MgaW4gb3Vy
IG93biBibG9jayBpZgogICAgICAgICAgICAgLy8gdGhleSBjYW1lICphZnRlciogb3VyIHBvc2l0
aW9uIGluIHRoZSBibG9jay4gQ2xlYXJseSwgd2hpbGUgb3VyIGJsb2NrIGRvbWluYXRlcwpAQCAt
NjEyLDcgKzYxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHJlZHVjdGlvbiBpbiBjb21w
aWxlIHRpbWUgd291bGQgd2FycmFudCB0aGUgaW5jcmVhc2UgaW4gY29tcGxleGl0eSwgdGhvdWdo
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
ODc2CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKLSAgICAgICAg
ICAgIG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9j
YXRpb24sIG1hdGNoKTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9ja10uYXZhaWxh
YmxlQXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICBtX2ltcHVyZURhdGEtPmF2
YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBtYXRjaDsKQEAgLTY1NCw3ICs2NTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJhc2lj
QmxvY2sqPiBtX3ByZU9yZGVyOwogCiAgICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsKLSAg
ICBWZWN0b3I8SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CisgICAgQmxvY2tNYXA8
SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CiAgICAgCiAgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvbWluYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
QEAgLTQxLDk0ICs0MiwyMTEgQEAgRG9taW5hdG9yczo6fkRvbWluYXRvcnMoKQogewogfQogCi12
b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQotewotICAgIC8vIFRoaXMgaW1w
bGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCituYW1lc3BhY2UgeworCisvLyBUaGlz
IGltcGxlbWVudHMgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBG
aW5kaW5nIERvbWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisvLyAoVE9QTEFTIDE5NzkpLiBJdCB1
c2VzIHRoZSAic2ltcGxlIiBpbXBsZW1lbnRhdGlvbiBvZiBMSU5LIGFuZCBFVkFMLiBUaGUgZnVs
bCBwYXBlciBpcyBsaW5rZWQKKy8vIGJlbG93OyB0aGlzIGNvZGUgYXR0ZW1wdHMgdG8gY2xvc2Vs
eSBmb2xsb3cgdGhlIGFsZ29yaXRobSBhcyBpdCBpcyBwcmVzZW50ZWQgaW4gdGhlIHBhcGVyOyBp
bgorLy8gcGFydGljdWxhciBzZWN0aW9ucyAzIGFuZCA0LgorLy8gaHR0cHM6Ly93d3cuY3MucHJp
bmNldG9uLmVkdS9jb3Vyc2VzL2FyY2hpdmUvZmFsbDAzL2NzNTI4L2hhbmRvdXRzL2ElMjBmYXN0
JTIwYWxnb3JpdGhtJTIwZm9yJTIwZmluZGluZy5wZGYKKworc3RydWN0IExhbmdhdWVyVGFyamFu
IHsKKyAgICBMYW5nYXVlclRhcmphbihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChn
cmFwaCkKKyAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCisgICAgeworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgIH0KKyAgICB9
CiAgICAgCi0gICAgQVNTRVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgp
KTsKKyAgICB2b2lkIGNvbXB1dGUoKQorICAgIHsKKyAgICAgICAgY29tcHV0ZURlcHRoRmlyc3RQ
cmVOdW1iZXJpbmcoKTsgLy8gU3RlcCAxLgorICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNB
bmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KKyAgICAg
ICAgY29tcHV0ZUV4cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwIDQuCisgICAg
fQogICAgIAotICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOworICAg
IHZvaWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKQorICAgIHsKKyAgICAgICAgQmxv
Y2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBoLmJsb2Nr
KDApKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLnNlbWlOdW1iZXIgPSBibG9j
a0J5UHJlTnVtYmVyLnNpemUoKTsKKyAgICAgICAgICAgIGJsb2NrQnlQcmVOdW1iZXIuYXBwZW5k
KGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9j
ayA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYgKCF3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3NvckJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgbV9kYXRhW3N1Y2Nlc3NvckJsb2NrXS5wYXJlbnQgPSBibG9jazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICAvLyBBbGxvY2F0ZSBzdG9yYWdl
IGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCi0gICAgaWYgKG51bUJsb2NrcyA+IG1f
cmVzdWx0cy5zaXplKCkpIHsKLSAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KQotICAgICAgICAgICAgbV9y
ZXN1bHRzW2ldLnJlc2l6ZShudW1CbG9ja3MpOwotICAgICAgICBtX3NjcmF0Y2gucmVzaXplKG51
bUJsb2Nrcyk7CisgICAgdm9pZCBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJbXBsaWNpdEltbWVk
aWF0ZURvbWluYXRvcnMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJl
TnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsgY3VycmVudFByZU51bWJlci0tID4g
MTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVy
W2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBt
X2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTdGVwIDI6CisgICAg
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogaW50ZXJtZWRpYXRlQmxvY2sg
PSBldmFsKHByZWRlY2Vzc29yQmxvY2spOworICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5zZW1p
TnVtYmVyID0gc3RkOjptaW4oCisgICAgICAgICAgICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlh
dGVCbG9ja10uc2VtaU51bWJlciwgYmxvY2tEYXRhLnNlbWlOdW1iZXIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9kYXRhW21fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51
bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgbGluayhibG9ja0RhdGEu
cGFyZW50LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFN0ZXAgMzoKKyAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc2VtaURvbWluZWUgPSBtX2RhdGFbYmxvY2tEYXRh
LnBhcmVudF0uYnVja2V0KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcG9zc2libGVE
b21pbmF0b3IgPSBldmFsKHNlbWlEb21pbmVlKTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEm
IHNlbWlEb21pbmVlRGF0YSA9IG1fZGF0YVtzZW1pRG9taW5lZV07CisgICAgICAgICAgICAgICAg
QmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRvckRhdGEgPSBtX2RhdGFbcG9zc2libGVEb21pbmF0
b3JdOworICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZURvbWluYXRvckRhdGEuc2VtaU51bWJl
ciA8IHNlbWlEb21pbmVlRGF0YS5zZW1pTnVtZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbWlE
b21pbmVlRGF0YS5kb20gPSBwb3NzaWJsZURvbWluYXRvcjsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFy
ZW50OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotCi0gICAgLy8gV2Uga25vdyB0
aGF0IHRoZSBlbnRyeSBibG9jayBpcyBvbmx5IGRvbWluYXRlZCBieSBpdHNlbGYuCi0gICAgbV9y
ZXN1bHRzWzBdLmNsZWFyQWxsKCk7Ci0gICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKLQotICAgIC8v
IEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3MuCi0gICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICgh
Z3JhcGguYmxvY2soaSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9zY3JhdGNo
LnNldChpKTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRv
cnMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsg
Y3VycmVudFByZU51bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFBy
ZU51bWJlcikgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVO
dW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0
YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9ja0Rh
dGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCisgICAg
ICAgICAgICAgICAgYmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207Cisg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVk
IGJ5IGV2ZXJ5dGhpbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAx
OykgewotICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsK
LSAgICB9Ci0KLSAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90
IGRvbWluYXRvci4KLSAgICBib29sIGNoYW5nZWQ7Ci0gICAgZG8gewotICAgICAgICBjaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBi
bG9ja3M6IGZvcndhcmQgc2Nhbi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51
bUJsb2NrczsgKytpKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3Jh
cGgsIGkpOwotCi0gICAgICAgIGlmICghY2hhbmdlZCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGJhY2t3
YXJkIHNjYW4uCi0gICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVE
b21pbmF0b3JzKGdyYXBoLCBpKTsKLSAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLX0KLQotYm9vbCBE
b21pbmF0b3JzOjpwcnVuZURvbWluYXRvcnMoR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGlkeCkK
LXsKLSAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGlkeCk7Ci0KLSAgICBpZiAo
IWJsb2NrIHx8IGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgdm9pZCBsaW5rKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
ICAgIHsKKyAgICAgICAgbV9kYXRhW2Zyb21dLmFuY2VzdG9yID0gdG87CisgICAgfQorICAgIAor
ICAgIEJhc2ljQmxvY2sqIGV2YWwoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICBp
ZiAoIW1fZGF0YVtibG9ja10uYW5jZXN0b3IpCisgICAgICAgICAgICByZXR1cm4gYmxvY2s7Cisg
ICAgICAgIAorICAgICAgICBjb21wcmVzcyhibG9jayk7CisgICAgICAgIHJldHVybiBtX2RhdGFb
YmxvY2tdLmxhYmVsOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXByZXNzKEJhc2ljQmxvY2sq
IGluaXRpYWxCbG9jaykKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2FzIG1lYW50IHRvIGJlIGEg
cmVjdXJzaXZlIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3QgbGlrZSByZWN1cnNpb24gYmVjYXVzZSB3
ZSBkb24ndAorICAgICAgICAvLyB3YW50IHRvIGJsb3cgdGhlIHN0YWNrLiBUaGUgb3JpZ2luYWwg
ZnVuY3Rpb24gd2lsbCBjYWxsIGNvbXByZXNzKCkgcmVjdXJzaXZlbHkgb24gdGhlCisgICAgICAg
IC8vIGFuY2VzdG9yIG9mIGFueXRoaW5nIHRoYXQgaGFzIGFuIGFuY2VzdG9yLiBTbywgd2UgcG9w
dWxhdGUgb3VyIHdvcmtsaXN0IHdpdGggdGhlCisgICAgICAgIC8vIHJlY3Vyc2l2ZSBhbmNlc3Rv
cnMgb2YgaW5pdGlhbEJsb2NrLiBUaGVuIHdlIHByb2Nlc3MgdGhlIGxpc3Qgc3RhcnRpbmcgZnJv
bSB0aGUgYmxvY2sKKyAgICAgICAgLy8gdGhhdCBpcyBmdXJ0aGVzdCB1cCB0aGUgYW5jZXN0b3Ig
Y2hhaW4uCisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvciA9IG1fZGF0YVtp
bml0aWFsQmxvY2tdLmFuY2VzdG9yOworICAgICAgICBBU1NFUlQoYW5jZXN0b3IpOworICAgICAg
ICBpZiAoIW1fZGF0YVthbmNlc3Rvcl0uYW5jZXN0b3IpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiBzdGFjazsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IGluaXRpYWxCbG9jazsgYmxvY2s7IGJsb2NrID0gbV9k
YXRhW2Jsb2NrXS5hbmNlc3RvcikKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChibG9jayk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgYmxvY2tzIHRoYXQgaGF2ZSBh
biBhbmNlc3RvciB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gVGhlIGxhc3QgdHdvCisgICAgICAgIC8v
IGVsZW1lbnRzIGluIHRoZSBzdGFjayB3b24ndCBzYXRpc2Z5IHRoaXMgcHJvcGVydHkuCisgICAg
ICAgIEFTU0VSVChzdGFjay5zaXplKCkgPj0gMik7CisgICAgICAgIEFTU0VSVCghbV9kYXRhW3N0
YWNrW3N0YWNrLnNpemUoKSAtIDFdXS5hbmNlc3Rvcik7CisgICAgICAgIEFTU0VSVCghbV9kYXRh
W21fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAyXV0uYW5jZXN0b3JdLmFuY2VzdG9yKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNpemUoKSAtIDI7IGktLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gc3RhY2tbaV07CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiYgbGFiZWxPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqJiBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2Vz
dG9yOworICAgICAgICAgICAgQVNTRVJUKGFuY2VzdG9yT2ZCbG9jayk7CisgICAgICAgICAgICBB
U1NFUlQobV9kYXRhW2FuY2VzdG9yT2ZCbG9ja10uYW5jZXN0b3IpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbE9mQW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Fu
Y2VzdG9yT2ZCbG9ja10ubGFiZWw7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2Rh
dGFbbGFiZWxPZkFuY2Vzb3JPZkJsb2NrXS5zZW1pTnVtYmVyIDwKKyAgICAgICAgICAgICAgICBt
X2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1pTnVtYmVyKQorICAgICAgICAgICAgICAgIGxhYmVsT2ZC
bG9jayA9IGxhYmVsT2ZBbmNlc3Rvck9mQmxvY2s7CisgICAgICAgICAgICBhbmNlc3Rvck9mQmxv
Y2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgfQorICAgIH0K
IAotICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20ocHJlZHMpLgotICAgIG1fc2Ny
YXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmluZGV4XSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQot
ICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzW2pd
LT5pbmRleF0pOworICAgIEJhc2ljQmxvY2sqIGltbWVkaWF0ZURvbWluYXRvcihCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKKyAgICB9
CiAKLSAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1f
c2NyYXRjaC5zZXQoaWR4KTsKKyAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tE
YXRhKCkKKyAgICAgICAgICAgIDogcGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHByZU51
bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgc2VtaU51bWJlcihVSU5UX01BWCkKKyAgICAg
ICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICwgbGFiZWwobnVsbHB0cikK
KyAgICAgICAgICAgICwgZG9tKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFyZW50OworICAgICAgICB1bnNpZ25lZCBwcmVOdW1i
ZXI7CisgICAgICAgIHVuc2lnbmVkIHNlbWlOdW1iZXI7CisgICAgICAgIEJhc2ljQmxvY2sqIGFu
Y2VzdG9yOworICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbDsKKyAgICAgICAgVmVjdG9yPEJhc2lj
QmxvY2sqPiBidWNrZXQ7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvbTsKKyAgICB9OworICAgIAor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9ibG9ja0J5UHJlTnVtYmVyOworfTsKIAotICAgIHJldHVy
biBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOwotfQorfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCiAKLXZvaWQgRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICBMYW5nYXVlclRhcmphbiBsYW5n
YXVlclRhcmphbihncmFwaCk7CisgICAgbGFuZ2F1ZXJUYXJqYW4uY29tcHV0ZSgpOworCisgICAg
bV9kYXRhID0gQmxvY2tNYXA8QmxvY2tEYXRhPihncmFwaCk7CisgICAgCisgICAgLy8gRnJvbSBo
ZXJlIHdlIHdhbnQgdG8gYnVpbGQgYSBzcGFubmluZyB0cmVlIHdpdGggYm90aCB1cHdhcmQgYW5k
IGRvd253YXJkIGxpbmtzIGFuZCB3ZSB3YW50CisgICAgLy8gdG8gZG8gYSBzZWFyY2ggb3ZlciB0
aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5kIHBvc3QgbnVtYmVycyB0aGF0IGNhbiBiZSB1c2Vk
IGZvciBkb21pbmFuY2UKKyAgICAvLyB0ZXN0cy4KKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KCIgICAg
QmxvY2sgIiwgKmJsb2NrLCAiOiIpOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggb3RoZXJJbmRl
eCA9IDA7IG90aGVySW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytvdGhlckluZGV4KSB7Ci0g
ICAgICAgICAgICBpZiAoIWRvbWluYXRlcyhibG9jay0+aW5kZXgsIG90aGVySW5kZXgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIG90aGVy
SW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgCisg
ICAgICAgIEJhc2ljQmxvY2sqIGlkb21CbG9jayA9IGxhbmdhdWVyVGFyamFuLm1fZGF0YVtibG9j
a10uZG9tOworICAgICAgICBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQgPSBpZG9tQmxvY2s7Cisg
ICAgICAgIG1fZGF0YVtpZG9tQmxvY2tdLmlkb21LaWRzLmFwcGVuZChibG9jayk7CisgICAgfQor
ICAgIAorICAgIHVuc2lnbmVkIG5leHRQcmVOdW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQ
b3N0TnVtYmVyID0gMDsKKyAgICAKKyAgICBEdXBsZXhCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygwKSk7CisgICAgd2hpbGUgKEJsb2NrV2l0
aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBGSVhNRTsKICAgICB9CiB9
CiAKK3ZvaWQgRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgRklYTUU7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxMCArNDQsMTIgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwogICAgIAotICAgIGJvb2wg
ZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QKKyAgICBib29s
IGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb21JbmRleCwgQmxvY2tJbmRleCB0b0luZGV4KSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jl
c3VsdHNbdG9dLmdldChmcm9tKTsKKyAgICAgICAgQmxvY2tEYXRhJiBmcm9tID0gbV9kYXRhW2Zy
b21JbmRleF07CisgICAgICAgIEJsb2NrRGF0YSYgdG8gPSBtX2RhdGFbdG9JbmRleF07CisgICAg
ICAgIHJldHVybiB0by5wcmVOdW1iZXIgPj0gZnJvbS5wcmVOdW1iZXIgJiYgdG8ucG9zdE51bWJl
ciA8PSBmcm9tLnBvc3ROdW1iZXI7CiAgICAgfQogICAgIAogICAgIGJvb2wgZG9taW5hdGVzKEJh
c2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdApAQCAtNTgsMTAgKzYwLDIyIEBA
IHB1YmxpYzoKICAgICB2b2lkIGR1bXAoR3JhcGgmLCBQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IAogcHJpdmF0ZToKLSAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgp
OworICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBCbG9ja0RhdGEoKQorICAgICAgICAg
ICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHByZU51bWJlcihVSU5UX01B
WCkKKyAgICAgICAgICAgICwgcG9zdE51bWJlcihVSU5UX01BWCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGlkb21LaWRzOworICAg
ICAgICBCYXNpY0Jsb2NrKiBpZG9tUGFyZW50OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
cHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBwb3N0TnVtYmVyOworICAgIH07CiAgICAgCi0g
ICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsgLy8gRm9yIGVhY2ggYmxvY2ssIHRo
ZSBiaXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5hdGUgaXQuCi0gICAgRmFzdEJpdFZlY3Rv
ciBtX3NjcmF0Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZlY3RvciB3aXRoIGJpdCBmb3IgZWFjaCBi
bG9jay4gV2UgcmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3L2RlbGV0ZXMuCisgICAgQmxvY2tNYXA8
QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcyOTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRl
ICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUg
IkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZl
bmVzcy5oIgpAQCAtNjM4LDcwICs2MzksMzkgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExv
Y2FsKEJhc2ljQmxvYwogLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFuZCBwb3N0LW9yZGVyIHRyYXZl
cnNhbHMuCiBuYW1lc3BhY2UgewogCi1pbmxpbmUgdm9pZCBhZGRGb3JQcmVPcmRlcihWZWN0b3I8
QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwg
Qml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKK2lubGluZSB2b2lkIGFkZEZvclBy
ZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgQmxvY2tXb3JrbGlzdCYgd29ya2xp
c3QsIEJhc2ljQmxvY2sqIGJsb2NrKQogewotICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgp
KQorICAgIGlmICghd29ya2xpc3QucHVzaChibG9jaykpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKLSAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2spOwot
ICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Ci19Ci0KLWVudW0gUG9zdE9yZGVyVGFza0tpbmQg
ewotICAgIFBvc3RPcmRlckZpcnN0VmlzaXQsCi0gICAgUG9zdE9yZGVyQWRkVG9SZXN1bHQKLX07
Ci0KLXN0cnVjdCBQb3N0T3JkZXJUYXNrIHsKLSAgICBQb3N0T3JkZXJUYXNrKEJhc2ljQmxvY2sq
IGJsb2NrID0gbnVsbHB0ciwgUG9zdE9yZGVyVGFza0tpbmQga2luZCA9IFBvc3RPcmRlckZpcnN0
VmlzaXQpCi0gICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICAgICAgLCBtX2tpbmQoa2luZCkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Ci0gICAgUG9zdE9y
ZGVyVGFza0tpbmQgbV9raW5kOwotfTsKLQotaW5saW5lIHZvaWQgYWRkRm9yUG9zdE9yZGVyKFZl
Y3RvcjxQb3N0T3JkZXJUYXNrLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2lj
QmxvY2sqIGJsb2NrKQotewotICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2soYmxvY2ss
IFBvc3RPcmRlckZpcnN0VmlzaXQpKTsKLSAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwogfQog
CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5QcmVP
cmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7Ci0gICAgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgQml0VmVjdG9yIHNlZW47Ci0gICAgYWRkRm9yUHJlT3Jk
ZXIocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOwotICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFr
ZUxhc3QoKTsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIGFkZEZvclByZU9yZGVy
KHJlc3VsdCwgd29ya2xpc3QsIGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxv
Y2sgPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgYWRkRm9yUHJlT3JkZXIocmVzdWx0
LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBhZGRG
b3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0LCBibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICB9
CiB9CiAKIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0Owot
ICAgIEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2Vlbiwg
YmxvY2soMCkpOwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBv
c3RPcmRlclRhc2sgdGFzayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgIHN3aXRjaCAo
dGFzay5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgotICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3Jk
ZXJBZGRUb1Jlc3VsdCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Js
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9y
ZGVyKHdvcmtsaXN0LCBzZWVuLCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgRHVw
bGV4QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsK
KyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAg
ICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAg
ICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6Ci0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0Lmgi
CiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAg
ICAgQml0VmVjdG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICBC
bG9ja1NldCBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwpAQCAtNjMsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMgYXQgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KICAgICAgICAgICAgIGlmIChtX29yaWdpblRoYXRI
YWRGaXJlLmlzU2V0KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0
TmVlZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+aW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5hZGQo
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZh
bGlkYXRpb25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWJs
b2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmNvbnRhaW5zKGJsb2NrKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaW5zZXJ0SW52
YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOYWl2
ZURvbWluYXRvcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworTmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQoreworfQorCitO
YWl2ZURvbWluYXRvcnM6On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lkIE5haXZlRG9t
aW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRz
IGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2so
MCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bUJsb2Nr
cyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9y
IHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1
bHRzLnNpemUoKSkgeworICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICBtX3Jlc3Vs
dHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxv
Y2tzKTsKKyAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9u
bHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAg
ICBtX3Jlc3VsdHNbMF0uc2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJs
b2Nrcy4KKyAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1CbG9ja3M7IGktLTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlmICghZ3JhcGgu
YmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8vIEl0ZXJhdGl2
ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAgIGJvb2wgY2hh
bmdlZDsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gUHJ1
bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAgICAgaWYgKCFj
aGFuZ2VkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9y
cyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6cHJ1bmVEb21p
bmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJl
ZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmlu
ZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNoLnNldChtX3Jl
c3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2Ny
YXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CisK
KyAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fc2Ny
YXRjaC5zZXQoaWR4KTsKKworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayht
X3NjcmF0Y2gpOworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmlu
dCgiICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG90
aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRl
eCkgeworICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICMi
LCBvdGhlckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9t
aW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YWl2ZURvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
TmFpdmVEb21pbmF0b3JzX2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgY2xhc3MgaXMg
b25seSB1c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1wbGVtZW50YXRp
b24uCisKK2NsYXNzIE5haXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFpdmVEb21pbmF0
b3JzKCk7CisgICAgfk5haXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQgY29tcHV0ZShH
cmFwaCYpOworICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJ
bmRleCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgICAg
ICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
ZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9ja0luZGV4KTsK
KyAgICAKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3IgZWFjaCBi
bG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KKyAgICBGYXN0
Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9yIHdpdGggYml0IGZv
ciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVsZXRlcy4KK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHTmFpdmVEb21pbmF0b3JzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237203</attachid>
            <date>2014-08-26 22:29:59 -0700</date>
            <delta_ts>2014-08-27 12:48:45 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57954</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDYgKzEyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKICAgICBkZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisgICAgZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCiAgICAg
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTE3NSw2ICsxNzYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAorICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1dvcmtsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiIC8+CkBAIC00MjEs
NiArNDIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWF5RXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2
ZURvbWluYXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNw
cCIgLz4KQEAgLTk5Myw2ICs5OTUsMTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmxvY2tNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja01hcElubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja1dvcmtsaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxv
Y2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJl
Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkBAIC0xMDU2LDYgKzEwNjIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYg
KzQ5OCwxMyBAQAogCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDEwMTgx
NDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1w
UmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMzE0MTExODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi87
IH07CiAJCTBGQzMxNDE1MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovOyB9OworCQkwRkMzQ0NGQzE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZE
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAv
KiBERkdCbG9ja01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y3
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0Y4MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNw
cCAqLzsgfTsKKwkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y5
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJB
IC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21p
bmF0b3JzLmNwcCAqLzsgfTsKKwkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkRFMTdD
RDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMxN0NEODc3ODAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4
Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAxN0NEODc4RjAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
QEAgLTI0MjEsNiArMjQyOCwxMyBAQAogCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTExODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZW1wUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tNYXAuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNjE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrTWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNzE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmxvY2tTZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9j
a1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYWl2ZURvbWlu
YXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmFpdmVEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4
MTksNiArNDgzMywxMSBAQAogCQkJCUE3MEIwODMxMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5h
cnlTd2l0Y2guaCAqLywKIAkJCQlBN0Q4OUNFNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
bG9ja0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcC5oICovLAorCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCAqLywKKwkJCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tTZXQuaCAqLywKKwkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3Jr
bGlzdC5jcHAgKi8sCisJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTQ5MzAsNiArNDk0OSw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFD
NzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCisJCQkJMEZDM0NDRkIxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUxRTE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC01ODQyLDYgKzU4NjMsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVD
QjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5
MTcsNiArNTkzOSw3IEBACiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGQzE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzMTcsNiArNjM0MCw3IEBACiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyOSw2ICs2MzUzLDcgQEAKIAkJCQkw
RjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJD
RTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYw
MEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mzc0LDYgKzYzOTksNyBAQAog
CQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFF
OTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTcsNiArNzMyMyw3IEBACiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTA1QUJENTE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Nyw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDM0NDRkYx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tNYXBfaAorI2Rl
ZmluZSBERkdCbG9ja01hcF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBHcmFwaDsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJsb2NrTWFwIHsKK3B1Ymxp
YzoKKyAgICBCbG9ja01hcCgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCbG9ja01hcChHcmFw
aCYpOworICAgIAorICAgIEJsb2NrSW5kZXggc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYXRvcltdKEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9j
a0luZGV4XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4
IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07
CisgICAgfQorICAgIAorICAgIFQmIG9wZXJhdG9yW10oQmFzaWNCbG9jayogYmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgVCYgb3BlcmF0b3JbXShCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9jay0+aW5kZXhdOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8VD4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrTWFwSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01h
cElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tNYXBJbmxp
bmVzX2gKKyNkZWZpbmUgREZHQmxvY2tNYXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitC
bG9ja01hcDxUPjo6QmxvY2tNYXAoR3JhcGgmIGdyYXBoKQoreworICAgIG1fdmVjdG9yLnJlc2l6
ZShncmFwaC5udW1CbG9ja3MoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tNYXBJbmxpbmVz
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrU2V0X2gKKyNkZWZpbmUgREZHQmxvY2tTZXRf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgQmxvY2tTZXQgeworcHVi
bGljOgorICAgIEJsb2NrU2V0KCkgeyB9CisgICAgCisgICAgYm9vbCBhZGQoQmFzaWNCbG9jayog
YmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9zZXQuc2V0KGJsb2NrLT5pbmRleCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gbV9zZXQuZ2V0KGJsb2NrLT5pbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrU2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xpc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dv
cmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitCbG9ja1dvcmtsaXN0OjpCbG9ja1dvcmtsaXN0KCkKK3sKK30KKworQmxvY2tXb3JrbGlz
dDo6fkJsb2NrV29ya2xpc3QoKQoreworfQorCitib29sIEJsb2NrV29ya2xpc3Q6OnB1c2goQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgaWYgKCFtX3NlZW4uc2V0KGJsb2NrKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIG1fc3RhY2suYXBwZW5kKGJsb2NrKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworQmFzaWNCbG9jayogQmxvY2tXb3JrbGlzdDo6cG9wKCkKK3sKKyAgICBp
ZiAobV9zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAg
IHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCk7Cit9CisKK1Bvc3RPcmRlckJsb2NrV29ya2xpc3Q6
OlBvc3RPcmRlckJsb2NrV29ya2xpc3QoKQoreworfQorCitQb3N0T3JkZXJCbG9ja1dvcmtsaXN0
Ojp+UG9zdE9yZGVyQmxvY2tXb3JsaXN0KCkKK3sKK30KKwordm9pZCBQb3N0T3JkZXJCbG9ja1dv
cmtsaXN0OjpwdXNoUHJlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29ya2xpc3QucHVz
aChibG9jaywgUHJlT3JkZXIpOworfQorCit2b2lkIFBvc3RPcmRlckJsb2NrV29ya2xpc3QucHVz
aFBvc3QoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgbV93b3JrbGlzdC5mb3JjZVB1c2goYmxv
Y2ssIFBvc3RPcmRlcik7Cit9CisKK0Jsb2NrV2l0aE9yZGVyIFBvc3RPcmRlckJsb2NrV29ya2xp
c3Q6OnBvcCgpCit7CisgICAgQmxvY2tXaXRoPFZpc2l0T3JkZXI+IHJlc3VsdCA9IG1fd29ya2xp
c3QucG9wKCk7CisgICAgcmV0dXJuIEJsb2NrV2l0aE9yZGVyKHJlc3VsdC5ibG9jaywgcmVzdWx0
LmRhdGEpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3Jr
bGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tX
b3JrbGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja1dv
cmtsaXN0X2gKKyNkZWZpbmUgREZHQmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdCbG9ja1NldC5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitzdHJ1Y3QgQmFzaWNCbG9jazsKKworY2xhc3MgQmxvY2tXb3JrbGlzdCB7CitwdWJs
aWM6CisgICAgQmxvY2tXb3JrbGlzdCgpOworICAgIH5CbG9ja1dvcmtsaXN0KCk7CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqKTsgLy8gUmV0dXJucyB0cnVlIGlmIHdlIGRpZG4ndCBr
bm93IGFib3V0IHRoZSBibG9jayBiZWZvcmUuCisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuICFtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIEJhc2ljQmxvY2sqIHBvcCgp
OworICAgIAorcHJpdmF0ZToKKyAgICBCbG9ja1NldCBtX3NlZW47CisgICAgVmVjdG9yPEJhc2lj
QmxvY2sqLCAxNj4gbV9zdGFjazsKK307CisKKy8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50
PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgQmxvY2tXaXRoIHsKKyAgICBCbG9ja1dpdGgoKQorICAgICAgICA6
IGJsb2NrKG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCbG9ja1dpdGgoQmFzaWNC
bG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAgICAgIDogYmxvY2soYmxvY2spCisgICAg
ICAgICwgZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiB2b2lkKiAo
QmxvY2tXaXRoPFQ+OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVj
aWZpZWRCb29sVHlwZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsb2NrID8gcmVp
bnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiBudWxscHRyOworICAgIH0K
KworICAgIEJhc2ljQmxvY2sqIGJsb2NrOworICAgIFQgZGF0YTsKK307CisKKy8vIEV4dGVuZGVk
IGJsb2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0YSBh
bG9uZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVl
aW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoK
KyAgICBFeHRlbmRlZEJsb2NrV29ya2xpc3QoKSB7IH0KKyAgICAKKyAgICBib29sIGZvcmNlUHVz
aChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAgICAgICAgbV9zdGFjay5hcHBl
bmQoZW50cnkpOworICAgIH0KKyAgICAKKyAgICBib29sIGZvcmNlUHVzaChCYXNpY0Jsb2NrKiBi
bG9jaywgY29uc3QgVCYgZGF0YSkKKyAgICB7CisgICAgICAgIGZvcmNlUHVzaChCbG9ja1dpdGg8
VD4oYmxvY2ssIGRhdGEpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwdXNoKGNvbnN0IEJsb2Nr
V2l0aDxUPiYgZW50cnkpCisgICAgeworICAgICAgICBpZiAoIW1fc2Vlbi5hZGQoZW50cnkuYmxv
Y2spKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgZm9yY2VQdXNoKGVu
dHJ5KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25z
dCBUJiBkYXRhKQorICAgIHsKKyAgICAgICAgcHVzaChCbG9ja1dpdGg8VD4oYmxvY2ssIGRhdGEp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0
YWNrLmlzRW1wdHkoKTsgfQorICAgIAorICAgIEJsb2NrV2l0aDxUPiBwb3AoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEJsb2NrV2l0
aDxUPigpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAgIFZlY3RvcjxCbG9ja1dp
dGg8VD4+IG1fc3RhY2s7Cit9OworCitlbnVtIFZpc2l0T3JkZXIgeworICAgIFByZU9yZGVyLAor
ICAgIFBvc3RPcmRlcgorfTsKKworc3RydWN0IEJsb2NrV2l0aE9yZGVyIHsKKyAgICBCbG9ja1dp
dGhPcmRlcigpCisgICAgICAgIDogYmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBvcmRlcihQcmVP
cmRlcikKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aE9yZGVyKEJhc2ljQmxvY2sq
IGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVyKQorICAgICAgICA6IGJsb2NrKGJsb2NrKQorICAgICAg
ICAsIG9yZGVyKG9yZGVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiB2b2lkKiAo
QmxvY2tXaXRoT3JkZXI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNw
ZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyBy
ZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAg
fQorCisgICAgQmFzaWNCbG9jayogYmxvY2s7CisgICAgVmlzaXRPcmRlciBvcmRlcjsKK307CisK
Ky8vIEJsb2NrIHdvcmtsaXN0IHN1aXRhYmxlIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4KK2Ns
YXNzIFBvc3RPcmRlckJsb2NrV29ya2xpc3QgeworcHVibGljOgorICAgIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3QoKTsKKyAgICB+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCgpOworICAgIAorICAgIHZv
aWQgcHVzaFByZShCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBwdXNoUG9zdChCYXNpY0Jsb2NrKik7
CisgICAgCisgICAgdm9pZCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVy
ID0gUHJlT3JkZXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9yZGVyKSB7CisgICAgICAgIGNh
c2UgUHJlT3JkZXI6CisgICAgICAgICAgICBwdXNoUHJlKGJsb2NrKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBQb3N0T3JkZXI6CisgICAgICAgICAgICBwdXNoUG9zdChibG9j
ayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBwdXNo
KGNvbnN0IEJsb2NrV2l0aE9yZGVyJiBkYXRhKQorICAgIHsKKyAgICAgICAgcHVzaChkYXRhLmJs
b2NrLCBkYXRhLm9yZGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub25FbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFtX3dvcmtsaXN0LmlzRW1wdHkoKTsgfQorICAgIEJsb2NrV2l0aE9yZGVyIHBv
cCgpOworCitwcml2YXRlOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDxWaXNpdE9yZGVyPiBt
X3dvcmtsaXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjk0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNp
bmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2lu
Y2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCkBAIC0zNjQsNiArMzY1LDcgQEAgY2xhc3Mg
R2xvYmFsQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEdsb2JhbENTRVBo
YXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImdsb2JhbCBjb21tb24g
c3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9pbXB1cmVEYXRhTWFwKGdy
YXBoKQogICAgIHsKICAgICB9CiAgICAgCkBAIC0zNzcsMTMgKzM3OSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIobV9wcmVPcmRlcik7
CiAgICAgICAgIAotICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXplKG1fZ3JhcGgubnVtQmxv
Y2tzKCkpOwotICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGF0IGdldHMg
Y2xvYmJlcmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0aGUgcHJlT3JkZXIgbGlz
dAogICAgICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9wcmVPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBt
X3ByZU9yZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1h
cFttX2Jsb2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVE
YXRhTWFwW21fYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBt
X2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgICAgICBhZGRXcml0ZXMo
bV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwog
ICAgICAgICB9CkBAIC00MDcsNyArNDA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9w
dXJlVmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2ltcHVyZURhdGFNYXAuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBp
ID0gbV9pbXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9pbXB1cmVE
YXRhTWFwW2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgbV9pbXB1cmVE
YXRhTWFwW2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQyMyw3ICs0MjMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cmVPcmRlci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgbV9ibG9jayA9IG1fcHJlT3JkZXJb
aV07Ci0gICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2st
PmluZGV4XTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9i
bG9ja107CiAgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNTYyLDcgKzU2Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgU2VhcmNoaW5nIGluIGJsb2NrICIsICpibG9jaywgIlxuIik7Ci0gICAgICAg
ICAgICBJbXB1cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4
XTsKKyAgICAgICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFti
bG9ja107CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmUgc3RyaWN0IGRv
bWluYXRpb24gYmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2VlIHRoaW5ncyBpbiBvdXIgb3duIGJs
b2NrIGlmCiAgICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFmdGVyKiBvdXIgcG9zaXRpb24gaW4g
dGhlIGJsb2NrLiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sgZG9taW5hdGVzCkBAIC02MTIsNyAr
NjEyLDcgQEAgcHVibGljOgogICAgICAgICAvLyB0aGUgcmVkdWN0aW9uIGluIGNvbXBpbGUgdGlt
ZSB3b3VsZCB3YXJyYW50IHRoZSBpbmNyZWFzZSBpbiBjb21wbGV4aXR5LCB0aG91Z2guCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NzYKICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHNlZW5MaXN0KQotICAgICAgICAgICAgbV9p
bXB1cmVEYXRhTWFwW2Jsb2NrLT5pbmRleF0uYXZhaWxhYmxlQXRUYWlsLmFkZChsb2NhdGlvbiwg
bWF0Y2gpOworICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFwW2Jsb2NrXS5hdmFpbGFibGVBdFRh
aWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CiAgICAgICAgIG1faW1wdXJlRGF0YS0+YXZhaWxhYmxl
QXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1h
dGNoOwpAQCAtNjU0LDcgKzY1NCw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IG1fcHJlT3JkZXI7CiAKICAgICBQdXJlTXVsdGlNYXAgbV9wdXJlVmFsdWVzOwotICAgIFZlY3Rv
cjxJbXB1cmVCbG9ja0RhdGE+IG1faW1wdXJlRGF0YU1hcDsKKyAgICBCbG9ja01hcDxJbXB1cmVC
bG9ja0RhdGE+IG1faW1wdXJlRGF0YU1hcDsKICAgICAKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OwogICAgIE5vZGUqIG1fbm9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDEs
OTEgKzQyLDI2NSBAQCBEb21pbmF0b3JzOjp+RG9taW5hdG9ycygpCiB7CiB9CiAKLXZvaWQgRG9t
aW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRz
IGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaW1wbGVt
ZW50cyBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEgRmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcg
RG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKKy8vIChUT1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhl
ICJzaW1wbGUiIGltcGxlbWVudGF0aW9uIG9mIExJTksgYW5kIEVWQUwuIFRoZSBmdWxsIHBhcGVy
IGlzIGxpbmtlZAorLy8gYmVsb3c7IHRoaXMgY29kZSBhdHRlbXB0cyB0byBjbG9zZWx5IGZvbGxv
dyB0aGUgYWxnb3JpdGhtIGFzIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluCisvLyBw
YXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5kIDQuCisvLyBodHRwczovL3d3dy5jcy5wcmluY2V0b24u
ZWR1L2NvdXJzZXMvYXJjaGl2ZS9mYWxsMDMvY3M1MjgvaGFuZG91dHMvYSUyMGZhc3QlMjBhbGdv
cml0aG0lMjBmb3IlMjBmaW5kaW5nLnBkZgorCitzdHJ1Y3QgTGVuZ2F1ZXJUYXJqYW4geworICAg
IExlbmdhdWVyVGFyamFuKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQor
ICAgICAgICAsIG1fZGF0YShncmFwaCkKKyAgICB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIG1fZGF0YVtibG9ja10ubGFiZWwgPSBibG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXB1dGUoKQorICAgIHsKKyAgICAgICAgY29tcHV0ZURlcHRoRmlyc3RQcmVO
dW1iZXJpbmcoKTsgLy8gU3RlcCAxLgorICAgICAgICBjb21wdXRlU2VtaURvbWluYXRvcnNBbmRJ
bXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcHMgMiBhbmQgMy4KKyAgICAgICAg
Y29tcHV0ZUV4cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwIDQuCisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKQorICAgIHsKKyAg
ICAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QucHVzaChtX2dy
YXBoLmJsb2NrKDApKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLnNlbWlOdW1i
ZXIgPSBibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsKKyAgICAgICAgICAgIGJsb2NrQnlQcmVOdW1i
ZXIuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3JCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgaWYgKCF3
b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvckJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbV9kYXRhW3N1Y2Nlc3NvckJsb2NrXS5wYXJlbnQgPSBibG9j
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXB1
dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSBtX2Jsb2NrQnlQcmVOdW1i
ZXIuc2l6ZSgpOyBjdXJyZW50UHJlTnVtYmVyLS0gPiAxOykgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAg
ICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFN0ZXAgMjoKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
cHJlZGVjZXNzb3JCbG9jayA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBpbnRlcm1lZGlhdGVCbG9jayA9IGV2YWwocHJlZGVjZXNzb3JCbG9jayk7
CisgICAgICAgICAgICAgICAgYmxvY2tEYXRhLnNlbWlOdW1iZXIgPSBzdGQ6Om1pbigKKyAgICAg
ICAgICAgICAgICAgICAgbV9kYXRhW2ludGVybWVkaWF0ZUJsb2NrXS5zZW1pTnVtYmVyLCBibG9j
a0RhdGEuc2VtaU51bWJlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2RhdGFbbV9i
bG9ja0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXV0uYnVja2V0LmFwcGVuZChibG9j
ayk7CisgICAgICAgICAgICBsaW5rKGJsb2NrRGF0YS5wYXJlbnQsIGJsb2NrKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gU3RlcCAzOgorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBzZW1pRG9taW5lZSA9IG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBwb3NzaWJsZURvbWluYXRvciA9IGV2YWwoc2VtaURvbWlu
ZWUpOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURvbWluZWVEYXRhID0gbV9kYXRh
W3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHBvc3NpYmxlRG9taW5h
dG9yRGF0YSA9IG1fZGF0YVtwb3NzaWJsZURvbWluYXRvcl07CisgICAgICAgICAgICAgICAgaWYg
KHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRhLnNlbWlO
dW1lcikKKyAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IHBvc3NpYmxl
RG9taW5hdG9yOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2Vt
aURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0YS5wYXJlbnQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CiAgICAgCi0gICAgQVNTRVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNlc3Nv
cnMuaXNFbXB0eSgpKTsKKyAgICB2b2lkIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRv
cnMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gMTsg
Y3VycmVudFByZU51bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7ICsrY3VycmVudFBy
ZU51bWJlcikgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrQnlQcmVO
dW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAgICAgICAgICBCbG9ja0RhdGEmIGJsb2NrRGF0
YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9ja0Rh
dGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0pCisgICAg
ICAgICAgICAgICAgYmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVt
QmxvY2tzKCk7CisgICAgdm9pZCBsaW5rKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQorICAgIHsKKyAgICAgICAgbV9kYXRhW2Zyb21dLmFuY2VzdG9yID0gdG87CisgICAgfQogICAg
IAotICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4
LiAKLSAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1bHRzLnNpemUoKSkgewotICAgICAgICBtX3Jl
c3VsdHMuZ3JvdyhudW1CbG9ja3MpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9j
a3M7IGktLTspCi0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7Ci0g
ICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxvY2tzKTsKKyAgICBCYXNpY0Jsb2NrKiBldmFs
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFu
Y2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAgICAgY29t
cHJlc3MoYmxvY2spOworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21wcmVzcyhCYXNpY0Jsb2NrKiBpbml0aWFsQmxvY2spCisgICAg
eworICAgICAgICAvLyBUaGlzIHdhcyBtZWFudCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwg
YnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgLy8g
d2FudCB0byBibG93IHRoZSBzdGFjay4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgY2FsbCBj
b21wcmVzcygpIHJlY3Vyc2l2ZWx5IG9uIHRoZQorICAgICAgICAvLyBhbmNlc3RvciBvZiBhbnl0
aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlzdCB3
aXRoIHRoZQorICAgICAgICAvLyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9jay4g
VGhlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCisgICAgICAg
IC8vIHRoYXQgaXMgZnVydGhlc3QgdXAgdGhlIGFuY2VzdG9yIGNoYWluLgorICAgICAgICAKKyAg
ICAgICAgQmFzaWNCbG9jayogYW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2NrXS5hbmNlc3Rv
cjsKKyAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICAgICAgaWYgKCFtX2RhdGFbYW5jZXN0
b3JdLmFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgVmVj
dG9yPEJhc2ljQmxvY2sqLCAxNj4gc3RhY2s7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgPSBpbml0aWFsQmxvY2s7IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3Ip
CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8g
V2Ugb25seSBjYXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBoYXMg
YW4gYW5jZXN0b3IuIFRoZSBsYXN0IHR3bworICAgICAgICAvLyBlbGVtZW50cyBpbiB0aGUgc3Rh
Y2sgd29uJ3Qgc2F0aXNmeSB0aGlzIHByb3BlcnR5LgorICAgICAgICBBU1NFUlQoc3RhY2suc2l6
ZSgpID49IDIpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAx
XV0uYW5jZXN0b3IpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVttX2RhdGFbc3RhY2tbc3RhY2su
c2l6ZSgpIC0gMl1dLmFuY2VzdG9yXS5hbmNlc3Rvcik7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IHN0YWNrW2ldOworICAgICAgICAgICAgQmFzaWNCbG9jayomIGxhYmVs
T2ZCbG9jayA9IG1fZGF0YVtibG9ja10ubGFiZWw7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiYg
YW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFT
U0VSVChhbmNlc3Rvck9mQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKG1fZGF0YVthbmNlc3Rv
ck9mQmxvY2tdLmFuY2VzdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9j
ayogbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmxhYmVs
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVsT2ZBbmNlc29yT2ZC
bG9ja10uc2VtaU51bWJlciA8CisgICAgICAgICAgICAgICAgbV9kYXRhW2xhYmVsT2ZCbG9ja10u
c2VtaU51bWJlcikKKyAgICAgICAgICAgICAgICBsYWJlbE9mQmxvY2sgPSBsYWJlbE9mQW5jZXN0
b3JPZkJsb2NrOworICAgICAgICAgICAgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2FuY2VzdG9y
T2ZCbG9ja10uYW5jZXN0b3I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBXZSBrbm93IHRo
YXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9ubHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KLSAgICBtX3Jl
c3VsdHNbMF0uY2xlYXJBbGwoKTsKLSAgICBtX3Jlc3VsdHNbMF0uc2V0KDApOworICAgIEJhc2lj
QmxvY2sqIGltbWVkaWF0ZURvbWluYXRvcihCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2RhdGFbYmxvY2tdLmRvbTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgQmxvY2tE
YXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkKKyAgICAgICAgICAgIDogcGFyZW50KG51bGxwdHIp
CisgICAgICAgICAgICAsIHByZU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgc2VtaU51
bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAg
ICAgICwgbGFiZWwobnVsbHB0cikKKyAgICAgICAgICAgICwgZG9tKG51bGxwdHIpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogcGFyZW50OworICAg
ICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHNlbWlOdW1iZXI7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGFuY2VzdG9yOworICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbDsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBidWNrZXQ7CisgICAgICAgIEJhc2ljQmxvY2sq
IGRvbTsKKyAgICB9OworICAgIAorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIEJsb2NrTWFwPEJs
b2NrRGF0YT4gbV9kYXRhOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9ibG9ja0J5UHJlTnVt
YmVyOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLSAgICAvLyBGaW5kIGFsbCBv
ZiB0aGUgdmFsaWQgYmxvY2tzLgotICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykgewotICAgICAgICBpZiAoIWdyYXBoLmJsb2Nr
KGkpKQordm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKK3sKKyAgICBMZW5n
YXVlclRhcmphbiBsZW5nYXVlclRhcmphbihncmFwaCk7CisgICAgbGVuZ2F1ZXJUYXJqYW4uY29t
cHV0ZSgpOworCisgICAgbV9kYXRhID0gQmxvY2tNYXA8QmxvY2tEYXRhPihncmFwaCk7CisgICAg
CisgICAgLy8gRnJvbSBoZXJlIHdlIHdhbnQgdG8gYnVpbGQgYSBzcGFubmluZyB0cmVlIHdpdGgg
Ym90aCB1cHdhcmQgYW5kIGRvd253YXJkIGxpbmtzIGFuZCB3ZSB3YW50CisgICAgLy8gdG8gZG8g
YSBzZWFyY2ggb3ZlciB0aGlzIHRyZWUgdG8gY29tcHV0ZSBwcmUgYW5kIHBvc3QgbnVtYmVycyB0
aGF0IGNhbiBiZSB1c2VkIGZvciBkb21pbmFuY2UKKyAgICAvLyB0ZXN0cy4KKyAgICAKKyAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
bV9zY3JhdGNoLnNldChpKTsKKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGlkb21CbG9j
ayA9IGxlbmdhdWVyVGFyamFuLm1fZGF0YVtibG9ja10uZG9tOworICAgICAgICBtX2RhdGFbYmxv
Y2tdLmlkb21QYXJlbnQgPSBpZG9tQmxvY2s7CisgICAgICAgIG1fZGF0YVtpZG9tQmxvY2tdLmlk
b21LaWRzLmFwcGVuZChibG9jayk7CiAgICAgfQogICAgIAotICAgIC8vIE1hcmsgYWxsIG5vZGVz
IGFzIGRvbWluYXRlZCBieSBldmVyeXRoaW5nLgotICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJs
b2NrczsgaS0tID4gMTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5i
bG9jayhpKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fcmVzdWx0c1tp
XS5jbGVhckFsbCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0
KG1fc2NyYXRjaCk7Ci0gICAgfQotCi0gICAgLy8gSXRlcmF0aXZlbHkgZWxpbWluYXRlIG5vZGVz
IHRoYXQgYXJlIG5vdCBkb21pbmF0b3IuCi0gICAgYm9vbCBjaGFuZ2VkOwotICAgIGRvIHsKLSAg
ICAgICAgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFs
bCBub24gZW50cnkgYmxvY2tzOiBmb3J3YXJkIHNjYW4uCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBudW1CbG9ja3M7ICsraSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVE
b21pbmF0b3JzKGdyYXBoLCBpKTsKLQotICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgdW5zaWdu
ZWQgbmV4dFByZU51bWJlciA9IDA7CisgICAgdW5zaWduZWQgbmV4dFBvc3ROdW1iZXIgPSAwOwor
ICAgIAorICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3Qu
cHVzaChtX2dyYXBoLmJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIG1fZGF0YVswXS5wcmVOdW1iZXIgPSBuZXh0UHJl
TnVtYmVyKys7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFBy
ZU9yZGVyOgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGkt
LTspCisgICAgICAgICAgICAgICAgd29ya2xpc2gucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3Io
aSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAg
ICAgICAgbV9kYXRhW2l0ZW0uYmxvY2tdLnBvc3ROdW1iZXIgPSBuZXh0UG9zdE51bWJlcisrOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgLy8gUHJ1bmUg
ZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KLSAgICAg
ICAgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7
IGktLSA+IDE7KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgs
IGkpOwotICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0b3IgY2FsY3VsYXRpb246CisgICAgICAg
IC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNh
bWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91
ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChu
b3QKKyAgICAgICAgLy8gICAgTGVuZ2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24u
CisgICAgICAgIAorICAgICAgICBOYWl2ZURvbWluYXRvcnMgbmFpdmVEb21pbmF0b3JzOworICAg
ICAgICBuYWl2ZURvbWluYXRvcnMuY29tcHV0ZShncmFwaCk7CisgICAgICAgIAorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggZnJvbUJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgZnJvbUJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGZyb21CbG9jayA9IGdyYXBo
LmJsb2NrKGZyb21CbG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghZnJvbUJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IHRvQmxv
Y2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyB0b0Jsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiB0b0Jsb2NrID0gZ3JhcGguYmxvY2sodG9CbG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoIXRvQmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERGR19BU1NFUlQoZ3JhcGgs
IG51bGxwdHIsIGRvbWluYXRlcyhmcm9tLCB0bykgPT0gbmFpdmVEb21pbmF0ZXMoZnJvbSwgdG8p
KTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKGdyYXBoLCBudWxscHRyLCBkb21pbmF0ZXMo
ZnJvbSwgdG8pID09IG5haXZlRG9taW5hdG9ycy5kb21pbmF0ZXMoZnJvbSwgdG8pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotYm9vbCBEb21pbmF0b3JzOjpwcnVuZURv
bWluYXRvcnMoR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGlkeCkKK2Jvb2wgRG9taW5hdG9yczo6
bmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CiB7
Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOwotCi0gICAgaWYgKCFi
bG9jayB8fCBibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCi0gICAg
bV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4g
MTspCi0gICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3Nv
cnNbal0tPmluZGV4XSk7Ci0KLSAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkg
aXRzZWxmLgotICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsKLQotICAgIHJldHVybiBtX3Jlc3VsdHNb
aWR4XS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
PSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50KSB7CisgICAgICAg
IGlmIChibG9jayA9PSBmcm9tKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBEb21pbmF0b3JzOjpkdW1wKEdyYXBoJiBncmFwaCwg
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgRG9taW5hdG9yczo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFi
bG9jaykKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAgICAgICBvdXQucHJpbnQoIk5vdCBWYWxp
ZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01B
WCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAi
LCAqYmxvY2ssICI6Iik7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0gMDsg
b3RoZXJJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK290aGVySW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmICghZG9taW5hdGVzKGJsb2NrLT5pbmRleCwgb3RoZXJJbmRleCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRleCk7
Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAKKyAgICAgICAg
b3V0LnByaW50KCJCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9ICIsICptX2RhdGFbYmxv
Y2tJbmRleF0uaWRvbVBhcmVudCwgIiwgaWRvbUtpZHMgPSBbIik7CisgICAgICAgIENvbW1hUHJp
bnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGF0YVtibG9j
a0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7CisgICAgICAgIG91dC5wcmludCgi
XSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0
YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lvbiAxNzI5NDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDQsMTAgKzQ0LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbXB1dGUoR3JhcGgm
KTsKICAgICAKLSAgICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5kZXgg
dG8pIGNvbnN0CisgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9tSW5kZXgsIEJsb2Nr
SW5kZXggdG9JbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwot
ICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIEJsb2NrRGF0
YSYgZnJvbSA9IG1fZGF0YVtmcm9tSW5kZXhdOworICAgICAgICBCbG9ja0RhdGEmIHRvID0gbV9k
YXRhW3RvSW5kZXhdOworICAgICAgICByZXR1cm4gdG8ucHJlTnVtYmVyID49IGZyb20ucHJlTnVt
YmVyICYmIHRvLnBvc3ROdW1iZXIgPD0gZnJvbS5wb3N0TnVtYmVyOwogICAgIH0KICAgICAKICAg
ICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QK
QEAgLTU1LDEzICs1NywyNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBkb21pbmF0ZXMoZnJv
bS0+aW5kZXgsIHRvLT5pbmRleCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZHVtcChHcmFwaCYs
IFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgcHJ1bmVEb21pbmF0b3JzKEdyYXBoJiwgQmxvY2tJ
bmRleCk7CisgICAgYm9vbCBuYWl2ZURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0bykgY29uc3Q7CiAgICAgCi0gICAgVmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0
czsgLy8gRm9yIGVhY2ggYmxvY2ssIHRoZSBiaXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5h
dGUgaXQuCi0gICAgRmFzdEJpdFZlY3RvciBtX3NjcmF0Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZl
Y3RvciB3aXRoIGJpdCBmb3IgZWFjaCBibG9jay4gV2UgcmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3
L2RlbGV0ZXMuCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisg
ICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikKKyAgICAgICAgICAgICwgcHJlTnVtYmVy
KFVJTlRfTUFYKQorICAgICAgICAgICAgLCBwb3N0TnVtYmVyKFVJTlRfTUFYKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gaWRvbUtp
ZHM7CisgICAgICAgIEJhc2ljQmxvY2sqIGlkb21QYXJlbnQ7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2lnbmVkIHBvc3ROdW1iZXI7CisgICAgfTsK
KyAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQ2xv
YmJlclNldC5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1
ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCkBAIC02MzUsNzMgKzYzNiwzMCBAQCB2b2lkIEdy
YXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQogCi0vLyBVdGlsaXRp
ZXMgZm9yIHByZS0gYW5kIHBvc3Qtb3JkZXIgdHJhdmVyc2Fscy4KLW5hbWVzcGFjZSB7Ci0KLWlu
bGluZSB2b2lkIGFkZEZvclByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVj
dG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxv
Y2sqIGJsb2NrKQotewotICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgcmVzdWx0LmFwcGVuZChibG9jayk7Ci0gICAgd29ya2xpc3QuYXBw
ZW5kKGJsb2NrKTsKLSAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwotfQotCi1lbnVtIFBvc3RP
cmRlclRhc2tLaW5kIHsKLSAgICBQb3N0T3JkZXJGaXJzdFZpc2l0LAotICAgIFBvc3RPcmRlckFk
ZFRvUmVzdWx0Ci19OwotCi1zdHJ1Y3QgUG9zdE9yZGVyVGFzayB7Ci0gICAgUG9zdE9yZGVyVGFz
ayhCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIFBvc3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQ
b3N0T3JkZXJGaXJzdFZpc2l0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgICwg
bV9raW5kKGtpbmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OwotICAgIFBvc3RPcmRlclRhc2tLaW5kIG1fa2luZDsKLX07Ci0KLWlubGluZSB2b2lkIGFkZEZv
clBvc3RPcmRlcihWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9y
JiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmlu
ZGV4KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3Jk
ZXJUYXNrKGJsb2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0KSk7Ci0gICAgc2Vlbi5zZXQoYmxvY2st
PmluZGV4KTsKLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGg6Omdl
dEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewotICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgIEJpdFZlY3RvciBzZWVuOwotICAg
IGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAgICB3
aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3
b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3
b3JrbGlzdC5wb3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAg
ICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNz
b3IoaSkpOworICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yKGkpKTsK
ICAgICB9CiB9CiAKIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmts
aXN0OwotICAgIEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwg
c2VlbiwgYmxvY2soMCkpOwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFBvc3RPcmRlclRhc2sgdGFzayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgIHN3
aXRjaCAodGFzay5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0Ogot
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQ
b3N0T3JkZXJBZGRUb1Jlc3VsdCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFz
ay5tX2Jsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgYWRkRm9y
UG9zdE9yZGVyKHdvcmtsaXN0LCBzZWVuLCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7Cisg
ICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJs
b2NrKDApKTsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgp
KSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVy
OgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisg
ICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3IoaSkpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgIGNhc2UgUG9z
dE9yZGVyOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Js
b2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAg
ICAKLSAgICAgICAgQml0VmVjdG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOwor
ICAgICAgICBCbG9ja1NldCBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKICAgICAg
ICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwpAQCAtNjMsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMg
YXQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KICAgICAgICAgICAgIGlmIChtX29y
aWdpblRoYXRIYWRGaXJlLmlzU2V0KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBi
bG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+
aW5kZXgpOworICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBv
aW50cy5hZGQoYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhh
dE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworCisgICAgICAgICAg
ICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmNvbnRhaW5zKGJsb2NrKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
aW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdOYWl2ZURvbWluYXRvcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworTmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQor
eworfQorCitOYWl2ZURvbWluYXRvcnM6On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lk
IE5haXZlRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBp
bXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3Jh
cGguYmxvY2soMCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVk
IG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0
b3JhZ2UgZm9yIHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tz
ID4gbV9yZXN1bHRzLnNpemUoKSkgeworICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3Mp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAg
ICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNp
emUobnVtQmxvY2tzKTsKKyAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJs
b2NrIGlzIG9ubHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJB
bGwoKTsKKyAgICBtX3Jlc3VsdHNbMF0uc2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhl
IHZhbGlkIGJsb2Nrcy4KKyAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1CbG9ja3M7IGktLTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0K
KyAgICAKKyAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlm
ICghZ3JhcGguYmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8v
IEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAg
IGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBz
Y2FuLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAg
ICAgaWYgKCFjaGFuZ2VkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUg
ZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAg
ICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7
IGktLSA+IDE7KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgs
IGkpOworICAgIH0gd2hpbGUgKGNoYW5nZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6
cHJ1bmVEb21pbmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBi
bG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNo
LnNldChtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAg
ICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmlu
ZGV4XSk7CisKKyAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgor
ICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsKKworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRB
bmRDaGVjayhtX3NjcmF0Y2gpOworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFw
aCYgZ3JhcGgsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG91dC5wcmludCgiICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IG90aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsr
b3RoZXJJbmRleCkgeworICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBv
dGhlckluZGV4KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICMiLCBvdGhlckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxu
Iik7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2
ZURvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05haXZlRG9taW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHTmFpdmVEb21pbmF0b3JzX2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMg
Y2xhc3MgaXMgb25seSB1c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1w
bGVtZW50YXRpb24uCisKK2NsYXNzIE5haXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFp
dmVEb21pbmF0b3JzKCk7CisgICAgfk5haXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYpOworICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJv
bSwgQmxvY2tJbmRleCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkp
OworICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9j
a0luZGV4KTsKKyAgICAKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBG
b3IgZWFjaCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4K
KyAgICBGYXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9yIHdp
dGggYml0IGZvciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVsZXRl
cy4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHTmFpdmVEb21pbmF0b3JzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237240</attachid>
            <date>2014-08-27 12:48:45 -0700</date>
            <delta_ts>2014-08-27 14:26:42 -0700</delta_ts>
            <desc>debugging</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65650</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDYgKzEyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKICAgICBkZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisgICAgZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCiAgICAg
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTE3NSw2ICsxNzYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAorICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1dvcmtsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiIC8+CkBAIC00MjEs
NiArNDIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWF5RXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2
ZURvbWluYXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNw
cCIgLz4KQEAgLTk5Myw2ICs5OTUsMTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmxvY2tNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja01hcElubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja1dvcmtsaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxv
Y2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJl
Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkBAIC0xMDU2LDYgKzEwNjIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYg
KzQ5OCwxMyBAQAogCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDEwMTgx
NDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1w
UmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMzE0MTExODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi87
IH07CiAJCTBGQzMxNDE1MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovOyB9OworCQkwRkMzQ0NGQzE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZE
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAv
KiBERkdCbG9ja01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y3
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0Y4MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNw
cCAqLzsgfTsKKwkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y5
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJB
IC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21p
bmF0b3JzLmNwcCAqLzsgfTsKKwkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkRFMTdD
RDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMxN0NEODc3ODAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4
Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAxN0NEODc4RjAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
QEAgLTI0MjEsNiArMjQyOCwxMyBAQAogCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTExODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZW1wUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tNYXAuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNjE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrTWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNzE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmxvY2tTZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9j
a1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYWl2ZURvbWlu
YXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmFpdmVEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4
MTksNiArNDgzMywxMSBAQAogCQkJCUE3MEIwODMxMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5h
cnlTd2l0Y2guaCAqLywKIAkJCQlBN0Q4OUNFNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
bG9ja0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcC5oICovLAorCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCAqLywKKwkJCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tTZXQuaCAqLywKKwkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3Jr
bGlzdC5jcHAgKi8sCisJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTQ5MzAsNiArNDk0OSw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFD
NzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCisJCQkJMEZDM0NDRkIxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUxRTE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC01ODQyLDYgKzU4NjMsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVD
QjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5
MTcsNiArNTkzOSw3IEBACiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGQzE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzMTcsNiArNjM0MCw3IEBACiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyOSw2ICs2MzUzLDcgQEAKIAkJCQkw
RjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJD
RTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYw
MEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mzc0LDYgKzYzOTksNyBAQAog
CQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFF
OTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTcsNiArNzMyMyw3IEBACiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTA1QUJENTE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Nyw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDM0NDRkYx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5h
bHlzaXMuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChtX3ZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAv
LyBJdCdzIGJlc3QgdG8gcnVuIGRlcGVuZGVudCBhbmFseXNlcyBmcm9tIHRoaXMgbWV0aG9kLgor
ICAgICAgICBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmNvbXB1dGVEZXBlbmRlbmNpZXMoZ3JhcGgp
OwogICAgICAgICAvLyBTZXQgdG8gdHJ1ZSBlYXJseSwgc2luY2UgdGhlIGFuYWx5c2lzIG1heSBj
aG9vc2UgdG8gY2FsbCBpdHMgb3duIG1ldGhvZHMgaW4KICAgICAgICAgLy8gY29tcHV0ZSgpIGFu
ZCBpdCBtYXkgd2FudCB0byBBU1NFUlQoKSB2YWxpZGl0eSBpbiB0aG9zZSBtZXRob2RzLgogICAg
ICAgICBtX3ZhbGlkID0gdHJ1ZTsKQEAgLTYxLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CiAKKyAgICAvLyBPdmVy
cmlkZSB0aGlzIHRvIGNvbXB1dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCisgICAgLy8g
TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dAorICAgIC8vIGl0IG1ha2VzIGRlYnVn
IGR1bXBzIGluIGNhc2VzIG9mIGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBh
bmFseXNpcyB3b3VsZG4ndCB5ZXQKKyAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgor
ICAgIHZvaWQgY29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYpIHsgfQorCiBwcml2YXRlOgogICAg
IGJvb2wgbV92YWxpZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja01hcF9oCisjZGVm
aW5lIERGR0Jsb2NrTWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tNYXAgeworcHVibGlj
OgorICAgIEJsb2NrTWFwKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrTWFwKEdyYXBo
Jik7CisgICAgCisgICAgQmxvY2tJbmRleCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci5zaXplKCk7CisgICAgfQorICAgIAorICAgIFQmIGF0SW5kZXgoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5k
ZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsK
KyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1f
dmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja01hcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwSW5saW5lc19oCisjZGVmaW5lIERG
R0Jsb2NrTWFwSW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQmxvY2tNYXA8VD46OkJsb2Nr
TWFwKEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX3ZlY3Rvci5yZXNpemUoZ3JhcGgubnVtQmxvY2tz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja1NldF9oCisjZGVmaW5lIERGR0Jsb2NrU2V0X2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJsb2NrU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1Nl
dCgpIHsgfQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBibG9jayB3YXMgYWRkZWQs
IGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBhZGQoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChibG9jay0+aW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmdldChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1Nl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmts
aXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQmxvY2tXb3JrbGlzdDo6QmxvY2tXb3JrbGlzdCgpCit7Cit9CisKK0Jsb2NrV29y
a2xpc3Q6On5CbG9ja1dvcmtsaXN0KCkKK3sKK30KKworYm9vbCBCbG9ja1dvcmtsaXN0OjpwdXNo
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmICghbV9zZWVuLmFkZChibG9jaykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChibG9jayk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrV29ya2xpc3Q6OnBvcCgpCit7Cisg
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOworfQorCitQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCkKK3sKK30KKworUG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdDo6flBvc3RPcmRlckJsb2NrV29ya2xpc3QoKQoreworfQorCitib29sIFBvc3RPcmRlckJs
b2NrV29ya2xpc3Q6OnB1c2hQcmUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIG1f
d29ya2xpc3QucHVzaChibG9jaywgUHJlT3JkZXIpOworfQorCit2b2lkIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Q6OnB1c2hQb3N0KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29ya2xpc3Qu
Zm9yY2VQdXNoKGJsb2NrLCBQb3N0T3JkZXIpOworfQorCitCbG9ja1dpdGhPcmRlciBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIEJsb2NrV2l0aDxWaXNpdE9yZGVyPiByZXN1
bHQgPSBtX3dvcmtsaXN0LnBvcCgpOworICAgIHJldHVybiBCbG9ja1dpdGhPcmRlcihyZXN1bHQu
YmxvY2ssIHJlc3VsdC5kYXRhKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIERGR0Jsb2NrV29ya2xpc3RfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK2NsYXNzIEJsb2NrV29y
a2xpc3QgeworcHVibGljOgorICAgIEJsb2NrV29ya2xpc3QoKTsKKyAgICB+QmxvY2tXb3JrbGlz
dCgpOworICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Jsb2NrKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgYmxvY2sgYmVmb3JlLgorICAgIAorICAgIGJvb2wg
bm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBwb3AoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IG1fc3RhY2s7Cit9OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJsb2NrV2l0aCB7CisgICAgQmxvY2tXaXRo
KCkKKyAgICAgICAgOiBibG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tXaXRoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgICAgICA6IGJsb2Nr
KGJsb2NrKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5
cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9w
ZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jazsKKyAgICBUIGRhdGE7Cit9Owor
CisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29t
ZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9y
Y2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVl
biBzZWVuLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0KCkgeyB9CisgICAgCisgICAg
dm9pZCBmb3JjZVB1c2goY29uc3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAgICAg
IG1fc3RhY2suYXBwZW5kKGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3JjZVB1c2go
QmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAgeworICAgICAgICBmb3JjZVB1
c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHVz
aChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NlZW4u
YWRkKGVudHJ5LmJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGZvcmNlUHVzaChlbnRyeSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIHB1c2goQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gcHVzaChCbG9ja1dpdGg8VD4oYmxvY2ssIGRhdGEpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YWNrLmlzRW1w
dHkoKTsgfQorICAgIAorICAgIEJsb2NrV2l0aDxUPiBwb3AoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEJsb2NrV2l0aDxUPigpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAgIFZlY3RvcjxCbG9ja1dpdGg8VD4+IG1f
c3RhY2s7Cit9OworCitlbnVtIFZpc2l0T3JkZXIgeworICAgIFByZU9yZGVyLAorICAgIFBvc3RP
cmRlcgorfTsKKworc3RydWN0IEJsb2NrV2l0aE9yZGVyIHsKKyAgICBCbG9ja1dpdGhPcmRlcigp
CisgICAgICAgIDogYmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBvcmRlcihQcmVPcmRlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aE9yZGVyKEJhc2ljQmxvY2sqIGJsb2NrLCBW
aXNpdE9yZGVyIG9yZGVyKQorICAgICAgICA6IGJsb2NrKGJsb2NrKQorICAgICAgICAsIG9yZGVy
KG9yZGVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiB2b2lkKiAoQmxvY2tXaXRo
T3JkZXI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyByZWludGVycHJl
dF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAgfQorCisgICAg
QmFzaWNCbG9jayogYmxvY2s7CisgICAgVmlzaXRPcmRlciBvcmRlcjsKK307CisKKy8vIEJsb2Nr
IHdvcmtsaXN0IHN1aXRhYmxlIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4KK2NsYXNzIFBvc3RP
cmRlckJsb2NrV29ya2xpc3QgeworcHVibGljOgorICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qo
KTsKKyAgICB+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCgpOworICAgIAorICAgIGJvb2wgcHVzaFBy
ZShCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBwdXNoUG9zdChCYXNpY0Jsb2NrKik7CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVyID0gUHJlT3Jk
ZXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9yZGVyKSB7CisgICAgICAgIGNhc2UgUHJlT3Jk
ZXI6CisgICAgICAgICAgICByZXR1cm4gcHVzaFByZShibG9jayk7CisgICAgICAgIGNhc2UgUG9z
dE9yZGVyOgorICAgICAgICAgICAgcHVzaFBvc3QoYmxvY2spOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHB1c2goY29uc3QgQmxvY2tX
aXRoT3JkZXImIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaChkYXRhLmJsb2NrLCBk
YXRhLm9yZGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ya2xpc3Qubm90RW1wdHkoKTsgfQorICAgIEJsb2NrV2l0aE9yZGVyIHBvcCgpOwor
Citwcml2YXRlOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDxWaXNpdE9yZGVyPiBtX3dvcmts
aXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdB
YnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRl
ICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCkBAIC0zNjQsNiArMzY1LDcgQEAgY2xhc3MgR2xvYmFs
Q1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEdsb2JhbENTRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImdsb2JhbCBjb21tb24gc3ViZXhw
cmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9pbXB1cmVEYXRhTWFwKGdyYXBoKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC0zNzcsMTMgKzM3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIobV9wcmVPcmRlcik7CiAgICAg
ICAgIAotICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXplKG1fZ3JhcGgubnVtQmxvY2tzKCkp
OwotICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGF0IGdldHMgY2xvYmJl
cmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0aGUgcHJlT3JkZXIgbGlzdAogICAg
ICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9wcmVPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3ByZU9y
ZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Js
b2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFw
W21fYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFw
aCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAg
ICB9CkBAIC00MDcsNyArNDA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9wdXJlVmFs
dWVzLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ltcHVy
ZURhdGFNYXAuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBpID0gbV9p
bXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQyMyw3ICs0MjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVPcmRl
ci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgbV9ibG9jayA9IG1fcHJlT3JkZXJbaV07Ci0g
ICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4
XTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9ja107
CiAgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNTYyLDEyICs1NjIsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgICBTZWFyY2hpbmcgaW4gYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAgICAg
IEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5kZXhdOwor
ICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2Nr
XTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgZG9taW5h
dGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBzZWUgdGhpbmdzIGluIG91ciBvd24gYmxvY2sg
aWYKICAgICAgICAgICAgIC8vIHRoZXkgY2FtZSAqYWZ0ZXIqIG91ciBwb3NpdGlvbiBpbiB0aGUg
YmxvY2suIENsZWFybHksIHdoaWxlIG91ciBibG9jayBkb21pbmF0ZXMKICAgICAgICAgICAgIC8v
IGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUgYmxvY2sgYWZ0ZXIgdXMgZG9uJ3QgZG9taW5hdGUg
dXMuCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2Nr
LCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2RvbWluYXRvcnMuc3RyaWN0bHlEb21pbmF0ZXMoYmxvY2ssIG1fYmxvY2spKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwpAQCAtNjEyLDcgKzYxMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHJlZHVjdGlvbiBpbiBjb21waWxlIHRpbWUgd291bGQg
d2FycmFudCB0aGUgaW5jcmVhc2UgaW4gY29tcGxleGl0eSwgdGhvdWdoLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODc2CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKLSAgICAgICAgICAgIG1faW1wdXJlRGF0
YU1hcFtibG9jay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsK
KyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9ja10uYXZhaWxhYmxlQXRUYWlsLmFkZChs
b2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5h
ZGQobG9jYXRpb24sIG1hdGNoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtYXRjaDsKQEAg
LTY1NCw3ICs2NTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX3ByZU9y
ZGVyOwogCiAgICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsKLSAgICBWZWN0b3I8SW1wdXJl
QmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CisgICAgQmxvY2tNYXA8SW1wdXJlQmxvY2tEYXRh
PiBtX2ltcHVyZURhdGFNYXA7CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBO
b2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxNiBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNs
dWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdOYWl2ZURvbWluYXRvcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IHRydWU7CisKIERvbWluYXRvcnM6OkRvbWluYXRvcnMoKQogewogfQpAQCAtNDEsOTEgKzQ2LDI3
OSBAQCBEb21pbmF0b3JzOjp+RG9taW5hdG9ycygpCiB7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6
Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUg
ZG9taW5hdG9yIHNvbHZlci4KK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBMZW5n
YXVlciBhbmQgVGFyamFuJ3MgIkEgRmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9y
cyBpbiBhIEZsb3dncmFwaCIKKy8vIChUT1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhlICJzaW1wbGUi
IGltcGxlbWVudGF0aW9uIG9mIExJTksgYW5kIEVWQUwuIFRoZSBmdWxsIHBhcGVyIGlzIGxpbmtl
ZAorLy8gYmVsb3c7IHRoaXMgY29kZSBhdHRlbXB0cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxn
b3JpdGhtIGFzIGl0IGlzIHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluCisvLyBwYXJ0aWN1bGFy
IHNlY3Rpb25zIDMgYW5kIDQuCisvLyBodHRwczovL3d3dy5jcy5wcmluY2V0b24uZWR1L2NvdXJz
ZXMvYXJjaGl2ZS9mYWxsMDMvY3M1MjgvaGFuZG91dHMvYSUyMGZhc3QlMjBhbGdvcml0aG0lMjBm
b3IlMjBmaW5kaW5nLnBkZgorCitjbGFzcyBMZW5nYXVlclRhcmphbiB7CitwdWJsaWM6CisgICAg
TGVuZ2F1ZXJUYXJqYW4oR3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisg
ICAgICAgICwgbV9kYXRhKGdyYXBoKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgbV9kYXRhW2Jsb2NrXS5sYWJlbCA9IGJsb2NrOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcHV0ZSgpCisgICAgeworICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51
bWJlcmluZygpOyAvLyBTdGVwIDEuCisgICAgICAgIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZElt
cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygpOyAvLyBTdGVwcyAyIGFuZCAzLgorICAgICAgICBj
b21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXAgNC4KKyAgICB9Cisg
ICAgCisgICAgQmFzaWNCbG9jayogaW1tZWRpYXRlRG9taW5hdG9yKEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YVtibG9ja10uZG9tOworICAgIH0KKworcHJp
dmF0ZToKKyAgICB2b2lkIGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCkKKyAgICB7Cisg
ICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LnB1c2gobV9n
cmFwaC5ibG9jaygwKSk7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxv
Y2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgbV9kYXRhW2Jsb2NrXS5zZW1pTnVt
YmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsKKyAgICAgICAgICAgIG1fYmxvY2tCeVBy
ZU51bWJlci5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxv
Y2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXdvcmtsaXN0LnB1c2goc3VjY2Vzc29yQmxvY2spKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBtX2RhdGFbc3VjY2Vzc29yQmxvY2tdLnBhcmVudCA9
IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIAotICAgIEFTU0VS
VChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CisgICAgdm9pZCBjb21w
dXRlU2VtaURvbWluYXRvcnNBbmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVt
YmVyLnNpemUoKTsgY3VycmVudFByZU51bWJlci0tID4gMTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAg
ICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBTdGVwIDI6CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yQmxvY2sgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogaW50ZXJtZWRpYXRlQmxvY2sgPSBldmFsKHByZWRlY2Vzc29yQmxvY2sp
OworICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAg
ICAgICAgICAgICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10uc2VtaU51bWJlciwgYmxv
Y2tEYXRhLnNlbWlOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5zaWduZWQg
YnVja2V0UHJlTnVtYmVyID0gYmxvY2tEYXRhLnNlbWlOdW1iZXI7CisgICAgICAgICAgICBBU1NF
UlQoYnVja2V0UHJlTnVtYmVyIDw9IGN1cnJlbnRQcmVOdW1iZXIpOworICAgICAgICAgICAgbV9k
YXRhW21fYmxvY2tCeVByZU51bWJlcltidWNrZXRQcmVOdW1iZXJdXS5idWNrZXQuYXBwZW5kKGJs
b2NrKTsKKyAgICAgICAgICAgIGxpbmsoYmxvY2tEYXRhLnBhcmVudCwgYmxvY2spOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBTdGVwIDM6CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHNlbWlEb21pbmVlIDogbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldCkgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHBvc3NpYmxlRG9taW5hdG9yID0gZXZhbChzZW1pRG9t
aW5lZSk7CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBzZW1pRG9taW5lZURhdGEgPSBtX2Rh
dGFbc2VtaURvbWluZWVdOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgcG9zc2libGVEb21p
bmF0b3JEYXRhID0gbV9kYXRhW3Bvc3NpYmxlRG9taW5hdG9yXTsKKyAgICAgICAgICAgICAgICBp
ZiAocG9zc2libGVEb21pbmF0b3JEYXRhLnNlbWlOdW1iZXIgPCBzZW1pRG9taW5lZURhdGEuc2Vt
aU51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IHBvc3Np
YmxlRG9taW5hdG9yOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c2VtaURvbWluZWVEYXRhLmRvbSA9IGJsb2NrRGF0YS5wYXJlbnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVE
b21pbmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJl
ciA9IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1
cnJlbnRQcmVOdW1iZXIpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9j
a0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgQmxvY2tEYXRhJiBi
bG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
YmxvY2tEYXRhLmRvbSAhPSBtX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJd
KQorICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0u
ZG9tOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbGluayhCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKKyAgICB7CisgICAgICAgIG1fZGF0YVtmcm9tXS5hbmNlc3Rv
ciA9IHRvOworICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1C
bG9ja3MoKTsKKyAgICBCYXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJu
IGJsb2NrOworICAgICAgICAKKyAgICAgICAgY29tcHJlc3MoYmxvY2spOworICAgICAgICByZXR1
cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICB9CiAgICAgCi0gICAgLy8gQWxsb2NhdGUgc3Rv
cmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXguIAotICAgIGlmIChudW1CbG9ja3Mg
PiBtX3Jlc3VsdHMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKLSAgICAgICAgICAg
IG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxvY2tzKTsKLSAgICAgICAgbV9zY3JhdGNoLnJlc2l6
ZShudW1CbG9ja3MpOworICAgIHZvaWQgY29tcHJlc3MoQmFzaWNCbG9jayogaW5pdGlhbEJsb2Nr
KQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVu
Y3Rpb24sIGJ1dCB3ZSBkb24ndCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAg
ICAgIC8vIHdhbnQgdG8gYmxvdyB0aGUgc3RhY2suIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxs
IGNhbGwgY29tcHJlc3MoKSByZWN1cnNpdmVseSBvbiB0aGUKKyAgICAgICAgLy8gYW5jZXN0b3Ig
b2YgYW55dGhpbmcgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFNvLCB3ZSBwb3B1bGF0ZSBvdXIgd29y
a2xpc3Qgd2l0aCB0aGUKKyAgICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFs
QmxvY2suIFRoZW4gd2UgcHJvY2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jawor
ICAgICAgICAvLyB0aGF0IGlzIGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAg
ICAgCisgICAgICAgIEJhc2ljQmxvY2sqIGFuY2VzdG9yID0gbV9kYXRhW2luaXRpYWxCbG9ja10u
YW5jZXN0b3I7CisgICAgICAgIEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAgIGlmICghbV9kYXRh
W2FuY2VzdG9yXS5hbmNlc3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHN0YWNrOworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrID0gaW5pdGlhbEJsb2NrOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFu
Y2VzdG9yKQorICAgICAgICAgICAgc3RhY2suYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCBibG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRo
YXQgaGFzIGFuIGFuY2VzdG9yLiBUaGUgbGFzdCB0d28KKyAgICAgICAgLy8gZWxlbWVudHMgaW4g
dGhlIHN0YWNrIHdvbid0IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eS4KKyAgICAgICAgQVNTRVJUKHN0
YWNrLnNpemUoKSA+PSAyKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6
ZSgpIC0gMV1dLmFuY2VzdG9yKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNr
W3N0YWNrLnNpemUoKSAtIDJdXS5hbmNlc3Rvcl0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhY2suc2l6ZSgpIC0gMjsgaS0tOykgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBzdGFja1tpXTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
JiBsYWJlbE9mQmxvY2sgPSBtX2RhdGFbYmxvY2tdLmxhYmVsOworICAgICAgICAgICAgQmFzaWNC
bG9jayomIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3I7CisgICAgICAg
ICAgICBBU1NFUlQoYW5jZXN0b3JPZkJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2RhdGFb
YW5jZXN0b3JPZkJsb2NrXS5hbmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGxhYmVsT2ZBbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2Nr
XS5sYWJlbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZGF0YVtsYWJlbE9mQW5j
ZXN0b3JPZkJsb2NrXS5zZW1pTnVtYmVyIDwKKyAgICAgICAgICAgICAgICBtX2RhdGFbbGFiZWxP
ZkJsb2NrXS5zZW1pTnVtYmVyKQorICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVs
T2ZBbmNlc3Rvck9mQmxvY2s7CisgICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFb
YW5jZXN0b3JPZkJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFdl
IGtub3cgdGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgot
ICAgIG1fcmVzdWx0c1swXS5jbGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7Cisg
ICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6
IHBhcmVudChudWxscHRyKQorICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAg
ICAgICAgICAsIHNlbWlOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIGFuY2VzdG9yKG51
bGxwdHIpCisgICAgICAgICAgICAsIGxhYmVsKG51bGxwdHIpCisgICAgICAgICAgICAsIGRvbShu
dWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxv
Y2sqIHBhcmVudDsKKyAgICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICB1bnNpZ25l
ZCBzZW1pTnVtYmVyOworICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvcjsKKyAgICAgICAgQmFz
aWNCbG9jayogbGFiZWw7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYnVja2V0OworICAg
ICAgICBCYXNpY0Jsb2NrKiBkb207CisgICAgfTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsK
KyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IG1fYmxvY2tCeVByZU51bWJlcjsKK307CiAKLSAgICAvLyBGaW5kIGFsbCBvZiB0aGUgdmFsaWQg
YmxvY2tzLgotICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUJsb2NrczsgaS0tOykgewotICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpKQorfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCit7CisgICAgTGVuZ2F1ZXJUYXJqYW4gbGVuZ2F1ZXJUYXJqYW4oZ3JhcGgpOworICAgIGxl
bmdhdWVyVGFyamFuLmNvbXB1dGUoKTsKKworICAgIG1fZGF0YSA9IEJsb2NrTWFwPEJsb2NrRGF0
YT4oZ3JhcGgpOworICAgIAorICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bh
bm5pbmcgdHJlZSB3aXRoIGJvdGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2Fu
dAorICAgIC8vIHRvIGRvIGEgc2VhcmNoIG92ZXIgdGhpcyB0cmVlIHRvIGNvbXB1dGUgcHJlIGFu
ZCBwb3N0IG51bWJlcnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZG9taW5hbmNlCisgICAgLy8gdGVz
dHMuCisgICAgCisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CisgICAgICAgIAorICAgICAgICBCYXNp
Y0Jsb2NrKiBpZG9tQmxvY2sgPSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVEb21pbmF0b3IoYmxv
Y2spOworICAgICAgICBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQgPSBpZG9tQmxvY2s7CisgICAg
ICAgIGlmIChpZG9tQmxvY2spCisgICAgICAgICAgICBtX2RhdGFbaWRvbUJsb2NrXS5pZG9tS2lk
cy5hcHBlbmQoYmxvY2spOwogICAgIH0KICAgICAKLSAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBk
b21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7
IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkgfHwgZ3JhcGguYmxvY2so
aSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0uY2xl
YXJBbGwoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnNldChtX3Nj
cmF0Y2gpOwotICAgIH0KLQotICAgIC8vIEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0
IGFyZSBub3QgZG9taW5hdG9yLgotICAgIGJvb2wgY2hhbmdlZDsKLSAgICBkbyB7Ci0gICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9u
IGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgbnVtQmxvY2tzOyArK2kpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9taW5h
dG9ycyhncmFwaCwgaSk7Ci0KLSAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgIHVuc2lnbmVkIG5l
eHRQcmVOdW1iZXIgPSAwOworICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICAK
KyAgICAvLyBQbGFpbiBzdGFjay1iYXNlZCB3b3JrbGlzdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50
ZWVkIHRvIHNlZSBlYWNoIGJsb2NrIGV4YWN0bHkgb25jZSBhbnl3YXkuCisgICAgVmVjdG9yPEJs
b2NrV2l0aE9yZGVyPiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3Jk
ZXIoZ3JhcGguYmxvY2soMCksIFByZU9yZGVyKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0
KCk7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVy
OgorICAgICAgICAgICAgbV9kYXRhW2l0ZW0uYmxvY2tdLnByZU51bWJlciA9IG5leHRQcmVOdW1i
ZXIrKzsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChCbG9ja1dpdGhPcmRlcihpdGVtLmJs
b2NrLCBQb3N0T3JkZXIpKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayoga2lkIDogbV9k
YXRhW2l0ZW0uYmxvY2tdLmlkb21LaWRzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChCbG9ja1dpdGhPcmRlcihraWQsIFByZU9yZGVyKSk7CiAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBiYWNr
d2FyZCBzY2FuLgotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5l
RG9taW5hdG9ycyhncmFwaCwgaSk7Ci0gICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIGNh
c2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgbV9kYXRhW2l0ZW0uYmxvY2tdLnBvc3ROdW1iZXIg
PSBuZXh0UG9zdE51bWJlcisrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sg
b3VyIGRvbWluYXRvciBjYWxjdWxhdGlvbjoKKyAgICAgICAgLy8gMSkgQ2hlY2sgdGhhdCBvdXIg
cmFuZ2UtYmFzZWQgYW5jZXN0cnkgdGVzdCBpcyB0aGUgc2FtZSBhcyBhIG5haXZlIGFuY2VzdHJ5
IHRlc3QuCisgICAgICAgIC8vIDIpIENoZWNrIHRoYXQgb3VyIG5vdGlvbiBvZiB3aG8gZG9taW5h
dGVzIHdob20gaXMgaWRlbnRpY2FsIHRvIGEgbmFpdmUgKG5vdAorICAgICAgICAvLyAgICBMZW5n
YXVlci1UYXJqYW4pIGRvbWluYXRvciBjYWxjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgIE5h
aXZlRG9taW5hdG9ycyBuYWl2ZURvbWluYXRvcnM7CisgICAgICAgIG5haXZlRG9taW5hdG9ycy5j
b21wdXRlKGdyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCJPdXIgZG9taW5hdG9yczpcbiIpOworICAgICAgICAgICAgZGF0YUxvZygq
dGhpcyk7CisgICAgICAgICAgICBkYXRhTG9nKCJOYWl2ZSBkb21pbmF0b3JzOlxuIik7CisgICAg
ICAgICAgICBuYWl2ZURvbWluYXRvcnMuZHVtcChncmFwaCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGZyb21CbG9ja0luZGV4
ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBmcm9tQmxvY2sgPSBncmFwaC5ibG9jayhmcm9tQmxvY2tJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKEJs
b2NrSW5kZXggdG9CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmxvY2sgPSBncmFwaC5ibG9jayh0
b0Jsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9C
bG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKGdyYXBoLCBu
dWxscHRyLCBkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSA9PSBuYWl2ZURvbWluYXRlcyhm
cm9tQmxvY2ssIHRvQmxvY2spKTsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKGdyYXBoLCBu
dWxscHRyLCBkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSA9PSBuYWl2ZURvbWluYXRvcnMu
ZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQogfQogCi1ib29sIERvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyhHcmFwaCYgZ3Jh
cGgsIEJsb2NrSW5kZXggaWR4KQorYm9vbCBEb21pbmF0b3JzOjpuYWl2ZURvbWluYXRlcyhCYXNp
Y0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKIHsKLSAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGdyYXBoLmJsb2NrKGlkeCk7Ci0KLSAgICBpZiAoIWJsb2NrIHx8IGJsb2NrLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGaW5k
IHRoZSBpbnRlcnNlY3Rpb24gb2YgZG9tKHByZWRzKS4KLSAgICBtX3NjcmF0Y2guc2V0KG1fcmVz
dWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBdLT5pbmRleF0pOwotICAgIGZvciAodW5zaWduZWQg
aiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAxOykKLSAgICAgICAgbV9zY3Jh
dGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1tqXS0+aW5kZXhdKTsKLQot
ICAgIC8vIFRoZSBibG9jayBpcyBhbHNvIGRvbWluYXRlZCBieSBpdHNlbGYuCi0gICAgbV9zY3Jh
dGNoLnNldChpZHgpOwotCi0gICAgcmV0dXJuIG1fcmVzdWx0c1tpZHhdLnNldEFuZENoZWNrKG1f
c2NyYXRjaCk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IHRvOyBibG9jazsgYmxvY2sg
PSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsKKyAgICAgICAgaWYgKGJsb2NrID09IGZyb20p
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIERvbWluYXRvcnM6OmR1bXAoR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0KSBj
b25zdAordm9pZCBEb21pbmF0b3JzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0g
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQorICAgIGlmICghaXNW
YWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxpZC5cbiIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBp
ZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01BWCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAiLCAqYmxvY2ssICI6Iik7
Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0gMDsgb3RoZXJJbmRleCA8IGdy
YXBoLm51bUJsb2NrcygpOyArK290aGVySW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghZG9taW5h
dGVzKGJsb2NrLT5pbmRleCwgb3RoZXJJbmRleCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRleCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAKKyAgICAgICAgb3V0LnByaW50KCIgICAg
QmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVyRHVtcChtX2RhdGFbYmxv
Y2tJbmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOworICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RhdGFbYmxv
Y2tJbmRleF0uaWRvbUtpZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsICptX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOworICAgICAgICBvdXQucHJpbnQo
Il0sIHByZS9wb3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciwgIi8iLCBtX2Rh
dGFbYmxvY2tJbmRleF0ucG9zdE51bWJlciwgIlxuIik7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTcyOTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAi
REZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgiCiAjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIApAQCAtNDQsMjQgKzQ1
LDM5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKICAgICAKLSAg
ICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNvbnN0Cisg
ICAgYm9vbCBzdHJpY3RseURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgICAgICByZXR1
cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIHJldHVybiBtX2RhdGFbdG9dLnBy
ZU51bWJlciA+IG1fZGF0YVtmcm9tXS5wcmVOdW1iZXIKKyAgICAgICAgICAgICYmIG1fZGF0YVt0
b10ucG9zdE51bWJlciA8IG1fZGF0YVtmcm9tXS5wb3N0TnVtYmVyOwogICAgIH0KICAgICAKICAg
ICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRvLT5pbmRleCk7
CisgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9taW5hdGVzKGZyb20sIHRv
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0g
ICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9ja0luZGV4KTsKKyAgICBib29sIG5h
aXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdDsKICAg
ICAKLSAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3IgZWFjaCBibG9j
aywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KLSAgICBGYXN0Qml0
VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9yIHdpdGggYml0IGZvciBl
YWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVsZXRlcy4KKyAgICBzdHJ1
Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkKKyAgICAgICAgICAgIDogaWRvbVBh
cmVudChudWxscHRyKQorICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAg
ICAgICAsIHBvc3ROdW1iZXIoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBpZG9tS2lkczsKKyAgICAgICAgQmFzaWNC
bG9jayogaWRvbVBhcmVudDsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHByZU51bWJlcjsK
KyAgICAgICAgdW5zaWduZWQgcG9zdE51bWJlcjsKKyAgICB9OworICAgIAorICAgIEJsb2NrTWFw
PEJsb2NrRGF0YT4gbV9kYXRhOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVk
ZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRl
ICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCIKQEAgLTM3MCwxNCArMzcxLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYKICAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFsaWQoKSkgewogICAgICAg
ICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6Iik7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
bV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9jay0+aW5kZXgpKQorICAgICAgICAgICAgaWYg
KCF0aGlzLT5ibG9jayhpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyh0aGlzLT5ibG9jayhpKSwgYmxvY2spKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwog
ICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21p
bmF0ZXMoYmxvY2stPmluZGV4LCBpKSkKKyAgICAgICAgICAgIGlmICghdGhpcy0+YmxvY2soaSkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9y
cy5kb21pbmF0ZXMoYmxvY2ssIHRoaXMtPmJsb2NrKGkpKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKICAgICAgICAgfQpAQCAtNjM1
LDczICs2NDAsMzAgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvYwog
ICAgIH0KIH0KIAotLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFuZCBwb3N0LW9yZGVyIHRyYXZlcnNh
bHMuCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgdm9pZCBhZGRGb3JQcmVPcmRlcihWZWN0b3I8QmFz
aWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQml0
VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBpZiAoc2Vlbi5nZXQoYmxv
Y2stPmluZGV4KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJlc3VsdC5hcHBlbmQoYmxv
Y2spOwotICAgIHdvcmtsaXN0LmFwcGVuZChibG9jayk7Ci0gICAgc2Vlbi5zZXQoYmxvY2stPmlu
ZGV4KTsKLX0KLQotZW51bSBQb3N0T3JkZXJUYXNrS2luZCB7Ci0gICAgUG9zdE9yZGVyRmlyc3RW
aXNpdCwKLSAgICBQb3N0T3JkZXJBZGRUb1Jlc3VsdAotfTsKLQotc3RydWN0IFBvc3RPcmRlclRh
c2sgewotICAgIFBvc3RPcmRlclRhc2soQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBQb3N0
T3JkZXJUYXNrS2luZCBraW5kID0gUG9zdE9yZGVyRmlyc3RWaXNpdCkKLSAgICAgICAgOiBtX2Js
b2NrKGJsb2NrKQotICAgICAgICAsIG1fa2luZChraW5kKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICBQb3N0T3JkZXJUYXNrS2luZCBtX2tpbmQ7Ci19
OwotCi1pbmxpbmUgdm9pZCBhZGRGb3JQb3N0T3JkZXIoVmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2
PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAg
aWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3
b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayhibG9jaywgUG9zdE9yZGVyRmlyc3RWaXNpdCkp
OwotICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQotCiB2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKLSAg
ICBCaXRWZWN0b3Igc2VlbjsKLSAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0LCBz
ZWVuLCBibG9jaygwKSk7Ci0gICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgIEJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CisgICAgd2hpbGUg
KEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNz
b3JzKCk7IGktLTspCi0gICAgICAgICAgICBhZGRGb3JQcmVPcmRlcihyZXN1bHQsIHdvcmtsaXN0
LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQogfQogCiB2b2lkIEdyYXBoOjpnZXRCbG9ja3NJ
blBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7Ci0gICAgVmVjdG9yPFBv
c3RPcmRlclRhc2ssIDE2PiB3b3JrbGlzdDsKLSAgICBCaXRWZWN0b3Igc2VlbjsKLSAgICBhZGRG
b3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAgICB3aGlsZSAoIXdvcmts
aXN0LmlzRW1wdHkoKSkgewotICAgICAgICBQb3N0T3JkZXJUYXNrIHRhc2sgPSB3b3JrbGlzdC50
YWtlTGFzdCgpOwotICAgICAgICBzd2l0Y2ggKHRhc2subV9raW5kKSB7Ci0gICAgICAgIGNhc2Ug
UG9zdE9yZGVyRmlyc3RWaXNpdDoKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3Jk
ZXJUYXNrKHRhc2subV9ibG9jaywgUG9zdE9yZGVyQWRkVG9SZXN1bHQpKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRhc2subV9ibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQot
ICAgICAgICAgICAgICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgdGFzay5tX2Js
b2NrLT5zdWNjZXNzb3IoaSkpOworICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7
CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CisgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVy
IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsK
KyAgICAgICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0
ZW0uYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlbS5ibG9jay0+bnVt
U3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goaXRlbS5i
bG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBv
c3RPcmRlckFkZFRvUmVzdWx0OgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0YXNrLm1fYmxv
Y2spOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
aXRlbS5ibG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZh
bGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUu
aCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgpA
QCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIEJpdFZlY3RvciBibG9ja3NUaGF0TmVl
ZEludmFsaWRhdGlvblBvaW50czsKKyAgICAgICAgQmxvY2tTZXQgYmxvY2tzVGhhdE5lZWRJbnZh
bGlkYXRpb25Qb2ludHM7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKQEAgLTYzLDE3
ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGFzc3VtZXMgdGhh
dCBjb250cm9sIGZsb3cgb2NjdXJzIGF0IGJ5dGVjb2RlIGluc3RydWN0aW9uIGJvdW5kYXJpZXMu
CiAgICAgICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFkRmlyZS5pc1NldCgpKSB7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykK
LSAgICAgICAgICAgICAgICAgICAgYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuc2V0
KGJsb2NrLT5zdWNjZXNzb3IoaSktPmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tz
VGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuYWRkKGJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAg
ICAgICAgICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmdldChibG9ja0lu
ZGV4KSkKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKworICAgICAgICAgICAgaWYgKCFibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBv
aW50cy5jb250YWlucyhibG9jaykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgICAgIGluc2VydEludmFsaWRhdGlvbkNoZWNrKDAsIGJsb2NrLT5h
dCgwKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21p
bmF0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmFpdmVEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTmFpdmVEb21pbmF0b3JzLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK05haXZlRG9taW5hdG9y
czo6TmFpdmVEb21pbmF0b3JzKCkKK3sKK30KKworTmFpdmVEb21pbmF0b3JzOjp+TmFpdmVEb21p
bmF0b3JzKCkKK3sKK30KKwordm9pZCBOYWl2ZURvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdy
YXBoKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIu
CisgICAgCisgICAgQVNTRVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgp
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1CbG9ja3MoKTsKKyAg
ICAKKyAgICAvLyBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJp
eC4gCisgICAgaWYgKG51bUJsb2NrcyA+IG1fcmVzdWx0cy5zaXplKCkpIHsKKyAgICAgICAgbV9y
ZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxv
Y2tzOyBpLS07KQorICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnJlc2l6ZShudW1CbG9ja3MpOwor
ICAgICAgICBtX3NjcmF0Y2gucmVzaXplKG51bUJsb2Nrcyk7CisgICAgfQorCisgICAgLy8gV2Ug
a25vdyB0aGF0IHRoZSBlbnRyeSBibG9jayBpcyBvbmx5IGRvbWluYXRlZCBieSBpdHNlbGYuCisg
ICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxsKCk7CisgICAgbV9yZXN1bHRzWzBdLnNldCgwKTsKKwor
ICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3MuCisgICAgbV9zY3JhdGNoLmNsZWFy
QWxsKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7CisgICAgICAg
IGlmICghZ3JhcGguYmxvY2soaSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9z
Y3JhdGNoLnNldChpKTsKKyAgICB9CisgICAgCisgICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9t
aW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBp
LS0gPiAxOykgeworICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkp
LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFy
QWxsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3Jh
dGNoKTsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBh
cmUgbm90IGRvbWluYXRvci4KKyAgICBib29sIGNoYW5nZWQ7CisgICAgZG8geworICAgICAgICBj
aGFuZ2VkID0gZmFsc2U7CisgICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBl
bnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IG51bUJsb2NrczsgKytpKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRv
cnMoZ3JhcGgsIGkpOworCisgICAgICAgIGlmICghY2hhbmdlZCkKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6
IGJhY2t3YXJkIHNjYW4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
cHJ1bmVEb21pbmF0b3JzKGdyYXBoLCBpKTsKKyAgICB9IHdoaWxlIChjaGFuZ2VkKTsKK30KKwor
Ym9vbCBOYWl2ZURvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyhHcmFwaCYgZ3JhcGgsIEJsb2Nr
SW5kZXggaWR4KQoreworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsK
KworICAgIGlmICghYmxvY2sgfHwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20o
cHJlZHMpLgorICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNb
MF0tPmluZGV4XSk7CisgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7IGotLSA+IDE7KQorICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9j
ay0+cHJlZGVjZXNzb3JzW2pdLT5pbmRleF0pOworCisgICAgLy8gVGhlIGJsb2NrIGlzIGFsc28g
ZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3NjcmF0Y2guc2V0KGlkeCk7CisKKyAgICByZXR1
cm4gbV9yZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsKK30KKwordm9pZCBOYWl2
ZURvbWluYXRvcnM6OmR1bXAoR3JhcGgmIGdyYXBoLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAiLCAqYmxvY2ssICI6
Iik7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0gMDsgb3RoZXJJbmRleCA8
IGdyYXBoLm51bUJsb2NrcygpOyArK290aGVySW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghZG9t
aW5hdGVzKGJsb2NrLT5pbmRleCwgb3RoZXJJbmRleCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRleCk7CisgICAgICAgIH0K
KyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05haXZlRG9taW5hdG9yc19oCisjZGVmaW5l
IERGR05haXZlRG9taW5hdG9yc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdyYXBoOworCisvLyBUaGlzIGNsYXNzIGlzIG9ubHkgdXNlZCBmb3IgdmFsaWRhdGluZyB0
aGUgcmVhbCBkb21pbmF0b3JzIGltcGxlbWVudGF0aW9uLgorCitjbGFzcyBOYWl2ZURvbWluYXRv
cnMgeworcHVibGljOgorICAgIE5haXZlRG9taW5hdG9ycygpOworICAgIH5OYWl2ZURvbWluYXRv
cnMoKTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAgICAKKyAgICBib29sIGRv
bWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgfQorICAgIAorICAgIGJv
b2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9ja0luZGV4
KTsKKyAgICAKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAvLyBGb3IgZWFj
aCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBpdC4KKyAgICBG
YXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9yIHdpdGggYml0
IGZvciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVsZXRlcy4KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHTmFpdmVEb21pbmF0b3JzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsMTEgQEAgdm9pZCBOYXR1cmFsTG9vcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KQogTmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMoKSB7IH0KIE5hdHVyYWxMb29wczo6
fk5hdHVyYWxMb29wcygpIHsgfQogCit2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZURlcGVuZGVu
Y2llcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5l
Y2Vzc2FyeShncmFwaCk7Cit9CisKIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBn
cmFwaCkKIHsKICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9taW5hdG9yLWJhc2VkIG5h
dHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdApAQCAtNTcsMTEgKzYyLDkgQEAgdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgIAogICAgIHN0YXRpYyBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKLSAgICBncmFwaC5tX2RvbWluYXRvcnMuY29tcHV0
ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKLSAgICAKICAgICBpZiAodmVyYm9zZSkgewogICAgICAgICBk
YXRhTG9nKCJEb21pbmF0b3JzOlxuIik7Ci0gICAgICAgIGdyYXBoLm1fZG9taW5hdG9ycy5kdW1w
KGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMuZHVt
cChXVEY6OmRhdGFGaWxlKCkpOwogICAgIH0KICAgICAKICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkocmV2
aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9v
cHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBwdWJsaWM6CiAgICAgTmF0dXJh
bExvb3BzKCk7CiAgICAgfk5hdHVyYWxMb29wcygpOwogICAgIAorICAgIHZvaWQgY29tcHV0ZURl
cGVuZGVuY2llcyhHcmFwaCYpOwogICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOwogICAgIAogICAg
IHVuc2lnbmVkIG51bUxvb3BzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAx
NzI5NDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE3LDI0ICsxMTcsMzEgQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuICEhKGJpdHMoKVtiaXQg
LyBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAm
IChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBxdWlja1Nl
dChzaXplX3QgYml0KQorICAgIGJvb2wgcXVpY2tTZXQoc2l6ZV90IGJpdCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJpdCA8IHNpemUoKSk7Ci0gICAg
ICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldIHw9IChzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICAgICAgdWludHB0
cl90JiB3b3JkID0gYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV07CisgICAgICAgIHVpbnRw
dHJfdCBtYXNrID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBv
aW50ZXIoKSAtIDEpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhISh3b3JkICYgbWFzayk7Cisg
ICAgICAgIHdvcmQgfD0gbWFzazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBxdWlja0NsZWFyKHNpemVfdCBiaXQpCisgICAgYm9vbCBxdWlja0NsZWFyKHNp
emVfdCBiaXQpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihiaXQgPCBzaXplKCkpOwotICAgICAgICBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXSAm
PSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkg
LSAxKSkpOworICAgICAgICB1aW50cHRyX3QmIHdvcmQgPSBiaXRzKClbYml0IC8gYml0c0luUG9p
bnRlcigpXTsKKyAgICAgICAgdWludHB0cl90IG1hc2sgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpOworICAgICAgICBib29sIHJlc3Vs
dCA9ICEhKHdvcmQgJiBtYXNrKTsKKyAgICAgICAgd29yZCAmPSB+bWFzazsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBxdWlja1NldChzaXplX3QgYml0LCBi
b29sIHZhbHVlKQorICAgIGJvb2wgcXVpY2tTZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHF1aWNrU2V0KGJpdCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHF1aWNrQ2xlYXIoYml0KTsKKyAgICAgICAgICAgIHJldHVy
biBxdWlja1NldChiaXQpOworICAgICAgICByZXR1cm4gcXVpY2tDbGVhcihiaXQpOwogICAgIH0K
ICAgICAKICAgICBib29sIGdldChzaXplX3QgYml0KSBjb25zdApAQCAtMTQ0LDMxICsxNTEsMzAg
QEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIHF1aWNrR2V0KGJpdCk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAgYm9vbCBzZXQoc2l6ZV90IGJpdCkKICAgICB7
CiAgICAgICAgIGVuc3VyZVNpemUoYml0ICsgMSk7Ci0gICAgICAgIHF1aWNrU2V0KGJpdCk7Cisg
ICAgICAgIHJldHVybiBxdWlja1NldChiaXQpOwogICAgIH0KIAotICAgIHZvaWQgZW5zdXJlU2l6
ZUFuZFNldChzaXplX3QgYml0LCBzaXplX3Qgc2l6ZSkKKyAgICBib29sIGVuc3VyZVNpemVBbmRT
ZXQoc2l6ZV90IGJpdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBlbnN1cmVTaXplKHNp
emUpOwotICAgICAgICBxdWlja1NldChiaXQpOworICAgICAgICByZXR1cm4gcXVpY2tTZXQoYml0
KTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisgICAgYm9vbCBjbGVhcihz
aXplX3QgYml0KQogICAgIHsKICAgICAgICAgaWYgKGJpdCA+PSBzaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHF1aWNrQ2xlYXIoYml0KTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHF1aWNrQ2xlYXIoYml0KTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKKyAgICBib29sIHNldChzaXplX3QgYml0
LCBib29sIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgc2V0
KGJpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsZWFyKGJpdCk7CisgICAgICAgICAg
ICByZXR1cm4gc2V0KGJpdCk7CisgICAgICAgIHJldHVybiBjbGVhcihiaXQpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237254</attachid>
            <date>2014-08-27 14:26:42 -0700</date>
            <delta_ts>2014-08-27 16:51:57 -0700</delta_ts>
            <desc>still debugging</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67318</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDYgKzEyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKICAgICBkZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisgICAgZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCiAgICAg
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTE3NSw2ICsxNzYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAorICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1dvcmtsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiIC8+CkBAIC00MjEs
NiArNDIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWF5RXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2
ZURvbWluYXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNw
cCIgLz4KQEAgLTk5Myw2ICs5OTUsMTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmxvY2tNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja01hcElubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja1dvcmtsaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxv
Y2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJl
Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkBAIC0xMDU2LDYgKzEwNjIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYg
KzQ5OCwxMyBAQAogCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDEwMTgx
NDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1w
UmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMzE0MTExODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi87
IH07CiAJCTBGQzMxNDE1MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovOyB9OworCQkwRkMzQ0NGQzE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZE
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAv
KiBERkdCbG9ja01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y3
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0Y4MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNw
cCAqLzsgfTsKKwkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y5
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJB
IC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21p
bmF0b3JzLmNwcCAqLzsgfTsKKwkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkRFMTdD
RDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMxN0NEODc3ODAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4
Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAxN0NEODc4RjAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
QEAgLTI0MjEsNiArMjQyOCwxMyBAQAogCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTExODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZW1wUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tNYXAuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNjE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrTWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNzE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmxvY2tTZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9j
a1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYWl2ZURvbWlu
YXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmFpdmVEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4
MTksNiArNDgzMywxMSBAQAogCQkJCUE3MEIwODMxMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5h
cnlTd2l0Y2guaCAqLywKIAkJCQlBN0Q4OUNFNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
bG9ja0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcC5oICovLAorCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCAqLywKKwkJCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tTZXQuaCAqLywKKwkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3Jr
bGlzdC5jcHAgKi8sCisJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTQ5MzAsNiArNDk0OSw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFD
NzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCisJCQkJMEZDM0NDRkIxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUxRTE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC01ODQyLDYgKzU4NjMsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVD
QjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5
MTcsNiArNTkzOSw3IEBACiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGQzE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzMTcsNiArNjM0MCw3IEBACiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyOSw2ICs2MzUzLDcgQEAKIAkJCQkw
RjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJD
RTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYw
MEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mzc0LDYgKzYzOTksNyBAQAog
CQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFF
OTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTcsNiArNzMyMyw3IEBACiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTA1QUJENTE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Nyw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDM0NDRkYx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5h
bHlzaXMuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChtX3ZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAv
LyBJdCdzIGJlc3QgdG8gcnVuIGRlcGVuZGVudCBhbmFseXNlcyBmcm9tIHRoaXMgbWV0aG9kLgor
ICAgICAgICBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmNvbXB1dGVEZXBlbmRlbmNpZXMoZ3JhcGgp
OwogICAgICAgICAvLyBTZXQgdG8gdHJ1ZSBlYXJseSwgc2luY2UgdGhlIGFuYWx5c2lzIG1heSBj
aG9vc2UgdG8gY2FsbCBpdHMgb3duIG1ldGhvZHMgaW4KICAgICAgICAgLy8gY29tcHV0ZSgpIGFu
ZCBpdCBtYXkgd2FudCB0byBBU1NFUlQoKSB2YWxpZGl0eSBpbiB0aG9zZSBtZXRob2RzLgogICAg
ICAgICBtX3ZhbGlkID0gdHJ1ZTsKQEAgLTYxLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CiAKKyAgICAvLyBPdmVy
cmlkZSB0aGlzIHRvIGNvbXB1dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCisgICAgLy8g
TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dAorICAgIC8vIGl0IG1ha2VzIGRlYnVn
IGR1bXBzIGluIGNhc2VzIG9mIGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBh
bmFseXNpcyB3b3VsZG4ndCB5ZXQKKyAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgor
ICAgIHZvaWQgY29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYpIHsgfQorCiBwcml2YXRlOgogICAg
IGJvb2wgbV92YWxpZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja01hcF9oCisjZGVm
aW5lIERGR0Jsb2NrTWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tNYXAgeworcHVibGlj
OgorICAgIEJsb2NrTWFwKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrTWFwKEdyYXBo
Jik7CisgICAgCisgICAgQmxvY2tJbmRleCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci5zaXplKCk7CisgICAgfQorICAgIAorICAgIFQmIGF0SW5kZXgoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5k
ZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsK
KyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1f
dmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja01hcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwSW5saW5lc19oCisjZGVmaW5lIERG
R0Jsb2NrTWFwSW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQmxvY2tNYXA8VD46OkJsb2Nr
TWFwKEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX3ZlY3Rvci5yZXNpemUoZ3JhcGgubnVtQmxvY2tz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja1NldF9oCisjZGVmaW5lIERGR0Jsb2NrU2V0X2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJsb2NrU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1Nl
dCgpIHsgfQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBibG9jayB3YXMgYWRkZWQs
IGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBhZGQoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChibG9jay0+aW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmdldChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1Nl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmts
aXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQmxvY2tXb3JrbGlzdDo6QmxvY2tXb3JrbGlzdCgpCit7Cit9CisKK0Jsb2NrV29y
a2xpc3Q6On5CbG9ja1dvcmtsaXN0KCkKK3sKK30KKworYm9vbCBCbG9ja1dvcmtsaXN0OjpwdXNo
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmICghbV9zZWVuLmFkZChibG9jaykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChibG9jayk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrV29ya2xpc3Q6OnBvcCgpCit7Cisg
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOworfQorCitQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCkKK3sKK30KKworUG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdDo6flBvc3RPcmRlckJsb2NrV29ya2xpc3QoKQoreworfQorCitib29sIFBvc3RPcmRlckJs
b2NrV29ya2xpc3Q6OnB1c2hQcmUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIG1f
d29ya2xpc3QucHVzaChibG9jaywgUHJlT3JkZXIpOworfQorCit2b2lkIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Q6OnB1c2hQb3N0KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29ya2xpc3Qu
Zm9yY2VQdXNoKGJsb2NrLCBQb3N0T3JkZXIpOworfQorCitCbG9ja1dpdGhPcmRlciBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIEJsb2NrV2l0aDxWaXNpdE9yZGVyPiByZXN1
bHQgPSBtX3dvcmtsaXN0LnBvcCgpOworICAgIHJldHVybiBCbG9ja1dpdGhPcmRlcihyZXN1bHQu
YmxvY2ssIHJlc3VsdC5kYXRhKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIERGR0Jsb2NrV29ya2xpc3RfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK2NsYXNzIEJsb2NrV29y
a2xpc3QgeworcHVibGljOgorICAgIEJsb2NrV29ya2xpc3QoKTsKKyAgICB+QmxvY2tXb3JrbGlz
dCgpOworICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Jsb2NrKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgYmxvY2sgYmVmb3JlLgorICAgIAorICAgIGJvb2wg
bm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBwb3AoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IG1fc3RhY2s7Cit9OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJsb2NrV2l0aCB7CisgICAgQmxvY2tXaXRo
KCkKKyAgICAgICAgOiBibG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tXaXRoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgICAgICA6IGJsb2Nr
KGJsb2NrKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5
cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9w
ZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jazsKKyAgICBUIGRhdGE7Cit9Owor
CisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29t
ZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9y
Y2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVl
biBzZWVuLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0KCkgeyB9CisgICAgCisgICAg
dm9pZCBmb3JjZVB1c2goY29uc3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAgICAg
IG1fc3RhY2suYXBwZW5kKGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3JjZVB1c2go
QmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAgeworICAgICAgICBmb3JjZVB1
c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHVz
aChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NlZW4u
YWRkKGVudHJ5LmJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGZvcmNlUHVzaChlbnRyeSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIHB1c2goQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gcHVzaChCbG9ja1dpdGg8VD4oYmxvY2ssIGRhdGEpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YWNrLmlzRW1w
dHkoKTsgfQorICAgIAorICAgIEJsb2NrV2l0aDxUPiBwb3AoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEJsb2NrV2l0aDxUPigpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAgIFZlY3RvcjxCbG9ja1dpdGg8VD4+IG1f
c3RhY2s7Cit9OworCitlbnVtIFZpc2l0T3JkZXIgeworICAgIFByZU9yZGVyLAorICAgIFBvc3RP
cmRlcgorfTsKKworc3RydWN0IEJsb2NrV2l0aE9yZGVyIHsKKyAgICBCbG9ja1dpdGhPcmRlcigp
CisgICAgICAgIDogYmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBvcmRlcihQcmVPcmRlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aE9yZGVyKEJhc2ljQmxvY2sqIGJsb2NrLCBW
aXNpdE9yZGVyIG9yZGVyKQorICAgICAgICA6IGJsb2NrKGJsb2NrKQorICAgICAgICAsIG9yZGVy
KG9yZGVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiB2b2lkKiAoQmxvY2tXaXRo
T3JkZXI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyByZWludGVycHJl
dF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAgfQorCisgICAg
QmFzaWNCbG9jayogYmxvY2s7CisgICAgVmlzaXRPcmRlciBvcmRlcjsKK307CisKKy8vIEJsb2Nr
IHdvcmtsaXN0IHN1aXRhYmxlIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4KK2NsYXNzIFBvc3RP
cmRlckJsb2NrV29ya2xpc3QgeworcHVibGljOgorICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qo
KTsKKyAgICB+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCgpOworICAgIAorICAgIGJvb2wgcHVzaFBy
ZShCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBwdXNoUG9zdChCYXNpY0Jsb2NrKik7CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVyID0gUHJlT3Jk
ZXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9yZGVyKSB7CisgICAgICAgIGNhc2UgUHJlT3Jk
ZXI6CisgICAgICAgICAgICByZXR1cm4gcHVzaFByZShibG9jayk7CisgICAgICAgIGNhc2UgUG9z
dE9yZGVyOgorICAgICAgICAgICAgcHVzaFBvc3QoYmxvY2spOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHB1c2goY29uc3QgQmxvY2tX
aXRoT3JkZXImIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaChkYXRhLmJsb2NrLCBk
YXRhLm9yZGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ya2xpc3Qubm90RW1wdHkoKTsgfQorICAgIEJsb2NrV2l0aE9yZGVyIHBvcCgpOwor
Citwcml2YXRlOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDxWaXNpdE9yZGVyPiBtX3dvcmts
aXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdB
YnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRl
ICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCkBAIC0zNjQsNiArMzY1LDcgQEAgY2xhc3MgR2xvYmFs
Q1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEdsb2JhbENTRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImdsb2JhbCBjb21tb24gc3ViZXhw
cmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9pbXB1cmVEYXRhTWFwKGdyYXBoKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC0zNzcsMTMgKzM3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIobV9wcmVPcmRlcik7CiAgICAg
ICAgIAotICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXplKG1fZ3JhcGgubnVtQmxvY2tzKCkp
OwotICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGF0IGdldHMgY2xvYmJl
cmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0aGUgcHJlT3JkZXIgbGlzdAogICAg
ICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9wcmVPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3ByZU9y
ZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Js
b2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFw
W21fYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFw
aCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAg
ICB9CkBAIC00MDcsNyArNDA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9wdXJlVmFs
dWVzLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ltcHVy
ZURhdGFNYXAuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBpID0gbV9p
bXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQyMyw3ICs0MjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVPcmRl
ci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgbV9ibG9jayA9IG1fcHJlT3JkZXJbaV07Ci0g
ICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4
XTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9ja107
CiAgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNTYyLDEyICs1NjIsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgICBTZWFyY2hpbmcgaW4gYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAgICAg
IEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5kZXhdOwor
ICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2Nr
XTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgZG9taW5h
dGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBzZWUgdGhpbmdzIGluIG91ciBvd24gYmxvY2sg
aWYKICAgICAgICAgICAgIC8vIHRoZXkgY2FtZSAqYWZ0ZXIqIG91ciBwb3NpdGlvbiBpbiB0aGUg
YmxvY2suIENsZWFybHksIHdoaWxlIG91ciBibG9jayBkb21pbmF0ZXMKICAgICAgICAgICAgIC8v
IGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUgYmxvY2sgYWZ0ZXIgdXMgZG9uJ3QgZG9taW5hdGUg
dXMuCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2Nr
LCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2RvbWluYXRvcnMuc3RyaWN0bHlEb21pbmF0ZXMoYmxvY2ssIG1fYmxvY2spKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwpAQCAtNjEyLDcgKzYxMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHJlZHVjdGlvbiBpbiBjb21waWxlIHRpbWUgd291bGQg
d2FycmFudCB0aGUgaW5jcmVhc2UgaW4gY29tcGxleGl0eSwgdGhvdWdoLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODc2CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKLSAgICAgICAgICAgIG1faW1wdXJlRGF0
YU1hcFtibG9jay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsK
KyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9ja10uYXZhaWxhYmxlQXRUYWlsLmFkZChs
b2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5h
ZGQobG9jYXRpb24sIG1hdGNoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtYXRjaDsKQEAg
LTY1NCw3ICs2NTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX3ByZU9y
ZGVyOwogCiAgICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsKLSAgICBWZWN0b3I8SW1wdXJl
QmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CisgICAgQmxvY2tNYXA8SW1wdXJlQmxvY2tEYXRh
PiBtX2ltcHVyZURhdGFNYXA7CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBO
b2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDEwIEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1
ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR05haXZlRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDEsOTEgKzQ0LDMyMiBAQCBEb21pbmF0b3Jz
Ojp+RG9taW5hdG9ycygpCiB7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYg
Z3JhcGgpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZl
ci4KK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBMZW5nYXVlciBhbmQgVGFyamFu
J3MgIkEgRmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFw
aCIKKy8vIChUT1BMQVMgMTk3OSkuIEl0IHVzZXMgdGhlICJzaW1wbGUiIGltcGxlbWVudGF0aW9u
IG9mIExJTksgYW5kIEVWQUwuIFRoZSBmdWxsIHBhcGVyIGlzIGxpbmtlZAorLy8gYmVsb3c7IHRo
aXMgY29kZSBhdHRlbXB0cyB0byBjbG9zZWx5IGZvbGxvdyB0aGUgYWxnb3JpdGhtIGFzIGl0IGlz
IHByZXNlbnRlZCBpbiB0aGUgcGFwZXI7IGluCisvLyBwYXJ0aWN1bGFyIHNlY3Rpb25zIDMgYW5k
IDQuCisvLyBodHRwczovL3d3dy5jcy5wcmluY2V0b24uZWR1L2NvdXJzZXMvYXJjaGl2ZS9mYWxs
MDMvY3M1MjgvaGFuZG91dHMvYSUyMGZhc3QlMjBhbGdvcml0aG0lMjBmb3IlMjBmaW5kaW5nLnBk
ZgorCitjbGFzcyBMZW5nYXVlclRhcmphbiB7CitwdWJsaWM6CisgICAgTGVuZ2F1ZXJUYXJqYW4o
R3JhcGgmIGdyYXBoKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9kYXRh
KGdyYXBoKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9kYXRhW2Jsb2Nr
XS5sYWJlbCA9IGJsb2NrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0
ZSgpCisgICAgeworICAgICAgICBjb21wdXRlRGVwdGhGaXJzdFByZU51bWJlcmluZygpOyAvLyBT
dGVwIDEuCisgICAgICAgIGNvbXB1dGVTZW1pRG9taW5hdG9yc0FuZEltcGxpY2l0SW1tZWRpYXRl
RG9taW5hdG9ycygpOyAvLyBTdGVwcyAyIGFuZCAzLgorICAgICAgICBjb21wdXRlRXhwbGljaXRJ
bW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXAgNC4KKyAgICB9CisgICAgCisgICAgQmFzaWNC
bG9jayogaW1tZWRpYXRlRG9taW5hdG9yKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZGF0YVtibG9ja10uZG9tOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCkKKyAgICB7CisgICAgICAgIEJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CisgICAgICAgIHdvcmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygwKSk7
CisgICAgICAgIAorICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5w
b3AoKSkgeworICAgICAgICAgICAgbV9kYXRhW2Jsb2NrXS5zZW1pTnVtYmVyID0gbV9ibG9ja0J5
UHJlTnVtYmVyLnNpemUoKTsKKyAgICAgICAgICAgIG1fYmxvY2tCeVByZU51bWJlci5hcHBlbmQo
YmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2Nr
ID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXdvcmtsaXN0LnB1
c2goc3VjY2Vzc29yQmxvY2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBtX2RhdGFbc3VjY2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZVNlbWlEb21p
bmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7
IGN1cnJlbnRQcmVOdW1iZXItLSA+IDE7KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fYmxvY2tCeVByZU51bWJlcltjdXJyZW50UHJlTnVtYmVyXTsKKyAgICAgICAgICAgIEJs
b2NrRGF0YSYgYmxvY2tEYXRhID0gbV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gU3RlcCAyOgorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
ckJsb2NrIDogYmxvY2stPnByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGludGVybWVkaWF0ZUJsb2NrID0gZXZhbChwcmVkZWNlc3NvckJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBibG9ja0RhdGEuc2VtaU51bWJlciA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAg
ICAgICBtX2RhdGFbaW50ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1p
TnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1Y2tldFByZU51
bWJlciA9IGJsb2NrRGF0YS5zZW1pTnVtYmVyOworICAgICAgICAgICAgQVNTRVJUKGJ1Y2tldFBy
ZU51bWJlciA8PSBjdXJyZW50UHJlTnVtYmVyKTsKKyAgICAgICAgICAgIG1fZGF0YVttX2Jsb2Nr
QnlQcmVOdW1iZXJbYnVja2V0UHJlTnVtYmVyXV0uYnVja2V0LmFwcGVuZChibG9jayk7CisgICAg
ICAgICAgICBsaW5rKGJsb2NrRGF0YS5wYXJlbnQsIGJsb2NrKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gU3RlcCAzOgorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzZW1pRG9t
aW5lZSA6IG1fZGF0YVtibG9ja0RhdGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBwb3NzaWJsZURvbWluYXRvciA9IGV2YWwoc2VtaURvbWluZWUpOworICAg
ICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURvbWluZWVEYXRhID0gbV9kYXRhW3NlbWlEb21p
bmVlXTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHBvc3NpYmxlRG9taW5hdG9yRGF0YSA9
IG1fZGF0YVtwb3NzaWJsZURvbWluYXRvcl07CisgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxl
RG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRhLnNlbWlOdW1iZXIpCisg
ICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBwb3NzaWJsZURvbWluYXRv
cjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVl
RGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZUV4cGxpY2l0SW1tZWRpYXRlRG9taW5hdG9ycygp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGN1cnJlbnRQcmVOdW1iZXIgPSAxOyBjdXJy
ZW50UHJlTnVtYmVyIDwgbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUoKTsgKytjdXJyZW50UHJlTnVt
YmVyKSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tCeVByZU51bWJl
cltjdXJyZW50UHJlTnVtYmVyXTsKKyAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrRGF0YS5k
b20gIT0gbV9ibG9ja0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSkKKyAgICAgICAg
ICAgICAgICBibG9ja0RhdGEuZG9tID0gbV9kYXRhW2Jsb2NrRGF0YS5kb21dLmRvbTsKKyAgICAg
ICAgfQorICAgIH0KICAgICAKLSAgICBBU1NFUlQoZ3JhcGguYmxvY2soMCktPnByZWRlY2Vzc29y
cy5pc0VtcHR5KCkpOworICAgIHZvaWQgbGluayhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2Nr
KiB0bykKKyAgICB7CisgICAgICAgIG1fZGF0YVtmcm9tXS5hbmNlc3RvciA9IHRvOworICAgIH0K
ICAgICAKLSAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1CbG9ja3MoKTsKKyAgICBC
YXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAg
ICAKKyAgICAgICAgY29tcHJlc3MoYmxvY2spOworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2Nr
XS5sYWJlbDsKKyAgICB9CiAgICAgCi0gICAgLy8gQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIGRl
bnNlIGRvbWluYW5jZSBtYXRyaXguIAotICAgIGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6
ZSgpKSB7Ci0gICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5y
ZXNpemUobnVtQmxvY2tzKTsKLSAgICAgICAgbV9zY3JhdGNoLnJlc2l6ZShudW1CbG9ja3MpOwor
ICAgIHZvaWQgY29tcHJlc3MoQmFzaWNCbG9jayogaW5pdGlhbEJsb2NrKQorICAgIHsKKyAgICAg
ICAgLy8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24sIGJ1dCB3ZSBk
b24ndCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgIC8vIHdhbnQgdG8g
YmxvdyB0aGUgc3RhY2suIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGNhbGwgY29tcHJlc3Mo
KSByZWN1cnNpdmVseSBvbiB0aGUKKyAgICAgICAgLy8gYW5jZXN0b3Igb2YgYW55dGhpbmcgdGhh
dCBoYXMgYW4gYW5jZXN0b3IuIFNvLCB3ZSBwb3B1bGF0ZSBvdXIgd29ya2xpc3Qgd2l0aCB0aGUK
KyAgICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFsQmxvY2suIFRoZW4gd2Ug
cHJvY2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jaworICAgICAgICAvLyB0aGF0
IGlzIGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAgICAgCisgICAgICAgIEJh
c2ljQmxvY2sqIGFuY2VzdG9yID0gbV9kYXRhW2luaXRpYWxCbG9ja10uYW5jZXN0b3I7CisgICAg
ICAgIEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAgIGlmICghbV9kYXRhW2FuY2VzdG9yXS5hbmNl
c3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMTY+IHN0YWNrOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gaW5p
dGlhbEJsb2NrOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAg
ICAgICAgc3RhY2suYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIG9ubHkg
Y2FyZSBhYm91dCBibG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFuY2Vz
dG9yLiBUaGUgbGFzdCB0d28KKyAgICAgICAgLy8gZWxlbWVudHMgaW4gdGhlIHN0YWNrIHdvbid0
IHNhdGlzZnkgdGhpcyBwcm9wZXJ0eS4KKyAgICAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSAy
KTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMV1dLmFuY2Vz
dG9yKTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNrW3N0YWNrLnNpemUoKSAt
IDJdXS5hbmNlc3Rvcl0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RhY2suc2l6ZSgpIC0gMjsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBzdGFja1tpXTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBsYWJlbE9mQmxvY2sg
PSBtX2RhdGFbYmxvY2tdLmxhYmVsOworICAgICAgICAgICAgQmFzaWNCbG9jayomIGFuY2VzdG9y
T2ZCbG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3I7CisgICAgICAgICAgICBBU1NFUlQoYW5j
ZXN0b3JPZkJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2RhdGFbYW5jZXN0b3JPZkJsb2Nr
XS5hbmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxhYmVs
T2ZBbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5sYWJlbDsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZGF0YVtsYWJlbE9mQW5jZXN0b3JPZkJsb2NrXS5z
ZW1pTnVtYmVyIDwKKyAgICAgICAgICAgICAgICBtX2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1pTnVt
YmVyKQorICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVsT2ZBbmNlc3Rvck9mQmxv
Y2s7CisgICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2Nr
XS5hbmNlc3RvcjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFdlIGtub3cgdGhhdCB0aGUg
ZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1fcmVzdWx0c1sw
XS5jbGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7CisgICAgc3RydWN0IEJsb2Nr
RGF0YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IHBhcmVudChudWxscHRy
KQorICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHNlbWlO
dW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAg
ICAgICAsIGxhYmVsKG51bGxwdHIpCisgICAgICAgICAgICAsIGRvbShudWxscHRyKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhcmVudDsKKyAg
ICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBzZW1pTnVtYmVyOwor
ICAgICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvcjsKKyAgICAgICAgQmFzaWNCbG9jayogbGFiZWw7
CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYnVja2V0OworICAgICAgICBCYXNpY0Jsb2Nr
KiBkb207CisgICAgfTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxC
bG9ja0RhdGE+IG1fZGF0YTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tCeVByZU51
bWJlcjsKK307CisKK3N0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgVmFsaWRhdGlvbkNv
bnRleHQoR3JhcGgmIGdyYXBoLCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQorICAgICAgICA6IGdy
YXBoKGdyYXBoKQorICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKKyAgICB7CisgICAg
fQorICAgIAorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBoYW5kbGVFcnJvcihCYXNp
Y0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bywgY29uc3QgY2hhciogbWVzc2FnZSkKKyAgICB7
CisgICAgICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKKyAgICAgICAgZGF0YUxvZygiREZHIERPTUlOQVRP
UiBWQUxJREFUSU9OIEZBSUxFRDogIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgIGRhdGFMb2co
IlxuIik7CisgICAgICAgIGRhdGFMb2coIkZvciBibG9jayBkb21pbmF0aW9uIHJlbGF0aW9uc2hp
cCAiLCBwb2ludGVyRHVtcChmcm9tKSwgIiAtPiAiLCBwb2ludGVyRHVtcCh0byksICIuXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdy
YXBoOlxuIik7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBzdWNjZXNzb3JzID0gWyIpOworICAgICAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKGNvbW1hLCAqYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJd
LCBwcmVkZWNlc3NvcnMgPSBbIik7CisgICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3Nv
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5w
cmVkZWNlc3NvcnNbaV0pOworICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGVnYXVlci1UYXJqYW4g
RG9taW5hdG9yczpcbiIpOworICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOworICAgICAgICBk
YXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJOYWl2ZSBEb21pbmF0b3JzOlxuIik7Cisg
ICAgICAgIG5haXZlRG9taW5hdG9ycy5kdW1wKGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZh
aWx1cmU6XG4iKTsKKyAgICAgICAgZ3JhcGguZHVtcCgpOworICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRDogIiwg
bWVzc2FnZSwgIlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIEdyYXBo
JiBncmFwaDsKKyAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzOworICAgIE5haXZlRG9taW5hdG9y
cyBuYWl2ZURvbWluYXRvcnM7Cit9OwogCi0gICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJs
b2Nrcy4KLSAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1CbG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQoreworICAgIExlbmdhdWVyVGFyamFuIGxlbmdhdWVyVGFyamFuKGdyYXBoKTsKKyAgICBsZW5n
YXVlclRhcmphbi5jb21wdXRlKCk7CisKKyAgICBtX2RhdGEgPSBCbG9ja01hcDxCbG9ja0RhdGE+
KGdyYXBoKTsKKyAgICAKKyAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWlsZCBhIHNwYW5u
aW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5kIHdlIHdhbnQK
KyAgICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRlIHByZSBhbmQg
cG9zdCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAgIC8vIHRlc3Rz
LgorICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgICAgICAKKyAgICAgICAgQmFzaWNC
bG9jayogaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4uaW1tZWRpYXRlRG9taW5hdG9yKGJsb2Nr
KTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50ID0gaWRvbUJsb2NrOworICAgICAg
ICBpZiAoaWRvbUJsb2NrKQorICAgICAgICAgICAgbV9kYXRhW2lkb21CbG9ja10uaWRvbUtpZHMu
YXBwZW5kKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgLy8gTWFyayBhbGwgbm9kZXMgYXMgZG9t
aW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBp
LS0gPiAxOykgewotICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkp
LT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFy
QWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3Jh
dGNoKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9kZXMgdGhhdCBh
cmUgbm90IGRvbWluYXRvci4KLSAgICBib29sIGNoYW5nZWQ7Ci0gICAgZG8gewotICAgICAgICBj
aGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5vbiBl
bnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IG51bUJsb2NrczsgKytpKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRv
cnMoZ3JhcGgsIGkpOwotCi0gICAgICAgIGlmICghY2hhbmdlZCkKKyAgICB1bnNpZ25lZCBuZXh0
UHJlTnVtYmVyID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7CisgICAgCisg
ICAgLy8gUGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVl
ZCB0byBzZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2UgYW55d2F5LgorICAgIFZlY3RvcjxCbG9j
a1dpdGhPcmRlcj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVy
KGdyYXBoLmJsb2NrKDApLCBQcmVPcmRlcikpOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgp
OworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBQcmVPcmRlcjoK
KyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5wcmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVy
Kys7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoaXRlbS5ibG9j
aywgUG9zdE9yZGVyKSk7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGtpZCA6IG1fZGF0
YVtpdGVtLmJsb2NrXS5pZG9tS2lkcykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
QmxvY2tXaXRoT3JkZXIoa2lkLCBQcmVPcmRlcikpOwogICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dh
cmQgc2Nhbi4KLSAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURv
bWluYXRvcnMoZ3JhcGgsIGkpOwotICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICBjYXNl
IFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5wb3N0TnVtYmVyID0g
bmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIENoZWNrIG91
ciBkb21pbmF0b3IgY2FsY3VsYXRpb246CisgICAgICAgIC8vIDEpIENoZWNrIHRoYXQgb3VyIHJh
bmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNhbWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0
ZXN0LgorICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRl
cyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChub3QKKyAgICAgICAgLy8gICAgTGVuZ2F1
ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24uCisgICAgICAgIAorICAgICAgICBWYWxp
ZGF0aW9uQ29udGV4dCBjb250ZXh0KGdyYXBoLCAqdGhpcyk7CisgICAgICAgIGNvbnRleHQubmFp
dmVEb21pbmF0b3JzLmNvbXB1dGUoZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGZyb21CbG9ja0luZGV4
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tQmxvY2sgPSBncmFwaC5ibG9jayhm
cm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBtX2RhdGFbZnJv
bUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggdG9CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxv
Y2tzKCk7IHRvQmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRv
QmxvY2sgPSBncmFwaC5ibG9jayh0b0Jsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICgh
dG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFYKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykgIT0gbmFpdmVEb21pbmF0ZXMoZnJv
bUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVFcnJv
cihmcm9tQmxvY2ssIHRvQmxvY2ssICJSYW5nZS1iYXNlZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJy
b2tlbiIpOworICAgICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2Nr
KSAhPSBjb250ZXh0Lm5haXZlRG9taW5hdG9ycy5kb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2Nr
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5oYW5kbGVFcnJvcihmcm9tQmxvY2ssIHRv
QmxvY2ssICJMZWdhdWVyLVRhcmphbiBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQogfQogCi1ib29sIERvbWluYXRvcnM6OnBydW5lRG9taW5h
dG9ycyhHcmFwaCYgZ3JhcGgsIEJsb2NrSW5kZXggaWR4KQorYm9vbCBEb21pbmF0b3JzOjpuYWl2
ZURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKIHsKLSAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGlkeCk7Ci0KLSAgICBpZiAoIWJsb2Nr
IHx8IGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gb2YgZG9tKHByZWRzKS4KLSAgICBtX3Nj
cmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBdLT5pbmRleF0pOwotICAg
IGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAxOykK
LSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1tq
XS0+aW5kZXhdKTsKLQotICAgIC8vIFRoZSBibG9jayBpcyBhbHNvIGRvbWluYXRlZCBieSBpdHNl
bGYuCi0gICAgbV9zY3JhdGNoLnNldChpZHgpOwotCi0gICAgcmV0dXJuIG1fcmVzdWx0c1tpZHhd
LnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA9IHRv
OyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmlkb21QYXJlbnQpIHsKKyAgICAgICAgaWYg
KGJsb2NrID09IGZyb20pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIERvbWluYXRvcnM6OmR1bXAoR3JhcGgmIGdyYXBoLCBQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAordm9pZCBEb21pbmF0b3JzOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiB7Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICBpZiAoIWJsb2Nr
KQorICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIG91dC5wcmludCgiICAgIE5vdCBWYWxp
ZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZGF0YS5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBpZiAobV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51bWJlciA9PSBVSU5UX01B
WCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAi
LCAqYmxvY2ssICI6Iik7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0gMDsg
b3RoZXJJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK290aGVySW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmICghZG9taW5hdGVzKGJsb2NrLT5pbmRleCwgb3RoZXJJbmRleCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRleCk7
Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgICAgICAKKyAgICAgICAg
b3V0LnByaW50KCIgICAgQmxvY2sgIyIsIGJsb2NrSW5kZXgsICI6IGlkb20gPSAiLCBwb2ludGVy
RHVtcChtX2RhdGFbYmxvY2tJbmRleF0uaWRvbVBhcmVudCksICIsIGlkb21LaWRzID0gWyIpOwor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICptX2RhdGFbYmxvY2tJbmRleF0uaWRvbUtpZHNbaV0pOworICAg
ICAgICBvdXQucHJpbnQoIl0sIHByZS9wb3N0ID0gIiwgbV9kYXRhW2Jsb2NrSW5kZXhdLnByZU51
bWJlciwgIi8iLCBtX2RhdGFbYmxvY2tJbmRleF0ucG9zdE51bWJlciwgIlxuIik7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2
aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3Jz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0FuYWx5c2lz
LmgiCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrTWFwLmgi
CiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4K
IApAQCAtNDQsMjQgKzQ1LDM5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNvbXB1dGUoR3Jh
cGgmKTsKICAgICAKLSAgICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5k
ZXggdG8pIGNvbnN0CisgICAgYm9vbCBzdHJpY3RseURvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkp
OwotICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIHJldHVy
biBtX2RhdGFbdG9dLnByZU51bWJlciA+IG1fZGF0YVtmcm9tXS5wcmVOdW1iZXIKKyAgICAgICAg
ICAgICYmIG1fZGF0YVt0b10ucG9zdE51bWJlciA8IG1fZGF0YVtmcm9tXS5wb3N0TnVtYmVyOwog
ICAgIH0KICAgICAKICAgICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0bykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBkb21pbmF0ZXMoZnJvbS0+aW5k
ZXgsIHRvLT5pbmRleCk7CisgICAgICAgIHJldHVybiBmcm9tID09IHRvIHx8IHN0cmljdGx5RG9t
aW5hdGVzKGZyb20sIHRvKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICAKIHByaXZhdGU6Ci0gICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3JhcGgmLCBCbG9ja0luZGV4
KTsKKyAgICBib29sIG5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdDsKICAgICAKLSAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1bHRzOyAv
LyBGb3IgZWFjaCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21pbmF0ZSBp
dC4KLSAgICBGYXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0dmVjdG9y
IHdpdGggYml0IGZvciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBuZXcvZGVs
ZXRlcy4KKyAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkKKyAgICAg
ICAgICAgIDogaWRvbVBhcmVudChudWxscHRyKQorICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlO
VF9NQVgpCisgICAgICAgICAgICAsIHBvc3ROdW1iZXIoVUlOVF9NQVgpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBpZG9tS2lkczsK
KyAgICAgICAgQmFzaWNCbG9jayogaWRvbVBhcmVudDsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIHByZU51bWJlcjsKKyAgICAgICAgdW5zaWduZWQgcG9zdE51bWJlcjsKKyAgICB9OworICAg
IAorICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdDbG9iYmVy
U2V0LmgiCisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAi
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKQEAgLTM3MCwxNCArMzcxLDE4IEBAIHZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKICAgICBpZiAobV9kb21pbmF0b3JzLmlzVmFs
aWQoKSkgewogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6Iik7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9jay0+aW5kZXgpKQor
ICAgICAgICAgICAgaWYgKCF0aGlzLT5ibG9jayhpKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyh0aGlzLT5ibG9jayhp
KSwgYmxvY2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnBy
aW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAg
ICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmluZGV4LCBpKSkKKyAgICAgICAgICAgIGlmICgh
dGhpcy0+YmxvY2soaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBp
ZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2ssIHRoaXMtPmJsb2NrKGkpKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKICAg
ICAgICAgfQpAQCAtNjM1LDczICs2NDAsMzAgQEAgdm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExv
Y2FsKEJhc2ljQmxvYwogICAgIH0KIH0KIAotLy8gVXRpbGl0aWVzIGZvciBwcmUtIGFuZCBwb3N0
LW9yZGVyIHRyYXZlcnNhbHMuCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgdm9pZCBhZGRGb3JQcmVP
cmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQsIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+
JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBp
ZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHJl
c3VsdC5hcHBlbmQoYmxvY2spOwotICAgIHdvcmtsaXN0LmFwcGVuZChibG9jayk7Ci0gICAgc2Vl
bi5zZXQoYmxvY2stPmluZGV4KTsKLX0KLQotZW51bSBQb3N0T3JkZXJUYXNrS2luZCB7Ci0gICAg
UG9zdE9yZGVyRmlyc3RWaXNpdCwKLSAgICBQb3N0T3JkZXJBZGRUb1Jlc3VsdAotfTsKLQotc3Ry
dWN0IFBvc3RPcmRlclRhc2sgewotICAgIFBvc3RPcmRlclRhc2soQmFzaWNCbG9jayogYmxvY2sg
PSBudWxscHRyLCBQb3N0T3JkZXJUYXNrS2luZCBraW5kID0gUG9zdE9yZGVyRmlyc3RWaXNpdCkK
LSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgICAgICAsIG1fa2luZChraW5kKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgQmFzaWNCbG9jayogbV9ibG9jazsKLSAgICBQb3N0T3JkZXJUYXNr
S2luZCBtX2tpbmQ7Ci19OwotCi1pbmxpbmUgdm9pZCBhZGRGb3JQb3N0T3JkZXIoVmVjdG9yPFBv
c3RPcmRlclRhc2ssIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2VlbiwgQmFzaWNCbG9jayog
YmxvY2spCi17Ci0gICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayhibG9jaywgUG9zdE9y
ZGVyRmlyc3RWaXNpdCkpOwotICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Ci19Ci0KLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCiB2b2lkIEdyYXBoOjpnZXRCbG9ja3NJblByZU9yZGVyKFZl
Y3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiB3b3JrbGlzdDsKLSAgICBCaXRWZWN0b3Igc2VlbjsKLSAgICBhZGRGb3JQcmVPcmRlcihyZXN1
bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jaygwKSk7Ci0gICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50YWtlTGFzdCgp
OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9jaygw
KSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICBhZGRGb3JQcmVPcmRlcihy
ZXN1bHQsIHdvcmtsaXN0LCBzZWVuLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQogfQogCiB2b2lkIEdy
YXBoOjpnZXRCbG9ja3NJblBvc3RPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7
Ci0gICAgVmVjdG9yPFBvc3RPcmRlclRhc2ssIDE2PiB3b3JrbGlzdDsKLSAgICBCaXRWZWN0b3Ig
c2VlbjsKLSAgICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAg
ICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBQb3N0T3JkZXJUYXNrIHRh
c2sgPSB3b3JrbGlzdC50YWtlTGFzdCgpOwotICAgICAgICBzd2l0Y2ggKHRhc2subV9raW5kKSB7
Ci0gICAgICAgIGNhc2UgUG9zdE9yZGVyRmlyc3RWaXNpdDoKLSAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChQb3N0T3JkZXJUYXNrKHRhc2subV9ibG9jaywgUG9zdE9yZGVyQWRkVG9SZXN1bHQp
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhc2subV9ibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBpLS07KQotICAgICAgICAgICAgICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwg
c2VlbiwgdGFzay5tX2Jsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgIFBvc3RPcmRlckJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CisgICAgd2hpbGUg
KEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2gg
KGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIHdvcmts
aXN0LnB1c2hQb3N0KGl0ZW0uYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aXRlbS5ibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goaXRlbS5ibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFBvc3RPcmRlckFkZFRvUmVzdWx0OgotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh0YXNrLm1fYmxvY2spOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaXRlbS5ibG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9u
UG9pbnRJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUg
IkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0lu
c2VydGlvblNldC5oIgpAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBB
U1NFUlQobV9ncmFwaC5tX2Zvcm0gIT0gU1NBKTsKICAgICAgICAgCi0gICAgICAgIEJpdFZlY3Rv
ciBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKKyAgICAgICAgQmxvY2tTZXQgYmxv
Y2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHM7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKQEAgLTYzLDE3ICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBOb3RlOiB0
aGlzIGFzc3VtZXMgdGhhdCBjb250cm9sIGZsb3cgb2NjdXJzIGF0IGJ5dGVjb2RlIGluc3RydWN0
aW9uIGJvdW5kYXJpZXMuCiAgICAgICAgICAgICBpZiAobV9vcmlnaW5UaGF0SGFkRmlyZS5pc1Nl
dCgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nl
c3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tzVGhhdE5lZWRJbnZhbGlk
YXRpb25Qb2ludHMuc2V0KGJsb2NrLT5zdWNjZXNzb3IoaSktPmluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuYWRkKGJsb2NrLT5zdWNj
ZXNzb3IoaSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0lu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9p
bnRzLmdldChibG9ja0luZGV4KSkKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKworICAgICAgICAgICAgaWYgKCFibG9ja3NUaGF0TmVl
ZEludmFsaWRhdGlvblBvaW50cy5jb250YWlucyhibG9jaykpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGluc2VydEludmFsaWRhdGlvbkNo
ZWNrKDAsIGJsb2NrLT5hdCgwKSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YWl2ZURvbWluYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTmFpdmVEb21pbmF0b3Jz
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K05haXZlRG9taW5hdG9yczo6TmFpdmVEb21pbmF0b3JzKCkKK3sKK30KKworTmFpdmVEb21pbmF0
b3JzOjp+TmFpdmVEb21pbmF0b3JzKCkKK3sKK30KKwordm9pZCBOYWl2ZURvbWluYXRvcnM6OmNv
bXB1dGUoR3JhcGgmIGdyYXBoKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRv
bWluYXRvciBzb2x2ZXIuCisgICAgCisgICAgQVNTRVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNl
c3NvcnMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5u
dW1CbG9ja3MoKTsKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgZGVuc2Ug
ZG9taW5hbmNlIG1hdHJpeC4gCisgICAgaWYgKG51bUJsb2NrcyA+IG1fcmVzdWx0cy5zaXplKCkp
IHsKKyAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtQmxvY2tzOyBpLS07KQorICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnJlc2l6
ZShudW1CbG9ja3MpOworICAgICAgICBtX3NjcmF0Y2gucmVzaXplKG51bUJsb2Nrcyk7CisgICAg
fQorCisgICAgLy8gV2Uga25vdyB0aGF0IHRoZSBlbnRyeSBibG9jayBpcyBvbmx5IGRvbWluYXRl
ZCBieSBpdHNlbGYuCisgICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxsKCk7CisgICAgbV9yZXN1bHRz
WzBdLnNldCgwKTsKKworICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3MuCisgICAg
bV9zY3JhdGNoLmNsZWFyQWxsKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBp
LS07KSB7CisgICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbV9zY3JhdGNoLnNldChpKTsKKyAgICB9CisgICAgCisgICAgLy8gTWFyayBh
bGwgbm9kZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgeworICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8
IGdyYXBoLmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9y
ZXN1bHRzW2ldLmNsZWFyQWxsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcmVzdWx0
c1tpXS5zZXQobV9zY3JhdGNoKTsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5h
dGUgbm9kZXMgdGhhdCBhcmUgbm90IGRvbWluYXRvci4KKyAgICBib29sIGNoYW5nZWQ7CisgICAg
ZG8geworICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIC8vIFBydW5lIGRvbWluYXRv
cnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IG51bUJsb2NrczsgKytpKQorICAgICAgICAgICAgY2hhbmdlZCB8
PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworCisgICAgICAgIGlmICghY2hhbmdlZCkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4gYWxsIG5v
biBlbnRyeSBibG9ja3M6IGJhY2t3YXJkIHNjYW4uCisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGdyYXBoLCBpKTsKKyAgICB9IHdoaWxlIChj
aGFuZ2VkKTsKK30KKworYm9vbCBOYWl2ZURvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyhHcmFw
aCYgZ3JhcGgsIEJsb2NrSW5kZXggaWR4KQoreworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3Jh
cGguYmxvY2soaWR4KTsKKworICAgIGlmICghYmxvY2sgfHwgYmxvY2stPnByZWRlY2Vzc29ycy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZpbmQgdGhlIGludGVy
c2VjdGlvbiBvZiBkb20ocHJlZHMpLgorICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2Nr
LT5wcmVkZWNlc3NvcnNbMF0tPmluZGV4XSk7CisgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2st
PnByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQorICAgICAgICBtX3NjcmF0Y2guZmlsdGVy
KG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzW2pdLT5pbmRleF0pOworCisgICAgLy8gVGhl
IGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3NjcmF0Y2guc2V0KGlk
eCk7CisKKyAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsK
K30KKwordm9pZCBOYWl2ZURvbWluYXRvcnM6OmR1bXAoR3JhcGgmIGdyYXBoLCBQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9j
ayAiLCAqYmxvY2ssICI6Iik7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBvdGhlckluZGV4ID0g
MDsgb3RoZXJJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK290aGVySW5kZXgpIHsKKyAgICAg
ICAgICAgIGlmICghZG9taW5hdGVzKGJsb2NrLT5pbmRleCwgb3RoZXJJbmRleCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgb3RoZXJJbmRl
eCk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJcbiIpOworICAgIH0KK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0
b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR05haXZlRG9taW5h
dG9yc19oCisjZGVmaW5lIERGR05haXZlRG9taW5hdG9yc19oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBUaGlzIGNsYXNzIGlzIG9ubHkgdXNlZCBm
b3IgdmFsaWRhdGluZyB0aGUgcmVhbCBkb21pbmF0b3JzIGltcGxlbWVudGF0aW9uLgorCitjbGFz
cyBOYWl2ZURvbWluYXRvcnMgeworcHVibGljOgorICAgIE5haXZlRG9taW5hdG9ycygpOworICAg
IH5OYWl2ZURvbWluYXRvcnMoKTsKKyAgICAKKyAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKKyAg
ICAKKyAgICBib29sIGRvbWluYXRlcyhCbG9ja0luZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwg
dG8tPmluZGV4KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKEdyYXBoJiwgUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgYm9vbCBwcnVuZURvbWluYXRvcnMoR3Jh
cGgmLCBCbG9ja0luZGV4KTsKKyAgICAKKyAgICBWZWN0b3I8RmFzdEJpdFZlY3Rvcj4gbV9yZXN1
bHRzOyAvLyBGb3IgZWFjaCBibG9jaywgdGhlIGJpdHZlY3RvciBvZiBibG9ja3MgdGhhdCBkb21p
bmF0ZSBpdC4KKyAgICBGYXN0Qml0VmVjdG9yIG1fc2NyYXRjaDsgLy8gQSB0ZW1wb3JhcnkgYml0
dmVjdG9yIHdpdGggYml0IGZvciBlYWNoIGJsb2NrLiBXZSByZWN5Y2xlIHRoaXMgdG8gc2F2ZSBu
ZXcvZGVsZXRlcy4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTmFpdmVEb21pbmF0b3JzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJldmlz
aW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3Bz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTEgQEAgdm9pZCBOYXR1cmFsTG9vcDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogTmF0dXJhbExvb3BzOjpOYXR1cmFsTG9vcHMoKSB7IH0K
IE5hdHVyYWxMb29wczo6fk5hdHVyYWxMb29wcygpIHsgfQogCit2b2lkIE5hdHVyYWxMb29wczo6
Y29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYgZ3JhcGgpCit7CisgICAgZ3JhcGgubV9kb21pbmF0
b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShncmFwaCk7Cit9CisKIHZvaWQgTmF0dXJhbExvb3BzOjpj
b21wdXRlKEdyYXBoJiBncmFwaCkKIHsKICAgICAvLyBJbXBsZW1lbnQgdGhlIGNsYXNzaWMgZG9t
aW5hdG9yLWJhc2VkIG5hdHVyYWwgbG9vcCBmaW5kZXIuIFRoZSBmaXJzdApAQCAtNTcsMTEgKzYy
LDkgQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgIAogICAg
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKLSAgICBncmFwaC5tX2Rv
bWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKLSAgICAKICAgICBpZiAodmVyYm9z
ZSkgewogICAgICAgICBkYXRhTG9nKCJEb21pbmF0b3JzOlxuIik7Ci0gICAgICAgIGdyYXBoLm1f
ZG9taW5hdG9ycy5kdW1wKGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBncmFwaC5t
X2RvbWluYXRvcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwogICAgIH0KICAgICAKICAgICBtX2xv
b3BzLnJlc2l6ZSgwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJh
bExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1
cmFsTG9vcHMuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBwdWJs
aWM6CiAgICAgTmF0dXJhbExvb3BzKCk7CiAgICAgfk5hdHVyYWxMb29wcygpOwogICAgIAorICAg
IHZvaWQgY29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYpOwogICAgIHZvaWQgY29tcHV0ZShHcmFw
aCYpOwogICAgIAogICAgIHVuc2lnbmVkIG51bUxvb3BzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE3LDI0ICsxMTcsMzEgQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJu
ICEhKGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBxdWlja1NldChzaXplX3QgYml0KQorICAgIGJvb2wgcXVpY2tTZXQoc2l6ZV90IGJp
dCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGJpdCA8
IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldIHw9IChzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsK
KyAgICAgICAgdWludHB0cl90JiB3b3JkID0gYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV07
CisgICAgICAgIHVpbnRwdHJfdCBtYXNrID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAo
Yml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhISh3
b3JkICYgbWFzayk7CisgICAgICAgIHdvcmQgfD0gbWFzazsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBxdWlja0NsZWFyKHNpemVfdCBiaXQpCisgICAgYm9v
bCBxdWlja0NsZWFyKHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihiaXQgPCBzaXplKCkpOwotICAgICAgICBiaXRzKClbYml0IC8gYml0
c0luUG9pbnRlcigpXSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChi
aXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAgICB1aW50cHRyX3QmIHdvcmQgPSBiaXRzKClb
Yml0IC8gYml0c0luUG9pbnRlcigpXTsKKyAgICAgICAgdWludHB0cl90IG1hc2sgPSBzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpOworICAg
ICAgICBib29sIHJlc3VsdCA9ICEhKHdvcmQgJiBtYXNrKTsKKyAgICAgICAgd29yZCAmPSB+bWFz
azsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBxdWlja1Nl
dChzaXplX3QgYml0LCBib29sIHZhbHVlKQorICAgIGJvb2wgcXVpY2tTZXQoc2l6ZV90IGJpdCwg
Ym9vbCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHF1aWNr
U2V0KGJpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHF1aWNrQ2xlYXIoYml0KTsKKyAg
ICAgICAgICAgIHJldHVybiBxdWlja1NldChiaXQpOworICAgICAgICByZXR1cm4gcXVpY2tDbGVh
cihiaXQpOwogICAgIH0KICAgICAKICAgICBib29sIGdldChzaXplX3QgYml0KSBjb25zdApAQCAt
MTQ0LDMxICsxNTEsMzAgQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIHF1aWNrR2V0KGJpdCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAgYm9vbCBzZXQoc2l6
ZV90IGJpdCkKICAgICB7CiAgICAgICAgIGVuc3VyZVNpemUoYml0ICsgMSk7Ci0gICAgICAgIHF1
aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja1NldChiaXQpOwogICAgIH0KIAotICAg
IHZvaWQgZW5zdXJlU2l6ZUFuZFNldChzaXplX3QgYml0LCBzaXplX3Qgc2l6ZSkKKyAgICBib29s
IGVuc3VyZVNpemVBbmRTZXQoc2l6ZV90IGJpdCwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAg
ICBlbnN1cmVTaXplKHNpemUpOwotICAgICAgICBxdWlja1NldChiaXQpOworICAgICAgICByZXR1
cm4gcXVpY2tTZXQoYml0KTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisg
ICAgYm9vbCBjbGVhcihzaXplX3QgYml0KQogICAgIHsKICAgICAgICAgaWYgKGJpdCA+PSBzaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHF1aWNrQ2xlYXIoYml0KTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHF1aWNrQ2xlYXIoYml0KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKKyAgICBib29s
IHNldChzaXplX3QgYml0LCBib29sIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQot
ICAgICAgICAgICAgc2V0KGJpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsZWFyKGJp
dCk7CisgICAgICAgICAgICByZXR1cm4gc2V0KGJpdCk7CisgICAgICAgIHJldHVybiBjbGVhcihi
aXQpOwogICAgIH0KICAgICAKICAgICB2b2lkIG1lcmdlKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237268</attachid>
            <date>2014-08-27 16:51:57 -0700</date>
            <delta_ts>2014-08-27 20:32:53 -0700</delta_ts>
            <desc>more progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70050</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDYgKzEyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKICAgICBkZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisgICAgZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCiAgICAg
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTE3NSw2ICsxNzYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAorICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1dvcmtsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiIC8+CkBAIC00MjEs
NiArNDIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWF5RXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2
ZURvbWluYXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNw
cCIgLz4KQEAgLTk5Myw2ICs5OTUsMTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmxvY2tNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja01hcElubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja1dvcmtsaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxv
Y2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJl
Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkBAIC0xMDU2LDYgKzEwNjIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYg
KzQ5OCwxMyBAQAogCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDEwMTgx
NDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1w
UmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMzE0MTExODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi87
IH07CiAJCTBGQzMxNDE1MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovOyB9OworCQkwRkMzQ0NGQzE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZE
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAv
KiBERkdCbG9ja01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y3
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0Y4MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNw
cCAqLzsgfTsKKwkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y5
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJB
IC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21p
bmF0b3JzLmNwcCAqLzsgfTsKKwkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkRFMTdD
RDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMxN0NEODc3ODAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4
Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAxN0NEODc4RjAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
QEAgLTI0MjEsNiArMjQyOCwxMyBAQAogCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTExODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZW1wUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tNYXAuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNjE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrTWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNzE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmxvY2tTZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9j
a1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYWl2ZURvbWlu
YXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmFpdmVEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4
MTksNiArNDgzMywxMSBAQAogCQkJCUE3MEIwODMxMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5h
cnlTd2l0Y2guaCAqLywKIAkJCQlBN0Q4OUNFNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
bG9ja0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcC5oICovLAorCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCAqLywKKwkJCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tTZXQuaCAqLywKKwkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3Jr
bGlzdC5jcHAgKi8sCisJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTQ5MzAsNiArNDk0OSw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFD
NzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCisJCQkJMEZDM0NDRkIxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUxRTE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC01ODQyLDYgKzU4NjMsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVD
QjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5
MTcsNiArNTkzOSw3IEBACiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGQzE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzMTcsNiArNjM0MCw3IEBACiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyOSw2ICs2MzUzLDcgQEAKIAkJCQkw
RjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJD
RTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYw
MEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mzc0LDYgKzYzOTksNyBAQAog
CQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFF
OTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTcsNiArNzMyMyw3IEBACiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTA1QUJENTE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Nyw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDM0NDRkYx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5h
bHlzaXMuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChtX3ZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAv
LyBJdCdzIGJlc3QgdG8gcnVuIGRlcGVuZGVudCBhbmFseXNlcyBmcm9tIHRoaXMgbWV0aG9kLgor
ICAgICAgICBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmNvbXB1dGVEZXBlbmRlbmNpZXMoZ3JhcGgp
OwogICAgICAgICAvLyBTZXQgdG8gdHJ1ZSBlYXJseSwgc2luY2UgdGhlIGFuYWx5c2lzIG1heSBj
aG9vc2UgdG8gY2FsbCBpdHMgb3duIG1ldGhvZHMgaW4KICAgICAgICAgLy8gY29tcHV0ZSgpIGFu
ZCBpdCBtYXkgd2FudCB0byBBU1NFUlQoKSB2YWxpZGl0eSBpbiB0aG9zZSBtZXRob2RzLgogICAg
ICAgICBtX3ZhbGlkID0gdHJ1ZTsKQEAgLTYxLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CiAKKyAgICAvLyBPdmVy
cmlkZSB0aGlzIHRvIGNvbXB1dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCisgICAgLy8g
TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dAorICAgIC8vIGl0IG1ha2VzIGRlYnVn
IGR1bXBzIGluIGNhc2VzIG9mIGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBh
bmFseXNpcyB3b3VsZG4ndCB5ZXQKKyAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgor
ICAgIHZvaWQgY29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYpIHsgfQorCiBwcml2YXRlOgogICAg
IGJvb2wgbV92YWxpZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja01hcF9oCisjZGVm
aW5lIERGR0Jsb2NrTWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tNYXAgeworcHVibGlj
OgorICAgIEJsb2NrTWFwKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrTWFwKEdyYXBo
Jik7CisgICAgCisgICAgQmxvY2tJbmRleCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci5zaXplKCk7CisgICAgfQorICAgIAorICAgIFQmIGF0SW5kZXgoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5k
ZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsK
KyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1f
dmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja01hcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwSW5saW5lc19oCisjZGVmaW5lIERG
R0Jsb2NrTWFwSW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQmxvY2tNYXA8VD46OkJsb2Nr
TWFwKEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX3ZlY3Rvci5yZXNpemUoZ3JhcGgubnVtQmxvY2tz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja1NldF9oCisjZGVmaW5lIERGR0Jsb2NrU2V0X2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJsb2NrU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1Nl
dCgpIHsgfQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBibG9jayB3YXMgYWRkZWQs
IGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBhZGQoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChibG9jay0+aW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmdldChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1Nl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmts
aXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQmxvY2tXb3JrbGlzdDo6QmxvY2tXb3JrbGlzdCgpCit7Cit9CisKK0Jsb2NrV29y
a2xpc3Q6On5CbG9ja1dvcmtsaXN0KCkKK3sKK30KKworYm9vbCBCbG9ja1dvcmtsaXN0OjpwdXNo
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmICghbV9zZWVuLmFkZChibG9jaykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChibG9jayk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrV29ya2xpc3Q6OnBvcCgpCit7Cisg
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOworfQorCitQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCkKK3sKK30KKworUG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdDo6flBvc3RPcmRlckJsb2NrV29ya2xpc3QoKQoreworfQorCitib29sIFBvc3RPcmRlckJs
b2NrV29ya2xpc3Q6OnB1c2hQcmUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIG1f
d29ya2xpc3QucHVzaChibG9jaywgUHJlT3JkZXIpOworfQorCit2b2lkIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Q6OnB1c2hQb3N0KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29ya2xpc3Qu
Zm9yY2VQdXNoKGJsb2NrLCBQb3N0T3JkZXIpOworfQorCitCbG9ja1dpdGhPcmRlciBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIEJsb2NrV2l0aDxWaXNpdE9yZGVyPiByZXN1
bHQgPSBtX3dvcmtsaXN0LnBvcCgpOworICAgIHJldHVybiBCbG9ja1dpdGhPcmRlcihyZXN1bHQu
YmxvY2ssIHJlc3VsdC5kYXRhKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIERGR0Jsb2NrV29ya2xpc3RfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK2NsYXNzIEJsb2NrV29y
a2xpc3QgeworcHVibGljOgorICAgIEJsb2NrV29ya2xpc3QoKTsKKyAgICB+QmxvY2tXb3JrbGlz
dCgpOworICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Jsb2NrKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgYmxvY2sgYmVmb3JlLgorICAgIAorICAgIGJvb2wg
bm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBwb3AoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IG1fc3RhY2s7Cit9OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJsb2NrV2l0aCB7CisgICAgQmxvY2tXaXRo
KCkKKyAgICAgICAgOiBibG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tXaXRoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgICAgICA6IGJsb2Nr
KGJsb2NrKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5
cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9w
ZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jazsKKyAgICBUIGRhdGE7Cit9Owor
CisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29t
ZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9y
Y2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVl
biBzZWVuLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0KCkgeyB9CisgICAgCisgICAg
dm9pZCBmb3JjZVB1c2goY29uc3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAgICAg
IG1fc3RhY2suYXBwZW5kKGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3JjZVB1c2go
QmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAgeworICAgICAgICBmb3JjZVB1
c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHVz
aChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NlZW4u
YWRkKGVudHJ5LmJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGZvcmNlUHVzaChlbnRyeSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIHB1c2goQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gcHVzaChCbG9ja1dpdGg8VD4oYmxvY2ssIGRhdGEpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX3N0YWNrLmlzRW1w
dHkoKTsgfQorICAgIAorICAgIEJsb2NrV2l0aDxUPiBwb3AoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIEJsb2NrV2l0aDxUPigpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxhc3QoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAgIFZlY3RvcjxCbG9ja1dpdGg8VD4+IG1f
c3RhY2s7Cit9OworCitlbnVtIFZpc2l0T3JkZXIgeworICAgIFByZU9yZGVyLAorICAgIFBvc3RP
cmRlcgorfTsKKworc3RydWN0IEJsb2NrV2l0aE9yZGVyIHsKKyAgICBCbG9ja1dpdGhPcmRlcigp
CisgICAgICAgIDogYmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBvcmRlcihQcmVPcmRlcikKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aE9yZGVyKEJhc2ljQmxvY2sqIGJsb2NrLCBW
aXNpdE9yZGVyIG9yZGVyKQorICAgICAgICA6IGJsb2NrKGJsb2NrKQorICAgICAgICAsIG9yZGVy
KG9yZGVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRlZiB2b2lkKiAoQmxvY2tXaXRo
T3JkZXI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyByZWludGVycHJl
dF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAgfQorCisgICAg
QmFzaWNCbG9jayogYmxvY2s7CisgICAgVmlzaXRPcmRlciBvcmRlcjsKK307CisKKy8vIEJsb2Nr
IHdvcmtsaXN0IHN1aXRhYmxlIGZvciBwb3N0LW9yZGVyIHRyYXZlcnNhbC4KK2NsYXNzIFBvc3RP
cmRlckJsb2NrV29ya2xpc3QgeworcHVibGljOgorICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qo
KTsKKyAgICB+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCgpOworICAgIAorICAgIGJvb2wgcHVzaFBy
ZShCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBwdXNoUG9zdChCYXNpY0Jsb2NrKik7CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVyID0gUHJlT3Jk
ZXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9yZGVyKSB7CisgICAgICAgIGNhc2UgUHJlT3Jk
ZXI6CisgICAgICAgICAgICByZXR1cm4gcHVzaFByZShibG9jayk7CisgICAgICAgIGNhc2UgUG9z
dE9yZGVyOgorICAgICAgICAgICAgcHVzaFBvc3QoYmxvY2spOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHB1c2goY29uc3QgQmxvY2tX
aXRoT3JkZXImIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaChkYXRhLmJsb2NrLCBk
YXRhLm9yZGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fd29ya2xpc3Qubm90RW1wdHkoKTsgfQorICAgIEJsb2NrV2l0aE9yZGVyIHBvcCgpOwor
Citwcml2YXRlOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDxWaXNpdE9yZGVyPiBtX3dvcmts
aXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdB
YnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRl
ICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCkBAIC0zNjQsNiArMzY1LDcgQEAgY2xhc3MgR2xvYmFs
Q1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEdsb2JhbENTRVBoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImdsb2JhbCBjb21tb24gc3ViZXhw
cmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9pbXB1cmVEYXRhTWFwKGdyYXBoKQog
ICAgIHsKICAgICB9CiAgICAgCkBAIC0zNzcsMTMgKzM3OSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIobV9wcmVPcmRlcik7CiAgICAg
ICAgIAotICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXplKG1fZ3JhcGgubnVtQmxvY2tzKCkp
OwotICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGF0IGdldHMgY2xvYmJl
cmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0aGUgcHJlT3JkZXIgbGlzdAogICAg
ICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9wcmVPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3ByZU9y
ZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Js
b2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFw
W21fYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBtX2Jsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgICAgICBhZGRXcml0ZXMobV9ncmFw
aCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRhLT53cml0ZXMpOwogICAgICAg
ICB9CkBAIC00MDcsNyArNDA3LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9wdXJlVmFs
dWVzLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ltcHVy
ZURhdGFNYXAuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBpID0gbV9p
bXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOwogICAgICAgICAgICAgbV9pbXB1cmVEYXRhTWFw
W2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQyMyw3ICs0MjMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVPcmRl
ci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgbV9ibG9jayA9IG1fcHJlT3JkZXJbaV07Ci0g
ICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2stPmluZGV4
XTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9ja107
CiAgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNTYyLDEyICs1NjIsMTIgQEAgcHVibGljOgogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgICBTZWFyY2hpbmcgaW4gYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAgICAg
IEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5kZXhdOwor
ICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9pbXB1cmVEYXRhTWFwW2Jsb2Nr
XTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgcmVxdWlyZSBzdHJpY3QgZG9taW5h
dGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBzZWUgdGhpbmdzIGluIG91ciBvd24gYmxvY2sg
aWYKICAgICAgICAgICAgIC8vIHRoZXkgY2FtZSAqYWZ0ZXIqIG91ciBwb3NpdGlvbiBpbiB0aGUg
YmxvY2suIENsZWFybHksIHdoaWxlIG91ciBibG9jayBkb21pbmF0ZXMKICAgICAgICAgICAgIC8v
IGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUgYmxvY2sgYWZ0ZXIgdXMgZG9uJ3QgZG9taW5hdGUg
dXMuCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2Nr
LCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2RvbWluYXRvcnMuc3RyaWN0bHlEb21pbmF0ZXMoYmxvY2ssIG1fYmxvY2spKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwpAQCAtNjEyLDcgKzYxMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHJlZHVjdGlvbiBpbiBjb21waWxlIHRpbWUgd291bGQg
d2FycmFudCB0aGUgaW5jcmVhc2UgaW4gY29tcGxleGl0eSwgdGhvdWdoLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODc2CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKLSAgICAgICAgICAgIG1faW1wdXJlRGF0
YU1hcFtibG9jay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsK
KyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9ja10uYXZhaWxhYmxlQXRUYWlsLmFkZChs
b2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICBtX2ltcHVyZURhdGEtPmF2YWlsYWJsZUF0VGFpbC5h
ZGQobG9jYXRpb24sIG1hdGNoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBtYXRjaDsKQEAg
LTY1NCw3ICs2NTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX3ByZU9y
ZGVyOwogCiAgICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsKLSAgICBWZWN0b3I8SW1wdXJl
QmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CisgICAgQmxvY2tNYXA8SW1wdXJlQmxvY2tEYXRh
PiBtX2ltcHVyZURhdGFNYXA7CiAgICAgCiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBO
b2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDExICsyOCwxNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNs
dWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdOYWl2ZURvbWluYXRvcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgdXNlUGF0aENvbXByZXNzaW9uID0gdHJ1ZTsKKwog
RG9taW5hdG9yczo6RG9taW5hdG9ycygpCiB7CiB9CkBAIC00MSw5MSArNDcsMzgxIEBAIERvbWlu
YXRvcnM6On5Eb21pbmF0b3JzKCkKIHsKIH0KIAotdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdy
YXBoJiBncmFwaCkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBuYWl2ZSBkb21pbmF0b3Ig
c29sdmVyLgorbmFtZXNwYWNlIHsKKworLy8gVGhpcyBpbXBsZW1lbnRzIExlbmdhdWVyIGFuZCBU
YXJqYW4ncyAiQSBGYXN0IEFsZ29yaXRobSBmb3IgRmluZGluZyBEb21pbmF0b3JzIGluIGEgRmxv
d2dyYXBoIgorLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUgInNpbXBsZSIgaW1wbGVtZW50
YXRpb24gb2YgTElOSyBhbmQgRVZBTC4gVGhlIGZ1bGwgcGFwZXIgaXMgbGlua2VkCisvLyBiZWxv
dzsgdGhpcyBjb2RlIGF0dGVtcHRzIHRvIGNsb3NlbHkgZm9sbG93IHRoZSBhbGdvcml0aG0gYXMg
aXQgaXMgcHJlc2VudGVkIGluIHRoZSBwYXBlcjsgaW4KKy8vIHBhcnRpY3VsYXIgc2VjdGlvbnMg
MyBhbmQgNC4KKy8vIGh0dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvY291cnNlcy9hcmNoaXZl
L2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9hJTIwZmFzdCUyMGFsZ29yaXRobSUyMGZvciUyMGZpbmRp
bmcucGRmCisKK2NsYXNzIExlbmdhdWVyVGFyamFuIHsKK3B1YmxpYzoKKyAgICBMZW5nYXVlclRh
cmphbihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBt
X2RhdGEoZ3JhcGgpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2RhdGFb
YmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21wdXRlKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiUGVyZm9ybWluZyBMZW5nYXVlci1UYXJqYW4gZG9taW5hdG9yIGNhbGN1bGF0aW9uLi4uXG4i
KTsKKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVEZXB0aEZpcnN0UHJlTnVtYmVyaW5nKCk7IC8v
IFN0ZXAgMS4KKyAgICAgICAgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlh
dGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMuCisgICAgICAgIGNvbXB1dGVFeHBsaWNp
dEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0LgorICAgIH0KKyAgICAKKyAgICBCYXNp
Y0Jsb2NrKiBpbW1lZGlhdGVEb21pbmF0b3IoQmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5kb207CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKQorICAgIHsKKyAgICAgICAgQmxvY2tX
b3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBoLmJsb2NrKDAp
KTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0
LnBvcCgpKSB7CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLnNlbWlOdW1iZXIgPSBtX2Jsb2Nr
QnlQcmVOdW1iZXIuc2l6ZSgpOworICAgICAgICAgICAgbV9ibG9ja0J5UHJlTnVtYmVyLmFwcGVu
ZChibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxv
Y2sgPSBibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAgICAgIGlmICghd29ya2xpc3Qu
cHVzaChzdWNjZXNzb3JCbG9jaykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIG1fZGF0YVtzdWNjZXNzb3JCbG9ja10ucGFyZW50ID0gYmxvY2s7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlU2VtaURv
bWluYXRvcnNBbmRJbXBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBjdXJyZW50UHJlTnVtYmVyID0gbV9ibG9ja0J5UHJlTnVtYmVyLnNpemUo
KTsgY3VycmVudFByZU51bWJlci0tID4gMTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ibG9ja0J5UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAg
QmxvY2tEYXRhJiBibG9ja0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTdGVwIDI6CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yQmxvY2sgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogaW50ZXJtZWRpYXRlQmxvY2sgPSBldmFsKHByZWRlY2Vzc29yQmxvY2spOworICAgICAg
ICAgICAgICAgIGJsb2NrRGF0YS5zZW1pTnVtYmVyID0gc3RkOjptaW4oCisgICAgICAgICAgICAg
ICAgICAgIG1fZGF0YVtpbnRlcm1lZGlhdGVCbG9ja10uc2VtaU51bWJlciwgYmxvY2tEYXRhLnNl
bWlOdW1iZXIpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgU2V0dGluZyBibG9jayAiLCAqYmxvY2ssICIgc2VtaSB0byAiLCAq
bV9ibG9ja0J5UHJlTnVtYmVyW2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSwgIiBiZWNhdXNlIGludGVy
bWVkaWF0ZSBibG9jayAiLCAqaW50ZXJtZWRpYXRlQmxvY2ssICIgaGFzIHNlbWkgIiwgKm1fYmxv
Y2tCeVByZU51bWJlclttX2RhdGFbaW50ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXJdLCAiLlxu
Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1bnNpZ25lZCBidWNrZXRQcmVOdW1iZXIg
PSBibG9ja0RhdGEuc2VtaU51bWJlcjsKKyAgICAgICAgICAgIEFTU0VSVChidWNrZXRQcmVOdW1i
ZXIgPD0gY3VycmVudFByZU51bWJlcik7CisgICAgICAgICAgICBtX2RhdGFbbV9ibG9ja0J5UHJl
TnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2spOworICAgICAgICAg
ICAgbGluayhibG9ja0RhdGEucGFyZW50LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFN0ZXAgMzoKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc2VtaURvbWluZWUg
OiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcG9zc2libGVEb21pbmF0b3IgPSBldmFsKHNlbWlEb21pbmVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJs
b2NrID0gIiwgKmJsb2NrLCAiLCBwYXJlbnQgPSAiLCAqYmxvY2tEYXRhLnBhcmVudCwgIiwgc2Vt
aURvbWllZSA9ICIsICpzZW1pRG9taW5lZSwgIiwgcG9zc2libGVEb21pbmF0b3IgPSAiLCAqcG9z
c2libGVEb21pbmF0b3IsICJcbiIpOworICAgICAgICAgICAgICAgIEJsb2NrRGF0YSYgc2VtaURv
bWluZWVEYXRhID0gbV9kYXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAgICBCbG9ja0Rh
dGEmIHBvc3NpYmxlRG9taW5hdG9yRGF0YSA9IG1fZGF0YVtwb3NzaWJsZURvbWluYXRvcl07Cisg
ICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2Vt
aURvbWluZWVEYXRhLnNlbWlOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgU2V0dGluZyAiLCAqc2Vt
aURvbWluZWUsICIgZG9tIHRvIHBvc3NpYmxlRG9taW5hdG9yID0gIiwgKnBvc3NpYmxlRG9taW5h
dG9yLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IHBv
c3NpYmxlRG9taW5hdG9yOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IFNldHRpbmcgIiwgKnNlbWlEb21pbmVlLCAiIGRvbSB0byBwYXJlbnQgb2YgIiwgKmJsb2NrLCAi
ID0gIiwgKmJsb2NrRGF0YS5wYXJlbnQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBzZW1p
RG9taW5lZURhdGEuZG9tID0gYmxvY2tEYXRhLnBhcmVudDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAgQVNTRVJUKGdyYXBoLmJs
b2NrKDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICB2b2lkIGNvbXB1dGVFeHBsaWNp
dEltbWVkaWF0ZURvbWluYXRvcnMoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjdXJy
ZW50UHJlTnVtYmVyID0gMTsgY3VycmVudFByZU51bWJlciA8IG1fYmxvY2tCeVByZU51bWJlci5z
aXplKCk7ICsrY3VycmVudFByZU51bWJlcikgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2Jsb2NrQnlQcmVOdW1iZXJbY3VycmVudFByZU51bWJlcl07CisgICAgICAgICAgICBC
bG9ja0RhdGEmIGJsb2NrRGF0YSA9IG1fZGF0YVtibG9ja107CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChibG9ja0RhdGEuZG9tICE9IG1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEu
c2VtaU51bWJlcl0pIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEJlY2F1c2UgZG9tIG9mICIsICpibG9jaywgIiB3YXMgbm90
ICIsICptX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdLCAiLCBzZXR0aW5n
IHRvIGRvbSBvZiAiLCAqYmxvY2tEYXRhLmRvbSwgIiA9ICIsICptX2RhdGFbYmxvY2tEYXRhLmRv
bV0uZG9tLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBibG9ja0RhdGEuZG9tID0gbV9kYXRhW2Js
b2NrRGF0YS5kb21dLmRvbTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBMZWF2aW5nIGRv
bSBvZiAiLCAqYmxvY2ssICIgYXMgIiwgKm1fYmxvY2tCeVByZU51bWJlcltibG9ja0RhdGEuc2Vt
aU51bWJlcl0sICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIAot
ICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIHZvaWQgbGlu
ayhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKKyAgICB7CisgICAgICAgIG1fZGF0
YVt0b10uYW5jZXN0b3IgPSBmcm9tOworICAgIH0KICAgICAKLSAgICAvLyBBbGxvY2F0ZSBzdG9y
YWdlIGZvciB0aGUgZGVuc2UgZG9taW5hbmNlIG1hdHJpeC4gCi0gICAgaWYgKG51bUJsb2NrcyA+
IG1fcmVzdWx0cy5zaXplKCkpIHsKLSAgICAgICAgbV9yZXN1bHRzLmdyb3cobnVtQmxvY2tzKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KQotICAgICAgICAgICAg
bV9yZXN1bHRzW2ldLnJlc2l6ZShudW1CbG9ja3MpOwotICAgICAgICBtX3NjcmF0Y2gucmVzaXpl
KG51bUJsb2Nrcyk7CisgICAgQmFzaWNCbG9jayogZXZhbChCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB7CisgICAgICAgIGlmICghbV9kYXRhW2Jsb2NrXS5hbmNlc3RvcikKKyAgICAgICAgICAgIHJl
dHVybiBibG9jazsKKyAgICAgICAgCisgICAgICAgIGlmICh1c2VQYXRoQ29tcHJlc3Npb24pIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQ7IGl0IGFsbG93cyBmb3IgTyhuIGxv
ZyBuKSB0aW1lLgorICAgICAgICAgICAgY29tcHJlc3MoYmxvY2spOworICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YVtibG9ja10ubGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgaXMgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiBvZiBFVkFMLiBJdCBkb2Vzbid0IHNjYWxl
LCBidXQgaXQncyB1c2VmdWwgZm9yIGRlYnVnZ2luZworICAgICAgICAvLyBiZWNhdXNlIGl0IGNs
b3NlbHkgZm9sbG93cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBFVkFMIHdpdGhvdXQgZG9pbmcgYW55
dGhpbmcgY2xldmVyLgorICAgICAgICBCYXNpY0Jsb2NrKiBjYW5kaWRhdGUgPSBibG9jazsKKyAg
ICAgICAgZm9yICg7IG1fZGF0YVtibG9ja10uYW5jZXN0b3I7IGJsb2NrID0gbV9kYXRhW2Jsb2Nr
XS5hbmNlc3RvcikgeworICAgICAgICAgICAgaWYgKG1fZGF0YVtibG9ja10uc2VtaU51bWJlciA8
IG1fZGF0YVtjYW5kaWRhdGVdLnNlbWlOdW1iZXIpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRl
ID0gYmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgIEV2YWwgcmV0dXJuaW5nICIsICpjYW5kaWRhdGUsICIgZm9yICIsICpi
bG9jaywgIlxuIik7CisgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcHJlc3MoQmFzaWNCbG9jayogaW5pdGlhbEJsb2NrKQorICAgIHsKKyAgICAgICAg
Ly8gVGhpcyB3YXMgbWVhbnQgdG8gYmUgYSByZWN1cnNpdmUgZnVuY3Rpb24sIGJ1dCB3ZSBkb24n
dCBsaWtlIHJlY3Vyc2lvbiBiZWNhdXNlIHdlIGRvbid0CisgICAgICAgIC8vIHdhbnQgdG8gYmxv
dyB0aGUgc3RhY2suIFRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aWxsIGNhbGwgY29tcHJlc3MoKSBy
ZWN1cnNpdmVseSBvbiB0aGUKKyAgICAgICAgLy8gYW5jZXN0b3Igb2YgYW55dGhpbmcgdGhhdCBo
YXMgYW4gYW5jZXN0b3IuIFNvLCB3ZSBwb3B1bGF0ZSBvdXIgd29ya2xpc3Qgd2l0aCB0aGUKKyAg
ICAgICAgLy8gcmVjdXJzaXZlIGFuY2VzdG9ycyBvZiBpbml0aWFsQmxvY2suIFRoZW4gd2UgcHJv
Y2VzcyB0aGUgbGlzdCBzdGFydGluZyBmcm9tIHRoZSBibG9jaworICAgICAgICAvLyB0aGF0IGlz
IGZ1cnRoZXN0IHVwIHRoZSBhbmNlc3RvciBjaGFpbi4KKyAgICAgICAgCisgICAgICAgIEJhc2lj
QmxvY2sqIGFuY2VzdG9yID0gbV9kYXRhW2luaXRpYWxCbG9ja10uYW5jZXN0b3I7CisgICAgICAg
IEFTU0VSVChhbmNlc3Rvcik7CisgICAgICAgIGlmICghbV9kYXRhW2FuY2VzdG9yXS5hbmNlc3Rv
cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMTY+IHN0YWNrOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gaW5pdGlh
bEJsb2NrOyBibG9jazsgYmxvY2sgPSBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAg
ICAgc3RhY2suYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIG9ubHkgY2Fy
ZSBhYm91dCBibG9ja3MgdGhhdCBoYXZlIGFuIGFuY2VzdG9yIHRoYXQgaGFzIGFuIGFuY2VzdG9y
LiBUaGUgbGFzdCB0d28KKyAgICAgICAgLy8gZWxlbWVudHMgaW4gdGhlIHN0YWNrIHdvbid0IHNh
dGlzZnkgdGhpcyBwcm9wZXJ0eS4KKyAgICAgICAgQVNTRVJUKHN0YWNrLnNpemUoKSA+PSAyKTsK
KyAgICAgICAgQVNTRVJUKCFtX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMV1dLmFuY2VzdG9y
KTsKKyAgICAgICAgQVNTRVJUKCFtX2RhdGFbbV9kYXRhW3N0YWNrW3N0YWNrLnNpemUoKSAtIDJd
XS5hbmNlc3Rvcl0uYW5jZXN0b3IpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhY2suc2l6ZSgpIC0gMjsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBzdGFja1tpXTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqJiBsYWJlbE9mQmxvY2sgPSBt
X2RhdGFbYmxvY2tdLmxhYmVsOworICAgICAgICAgICAgQmFzaWNCbG9jayomIGFuY2VzdG9yT2ZC
bG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3I7CisgICAgICAgICAgICBBU1NFUlQoYW5jZXN0
b3JPZkJsb2NrKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5h
bmNlc3Rvcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGxhYmVsT2ZB
bmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5sYWJlbDsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG1fZGF0YVtsYWJlbE9mQW5jZXN0b3JPZkJsb2NrXS5zZW1p
TnVtYmVyIDwKKyAgICAgICAgICAgICAgICBtX2RhdGFbbGFiZWxPZkJsb2NrXS5zZW1pTnVtYmVy
KQorICAgICAgICAgICAgICAgIGxhYmVsT2ZCbG9jayA9IGxhYmVsT2ZBbmNlc3Rvck9mQmxvY2s7
CisgICAgICAgICAgICBhbmNlc3Rvck9mQmxvY2sgPSBtX2RhdGFbYW5jZXN0b3JPZkJsb2NrXS5h
bmNlc3RvcjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFdlIGtub3cgdGhhdCB0aGUgZW50
cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1fcmVzdWx0c1swXS5j
bGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7CisgICAgc3RydWN0IEJsb2NrRGF0
YSB7CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQor
ICAgICAgICAgICAgLCBwcmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHNlbWlOdW1i
ZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAgICAg
ICAsIGxhYmVsKG51bGxwdHIpCisgICAgICAgICAgICAsIGRvbShudWxscHRyKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhcmVudDsKKyAgICAg
ICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBzZW1pTnVtYmVyOworICAg
ICAgICBCYXNpY0Jsb2NrKiBhbmNlc3RvcjsKKyAgICAgICAgQmFzaWNCbG9jayogbGFiZWw7Cisg
ICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYnVja2V0OworICAgICAgICBCYXNpY0Jsb2NrKiBk
b207CisgICAgfTsKKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxCbG9j
a0RhdGE+IG1fZGF0YTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tCeVByZU51bWJl
cjsKK307CisKK3N0cnVjdCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgVmFsaWRhdGlvbkNvbnRl
eHQoR3JhcGgmIGdyYXBoLCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQorICAgICAgICA6IGdyYXBo
KGdyYXBoKQorICAgICAgICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgcmVwb3J0RXJyb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCisgICAgeworICAgICAgICBFcnJvciBlcnJvcjsKKyAg
ICAgICAgZXJyb3IuZnJvbSA9IGZyb207CisgICAgICAgIGVycm9yLnRvID0gdG87CisgICAgICAg
IGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9yKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBoYW5kbGVFcnJvcnMoKQorICAgIHsKKyAgICAgICAgaWYg
KGVycm9ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBzdGFydENyYXNoaW5nKCk7CisgICAgICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFMSURB
VElPTiBGQUlMRUQ6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxv
ZygiRm9yIGJsb2NrIGRvbWluYXRpb24gcmVsYXRpb25zaGlwczpcbiIpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXJyb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgICAgICIgICAgIiwgcG9pbnRlckR1bXAoZXJyb3JzW2ldLmZy
b20pLCAiIC0+ICIsIHBvaW50ZXJEdW1wKGVycm9yc1tpXS50byksCisgICAgICAgICAgICAgICAg
IiAoIiwgZXJyb3JzW2ldLm1lc3NhZ2UsICIpXG4iKTsKKyAgICAgICAgfQorICAgICAgICBkYXRh
TG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJDb250cm9sIGZsb3cgZ3JhcGg6XG4iKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQmxvY2sg
IyIsIGJsb2NrSW5kZXgsICI6IHN1Y2Nlc3NvcnMgPSBbIik7CisgICAgICAgICAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgKytpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coY29tbWEsICpi
bG9jay0+c3VjY2Vzc29yKGkpKTsKKyAgICAgICAgICAgIGRhdGFMb2coIl0sIHByZWRlY2Vzc29y
cyA9IFsiKTsKKyAgICAgICAgICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCAqYmxvY2stPnByZWRlY2Vzc29yc1tp
XSk7CisgICAgICAgICAgICBkYXRhTG9nKCJdXG4iKTsKKyAgICAgICAgfQorICAgICAgICBkYXRh
TG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJMZW5nYXVlci1UYXJqYW4gRG9taW5hdG9yczpc
biIpOworICAgICAgICBkYXRhTG9nKGRvbWluYXRvcnMpOworICAgICAgICBkYXRhTG9nKCJcbiIp
OworICAgICAgICBkYXRhTG9nKCJOYWl2ZSBEb21pbmF0b3JzOlxuIik7CisgICAgICAgIG5haXZl
RG9taW5hdG9ycy5kdW1wKGdyYXBoLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICBkYXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsK
KyAgICAgICAgZ3JhcGguZHVtcCgpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICBk
YXRhTG9nKCJERkcgRE9NSU5BVE9SIFZBTElEQVRJT04gRkFJTElFRCFcbiIpOworICAgICAgICBD
UkFTSCgpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgZ3JhcGg7CisgICAgRG9taW5hdG9ycyYg
ZG9taW5hdG9yczsKKyAgICBOYWl2ZURvbWluYXRvcnMgbmFpdmVEb21pbmF0b3JzOworICAgIAor
ICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgIEJhc2ljQmxvY2sqIGZyb207CisgICAgICAgIEJh
c2ljQmxvY2sqIHRvOworICAgICAgICBjb25zdCBjaGFyKiBtZXNzYWdlOworICAgIH07CisgICAg
CisgICAgVmVjdG9yPEVycm9yPiBlcnJvcnM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKIAotICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3MuCi0gICAgbV9zY3JhdGNo
LmNsZWFyQWxsKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0g
ICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCit2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3Jh
cGgmIGdyYXBoKQoreworICAgIExlbmdhdWVyVGFyamFuIGxlbmdhdWVyVGFyamFuKGdyYXBoKTsK
KyAgICBsZW5nYXVlclRhcmphbi5jb21wdXRlKCk7CisKKyAgICBtX2RhdGEgPSBCbG9ja01hcDxC
bG9ja0RhdGE+KGdyYXBoKTsKKyAgICAKKyAgICAvLyBGcm9tIGhlcmUgd2Ugd2FudCB0byBidWls
ZCBhIHNwYW5uaW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93bndhcmQgbGlua3MgYW5k
IHdlIHdhbnQKKyAgICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMgdHJlZSB0byBjb21wdXRl
IHByZSBhbmQgcG9zdCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGRvbWluYW5jZQorICAg
IC8vIHRlc3RzLgorICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgICAgICAKKyAgICAg
ICAgQmFzaWNCbG9jayogaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4uaW1tZWRpYXRlRG9taW5h
dG9yKGJsb2NrKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrXS5pZG9tUGFyZW50ID0gaWRvbUJsb2Nr
OworICAgICAgICBpZiAoaWRvbUJsb2NrKQorICAgICAgICAgICAgbV9kYXRhW2lkb21CbG9ja10u
aWRvbUtpZHMuYXBwZW5kKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgLy8gTWFyayBhbGwgbm9k
ZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVt
QmxvY2tzOyBpLS0gPiAxOykgewotICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBo
LmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9yZXN1bHRz
W2ldLmNsZWFyQWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5z
ZXQobV9zY3JhdGNoKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRpdmVseSBlbGltaW5hdGUgbm9k
ZXMgdGhhdCBhcmUgbm90IGRvbWluYXRvci4KLSAgICBib29sIGNoYW5nZWQ7Ci0gICAgZG8gewot
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIC8vIFBydW5lIGRvbWluYXRvcnMgaW4g
YWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IG51bUJsb2NrczsgKytpKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVu
ZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotCi0gICAgICAgIGlmICghY2hhbmdlZCkKKyAgICB1bnNp
Z25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0UG9zdE51bWJlciA9IDA7
CisgICAgCisgICAgLy8gUGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3QgYmVjYXVzZSB3ZSBhcmUg
Z3VhcmFudGVlZCB0byBzZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2UgYW55d2F5LgorICAgIFZl
Y3RvcjxCbG9ja1dpdGhPcmRlcj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKEJsb2Nr
V2l0aE9yZGVyKGdyYXBoLmJsb2NrKDApLCBQcmVPcmRlcikpOworICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC50
YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBQ
cmVPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5wcmVOdW1iZXIgPSBuZXh0
UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIo
aXRlbS5ibG9jaywgUG9zdE9yZGVyKSk7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGtp
ZCA6IG1fZGF0YVtpdGVtLmJsb2NrXS5pZG9tS2lkcykKKyAgICAgICAgICAgICAgICB3b3JrbGlz
dC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoa2lkLCBQcmVPcmRlcikpOwogICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2Nr
czogYmFja3dhcmQgc2Nhbi4KLSAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQotICAgICAgICAgICAgY2hhbmdlZCB8
PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAg
ICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5wb3N0
TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIC8v
IENoZWNrIG91ciBkb21pbmF0b3IgY2FsY3VsYXRpb246CisgICAgICAgIC8vIDEpIENoZWNrIHRo
YXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNhbWUgYXMgYSBuYWl2ZSBh
bmNlc3RyeSB0ZXN0LgorICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91ciBub3Rpb24gb2Ygd2hv
IGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChub3QKKyAgICAgICAgLy8g
ICAgTGVuZ2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24uCisgICAgICAgIAorICAg
ICAgICBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KGdyYXBoLCAqdGhpcyk7CisgICAgICAgIGNv
bnRleHQubmFpdmVEb21pbmF0b3JzLmNvbXB1dGUoZ3JhcGgpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGZyb21C
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tQmxvY2sgPSBncmFw
aC5ibG9jayhmcm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWZyb21CbG9jayB8fCBt
X2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggdG9CbG9ja0luZGV4ID0gZ3Jh
cGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHRvQmxvY2sgPSBncmFwaC5ibG9jayh0b0Jsb2NrSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVtYmVyID09IFVJTlRfTUFY
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9jaykgIT0gbmFpdmVEb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJSYW5nZS1iYXNlZCBkb21pbmF0aW9uIGNo
ZWNrIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMoZnJvbUJsb2Nr
LCB0b0Jsb2NrKSAhPSBjb250ZXh0Lm5haXZlRG9taW5hdG9ycy5kb21pbmF0ZXMoZnJvbUJsb2Nr
LCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9t
QmxvY2ssIHRvQmxvY2ssICJMZW5nYXVlci1UYXJqYW4gZG9taW5hdGlvbiBpcyBicm9rZW4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29udGV4dC5oYW5k
bGVFcnJvcnMoKTsKKyAgICB9CiB9CiAKLWJvb2wgRG9taW5hdG9yczo6cHJ1bmVEb21pbmF0b3Jz
KEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCitib29sIERvbWluYXRvcnM6Om5haXZlRG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogewotICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsKLQotICAgIGlmICghYmxvY2sgfHwg
YmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20ocHJlZHMpLgotICAgIG1fc2NyYXRj
aC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmluZGV4XSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQotICAg
ICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzW2pdLT5p
bmRleF0pOwotCi0gICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5hdGVkIGJ5IGl0c2VsZi4K
LSAgICBtX3NjcmF0Y2guc2V0KGlkeCk7Ci0KLSAgICByZXR1cm4gbV9yZXN1bHRzW2lkeF0uc2V0
QW5kQ2hlY2sobV9zY3JhdGNoKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrID0gdG87IGJs
b2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkgeworICAgICAgICBpZiAoYmxv
Y2sgPT0gZnJvbSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgsIFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit2b2lkIERvbWluYXRvcnM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCisg
ICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIgICAgTm90IFZhbGlkLlxu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVyID09IFVJTlRfTUFYKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91dC5wcmludCgiICAgIEJsb2NrICIsICpi
bG9jaywgIjoiKTsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG90aGVySW5kZXggPSAwOyBvdGhl
ckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRleCkgewotICAgICAgICAgICAg
aWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4KSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBvdGhlckluZGV4KTsKLSAg
ICAgICAgfQotICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIAorICAgICAgICBvdXQu
cHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9ICIsIHBvaW50ZXJEdW1w
KG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtpZHMgPSBbIik7CisgICAg
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkc1tpXSk7CisgICAgICAg
IG91dC5wcmludCgiXSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVy
LCAiLyIsIG1fZGF0YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4iKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCShyZXZpc2lv
biAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQW5hbHlzaXMuaCIK
ICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNp
bmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCkBA
IC00NCwyNCArNDUsMzkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY29tcHV0ZShHcmFwaCYp
OwogICAgIAotICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0
bykgY29uc3QKKyAgICBib29sIHN0cmljdGx5RG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0g
ICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAgICAgICAgcmV0dXJuIG1f
ZGF0YVt0b10ucHJlTnVtYmVyID4gbV9kYXRhW2Zyb21dLnByZU51bWJlcgorICAgICAgICAgICAg
JiYgbV9kYXRhW3RvXS5wb3N0TnVtYmVyIDwgbV9kYXRhW2Zyb21dLnBvc3ROdW1iZXI7CiAgICAg
fQogICAgIAogICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwg
dG8tPmluZGV4KTsKKyAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwgc3RyaWN0bHlEb21pbmF0
ZXMoZnJvbSwgdG8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoR3JhcGgmLCBQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKLSAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgpOwor
ICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
IGNvbnN0OwogICAgIAotICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHM7IC8vIEZv
ciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0IGRvbWluYXRlIGl0Lgot
ICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0b3Igd2l0
aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9kZWxldGVz
LgorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBCbG9ja0RhdGEoKQorICAgICAgICAg
ICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHByZU51bWJlcihVSU5UX01B
WCkKKyAgICAgICAgICAgICwgcG9zdE51bWJlcihVSU5UX01BWCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGlkb21LaWRzOworICAg
ICAgICBCYXNpY0Jsb2NrKiBpZG9tUGFyZW50OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
cHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBwb3N0TnVtYmVyOworICAgIH07CisgICAgCisg
ICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQu
aCIKKyNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5o
IgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJGdWxs
Qnl0ZWNvZGVMaXZlbmVzcy5oIgpAQCAtMzcwLDE0ICszNzEsMTggQEAgdm9pZCBHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgIGlmIChtX2RvbWluYXRvcnMuaXNWYWxpZCgp
KSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlZCBieToiKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGksIGJsb2NrLT5pbmRleCkpCisgICAg
ICAgICAgICBpZiAoIXRoaXMtPmJsb2NrKGkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKHRoaXMtPmJsb2NrKGkpLCBi
bG9jaykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAjIiwgaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kb21p
bmF0b3JzLmRvbWluYXRlcyhibG9jay0+aW5kZXgsIGkpKQorICAgICAgICAgICAgaWYgKCF0aGlz
LT5ibG9jayhpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICgh
bV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgdGhpcy0+YmxvY2soaSkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAg
ICB9CkBAIC02MzUsNzMgKzY0MCwzMCBAQCB2b2lkIEdyYXBoOjpzdWJzdGl0dXRlR2V0TG9jYWwo
QmFzaWNCbG9jCiAgICAgfQogfQogCi0vLyBVdGlsaXRpZXMgZm9yIHByZS0gYW5kIHBvc3Qtb3Jk
ZXIgdHJhdmVyc2Fscy4KLW5hbWVzcGFjZSB7Ci0KLWlubGluZSB2b2lkIGFkZEZvclByZU9yZGVy
KFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdv
cmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQotewotICAgIGlmIChz
ZWVuLmdldChibG9jay0+aW5kZXgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcmVzdWx0
LmFwcGVuZChibG9jayk7Ci0gICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKTsKLSAgICBzZWVuLnNl
dChibG9jay0+aW5kZXgpOwotfQotCi1lbnVtIFBvc3RPcmRlclRhc2tLaW5kIHsKLSAgICBQb3N0
T3JkZXJGaXJzdFZpc2l0LAotICAgIFBvc3RPcmRlckFkZFRvUmVzdWx0Ci19OwotCi1zdHJ1Y3Qg
UG9zdE9yZGVyVGFzayB7Ci0gICAgUG9zdE9yZGVyVGFzayhCYXNpY0Jsb2NrKiBibG9jayA9IG51
bGxwdHIsIFBvc3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3JkZXJGaXJzdFZpc2l0KQotICAg
ICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgICwgbV9raW5kKGtpbmQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwotICAgIFBvc3RPcmRlclRhc2tLaW5k
IG1fa2luZDsKLX07Ci0KLWlubGluZSB2b2lkIGFkZEZvclBvc3RPcmRlcihWZWN0b3I8UG9zdE9y
ZGVyVGFzaywgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBCYXNpY0Jsb2NrKiBibG9j
aykKLXsKLSAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKGJsb2NrLCBQb3N0T3JkZXJG
aXJzdFZpc2l0KSk7Ci0gICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsKLX0KLQotfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUHJlT3JkZXIoVmVjdG9y
PEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdv
cmtsaXN0OwotICAgIEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclByZU9yZGVyKHJlc3VsdCwg
d29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHko
KSkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Cisg
ICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsK
KyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgIGFkZEZvclByZU9yZGVyKHJlc3Vs
dCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAgICAgICAgICAgd29y
a2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICB9CiB9CiAKIHZvaWQgR3JhcGg6
OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCkKIHsKLSAg
ICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OwotICAgIEJpdFZlY3RvciBzZWVu
OwotICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkpOwotICAgIHdo
aWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc3RPcmRlclRhc2sgdGFzayA9
IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgIHN3aXRjaCAodGFzay5tX2tpbmQpIHsKLSAg
ICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgotICAgICAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJBZGRUb1Jlc3VsdCkpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2NrLT5udW1TdWNjZXNzb3Jz
KCk7IGktLTspCi0gICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVyKHdvcmtsaXN0LCBzZWVu
LCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlz
dCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmxv
Y2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRl
bS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgd29ya2xpc3Qu
cHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVt
LmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAgd29ya2xpc3Qu
cHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHRhc2subV9ibG9jayk7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnZhbGlkYXRpb25Qb2lu
dEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5q
ZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZH
Q2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0
aW9uU2V0LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAgICAgQml0VmVjdG9yIGJs
b2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICBCbG9ja1NldCBibG9ja3NU
aGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewog
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwpAQCAtNjMsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMg
YXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMgYXQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24g
Ym91bmRhcmllcy4KICAgICAgICAgICAgIGlmIChtX29yaWdpblRoYXRIYWRGaXJlLmlzU2V0KCkp
IHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29y
cygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlv
blBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+aW5kZXgpOworICAgICAgICAgICAgICAg
ICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5hZGQoYmxvY2stPnN1Y2Nlc3Nv
cihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMu
Z2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWJsb2Nrc1RoYXROZWVkSW52
YWxpZGF0aW9uUG9pbnRzLmNvbnRhaW5zKGJsb2NrKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaW5zZXJ0SW52YWxpZGF0aW9uQ2hlY2so
MCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZl
RG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOYWl2ZURvbWluYXRvcnMuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworTmFp
dmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQoreworfQorCitOYWl2ZURvbWluYXRvcnM6
On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6Y29tcHV0
ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5h
dG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2soMCktPnByZWRlY2Vzc29y
cy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJs
b2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSBkZW5zZSBkb21p
bmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1bHRzLnNpemUoKSkgewor
ICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51
bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxvY2tzKTsKKyAgICB9CisK
KyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9ubHkgZG9taW5hdGVkIGJ5
IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAgICBtX3Jlc3VsdHNbMF0u
c2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJsb2Nrcy4KKyAgICBtX3Nj
cmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTsp
IHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0KKyAgICAKKyAgICAvLyBNYXJrIGFsbCBu
b2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkgfHwgZ3Jh
cGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3Jlc3Vs
dHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9yZXN1bHRzW2ld
LnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8vIEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBu
b2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAgIGJvb2wgY2hhbmdlZDsKKyAgICBkbyB7
CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBp
biBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBy
dW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVu
dHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQorICAgICAgICAgICAg
Y2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworICAgIH0gd2hpbGUgKGNoYW5n
ZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6cHJ1bmVEb21pbmF0b3JzKEdyYXBoJiBn
cmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5i
bG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0
aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnBy
ZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9y
ZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CisKKyAgICAvLyBUaGUgYmxv
Y2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsK
KworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOworfQor
Cit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgsIFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludCgiICAgIEJsb2NrICIs
ICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG90aGVySW5kZXggPSAwOyBv
dGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRleCkgeworICAgICAgICAg
ICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4KSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBvdGhlckluZGV4KTsK
KyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTmFpdmVEb21pbmF0b3Jz
X2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgY2xhc3MgaXMgb25seSB1c2VkIGZvciB2
YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1wbGVtZW50YXRpb24uCisKK2NsYXNzIE5h
aXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFpdmVEb21pbmF0b3JzKCk7CisgICAgfk5h
aXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQgY29tcHV0ZShHcmFwaCYpOworICAgIAor
ICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZG9taW5hdGVzKGZyb20tPmluZGV4LCB0by0+
aW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoR3JhcGgmLCBQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYs
IEJsb2NrSW5kZXgpOworICAgIAorICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBtX3Jlc3VsdHM7
IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0IGRvbWluYXRl
IGl0LgorICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFyeSBiaXR2ZWN0
b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBzYXZlIG5ldy9k
ZWxldGVzLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOYWl2ZURvbWluYXRvcnNfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkocmV2aXNpb24g
MTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMSBAQCB2b2lkIE5hdHVyYWxMb29wOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpCiBOYXR1cmFsTG9vcHM6Ok5hdHVyYWxMb29wcygpIHsgfQogTmF0
dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9CiAKK3ZvaWQgTmF0dXJhbExvb3BzOjpjb21w
dXRlRGVwZW5kZW5jaWVzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBncmFwaC5tX2RvbWluYXRvcnMu
Y29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKK30KKwogdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1
dGUoR3JhcGgmIGdyYXBoKQogewogICAgIC8vIEltcGxlbWVudCB0aGUgY2xhc3NpYyBkb21pbmF0
b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0CkBAIC01NywxMSArNjIsOSBA
QCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgCiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAotICAgIGdyYXBoLm1fZG9taW5h
dG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotICAgIAogICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAgICAgZ3JhcGgubV9kb21p
bmF0b3JzLmR1bXAoZ3JhcGgsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGdyYXBoLm1fZG9t
aW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAgIAogICAgIG1fbG9vcHMu
cmVzaXplKDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9v
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxM
b29wcy5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHB1YmxpYzoK
ICAgICBOYXR1cmFsTG9vcHMoKTsKICAgICB+TmF0dXJhbExvb3BzKCk7CiAgICAgCisgICAgdm9p
ZCBjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJik7CiAgICAgdm9pZCBjb21wdXRlKEdyYXBoJik7
CiAgICAgCiAgICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdApJbmRleDogU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTcsMjQgKzExNywzMSBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gISEo
Yml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pigx
KSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHF1aWNrU2V0KHNpemVfdCBiaXQpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0KQog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYml0IDwgc2l6
ZSgpKTsKLSAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAg
ICAgICB1aW50cHRyX3QmIHdvcmQgPSBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXTsKKyAg
ICAgICAgdWludHB0cl90IG1hc2sgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQg
JiAoYml0c0luUG9pbnRlcigpIC0gMSkpOworICAgICAgICBib29sIHJlc3VsdCA9ICEhKHdvcmQg
JiBtYXNrKTsKKyAgICAgICAgd29yZCB8PSBtYXNrOworICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KICAgICAKLSAgICB2b2lkIHF1aWNrQ2xlYXIoc2l6ZV90IGJpdCkKKyAgICBib29sIHF1
aWNrQ2xlYXIoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGJpdCA8IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Q
b2ludGVyKCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJ
blBvaW50ZXIoKSAtIDEpKSk7CisgICAgICAgIHVpbnRwdHJfdCYgd29yZCA9IGJpdHMoKVtiaXQg
LyBiaXRzSW5Qb2ludGVyKCldOworICAgICAgICB1aW50cHRyX3QgbWFzayA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSk7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gISEod29yZCAmIG1hc2spOworICAgICAgICB3b3JkICY9IH5tYXNrOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHF1aWNrU2V0KHNp
emVfdCBiaXQsIGJvb2wgdmFsdWUpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0LCBib29s
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcXVpY2tTZXQo
Yml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAg
ICAgICAgcmV0dXJuIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja0NsZWFyKGJp
dCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0CkBAIC0xNDQs
MzEgKzE1MSwzMCBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gcXVpY2tHZXQoYml0KTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICBib29sIHNldChzaXplX3Qg
Yml0KQogICAgIHsKICAgICAgICAgZW5zdXJlU2l6ZShiaXQgKyAxKTsKLSAgICAgICAgcXVpY2tT
ZXQoYml0KTsKKyAgICAgICAgcmV0dXJuIHF1aWNrU2V0KGJpdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBlbnN1cmVTaXplQW5kU2V0KHNpemVfdCBiaXQsIHNpemVfdCBzaXplKQorICAgIGJvb2wgZW5z
dXJlU2l6ZUFuZFNldChzaXplX3QgYml0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGVu
c3VyZVNpemUoc2l6ZSk7Ci0gICAgICAgIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBx
dWlja1NldChiaXQpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICBi
b29sIGNsZWFyKHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBpZiAoYml0ID49IHNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcXVpY2tDbGVhcihiaXQpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZhbHVlKQorICAgIGJvb2wgc2V0
KHNpemVfdCBiaXQsIGJvb2wgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUpCi0gICAg
ICAgICAgICBzZXQoYml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xlYXIoYml0KTsK
KyAgICAgICAgICAgIHJldHVybiBzZXQoYml0KTsKKyAgICAgICAgcmV0dXJuIGNsZWFyKGJpdCk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237283</attachid>
            <date>2014-08-27 20:32:53 -0700</date>
            <delta_ts>2014-08-27 21:11:24 -0700</delta_ts>
            <desc>it works?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71906</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTI2LDYgKzEyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCiAgICAgZGZnL0RGR0JpbmFyeVN3aXRjaC5jcHAKICAgICBkZmcvREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwCisgICAgZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCiAgICAg
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAKICAgICBk
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKQEAgLTE3NSw2ICsxNzYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcAorICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzI5
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNiArMzcyLDcgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja1dvcmtsaXN0LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiIC8+CkBAIC00MjEs
NiArNDIyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWF5RXhpdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWlu
aWZpZWROb2RlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2
ZURvbWluYXRvcnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9k
ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNw
cCIgLz4KQEAgLTk5Myw2ICs5OTUsMTAgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmxvY2tNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja01hcElubGluZXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdC
bG9ja1dvcmtsaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxv
Y2tTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCcmFuY2hEaXJl
Y3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CkBAIC0xMDU2LDYgKzEwNjIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZElELmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTmF0dXJhbExvb3BzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk4LDYg
KzQ5OCwxMyBAQAogCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDEwMTgx
NDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1w
UmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDMzE0MTExODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi87
IH07CiAJCTBGQzMxNDE1MTgxNDZENzAwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxNDE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovOyB9OworCQkwRkMzQ0NGQzE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZE
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAv
KiBERkdCbG9ja01hcElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y3
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzNDQ0Y4MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmNw
cCAqLzsgfTsKKwkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0Y5
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0NEMDExOUFEQTQxMTAwNkFDNzJB
IC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGQTE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21p
bmF0b3JzLmNwcCAqLzsgfTsKKwkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZl
RG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDM0NDRkIxOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzcxMkRFMTdD
RDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREMxN0NEODc3ODAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CiAJCTBGQzcx
MkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkREMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4
Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTAxN0NEODc4RjAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
QEAgLTI0MjEsNiArMjQyOCwxMyBAQAogCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVn
aXN0ZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaXN0ZXJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTExODE0NTU5MTAwMDMzMjMy
IC8qIFRlbXBSZWdpc3RlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUZW1wUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkMzMTQxNDE4MTQ2RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnaXN0ZXJTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tNYXAuaDsgcGF0aCA9IGRm
Zy9ERkdCbG9ja01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNjE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrTWFwSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jsb2Nr
TWFwSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGNzE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmxvY2tTZXQuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tX
b3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCbG9j
a1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmxvY2tXb3Jr
bGlzdC5oOyBwYXRoID0gZGZnL0RGR0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZDM0NDRkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOYWl2ZURvbWlu
YXRvcnMuY3BwOyBwYXRoID0gZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTmFpdmVEb21p
bmF0b3JzLmg7IHBhdGggPSBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4
MTksNiArNDgzMywxMSBAQAogCQkJCUE3MEIwODMxMTdBMEI3OUIwMERBRjE0QiAvKiBERkdCaW5h
cnlTd2l0Y2guaCAqLywKIAkJCQlBN0Q4OUNFNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuY3BwICovLAogCQkJCUE3RDg5Q0U1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdC
bG9ja0luc2VydGlvblNldC5oICovLAorCQkJCTBGQzNDQ0Y1MTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcC5oICovLAorCQkJCTBGQzNDQ0Y2MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCAqLywKKwkJCQkwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tTZXQuaCAqLywKKwkJCQkwRkMzQ0NGODE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3Jr
bGlzdC5jcHAgKi8sCisJCQkJMEZDM0NDRjkxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29y
a2xpc3QuaCAqLywKIAkJCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggKi8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCAqLywKQEAgLTQ5MzAsNiArNDk0OSw4IEBACiAJCQkJMEZCNEI1MTAxNkIzQTk2
NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAqLywKIAkJCQkwRjJCREMzRTE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8sCisJCQkJMEZDM0NDRkExOUFEQTQxMDAwNkFD
NzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi8sCisJCQkJMEZDM0NDRkIxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oICovLAogCQkJCUE3Mzc4MTBBMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwICovLAogCQkJCUE3Mzc4MTBCMTc5OUVBMkUw
MDgxNzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuaCAqLywKIAkJCQkwRkI0QjUxRTE2QjYyNzcyMDAz
RjY5NkIgLyogREZHTm9kZS5jcHAgKi8sCkBAIC01ODQyLDYgKzU4NjMsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVD
QjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYy
QkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTU5
MTcsNiArNTkzOSw3IEBACiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYw
MENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGQzE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQz
Mzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYzMTcsNiArNjM0MCw3IEBACiAJCQkJMEY0MzE3MzgxNDZCQUM2
OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFMkVB
NkIwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENM
b29wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJ
bnRDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAv
KiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyOSw2ICs2MzUzLDcgQEAKIAkJCQkw
RjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZN
RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJD
RTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM5MTM0RkYwQTYw
MEFGQURCNSAvKiBMb2NhbC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mzc0LDYgKzYzOTksNyBAQAog
CQkJCTdFRkYwMDY0MEVDMDVBOUEwMEFBN0M5MyAvKiBOb2RlSW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVE
b21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MTBFMTZGNUNEMDBCMzQ0NjAg
LyogTnVtYmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFF
OTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0MjBFMTZG
NUNEMDBCMzQ0NjAgLyogTnVtYmVyQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTcsNiArNzMyMyw3IEBACiAJCQkJQTdEODlDRkYxN0EwQjhDQzAwNzczQUQ4IC8qIERGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTA1QUJENTE5NjFERjI0
MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzIwQ0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURv
bWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4
IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RjI5REYx
OEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM1Nyw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDM0NDRkYx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc4QTk3ODAxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bmFseXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5h
bHlzaXMuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmIChtX3ZhbGlkKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAv
LyBJdCdzIGJlc3QgdG8gcnVuIGRlcGVuZGVudCBhbmFseXNlcyBmcm9tIHRoaXMgbWV0aG9kLgor
ICAgICAgICBzdGF0aWNfY2FzdDxUKj4odGhpcyktPmNvbXB1dGVEZXBlbmRlbmNpZXMoZ3JhcGgp
OwogICAgICAgICAvLyBTZXQgdG8gdHJ1ZSBlYXJseSwgc2luY2UgdGhlIGFuYWx5c2lzIG1heSBj
aG9vc2UgdG8gY2FsbCBpdHMgb3duIG1ldGhvZHMgaW4KICAgICAgICAgLy8gY29tcHV0ZSgpIGFu
ZCBpdCBtYXkgd2FudCB0byBBU1NFUlQoKSB2YWxpZGl0eSBpbiB0aG9zZSBtZXRob2RzLgogICAg
ICAgICBtX3ZhbGlkID0gdHJ1ZTsKQEAgLTYxLDYgKzYzLDEyIEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkOyB9CiAKKyAgICAvLyBPdmVy
cmlkZSB0aGlzIHRvIGNvbXB1dGUgYW55IGRlcGVuZGVudCBhbmFseXNlcy4gU2VlCisgICAgLy8g
TmF0dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJikgZm9yIGFuIGV4YW1wbGUu
IFRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dAorICAgIC8vIGl0IG1ha2VzIGRlYnVn
IGR1bXBzIGluIGNhc2VzIG9mIGVycm9yIHdvcmsgYSBiaXQgYmV0dGVyIGJlY2F1c2UgdGhpcyBh
bmFseXNpcyB3b3VsZG4ndCB5ZXQKKyAgICAvLyBiZSBwcmV0ZW5kaW5nIHRvIGJlIHZhbGlkLgor
ICAgIHZvaWQgY29tcHV0ZURlcGVuZGVuY2llcyhHcmFwaCYpIHsgfQorCiBwcml2YXRlOgogICAg
IGJvb2wgbV92YWxpZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9j
a01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCbG9ja01hcF9oCisjZGVm
aW5lIERGR0Jsb2NrTWFwX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQmxvY2tNYXAgeworcHVibGlj
OgorICAgIEJsb2NrTWFwKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrTWFwKEdyYXBo
Jik7CisgICAgCisgICAgQmxvY2tJbmRleCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZlY3Rvci5zaXplKCk7CisgICAgfQorICAgIAorICAgIFQmIGF0SW5kZXgoQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5k
ZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsK
KyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJh
dG9yW10oQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbYmxvY2stPmluZGV4XTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1f
dmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja01hcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrTWFwSW5saW5lc19oCisjZGVmaW5lIERG
R0Jsb2NrTWFwSW5saW5lc19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQmxvY2tNYXA8VD46OkJsb2Nr
TWFwKEdyYXBoJiBncmFwaCkKK3sKKyAgICBtX3ZlY3Rvci5yZXNpemUoZ3JhcGgubnVtQmxvY2tz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jsb2NrTWFwSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCbG9ja1NldF9oCisjZGVmaW5lIERGR0Jsb2NrU2V0X2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEJsb2NrU2V0IHsKK3B1YmxpYzoKKyAgICBCbG9ja1Nl
dCgpIHsgfQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBibG9jayB3YXMgYWRkZWQs
IGZhbHNlIGlmIGl0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBhZGQoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldChibG9jay0+aW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmdldChibG9jay0+aW5kZXgpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1Nl
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmts
aXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworQmxvY2tXb3JrbGlzdDo6QmxvY2tXb3JrbGlzdCgpCit7Cit9CisKK0Jsb2NrV29y
a2xpc3Q6On5CbG9ja1dvcmtsaXN0KCkKK3sKK30KKworYm9vbCBCbG9ja1dvcmtsaXN0OjpwdXNo
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGlmICghbV9zZWVuLmFkZChibG9jaykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtX3N0YWNrLmFwcGVuZChibG9jayk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0Jhc2ljQmxvY2sqIEJsb2NrV29ya2xpc3Q6OnBvcCgpCit7Cisg
ICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICByZXR1cm4gbV9zdGFjay50YWtlTGFzdCgpOworfQorCitQb3N0T3JkZXJCbG9ja1dvcmts
aXN0OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCkKK3sKK30KKworUG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdDo6flBvc3RPcmRlckJsb2NrV29ya2xpc3QoKQoreworfQorCitib29sIFBvc3RPcmRlckJs
b2NrV29ya2xpc3Q6OnB1c2hQcmUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIG1f
d29ya2xpc3QucHVzaChibG9jaywgUHJlT3JkZXIpOworfQorCit2b2lkIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Q6OnB1c2hQb3N0KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIG1fd29ya2xpc3Qu
Zm9yY2VQdXNoKGJsb2NrLCBQb3N0T3JkZXIpOworfQorCitCbG9ja1dpdGhPcmRlciBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIEJsb2NrV2l0aDxWaXNpdE9yZGVyPiByZXN1
bHQgPSBtX3dvcmtsaXN0LnBvcCgpOworICAgIHJldHVybiBCbG9ja1dpdGhPcmRlcihyZXN1bHQu
YmxvY2ssIHJlc3VsdC5kYXRhKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTky
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgREZHQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIERGR0Jsb2NrV29ya2xpc3RfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
REZHQmxvY2tTZXQuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK2NsYXNzIEJsb2NrV29y
a2xpc3QgeworcHVibGljOgorICAgIEJsb2NrV29ya2xpc3QoKTsKKyAgICB+QmxvY2tXb3JrbGlz
dCgpOworICAgIAorICAgIGJvb2wgcHVzaChCYXNpY0Jsb2NrKik7IC8vIFJldHVybnMgdHJ1ZSBp
ZiB3ZSBkaWRuJ3Qga25vdyBhYm91dCB0aGUgYmxvY2sgYmVmb3JlLgorICAgIAorICAgIGJvb2wg
bm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBwb3AoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IG1fc3RhY2s7Cit9OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJsb2NrV2l0aCB7CisgICAgQmxvY2tXaXRo
KCkKKyAgICAgICAgOiBibG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmxv
Y2tXaXRoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgICAgICA6IGJsb2Nr
KGJsb2NrKQorICAgICAgICAsIGRhdGEoZGF0YSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5
cGVkZWYgdm9pZCogKEJsb2NrV2l0aDxUPjo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9w
ZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBibG9jayA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jazsKKyAgICBUIGRhdGE7Cit9Owor
CisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29t
ZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9y
Y2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVl
biBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKKy8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5p
bmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJl
IHRoZQorLy8gc3VjY2Vzc29yIGluZGV4LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEV4
dGVuZGVkQmxvY2tXb3JrbGlzdCB7CitwdWJsaWM6CisgICAgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0
KCkgeyB9CisgICAgCisgICAgdm9pZCBmb3JjZVB1c2goY29uc3QgQmxvY2tXaXRoPFQ+JiBlbnRy
eSkKKyAgICB7CisgICAgICAgIG1fc3RhY2suYXBwZW5kKGVudHJ5KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmb3JjZVB1c2goQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IFQmIGRhdGEpCisgICAg
eworICAgICAgICBmb3JjZVB1c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgcHVzaChjb25zdCBCbG9ja1dpdGg8VD4mIGVudHJ5KQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3NlZW4uYWRkKGVudHJ5LmJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvcmNlUHVzaChlbnRyeSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHB1c2goQmFzaWNCbG9jayogYmxvY2ssIGNv
bnN0IFQmIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gcHVzaChCbG9ja1dpdGg8VD4oYmxv
Y2ssIGRhdGEpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuICFtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIAorICAgIEJsb2NrV2l0aDxUPiBwb3AoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IEJsb2NrV2l0aDxUPigpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc3RhY2sudGFrZUxh
c3QoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmxvY2tTZXQgbV9zZWVuOworICAgIFZlY3Rv
cjxCbG9ja1dpdGg8VD4+IG1fc3RhY2s7Cit9OworCitlbnVtIFZpc2l0T3JkZXIgeworICAgIFBy
ZU9yZGVyLAorICAgIFBvc3RPcmRlcgorfTsKKworc3RydWN0IEJsb2NrV2l0aE9yZGVyIHsKKyAg
ICBCbG9ja1dpdGhPcmRlcigpCisgICAgICAgIDogYmxvY2sobnVsbHB0cikKKyAgICAgICAgLCBv
cmRlcihQcmVPcmRlcikKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aE9yZGVyKEJh
c2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9yZGVyIG9yZGVyKQorICAgICAgICA6IGJsb2NrKGJsb2Nr
KQorICAgICAgICAsIG9yZGVyKG9yZGVyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdHlwZWRl
ZiB2b2lkKiAoQmxvY2tXaXRoT3JkZXI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVy
YXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
YmxvY2sgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxw
dHI7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2s7CisgICAgVmlzaXRPcmRlciBvcmRl
cjsKK307CisKKy8vIEJsb2NrIHdvcmtsaXN0IHN1aXRhYmxlIGZvciBwb3N0LW9yZGVyIHRyYXZl
cnNhbC4KK2NsYXNzIFBvc3RPcmRlckJsb2NrV29ya2xpc3QgeworcHVibGljOgorICAgIFBvc3RP
cmRlckJsb2NrV29ya2xpc3QoKTsKKyAgICB+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCgpOworICAg
IAorICAgIGJvb2wgcHVzaFByZShCYXNpY0Jsb2NrKik7CisgICAgdm9pZCBwdXNoUG9zdChCYXNp
Y0Jsb2NrKik7CisgICAgCisgICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBWaXNpdE9y
ZGVyIG9yZGVyID0gUHJlT3JkZXIpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9yZGVyKSB7Cisg
ICAgICAgIGNhc2UgUHJlT3JkZXI6CisgICAgICAgICAgICByZXR1cm4gcHVzaFByZShibG9jayk7
CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgcHVzaFBvc3QoYmxvY2spOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29s
IHB1c2goY29uc3QgQmxvY2tXaXRoT3JkZXImIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4g
cHVzaChkYXRhLmJsb2NrLCBkYXRhLm9yZGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBub3RF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fd29ya2xpc3Qubm90RW1wdHkoKTsgfQorICAgIEJsb2Nr
V2l0aE9yZGVyIHBvcCgpOworCitwcml2YXRlOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDxW
aXNpdE9yZGVyPiBtX3dvcmtsaXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCbG9ja1dvcmtsaXN0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEhlYXAuaCIKKyNpbmNsdWRlICJERkdCbG9ja01hcElu
bGluZXMuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJl
cml6ZS5oIgogI2luY2x1ZGUgIkRGR0VkZ2VVc2VzU3RydWN0dXJlLmgiCkBAIC0zNjQsNiArMzY1
LDcgQEAgY2xhc3MgR2xvYmFsQ1NFUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAg
IEdsb2JhbENTRVBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImds
b2JhbCBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbiIpCisgICAgICAgICwgbV9pbXB1
cmVEYXRhTWFwKGdyYXBoKQogICAgIHsKICAgICB9CiAgICAgCkBAIC0zNzcsMTMgKzM3OSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLmdldEJsb2Nrc0luUHJlT3JkZXIo
bV9wcmVPcmRlcik7CiAgICAgICAgIAotICAgICAgICBtX2ltcHVyZURhdGFNYXAucmVzaXplKG1f
Z3JhcGgubnVtQmxvY2tzKCkpOwotICAgICAgICAKICAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91
dCB3aGF0IGdldHMgY2xvYmJlcmVkIGJ5IGJsb2Nrcy4gTm9kZSB0aGF0IHRoaXMgdXNlcyB0aGUg
cHJlT3JkZXIgbGlzdAogICAgICAgICAvLyBmb3IgY29udmVuaWVuY2Ugb25seS4KICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9wcmVPcmRlci5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAg
IG1fYmxvY2sgPSBtX3ByZU9yZGVyW2ldOwotICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1f
aW1wdXJlRGF0YU1hcFttX2Jsb2NrLT5pbmRleF07CisgICAgICAgICAgICBtX2ltcHVyZURhdGEg
PSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2tdOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBtX2Jsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgICAg
ICBhZGRXcml0ZXMobV9ncmFwaCwgbV9ibG9jay0+YXQobm9kZUluZGV4KSwgbV9pbXB1cmVEYXRh
LT53cml0ZXMpOwogICAgICAgICB9CkBAIC00MDcsNyArNDA3LDcgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgbV9wdXJlVmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2ltcHVyZURhdGFNYXAuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBpID0gbV9pbXB1cmVEYXRhTWFwLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgbV9pbXB1cmVEYXRhTWFwW2ldLmF2YWlsYWJsZUF0VGFpbC5jbGVhcigpOwogICAgICAgICAg
ICAgbV9pbXB1cmVEYXRhTWFwW2ldLmRpZFZpc2l0ID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTQy
Myw3ICs0MjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9wcmVPcmRlci5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgbV9ibG9jayA9
IG1fcHJlT3JkZXJbaV07Ci0gICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRh
TWFwW21fYmxvY2stPmluZGV4XTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVy
ZURhdGFNYXBbbV9ibG9ja107CiAgICAgICAgICAgICBtX3dyaXRlc1NvRmFyLmNsZWFyKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQpAQCAtNTYyLDEyICs1NjIsMTIg
QEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICBTZWFyY2hpbmcgaW4gYmxvY2sgIiwgKmJsb2NrLCAi
XG4iKTsKLSAgICAgICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1h
cFtibG9jay0+aW5kZXhdOworICAgICAgICAgICAgSW1wdXJlQmxvY2tEYXRhJiBkYXRhID0gbV9p
bXB1cmVEYXRhTWFwW2Jsb2NrXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UgcmVx
dWlyZSBzdHJpY3QgZG9taW5hdGlvbiBiZWNhdXNlIHRoaXMgd291bGQgb25seSBzZWUgdGhpbmdz
IGluIG91ciBvd24gYmxvY2sgaWYKICAgICAgICAgICAgIC8vIHRoZXkgY2FtZSAqYWZ0ZXIqIG91
ciBwb3NpdGlvbiBpbiB0aGUgYmxvY2suIENsZWFybHksIHdoaWxlIG91ciBibG9jayBkb21pbmF0
ZXMKICAgICAgICAgICAgIC8vIGl0c2VsZiwgdGhlIHRoaW5ncyBpbiB0aGUgYmxvY2sgYWZ0ZXIg
dXMgZG9uJ3QgZG9taW5hdGUgdXMuCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRv
cnMuZG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSAmJiBibG9jayAhPSBtX2Jsb2NrKSB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX2RvbWluYXRvcnMuc3RyaWN0bHlEb21pbmF0ZXMoYmxvY2ss
IG1fYmxvY2spKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgSXQgc3RyaWN0bHkgZG9taW5hdGVzLlxuIik7CiAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEuZGlkVmlzaXQpOwpA
QCAtNjEyLDcgKzYxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGhlIHJlZHVjdGlvbiBpbiBj
b21waWxlIHRpbWUgd291bGQgd2FycmFudCB0aGUgaW5jcmVhc2UgaW4gY29tcGxleGl0eSwgdGhv
dWdoLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM0ODc2CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBzZWVuTGlzdCkKLSAgICAg
ICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9jay0+aW5kZXhdLmF2YWlsYWJsZUF0VGFpbC5hZGQo
bG9jYXRpb24sIG1hdGNoKTsKKyAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtibG9ja10uYXZh
aWxhYmxlQXRUYWlsLmFkZChsb2NhdGlvbiwgbWF0Y2gpOwogICAgICAgICBtX2ltcHVyZURhdGEt
PmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRpb24sIG1hdGNoKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiBtYXRjaDsKQEAgLTY1NCw3ICs2NTQsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBtX3ByZU9yZGVyOwogCiAgICAgUHVyZU11bHRpTWFwIG1fcHVyZVZhbHVlczsK
LSAgICBWZWN0b3I8SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CisgICAgQmxvY2tN
YXA8SW1wdXJlQmxvY2tEYXRhPiBtX2ltcHVyZURhdGFNYXA7CiAgICAgCiAgICAgQmFzaWNCbG9j
ayogbV9ibG9jazsKICAgICBOb2RlKiBtX25vZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEx
ICsyOCwxNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01h
cElubGluZXMuaCIKKyNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdOYWl2ZURvbWluYXRvcnMuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworc3RhdGljIGNvbnN0IGJvb2wgdXNlUGF0aENvbXBy
ZXNzaW9uID0gdHJ1ZTsKKwogRG9taW5hdG9yczo6RG9taW5hdG9ycygpCiB7CiB9CkBAIC00MSw5
MSArNDcsNDA5IEBAIERvbWluYXRvcnM6On5Eb21pbmF0b3JzKCkKIHsKIH0KIAotdm9pZCBEb21p
bmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudHMg
YSBuYWl2ZSBkb21pbmF0b3Igc29sdmVyLgorbmFtZXNwYWNlIHsKKworLy8gVGhpcyBpbXBsZW1l
bnRzIExlbmdhdWVyIGFuZCBUYXJqYW4ncyAiQSBGYXN0IEFsZ29yaXRobSBmb3IgRmluZGluZyBE
b21pbmF0b3JzIGluIGEgRmxvd2dyYXBoIgorLy8gKFRPUExBUyAxOTc5KS4gSXQgdXNlcyB0aGUg
InNpbXBsZSIgaW1wbGVtZW50YXRpb24gb2YgTElOSyBhbmQgRVZBTC4gVGhlIGZ1bGwgcGFwZXIg
aXMgbGlua2VkCisvLyBiZWxvdzsgdGhpcyBjb2RlIGF0dGVtcHRzIHRvIGNsb3NlbHkgZm9sbG93
IHRoZSBhbGdvcml0aG0gYXMgaXQgaXMgcHJlc2VudGVkIGluIHRoZSBwYXBlcjsgaW4KKy8vIHBh
cnRpY3VsYXIgc2VjdGlvbnMgMyBhbmQgNC4KKy8vIGh0dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5l
ZHUvY291cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9hJTIwZmFzdCUyMGFsZ29y
aXRobSUyMGZvciUyMGZpbmRpbmcucGRmCisKK2NsYXNzIExlbmdhdWVyVGFyamFuIHsKK3B1Ymxp
YzoKKyAgICBMZW5nYXVlclRhcmphbihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChn
cmFwaCkKKyAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCisgICAgeworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21wdXRlKCkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgZGF0YUxvZygiUGVyZm9ybWluZyBMZW5nYXVlci1UYXJqYW4gZG9taW5hdG9y
IGNhbGN1bGF0aW9uLi4uXG4iKTsKKyAgICAgICAgCisgICAgICAgIGNvbXB1dGVEZXB0aEZpcnN0
UHJlTnVtYmVyaW5nKCk7IC8vIFN0ZXAgMS4KKyAgICAgICAgY29tcHV0ZVNlbWlEb21pbmF0b3Jz
QW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMuCisgICAg
ICAgIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0LgorICAg
IH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBpbW1lZGlhdGVEb21pbmF0b3IoQmFzaWNCbG9jayog
YmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5kb207CisgICAgfQor
Citwcml2YXRlOgorICAgIHZvaWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmcoKQorICAg
IHsKKyAgICAgICAgLy8gVXNlIGEgYmxvY2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNrcyB0aGUg
aW5kZXggaW5zaWRlIHRoZSBzdWNjZXNzb3IgbGlzdC4KKyAgICAgICAgRXh0ZW5kZWRCbG9ja1dv
cmtsaXN0PHVuc2lnbmVkPiB3b3JrbGlzdDsKKyAgICAgICAgd29ya2xpc3QucHVzaChtX2dyYXBo
LmJsb2NrKDApLCAwKTsKKyAgICAgICAgCisgICAgICAgIHdoaWxlIChCbG9ja1dpdGg8dW5zaWdu
ZWQ+IGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBpdGVtLmJsb2NrOworICAgICAgICAgICAgdW5zaWduZWQgc3VjY2Vzc29ySW5kZXggPSBp
dGVtLmRhdGE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVCghc3VjY2Vzc29ySW5k
ZXggfHwgc3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vzc29ycygpKTsKKworICAgICAg
ICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAgICAgICAgIG1fZGF0YVtibG9j
a10uc2VtaU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBCbG9jayAi
LCAqYmxvY2ssICIgaGFzIHByZW51bWJlciA9ICIsIG1fYmxvY2tCeVByZU51bWJlci5zaXplKCks
ICJcbiIpOworICAgICAgICAgICAgICAgIG1fYmxvY2tCeVByZU51bWJlci5hcHBlbmQoYmxvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3VjY2Vzc29y
SW5kZXggPCBibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbmV4dFN1Y2Nlc3NvckluZGV4ID0gc3VjY2Vzc29ySW5kZXggKyAxOworICAgICAgICAgICAg
ICAgIGlmIChuZXh0U3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vzc29ycygpKQorICAg
ICAgICAgICAgICAgICAgICB3b3JrbGlzdC5mb3JjZVB1c2goYmxvY2ssIG5leHRTdWNjZXNzb3JJ
bmRleCk7CisKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA9IGJs
b2NrLT5zdWNjZXNzb3Ioc3VjY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgICAgIGlmICh3b3Jr
bGlzdC5wdXNoKHN1Y2Nlc3NvckJsb2NrLCAwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIFNldHRpbmcg
IiwgKnN1Y2Nlc3NvckJsb2NrLCAiLnBhcmVudCA9ICIsICpibG9jaywgIlxuIik7CisgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YVtzdWNjZXNzb3JCbG9ja10ucGFyZW50ID0gYmxvY2s7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3Jz
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IG1fYmxv
Y2tCeVByZU51bWJlci5zaXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+IDE7KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tCeVByZU51bWJlcltjdXJyZW50UHJlTnVt
YmVyXTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgQ29uc2lkZXJpbmcgYmxvY2sgIiwgKmJsb2NrLCAiIHdpdGggcHJlbnVtYmVyICIsIGN1cnJl
bnRQcmVOdW1iZXIsICI6XG4iKTsKKyAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAyOgorICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrIDogYmxvY2stPnByZWRl
Y2Vzc29ycykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGludGVybWVkaWF0ZUJsb2Nr
ID0gZXZhbChwcmVkZWNlc3NvckJsb2NrKTsKKyAgICAgICAgICAgICAgICBibG9ja0RhdGEuc2Vt
aU51bWJlciA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2RhdGFbaW50ZXJtZWRp
YXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEZvciBw
cmVkZWNlc3NvciAiLCAqcHJlZGVjZXNzb3JCbG9jaywgIjogU2V0dGluZyBibG9jayAiLCAqYmxv
Y2ssICIgc2VtaSB0byAiLCBibG9ja0RhdGEuc2VtaU51bWJlciwgIiwgIiwgKm1fYmxvY2tCeVBy
ZU51bWJlcltibG9ja0RhdGEuc2VtaU51bWJlcl0sICIgYmVjYXVzZSBpbnRlcm1lZGlhdGUgYmxv
Y2sgIiwgKmludGVybWVkaWF0ZUJsb2NrLCAiIGhhcyBzZW1pICIsIG1fZGF0YVtpbnRlcm1lZGlh
dGVCbG9ja10uc2VtaU51bWJlciwgIiwgIiwgKm1fYmxvY2tCeVByZU51bWJlclttX2RhdGFbaW50
ZXJtZWRpYXRlQmxvY2tdLnNlbWlOdW1iZXJdLCAiLlxuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnNpZ25lZCBidWNrZXRQcmVOdW1iZXIgPSBibG9ja0RhdGEuc2VtaU51bWJlcjsK
KyAgICAgICAgICAgIEFTU0VSVChidWNrZXRQcmVOdW1iZXIgPD0gY3VycmVudFByZU51bWJlcik7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
QWRkaW5nIGJsb2NrICIsICpibG9jaywgIiB0byBidWNrZXQgb2YgIiwgKm1fYmxvY2tCeVByZU51
bWJlcltidWNrZXRQcmVOdW1iZXJdLCAiIGJlY2F1c2UgYmxvY2sgaGFzIHNlbWkgbnVtYmVyICIs
IGJ1Y2tldFByZU51bWJlciwgIlxuIik7CisgICAgICAgICAgICBtX2RhdGFbbV9ibG9ja0J5UHJl
TnVtYmVyW2J1Y2tldFByZU51bWJlcl1dLmJ1Y2tldC5hcHBlbmQoYmxvY2spOworICAgICAgICAg
ICAgbGluayhibG9ja0RhdGEucGFyZW50LCBibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFN0ZXAgMzoKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc2VtaURvbWluZWUg
OiBtX2RhdGFbYmxvY2tEYXRhLnBhcmVudF0uYnVja2V0KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcG9zc2libGVEb21pbmF0b3IgPSBldmFsKHNlbWlEb21pbmVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEJs
b2NrID0gIiwgKmJsb2NrLCAiLCBwYXJlbnQgPSAiLCAqYmxvY2tEYXRhLnBhcmVudCwgIiwgc2Vt
aURvbWluZWUgPSAiLCAqc2VtaURvbWluZWUsICIsIHBvc3NpYmxlRG9taW5hdG9yID0gIiwgKnBv
c3NpYmxlRG9taW5hdG9yLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHNlbWlE
b21pbmVlRGF0YSA9IG1fZGF0YVtzZW1pRG9taW5lZV07CisgICAgICAgICAgICAgICAgQVNTRVJU
KG1fYmxvY2tCeVByZU51bWJlcltzZW1pRG9taW5lZURhdGEuc2VtaU51bWJlcl0gPT0gYmxvY2tE
YXRhLnBhcmVudCk7CisgICAgICAgICAgICAgICAgQmxvY2tEYXRhJiBwb3NzaWJsZURvbWluYXRv
ckRhdGEgPSBtX2RhdGFbcG9zc2libGVEb21pbmF0b3JdOworICAgICAgICAgICAgICAgIGlmIChw
b3NzaWJsZURvbWluYXRvckRhdGEuc2VtaU51bWJlciA8IHNlbWlEb21pbmVlRGF0YS5zZW1pTnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFNldHRpbmcgIiwgKnNlbWlEb21pbmVlLCAiIGRvbSB0byBw
b3NzaWJsZURvbWluYXRvciA9ICIsICpwb3NzaWJsZURvbWluYXRvciwgIlxuIik7CisgICAgICAg
ICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBwb3NzaWJsZURvbWluYXRvcjsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBTZXR0aW5nICIsICpzZW1pRG9t
aW5lZSwgIiBkb20gdG8gcGFyZW50IG9mICIsICpibG9jaywgIiA9ICIsICpibG9ja0RhdGEucGFy
ZW50LCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2VtaURvbWluZWVEYXRhLmRvbSA9IGJs
b2NrRGF0YS5wYXJlbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldC5jbGVhcigpOworICAgICAgICB9
CisgICAgfQogICAgIAotICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlz
RW1wdHkoKSk7CisgICAgdm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCkK
KyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9IDE7IGN1cnJl
bnRQcmVOdW1iZXIgPCBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1cnJlbnRQcmVOdW1i
ZXIpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5UHJlTnVtYmVy
W2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9ja0RhdGEgPSBt
X2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2tEYXRhLmRv
bSAhPSBtX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBC
ZWNhdXNlIGRvbSBvZiAiLCAqYmxvY2ssICIgd2FzIG5vdCAiLCAqbV9ibG9ja0J5UHJlTnVtYmVy
W2Jsb2NrRGF0YS5zZW1pTnVtYmVyXSwgIiwgc2V0dGluZyB0byBkb20gb2YgIiwgKmJsb2NrRGF0
YS5kb20sICIgPSAiLCAqbV9kYXRhW2Jsb2NrRGF0YS5kb21dLmRvbSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgYmxvY2tEYXRhLmRvbSA9IG1fZGF0YVtibG9ja0RhdGEuZG9tXS5kb207CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgTGVhdmluZyBkb20gb2YgIiwgKmJsb2NrLCAiIGFzICIs
ICptX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdLCAiXG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1CbG9ja3Mg
PSBncmFwaC5udW1CbG9ja3MoKTsKKyAgICB2b2lkIGxpbmsoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICBMaW5raW5nICIsICp0bywgIi5hbmNlc3RvciA9ICIsICpmcm9tLCAiXG4iKTsK
KyAgICAgICAgbV9kYXRhW3RvXS5hbmNlc3RvciA9IGZyb207CisgICAgfQogICAgIAotICAgIC8v
IEFsbG9jYXRlIHN0b3JhZ2UgZm9yIHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKLSAgICBp
ZiAobnVtQmxvY2tzID4gbV9yZXN1bHRzLnNpemUoKSkgewotICAgICAgICBtX3Jlc3VsdHMuZ3Jv
dyhudW1CbG9ja3MpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTsp
Ci0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7Ci0gICAgICAgIG1f
c2NyYXRjaC5yZXNpemUobnVtQmxvY2tzKTsKKyAgICBCYXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQor
ICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAgICAgaWYgKHVzZVBhdGhD
b21wcmVzc2lvbikgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdDsgaXQgYWxs
b3dzIGZvciBPKG4gbG9nIG4pIHRpbWUuCisgICAgICAgICAgICBjb21wcmVzcyhibG9jayk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyBpcyBhIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIEVWQUwuIEl0
IGRvZXNuJ3Qgc2NhbGUsIGJ1dCBpdCdzIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisgICAgICAgIC8v
IGJlY2F1c2UgaXQgY2xvc2VseSBmb2xsb3dzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIEVWQUwgd2l0
aG91dCBkb2luZyBhbnl0aGluZyBjbGV2ZXIuCisgICAgICAgIEJhc2ljQmxvY2sqIG9yaWdpbmFs
QmxvY2sgPSBibG9jazsKKyAgICAgICAgQmFzaWNCbG9jayogY2FuZGlkYXRlID0gYmxvY2s7Cisg
ICAgICAgIGZvciAoOyBtX2RhdGFbYmxvY2tdLmFuY2VzdG9yOyBibG9jayA9IG1fZGF0YVtibG9j
a10uYW5jZXN0b3IpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgQ29uc2lkZXJpbmcgIiwgKmJsb2NrLCAiIHdpdGggc2VtaW51bWJl
ciAiLCBtX2RhdGFbYmxvY2tdLnNlbWlOdW1iZXIsICJcbiIpOworICAgICAgICAgICAgaWYgKG1f
ZGF0YVtibG9ja10uc2VtaU51bWJlciA8IG1fZGF0YVtjYW5kaWRhdGVdLnNlbWlOdW1iZXIpCisg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gYmxvY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEV2YWwgcmV0dXJuaW5nICIs
ICpjYW5kaWRhdGUsICIgZm9yICIsICpvcmlnaW5hbEJsb2NrLCAiXG4iKTsKKyAgICAgICAgcmV0
dXJuIGNhbmRpZGF0ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21wcmVzcyhCYXNpY0Jsb2Nr
KiBpbml0aWFsQmxvY2spCisgICAgeworICAgICAgICAvLyBUaGlzIHdhcyBtZWFudCB0byBiZSBh
IHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2UgcmVjdXJzaW9uIGJlY2F1c2Ug
d2UgZG9uJ3QKKyAgICAgICAgLy8gd2FudCB0byBibG93IHRoZSBzdGFjay4gVGhlIG9yaWdpbmFs
IGZ1bmN0aW9uIHdpbGwgY2FsbCBjb21wcmVzcygpIHJlY3Vyc2l2ZWx5IG9uIHRoZQorICAgICAg
ICAvLyBhbmNlc3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBhbiBhbmNlc3Rvci4gU28sIHdlIHBv
cHVsYXRlIG91ciB3b3JrbGlzdCB3aXRoIHRoZQorICAgICAgICAvLyByZWN1cnNpdmUgYW5jZXN0
b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNzIHRoZSBsaXN0IHN0YXJ0aW5nIGZy
b20gdGhlIGJsb2NrCisgICAgICAgIC8vIHRoYXQgaXMgZnVydGhlc3QgdXAgdGhlIGFuY2VzdG9y
IGNoYWluLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogYW5jZXN0b3IgPSBtX2RhdGFb
aW5pdGlhbEJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgQVNTRVJUKGFuY2VzdG9yKTsKKyAgICAg
ICAgaWYgKCFtX2RhdGFbYW5jZXN0b3JdLmFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gc3RhY2s7CisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSBpbml0aWFsQmxvY2s7IGJsb2NrOyBibG9jayA9IG1f
ZGF0YVtibG9ja10uYW5jZXN0b3IpCisgICAgICAgICAgICBzdGFjay5hcHBlbmQoYmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IGJsb2NrcyB0aGF0IGhhdmUg
YW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRoZSBsYXN0IHR3bworICAgICAgICAv
LyBlbGVtZW50cyBpbiB0aGUgc3RhY2sgd29uJ3Qgc2F0aXNmeSB0aGlzIHByb3BlcnR5LgorICAg
ICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgICAgICBBU1NFUlQoIW1fZGF0YVtz
dGFja1tzdGFjay5zaXplKCkgLSAxXV0uYW5jZXN0b3IpOworICAgICAgICBBU1NFUlQoIW1fZGF0
YVttX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl1dLmFuY2VzdG9yXS5hbmNlc3Rvcik7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXplKCkgLSAyOyBpLS07
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHN0YWNrW2ldOworICAgICAgICAg
ICAgQmFzaWNCbG9jayomIGxhYmVsT2ZCbG9jayA9IG1fZGF0YVtibG9ja10ubGFiZWw7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiYgYW5jZXN0b3JPZkJsb2NrID0gbV9kYXRhW2Jsb2NrXS5hbmNl
c3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvck9mQmxvY2spOworICAgICAgICAgICAg
QVNTRVJUKG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9yKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQmFzaWNCbG9jayogbGFiZWxPZkFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVth
bmNlc3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9k
YXRhW2xhYmVsT2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIgPAorICAgICAgICAgICAgICAg
IG1fZGF0YVtsYWJlbE9mQmxvY2tdLnNlbWlOdW1iZXIpCisgICAgICAgICAgICAgICAgbGFiZWxP
ZkJsb2NrID0gbGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAgICAgICAgIGFuY2VzdG9yT2ZC
bG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9yOworICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gV2Uga25vdyB0aGF0IHRoZSBlbnRyeSBibG9jayBpcyBvbmx5IGRvbWluYXRl
ZCBieSBpdHNlbGYuCi0gICAgbV9yZXN1bHRzWzBdLmNsZWFyQWxsKCk7Ci0gICAgbV9yZXN1bHRz
WzBdLnNldCgwKTsKKyAgICBzdHJ1Y3QgQmxvY2tEYXRhIHsKKyAgICAgICAgQmxvY2tEYXRhKCkK
KyAgICAgICAgICAgIDogcGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHByZU51bWJlcihV
SU5UX01BWCkKKyAgICAgICAgICAgICwgc2VtaU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAg
ICwgYW5jZXN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICwgbGFiZWwobnVsbHB0cikKKyAgICAg
ICAgICAgICwgZG9tKG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQmFzaWNCbG9jayogcGFyZW50OworICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7Cisg
ICAgICAgIHVuc2lnbmVkIHNlbWlOdW1iZXI7CisgICAgICAgIEJhc2ljQmxvY2sqIGFuY2VzdG9y
OworICAgICAgICBCYXNpY0Jsb2NrKiBsYWJlbDsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBidWNrZXQ7CisgICAgICAgIEJhc2ljQmxvY2sqIGRvbTsKKyAgICB9OworICAgIAorICAgIEdy
YXBoJiBtX2dyYXBoOworICAgIEJsb2NrTWFwPEJsb2NrRGF0YT4gbV9kYXRhOworICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gbV9ibG9ja0J5UHJlTnVtYmVyOworfTsKKworc3RydWN0IFZhbGlkYXRp
b25Db250ZXh0IHsKKyAgICBWYWxpZGF0aW9uQ29udGV4dChHcmFwaCYgZ3JhcGgsIERvbWluYXRv
cnMmIGRvbWluYXRvcnMpCisgICAgICAgIDogZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgZG9taW5h
dG9ycyhkb21pbmF0b3JzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBvcnRFcnJv
cihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bywgY29uc3QgY2hhciogbWVzc2FnZSkK
KyAgICB7CisgICAgICAgIEVycm9yIGVycm9yOworICAgICAgICBlcnJvci5mcm9tID0gZnJvbTsK
KyAgICAgICAgZXJyb3IudG8gPSB0bzsKKyAgICAgICAgZXJyb3IubWVzc2FnZSA9IG1lc3NhZ2U7
CisgICAgICAgIGVycm9ycy5hcHBlbmQoZXJyb3IpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGhh
bmRsZUVycm9ycygpCisgICAgeworICAgICAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKKyAgICAg
ICAgZGF0YUxvZygiREZHIERPTUlOQVRPUiBWQUxJREFUSU9OIEZBSUxFRDpcbiIpOworICAgICAg
ICBkYXRhTG9nKCJcbiIpOworICAgICAgICBkYXRhTG9nKCJGb3IgYmxvY2sgZG9taW5hdGlvbiBy
ZWxhdGlvbnNoaXBzOlxuIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlcnJv
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
IiAgICAiLCBwb2ludGVyRHVtcChlcnJvcnNbaV0uZnJvbSksICIgLT4gIiwgcG9pbnRlckR1bXAo
ZXJyb3JzW2ldLnRvKSwKKyAgICAgICAgICAgICAgICAiICgiLCBlcnJvcnNbaV0ubWVzc2FnZSwg
IilcbiIpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFM
b2coIkNvbnRyb2wgZmxvdyBncmFwaDpcbiIpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogc3VjY2Vz
c29ycyA9IFsiKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+bnVtU3VjY2Vzc29ycygpOyArK2kpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5zdWNjZXNzb3IoaSkpOworICAg
ICAgICAgICAgZGF0YUxvZygiXSwgcHJlZGVjZXNzb3JzID0gWyIpOworICAgICAgICAgICAgY29t
bWEgPSBDb21tYVByaW50ZXIoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coY29tbWEsICpibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgIGRhdGFMb2co
Il1cbiIpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFM
b2coIkxlbmdhdWVyLVRhcmphbiBEb21pbmF0b3JzOlxuIik7CisgICAgICAgIGRhdGFMb2coZG9t
aW5hdG9ycyk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIk5haXZl
IERvbWluYXRvcnM6XG4iKTsKKyAgICAgICAgbmFpdmVEb21pbmF0b3JzLmR1bXAoZ3JhcGgsIFdU
Rjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2co
IkdyYXBoIGF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBncmFwaC5kdW1wKCk7Cisg
ICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIGRhdGFMb2coIkRGRyBET01JTkFUT1IgVkFM
SURBVElPTiBGQUlMSUVEIVxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAg
IEdyYXBoJiBncmFwaDsKKyAgICBEb21pbmF0b3JzJiBkb21pbmF0b3JzOworICAgIE5haXZlRG9t
aW5hdG9ycyBuYWl2ZURvbWluYXRvcnM7CisgICAgCisgICAgc3RydWN0IEVycm9yIHsKKyAgICAg
ICAgQmFzaWNCbG9jayogZnJvbTsKKyAgICAgICAgQmFzaWNCbG9jayogdG87CisgICAgICAgIGNv
bnN0IGNoYXIqIG1lc3NhZ2U7CisgICAgfTsKKyAgICAKKyAgICBWZWN0b3I8RXJyb3I+IGVycm9y
czsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi0gICAgLy8gRmluZCBhbGwgb2Yg
dGhlIHZhbGlkIGJsb2Nrcy4KLSAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5ibG9jayhp
KSkKK3ZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgTGVuZ2F1
ZXJUYXJqYW4gbGVuZ2F1ZXJUYXJqYW4oZ3JhcGgpOworICAgIGxlbmdhdWVyVGFyamFuLmNvbXB1
dGUoKTsKKworICAgIG1fZGF0YSA9IEJsb2NrTWFwPEJsb2NrRGF0YT4oZ3JhcGgpOworICAgIAor
ICAgIC8vIEZyb20gaGVyZSB3ZSB3YW50IHRvIGJ1aWxkIGEgc3Bhbm5pbmcgdHJlZSB3aXRoIGJv
dGggdXB3YXJkIGFuZCBkb3dud2FyZCBsaW5rcyBhbmQgd2Ugd2FudAorICAgIC8vIHRvIGRvIGEg
c2VhcmNoIG92ZXIgdGhpcyB0cmVlIHRvIGNvbXB1dGUgcHJlIGFuZCBwb3N0IG51bWJlcnMgdGhh
dCBjYW4gYmUgdXNlZCBmb3IgZG9taW5hbmNlCisgICAgLy8gdGVzdHMuCisgICAgCisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1f
c2NyYXRjaC5zZXQoaSk7CisgICAgICAgIAorICAgICAgICBCYXNpY0Jsb2NrKiBpZG9tQmxvY2sg
PSBsZW5nYXVlclRhcmphbi5pbW1lZGlhdGVEb21pbmF0b3IoYmxvY2spOworICAgICAgICBtX2Rh
dGFbYmxvY2tdLmlkb21QYXJlbnQgPSBpZG9tQmxvY2s7CisgICAgICAgIGlmIChpZG9tQmxvY2sp
CisgICAgICAgICAgICBtX2RhdGFbaWRvbUJsb2NrXS5pZG9tS2lkcy5hcHBlbmQoYmxvY2spOwog
ICAgIH0KICAgICAKLSAgICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0
aGluZy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7Ci0gICAg
ICAgIGlmICghZ3JhcGguYmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOwotICAgIH0KLQot
ICAgIC8vIEl0ZXJhdGl2ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9y
LgotICAgIGJvb2wgY2hhbmdlZDsKLSAgICBkbyB7Ci0gICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
LSAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9y
d2FyZCBzY2FuLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyAr
K2kpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7Ci0K
LSAgICAgICAgaWYgKCFjaGFuZ2VkKQorICAgIHVuc2lnbmVkIG5leHRQcmVOdW1iZXIgPSAwOwor
ICAgIHVuc2lnbmVkIG5leHRQb3N0TnVtYmVyID0gMDsKKyAgICAKKyAgICAvLyBQbGFpbiBzdGFj
ay1iYXNlZCB3b3JrbGlzdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlYWNoIGJs
b2NrIGV4YWN0bHkgb25jZSBhbnl3YXkuCisgICAgVmVjdG9yPEJsb2NrV2l0aE9yZGVyPiB3b3Jr
bGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoZ3JhcGguYmxvY2soMCks
IFByZU9yZGVyKSk7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
QmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIHN3aXRj
aCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgbV9k
YXRhW2l0ZW0uYmxvY2tdLnByZU51bWJlciA9IG5leHRQcmVOdW1iZXIrKzsKKyAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChCbG9ja1dpdGhPcmRlcihpdGVtLmJsb2NrLCBQb3N0T3JkZXIpKTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayoga2lkIDogbV9kYXRhW2l0ZW0uYmxvY2tdLmlk
b21LaWRzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChCbG9ja1dpdGhPcmRlcihr
aWQsIFByZU9yZGVyKSk7CiAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBQcnVuZSBk
b21pbmF0b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBiYWNrd2FyZCBzY2FuLgotICAgICAg
ICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2Nrczsg
aS0tID4gMTspCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwg
aSk7Ci0gICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAg
ICAgICAgICAgbV9kYXRhW2l0ZW0uYmxvY2tdLnBvc3ROdW1iZXIgPSBuZXh0UG9zdE51bWJlcisr
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKHZh
bGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgb3VyIGRvbWluYXRvciBjYWxj
dWxhdGlvbjoKKyAgICAgICAgLy8gMSkgQ2hlY2sgdGhhdCBvdXIgcmFuZ2UtYmFzZWQgYW5jZXN0
cnkgdGVzdCBpcyB0aGUgc2FtZSBhcyBhIG5haXZlIGFuY2VzdHJ5IHRlc3QuCisgICAgICAgIC8v
IDIpIENoZWNrIHRoYXQgb3VyIG5vdGlvbiBvZiB3aG8gZG9taW5hdGVzIHdob20gaXMgaWRlbnRp
Y2FsIHRvIGEgbmFpdmUgKG5vdAorICAgICAgICAvLyAgICBMZW5nYXVlci1UYXJqYW4pIGRvbWlu
YXRvciBjYWxjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgIFZhbGlkYXRpb25Db250ZXh0IGNv
bnRleHQoZ3JhcGgsICp0aGlzKTsKKyAgICAgICAgY29udGV4dC5uYWl2ZURvbWluYXRvcnMuY29t
cHV0ZShncmFwaCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggZnJvbUJsb2Nr
SW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgZnJvbUJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGZyb21CbG9jayA9IGdyYXBoLmJsb2NrKGZyb21CbG9ja0luZGV4KTsK
KyAgICAgICAgICAgIGlmICghZnJvbUJsb2NrIHx8IG1fZGF0YVtmcm9tQmxvY2tdLnByZU51bWJl
ciA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCB0b0Jsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgdG9CbG9ja0lu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG9CbG9jayA9IGdyYXBoLmJs
b2NrKHRvQmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCF0b0Jsb2NrIHx8IG1fZGF0
YVt0b0Jsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkb21pbmF0ZXMo
ZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBuYWl2ZURvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2sp
KQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9C
bG9jaywgIlJhbmdlLWJhc2VkIGRvbWluYXRpb24gY2hlY2sgaXMgYnJva2VuIik7CisgICAgICAg
ICAgICAgICAgaWYgKGRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spICE9IGNvbnRleHQubmFp
dmVEb21pbmF0b3JzLmRvbWluYXRlcyhmcm9tQmxvY2ssIHRvQmxvY2spKQorICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKGZyb21CbG9jaywgdG9CbG9jaywgIkxlbmdhdWVy
LVRhcmphbiBkb21pbmF0aW9uIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBjb250ZXh0LmhhbmRsZUVycm9ycygpOworICAgIH0KIH0KIAot
Ym9vbCBEb21pbmF0b3JzOjpwcnVuZURvbWluYXRvcnMoR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4
IGlkeCkKK2Jvb2wgRG9taW5hdG9yczo6bmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pIGNvbnN0CiB7Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5i
bG9jayhpZHgpOwotCi0gICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRmluZCB0aGUgaW50ZXJzZWN0
aW9uIG9mIGRvbShwcmVkcykuCi0gICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnBy
ZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCi0gICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9y
ZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7Ci0KLSAgICAvLyBUaGUgYmxv
Y2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1fc2NyYXRjaC5zZXQoaWR4KTsK
LQotICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSB0bzsgYmxvY2s7IGJsb2NrID0gbV9kYXRhW2Jsb2Nr
XS5pZG9tUGFyZW50KSB7CisgICAgICAgIGlmIChibG9jayA9PSBmcm9tKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBEb21pbmF0
b3JzOjpkdW1wKEdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgRG9t
aW5hdG9yczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGdyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykKKyAgICBpZiAoIWlzVmFsaWQoKSkgeworICAg
ICAgICBvdXQucHJpbnQoIiAgICBOb3QgVmFsaWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2RhdGEuc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgaWYgKG1fZGF0YVtibG9j
a0luZGV4XS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgKmJsb2NrLCAiOiIpOwotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggb3RoZXJJbmRleCA9IDA7IG90aGVySW5kZXggPCBncmFwaC5udW1CbG9ja3Mo
KTsgKytvdGhlckluZGV4KSB7Ci0gICAgICAgICAgICBpZiAoIWRvbWluYXRlcyhibG9jay0+aW5k
ZXgsIG90aGVySW5kZXgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
b3V0LnByaW50KCIgIyIsIG90aGVySW5kZXgpOwotICAgICAgICB9Ci0gICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG91dC5wcmludCgiICAgIEJsb2NrICMiLCBibG9j
a0luZGV4LCAiOiBpZG9tID0gIiwgcG9pbnRlckR1bXAobV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21Q
YXJlbnQpLCAiLCBpZG9tS2lkcyA9IFsiKTsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kYXRhW2Jsb2NrSW5kZXhdLmlkb21L
aWRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbV9kYXRhW2Js
b2NrSW5kZXhdLmlkb21LaWRzW2ldKTsKKyAgICAgICAgb3V0LnByaW50KCJdLCBwcmUvcG9zdCA9
ICIsIG1fZGF0YVtibG9ja0luZGV4XS5wcmVOdW1iZXIsICIvIiwgbV9kYXRhW2Jsb2NrSW5kZXhd
LnBvc3ROdW1iZXIsICJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJERkdBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CiAKQEAgLTQ0LDI0ICs0NSwzOSBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBjb21wdXRlKEdyYXBoJik7CiAgICAgCi0gICAgYm9vbCBkb21pbmF0
ZXMoQmxvY2tJbmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIGJvb2wgc3RyaWN0
bHlEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0
b10uZ2V0KGZyb20pOworICAgICAgICByZXR1cm4gbV9kYXRhW3RvXS5wcmVOdW1iZXIgPiBtX2Rh
dGFbZnJvbV0ucHJlTnVtYmVyCisgICAgICAgICAgICAmJiBtX2RhdGFbdG9dLnBvc3ROdW1iZXIg
PCBtX2RhdGFbZnJvbV0ucG9zdE51bWJlcjsKICAgICB9CiAgICAgCiAgICAgYm9vbCBkb21pbmF0
ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gZG9taW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOworICAgICAgICByZXR1
cm4gZnJvbSA9PSB0byB8fCBzdHJpY3RseURvbWluYXRlcyhmcm9tLCB0byk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgZHVtcChHcmFwaCYsIFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgcHJ1bmVE
b21pbmF0b3JzKEdyYXBoJiwgQmxvY2tJbmRleCk7CisgICAgYm9vbCBuYWl2ZURvbWluYXRlcyhC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3Q7CiAgICAgCi0gICAgVmVjdG9y
PEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsgLy8gRm9yIGVhY2ggYmxvY2ssIHRoZSBiaXR2ZWN0
b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5hdGUgaXQuCi0gICAgRmFzdEJpdFZlY3RvciBtX3NjcmF0
Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZlY3RvciB3aXRoIGJpdCBmb3IgZWFjaCBibG9jay4gV2Ug
cmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3L2RlbGV0ZXMuCisgICAgc3RydWN0IEJsb2NrRGF0YSB7
CisgICAgICAgIEJsb2NrRGF0YSgpCisgICAgICAgICAgICA6IGlkb21QYXJlbnQobnVsbHB0cikK
KyAgICAgICAgICAgICwgcHJlTnVtYmVyKFVJTlRfTUFYKQorICAgICAgICAgICAgLCBwb3N0TnVt
YmVyKFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxCYXNpY0Jsb2NrKj4gaWRvbUtpZHM7CisgICAgICAgIEJhc2ljQmxvY2sqIGlkb21QYXJl
bnQ7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwcmVOdW1iZXI7CisgICAgICAgIHVuc2ln
bmVkIHBvc3ROdW1iZXI7CisgICAgfTsKKyAgICAKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1f
ZGF0YTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRU
eXBlLmgiCiAjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29y
a2xpc3QuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCkBAIC0z
NzAsMTQgKzM3MSwxOCBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0m
CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2stPmluZGV4KSkKKyAgICAgICAgICAgIGlmICghdGhpcy0+YmxvY2so
aSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIW1fZG9taW5h
dG9ycy5kb21pbmF0ZXModGhpcy0+YmxvY2soaSksIGJsb2NrKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKICAgICAgICAgfQogICAg
ICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWlu
YXRlczoiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrLT5p
bmRleCwgaSkpCisgICAgICAgICAgICBpZiAoIXRoaXMtPmJsb2NrKGkpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJs
b2NrLCB0aGlzLT5ibG9jayhpKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KQEAgLTYzNSw3MyArNjQwLDMwIEBA
IHZvaWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2MKICAgICB9CiB9CiAKLS8v
IFV0aWxpdGllcyBmb3IgcHJlLSBhbmQgcG9zdC1vcmRlciB0cmF2ZXJzYWxzLgotbmFtZXNwYWNl
IHsKLQotaW5saW5lIHZvaWQgYWRkRm9yUHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVz
dWx0LCBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJpdFZlY3RvciYgc2Vlbiwg
QmFzaWNCbG9jayogYmxvY2spCi17Ci0gICAgaWYgKHNlZW4uZ2V0KGJsb2NrLT5pbmRleCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKLSAgICB3b3Jr
bGlzdC5hcHBlbmQoYmxvY2spOwotICAgIHNlZW4uc2V0KGJsb2NrLT5pbmRleCk7Ci19Ci0KLWVu
dW0gUG9zdE9yZGVyVGFza0tpbmQgewotICAgIFBvc3RPcmRlckZpcnN0VmlzaXQsCi0gICAgUG9z
dE9yZGVyQWRkVG9SZXN1bHQKLX07Ci0KLXN0cnVjdCBQb3N0T3JkZXJUYXNrIHsKLSAgICBQb3N0
T3JkZXJUYXNrKEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgUG9zdE9yZGVyVGFza0tpbmQg
a2luZCA9IFBvc3RPcmRlckZpcnN0VmlzaXQpCi0gICAgICAgIDogbV9ibG9jayhibG9jaykKLSAg
ICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7Ci0gICAgUG9zdE9yZGVyVGFza0tpbmQgbV9raW5kOwotfTsKLQotaW5saW5lIHZv
aWQgYWRkRm9yUG9zdE9yZGVyKFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAxNj4mIHdvcmtsaXN0LCBC
aXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2NrKQotewotICAgIGlmIChzZWVuLmdldChi
bG9jay0+aW5kZXgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgd29ya2xpc3QuYXBwZW5k
KFBvc3RPcmRlclRhc2soYmxvY2ssIFBvc3RPcmRlckZpcnN0VmlzaXQpKTsKLSAgICBzZWVuLnNl
dChibG9jay0+aW5kZXgpOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQogdm9pZCBH
cmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcihWZWN0b3I8QmFzaWNCbG9jayo+JiByZXN1bHQpCiB7
Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgQml0VmVjdG9yIHNl
ZW47Ci0gICAgYWRkRm9yUHJlT3JkZXIocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2soMCkp
OwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2soMCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBi
bG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQot
ICAgICAgICAgICAgYWRkRm9yUHJlT3JkZXIocmVzdWx0LCB3b3JrbGlzdCwgc2VlbiwgYmxvY2st
PnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5zdWNjZXNz
b3IoaSkpOwogICAgIH0KIH0KIAogdm9pZCBHcmFwaDo6Z2V0QmxvY2tzSW5Qb3N0T3JkZXIoVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxQb3N0T3JkZXJUYXNrLCAx
Nj4gd29ya2xpc3Q7Ci0gICAgQml0VmVjdG9yIHNlZW47Ci0gICAgYWRkRm9yUG9zdE9yZGVyKHdv
cmtsaXN0LCBzZWVuLCBibG9jaygwKSk7Ci0gICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgUG9zdE9yZGVyVGFzayB0YXNrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKLSAg
ICAgICAgc3dpdGNoICh0YXNrLm1fa2luZCkgewotICAgICAgICBjYXNlIFBvc3RPcmRlckZpcnN0
VmlzaXQ6Ci0gICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoUG9zdE9yZGVyVGFzayh0YXNrLm1f
YmxvY2ssIFBvc3RPcmRlckFkZFRvUmVzdWx0KSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB0YXNrLm1fYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgICAg
ICBhZGRGb3JQb3N0T3JkZXIod29ya2xpc3QsIHNlZW4sIHRhc2subV9ibG9jay0+c3VjY2Vzc29y
KGkpKTsKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0
LnB1c2goYmxvY2soMCkpOworICAgIHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xp
c3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2Ug
UHJlT3JkZXI6CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZW0uYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsg
aS0tOykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGl0ZW0uYmxvY2stPnN1Y2Nlc3Nv
cihpKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQb3N0T3JkZXJBZGRUb1Jl
c3VsdDoKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodGFzay5tX2Jsb2NrKTsKKyAgICAgICAg
Y2FzZSBQb3N0T3JkZXI6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0uYmxvY2spOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3Mjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVk
ZSAiREZHQmxvY2tTZXQuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAi
REZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKQEAgLTUwLDcgKzUxLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7
CiAgICAgICAgIAotICAgICAgICBCaXRWZWN0b3IgYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Q
b2ludHM7CisgICAgICAgIEJsb2NrU2V0IGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRz
OwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBo
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CkBAIC02MywxNyArNjQsMTggQEAgcHVi
bGljOgogICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBhc3N1bWVzIHRoYXQgY29udHJvbCBmbG93
IG9jY3VycyBhdCBieXRlY29kZSBpbnN0cnVjdGlvbiBib3VuZGFyaWVzLgogICAgICAgICAgICAg
aWYgKG1fb3JpZ2luVGhhdEhhZEZpcmUuaXNTZXQoKSkgewogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICAg
ICAgICAgIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLnNldChibG9jay0+c3VjY2Vz
c29yKGkpLT5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RoYXROZWVkSW52YWxp
ZGF0aW9uUG9pbnRzLmFkZChibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgaWYgKCFi
bG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5nZXQoYmxvY2tJbmRleCkpCisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisKKyAg
ICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZhbGlkYXRpb25Qb2ludHMuY29udGFpbnMo
YmxvY2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpbnNlcnRJbnZhbGlkYXRpb25DaGVjaygwLCBibG9jay0+YXQoMCkpOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9y
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR05haXZlRG9taW5hdG9ycy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitOYWl2ZURvbWluYXRvcnM6Ok5haXZlRG9taW5h
dG9ycygpCit7Cit9CisKK05haXZlRG9taW5hdG9yczo6fk5haXZlRG9taW5hdG9ycygpCit7Cit9
CisKK3ZvaWQgTmFpdmVEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKK3sKKyAgICAv
LyBUaGlzIGltcGxlbWVudHMgYSBuYWl2ZSBkb21pbmF0b3Igc29sdmVyLgorICAgIAorICAgIEFT
U0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CisgICAgCisgICAg
dW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVtQmxvY2tzKCk7CisgICAgCisgICAgLy8gQWxs
b2NhdGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXguIAorICAgIGlmIChu
dW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CisgICAgICAgIG1fcmVzdWx0cy5ncm93KG51
bUJsb2Nrcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKKyAg
ICAgICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxvY2tzKTsKKyAgICAgICAgbV9zY3Jh
dGNoLnJlc2l6ZShudW1CbG9ja3MpOworICAgIH0KKworICAgIC8vIFdlIGtub3cgdGhhdCB0aGUg
ZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fcmVzdWx0c1sw
XS5jbGVhckFsbCgpOworICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7CisKKyAgICAvLyBGaW5kIGFs
bCBvZiB0aGUgdmFsaWQgYmxvY2tzLgorICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykgeworICAgICAgICBpZiAoIWdyYXBoLmJs
b2NrKGkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7
CisgICAgfQorICAgIAorICAgIC8vIE1hcmsgYWxsIG5vZGVzIGFzIGRvbWluYXRlZCBieSBldmVy
eXRoaW5nLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspIHsKKyAg
ICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVjZXNzb3Jz
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CisgICAgfQor
CisgICAgLy8gSXRlcmF0aXZlbHkgZWxpbWluYXRlIG5vZGVzIHRoYXQgYXJlIG5vdCBkb21pbmF0
b3IuCisgICAgYm9vbCBjaGFuZ2VkOworICAgIGRvIHsKKyAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAvLyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBm
b3J3YXJkIHNjYW4uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1CbG9ja3M7
ICsraSkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gcHJ1bmVEb21pbmF0b3JzKGdyYXBoLCBpKTsK
KworICAgICAgICBpZiAoIWNoYW5nZWQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAv
LyBQcnVuZSBkb21pbmF0b3JzIGluIGFsbCBub24gZW50cnkgYmxvY2tzOiBiYWNrd2FyZCBzY2Fu
LgorICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUJsb2NrczsgaS0tID4gMTspCisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9y
cyhncmFwaCwgaSk7CisgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cit9CisKK2Jvb2wgTmFpdmVEb21p
bmF0b3JzOjpwcnVuZURvbWluYXRvcnMoR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGlkeCkKK3sK
KyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGlkeCk7CisKKyAgICBpZiAoIWJs
b2NrIHx8IGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBGaW5kIHRoZSBpbnRlcnNlY3Rpb24gb2YgZG9tKHByZWRzKS4KKyAgICBt
X3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBdLT5pbmRleF0pOwor
ICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAx
OykKKyAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29y
c1tqXS0+aW5kZXhdKTsKKworICAgIC8vIFRoZSBibG9jayBpcyBhbHNvIGRvbWluYXRlZCBieSBp
dHNlbGYuCisgICAgbV9zY3JhdGNoLnNldChpZHgpOworCisgICAgcmV0dXJuIG1fcmVzdWx0c1tp
ZHhdLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7Cit9CisKK3ZvaWQgTmFpdmVEb21pbmF0b3JzOjpk
dW1wKEdyYXBoJiBncmFwaCwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgb3V0LnByaW50KCIgICAgQmxvY2sgIiwgKmJsb2NrLCAiOiIpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggb3RoZXJJbmRleCA9IDA7IG90aGVySW5kZXggPCBncmFwaC5udW1CbG9j
a3MoKTsgKytvdGhlckluZGV4KSB7CisgICAgICAgICAgICBpZiAoIWRvbWluYXRlcyhibG9jay0+
aW5kZXgsIG90aGVySW5kZXgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgIyIsIG90aGVySW5kZXgpOworICAgICAgICB9CisgICAgICAgIG91dC5w
cmludCgiXG4iKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05haXZlRG9taW5hdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTmFpdmVEb21pbmF0b3JzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdOYWl2ZURvbWluYXRvcnNfaAorI2RlZmluZSBERkdOYWl2ZURvbWlu
YXRvcnNfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gVGhpcyBjbGFzcyBpcyBvbmx5IHVzZWQgZm9yIHZhbGlkYXRpbmcgdGhlIHJlYWwgZG9taW5h
dG9ycyBpbXBsZW1lbnRhdGlvbi4KKworY2xhc3MgTmFpdmVEb21pbmF0b3JzIHsKK3B1YmxpYzoK
KyAgICBOYWl2ZURvbWluYXRvcnMoKTsKKyAgICB+TmFpdmVEb21pbmF0b3JzKCk7CisgICAgCisg
ICAgdm9pZCBjb21wdXRlKEdyYXBoJik7CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJ
bmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
cmVzdWx0c1t0b10uZ2V0KGZyb20pOworICAgIH0KKyAgICAKKyAgICBib29sIGRvbWluYXRlcyhC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRvLT5pbmRleCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcChHcmFwaCYsIFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGJvb2wgcHJ1bmVEb21pbmF0b3JzKEdyYXBoJiwgQmxvY2tJbmRleCk7CisgICAgCisgICAg
VmVjdG9yPEZhc3RCaXRWZWN0b3I+IG1fcmVzdWx0czsgLy8gRm9yIGVhY2ggYmxvY2ssIHRoZSBi
aXR2ZWN0b3Igb2YgYmxvY2tzIHRoYXQgZG9taW5hdGUgaXQuCisgICAgRmFzdEJpdFZlY3RvciBt
X3NjcmF0Y2g7IC8vIEEgdGVtcG9yYXJ5IGJpdHZlY3RvciB3aXRoIGJpdCBmb3IgZWFjaCBibG9j
ay4gV2UgcmVjeWNsZSB0aGlzIHRvIHNhdmUgbmV3L2RlbGV0ZXMuCit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR05haXZlRG9taW5hdG9yc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05hdHVyYWxMb29wcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuY3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDExIEBAIHZvaWQgTmF0dXJhbExvb3A6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIE5hdHVy
YWxMb29wczo6TmF0dXJhbExvb3BzKCkgeyB9CiBOYXR1cmFsTG9vcHM6On5OYXR1cmFsTG9vcHMo
KSB7IH0KIAordm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGVEZXBlbmRlbmNpZXMoR3JhcGgmIGdy
YXBoKQoreworICAgIGdyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgp
OworfQorCiB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiB7CiAgICAg
Ly8gSW1wbGVtZW50IHRoZSBjbGFzc2ljIGRvbWluYXRvci1iYXNlZCBuYXR1cmFsIGxvb3AgZmlu
ZGVyLiBUaGUgZmlyc3QKQEAgLTU3LDExICs2Miw5IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21w
dXRlKEdyYXBoJiBncmFwaCkKICAgICAKICAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiAgICAgCi0gICAgZ3JhcGgubV9kb21pbmF0b3JzLmNvbXB1dGVJZk5lY2Vzc2FyeShn
cmFwaCk7Ci0gICAgCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiRG9taW5h
dG9yczpcbiIpOwotICAgICAgICBncmFwaC5tX2RvbWluYXRvcnMuZHVtcChncmFwaCwgV1RGOjpk
YXRhRmlsZSgpKTsKKyAgICAgICAgZ3JhcGgubV9kb21pbmF0b3JzLmR1bXAoV1RGOjpkYXRhRmls
ZSgpKTsKICAgICB9CiAgICAgCiAgICAgbV9sb29wcy5yZXNpemUoMCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJldmlzaW9uIDE3Mjk0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogICAgIE5hdHVyYWxMb29wcygpOwogICAg
IH5OYXR1cmFsTG9vcHMoKTsKICAgICAKKyAgICB2b2lkIGNvbXB1dGVEZXBlbmRlbmNpZXMoR3Jh
cGgmKTsKICAgICB2b2lkIGNvbXB1dGUoR3JhcGgmKTsKICAgICAKICAgICB1bnNpZ25lZCBudW1M
b29wcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNywyNCArMTE3LDMx
IEBAIHB1YmxpYzogCiAgICAgICAgIHJldHVybiAhIShiaXRzKClbYml0IC8gYml0c0luUG9pbnRl
cigpXSAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRl
cigpIC0gMSkpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcXVpY2tTZXQoc2l6ZV90IGJpdCkK
KyAgICBib29sIHF1aWNrU2V0KHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihiaXQgPCBzaXplKCkpOwotICAgICAgICBiaXRzKClbYml0
IC8gYml0c0luUG9pbnRlcigpXSB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0
ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgICAgIHVpbnRwdHJfdCYgd29yZCA9IGJp
dHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVyKCldOworICAgICAgICB1aW50cHRyX3QgbWFzayA9IHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSk7
CisgICAgICAgIGJvb2wgcmVzdWx0ID0gISEod29yZCAmIG1hc2spOworICAgICAgICB3b3JkIHw9
IG1hc2s7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgcXVp
Y2tDbGVhcihzaXplX3QgYml0KQorICAgIGJvb2wgcXVpY2tDbGVhcihzaXplX3QgYml0KQogICAg
IHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYml0IDwgc2l6ZSgp
KTsKLSAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJj0gfihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICAg
ICAgdWludHB0cl90JiB3b3JkID0gYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV07CisgICAg
ICAgIHVpbnRwdHJfdCBtYXNrID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYg
KGJpdHNJblBvaW50ZXIoKSAtIDEpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhISh3b3JkICYg
bWFzayk7CisgICAgICAgIHdvcmQgJj0gfm1hc2s7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcXVpY2tTZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKKyAg
ICBib29sIHF1aWNrU2V0KHNpemVfdCBiaXQsIGJvb2wgdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAodmFsdWUpCi0gICAgICAgICAgICBxdWlja1NldChiaXQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBxdWlja0NsZWFyKGJpdCk7CisgICAgICAgICAgICByZXR1cm4gcXVpY2tTZXQoYml0
KTsKKyAgICAgICAgcmV0dXJuIHF1aWNrQ2xlYXIoYml0KTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBnZXQoc2l6ZV90IGJpdCkgY29uc3QKQEAgLTE0NCwzMSArMTUxLDMwIEBAIHB1YmxpYzogCiAg
ICAgICAgIHJldHVybiBxdWlja0dldChiaXQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldChz
aXplX3QgYml0KQorICAgIGJvb2wgc2V0KHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBlbnN1
cmVTaXplKGJpdCArIDEpOwotICAgICAgICBxdWlja1NldChiaXQpOworICAgICAgICByZXR1cm4g
cXVpY2tTZXQoYml0KTsKICAgICB9CiAKLSAgICB2b2lkIGVuc3VyZVNpemVBbmRTZXQoc2l6ZV90
IGJpdCwgc2l6ZV90IHNpemUpCisgICAgYm9vbCBlbnN1cmVTaXplQW5kU2V0KHNpemVfdCBiaXQs
IHNpemVfdCBzaXplKQogICAgIHsKICAgICAgICAgZW5zdXJlU2l6ZShzaXplKTsKLSAgICAgICAg
cXVpY2tTZXQoYml0KTsKKyAgICAgICAgcmV0dXJuIHF1aWNrU2V0KGJpdCk7CiAgICAgfQogCi0g
ICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQorICAgIGJvb2wgY2xlYXIoc2l6ZV90IGJpdCkKICAg
ICB7CiAgICAgICAgIGlmIChiaXQgPj0gc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBxdWlja0NsZWFyKGJpdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBxdWlja0NsZWFyKGJpdCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0KHNpemVf
dCBiaXQsIGJvb2wgdmFsdWUpCisgICAgYm9vbCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHNldChiaXQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBjbGVhcihiaXQpOworICAgICAgICAgICAgcmV0dXJuIHNldChi
aXQpOworICAgICAgICByZXR1cm4gY2xlYXIoYml0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBt
ZXJnZShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237285</attachid>
            <date>2014-08-27 21:11:24 -0700</date>
            <delta_ts>2014-08-28 08:03:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75630</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTczMDQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE0LTA4LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBjb21wdXRlIGltbWVkaWF0ZSBkb21pbmF0b3JzIHVzaW5nIHRoZSBPKG4gbG9n
IG4pIGZvcm0gb2YgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJBIEZhc3QgQWxnb3JpdGhtIGZvciBG
aW5kaW5nIERvbWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzM2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgc29t
ZSBuZXcgdXRpbGl0aWVzIGZvciByZWFzb25pbmcgYWJvdXQgYmxvY2sta2V5ZWQgbWFwcywgYmxv
Y2sgc2V0cywKKyAgICAgICAgYW5kIGJsb2NrIHdvcmtsaXN0cy4gSXQgY2hhbmdlcyBwcmVleGlz
dGluZyBjb2RlIHRvIHVzZSB0aGVzZSBhYnN0cmFjdGlvbnMuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBkZmcvREZHQW5hbHlzaXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
bmFseXNpczo6Y29tcHV0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBbmFseXNp
czo6Y29tcHV0ZURlcGVuZGVuY2llcyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrTWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrTWFwOjpCbG9ja01hcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QmxvY2tNYXA6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrTWFwOjph
dEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja01hcDo6b3BlcmF0b3JbXSk6CisgICAg
ICAgICogZGZnL0RGR0Jsb2NrTWFwSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpCbG9ja01hcDxUPjo6QmxvY2tNYXApOgorICAgICAgICAqIGRmZy9ERkdCbG9ja1NldC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCbG9ja1NldDo6QmxvY2tTZXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJsb2NrU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OkJsb2NrU2V0Ojpj
b250YWlucyk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpCbG9ja1dvcmtsaXN0OjpCbG9ja1dvcmtsaXN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCbG9ja1dvcmtsaXN0Ojp+QmxvY2tXb3JrbGlzdCk6CisgICAgICAgIChKU0M6
OkRGRzo6QmxvY2tXb3JrbGlzdDo6cHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tXb3Jr
bGlzdDo6cG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpQ
b3N0T3JkZXJCbG9ja1dvcmtsaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjpQb3N0T3JkZXJCbG9j
a1dvcmtsaXN0Ojp+UG9zdE9yZGVyQmxvY2tXb3JrbGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6cHVzaFByZSk6CisgICAgICAgIChKU0M6OkRGRzo6UG9z
dE9yZGVyQmxvY2tXb3JrbGlzdDo6cHVzaFBvc3QpOgorICAgICAgICAoSlNDOjpERkc6OlBvc3RP
cmRlckJsb2NrV29ya2xpc3Q6OnBvcCk6CisgICAgICAgICogZGZnL0RGR0Jsb2NrV29ya2xpc3Qu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QmxvY2tXb3JrbGlzdDo6bm90RW1wdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkJsb2NrV2l0aDo6QmxvY2tXaXRoKToKKyAgICAgICAgKEpTQzo6
REZHOjpCbG9ja1dpdGg6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeHRlbmRlZEJsb2NrV29ya2xpc3Q6OkV4dGVuZGVkQmxvY2tXb3JrbGlzdCk6
CisgICAgICAgIChKU0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpmb3JjZVB1c2gpOgor
ICAgICAgICAoSlNDOjpERkc6OkV4dGVuZGVkQmxvY2tXb3JrbGlzdDo6cHVzaCk6CisgICAgICAg
IChKU0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpub3RFbXB0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6RXh0ZW5kZWRCbG9ja1dvcmtsaXN0Ojpwb3ApOgorICAgICAgICAoSlNDOjpERkc6
OkJsb2NrV2l0aE9yZGVyOjpCbG9ja1dpdGhPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qmxv
Y2tXaXRoT3JkZXI6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoKToKKyAgICAgICAgKEpTQzo6REZH
OjpQb3N0T3JkZXJCbG9ja1dvcmtsaXN0Ojpub3RFbXB0eSk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHRG9taW5hdG9ycy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RG9taW5hdG9yczo6Y29tcHV0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RG9taW5h
dG9yczo6bmFpdmVEb21pbmF0ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR0RvbWluYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpEb21pbmF0b3JzOjpzdHJpY3RseURvbWluYXRlcyk6CisgICAgICAgIChKU0M6OkRGRzo6RG9t
aW5hdG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpEb21pbmF0b3JzOjpCbG9j
a0RhdGE6OkJsb2NrRGF0YSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6Z2V0QmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omdl
dEJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBkZmcvREZHSW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW52YWxpZGF0aW9uUG9pbnRJ
bmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTmFpdmVEb21pbmF0b3JzLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWlu
YXRvcnMpOgorICAgICAgICAoSlNDOjpERkc6Ok5haXZlRG9taW5hdG9yczo6fk5haXZlRG9taW5h
dG9ycyk6CisgICAgICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpjb21wdXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOYWl2ZURvbWluYXRvcnM6OnBydW5lRG9taW5hdG9ycyk6CisgICAg
ICAgIChKU0M6OkRGRzo6TmFpdmVEb21pbmF0b3JzOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
TmFpdmVEb21pbmF0b3JzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5haXZlRG9taW5h
dG9yczo6ZG9taW5hdGVzKToKKyAgICAgICAgKiBkZmcvREZHTmF0dXJhbExvb3BzLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGVEZXBlbmRlbmNpZXMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6Y29tcHV0ZSk6CisgICAgICAgICogZGZnL0RG
R05hdHVyYWxMb29wcy5oOgorCiAyMDE0LTA4LTI3ICBBa29zIEtpc3MgIDxha2lzc0BpbmYudS1z
emVnZWQuaHU+CiAKICAgICAgICAgRW5zdXJlIHRoYXQgdGhlIGNhbGwgZnJhbWUgcGFzc2VkIGZy
b20gSklUIGNvZGUgdmlhIEpTQzo6b3BlcmF0aW9uQ2FsbEV2YWwgdG8gSlNDOjpldmFsIGFsd2F5
cyBjb250YWlucyB0aGUgdmFsaWQgc2NvcGUgY2hhaW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdCYXNpY0Jsb2NrLmNwcAogICAgIGRm
Zy9ERkdCaW5hcnlTd2l0Y2guY3BwCiAgICAgZGZnL0RGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcAor
ICAgIGRmZy9ERkdCbG9ja1dvcmtsaXN0LmNwcAogICAgIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKICAgICBkZmcvREZHQ0ZBUGhhc2UuY3BwCiAgICAgZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCkBAIC0xNzUsNiArMTc2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBkZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR01h
eUV4aXQuY3BwCiAgICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKKyAgICBkZmcvREZHTmFpdmVE
b21pbmF0b3JzLmNwcAogICAgIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCiAgICAgZGZnL0RGR05v
ZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzcyLDYgKzM3Miw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmFzaWNCbG9jay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQmluYXJ5U3dpdGNoLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCbG9ja0luc2VydGlvblNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmxvY2tXb3JrbGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQ0ZBUGhhc2UuY3BwIiAvPgpAQCAtNDIxLDYgKzQyMiw3IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5jcHAiIC8+CkBAIC05OTMsNiArOTk1LDEw
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFzaWNCbG9ja0lubGluZXMu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlTd2l0Y2guaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja0luc2VydGlvblNldC5o
IiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrTWFwLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tNYXBJbmxpbmVzLmgiIC8+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmxvY2tXb3JrbGlzdC5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrU2V0LmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQnJhbmNoRGlyZWN0aW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQnl0ZUNvZGVQYXJzZXIuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRv
ci5oIiAvPgpAQCAtMTA1Niw2ICsxMDYyLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNaW5pZmllZEdyYXBoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTWluaWZpZWRJRC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R01pbmlmaWVkTm9kZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
aXZlRG9taW5hdG9ycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05h
dHVyYWxMb29wcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGUu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlQWxsb2NhdG9yLmgi
IC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcyOTQ3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5OCw2ICs0OTgsMTMgQEAKIAkJMEZDMzE0MTIx
ODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0
ZXJTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzMxNDExMTgxNDU1OTEw
MDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3BwICovOyB9OwogCQkwRkMzMTQxNTE4MTQ2RDcw
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0
LmNwcCAqLzsgfTsKKwkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGNTE5
QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDM0ND
RkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGNzE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkMzQ0NGRjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGODE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5jcHAgKi87IH07CisJCTBGQzNDRDAwMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMzQ0NGOTE5QURBNDEwMDA2QUM3MkEgLyogREZH
QmxvY2tXb3JrbGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGQzNDRDAxMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDM0ND
RkExOUFEQTQxMDAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5jcHAgKi87IH07CisJCTBG
QzNDRDAyMTlBREE0MTEwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzNDQ0ZCMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwICovOyB9OwogCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyog
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZDNzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CkBAIC0yNDIxLDYgKzI0MjgsMTMgQEAK
IAkJMEZDMzE0MTAxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGQzMxNDExMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcFJlZ2lzdGVyU2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMy
IC8qIFJlZ2lzdGVyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZ2lzdGVyU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjUx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Jsb2NrTWFwLmg7IHBhdGggPSBkZmcvREZHQmxvY2tNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjYxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCbG9j
a01hcElubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCbG9ja01hcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDM0NDRjcxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrU2V0Lmg7IHBh
dGggPSBkZmcvREZHQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZD
M0NDRjgxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmxvY2tXb3JrbGlzdC5jcHA7IHBhdGggPSBk
ZmcvREZHQmxvY2tXb3JrbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzNDQ0Y5MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGRmZy9ERkdC
bG9ja1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzNDQ0ZBMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRvcnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHTmFpdmVEb21pbmF0b3JzLmNwcDsgcGF0aCA9IGRmZy9E
RkdOYWl2ZURvbWluYXRvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkMz
Q0NGQjE5QURBNDEwMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05haXZlRG9taW5hdG9ycy5oOyBwYXRoID0gZGZnL0RG
R05haXZlRG9taW5hdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM3MTJE
QzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzcxMkUwMTdDRDg3
OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODE5LDYgKzQ4MzMsMTEgQEAKIAkJCQlB
NzBCMDgzMTE3QTBCNzlCMDBEQUYxNEIgLyogREZHQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJQTdE
ODlDRTQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNwcCAqLywKIAkJ
CQlBN0Q4OUNFNTE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCAqLywK
KwkJCQkwRkMzQ0NGNTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCAqLywKKwkJCQkw
RkMzQ0NGNjE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggKi8sCisJCQkJ
MEZDM0NDRjcxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggKi8sCisJCQkJMEZDM0ND
RjgxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuY3BwICovLAorCQkJCTBGQzND
Q0Y5MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggKi8sCiAJCQkJMEY4MzY0
QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovLAogCQkJCTg2RUM5
REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZF
QzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC00OTMw
LDYgKzQ5NDksOCBAQAogCQkJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmll
ZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5jcHAgKi8sCiAJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5oICovLAorCQkJCTBGQzNDQ0ZBMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWluYXRv
cnMuY3BwICovLAorCQkJCTBGQzNDQ0ZCMTlBREE0MTAwMDZBQzcyQSAvKiBERkdOYWl2ZURvbWlu
YXRvcnMuaCAqLywKIAkJCQlBNzM3ODEwQTE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmNwcCAqLywKIAkJCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExv
b3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICov
LApAQCAtNTg0Miw2ICs1ODYzLDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyog
Q29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVF
MDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRB
M0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC01OTE3LDYgKzU5MzksNyBAQAogCQkJCUE3
QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Js
b2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyog
REZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNB
RDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE3
LDYgKzYzNDAsNyBAQAogCQkJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJsZUhh
bmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTJFQTZCMEZCNDYwQ0YwMDYwMUYwNiAvKiBM
aXRlcmFsUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQzNDRDAwMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwQ0ExNEJCQjE2QzAwQkZFMjcyIC8qIExMSW50Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ2ODBEMzE0QkJEMTY3MDBCRkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzMjksNiArNjM1Myw3IEBACiAJCQkJMEYwMTIzMzMxOTQ0RUExQjAwODQzQTBD
IC8qIERGR1ZhbHVlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVF
NzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
M0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjM3NCw2ICs2Mzk5LDcgQEAKIAkJCQk3RUZGMDA2NDBFQzA1QTlBMDBB
QTdDOTMgLyogTm9kZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAw
MjZEODhGIC8qIE5vbmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZD
M0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NDEwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlckNv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjk3LDYgKzczMjMsNyBAQAogCQkJ
CUE3RDg5Q0ZGMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkEwNUFCRDUxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMyMENCOTE4NTU2QTM1MDBD
OUU5NTQgLyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkMz
Q0QwMTE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTczNTcsNiArNzM4NCw3IEBACiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQw
IC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFB
RjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzNDQ0ZGMTlBREE0MTAwMDZBQzcyQSAvKiBERkdC
bG9ja1dvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJC
NzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4
RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FuYWx5c2lzLmgJKHJldmlzaW9uIDE3Mjk0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQW5hbHlzaXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV92YWxp
ZCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gSXQncyBiZXN0IHRvIHJ1biBkZXBl
bmRlbnQgYW5hbHlzZXMgZnJvbSB0aGlzIG1ldGhvZC4KKyAgICAgICAgc3RhdGljX2Nhc3Q8VCo+
KHRoaXMpLT5jb21wdXRlRGVwZW5kZW5jaWVzKGdyYXBoKTsKICAgICAgICAgLy8gU2V0IHRvIHRy
dWUgZWFybHksIHNpbmNlIHRoZSBhbmFseXNpcyBtYXkgY2hvb3NlIHRvIGNhbGwgaXRzIG93biBt
ZXRob2RzIGluCiAgICAgICAgIC8vIGNvbXB1dGUoKSBhbmQgaXQgbWF5IHdhbnQgdG8gQVNTRVJU
KCkgdmFsaWRpdHkgaW4gdGhvc2UgbWV0aG9kcy4KICAgICAgICAgbV92YWxpZCA9IHRydWU7CkBA
IC02MSw2ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV92YWxpZDsgfQogCisgICAgLy8gT3ZlcnJpZGUgdGhpcyB0byBjb21wdXRlIGFu
eSBkZXBlbmRlbnQgYW5hbHlzZXMuIFNlZQorICAgIC8vIE5hdHVyYWxMb29wczo6Y29tcHV0ZURl
cGVuZGVuY2llcyhHcmFwaCYpIGZvciBhbiBleGFtcGxlLiBUaGlzIGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeSBidXQKKyAgICAvLyBpdCBtYWtlcyBkZWJ1ZyBkdW1wcyBpbiBjYXNlcyBvZiBlcnJv
ciB3b3JrIGEgYml0IGJldHRlciBiZWNhdXNlIHRoaXMgYW5hbHlzaXMgd291bGRuJ3QgeWV0Cisg
ICAgLy8gYmUgcHJldGVuZGluZyB0byBiZSB2YWxpZC4KKyAgICB2b2lkIGNvbXB1dGVEZXBlbmRl
bmNpZXMoR3JhcGgmKSB7IH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsaWQ7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja01hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHQmxvY2tNYXBfaAorI2RlZmluZSBERkdCbG9ja01hcF9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEJsb2NrTWFwIHsKK3B1YmxpYzoKKyAgICBCbG9ja01hcCgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBCbG9ja01hcChHcmFwaCYpOworICAgIAorICAgIEJsb2NrSW5k
ZXggc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdEluZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9ja0luZGV4XTsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgVCYgYXRJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbYmxvY2tJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIG9w
ZXJhdG9yW10oQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmVjdG9yW2Jsb2NrSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYXRvcltd
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zl
Y3RvcltibG9ja0luZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3JbXShCYXNpY0Js
b2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltibG9jay0+aW5kZXhd
OworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2Jsb2NrLT5pbmRleF07Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxUPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHQmxvY2tNYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Js
b2NrTWFwSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tNYXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Jsb2NrTWFwSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdCbG9ja01hcElubGluZXNfaAorI2RlZmluZSBERkdCbG9ja01hcElubGluZXNfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCbG9ja01hcC5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK0Jsb2NrTWFwPFQ+OjpCbG9ja01hcChHcmFwaCYgZ3JhcGgpCit7Cisg
ICAgbV92ZWN0b3IucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdCbG9ja01hcElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
bG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxv
Y2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmxvY2tTZXRfaAorI2Rl
ZmluZSBERkdCbG9ja1NldF9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBCbG9ja1NldCB7CitwdWJsaWM6CisgICAgQmxvY2tTZXQoKSB7IH0KKyAgICAKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgYmxvY2sgd2FzIGFkZGVkLCBmYWxzZSBpZiBpdCB3YXMgYWxyZWFk
eSBwcmVzZW50LgorICAgIGJvb2wgYWRkKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3NldC5zZXQoYmxvY2stPmluZGV4KTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBjb250YWlucyhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5n
ZXQoYmxvY2stPmluZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBt
X3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrV29y
a2xpc3QuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Jsb2NrV29ya2xpc3Q6
OkJsb2NrV29ya2xpc3QoKQoreworfQorCitCbG9ja1dvcmtsaXN0Ojp+QmxvY2tXb3JrbGlzdCgp
Cit7Cit9CisKK2Jvb2wgQmxvY2tXb3JrbGlzdDo6cHVzaChCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICBpZiAoIW1fc2Vlbi5hZGQoYmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgbV9zdGFjay5hcHBlbmQoYmxvY2spOworICAgIHJldHVybiB0cnVlOworfQorCitCYXNp
Y0Jsb2NrKiBCbG9ja1dvcmtsaXN0Ojpwb3AoKQoreworICAgIGlmIChtX3N0YWNrLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIG1fc3RhY2sudGFr
ZUxhc3QoKTsKK30KKworUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6UG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdCgpCit7Cit9CisKK1Bvc3RPcmRlckJsb2NrV29ya2xpc3Q6On5Qb3N0T3JkZXJCbG9ja1dv
cmtsaXN0KCkKK3sKK30KKworYm9vbCBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoUHJlKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBtX3dvcmtsaXN0LnB1c2goYmxvY2ssIFBy
ZU9yZGVyKTsKK30KKwordm9pZCBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OjpwdXNoUG9zdChCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBtX3dvcmtsaXN0LmZvcmNlUHVzaChibG9jaywgUG9zdE9y
ZGVyKTsKK30KKworQmxvY2tXaXRoT3JkZXIgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDo6cG9wKCkK
K3sKKyAgICBCbG9ja1dpdGg8VmlzaXRPcmRlcj4gcmVzdWx0ID0gbV93b3JrbGlzdC5wb3AoKTsK
KyAgICByZXR1cm4gQmxvY2tXaXRoT3JkZXIocmVzdWx0LmJsb2NrLCByZXN1bHQuZGF0YSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1dvcmtsaXN0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jsb2NrV29ya2xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jsb2NrV29ya2xpc3RfaAor
I2RlZmluZSBERkdCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0LmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0
cnVjdCBCYXNpY0Jsb2NrOworCitjbGFzcyBCbG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoKKyAgICBC
bG9ja1dvcmtsaXN0KCk7CisgICAgfkJsb2NrV29ya2xpc3QoKTsKKyAgICAKKyAgICBib29sIHB1
c2goQmFzaWNCbG9jayopOyAvLyBSZXR1cm5zIHRydWUgaWYgd2UgZGlkbid0IGtub3cgYWJvdXQg
dGhlIGJsb2NrIGJlZm9yZS4KKyAgICAKKyAgICBib29sIG5vdEVtcHR5KCkgY29uc3QgeyByZXR1
cm4gIW1fc3RhY2suaXNFbXB0eSgpOyB9CisgICAgQmFzaWNCbG9jayogcG9wKCk7CisgICAgCitw
cml2YXRlOgorICAgIEJsb2NrU2V0IG1fc2VlbjsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2
PiBtX3N0YWNrOworfTsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91
bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBCbG9ja1dpdGggeworICAgIEJsb2NrV2l0aCgpCisgICAgICAgIDogYmxvY2sobnVs
bHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIEJsb2NrV2l0aChCYXNpY0Jsb2NrKiBibG9j
aywgY29uc3QgVCYgZGF0YSkKKyAgICAgICAgOiBibG9jayhibG9jaykKKyAgICAgICAgLCBkYXRh
KGRhdGEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0eXBlZGVmIHZvaWQqIChCbG9ja1dpdGg8
VD46OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xU
eXBlKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYmxvY2sgPyByZWludGVycHJldF9j
YXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IG51bGxwdHI7CisgICAgfQorCisgICAgQmFz
aWNCbG9jayogYmxvY2s7CisgICAgVCBkYXRhOworfTsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29y
a2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGgg
dGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdz
IGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9y
CisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2Ug
VCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRl
eC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBFeHRlbmRlZEJsb2NrV29ya2xpc3Qgewor
cHVibGljOgorICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCgpIHsgfQorICAgIAorICAgIHZvaWQg
Zm9yY2VQdXNoKGNvbnN0IEJsb2NrV2l0aDxUPiYgZW50cnkpCisgICAgeworICAgICAgICBtX3N0
YWNrLmFwcGVuZChlbnRyeSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZm9yY2VQdXNoKEJhc2lj
QmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgIHsKKyAgICAgICAgZm9yY2VQdXNoKEJs
b2NrV2l0aDxUPihibG9jaywgZGF0YSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHB1c2goY29u
c3QgQmxvY2tXaXRoPFQ+JiBlbnRyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zZWVuLmFkZChl
bnRyeS5ibG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBmb3JjZVB1c2goZW50cnkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBwdXNoKEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBUJiBkYXRhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHB1c2goQmxvY2tXaXRoPFQ+KGJsb2NrLCBkYXRhKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgbm90RW1wdHkoKSBjb25zdCB7IHJldHVybiAhbV9zdGFjay5pc0VtcHR5KCk7
IH0KKyAgICAKKyAgICBCbG9ja1dpdGg8VD4gcG9wKCkKKyAgICB7CisgICAgICAgIGlmIChtX3N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBCbG9ja1dpdGg8VD4oKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX3N0YWNrLnRha2VMYXN0KCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEJsb2NrU2V0IG1fc2VlbjsKKyAgICBWZWN0b3I8QmxvY2tXaXRoPFQ+PiBtX3N0YWNr
OworfTsKKworZW51bSBWaXNpdE9yZGVyIHsKKyAgICBQcmVPcmRlciwKKyAgICBQb3N0T3JkZXIK
K307CisKK3N0cnVjdCBCbG9ja1dpdGhPcmRlciB7CisgICAgQmxvY2tXaXRoT3JkZXIoKQorICAg
ICAgICA6IGJsb2NrKG51bGxwdHIpCisgICAgICAgICwgb3JkZXIoUHJlT3JkZXIpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBCbG9ja1dpdGhPcmRlcihCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRP
cmRlciBvcmRlcikKKyAgICAgICAgOiBibG9jayhibG9jaykKKyAgICAgICAgLCBvcmRlcihvcmRl
cikKKyAgICB7CisgICAgfQorICAgIAorICAgIHR5cGVkZWYgdm9pZCogKEJsb2NrV2l0aE9yZGVy
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlw
ZSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJsb2NrID8gcmVpbnRlcnByZXRfY2Fz
dDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiBudWxscHRyOworICAgIH0KKworICAgIEJhc2lj
QmxvY2sqIGJsb2NrOworICAgIFZpc2l0T3JkZXIgb3JkZXI7Cit9OworCisvLyBCbG9jayB3b3Jr
bGlzdCBzdWl0YWJsZSBmb3IgcG9zdC1vcmRlciB0cmF2ZXJzYWwuCitjbGFzcyBQb3N0T3JkZXJC
bG9ja1dvcmtsaXN0IHsKK3B1YmxpYzoKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0KCk7Cisg
ICAgflBvc3RPcmRlckJsb2NrV29ya2xpc3QoKTsKKyAgICAKKyAgICBib29sIHB1c2hQcmUoQmFz
aWNCbG9jayopOworICAgIHZvaWQgcHVzaFBvc3QoQmFzaWNCbG9jayopOworICAgIAorICAgIGJv
b2wgcHVzaChCYXNpY0Jsb2NrKiBibG9jaywgVmlzaXRPcmRlciBvcmRlciA9IFByZU9yZGVyKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChvcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgor
ICAgICAgICAgICAgcmV0dXJuIHB1c2hQcmUoYmxvY2spOworICAgICAgICBjYXNlIFBvc3RPcmRl
cjoKKyAgICAgICAgICAgIHB1c2hQb3N0KGJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCBwdXNoKGNvbnN0IEJsb2NrV2l0aE9y
ZGVyJiBkYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHB1c2goZGF0YS5ibG9jaywgZGF0YS5v
cmRlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgbm90RW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X3dvcmtsaXN0Lm5vdEVtcHR5KCk7IH0KKyAgICBCbG9ja1dpdGhPcmRlciBwb3AoKTsKKworcHJp
dmF0ZToKKyAgICBFeHRlbmRlZEJsb2NrV29ya2xpc3Q8VmlzaXRPcmRlcj4gbV93b3JrbGlzdDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHQmxvY2tXb3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RIZWFwLmgiCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZH
Q2xvYmJlclNldC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdF
ZGdlVXNlc1N0cnVjdHVyZS5oIgpAQCAtMzY0LDYgKzM2NSw3IEBAIGNsYXNzIEdsb2JhbENTRVBo
YXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBHbG9iYWxDU0VQaGFzZShHcmFwaCYg
Z3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJnbG9iYWwgY29tbW9uIHN1YmV4cHJlc3Np
b24gZWxpbWluYXRpb24iKQorICAgICAgICAsIG1faW1wdXJlRGF0YU1hcChncmFwaCkKICAgICB7
CiAgICAgfQogICAgIApAQCAtMzc3LDEzICszNzksMTEgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5nZXRCbG9ja3NJblByZU9yZGVyKG1fcHJlT3JkZXIpOwogICAgICAgICAK
LSAgICAgICAgbV9pbXB1cmVEYXRhTWFwLnJlc2l6ZShtX2dyYXBoLm51bUJsb2NrcygpKTsKLSAg
ICAgICAgCiAgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCBnZXRzIGNsb2JiZXJlZCBi
eSBibG9ja3MuIE5vZGUgdGhhdCB0aGlzIHVzZXMgdGhlIHByZU9yZGVyIGxpc3QKICAgICAgICAg
Ly8gZm9yIGNvbnZlbmllbmNlIG9ubHkuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHJl
T3JkZXIuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBtX2Jsb2NrID0gbV9wcmVPcmRlcltp
XTsKLSAgICAgICAgICAgIG1faW1wdXJlRGF0YSA9ICZtX2ltcHVyZURhdGFNYXBbbV9ibG9jay0+
aW5kZXhdOworICAgICAgICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Js
b2NrXTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gbV9ibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspCiAgICAgICAgICAgICAgICAgYWRkV3JpdGVzKG1fZ3JhcGgsIG1f
YmxvY2stPmF0KG5vZGVJbmRleCksIG1faW1wdXJlRGF0YS0+d3JpdGVzKTsKICAgICAgICAgfQpA
QCAtNDA3LDcgKzQwNyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcHVyZVZhbHVlcy5j
bGVhcigpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbXB1cmVEYXRh
TWFwLnNpemUoKTsgaS0tOykgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXggaSA9IG1faW1wdXJl
RGF0YU1hcC5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtpXS5h
dmFpbGFibGVBdFRhaWwuY2xlYXIoKTsKICAgICAgICAgICAgIG1faW1wdXJlRGF0YU1hcFtpXS5k
aWRWaXNpdCA9IGZhbHNlOwogICAgICAgICB9CkBAIC00MjMsNyArNDIzLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlT3JkZXIuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fYmxvY2sgPSBtX3ByZU9yZGVyW2ldOwotICAgICAg
ICAgICAgbV9pbXB1cmVEYXRhID0gJm1faW1wdXJlRGF0YU1hcFttX2Jsb2NrLT5pbmRleF07Cisg
ICAgICAgICAgICBtX2ltcHVyZURhdGEgPSAmbV9pbXB1cmVEYXRhTWFwW21fYmxvY2tdOwogICAg
ICAgICAgICAgbV93cml0ZXNTb0Zhci5jbGVhcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKQEAgLTU2MiwxMiArNTYyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgU2VhcmNoaW5nIGluIGJsb2NrICIsICpibG9jaywgIlxuIik7Ci0gICAgICAgICAgICBJbXB1
cmVCbG9ja0RhdGEmIGRhdGEgPSBtX2ltcHVyZURhdGFNYXBbYmxvY2stPmluZGV4XTsKKyAgICAg
ICAgICAgIEltcHVyZUJsb2NrRGF0YSYgZGF0YSA9IG1faW1wdXJlRGF0YU1hcFtibG9ja107CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIHJlcXVpcmUgc3RyaWN0IGRvbWluYXRpb24g
YmVjYXVzZSB0aGlzIHdvdWxkIG9ubHkgc2VlIHRoaW5ncyBpbiBvdXIgb3duIGJsb2NrIGlmCiAg
ICAgICAgICAgICAvLyB0aGV5IGNhbWUgKmFmdGVyKiBvdXIgcG9zaXRpb24gaW4gdGhlIGJsb2Nr
LiBDbGVhcmx5LCB3aGlsZSBvdXIgYmxvY2sgZG9taW5hdGVzCiAgICAgICAgICAgICAvLyBpdHNl
bGYsIHRoZSB0aGluZ3MgaW4gdGhlIGJsb2NrIGFmdGVyIHVzIGRvbid0IGRvbWluYXRlIHVzLgot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgbV9i
bG9jaykgJiYgYmxvY2sgIT0gbV9ibG9jaykgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9k
b21pbmF0b3JzLnN0cmljdGx5RG9taW5hdGVzKGJsb2NrLCBtX2Jsb2NrKSkgewogICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAg
IEl0IHN0cmljdGx5IGRvbWluYXRlcy5cbiIpOwogICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCBkYXRhLmRpZFZpc2l0KTsKQEAgLTYxMiw3ICs2MTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoZSByZWR1Y3Rpb24gaW4gY29tcGlsZSB0aW1lIHdvdWxkIHdhcnJh
bnQgdGhlIGluY3JlYXNlIGluIGNvbXBsZXhpdHksIHRob3VnaC4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDg3NgogICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogc2Vlbkxpc3QpCi0gICAgICAgICAgICBtX2ltcHVyZURhdGFNYXBb
YmxvY2stPmluZGV4XS5hdmFpbGFibGVBdFRhaWwuYWRkKGxvY2F0aW9uLCBtYXRjaCk7CisgICAg
ICAgICAgICBtX2ltcHVyZURhdGFNYXBbYmxvY2tdLmF2YWlsYWJsZUF0VGFpbC5hZGQobG9jYXRp
b24sIG1hdGNoKTsKICAgICAgICAgbV9pbXB1cmVEYXRhLT5hdmFpbGFibGVBdFRhaWwuYWRkKGxv
Y2F0aW9uLCBtYXRjaCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbWF0Y2g7CkBAIC02NTQs
NyArNjU0LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9wcmVPcmRlcjsK
IAogICAgIFB1cmVNdWx0aU1hcCBtX3B1cmVWYWx1ZXM7Ci0gICAgVmVjdG9yPEltcHVyZUJsb2Nr
RGF0YT4gbV9pbXB1cmVEYXRhTWFwOworICAgIEJsb2NrTWFwPEltcHVyZUJsb2NrRGF0YT4gbV9p
bXB1cmVEYXRhTWFwOwogICAgIAogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSog
bV9ub2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMu
Y3BwCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
bWluYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdO
YWl2ZURvbWluYXRvcnMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQxLDkxICs0NCwzODggQEAgRG9taW5hdG9yczo6fkRv
bWluYXRvcnMoKQogewogfQogCi12b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCitu
YW1lc3BhY2UgeworCisvLyBUaGlzIGltcGxlbWVudHMgTGVuZ2F1ZXIgYW5kIFRhcmphbidzICJB
IEZhc3QgQWxnb3JpdGhtIGZvciBGaW5kaW5nIERvbWluYXRvcnMgaW4gYSBGbG93Z3JhcGgiCisv
LyAoVE9QTEFTIDE5NzkpLiBJdCB1c2VzIHRoZSAic2ltcGxlIiBpbXBsZW1lbnRhdGlvbiBvZiBM
SU5LIGFuZCBFVkFMLiBUaGUgZnVsbCBwYXBlciBpcyBsaW5rZWQKKy8vIGJlbG93OyB0aGlzIGNv
ZGUgYXR0ZW1wdHMgdG8gY2xvc2VseSBmb2xsb3cgdGhlIGFsZ29yaXRobSBhcyBpdCBpcyBwcmVz
ZW50ZWQgaW4gdGhlIHBhcGVyOyBpbgorLy8gcGFydGljdWxhciBzZWN0aW9ucyAzIGFuZCA0IGFz
IHdlbGwgYXMgYXBwZW5kaXggQi4KKy8vIGh0dHBzOi8vd3d3LmNzLnByaW5jZXRvbi5lZHUvY291
cnNlcy9hcmNoaXZlL2ZhbGwwMy9jczUyOC9oYW5kb3V0cy9hJTIwZmFzdCUyMGFsZ29yaXRobSUy
MGZvciUyMGZpbmRpbmcucGRmCisvLworLy8gVGhpcyBjb2RlIGlzIHZlcnkgc3VidGxlLiBUaGUg
TGVuZ2F1ZXItVGFyamFuIGFsZ29yaXRobSBpcyBpbmNyZWRpYmx5IGRlZXAgdG8gYmVnaW4gd2l0
aC4gVGhlCisvLyBnb2FsIG9mIHRoaXMgY29kZSBpcyB0byBmb2xsb3cgdGhlIGNvZGUgaW4gdGhl
IHBhcGVyLCBob3dldmVyIG91ciBpbXBsZW1lbnRhdGlvbiBtdXN0IGRldmlhdGUKKy8vIGZyb20g
dGhlIHBhcGVyIHdoZW4gaXQgY29tZXMgdG8gcmVjdXJzaW9uLiBUaGUgYXV0aG9ycyBoYWQgdXNl
ZCByZWN1cnNpb24gdG8gaW1wbGVtZW50IERGUywgYW5kCisvLyBhbHNvIHRvIGltcGxlbWVudCB0
aGUgInNpbXBsZSIgRVZBTC4gV2UgY29udmVydCBib3RoIG9mIHRob3NlIGludG8gd29ya2xpc3Qt
YmFzZWQgc29sdXRpb25zLgorLy8gRmluYWxseSwgb25jZSB0aGUgYWxnb3JpdGhtIGdpdmVzIHVz
IGltbWVkaWF0ZSBkb21pbmF0b3JzLCB3ZSBpbXBsZW1lbnQgZG9taW5hbmNlIHRlc3RzIGJ5Cisv
LyB3YWxraW5nIHRoZSBkb21pbmF0b3IgdHJlZSBhbmQgY29tcHV0aW5nIHByZSBhbmQgcG9zdCBu
dW1iZXJzLiBXZSB0aGVuIHVzZSB0aGUgcmFuZ2UgaW5jbHVzaW9uCisvLyBjaGVjayB0cmljayB0
aGF0IHdhcyBmaXJzdCBkaXNjb3ZlcmVkIGJ5IFBhdWwgRi4gRGlldHogaW4gMTk4MiBpbiAiTWFp
bnRhaW5pbmcgb3JkZXIgaW4gYSBsaW5rZWQKKy8vIGxpc3QiIChzZWUgaHR0cDovL2RsLmFjbS5v
cmcvY2l0YXRpb24uY2ZtP2lkPTgwMjE4NCkuCisKK2NsYXNzIExlbmdhdWVyVGFyamFuIHsKK3B1
YmxpYzoKKyAgICBMZW5nYXVlclRhcmphbihHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFw
aChncmFwaCkKKyAgICAgICAgLCBtX2RhdGEoZ3JhcGgpCisgICAgeworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBtX2RhdGFbYmxvY2tdLmxhYmVsID0gYmxvY2s7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21wdXRlKCkKKyAgICB7CisgICAgICAgIGNvbXB1dGVEZXB0
aEZpcnN0UHJlTnVtYmVyaW5nKCk7IC8vIFN0ZXAgMS4KKyAgICAgICAgY29tcHV0ZVNlbWlEb21p
bmF0b3JzQW5kSW1wbGljaXRJbW1lZGlhdGVEb21pbmF0b3JzKCk7IC8vIFN0ZXBzIDIgYW5kIDMu
CisgICAgICAgIGNvbXB1dGVFeHBsaWNpdEltbWVkaWF0ZURvbWluYXRvcnMoKTsgLy8gU3RlcCA0
LgorICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBpbW1lZGlhdGVEb21pbmF0b3IoQmFzaWNC
bG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5kb207Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY29tcHV0ZURlcHRoRmlyc3RQcmVOdW1iZXJpbmco
KQorICAgIHsKKyAgICAgICAgLy8gVXNlIGEgYmxvY2sgd29ya2xpc3QgdGhhdCBhbHNvIHRyYWNr
cyB0aGUgaW5kZXggaW5zaWRlIHRoZSBzdWNjZXNzb3IgbGlzdC4gVGhpcyBpcworICAgICAgICAv
LyBuZWNlc3NhcnkgZm9yIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3QgYXR0ZW1wdCB0byB2aXNpdCBh
IHN1Y2Nlc3NvciB1bnRpbCB0aGUgcHJldmlvdXMKKyAgICAgICAgLy8gc3VjY2Vzc29ycyB0aGF0
IHdlIGhhZCB2aXNpdGVkIGFyZSBmdWxseSBwcm9jZXNzZWQuIFRoaXMgZW5kcyB1cCBiZWluZyBy
ZXZlYWxlZCBpbiB0aGUKKyAgICAgICAgLy8gb3V0cHV0IG9mIHRoaXMgbWV0aG9kIGJlY2F1c2Ug
dGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGFuIGVkZ2UgdG8gYSBibG9jaywgd2Ugc2V0IHRoZQorICAg
ICAgICAvLyBibG9jaydzIHBhcmVudC4gU28sIGlmIHdlIGhhdmU6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIEEgLT4gQgorICAgICAgICAvLyBBIC0+IEMKKyAgICAgICAgLy8gQiAtPiBDCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEFuZCB3ZSdyZSBwcm9jZXNzaW5nIEEsIHRoZW4gd2Ugd2FudCB0
byBlbnN1cmUgdGhhdCBpZiB3ZSBzZWUgQS0+QiBmaXJzdCAoYW5kIGhlbmNlIHNldAorICAgICAg
ICAvLyBCJ3MgcHJlbnVtYmVyIGJlZm9yZSB3ZSBzZXQgQydzKSB0aGVuIHdlIGFsc28gZW5kIHVw
IHNldHRpbmcgQydzIHBhcmVudCB0byBCIGJ5IHZpcnR1ZQorICAgICAgICAvLyBvZiBub3Qgbm90
aWNpbmcgQS0+QyB1bnRpbCB3ZSdyZSBkb25lIHByb2Nlc3NpbmcgQi4KKyAgICAgICAgCisgICAg
ICAgIEV4dGVuZGVkQmxvY2tXb3JrbGlzdDx1bnNpZ25lZD4gd29ya2xpc3Q7CisgICAgICAgIHdv
cmtsaXN0LnB1c2gobV9ncmFwaC5ibG9jaygwKSwgMCk7CisgICAgICAgIAorICAgICAgICB3aGls
ZSAoQmxvY2tXaXRoPHVuc2lnbmVkPiBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gaXRlbS5ibG9jazsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHN1Y2Nlc3NvckluZGV4ID0gaXRlbS5kYXRhOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBXZSdyZSBpbml0aWFsbHkgcHVzaCB3aXRoIHN1Y2Nlc3NvckluZGV4ID0gMCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUKKyAgICAgICAgICAgIC8vIGFueSBzdWNjZXNzb3Jz
LiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIGFzc2lnbiBvdXIgcHJlbnVtYmVyLiBTdWJzZXF1ZW50
bHkgd2UgZ2V0CisgICAgICAgICAgICAvLyBwdXNoZWQgd2l0aCBoaWdoZXIgc3VjY2Vzc29ySW5k
ZXggdmFsdWVzLCBidXQgb25seSBpZiB0aGV5IGFyZSBpbiByYW5nZS4KKyAgICAgICAgICAgIEFT
U0VSVCghc3VjY2Vzc29ySW5kZXggfHwgc3VjY2Vzc29ySW5kZXggPCBibG9jay0+bnVtU3VjY2Vz
c29ycygpKTsKKworICAgICAgICAgICAgaWYgKCFzdWNjZXNzb3JJbmRleCkgeworICAgICAgICAg
ICAgICAgIG1fZGF0YVtibG9ja10uc2VtaU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXpl
KCk7CisgICAgICAgICAgICAgICAgbV9ibG9ja0J5UHJlTnVtYmVyLmFwcGVuZChibG9jayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdWNjZXNzb3JJbmRl
eCA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBu
ZXh0U3VjY2Vzc29ySW5kZXggPSBzdWNjZXNzb3JJbmRleCArIDE7CisgICAgICAgICAgICAgICAg
aWYgKG5leHRTdWNjZXNzb3JJbmRleCA8IGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpCisgICAgICAg
ICAgICAgICAgICAgIHdvcmtsaXN0LmZvcmNlUHVzaChibG9jaywgbmV4dFN1Y2Nlc3NvckluZGV4
KTsKKworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrID0gYmxvY2st
PnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0
LnB1c2goc3VjY2Vzc29yQmxvY2ssIDApKQorICAgICAgICAgICAgICAgICAgICBtX2RhdGFbc3Vj
Y2Vzc29yQmxvY2tdLnBhcmVudCA9IGJsb2NrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcHV0ZVNlbWlEb21pbmF0b3JzQW5kSW1wbGljaXRJbW1l
ZGlhdGVEb21pbmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFBy
ZU51bWJlciA9IG1fYmxvY2tCeVByZU51bWJlci5zaXplKCk7IGN1cnJlbnRQcmVOdW1iZXItLSA+
IDE7KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tCeVByZU51bWJl
cltjdXJyZW50UHJlTnVtYmVyXTsKKyAgICAgICAgICAgIEJsb2NrRGF0YSYgYmxvY2tEYXRhID0g
bV9kYXRhW2Jsb2NrXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAyOgorICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrIDogYmxvY2stPnByZWRl
Y2Vzc29ycykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGludGVybWVkaWF0ZUJsb2Nr
ID0gZXZhbChwcmVkZWNlc3NvckJsb2NrKTsKKyAgICAgICAgICAgICAgICBibG9ja0RhdGEuc2Vt
aU51bWJlciA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAgICAgICBtX2RhdGFbaW50ZXJtZWRp
YXRlQmxvY2tdLnNlbWlOdW1iZXIsIGJsb2NrRGF0YS5zZW1pTnVtYmVyKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1Y2tldFByZU51bWJlciA9IGJsb2NrRGF0YS5zZW1p
TnVtYmVyOworICAgICAgICAgICAgQVNTRVJUKGJ1Y2tldFByZU51bWJlciA8PSBjdXJyZW50UHJl
TnVtYmVyKTsKKyAgICAgICAgICAgIG1fZGF0YVttX2Jsb2NrQnlQcmVOdW1iZXJbYnVja2V0UHJl
TnVtYmVyXV0uYnVja2V0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICBsaW5rKGJsb2NrRGF0
YS5wYXJlbnQsIGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RlcCAzOgor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzZW1pRG9taW5lZSA6IG1fZGF0YVtibG9ja0Rh
dGEucGFyZW50XS5idWNrZXQpIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwb3NzaWJs
ZURvbWluYXRvciA9IGV2YWwoc2VtaURvbWluZWUpOworICAgICAgICAgICAgICAgIEJsb2NrRGF0
YSYgc2VtaURvbWluZWVEYXRhID0gbV9kYXRhW3NlbWlEb21pbmVlXTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobV9ibG9ja0J5UHJlTnVtYmVyW3NlbWlEb21pbmVlRGF0YS5zZW1pTnVtYmVyXSA9
PSBibG9ja0RhdGEucGFyZW50KTsKKyAgICAgICAgICAgICAgICBCbG9ja0RhdGEmIHBvc3NpYmxl
RG9taW5hdG9yRGF0YSA9IG1fZGF0YVtwb3NzaWJsZURvbWluYXRvcl07CisgICAgICAgICAgICAg
ICAgaWYgKHBvc3NpYmxlRG9taW5hdG9yRGF0YS5zZW1pTnVtYmVyIDwgc2VtaURvbWluZWVEYXRh
LnNlbWlOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBw
b3NzaWJsZURvbWluYXRvcjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNlbWlEb21pbmVlRGF0YS5kb20gPSBibG9ja0RhdGEucGFyZW50OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbV9kYXRhW2Jsb2NrRGF0YS5wYXJlbnRdLmJ1Y2tldC5jbGVhcigpOwor
ICAgICAgICB9CisgICAgfQogICAgIAotICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVj
ZXNzb3JzLmlzRW1wdHkoKSk7CisgICAgdm9pZCBjb21wdXRlRXhwbGljaXRJbW1lZGlhdGVEb21p
bmF0b3JzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgY3VycmVudFByZU51bWJlciA9
IDE7IGN1cnJlbnRQcmVOdW1iZXIgPCBtX2Jsb2NrQnlQcmVOdW1iZXIuc2l6ZSgpOyArK2N1cnJl
bnRQcmVOdW1iZXIpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja0J5
UHJlTnVtYmVyW2N1cnJlbnRQcmVOdW1iZXJdOworICAgICAgICAgICAgQmxvY2tEYXRhJiBibG9j
a0RhdGEgPSBtX2RhdGFbYmxvY2tdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxv
Y2tEYXRhLmRvbSAhPSBtX2Jsb2NrQnlQcmVOdW1iZXJbYmxvY2tEYXRhLnNlbWlOdW1iZXJdKQor
ICAgICAgICAgICAgICAgIGJsb2NrRGF0YS5kb20gPSBtX2RhdGFbYmxvY2tEYXRhLmRvbV0uZG9t
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgbGluayhCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0bykKKyAgICB7CisgICAgICAgIG1fZGF0YVt0b10uYW5jZXN0b3IgPSBm
cm9tOworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBldmFsKEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGFbYmxvY2tdLmFuY2VzdG9yKQorICAgICAgICAg
ICAgcmV0dXJuIGJsb2NrOworICAgICAgICAKKyAgICAgICAgY29tcHJlc3MoYmxvY2spOworICAg
ICAgICByZXR1cm4gbV9kYXRhW2Jsb2NrXS5sYWJlbDsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21wcmVzcyhCYXNpY0Jsb2NrKiBpbml0aWFsQmxvY2spCisgICAgeworICAgICAgICAvLyBUaGlz
IHdhcyBtZWFudCB0byBiZSBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgYnV0IHdlIGRvbid0IGxpa2Ug
cmVjdXJzaW9uIGJlY2F1c2Ugd2UgZG9uJ3QKKyAgICAgICAgLy8gd2FudCB0byBibG93IHRoZSBz
dGFjay4gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgY2FsbCBjb21wcmVzcygpIHJlY3Vyc2l2
ZWx5IG9uIHRoZQorICAgICAgICAvLyBhbmNlc3RvciBvZiBhbnl0aGluZyB0aGF0IGhhcyBhbiBh
bmNlc3Rvci4gU28sIHdlIHBvcHVsYXRlIG91ciB3b3JrbGlzdCB3aXRoIHRoZQorICAgICAgICAv
LyByZWN1cnNpdmUgYW5jZXN0b3JzIG9mIGluaXRpYWxCbG9jay4gVGhlbiB3ZSBwcm9jZXNzIHRo
ZSBsaXN0IHN0YXJ0aW5nIGZyb20gdGhlIGJsb2NrCisgICAgICAgIC8vIHRoYXQgaXMgZnVydGhl
c3QgdXAgdGhlIGFuY2VzdG9yIGNoYWluLgorICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayog
YW5jZXN0b3IgPSBtX2RhdGFbaW5pdGlhbEJsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgQVNTRVJU
KGFuY2VzdG9yKTsKKyAgICAgICAgaWYgKCFtX2RhdGFbYW5jZXN0b3JdLmFuY2VzdG9yKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
Nj4gc3RhY2s7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgPSBpbml0aWFsQmxvY2s7
IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uYW5jZXN0b3IpCisgICAgICAgICAgICBzdGFj
ay5hcHBlbmQoYmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugb25seSBjYXJlIGFib3V0
IGJsb2NrcyB0aGF0IGhhdmUgYW4gYW5jZXN0b3IgdGhhdCBoYXMgYW4gYW5jZXN0b3IuIFRoZSBs
YXN0IHR3bworICAgICAgICAvLyBlbGVtZW50cyBpbiB0aGUgc3RhY2sgd29uJ3Qgc2F0aXNmeSB0
aGlzIHByb3BlcnR5LgorICAgICAgICBBU1NFUlQoc3RhY2suc2l6ZSgpID49IDIpOworICAgICAg
ICBBU1NFUlQoIW1fZGF0YVtzdGFja1tzdGFjay5zaXplKCkgLSAxXV0uYW5jZXN0b3IpOworICAg
ICAgICBBU1NFUlQoIW1fZGF0YVttX2RhdGFbc3RhY2tbc3RhY2suc2l6ZSgpIC0gMl1dLmFuY2Vz
dG9yXS5hbmNlc3Rvcik7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFj
ay5zaXplKCkgLSAyOyBpLS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHN0
YWNrW2ldOworICAgICAgICAgICAgQmFzaWNCbG9jayomIGxhYmVsT2ZCbG9jayA9IG1fZGF0YVti
bG9ja10ubGFiZWw7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiYgYW5jZXN0b3JPZkJsb2NrID0g
bV9kYXRhW2Jsb2NrXS5hbmNlc3RvcjsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3Rvck9mQmxv
Y2spOworICAgICAgICAgICAgQVNTRVJUKG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9y
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmFzaWNCbG9jayogbGFiZWxPZkFuY2VzdG9y
T2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmxhYmVsOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9kYXRhW2xhYmVsT2ZBbmNlc3Rvck9mQmxvY2tdLnNlbWlOdW1iZXIg
PAorICAgICAgICAgICAgICAgIG1fZGF0YVtsYWJlbE9mQmxvY2tdLnNlbWlOdW1iZXIpCisgICAg
ICAgICAgICAgICAgbGFiZWxPZkJsb2NrID0gbGFiZWxPZkFuY2VzdG9yT2ZCbG9jazsKKyAgICAg
ICAgICAgIGFuY2VzdG9yT2ZCbG9jayA9IG1fZGF0YVthbmNlc3Rvck9mQmxvY2tdLmFuY2VzdG9y
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RydWN0IEJsb2NrRGF0YSB7CisgICAgICAgIEJs
b2NrRGF0YSgpCisgICAgICAgICAgICA6IHBhcmVudChudWxscHRyKQorICAgICAgICAgICAgLCBw
cmVOdW1iZXIoVUlOVF9NQVgpCisgICAgICAgICAgICAsIHNlbWlOdW1iZXIoVUlOVF9NQVgpCisg
ICAgICAgICAgICAsIGFuY2VzdG9yKG51bGxwdHIpCisgICAgICAgICAgICAsIGxhYmVsKG51bGxw
dHIpCisgICAgICAgICAgICAsIGRvbShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEJhc2ljQmxvY2sqIHBhcmVudDsKKyAgICAgICAgdW5zaWduZWQgcHJl
TnVtYmVyOworICAgICAgICB1bnNpZ25lZCBzZW1pTnVtYmVyOworICAgICAgICBCYXNpY0Jsb2Nr
KiBhbmNlc3RvcjsKKyAgICAgICAgQmFzaWNCbG9jayogbGFiZWw7CisgICAgICAgIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gYnVja2V0OworICAgICAgICBCYXNpY0Jsb2NrKiBkb207CisgICAgfTsKKyAg
ICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBCbG9ja01hcDxCbG9ja0RhdGE+IG1fZGF0YTsK
KyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tCeVByZU51bWJlcjsKK307CisKK3N0cnVj
dCBWYWxpZGF0aW9uQ29udGV4dCB7CisgICAgVmFsaWRhdGlvbkNvbnRleHQoR3JhcGgmIGdyYXBo
LCBEb21pbmF0b3JzJiBkb21pbmF0b3JzKQorICAgICAgICA6IGdyYXBoKGdyYXBoKQorICAgICAg
ICAsIGRvbWluYXRvcnMoZG9taW5hdG9ycykKKyAgICB7CisgICAgfQogICAgIAotICAgIHVuc2ln
bmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIHZvaWQgcmVwb3J0RXJyb3Io
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCisg
ICAgeworICAgICAgICBFcnJvciBlcnJvcjsKKyAgICAgICAgZXJyb3IuZnJvbSA9IGZyb207Cisg
ICAgICAgIGVycm9yLnRvID0gdG87CisgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBtZXNzYWdlOwor
ICAgICAgICBlcnJvcnMuYXBwZW5kKGVycm9yKTsKKyAgICB9CiAgICAgCi0gICAgLy8gQWxsb2Nh
dGUgc3RvcmFnZSBmb3IgdGhlIGRlbnNlIGRvbWluYW5jZSBtYXRyaXguIAotICAgIGlmIChudW1C
bG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7Ci0gICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJs
b2Nrcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykKLSAgICAg
ICAgICAgIG1fcmVzdWx0c1tpXS5yZXNpemUobnVtQmxvY2tzKTsKLSAgICAgICAgbV9zY3JhdGNo
LnJlc2l6ZShudW1CbG9ja3MpOworICAgIHZvaWQgaGFuZGxlRXJyb3JzKCkKKyAgICB7CisgICAg
ICAgIGlmIChlcnJvcnMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgc3RhcnRDcmFzaGluZygpOworICAgICAgICBkYXRhTG9nKCJERkcgRE9NSU5BVE9S
IFZBTElEQVRJT04gRkFJTEVEOlxuIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAg
IGRhdGFMb2coIkZvciBibG9jayBkb21pbmF0aW9uIHJlbGF0aW9uc2hpcHM6XG4iKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVycm9ycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAiICAgICIsIHBvaW50ZXJEdW1wKGVycm9y
c1tpXS5mcm9tKSwgIiAtPiAiLCBwb2ludGVyRHVtcChlcnJvcnNbaV0udG8pLAorICAgICAgICAg
ICAgICAgICIgKCIsIGVycm9yc1tpXS5tZXNzYWdlLCAiKVxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiQ29udHJvbCBmbG93IGdyYXBoOlxu
Iik7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IGdyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZGF0YUxvZygiICAg
IEJsb2NrICMiLCBibG9ja0luZGV4LCAiOiBzdWNjZXNzb3JzID0gWyIpOworICAgICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7ICsraSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKGNv
bW1hLCAqYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJdLCBwcmVk
ZWNlc3NvcnMgPSBbIik7CisgICAgICAgICAgICBjb21tYSA9IENvbW1hUHJpbnRlcigpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgKmJsb2NrLT5wcmVkZWNl
c3NvcnNbaV0pOworICAgICAgICAgICAgZGF0YUxvZygiXVxuIik7CisgICAgICAgIH0KKyAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTGVuZ2F1ZXItVGFyamFuIERvbWlu
YXRvcnM6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhkb21pbmF0b3JzKTsKKyAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTmFpdmUgRG9taW5hdG9yczpcbiIpOworICAgICAg
ICBuYWl2ZURvbWluYXRvcnMuZHVtcChncmFwaCwgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAg
ZGF0YUxvZygiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJl
OlxuIik7CisgICAgICAgIGdyYXBoLmR1bXAoKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICAgICAgZGF0YUxvZygiREZHIERPTUlOQVRPUiBWQUxJREFUSU9OIEZBSUxJRUQhXG4iKTsKKyAg
ICAgICAgQ1JBU0goKTsKICAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoOworICAgIERvbWlu
YXRvcnMmIGRvbWluYXRvcnM7CisgICAgTmFpdmVEb21pbmF0b3JzIG5haXZlRG9taW5hdG9yczsK
KyAgICAKKyAgICBzdHJ1Y3QgRXJyb3IgeworICAgICAgICBCYXNpY0Jsb2NrKiBmcm9tOworICAg
ICAgICBCYXNpY0Jsb2NrKiB0bzsKKyAgICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAgICB9
OworICAgIAorICAgIFZlY3RvcjxFcnJvcj4gZXJyb3JzOworfTsKIAotICAgIC8vIFdlIGtub3cg
dGhhdCB0aGUgZW50cnkgYmxvY2sgaXMgb25seSBkb21pbmF0ZWQgYnkgaXRzZWxmLgotICAgIG1f
cmVzdWx0c1swXS5jbGVhckFsbCgpOwotICAgIG1fcmVzdWx0c1swXS5zZXQoMCk7Cit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKIAotICAgIC8vIEZpbmQgYWxsIG9mIHRoZSB2YWxpZCBibG9ja3Mu
Ci0gICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxv
Y2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCit2b2lkIERvbWluYXRv
cnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQoreworICAgIExlbmdhdWVyVGFyamFuIGxlbmdhdWVy
VGFyamFuKGdyYXBoKTsKKyAgICBsZW5nYXVlclRhcmphbi5jb21wdXRlKCk7CisKKyAgICBtX2Rh
dGEgPSBCbG9ja01hcDxCbG9ja0RhdGE+KGdyYXBoKTsKKyAgICAKKyAgICAvLyBGcm9tIGhlcmUg
d2Ugd2FudCB0byBidWlsZCBhIHNwYW5uaW5nIHRyZWUgd2l0aCBib3RoIHVwd2FyZCBhbmQgZG93
bndhcmQgbGlua3MgYW5kIHdlIHdhbnQKKyAgICAvLyB0byBkbyBhIHNlYXJjaCBvdmVyIHRoaXMg
dHJlZSB0byBjb21wdXRlIHByZSBhbmQgcG9zdCBudW1iZXJzIHRoYXQgY2FuIGJlIHVzZWQgZm9y
IGRvbWluYW5jZQorICAgIC8vIHRlc3RzLgorICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOwor
ICAgICAgICAKKyAgICAgICAgQmFzaWNCbG9jayogaWRvbUJsb2NrID0gbGVuZ2F1ZXJUYXJqYW4u
aW1tZWRpYXRlRG9taW5hdG9yKGJsb2NrKTsKKyAgICAgICAgbV9kYXRhW2Jsb2NrXS5pZG9tUGFy
ZW50ID0gaWRvbUJsb2NrOworICAgICAgICBpZiAoaWRvbUJsb2NrKQorICAgICAgICAgICAgbV9k
YXRhW2lkb21CbG9ja10uaWRvbUtpZHMuYXBwZW5kKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAg
Ly8gTWFyayBhbGwgbm9kZXMgYXMgZG9taW5hdGVkIGJ5IGV2ZXJ5dGhpbmcuCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAgICAgICBpZiAoIWdyYXBoLmJs
b2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRpdmVs
eSBlbGltaW5hdGUgbm9kZXMgdGhhdCBhcmUgbm90IGRvbWluYXRvci4KLSAgICBib29sIGNoYW5n
ZWQ7Ci0gICAgZG8gewotICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIC8vIFBydW5l
IGRvbWluYXRvcnMgaW4gYWxsIG5vbiBlbnRyeSBibG9ja3M6IGZvcndhcmQgc2Nhbi4KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUJsb2NrczsgKytpKQotICAgICAgICAgICAg
Y2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotCi0gICAgICAgIGlmICghY2hh
bmdlZCkKKyAgICB1bnNpZ25lZCBuZXh0UHJlTnVtYmVyID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0
UG9zdE51bWJlciA9IDA7CisgICAgCisgICAgLy8gUGxhaW4gc3RhY2stYmFzZWQgd29ya2xpc3Qg
YmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBzZWUgZWFjaCBibG9jayBleGFjdGx5IG9uY2Ug
YW55d2F5LgorICAgIFZlY3RvcjxCbG9ja1dpdGhPcmRlcj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QuYXBwZW5kKEJsb2NrV2l0aE9yZGVyKGdyYXBoLmJsb2NrKDApLCBQcmVPcmRlcikpOworICAg
IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrV2l0aE9yZGVyIGl0
ZW0gPSB3b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsK
KyAgICAgICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtpdGVtLmJsb2NrXS5w
cmVOdW1iZXIgPSBuZXh0UHJlTnVtYmVyKys7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
QmxvY2tXaXRoT3JkZXIoaXRlbS5ibG9jaywgUG9zdE9yZGVyKSk7CisgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGtpZCA6IG1fZGF0YVtpdGVtLmJsb2NrXS5pZG9tS2lkcykKKyAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQoQmxvY2tXaXRoT3JkZXIoa2lkLCBQcmVPcmRlcikpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9ycyBpbiBhbGwg
bm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KLSAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KQotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOwotICAgIH0gd2hpbGUg
KGNoYW5nZWQpOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIG1fZGF0YVtp
dGVtLmJsb2NrXS5wb3N0TnVtYmVyID0gbmV4dFBvc3ROdW1iZXIrKzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KSB7CisgICAgICAgIC8vIENoZWNrIG91ciBkb21pbmF0b3IgY2FsY3VsYXRpb246CisgICAgICAg
IC8vIDEpIENoZWNrIHRoYXQgb3VyIHJhbmdlLWJhc2VkIGFuY2VzdHJ5IHRlc3QgaXMgdGhlIHNh
bWUgYXMgYSBuYWl2ZSBhbmNlc3RyeSB0ZXN0LgorICAgICAgICAvLyAyKSBDaGVjayB0aGF0IG91
ciBub3Rpb24gb2Ygd2hvIGRvbWluYXRlcyB3aG9tIGlzIGlkZW50aWNhbCB0byBhIG5haXZlIChu
b3QKKyAgICAgICAgLy8gICAgTGVuZ2F1ZXItVGFyamFuKSBkb21pbmF0b3IgY2FsY3VsYXRpb24u
CisgICAgICAgIAorICAgICAgICBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KGdyYXBoLCAqdGhp
cyk7CisgICAgICAgIGNvbnRleHQubmFpdmVEb21pbmF0b3JzLmNvbXB1dGUoZ3JhcGgpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGZyb21CbG9ja0luZGV4ID0gZ3JhcGgubnVt
QmxvY2tzKCk7IGZyb21CbG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBm
cm9tQmxvY2sgPSBncmFwaC5ibG9jayhmcm9tQmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAo
IWZyb21CbG9jayB8fCBtX2RhdGFbZnJvbUJsb2NrXS5wcmVOdW1iZXIgPT0gVUlOVF9NQVgpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggdG9C
bG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IHRvQmxvY2tJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmxvY2sgPSBncmFwaC5ibG9jayh0b0Jsb2NrSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghdG9CbG9jayB8fCBtX2RhdGFbdG9CbG9ja10ucHJlTnVt
YmVyID09IFVJTlRfTUFYKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG9taW5hdGVzKGZyb21CbG9jaywgdG9CbG9j
aykgIT0gbmFpdmVEb21pbmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJSYW5nZS1iYXNl
ZCBkb21pbmF0aW9uIGNoZWNrIGlzIGJyb2tlbiIpOworICAgICAgICAgICAgICAgIGlmIChkb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSAhPSBjb250ZXh0Lm5haXZlRG9taW5hdG9ycy5kb21p
bmF0ZXMoZnJvbUJsb2NrLCB0b0Jsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnRFcnJvcihmcm9tQmxvY2ssIHRvQmxvY2ssICJMZW5nYXVlci1UYXJqYW4gZG9taW5hdGlv
biBpcyBicm9rZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY29udGV4dC5oYW5kbGVFcnJvcnMoKTsKKyAgICB9CiB9CiAKLWJvb2wgRG9taW5hdG9yczo6
cHJ1bmVEb21pbmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCitib29sIERvbWlu
YXRvcnM6Om5haXZlRG9taW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBj
b25zdAogewotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaWR4KTsKLQotICAg
IGlmICghYmxvY2sgfHwgYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZpbmQgdGhlIGludGVyc2VjdGlvbiBvZiBkb20ocHJlZHMp
LgotICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmlu
ZGV4XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
IGotLSA+IDE7KQotICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJl
ZGVjZXNzb3JzW2pdLT5pbmRleF0pOwotCi0gICAgLy8gVGhlIGJsb2NrIGlzIGFsc28gZG9taW5h
dGVkIGJ5IGl0c2VsZi4KLSAgICBtX3NjcmF0Y2guc2V0KGlkeCk7Ci0KLSAgICByZXR1cm4gbV9y
ZXN1bHRzW2lkeF0uc2V0QW5kQ2hlY2sobV9zY3JhdGNoKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrID0gdG87IGJsb2NrOyBibG9jayA9IG1fZGF0YVtibG9ja10uaWRvbVBhcmVudCkgewor
ICAgICAgICBpZiAoYmxvY2sgPT0gZnJvbSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRG9taW5hdG9yczo6ZHVtcChHcmFwaCYg
Z3JhcGgsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit2b2lkIERvbWluYXRvcnM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAg
IGlmICghYmxvY2spCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIg
ICAgTm90IFZhbGlkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9kYXRhLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgIGlmIChtX2RhdGFbYmxvY2tJbmRleF0ucHJlTnVtYmVy
ID09IFVJTlRfTUFYKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG91dC5wcmludCgi
ICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG90aGVy
SW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRleCkg
ewotICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4KSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBv
dGhlckluZGV4KTsKLSAgICAgICAgfQotICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAg
IAorICAgICAgICBvdXQucHJpbnQoIiAgICBCbG9jayAjIiwgYmxvY2tJbmRleCwgIjogaWRvbSA9
ICIsIHBvaW50ZXJEdW1wKG1fZGF0YVtibG9ja0luZGV4XS5pZG9tUGFyZW50KSwgIiwgaWRvbUtp
ZHMgPSBbIik7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lkcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgKm1fZGF0YVtibG9ja0luZGV4XS5pZG9tS2lk
c1tpXSk7CisgICAgICAgIG91dC5wcmludCgiXSwgcHJlL3Bvc3QgPSAiLCBtX2RhdGFbYmxvY2tJ
bmRleF0ucHJlTnVtYmVyLCAiLyIsIG1fZGF0YVtibG9ja0luZGV4XS5wb3N0TnVtYmVyLCAiXG4i
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
REZHQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZH
QmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJp
dFZlY3Rvci5oPgogCkBAIC00NCwyNCArNDUsMzkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
Y29tcHV0ZShHcmFwaCYpOwogICAgIAotICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJv
bSwgQmxvY2tJbmRleCB0bykgY29uc3QKKyAgICBib29sIHN0cmljdGx5RG9taW5hdGVzKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YVt0b10ucHJlTnVtYmVyID4gbV9kYXRhW2Zyb21dLnByZU51bWJl
cgorICAgICAgICAgICAgJiYgbV9kYXRhW3RvXS5wb3N0TnVtYmVyIDwgbV9kYXRhW2Zyb21dLnBv
c3ROdW1iZXI7CiAgICAgfQogICAgIAogICAgIGJvb2wgZG9taW5hdGVzKEJhc2ljQmxvY2sqIGZy
b20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGRvbWluYXRl
cyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKKyAgICAgICAgcmV0dXJuIGZyb20gPT0gdG8gfHwg
c3RyaWN0bHlEb21pbmF0ZXMoZnJvbSwgdG8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAo
R3JhcGgmLCBQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKLSAgICBib29sIHBydW5lRG9taW5hdG9ycyhHcmFwaCYs
IEJsb2NrSW5kZXgpOworICAgIGJvb2wgbmFpdmVEb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pIGNvbnN0OwogICAgIAotICAgIFZlY3RvcjxGYXN0Qml0VmVjdG9yPiBt
X3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2NrcyB0aGF0
IGRvbWluYXRlIGl0LgotICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRlbXBvcmFy
eSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhpcyB0byBz
YXZlIG5ldy9kZWxldGVzLgorICAgIHN0cnVjdCBCbG9ja0RhdGEgeworICAgICAgICBCbG9ja0Rh
dGEoKQorICAgICAgICAgICAgOiBpZG9tUGFyZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIHBy
ZU51bWJlcihVSU5UX01BWCkKKyAgICAgICAgICAgICwgcG9zdE51bWJlcihVSU5UX01BWCkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGlkb21LaWRzOworICAgICAgICBCYXNpY0Jsb2NrKiBpZG9tUGFyZW50OworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgcHJlTnVtYmVyOworICAgICAgICB1bnNpZ25lZCBwb3N0TnVtYmVyOwor
ICAgIH07CisgICAgCisgICAgQmxvY2tNYXA8QmxvY2tEYXRhPiBtX2RhdGE7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUg
IkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIK
ICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgpAQCAtMzcwLDE0ICszNzEsMTggQEAg
dm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgIGlmIChtX2RvbWlu
YXRvcnMuaXNWYWxpZCgpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRl
ZCBieToiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGksIGJsb2Nr
LT5pbmRleCkpCisgICAgICAgICAgICBpZiAoIXRoaXMtPmJsb2NrKGkpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKHRo
aXMtPmJsb2NrKGkpLCBibG9jaykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJc
biIpOwogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6Iik7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jay0+aW5kZXgsIGkpKQorICAgICAg
ICAgICAgaWYgKCF0aGlzLT5ibG9jayhpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jaywgdGhpcy0+YmxvY2so
aSkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIg
IyIsIGkpOwogICAgICAgICB9CkBAIC02MzUsNzMgKzY0MCwzMCBAQCB2b2lkIEdyYXBoOjpzdWJz
dGl0dXRlR2V0TG9jYWwoQmFzaWNCbG9jCiAgICAgfQogfQogCi0vLyBVdGlsaXRpZXMgZm9yIHBy
ZS0gYW5kIHBvc3Qtb3JkZXIgdHJhdmVyc2Fscy4KLW5hbWVzcGFjZSB7Ci0KLWlubGluZSB2b2lk
IGFkZEZvclByZU9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHJlc3VsdCwgVmVjdG9yPEJhc2lj
QmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCaXRWZWN0b3ImIHNlZW4sIEJhc2ljQmxvY2sqIGJsb2Nr
KQotewotICAgIGlmIChzZWVuLmdldChibG9jay0+aW5kZXgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgcmVzdWx0LmFwcGVuZChibG9jayk7Ci0gICAgd29ya2xpc3QuYXBwZW5kKGJsb2Nr
KTsKLSAgICBzZWVuLnNldChibG9jay0+aW5kZXgpOwotfQotCi1lbnVtIFBvc3RPcmRlclRhc2tL
aW5kIHsKLSAgICBQb3N0T3JkZXJGaXJzdFZpc2l0LAotICAgIFBvc3RPcmRlckFkZFRvUmVzdWx0
Ci19OwotCi1zdHJ1Y3QgUG9zdE9yZGVyVGFzayB7Ci0gICAgUG9zdE9yZGVyVGFzayhCYXNpY0Js
b2NrKiBibG9jayA9IG51bGxwdHIsIFBvc3RPcmRlclRhc2tLaW5kIGtpbmQgPSBQb3N0T3JkZXJG
aXJzdFZpc2l0KQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgICAgICwgbV9raW5kKGtp
bmQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwotICAgIFBv
c3RPcmRlclRhc2tLaW5kIG1fa2luZDsKLX07Ci0KLWlubGluZSB2b2lkIGFkZEZvclBvc3RPcmRl
cihWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+JiB3b3JrbGlzdCwgQml0VmVjdG9yJiBzZWVuLCBC
YXNpY0Jsb2NrKiBibG9jaykKLXsKLSAgICBpZiAoc2Vlbi5nZXQoYmxvY2stPmluZGV4KSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHdvcmtsaXN0LmFwcGVuZChQb3N0T3JkZXJUYXNrKGJs
b2NrLCBQb3N0T3JkZXJGaXJzdFZpc2l0KSk7Ci0gICAgc2Vlbi5zZXQoYmxvY2stPmluZGV4KTsK
LX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0lu
UHJlT3JkZXIoVmVjdG9yPEJhc2ljQmxvY2sqPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMTY+IHdvcmtsaXN0OwotICAgIEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBy
ZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrKDApKTsKLSAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5w
dXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5w
b3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKLSAgICAgICAgICAgIGFkZEZv
clByZU9yZGVyKHJlc3VsdCwgd29ya2xpc3QsIHNlZW4sIGJsb2NrLT5zdWNjZXNzb3IoaSkpOwor
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICB9CiB9
CiAKIHZvaWQgR3JhcGg6OmdldEJsb2Nrc0luUG9zdE9yZGVyKFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8UG9zdE9yZGVyVGFzaywgMTY+IHdvcmtsaXN0OwotICAg
IEJpdFZlY3RvciBzZWVuOwotICAgIGFkZEZvclBvc3RPcmRlcih3b3JrbGlzdCwgc2VlbiwgYmxv
Y2soMCkpOwotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFBvc3RP
cmRlclRhc2sgdGFzayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7Ci0gICAgICAgIHN3aXRjaCAodGFz
ay5tX2tpbmQpIHsKLSAgICAgICAgY2FzZSBQb3N0T3JkZXJGaXJzdFZpc2l0OgotICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKFBvc3RPcmRlclRhc2sodGFzay5tX2Jsb2NrLCBQb3N0T3JkZXJB
ZGRUb1Jlc3VsdCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFzay5tX2Jsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCi0gICAgICAgICAgICAgICAgYWRkRm9yUG9zdE9yZGVy
KHdvcmtsaXN0LCBzZWVuLCB0YXNrLm1fYmxvY2stPnN1Y2Nlc3NvcihpKSk7CisgICAgUG9zdE9y
ZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsK
KyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAg
ICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAg
ICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUG9zdE9yZGVyQWRkVG9SZXN1bHQ6Ci0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHRhc2subV9ibG9jayk7CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
bnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Jsb2NrU2V0Lmgi
CiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpOwogICAgICAgICAKLSAgICAg
ICAgQml0VmVjdG9yIGJsb2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzOworICAgICAgICBC
bG9ja1NldCBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50czsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwpAQCAtNjMsMTcgKzY0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IGNvbnRyb2wgZmxvdyBvY2N1cnMgYXQgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4KICAgICAgICAgICAgIGlmIChtX29yaWdpblRoYXRI
YWRGaXJlLmlzU2V0KCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0
TmVlZEludmFsaWRhdGlvblBvaW50cy5zZXQoYmxvY2stPnN1Y2Nlc3NvcihpKS0+aW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBibG9ja3NUaGF0TmVlZEludmFsaWRhdGlvblBvaW50cy5hZGQo
YmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmICghYmxvY2tzVGhhdE5lZWRJbnZh
bGlkYXRpb25Qb2ludHMuZ2V0KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWJs
b2Nrc1RoYXROZWVkSW52YWxpZGF0aW9uUG9pbnRzLmNvbnRhaW5zKGJsb2NrKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaW5zZXJ0SW52
YWxpZGF0aW9uQ2hlY2soMCwgYmxvY2stPmF0KDApKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05haXZlRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOYWl2
ZURvbWluYXRvcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworTmFpdmVEb21pbmF0b3JzOjpOYWl2ZURvbWluYXRvcnMoKQoreworfQorCitO
YWl2ZURvbWluYXRvcnM6On5OYWl2ZURvbWluYXRvcnMoKQoreworfQorCit2b2lkIE5haXZlRG9t
aW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRz
IGEgbmFpdmUgZG9taW5hdG9yIHNvbHZlci4KKyAgICAKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2so
MCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIAorICAgIHVuc2lnbmVkIG51bUJsb2Nr
cyA9IGdyYXBoLm51bUJsb2NrcygpOworICAgIAorICAgIC8vIEFsbG9jYXRlIHN0b3JhZ2UgZm9y
IHRoZSBkZW5zZSBkb21pbmFuY2UgbWF0cml4LiAKKyAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1
bHRzLnNpemUoKSkgeworICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspCisgICAgICAgICAgICBtX3Jlc3Vs
dHNbaV0ucmVzaXplKG51bUJsb2Nrcyk7CisgICAgICAgIG1fc2NyYXRjaC5yZXNpemUobnVtQmxv
Y2tzKTsKKyAgICB9CisKKyAgICAvLyBXZSBrbm93IHRoYXQgdGhlIGVudHJ5IGJsb2NrIGlzIG9u
bHkgZG9taW5hdGVkIGJ5IGl0c2VsZi4KKyAgICBtX3Jlc3VsdHNbMF0uY2xlYXJBbGwoKTsKKyAg
ICBtX3Jlc3VsdHNbMF0uc2V0KDApOworCisgICAgLy8gRmluZCBhbGwgb2YgdGhlIHZhbGlkIGJs
b2Nrcy4KKyAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1CbG9ja3M7IGktLTspIHsKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBNYXJrIGFsbCBub2RlcyBhcyBkb21pbmF0ZWQgYnkgZXZlcnl0aGluZy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7CisgICAgICAgIGlmICghZ3JhcGgu
YmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOworICAgIH0KKworICAgIC8vIEl0ZXJhdGl2
ZWx5IGVsaW1pbmF0ZSBub2RlcyB0aGF0IGFyZSBub3QgZG9taW5hdG9yLgorICAgIGJvb2wgY2hh
bmdlZDsKKyAgICBkbyB7CisgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgLy8gUHJ1
bmUgZG9taW5hdG9ycyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogZm9yd2FyZCBzY2FuLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbnVtQmxvY2tzOyArK2kpCisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHBydW5lRG9taW5hdG9ycyhncmFwaCwgaSk7CisKKyAgICAgICAgaWYgKCFj
aGFuZ2VkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gUHJ1bmUgZG9taW5hdG9y
cyBpbiBhbGwgbm9uIGVudHJ5IGJsb2NrczogYmFja3dhcmQgc2Nhbi4KKyAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7
KQorICAgICAgICAgICAgY2hhbmdlZCB8PSBwcnVuZURvbWluYXRvcnMoZ3JhcGgsIGkpOworICAg
IH0gd2hpbGUgKGNoYW5nZWQpOworfQorCitib29sIE5haXZlRG9taW5hdG9yczo6cHJ1bmVEb21p
bmF0b3JzKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpZHgpCit7CisgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBncmFwaC5ibG9jayhpZHgpOworCisgICAgaWYgKCFibG9jayB8fCBibG9jay0+cHJl
ZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRmlu
ZCB0aGUgaW50ZXJzZWN0aW9uIG9mIGRvbShwcmVkcykuCisgICAgbV9zY3JhdGNoLnNldChtX3Jl
c3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2Ny
YXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CisK
KyAgICAvLyBUaGUgYmxvY2sgaXMgYWxzbyBkb21pbmF0ZWQgYnkgaXRzZWxmLgorICAgIG1fc2Ny
YXRjaC5zZXQoaWR4KTsKKworICAgIHJldHVybiBtX3Jlc3VsdHNbaWR4XS5zZXRBbmRDaGVjayht
X3NjcmF0Y2gpOworfQorCit2b2lkIE5haXZlRG9taW5hdG9yczo6ZHVtcChHcmFwaCYgZ3JhcGgs
IFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmlu
dCgiICAgIEJsb2NrICIsICpibG9jaywgIjoiKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG90
aGVySW5kZXggPSAwOyBvdGhlckluZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrb3RoZXJJbmRl
eCkgeworICAgICAgICAgICAgaWYgKCFkb21pbmF0ZXMoYmxvY2stPmluZGV4LCBvdGhlckluZGV4
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICMi
LCBvdGhlckluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYWl2ZURvbWluYXRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05haXZlRG9t
aW5hdG9ycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YWl2ZURvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
TmFpdmVEb21pbmF0b3JzX2gKKyNkZWZpbmUgREZHTmFpdmVEb21pbmF0b3JzX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRoaXMgY2xhc3MgaXMg
b25seSB1c2VkIGZvciB2YWxpZGF0aW5nIHRoZSByZWFsIGRvbWluYXRvcnMgaW1wbGVtZW50YXRp
b24uCisKK2NsYXNzIE5haXZlRG9taW5hdG9ycyB7CitwdWJsaWM6CisgICAgTmFpdmVEb21pbmF0
b3JzKCk7CisgICAgfk5haXZlRG9taW5hdG9ycygpOworICAgIAorICAgIHZvaWQgY29tcHV0ZShH
cmFwaCYpOworICAgIAorICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJ
bmRleCB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChm
cm9tKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZG9taW5hdGVzKGZy
b20tPmluZGV4LCB0by0+aW5kZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoR3JhcGgm
LCBQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBib29sIHBydW5lRG9t
aW5hdG9ycyhHcmFwaCYsIEJsb2NrSW5kZXgpOworICAgIAorICAgIFZlY3RvcjxGYXN0Qml0VmVj
dG9yPiBtX3Jlc3VsdHM7IC8vIEZvciBlYWNoIGJsb2NrLCB0aGUgYml0dmVjdG9yIG9mIGJsb2Nr
cyB0aGF0IGRvbWluYXRlIGl0LgorICAgIEZhc3RCaXRWZWN0b3IgbV9zY3JhdGNoOyAvLyBBIHRl
bXBvcmFyeSBiaXR2ZWN0b3Igd2l0aCBiaXQgZm9yIGVhY2ggYmxvY2suIFdlIHJlY3ljbGUgdGhp
cyB0byBzYXZlIG5ldy9kZWxldGVzLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdOYWl2ZURvbWluYXRv
cnNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3Bz
LmNwcAkocmV2aXNpb24gMTcyOTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YXR1cmFsTG9vcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMSBAQCB2b2lkIE5h
dHVyYWxMb29wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBOYXR1cmFsTG9vcHM6Ok5hdHVyYWxM
b29wcygpIHsgfQogTmF0dXJhbExvb3BzOjp+TmF0dXJhbExvb3BzKCkgeyB9CiAKK3ZvaWQgTmF0
dXJhbExvb3BzOjpjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJiBncmFwaCkKK3sKKyAgICBncmFw
aC5tX2RvbWluYXRvcnMuY29tcHV0ZUlmTmVjZXNzYXJ5KGdyYXBoKTsKK30KKwogdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogewogICAgIC8vIEltcGxlbWVudCB0aGUg
Y2xhc3NpYyBkb21pbmF0b3ItYmFzZWQgbmF0dXJhbCBsb29wIGZpbmRlci4gVGhlIGZpcnN0CkBA
IC01NywxMSArNjIsOSBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgp
CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogICAgIAotICAg
IGdyYXBoLm1fZG9taW5hdG9ycy5jb21wdXRlSWZOZWNlc3NhcnkoZ3JhcGgpOwotICAgIAogICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbWluYXRvcnM6XG4iKTsKLSAgICAg
ICAgZ3JhcGgubV9kb21pbmF0b3JzLmR1bXAoZ3JhcGgsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAg
ICAgIGdyYXBoLm1fZG9taW5hdG9ycy5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQogICAg
IAogICAgIG1fbG9vcHMucmVzaXplKDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxNzI5NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5
Myw3IEBAIHB1YmxpYzoKICAgICBOYXR1cmFsTG9vcHMoKTsKICAgICB+TmF0dXJhbExvb3BzKCk7
CiAgICAgCisgICAgdm9pZCBjb21wdXRlRGVwZW5kZW5jaWVzKEdyYXBoJik7CiAgICAgdm9pZCBj
b21wdXRlKEdyYXBoJik7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtTG9vcHMoKSBjb25zdApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3MzA0NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQtMDgtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGNvbXB1dGUgaW1tZWRpYXRlIGRvbWluYXRv
cnMgdXNpbmcgdGhlIE8obiBsb2cgbikgZm9ybSBvZiBMZW5nYXVlciBhbmQgVGFyamFuJ3MgIkEg
RmFzdCBBbGdvcml0aG0gZm9yIEZpbmRpbmcgRG9taW5hdG9ycyBpbiBhIEZsb3dncmFwaCIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMzYxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtl
IEJpdFZlY3RvciBvcGVyYXRpb25zIHJldHVybiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIGJp
dCB5b3UncmUgY2hhbmdpbmcuIFRoaXMgaXMKKyAgICAgICAgdXNlZnVsIGZvciB0aGUga2luZHMg
b2Ygc2V0IG9wZXJhdGlvbnMgdGhhdCBhcmUgY29tbW9ucGxhY2UgaW4gY29tcGlsZXIgZ3JhcGgg
c2VhcmNoZXMuCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6cXVpY2tTZXQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnF1aWNrQ2xlYXIp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6ZW5zdXJlU2l6ZUFuZFNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXIpOgor
CiAyMDE0LTA4LTI3ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBEZWxldGUgYSBNU1ZTMjAxMCB3b3JrYXJvdW5kLgpJbmRleDogU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlz
aW9uIDE3Mjk0NykKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTcsMjQgKzExNywzMSBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gISEoYml0cygp
W2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAo
Yml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHF1
aWNrU2V0KHNpemVfdCBiaXQpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0KQogICAgIHsK
ICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oYml0IDwgc2l6ZSgpKTsK
LSAgICAgICAgYml0cygpW2JpdCAvIGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAgICB1
aW50cHRyX3QmIHdvcmQgPSBiaXRzKClbYml0IC8gYml0c0luUG9pbnRlcigpXTsKKyAgICAgICAg
dWludHB0cl90IG1hc2sgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0
c0luUG9pbnRlcigpIC0gMSkpOworICAgICAgICBib29sIHJlc3VsdCA9ICEhKHdvcmQgJiBtYXNr
KTsKKyAgICAgICAgd29yZCB8PSBtYXNrOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHF1aWNrQ2xlYXIoc2l6ZV90IGJpdCkKKyAgICBib29sIHF1aWNrQ2xl
YXIoc2l6ZV90IGJpdCkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGJpdCA8IHNpemUoKSk7Ci0gICAgICAgIGJpdHMoKVtiaXQgLyBiaXRzSW5Qb2ludGVy
KCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50
ZXIoKSAtIDEpKSk7CisgICAgICAgIHVpbnRwdHJfdCYgd29yZCA9IGJpdHMoKVtiaXQgLyBiaXRz
SW5Qb2ludGVyKCldOworICAgICAgICB1aW50cHRyX3QgbWFzayA9IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSk7CisgICAgICAgIGJvb2wg
cmVzdWx0ID0gISEod29yZCAmIG1hc2spOworICAgICAgICB3b3JkICY9IH5tYXNrOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICB2b2lkIHF1aWNrU2V0KHNpemVfdCBi
aXQsIGJvb2wgdmFsdWUpCisgICAgYm9vbCBxdWlja1NldChzaXplX3QgYml0LCBib29sIHZhbHVl
KQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlKQotICAgICAgICAgICAgcXVpY2tTZXQoYml0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAgICAgICAg
cmV0dXJuIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja0NsZWFyKGJpdCk7CiAg
ICAgfQogICAgIAogICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0CkBAIC0xNDQsMzEgKzE1
MSwzMCBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gcXVpY2tHZXQoYml0KTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICBib29sIHNldChzaXplX3QgYml0KQog
ICAgIHsKICAgICAgICAgZW5zdXJlU2l6ZShiaXQgKyAxKTsKLSAgICAgICAgcXVpY2tTZXQoYml0
KTsKKyAgICAgICAgcmV0dXJuIHF1aWNrU2V0KGJpdCk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1
cmVTaXplQW5kU2V0KHNpemVfdCBiaXQsIHNpemVfdCBzaXplKQorICAgIGJvb2wgZW5zdXJlU2l6
ZUFuZFNldChzaXplX3QgYml0LCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGVuc3VyZVNp
emUoc2l6ZSk7Ci0gICAgICAgIHF1aWNrU2V0KGJpdCk7CisgICAgICAgIHJldHVybiBxdWlja1Nl
dChiaXQpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICBib29sIGNs
ZWFyKHNpemVfdCBiaXQpCiAgICAgewogICAgICAgICBpZiAoYml0ID49IHNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgcXVpY2tDbGVhcihiaXQpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcXVpY2tDbGVhcihiaXQpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZhbHVlKQorICAgIGJvb2wgc2V0KHNpemVf
dCBiaXQsIGJvb2wgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAg
ICBzZXQoYml0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAgICAg
ICAgICAgIHJldHVybiBzZXQoYml0KTsKKyAgICAgICAgcmV0dXJuIGNsZWFyKGJpdCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgbWVyZ2UoY29uc3QgQml0VmVjdG9yJiBvdGhlcikK
</data>
<flag name="review"
          id="262008"
          type_id="1"
          status="+"
          setter="mhahnenb"
    />
          </attachment>
      

    </bug>

</bugzilla>