<?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>152810</bug_id>
          
          <creation_ts>2016-01-06 14:52:02 -0800</creation_ts>
          <short_desc>FTL B3 getById() should do exceptions</short_desc>
          <delta_ts>2016-01-07 13:21:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>151686</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153246</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-06 14:52:02 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153247</commentid>
    <comment_count>1</comment_count>
      <attachid>268416</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-06 14:52:36 -0800</bug_when>
    <thetext>Created attachment 268416
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153341</commentid>
    <comment_count>2</comment_count>
      <attachid>268439</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-06 20:08:49 -0800</bug_when>
    <thetext>Created attachment 268439
it just might work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153348</commentid>
    <comment_count>3</comment_count>
      <attachid>268441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-06 20:28:27 -0800</bug_when>
    <thetext>Created attachment 268441
even nicer

Of course, I haven&apos;t tried compiling it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153365</commentid>
    <comment_count>4</comment_count>
      <attachid>268444</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-06 21:55:04 -0800</bug_when>
    <thetext>Created attachment 268444
it did things

It&apos;s starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153483</commentid>
    <comment_count>5</comment_count>
      <attachid>268471</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 11:35:14 -0800</bug_when>
    <thetext>Created attachment 268471
seems to work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153489</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 11:46:04 -0800</bug_when>
    <thetext>Running tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153504</commentid>
    <comment_count>7</comment_count>
      <attachid>268474</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 12:22:28 -0800</bug_when>
    <thetext>Created attachment 268474
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153506</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-01-07 12:24:32 -0800</bug_when>
    <thetext>Attachment 268474 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:58:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:67:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:68:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:69:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:91:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:104:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:105:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:106:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:107:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.cpp:108:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLB3Compile.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:357:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:360:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 15 in 24 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>1153507</commentid>
    <comment_count>9</comment_count>
      <attachid>268474</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-01-07 12:26:05 -0800</bug_when>
    <thetext>Comment on attachment 268474
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGCommon.h:110
&gt; -    // We&apos;re converging in a straight-forward forward flow fixpoint. This is the
&gt; +    // We&apos;re converging in a straght-forward forward flow fixpoint. This is the

Revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153511</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 12:29:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 268474 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268474&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCommon.h:110
&gt; &gt; -    // We&apos;re converging in a straight-forward forward flow fixpoint. This is the
&gt; &gt; +    // We&apos;re converging in a straght-forward forward flow fixpoint. This is the
&gt; 
&gt; Revert.

Lol done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153513</commentid>
    <comment_count>11</comment_count>
      <attachid>268474</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 12:33:08 -0800</bug_when>
    <thetext>Comment on attachment 268474
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.h:49
&gt; +    // At any time, you can 

I&apos;ll revert this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153526</commentid>
    <comment_count>12</comment_count>
      <attachid>268474</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-01-07 13:06:03 -0800</bug_when>
    <thetext>Comment on attachment 268474
the patch

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

r=me with some style comments.

&gt; Source/JavaScriptCore/dfg/DFGCommon.h:110
&gt; +    // We&apos;re converging in a straght-forward forward flow fixpoint. This is the

typo

&gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:46
&gt; +Box&lt;CCallHelpers::JumpList&gt; ExceptionTarget::jumps(CCallHelpers&amp; jit)

nice.

&gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:70
&gt; +{

you could assert to verify that defaultHandler is a real thing only when isDefaultHandler is true to prevent miscreation.

&gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.h:49
&gt; +    // At any time, you can 

remove

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:355
&gt; +        auto exceptionHandler = state-&gt;exceptionHandler;

style: I think this is much easier to read and to determine that it&apos;s correct if you just used &quot;Box&lt;Label&gt;&quot; type here instead of auto.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7226
&gt; +        // FIXME: If this is a GetByIdFlush, we might get some performance boost if we claim that it
&gt; +        // clobbers volatile registers late. It&apos;s not necessary for correctness, though, since the
&gt; +        // IC code is super smart about saving registers.

might be worth opening a bug.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7242
&gt; +                // This is the direct exit target for operation calls. It&apos;s a pointer to a JumpList.
&gt; +                auto exceptions = exceptionHandle-&gt;scheduleExitCreation(params)-&gt;jumps(jit);

You could just remove this comment if you removed auto and wrote out the type, and also just named it something like &quot;exceptionTargetForCallOperation&quot;.
I think that&apos;s more readable than having a comment.

&gt; Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.h:85
&gt; +    RefPtr&lt;ExceptionTarget&gt; scheduleExitCreation(const B3::StackmapGenerationParams&amp;);
&gt; +
&gt; +    // Schedules the creation of an OSR exit jump destination, and ensures that it gets associated
&gt; +    // with the handler for some callsite index.
&gt; +    void scheduleExitCreationForUnwind(const B3::StackmapGenerationParams&amp;, CallSiteIndex);

nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153535</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 13:18:12 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 268474 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=268474&amp;action=review
&gt; 
&gt; r=me with some style comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCommon.h:110
&gt; &gt; +    // We&apos;re converging in a straght-forward forward flow fixpoint. This is the
&gt; 
&gt; typo

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:46
&gt; &gt; +Box&lt;CCallHelpers::JumpList&gt; ExceptionTarget::jumps(CCallHelpers&amp; jit)
&gt; 
&gt; nice.
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.cpp:70
&gt; &gt; +{
&gt; 
&gt; you could assert to verify that defaultHandler is a real thing only when
&gt; isDefaultHandler is true to prevent miscreation.

Meh.  It&apos;s already a private constructor friended to PatchpointExceptionHandle.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLExceptionTarget.h:49
&gt; &gt; +    // At any time, you can 
&gt; 
&gt; remove

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:355
&gt; &gt; +        auto exceptionHandler = state-&gt;exceptionHandler;
&gt; 
&gt; style: I think this is much easier to read and to determine that it&apos;s
&gt; correct if you just used &quot;Box&lt;Label&gt;&quot; type here instead of auto.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7226
&gt; &gt; +        // FIXME: If this is a GetByIdFlush, we might get some performance boost if we claim that it
&gt; &gt; +        // clobbers volatile registers late. It&apos;s not necessary for correctness, though, since the
&gt; &gt; +        // IC code is super smart about saving registers.
&gt; 
&gt; might be worth opening a bug.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7242
&gt; &gt; +                // This is the direct exit target for operation calls. It&apos;s a pointer to a JumpList.
&gt; &gt; +                auto exceptions = exceptionHandle-&gt;scheduleExitCreation(params)-&gt;jumps(jit);
&gt; 
&gt; You could just remove this comment if you removed auto and wrote out the
&gt; type

I&apos;m fine with this.

&gt; , and also just named it something like
&gt; &quot;exceptionTargetForCallOperation&quot;.
&gt; I think that&apos;s more readable than having a comment.

I prefer the &quot;This is the direct exit target for operation calls&quot; part as a comment. I&apos;ve been having a thing for shorter variable names recently.  I think that it works well, in this case, after I write out the type. The code is now:

                // This is the direct exit target for operation calls.
                Box&lt;CCallHelpers::JumpList&gt; exceptions =
                    exceptionHandle-&gt;scheduleExitCreation(params)-&gt;jumps(jit);

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLPatchpointExceptionHandle.h:85
&gt; &gt; +    RefPtr&lt;ExceptionTarget&gt; scheduleExitCreation(const B3::StackmapGenerationParams&amp;);
&gt; &gt; +
&gt; &gt; +    // Schedules the creation of an OSR exit jump destination, and ensures that it gets associated
&gt; &gt; +    // with the handler for some callsite index.
&gt; &gt; +    void scheduleExitCreationForUnwind(const B3::StackmapGenerationParams&amp;, CallSiteIndex);
&gt; 
&gt; nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153536</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-07 13:21:16 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/194716</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268416</attachid>
            <date>2016-01-06 14:52:36 -0800</date>
            <delta_ts>2016-01-06 20:08:49 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16463</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgJKHJldmlzaW9uIDE5
NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEwLDIxICs0MTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVucmVhY2hh
YmxlKCkgeyBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnRyb2xWYWx1ZT4obV9wcm9jLCBCMzo6
T29wcywgb3JpZ2luKCkpOyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAg
IHZvaWQgc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIEIzOjpD
aGVja1ZhbHVlKiBjaGVjayA9IHNwZWN1bGF0ZSh2YWx1ZSwgYXJndW1lbnRzKTsKLSAgICAgICAg
Y2hlY2stPnNldEdlbmVyYXRvcihmdW5jdG9yKTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hlY2tWYWx1
ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cykKLSAgICB7Ci0gICAgICAgIEIzOjpDaGVja1ZhbHVlKiBjaGVjayA9IHNwZWN1bGF0
ZSh2YWx1ZSk7Ci0gICAgICAgIGZvciAoTFZhbHVlIHZhbHVlIDogYXJndW1lbnRzKQotICAgICAg
ICAgICAgY2hlY2stPmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZSh2YWx1ZSkpOwotICAgICAg
ICByZXR1cm4gY2hlY2s7Ci0gICAgfQotCiAgICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZShM
VmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVjaywgb3JpZ2luKCksIHZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxOTQ2NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1Niw3ICsxNjU2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KIAogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tW
YWx1ZSogcmVzdWx0ID0KKyAgICAgICAgICAgIENoZWNrVmFsdWUqIHJlc3VsdCA9CiAgICAgICAg
ICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVjdWxhdGVTdWIobGVmdCwgcmlnaHQpIDogbV9vdXQu
c3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
cmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAg
ICAgICBzZXRJbnQzMihyZXN1bHQpOwpAQCAtMTcxMiw3ICsxNzEyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpKTsKICNpZiBG
VExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNrVmFsdWUqIHJlc3VsdCA9CisgICAgICAg
ICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQu
c3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdo
dCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsK
QEAgLTE4MDMsNyArMTgwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIEZUTF9VU0VT
X0IzCi0gICAgICAgICAgICAgICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0aW9uID0gbV9vdXQu
c3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBDaGVja1ZhbHVlKiBz
cGVjdWxhdGlvbiA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CiAgICAgICAgICAg
ICAgICAgYmxlc3NTcGVjdWxhdGlvbihzcGVjdWxhdGlvbiwgT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWN1bGF0aW9u
OwogI2Vsc2UgLy8gRlRMX1VTRVNfQjMKQEAgLTE4MzcsNyArMTgzNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBvcHBv
c2l0ZShraW5kKSk7CiAKICNpZiBGVExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNrVmFs
dWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOwog
ICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3JpZ2luKTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBM
VmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3c2NChsZWZ0LCByaWdo
dCk7CkBAIC00MjkxLDcgKzQyOTEsNyBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgbnVtS2lkczsgKytpKSB7CiAgICAgICAgICAgICBmbGFncyA9IG1fb3V0LmJp
dEFuZChmbGFncywgbV9vdXQubG9hZDMyKGtpZHNbaV0sIG1faGVhcHMuSlNTdHJpbmdfZmxhZ3Mp
KTsKICNpZiBGVExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNrVmFsdWUqIGxlbmd0aENo
ZWNrID0gbV9vdXQuc3BlY3VsYXRlQWRkKAorICAgICAgICAgICAgQ2hlY2tWYWx1ZSogbGVuZ3Ro
Q2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCiAgICAgICAgICAgICAgICAgbGVuZ3RoLCBtX291
dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsKICAgICAgICAgICAg
IGJsZXNzU3BlY3VsYXRpb24obGVuZ3RoQ2hlY2ssIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aENoZWNrOwpAQCAt
NzIwNSwyMSArNzIwNSwzNSBAQCBwcml2YXRlOgogICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CiAK
ICNpZiBGVExfVVNFU19CMwotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRvIGV4Y2VwdGlv
bnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTE2ODYKLSAgICAgICAgCiAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGJh
c2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAKKyAgICAgICAgUmVmUHRy
PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAg
ICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisKICAgICAgICAg
U3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogCisgICAgICAgICAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUt
PmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJn
ZXQgZm9yIG9wZXJhdGlvbiBjYWxscy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBp
ZiBleGNlcHRpb25IYW5kbGUgaXMgbnVsbD8gTWF5YmUgdGhlcmUgc2hvdWxkIGJlIHNvbWUgc21h
cnQgd2F5IGFib3V0CisgICAgICAgICAgICAgICAgLy8gdGhpcy4gTGlrZSBhbiBleGNlcHRpb24g
aGFuZGxlIGV2ZW4gd2hlbiB3ZSdyZSBub3QgY2F0Y2hpbmcgbG9jYWxseS4gQW5kIHRoZW4gdGhp
cworICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgcmV0dXJuIGFuIGV4aXQgaGFuZGxlLiBJdCBy
ZXR1cm5zIGp1c3QgYSBoYW5kbGUgZm9yIGdldHRpbmcgdGhlIHRhcmdldAorICAgICAgICAgICAg
ICAgIC8vIGxhYmVsLgorICAgICAgICAgICAgICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBleGNl
cHRpb25FeGl0ID0gZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMp
OworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNy
ZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAg
ICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2lu
Y2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRo
ZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVk
dWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKICAgICAg
ICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRV
bmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCisgICAgICAgICAgICAg
ICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUlu
ZGV4LAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwg
SlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CiAKQEAgLTcyMjksOCArNzI0Myw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAogICAgICAgICAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRo
aXMgZG8gc29tZXRoaW5nLgorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTGlu
ayB0aGlzIGp1bXAgbGlzdCB0byB0aGUgbGFiZWwgaW4gZXhjZXB0aW9uRXhpdC4KICAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uczsKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZqaXQp
OwpAQCAtMTAxMzIsNyArMTAxNDYsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uKTsKICAgICB9CiAKLSNpZiAhRlRMX1VTRVNfQjMKKyNpZiBGVExfVVNF
U19CMworICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKKyAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlv
bkhhbmRsZXI7CisgICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxs
Q2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JFeGl0LCBvcENhdGNoT3Jp
Z2luLCBleGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24p
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBib29sIGV4aXRPSyA9IHRy
dWU7CisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW4ud2l0aEZvckV4aXRBbmRF
eGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKTsKKworICAgICAgICBPU1JFeGl0RGVzY3JpcHRv
ciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihub1ZhbHVlKCksIG51
bGxwdHIpOworCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT5udW1DaGlsZHJlbigp
OworICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXRE
ZXNjcmlwdG9yLCBvcENhdGNoT3JpZ2luLCBudWxscHRyKSk7CisKKyAgICAgICAgcmV0dXJuIFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZSgKKyAgICAgICAgICAgIG1fZnRsU3RhdGUs
IGV4aXREZXNjcmlwdG9yLCBvcmlnaW4sIG9mZnNldCwgKmV4Y2VwdGlvbkhhbmRsZXIpOworICAg
IH0KKyNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0QXJndW1lbnRz
Rm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKFN0YWNrbWFwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIEV4Y2VwdGlvblR5cGUgZXhjZXB0aW9uVHlwZSwgdW5zaWduZWQgb2Zmc2V0T2ZF
eGl0QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwpA
QCAtMTAxNTMsNyArMTAxODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnVpbGRFeGl0QXJn
dW1lbnRzKGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luLCBu
b1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmRWZWN0b3IoZnJlc2hMaXN0KTsKICAgICB9Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCisjZW5k
aWYgLy8gRlRMX1VTRVNfQjMKIAogICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKERGRzo6QmFzaWNC
bG9jayogYmxvY2spCiAgICAgewpAQCAtMTAyNDUsNyArMTAyNzksNyBAQCBwcml2YXRlOgogICAg
IH0KIAogI2lmIEZUTF9VU0VTX0IzCi0gICAgdm9pZCBibGVzc1NwZWN1bGF0aW9uKEIzOjpDaGVj
a1ZhbHVlKiB2YWx1ZSwgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5v
ZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVy
ID0gZmFsc2UpCisgICAgdm9pZCBibGVzc1NwZWN1bGF0aW9uKENoZWNrVmFsdWUqIHZhbHVlLCBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBO
b2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKICAgICB7
CiAgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4
aXREZXNjcmlwdG9yKGxvd1ZhbHVlLCBoaWdoVmFsdWUpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNpbmNsdWRlICJG
VExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdEhhbmRsZS5oIgorI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworUmVmPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZSgK
KyAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBOb2RlT3Jp
Z2luIG9yaWdpbiwgdW5zaWduZWQgb2Zmc2V0LAorICAgIGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5k
bGVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZShzdGF0ZSwgZGVzY3JpcHRvciwgb3JpZ2luLCBvZmZzZXQsIGhhbmRsZXIpKTsKK30KKworUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6flBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoKQorewor
fQorCitSZWZQdHI8T1NSRXhpdEhhbmRsZT4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2No
ZWR1bGVFeGl0Q3JlYXRpb24oCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKQoreworICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICBy
ZXR1cm4gbV9kZXNjcmlwdG9yLT5lbWl0T1NSRXhpdExhdGVyKAorICAgICAgICBzdGF0ZSwgVW5j
b3VudGFibGUsIG9yaWdpbiwgcGFyYW1zLCBvZmZzZXQsIGlzRXhjZXB0aW9uSGFuZGxlcik7Cit9
CisKK3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0Q3JlYXRpb25G
b3JVbndpbmQoCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5k
bGU+IGhhbmRsZSA9IHNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyk7CisKKyAgICBoYW5kbGUt
PmV4aXQubV9pc1Vud2luZEhhbmRsZXIgPSB0cnVlOworCisgICAgSGFuZGxlckluZm8gaGFuZGxl
ciA9IG1faGFuZGxlcjsKKyAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgIFtoYW5kbGVy
LCBjYWxsU2l0ZUluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgICAgICAgICAgaml0LmFkZExp
bmtUYXNrKAorICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gaGFuZGxlcjsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGNhbGxTaXRlSW5kZXguYml0cygp
OworICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0
cygpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpOworICAgICAgICAgICAgICAgICAgICBj
b2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworfQorCitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKAorICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2Ny
aXB0b3IqIGRlc2NyaXB0b3IsIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsCisg
ICAgY29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCisgICAgOiBtX3N0YXRlKHN0YXRlKQorICAg
ICwgbV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAg
LCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKK3sKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZU
TF9VU0VTX0IzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlX2gK
KyNkZWZpbmUgRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9oCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVk
ZSAiREZHTm9kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSA8
d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtczsKK30gLy8gbmFtZXNwYWNlIEIzCisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBPU1JF
eGl0SGFuZGxlOworY2xhc3MgU3RhdGU7CitzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3I7CisKK2Ns
YXNzIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4geworcHVibGljOgorICAgIFJlZjxQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBjcmVhdGUoCisgICAgICAgIFN0YXRlJiwgT1NSRXhpdERlc2Ny
aXB0b3IqLCBOb2RlT3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IEhhbmRsZXJJbmZvJik7
CisgICAgCisgICAgflBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoKTsKKworICAgIC8vIE5vdGUg
dGhhdCB5b3UgY2FuIHVzZSB0aGlzIGhhbmRsZSB0byBzY2hlZHVsZSBhbnkgbnVtYmVyIG9mIGV4
aXRzLiBUaGlzIGNhcGFiaWxpdHkgaXMgaGVyZSBmb3IKKyAgICAvLyB0d28gcmVhc29uczoKKyAg
ICAvLyAKKyAgICAvLyAtIEIzIGNvZGUgZHVwbGljYXRpb24uIEIzIGNvdWxkIHRha2UgYSBwYXRj
aHBvaW50IGFuZCB0dXJuIGl0IGludG8gbXVsdGlwbGUgcGF0Y2hwb2ludHMgaWYgaXQKKyAgICAv
LyAgIGR1cGxpY2F0ZXMgY29kZS4gRHVwbGljYXRpbmcgY29kZSBpcyBsZWdhbCBzaW5jZSB5b3Ug
Y2FuIGRvIGl0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yCisgICAgLy8gICBvZiB0aGUg
cHJvZ3JhbS4gT25lIGV4YW1wbGUgaXMgdGFpbCBkdXBsaWNhdGlvbi4gQW5vdGhlciBpcyBqdW1w
IHRocmVhZGluZy4gWWV0IGFub3RoZXIgaXMKKyAgICAvLyAgIHBhdGggc3BlY2lhbGl6YXRpb24u
IFlvdSB3aWxsIGhhdmUgb25lIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcGVyIHBhdGNocG9p
bnQgeW91IGNyZWF0ZQorICAgIC8vICAgZHVyaW5nIERGRy0+QjMgbG93ZXJpbmcsIGFuZCB0aGF0
IHBhdGNocG9pbnQgd2lsbCBoYXZlIGEgZ2VuZXJhdG9yIHRoYXQgY2FsbHMKKyAgICAvLyAgIGhh
bmRsZS0+c2NoZWR1bGVCbGFoKCkuIFRoYXQgZ2VuZXJhdG9yIHdpbGwgYmUgY2FsbGVkIG11bHRp
cGxlIHRpbWVzIGlmIHlvdXIgcGF0Y2hwb2ludCBnb3QKKyAgICAvLyAgIGR1cGxpY2F0ZWQuCisg
ICAgLy8KKyAgICAvLyAtIENvbWJpbmF0aW9uIG9mIHVud2luZCBhbmQgbm9uLXVud2luZCBleGNl
cHRpb24gaGFuZGxlcnMgaW5zaWRlIG9uZSBwYXRjaHBvaW50LiBBIEdldEJ5SWQgbWF5CisgICAg
Ly8gICBuZWVkIGJvdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBzZXJ2ZXMgYXMgYW4gdW53
aW5kIHRhcmdldCBhbmQgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdAorICAgIC8vICAgaXMgYnJh
bmNoZWQgdG8gZGlyZWN0bHkgZm9yIG9wZXJhdGlvbiBjYWxscyBlbWl0dGVkIGluc2lkZSB0aGUg
cGF0Y2hwb2ludC4gSW4gdGhhdCBjYXNlLAorICAgIC8vICAgeW91J2xsIGNhbGwgYm90aCBzY2hl
ZHVsZUV4aXRDcmVhdGlvbigpIGFuZCBzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCgpIG9u
IHRoZSBzYW1lCisgICAgLy8gICBoYW5kbGUuCisKKyAgICAvLyBTY2hlZHVsZXMgdGhlIGNyZWF0
aW9uIG9mIGFuIE9TUiBleGl0IGp1bXAgZGVzdGluYXRpb24uIFlvdSBkb24ndCBrbm93IHdoZW4g
dGhpcyB3aWxsIGJlCisgICAgLy8gY3JlYXRlZCwgYnV0IGl0IHdpbGwgaGFwcGVuIGJlZm9yZSBs
aW5raW5nLiBZb3UgY2FuIGxpbmsganVtcHMgdG8gaXQgZHVyaW5nIGxpbmsgdGltZS4gVGhhdCdz
CisgICAgLy8gd2h5IHRoaXMgcmV0dXJucyBhbiBPU1JFeGl0SGFuZGxlLiBUaGF0IHdpbGwgY29u
dGFpbiB0aGUganVtcCBkZXN0aW5hdGlvbiAoaGFuZGxlLT5sYWJlbCkgYXQKKyAgICAvLyBsaW5r
IHRpbWUuCisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IHNjaGVkdWxlRXhpdENyZWF0aW9uKGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKTsKKworICAgIC8vIFNjaGVkdWxlcyB0
aGUgY3JlYXRpb24gb2YgYW4gT1NSIGV4aXQganVtcCBkZXN0aW5hdGlvbiwgYW5kIGVuc3VyZXMg
dGhhdCBpdCBnZXRzIGFzc29jaWF0ZWQKKyAgICAvLyB3aXRoIHRoZSBoYW5kbGVyIGZvciBzb21l
IGNhbGxzaXRlIGluZGV4LgorICAgIHZvaWQgc2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQo
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIENhbGxTaXRlSW5kZXgpOworCitw
cml2YXRlOgorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoCisgICAgICAgIFN0YXRlJiwg
T1NSRXhpdERlc2NyaXB0b3IqLCBOb2RlT3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IEhh
bmRsZXJJbmZvJik7CisKKyAgICBTdGF0ZSYgbV9zdGF0ZTsKKyAgICBPU1JFeGl0RGVzY3JpcHRv
ciogbV9kZXNjcmlwdG9yOworICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47CisgICAgdW5zaWduZWQg
bV9vZmZzZXQ7CisgICAgSGFuZGxlckluZm8gbV9oYW5kbGVyOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0Iz
CisKKyNlbmRpZiAvLyBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268439</attachid>
            <date>2016-01-06 20:08:49 -0800</date>
            <delta_ts>2016-01-06 20:28:27 -0800</delta_ts>
            <desc>it just might work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35812</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NDY2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAyMyw2ICsxMDIzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRM
RFdBUkZSZWdpc3Rlci5jcHAKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAogICAgICAg
ICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCisgICAgICAgIGZ0bC9GVExFeGNl
cHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwCiAgICAgICAg
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuY3BwCkBAIC0xMDQ5LDYgKzEwNTAsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQp
CiAgICAgICAgIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMT3BlcmF0
aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAKKyAgICAgICAgZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNvdmVyeU9wY29kZS5j
cHAKICAgICAgICAgZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAogICAgICAgICBmdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDggQEAKIAkJMEY5
RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8q
IEZUTFN0YWNrTWFwcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTIx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi87IH07CiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKKwkJMEY5RDRDMEMxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0
LmNwcCAqLzsgfTsKKwkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRh
cmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oICovOyB9OwogCQkw
RjlFMzI2MzFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9
OwpAQCAtMjY1MCw2ICsyNjUyLDggQEAKIAkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZU
TFN0YWNrTWFwcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTdGFja01h
cHMuaDsgcGF0aCA9IGZ0bC9GVExTdGFja01hcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDM2OTIxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbGVhblVwUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NsZWFuVXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xlYW5VcFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHQ2xlYW5VcFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQ0QzBB
MUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDsgcGF0aCA9IGZ0
bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRhcmdldC5oOyBwYXRoID0gZnRs
L0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NTQ0LDYgKzQ1NDgsOCBAQAogCQkJCTBGOUM1RTVEMThFMzVG
NUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8sCiAJCQkJNzlERjY2QUUxQkYyNkE1
NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcCAqLywKIAkJCQk3OURG
NjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCAqLywK
KwkJCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCAq
LywKKwkJCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0Lmgg
Ki8sCiAJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAg
Ki8sCiAJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oICov
LAogCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVy
YW5kLmNwcCAqLywKQEAgLTc4MjcsNiArNzgzMyw3IEBACiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAw
RUUwODQwIC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIzMUJE
QTA4RUYwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5
RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLApAQCAtOTE3Niw2ICs5MTgzLDcgQEAKIAkJCQkwRjE5MENBQzE4
OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNEOTg0
IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2
NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExCM091dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuaAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMjEgKzQxMCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpPb3BzLCBvcmlnaW4oKSk7IH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBzcGVjdWxhdGUoTFZhbHVlIHZh
bHVlLCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgQjM6OkNoZWNrVmFsdWUqIGNoZWNrID0gc3BlY3Vs
YXRlKHZhbHVlLCBhcmd1bWVudHMpOwotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKGZ1bmN0
b3IpOwotICAgIH0KLQotICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGUoTFZhbHVlIHZhbHVl
LCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAg
QjM6OkNoZWNrVmFsdWUqIGNoZWNrID0gc3BlY3VsYXRlKHZhbHVlKTsKLSAgICAgICAgZm9yIChM
VmFsdWUgdmFsdWUgOiBhcmd1bWVudHMpCi0gICAgICAgICAgICBjaGVjay0+YXBwZW5kKEIzOjpD
b25zdHJhaW5lZFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBjaGVjazsKLSAgICB9Ci0K
ICAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6
OkNoZWNrLCBvcmlnaW4oKSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25UYXJnZXQu
aCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiRlRM
U3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitFeGNlcHRpb25U
YXJnZXQ6On5FeGNlcHRpb25UYXJnZXQoKQoreworfQorCitDb2RlTG9jYXRpb25MYWJlbCBFeGNl
cHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKG1f
aXNEZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigq
bV9kZWZhdWx0SGFuZGxlcik7CisgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2hh
bmRsZS0+bGFiZWwpOworfQorCitFeGNlcHRpb25UYXJnZXQ6OkV4Y2VwdGlvblRhcmdldCgKKyAg
ICBib29sIGlzRGVmYXVsdEhhbmRsZXIsIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBkZWZhdWx0
SGFuZGxlciwgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSkKKyAgICA6IG1faXNEZWZhdWx0
SGFuZGxlcihpc0RlZmF1bHRIYW5kbGVyKQorICAgICwgbV9kZWZhdWx0SGFuZGxlcihkZWZhdWx0
SGFuZGxlcikKKyAgICAsIG1faGFuZGxlKGhhbmRsZSkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4Y2VwdGlvblRhcmdl
dF9oCisjZGVmaW5lIEZUTEV4Y2VwdGlvblRhcmdldF9oCisKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdEhhbmRsZS5oIgorI2luY2x1ZGUgIlRo
cmVhZFNhZmVSZWZDb3VudGVkLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
Kworc3RydWN0IFN0YXRlOworCitjbGFzcyBFeGNlcHRpb25UYXJnZXQgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8RXhjZXB0aW9uVGFyZ2V0PiB7CitwdWJsaWM6CisgICAgfkV4Y2VwdGlv
blRhcmV0KCk7CisKKyAgICAvLyBJdCdzIE9LIHRvIGNhbGwgdGhpcyBkdXJpbmcgbGlua2luZywg
YnV0IG5vdCBhbnkgc29vbmVyLgorICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKExpbmtCdWZm
ZXImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU7CisKKyAgICBFeGNlcHRpb25UYXJnZXQoYm9vbCBpc0RlZmF1bHRIYW5kbGVyLCBC
b3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4sIFJlZlB0cjxPU1JFeGl0SGFuZGxlPik7CisgICAgCisg
ICAgYm9vbCBtX2lzRGVmYXVsdEhhbmRsZXI7CisgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+
IG1fZGVmYXVsdEhhbmRsZXI7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IG1faGFuZGxlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmIEZUTF9VU0VTX0IzCisKKyNlbmRpZiAvLyBGVExFeGNlcHRpb25UYXJnZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsOCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgeworICAgICAgICBTdGF0ZSogc3RhdGUgPSBt
X2Z0bFN0YXRlOworICAgICAgICAKICAgICAgICAgQ1N0cmluZyBuYW1lOwogICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBuYW1lID0gdG9DU3Ry
aW5nKApAQCAtMTQ5LDE2ICsxNTEsMTYgQEAgcHVibGljOgogICAgICAgICBtX2dyYXBoLmVuc3Vy
ZURvbWluYXRvcnMoKTsKIAogI2lmICFGVExfVVNFU19CMwotICAgICAgICBtX2Z0bFN0YXRlLm1v
ZHVsZSA9Ci0gICAgICAgICAgICBtb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dChuYW1lLmRh
dGEoKSwgbV9mdGxTdGF0ZS5jb250ZXh0KTsKKyAgICAgICAgc3RhdGUtPm1vZHVsZSA9CisgICAg
ICAgICAgICBtb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dChuYW1lLmRhdGEoKSwgc3RhdGUt
PmNvbnRleHQpOwogICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0ZS5mdW5jdGlvbiA9IGFkZEZ1
bmN0aW9uKAotICAgICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUsIG5hbWUuZGF0YSgpLCBmdW5j
dGlvblR5cGUobV9vdXQuaW50NjQpKTsKLSAgICAgICAgc2V0RnVuY3Rpb25DYWxsaW5nQ29udiht
X2Z0bFN0YXRlLmZ1bmN0aW9uLCBMTFZNQ0NhbGxDb252KTsKKyAgICAgICAgc3RhdGUtPmZ1bmN0
aW9uID0gYWRkRnVuY3Rpb24oCisgICAgICAgICAgICBzdGF0ZS0+bW9kdWxlLCBuYW1lLmRhdGEo
KSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7CisgICAgICAgIHNldEZ1bmN0aW9uQ2FsbGlu
Z0NvbnYoc3RhdGUtPmZ1bmN0aW9uLCBMTFZNQ0NhbGxDb252KTsKICAgICAgICAgaWYgKGlzWDg2
KCkgJiYgT3B0aW9uczo6bGx2bURpc2FsbG93QVZYKCkpIHsKICAgICAgICAgICAgIC8vIEFWWCBt
YWtlcyBWOC9yYXl0cmFjZSA4MCUgc2xvd2VyLiBJdCBtYWtlcyBLcmFrZW4vYXVkaW8tb3NjaWxs
YXRvciA0LjV4CiAgICAgICAgICAgICAvLyBzbG93ZXIuIEl0IHNob3VsZCBiZSBkaXNhYmxlZC4K
LSAgICAgICAgICAgIGFkZFRhcmdldERlcGVuZGVudEZ1bmN0aW9uQXR0cihtX2Z0bFN0YXRlLmZ1
bmN0aW9uLCAidGFyZ2V0LWZlYXR1cmVzIiwgIi1hdngiKTsKKyAgICAgICAgICAgIGFkZFRhcmdl
dERlcGVuZGVudEZ1bmN0aW9uQXR0cihzdGF0ZS0+ZnVuY3Rpb24sICJ0YXJnZXQtZmVhdHVyZXMi
LCAiLWF2eCIpOwogICAgICAgICB9CiAjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgICAgIApA
QCAtMTY4LDcgKzE3MCw3IEBAIHB1YmxpYzoKICNpZiBGVExfVVNFU19CMwogICAgICAgICBtX291
dC5pbml0aWFsaXplKG1faGVhcHMpOwogI2Vsc2UKLSAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZSht
X2Z0bFN0YXRlLm1vZHVsZSwgbV9mdGxTdGF0ZS5mdW5jdGlvbiwgbV9oZWFwcyk7CisgICAgICAg
IG1fb3V0LmluaXRpYWxpemUoc3RhdGUtPm1vZHVsZSwgc3RhdGUtPmZ1bmN0aW9uLCBtX2hlYXBz
KTsKICNlbmRpZgogCiAgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFs
bCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KQEAgLTIwMSw3ICsyMDMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHNpemVfdCBzaXplT2ZDYXB0dXJlZCA9IHNpemVvZihKU1ZhbHVlKSAqIG1fZ3Jh
cGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgICAgICBCMzo6U3RhY2tTbG90VmFsdWUqIGNhcHR1
cmVkQmFzZSA9IG1fb3V0LmxvY2tlZFN0YWNrU2xvdChzaXplT2ZDYXB0dXJlZCk7CiAgICAgICAg
IG1fY2FwdHVyZWQgPSBtX291dC5hZGQoY2FwdHVyZWRCYXNlLCBtX291dC5jb25zdEludFB0cihz
aXplT2ZDYXB0dXJlZCkpOwotICAgICAgICBtX2Z0bFN0YXRlLmNhcHR1cmVkVmFsdWUgPSBjYXB0
dXJlZEJhc2U7CisgICAgICAgIHN0YXRlLT5jYXB0dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlOwog
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgTFZhbHVlIGNhcHR1cmVkQWxsb2NhID0gbV9v
dXQuYWxsb2NhKGFycmF5VHlwZShtX291dC5pbnQ2NCwgbV9ncmFwaC5tX25leHRNYWNoaW5lTG9j
YWwpKTsKICAgICAgICAgCkBAIC0yMDksOSArMjExLDkgQEAgcHVibGljOgogICAgICAgICAgICAg
bV9vdXQucHRyVG9JbnQoY2FwdHVyZWRBbGxvY2EsIG1fb3V0LmludFB0ciksCiAgICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCAqIHNpemVvZihS
ZWdpc3RlcikpKTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21h
cElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICBzdGF0ZS0+Y2FwdHVyZWRTdGFja21hcElE
ID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9v
dXQudm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQo
bV9mdGxTdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpLAorICAgICAgICAgICAgbV9vdXQudm9pZFR5
cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQoc3RhdGUtPmNh
cHR1cmVkU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGNhcHR1cmVk
QWxsb2NhKTsKICNlbmRpZiAvLyBGVExfVVNFX0IzCiAKQEAgLTI4NiwxMCArMjg4LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgaWYgKGhhc1ZhcmFyZ3MpIHsKICAgICAgICAgICAgIExWYWx1ZSB2YXJh
cmdzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKICAgICAgICAgICAgICAgICBhcnJheVR5cGUo
bV9vdXQuaW50NjQsIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xvdHNOZWVkZWQoKSkpOwotICAg
ICAgICAgICAgbV9mdGxTdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgPSBtX3N0YWNr
bWFwSURzKys7CisgICAgICAgICAgICBzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElE
ID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAgICAgbV9vdXQuY2FsbCgKICAgICAgICAgICAg
ICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFj
a21hcElEKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YXRlLT52YXJhcmdz
U3BpbGxTbG90c1N0YWNrbWFwSUQpLAogICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywg
dmFyYXJnc1NwaWxsU2xvdHMpOwogICAgICAgICB9CiAKQEAgLTMwMCwxMCArMzAyLDEwIEBAIHB1
YmxpYzoKIAogICAgICAgICAgICAgTFZhbHVlIGV4Y2VwdGlvbkhhbmRsaW5nVm9sYXRpbGVSZWdp
c3RlcnNTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAogICAgICAgICAgICAgICAgIGFycmF5VHlw
ZShtX291dC5pbnQ2NCwgbWF4TnVtYmVyT2ZDYXRjaFNwaWxscykpOwotICAgICAgICAgICAgbV9m
dGxTdGF0ZS5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFw
SURzKys7CisgICAgICAgICAgICBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFj
a21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAgICAgbV9vdXQuY2FsbCgKICAgICAg
ICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuZXhjZXB0aW9uSGFuZGxp
bmdTcGlsbFNsb3RTdGFja21hcElEKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KHN0YXRlLT5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFwSUQpLAogICAgICAgICAg
ICAgICAgIG1fb3V0LmludDMyWmVybywgZXhjZXB0aW9uSGFuZGxpbmdWb2xhdGlsZVJlZ2lzdGVy
c1NwaWxsU2xvdHMpOwogICAgICAgICB9CiAjZW5kaWYgLy8gIUZUTF9VU0VTX0IzCkBAIC0zMzcs
MjEgKzMzOSwzNyBAQCBwdWJsaWM6CiAjaWYgRlRMX1VTRVNfQjMKICAgICAgICAgLy8gRklYTUUK
ICNlbHNlCi0gICAgICAgIG1fZnRsU3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0
YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIHN0YXRlLT5oYW5kbGVTdGFja092
ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgbV9v
dXQuY2FsbCgKICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJp
bnNpYygpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmhhbmRsZVN0
YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50NjQoc3RhdGUtPmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKSwKICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUoKSkpOwogI2VuZGlmCiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhtX2hhbmRsZUV4Y2VwdGlvbnMsIGNoZWNrQXJn
dW1lbnRzKTsKICNpZiBGVExfVVNFU19CMwotICAgICAgICAvLyBGSVhNRQorICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLT5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVs
KCk7CisgICAgICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1DYWxsZWVTYXZlc0J1
ZmZlcigpOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKCZ2bSksIEdQUkluZm86OmFyZ3VlbW50R1BSMCk7CisgICAgICAgICAgICAgICAgaml0
Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwor
ICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICAgICAg
ICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKICNlbHNlCi0gICAgICAgIG1fZnRsU3Rh
dGUuaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAg
c3RhdGUtPmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAg
ICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2tt
YXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmhhbmRsZUV4Y2VwdGlv
blN0YWNrbWFwSUQpLAorICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFw
SW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQoc3RhdGUtPmhhbmRsZUV4Y2VwdGlvblN0YWNr
bWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4
SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CiAjZW5kaWYKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKQEAgLTQxOCwxMSArNDM2LDExIEBAIHB1YmxpYzoKIAogI2lmICFGVExfVVNFU19CMwog
ICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigpKQotICAgICAgICAgICAgZHVtcE1vZHVs
ZShtX2Z0bFN0YXRlLm1vZHVsZSk7CisgICAgICAgICAgICBkdW1wTW9kdWxlKHN0YXRlLT5tb2R1
bGUpOwogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAg
ICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFmdGVyIGxvd2VyaW5nIik7CisgICAgICAgICAgICBz
dGF0ZS0+ZHVtcFN0YXRlKCJhZnRlciBsb3dlcmluZyIpOwogICAgICAgICBpZiAodmFsaWRhdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHZlcmlmeU1vZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7
CisgICAgICAgICAgICB2ZXJpZnlNb2R1bGUoc3RhdGUtPm1vZHVsZSk7CiAjZW5kaWYKICAgICB9
CiAKQEAgLTE2NTYsNyArMTY3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAKICNpZiBG
VExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNrVmFsdWUqIHJlc3VsdCA9CisgICAgICAg
ICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQu
c3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdo
dCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
QEAgLTE3MTIsNyArMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAg
IEIzOjpDaGVja1ZhbHVlKiByZXN1bHQgPQorICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0
ID0KICAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdo
dCkgOiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgYmxlc3NT
cGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2lu
KTsKICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CkBAIC0xODAzLDcgKzE4MjEsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICBlbHNlIHsKICNpZiBGVExfVVNFU19CMwotICAgICAgICAgICAgICAgIEIz
OjpDaGVja1ZhbHVlKiBzcGVjdWxhdGlvbiA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICAgICAgQ2hlY2tWYWx1ZSogc3BlY3VsYXRpb24gPSBtX291dC5zcGVj
dWxhdGVNdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
c3BlY3VsYXRpb24sIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjdWxhdGlvbjsKICNlbHNlIC8vIEZUTF9VU0VTX0Iz
CkBAIC0xODM3LDcgKzE4NTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0
ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwgb3Bwb3NpdGUoa2luZCkpOwogCiAjaWYgRlRM
X1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVj
dWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0g
bV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIGJsZXNzU3BlY3Vs
YXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAj
ZWxzZSAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0ID0g
bV9vdXQubXVsV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQpOwpAQCAtNDI5MSw3ICs0MzA5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUtpZHM7ICsr
aSkgewogICAgICAgICAgICAgZmxhZ3MgPSBtX291dC5iaXRBbmQoZmxhZ3MsIG1fb3V0LmxvYWQz
MihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKSk7CiAjaWYgRlRMX1VTRVNfQjMKLSAg
ICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNwZWN1bGF0ZUFk
ZCgKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGxlbmd0aENoZWNrID0gbV9vdXQuc3BlY3VsYXRl
QWRkKAogICAgICAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQubG9hZDMyKGtpZHNbaV0sIG1faGVh
cHMuSlNTdHJpbmdfbGVuZ3RoKSk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGxlbmd0
aENoZWNrLCBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAg
ICAgICAgICBsZW5ndGggPSBsZW5ndGhDaGVjazsKQEAgLTcyMDUsMjEgKzcyMjMsMzIgQEAgcHJp
dmF0ZToKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAg
ICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBleGNlcHRpb25zLgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjg2Ci0gICAgICAgIAogICAgICAg
ICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2
NCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChiYXNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwogCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNocG9pbnQpOworCiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0
YXRlOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKIAorICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMu
CisgICAgICAgICAgICAgICAgUmVmUHRyPEV4Y2VwdGlvblRhcmdldD4gZXhjZXB0aW9uVGFyZ2V0
ID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVh
dGlvbihwYXJhbXMpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3Ig
Y2FsbCBJQydzIGNyZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhh
dmUKKyAgICAgICAgICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNh
bGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAg
ICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25I
YW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRl
eCk7CisKICAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2Vu
ZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUt
PmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCisg
ICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjYWxsU2l0ZUluZGV4LAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CiAKQEAgLTcyMjksOCArNzI1OCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAogICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBNYWtlIHRoaXMgZG8gc29tZXRoaW5nLgorCiAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnM7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKQEAgLTcyNDYsNiArNzI3
NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4
Y2VwdGlvbnMsIGV4Y2VwdGlvblRhcmdldC0+bGFiZWwobGlua0J1ZmZlcikpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmZpbmFsaXplKGxpbmtCdWZmZXIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICB9KTsK
QEAgLTEwMTMyLDcgKzEwMTYxLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbik7CiAgICAgfQogCi0jaWYgIUZUTF9VU0VTX0IzCisjaWYgRlRMX1VTRVNf
QjMKKyAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBD
b2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CisgICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25I
YW5kbGVyOworICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENh
dGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdp
biwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgIGlmICghd2lsbENhdGNoRXhjZXB0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmRlZmF1bHRIYW5k
bGUobV9mdGxTdGF0ZSk7CisKKyAgICAgICAgYm9vbCBleGl0T0sgPSB0cnVlOworICAgICAgICBO
b2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hP
cmlnaW4sIGV4aXRPSyk7CisKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlw
dG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgpLCBudWxscHRyKTsKKworICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgdmFs
dWUtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgb3BD
YXRjaE9yaWdpbiwgbnVsbHB0cikpOworCisgICAgICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpjcmVhdGUoCisgICAgICAgICAgICBtX2Z0bFN0YXRlLCBleGl0RGVzY3JpcHRv
ciwgb3JpZ2luLCBvZmZzZXQsICpleGNlcHRpb25IYW5kbGVyKTsKKyAgICB9CisjZWxzZSAvLyBG
VExfVVNFU19CMwogICAgIHZvaWQgYXBwZW5kT1NSRXhpdEFyZ3VtZW50c0ZvclBhdGNocG9pbnRJ
ZldpbGxDYXRjaEV4Y2VwdGlvbihTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBFeGNl
cHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFyZ3VtZW50cykK
ICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKQEAgLTEwMTUzLDcgKzEw
MjAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVz
Y3JpcHRvciwgZXhpdERlc2NyaXB0b3JJbXBsLm1fY29kZU9yaWdpbiwgbm9WYWx1ZSgpLCBvZmZz
ZXRPZkV4aXRBcmd1bWVudHMpOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kVmVjdG9yKGZyZXNo
TGlzdCk7CiAgICAgfQotI2VuZGlmIC8vICFGVExfVVNFU19CMworI2VuZGlmIC8vIEZUTF9VU0VT
X0IzCiAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQog
ICAgIHsKQEAgLTEwMjQ1LDcgKzEwMjk0LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBGVExf
VVNFU19CMwotICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihCMzo6Q2hlY2tWYWx1ZSogdmFsdWUs
IEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUs
IE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQorICAg
IHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1ZhbHVlKiB2YWx1ZSwgRXhpdEtpbmQga2luZCwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmln
aW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpCiAgICAgewogICAgICAgICBPU1JF
eGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihs
b3dWYWx1ZSwgaGlnaFZhbHVlKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKworI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIK
KyNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitSZWY8UGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZT4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAorICAgIFN0YXRlJiBz
dGF0ZSwgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIE5vZGVPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBvZmZzZXQsCisgICAgY29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKHN0YXRlLCBkZXNj
cmlwdG9yLCBvcmlnaW4sIG9mZnNldCwgaGFuZGxlcikpOworfQorCitSZWZQdHI8UGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRs
ZShTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFzdGF0ZS5kZWZhdWx0RXhjZXB0aW9uSGFuZGxl
KSB7CisgICAgICAgIHN0YXRlLmRlZmF1bHRFeGNlcHRpb25IYW5kbGUgPSBhZG9wdFJlZigKKyAg
ICAgICAgICAgIG5ldyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKHN0YXRlLCBudWxscHRyLCBO
b2RlT3JpZ2luKCksIDAsIEhhbmRsZXJJbmZvKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRl
LmRlZmF1bHRFeGNlcHRpb25IYW5kbGU7Cit9CisKK1BhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6
On5QYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKCkKK3sKK30KKworUmVmUHRyPEV4Y2VwdGlvblRh
cmdldD4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0Q3JlYXRpb24oCisg
ICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKQoreworICAgIGlm
ICghbV9kZXNjcmlwdG9yKSB7CisgICAgICAgIC8vIE5PVEU6IFRoaXMgb2JqZWN0IGNvdWxkIGJl
IGEgc2luZ2xldG9uLgorICAgICAgICBib29sIGlzRGVmYXVsdEhhbmRsZXIgPSB0cnVlOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoCisgICAgICAgICAgICBuZXcgRXhjZXB0aW9uVGFyZ2V0KGlz
RGVmYXVsdEhhbmRsZXIsIG1fc3RhdGUtPmRlZmF1bHRFeGNlcHRpb25IYW5kbGUsIG51bGxwdHIp
KTsKKyAgICB9CisgICAgYm9vbCBpc0RlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFeGNlcHRpb25UYXJnZXQoaXNEZWZhdWx0SGFuZGxlciwgeyB9LCBjcmVh
dGVIYW5kbGUocGFyYW1zKSkpOworfQorCit2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6
OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKAorICAgIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIGlmICghbV9kZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRy
PE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGNyZWF0ZUhhbmRsZShwYXJhbXMpOworCisgICAgaGFu
ZGxlLT5leGl0Lm1faXNVbndpbmRIYW5kbGVyID0gdHJ1ZTsKKworICAgIEhhbmRsZXJJbmZvIGhh
bmRsZXIgPSBtX2hhbmRsZXI7CisgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICBbaGFu
ZGxlciwgY2FsbFNpdGVJbmRleF0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgIGppdC5h
ZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3SGFuZGxlciA9IGhhbmRsZXI7
CisgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQgPSBjYWxsU2l0ZUluZGV4LmJp
dHMoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5lbmQgPSBjYWxsU2l0ZUluZGV4
LmJpdHMoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIubmF0aXZlQ29kZSA9
IGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5ld0hhbmRsZXIpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKworUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSgKKyAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgb2Zmc2V0
LAorICAgIGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVyKQorICAgIDogbV9zdGF0ZShzdGF0ZSkK
KyAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQor
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCit7Cit9CisK
K1JlZlB0cjxPU1JFeGl0SGFuZGxlPiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGVI
YW5kbGUoCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKQor
eworICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICByZXR1cm4gbV9kZXNj
cmlwdG9yLT5lbWl0T1NSRXhpdExhdGVyKAorICAgICAgICBtX3N0YXRlLCBVbmNvdW50YWJsZSwg
bV9vcmlnaW4sIHBhcmFtcywgbV9vZmZzZXQsIGlzRXhjZXB0aW9uSGFuZGxlcik7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBG
VExfVVNFU19CMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9o
CisjZGVmaW5lIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGVfaAorCisjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKworI2luY2x1
ZGUgIkRGR05vZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJIYW5kbGVySW5mby5oIgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCMyB7CitjbGFzcyBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXM7Cit9IC8vIG5hbWVzcGFjZSBCMworCituYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhj
ZXB0aW9uVGFyZ2V0OworY2xhc3MgT1NSRXhpdEhhbmRsZTsKK2NsYXNzIFN0YXRlOworc3RydWN0
IE9TUkV4aXREZXNjcmlwdG9yOworCitjbGFzcyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGNyZWF0
ZSgKKyAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvciosIE5vZGVPcmlnaW4sIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgSGFuZGxlckluZm8mKTsKKworICAgIHN0YXRpYyBSZWZQdHI8UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZGVmYXVsdEhhbmRsZShTdGF0ZSYpOworICAgIAorICAg
IH5QYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKCk7CisKKyAgICAvLyBOb3RlIHRoYXQgeW91IGNh
biB1c2UgdGhpcyBoYW5kbGUgdG8gc2NoZWR1bGUgYW55IG51bWJlciBvZiBleGl0cy4gVGhpcyBj
YXBhYmlsaXR5IGlzIGhlcmUgZm9yCisgICAgLy8gdHdvIHJlYXNvbnM6CisgICAgLy8gCisgICAg
Ly8gLSBCMyBjb2RlIGR1cGxpY2F0aW9uLiBCMyBjb3VsZCB0YWtlIGEgcGF0Y2hwb2ludCBhbmQg
dHVybiBpdCBpbnRvIG11bHRpcGxlIHBhdGNocG9pbnRzIGlmIGl0CisgICAgLy8gICBkdXBsaWNh
dGVzIGNvZGUuIER1cGxpY2F0aW5nIGNvZGUgaXMgbGVnYWwgc2luY2UgeW91IGNhbiBkbyBpdCB3
aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvcgorICAgIC8vICAgb2YgdGhlIHByb2dyYW0uIE9u
ZSBleGFtcGxlIGlzIHRhaWwgZHVwbGljYXRpb24uIEFub3RoZXIgaXMganVtcCB0aHJlYWRpbmcu
IFlldCBhbm90aGVyIGlzCisgICAgLy8gICBwYXRoIHNwZWNpYWxpemF0aW9uLiBZb3Ugd2lsbCBo
YXZlIG9uZSBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHBlciBwYXRjaHBvaW50IHlvdSBjcmVh
dGUKKyAgICAvLyAgIGR1cmluZyBERkctPkIzIGxvd2VyaW5nLCBhbmQgdGhhdCBwYXRjaHBvaW50
IHdpbGwgaGF2ZSBhIGdlbmVyYXRvciB0aGF0IGNhbGxzCisgICAgLy8gICBoYW5kbGUtPnNjaGVk
dWxlQmxhaCgpLiBUaGF0IGdlbmVyYXRvciB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBp
ZiB5b3VyIHBhdGNocG9pbnQgZ290CisgICAgLy8gICBkdXBsaWNhdGVkLgorICAgIC8vCisgICAg
Ly8gLSBDb21iaW5hdGlvbiBvZiB1bndpbmQgYW5kIG5vbi11bndpbmQgZXhjZXB0aW9uIGhhbmRs
ZXJzIGluc2lkZSBvbmUgcGF0Y2hwb2ludC4gQSBHZXRCeUlkIG1heQorICAgIC8vICAgbmVlZCBi
b3RoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQgc2VydmVzIGFzIGFuIHVud2luZCB0YXJnZXQg
YW5kIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQKKyAgICAvLyAgIGlzIGJyYW5jaGVkIHRvIGRp
cmVjdGx5IGZvciBvcGVyYXRpb24gY2FsbHMgZW1pdHRlZCBpbnNpZGUgdGhlIHBhdGNocG9pbnQu
IEluIHRoYXQgY2FzZSwKKyAgICAvLyAgIHlvdSdsbCBjYWxsIGJvdGggc2NoZWR1bGVFeGl0Q3Jl
YXRpb24oKSBhbmQgc2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQoKSBvbiB0aGUgc2FtZQor
ICAgIC8vICAgaGFuZGxlLgorCisgICAgLy8gU2NoZWR1bGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBP
U1IgZXhpdCBqdW1wIGRlc3RpbmF0aW9uLiBZb3UgZG9uJ3Qga25vdyB3aGVuIHRoaXMgd2lsbCBi
ZQorICAgIC8vIGNyZWF0ZWQsIGJ1dCBpdCB3aWxsIGhhcHBlbiBiZWZvcmUgbGlua2luZy4gWW91
IGNhbiBsaW5rIGp1bXBzIHRvIGl0IGR1cmluZyBsaW5rIHRpbWUuIFRoYXQncworICAgIC8vIHdo
eSB0aGlzIHJldHVybnMgYW4gRXhjZXB0aW9uVGFyZ2V0LiBUaGF0IHdpbGwgY29udGFpbiB0aGUg
anVtcCBkZXN0aW5hdGlvbiAodGFyZ2V0LT5sYWJlbCgpKQorICAgIC8vIGF0IGxpbmsgdGltZS4K
KyAgICBSZWZQdHI8RXhjZXB0aW9uVGFyZ2V0PiBzY2hlZHVsZUV4aXRDcmVhdGlvbihjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJik7CisKKyAgICAvLyBTY2hlZHVsZXMgdGhlIGNy
ZWF0aW9uIG9mIGFuIE9TUiBleGl0IGp1bXAgZGVzdGluYXRpb24sIGFuZCBlbnN1cmVzIHRoYXQg
aXQgZ2V0cyBhc3NvY2lhdGVkCisgICAgLy8gd2l0aCB0aGUgaGFuZGxlciBmb3Igc29tZSBjYWxs
c2l0ZSBpbmRleC4KKyAgICB2b2lkIHNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0
ZToKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKAorICAgICAgICBTdGF0ZSYsIE9TUkV4
aXREZXNjcmlwdG9yKiwgTm9kZU9yaWdpbiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBIYW5kbGVy
SW5mbyYpOworCisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGNyZWF0ZUhhbmRsZShjb25zdCBC
Mzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJik7CisKKyAgICBTdGF0ZSYgbV9zdGF0ZTsKKyAg
ICBPU1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOworICAgIE5vZGVPcmlnaW4gbV9vcmln
aW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgSGFuZGxlckluZm8gbV9oYW5kbGVyOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmIEZUTF9VU0VTX0IzCisKKyNlbmRpZiAvLyBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24g
MTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIGNsYXNzIFN0YWNrU2xvdFZhbHVlOwogCiBuYW1lc3Bh
Y2UgRlRMIHsKIAorY2xhc3MgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTsKKwogaW5saW5lIGJv
b2wgdmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIERGRzo6dmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZChERkc6OkZUTE1vZGUpOwpAQCAtODIsOCArODQsMTAgQEAgcHVi
bGljOgogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZp
bmFsaXplciogZmluYWxpemVyOwogI2lmIEZUTF9VU0VTX0IzCi0gICAgQjM6OlBhdGNocG9pbnRW
YWx1ZSogaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblZhbHVlIHsgbnVsbHB0ciB9OwotICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIGhhbmRsZUV4Y2VwdGlvblZhbHVlIHsgbnVsbHB0ciB9Owor
ICAgIC8vIFRvcC1sZXZlbCBleGNlcHRpb24gaGFuZGxlci4gSnVtcCBoZXJlIGlmIHlvdSBrbm93
IHRoYXQgeW91IGhhdmUgdG8gZ2VuZXJpY1Vud2luZCgpIGFuZCB0aGVyZQorICAgIC8vIGFyZSBu
byBhcHBsaWNhYmxlIGNhdGNoIGJsb2NrcyBhbnl3aGVyZSBpbiB0aGUgR3JhcGguCisgICAgUmVm
UHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGRlZmF1bHRFeGNlcHRpb25IYW5kbGU7Cisg
ICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXI7CiAgICAgQjM6OlN0
YWNrU2xvdFZhbHVlKiBjYXB0dXJlZFZhbHVlIHsgbnVsbHB0ciB9OwogI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKICAgICB1bnNpZ25lZCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJ
RCB7IFVJTlRfTUFYIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268441</attachid>
            <date>2016-01-06 20:28:27 -0800</date>
            <delta_ts>2016-01-06 21:55:04 -0800</delta_ts>
            <desc>even nicer</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36986</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NDY2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAyMyw2ICsxMDIzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRM
RFdBUkZSZWdpc3Rlci5jcHAKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAogICAgICAg
ICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCisgICAgICAgIGZ0bC9GVExFeGNl
cHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwCiAgICAgICAg
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuY3BwCkBAIC0xMDQ5LDYgKzEwNTAsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQp
CiAgICAgICAgIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMT3BlcmF0
aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAKKyAgICAgICAgZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNvdmVyeU9wY29kZS5j
cHAKICAgICAgICAgZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAogICAgICAgICBmdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDggQEAKIAkJMEY5
RDMzOUIxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8q
IEZUTFN0YWNrTWFwcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTIx
QUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi87IH07CiAJCTBGOUQzNjk1
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBE
RkdDbGVhblVwUGhhc2UuaCAqLzsgfTsKKwkJMEY5RDRDMEMxQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0
LmNwcCAqLzsgfTsKKwkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRh
cmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oICovOyB9OwogCQkw
RjlFMzI2MzFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMy
NjExQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCAq
LzsgfTsKIAkJMEY5RTMyNjQxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlFMzI2MjFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovOyB9
OwpAQCAtMjY1MCw2ICsyNjUyLDggQEAKIAkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZU
TFN0YWNrTWFwcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTdGFja01h
cHMuaDsgcGF0aCA9IGZ0bC9GVExTdGFja01hcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5RDM2OTIxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbGVhblVwUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR0NsZWFuVXBQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOUQzNjkzMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xlYW5VcFBoYXNlLmg7IHBhdGggPSBkZmcv
REZHQ2xlYW5VcFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQ0QzBB
MUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDsgcGF0aCA9IGZ0
bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvblRhcmdldC5oOyBwYXRoID0gZnRs
L0ZUTEV4Y2VwdGlvblRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlF
MzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAx
RUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NTQ0LDYgKzQ1NDgsOCBAQAogCQkJCTBGOUM1RTVEMThFMzVG
NUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8sCiAJCQkJNzlERjY2QUUxQkYyNkE1
NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcCAqLywKIAkJCQk3OURG
NjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCAqLywK
KwkJCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCAq
LywKKwkJCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0Lmgg
Ki8sCiAJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAg
Ki8sCiAJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oICov
LAogCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVy
YW5kLmNwcCAqLywKQEAgLTc4MjcsNiArNzgzMyw3IEBACiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAw
RUUwODQwIC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIzMUJE
QTA4RUYwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5
RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLApAQCAtOTE3Niw2ICs5MTgzLDcgQEAKIAkJCQkwRjE5MENBQzE4
OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3Jp
Z2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5RDRDMEMxQzNFMUMxMTAwNkNEOTg0
IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2
NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2Zp
bGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExCM091dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuaAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMjEgKzQxMCw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpPb3BzLCBvcmlnaW4oKSk7IH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBzcGVjdWxhdGUoTFZhbHVlIHZh
bHVlLCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgQjM6OkNoZWNrVmFsdWUqIGNoZWNrID0gc3BlY3Vs
YXRlKHZhbHVlLCBhcmd1bWVudHMpOwotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKGZ1bmN0
b3IpOwotICAgIH0KLQotICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGUoTFZhbHVlIHZhbHVl
LCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAg
QjM6OkNoZWNrVmFsdWUqIGNoZWNrID0gc3BlY3VsYXRlKHZhbHVlKTsKLSAgICAgICAgZm9yIChM
VmFsdWUgdmFsdWUgOiBhcmd1bWVudHMpCi0gICAgICAgICAgICBjaGVjay0+YXBwZW5kKEIzOjpD
b25zdHJhaW5lZFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBjaGVjazsKLSAgICB9Ci0K
ICAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6
OkNoZWNrLCBvcmlnaW4oKSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25UYXJnZXQu
aCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiRlRM
U3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitFeGNlcHRpb25U
YXJnZXQ6On5FeGNlcHRpb25UYXJnZXQoKQoreworfQorCitDb2RlTG9jYXRpb25MYWJlbCBFeGNl
cHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKG1f
aXNEZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZigq
bV9kZWZhdWx0SGFuZGxlcik7CisgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2hh
bmRsZS0+bGFiZWwpOworfQorCitCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gRXhjZXB0aW9u
VGFyZ2V0OjpqdW1wcyhDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBCb3g8Q0NhbGxIZWxwZXJz
OjpKdW1wTGlzdD4gcmVzdWx0ID0gQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+OjpjcmVhdGUo
KTsKKyAgICBpZiAobV9pc0RlZmF1bHRIYW5kbGVyKSB7CisgICAgICAgIEJveDxDQ2FsbEhlbHBl
cnM6OkxhYmVsPiBkZWZhdWx0SGFuZGxlciA9IG1fZGVmYXVsdEhhbmRsZXI7CisgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoKmRlZmF1bHRIYW5kbGVyKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gbV9oYW5kbGU7CisgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgfSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0V4Y2VwdGlvblRhcmdldDo6RXhjZXB0aW9uVGFyZ2V0
KAorICAgIGJvb2wgaXNEZWZhdWx0SGFuZGxlciwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGRl
ZmF1bHRIYW5kbGVyLCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlKQorICAgIDogbV9pc0Rl
ZmF1bHRIYW5kbGVyKGlzRGVmYXVsdEhhbmRsZXIpCisgICAgLCBtX2RlZmF1bHRIYW5kbGVyKGRl
ZmF1bHRIYW5kbGVyKQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQoreworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNf
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRh
cmdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNl
cHRpb25UYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhjZXB0aW9u
VGFyZ2V0X2gKKyNkZWZpbmUgRlRMRXhjZXB0aW9uVGFyZ2V0X2gKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgiCisjaW5jbHVk
ZSAiVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitzdHJ1Y3QgU3RhdGU7CisKK2NsYXNzIEV4Y2VwdGlvblRhcmdldCA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxFeGNlcHRpb25UYXJnZXQ+IHsKK3B1YmxpYzoKKyAgICB+RXhj
ZXB0aW9uVGFyZXQoKTsKKworICAgIC8vIEl0J3MgT0sgdG8gY2FsbCB0aGlzIGR1cmluZyBsaW5r
aW5nLCBidXQgbm90IGFueSBzb29uZXIuCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwoTGlu
a0J1ZmZlciYpOworCisgICAgLy8gT3IsIHlvdSBjYW4gZ2V0IGEgSnVtcExpc3QgYXQgYW55IHRp
bWUuIEFueXRoaW5nIHlvdSBhZGQgdG8gdGhpcyBKdW1wTGlzdCB3aWxsIGJlIGxpbmtlZCB0bwor
ICAgIC8vIHRoZSB0YXJnZXQncyBsYWJlbC4KKyAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlz
dD4ganVtcHMoQ0NhbGxIZWxwZXJzJik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOworCisgICAgRXhjZXB0aW9uVGFyZ2V0KGJvb2wg
aXNEZWZhdWx0SGFuZGxlciwgQm94PENDYWxsSGVscGVyczo6TGFiZWw+LCBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4pOworICAgIAorICAgIGJvb2wgbV9pc0RlZmF1bHRIYW5kbGVyOworICAgIEJveDxD
Q2FsbEhlbHBlcnM6OkxhYmVsPiBtX2RlZmF1bHRIYW5kbGVyOworICAgIFJlZlB0cjxPU1JFeGl0
SGFuZGxlPiBtX2hhbmRsZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjZW5kaWYgLy8gRlRMRXhj
ZXB0aW9uVGFyZ2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgs
NiArMTM4LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKKyAgICAg
ICAgU3RhdGUqIHN0YXRlID0gbV9mdGxTdGF0ZTsKKyAgICAgICAgCiAgICAgICAgIENTdHJpbmcg
bmFtZTsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAgICAg
ICAgICAgbmFtZSA9IHRvQ1N0cmluZygKQEAgLTE0OSwxNiArMTUxLDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAKICNpZiAhRlRMX1VTRVNfQjMKLSAg
ICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQotICAgICAgICAgICAgbW9kdWxlQ3JlYXRlV2l0aE5h
bWVJbkNvbnRleHQobmFtZS5kYXRhKCksIG1fZnRsU3RhdGUuY29udGV4dCk7CisgICAgICAgIHN0
YXRlLT5tb2R1bGUgPQorICAgICAgICAgICAgbW9kdWxlQ3JlYXRlV2l0aE5hbWVJbkNvbnRleHQo
bmFtZS5kYXRhKCksIHN0YXRlLT5jb250ZXh0KTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3Rh
dGUuZnVuY3Rpb24gPSBhZGRGdW5jdGlvbigKLSAgICAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxl
LCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7Ci0gICAgICAgIHNldEZ1
bmN0aW9uQ2FsbGluZ0NvbnYobV9mdGxTdGF0ZS5mdW5jdGlvbiwgTExWTUNDYWxsQ29udik7Cisg
ICAgICAgIHN0YXRlLT5mdW5jdGlvbiA9IGFkZEZ1bmN0aW9uKAorICAgICAgICAgICAgc3RhdGUt
Pm1vZHVsZSwgbmFtZS5kYXRhKCksIGZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCkpOworICAgICAg
ICBzZXRGdW5jdGlvbkNhbGxpbmdDb252KHN0YXRlLT5mdW5jdGlvbiwgTExWTUNDYWxsQ29udik7
CiAgICAgICAgIGlmIChpc1g4NigpICYmIE9wdGlvbnM6Omxsdm1EaXNhbGxvd0FWWCgpKSB7CiAg
ICAgICAgICAgICAvLyBBVlggbWFrZXMgVjgvcmF5dHJhY2UgODAlIHNsb3dlci4gSXQgbWFrZXMg
S3Jha2VuL2F1ZGlvLW9zY2lsbGF0b3IgNC41eAogICAgICAgICAgICAgLy8gc2xvd2VyLiBJdCBz
aG91bGQgYmUgZGlzYWJsZWQuCi0gICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlv
bkF0dHIobV9mdGxTdGF0ZS5mdW5jdGlvbiwgInRhcmdldC1mZWF0dXJlcyIsICItYXZ4Iik7Cisg
ICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIoc3RhdGUtPmZ1bmN0aW9u
LCAidGFyZ2V0LWZlYXR1cmVzIiwgIi1hdngiKTsKICAgICAgICAgfQogI2VuZGlmIC8vICFGVExf
VVNFU19CMwogICAgICAgICAKQEAgLTE2OCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAjaWYgRlRMX1VT
RVNfQjMKICAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKICNlbHNlCi0gICAgICAg
IG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5tb2R1bGUsIG1fZnRsU3RhdGUuZnVuY3Rpb24s
IG1faGVhcHMpOworICAgICAgICBtX291dC5pbml0aWFsaXplKHN0YXRlLT5tb2R1bGUsIHN0YXRl
LT5mdW5jdGlvbiwgbV9oZWFwcyk7CiAjZW5kaWYKIAogICAgICAgICAvLyBXZSB1c2UgcHJvbG9n
dWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCkBAIC0yMDEs
NyArMjAzLDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZU9mQ2FwdHVyZWQgPSBzaXpl
b2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICAgICAgQjM6OlN0
YWNrU2xvdFZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6ZU9m
Q2FwdHVyZWQpOwogICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFzZSwg
bV9vdXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKLSAgICAgICAgbV9mdGxTdGF0ZS5j
YXB0dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlOworICAgICAgICBzdGF0ZS0+Y2FwdHVyZWRWYWx1
ZSA9IGNhcHR1cmVkQmFzZTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIExWYWx1ZSBj
YXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9vdXQuaW50NjQsIG1fZ3Jh
cGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAgICAgICAgIApAQCAtMjA5LDkgKzIxMSw5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnB0clRvSW50KGNhcHR1cmVkQWxsb2NhLCBtX291dC5p
bnRQdHIpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5tX25leHRNYWNo
aW5lTG9jYWwgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0
YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgc3RhdGUt
PmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgbV9vdXQuY2Fs
bCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygp
LCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKKyAgICAg
ICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5j
b25zdEludDY0KHN0YXRlLT5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQu
aW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAjZW5kaWYgLy8gRlRMX1VTRV9CMwogCkBAIC0y
ODYsMTAgKzI4OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CiAgICAg
ICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCiAgICAgICAg
ICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGlsbFNs
b3RzTmVlZGVkKCkpKTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xvdHNT
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPnZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgICAgIG1fb3V0
LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50
cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLnZh
cmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKICAgICAgICAgICAgICAg
ICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKICAgICAgICAgfQogCkBAIC0z
MDAsMTAgKzMwMiwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIExWYWx1ZSBleGNlcHRpb25I
YW5kbGluZ1ZvbGF0aWxlUmVnaXN0ZXJzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKICAgICAg
ICAgICAgICAgICBhcnJheVR5cGUobV9vdXQuaW50NjQsIG1heE51bWJlck9mQ2F0Y2hTcGlsbHMp
KTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFj
a21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPmV4Y2VwdGlvbkhh
bmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgICAg
IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNr
bWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0
YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCksCisgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFj
a21hcElEKSwKICAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGV4Y2VwdGlvbkhhbmRs
aW5nVm9sYXRpbGVSZWdpc3RlcnNTcGlsbFNsb3RzKTsKICAgICAgICAgfQogI2VuZGlmIC8vICFG
VExfVVNFU19CMwpAQCAtMzM3LDIxICszMzksMzcgQEAgcHVibGljOgogI2lmIEZUTF9VU0VTX0Iz
CiAgICAgICAgIC8vIEZJWE1FCiAjZWxzZQotICAgICAgICBtX2Z0bFN0YXRlLmhhbmRsZVN0YWNr
T3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICBz
dGF0ZS0+aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0YWNrbWFw
SURzKys7CiAgICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC52b2lkVHlwZSwg
bV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQo
bV9mdGxTdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCksCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDY0KHN0YXRlLT5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0
aW9uU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1i
bGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKICNlbmRpZgogICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVF
eGNlcHRpb25zLCBjaGVja0FyZ3VtZW50cyk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgLy8g
RklYTUUKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hw
b2ludChWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAg
ICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZXhjZXB0aW9u
SGFuZGxlciA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmdm0pLCBHUFJJbmZvOjphcmd1ZW1udEdQUjApOwor
ICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBj
YWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigpOworCisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25I
YW5kbGVyKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CiAjZWxz
ZQotICAgICAgICBtX2Z0bFN0YXRlLmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0YWNr
bWFwSURzKys7CisgICAgICAgIHN0YXRlLT5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEID0gbV9z
dGFja21hcElEcysrOwogICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQudm9p
ZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxT
dGF0ZS5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKKyAgICAgICAgICAgIG1fb3V0LnZvaWRU
eXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KHN0YXRlLT5o
YW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
TWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogI2VuZGlmCiAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CkBAIC00MTgsMTEgKzQzNiwxMSBAQCBwdWJsaWM6CiAK
ICNpZiAhRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKE9wdGlvbnM6OmR1bXBMTFZNSVIoKSkKLSAg
ICAgICAgICAgIGR1bXBNb2R1bGUobV9mdGxTdGF0ZS5tb2R1bGUpOworICAgICAgICAgICAgZHVt
cE1vZHVsZShzdGF0ZS0+bW9kdWxlKTsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRlciBsb3dlcmlu
ZyIpOworICAgICAgICAgICAgc3RhdGUtPmR1bXBTdGF0ZSgiYWZ0ZXIgbG93ZXJpbmciKTsKICAg
ICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICB2ZXJpZnlNb2R1bGUo
bV9mdGxTdGF0ZS5tb2R1bGUpOworICAgICAgICAgICAgdmVyaWZ5TW9kdWxlKHN0YXRlLT5tb2R1
bGUpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xNjU2LDcgKzE2NzQsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVl
KiByZXN1bHQgPQorICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KICAgICAgICAgICAg
ICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVj
dWxhdGVBZGQobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1
bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CkBAIC0xNzEyLDcgKzE3MzAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwogI2lmIEZUTF9V
U0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogcmVzdWx0ID0KKyAgICAgICAgICAg
IENoZWNrVmFsdWUqIHJlc3VsdCA9CiAgICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVj
dWxhdGVTdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOwpAQCAt
MTgwMyw3ICsxODIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291
dC5tdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgZWxzZSB7CiAjaWYgRlRMX1VTRVNfQjMK
LSAgICAgICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRpb24gPSBtX291dC5zcGVj
dWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIHNwZWN1
bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY3VsYXRpb247CiAj
ZWxzZSAvLyBGVExfVVNFU19CMwpAQCAtMTgzNyw3ICsxODU1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9wcG9zaXRl
KGtpbmQpKTsKIAogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSog
cmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIENo
ZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vcmlnaW4pOwogI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIExWYWx1
ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzY0KGxlZnQsIHJpZ2h0KTsK
QEAgLTQyOTEsNyArNDMwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBudW1LaWRzOyArK2kpIHsKICAgICAgICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5k
KGZsYWdzLCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19mbGFncykpOwog
I2lmIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogbGVuZ3RoQ2hlY2sg
PSBtX291dC5zcGVjdWxhdGVBZGQoCisgICAgICAgICAgICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVj
ayA9IG1fb3V0LnNwZWN1bGF0ZUFkZCgKICAgICAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0Lmxv
YWQzMihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwogICAgICAgICAgICAgYmxl
c3NTcGVjdWxhdGlvbihsZW5ndGhDaGVjaywgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoQ2hlY2s7CkBAIC03MjA1
LDIxICs3MjIzLDMyIEBAIHByaXZhdGU6CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKIAogI2lm
IEZUTF9VU0VTX0IzCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhjZXB0aW9ucy4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4
NgotICAgICAgICAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
b3V0LnBhdGNocG9pbnQoSW50NjQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYmFzZSwg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAorICAgICAgICBSZWZQdHI8UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKwogICAgICAgICBTdGF0
ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9y
KAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAKKyAgICAgICAgICAgICAgICBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0
Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpcmVjdCBleGl0IHRhcmdldCBm
b3Igb3BlcmF0aW9uIGNhbGxzLgorICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxl
LT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNyZWF0ZWQgYnkgdGhlIGdl
dEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBk
byBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3Nv
Y2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRl
eC4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9u
Rm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKICAgICAgICAgICAgICAgICBhdXRv
IGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAg
ICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAg
ICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUlu
ZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2Rl
QmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAogICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFy
YW1zWzFdLmdwcigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBd
LmdwcigpKSk7CiAKQEAgLTcyMjksMTUgKzcyNTgsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBzb21ldGhp
bmcuCisKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhj
ZXB0aW9uczsKIAogICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1
bXAoKS5saW5rKCZqaXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVy
cygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZXhjZXB0aW9ucywgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBwYXJhbXNbMF0uZ3By
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0
aW9uR2V0QnlJZE9wdGltaXplLCBwYXJhbXNbMF0uZ3ByKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8o
KSksIHBhcmFtc1sxXS5ncHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CkBAIC0xMDEzMiw3ICsxMDE2MCwyNyBA
QCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0K
IAotI2lmICFGVExfVVNFU19CMworI2lmIEZUTF9VU0VTX0IzCisgICAgUmVmUHRyPFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU+IHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhQYXRjaHBv
aW50VmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2lu
OworICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKKyAgICAgICAgYm9vbCB3
aWxsQ2F0Y2hFeGNlcHRpb24gPSBtX2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZy
YW1lKG1fb3JpZ2luLmZvckV4aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwor
ICAgICAgICBpZiAoIXdpbGxDYXRjaEV4Y2VwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlOjpkZWZhdWx0SGFuZGxlKG1fZnRsU3RhdGUpOworCisgICAg
ICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX29y
aWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0spOworCisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNj
cmlwdG9yKG5vVmFsdWUoKSwgbnVsbHB0cik7CisKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
dmFsdWUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgIHZhbHVlLT5hcHBlbmRDb2xkQW55cyhidWls
ZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9wQ2F0Y2hPcmlnaW4sIG51bGxwdHIpKTsK
KworICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAorICAg
ICAgICAgICAgbV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhj
ZXB0aW9uSGFuZGxlcik7CisgICAgfQorI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICB2b2lkIGFw
cGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3Rh
Y2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBl
LCB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3Jp
Z2luIG9wQ2F0Y2hPcmlnaW47CkBAIC0xMDE1Myw3ICsxMDIwMSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIGV4aXREZXNjcmlwdG9y
SW1wbC5tX2NvZGVPcmlnaW4sIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwogICAgIH0KLSNlbmRpZiAv
LyAhRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAgTEJhc2ljQmxvY2sg
bG93QmxvY2soREZHOjpCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CkBAIC0xMDI0NSw3ICsxMDI5
Myw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICB2b2lkIGJsZXNz
U3BlY3VsYXRpb24oQjM6OkNoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9v
bCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKKyAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24o
Q2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFu
ZGxlciA9IGZhbHNlKQogICAgIHsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNj
cmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9V
U0VTX0IzCisKKyNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdEhh
bmRsZS5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworUmVmPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6OmNyZWF0ZSgKKyAgICBTdGF0ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9y
KiBkZXNjcmlwdG9yLCBOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgb2Zmc2V0LAorICAgIGNv
bnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZShzdGF0ZSwgZGVzY3JpcHRvciwgb3JpZ2luLCBvZmZzZXQs
IGhhbmRsZXIpKTsKK30KKworUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU6OmRlZmF1bHRIYW5kbGUoU3RhdGUmIHN0YXRlKQoreworICAg
IGlmICghc3RhdGUuZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZSkgeworICAgICAgICBzdGF0ZS5kZWZh
dWx0RXhjZXB0aW9uSGFuZGxlID0gYWRvcHRSZWYoCisgICAgICAgICAgICBuZXcgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZShzdGF0ZSwgbnVsbHB0ciwgTm9kZU9yaWdpbigpLCAwLCBIYW5kbGVy
SW5mbygpKSk7CisgICAgfQorICAgIHJldHVybiBzdGF0ZS5kZWZhdWx0RXhjZXB0aW9uSGFuZGxl
OworfQorCitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjp+UGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZSgpCit7Cit9CisKK1JlZlB0cjxFeGNlcHRpb25UYXJnZXQ+IFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9uKAorICAgIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykKK3sKKyAgICBpZiAoIW1fZGVzY3JpcHRvcikgeworICAg
ICAgICAvLyBOT1RFOiBUaGlzIG9iamVjdCBjb3VsZCBiZSBhIHNpbmdsZXRvbi4KKyAgICAgICAg
Ym9vbCBpc0RlZmF1bHRIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKAor
ICAgICAgICAgICAgbmV3IEV4Y2VwdGlvblRhcmdldChpc0RlZmF1bHRIYW5kbGVyLCBtX3N0YXRl
LT5kZWZhdWx0RXhjZXB0aW9uSGFuZGxlLCBudWxscHRyKSk7CisgICAgfQorICAgIGJvb2wgaXNE
ZWZhdWx0SGFuZGxlciA9IGZhbHNlOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhjZXB0aW9u
VGFyZ2V0KGlzRGVmYXVsdEhhbmRsZXIsIHsgfSwgY3JlYXRlSGFuZGxlKHBhcmFtcykpKTsKK30K
Kwordm9pZCBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZUV4aXRDcmVhdGlvbkZv
clVud2luZCgKKyAgICBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMs
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKK3sKKyAgICBpZiAoIW1fZGVzY3JpcHRvcikK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUg
PSBjcmVhdGVIYW5kbGUocGFyYW1zKTsKKworICAgIGhhbmRsZS0+ZXhpdC5tX2lzVW53aW5kSGFu
ZGxlciA9IHRydWU7CisKKyAgICBIYW5kbGVySW5mbyBoYW5kbGVyID0gbV9oYW5kbGVyOworICAg
IHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAgICAgICAgW2hhbmRsZXIsIGNhbGxTaXRlSW5kZXhdIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBq
aXQuY29kZUJsb2NrKCk7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAg
IEhhbmRsZXJJbmZvIG5ld0hhbmRsZXIgPSBoYW5kbGVyOworICAgICAgICAgICAgICAgICAgICBu
ZXdIYW5kbGVyLnN0YXJ0ID0gY2FsbFNpdGVJbmRleC5iaXRzKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5ld0hhbmRsZXIuZW5kID0gY2FsbFNpdGVJbmRleC5iaXRzKCkgKyAxOworICAgICAgICAg
ICAgICAgICAgICBuZXdIYW5kbGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
aGFuZGxlLT5sYWJlbCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+YXBwZW5kRXhj
ZXB0aW9uSGFuZGxlcihuZXdIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7Cit9CisKK1BhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OlBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGUoCisgICAgU3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwg
Tm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIG9mZnNldCwKKyAgICBjb25zdCBIYW5kbGVySW5m
byYgaGFuZGxlcikKKyAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgLCBtX2Rlc2NyaXB0b3IoZGVz
Y3JpcHRvcikKKyAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
KyAgICAsIG1faGFuZGxlcihoYW5kbGVyKQoreworfQorCitSZWZQdHI8T1NSRXhpdEhhbmRsZT4g
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlSGFuZGxlKAorICAgIGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykKK3sKKyAgICBib29sIGlzRXhjZXB0aW9u
SGFuZGxlciA9IHRydWU7CisgICAgcmV0dXJuIG1fZGVzY3JpcHRvci0+ZW1pdE9TUkV4aXRMYXRl
cigKKyAgICAgICAgbV9zdGF0ZSwgVW5jb3VudGFibGUsIG1fb3JpZ2luLCBwYXJhbXMsIG1fb2Zm
c2V0LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGVfaAorI2RlZmluZSBGVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlX2gKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCisj
aW5jbHVkZSAiSGFuZGxlckluZm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3Bh
Y2UgQjMgeworY2xhc3MgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zOworfSAvLyBuYW1lc3BhY2Ug
QjMKKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4Y2VwdGlvblRhcmdldDsKK2NsYXNzIE9T
UkV4aXRIYW5kbGU7CitjbGFzcyBTdGF0ZTsKK3N0cnVjdCBPU1JFeGl0RGVzY3JpcHRvcjsKKwor
Y2xhc3MgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBjcmVhdGUoCisgICAgICAgIFN0YXRlJiwgT1NS
RXhpdERlc2NyaXB0b3IqLCBOb2RlT3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IEhhbmRs
ZXJJbmZvJik7CisKKyAgICBzdGF0aWMgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IGRlZmF1bHRIYW5kbGUoU3RhdGUmKTsKKyAgICAKKyAgICB+UGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZSgpOworCisgICAgLy8gTm90ZSB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgaGFuZGxlIHRvIHNj
aGVkdWxlIGFueSBudW1iZXIgb2YgZXhpdHMuIFRoaXMgY2FwYWJpbGl0eSBpcyBoZXJlIGZvcgor
ICAgIC8vIHR3byByZWFzb25zOgorICAgIC8vIAorICAgIC8vIC0gQjMgY29kZSBkdXBsaWNhdGlv
bi4gQjMgY291bGQgdGFrZSBhIHBhdGNocG9pbnQgYW5kIHR1cm4gaXQgaW50byBtdWx0aXBsZSBw
YXRjaHBvaW50cyBpZiBpdAorICAgIC8vICAgZHVwbGljYXRlcyBjb2RlLiBEdXBsaWNhdGluZyBj
b2RlIGlzIGxlZ2FsIHNpbmNlIHlvdSBjYW4gZG8gaXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgYmVo
YXZpb3IKKyAgICAvLyAgIG9mIHRoZSBwcm9ncmFtLiBPbmUgZXhhbXBsZSBpcyB0YWlsIGR1cGxp
Y2F0aW9uLiBBbm90aGVyIGlzIGp1bXAgdGhyZWFkaW5nLiBZZXQgYW5vdGhlciBpcworICAgIC8v
ICAgcGF0aCBzcGVjaWFsaXphdGlvbi4gWW91IHdpbGwgaGF2ZSBvbmUgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSBwZXIgcGF0Y2hwb2ludCB5b3UgY3JlYXRlCisgICAgLy8gICBkdXJpbmcgREZH
LT5CMyBsb3dlcmluZywgYW5kIHRoYXQgcGF0Y2hwb2ludCB3aWxsIGhhdmUgYSBnZW5lcmF0b3Ig
dGhhdCBjYWxscworICAgIC8vICAgaGFuZGxlLT5zY2hlZHVsZUJsYWgoKS4gVGhhdCBnZW5lcmF0
b3Igd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgaWYgeW91ciBwYXRjaHBvaW50IGdvdAor
ICAgIC8vICAgZHVwbGljYXRlZC4KKyAgICAvLworICAgIC8vIC0gQ29tYmluYXRpb24gb2YgdW53
aW5kIGFuZCBub24tdW53aW5kIGV4Y2VwdGlvbiBoYW5kbGVycyBpbnNpZGUgb25lIHBhdGNocG9p
bnQuIEEgR2V0QnlJZCBtYXkKKyAgICAvLyAgIG5lZWQgYm90aCBhbiBleGNlcHRpb24gaGFuZGxl
ciB0aGF0IHNlcnZlcyBhcyBhbiB1bndpbmQgdGFyZ2V0IGFuZCBhbiBleGNlcHRpb24gaGFuZGxl
ciB0aGF0CisgICAgLy8gICBpcyBicmFuY2hlZCB0byBkaXJlY3RseSBmb3Igb3BlcmF0aW9uIGNh
bGxzIGVtaXR0ZWQgaW5zaWRlIHRoZSBwYXRjaHBvaW50LiBJbiB0aGF0IGNhc2UsCisgICAgLy8g
ICB5b3UnbGwgY2FsbCBib3RoIHNjaGVkdWxlRXhpdENyZWF0aW9uKCkgYW5kIHNjaGVkdWxlRXhp
dENyZWF0aW9uRm9yVW53aW5kKCkgb24gdGhlIHNhbWUKKyAgICAvLyAgIGhhbmRsZS4KKworICAg
IC8vIFNjaGVkdWxlcyB0aGUgY3JlYXRpb24gb2YgYW4gT1NSIGV4aXQganVtcCBkZXN0aW5hdGlv
bi4gWW91IGRvbid0IGtub3cgd2hlbiB0aGlzIHdpbGwgYmUKKyAgICAvLyBjcmVhdGVkLCBidXQg
aXQgd2lsbCBoYXBwZW4gYmVmb3JlIGxpbmtpbmcuIFlvdSBjYW4gbGluayBqdW1wcyB0byBpdCBk
dXJpbmcgbGluayB0aW1lLiBUaGF0J3MKKyAgICAvLyB3aHkgdGhpcyByZXR1cm5zIGFuIEV4Y2Vw
dGlvblRhcmdldC4gVGhhdCB3aWxsIGNvbnRhaW4gdGhlIGp1bXAgZGVzdGluYXRpb24gKHRhcmdl
dC0+bGFiZWwoKSkKKyAgICAvLyBhdCBsaW5rIHRpbWUuCisgICAgUmVmUHRyPEV4Y2VwdGlvblRh
cmdldD4gc2NoZWR1bGVFeGl0Q3JlYXRpb24oY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpOworCisgICAgLy8gU2NoZWR1bGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBPU1IgZXhpdCBq
dW1wIGRlc3RpbmF0aW9uLCBhbmQgZW5zdXJlcyB0aGF0IGl0IGdldHMgYXNzb2NpYXRlZAorICAg
IC8vIHdpdGggdGhlIGhhbmRsZXIgZm9yIHNvbWUgY2FsbHNpdGUgaW5kZXguCisgICAgdm9pZCBz
Y2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJiwgQ2FsbFNpdGVJbmRleCk7CisKK3ByaXZhdGU6CisgICAgUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZSgKKyAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvciosIE5vZGVPcmln
aW4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgSGFuZGxlckluZm8mKTsKKworICAgIFJlZlB0cjxP
U1JFeGl0SGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpOworCisgICAgU3RhdGUmIG1fc3RhdGU7CisgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1f
ZGVzY3JpcHRvcjsKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OworICAgIEhhbmRsZXJJbmZvIG1faGFuZGxlcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisj
ZW5kaWYgLy8gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBA
QCBjbGFzcyBTdGFja1Nsb3RWYWx1ZTsKIAogbmFtZXNwYWNlIEZUTCB7CiAKK2NsYXNzIFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU7CisKIGlubGluZSBib29sIHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKQogewogICAgIHJldHVybiBERkc6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoREZH
OjpGVExNb2RlKTsKQEAgLTgyLDggKzg0LDEwIEBAIHB1YmxpYzoKICAgICBHZW5lcmF0ZWRGdW5j
dGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsKICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKICNp
ZiBGVExfVVNFU19CMwotICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGhhbmRsZVN0YWNrT3ZlcmZs
b3dFeGNlcHRpb25WYWx1ZSB7IG51bGxwdHIgfTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBo
YW5kbGVFeGNlcHRpb25WYWx1ZSB7IG51bGxwdHIgfTsKKyAgICAvLyBUb3AtbGV2ZWwgZXhjZXB0
aW9uIGhhbmRsZXIuIEp1bXAgaGVyZSBpZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHRvIGdlbmVy
aWNVbndpbmQoKSBhbmQgdGhlcmUKKyAgICAvLyBhcmUgbm8gYXBwbGljYWJsZSBjYXRjaCBibG9j
a3MgYW55d2hlcmUgaW4gdGhlIEdyYXBoLgorICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlPiBkZWZhdWx0RXhjZXB0aW9uSGFuZGxlOworICAgIEJveDxDQ2FsbEhlbHBlcnM6Okxh
YmVsPiBleGNlcHRpb25IYW5kbGVyOwogICAgIEIzOjpTdGFja1Nsb3RWYWx1ZSogY2FwdHVyZWRW
YWx1ZSB7IG51bGxwdHIgfTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgdW5zaWduZWQgaGFu
ZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQgeyBVSU5UX01BWCB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268444</attachid>
            <date>2016-01-06 21:55:04 -0800</date>
            <delta_ts>2016-01-07 11:35:14 -0800</delta_ts>
            <desc>it did things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44123</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NDY2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAyMyw2ICsxMDIzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRM
RFdBUkZSZWdpc3Rlci5jcHAKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAogICAgICAg
ICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCisgICAgICAgIGZ0bC9GVExFeGNl
cHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwCiAgICAgICAg
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuY3BwCkBAIC0xMDQ5LDYgKzEwNTAsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQp
CiAgICAgICAgIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMT3BlcmF0
aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAKKyAgICAgICAgZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNvdmVyeU9wY29kZS5j
cHAKICAgICAgICAgZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAogICAgICAgICBmdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDEwIEBACiAJCTBG
OUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAv
KiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjky
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICovOyB9OwogCQkwRjlEMzY5
NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyog
REZHQ2xlYW5VcFBoYXNlLmggKi87IH07CisJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdl
dC5jcHAgKi87IH07CisJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25U
YXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKKwkJ
MEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDRD
MEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwICov
OyB9OworCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
aCAqLzsgfTsKIAkJMEY5RTMyNjMxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5jcHAgKi87IH07CiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBE
RkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBo
YXNlLmNwcCAqLzsgfTsKQEAgLTI2NTAsNiArMjY1NCwxMCBAQAogCQkwRjlEMzM5OTE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzY5MjFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NsZWFu
VXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xlYW5VcFBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbGVhblVwUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdDbGVhblVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQu
Y3BwOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0
Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlENEMwRjFD
M0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7
IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTQ0LDYgKzQ1NTIsOCBA
QAogCQkJCTBGOUM1RTVEMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8s
CiAJCQkJNzlERjY2QUUxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmNwcCAqLywKIAkJCQk3OURGNjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuaCAqLywKKwkJCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRM
RXhjZXB0aW9uVGFyZ2V0LmNwcCAqLywKKwkJCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyog
RlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8sCiAJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudC5jcHAgKi8sCiAJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudC5oICovLAogCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLywKQEAgLTQ2MDIsNiArNDYxMiw4IEBACiAJ
CQkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLywKIAkJ
CQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLywKIAkJCQkwRkVB
MEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJCQkJMEY5RDRDMEUxQzNF
MkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwICovLAorCQkJ
CTBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmggKi8sCiAJCQkJMEY0ODUzMjUxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2Rl
LmNwcCAqLywKIAkJCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNv
ZGUuaCAqLywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
Y3BwICovLApAQCAtNzEyNyw2ICs3MTM5LDcgQEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNE
QjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTgxN0NG
RTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMUExN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBp
bGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdC
QTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc4MjcsNiArNzg0MCw3IEBACiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAwRUUwODQw
IC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIzMUJEQTA4RUYw
MDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBN0E4
RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5RDRDMEQx
QzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtOTA3Miw2ICs5MDg2LDcgQEAKIAkJCQkxNDI4MDgzQTEwN0VDMDc1
MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEwN0VD
Mzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzIx
QUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUx
N0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZB
OTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkxNzYs
NiArOTE5MSw3IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2
QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NS
RXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyog
UHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTk0
NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAv
LyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBleHBlcmltZW50YWwgdHJhbnNpdGlvbiBmcm9t
IExMVk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFdlIGRvbid0CiAvLyB5ZXQg
a25vdyBob3cgaXQgd2lsbCB0dXJuIG91dC4gRm9yIG5vdywgdGhpcyBmbGFnIHdpbGwgY29udHJv
bCB3aGV0aGVyIEZUTCB1c2VzIEIzLiBSZW1lbWJlciB0byBzZXQgdGhpcwogLy8gdG8gMCBiZWZv
cmUgY29tbWl0dGluZyEKLSNkZWZpbmUgRlRMX1VTRVNfQjMgMAorI2RlZmluZSBGVExfVVNFU19C
MyAxCiAKIHN0cnVjdCBOb2RlOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgZW51bSBOb1Jlc3VsdFRh
ZyB7IE5vUmVzdWx0IH07CiAvLyBUaGUgcHJlZGljdGlvbiBwcm9wYWdhdG9yIGVmZmVjdGl2ZWx5
IGRvZXMgZm91ciBwYXNzZXMsIHdpdGggdGhlIGxhc3QgcGFzcwogLy8gYmVpbmcgZG9uZSBieSB0
aGUgc2VwYXJhdGUgRml4dVBoYXNlLgogZW51bSBQcmVkaWN0aW9uUGFzcyB7Ci0gICAgLy8gV2Un
cmUgY29udmVyZ2luZyBpbiBhIHN0cmFpZ2h0LWZvcndhcmQgZm9yd2FyZCBmbG93IGZpeHBvaW50
LiBUaGlzIGlzIHRoZQorICAgIC8vIFdlJ3JlIGNvbnZlcmdpbmcgaW4gYSBzdHJhZ2h0LWZvcndh
cmQgZm9yd2FyZCBmbG93IGZpeHBvaW50LiBUaGlzIGlzIHRoZQogICAgIC8vIG1vc3QgY29udmVu
dGlvbmFsIHBhcnQgb2YgdGhlIHByb3BhZ2F0b3IgLSBpdCBtYWtlcyBvbmx5IG1vbm90b25pYyBk
ZWNpc2lvbnMKICAgICAvLyBiYXNlZCBvbiB2YWx1ZSBwcm9maWxlcyBhbmQgcmFyZSBjYXNlIHBy
b2ZpbGVzLiBJdCBpZ25vcmVzIGJhc2VsaW5lIEpJVCByYXJlCiAgICAgLy8gY2FzZSBwcm9maWxl
cy4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXZlbG9wIGEgZ29vZCBndWVzcyBvZiB3aGljaCB2YXJp
YWJsZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgJKHJldmlz
aW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEwLDIxICs0MTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVu
cmVhY2hhYmxlKCkgeyBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnRyb2xWYWx1ZT4obV9wcm9j
LCBCMzo6T29wcywgb3JpZ2luKCkpOyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotICAgIHZvaWQgc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAg
IEIzOjpDaGVja1ZhbHVlKiBjaGVjayA9IHNwZWN1bGF0ZSh2YWx1ZSwgYXJndW1lbnRzKTsKLSAg
ICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihmdW5jdG9yKTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hl
Y2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIEIzOjpDaGVja1ZhbHVlKiBjaGVjayA9IHNw
ZWN1bGF0ZSh2YWx1ZSk7Ci0gICAgICAgIGZvciAoTFZhbHVlIHZhbHVlIDogYXJndW1lbnRzKQot
ICAgICAgICAgICAgY2hlY2stPmFwcGVuZChCMzo6Q29uc3RyYWluZWRWYWx1ZSh2YWx1ZSkpOwot
ICAgICAgICByZXR1cm4gY2hlY2s7Ci0gICAgfQotCiAgICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1
bGF0ZShMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVjaywgb3JpZ2luKCksIHZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2Vw
dGlvblRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkg
JiYgRlRMX1VTRVNfQjMKKworI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworRXhjZXB0aW9uVGFyZ2V0Ojp+RXhjZXB0aW9uVGFyZ2V0KCkK
K3sKK30KKworQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uVGFyZ2V0OjpsYWJlbChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKQoreworICAgIGlmIChtX2lzRGVmYXVsdEhhbmRsZXIpCisgICAgICAg
IHJldHVybiBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKm1fZGVmYXVsdEhhbmRsZXIpOworICAgIHJl
dHVybiBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9oYW5kbGUtPmxhYmVsKTsKK30KKworQm94PEND
YWxsSGVscGVyczo6SnVtcExpc3Q+IEV4Y2VwdGlvblRhcmdldDo6anVtcHMoQ0NhbGxIZWxwZXJz
JiBqaXQpCit7CisgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IHJlc3VsdCA9IEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKG1faXNEZWZhdWx0SGFu
ZGxlcikgeworICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZGVmYXVsdEhhbmRsZXIg
PSBtX2RlZmF1bHRIYW5kbGVyOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpkZWZhdWx0SGFuZGxlcikp
OworICAgICAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPE9TUkV4aXRI
YW5kbGU+IGhhbmRsZSA9IG1faGFuZGxlOworICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAg
ICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFi
ZWwpKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitF
eGNlcHRpb25UYXJnZXQ6OkV4Y2VwdGlvblRhcmdldCgKKyAgICBib29sIGlzRGVmYXVsdEhhbmRs
ZXIsIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBkZWZhdWx0SGFuZGxlciwgUmVmUHRyPE9TUkV4
aXRIYW5kbGU+IGhhbmRsZSkKKyAgICA6IG1faXNEZWZhdWx0SGFuZGxlcihpc0RlZmF1bHRIYW5k
bGVyKQorICAgICwgbV9kZWZhdWx0SGFuZGxlcihkZWZhdWx0SGFuZGxlcikKKyAgICAsIG1faGFu
ZGxlKGhhbmRsZSkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTEV4Y2VwdGlvblRhcmdldF9oCisjZGVmaW5lIEZUTEV4Y2Vw
dGlvblRhcmdldF9oCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShGVExf
SklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiRlRMT1NSRXhpdEhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCitjbGFzcyBTdGF0ZTsKKworY2xhc3MgRXhjZXB0aW9uVGFyZ2V0IDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEV4Y2VwdGlvblRhcmdldD4geworcHVibGljOgorICAgIH5FeGNl
cHRpb25UYXJnZXQoKTsKKworICAgIC8vIEl0J3MgT0sgdG8gY2FsbCB0aGlzIGR1cmluZyBsaW5r
aW5nLCBidXQgbm90IGFueSBzb29uZXIuCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwoTGlu
a0J1ZmZlciYpOworCisgICAgLy8gQXQgYW55IHRpbWUsIHlvdSBjYW4gCisKKyAgICAvLyBPciwg
eW91IGNhbiBnZXQgYSBKdW1wTGlzdCBhdCBhbnkgdGltZS4gQW55dGhpbmcgeW91IGFkZCB0byB0
aGlzIEp1bXBMaXN0IHdpbGwgYmUgbGlua2VkIHRvCisgICAgLy8gdGhlIHRhcmdldCdzIGxhYmVs
LgorICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBqdW1wcyhDQ2FsbEhlbHBlcnMmKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGU7CisKKyAgICBFeGNlcHRpb25UYXJnZXQoYm9vbCBpc0RlZmF1bHRIYW5kbGVyLCBCb3g8Q0Nh
bGxIZWxwZXJzOjpMYWJlbD4sIFJlZlB0cjxPU1JFeGl0SGFuZGxlPik7CisgICAgCisgICAgYm9v
bCBtX2lzRGVmYXVsdEhhbmRsZXI7CisgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IG1fZGVm
YXVsdEhhbmRsZXI7CisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IG1faGFuZGxlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYm
IEZUTF9VU0VTX0IzCisKKyNlbmRpZiAvLyBGVExFeGNlcHRpb25UYXJnZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQXZhaWxhYmxlUmVjb3Zlcnku
aCIKICNpbmNsdWRlICJGVExCM091dHB1dC5oIgorI2luY2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdl
dC5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZv
cm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCkBAIC00OSw2
ICs1MCw3IEBACiAjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZU
TE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVk
ZSAiRlRMV2VpZ2h0ZWRUYXJnZXQuaCIKICNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKQEAg
LTEzOCw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgewor
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgCiAgICAgICAgIENT
dHJpbmcgbmFtZTsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewog
ICAgICAgICAgICAgbmFtZSA9IHRvQ1N0cmluZygKQEAgLTE0OSwxNiArMTUzLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAKICNpZiAhRlRMX1VTRVNf
QjMKLSAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQotICAgICAgICAgICAgbW9kdWxlQ3JlYXRl
V2l0aE5hbWVJbkNvbnRleHQobmFtZS5kYXRhKCksIG1fZnRsU3RhdGUuY29udGV4dCk7CisgICAg
ICAgIHN0YXRlLT5tb2R1bGUgPQorICAgICAgICAgICAgbW9kdWxlQ3JlYXRlV2l0aE5hbWVJbkNv
bnRleHQobmFtZS5kYXRhKCksIHN0YXRlLT5jb250ZXh0KTsKICAgICAgICAgCi0gICAgICAgIG1f
ZnRsU3RhdGUuZnVuY3Rpb24gPSBhZGRGdW5jdGlvbigKLSAgICAgICAgICAgIG1fZnRsU3RhdGUu
bW9kdWxlLCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7Ci0gICAgICAg
IHNldEZ1bmN0aW9uQ2FsbGluZ0NvbnYobV9mdGxTdGF0ZS5mdW5jdGlvbiwgTExWTUNDYWxsQ29u
dik7CisgICAgICAgIHN0YXRlLT5mdW5jdGlvbiA9IGFkZEZ1bmN0aW9uKAorICAgICAgICAgICAg
c3RhdGUtPm1vZHVsZSwgbmFtZS5kYXRhKCksIGZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCkpOwor
ICAgICAgICBzZXRGdW5jdGlvbkNhbGxpbmdDb252KHN0YXRlLT5mdW5jdGlvbiwgTExWTUNDYWxs
Q29udik7CiAgICAgICAgIGlmIChpc1g4NigpICYmIE9wdGlvbnM6Omxsdm1EaXNhbGxvd0FWWCgp
KSB7CiAgICAgICAgICAgICAvLyBBVlggbWFrZXMgVjgvcmF5dHJhY2UgODAlIHNsb3dlci4gSXQg
bWFrZXMgS3Jha2VuL2F1ZGlvLW9zY2lsbGF0b3IgNC41eAogICAgICAgICAgICAgLy8gc2xvd2Vy
LiBJdCBzaG91bGQgYmUgZGlzYWJsZWQuCi0gICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRG
dW5jdGlvbkF0dHIobV9mdGxTdGF0ZS5mdW5jdGlvbiwgInRhcmdldC1mZWF0dXJlcyIsICItYXZ4
Iik7CisgICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIoc3RhdGUtPmZ1
bmN0aW9uLCAidGFyZ2V0LWZlYXR1cmVzIiwgIi1hdngiKTsKICAgICAgICAgfQogI2VuZGlmIC8v
ICFGVExfVVNFU19CMwogICAgICAgICAKQEAgLTE2OCw3ICsxNzIsNyBAQCBwdWJsaWM6CiAjaWYg
RlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKICNlbHNlCi0g
ICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5tb2R1bGUsIG1fZnRsU3RhdGUuZnVu
Y3Rpb24sIG1faGVhcHMpOworICAgICAgICBtX291dC5pbml0aWFsaXplKHN0YXRlLT5tb2R1bGUs
IHN0YXRlLT5mdW5jdGlvbiwgbV9oZWFwcyk7CiAjZW5kaWYKIAogICAgICAgICAvLyBXZSB1c2Ug
cHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCkBA
IC0yMDEsNyArMjA1LDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZU9mQ2FwdHVyZWQg
PSBzaXplb2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICAgICAg
QjM6OlN0YWNrU2xvdFZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qo
c2l6ZU9mQ2FwdHVyZWQpOwogICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVk
QmFzZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKLSAgICAgICAgbV9mdGxT
dGF0ZS5jYXB0dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlOworICAgICAgICBzdGF0ZS0+Y2FwdHVy
ZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIExW
YWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9vdXQuaW50NjQs
IG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAgICAgICAgIApAQCAtMjA5LDkgKzIxMyw5
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnB0clRvSW50KGNhcHR1cmVkQWxsb2NhLCBt
X291dC5pbnRQdHIpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5tX25l
eHRNYWNoaW5lTG9jYWwgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIAotICAgICAgICBt
X2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAg
c3RhdGUtPmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgbV9v
dXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJp
bnNpYygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwK
KyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBt
X291dC5jb25zdEludDY0KHN0YXRlLT5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAg
bV9vdXQuaW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAjZW5kaWYgLy8gRlRMX1VTRV9CMwog
CkBAIC0yODYsMTAgKzI5MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7
CiAgICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCiAg
ICAgICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1T
cGlsbFNsb3RzTmVlZGVkKCkpKTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxs
U2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPnZh
cmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgICAg
IG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNr
bWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0
YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQ2NChzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKICAgICAgICAg
ICAgICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKICAgICAgICAgfQog
CkBAIC0zMDAsMTAgKzMwNCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIExWYWx1ZSBleGNl
cHRpb25IYW5kbGluZ1ZvbGF0aWxlUmVnaXN0ZXJzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgK
ICAgICAgICAgICAgICAgICBhcnJheVR5cGUobV9vdXQuaW50NjQsIG1heE51bWJlck9mQ2F0Y2hT
cGlsbHMpKTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNs
b3RTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPmV4Y2Vw
dGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAg
ICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0
LnN0YWNrbWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCht
X2Z0bFN0YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNs
b3RTdGFja21hcElEKSwKICAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGV4Y2VwdGlv
bkhhbmRsaW5nVm9sYXRpbGVSZWdpc3RlcnNTcGlsbFNsb3RzKTsKICAgICAgICAgfQogI2VuZGlm
IC8vICFGVExfVVNFU19CMwpAQCAtMzM3LDIxICszNDEsMzcgQEAgcHVibGljOgogI2lmIEZUTF9V
U0VTX0IzCiAgICAgICAgIC8vIEZJWE1FCiAjZWxzZQotICAgICAgICBtX2Z0bFN0YXRlLmhhbmRs
ZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAg
ICAgICBzdGF0ZS0+aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0
YWNrbWFwSURzKys7CiAgICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC52b2lk
VHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50NjQobV9mdGxTdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCks
CisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YXRlLT5oYW5kbGVTdGFja092ZXJmbG93
RXhjZXB0aW9uU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3Jv
QXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKICNlbmRpZgogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9o
YW5kbGVFeGNlcHRpb25zLCBjaGVja0FyZ3VtZW50cyk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAg
ICAgLy8gRklYTUUKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQu
cGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgICpzdGF0ZS0+ZXhjZXB0aW9u
SGFuZGxlciA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQuY2FsbCgpOworICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK
ICNlbHNlCi0gICAgICAgIG1fZnRsU3RhdGUuaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1f
c3RhY2ttYXBJRHMrKzsKKyAgICAgICAgc3RhdGUtPmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291
dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NCht
X2Z0bFN0YXRlLmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQpLAorICAgICAgICAgICAgbV9vdXQu
dm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQoc3Rh
dGUtPmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CiAjZW5kaWYK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTQxOCwxMSArNDM4LDExIEBAIHB1Ymxp
YzoKIAogI2lmICFGVExfVVNFU19CMwogICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigp
KQotICAgICAgICAgICAgZHVtcE1vZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7CisgICAgICAgICAg
ICBkdW1wTW9kdWxlKHN0YXRlLT5tb2R1bGUpOwogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFmdGVyIGxv
d2VyaW5nIik7CisgICAgICAgICAgICBzdGF0ZS0+ZHVtcFN0YXRlKCJhZnRlciBsb3dlcmluZyIp
OwogICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHZlcmlmeU1v
ZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7CisgICAgICAgICAgICB2ZXJpZnlNb2R1bGUoc3RhdGUt
Pm1vZHVsZSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTE2NTYsNyArMTY3Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB9CiAKICNpZiBGVExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNr
VmFsdWUqIHJlc3VsdCA9CisgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAg
ICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0
LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9u
KHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAg
ICAgICAgc2V0SW50MzIocmVzdWx0KTsKQEAgLTE3MTIsNyArMTczMiw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSk7CiAjaWYg
RlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiByZXN1bHQgPQorICAgICAg
ICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KICAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0
LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmln
aHQpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7
CkBAIC0xODAzLDcgKzE4MjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBlbHNlIHsKICNpZiBGVExfVVNF
U19CMwotICAgICAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGlvbiA9IG1fb3V0
LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgQ2hlY2tWYWx1ZSog
c3BlY3VsYXRpb24gPSBtX291dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAg
ICAgICAgIGJsZXNzU3BlY3VsYXRpb24oc3BlY3VsYXRpb24sIE92ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjdWxhdGlv
bjsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCkBAIC0xODM3LDcgKzE4NTcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwgb3Bw
b3NpdGUoa2luZCkpOwogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1Zh
bHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX29yaWdpbik7CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAg
TFZhbHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQubXVsV2l0aE92ZXJmbG93NjQobGVmdCwgcmln
aHQpOwpAQCAtNDI5MSw3ICs0MzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IG51bUtpZHM7ICsraSkgewogICAgICAgICAgICAgZmxhZ3MgPSBtX291dC5i
aXRBbmQoZmxhZ3MsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdz
KSk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBsZW5ndGhD
aGVjayA9IG1fb3V0LnNwZWN1bGF0ZUFkZCgKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGxlbmd0
aENoZWNrID0gbV9vdXQuc3BlY3VsYXRlQWRkKAogICAgICAgICAgICAgICAgIGxlbmd0aCwgbV9v
dXQubG9hZDMyKGtpZHNbaV0sIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7CiAgICAgICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKGxlbmd0aENoZWNrLCBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGhDaGVjazsKQEAg
LTcyMDUsMjEgKzcyMjUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwog
CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBleGNlcHRp
b25zLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUxNjg2Ci0gICAgICAgIAogICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChi
YXNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJl
cihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogCisgICAgICAgIFJlZlB0
cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAg
ICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCiAgICAgICAg
IFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5l
cmF0b3IoCiAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKIAorICAgICAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFy
Z2V0IGZvciBvcGVyYXRpb24gY2FsbHMuIEl0J3MgYSBwb2ludGVyIHRvIGEgSnVtcExpc3QuCisg
ICAgICAgICAgICAgICAgYXV0byBleGNlcHRpb25zID0gZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVs
ZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNyZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9y
IGdldHRlcnMuIFdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBkbyBhbnl0aGlu
ZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhl
IGV4aXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAg
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5k
KHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKICAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRv
ciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAg
ICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAg
ICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyksCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwg
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAogICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7
CiAKQEAgLTcyMjksMTUgKzcyNTksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBwYXJh
bXMuYWRkTGF0ZVBhdGgoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBzb21ldGhpbmcuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnM7CiAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygm
aml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1Bh
dGhCZWdpbiA9IGppdC5sYWJlbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2Vw
dGlvbnMsIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcGFyYW1zWzBdLmdwcigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgcGFyYW1zWzBdLmdwcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNb
MV0uZ3ByKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGRvbmUsICZqaXQpOwpAQCAtMTAxMzIsNyArMTAxNTksMjcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKICAgICB9CiAKLSNpZiAhRlRM
X1VTRVNfQjMKKyNpZiBGVExfVVNFU19CMworICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9u
SGFuZGxlPiBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKKyAgICAgICAg
SGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIGJvb2wgd2lsbENhdGNoRXhj
ZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdp
bi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgaWYg
KCF3aWxsQ2F0Y2hFeGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZShtX2Z0bFN0YXRlKTsKKworICAgICAgICBib29sIGV4
aXRPSyA9IHRydWU7CisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW4ud2l0aEZv
ckV4aXRBbmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKTsKKworICAgICAgICBPU1JFeGl0
RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihub1Zh
bHVlKCksIG51bGxwdHIpOworCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZhbHVlLT5udW1D
aGlsZHJlbigpOworICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1l
bnRzKGV4aXREZXNjcmlwdG9yLCBvcENhdGNoT3JpZ2luLCBub1ZhbHVlKCkpKTsKKworICAgICAg
ICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAorICAgICAgICAgICAg
bV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhjZXB0aW9uSGFu
ZGxlcik7CisgICAgfQorI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICB2b2lkIGFwcGVuZE9TUkV4
aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3RhY2ttYXBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCB1bnNpZ25l
ZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0
Y2hPcmlnaW47CkBAIC0xMDE1Myw3ICsxMDIwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
dWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIGV4aXREZXNjcmlwdG9ySW1wbC5tX2Nv
ZGVPcmlnaW4sIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzKTsKICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwogICAgIH0KLSNlbmRpZiAvLyAhRlRMX1VT
RVNfQjMKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2so
REZHOjpCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CkBAIC0xMDI0NSw3ICsxMDI5Miw3IEBAIHBy
aXZhdGU6CiAgICAgfQogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICB2b2lkIGJsZXNzU3BlY3VsYXRp
b24oQjM6OkNoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBs
b3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2Vw
dGlvbkhhbmRsZXIgPSBmYWxzZSkKKyAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hlY2tWYWx1
ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBo
aWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZh
bHNlKQogICAgIHsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0g
YXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisK
KyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgorI2luY2x1ZGUgIkZUTEV4
Y2VwdGlvblRhcmdldC5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKyNpbmNsdWRlICJGVExP
U1JFeGl0SGFuZGxlLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitSZWZQdHI8UGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZT4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAor
ICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IsIE5vZGVPcmln
aW4gb3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgY29uc3QgSGFuZGxlckluZm8mIGhhbmRs
ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
KHN0YXRlLCBkZXNjcmlwdG9yLCBvcmlnaW4sIG9mZnNldCwgaGFuZGxlcikpOworfQorCitSZWZQ
dHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6
ZGVmYXVsdEhhbmRsZShTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFzdGF0ZS5kZWZhdWx0RXhj
ZXB0aW9uSGFuZGxlKSB7CisgICAgICAgIHN0YXRlLmRlZmF1bHRFeGNlcHRpb25IYW5kbGUgPSBh
ZG9wdFJlZigKKyAgICAgICAgICAgIG5ldyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKHN0YXRl
LCBudWxscHRyLCBOb2RlT3JpZ2luKCksIDAsIEhhbmRsZXJJbmZvKCkpKTsKKyAgICB9CisgICAg
cmV0dXJuIHN0YXRlLmRlZmF1bHRFeGNlcHRpb25IYW5kbGU7Cit9CisKK1BhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU6On5QYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKCkKK3sKK30KKworUmVmUHRy
PEV4Y2VwdGlvblRhcmdldD4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0
Q3JlYXRpb24oCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KQoreworICAgIGlmICghbV9kZXNjcmlwdG9yKSB7CisgICAgICAgIC8vIE5PVEU6IFRoaXMgb2Jq
ZWN0IGNvdWxkIGJlIGEgc2luZ2xldG9uLCBob3dldmVyIHVzdWFsbHkgd2UgdG9zcyB0aGUgRXhj
ZXB0aW9uSGFuZGxlcgorICAgICAgICAvLyBvYmplY3Qgc2hvcnRseSBhZnRlciBjcmVhdGlvbi4K
KyAgICAgICAgYm9vbCBpc0RlZmF1bHRIYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKAorICAgICAgICAgICAgbmV3IEV4Y2VwdGlvblRhcmdldChpc0RlZmF1bHRIYW5kbGVy
LCBtX3N0YXRlLmV4Y2VwdGlvbkhhbmRsZXIsIG51bGxwdHIpKTsKKyAgICB9CisgICAgYm9vbCBp
c0RlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGNlcHRp
b25UYXJnZXQoaXNEZWZhdWx0SGFuZGxlciwgeyB9LCBjcmVhdGVIYW5kbGUocGFyYW1zKSkpOwor
fQorCit2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OnNjaGVkdWxlRXhpdENyZWF0aW9u
Rm9yVW53aW5kKAorICAgIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQoreworICAgIGlmICghbV9kZXNjcmlwdG9y
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRs
ZSA9IGNyZWF0ZUhhbmRsZShwYXJhbXMpOworCisgICAgaGFuZGxlLT5leGl0Lm1faXNVbndpbmRI
YW5kbGVyID0gdHJ1ZTsKKworICAgIEhhbmRsZXJJbmZvIGhhbmRsZXIgPSBtX2hhbmRsZXI7Cisg
ICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICBbaGFuZGxlLCBoYW5kbGVyLCBjYWxsU2l0
ZUluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAor
ICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAg
ICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgICAg
ICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGNhbGxTaXRlSW5kZXguYml0cygpOworICAgICAg
ICAgICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0cygpICsgMTsK
KyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpOworICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2st
PmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworfQorCitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlKAorICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2NyaXB0b3IqIGRl
c2NyaXB0b3IsIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgY29uc3Qg
SGFuZGxlckluZm8mIGhhbmRsZXIpCisgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgICwgbV9kZXNj
cmlwdG9yKGRlc2NyaXB0b3IpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKK3sKK30KKworUmVmUHRyPE9TUkV4
aXRIYW5kbGU+IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZUhhbmRsZSgKKyAgICBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpCit7CisgICAgYm9vbCBp
c0V4Y2VwdGlvbkhhbmRsZXIgPSB0cnVlOworICAgIHJldHVybiBtX2Rlc2NyaXB0b3ItPmVtaXRP
U1JFeGl0TGF0ZXIoCisgICAgICAgIG1fc3RhdGUsIFVuY291bnRhYmxlLCBtX29yaWdpbiwgcGFy
YW1zLCBtX29mZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlX2gKKyNkZWZpbmUgRlRM
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9oCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKwor
I2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiREZHTm9kZU9y
aWdpbi5oIgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczsKK30gLy8g
bmFtZXNwYWNlIEIzCisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGNlcHRpb25UYXJnZXQ7
CitjbGFzcyBTdGF0ZTsKK3N0cnVjdCBPU1JFeGl0RGVzY3JpcHRvcjsKK3N0cnVjdCBPU1JFeGl0
SGFuZGxlOworCitjbGFzcyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGNyZWF0ZSgKKyAgICAg
ICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvciosIERGRzo6Tm9kZU9yaWdpbiwgdW5zaWduZWQg
b2Zmc2V0LCBjb25zdCBIYW5kbGVySW5mbyYpOworCisgICAgc3RhdGljIFJlZlB0cjxQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBkZWZhdWx0SGFuZGxlKFN0YXRlJik7CisgICAgCisgICAgflBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUoKTsKKworICAgIC8vIE5vdGUgdGhhdCB5b3UgY2FuIHVz
ZSB0aGlzIGhhbmRsZSB0byBzY2hlZHVsZSBhbnkgbnVtYmVyIG9mIGV4aXRzLiBUaGlzIGNhcGFi
aWxpdHkgaXMgaGVyZSBmb3IKKyAgICAvLyB0d28gcmVhc29uczoKKyAgICAvLyAKKyAgICAvLyAt
IEIzIGNvZGUgZHVwbGljYXRpb24uIEIzIGNvdWxkIHRha2UgYSBwYXRjaHBvaW50IGFuZCB0dXJu
IGl0IGludG8gbXVsdGlwbGUgcGF0Y2hwb2ludHMgaWYgaXQKKyAgICAvLyAgIGR1cGxpY2F0ZXMg
Y29kZS4gRHVwbGljYXRpbmcgY29kZSBpcyBsZWdhbCBzaW5jZSB5b3UgY2FuIGRvIGl0IHdpdGhv
dXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yCisgICAgLy8gICBvZiB0aGUgcHJvZ3JhbS4gT25lIGV4
YW1wbGUgaXMgdGFpbCBkdXBsaWNhdGlvbi4gQW5vdGhlciBpcyBqdW1wIHRocmVhZGluZy4gWWV0
IGFub3RoZXIgaXMKKyAgICAvLyAgIHBhdGggc3BlY2lhbGl6YXRpb24uIFlvdSB3aWxsIGhhdmUg
b25lIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcGVyIHBhdGNocG9pbnQgeW91IGNyZWF0ZQor
ICAgIC8vICAgZHVyaW5nIERGRy0+QjMgbG93ZXJpbmcsIGFuZCB0aGF0IHBhdGNocG9pbnQgd2ls
bCBoYXZlIGEgZ2VuZXJhdG9yIHRoYXQgY2FsbHMKKyAgICAvLyAgIGhhbmRsZS0+c2NoZWR1bGVC
bGFoKCkuIFRoYXQgZ2VuZXJhdG9yIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGlmIHlv
dXIgcGF0Y2hwb2ludCBnb3QKKyAgICAvLyAgIGR1cGxpY2F0ZWQuCisgICAgLy8KKyAgICAvLyAt
IENvbWJpbmF0aW9uIG9mIHVud2luZCBhbmQgbm9uLXVud2luZCBleGNlcHRpb24gaGFuZGxlcnMg
aW5zaWRlIG9uZSBwYXRjaHBvaW50LiBBIEdldEJ5SWQgbWF5CisgICAgLy8gICBuZWVkIGJvdGgg
YW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBzZXJ2ZXMgYXMgYW4gdW53aW5kIHRhcmdldCBhbmQg
YW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdAorICAgIC8vICAgaXMgYnJhbmNoZWQgdG8gZGlyZWN0
bHkgZm9yIG9wZXJhdGlvbiBjYWxscyBlbWl0dGVkIGluc2lkZSB0aGUgcGF0Y2hwb2ludC4gSW4g
dGhhdCBjYXNlLAorICAgIC8vICAgeW91J2xsIGNhbGwgYm90aCBzY2hlZHVsZUV4aXRDcmVhdGlv
bigpIGFuZCBzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCgpIG9uIHRoZSBzYW1lCisgICAg
Ly8gICBoYW5kbGUuCisKKyAgICAvLyBTY2hlZHVsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIE9TUiBl
eGl0IGp1bXAgZGVzdGluYXRpb24uIFlvdSBkb24ndCBrbm93IHdoZW4gdGhpcyB3aWxsIGJlCisg
ICAgLy8gY3JlYXRlZCwgYnV0IGl0IHdpbGwgaGFwcGVuIGJlZm9yZSBsaW5raW5nLiBZb3UgY2Fu
IGxpbmsganVtcHMgdG8gaXQgZHVyaW5nIGxpbmsgdGltZS4gVGhhdCdzCisgICAgLy8gd2h5IHRo
aXMgcmV0dXJucyBhbiBFeGNlcHRpb25UYXJnZXQuIFRoYXQgd2lsbCBjb250YWluIHRoZSBqdW1w
IGRlc3RpbmF0aW9uICh0YXJnZXQtPmxhYmVsKCkpCisgICAgLy8gYXQgbGluayB0aW1lLgorICAg
IFJlZlB0cjxFeGNlcHRpb25UYXJnZXQ+IHNjaGVkdWxlRXhpdENyZWF0aW9uKGNvbnN0IEIzOjpT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKTsKKworICAgIC8vIFNjaGVkdWxlcyB0aGUgY3JlYXRp
b24gb2YgYW4gT1NSIGV4aXQganVtcCBkZXN0aW5hdGlvbiwgYW5kIGVuc3VyZXMgdGhhdCBpdCBn
ZXRzIGFzc29jaWF0ZWQKKyAgICAvLyB3aXRoIHRoZSBoYW5kbGVyIGZvciBzb21lIGNhbGxzaXRl
IGluZGV4LgorICAgIHZvaWQgc2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQoY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIENhbGxTaXRlSW5kZXgpOworCitwcml2YXRlOgor
ICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoCisgICAgICAgIFN0YXRlJiwgT1NSRXhpdERl
c2NyaXB0b3IqLCBERkc6Ok5vZGVPcmlnaW4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgSGFuZGxl
ckluZm8mKTsKKworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBjcmVhdGVIYW5kbGUoY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpOworCisgICAgU3RhdGUmIG1fc3RhdGU7Cisg
ICAgT1NSRXhpdERlc2NyaXB0b3IqIG1fZGVzY3JpcHRvcjsKKyAgICBERkc6Ok5vZGVPcmlnaW4g
bV9vcmlnaW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgSGFuZGxlckluZm8gbV9oYW5k
bGVyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNlbmRpZiAvLyBGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5jcHAJ
KHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRlRMRm9yT1NS
RW50cnlKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJ
VEZpbmFsaXplci5oIgorI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIK
ICNpbmNsdWRlIDxsbHZtL0luaXRpYWxpemVMTFZNLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTk0NjYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNpbmNsdWRl
ICJGVExKU1RhaWxDYWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCisjaW5jbHVkZSA8
d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlND
IHsKQEAgLTUxLDYgKzUyLDggQEAgY2xhc3MgU3RhY2tTbG90VmFsdWU7CiAKIG5hbWVzcGFjZSBG
VEwgewogCitjbGFzcyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOworCiBpbmxpbmUgYm9vbCB2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkKIHsKICAgICByZXR1cm4gREZHOjp2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKERGRzo6RlRMTW9kZSk7CkBAIC04Miw4ICs4NSwxMCBAQCBwdWJsaWM6
CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CiAgICAgSklURmluYWxp
emVyKiBmaW5hbGl6ZXI7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uVmFsdWUgeyBudWxscHRyIH07Ci0gICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogaGFuZGxlRXhjZXB0aW9uVmFsdWUgeyBudWxscHRyIH07CisgICAg
Ly8gVG9wLWxldmVsIGV4Y2VwdGlvbiBoYW5kbGVyLiBKdW1wIGhlcmUgaWYgeW91IGtub3cgdGhh
dCB5b3UgaGF2ZSB0byBnZW5lcmljVW53aW5kKCkgYW5kIHRoZXJlCisgICAgLy8gYXJlIG5vIGFw
cGxpY2FibGUgY2F0Y2ggYmxvY2tzIGFueXdoZXJlIGluIHRoZSBHcmFwaC4KKyAgICBSZWZQdHI8
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZTsKKyAgICBC
b3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZXhjZXB0aW9uSGFuZGxlciB7IEJveDxDQ2FsbEhlbHBl
cnM6OkxhYmVsPjo6Y3JlYXRlKCkgfTsKICAgICBCMzo6U3RhY2tTbG90VmFsdWUqIGNhcHR1cmVk
VmFsdWUgeyBudWxscHRyIH07CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVuc2lnbmVkIGhh
bmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9wZXJhdGlvbi1leGNlcHRp
b24tbm8tY2F0Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1uby1jYXRjaC5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9wZXJhdGlvbi1leGNl
cHRpb24tbm8tY2F0Y2guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorZnVuY3Rp
b24gZm9vKG8sIHApIHsKKyAgICB2YXIgeCA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMTAxOwor
ICAgIHggPSAxMDI7CisgICAgcCA9IDEwMzsKKyAgICByZXN1bHQgPSBvLmY7CisgICAgbyA9IDEw
NDsKKyAgICBwID0gMTA1OworICAgIHggPSAxMDY7CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0
dXJuIiwgdmFsdWVzOiBbbywgcCwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5saW5lKGZvbyk7CisK
Ky8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzIGFuZCBub24tb2JqZWN0
IHR5cGVzLgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvOwor
ICAgIHZhciBpc09iamVjdCA9IGkgJiAxOworICAgIGlmIChpc09iamVjdCkgeworICAgICAgICBv
ID0ge2Y6MTA3fTsKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2UgaXQgcG9seW1vcnBo
aWMuCisgICAgfSBlbHNlCisgICAgICAgIG8gPSA0MjsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8p
OworICAgIGlmIChyZXN1bHQub3V0Y29tZSAhPT0gInJldHVybiIpCisgICAgICAgIHRocm93ICJF
cnJvciBpbiBsb29wOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworICAgIGlmIChy
ZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6
IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7CisgICAgaWYg
KHJlc3VsdC52YWx1ZXNbMF0gIT09IDEwNCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6
IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworICAgIGlmIChyZXN1bHQudmFs
dWVzWzFdICE9PSAxMDUpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVz
WzFdOiAiICsgcmVzdWx0LnZhbHVlc1sxXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1syXSAhPT0g
MTA2KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1syXTogIiArIHJl
c3VsdC52YWx1ZXNbMl07CisgICAgaWYgKGlzT2JqZWN0KSB7CisgICAgICAgIGlmIChyZXN1bHQu
dmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IHZvaWQgMCkKKyAgICAgICAgICAgIHRocm93ICJFcnJv
ciBpbiBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKKyAgICB9Cit9
CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgcmVzdWx0OwordHJ5IHsKKyAgICBy
ZXN1bHQgPSBmb28obnVsbCwgMTA4KTsKK30gY2F0Y2ggKGUpIHsKKyAgICByZXN1bHQgPSB7b3V0
Y29tZTogImV4Y2VwdGlvbiJ9OworfQoraWYgKHJlc3VsdC5vdXRjb21lICE9PSAiZXhjZXB0aW9u
IikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRj
b21lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268471</attachid>
            <date>2016-01-07 11:35:14 -0800</date>
            <delta_ts>2016-01-07 12:22:28 -0800</delta_ts>
            <desc>seems to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70811</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NDY2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTAyMyw2ICsxMDIzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRM
RFdBUkZSZWdpc3Rlci5jcHAKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAogICAgICAg
ICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCisgICAgICAgIGZ0bC9GVExFeGNl
cHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwCiAgICAgICAg
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAogICAgICAgICBmdGwvRlRMRXhpdFBy
b3BlcnR5VmFsdWUuY3BwCkBAIC0xMDQ5LDYgKzEwNTAsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQp
CiAgICAgICAgIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMT3BlcmF0
aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAKKyAgICAgICAgZnRsL0ZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExSZWNvdmVyeU9wY29kZS5j
cHAKICAgICAgICAgZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAogICAgICAgICBmdGwvRlRMU2xvd1Bh
dGhDYWxsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDEwIEBACiAJCTBG
OUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAv
KiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzNjky
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICovOyB9OwogCQkwRjlEMzY5
NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyog
REZHQ2xlYW5VcFBoYXNlLmggKi87IH07CisJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdl
dC5jcHAgKi87IH07CisJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25U
YXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLzsgfTsKKwkJ
MEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDRD
MEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwICov
OyB9OworCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
aCAqLzsgfTsKIAkJMEY5RTMyNjMxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5jcHAgKi87IH07CiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBE
RkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBo
YXNlLmNwcCAqLzsgfTsKQEAgLTI2NTAsNiArMjY1NCwxMCBAQAogCQkwRjlEMzM5OTE4MDNBREI3
MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzY5MjFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NsZWFu
VXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xlYW5VcFBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbGVhblVwUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdDbGVhblVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQu
Y3BwOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhjZXB0aW9uVGFyZ2V0
Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjlENEMwRjFD
M0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg7
IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUgLyogREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjIxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTQ0LDYgKzQ1NTIsOCBA
QAogCQkJCTBGOUM1RTVEMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8s
CiAJCQkJNzlERjY2QUUxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmNwcCAqLywKIAkJCQk3OURGNjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuaCAqLywKKwkJCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRM
RXhjZXB0aW9uVGFyZ2V0LmNwcCAqLywKKwkJCQkwRjlENEMwQjFDM0UxQzExMDA2Q0Q5ODQgLyog
RlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8sCiAJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudC5jcHAgKi8sCiAJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudC5oICovLAogCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLywKQEAgLTQ2MDIsNiArNDYxMiw4IEBACiAJ
CQkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLywKIAkJ
CQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLywKIAkJCQkwRkVB
MEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJCQkJMEY5RDRDMEUxQzNF
MkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwICovLAorCQkJ
CTBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
LmggKi8sCiAJCQkJMEY0ODUzMjUxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2Rl
LmNwcCAqLywKIAkJCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNv
ZGUuaCAqLywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
Y3BwICovLApAQCAtNzEyNyw2ICs3MTM5LDcgQEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNE
QjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBC
QjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMTgxN0NG
RTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMUExN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBp
bGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdC
QTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc4MjcsNiArNzg0MCw3IEBACiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAwRUUwODQw
IC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIzMUJEQTA4RUYw
MDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBN0E4
RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5RDRDMEQx
QzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLApAQCAtOTA3Miw2ICs5MDg2LDcgQEAKIAkJCQkxNDI4MDgzQTEwN0VDMDc1
MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENTEwN0VD
Mzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzIx
QUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUx
N0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZB
OTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkxNzYs
NiArOTE5MSw3IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2
QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NS
RXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyog
UHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJl
dmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC03NywxMiArNzcsMTkgQEAgcHVibGljOgogICAgICAgICAgICAg
YXBwZW5kKHZhbHVlKTsKICAgICB9CiAKKyAgICAvLyBIZWxwZXIgZm9yIGFwcGVuZGluZyBhIGJ1
bmNoIG9mIHZhbHVlcyB3aXRoIHNvbWUgVmFsdWVSZXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yVHlwZT4KKyAgICB2b2lkIGFwcGVuZFZlY3RvcldpdGhSZXAoY29uc3QgVmVjdG9yVHlw
ZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiB2ZWN0b3IpCisgICAgICAgICAgICBhcHBlbmQodmFsdWUsIHJlcCk7CisgICAg
fQorCiAgICAgLy8gSGVscGVyIGZvciBhcHBlbmRpbmcgY29sZCBhbnkncy4gVGhpcyBvZnRlbiB1
c2VkIGJ5IGNsaWVudHMgdG8gaW1wbGVtZW50IE9TUi4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
ZWN0b3JUeXBlPgogICAgIHZvaWQgYXBwZW5kQ29sZEFueXMoY29uc3QgVmVjdG9yVHlwZSYgdmVj
dG9yKQogICAgIHsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2ZWN0b3IpCi0gICAgICAg
ICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVSZXA6OkNvbGRBbnkpKTsK
KyAgICAgICAgYXBwZW5kVmVjdG9yV2l0aFJlcCh2ZWN0b3IsIFZhbHVlUmVwOjpDb2xkQW55KTsK
ICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21ldGhpbmcgeW91IG1pZ2h0
IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjb25zdHJhaW5lZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMTk0
NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDYgKzMzLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewog
Cit2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVnaXN0ZXJzVG8oUmVnaXN0ZXJTZXQmIHNldCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgV2FybUFueToKKyAgICBjYXNl
IENvbGRBbnk6CisgICAgY2FzZSBMYXRlQ29sZEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoK
KyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoK
KyAgICAgICAgc2V0LnNldChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
OgorICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgc2V0LnNldChNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBzZXQuc2V0KEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCitSZWdpc3RlclNldCBWYWx1ZVJlcDo6dXNlZFJlZ2lzdGVy
cygpIGNvbnN0Cit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAgIGFkZFVzZWRSZWdpc3Rl
cnNUbyhyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgVmFsdWVSZXA6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQobV9raW5kKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMTk0NjYxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgogI2luY2x1ZGUg
IlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KIApAQCAtMjA3
LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+
KHZhbHVlKCkpOwogICAgIH0KIAotICAgIFZhbHVlUmVwIHdpdGhPZmZzZXQoaW50cHRyX3Qgb2Zm
c2V0KQorICAgIFZhbHVlUmVwIHdpdGhPZmZzZXQoaW50cHRyX3Qgb2Zmc2V0KSBjb25zdAogICAg
IHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2FzZSBTdGFjazoKQEAgLTIx
OSw2ICsyMjAsMjAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBhZGRV
c2VkUmVnaXN0ZXJzVG8oUmVnaXN0ZXJTZXQmKSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzKCkgY29uc3Q7CisKKyAgICAvLyBHZXQgdGhlIHVzZWQgcmVnaXN0ZXJz
IGZvciBhIHZlY3RvciBvZiBWYWx1ZVJlcHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9y
VHlwZT4KKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyhjb25zdCBWZWN0b3JU
eXBlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCByZXN1bHQ7CisgICAgICAg
IGZvciAoY29uc3QgVmFsdWVSZXAmIHZhbHVlIDogdmVjdG9yKQorICAgICAgICAgICAgdmFsdWUu
YWRkVXNlZFJlZ2lzdGVyc1RvKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKICAgICAvLyBUaGlzIGhhcyBhIHNpbXBsZSBjb250cmFjdDogaXQgZW1pdHMgY29kZSB0byBy
ZXN0b3JlIHRoZSB2YWx1ZSBpbnRvIHRoZSBnaXZlbiByZWdpc3Rlci4gVGhpcwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTQ2NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFdlIGFyZSBpbiB0
aGUgbWlkZGxlIG9mIGFuIGV4cGVyaW1lbnRhbCB0cmFuc2l0aW9uIGZyb20gTExWTSB0byBCMyBh
cyB0aGUgYmFja2VuZCBmb3IgdGhlIEZUTC4gV2UgZG9uJ3QKIC8vIHlldCBrbm93IGhvdyBpdCB3
aWxsIHR1cm4gb3V0LiBGb3Igbm93LCB0aGlzIGZsYWcgd2lsbCBjb250cm9sIHdoZXRoZXIgRlRM
IHVzZXMgQjMuIFJlbWVtYmVyIHRvIHNldCB0aGlzCiAvLyB0byAwIGJlZm9yZSBjb21taXR0aW5n
IQotI2RlZmluZSBGVExfVVNFU19CMyAwCisjZGVmaW5lIEZUTF9VU0VTX0IzIDEKIAogc3RydWN0
IE5vZGU7CiAKQEAgLTEwNyw3ICsxMDcsNyBAQCBlbnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQg
fTsKIC8vIFRoZSBwcmVkaWN0aW9uIHByb3BhZ2F0b3IgZWZmZWN0aXZlbHkgZG9lcyBmb3VyIHBh
c3Nlcywgd2l0aCB0aGUgbGFzdCBwYXNzCiAvLyBiZWluZyBkb25lIGJ5IHRoZSBzZXBhcmF0ZSBG
aXh1UGhhc2UuCiBlbnVtIFByZWRpY3Rpb25QYXNzIHsKLSAgICAvLyBXZSdyZSBjb252ZXJnaW5n
IGluIGEgc3RyYWlnaHQtZm9yd2FyZCBmb3J3YXJkIGZsb3cgZml4cG9pbnQuIFRoaXMgaXMgdGhl
CisgICAgLy8gV2UncmUgY29udmVyZ2luZyBpbiBhIHN0cmFnaHQtZm9yd2FyZCBmb3J3YXJkIGZs
b3cgZml4cG9pbnQuIFRoaXMgaXMgdGhlCiAgICAgLy8gbW9zdCBjb252ZW50aW9uYWwgcGFydCBv
ZiB0aGUgcHJvcGFnYXRvciAtIGl0IG1ha2VzIG9ubHkgbW9ub3RvbmljIGRlY2lzaW9ucwogICAg
IC8vIGJhc2VkIG9uIHZhbHVlIHByb2ZpbGVzIGFuZCByYXJlIGNhc2UgcHJvZmlsZXMuIEl0IGln
bm9yZXMgYmFzZWxpbmUgSklUIHJhcmUKICAgICAvLyBjYXNlIHByb2ZpbGVzLiBUaGUgZ29hbCBo
ZXJlIGlzIHRvIGRldmVsb3AgYSBnb29kIGd1ZXNzIG9mIHdoaWNoIHZhcmlhYmxlcwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk0
NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTExMiw2ICsxMTIsMTggQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2Fm
ZXBvaW50OjpSZQogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOwogICAgIEIz
OjpnZW5lcmF0ZSgqc3RhdGUucHJvYywgaml0KTsKIAorICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlv
biBoYW5kbGVyLgorICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7Cisg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5j
YWxsKCk7CisgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqaXQuYWRkTGlu
a1Rhc2soCisgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRs
ZXIpKTsKKyAgICAgICAgfSk7CisKICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KAogICAgICAgICB2bSwgaml0LCBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CiAgICAgaWYgKHN0YXRlLmZpbmFsaXplci0+
YjNDb2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTAs
MjEgKzQxMCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpPb3BzLCBvcmlnaW4oKSk7
IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBzcGVjdWxhdGUo
TFZhbHVlIHZhbHVlLCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgQjM6OkNoZWNrVmFsdWUqIGNoZWNr
ID0gc3BlY3VsYXRlKHZhbHVlLCBhcmd1bWVudHMpOwotICAgICAgICBjaGVjay0+c2V0R2VuZXJh
dG9yKGZ1bmN0b3IpOwotICAgIH0KLQotICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGUoTFZh
bHVlIHZhbHVlLCBjb25zdCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotICAgIHsK
LSAgICAgICAgQjM6OkNoZWNrVmFsdWUqIGNoZWNrID0gc3BlY3VsYXRlKHZhbHVlKTsKLSAgICAg
ICAgZm9yIChMVmFsdWUgdmFsdWUgOiBhcmd1bWVudHMpCi0gICAgICAgICAgICBjaGVjay0+YXBw
ZW5kKEIzOjpDb25zdHJhaW5lZFZhbHVlKHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBjaGVjazsK
LSAgICB9Ci0KICAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1f
cHJvYywgQjM6OkNoZWNrLCBvcmlnaW4oKSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRp
b25UYXJnZXQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitF
eGNlcHRpb25UYXJnZXQ6On5FeGNlcHRpb25UYXJnZXQoKQoreworfQorCitDb2RlTG9jYXRpb25M
YWJlbCBFeGNlcHRpb25UYXJnZXQ6OmxhYmVsKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7Cisg
ICAgaWYgKG1faXNEZWZhdWx0SGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9j
YXRpb25PZigqbV9kZWZhdWx0SGFuZGxlcik7CisgICAgcmV0dXJuIGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2hhbmRsZS0+bGFiZWwpOworfQorCitCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4g
RXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyhDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBCb3g8Q0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdD4gcmVzdWx0ID0gQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+
OjpjcmVhdGUoKTsKKyAgICBpZiAobV9pc0RlZmF1bHRIYW5kbGVyKSB7CisgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6OkxhYmVsPiBkZWZhdWx0SGFuZGxlciA9IG1fZGVmYXVsdEhhbmRsZXI7Cisg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0LCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoKmRlZmF1bHRIYW5kbGVyKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gbV9oYW5k
bGU7CisgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygqcmVzdWx0
LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgfSk7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0V4Y2VwdGlvblRhcmdldDo6RXhjZXB0
aW9uVGFyZ2V0KAorICAgIGJvb2wgaXNEZWZhdWx0SGFuZGxlciwgQm94PENDYWxsSGVscGVyczo6
TGFiZWw+IGRlZmF1bHRIYW5kbGVyLCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlKQorICAg
IDogbV9pc0RlZmF1bHRIYW5kbGVyKGlzRGVmYXVsdEhhbmRsZXIpCisgICAgLCBtX2RlZmF1bHRI
YW5kbGVyKGRlZmF1bHRIYW5kbGVyKQorICAgICwgbV9oYW5kbGUoaGFuZGxlKQoreworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYg
RlRMX1VTRVNfQjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRp
b25UYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvblRhcmdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGNlcHRpb25UYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
RXhjZXB0aW9uVGFyZ2V0X2gKKyNkZWZpbmUgRlRMRXhjZXB0aW9uVGFyZ2V0X2gKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgi
CisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIFN0YXRlOwor
CitjbGFzcyBFeGNlcHRpb25UYXJnZXQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8RXhj
ZXB0aW9uVGFyZ2V0PiB7CitwdWJsaWM6CisgICAgfkV4Y2VwdGlvblRhcmdldCgpOworCisgICAg
Ly8gSXQncyBPSyB0byBjYWxsIHRoaXMgZHVyaW5nIGxpbmtpbmcsIGJ1dCBub3QgYW55IHNvb25l
ci4KKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbChMaW5rQnVmZmVyJik7CisKKyAgICAvLyBB
dCBhbnkgdGltZSwgeW91IGNhbiAKKworICAgIC8vIE9yLCB5b3UgY2FuIGdldCBhIEp1bXBMaXN0
IGF0IGFueSB0aW1lLiBBbnl0aGluZyB5b3UgYWRkIHRvIHRoaXMgSnVtcExpc3Qgd2lsbCBiZSBs
aW5rZWQgdG8KKyAgICAvLyB0aGUgdGFyZ2V0J3MgbGFiZWwuCisgICAgQm94PENDYWxsSGVscGVy
czo6SnVtcExpc3Q+IGp1bXBzKENDYWxsSGVscGVycyYpOworICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTsKKworICAgIEV4Y2VwdGlvblRh
cmdldChib29sIGlzRGVmYXVsdEhhbmRsZXIsIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiwgUmVm
UHRyPE9TUkV4aXRIYW5kbGU+KTsKKyAgICAKKyAgICBib29sIG1faXNEZWZhdWx0SGFuZGxlcjsK
KyAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gbV9kZWZhdWx0SGFuZGxlcjsKKyAgICBSZWZQ
dHI8T1NSRXhpdEhhbmRsZT4gbV9oYW5kbGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKworI2VuZGlm
IC8vIEZUTEV4Y2VwdGlvblRhcmdldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjgsNyAr
MTY4LDEzIEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKIFJlZ2lz
dGVyU2V0IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGlu
Z0NhbGxTaXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKIHsKICNp
ZiBGVExfVVNFU19CMwotICAgIFVOVVNFRF9QQVJBTShjYWxsU2l0ZUluZGV4KTsKKyAgICBmb3Ig
KE9TUkV4aXQmIGV4aXQgOiBvc3JFeGl0KSB7CisgICAgICAgIGlmIChleGl0Lm1fZXhjZXB0aW9u
SGFuZGxlckNhbGxTaXRlSW5kZXguYml0cygpID09IGNhbGxTaXRlSW5kZXguYml0cygpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1faXNFeGNlcHRpb25IYW5kbGVyKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQubV9pc1Vud2luZEhhbmRsZXIpOworICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwOjp1c2VkUmVnaXN0ZXJzKGV4aXQubV92YWx1ZVJlcHMpOwor
ICAgICAgICB9CisgICAgfQogI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICBmb3IgKE9TUkV4aXQm
IGV4aXQgOiBvc3JFeGl0KSB7CiAgICAgICAgIGlmIChleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNh
bGxTaXRlSW5kZXguYml0cygpID09IGNhbGxTaXRlSW5kZXguYml0cygpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCIK
ICNpbmNsdWRlICJGVExCM091dHB1dC5oIgorI2luY2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdldC5o
IgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1h
dHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCkBAIC00OSw2ICs1
MCw3IEBACiAjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAi
RlRMV2VpZ2h0ZWRUYXJnZXQuaCIKICNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKQEAgLTEz
OCw2ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBsb3dlcigpCiAgICAgeworICAg
ICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgCiAgICAgICAgIENTdHJp
bmcgbmFtZTsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewogICAg
ICAgICAgICAgbmFtZSA9IHRvQ1N0cmluZygKQEAgLTE0OSwxNiArMTUzLDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAKICNpZiAhRlRMX1VTRVNfQjMK
LSAgICAgICAgbV9mdGxTdGF0ZS5tb2R1bGUgPQotICAgICAgICAgICAgbW9kdWxlQ3JlYXRlV2l0
aE5hbWVJbkNvbnRleHQobmFtZS5kYXRhKCksIG1fZnRsU3RhdGUuY29udGV4dCk7CisgICAgICAg
IHN0YXRlLT5tb2R1bGUgPQorICAgICAgICAgICAgbW9kdWxlQ3JlYXRlV2l0aE5hbWVJbkNvbnRl
eHQobmFtZS5kYXRhKCksIHN0YXRlLT5jb250ZXh0KTsKICAgICAgICAgCi0gICAgICAgIG1fZnRs
U3RhdGUuZnVuY3Rpb24gPSBhZGRGdW5jdGlvbigKLSAgICAgICAgICAgIG1fZnRsU3RhdGUubW9k
dWxlLCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7Ci0gICAgICAgIHNl
dEZ1bmN0aW9uQ2FsbGluZ0NvbnYobV9mdGxTdGF0ZS5mdW5jdGlvbiwgTExWTUNDYWxsQ29udik7
CisgICAgICAgIHN0YXRlLT5mdW5jdGlvbiA9IGFkZEZ1bmN0aW9uKAorICAgICAgICAgICAgc3Rh
dGUtPm1vZHVsZSwgbmFtZS5kYXRhKCksIGZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCkpOworICAg
ICAgICBzZXRGdW5jdGlvbkNhbGxpbmdDb252KHN0YXRlLT5mdW5jdGlvbiwgTExWTUNDYWxsQ29u
dik7CiAgICAgICAgIGlmIChpc1g4NigpICYmIE9wdGlvbnM6Omxsdm1EaXNhbGxvd0FWWCgpKSB7
CiAgICAgICAgICAgICAvLyBBVlggbWFrZXMgVjgvcmF5dHJhY2UgODAlIHNsb3dlci4gSXQgbWFr
ZXMgS3Jha2VuL2F1ZGlvLW9zY2lsbGF0b3IgNC41eAogICAgICAgICAgICAgLy8gc2xvd2VyLiBJ
dCBzaG91bGQgYmUgZGlzYWJsZWQuCi0gICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRGdW5j
dGlvbkF0dHIobV9mdGxTdGF0ZS5mdW5jdGlvbiwgInRhcmdldC1mZWF0dXJlcyIsICItYXZ4Iik7
CisgICAgICAgICAgICBhZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIoc3RhdGUtPmZ1bmN0
aW9uLCAidGFyZ2V0LWZlYXR1cmVzIiwgIi1hdngiKTsKICAgICAgICAgfQogI2VuZGlmIC8vICFG
VExfVVNFU19CMwogICAgICAgICAKQEAgLTE2OCw3ICsxNzIsNyBAQCBwdWJsaWM6CiAjaWYgRlRM
X1VTRVNfQjMKICAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKICNlbHNlCi0gICAg
ICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5tb2R1bGUsIG1fZnRsU3RhdGUuZnVuY3Rp
b24sIG1faGVhcHMpOworICAgICAgICBtX291dC5pbml0aWFsaXplKHN0YXRlLT5tb2R1bGUsIHN0
YXRlLT5mdW5jdGlvbiwgbV9oZWFwcyk7CiAjZW5kaWYKIAogICAgICAgICAvLyBXZSB1c2UgcHJv
bG9ndWUgZnJlcXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCkBAIC0y
MDEsNyArMjA1LDcgQEAgcHVibGljOgogICAgICAgICBzaXplX3Qgc2l6ZU9mQ2FwdHVyZWQgPSBz
aXplb2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKICAgICAgICAgQjM6
OlN0YWNrU2xvdFZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6
ZU9mQ2FwdHVyZWQpOwogICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFz
ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKLSAgICAgICAgbV9mdGxTdGF0
ZS5jYXB0dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlOworICAgICAgICBzdGF0ZS0+Y2FwdHVyZWRW
YWx1ZSA9IGNhcHR1cmVkQmFzZTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIExWYWx1
ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9vdXQuaW50NjQsIG1f
Z3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7CiAgICAgICAgIApAQCAtMjA5LDkgKzIxMyw5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1fb3V0LnB0clRvSW50KGNhcHR1cmVkQWxsb2NhLCBtX291
dC5pbnRQdHIpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5tX25leHRN
YWNoaW5lTG9jYWwgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgICAgIAotICAgICAgICBtX2Z0
bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgc3Rh
dGUtPmNhcHR1cmVkU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgbV9vdXQu
Y2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNp
YygpLCBtX291dC5jb25zdEludDY0KG1fZnRsU3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSwKKyAg
ICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291
dC5jb25zdEludDY0KHN0YXRlLT5jYXB0dXJlZFN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9v
dXQuaW50MzJaZXJvLCBjYXB0dXJlZEFsbG9jYSk7CiAjZW5kaWYgLy8gRlRMX1VTRV9CMwogCkBA
IC0yODYsMTAgKzI5MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChoYXNWYXJhcmdzKSB7CiAg
ICAgICAgICAgICBMVmFsdWUgdmFyYXJnc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCiAgICAg
ICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBKU0NhbGxWYXJhcmdzOjpudW1TcGls
bFNsb3RzTmVlZGVkKCkpKTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUudmFyYXJnc1NwaWxsU2xv
dHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPnZhcmFy
Z3NTcGlsbFNsb3RzU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAgICAgIG1f
b3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFw
SW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRl
LnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCisgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQ2NChzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEKSwKICAgICAgICAgICAg
ICAgICBtX291dC5pbnQzMlplcm8sIHZhcmFyZ3NTcGlsbFNsb3RzKTsKICAgICAgICAgfQogCkBA
IC0zMDAsMTAgKzMwNCwxMCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIExWYWx1ZSBleGNlcHRp
b25IYW5kbGluZ1ZvbGF0aWxlUmVnaXN0ZXJzU3BpbGxTbG90cyA9IG1fb3V0LmFsbG9jYSgKICAg
ICAgICAgICAgICAgICBhcnJheVR5cGUobV9vdXQuaW50NjQsIG1heE51bWJlck9mQ2F0Y2hTcGls
bHMpKTsKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RT
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAgICAgICAgc3RhdGUtPmV4Y2VwdGlv
bkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKICAgICAgICAg
ICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0
YWNrbWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChtX2Z0
bFN0YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCksCisgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RT
dGFja21hcElEKSwKICAgICAgICAgICAgICAgICBtX291dC5pbnQzMlplcm8sIGV4Y2VwdGlvbkhh
bmRsaW5nVm9sYXRpbGVSZWdpc3RlcnNTcGlsbFNsb3RzKTsKICAgICAgICAgfQogI2VuZGlmIC8v
ICFGVExfVVNFU19CMwpAQCAtMzM3LDIxICszNDEsMzAgQEAgcHVibGljOgogI2lmIEZUTF9VU0VT
X0IzCiAgICAgICAgIC8vIEZJWE1FCiAjZWxzZQotICAgICAgICBtX2Z0bFN0YXRlLmhhbmRsZVN0
YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEID0gbV9zdGFja21hcElEcysrOworICAgICAg
ICBzdGF0ZS0+aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0YWNr
bWFwSURzKys7CiAgICAgICAgIG1fb3V0LmNhbGwoCiAgICAgICAgICAgICBtX291dC52b2lkVHlw
ZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQobV9mdGxTdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCksCisg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YXRlLT5oYW5kbGVTdGFja092ZXJmbG93RXhj
ZXB0aW9uU3RhY2ttYXBJRCksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3JvQXNz
ZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKICNlbmRpZgogICAgICAgICBtX291
dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5k
bGVFeGNlcHRpb25zLCBjaGVja0FyZ3VtZW50cyk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAg
Ly8gRklYTUUKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0
Y2hwb2ludChWb2lkKTsKKyAgICAgICAgYXV0byBleGNlcHRpb25IYW5kbGVyID0gc3RhdGUtPmV4
Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGppdC5q
dW1wKCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoKmV4Y2VwdGlv
bkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKICNl
bHNlCi0gICAgICAgIG1fZnRsU3RhdGUuaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1fc3Rh
Y2ttYXBJRHMrKzsKKyAgICAgICAgc3RhdGUtPmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQgPSBt
X3N0YWNrbWFwSURzKys7CiAgICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52
b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0
bFN0YXRlLmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQpLAorICAgICAgICAgICAgbV9vdXQudm9p
ZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQoc3RhdGUt
PmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CiAjZW5kaWYKICAg
ICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTQxOCwxMSArNDMxLDExIEBAIHB1YmxpYzoK
IAogI2lmICFGVExfVVNFU19CMwogICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigpKQot
ICAgICAgICAgICAgZHVtcE1vZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7CisgICAgICAgICAgICBk
dW1wTW9kdWxlKHN0YXRlLT5tb2R1bGUpOwogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQotICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFmdGVyIGxvd2Vy
aW5nIik7CisgICAgICAgICAgICBzdGF0ZS0+ZHVtcFN0YXRlKCJhZnRlciBsb3dlcmluZyIpOwog
ICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHZlcmlmeU1vZHVs
ZShtX2Z0bFN0YXRlLm1vZHVsZSk7CisgICAgICAgICAgICB2ZXJpZnlNb2R1bGUoc3RhdGUtPm1v
ZHVsZSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTE2NTYsNyArMTY2OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9CiAKICNpZiBGVExfVVNFU19CMwotICAgICAgICAgICAgQjM6OkNoZWNrVmFs
dWUqIHJlc3VsdCA9CisgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAgICAg
ICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNw
ZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJl
c3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKQEAgLTE3MTIsNyArMTcyNSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSk7CiAjaWYgRlRM
X1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiByZXN1bHQgPQorICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KICAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNw
ZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQp
OwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CkBA
IC0xODAzLDcgKzE4MTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0Lm11bChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBlbHNlIHsKICNpZiBGVExfVVNFU19C
MwotICAgICAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGlvbiA9IG1fb3V0LnNw
ZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgQ2hlY2tWYWx1ZSogc3Bl
Y3VsYXRpb24gPSBtX291dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAg
ICAgIGJsZXNzU3BlY3VsYXRpb24oc3BlY3VsYXRpb24sIE92ZXJmbG93LCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjdWxhdGlvbjsK
ICNlbHNlIC8vIEZUTF9VU0VTX0IzCkBAIC0xODM3LDcgKzE4NTAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwgb3Bwb3Np
dGUoa2luZCkpOwogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVl
KiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
Q2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKICAg
ICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX29yaWdpbik7CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgTFZh
bHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQubXVsV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQp
OwpAQCAtMjY0Myw4ICsyNjU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4NgogCiAgICAgICAgIEIzOjpQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoYmFzZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZCh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHZhbHVlKTsKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xv
YmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogCiAgICAgICAgIFN0
YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwpAQCAtNDI5MSw3ICs0MzA0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG51bUtpZHM7ICsraSkgewogICAgICAg
ICAgICAgZmxhZ3MgPSBtX291dC5iaXRBbmQoZmxhZ3MsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBt
X2hlYXBzLkpTU3RyaW5nX2ZsYWdzKSk7CiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIz
OjpDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNwZWN1bGF0ZUFkZCgKKyAgICAgICAg
ICAgIENoZWNrVmFsdWUqIGxlbmd0aENoZWNrID0gbV9vdXQuc3BlY3VsYXRlQWRkKAogICAgICAg
ICAgICAgICAgIGxlbmd0aCwgbV9vdXQubG9hZDMyKGtpZHNbaV0sIG1faGVhcHMuSlNTdHJpbmdf
bGVuZ3RoKSk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGxlbmd0aENoZWNrLCBVbmNv
dW50YWJsZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICBsZW5n
dGggPSBsZW5ndGhDaGVjazsKQEAgLTUyNjgsOCArNTI4MSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIEFwcGVuZCB0aGUgZm9ybXMgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IHdlIHdpbGwgdXNlIGJl
Zm9yZSBhbnkgY2xvYmJlcmluZyBoYXBwZW5zLgogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
anNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKTsKICAgICAgICAgaWYgKGpz
QXJndW1lbnRzKQotICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQXJndW1lbnRzLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHRoaXNB
cmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kU29tZVJlZ2lzdGVyKGpzQXJndW1lbnRzKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
U29tZVJlZ2lzdGVyKHRoaXNBcmcpOwogCiAgICAgICAgIGlmICghZm9yd2FyZGluZykgewogICAg
ICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGVtIGFnYWluIGZvciBhZnRlciBjbG9iYmVyaW5nLiBO
b3RlIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBhc2sgdXMgdG8gdXNlIGEKQEAgLTYxMjYsNyArNjEz
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9
IGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBs
KCkpOwogI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChjZWxsLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoY2VsbCk7CiAgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOwogCiAgICAgICAgICAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7
CkBAIC03MjA1LDIxICs3MjE4LDM2IEBAIHByaXZhdGU6CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigp
XTsKIAogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhj
ZXB0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTY4NgotICAgICAgICAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQoYmFzZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBh
IEdldEJ5SWRGbHVzaCwgd2UgbWlnaHQgZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYm9vc3QgaWYgd2Ug
Y2xhaW0gdGhhdCBpdAorICAgICAgICAvLyBjbG9iYmVycyB2b2xhdGlsZSByZWdpc3RlcnMgbGF0
ZS4gSXQncyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgdGhvdWdoLCBzaW5jZSB0aGUK
KyAgICAgICAgLy8gSUMgY29kZSBpcyBzdXBlciBzbWFydCBhYm91dCBzYXZpbmcgcmVnaXN0ZXJz
LgorICAgICAgICAKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9p
bnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworCiAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZt
X2Z0bFN0YXRlOwogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCiAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewogICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2Fn
ZSBhbGxvd1NjcmF0Y2goaml0KTsKIAorICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24u
YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGlyZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24g
Y2FsbHMuIEl0J3MgYSBwb2ludGVyIHRvIGEgSnVtcExpc3QuCisgICAgICAgICAgICAgICAgYXV0
byBleGNlcHRpb25zID0gZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJh
bXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBm
b3IgY2FsbCBJQydzIGNyZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0
IGhhdmUKKyAgICAgICAgICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFu
IGNhbGwgdGhpcywgc2luY2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAorICAgICAg
ICAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbmRleC4KKyAgICAgICAgICAgICAgICBleGNlcHRp
b25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJ
bmRleCk7CisKICAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlk
R2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCks
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENv
ZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyks
CisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBjYWxsU2l0ZUluZGV4LAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CiAKQEAgLTcyMjksMTUgKzcy
NTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCiAg
ICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2go
aml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IE1ha2UgdGhpcyBkbyBzb21ldGhpbmcuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbnM7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJl
bCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRl
LCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50
aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2VwdGlvbnMsIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcGFyYW1zWzBd
LmdwcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNh
bGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZq
aXQpOwpAQCAtNzUyNCw4ICs3NTQ5LDggQEAgcHJpdmF0ZToKICAgICAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlw
ZSgpKTsKICAgICAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGxl
ZnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
cmlnaHQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIobGVmdCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihyaWdodCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVl
UmVwOjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cyA9IDE7CkBAIC03NTgyLDggKzc2MDcsOCBAQCBwcml2YXRlOgogICAgICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRU
eXBlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bGVmdCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChyaWdodCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJl
Z2lzdGVyKHJpZ2h0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKQEAgLTc2MzQsOCArNzY1OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3Vs
dFR5cGUoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChsZWZ0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKHJpZ2h0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21l
UmVnaXN0ZXIocmlnaHQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBwYXRjaHBv
aW50LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdp
c3RlcnMgPSAxOwpAQCAtMTAxMzIsNyArMTAxNTcsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKICAgICB9CiAKLSNpZiAhRlRMX1VTRVNfQjMKKyNp
ZiBGVExfVVNFU19CMworICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsKKyAgICAgICAgSGFuZGxlckluZm8q
IGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9n
cmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JFeGl0LCBv
cENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKKyAgICAgICAgaWYgKCF3aWxsQ2F0Y2hF
eGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6
ZGVmYXVsdEhhbmRsZShtX2Z0bFN0YXRlKTsKKworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgUGF0Y2hwb2ludCBleGNl
cHRpb24gT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3Jz
LnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIp
OworICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxp
c3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBleGl0T0sgPSB0cnVlOworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyk7CisKKyAgICAg
ICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2Ny
aXB0b3Iobm9WYWx1ZSgpLCBudWxscHRyKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQgaW50byB0aGUgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zIHdoZXJlIHdlIHdpbGwgZmluZCB0
aGUgZXhpdCBhcmd1bWVudHMKKyAgICAgICAgLy8gd2UgYXJlIGFib3V0IHRvIGFwcGVuZC4gV2Ug
bmVlZCB0byBhY2NvdW50IGZvciBib3RoIHRoZSBjaGlsZHJlbiB3ZSd2ZSBhbHJlYWR5IGFkZGVk
LCBhbmQKKyAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJlc3VsdCB2YWx1ZSBp
ZiB0aGUgcGF0Y2hwb2ludCBpcyBub3Qgdm9pZC4KKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
dmFsdWUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQp
CisgICAgICAgICAgICBvZmZzZXQrKzsKKyAgICAgICAgCisgICAgICAgIHZhbHVlLT5hcHBlbmRW
ZWN0b3JXaXRoUmVwKAorICAgICAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlw
dG9yLCBvcENhdGNoT3JpZ2luLCBub1ZhbHVlKCkpLAorICAgICAgICAgICAgVmFsdWVSZXA6Okxh
dGVDb2xkQW55KTsKKworICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6
Y3JlYXRlKAorICAgICAgICAgICAgbV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwg
b2Zmc2V0LCAqZXhjZXB0aW9uSGFuZGxlcik7CisgICAgfQorI2Vsc2UgLy8gRlRMX1VTRVNfQjMK
ICAgICB2b2lkIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hF
eGNlcHRpb24oU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBl
eGNlcHRpb25UeXBlLCB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCiAgICAgewogICAg
ICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CkBAIC0xMDE1Myw3ICsxMDIxMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIGV4
aXREZXNjcmlwdG9ySW1wbC5tX2NvZGVPcmlnaW4sIG5vVmFsdWUoKSwgb2Zmc2V0T2ZFeGl0QXJn
dW1lbnRzKTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZFZlY3RvcihmcmVzaExpc3QpOwogICAg
IH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBGVExfVVNFU19CMwogCiAgICAg
TEJhc2ljQmxvY2sgbG93QmxvY2soREZHOjpCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CkBAIC0x
MDI0NSw3ICsxMDMwNCw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgRlRMX1VTRVNfQjMKLSAg
ICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQjM6OkNoZWNrVmFsdWUqIHZhbHVlLCBFeGl0S2luZCBr
aW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2lu
IG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKKyAgICB2b2lkIGJsZXNz
U3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlz
RXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQogICAgIHsKICAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhp
Z2hWYWx1ZSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpICYmIEZUTF9VU0VTX0IzCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cy5oIgorI2luY2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdldC5oIgorI2luY2x1ZGUgIkZUTE9TUkV4
aXQuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2Ug
REZHOworCitSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZTo6Y3JlYXRlKAorICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2NyaXB0b3Iq
IGRlc2NyaXB0b3IsIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsCisgICAgY29u
c3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlKHN0YXRlLCBkZXNjcmlwdG9yLCBvcmlnaW4sIG9mZnNldCwg
aGFuZGxlcikpOworfQorCitSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZShTdGF0ZSYgc3RhdGUpCit7CisgICAg
aWYgKCFzdGF0ZS5kZWZhdWx0RXhjZXB0aW9uSGFuZGxlKSB7CisgICAgICAgIHN0YXRlLmRlZmF1
bHRFeGNlcHRpb25IYW5kbGUgPSBhZG9wdFJlZigKKyAgICAgICAgICAgIG5ldyBQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlKHN0YXRlLCBudWxscHRyLCBOb2RlT3JpZ2luKCksIDAsIEhhbmRsZXJJ
bmZvKCkpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLmRlZmF1bHRFeGNlcHRpb25IYW5kbGU7
Cit9CisKK1BhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6On5QYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlKCkKK3sKK30KKworUmVmUHRyPEV4Y2VwdGlvblRhcmdldD4gUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZTo6c2NoZWR1bGVFeGl0Q3JlYXRpb24oCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKQoreworICAgIGlmICghbV9kZXNjcmlwdG9yKSB7CisgICAg
ICAgIC8vIE5PVEU6IFRoaXMgb2JqZWN0IGNvdWxkIGJlIGEgc2luZ2xldG9uLCBob3dldmVyIHVz
dWFsbHkgd2UgdG9zcyB0aGUgRXhjZXB0aW9uSGFuZGxlcgorICAgICAgICAvLyBvYmplY3Qgc2hv
cnRseSBhZnRlciBjcmVhdGlvbi4KKyAgICAgICAgYm9vbCBpc0RlZmF1bHRIYW5kbGVyID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKAorICAgICAgICAgICAgbmV3IEV4Y2VwdGlvblRh
cmdldChpc0RlZmF1bHRIYW5kbGVyLCBtX3N0YXRlLmV4Y2VwdGlvbkhhbmRsZXIsIG51bGxwdHIp
KTsKKyAgICB9CisgICAgYm9vbCBpc0RlZmF1bHRIYW5kbGVyID0gZmFsc2U7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBFeGNlcHRpb25UYXJnZXQoaXNEZWZhdWx0SGFuZGxlciwgeyB9LCBjcmVh
dGVIYW5kbGUocGFyYW1zKSkpOworfQorCit2b2lkIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6
OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKAorICAgIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQorewor
ICAgIGlmICghbV9kZXNjcmlwdG9yKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRy
PE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IGNyZWF0ZUhhbmRsZShwYXJhbXMpOworCisgICAgaGFu
ZGxlLT5leGl0Lm1faXNVbndpbmRIYW5kbGVyID0gdHJ1ZTsKKyAgICBoYW5kbGUtPmV4aXQubV9l
eGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5kZXg7CisKKyAgICBIYW5k
bGVySW5mbyBoYW5kbGVyID0gbV9oYW5kbGVyOworICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAg
ICAgICAgW2hhbmRsZSwgaGFuZGxlciwgY2FsbFNpdGVJbmRleF0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsK
KyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICBbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gbmV3
SGFuZGxlciA9IGhhbmRsZXI7CisgICAgICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3RhcnQg
PSBjYWxsU2l0ZUluZGV4LmJpdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5l
bmQgPSBjYWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7CisgICAgICAgICAgICAgICAgICAgIG5ld0hh
bmRsZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKTsK
KyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBlbmRFeGNlcHRpb25IYW5kbGVyKG5l
d0hhbmRsZXIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKK30KKworUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSgKKyAgICBTdGF0
ZSYgc3RhdGUsIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLCBOb2RlT3JpZ2luIG9yaWdp
biwgdW5zaWduZWQgb2Zmc2V0LAorICAgIGNvbnN0IEhhbmRsZXJJbmZvJiBoYW5kbGVyKQorICAg
IDogbV9zdGF0ZShzdGF0ZSkKKyAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQorICAgICwg
bV9vcmlnaW4ob3JpZ2luKQorICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9oYW5kbGVy
KGhhbmRsZXIpCit7Cit9CisKK1JlZlB0cjxPU1JFeGl0SGFuZGxlPiBQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlOjpjcmVhdGVIYW5kbGUoCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKQoreworICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsK
KyAgICByZXR1cm4gbV9kZXNjcmlwdG9yLT5lbWl0T1NSRXhpdExhdGVyKAorICAgICAgICBtX3N0
YXRlLCBVbmNvdW50YWJsZSwgbV9vcmlnaW4sIHBhcmFtcywgbV9vZmZzZXQsIGlzRXhjZXB0aW9u
SGFuZGxlcik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZV9oCisjZGVmaW5lIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGVf
aAorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRM
X1VTRVNfQjMKKworI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJIYW5kbGVy
SW5mby5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCMyB7CitjbGFzcyBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXM7Cit9IC8vIG5hbWVzcGFjZSBCMworCituYW1lc3BhY2Ug
RlRMIHsKKworY2xhc3MgRXhjZXB0aW9uVGFyZ2V0OworY2xhc3MgU3RhdGU7CitzdHJ1Y3QgT1NS
RXhpdERlc2NyaXB0b3I7CitzdHJ1Y3QgT1NSRXhpdEhhbmRsZTsKKworY2xhc3MgUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlPiBjcmVhdGUoCisgICAgICAgIFN0YXRlJiwgT1NSRXhpdERlc2NyaXB0
b3IqLCBERkc6Ok5vZGVPcmlnaW4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgSGFuZGxlckluZm8m
KTsKKworICAgIHN0YXRpYyBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZGVmYXVs
dEhhbmRsZShTdGF0ZSYpOworICAgIAorICAgIH5QYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKCk7
CisKKyAgICAvLyBOb3RlIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBoYW5kbGUgdG8gc2NoZWR1bGUg
YW55IG51bWJlciBvZiBleGl0cy4gVGhpcyBjYXBhYmlsaXR5IGlzIGhlcmUgZm9yCisgICAgLy8g
dHdvIHJlYXNvbnM6CisgICAgLy8gCisgICAgLy8gLSBCMyBjb2RlIGR1cGxpY2F0aW9uLiBCMyBj
b3VsZCB0YWtlIGEgcGF0Y2hwb2ludCBhbmQgdHVybiBpdCBpbnRvIG11bHRpcGxlIHBhdGNocG9p
bnRzIGlmIGl0CisgICAgLy8gICBkdXBsaWNhdGVzIGNvZGUuIER1cGxpY2F0aW5nIGNvZGUgaXMg
bGVnYWwgc2luY2UgeW91IGNhbiBkbyBpdCB3aXRob3V0IGNoYW5naW5nIHRoZSBiZWhhdmlvcgor
ICAgIC8vICAgb2YgdGhlIHByb2dyYW0uIE9uZSBleGFtcGxlIGlzIHRhaWwgZHVwbGljYXRpb24u
IEFub3RoZXIgaXMganVtcCB0aHJlYWRpbmcuIFlldCBhbm90aGVyIGlzCisgICAgLy8gICBwYXRo
IHNwZWNpYWxpemF0aW9uLiBZb3Ugd2lsbCBoYXZlIG9uZSBQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlIHBlciBwYXRjaHBvaW50IHlvdSBjcmVhdGUKKyAgICAvLyAgIGR1cmluZyBERkctPkIzIGxv
d2VyaW5nLCBhbmQgdGhhdCBwYXRjaHBvaW50IHdpbGwgaGF2ZSBhIGdlbmVyYXRvciB0aGF0IGNh
bGxzCisgICAgLy8gICBoYW5kbGUtPnNjaGVkdWxlQmxhaCgpLiBUaGF0IGdlbmVyYXRvciB3aWxs
IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiB5b3VyIHBhdGNocG9pbnQgZ290CisgICAgLy8g
ICBkdXBsaWNhdGVkLgorICAgIC8vCisgICAgLy8gLSBDb21iaW5hdGlvbiBvZiB1bndpbmQgYW5k
IG5vbi11bndpbmQgZXhjZXB0aW9uIGhhbmRsZXJzIGluc2lkZSBvbmUgcGF0Y2hwb2ludC4gQSBH
ZXRCeUlkIG1heQorICAgIC8vICAgbmVlZCBib3RoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQg
c2VydmVzIGFzIGFuIHVud2luZCB0YXJnZXQgYW5kIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRoYXQK
KyAgICAvLyAgIGlzIGJyYW5jaGVkIHRvIGRpcmVjdGx5IGZvciBvcGVyYXRpb24gY2FsbHMgZW1p
dHRlZCBpbnNpZGUgdGhlIHBhdGNocG9pbnQuIEluIHRoYXQgY2FzZSwKKyAgICAvLyAgIHlvdSds
bCBjYWxsIGJvdGggc2NoZWR1bGVFeGl0Q3JlYXRpb24oKSBhbmQgc2NoZWR1bGVFeGl0Q3JlYXRp
b25Gb3JVbndpbmQoKSBvbiB0aGUgc2FtZQorICAgIC8vICAgaGFuZGxlLgorCisgICAgLy8gU2No
ZWR1bGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBPU1IgZXhpdCBqdW1wIGRlc3RpbmF0aW9uLiBZb3Ug
ZG9uJ3Qga25vdyB3aGVuIHRoaXMgd2lsbCBiZQorICAgIC8vIGNyZWF0ZWQsIGJ1dCBpdCB3aWxs
IGhhcHBlbiBiZWZvcmUgbGlua2luZy4gWW91IGNhbiBsaW5rIGp1bXBzIHRvIGl0IGR1cmluZyBs
aW5rIHRpbWUuIFRoYXQncworICAgIC8vIHdoeSB0aGlzIHJldHVybnMgYW4gRXhjZXB0aW9uVGFy
Z2V0LiBUaGF0IHdpbGwgY29udGFpbiB0aGUganVtcCBkZXN0aW5hdGlvbiAodGFyZ2V0LT5sYWJl
bCgpKQorICAgIC8vIGF0IGxpbmsgdGltZS4KKyAgICBSZWZQdHI8RXhjZXB0aW9uVGFyZ2V0PiBz
Y2hlZHVsZUV4aXRDcmVhdGlvbihjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJik7
CisKKyAgICAvLyBTY2hlZHVsZXMgdGhlIGNyZWF0aW9uIG9mIGFuIE9TUiBleGl0IGp1bXAgZGVz
dGluYXRpb24sIGFuZCBlbnN1cmVzIHRoYXQgaXQgZ2V0cyBhc3NvY2lhdGVkCisgICAgLy8gd2l0
aCB0aGUgaGFuZGxlciBmb3Igc29tZSBjYWxsc2l0ZSBpbmRleC4KKyAgICB2b2lkIHNjaGVkdWxl
RXhpdENyZWF0aW9uRm9yVW53aW5kKGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
LCBDYWxsU2l0ZUluZGV4KTsKKworcHJpdmF0ZToKKyAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlKAorICAgICAgICBTdGF0ZSYsIE9TUkV4aXREZXNjcmlwdG9yKiwgREZHOjpOb2RlT3JpZ2lu
LCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IEhhbmRsZXJJbmZvJik7CisKKyAgICBSZWZQdHI8T1NS
RXhpdEhhbmRsZT4gY3JlYXRlSGFuZGxlKGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKTsKKworICAgIFN0YXRlJiBtX3N0YXRlOworICAgIE9TUkV4aXREZXNjcmlwdG9yKiBtX2Rl
c2NyaXB0b3I7CisgICAgREZHOjpOb2RlT3JpZ2luIG1fb3JpZ2luOworICAgIHVuc2lnbmVkIG1f
b2Zmc2V0OworICAgIEhhbmRsZXJJbmZvIG1faGFuZGxlcjsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMwor
CisjZW5kaWYgLy8gRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lvbiAxOTQ2NjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgorI2lu
Y2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIKICNpbmNsdWRlIDxsbHZtL0lu
aXRpYWxpemVMTFZNLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNiArNDAsNyBAQAog
I2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNpbmNsdWRlICJGVExKU1RhaWxDYWxsLmgi
CiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCisjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUxLDYgKzUyLDgg
QEAgY2xhc3MgU3RhY2tTbG90VmFsdWU7CiAKIG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlOworCiBpbmxpbmUgYm9vbCB2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkKIHsKICAgICByZXR1cm4gREZHOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKERG
Rzo6RlRMTW9kZSk7CkBAIC04Miw4ICs4NSwxMCBAQCBwdWJsaWM6CiAgICAgR2VuZXJhdGVkRnVu
Y3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CiAgICAgSklURmluYWxpemVyKiBmaW5hbGl6ZXI7CiAj
aWYgRlRMX1VTRVNfQjMKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBoYW5kbGVTdGFja092ZXJm
bG93RXhjZXB0aW9uVmFsdWUgeyBudWxscHRyIH07Ci0gICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
aGFuZGxlRXhjZXB0aW9uVmFsdWUgeyBudWxscHRyIH07CisgICAgLy8gVG9wLWxldmVsIGV4Y2Vw
dGlvbiBoYW5kbGVyLiBKdW1wIGhlcmUgaWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSB0byBnZW5l
cmljVW53aW5kKCkgYW5kIHRoZXJlCisgICAgLy8gYXJlIG5vIGFwcGxpY2FibGUgY2F0Y2ggYmxv
Y2tzIGFueXdoZXJlIGluIHRoZSBHcmFwaC4KKyAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZT4gZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZTsKKyAgICBCb3g8Q0NhbGxIZWxwZXJzOjpM
YWJlbD4gZXhjZXB0aW9uSGFuZGxlciB7IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRl
KCkgfTsKICAgICBCMzo6U3RhY2tTbG90VmFsdWUqIGNhcHR1cmVkVmFsdWUgeyBudWxscHRyIH07
CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHVuc2lnbmVkIGhhbmRsZVN0YWNrT3ZlcmZsb3dF
eGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0aW9uLWludGVyZXN0
aW5nLWxpdmUtc3RhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLWdldHRlci1leGNlcHRpb24taW50ZXJlc3RpbmctbGl2
ZS1zdGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0aW9uLWludGVyZXN0aW5nLWxpdmUtc3Rh
dGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorZnVuY3Rpb24gZm9vKG8sIHAp
IHsKKyAgICB2YXIgeCA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMTAxOworICAgIHZhciBwZiA9
IHAuZzsKKyAgICB0cnkgeworICAgICAgICB4ID0gMTAyOworICAgICAgICBwZisrOworICAgICAg
ICByZXN1bHQgPSBvLmY7CisgICAgICAgIG8gPSAxMDQ7CisgICAgICAgIHBmKys7CisgICAgICAg
IHggPSAxMDY7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICByZXR1cm4ge291dGNvbWU6ICJl
eGNlcHRpb24iLCB2YWx1ZXM6IFtvLCBwZiwgeCwgcmVzdWx0XX07CisgICAgfQorICAgIHJldHVy
biB7b3V0Y29tZTogInJldHVybiIsIHZhbHVlczogW28sIHBmLCB4LCByZXN1bHRdfTsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworLy8gV2FybSB1cCBmb28oKSB3aXRoIHBvbHltb3JwaGljIG9iamVj
dHMgYW5kIGdldHRlcnMuCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAg
dmFyIG8gPSB7fTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuIDEwNzsKKyAgICB9KTsKKyAgICBpZiAoaSAmIDEpCisgICAgICAgIG9bImki
ICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZhciByZXN1bHQgPSBmb28o
bywge2c6MjAwfSk7CisgICAgaWYgKHJlc3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAg
ICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7
CisgICAgaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJy
b3IgaW4gbG9vcDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0
aDsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJy
b3IgaW4gbG9vcDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYg
KHJlc3VsdC52YWx1ZXNbMV0gIT09IDIwMikKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6
IGJhZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFs
dWVzWzJdICE9PSAxMDYpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVz
WzJdOiAiICsgcmVzdWx0LnZhbHVlc1syXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0g
MTA3KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJl
c3VsdC52YWx1ZXNbM107Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgbyA9
IHt9Oworby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgIkVy
cm9yNDIiOworfSk7Cit2YXIgcmVzdWx0ID0gZm9vKG8sIHtnOjMwMH0pOworaWYgKHJlc3VsdC5v
dXRjb21lICE9PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0
Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0
KQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVz
dWx0LnZhbHVlcy5sZW5ndGg7CitpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gbykKKyAgICB0aHJv
dyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzBdOiAiICsgcmVzdWx0LnZhbHVlc1swXTsKK2lm
IChyZXN1bHQudmFsdWVzWzFdICE9PSAzMDEpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFk
IHZhbHVlc1sxXTogIiArIHJlc3VsdC52YWx1ZXNbMV07CitpZiAocmVzdWx0LnZhbHVlc1syXSAh
PT0gMTAyKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1
bHQudmFsdWVzWzJdOworaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IDEwMSkKKyAgICB0aHJvdyAi
RXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLWdldHRl
ci1leGNlcHRpb24tbm8tY2F0Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLWdldHRlci1leGNlcHRpb24tbm8tY2F0Y2gu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0
bC1nZXQtYnktaWQtZ2V0dGVyLWV4Y2VwdGlvbi1uby1jYXRjaC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzIEBACitmdW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4ID0gMTAwOwor
ICAgIHZhciByZXN1bHQgPSAxMDE7CisgICAgeCA9IDEwMjsKKyAgICBwID0gMTAzOworICAgIHJl
c3VsdCA9IG8uZjsKKyAgICBvID0gMTA0OworICAgIHAgPSAxMDU7CisgICAgeCA9IDEwNjsKKyAg
ICByZXR1cm4ge291dGNvbWU6ICJyZXR1cm4iLCB2YWx1ZXM6IFtvLCBwLCB4LCByZXN1bHRdfTsK
K30KKworbm9JbmxpbmUoZm9vKTsKKworLy8gV2FybSB1cCBmb28oKSB3aXRoIHBvbHltb3JwaGlj
IG9iamVjdHMgYW5kIGdldHRlcnMuCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7
CisgICAgdmFyIG8gPSB7fTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgcmV0dXJuIDEwNzsKKyAgICB9KTsKKyAgICBpZiAoaSAmIDEpCisgICAgICAg
IG9bImkiICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZhciByZXN1bHQg
PSBmb28obyk7CisgICAgaWYgKHJlc3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAgICAg
dGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7Cisg
ICAgaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsK
KyAgICBpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYgKHJl
c3VsdC52YWx1ZXNbMV0gIT09IDEwNSkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJh
ZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFsdWVz
WzJdICE9PSAxMDYpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzJd
OiAiICsgcmVzdWx0LnZhbHVlc1syXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0gMTA3
KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3Vs
dC52YWx1ZXNbM107Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgcmVzdWx0
OwordHJ5IHsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1
bmN0aW9uKCkgeworICAgICAgICB0aHJvdyAiRXJyb3I0MiI7CisgICAgfSk7CisgICAgcmVzdWx0
ID0gZm9vKG8sIDEwOCk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKGUgIT0gIkVycm9yNDIiKQor
ICAgICAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgZXhjZXB0aW9uOiAiICsgZTsKKyAgICBy
ZXN1bHQgPSB7b3V0Y29tZTogImV4Y2VwdGlvbiJ9OworfQoraWYgKHJlc3VsdC5vdXRjb21lICE9
PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiAr
IHJlc3VsdC5vdXRjb21lOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2Z0bC1nZXQtYnktaWQtZ2V0dGVyLWV4Y2VwdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtZ2V0dGVyLWV4Y2Vw
dGlvbi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjAgQEAKK2Z1bmN0aW9uIGZvbyhvLCBwKSB7CisgICAgdmFyIHggPSAxMDA7CisgICAg
dmFyIHJlc3VsdCA9IDEwMTsKKyAgICB0cnkgeworICAgICAgICB4ID0gMTAyOworICAgICAgICBw
ID0gMTAzOworICAgICAgICByZXN1bHQgPSBvLmY7CisgICAgICAgIG8gPSAxMDQ7CisgICAgICAg
IHAgPSAxMDU7CisgICAgICAgIHggPSAxMDY7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBy
ZXR1cm4ge291dGNvbWU6ICJleGNlcHRpb24iLCB2YWx1ZXM6IFtvLCBwLCB4LCByZXN1bHRdfTsK
KyAgICB9CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0dXJuIiwgdmFsdWVzOiBbbywgcCwgeCwg
cmVzdWx0XX07Cit9CisKK25vSW5saW5lKGZvbyk7CisKKy8vIFdhcm0gdXAgZm9vKCkgd2l0aCBw
b2x5bW9ycGhpYyBvYmplY3RzIGFuZCBnZXR0ZXJzLgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAxMDc7CisgICAgfSk7CisgICAgaWYgKGkgJiAx
KQorICAgICAgICBvWyJpIiArIGldID0gaTsgLy8gTWFrZSBpdCBwb2x5bW9ycGhpYy4KKyAgICB2
YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQub3V0Y29tZSAhPT0gInJldHVybiIp
CisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5v
dXRjb21lOworICAgIGlmIChyZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVl
cy5sZW5ndGg7CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IDEwNCkKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOwor
ICAgIGlmIChyZXN1bHQudmFsdWVzWzFdICE9PSAxMDUpCisgICAgICAgIHRocm93ICJFcnJvciBp
biBsb29wOiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0LnZhbHVlc1sxXTsKKyAgICBpZiAocmVz
dWx0LnZhbHVlc1syXSAhPT0gMTA2KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNb
M10gIT09IDEwNykKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbM106
ICIgKyByZXN1bHQudmFsdWVzWzNdOworfQorCisvLyBOb3cgdGhyb3cgYW4gZXhjZXB0aW9uLgor
dmFyIG8gPSB7fTsKK28uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeworICAgIHRo
cm93ICJFcnJvcjQyIjsKK30pOwordmFyIHJlc3VsdCA9IGZvbyhvLCAxMDgpOworaWYgKHJlc3Vs
dC5vdXRjb21lICE9PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQg
b3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9
PSA0KQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsg
cmVzdWx0LnZhbHVlcy5sZW5ndGg7CitpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gbykKKyAgICB0
aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzBdOiAiICsgcmVzdWx0LnZhbHVlc1swXTsK
K2lmIChyZXN1bHQudmFsdWVzWzFdICE9PSAxMDMpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDog
YmFkIHZhbHVlc1sxXTogIiArIHJlc3VsdC52YWx1ZXNbMV07CitpZiAocmVzdWx0LnZhbHVlc1sy
XSAhPT0gMTAyKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1ZXNbMl06ICIgKyBy
ZXN1bHQudmFsdWVzWzJdOworaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IDEwMSkKKyAgICB0aHJv
dyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLXNs
b3ctZXhjZXB0aW9uLWludGVyZXN0aW5nLWxpdmUtc3RhdGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLXNsb3ctZXhjZXB0
aW9uLWludGVyZXN0aW5nLWxpdmUtc3RhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtc2xvdy1leGNlcHRpb24taW50
ZXJlc3RpbmctbGl2ZS1zdGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACitm
dW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4ID0gMTAwOworICAgIHZhciByZXN1bHQgPSAx
MDE7CisgICAgdmFyIHBmID0gcC5nOworICAgIHRyeSB7CisgICAgICAgIHggPSAxMDI7CisgICAg
ICAgIHBmKys7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAgICAgICAgbyA9IDEwNDsKKyAgICAg
ICAgcGYrKzsKKyAgICAgICAgeCA9IDEwNjsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJl
dHVybiB7b3V0Y29tZTogImV4Y2VwdGlvbiIsIHZhbHVlczogW28sIHBmLCB4LCByZXN1bHRdfTsK
KyAgICB9CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0dXJuIiwgdmFsdWVzOiBbbywgcGYsIHgs
IHJlc3VsdF19OworfQorCitub0lubGluZShmb28pOworCisvLyBXYXJtIHVwIGZvbygpIHdpdGgg
cG9seW1vcnBoaWMgb2JqZWN0cy4KK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsK
KyAgICB2YXIgbzsKKyAgICBvID0ge2Y6MTA3fTsKKyAgICBvWyJpIiArIGldID0gaTsgLy8gTWFr
ZSBpdCBwb2x5bW9ycGhpYy4KKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8sIHtnOjIwMH0pOworICAg
IGlmIChyZXN1bHQub3V0Y29tZSAhPT0gInJldHVybiIpCisgICAgICAgIHRocm93ICJFcnJvciBp
biBsb29wOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworICAgIGlmIChyZXN1bHQu
dmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBu
dW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7CisgICAgaWYgKHJlc3Vs
dC52YWx1ZXNbMF0gIT09IDEwNCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2
YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworICAgIGlmIChyZXN1bHQudmFsdWVzWzFd
ICE9PSAyMDIpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzFdOiAi
ICsgcmVzdWx0LnZhbHVlc1sxXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1syXSAhPT0gMTA2KQor
ICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1syXTogIiArIHJlc3VsdC52
YWx1ZXNbMl07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IDEwNykKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbM106ICIgKyByZXN1bHQudmFsdWVzWzNdOwor
fQorCisvLyBOb3cgdGhyb3cgYW4gZXhjZXB0aW9uLgordmFyIG8gPSB7fTsKK28uX19kZWZpbmVH
ZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeworICAgIHRocm93ICJFcnJvcjQyIjsKK30pOwordmFy
IHJlc3VsdCA9IGZvbyhvLCB7ZzozMDB9KTsKK2lmIChyZXN1bHQub3V0Y29tZSAhPT0gImV4Y2Vw
dGlvbiIpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIG91dGNvbWU6ICIgKyByZXN1bHQu
b3V0Y29tZTsKK2lmIChyZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICB0aHJvdyAiRXJy
b3IgYXQgZW5kOiBiYWQgbnVtYmVyIG9mIHZhbHVlczogIiArIHJlc3VsdC52YWx1ZXMubGVuZ3Ro
OworaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IG8pCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDog
YmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CitpZiAocmVzdWx0LnZhbHVlc1sx
XSAhPT0gMzAxKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1ZXNbMV06ICIgKyBy
ZXN1bHQudmFsdWVzWzFdOworaWYgKHJlc3VsdC52YWx1ZXNbMl0gIT09IDEwMikKKyAgICB0aHJv
dyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzJdOiAiICsgcmVzdWx0LnZhbHVlc1syXTsKK2lm
IChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDEpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFk
IHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107CisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi1uby1jYXRj
aC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0
bC1nZXQtYnktaWQtc2xvdy1leGNlcHRpb24tbm8tY2F0Y2guanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtc2xvdy1leGNl
cHRpb24tbm8tY2F0Y2guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorZnVuY3Rp
b24gZm9vKG8sIHApIHsKKyAgICB2YXIgeCA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMTAxOwor
ICAgIHggPSAxMDI7CisgICAgcCA9IDEwMzsKKyAgICByZXN1bHQgPSBvLmY7CisgICAgbyA9IDEw
NDsKKyAgICBwID0gMTA1OworICAgIHggPSAxMDY7CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0
dXJuIiwgdmFsdWVzOiBbbywgcCwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5saW5lKGZvbyk7CisK
Ky8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzLgorZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvOworICAgIG8gPSB7ZjoxMDd9OworICAg
IG9bImkiICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZhciByZXN1bHQg
PSBmb28obyk7CisgICAgaWYgKHJlc3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAgICAg
dGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7Cisg
ICAgaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsK
KyAgICBpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYgKHJl
c3VsdC52YWx1ZXNbMV0gIT09IDEwNSkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJh
ZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFsdWVz
WzJdICE9PSAxMDYpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzJd
OiAiICsgcmVzdWx0LnZhbHVlc1syXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0gMTA3
KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3Vs
dC52YWx1ZXNbM107Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgcmVzdWx0
OwordHJ5IHsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1
bmN0aW9uKCkgeworICAgICAgICB0aHJvdyAiRXJyb3I0MiI7CisgICAgfSk7CisgICAgcmVzdWx0
ID0gZm9vKG8sIDEwOCk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKGUgIT0gIkVycm9yNDIiKQor
ICAgICAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgZXhjZXB0aW9uOiAiICsgZTsKKyAgICBy
ZXN1bHQgPSB7b3V0Y29tZTogImV4Y2VwdGlvbiJ9OworfQoraWYgKHJlc3VsdC5vdXRjb21lICE9
PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiAr
IHJlc3VsdC5vdXRjb21lOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9mdGwtZ2V0LWJ5LWlkLXNsb3ctZXhjZXB0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRs
LWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3
IEBACitmdW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4ID0gMTAwOworICAgIHZhciByZXN1
bHQgPSAxMDE7CisgICAgdHJ5IHsKKyAgICAgICAgeCA9IDEwMjsKKyAgICAgICAgcCA9IDEwMzsK
KyAgICAgICAgcmVzdWx0ID0gby5mOworICAgICAgICBvID0gMTA0OworICAgICAgICBwID0gMTA1
OworICAgICAgICB4ID0gMTA2OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIHtv
dXRjb21lOiAiZXhjZXB0aW9uIiwgdmFsdWVzOiBbbywgcCwgeCwgcmVzdWx0XX07CisgICAgfQor
ICAgIHJldHVybiB7b3V0Y29tZTogInJldHVybiIsIHZhbHVlczogW28sIHAsIHgsIHJlc3VsdF19
OworfQorCitub0lubGluZShmb28pOworCisvLyBXYXJtIHVwIGZvbygpIHdpdGggcG9seW1vcnBo
aWMgb2JqZWN0cy4KK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIg
bzsKKyAgICBvID0ge2Y6MTA3fTsKKyAgICBvWyJpIiArIGldID0gaTsgLy8gTWFrZSBpdCBwb2x5
bW9ycGhpYy4KKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQub3V0Y29t
ZSAhPT0gInJldHVybiIpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgb3V0Y29t
ZTogIiArIHJlc3VsdC5vdXRjb21lOworICAgIGlmIChyZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0g
NCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAi
ICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IDEw
NCkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1
bHQudmFsdWVzWzBdOworICAgIGlmIChyZXN1bHQudmFsdWVzWzFdICE9PSAxMDUpCisgICAgICAg
IHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0LnZhbHVlc1sx
XTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1syXSAhPT0gMTA2KQorICAgICAgICB0aHJvdyAiRXJy
b3IgaW4gbG9vcDogYmFkIHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CisgICAgaWYg
KHJlc3VsdC52YWx1ZXNbM10gIT09IDEwNykKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6
IGJhZCB2YWx1ZXNbM106ICIgKyByZXN1bHQudmFsdWVzWzNdOworfQorCisvLyBOb3cgdGhyb3cg
YW4gZXhjZXB0aW9uLgordmFyIG8gPSB7fTsKK28uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0
aW9uKCkgeworICAgIHRocm93ICJFcnJvcjQyIjsKK30pOwordmFyIHJlc3VsdCA9IGZvbyhvLCAx
MDgpOworaWYgKHJlc3VsdC5vdXRjb21lICE9PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJy
b3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworaWYgKHJlc3VsdC52
YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBudW1iZXIg
b2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7CitpZiAocmVzdWx0LnZhbHVlc1sw
XSAhPT0gbykKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzBdOiAiICsgcmVz
dWx0LnZhbHVlc1swXTsKK2lmIChyZXN1bHQudmFsdWVzWzFdICE9PSAxMDMpCisgICAgdGhyb3cg
IkVycm9yIGF0IGVuZDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3VsdC52YWx1ZXNbMV07CitpZiAo
cmVzdWx0LnZhbHVlc1syXSAhPT0gMTAyKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2
YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJdOworaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09
IDEwMSkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0
LnZhbHVlc1szXTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9m
dGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZlLXN0YXRlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9wZXJhdGlvbi1l
eGNlcHRpb24taW50ZXJlc3RpbmctbGl2ZS1zdGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9wZXJhdGlvbi1leGNlcHRpb24taW50
ZXJlc3RpbmctbGl2ZS1zdGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACitm
dW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4ID0gMTAwOworICAgIHZhciByZXN1bHQgPSAx
MDE7CisgICAgdmFyIHBmID0gcC5nOworICAgIHRyeSB7CisgICAgICAgIHggPSAxMDI7CisgICAg
ICAgIHBmKys7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAgICAgICAgbyA9IDEwNDsKKyAgICAg
ICAgcGYrKzsKKyAgICAgICAgeCA9IDEwNjsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJl
dHVybiB7b3V0Y29tZTogImV4Y2VwdGlvbiIsIHZhbHVlczogW28sIHBmLCB4LCByZXN1bHRdfTsK
KyAgICB9CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0dXJuIiwgdmFsdWVzOiBbbywgcGYsIHgs
IHJlc3VsdF19OworfQorCitub0lubGluZShmb28pOworCisvLyBXYXJtIHVwIGZvbygpIHdpdGgg
cG9seW1vcnBoaWMgb2JqZWN0cyBhbmQgbm9uLW9iamVjdCB0eXBlcy4KK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbzsKKyAgICB2YXIgaXNPYmplY3QgPSBpICYg
MTsKKyAgICBpZiAoaXNPYmplY3QpIHsKKyAgICAgICAgbyA9IHtmOjEwN307CisgICAgICAgIG9b
ImkiICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIH0gZWxzZQorICAgICAg
ICBvID0gNDI7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvLCB7ZzoyMDB9KTsKKyAgICBpZiAocmVz
dWx0Lm91dGNvbWUgIT09ICJyZXR1cm4iKQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDog
YmFkIG91dGNvbWU6ICIgKyByZXN1bHQub3V0Y29tZTsKKyAgICBpZiAocmVzdWx0LnZhbHVlcy5s
ZW5ndGggIT09IDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgbnVtYmVyIG9m
IHZhbHVlczogIiArIHJlc3VsdC52YWx1ZXMubGVuZ3RoOworICAgIGlmIChyZXN1bHQudmFsdWVz
WzBdICE9PSAxMDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzBd
OiAiICsgcmVzdWx0LnZhbHVlc1swXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1sxXSAhPT0gMjAy
KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3Vs
dC52YWx1ZXNbMV07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMl0gIT09IDEwNikKKyAgICAgICAg
dGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJd
OworICAgIGlmIChpc09iamVjdCkgeworICAgICAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0g
MTA3KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbM106ICIg
KyByZXN1bHQudmFsdWVzWzNdOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyZXN1bHQudmFs
dWVzWzNdICE9PSB2b2lkIDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107CisgICAgfQorfQorCisvLyBOb3cgdGhy
b3cgYW4gZXhjZXB0aW9uLgordmFyIHJlc3VsdCA9IGZvbyhudWxsLCB7ZzozMDB9KTsKK2lmIChy
ZXN1bHQub3V0Y29tZSAhPT0gImV4Y2VwdGlvbiIpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDog
YmFkIG91dGNvbWU6ICIgKyByZXN1bHQub3V0Y29tZTsKK2lmIChyZXN1bHQudmFsdWVzLmxlbmd0
aCAhPT0gNCkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgbnVtYmVyIG9mIHZhbHVlczog
IiArIHJlc3VsdC52YWx1ZXMubGVuZ3RoOworaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IG51bGwp
CisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1
ZXNbMF07CitpZiAocmVzdWx0LnZhbHVlc1sxXSAhPT0gMzAxKQorICAgIHRocm93ICJFcnJvciBh
dCBlbmQ6IGJhZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworaWYgKHJlc3VsdC52
YWx1ZXNbMl0gIT09IDEwMikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzJd
OiAiICsgcmVzdWx0LnZhbHVlc1syXTsKK2lmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDEpCisg
ICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNb
M107CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9wZXJh
dGlvbi1leGNlcHRpb24tbm8tY2F0Y2guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1uby1jYXRjaC5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLW9w
ZXJhdGlvbi1leGNlcHRpb24tbm8tY2F0Y2guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorZnVuY3Rpb24gZm9vKG8sIHApIHsKKyAgICB2YXIgeCA9IDEwMDsKKyAgICB2YXIgcmVz
dWx0ID0gMTAxOworICAgIHggPSAxMDI7CisgICAgcCA9IDEwMzsKKyAgICByZXN1bHQgPSBvLmY7
CisgICAgbyA9IDEwNDsKKyAgICBwID0gMTA1OworICAgIHggPSAxMDY7CisgICAgcmV0dXJuIHtv
dXRjb21lOiAicmV0dXJuIiwgdmFsdWVzOiBbbywgcCwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5s
aW5lKGZvbyk7CisKKy8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzIGFu
ZCBub24tb2JqZWN0IHR5cGVzLgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciBvOworICAgIHZhciBpc09iamVjdCA9IGkgJiAxOworICAgIGlmIChpc09iamVjdCkg
eworICAgICAgICBvID0ge2Y6MTA3fTsKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2Ug
aXQgcG9seW1vcnBoaWMuCisgICAgfSBlbHNlCisgICAgICAgIG8gPSA0MjsKKyAgICB2YXIgcmVz
dWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQub3V0Y29tZSAhPT0gInJldHVybiIpCisgICAg
ICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21l
OworICAgIGlmIChyZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yIGluIGxvb3A6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5n
dGg7CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IDEwNCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworICAgIGlm
IChyZXN1bHQudmFsdWVzWzFdICE9PSAxMDUpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29w
OiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0LnZhbHVlc1sxXTsKKyAgICBpZiAocmVzdWx0LnZh
bHVlc1syXSAhPT0gMTA2KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVl
c1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CisgICAgaWYgKGlzT2JqZWN0KSB7CisgICAgICAg
IGlmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IHZvaWQgMCkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1sz
XTsKKyAgICB9Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgcmVzdWx0Owor
dHJ5IHsKKyAgICByZXN1bHQgPSBmb28obnVsbCwgMTA4KTsKK30gY2F0Y2ggKGUpIHsKKyAgICBy
ZXN1bHQgPSB7b3V0Y29tZTogImV4Y2VwdGlvbiJ9OworfQoraWYgKHJlc3VsdC5vdXRjb21lICE9
PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiAr
IHJlc3VsdC5vdXRjb21lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268474</attachid>
            <date>2016-01-07 12:22:28 -0800</date>
            <delta_ts>2016-01-07 13:06:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77797</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0NzA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxNi0wMS0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBCMyBnZXRCeUlkKCkgc2hvdWxkIGRvIGV4Y2VwdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjgxMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBhYnN0cmFjdGlvbnMgZm9y
IGRvaW5nIGV4Y2VwdGlvbnMgZnJvbSBwYXRjaHBvaW50cywgYW5kIHVzZXMgdGhlbSB0byBpbXBs
ZW1lbnQKKyAgICAgICAgZXhjZXB0aW9ucyBmcm9tIEdldEJ5SWQuIFRoaXMgY292ZXJzIGFsbCBv
ZiB0aGUgZm9sbG93aW5nIHdheXMgdGhhdCBhIEdldEJ5SWQgbWlnaHQgdGhyb3cgYW4KKyAgICAg
ICAgZXhjZXB0aW9uczoKKworICAgICAgICAtIFRocm93IHdpdGhvdXQgdHJ5L2NhdGNoIGZyb20g
dGhlIHZtQ2FsbCgpIGluIGEgR2V0QnlJZChVbnR5cGVkOikKKyAgICAgICAgLSBUaHJvdyB3aXRo
IHRyeS9jYXRjaCBmcm9tIHRoZSB2bUNhbGwoKSBpbiBhIEdldEJ5SWQoVW50eXBlZDopCisgICAg
ICAgIC0gVGhyb3cgd2l0aG91dCB0cnkvY2F0Y2ggZnJvbSB0aGUgY2FsbE9wZXJhdGlvbigpIGlu
IHRoZSBwYXRjaHBvaW50IG9mIGEgR2V0QnlJZAorICAgICAgICAtIFRocm93IHdpdGggdHJ5L2Nh
dGNoIGZyb20gdGhlIGNhbGxPcGVyYXRpb24oKSBpbiB0aGUgcGF0Y2hwb2ludCBvZiBhIEdldEJ5
SWQKKyAgICAgICAgLSBUaHJvdyB3aXRob3V0IHRyeS9jYXRjaCBmcm9tIHRoZSBDYWxsIElDIGdl
bmVyYXRlZCBpbiB0aGUgcGF0Y2hwb2ludCBvZiBhIEdldEJ5SWQKKyAgICAgICAgLSBUaHJvdyB3
aXRoIHRyeS9jYXRjaCBmcm9tIHRoZSBDYWxsIElDIGdlbmVyYXRlZCBpbiB0aGUgcGF0Y2hwb2lu
dCBvZiBhIEdldEJ5SWQKKworICAgICAgICBUaGlzIHJlcXVpcmVzIGhhdmluZyBhIGRlZmF1bHQg
ZXhjZXB0aW9uIHRhcmdldCBpbiBGVEwtZ2VuZXJhdGVkIGNvZGUsIGFuZCBlbnN1cmluZyB0aGF0
IHRoaXMKKyAgICAgICAgdGFyZ2V0IGlzIGdlbmVyYXRlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIg
d2UgaGF2ZSBicmFuY2hlcyB0byB0aGUgQjMgYmFzaWMgYmxvY2sgb2YgdGhlCisgICAgICAgIGRl
ZmF1bHQgZXhjZXB0aW9uIHRhcmdldC4gVGhpcyBhbHNvIHJlcXVpcmVzIGFkZGluZyBzb21lIGV4
dHJhIGFyZ3VtZW50cyB0byBhCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSwgYW5kIHRoZW4ga25v
d2luZyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHVzZWQgZm9yIE9TUiBleGl0IGFuZCBub3QgYW55
dGhpbmcKKyAgICAgICAgZWxzZS4gVGhpcyBhbHNvIHJlcXVpcmVzIGFzc29jaWF0aW5nIHRoZSBD
YWxsU2l0ZUluZGV4IG9mIHRoZSBwYXRjaHBvaW50IHdpdGggdGhlIHJlZ2lzdGVyCisgICAgICAg
IHNldCB1c2VkIGZvciBleGl0IGFuZCB3aXRoIHRoZSBPU1IgZXhpdCBsYWJlbCBmb3IgdGhlIHVu
d2luZCBleGl0LgorCisgICAgICAgIEFsbCBvZiB0aGUgc3R1ZmYgdGhhdCB5b3UgaGF2ZSB0byB3
b3JyeSBhYm91dCB3aGVuIHdpcmluZyBhIHBhdGNocG9pbnQgdG8gZXhjZXB0aW9uIGhhbmRsaW5n
CisgICAgICAgIGlzIGNvdmVyZWQgYnkgdGhlIG5ldyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
IG9iamVjdC4gWW91IGNyZWF0ZSBvbmUgYnkgY2FsbGluZworICAgICAgICBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMoKS4gVGhpcyBzZXRzIHVwIHRoZSBCMyBJUiByZXByZXNlbnRhdGlv
biBvZiB0aGUgcGF0Y2hwb2ludAorICAgICAgICB3aXRoIHN0YWNrbWFwIGFyZ3VtZW50cyBmb3Ig
dGhlIGV4Y2VwdGlvbmFsIGV4aXQsIGFuZCBjcmVhdGVzIGEgUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZQorICAgICAgICBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgemVybyBvciBt
b3JlIGFjdHVhbCBPU1IgZXhpdHMuIEl0IGNhbiBjcmVhdGUgYm90aCBPU1IgZXhpdHMKKyAgICAg
ICAgZm9yIG9wZXJhdGlvbiBjYWxscyBhbmQgT1NSIGV4aXRzIGZvciB1bndpbmQuIFlvdSBjYWxs
IHRoZQorICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZUV4aXRDcmVh
dGlvblhYWCgpIG1ldGhvZHMgZnJvbSB0aGUgZ2VuZXJhdG9yIGNhbGxiYWNrIHRvCisgICAgICAg
IGFjdHVhbGx5IGdldCBPU1IgZXhpdHMuCisKKyAgICAgICAgVGhpcyBBUEkgbWFrZXMgaGVhdnkg
dXNlIG9mIEJveDw+LCBsYXRlIHBhdGhzLCBhbmQgbGluayB0YXNrcy4gRm9yIGV4YW1wbGUsIHlv
dSBjYW4gdXNlIHRoZQorICAgICAgICBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIHRvIGdldCBh
IEJveDxKdW1wTGlzdD4gdGhhdCB5b3UgY2FuIGFwcGVuZCBleGNlcHRpb24ganVtcHMgdG8uIFdo
ZW4KKyAgICAgICAgeW91IHVzZSB0aGlzIEFQSSwgaXQgYXV0b21hdGljYWxseSByZWdpc3RlcnMg
YSBsaW5rIHRhc2sgdGhhdCB3aWxsIGxpbmsgdGhlIEp1bXBMaXN0IHRvIHRoZQorICAgICAgICBh
Y3R1YWwgT1NSIGV4aXQgbGFiZWwuCisKKyAgICAgICAgVGhpcyBBUEkgaXMgdmVyeSBmbGV4aWJs
ZSBhYm91dCBob3cgeW91IGdldCB0byB0aGUgbGFiZWwgb2YgdGhlIE9TUiBleGl0LiBZb3UgYXJl
IGVuY291cmFnZWQKKyAgICAgICAgdG8gdXNlIHRoZSBCb3g8SnVtcExpc3Q+IGFwcHJvYWNoLCBi
dXQgaWYgeW91IHJlYWxseSBqdXN0IG5lZWQgdGhlIGxhYmVsLCB5b3UgY2FuIGFsc28gZ2V0Cisg
ICAgICAgIGEgUmVmUHRyPEV4Y2VwdGlvblRhcmdldD4gYW5kIHJlbHkgb24gdGhlIGZhY3QgdGhh
dCB0aGUgRXhjZXB0aW9uVGFyZ2V0IG9iamVjdCB3aWxsIGJlIGFibGUKKyAgICAgICAgdG8gdmVu
ZCB5b3UgdGhlIE9TUiBleGl0IGxhYmVsIGF0IGxpbmstdGltZS4KKworICAgICAgICBUaGlzIHJl
ZHVjZXMgdGhlIG51bWJlciBvZiBKU0MgdGVzdCBmYWlsdXJlcyB3aXRoIEZUTCBCMyBmcm9tIDE4
NiB0byAxMzMuIEl0IGFsc28gYWRkcyBhCisgICAgICAgIGJ1bmNoIG9mIG5ldyB0ZXN0cyBzcGVj
aWZpY2FsbHkgZm9yIGFsbCBvZiB0aGUgd2F5cyB5b3UgbWlnaHQgdGhyb3cgZnJvbSBHZXRCeUlk
LCBhbmQgQjMKKyAgICAgICAgcGFzc2VzIGFsbCBvZiB0aGVzZSBuZXcgdGVzdHMuIE5vdGUgdGhh
dCBJJ20gbm90IGNvdW50aW5nIHRoZSBuZXcgdGVzdHMgYXMgcGFydCBvZiB0aGUKKyAgICAgICAg
cHJldmlvdXMgMTg2IHRlc3QgZmFpbHVyZXMgKEZUTCBCMyBmYWlsZWQgYWxsIG9mIHRoZSBuZXcg
dGVzdHMgcHJpb3IgdG8gdGhpcyBjaGFuZ2UpLgorCisgICAgICAgIEFmdGVyIHRoaXMgY2hhbmdl
LCBpdCBzaG91bGQgYmUgZWFzeSB0byBtYWtlIGFsbCBvZiB0aGUgb3RoZXIgcGF0Y2hwb2ludHMg
YWxzbyBoYW5kbGUKKyAgICAgICAgZXhjZXB0aW9ucyBieSBqdXN0IGZvbGxvd2luZyB0aGUgcHJl
cGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKCkgaWRpb20uCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVmFs
dWVSZXAuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmFkZFVzZWRSZWdpc3RlcnNU
byk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6dXNlZFJlZ2lzdGVycyk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZVJlcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5oOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjp3aXRoT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp1
c2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKiBmdGwvRlRMQjNDb21waWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQjNPdXRwdXQuaDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OnVucmVhY2hhYmxlKToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OnNwZWN1bGF0ZSk6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4Y2VwdGlvblRhcmdldDo6fkV4Y2VwdGlvblRh
cmdldCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpsYWJlbCk6CisgICAg
ICAgIChKU0M6OkZUTDo6RXhjZXB0aW9uVGFyZ2V0OjpqdW1wcyk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhjZXB0aW9uVGFyZ2V0OjpFeGNlcHRpb25UYXJnZXQpOgorICAgICAgICAqIGZ0bC9GVExF
eGNlcHRpb25UYXJnZXQuaDogQWRkZWQuCisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBZGRPclN1
Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRo
TXVsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0
QnlJZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1h
a2VSb3BlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
Q2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpnZXRCeUlkKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpl
bWl0QmluYXJ5U25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExW
TTo6ZW1pdEJpbmFyeUJpdE9wU25pcHBldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6ZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpjYWxsQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdEFyZ3VtZW50c0Zv
clBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6bG93QmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmJsZXNzU3BlY3VsYXRpb24pOgorICAgICAgICAqIGZ0bC9GVExQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6UGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlOjpkZWZhdWx0SGFuZGxlKToKKyAgICAgICAgKEpTQzo6RlRMOjpQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjp+UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OlBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6
OnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGVIYW5kbGUpOgor
ICAgICAgICAqIGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmg6IEFkZGVkLgorICAg
ICAgICAqIGZ0bC9GVExTdGF0ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAg
ICAgIChKU0M6OkZUTDo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtZ2V0dGVyLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZl
LXN0YXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1n
ZXR0ZXItZXhjZXB0aW9uLW5vLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZl
LXN0YXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1z
bG93LWV4Y2VwdGlvbi1uby1jYXRjaC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNz
L2Z0bC1nZXQtYnktaWQtc2xvdy1leGNlcHRpb24uanM6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZlLXN0YXRlLmpz
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLW9wZXJhdGlvbi1leGNlcHRpb24t
bm8tY2F0Y2guanM6IEFkZGVkLgorCiAyMDE2LTAxLTA3ICBLb25zdGFudGluIFRva2FyZXYgIDxh
bm51bGVuQHlhbmRleC5ydT4KIAogICAgICAgICBbbWlwc10gR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyIG1pc3NpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTAyMyw2ICsxMDIzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQog
ICAgICAgICBmdGwvRlRMRFdBUkZSZWdpc3Rlci5jcHAKICAgICAgICAgZnRsL0ZUTERhdGFTZWN0
aW9uLmNwcAogICAgICAgICBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwCisgICAg
ICAgIGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1l
bnQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAogICAgICAg
ICBmdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCkBAIC0xMDQ5LDYgKzEwNTAsNyBAQCBpZiAo
RU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcAogICAgICAg
ICBmdGwvRlRMT3BlcmF0aW9ucy5jcHAKICAgICAgICAgZnRsL0ZUTE91dHB1dC5jcHAKKyAgICAg
ICAgZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExS
ZWNvdmVyeU9wY29kZS5jcHAKICAgICAgICAgZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcAogICAgICAg
ICBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiAr
NTE4LDEwIEBACiAJCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk5MTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZH
Q2xlYW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUQzNjkyMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlD
QzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CisJCTBGOUQ0QzBDMUMzRTFD
MTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5jcHAgKi87IH07CisJCTBGOUQ0QzBEMUMzRTFDMTEwMDZDRDk4NCAv
KiBGVExFeGNlcHRpb25UYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJn
ZXQuaCAqLzsgfTsKKwkJMEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUuY3BwICovOyB9OworCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuaCAqLzsgfTsKIAkJMEY5RTMyNjMxQjA1QUIwNDAwODAxRUQ1IC8qIERG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUUzMjYxMUIwNUFCMDQwMDgwMUVENSAvKiBERkdTdG9y
ZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGOUUzMjY0MUIwNUFCMDQwMDgw
MUVENSAvKiBERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8q
IERGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmggKi87IH07CiAJCTBGOUZCNEY0MTdGQ0I5
MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUZCNEYyMTdGQ0I5MTcwMENCNjdGOCAvKiBE
RkdTdGFja0xheW91dFBoYXNlLmNwcCAqLzsgfTsKQEAgLTI2NTAsNiArMjY1NCwxMCBAQAogCQkw
RjlEMzM5OTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFw
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzY5MjFBRTlDQzMzMDAwRDRE
RkIgLyogREZHQ2xlYW5VcFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0NsZWFuVXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xlYW5VcFBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZC
IC8qIERGR0NsZWFuVXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDbGVhblVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDbGVhblVwUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2Vw
dGlvblRhcmdldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExF
eGNlcHRpb25UYXJnZXQuY3BwOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBG
VExFeGNlcHRpb25UYXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
RXhjZXB0aW9uVGFyZ2V0Lmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOUQ0QzBFMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZU
TFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjlENEMwRjFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhh
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlFMzI2MTFCMDVBQjA0MDA4MDFFRDUg
LyogREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5RTMyNjIxQjA1QUIwNDAwODAxRUQ1IC8qIERGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RkI0RjIxN0ZD
QjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00
NTQ0LDYgKzQ1NTIsOCBAQAogCQkJCTBGOUM1RTVEMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FS
RlJlZ2lzdGVyLmggKi8sCiAJCQkJNzlERjY2QUUxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmNwcCAqLywKIAkJCQk3OURGNjZBRjFCRjI2QTU3MDAwMUNGMTEg
LyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCAqLywKKwkJCQkwRjlENEMwQTFDM0UxQzEx
MDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCAqLywKKwkJCQkwRjlENEMwQjFDM0Ux
QzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmggKi8sCiAJCQkJMEYyMzVCQkQxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAgKi8sCiAJCQkJMEYyMzVCQkUxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oICovLAogCQkJCTBGMjM1QkJGMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLywKQEAgLTQ2MDIs
NiArNDYxMiw4IEBACiAJCQkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRI
YW5kbGUuaCAqLywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNw
cCAqLywKIAkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJ
CQkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGUuY3BwICovLAorCQkJCTBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlLmggKi8sCiAJCQkJMEY0ODUzMjUxODdERkRFQzAwODNCNjg3IC8qIEZU
TFJlY292ZXJ5T3Bjb2RlLmNwcCAqLywKIAkJCQkwRjQ4NTMyNjE4N0RGREVDMDA4M0I2ODcgLyog
RlRMUmVjb3ZlcnlPcGNvZGUuaCAqLywKIAkJCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyog
RlRMU2F2ZVJlc3RvcmUuY3BwICovLApAQCAtNzEyNyw2ICs3MTM5LDcgQEAKIAkJCQkwRjdCMjk0
RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVB
MEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzOEIwMTgxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOEIwMUExN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQjNBMUIx
NTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVENjdCQTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTc4MjcsNiArNzg0MCw3IEBACiAJCQkJRTMzNjM3QTYx
QjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5
NkI3MzIzMUJEQTA4RUYwMDMzMUI4NCAvKiBSZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEY5RDRDMEQxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhw
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtOTA3Miw2ICs5MDg2LDcgQEAKIAkJCQkx
NDI4MDgzQTEwN0VDMDc1MDAxM0U3QjIgLyogSlNTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENTEwN0VDMzc2MDA0MjdBNDggLyogSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzBFQzBFQzIxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEY5RDRDMTAxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjYwMEI1QTYxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJC
NzRFMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDZBQUIzODBCNjZBOTQ0MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTkxNzYsNiArOTE5MSw3IEBACiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYw
IC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5
QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGOUQ0QzBDMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZF
IC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0
ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFZhbHVlLmgJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NywxMiArNzcsMTkgQEAgcHVibGlj
OgogICAgICAgICAgICAgYXBwZW5kKHZhbHVlKTsKICAgICB9CiAKKyAgICAvLyBIZWxwZXIgZm9y
IGFwcGVuZGluZyBhIGJ1bmNoIG9mIHZhbHVlcyB3aXRoIHNvbWUgVmFsdWVSZXAuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICB2b2lkIGFwcGVuZFZlY3RvcldpdGhSZXAo
Y29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAgIHsKKyAg
ICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2ZWN0b3IpCisgICAgICAgICAgICBhcHBlbmQodmFs
dWUsIHJlcCk7CisgICAgfQorCiAgICAgLy8gSGVscGVyIGZvciBhcHBlbmRpbmcgY29sZCBhbnkn
cy4gVGhpcyBvZnRlbiB1c2VkIGJ5IGNsaWVudHMgdG8gaW1wbGVtZW50IE9TUi4KICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgogICAgIHZvaWQgYXBwZW5kQ29sZEFueXMoY29uc3Qg
VmVjdG9yVHlwZSYgdmVjdG9yKQogICAgIHsKLSAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2
ZWN0b3IpCi0gICAgICAgICAgICBhcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgVmFsdWVS
ZXA6OkNvbGRBbnkpKTsKKyAgICAgICAgYXBwZW5kVmVjdG9yV2l0aFJlcCh2ZWN0b3IsIFZhbHVl
UmVwOjpDb2xkQW55KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZvciBzb21l
dGhpbmcgeW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNob3VsZCBi
ZSBjb25zdHJhaW5lZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNw
cAkocmV2aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVS
ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDM0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgewogCit2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVnaXN0ZXJzVG8oUmVnaXN0
ZXJTZXQmIHNldCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgV2Fy
bUFueToKKyAgICBjYXNlIENvbGRBbnk6CisgICAgY2FzZSBMYXRlQ29sZEFueToKKyAgICBjYXNl
IFNvbWVSZWdpc3RlcjoKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBSZWdpc3RlcjoKKyAgICAgICAgc2V0LnNldChyZWcoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrOgorICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgc2V0LnNl
dChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBzZXQuc2V0
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitSZWdpc3RlclNldCBWYWx1ZVJl
cDo6dXNlZFJlZ2lzdGVycygpIGNvbnN0Cit7CisgICAgUmVnaXN0ZXJTZXQgcmVzdWx0OworICAg
IGFkZFVzZWRSZWdpc3RlcnNUbyhyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZv
aWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJp
bnQobV9raW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2
aXNpb24gMTk0NjYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNl
dC5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KIApAQCAtMjA3LDcgKzIwOCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOwogICAgIH0KIAotICAgIFZhbHVlUmVwIHdpdGhPZmZz
ZXQoaW50cHRyX3Qgb2Zmc2V0KQorICAgIFZhbHVlUmVwIHdpdGhPZmZzZXQoaW50cHRyX3Qgb2Zm
c2V0KSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKICAgICAgICAgY2Fz
ZSBTdGFjazoKQEAgLTIxOSw2ICsyMjAsMjAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
CisgICAgdm9pZCBhZGRVc2VkUmVnaXN0ZXJzVG8oUmVnaXN0ZXJTZXQmKSBjb25zdDsKKyAgICAK
KyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKCkgY29uc3Q7CisKKyAgICAvLyBHZXQgdGhl
IHVzZWQgcmVnaXN0ZXJzIGZvciBhIHZlY3RvciBvZiBWYWx1ZVJlcHMuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyhjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBSZWdpc3RlclNldCBy
ZXN1bHQ7CisgICAgICAgIGZvciAoY29uc3QgVmFsdWVSZXAmIHZhbHVlIDogdmVjdG9yKQorICAg
ICAgICAgICAgdmFsdWUuYWRkVXNlZFJlZ2lzdGVyc1RvKHJlc3VsdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAKICAgICAvLyBUaGlzIGhhcyBhIHNpbXBsZSBjb250cmFjdDogaXQg
ZW1pdHMgY29kZSB0byByZXN0b3JlIHRoZSB2YWx1ZSBpbnRvIHRoZSBnaXZlbiByZWdpc3Rlci4g
VGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAx
OTQ2NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgZW51bSBOb1Jlc3VsdFRhZyB7IE5vUmVzdWx0IH07
CiAvLyBUaGUgcHJlZGljdGlvbiBwcm9wYWdhdG9yIGVmZmVjdGl2ZWx5IGRvZXMgZm91ciBwYXNz
ZXMsIHdpdGggdGhlIGxhc3QgcGFzcwogLy8gYmVpbmcgZG9uZSBieSB0aGUgc2VwYXJhdGUgRml4
dVBoYXNlLgogZW51bSBQcmVkaWN0aW9uUGFzcyB7Ci0gICAgLy8gV2UncmUgY29udmVyZ2luZyBp
biBhIHN0cmFpZ2h0LWZvcndhcmQgZm9yd2FyZCBmbG93IGZpeHBvaW50LiBUaGlzIGlzIHRoZQor
ICAgIC8vIFdlJ3JlIGNvbnZlcmdpbmcgaW4gYSBzdHJhZ2h0LWZvcndhcmQgZm9yd2FyZCBmbG93
IGZpeHBvaW50LiBUaGlzIGlzIHRoZQogICAgIC8vIG1vc3QgY29udmVudGlvbmFsIHBhcnQgb2Yg
dGhlIHByb3BhZ2F0b3IgLSBpdCBtYWtlcyBvbmx5IG1vbm90b25pYyBkZWNpc2lvbnMKICAgICAv
LyBiYXNlZCBvbiB2YWx1ZSBwcm9maWxlcyBhbmQgcmFyZSBjYXNlIHByb2ZpbGVzLiBJdCBpZ25v
cmVzIGJhc2VsaW5lIEpJVCByYXJlCiAgICAgLy8gY2FzZSBwcm9maWxlcy4gVGhlIGdvYWwgaGVy
ZSBpcyB0byBkZXZlbG9wIGEgZ29vZCBndWVzcyBvZiB3aGljaCB2YXJpYWJsZXMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NDY2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xMTIsNiArMTEyLDE4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVw
b2ludDo6UmUKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKICAgICBCMzo6
Z2VuZXJhdGUoKnN0YXRlLnByb2MsIGppdCk7CiAKKyAgICAvLyBFbWl0IHRoZSBleGNlcHRpb24g
aGFuZGxlci4KKyAgICAqc3RhdGUuZXhjZXB0aW9uSGFuZGxlciA9IGppdC5sYWJlbCgpOworICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVy
KSk7CisgICAgICAgIH0pOworCiAgICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKICAgICAgICAgdm0sIGppdCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwogICAgIGlmIChzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEwLDIx
ICs0MTAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVucmVhY2hhYmxlKCkgeyBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OkNvbnRyb2xWYWx1ZT4obV9wcm9jLCBCMzo6T29wcywgb3JpZ2luKCkpOyB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgc3BlY3VsYXRlKExW
YWx1ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIEIzOjpDaGVja1ZhbHVlKiBjaGVjayA9
IHNwZWN1bGF0ZSh2YWx1ZSwgYXJndW1lbnRzKTsKLSAgICAgICAgY2hlY2stPnNldEdlbmVyYXRv
cihmdW5jdG9yKTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1
ZSB2YWx1ZSwgY29uc3QgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cykKLSAgICB7Ci0g
ICAgICAgIEIzOjpDaGVja1ZhbHVlKiBjaGVjayA9IHNwZWN1bGF0ZSh2YWx1ZSk7Ci0gICAgICAg
IGZvciAoTFZhbHVlIHZhbHVlIDogYXJndW1lbnRzKQotICAgICAgICAgICAgY2hlY2stPmFwcGVu
ZChCMzo6Q29uc3RyYWluZWRWYWx1ZSh2YWx1ZSkpOwotICAgICAgICByZXR1cm4gY2hlY2s7Ci0g
ICAgfQotCiAgICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZShMVmFsdWUgdmFsdWUpCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDaGVja1ZhbHVlPihtX3By
b2MsIEIzOjpDaGVjaywgb3JpZ2luKCksIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhjZXB0aW9u
VGFyZ2V0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKworI2luY2x1
ZGUgIkZUTFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworRXhj
ZXB0aW9uVGFyZ2V0Ojp+RXhjZXB0aW9uVGFyZ2V0KCkKK3sKK30KKworQ29kZUxvY2F0aW9uTGFi
ZWwgRXhjZXB0aW9uVGFyZ2V0OjpsYWJlbChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAg
IGlmIChtX2lzRGVmYXVsdEhhbmRsZXIpCisgICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoKm1fZGVmYXVsdEhhbmRsZXIpOworICAgIHJldHVybiBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YobV9oYW5kbGUtPmxhYmVsKTsKK30KKworQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IEV4
Y2VwdGlvblRhcmdldDo6anVtcHMoQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQm94PENDYWxs
SGVscGVyczo6SnVtcExpc3Q+IHJlc3VsdCA9IEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0Pjo6
Y3JlYXRlKCk7CisgICAgaWYgKG1faXNEZWZhdWx0SGFuZGxlcikgeworICAgICAgICBCb3g8Q0Nh
bGxIZWxwZXJzOjpMYWJlbD4gZGVmYXVsdEhhbmRsZXIgPSBtX2RlZmF1bHRIYW5kbGVyOworICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwgbGlua0J1
ZmZlci5sb2NhdGlvbk9mKCpkZWZhdWx0SGFuZGxlcikpOworICAgICAgICAgICAgfSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9IG1faGFuZGxl
OworICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoKnJlc3VsdCwg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFeGNlcHRpb25UYXJnZXQ6OkV4Y2VwdGlv
blRhcmdldCgKKyAgICBib29sIGlzRGVmYXVsdEhhbmRsZXIsIEJveDxDQ2FsbEhlbHBlcnM6Okxh
YmVsPiBkZWZhdWx0SGFuZGxlciwgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSkKKyAgICA6
IG1faXNEZWZhdWx0SGFuZGxlcihpc0RlZmF1bHRIYW5kbGVyKQorICAgICwgbV9kZWZhdWx0SGFu
ZGxlcihkZWZhdWx0SGFuZGxlcikKKyAgICAsIG1faGFuZGxlKGhhbmRsZSkKK3sKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZU
TF9VU0VTX0IzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNl
cHRpb25UYXJnZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhjZXB0aW9uVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4
Y2VwdGlvblRhcmdldF9oCisjZGVmaW5lIEZUTEV4Y2VwdGlvblRhcmdldF9oCisKKyNpbmNsdWRl
ICJERkdDb21tb24uaCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdEhhbmRsZS5oIgor
I2luY2x1ZGUgPHd0Zi9Cb3guaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKKwor
Y2xhc3MgRXhjZXB0aW9uVGFyZ2V0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEV4Y2Vw
dGlvblRhcmdldD4geworcHVibGljOgorICAgIH5FeGNlcHRpb25UYXJnZXQoKTsKKworICAgIC8v
IEl0J3MgT0sgdG8gY2FsbCB0aGlzIGR1cmluZyBsaW5raW5nLCBidXQgbm90IGFueSBzb29uZXIu
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwoTGlua0J1ZmZlciYpOworCisgICAgLy8gQXQg
YW55IHRpbWUsIHlvdSBjYW4gCisKKyAgICAvLyBPciwgeW91IGNhbiBnZXQgYSBKdW1wTGlzdCBh
dCBhbnkgdGltZS4gQW55dGhpbmcgeW91IGFkZCB0byB0aGlzIEp1bXBMaXN0IHdpbGwgYmUgbGlu
a2VkIHRvCisgICAgLy8gdGhlIHRhcmdldCdzIGxhYmVsLgorICAgIEJveDxDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0PiBqdW1wcyhDQ2FsbEhlbHBlcnMmKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU7CisKKyAgICBFeGNlcHRpb25UYXJn
ZXQoYm9vbCBpc0RlZmF1bHRIYW5kbGVyLCBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4sIFJlZlB0
cjxPU1JFeGl0SGFuZGxlPik7CisgICAgCisgICAgYm9vbCBtX2lzRGVmYXVsdEhhbmRsZXI7Cisg
ICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IG1fZGVmYXVsdEhhbmRsZXI7CisgICAgUmVmUHRy
PE9TUkV4aXRIYW5kbGU+IG1faGFuZGxlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNlbmRpZiAv
LyBGVExFeGNlcHRpb25UYXJnZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY4LDcgKzE2
OCwxMyBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiBSZWdpc3Rl
clNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9QcmVzZXJ2ZUF0RXhjZXB0aW9uSGFuZGxpbmdD
YWxsU2l0ZShDb2RlQmxvY2sqLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCiB7CiAjaWYg
RlRMX1VTRVNfQjMKLSAgICBVTlVTRURfUEFSQU0oY2FsbFNpdGVJbmRleCk7CisgICAgZm9yIChP
U1JFeGl0JiBleGl0IDogb3NyRXhpdCkgeworICAgICAgICBpZiAoZXhpdC5tX2V4Y2VwdGlvbkhh
bmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxsU2l0ZUluZGV4LmJpdHMoKSkgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5tX2lzRXhjZXB0aW9uSGFuZGxlcik7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1faXNVbndpbmRIYW5kbGVyKTsKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6dXNlZFJlZ2lzdGVycyhleGl0Lm1fdmFsdWVSZXBzKTsKKyAg
ICAgICAgfQorICAgIH0KICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAgICAgZm9yIChPU1JFeGl0JiBl
eGl0IDogb3NyRXhpdCkgewogICAgICAgICBpZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxs
U2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxsU2l0ZUluZGV4LmJpdHMoKSkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTEF2YWlsYWJsZVJlY292ZXJ5LmgiCiAj
aW5jbHVkZSAiRlRMQjNPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25UYXJnZXQuaCIK
ICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0
ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgpAQCAtNDksNiArNTAs
NyBAQAogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCisjaW5jbHVkZSAiRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZU
TFdlaWdodGVkVGFyZ2V0LmgiCiAjaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9yLmgiCkBAIC0xMzgs
NiArMTQwLDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKKyAgICAg
ICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIAogICAgICAgICBDU3RyaW5n
IG5hbWU7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKICAgICAg
ICAgICAgIG5hbWUgPSB0b0NTdHJpbmcoCkBAIC0xNDksMTYgKzE1MywxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOwogCiAjaWYgIUZUTF9VU0VTX0IzCi0g
ICAgICAgIG1fZnRsU3RhdGUubW9kdWxlID0KLSAgICAgICAgICAgIG1vZHVsZUNyZWF0ZVdpdGhO
YW1lSW5Db250ZXh0KG5hbWUuZGF0YSgpLCBtX2Z0bFN0YXRlLmNvbnRleHQpOworICAgICAgICBz
dGF0ZS0+bW9kdWxlID0KKyAgICAgICAgICAgIG1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0
KG5hbWUuZGF0YSgpLCBzdGF0ZS0+Y29udGV4dCk7CiAgICAgICAgIAotICAgICAgICBtX2Z0bFN0
YXRlLmZ1bmN0aW9uID0gYWRkRnVuY3Rpb24oCi0gICAgICAgICAgICBtX2Z0bFN0YXRlLm1vZHVs
ZSwgbmFtZS5kYXRhKCksIGZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCkpOwotICAgICAgICBzZXRG
dW5jdGlvbkNhbGxpbmdDb252KG1fZnRsU3RhdGUuZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOwor
ICAgICAgICBzdGF0ZS0+ZnVuY3Rpb24gPSBhZGRGdW5jdGlvbigKKyAgICAgICAgICAgIHN0YXRl
LT5tb2R1bGUsIG5hbWUuZGF0YSgpLCBmdW5jdGlvblR5cGUobV9vdXQuaW50NjQpKTsKKyAgICAg
ICAgc2V0RnVuY3Rpb25DYWxsaW5nQ29udihzdGF0ZS0+ZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYp
OwogICAgICAgICBpZiAoaXNYODYoKSAmJiBPcHRpb25zOjpsbHZtRGlzYWxsb3dBVlgoKSkgewog
ICAgICAgICAgICAgLy8gQVZYIG1ha2VzIFY4L3JheXRyYWNlIDgwJSBzbG93ZXIuIEl0IG1ha2Vz
IEtyYWtlbi9hdWRpby1vc2NpbGxhdG9yIDQuNXgKICAgICAgICAgICAgIC8vIHNsb3dlci4gSXQg
c2hvdWxkIGJlIGRpc2FibGVkLgotICAgICAgICAgICAgYWRkVGFyZ2V0RGVwZW5kZW50RnVuY3Rp
b25BdHRyKG1fZnRsU3RhdGUuZnVuY3Rpb24sICJ0YXJnZXQtZmVhdHVyZXMiLCAiLWF2eCIpOwor
ICAgICAgICAgICAgYWRkVGFyZ2V0RGVwZW5kZW50RnVuY3Rpb25BdHRyKHN0YXRlLT5mdW5jdGlv
biwgInRhcmdldC1mZWF0dXJlcyIsICItYXZ4Iik7CiAgICAgICAgIH0KICNlbmRpZiAvLyAhRlRM
X1VTRVNfQjMKICAgICAgICAgCkBAIC0xNjgsNyArMTcyLDcgQEAgcHVibGljOgogI2lmIEZUTF9V
U0VTX0IzCiAgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9oZWFwcyk7CiAjZWxzZQotICAgICAg
ICBtX291dC5pbml0aWFsaXplKG1fZnRsU3RhdGUubW9kdWxlLCBtX2Z0bFN0YXRlLmZ1bmN0aW9u
LCBtX2hlYXBzKTsKKyAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZShzdGF0ZS0+bW9kdWxlLCBzdGF0
ZS0+ZnVuY3Rpb24sIG1faGVhcHMpOwogI2VuZGlmCiAKICAgICAgICAgLy8gV2UgdXNlIHByb2xv
Z3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgpAQCAtMjAx
LDcgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6
ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgICAgIEIzOjpT
dGFja1Nsb3RWYWx1ZSogY2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVP
ZkNhcHR1cmVkKTsKICAgICAgICAgbV9jYXB0dXJlZCA9IG1fb3V0LmFkZChjYXB0dXJlZEJhc2Us
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVPZkNhcHR1cmVkKSk7Ci0gICAgICAgIG1fZnRsU3RhdGUu
Y2FwdHVyZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZTsKKyAgICAgICAgc3RhdGUtPmNhcHR1cmVkVmFs
dWUgPSBjYXB0dXJlZEJhc2U7CiAjZWxzZSAvLyBGVExfVVNFU19CMwogICAgICAgICBMVmFsdWUg
Y2FwdHVyZWRBbGxvY2EgPSBtX291dC5hbGxvY2EoYXJyYXlUeXBlKG1fb3V0LmludDY0LCBtX2dy
YXBoLm1fbmV4dE1hY2hpbmVMb2NhbCkpOwogICAgICAgICAKQEAgLTIwOSw5ICsyMTMsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBtX291dC5wdHJUb0ludChjYXB0dXJlZEFsbG9jYSwgbV9vdXQu
aW50UHRyKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGgubV9uZXh0TWFj
aGluZUxvY2FsICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgICAgICAKLSAgICAgICAgbV9mdGxT
dGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisgICAgICAgIHN0YXRl
LT5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgIG1fb3V0LmNh
bGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMo
KSwgbV9vdXQuY29uc3RJbnQ2NChtX2Z0bFN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCksCisgICAg
ICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQu
Y29uc3RJbnQ2NChzdGF0ZS0+Y2FwdHVyZWRTdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0
LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwogI2VuZGlmIC8vIEZUTF9VU0VfQjMKIApAQCAt
Mjg2LDEwICsyOTAsMTAgQEAgcHVibGljOgogICAgICAgICBpZiAoaGFzVmFyYXJncykgewogICAg
ICAgICAgICAgTFZhbHVlIHZhcmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAogICAgICAg
ICAgICAgICAgIGFycmF5VHlwZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxT
bG90c05lZWRlZCgpKSk7Ci0gICAgICAgICAgICBtX2Z0bFN0YXRlLnZhcmFyZ3NTcGlsbFNsb3Rz
U3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIHN0YXRlLT52YXJhcmdz
U3BpbGxTbG90c1N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgICAgICBtX291
dC5jYWxsKAogICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcElu
dHJpbnNpYygpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQobV9mdGxTdGF0ZS52
YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50NjQoc3RhdGUtPnZhcmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCksCiAgICAgICAgICAgICAg
ICAgbV9vdXQuaW50MzJaZXJvLCB2YXJhcmdzU3BpbGxTbG90cyk7CiAgICAgICAgIH0KIApAQCAt
MzAwLDEwICszMDQsMTAgQEAgcHVibGljOgogCiAgICAgICAgICAgICBMVmFsdWUgZXhjZXB0aW9u
SGFuZGxpbmdWb2xhdGlsZVJlZ2lzdGVyc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCiAgICAg
ICAgICAgICAgICAgYXJyYXlUeXBlKG1fb3V0LmludDY0LCBtYXhOdW1iZXJPZkNhdGNoU3BpbGxz
KSk7Ci0gICAgICAgICAgICBtX2Z0bFN0YXRlLmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgICAgIHN0YXRlLT5leGNlcHRpb25I
YW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgICAg
ICBtX291dC5jYWxsKAogICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFj
a21hcEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQobV9mdGxT
dGF0ZS5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFwSUQpLAorICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhdGUtPmV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3Rh
Y2ttYXBJRCksCiAgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJaZXJvLCBleGNlcHRpb25IYW5k
bGluZ1ZvbGF0aWxlUmVnaXN0ZXJzU3BpbGxTbG90cyk7CiAgICAgICAgIH0KICNlbmRpZiAvLyAh
RlRMX1VTRVNfQjMKQEAgLTMzNywyMSArMzQxLDMwIEBAIHB1YmxpYzoKICNpZiBGVExfVVNFU19C
MwogICAgICAgICAvLyBGSVhNRQogI2Vsc2UKLSAgICAgICAgbV9mdGxTdGF0ZS5oYW5kbGVTdGFj
a092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAg
c3RhdGUtPmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOwogICAgICAgICBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUs
IG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDY0
KG1fZnRsU3RhdGUuaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQpLAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+aGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2Vw
dGlvblN0YWNrbWFwSUQpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2Vt
Ymxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSk7CiAjZW5kaWYKICAgICAgICAgbV9vdXQu
dW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxl
RXhjZXB0aW9ucywgY2hlY2tBcmd1bWVudHMpOwogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgIC8v
IEZJWE1FCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNo
cG9pbnQoVm9pZCk7CisgICAgICAgIGF1dG8gZXhjZXB0aW9uSGFuZGxlciA9IHN0YXRlLT5leGNl
cHRpb25IYW5kbGVyOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBqaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpleGNlcHRpb25I
YW5kbGVyKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CiAjZWxz
ZQotICAgICAgICBtX2Z0bFN0YXRlLmhhbmRsZUV4Y2VwdGlvblN0YWNrbWFwSUQgPSBtX3N0YWNr
bWFwSURzKys7CisgICAgICAgIHN0YXRlLT5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEID0gbV9z
dGFja21hcElEcysrOwogICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQudm9p
ZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksIG1fb3V0LmNvbnN0SW50NjQobV9mdGxT
dGF0ZS5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKKyAgICAgICAgICAgIG1fb3V0LnZvaWRU
eXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KHN0YXRlLT5o
YW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
TWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwogI2VuZGlmCiAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CkBAIC00MTgsMTEgKzQzMSwxMSBAQCBwdWJsaWM6CiAK
ICNpZiAhRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKE9wdGlvbnM6OmR1bXBMTFZNSVIoKSkKLSAg
ICAgICAgICAgIGR1bXBNb2R1bGUobV9mdGxTdGF0ZS5tb2R1bGUpOworICAgICAgICAgICAgZHVt
cE1vZHVsZShzdGF0ZS0+bW9kdWxlKTsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRlciBsb3dlcmlu
ZyIpOworICAgICAgICAgICAgc3RhdGUtPmR1bXBTdGF0ZSgiYWZ0ZXIgbG93ZXJpbmciKTsKICAg
ICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICB2ZXJpZnlNb2R1bGUo
bV9mdGxTdGF0ZS5tb2R1bGUpOworICAgICAgICAgICAgdmVyaWZ5TW9kdWxlKHN0YXRlLT5tb2R1
bGUpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xNjU2LDcgKzE2NjksNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgfQogCiAjaWYgRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIEIzOjpDaGVja1ZhbHVl
KiByZXN1bHQgPQorICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KICAgICAgICAgICAg
ICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVj
dWxhdGVBZGQobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1
bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKICAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CkBAIC0xNzEyLDcgKzE3MjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwogI2lmIEZUTF9V
U0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogcmVzdWx0ID0KKyAgICAgICAgICAg
IENoZWNrVmFsdWUqIHJlc3VsdCA9CiAgICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVj
dWxhdGVTdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOwpAQCAt
MTgwMyw3ICsxODE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291
dC5tdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgZWxzZSB7CiAjaWYgRlRMX1VTRVNfQjMK
LSAgICAgICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRpb24gPSBtX291dC5zcGVj
dWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIHNwZWN1
bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY3VsYXRpb247CiAj
ZWxzZSAvLyBGVExfVVNFU19CMwpAQCAtMTgzNyw3ICsxODUwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9wcG9zaXRl
KGtpbmQpKTsKIAogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBCMzo6Q2hlY2tWYWx1ZSog
cmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIENo
ZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vcmlnaW4pOwogI2Vsc2UgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIExWYWx1
ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzY0KGxlZnQsIHJpZ2h0KTsK
QEAgLTI2NDMsOCArMjY1Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE2ODYKIAogICAgICAgICBCMzo6UGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+YXBwZW5kKGJhc2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAogICAgICAgICBTdGF0
ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKQEAgLTQyOTEsNyArNDMwNCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1LaWRzOyArK2kpIHsKICAgICAgICAg
ICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdzLCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9o
ZWFwcy5KU1N0cmluZ19mbGFncykpOwogI2lmIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBCMzo6
Q2hlY2tWYWx1ZSogbGVuZ3RoQ2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCisgICAgICAgICAg
ICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNwZWN1bGF0ZUFkZCgKICAgICAgICAg
ICAgICAgICBsZW5ndGgsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2xl
bmd0aCkpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihsZW5ndGhDaGVjaywgVW5jb3Vu
dGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgbGVuZ3Ro
ID0gbGVuZ3RoQ2hlY2s7CkBAIC01MjY4LDggKzUyODEsOCBAQCBwcml2YXRlOgogICAgICAgICAv
LyBBcHBlbmQgdGhlIGZvcm1zIG9mIHRoZSBhcmd1bWVudHMgdGhhdCB3ZSB3aWxsIHVzZSBiZWZv
cmUgYW55IGNsb2JiZXJpbmcgaGFwcGVucy4KICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpz
Q2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CiAgICAgICAgIGlmIChqc0Fy
Z3VtZW50cykKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChqc0FyZ3VtZW50cywgVmFs
dWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZFNvbWVSZWdpc3Rlcihqc0FyZ3VtZW50cyk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNv
bWVSZWdpc3Rlcih0aGlzQXJnKTsKIAogICAgICAgICBpZiAoIWZvcndhcmRpbmcpIHsKICAgICAg
ICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlbSBhZ2FpbiBmb3IgYWZ0ZXIgY2xvYmJlcmluZy4gTm90
ZSB0aGF0IHRoZSBjb21waWxlciBtYXkgYXNrIHVzIHRvIHVzZSBhCkBAIC02MTI2LDcgKzYxMzks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBzdHIgPSBi
aXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgp
KTsKICNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoY2VsbCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGNlbGwpOwogICAgICAgICAg
ICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lz
dGVycygpKTsKIAogICAgICAgICAgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwpA
QCAtNzIwNSwyMSArNzIxOCwzNiBAQCBwcml2YXRlOgogICAgICAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07
CiAKICNpZiBGVExfVVNFU19CMwotICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRvIGV4Y2Vw
dGlvbnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTE2ODYKLSAgICAgICAgCiAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGJhc2UsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIoYmFzZSk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBH
ZXRCeUlkRmx1c2gsIHdlIG1pZ2h0IGdldCBzb21lIHBlcmZvcm1hbmNlIGJvb3N0IGlmIHdlIGNs
YWltIHRoYXQgaXQKKyAgICAgICAgLy8gY2xvYmJlcnMgdm9sYXRpbGUgcmVnaXN0ZXJzIGxhdGUu
IEl0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHRob3VnaCwgc2luY2UgdGhlCisg
ICAgICAgIC8vIElDIGNvZGUgaXMgc3VwZXIgc21hcnQgYWJvdXQgc2F2aW5nIHJlZ2lzdGVycy4K
KyAgICAgICAgCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3Jv
U2NyYXRjaFJlZ2lzdGVycygpKTsKIAorICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50
Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKwogICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9m
dGxTdGF0ZTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBw
YXJhbXMpIHsKICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2Ug
YWxsb3dTY3JhdGNoKGppdCk7CiAKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXggPQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFk
ZFVuaXF1ZUNhbGxTaXRlSW5kZXgobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpcmVjdCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNh
bGxzLiBJdCdzIGEgcG9pbnRlciB0byBhIEp1bXBMaXN0LgorICAgICAgICAgICAgICAgIGF1dG8g
ZXhjZXB0aW9ucyA9IGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1z
KS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGV4aXQgZm9y
IGNhbGwgSUMncyBjcmVhdGVkIGJ5IHRoZSBnZXRCeUlkIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBo
YXZlCisgICAgICAgICAgICAgICAgLy8gdG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBj
YWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwgYXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW5kZXguCisgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5k
ZXgpOworCiAgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUR2V0QnlJZEdl
bmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMpLAor
ICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2FsbFNpdGVJbmRleCwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksCiAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSkpOwogCkBAIC03MjI5LDE1ICs3MjU3
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAogICAg
ICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBNYWtlIHRoaXMgZG8gc29tZXRoaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25zOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwg
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGlj
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNlcHRpb25zLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHBhcmFtc1swXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHBhcmFtc1swXS5n
cHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgcGFyYW1zWzFdLmdwcigpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxs
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0
KTsKQEAgLTc1MjQsOCArNzU0OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3VsdFR5cGUo
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0g
bV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChsZWZ0
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKHJp
Z2h0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
U29tZVJlZ2lzdGVyKGxlZnQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIocmlnaHQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJl
cDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5h
cHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwogICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMg
PSAxOwpAQCAtNzU4Miw4ICs3NjA3LDggQEAgcHJpdmF0ZToKICAgICAgICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlw
ZSgpKTsKICAgICAgICAgICAgIAogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQg
PSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGxl
ZnQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
cmlnaHQsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRTb21lUmVnaXN0ZXIobGVmdCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihyaWdodCk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVl
UmVwOjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVy
cyA9IDE7CkBAIC03NjM0LDggKzc2NTksOCBAQCBwcml2YXRlOgogICAgICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRU
eXBlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bGVmdCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChyaWdodCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJl
Z2lzdGVyKHJpZ2h0KTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gMTsKQEAgLTEwMTMyLDcgKzEwMTU3LDQzIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCi0jaWYgIUZUTF9VU0VTX0IzCisjaWYg
RlRMX1VTRVNfQjMKKyAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gcHJlcGFy
ZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCisgICAgewor
ICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CisgICAgICAgIEhhbmRsZXJJbmZvKiBl
eGNlcHRpb25IYW5kbGVyOworICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3Jh
cGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BD
YXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgIGlmICghd2lsbENhdGNoRXhj
ZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmRl
ZmF1bHRIYW5kbGUobV9mdGxTdGF0ZSk7CisKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiICAgIFBhdGNocG9pbnQgZXhjZXB0
aW9uIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5z
aXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsK
KyAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBsaXN0
RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX29yaWdp
bi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0spOworCisgICAgICAg
IE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlw
dG9yKG5vVmFsdWUoKSwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
IGludG8gdGhlIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyB3aGVyZSB3ZSB3aWxsIGZpbmQgdGhl
IGV4aXQgYXJndW1lbnRzCisgICAgICAgIC8vIHdlIGFyZSBhYm91dCB0byBhcHBlbmQuIFdlIG5l
ZWQgdG8gYWNjb3VudCBmb3IgYm90aCB0aGUgY2hpbGRyZW4gd2UndmUgYWxyZWFkeSBhZGRlZCwg
YW5kCisgICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgb2YgYSByZXN1bHQgdmFsdWUgaWYg
dGhlIHBhdGNocG9pbnQgaXMgbm90IHZvaWQuCisgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHZh
bHVlLT5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBWb2lkKQor
ICAgICAgICAgICAgb2Zmc2V0Kys7CisKKyAgICAgICAgLy8gVXNlIExhdGVDb2xkQW55IHRvIGVu
c3VyZSB0aGF0IHRoZSBzdGFja21hcCBhcmd1bWVudHMgaW50ZXJmZXJlIHdpdGggdGhlIHBhdGNo
cG9pbnQncworICAgICAgICAvLyByZXN1bHQgYW5kIHdpdGggYW55IGxhdGUtY2xvYmJlcmVkIHJl
Z2lzdGVycy4KKyAgICAgICAgdmFsdWUtPmFwcGVuZFZlY3RvcldpdGhSZXAoCisgICAgICAgICAg
ICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9wQ2F0Y2hPcmlnaW4sIG5vVmFs
dWUoKSksCisgICAgICAgICAgICBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworCisgICAgICAgIHJl
dHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGUoCisgICAgICAgICAgICBtX2Z0
bFN0YXRlLCBleGl0RGVzY3JpcHRvciwgb3JpZ2luLCBvZmZzZXQsICpleGNlcHRpb25IYW5kbGVy
KTsKKyAgICB9CisjZWxzZSAvLyBGVExfVVNFU19CMwogICAgIHZvaWQgYXBwZW5kT1NSRXhpdEFy
Z3VtZW50c0ZvclBhdGNocG9pbnRJZldpbGxDYXRjaEV4Y2VwdGlvbihTdGFja21hcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIHVuc2lnbmVkIG9m
ZnNldE9mRXhpdEFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9y
aWdpbjsKQEAgLTEwMTUzLDcgKzEwMjE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJ1aWxk
RXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgZXhpdERlc2NyaXB0b3JJbXBsLm1fY29kZU9y
aWdpbiwgbm9WYWx1ZSgpLCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpOwogICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kVmVjdG9yKGZyZXNoTGlzdCk7CiAgICAgfQotI2VuZGlmIC8vICFGVExfVVNFU19C
MworI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhERkc6
OkJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKQEAgLTEwMjQ1LDcgKzEwMzA2LDcgQEAgcHJpdmF0
ZToKICAgICB9CiAKICNpZiBGVExfVVNFU19CMwotICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihC
Mzo6Q2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1Zh
bHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9u
SGFuZGxlciA9IGZhbHNlKQorICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1ZhbHVlKiB2
YWx1ZSwgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hW
YWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2Up
CiAgICAgewogICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBl
bmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1ZSwgaGlnaFZhbHVlKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKworI2lu
Y2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiRlRMRXhjZXB0
aW9uVGFyZ2V0LmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorI2luY2x1ZGUgIkZUTE9TUkV4
aXRIYW5kbGUuaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK1JlZlB0cjxQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlPiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGUoCisgICAg
U3RhdGUmIHN0YXRlLCBPU1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciwgTm9kZU9yaWdpbiBv
cmlnaW4sIHVuc2lnbmVkIG9mZnNldCwKKyAgICBjb25zdCBIYW5kbGVySW5mbyYgaGFuZGxlcikK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoc3Rh
dGUsIGRlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCBoYW5kbGVyKSk7Cit9CisKK1JlZlB0cjxQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpkZWZh
dWx0SGFuZGxlKFN0YXRlJiBzdGF0ZSkKK3sKKyAgICBpZiAoIXN0YXRlLmRlZmF1bHRFeGNlcHRp
b25IYW5kbGUpIHsKKyAgICAgICAgc3RhdGUuZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZSA9IGFkb3B0
UmVmKAorICAgICAgICAgICAgbmV3IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoc3RhdGUsIG51
bGxwdHIsIE5vZGVPcmlnaW4oKSwgMCwgSGFuZGxlckluZm8oKSkpOworICAgIH0KKyAgICByZXR1
cm4gc3RhdGUuZGVmYXVsdEV4Y2VwdGlvbkhhbmRsZTsKK30KKworUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZTo6flBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoKQoreworfQorCitSZWZQdHI8RXhj
ZXB0aW9uVGFyZ2V0PiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpzY2hlZHVsZUV4aXRDcmVh
dGlvbigKKyAgICBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpCit7
CisgICAgaWYgKCFtX2Rlc2NyaXB0b3IpIHsKKyAgICAgICAgLy8gTk9URTogVGhpcyBvYmplY3Qg
Y291bGQgYmUgYSBzaW5nbGV0b24sIGhvd2V2ZXIgdXN1YWxseSB3ZSB0b3NzIHRoZSBFeGNlcHRp
b25IYW5kbGVyCisgICAgICAgIC8vIG9iamVjdCBzaG9ydGx5IGFmdGVyIGNyZWF0aW9uLgorICAg
ICAgICBib29sIGlzRGVmYXVsdEhhbmRsZXIgPSB0cnVlOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoCisgICAgICAgICAgICBuZXcgRXhjZXB0aW9uVGFyZ2V0KGlzRGVmYXVsdEhhbmRsZXIsIG1f
c3RhdGUuZXhjZXB0aW9uSGFuZGxlciwgbnVsbHB0cikpOworICAgIH0KKyAgICBib29sIGlzRGVm
YXVsdEhhbmRsZXIgPSBmYWxzZTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4Y2VwdGlvblRh
cmdldChpc0RlZmF1bHRIYW5kbGVyLCB7IH0sIGNyZWF0ZUhhbmRsZShwYXJhbXMpKSk7Cit9CisK
K3ZvaWQgUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JV
bndpbmQoCisgICAgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpCit7CisgICAgaWYgKCFtX2Rlc2NyaXB0b3IpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0g
Y3JlYXRlSGFuZGxlKHBhcmFtcyk7CisKKyAgICBoYW5kbGUtPmV4aXQubV9pc1Vud2luZEhhbmRs
ZXIgPSB0cnVlOworICAgIGhhbmRsZS0+ZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGVJbmRleDsKKworICAgIEhhbmRsZXJJbmZvIGhhbmRsZXIgPSBtX2hhbmRs
ZXI7CisgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICBbaGFuZGxlLCBoYW5kbGVyLCBj
YWxsU2l0ZUluZGV4XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gaml0LmNvZGVCbG9jaygpOworICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAg
ICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyBuZXdIYW5kbGVyID0gaGFuZGxlcjsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3SGFuZGxlci5zdGFydCA9IGNhbGxTaXRlSW5kZXguYml0cygpOwor
ICAgICAgICAgICAgICAgICAgICBuZXdIYW5kbGVyLmVuZCA9IGNhbGxTaXRlSW5kZXguYml0cygp
ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2RlID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mKGhhbmRsZS0+bGFiZWwpOworICAgICAgICAgICAgICAgICAgICBjb2Rl
QmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworfQorCitQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpQYXRj
aHBvaW50RXhjZXB0aW9uSGFuZGxlKAorICAgIFN0YXRlJiBzdGF0ZSwgT1NSRXhpdERlc2NyaXB0
b3IqIGRlc2NyaXB0b3IsIE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBvZmZzZXQsCisgICAg
Y29uc3QgSGFuZGxlckluZm8mIGhhbmRsZXIpCisgICAgOiBtX3N0YXRlKHN0YXRlKQorICAgICwg
bV9kZXNjcmlwdG9yKGRlc2NyaXB0b3IpCisgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgLCBt
X29mZnNldChvZmZzZXQpCisgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKK3sKK30KKworUmVmUHRy
PE9TUkV4aXRIYW5kbGU+IFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZUhhbmRsZSgK
KyAgICBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpCit7CisgICAg
Ym9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSB0cnVlOworICAgIHJldHVybiBtX2Rlc2NyaXB0b3It
PmVtaXRPU1JFeGl0TGF0ZXIoCisgICAgICAgIG1fc3RhdGUsIFVuY291bnRhYmxlLCBtX29yaWdp
biwgcGFyYW1zLCBtX29mZnNldCwgaXNFeGNlcHRpb25IYW5kbGVyKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VT
X0IzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlX2gKKyNkZWZp
bmUgRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZV9oCisKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKKworI2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworCisjaW5jbHVkZSAiREZH
Tm9kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworbmFtZXNwYWNlIEIzIHsKK2NsYXNzIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczsK
K30gLy8gbmFtZXNwYWNlIEIzCisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGNlcHRpb25U
YXJnZXQ7CitjbGFzcyBTdGF0ZTsKK3N0cnVjdCBPU1JFeGl0RGVzY3JpcHRvcjsKK3N0cnVjdCBP
U1JFeGl0SGFuZGxlOworCitjbGFzcyBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGNyZWF0ZSgK
KyAgICAgICAgU3RhdGUmLCBPU1JFeGl0RGVzY3JpcHRvciosIERGRzo6Tm9kZU9yaWdpbiwgdW5z
aWduZWQgb2Zmc2V0LCBjb25zdCBIYW5kbGVySW5mbyYpOworCisgICAgc3RhdGljIFJlZlB0cjxQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBkZWZhdWx0SGFuZGxlKFN0YXRlJik7CisgICAgCisg
ICAgflBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoKTsKKworICAgIC8vIE5vdGUgdGhhdCB5b3Ug
Y2FuIHVzZSB0aGlzIGhhbmRsZSB0byBzY2hlZHVsZSBhbnkgbnVtYmVyIG9mIGV4aXRzLiBUaGlz
IGNhcGFiaWxpdHkgaXMgaGVyZSBmb3IKKyAgICAvLyB0d28gcmVhc29uczoKKyAgICAvLyAKKyAg
ICAvLyAtIEIzIGNvZGUgZHVwbGljYXRpb24uIEIzIGNvdWxkIHRha2UgYSBwYXRjaHBvaW50IGFu
ZCB0dXJuIGl0IGludG8gbXVsdGlwbGUgcGF0Y2hwb2ludHMgaWYgaXQKKyAgICAvLyAgIGR1cGxp
Y2F0ZXMgY29kZS4gRHVwbGljYXRpbmcgY29kZSBpcyBsZWdhbCBzaW5jZSB5b3UgY2FuIGRvIGl0
IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGJlaGF2aW9yCisgICAgLy8gICBvZiB0aGUgcHJvZ3JhbS4g
T25lIGV4YW1wbGUgaXMgdGFpbCBkdXBsaWNhdGlvbi4gQW5vdGhlciBpcyBqdW1wIHRocmVhZGlu
Zy4gWWV0IGFub3RoZXIgaXMKKyAgICAvLyAgIHBhdGggc3BlY2lhbGl6YXRpb24uIFlvdSB3aWxs
IGhhdmUgb25lIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUgcGVyIHBhdGNocG9pbnQgeW91IGNy
ZWF0ZQorICAgIC8vICAgZHVyaW5nIERGRy0+QjMgbG93ZXJpbmcsIGFuZCB0aGF0IHBhdGNocG9p
bnQgd2lsbCBoYXZlIGEgZ2VuZXJhdG9yIHRoYXQgY2FsbHMKKyAgICAvLyAgIGhhbmRsZS0+c2No
ZWR1bGVCbGFoKCkuIFRoYXQgZ2VuZXJhdG9yIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVz
IGlmIHlvdXIgcGF0Y2hwb2ludCBnb3QKKyAgICAvLyAgIGR1cGxpY2F0ZWQuCisgICAgLy8KKyAg
ICAvLyAtIENvbWJpbmF0aW9uIG9mIHVud2luZCBhbmQgbm9uLXVud2luZCBleGNlcHRpb24gaGFu
ZGxlcnMgaW5zaWRlIG9uZSBwYXRjaHBvaW50LiBBIEdldEJ5SWQgbWF5CisgICAgLy8gICBuZWVk
IGJvdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdCBzZXJ2ZXMgYXMgYW4gdW53aW5kIHRhcmdl
dCBhbmQgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdGhhdAorICAgIC8vICAgaXMgYnJhbmNoZWQgdG8g
ZGlyZWN0bHkgZm9yIG9wZXJhdGlvbiBjYWxscyBlbWl0dGVkIGluc2lkZSB0aGUgcGF0Y2hwb2lu
dC4gSW4gdGhhdCBjYXNlLAorICAgIC8vICAgeW91J2xsIGNhbGwgYm90aCBzY2hlZHVsZUV4aXRD
cmVhdGlvbigpIGFuZCBzY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZCgpIG9uIHRoZSBzYW1l
CisgICAgLy8gICBoYW5kbGUuCisKKyAgICAvLyBTY2hlZHVsZXMgdGhlIGNyZWF0aW9uIG9mIGFu
IE9TUiBleGl0IGp1bXAgZGVzdGluYXRpb24uIFlvdSBkb24ndCBrbm93IHdoZW4gdGhpcyB3aWxs
IGJlCisgICAgLy8gY3JlYXRlZCwgYnV0IGl0IHdpbGwgaGFwcGVuIGJlZm9yZSBsaW5raW5nLiBZ
b3UgY2FuIGxpbmsganVtcHMgdG8gaXQgZHVyaW5nIGxpbmsgdGltZS4gVGhhdCdzCisgICAgLy8g
d2h5IHRoaXMgcmV0dXJucyBhbiBFeGNlcHRpb25UYXJnZXQuIFRoYXQgd2lsbCBjb250YWluIHRo
ZSBqdW1wIGRlc3RpbmF0aW9uICh0YXJnZXQtPmxhYmVsKCkpCisgICAgLy8gYXQgbGluayB0aW1l
LgorICAgIFJlZlB0cjxFeGNlcHRpb25UYXJnZXQ+IHNjaGVkdWxlRXhpdENyZWF0aW9uKGNvbnN0
IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKTsKKworICAgIC8vIFNjaGVkdWxlcyB0aGUg
Y3JlYXRpb24gb2YgYW4gT1NSIGV4aXQganVtcCBkZXN0aW5hdGlvbiwgYW5kIGVuc3VyZXMgdGhh
dCBpdCBnZXRzIGFzc29jaWF0ZWQKKyAgICAvLyB3aXRoIHRoZSBoYW5kbGVyIGZvciBzb21lIGNh
bGxzaXRlIGluZGV4LgorICAgIHZvaWQgc2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQoY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYsIENhbGxTaXRlSW5kZXgpOworCitwcml2
YXRlOgorICAgIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUoCisgICAgICAgIFN0YXRlJiwgT1NS
RXhpdERlc2NyaXB0b3IqLCBERkc6Ok5vZGVPcmlnaW4sIHVuc2lnbmVkIG9mZnNldCwgY29uc3Qg
SGFuZGxlckluZm8mKTsKKworICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBjcmVhdGVIYW5kbGUo
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpOworCisgICAgU3RhdGUmIG1fc3Rh
dGU7CisgICAgT1NSRXhpdERlc2NyaXB0b3IqIG1fZGVzY3JpcHRvcjsKKyAgICBERkc6Ok5vZGVP
cmlnaW4gbV9vcmlnaW47CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CisgICAgSGFuZGxlckluZm8g
bV9oYW5kbGVyOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisKKyNlbmRpZiAvLyBGVExQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5jcHAJKHJldmlzaW9uIDE5NDY2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNs
dWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCisjaW5jbHVkZSAiRlRMUGF0Y2hwb2ludEV4Y2Vw
dGlvbkhhbmRsZS5oIgogI2luY2x1ZGUgPGxsdm0vSW5pdGlhbGl6ZUxMVk0uaD4KICNpbmNsdWRl
IDxzdGRpby5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZp
c2lvbiAxOTQ2NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJn
cy5oIgogI2luY2x1ZGUgIkZUTEpTVGFpbENhbGwuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMu
aCIKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNTEsNiArNTIsOCBAQCBjbGFzcyBTdGFja1Nsb3RWYWx1ZTsK
IAogbmFtZXNwYWNlIEZUTCB7CiAKK2NsYXNzIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU7CisK
IGlubGluZSBib29sIHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKQogewogICAgIHJldHVybiBE
Rkc6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoREZHOjpGVExNb2RlKTsKQEAgLTgyLDggKzg1
LDEwIEBAIHB1YmxpYzoKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbjsK
ICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKICNpZiBGVExfVVNFU19CMwotICAgIEIzOjpQ
YXRjaHBvaW50VmFsdWUqIGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25WYWx1ZSB7IG51bGxw
dHIgfTsKLSAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBoYW5kbGVFeGNlcHRpb25WYWx1ZSB7IG51
bGxwdHIgfTsKKyAgICAvLyBUb3AtbGV2ZWwgZXhjZXB0aW9uIGhhbmRsZXIuIEp1bXAgaGVyZSBp
ZiB5b3Uga25vdyB0aGF0IHlvdSBoYXZlIHRvIGdlbmVyaWNVbndpbmQoKSBhbmQgdGhlcmUKKyAg
ICAvLyBhcmUgbm8gYXBwbGljYWJsZSBjYXRjaCBibG9ja3MgYW55d2hlcmUgaW4gdGhlIEdyYXBo
LgorICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBkZWZhdWx0RXhjZXB0aW9u
SGFuZGxlOworICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyIHsg
Qm94PENDYWxsSGVscGVyczo6TGFiZWw+OjpjcmVhdGUoKSB9OwogICAgIEIzOjpTdGFja1Nsb3RW
YWx1ZSogY2FwdHVyZWRWYWx1ZSB7IG51bGxwdHIgfTsKICNlbHNlIC8vIEZUTF9VU0VTX0IzCiAg
ICAgdW5zaWduZWQgaGFuZGxlU3RhY2tPdmVyZmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQgeyBVSU5U
X01BWCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0
LWJ5LWlkLWdldHRlci1leGNlcHRpb24taW50ZXJlc3RpbmctbGl2ZS1zdGF0ZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQt
Z2V0dGVyLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZlLXN0YXRlLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLWdldHRl
ci1leGNlcHRpb24taW50ZXJlc3RpbmctbGl2ZS1zdGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYxIEBACitmdW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4ID0gMTAwOworICAg
IHZhciByZXN1bHQgPSAxMDE7CisgICAgdmFyIHBmID0gcC5nOworICAgIHRyeSB7CisgICAgICAg
IHggPSAxMDI7CisgICAgICAgIHBmKys7CisgICAgICAgIHJlc3VsdCA9IG8uZjsKKyAgICAgICAg
byA9IDEwNDsKKyAgICAgICAgcGYrKzsKKyAgICAgICAgeCA9IDEwNjsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIHJldHVybiB7b3V0Y29tZTogImV4Y2VwdGlvbiIsIHZhbHVlczogW28sIHBm
LCB4LCByZXN1bHRdfTsKKyAgICB9CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0dXJuIiwgdmFs
dWVzOiBbbywgcGYsIHgsIHJlc3VsdF19OworfQorCitub0lubGluZShmb28pOworCisvLyBXYXJt
IHVwIGZvbygpIHdpdGggcG9seW1vcnBoaWMgb2JqZWN0cyBhbmQgZ2V0dGVycy4KK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19kZWZp
bmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gMTA3OworICAgIH0p
OworICAgIGlmIChpICYgMSkKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2UgaXQgcG9s
eW1vcnBoaWMuCisgICAgdmFyIHJlc3VsdCA9IGZvbyhvLCB7ZzoyMDB9KTsKKyAgICBpZiAocmVz
dWx0Lm91dGNvbWUgIT09ICJyZXR1cm4iKQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDog
YmFkIG91dGNvbWU6ICIgKyByZXN1bHQub3V0Y29tZTsKKyAgICBpZiAocmVzdWx0LnZhbHVlcy5s
ZW5ndGggIT09IDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgbnVtYmVyIG9m
IHZhbHVlczogIiArIHJlc3VsdC52YWx1ZXMubGVuZ3RoOworICAgIGlmIChyZXN1bHQudmFsdWVz
WzBdICE9PSAxMDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzBd
OiAiICsgcmVzdWx0LnZhbHVlc1swXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1sxXSAhPT0gMjAy
KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3Vs
dC52YWx1ZXNbMV07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMl0gIT09IDEwNikKKyAgICAgICAg
dGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJd
OworICAgIGlmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgIHRocm93ICJFcnJv
ciBpbiBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKK30KKworLy8g
Tm93IHRocm93IGFuIGV4Y2VwdGlvbi4KK3ZhciBvID0ge307CitvLl9fZGVmaW5lR2V0dGVyX18o
ImYiLCBmdW5jdGlvbigpIHsKKyAgICB0aHJvdyAiRXJyb3I0MiI7Cit9KTsKK3ZhciByZXN1bHQg
PSBmb28obywge2c6MzAwfSk7CitpZiAocmVzdWx0Lm91dGNvbWUgIT09ICJleGNlcHRpb24iKQor
ICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7
CitpZiAocmVzdWx0LnZhbHVlcy5sZW5ndGggIT09IDQpCisgICAgdGhyb3cgIkVycm9yIGF0IGVu
ZDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsKK2lmIChy
ZXN1bHQudmFsdWVzWzBdICE9PSBvKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1
ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworaWYgKHJlc3VsdC52YWx1ZXNbMV0gIT09IDMw
MSkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0LnZh
bHVlc1sxXTsKK2lmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDIpCisgICAgdGhyb3cgIkVycm9y
IGF0IGVuZDogYmFkIHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CitpZiAocmVzdWx0
LnZhbHVlc1szXSAhPT0gMTAxKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1ZXNb
M106ICIgKyByZXN1bHQudmFsdWVzWzNdOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtZ2V0dGVyLWV4Y2VwdGlvbi1uby1jYXRjaC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQt
YnktaWQtZ2V0dGVyLWV4Y2VwdGlvbi1uby1jYXRjaC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0
aW9uLW5vLWNhdGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKK2Z1bmN0aW9u
IGZvbyhvLCBwKSB7CisgICAgdmFyIHggPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDEwMTsKKyAg
ICB4ID0gMTAyOworICAgIHAgPSAxMDM7CisgICAgcmVzdWx0ID0gby5mOworICAgIG8gPSAxMDQ7
CisgICAgcCA9IDEwNTsKKyAgICB4ID0gMTA2OworICAgIHJldHVybiB7b3V0Y29tZTogInJldHVy
biIsIHZhbHVlczogW28sIHAsIHgsIHJlc3VsdF19OworfQorCitub0lubGluZShmb28pOworCisv
LyBXYXJtIHVwIGZvbygpIHdpdGggcG9seW1vcnBoaWMgb2JqZWN0cyBhbmQgZ2V0dGVycy4KK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIG8u
X19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gMTA3Owor
ICAgIH0pOworICAgIGlmIChpICYgMSkKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2Ug
aXQgcG9seW1vcnBoaWMuCisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0
Lm91dGNvbWUgIT09ICJyZXR1cm4iKQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IG91dGNvbWU6ICIgKyByZXN1bHQub3V0Y29tZTsKKyAgICBpZiAocmVzdWx0LnZhbHVlcy5sZW5n
dGggIT09IDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgbnVtYmVyIG9mIHZh
bHVlczogIiArIHJlc3VsdC52YWx1ZXMubGVuZ3RoOworICAgIGlmIChyZXN1bHQudmFsdWVzWzBd
ICE9PSAxMDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzBdOiAi
ICsgcmVzdWx0LnZhbHVlc1swXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1sxXSAhPT0gMTA1KQor
ICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3VsdC52
YWx1ZXNbMV07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMl0gIT09IDEwNikKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJdOwor
ICAgIGlmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgIHRocm93ICJFcnJvciBp
biBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKK30KKworLy8gTm93
IHRocm93IGFuIGV4Y2VwdGlvbi4KK3ZhciByZXN1bHQ7Cit0cnkgeworICAgIHZhciBvID0ge307
CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRocm93
ICJFcnJvcjQyIjsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmb28obywgMTA4KTsKK30gY2F0Y2gg
KGUpIHsKKyAgICBpZiAoZSAhPSAiRXJyb3I0MiIpCisgICAgICAgIHRocm93ICJFcnJvciBhdCBl
bmQ6IGJhZCBleGNlcHRpb246ICIgKyBlOworICAgIHJlc3VsdCA9IHtvdXRjb21lOiAiZXhjZXB0
aW9uIn07Cit9CitpZiAocmVzdWx0Lm91dGNvbWUgIT09ICJleGNlcHRpb24iKQorICAgIHRocm93
ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1nZXR0ZXIt
ZXhjZXB0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZnRsLWdldC1ieS1pZC1nZXR0ZXItZXhjZXB0aW9uLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLWdldHRlci1l
eGNlcHRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorZnVuY3Rpb24gZm9v
KG8sIHApIHsKKyAgICB2YXIgeCA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMTAxOworICAgIHRy
eSB7CisgICAgICAgIHggPSAxMDI7CisgICAgICAgIHAgPSAxMDM7CisgICAgICAgIHJlc3VsdCA9
IG8uZjsKKyAgICAgICAgbyA9IDEwNDsKKyAgICAgICAgcCA9IDEwNTsKKyAgICAgICAgeCA9IDEw
NjsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHJldHVybiB7b3V0Y29tZTogImV4Y2VwdGlv
biIsIHZhbHVlczogW28sIHAsIHgsIHJlc3VsdF19OworICAgIH0KKyAgICByZXR1cm4ge291dGNv
bWU6ICJyZXR1cm4iLCB2YWx1ZXM6IFtvLCBwLCB4LCByZXN1bHRdfTsKK30KKworbm9JbmxpbmUo
Zm9vKTsKKworLy8gV2FybSB1cCBmb28oKSB3aXRoIHBvbHltb3JwaGljIG9iamVjdHMgYW5kIGdl
dHRlcnMuCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7
fTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIDEwNzsKKyAgICB9KTsKKyAgICBpZiAoaSAmIDEpCisgICAgICAgIG9bImkiICsgaV0gPSBp
OyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAg
aWYgKHJlc3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAgICAgdGhyb3cgIkVycm9yIGlu
IGxvb3A6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7CisgICAgaWYgKHJlc3VsdC52
YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIG51
bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsKKyAgICBpZiAocmVzdWx0
LnZhbHVlc1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZh
bHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMV0g
IT09IDEwNSkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMV06ICIg
KyByZXN1bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDYpCisg
ICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzJdOiAiICsgcmVzdWx0LnZh
bHVlc1syXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0gMTA3KQorICAgICAgICB0aHJv
dyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107Cit9
CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgbyA9IHt9Oworby5fX2RlZmluZUdl
dHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgIkVycm9yNDIiOworfSk7Cit2YXIg
cmVzdWx0ID0gZm9vKG8sIDEwOCk7CitpZiAocmVzdWx0Lm91dGNvbWUgIT09ICJleGNlcHRpb24i
KQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNv
bWU7CitpZiAocmVzdWx0LnZhbHVlcy5sZW5ndGggIT09IDQpCisgICAgdGhyb3cgIkVycm9yIGF0
IGVuZDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsKK2lm
IChyZXN1bHQudmFsdWVzWzBdICE9PSBvKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2
YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworaWYgKHJlc3VsdC52YWx1ZXNbMV0gIT09
IDEwMykKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0
LnZhbHVlc1sxXTsKK2lmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDIpCisgICAgdGhyb3cgIkVy
cm9yIGF0IGVuZDogYmFkIHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CitpZiAocmVz
dWx0LnZhbHVlc1szXSAhPT0gMTAxKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1
ZXNbM106ICIgKyByZXN1bHQudmFsdWVzWzNdOworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtc2xvdy1leGNlcHRpb24taW50ZXJlc3Rpbmct
bGl2ZS1zdGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2Z0bC1nZXQtYnktaWQtc2xvdy1leGNlcHRpb24taW50ZXJlc3RpbmctbGl2ZS1zdGF0
ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
ZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZlLXN0YXRlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKK2Z1bmN0aW9uIGZvbyhvLCBwKSB7CisgICAg
dmFyIHggPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDEwMTsKKyAgICB2YXIgcGYgPSBwLmc7Cisg
ICAgdHJ5IHsKKyAgICAgICAgeCA9IDEwMjsKKyAgICAgICAgcGYrKzsKKyAgICAgICAgcmVzdWx0
ID0gby5mOworICAgICAgICBvID0gMTA0OworICAgICAgICBwZisrOworICAgICAgICB4ID0gMTA2
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIHtvdXRjb21lOiAiZXhjZXB0aW9u
IiwgdmFsdWVzOiBbbywgcGYsIHgsIHJlc3VsdF19OworICAgIH0KKyAgICByZXR1cm4ge291dGNv
bWU6ICJyZXR1cm4iLCB2YWx1ZXM6IFtvLCBwZiwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5saW5l
KGZvbyk7CisKKy8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzLgorZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvOworICAgIG8gPSB7Zjox
MDd9OworICAgIG9bImkiICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZh
ciByZXN1bHQgPSBmb28obywge2c6MjAwfSk7CisgICAgaWYgKHJlc3VsdC5vdXRjb21lICE9PSAi
cmV0dXJuIikKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBvdXRjb21lOiAiICsg
cmVzdWx0Lm91dGNvbWU7CisgICAgaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAg
ICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1
bHQudmFsdWVzLmxlbmd0aDsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gMTA0KQorICAg
ICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1
ZXNbMF07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMV0gIT09IDIwMikKKyAgICAgICAgdGhyb3cg
IkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworICAg
IGlmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDYpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBs
b29wOiBiYWQgdmFsdWVzWzJdOiAiICsgcmVzdWx0LnZhbHVlc1syXTsKKyAgICBpZiAocmVzdWx0
LnZhbHVlc1szXSAhPT0gMTA3KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZh
bHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNl
cHRpb24uCit2YXIgbyA9IHt9Oworby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7
CisgICAgdGhyb3cgIkVycm9yNDIiOworfSk7Cit2YXIgcmVzdWx0ID0gZm9vKG8sIHtnOjMwMH0p
OworaWYgKHJlc3VsdC5vdXRjb21lICE9PSAiZXhjZXB0aW9uIikKKyAgICB0aHJvdyAiRXJyb3Ig
YXQgZW5kOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5vdXRjb21lOworaWYgKHJlc3VsdC52YWx1
ZXMubGVuZ3RoICE9PSA0KQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBudW1iZXIgb2Yg
dmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7CitpZiAocmVzdWx0LnZhbHVlc1swXSAh
PT0gbykKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzBdOiAiICsgcmVzdWx0
LnZhbHVlc1swXTsKK2lmIChyZXN1bHQudmFsdWVzWzFdICE9PSAzMDEpCisgICAgdGhyb3cgIkVy
cm9yIGF0IGVuZDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3VsdC52YWx1ZXNbMV07CitpZiAocmVz
dWx0LnZhbHVlc1syXSAhPT0gMTAyKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1
ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJdOworaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IDEw
MSkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZh
bHVlc1szXTsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwt
Z2V0LWJ5LWlkLXNsb3ctZXhjZXB0aW9uLW5vLWNhdGNoLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlv
bi1uby1jYXRjaC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZnRsLWdldC1ieS1pZC1zbG93LWV4Y2VwdGlvbi1uby1jYXRjaC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACitmdW5jdGlvbiBmb28obywgcCkgeworICAgIHZhciB4
ID0gMTAwOworICAgIHZhciByZXN1bHQgPSAxMDE7CisgICAgeCA9IDEwMjsKKyAgICBwID0gMTAz
OworICAgIHJlc3VsdCA9IG8uZjsKKyAgICBvID0gMTA0OworICAgIHAgPSAxMDU7CisgICAgeCA9
IDEwNjsKKyAgICByZXR1cm4ge291dGNvbWU6ICJyZXR1cm4iLCB2YWx1ZXM6IFtvLCBwLCB4LCBy
ZXN1bHRdfTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworLy8gV2FybSB1cCBmb28oKSB3aXRoIHBv
bHltb3JwaGljIG9iamVjdHMuCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Cisg
ICAgdmFyIG87CisgICAgbyA9IHtmOjEwN307CisgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2Ug
aXQgcG9seW1vcnBoaWMuCisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0
Lm91dGNvbWUgIT09ICJyZXR1cm4iKQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IG91dGNvbWU6ICIgKyByZXN1bHQub3V0Y29tZTsKKyAgICBpZiAocmVzdWx0LnZhbHVlcy5sZW5n
dGggIT09IDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgbnVtYmVyIG9mIHZh
bHVlczogIiArIHJlc3VsdC52YWx1ZXMubGVuZ3RoOworICAgIGlmIChyZXN1bHQudmFsdWVzWzBd
ICE9PSAxMDQpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzBdOiAi
ICsgcmVzdWx0LnZhbHVlc1swXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1sxXSAhPT0gMTA1KQor
ICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1sxXTogIiArIHJlc3VsdC52
YWx1ZXNbMV07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMl0gIT09IDEwNikKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJdOwor
ICAgIGlmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgIHRocm93ICJFcnJvciBp
biBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKK30KKworLy8gTm93
IHRocm93IGFuIGV4Y2VwdGlvbi4KK3ZhciByZXN1bHQ7Cit0cnkgeworICAgIHZhciBvID0ge307
CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRocm93
ICJFcnJvcjQyIjsKKyAgICB9KTsKKyAgICByZXN1bHQgPSBmb28obywgMTA4KTsKK30gY2F0Y2gg
KGUpIHsKKyAgICBpZiAoZSAhPSAiRXJyb3I0MiIpCisgICAgICAgIHRocm93ICJFcnJvciBhdCBl
bmQ6IGJhZCBleGNlcHRpb246ICIgKyBlOworICAgIHJlc3VsdCA9IHtvdXRjb21lOiAiZXhjZXB0
aW9uIn07Cit9CitpZiAocmVzdWx0Lm91dGNvbWUgIT09ICJleGNlcHRpb24iKQorICAgIHRocm93
ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXQtYnktaWQtc2xvdy1leGNl
cHRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9mdGwtZ2V0LWJ5LWlkLXNsb3ctZXhjZXB0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0LWJ5LWlkLXNsb3ctZXhjZXB0aW9u
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKK2Z1bmN0aW9uIGZvbyhvLCBwKSB7
CisgICAgdmFyIHggPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDEwMTsKKyAgICB0cnkgeworICAg
ICAgICB4ID0gMTAyOworICAgICAgICBwID0gMTAzOworICAgICAgICByZXN1bHQgPSBvLmY7Cisg
ICAgICAgIG8gPSAxMDQ7CisgICAgICAgIHAgPSAxMDU7CisgICAgICAgIHggPSAxMDY7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICByZXR1cm4ge291dGNvbWU6ICJleGNlcHRpb24iLCB2YWx1
ZXM6IFtvLCBwLCB4LCByZXN1bHRdfTsKKyAgICB9CisgICAgcmV0dXJuIHtvdXRjb21lOiAicmV0
dXJuIiwgdmFsdWVzOiBbbywgcCwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5saW5lKGZvbyk7CisK
Ky8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzLgorZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvOworICAgIG8gPSB7ZjoxMDd9OworICAg
IG9bImkiICsgaV0gPSBpOyAvLyBNYWtlIGl0IHBvbHltb3JwaGljLgorICAgIHZhciByZXN1bHQg
PSBmb28obyk7CisgICAgaWYgKHJlc3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAgICAg
dGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7Cisg
ICAgaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsK
KyAgICBpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJyb3Ig
aW4gbG9vcDogYmFkIHZhbHVlc1swXTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYgKHJl
c3VsdC52YWx1ZXNbMV0gIT09IDEwNSkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJh
ZCB2YWx1ZXNbMV06ICIgKyByZXN1bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFsdWVz
WzJdICE9PSAxMDYpCisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzJd
OiAiICsgcmVzdWx0LnZhbHVlc1syXTsKKyAgICBpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0gMTA3
KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3Vs
dC52YWx1ZXNbM107Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgbyA9IHt9
Oworby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgdGhyb3cgIkVycm9y
NDIiOworfSk7Cit2YXIgcmVzdWx0ID0gZm9vKG8sIDEwOCk7CitpZiAocmVzdWx0Lm91dGNvbWUg
IT09ICJleGNlcHRpb24iKQorICAgIHRocm93ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAi
ICsgcmVzdWx0Lm91dGNvbWU7CitpZiAocmVzdWx0LnZhbHVlcy5sZW5ndGggIT09IDQpCisgICAg
dGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIG51bWJlciBvZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFs
dWVzLmxlbmd0aDsKK2lmIChyZXN1bHQudmFsdWVzWzBdICE9PSBvKQorICAgIHRocm93ICJFcnJv
ciBhdCBlbmQ6IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOworaWYgKHJlc3Vs
dC52YWx1ZXNbMV0gIT09IDEwMykKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgdmFsdWVz
WzFdOiAiICsgcmVzdWx0LnZhbHVlc1sxXTsKK2lmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDIp
CisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1
ZXNbMl07CitpZiAocmVzdWx0LnZhbHVlc1szXSAhPT0gMTAxKQorICAgIHRocm93ICJFcnJvciBh
dCBlbmQ6IGJhZCB2YWx1ZXNbM106ICIgKyByZXN1bHQudmFsdWVzWzNdOworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1vcGVyYXRpb24tZXhjZXB0aW9uLWlu
dGVyZXN0aW5nLWxpdmUtc3RhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZl
LXN0YXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1pbnRlcmVzdGluZy1saXZlLXN0YXRlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKK2Z1bmN0aW9uIGZvbyhvLCBwKSB7CisgICAg
dmFyIHggPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDEwMTsKKyAgICB2YXIgcGYgPSBwLmc7Cisg
ICAgdHJ5IHsKKyAgICAgICAgeCA9IDEwMjsKKyAgICAgICAgcGYrKzsKKyAgICAgICAgcmVzdWx0
ID0gby5mOworICAgICAgICBvID0gMTA0OworICAgICAgICBwZisrOworICAgICAgICB4ID0gMTA2
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcmV0dXJuIHtvdXRjb21lOiAiZXhjZXB0aW9u
IiwgdmFsdWVzOiBbbywgcGYsIHgsIHJlc3VsdF19OworICAgIH0KKyAgICByZXR1cm4ge291dGNv
bWU6ICJyZXR1cm4iLCB2YWx1ZXM6IFtvLCBwZiwgeCwgcmVzdWx0XX07Cit9CisKK25vSW5saW5l
KGZvbyk7CisKKy8vIFdhcm0gdXAgZm9vKCkgd2l0aCBwb2x5bW9ycGhpYyBvYmplY3RzIGFuZCBu
b24tb2JqZWN0IHR5cGVzLgorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAg
IHZhciBvOworICAgIHZhciBpc09iamVjdCA9IGkgJiAxOworICAgIGlmIChpc09iamVjdCkgewor
ICAgICAgICBvID0ge2Y6MTA3fTsKKyAgICAgICAgb1siaSIgKyBpXSA9IGk7IC8vIE1ha2UgaXQg
cG9seW1vcnBoaWMuCisgICAgfSBlbHNlCisgICAgICAgIG8gPSA0MjsKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKG8sIHtnOjIwMH0pOworICAgIGlmIChyZXN1bHQub3V0Y29tZSAhPT0gInJldHVybiIp
CisgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5v
dXRjb21lOworICAgIGlmIChyZXN1bHQudmFsdWVzLmxlbmd0aCAhPT0gNCkKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVl
cy5sZW5ndGg7CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMF0gIT09IDEwNCkKKyAgICAgICAgdGhy
b3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMF06ICIgKyByZXN1bHQudmFsdWVzWzBdOwor
ICAgIGlmIChyZXN1bHQudmFsdWVzWzFdICE9PSAyMDIpCisgICAgICAgIHRocm93ICJFcnJvciBp
biBsb29wOiBiYWQgdmFsdWVzWzFdOiAiICsgcmVzdWx0LnZhbHVlc1sxXTsKKyAgICBpZiAocmVz
dWx0LnZhbHVlc1syXSAhPT0gMTA2KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFk
IHZhbHVlc1syXTogIiArIHJlc3VsdC52YWx1ZXNbMl07CisgICAgaWYgKGlzT2JqZWN0KSB7Cisg
ICAgICAgIGlmIChyZXN1bHQudmFsdWVzWzNdICE9PSAxMDcpCisgICAgICAgICAgICB0aHJvdyAi
RXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1szXTogIiArIHJlc3VsdC52YWx1ZXNbM107CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IHZvaWQgMCkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZh
bHVlc1szXTsKKyAgICB9Cit9CisKKy8vIE5vdyB0aHJvdyBhbiBleGNlcHRpb24uCit2YXIgcmVz
dWx0ID0gZm9vKG51bGwsIHtnOjMwMH0pOworaWYgKHJlc3VsdC5vdXRjb21lICE9PSAiZXhjZXB0
aW9uIikKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBiYWQgb3V0Y29tZTogIiArIHJlc3VsdC5v
dXRjb21lOworaWYgKHJlc3VsdC52YWx1ZXMubGVuZ3RoICE9PSA0KQorICAgIHRocm93ICJFcnJv
ciBhdCBlbmQ6IGJhZCBudW1iZXIgb2YgdmFsdWVzOiAiICsgcmVzdWx0LnZhbHVlcy5sZW5ndGg7
CitpZiAocmVzdWx0LnZhbHVlc1swXSAhPT0gbnVsbCkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5k
OiBiYWQgdmFsdWVzWzBdOiAiICsgcmVzdWx0LnZhbHVlc1swXTsKK2lmIChyZXN1bHQudmFsdWVz
WzFdICE9PSAzMDEpCisgICAgdGhyb3cgIkVycm9yIGF0IGVuZDogYmFkIHZhbHVlc1sxXTogIiAr
IHJlc3VsdC52YWx1ZXNbMV07CitpZiAocmVzdWx0LnZhbHVlc1syXSAhPT0gMTAyKQorICAgIHRo
cm93ICJFcnJvciBhdCBlbmQ6IGJhZCB2YWx1ZXNbMl06ICIgKyByZXN1bHQudmFsdWVzWzJdOwor
aWYgKHJlc3VsdC52YWx1ZXNbM10gIT09IDEwMSkKKyAgICB0aHJvdyAiRXJyb3IgYXQgZW5kOiBi
YWQgdmFsdWVzWzNdOiAiICsgcmVzdWx0LnZhbHVlc1szXTsKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1uby1jYXRjaC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1v
cGVyYXRpb24tZXhjZXB0aW9uLW5vLWNhdGNoLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtb3BlcmF0aW9uLWV4Y2VwdGlvbi1uby1jYXRj
aC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACitmdW5jdGlvbiBmb28obywgcCkg
eworICAgIHZhciB4ID0gMTAwOworICAgIHZhciByZXN1bHQgPSAxMDE7CisgICAgeCA9IDEwMjsK
KyAgICBwID0gMTAzOworICAgIHJlc3VsdCA9IG8uZjsKKyAgICBvID0gMTA0OworICAgIHAgPSAx
MDU7CisgICAgeCA9IDEwNjsKKyAgICByZXR1cm4ge291dGNvbWU6ICJyZXR1cm4iLCB2YWx1ZXM6
IFtvLCBwLCB4LCByZXN1bHRdfTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworLy8gV2FybSB1cCBm
b28oKSB3aXRoIHBvbHltb3JwaGljIG9iamVjdHMgYW5kIG5vbi1vYmplY3QgdHlwZXMuCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG87CisgICAgdmFyIGlzT2Jq
ZWN0ID0gaSAmIDE7CisgICAgaWYgKGlzT2JqZWN0KSB7CisgICAgICAgIG8gPSB7ZjoxMDd9Owor
ICAgICAgICBvWyJpIiArIGldID0gaTsgLy8gTWFrZSBpdCBwb2x5bW9ycGhpYy4KKyAgICB9IGVs
c2UKKyAgICAgICAgbyA9IDQyOworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAgaWYgKHJl
c3VsdC5vdXRjb21lICE9PSAicmV0dXJuIikKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6
IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7CisgICAgaWYgKHJlc3VsdC52YWx1ZXMu
bGVuZ3RoICE9PSA0KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIG51bWJlciBv
ZiB2YWx1ZXM6ICIgKyByZXN1bHQudmFsdWVzLmxlbmd0aDsKKyAgICBpZiAocmVzdWx0LnZhbHVl
c1swXSAhPT0gMTA0KQorICAgICAgICB0aHJvdyAiRXJyb3IgaW4gbG9vcDogYmFkIHZhbHVlc1sw
XTogIiArIHJlc3VsdC52YWx1ZXNbMF07CisgICAgaWYgKHJlc3VsdC52YWx1ZXNbMV0gIT09IDEw
NSkKKyAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJhZCB2YWx1ZXNbMV06ICIgKyByZXN1
bHQudmFsdWVzWzFdOworICAgIGlmIChyZXN1bHQudmFsdWVzWzJdICE9PSAxMDYpCisgICAgICAg
IHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzJdOiAiICsgcmVzdWx0LnZhbHVlc1sy
XTsKKyAgICBpZiAoaXNPYmplY3QpIHsKKyAgICAgICAgaWYgKHJlc3VsdC52YWx1ZXNbM10gIT09
IDEwNykKKyAgICAgICAgICAgIHRocm93ICJFcnJvciBpbiBsb29wOiBiYWQgdmFsdWVzWzNdOiAi
ICsgcmVzdWx0LnZhbHVlc1szXTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocmVzdWx0LnZh
bHVlc1szXSAhPT0gdm9pZCAwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yIGluIGxvb3A6IGJh
ZCB2YWx1ZXNbM106ICIgKyByZXN1bHQudmFsdWVzWzNdOworICAgIH0KK30KKworLy8gTm93IHRo
cm93IGFuIGV4Y2VwdGlvbi4KK3ZhciByZXN1bHQ7Cit0cnkgeworICAgIHJlc3VsdCA9IGZvbyhu
dWxsLCAxMDgpOworfSBjYXRjaCAoZSkgeworICAgIHJlc3VsdCA9IHtvdXRjb21lOiAiZXhjZXB0
aW9uIn07Cit9CitpZiAocmVzdWx0Lm91dGNvbWUgIT09ICJleGNlcHRpb24iKQorICAgIHRocm93
ICJFcnJvciBhdCBlbmQ6IGJhZCBvdXRjb21lOiAiICsgcmVzdWx0Lm91dGNvbWU7Cg==
</data>
<flag name="review"
          id="293433"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>