<?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>202085</bug_id>
          
          <creation_ts>2019-09-21 19:41:33 -0700</creation_ts>
          <short_desc>Introducing Integrity audit functions.</short_desc>
          <delta_ts>2019-09-23 23:05:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=202132</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202082</dependson>
          <blocked>202060</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rakuco</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573124</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-21 19:41:33 -0700</bug_when>
    <thetext>These will be used later to help debug memory corruption bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573175</commentid>
    <comment_count>1</comment_count>
      <attachid>379340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-22 00:43:10 -0700</bug_when>
    <thetext>Created attachment 379340
proposed patch.

Let&apos;s get some EWS testing first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573195</commentid>
    <comment_count>2</comment_count>
      <attachid>379340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-22 09:02:31 -0700</bug_when>
    <thetext>Comment on attachment 379340
proposed patch.

Ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573204</commentid>
    <comment_count>3</comment_count>
      <attachid>379340</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-09-22 15:28:06 -0700</bug_when>
    <thetext>Comment on attachment 379340
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:29
&gt; +           Random audits are triggered by the m_triggerBits bits in VM::m_integrityRandom.
&gt; +           m_triggerBits is a 64-bit bitfield.

Can you specify where auditing happens. It looks like it happens during GC on whatever thread is assisting with GC at the time.

&gt; Source/JavaScriptCore/tools/Integrity.cpp:64
&gt; +    return vm.random().getUint32() &gt;= threshold;

Shouldn&apos;t this be: vm.random().getUint32() &lt;= threshold?

&gt; Source/JavaScriptCore/tools/Integrity.h:64
&gt; +    static constexpr int numberOfTriggerBits = (sizeof(m_triggerBits) * 8) - 1;

Can we make this: (sizeof(m_triggerBits) * CHAR_BITS) - 1?

&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:39
&gt; +#define __CONDITION(x) (x), #x
&gt; +#define __VERIFY(action, verifier, cond, ...) do { \

Nit: Why are these prefixed with __? That&apos;s not usually how we format our macros.

&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:74
&gt; +        if (cellType == BigIntType) {
&gt; +            auto* bigInt = jsCast&lt;JSBigInt*&gt;(cell);
&gt; +            cellSize = JSBigInt::allocationSize(bigInt-&gt;length());
&gt; +        } else if (cellType == DirectArgumentsType) {
&gt; +            auto* args = jsCast&lt;DirectArguments*&gt;(cell);
&gt; +            cellSize = DirectArguments::allocationSize(args-&gt;m_minCapacity);
&gt; +        } else if (cellType == FinalObjectType)
&gt; +            cellSize = JSFinalObject::allocationSize(structure-&gt;inlineCapacity());
&gt; +        else if (cellType == LexicalEnvironmentType) {
&gt; +            auto* env = jsCast&lt;JSLexicalEnvironment*&gt;(cell);
&gt; +            cellSize = JSLexicalEnvironment::allocationSize(env-&gt;symbolTable());
&gt; +        } else if (cellType == ModuleEnvironmentType) {
&gt; +            auto* env = jsCast&lt;JSModuleEnvironment*&gt;(cell);
&gt; +            cellSize = JSModuleEnvironment::allocationSize(env-&gt;symbolTable());
&gt; +        } else if (cellType == ModuleNamespaceObjectType) {
&gt; +            auto* obj = jsCast&lt;JSModuleNamespaceObject*&gt;(cell);
&gt; +            cellSize = JSModuleNamespaceObject::allocationSize(obj-&gt;m_names.capacity());
&gt; +        }

why not make this a switch? Seems like you also want to have a RELEASE_ASSERT_NOT_REACHED() in the default case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573207</commentid>
    <comment_count>4</comment_count>
      <attachid>379340</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-22 16:25:57 -0700</bug_when>
    <thetext>Comment on attachment 379340
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:29
&gt;&gt; +           m_triggerBits is a 64-bit bitfield.
&gt; 
&gt; Can you specify where auditing happens. It looks like it happens during GC on whatever thread is assisting with GC at the time.

I can add a general comment about where to deploy this but that&apos;s not what this patch is about.  In this patch, I&apos;m introducing the auditing tool.  I added 1 single use of it in SlotVisitor as an example.  See https://bugs.webkit.org/show_bug.cgi?id=202060 for other (though not complete) places I would deploy this.  That patch was getting humungous.  So, I decided to post this part for review separately so that it can get better attention in a review.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.cpp:64
&gt;&gt; +    return vm.random().getUint32() &gt;= threshold;
&gt; 
&gt; Shouldn&apos;t this be: vm.random().getUint32() &lt;= threshold?

You are correct.  Will fix.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.h:64
&gt;&gt; +    static constexpr int numberOfTriggerBits = (sizeof(m_triggerBits) * 8) - 1;
&gt; 
&gt; Can we make this: (sizeof(m_triggerBits) * CHAR_BITS) - 1?

Will fix.

&gt;&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:39
&gt;&gt; +#define __VERIFY(action, verifier, cond, ...) do { \
&gt; 
&gt; Nit: Why are these prefixed with __? That&apos;s not usually how we format our macros.

I wanted short names but don&apos;t want it to collide with what other headers may use.  Also, these are used locally only unlike other macros that we use across many files.  I&apos;ll rename these AUDIT_CONDITION and AUDIT_VERIFY.

&gt;&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:74
&gt;&gt; +        }
&gt; 
&gt; why not make this a switch? Seems like you also want to have a RELEASE_ASSERT_NOT_REACHED() in the default case?

Sure, why not.  This started out being a small list, but it grew and grew and grew.  I&apos;ll switch to the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573208</commentid>
    <comment_count>5</comment_count>
      <attachid>379348</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-22 16:34:57 -0700</bug_when>
    <thetext>Created attachment 379348
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573368</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 11:32:08 -0700</bug_when>
    <thetext>Everything is red</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573372</commentid>
    <comment_count>7</comment_count>
      <attachid>379383</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 11:44:11 -0700</bug_when>
    <thetext>Created attachment 379383
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573473</commentid>
    <comment_count>8</comment_count>
      <attachid>379383</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 16:34:31 -0700</bug_when>
    <thetext>Comment on attachment 379383
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        be used wherever we want to audit a cell to ensure it is not corrupted.  However,

&quot;ensure&quot; =&gt; &quot;probabilistically ensure&quot;?

I think the most interesting part of this patch is how you plan to audit a cell to see if it&apos;s corrupted, but you don&apos;t discuss that at all in this changelog

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        example use in SlotVisitor.  We&apos;ll follow up later with more patches to deploy
&gt; +        this tool throughout the VM.

How are you planning on deploying this? Is there somewhere you document your plans?

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +               Minimal - do a minimal quick audit (minimize perf impact).

why have this?

&gt; Source/JavaScriptCore/ChangeLog:83
&gt; +           by re-seeding it with a cryptographically random number each GC.

why? If anything, it seems way more useful to be able to seed your RNG with a constant. (For example, in our fuzzers, we want fixed random numbers to be able to reproduce crashes more easily.)

&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:225
&gt;          validateCell(jsCell);
&gt; +        Integrity::auditCell(vm(), jsCell);

why both auditCell and validateCell?

&gt; Source/JavaScriptCore/runtime/ClassInfo.h:225
&gt; +    unsigned cppSize;

nit: not a fan of this name. These all sound better to me:
classSize
staticClassSize

&gt; Source/JavaScriptCore/runtime/OptionsList.h:347
&gt; +    v(Double, randomIntegrityAuditRate, 0.05, Normal, &quot;Probability of random integrity audits (0.0 - 1.0)&quot;) \

&quot;(0.0 - 1.0)&quot; =&gt; &quot;[0.0 - 1.0]&quot;

&gt; Source/JavaScriptCore/tools/Integrity.cpp:41
&gt; +    reloadAndCheckShouldAuditSlow(vm); // This will initialize the audit trigger bits.

nit: no need for this comment

&gt; Source/JavaScriptCore/tools/Integrity.cpp:54
&gt; +    // Reload the trigger bits.
&gt; +    m_triggerBits = 1ull &lt;&lt; 63; // Set the terminator bit (i.e. &quot;need reload&quot;) in the high bit.

these comments aren&apos;t helpful

&gt; Source/JavaScriptCore/tools/Integrity.cpp:58
&gt; +        bool trigger = (vm.random().getUint32() &lt;= threshold);

style nit: not need for parens

&gt; Source/JavaScriptCore/tools/Integrity.h:48
&gt; +static constexpr AuditLevel DefaultAuditLevel = AuditLevel::None;
&gt; +#else
&gt; +static constexpr AuditLevel DefaultAuditLevel = AuditLevel::Random;

nit: I think the &quot;D&quot; in &quot;DefaultAuditLevel&quot; should be lower case, right?

&gt; Source/JavaScriptCore/tools/Integrity.h:86
&gt; +    if (auditLevel == AuditLevel::None)
&gt; +        return;
&gt; +
&gt; +    if (auditLevel == AuditLevel::Minimal)
&gt; +        auditCellMinimally(vm, cell);
&gt; +    else if (auditLevel == AuditLevel::Full)
&gt; +        auditCellFully(vm, cell);
&gt; +    else if (auditLevel == AuditLevel::Random)
&gt; +        auditCellRandomly(vm, cell);

nit: why not switch statement here so compiler will warn you when you don&apos;t implement a new enum type in future?

&gt; Source/JavaScriptCore/tools/VMInspector.h:89
&gt; +    static bool verifyCellSize(VM&amp;, JSCell*, Optional&lt;size_t&gt; allocatorCellSize = { });

why optional? You always pass in non null</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573484</commentid>
    <comment_count>9</comment_count>
      <attachid>379383</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 17:10:42 -0700</bug_when>
    <thetext>Comment on attachment 379383
proposed patch.

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

z

&gt;&gt; Source/JavaScriptCore/ChangeLog:9
&gt;&gt; +        be used wherever we want to audit a cell to ensure it is not corrupted.  However,
&gt; 
&gt; &quot;ensure&quot; =&gt; &quot;probabilistically ensure&quot;?
&gt; 
&gt; I think the most interesting part of this patch is how you plan to audit a cell to see if it&apos;s corrupted, but you don&apos;t discuss that at all in this changelog

I&apos;ve made the text change.

I&apos;ll add something below to describe what I do in the full audit.

&gt;&gt; Source/JavaScriptCore/ChangeLog:12
&gt;&gt; +        this tool throughout the VM.
&gt; 
&gt; How are you planning on deploying this? Is there somewhere you document your plans?

https://bugs.webkit.org/show_bug.cgi?id=202060 is a first attempt at this, which is how I realized that the patch was going to be too large.  So, I broke out the auditing mechanism out into this patch.

&gt;&gt; Source/JavaScriptCore/ChangeLog:17
&gt;&gt; +               Minimal - do a minimal quick audit (minimize perf impact).
&gt; 
&gt; why have this?

I plan to experiment with possibly turning this on always for release builds later.  I included the option here so that it&apos;s easier to experiment with.  If this turns out to be non-viable, I can remove it later.  If you strongly prefer that I leave this part out until we have a definitive use, I can remove it.

&gt;&gt; Source/JavaScriptCore/ChangeLog:83
&gt;&gt; +           by re-seeding it with a cryptographically random number each GC.
&gt; 
&gt; why? If anything, it seems way more useful to be able to seed your RNG with a constant. (For example, in our fuzzers, we want fixed random numbers to be able to reproduce crashes more easily.)

Because in the real world, when not fuzzing, we actually want random things to be really random.  The only reason for using WeakRandom is for speed.  Doing this adds more random-ness.  When we add a test mode to make random numbers reproducible later, we can add code to disable this.

&gt;&gt; Source/JavaScriptCore/heap/SlotVisitor.cpp:225
&gt;&gt; +        Integrity::auditCell(vm(), jsCell);
&gt; 
&gt; why both auditCell and validateCell?

validateCell() is pre-existing code that always run even in release mode.  I can certainly consolidate it.  Can we leave that for a follow up exercise?

&gt;&gt; Source/JavaScriptCore/runtime/ClassInfo.h:225
&gt;&gt; +    unsigned cppSize;
&gt; 
&gt; nit: not a fan of this name. These all sound better to me:
&gt; classSize
&gt; staticClassSize

Sure, I&apos;ll replace with staticClassSize.

&gt;&gt; Source/JavaScriptCore/runtime/OptionsList.h:347
&gt;&gt; +    v(Double, randomIntegrityAuditRate, 0.05, Normal, &quot;Probability of random integrity audits (0.0 - 1.0)&quot;) \
&gt; 
&gt; &quot;(0.0 - 1.0)&quot; =&gt; &quot;[0.0 - 1.0]&quot;

Thanks.  Fixed.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.cpp:41
&gt;&gt; +    reloadAndCheckShouldAuditSlow(vm); // This will initialize the audit trigger bits.
&gt; 
&gt; nit: no need for this comment

Removed.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.cpp:54
&gt;&gt; +    m_triggerBits = 1ull &lt;&lt; 63; // Set the terminator bit (i.e. &quot;need reload&quot;) in the high bit.
&gt; 
&gt; these comments aren&apos;t helpful

Removed.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.cpp:58
&gt;&gt; +        bool trigger = (vm.random().getUint32() &lt;= threshold);
&gt; 
&gt; style nit: not need for parens

Removed.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.h:48
&gt;&gt; +static constexpr AuditLevel DefaultAuditLevel = AuditLevel::Random;
&gt; 
&gt; nit: I think the &quot;D&quot; in &quot;DefaultAuditLevel&quot; should be lower case, right?

I always feel conflicted about this.  Constants (e.g in enums) should be upper case.  Variables should be lower case.  Here we have a variable that is not really a variable, and a constant that is not an enum.  The initialization here looks wrong, but its use below ...

    template&lt;AuditLevel auditLevel = DefaultAuditLevel&gt;

... looks correct.  In contrast, ...

    template&lt;AuditLevel auditLevel = defaultAuditLevel&gt;

... looks wrong.  How strongly do you feel about this?  I don&apos;t think there&apos;s a official style guide rule about this yet.

&gt;&gt; Source/JavaScriptCore/tools/Integrity.h:86
&gt;&gt; +        auditCellRandomly(vm, cell);
&gt; 
&gt; nit: why not switch statement here so compiler will warn you when you don&apos;t implement a new enum type in future?

Sure.  Fixed.

&gt;&gt; Source/JavaScriptCore/tools/VMInspector.h:89
&gt;&gt; +    static bool verifyCellSize(VM&amp;, JSCell*, Optional&lt;size_t&gt; allocatorCellSize = { });
&gt; 
&gt; why optional? You always pass in non null

I started out with this as a size_t optionalAllocatorCellSize = 0, but thought that using Optional documents the code better.  This code isn&apos;t exactly in the fast path, plus it&apos;s a template.  I figure the compiler will optimize it all away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573492</commentid>
    <comment_count>10</comment_count>
      <attachid>379412</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 17:29:34 -0700</bug_when>
    <thetext>Created attachment 379412
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573543</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 21:03:44 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #9)
&gt; &gt;&gt; Source/JavaScriptCore/ChangeLog:83
&gt; &gt;&gt; +           by re-seeding it with a cryptographically random number each GC.
&gt; &gt; 
&gt; &gt; why? If anything, it seems way more useful to be able to seed your RNG with a constant. (For example, in our fuzzers, we want fixed random numbers to be able to reproduce crashes more easily.)
&gt; 
&gt; Because in the real world, when not fuzzing, we actually want random things
&gt; to be really random.  The only reason for using WeakRandom is for speed. 
&gt; Doing this adds more random-ness.  When we add a test mode to make random
&gt; numbers reproducible later, we can add code to disable this.

Saam clarified that I need to have some affordance here to turn off randomness for fuzzing.  Will fix.

&gt; &gt;&gt; Source/JavaScriptCore/tools/VMInspector.h:89
&gt; &gt;&gt; +    static bool verifyCellSize(VM&amp;, JSCell*, Optional&lt;size_t&gt; allocatorCellSize = { });
&gt; &gt; 
&gt; &gt; why optional? You always pass in non null
&gt; 
&gt; I started out with this as a size_t optionalAllocatorCellSize = 0, but
&gt; thought that using Optional documents the code better.  This code isn&apos;t
&gt; exactly in the fast path, plus it&apos;s a template.  I figure the compiler will
&gt; optimize it all away.

Saam convinced me that I don&apos;t need this optional.  It&apos;s removed.

I&apos;ll also fix Random::shouldAudit() to be safe to call concurrently because SlotVisitor::appendJSCellOrAuxiliary() can be called from more than 1 thread at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573560</commentid>
    <comment_count>12</comment_count>
      <attachid>379429</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 21:53:48 -0700</bug_when>
    <thetext>Created attachment 379429
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573561</commentid>
    <comment_count>13</comment_count>
      <attachid>379383</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 22:01:47 -0700</bug_when>
    <thetext>Comment on attachment 379383
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/tools/Integrity.h:48
&gt;&gt;&gt; +static constexpr AuditLevel DefaultAuditLevel = AuditLevel::Random;
&gt;&gt; 
&gt;&gt; nit: I think the &quot;D&quot; in &quot;DefaultAuditLevel&quot; should be lower case, right?
&gt; 
&gt; I always feel conflicted about this.  Constants (e.g in enums) should be upper case.  Variables should be lower case.  Here we have a variable that is not really a variable, and a constant that is not an enum.  The initialization here looks wrong, but its use below ...
&gt; 
&gt;     template&lt;AuditLevel auditLevel = DefaultAuditLevel&gt;
&gt; 
&gt; ... looks correct.  In contrast, ...
&gt; 
&gt;     template&lt;AuditLevel auditLevel = defaultAuditLevel&gt;
&gt; 
&gt; ... looks wrong.  How strongly do you feel about this?  I don&apos;t think there&apos;s a official style guide rule about this yet.

It doesn&apos;t bother me much either way, I just thought our style guide said it should be lower case. If there is no style rule, I don&apos;t have a personal preference</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573562</commentid>
    <comment_count>14</comment_count>
      <attachid>379429</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 22:04:00 -0700</bug_when>
    <thetext>Comment on attachment 379429
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/heap/Heap.cpp:1273
&gt; +        vm().random().setSeed(cryptographicallyRandomNumber()); // Piggy back on the GC to randomize a bit.

nit: not a fan of comments that just says what the code is doing

&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:39
&gt; +#undef AUDIT_CONDITION
&gt; +#undef AUDIT_VERIFY

why? Seems slightly gross, and shouldn&apos;t be needed

&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:56
&gt; +    if (isDynamicallySizedType(cellType)) {

nit: seems like this should be a helper that exists outside of VMInspector, something like:

size_t cellSize(JSCell*);

It can then branch on isDynamicallySizedType or look in classinfo.

&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:90
&gt; +        AUDIT_VERIFY(action, verifier, cellSize &lt;= allocatorCellSize, cell, cellType, cellSize, allocatorCellSize);

might be nice to also assert the dynamically sized cell size is &gt;= class info&apos;s cell size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573570</commentid>
    <comment_count>15</comment_count>
      <attachid>379429</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 22:50:25 -0700</bug_when>
    <thetext>Comment on attachment 379429
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:1273
&gt;&gt; +        vm().random().setSeed(cryptographicallyRandomNumber()); // Piggy back on the GC to randomize a bit.
&gt; 
&gt; nit: not a fan of comments that just says what the code is doing

Will remove.

&gt;&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:39
&gt;&gt; +#undef AUDIT_VERIFY
&gt; 
&gt; why? Seems slightly gross, and shouldn&apos;t be needed

Will remove.

&gt;&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:56
&gt;&gt; +    if (isDynamicallySizedType(cellType)) {
&gt; 
&gt; nit: seems like this should be a helper that exists outside of VMInspector, something like:
&gt; 
&gt; size_t cellSize(JSCell*);
&gt; 
&gt; It can then branch on isDynamicallySizedType or look in classinfo.

Sounds good.  I&apos;ll refactor this in a follow up patch.

&gt;&gt; Source/JavaScriptCore/tools/VMInspectorInlines.h:90
&gt;&gt; +        AUDIT_VERIFY(action, verifier, cellSize &lt;= allocatorCellSize, cell, cellType, cellSize, allocatorCellSize);
&gt; 
&gt; might be nice to also assert the dynamically sized cell size is &gt;= class info&apos;s cell size

Will add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573571</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-23 23:03:06 -0700</bug_when>
    <thetext>Landed in r250285: &lt;http://trac.webkit.org/r250285&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573572</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-23 23:04:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/55651198&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379340</attachid>
            <date>2019-09-22 00:43:10 -0700</date>
            <delta_ts>2019-09-22 16:34:57 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-202085.patch</filename>
            <type>text/plain</type>
            <size>41998</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwMTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyOSBA
QAorMjAxOS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgSW50ZWdyaXR5IGF1ZGl0IGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEludHJvZHVjZWQgSW50ZWdyaXR5IGF1
ZGl0IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGF0IHNldmVyYWwKKyAgICAgICAg
ICAgQXVkaXRMZXZlbHM6CisgICAgICAgICAgICAgICBOb25lIC0gZG9uJ3QgZG8gYW55IGF1ZGl0
cy4KKyAgICAgICAgICAgICAgIE1pbmltYWwgLSBkbyBhIG1pbmltYWwgcXVpY2sgYXVkaXQgKG1p
bmltaXplIHBlcmYgaW1wYWN0KS4KKyAgICAgICAgICAgICAgIEZ1bGwgLSBkbyBhIGZ1bGwgYXVk
aXQgb2YgdGhlIG1hbnkgYXNwZWN0cyBvZiBhIGNlbGwuCisgICAgICAgICAgICAgICBSYW5kb20g
LSByYW5kb21seSBkbyBhIGZ1bGwgYXVkaXQgd2l0aCBhIHByb2JhYmlsaXR5IGRpY3RhdGVkIGJ5
CisgICAgICAgICAgICAgICAgICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgp
IGJldHdlZW4gMC4wIChuZXZlciBhdWRpdCkgYW5kCisgICAgICAgICAgICAgICAgICAgIDEuMCAo
YXVkaXQgYXQgZXZlcnkgY2hhbmNlKS4KKworICAgICAgICAgICBUaGUgZGVmYXVsdCBBdWRpdExl
dmVsIGZvciBEZWJ1ZyBidWlsZHMgaXMgUmFuZG9tLgorICAgICAgICAgICBUaGUgZGVmYXVsdCBB
dWRpdExldmVsIGZvciBSZWxlYXNlIGJ1aWxkcyBpcyBOb25lLgorICAgICAgICAgICBUaGUgZGVm
YXVsdCBPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSBpcyAwLjA1LgorCisgICAg
ICAgICAgIFRoZSBmdWxsIGF1ZGl0IHVzZXMgdGhlIFZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsKCkg
dGVtcGxhdGUgZnVuY3Rpb24gdG8gZG8gaXRzCisgICAgICAgICAgIGpvYi4gIFRoZSByZWFzb24g
Zm9yIGtlZXBpbmcgdGhpcyBzZXBhcmF0ZSBpcyB0byBhbGxvdyB0aGUgdGVtcGxhdGUgZnVuY3Rp
b24KKyAgICAgICAgICAgdG8gYmUgdXNlZCBsYXRlciBmb3IgZGVidWcgY2hlY2tzIHRoYXQgd2Fu
dCB0byB0YWtlIHNvbWUgY3VzdG9tIGFjdGlvbiBvbgorICAgICAgICAgICB2ZXJpZmljYXRpb24g
ZmFpbHVyZSBpbnN0ZWFkIG9mIGNyYXNoaW5nIHdpdGggYSBSRUxFQVNFX0FTU0VSVC4KKworICAg
ICAgICAgICBIb3cgcmFuZG9tIGF1ZGl0cyB3b3JrPworICAgICAgICAgICA9PT09PT09PT09PT09
PT09PT09PT09CisgICAgICAgICAgIFJhbmRvbSBhdWRpdHMgYXJlIHRyaWdnZXJlZCBieSB0aGUg
bV90cmlnZ2VyQml0cyBiaXRzIGluIFZNOjptX2ludGVncml0eVJhbmRvbS4KKyAgICAgICAgICAg
bV90cmlnZ2VyQml0cyBpcyBhIDY0LWJpdCBiaXRmaWVsZC4KKworICAgICAgICAgICBJZiBPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSBpcyAwLCBtX3RyaWdnZXJCaXRzIHdpbGwg
YWx3YXlzIGJlIDAsCisgICAgICAgICAgIGFuZCBubyBhdWRpdHMgd2lsbCBiZSBkb25lLgorCisg
ICAgICAgICAgIElmIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIG5vbi16
ZXJvLCBtX3RyaWdnZXJCaXRzIHdpbGwKKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYXMgZm9sbG93
czoKKworICAgICAgICAgICAgICAgIHwgMSByZWxvYWQgYml0IHwgLi4uIDYzIHRyaWdnZXIgYml0
cyAuLi4gfAorCisgICAgICAgICAgIFRoZSByZWxvYWQgYml0IGlzIGFsd2F5cyBzZXQgKG1vcmUg
ZGV0YWlscyBiZWxvdykuCisgICAgICAgICAgIFRoZSB0cmlnZ2VyIGJpdHMgYXJlIHJhbmRvbWx5
IHNldCBkZXBlbmRpbmcgaWYgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorCisgICAgICAgICAgICAg
ICAgVk06OnJhbmRvbSgpIDw9IE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpICog
VUlOVF9NQVgKKworICAgICAgICAgICBXaGVuIEludGVncml0eTo6YXVkaXRDZWxsKCkgaXMgY2Fs
bGVkLCB3ZSB0YWtlIHRoZSBib3R0b20gYml0IGFzIHRoZSB0cmlnZ2VyCisgICAgICAgICAgIGJp
dCBmb3IgdGhlIGN1cnJlbnQgY2VsbCwgYW5kIHNoaWZ0cyB0aGUgcmVzdCBkb3duIGJ5IDEuCisK
KyAgICAgICAgICAgSWYgbV90cmlnZ2VyQml0cyBpcyBub24tbnVsbCBhZnRlciB0aGUgc2hpZnQs
IHRoZSB0YWtlbiB0cmlnZ2VyIGJpdCB3aWxsIGRpY3RhdGUKKyAgICAgICAgICAgd2hldGhlciB3
ZSBkbyBhIGZ1bGwgYXVkaXQgb24gdGhlIGNlbGwgb3Igbm90LgorCisgICAgICAgICAgIE9uY2Ug
dGhlIHJlbG9hZCBiaXQgcmVhY2hlcyB0aGUgYm90dG9tLCB3ZSBjYWxsIGEgcmVsb2FkIGZ1bmN0
aW9uIHRvCisgICAgICAgICAgIHJlLWluaXRpYWxpemUgbV90cmlnZ2VyQml0cy4gIFRoZSByZWxv
YWQgZnVuY3Rpb24gYWxzbyByZXR1cm5zIGEgYm9vbAorICAgICAgICAgICBpbmRpY2F0aW5nIHdo
ZXRoZXIgdG8gdHJpZ2dlciBhIGZ1bGwgYXVkaXQgb2YgdGhlIGN1cnJlbnQgY2VsbC4KKworICAg
ICAgICAgICBXaXRoIHRoaXMgc2NoZW1lLCB3ZSBvbmx5IG5lZWQgdG8gY2FsbCB0aGUgcmVsb2Fk
IGZ1bmN0aW9uIG9uY2UgaW4gZXZlcnkKKyAgICAgICAgICAgNjQgY2FsbHMgdG8gSW50ZWdyaXR5
OjphdWRpdENlbGwoKSwgYW5kIGNhbiBlZmZpY2llbnRseSBkZXRlcm1pbmUgd2hldGhlciB0bwor
ICAgICAgICAgICB0cmlnZ2VyIHRoZSBhdWRpdCB0aGUgb3RoZXIgNjMgdGltZXMgd2l0aCB0aGUg
cHJvYmFiaWxpdHkgc3BlY2lmaWVkIGluCisgICAgICAgICAgIE9wdGlvbnM6OnJhbmRvbUludGVn
cml0eUF1ZGl0UmF0ZSgpLgorCisgICAgICAgIDIuIEVtYmVkZGVkIHRoZSBDKysgY2xhc3Mgc2l6
ZSBvZiBKU0NlbGxzIGludG8gdGhlaXIgQ2xhc3NJbmZvLiAgVGhpcyBpcyB1c2VkIGluCisgICAg
ICAgICAgIHRoZSBmdWxsIGF1ZGl0cyB0byB2ZXJpZnkgY2VsbCBzaXplcy4KKworICAgICAgICAz
LiBBZGRlZCBpc0R5bmFtaWNhbGx5U2l6ZWRUeXBlKCkgdG8gY2hlY2sgaWYgYSBKU1R5cGUgaGFz
IGEgZHluYW1pYyBzaXplIGFsbG9jYXRpb24KKyAgICAgICAgICAgaS5lLiB0aGUgc2l6ZSBvZiBp
bnN0YW5jZXMgb2YgdGhpcyB0eXBlIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IHRoZSBzdGF0aWMgc2l6
ZQorICAgICAgICAgICBvZiBpdHMgY2xhc3MsIGJ1dCByYXRoZXIsIGRlcGVuZHMgb24gc29tZSBy
dW50aW1lIHZhcmlhYmxlLgorCisgICAgICAgIDQuIE1hZGUgdGhlIFZNSW5zcGVjdG9yIGEgZnJp
ZW5kIG9mIHNldmVyYWwgY2xhc3NlcyBzbyB0aGF0IGl0IGNhbiBhY2Nlc3MgdGhlaXIKKyAgICAg
ICAgICAgcHJpdmF0ZSBtZXRob2RzIGFuZCBmaWVsZHMuCisKKyAgICAgICAgNS4gTW92ZWQgSlNC
aWdJbnQ6OmFsbG9jYXRpb25TaXplKCkgZnJvbSBCaWdJbnQuY3BwIHRvIGl0cyBoZWFkZXIgZmls
ZSBzbyB0aGF0CisgICAgICAgICAgIHdlIGNhbiB1c2UgaXQgaW4gVk1JbnNwZWN0b3I6OnZlcmlm
eUNlbGxTaXplKCkuCisKKyAgICAgICAgNi4gR2F2ZSB0aGUgSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QoKSBpdHMgb3duIEpTVHlwZSBzbyB0aGF0IHdlIGNhbiBpZGVudGlmeSBpdAorICAgICAgICAg
ICBhcyBhIGR5bmFtaWNhbGx5IHNpemVkIG9iamVjdC4KKworICAgICAgICA3LiBJbmNyZWFzZWQg
dGhlIHJhbmRvbW5lc3Mgb2YgVk06OnJhbmRvbSgpICh3aGljaCBpcyBpbXBsZW1lbnRlZCB3aXRo
IFdlYWtSYW5kb20pCisgICAgICAgICAgIGJ5IHJlLXNlZWRpbmcgaXQgd2l0aCBhIGNyeXB0b2dy
YXBoaWNhbGx5IHJhbmRvbSBudW1iZXIgZWFjaCBHQy4KKworICAgICAgICA4LiBDYWxsZWQgSW50
ZWdyaXR5OjphdWRpdENlbGwoKSBvbiBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlh
cnkoKSdzIGNlbGwKKyAgICAgICAgICAgYXMgYSBmaXJzdCB1c2Ugb2YgYXVkaXRDZWxsKCkuICBN
b3JlIHVzZXMgd2lsbCBiZSBhZGRlZCBpbiBsYXRlciBwYXRjaGVzIHRvCisgICAgICAgICAgIGZv
bGxvdy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVuQmVnaW5QaGFz
ZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogcnVudGltZS9DbGFz
c0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWxsb2NhdGlv
blNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGUuY3BwOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTVHlwZS5oOgor
ICAgICAgICAoSlNDOjppc0R5bmFtaWNhbGx5U2l6ZWRUeXBlKToKKyAgICAgICAgKiBydW50aW1l
L09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToK
KyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9TdHJ1
Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZN
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpyYW5kb20pOgor
ICAgICAgICAoSlNDOjpWTTo6aW50ZWdyaXR5UmFuZG9tKToKKyAgICAgICAgKiB0b29scy9JbnRl
Z3JpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5OjpSYW5kb206OlJhbmRv
bSk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpyZWxvYWRBbmRDaGVja1Nob3Vs
ZEF1ZGl0U2xvdyk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRDZWxsRnVsbHkpOgor
ICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbE1pbmltYWxseVNsb3cpOgorICAgICAg
ICAqIHRvb2xzL0ludGVncml0eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5Ojph
dWRpdENlbGwpOgorICAgICAgICAqIHRvb2xzL0ludGVncml0eUlubGluZXMuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpzaG91bGRBdWRpdCk6CisgICAgICAgIChK
U0M6OkludGVncml0eTo6YXVkaXRDZWxsTWluaW1hbGx5KToKKyAgICAgICAgKEpTQzo6SW50ZWdy
aXR5OjphdWRpdENlbGxSYW5kb21seSk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDoK
KyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnVudXNlZFZlcmlmaWVyKToKKyAgICAgICAgKEpT
Qzo6Vk1JbnNwZWN0b3I6OnZlcmlmeUNlbGxTaXplKToKKyAgICAgICAgKiB0b29scy9WTUluc3Bl
Y3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlD
ZWxsU2l6ZSk6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsKToKKwogMjAx
OS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBK
U0xleGljYWxFbnZpcm9ubWVudCwgRGlyZWN0QXJndW1lbnRzLCBhbmQgU2NvcGVkQXJndW1lbnRz
IGNlbGxzIG91dCBvZiB0aGUgR2lnYWNhZ2UuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSwxMSBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9Xcml0ZUJhcnJp
ZXIuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVySW5saW5lcy5oCiAKKyAgICB0b29scy9JbnRl
Z3JpdHkuaAorICAgIHRvb2xzL0ludGVncml0eUlubGluZXMuaAorICAgIHRvb2xzL1ZNSW5zcGVj
dG9yLmgKKyAgICB0b29scy9WTUluc3BlY3RvcklubGluZXMuaAorCiAgICAgd2FzbS9XYXNtQ2Fw
YWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20vV2FzbUNvbXBp
bGF0aW9uTW9kZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
NTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTk4OSw2ICs5ODksNyBAQCB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNwcAogdG9vbHMv
RnVuY3Rpb25PdmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAKIHRvb2xz
L0hlYXBWZXJpZmllci5jcHAKK3Rvb2xzL0ludGVncml0eS5jcHAKIHRvb2xzL0pTRG9sbGFyVk0u
Y3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNwZWN0b3IuY3Bw
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUwMTg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTEsNiArMTkxMSw5IEBACiAJCUZFQTNCQkFDMjEy
Qzk3Q0IwMEU5M0FEMSAvKiBERkdDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFQTNCQkFCMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdDRkcuaCAqLzsg
fTsKIAkJRkVCNTFGNkMxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1MUY2QjFBOTdCNjg4
MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSAqLzsgfTsKIAkJRkVCNThDMTUxODdCOEIxNjAw
OThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNThDMTMxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFu
ZGxpbmdTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQzU3OTcyMjMx
MDVCNDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLzsgfTsKKwkJRkVDNTc5NzYy
MzEwNUY0RTAwQkNBODNGIC8qIEludGVncml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIEludGVncml0
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZF
QzU3OTc4MjMxMDk1NEMwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUM1Nzk3NzIzMTA5NTRCMDBCQ0E4
M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFQ0I4QjI3MUQyNUJCODUwMDZGMjQ2MyAvKiBGdW5jdGlvbk92
ZXJyaWRlc1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVDQjhCMjUxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5j
cHAgKi87IH07CiAJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEMjg3QjExNUVD
OUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNo
ZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5
NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEzNSw2ICs1MTM4LDEwIEBACiAJCUZFQjUx
RjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVncmVzczE0MTgwOS5tbTsgcGF0aCA9IEFQSS90ZXN0
cy9SZWdyZXNzMTQxODA5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMx
MjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjU4QzEzMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXJyb3JIYW5k
bGluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQzU3OTcyMjMxMDVC
NDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVk1JbnNwZWN0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFQzU3OTc0MjMxMDVGNDIwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZWdyaXR5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIEludGVncml0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ3JpdHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzcyMzEwOTU0QjAwQkNBODNGIC8qIEludGVncml0
eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyaXR5SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNCOEIyNTFEMjVCQjZFMDA2
RjI0NjMgLyogRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVz
dHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkVDQjhCMjYxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkVDQjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rp
b24tb3ZlcnJpZGVzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0g
InRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIjsgcGF0aCA9ICJBUEkvdGVzdHMvdGVzdGFw
aS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzU4Myw2ICs3NTkwLDkgQEAKIAkJCQlGRUEwQzQwMTFDREQ3RDBFMDA0ODE5OTEgLyogRnVuY3Rp
b25XaGl0ZWxpc3QuaCAqLywKIAkJCQlGRTFCRDAyMjFFNzIwNTJGMDAxMzRCQzkgLyogSGVhcFZl
cmlmaWVyLmNwcCAqLywKIAkJCQlGRTFCRDAyMzFFNzIwNTJGMDAxMzRCQzkgLyogSGVhcFZlcmlm
aWVyLmggKi8sCisJCQkJRkVDNTc5NzQyMzEwNUY0MjAwQkNBODNGIC8qIEludGVncml0eS5jcHAg
Ki8sCisJCQkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIEludGVncml0eS5oICovLAorCQkJ
CUZFQzU3OTc3MjMxMDk1NEIwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggKi8sCiAJCQkJ
RkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovLAogCQkJCUZFMzg0
RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggKi8sCiAJCQkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLApAQCAtNzU5MSw2ICs3NjAxLDcg
QEAKIAkJCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFycmF5LmggKi8s
CiAJCQkJRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLywKIAkJ
CQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLywKKwkJCQlGRUM1
Nzk3MjIzMTA1QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi8sCiAJCQkpOwog
CQkJcGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg5OTksNiAr
OTAxMCw3IEBACiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2VkQmFycmllclB0
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2Fs
bEVkZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQzU3OTc4MjMxMDk1NEMwMEJDQTgzRiAvKiBJ
bnRlZ3JpdHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZEQUEyQjFFODlDQ0Q2MDA1
REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4REUwRUQyMjA1
QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBM0JCQTgyMTJC
NjU1OTAwRTkzQUQxIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtOTQ5
Miw2ICs5NTA0LDcgQEAKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNj
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkxNTcgLyogSW5s
aW5lQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIy
MTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUM1Nzk3NjIz
MTA1RjRFMDBCQ0E4M0YgLyogSW50ZWdyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MDMy
MDE4QkZGQkUxMDA1QTA4MTEgLyogSW5zcGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1OTNDRjdGMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJl
Z2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5MjQsNiArOTkzNyw3IEBACiAJCQkJMEZGNzI5
QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25S
ZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJGMTY2QUQzNjAwMDBGNUJBMyAvKiBQ
cm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVDNTc5NzMyMzEwNUI1MTAwQkNB
ODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QzAx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjEwNThDMTY3NTQ4MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjEwNThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRT
aXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
CShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIldlYWtNYXBJbXBs
SW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaD4KQEAgLTEyNjgsNiArMTI2OSw5IEBA
IE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MKIAogICAgIG1fYmVmb3Jl
R0MgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAorICAgIC8vIFBpZ2d5IGJhY2sgb24gdGhlIEdD
IHRvIHJhbmRvbWl6ZSBhIGJpdC4KKyAgICB2bSgpLnJhbmRvbSgpLnNldFNlZWQoY3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7CisKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsK
ICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6
ICIsICptX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJIZWFwQW5hbHl6ZXIuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIKICNpbmNsdWRl
ICJIZWFwUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKQEAgLTIyMSw2ICsyMjIsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRKU0NlbGxPckF1eGlsaWFyCiAgICAgCiAgICAgICAgIEpTQ2VsbCoganNDZWxsID0gc3RhdGlj
X2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICB2YWxpZGF0ZUNlbGwoanNDZWxsKTsK
KyAgICAgICAgSW50ZWdyaXR5OjphdWRpdENlbGwodm0oKSwganNDZWxsKTsKICAgICAgICAgCiAg
ICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlHcmV5KTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9u
IDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDggQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAg
ICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAogICAgICAgICAmQ2xhc3NOYW1lOjp2
aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAotICAgIENsYXNzTmFtZTo6VHlwZWRB
cnJheVN0b3JhZ2VUeXBlCisgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUsIFwK
KyAgICBzaXplb2YoQ2xhc3NOYW1lKQogCiBzdHJ1Y3QgQ2xhc3NJbmZvIHsKICAgICAvLyBBIHN0
cmluZyBkZW5vdGluZyB0aGUgY2xhc3MgbmFtZS4gRXhhbXBsZTogIldpbmRvdyIuCkBAIC0yMjEs
NiArMjIyLDcgQEAgc3RydWN0IENsYXNzSW5mbyB7CiAgICAgTWV0aG9kVGFibGUgbWV0aG9kVGFi
bGU7CiAKICAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5U3RvcmFnZVR5cGU7CisgICAgdW5z
aWduZWQgY3BwU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI1
MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAgICB1aW50MzJf
dCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVz
IHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNp
dHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRv
IGJlIGtpbmQgdG8gdGhlIEpJVHMuCiAgICAgdXNpbmcgTWFwcGVkQXJndW1lbnRzID0gQ2FnZWRC
YXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1hcHBlZEFyZ3VtZW50
cyBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3Ro
LCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgor
CisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZp
c2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEyICs4Myw2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6
Y3JlYXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHplcm9CaWdJbnQ7CiB9CiAKLWlubGluZSBz
aXplX3QgSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBz
aXplX3Qgc2l6ZVdpdGhQYWRkaW5nID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihz
aXplX3QpPihzaXplb2YoSlNCaWdJbnQpKTsKLSAgICByZXR1cm4gc2l6ZVdpdGhQYWRkaW5nICsg
bGVuZ3RoICogc2l6ZW9mKERpZ2l0KTsKLX0KLQogSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVh
dGVXaXRoTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCBwcml2YXRl
OgogCiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmlnSW50KiB4
KTsKIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKTsK
KyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgp
OwogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+KHNpemVvZihK
U0JpZ0ludCkpOwpAQCAtMjQ5LDggKzI0OSwxNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgdW5z
aWduZWQgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3NpZ24geyBmYWxzZSB9OworCisgICAgZnJpZW5k
IGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAoraW5saW5lIHNpemVfdCBKU0JpZ0ludDo6YWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCBzaXplV2l0aFBhZGRpbmcg
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHNpemVfdCk+KHNpemVvZihKU0JpZ0lu
dCkpOworICAgIHJldHVybiBzaXplV2l0aFBhZGRpbmcgKyBsZW5ndGggKiBzaXplb2YoRGlnaXQp
OworfQorCiBpbmxpbmUgSlNCaWdJbnQqIGFzQmlnSW50KEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKHZhbHVlLmFzQ2VsbCgpLT5pc0JpZ0ludCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAko
cmV2aXNpb24gMjUwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQoKSB7IHJl
dHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQpAQCAtMTAzLDYgKzEwMyw4IEBAIHByaXZhdGU6
CiAgICAgRXhwb3J0TWFwIG1fZXhwb3J0czsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9uYW1l
czsKICAgICBXcml0ZUJhcnJpZXI8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+IG1fbW9kdWxlUmVjb3Jk
OworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAJKHJldmlz
aW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtOTQsNiArOTQsNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgSlNDCiAgICAgQ0FTRShNb2R1bGVFbnZpcm9ubWVudFR5cGUpCiAgICAgQ0FTRShT
dHJpY3RFdmFsQWN0aXZhdGlvblR5cGUpCiAgICAgQ0FTRShXaXRoU2NvcGVUeXBlKQorICAgIENB
U0UoTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSkKICAgICBDQVNFKFJlZ0V4cE9iamVjdFR5cGUp
CiAgICAgQ0FTRShQcm94eU9iamVjdFR5cGUpCiAgICAgQ0FTRShKU0dlbmVyYXRvclR5cGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjUwMTg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MTA2LDYgKzEwNiw3IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgV2l0aFNjb3BlVHlw
ZSwKICAgICAvLyBFbmQgSlNTY29wZSB0eXBlcy4KIAorICAgIE1vZHVsZU5hbWVzcGFjZU9iamVj
dFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCiAgICAg
SlNHZW5lcmF0b3JUeXBlLApAQCAtMTM5LDYgKzE0MCwxOCBAQCBpbmxpbmUgY29uc3RleHByIGJv
b2wgaXNUeXBlZEFycmF5VHlwZShKCiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dHlwZSkgLSBGaXJzdFR5cGVkQXJyYXlUeXBlKSA8IE51bWJlck9mVHlwZWRBcnJheVR5cGVzRXhj
bHVkaW5nRGF0YVZpZXc7CiB9CiAKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc0R5bmFtaWNhbGx5
U2l6ZWRUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEJpZ0ludFR5cGUKKyAg
ICAgICAgfHwgdHlwZSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlCisgICAgICAgIHx8IHR5cGUgPT0g
RmluYWxPYmplY3RUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gTGV4aWNhbEVudmlyb25tZW50VHlw
ZQorICAgICAgICB8fCB0eXBlID09IE1vZHVsZUVudmlyb25tZW50VHlwZQorICAgICAgICB8fCB0
eXBlID09IE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJl
dmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDExIEBAIHN0YXRpYyB2b2lkIHJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUo
KSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKKworICAgIGlm
IChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA8IDApCisgICAgICAgIE9wdGlv
bnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpID0gMDsKKyAgICBlbHNlIGlmIChPcHRpb25z
OjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA+IDEuMCkKKyAgICAgICAgT3B0aW9uczo6cmFu
ZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgPSAxLjA7CiB9CiAKIHZvaWQgT3B0aW9uczo6aW5pdGlh
bGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0
LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBcCiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2RlT3JpZ2luTWFw
LCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMgZ2VuZXJhdGUg
YSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAorICAgIHYoRG91
YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlByb2JhYmlsaXR5
IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzICgwLjAgLSAxLjApIikgXAogICAgIHYoQm9vbCwg
dmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIG51
bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODYsNiArNzg2LDggQEAgcHJpdmF0ZToKICAg
ICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKIAogICAgIHVpbnQzMl90IG1fcHJvcGVydHlIYXNo
OworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyNTAx
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MSw2ICsyNTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwgbV9ydW5Mb29wKENGUnVuTG9vcEdldEN1cnJlbnQo
KSkKICNlbmRpZiAvLyBVU0UoQ0YpCisgICAgLCBtX2ludGVncml0eVJhbmRvbSgqdGhpcykKICAg
ICAsIGhlYXAoKnRoaXMsIGhlYXBUeXBlKQogICAgICwgZmFzdE1hbGxvY0FsbG9jYXRvcihtYWtl
VW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogICAgICwgcHJpbWl0
aXZlR2lnYWNhZ2VBbGxvY2F0b3IobWFrZVVuaXF1ZTxHaWdhY2FnZUFsaWduZWRNZW1vcnlBbGxv
Y2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiRnV6emVyQWdlbnQuaCIKICNpbmNsdWRl
ICJIZWFwLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgi
CiAjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNlLmgiCkBAIC0z
MTAsNiArMzExLDkgQEAgcHVibGljOgogICAgIC8vIEdsb2JhbCBvYmplY3QgaW4gd2hpY2ggZXhl
Y3V0aW9uIGJlZ2FuLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2JqZWN0KiB2bUVu
dHJ5R2xvYmFsT2JqZWN0KGNvbnN0IENhbGxGcmFtZSopIGNvbnN0OwogCisgICAgV2Vha1JhbmRv
bSYgcmFuZG9tKCkgeyByZXR1cm4gbV9yYW5kb207IH0KKyAgICBJbnRlZ3JpdHk6OlJhbmRvbSYg
aW50ZWdyaXR5UmFuZG9tKCkgeyByZXR1cm4gbV9pbnRlZ3JpdHlSYW5kb207IH0KKwogcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBuZXh0SUQoKTsKIApAQCAtMzIyLDYgKzMyNiw5IEBAIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwogI2VuZGlmCiAKKyAgICBX
ZWFrUmFuZG9tIG1fcmFuZG9tOworICAgIEludGVncml0eTo6UmFuZG9tIG1faW50ZWdyaXR5UmFu
ZG9tOworCiBwdWJsaWM6CiAgICAgSGVhcCBoZWFwOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgiCisKKyNpbmNs
dWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3JJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeworbmFtZXNwYWNlIEludGVncml0eSB7CisKK25hbWVzcGFjZSB7Citjb25zdGV4
cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK1JhbmRvbTo6UmFuZG9tKFZNJiB2bSkKK3sK
KyAgICByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyh2bSk7IC8vIFRoaXMgd2lsbCBpbml0
aWFsaXplIHRoZSBhdWRpdCB0cmlnZ2VyIGJpdHMuCit9CisKK2Jvb2wgUmFuZG9tOjpyZWxvYWRB
bmRDaGVja1Nob3VsZEF1ZGl0U2xvdyhWTSYgdm0pCit7CisgICAgaWYgKCFPcHRpb25zOjpyYW5k
b21JbnRlZ3JpdHlBdWRpdFJhdGUoKSkgeworICAgICAgICBtX3RyaWdnZXJCaXRzID0gMDsgLy8g
TmV2ZXIgdHJpZ2dlciwgYW5kIGRvbid0IGJvdGhlciByZWxvYWRpbmcuCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaXNhYmxlZCBJbnRlZ3JpdHkgYXVkaXRz
OiB0cmlnZ2VyIGJpdHMgIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtX3Ry
aWdnZXJCaXRzKSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gUmVs
b2FkIHRoZSB0cmlnZ2VyIGJpdHMuCisgICAgbV90cmlnZ2VyQml0cyA9IDF1bGwgPDwgNjM7IC8v
IFNldCB0aGUgdGVybWluYXRvciBiaXQgKGkuZS4gIm5lZWQgcmVsb2FkIikgaW4gdGhlIGhpZ2gg
Yml0LgorCisgICAgdWludDMyX3QgdGhyZXNob2xkID0gVUlOVF9NQVggKiBPcHRpb25zOjpyYW5k
b21JbnRlZ3JpdHlBdWRpdFJhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9m
VHJpZ2dlckJpdHM7ICsraSkgeworICAgICAgICBib29sIHRyaWdnZXIgPSAodm0ucmFuZG9tKCku
Z2V0VWludDMyKCkgPD0gdGhyZXNob2xkKTsKKyAgICAgICAgbV90cmlnZ2VyQml0cyA9IG1fdHJp
Z2dlckJpdHMgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIpIDw8IGkpOworICAgIH0K
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJyZWxvYWRlZCBJbnRlZ3JpdHkg
dHJpZ2dlciBiaXRzICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV90cmln
Z2VyQml0cykpKTsKKyAgICBBU1NFUlQobV90cmlnZ2VyQml0cyA+PSAoMXVsbCA8PCA2MykpOwor
ICAgIHJldHVybiB2bS5yYW5kb20oKS5nZXRVaW50MzIoKSA+PSB0aHJlc2hvbGQ7Cit9CisKK3Zv
aWQgYXVkaXRDZWxsRnVsbHkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk1JbnNwZWN0
b3I6OnZlcmlmeUNlbGw8Vk1JbnNwZWN0b3I6OlJlbGVhc2VBc3NlcnQ+KHZtLCBjZWxsKTsKK30K
Kwordm9pZCBhdWRpdENlbGxNaW5pbWFsbHlTbG93KFZNJiwgSlNDZWxsKiBjZWxsKQoreworICAg
IGlmIChHaWdhY2FnZTo6Y29udGFpbnMoY2VsbCkpIHsKKyAgICAgICAgaWYgKGNlbGwtPnR5cGUo
KSAhPSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIGNlbGwgIiwgUmF3UG9pbnRlcihjZWxs
KSwgIiAiLCBKU1ZhbHVlKGNlbGwpKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEludGVncml0eQorfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxs
OworY2xhc3MgVk07CisKK25hbWVzcGFjZSBJbnRlZ3JpdHkgeworCitlbnVtIGNsYXNzIEF1ZGl0
TGV2ZWwgeworICAgIE5vbmUsCisgICAgTWluaW1hbCwKKyAgICBGdWxsLAorICAgIFJhbmRvbSwK
K307CisKKyNpZmRlZiBOREVCVUcKK3N0YXRpYyBjb25zdGV4cHIgQXVkaXRMZXZlbCBEZWZhdWx0
QXVkaXRMZXZlbCA9IEF1ZGl0TGV2ZWw6Ok5vbmU7CisjZWxzZQorc3RhdGljIGNvbnN0ZXhwciBB
dWRpdExldmVsIERlZmF1bHRBdWRpdExldmVsID0gQXVkaXRMZXZlbDo6UmFuZG9tOworI2VuZGlm
CisKK2NsYXNzIFJhbmRvbSB7CitwdWJsaWM6CisgICAgUmFuZG9tKFZNJik7CisKKyAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgc2hvdWxkQXVkaXQoVk0mKTsKKworcHJpdmF0ZToKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIHJlbG9hZEFuZENoZWNrU2hvdWxkQXVkaXRTbG93KFZNJik7CisKKyAg
ICB1aW50NjRfdCBtX3RyaWdnZXJCaXRzOworCisgICAgLy8gVGhlIHRvcCBiaXQgaXMgcmVzZXJ2
ZWQgYXMgYSB0ZXJtaW5hdGlvbiBiaXQuIEhlbmNlLCB0aGUgbnVtYmVyIG9mCisgICAgLy8gdHJp
Z2dlciBiaXRzIGlzIGFsd2F5cyAxIGxlc3MgdGhhbiB3aWxsIGZpdCBpbiBtX3RyaWdnZXJCaXRz
LgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG51bWJlck9mVHJpZ2dlckJpdHMgPSAoc2l6ZW9m
KG1fdHJpZ2dlckJpdHMpICogOCkgLSAxOworfTsKKworQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0
Q2VsbFJhbmRvbWx5KFZNJiwgSlNDZWxsKik7CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRDZWxs
TWluaW1hbGx5KFZNJiwgSlNDZWxsKik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGF1ZGl0Q2Vs
bE1pbmltYWxseVNsb3coVk0mLCBKU0NlbGwqKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXVk
aXRDZWxsRnVsbHkoVk0mLCBKU0NlbGwqKTsKKwordGVtcGxhdGU8QXVkaXRMZXZlbCA9IEF1ZGl0
TGV2ZWw6OlJhbmRvbSwgdHlwZW5hbWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGwo
Vk0mLCBUKSB7IH0KKwordGVtcGxhdGU8QXVkaXRMZXZlbCBhdWRpdExldmVsID0gRGVmYXVsdEF1
ZGl0TGV2ZWw+CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRDZWxsKFZNJiB2bSwgSlNDZWxsKiBj
ZWxsKQoreworICAgIGlmIChhdWRpdExldmVsID09IEF1ZGl0TGV2ZWw6Ok5vbmUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChhdWRpdExldmVsID09IEF1ZGl0TGV2ZWw6Ok1pbmltYWwpCisg
ICAgICAgIGF1ZGl0Q2VsbE1pbmltYWxseSh2bSwgY2VsbCk7CisgICAgZWxzZSBpZiAoYXVkaXRM
ZXZlbCA9PSBBdWRpdExldmVsOjpGdWxsKQorICAgICAgICBhdWRpdENlbGxGdWxseSh2bSwgY2Vs
bCk7CisgICAgZWxzZSBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExldmVsOjpSYW5kb20pCisgICAg
ICAgIGF1ZGl0Q2VsbFJhbmRvbWx5KHZtLCBjZWxsKTsKK30KKwordGVtcGxhdGU8QXVkaXRMZXZl
bCBhdWRpdExldmVsID0gRGVmYXVsdEF1ZGl0TGV2ZWw+CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVk
aXRDZWxsKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBB
dWRpdExldmVsOjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIGF1ZGl0Q2VsbDxhdWRpdExldmVsPih2bSwgdmFsdWUuYXNDZWxsKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbnRl
Z3JpdHkuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBJ
bnRlZ3JpdHkgeworCitBTFdBWVNfSU5MSU5FIGJvb2wgUmFuZG9tOjpzaG91bGRBdWRpdChWTSYg
dm0pCit7CisgICAgYm9vbCBzaG91bGRBdWRpdCA9IG1fdHJpZ2dlckJpdHMgJiAxOworICAgIG1f
dHJpZ2dlckJpdHMgPSBtX3RyaWdnZXJCaXRzID4+IDE7CisgICAgaWYgKExJS0VMWSghc2hvdWxk
QXVkaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBhdWRpdGluZyBpcyBl
bmFibGVkLCB0aGVuIHRoZSB0b3AgYml0IG9mIG1fdHJpZ2dlckJpdHMgaXMgYWx3YXlzIHNldAor
ICAgIC8vIHRvIDEgb24gcmVsb2FkLiBXaGVuIHRoaXMgdG9wIGJpdCByZWFjaGVzIHRoZSBib3R0
b20sIGl0IGRvZXMgbm90CisgICAgLy8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgdHJpZ2dlciBh
biBhdWRpdCBidXQgcmF0aGVyIHRoYXQgd2UndmUgc2hpZnRlZAorICAgIC8vIG91dCBhbGwgdGhl
IGF2YWlsYWJsZSB0cmlnZ2VyIGJpdHMgYW5kIGhlbmNlLCBuZWVkIHRvIHJlbG9hZC4gSW5zdGVh
ZCwKKyAgICAvLyByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdygpIHdpbGwgcmV0dXJuIHdo
ZXRoZXIgd2UgYWN0dWFsbHkgbmVlZCB0bworICAgIC8vIHRyaWdnZXIgYW4gYXVkaXQgdGhpcyB0
dXJuLgorICAgIGlmICghbV90cmlnZ2VyQml0cykKKyAgICAgICAgcmV0dXJuIHJlbG9hZEFuZENo
ZWNrU2hvdWxkQXVkaXRTbG93KHZtKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkoR2lnYWNhZ2U6OmNvbnRhaW5zKGNlbGwpKSkKKyAgICAgICAgYXVkaXRD
ZWxsTWluaW1hbGx5U2xvdyh2bSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRp
dENlbGxSYW5kb21seShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoVU5MSUtFTFko
dm0uaW50ZWdyaXR5UmFuZG9tKCkuc2hvdWxkQXVkaXQodm0pKSkKKyAgICAgICAgYXVkaXRDZWxs
RnVsbHkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwxNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcENlbGxNZW1vcnlUb1N0cmVhbShKU0Nl
bGwqLCBQcmludFN0cmVhbSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1
bXBTdWJzcGFjZUhhc2hlcyhWTSopOwogCisgICAgZW51bSBWZXJpZmllckFjdGlvbiB7IFJlbGVh
c2VBc3NlcnQsIEN1c3RvbSB9OworCisgICAgdXNpbmcgVmVyaWZ5RnVuY3RvciA9IGJvb2woYm9v
bCBjb25kaXRpb24sIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCAuLi4pOworICAgIHN0YXRpYyBi
b29sIHVudXNlZFZlcmlmaWVyKGJvb2wsIGNvbnN0IGNoYXIqLCAuLi4pIHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICB0ZW1wbGF0ZTxWZXJpZmllckFjdGlvbiwgVmVyaWZ5RnVuY3RvciA9IHVudXNl
ZFZlcmlmaWVyPgorICAgIHN0YXRpYyBib29sIHZlcmlmeUNlbGxTaXplKFZNJiwgSlNDZWxsKiwg
T3B0aW9uYWw8c2l6ZV90PiBhbGxvY2F0b3JDZWxsU2l6ZSA9IHsgfSk7CisKKyAgICB0ZW1wbGF0
ZTxWZXJpZmllckFjdGlvbiwgVmVyaWZ5RnVuY3RvciA9IHVudXNlZFZlcmlmaWVyPgorICAgIHN0
YXRpYyBib29sIHZlcmlmeUNlbGwoVk0mLCBKU0NlbGwqKTsKKwogcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9y
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3RvcklubGluZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQmlnSW50
LmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01vZHVs
ZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNp
bmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCisjZGVmaW5lIF9fQ09ORElUSU9OKHgpICh4KSwgI3gKKyNkZWZpbmUg
X19WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgY29uZCwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYg
KGFjdGlvbiA9PSBWZXJpZmllckFjdGlvbjo6UmVsZWFzZUFzc2VydCkgXAorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uZCwgX19WQV9BUkdTX18pOyBcCisgICAgICAgIGVsc2UgaWYgKCF2
ZXJpZmllcihfX0NPTkRJVElPTihjb25kKSwgX19WQV9BUkdTX18pKSBcCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwordGVtcGxhdGU8Vk1JbnNwZWN0
b3I6OlZlcmlmaWVyQWN0aW9uIGFjdGlvbiwgVk1JbnNwZWN0b3I6OlZlcmlmeUZ1bmN0b3IgdmVy
aWZpZXI+Citib29sIFZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsU2l6ZShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCwgT3B0aW9uYWw8c2l6ZV90PiBvcHRpb25hbEFsbG9jYXRvckNlbGxTaXplKQoreworICAg
IHNpemVfdCBhbGxvY2F0b3JDZWxsU2l6ZSA9IG9wdGlvbmFsQWxsb2NhdG9yQ2VsbFNpemUgPyAq
b3B0aW9uYWxBbGxvY2F0b3JDZWxsU2l6ZSA6IGNlbGwtPmNlbGxTaXplKCk7CisKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7CisgICAgSlNUeXBlIGNlbGxU
eXBlID0gY2VsbC0+dHlwZSgpOworICAgIF9fVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGNlbGxU
eXBlID09IHN0cnVjdHVyZS0+bV9ibG9iLnR5cGUoKSwgY2VsbCwgY2VsbFR5cGUsIHN0cnVjdHVy
ZS0+bV9ibG9iLnR5cGUoKSk7CisKKyAgICBpZiAoaXNEeW5hbWljYWxseVNpemVkVHlwZShjZWxs
VHlwZSkpIHsKKyAgICAgICAgc2l6ZV90IGNlbGxTaXplID0gMDsKKyAgICAgICAgaWYgKGNlbGxU
eXBlID09IEJpZ0ludFR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8qIGJpZ0ludCA9IGpzQ2FzdDxK
U0JpZ0ludCo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBKU0JpZ0ludDo6YWxsb2Nh
dGlvblNpemUoYmlnSW50LT5sZW5ndGgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2VsbFR5cGUg
PT0gRGlyZWN0QXJndW1lbnRzVHlwZSkgeworICAgICAgICAgICAgYXV0byogYXJncyA9IGpzQ2Fz
dDxEaXJlY3RBcmd1bWVudHMqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gRGlyZWN0
QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShhcmdzLT5tX21pbkNhcGFjaXR5KTsKKyAgICAgICAg
fSBlbHNlIGlmIChjZWxsVHlwZSA9PSBGaW5hbE9iamVjdFR5cGUpCisgICAgICAgICAgICBjZWxs
U2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgIGVsc2UgaWYgKGNlbGxUeXBlID09IExleGljYWxFbnZpcm9ubWVu
dFR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8qIGVudiA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9u
bWVudCo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBKU0xleGljYWxFbnZpcm9ubWVu
dDo6YWxsb2NhdGlvblNpemUoZW52LT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChjZWxsVHlwZSA9PSBNb2R1bGVFbnZpcm9ubWVudFR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8q
IGVudiA9IGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CisgICAgICAgICAgICBj
ZWxsU2l6ZSA9IEpTTW9kdWxlRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKGVudi0+c3ltYm9s
VGFibGUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoY2VsbFR5cGUgPT0gTW9kdWxlTmFtZXNwYWNl
T2JqZWN0VHlwZSkgeworICAgICAgICAgICAgYXV0byogb2JqID0ganNDYXN0PEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0Kj4oY2VsbCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShvYmotPm1fbmFtZXMuY2FwYWNpdHkoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgX19WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgY2VsbFNpemUgPD0g
YWxsb2NhdG9yQ2VsbFNpemUsIGNlbGwsIGNlbGxUeXBlLCBjZWxsU2l6ZSwgYWxsb2NhdG9yQ2Vs
bFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
ID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgX19WRVJJRlkoYWN0aW9uLCB2ZXJp
ZmllciwgY2xhc3NJbmZvLT5jcHBTaXplIDw9IGFsbG9jYXRvckNlbGxTaXplLCBjZWxsLCBjZWxs
VHlwZSwgY2xhc3NJbmZvLT5jcHBTaXplLCBhbGxvY2F0b3JDZWxsU2l6ZSk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTxWTUluc3BlY3Rvcjo6VmVyaWZpZXJBY3Rpb24g
YWN0aW9uLCBWTUluc3BlY3Rvcjo6VmVyaWZ5RnVuY3RvciB2ZXJpZmllcj4KK2Jvb2wgVk1JbnNw
ZWN0b3I6OnZlcmlmeUNlbGwoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgc2l6ZV90IGFs
bG9jYXRvckNlbGxTaXplID0gMDsKKyAgICBpZiAoY2VsbC0+aXNMYXJnZUFsbG9jYXRpb24oKSkg
eworICAgICAgICBMYXJnZUFsbG9jYXRpb24mIGxhcmdlQWxsb2NhdGlvbiA9IGNlbGwtPmxhcmdl
QWxsb2NhdGlvbigpOworICAgICAgICBfX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCAmbGFyZ2VB
bGxvY2F0aW9uLnZtKCkgPT0gJnZtLCBjZWxsLCBjZWxsLT50eXBlKCksICZsYXJnZUFsbG9jYXRp
b24udm0oKSwgJnZtKTsKKworICAgICAgICBib29sIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24gPSBm
YWxzZTsKKyAgICAgICAgZm9yIChhdXRvKiBpIDogdm0uaGVhcC5vYmplY3RTcGFjZSgpLmxhcmdl
QWxsb2NhdGlvbnMoKSkgeworICAgICAgICAgICAgaWYgKGkgPT0gJmxhcmdlQWxsb2NhdGlvbikg
eworICAgICAgICAgICAgICAgIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24gPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF9fVkVS
SUZZKGFjdGlvbiwgdmVyaWZpZXIsIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24sIGNlbGwsIGNlbGwt
PnR5cGUoKSk7CisKKyAgICAgICAgYWxsb2NhdG9yQ2VsbFNpemUgPSBsYXJnZUFsbG9jYXRpb24u
Y2VsbFNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBj
ZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9ja0hh
bmRsZSA9IGJsb2NrLmhhbmRsZSgpOworICAgICAgICBfX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVy
LCAmYmxvY2sudm0oKSA9PSAmdm0sIGNlbGwsIGNlbGwtPnR5cGUoKSwgJmJsb2NrLnZtKCksICZ2
bSk7CisKKyAgICAgICAgdWludHB0cl90IGJsb2NrU3RhcnRBZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGJsb2NrSGFuZGxlLnN0YXJ0KCkpOworICAgICAgICBfX1ZFUklGWShh
Y3Rpb24sIHZlcmlmaWVyLCBibG9ja0hhbmRsZS5jb250YWlucyhjZWxsKSwgY2VsbCwgY2VsbC0+
dHlwZSgpLCBibG9ja1N0YXJ0QWRkcmVzcywgYmxvY2tIYW5kbGUuZW5kKCkpOworCisgICAgICAg
IHVpbnRwdHJfdCBjZWxsQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxs
KTsKKyAgICAgICAgdWludHB0cl90IGNlbGxPZmZzZXQgPSBjZWxsQWRkcmVzcyAtIGJsb2NrU3Rh
cnRBZGRyZXNzOworICAgICAgICBhbGxvY2F0b3JDZWxsU2l6ZSA9IGJsb2NrLmNlbGxTaXplKCk7
CisgICAgICAgIGJvb2wgY2VsbElzUHJvcGVybHlBbGlnbmVkID0gIShjZWxsT2Zmc2V0ICUgYWxs
b2NhdG9yQ2VsbFNpemUpOworICAgICAgICBfX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBjZWxs
SXNQcm9wZXJseUFsaWduZWQsIGNlbGwsIGNlbGwtPnR5cGUoKSwgYWxsb2NhdG9yQ2VsbFNpemUp
OworICAgIH0KKworICAgIGF1dG8gY2VsbFR5cGUgPSBjZWxsLT50eXBlKCk7CisgICAgaWYgKGNl
bGwtPnR5cGUoKSAhPSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpCisgICAgICAgIF9fVkVSSUZZ
KGFjdGlvbiwgdmVyaWZpZXIsICFHaWdhY2FnZTo6Y29udGFpbnMoY2VsbCksIGNlbGwsIGNlbGxU
eXBlKTsKKworICAgIGlmICghdmVyaWZ5Q2VsbFNpemU8YWN0aW9uLCB2ZXJpZmllcj4odm0sIGNl
bGwsIGFsbG9jYXRvckNlbGxTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OkpTVmFsdWUpICYmIGNlbGwtPmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGNlbGwpOworICAgICAg
ICBjb25zdCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG9iamVjdC0+YnV0dGVyZmx5KCk7CisgICAg
ICAgIF9fVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsICFidXR0ZXJmbHkgfHwgR2lnYWNhZ2U6Omlz
Q2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUsIGJ1dHRlcmZseSksIGNlbGwsIGNlbGwtPnR5cGUoKSwg
YnV0dGVyZmx5KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI3VuZGVmIF9fVkVS
SUZZCisjdW5kZWYgX19DT05ESVRJT04KKworfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379348</attachid>
            <date>2019-09-22 16:34:57 -0700</date>
            <delta_ts>2019-09-23 11:44:11 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-202085.patch</filename>
            <type>text/plain</type>
            <size>42678</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwMTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBA
QAorMjAxOS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgSW50ZWdyaXR5IGF1ZGl0IGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gncyBtYWluIGdvYWwgaXMg
dG8gaW50cm9kdWNlIHRoZSBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zLiAgVGhleSBjYW4KKyAg
ICAgICAgYmUgdXNlZCB3aGVyZXZlciB3ZSB3YW50IHRvIGF1ZGl0IGEgY2VsbCB0byBlbnN1cmUg
aXQgaXMgbm90IGNvcnJ1cHRlZC4gIEhvd2V2ZXIsCisgICAgICAgIHRvIGtlZXAgdGhpcyBwYXRj
aCBzbWFsbCwgd2Ugd2lsbCBvbmx5IGludHJvZHVjZSB0aGUgYXVkaXQgdG9vbCBoZXJlIHdpdGgg
b25lCisgICAgICAgIGV4YW1wbGUgdXNlIGluIFNsb3RWaXNpdG9yLiAgV2UnbGwgZm9sbG93IHVw
IGxhdGVyIHdpdGggbW9yZSBwYXRjaGVzIHRvIGRlcGxveQorICAgICAgICB0aGlzIHRvb2wgdGhy
b3VnaG91dCB0aGUgVk0uCisKKyAgICAgICAgMS4gSW50cm9kdWNlZCBJbnRlZ3JpdHkgYXVkaXQg
ZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgc2V2ZXJhbAorICAgICAgICAgICBB
dWRpdExldmVsczoKKyAgICAgICAgICAgICAgIE5vbmUgLSBkb24ndCBkbyBhbnkgYXVkaXRzLgor
ICAgICAgICAgICAgICAgTWluaW1hbCAtIGRvIGEgbWluaW1hbCBxdWljayBhdWRpdCAobWluaW1p
emUgcGVyZiBpbXBhY3QpLgorICAgICAgICAgICAgICAgRnVsbCAtIGRvIGEgZnVsbCBhdWRpdCBv
ZiB0aGUgbWFueSBhc3BlY3RzIG9mIGEgY2VsbC4KKyAgICAgICAgICAgICAgIFJhbmRvbSAtIHJh
bmRvbWx5IGRvIGEgZnVsbCBhdWRpdCB3aXRoIGEgcHJvYmFiaWxpdHkgZGljdGF0ZWQgYnkKKyAg
ICAgICAgICAgICAgICAgICAgT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgYmV0
d2VlbiAwLjAgKG5ldmVyIGF1ZGl0KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgMS4wIChhdWRp
dCBhdCBldmVyeSBjaGFuY2UpLgorCisgICAgICAgICAgIFRoZSBkZWZhdWx0IEF1ZGl0TGV2ZWwg
Zm9yIERlYnVnIGJ1aWxkcyBpcyBSYW5kb20uCisgICAgICAgICAgIFRoZSBkZWZhdWx0IEF1ZGl0
TGV2ZWwgZm9yIFJlbGVhc2UgYnVpbGRzIGlzIE5vbmUuCisgICAgICAgICAgIFRoZSBkZWZhdWx0
IE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIDAuMDUuCisKKyAgICAgICAg
ICAgVGhlIGZ1bGwgYXVkaXQgdXNlcyB0aGUgVk1JbnNwZWN0b3I6OnZlcmlmeUNlbGwoKSB0ZW1w
bGF0ZSBmdW5jdGlvbiB0byBkbyBpdHMKKyAgICAgICAgICAgam9iLiAgVGhlIHJlYXNvbiBmb3Ig
a2VlcGluZyB0aGlzIHNlcGFyYXRlIGlzIHRvIGFsbG93IHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbgor
ICAgICAgICAgICB0byBiZSB1c2VkIGxhdGVyIGZvciBkZWJ1ZyBjaGVja3MgdGhhdCB3YW50IHRv
IHRha2Ugc29tZSBjdXN0b20gYWN0aW9uIG9uCisgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWls
dXJlIGluc3RlYWQgb2YgY3Jhc2hpbmcgd2l0aCBhIFJFTEVBU0VfQVNTRVJULgorCisgICAgICAg
ICAgIEhvdyByYW5kb20gYXVkaXRzIHdvcms/CisgICAgICAgICAgID09PT09PT09PT09PT09PT09
PT09PT0KKyAgICAgICAgICAgUmFuZG9tIGF1ZGl0cyBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBtX3Ry
aWdnZXJCaXRzIGJpdHMgaW4gVk06Om1faW50ZWdyaXR5UmFuZG9tLgorICAgICAgICAgICBtX3Ry
aWdnZXJCaXRzIGlzIGEgNjQtYml0IGJpdGZpZWxkLgorCisgICAgICAgICAgIElmIE9wdGlvbnM6
OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIDAsIG1fdHJpZ2dlckJpdHMgd2lsbCBhbHdh
eXMgYmUgMCwKKyAgICAgICAgICAgYW5kIG5vIGF1ZGl0cyB3aWxsIGJlIGRvbmUuCisKKyAgICAg
ICAgICAgSWYgT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgaXMgbm9uLXplcm8s
IG1fdHJpZ2dlckJpdHMgd2lsbCBiZQorICAgICAgICAgICBpbml0aWFsaXplZCBhcyBmb2xsb3dz
OgorCisgICAgICAgICAgICAgICAgfCAxIHJlbG9hZCBiaXQgfCAuLi4gNjMgdHJpZ2dlciBiaXRz
IC4uLiB8CisKKyAgICAgICAgICAgVGhlIHJlbG9hZCBiaXQgaXMgYWx3YXlzIHNldCAobW9yZSBk
ZXRhaWxzIGJlbG93KS4KKyAgICAgICAgICAgRWFjaCBvZiB0aGUgNjMgdHJpZ2dlciBiaXRzIGFy
ZSByYW5kb21seSBzZXQgZGVwZW5kaW5nIGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZQorICAgICAg
ICAgICBmb3IgdGhlIGJpdDoKKworICAgICAgICAgICAgICAgIFZNOjpyYW5kb20oKSA8PSBPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSAqIFVJTlRfTUFYCisKKyAgICAgICAgICAg
V2hlbiBJbnRlZ3JpdHk6OmF1ZGl0Q2VsbCgpIGlzIGNhbGxlZCwgd2UgdGFrZSB0aGUgYm90dG9t
IGJpdCBhcyB0aGUgdHJpZ2dlcgorICAgICAgICAgICBiaXQgZm9yIHRoZSBjdXJyZW50IGNlbGws
IGFuZCBzaGlmdHMgdGhlIHJlc3QgZG93biBieSAxLgorCisgICAgICAgICAgIElmIG1fdHJpZ2dl
ckJpdHMgaXMgbm9uLW51bGwgYWZ0ZXIgdGhlIHNoaWZ0LCB0aGUgdGFrZW4gdHJpZ2dlciBiaXQg
d2lsbCBkaWN0YXRlCisgICAgICAgICAgIHdoZXRoZXIgd2UgZG8gYSBmdWxsIGF1ZGl0IG9uIHRo
ZSBjdXJyZW50IGNlbGwgb3Igbm90LgorCisgICAgICAgICAgIE9uY2UgdGhlIHJlbG9hZCBiaXQg
cmVhY2hlcyB0aGUgYm90dG9tLCB3ZSBjYWxsIGEgcmVsb2FkIGZ1bmN0aW9uIHRvCisgICAgICAg
ICAgIHJlLWluaXRpYWxpemUgbV90cmlnZ2VyQml0cy4gIFRoZSByZWxvYWQgZnVuY3Rpb24gYWxz
byByZXR1cm5zIGEgYm9vbAorICAgICAgICAgICBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdHJpZ2dl
ciBhIGZ1bGwgYXVkaXQgb2YgdGhlIGN1cnJlbnQgY2VsbC4KKworICAgICAgICAgICBXaXRoIHRo
aXMgc2NoZW1lLCB3ZSBvbmx5IG5lZWQgdG8gY2FsbCB0aGUgcmVsb2FkIGZ1bmN0aW9uIG9uY2Ug
ZXZlcnkgNjQgY2FsbHMKKyAgICAgICAgICAgdG8gSW50ZWdyaXR5OjphdWRpdENlbGwoKSwgYW5k
IGNhbiBlZmZpY2llbnRseSBkZXRlcm1pbmUgd2hldGhlciB0byB0cmlnZ2VyCisgICAgICAgICAg
IHRoZSBhdWRpdCB0aGUgb3RoZXIgNjMgdGltZXMgd2l0aCB0aGUgcHJvYmFiaWxpdHkgc3BlY2lm
aWVkIGluCisgICAgICAgICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpLgor
CisgICAgICAgIDIuIEVtYmVkZGVkIHRoZSBDKysgY2xhc3Mgc2l6ZSBvZiBKU0NlbGxzIGludG8g
dGhlaXIgQ2xhc3NJbmZvLiAgVGhpcyBpcyB1c2VkIGluCisgICAgICAgICAgIHRoZSBmdWxsIGF1
ZGl0cyB0byB2ZXJpZnkgY2VsbCBzaXplcy4KKworICAgICAgICAzLiBBZGRlZCBpc0R5bmFtaWNh
bGx5U2l6ZWRUeXBlKCkgdG8gY2hlY2sgaWYgYSBKU1R5cGUgaGFzIGEgZHluYW1pYyBzaXplIGFs
bG9jYXRpb24KKyAgICAgICAgICAgaS5lLiB0aGUgc2l6ZSBvZiBpbnN0YW5jZXMgb2YgdGhpcyB0
eXBlIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IHRoZSBzdGF0aWMgQysrCisgICAgICAgICAgIHNpemUg
b2YgaXRzIGNsYXNzLCBidXQgcmF0aGVyLCBkZXBlbmRzIG9uIHNvbWUgcnVudGltZSB2YXJpYWJs
ZS4KKworICAgICAgICA0LiBNYWRlIHRoZSBWTUluc3BlY3RvciBhIGZyaWVuZCBvZiBzZXZlcmFs
IGNsYXNzZXMgc28gdGhhdCBpdCBjYW4gYWNjZXNzIHRoZWlyCisgICAgICAgICAgIHByaXZhdGUg
bWV0aG9kcyBhbmQgZmllbGRzLgorCisgICAgICAgIDUuIE1vdmVkIHRoZSBpbmxpbmUgZnVuY3Rp
b24gSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKCkgZnJvbSBCaWdJbnQuY3BwIHRvIGl0cworICAg
ICAgICAgICBoZWFkZXIgZmlsZSBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgaW4gVk1JbnNwZWN0b3I6
OnZlcmlmeUNlbGxTaXplKCkuCisKKyAgICAgICAgNi4gR2F2ZSB0aGUgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoKSBpdHMgb3duIEpTVHlwZSBzbyB0aGF0IHdlIGNhbiBpZGVudGlmeSBpdAorICAg
ICAgICAgICBhcyBhIGR5bmFtaWNhbGx5IHNpemVkIG9iamVjdC4KKworICAgICAgICA3LiBJbmNy
ZWFzZWQgdGhlIHJhbmRvbW5lc3Mgb2YgVk06OnJhbmRvbSgpICh3aGljaCBpcyBpbXBsZW1lbnRl
ZCB3aXRoIFdlYWtSYW5kb20pCisgICAgICAgICAgIGJ5IHJlLXNlZWRpbmcgaXQgd2l0aCBhIGNy
eXB0b2dyYXBoaWNhbGx5IHJhbmRvbSBudW1iZXIgZWFjaCBHQy4KKworICAgICAgICA4LiBDYWxs
ZWQgSW50ZWdyaXR5OjphdWRpdENlbGwoKSBvbiBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JB
dXhpbGlhcnkoKSdzIGNlbGwKKyAgICAgICAgICAgYXMgYW4gZXhhbXBsZSB1c2Ugb2YgYXVkaXRD
ZWxsKCkuICBNb3JlIHVzZXMgd2lsbCBiZSBhZGRlZCBpbiBsYXRlciBwYXRjaGVzIHRvCisgICAg
ICAgICAgIGZvbGxvdy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVu
QmVnaW5QaGFzZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogcnVu
dGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWxsb2NhdGlvblNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZS5oOgorICAgICAgICAoSlNDOjppc0R5bmFtaWNhbGx5U2l6ZWRUeXBlKToKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRP
cHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpy
YW5kb20pOgorICAgICAgICAoSlNDOjpWTTo6aW50ZWdyaXR5UmFuZG9tKToKKyAgICAgICAgKiB0
b29scy9JbnRlZ3JpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5OjpSYW5k
b206OlJhbmRvbSk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpyZWxvYWRBbmRD
aGVja1Nob3VsZEF1ZGl0U2xvdyk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRDZWxs
RnVsbHkpOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbE1pbmltYWxseVNsb3cp
OgorICAgICAgICAqIHRvb2xzL0ludGVncml0eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50
ZWdyaXR5OjphdWRpdENlbGwpOgorICAgICAgICAqIHRvb2xzL0ludGVncml0eUlubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpzaG91bGRBdWRpdCk6Cisg
ICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRDZWxsTWluaW1hbGx5KToKKyAgICAgICAgKEpT
Qzo6SW50ZWdyaXR5OjphdWRpdENlbGxSYW5kb21seSk6CisgICAgICAgICogdG9vbHMvVk1JbnNw
ZWN0b3IuaDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnVudXNlZFZlcmlmaWVyKToKKyAg
ICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnZlcmlmeUNlbGxTaXplKToKKyAgICAgICAgKiB0b29s
cy9WTUluc3BlY3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9y
Ojp2ZXJpZnlDZWxsU2l6ZSk6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxs
KToKKwogMjAxOS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW92ZSBKU0xleGljYWxFbnZpcm9ubWVudCwgRGlyZWN0QXJndW1lbnRzLCBhbmQgU2NvcGVk
QXJndW1lbnRzIGNlbGxzIG91dCBvZiB0aGUgR2lnYWNhZ2UuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSwxMSBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9X
cml0ZUJhcnJpZXIuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVySW5saW5lcy5oCiAKKyAgICB0
b29scy9JbnRlZ3JpdHkuaAorICAgIHRvb2xzL0ludGVncml0eUlubGluZXMuaAorICAgIHRvb2xz
L1ZNSW5zcGVjdG9yLmgKKyAgICB0b29scy9WTUluc3BlY3RvcklubGluZXMuaAorCiAgICAgd2Fz
bS9XYXNtQ2FwYWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20v
V2FzbUNvbXBpbGF0aW9uTW9kZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk4OSw2ICs5ODksNyBAQCB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNw
cAogdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5j
cHAKIHRvb2xzL0hlYXBWZXJpZmllci5jcHAKK3Rvb2xzL0ludGVncml0eS5jcHAKIHRvb2xzL0pT
RG9sbGFyVk0uY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUw
MTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTEsNiArMTkxMSw5IEBACiAJCUZF
QTNCQkFDMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTNCQkFCMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdD
RkcuaCAqLzsgfTsKIAkJRkVCNTFGNkMxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDku
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1MUY2
QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSAqLzsgfTsKIAkJRkVCNThDMTUx
ODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNThDMTMxODdCOEIxNjAwOThFRjBCIC8q
IEVycm9ySGFuZGxpbmdTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3Rvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QzU3OTcyMjMxMDVCNDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLzsgfTsKKwkJ
RkVDNTc5NzYyMzEwNUY0RTAwQkNBODNGIC8qIEludGVncml0eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8q
IEludGVncml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZFQzU3OTc4MjMxMDk1NEMwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUM1Nzk3NzIzMTA5
NTRCMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQ0I4QjI3MUQyNUJCODUwMDZGMjQ2MyAvKiBG
dW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVDQjhCMjUxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzVGVzdC5jcHAgKi87IH07CiAJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
Mjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEzNSw2ICs1MTM4LDEwIEBA
CiAJCUZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVncmVzczE0MTgwOS5tbTsgcGF0aCA9
IEFQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjU4QzEzMTg3QjhCMTYwMDk4RUYwQiAv
KiBFcnJvckhhbmRsaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXJyb3JIYW5kbGluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQzU3
OTcyMjMxMDVCNDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFQzU3OTc0MjMxMDVGNDIwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZWdyaXR5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIElu
dGVncml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ3JpdHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzcyMzEwOTU0QjAwQkNBODNGIC8q
IEludGVncml0eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
ZWdyaXR5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNCOEIyNTFE
MjVCQjZFMDA2RjI0NjMgLyogRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA7IHBhdGgg
PSBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVDQjhCMjYxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVz
VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGdW5jdGlvbk92ZXJyaWRl
c1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDQjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3Rh
cGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBuYW1lID0gInRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIjsgcGF0aCA9ICJBUEkvdGVz
dHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzU4Myw2ICs3NTkwLDkgQEAKIAkJCQlGRUEwQzQwMTFDREQ3RDBFMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCAqLywKIAkJCQlGRTFCRDAyMjFFNzIwNTJGMDAxMzRCQzkg
LyogSGVhcFZlcmlmaWVyLmNwcCAqLywKIAkJCQlGRTFCRDAyMzFFNzIwNTJGMDAxMzRCQzkgLyog
SGVhcFZlcmlmaWVyLmggKi8sCisJCQkJRkVDNTc5NzQyMzEwNUY0MjAwQkNBODNGIC8qIEludGVn
cml0eS5jcHAgKi8sCisJCQkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIEludGVncml0eS5o
ICovLAorCQkJCUZFQzU3OTc3MjMxMDk1NEIwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmgg
Ki8sCiAJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovLAog
CQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggKi8sCiAJCQkJODZC
NTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLApAQCAtNzU5MSw2
ICs3NjAxLDcgQEAKIAkJCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFy
cmF5LmggKi8sCiAJCQkJRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNw
cCAqLywKIAkJCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLywK
KwkJCQlGRUM1Nzk3MjIzMTA1QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTg5OTksNiArOTAxMCw3IEBACiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2Vk
QmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYw
IC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQzU3OTc4MjMxMDk1NEMwMEJD
QTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4
REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVB
M0JCQTgyMTJCNjU1OTAwRTkzQUQxIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICov
LApAQCAtOTQ5Miw2ICs5NTA0LDcgQEAKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyog
SW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkx
NTcgLyogSW5saW5lQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1NjE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RUM1Nzk3NjIzMTA1RjRFMDBCQ0E4M0YgLyogSW50ZWdyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTg0MDMyMDE4QkZGQkUxMDA1QTA4MTEgLyogSW5zcGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1OTNDRjdGMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0
b3JBZ2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5MjQsNiArOTkzNyw3IEBACiAJ
CQkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVy
SmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJGMTY2QUQzNjAwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVDNTc5NzMyMzEw
NUI1MTAwQkNBODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QzAxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjEwNThDMTY3NTQ4MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxl
ck9TUkV4aXRTaXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIldl
YWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaD4KQEAgLTEyNjgsNiAr
MTI2OSw5IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MKIAogICAg
IG1fYmVmb3JlR0MgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAorICAgIC8vIFBpZ2d5IGJhY2sg
b24gdGhlIEdDIHRvIHJhbmRvbWl6ZSBhIGJpdC4KKyAgICB2bSgpLnJhbmRvbSgpLnNldFNlZWQo
Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7CisKICAgICBpZiAobV9jb2xsZWN0aW9u
U2NvcGUpIHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBk
dXJpbmcgR0M6ICIsICptX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJIZWFwQW5hbHl6ZXIuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIK
ICNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKQEAgLTIyMSw2ICsyMjIsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgCiAgICAgICAgIEpTQ2VsbCoganNDZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICB2YWxpZGF0ZUNlbGwo
anNDZWxsKTsKKyAgICAgICAgSW50ZWdyaXR5OjphdWRpdENlbGwodm0oKSwganNDZWxsKTsKICAg
ICAgICAgCiAgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlH
cmV5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNz
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDggQEAgc3RydWN0IE1ldGhvZFRh
YmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAotICAgIENsYXNzTmFt
ZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCisgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUsIFwKKyAgICBzaXplb2YoQ2xhc3NOYW1lKQogCiBzdHJ1Y3QgQ2xhc3NJbmZvIHsKICAg
ICAvLyBBIHN0cmluZyBkZW5vdGluZyB0aGUgY2xhc3MgbmFtZS4gRXhhbXBsZTogIldpbmRvdyIu
CkBAIC0yMjEsNiArMjIyLDcgQEAgc3RydWN0IENsYXNzSW5mbyB7CiAgICAgTWV0aG9kVGFibGUg
bWV0aG9kVGFibGU7CiAKICAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5U3RvcmFnZVR5cGU7
CisgICAgdW5zaWduZWQgY3BwU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAg
ICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBk
ZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1
YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRo
aXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCiAgICAgdXNpbmcgTWFwcGVkQXJndW1lbnRz
ID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1hcHBl
ZEFyZ3VtZW50cyBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRo
YXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9w
ZXJ0aWVzLgorCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
Y3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEyICs4Myw2IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHplcm9CaWdJbnQ7CiB9CiAK
LWlubGluZSBzaXplX3QgSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBzaXplX3Qgc2l6ZVdpdGhQYWRkaW5nID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihzaXplX3QpPihzaXplb2YoSlNCaWdJbnQpKTsKLSAgICByZXR1cm4gc2l6ZVdpdGhQ
YWRkaW5nICsgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KTsKLX0KLQogSlNCaWdJbnQqIEpTQmlnSW50
Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpT
QmlnSW50KiB4KTsKIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQg
bGVuZ3RoKTsKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+
KHNpemVvZihKU0JpZ0ludCkpOwpAQCAtMjQ5LDggKzI0OSwxNiBAQCBwcml2YXRlOgogCiAgICAg
Y29uc3QgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3NpZ24geyBmYWxzZSB9OworCisg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAoraW5saW5lIHNpemVfdCBKU0JpZ0lu
dDo6YWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCBzaXplV2l0
aFBhZGRpbmcgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHNpemVfdCk+KHNpemVv
ZihKU0JpZ0ludCkpOworICAgIHJldHVybiBzaXplV2l0aFBhZGRpbmcgKyBsZW5ndGggKiBzaXpl
b2YoRGlnaXQpOworfQorCiBpbmxpbmUgSlNCaWdJbnQqIGFzQmlnSW50KEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHZhbHVlLmFzQ2VsbCgpLT5pc0JpZ0ludCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAkocmV2aXNpb24gMjUwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQoKSB7IHJldHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQpAQCAtMTAzLDYgKzEwMyw4IEBA
IHByaXZhdGU6CiAgICAgRXhwb3J0TWFwIG1fZXhwb3J0czsKICAgICBWZWN0b3I8SWRlbnRpZmll
cj4gbV9uYW1lczsKICAgICBXcml0ZUJhcnJpZXI8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+IG1fbW9k
dWxlUmVjb3JkOworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5j
cHAJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNiArOTQsNyBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgQ0FTRShNb2R1bGVFbnZpcm9ubWVudFR5cGUpCiAg
ICAgQ0FTRShTdHJpY3RFdmFsQWN0aXZhdGlvblR5cGUpCiAgICAgQ0FTRShXaXRoU2NvcGVUeXBl
KQorICAgIENBU0UoTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSkKICAgICBDQVNFKFJlZ0V4cE9i
amVjdFR5cGUpCiAgICAgQ0FTRShQcm94eU9iamVjdFR5cGUpCiAgICAgQ0FTRShKU0dlbmVyYXRv
clR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMjUwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA2LDYgKzEwNiw3IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgV2l0
aFNjb3BlVHlwZSwKICAgICAvLyBFbmQgSlNTY29wZSB0eXBlcy4KIAorICAgIE1vZHVsZU5hbWVz
cGFjZU9iamVjdFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5
cGUsCiAgICAgSlNHZW5lcmF0b3JUeXBlLApAQCAtMTM5LDYgKzE0MCwxOCBAQCBpbmxpbmUgY29u
c3RleHByIGJvb2wgaXNUeXBlZEFycmF5VHlwZShKCiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHlwZSkgLSBGaXJzdFR5cGVkQXJyYXlUeXBlKSA8IE51bWJlck9mVHlwZWRBcnJh
eVR5cGVzRXhjbHVkaW5nRGF0YVZpZXc7CiB9CiAKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc0R5
bmFtaWNhbGx5U2l6ZWRUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEJpZ0lu
dFR5cGUKKyAgICAgICAgfHwgdHlwZSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlCisgICAgICAgIHx8
IHR5cGUgPT0gRmluYWxPYmplY3RUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gTGV4aWNhbEVudmly
b25tZW50VHlwZQorICAgICAgICB8fCB0eXBlID09IE1vZHVsZUVudmlyb25tZW50VHlwZQorICAg
ICAgICB8fCB0eXBlID09IE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5cGUpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDExIEBAIHN0YXRpYyB2
b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
KworICAgIGlmIChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA8IDApCisgICAg
ICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpID0gMDsKKyAgICBlbHNlIGlm
IChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA+IDEuMCkKKyAgICAgICAgT3B0
aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgPSAxLjA7CiB9CiAKIHZvaWQgT3B0aW9u
czo6aW5pdGlhbGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBcCiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2Rl
T3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMg
Z2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAor
ICAgIHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlBy
b2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzICgwLjAgLSAxLjApIikgXAogICAg
IHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5z
aWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODYsNiArNzg2LDggQEAgcHJp
dmF0ZToKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKIAogICAgIHVpbnQzMl90IG1fcHJv
cGVydHlIYXNoOworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwgbV9ydW5Mb29wKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSkKICNlbmRpZiAvLyBVU0UoQ0YpCisgICAgLCBtX2ludGVncml0eVJhbmRvbSgq
dGhpcykKICAgICAsIGhlYXAoKnRoaXMsIGhlYXBUeXBlKQogICAgICwgZmFzdE1hbGxvY0FsbG9j
YXRvcihtYWtlVW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogICAg
ICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IobWFrZVVuaXF1ZTxHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiRnV6emVyQWdlbnQuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCiAjaW5jbHVkZSAiSW50
cmluc2ljLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNl
LmgiCkBAIC0zMTAsNiArMzExLDkgQEAgcHVibGljOgogICAgIC8vIEdsb2JhbCBvYmplY3QgaW4g
d2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KGNvbnN0IENhbGxGcmFtZSopIGNvbnN0OwogCisgICAg
V2Vha1JhbmRvbSYgcmFuZG9tKCkgeyByZXR1cm4gbV9yYW5kb207IH0KKyAgICBJbnRlZ3JpdHk6
OlJhbmRvbSYgaW50ZWdyaXR5UmFuZG9tKCkgeyByZXR1cm4gbV9pbnRlZ3JpdHlSYW5kb207IH0K
KwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBuZXh0SUQoKTsKIApAQCAtMzIyLDYgKzMyNiw5IEBA
IHByaXZhdGU6CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwogI2VuZGlm
CiAKKyAgICBXZWFrUmFuZG9tIG1fcmFuZG9tOworICAgIEludGVncml0eTo6UmFuZG9tIG1faW50
ZWdyaXR5UmFuZG9tOworCiBwdWJsaWM6CiAgICAgSGVhcCBoZWFwOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgi
CisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3JJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEludGVncml0eSB7CisKK25hbWVzcGFjZSB7
Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK1JhbmRvbTo6UmFuZG9tKFZN
JiB2bSkKK3sKKyAgICByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyh2bSk7IC8vIFRoaXMg
d2lsbCBpbml0aWFsaXplIHRoZSBhdWRpdCB0cmlnZ2VyIGJpdHMuCit9CisKK2Jvb2wgUmFuZG9t
OjpyZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyhWTSYgdm0pCit7CisgICAgaWYgKCFPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSkgeworICAgICAgICBtX3RyaWdnZXJCaXRz
ID0gMDsgLy8gTmV2ZXIgdHJpZ2dlciwgYW5kIGRvbid0IGJvdGhlciByZWxvYWRpbmcuCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaXNhYmxlZCBJbnRlZ3Jp
dHkgYXVkaXRzOiB0cmlnZ2VyIGJpdHMgIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihtX3RyaWdnZXJCaXRzKSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gUmVsb2FkIHRoZSB0cmlnZ2VyIGJpdHMuCisgICAgbV90cmlnZ2VyQml0cyA9IDF1bGwg
PDwgNjM7IC8vIFNldCB0aGUgdGVybWluYXRvciBiaXQgKGkuZS4gIm5lZWQgcmVsb2FkIikgaW4g
dGhlIGhpZ2ggYml0LgorCisgICAgdWludDMyX3QgdGhyZXNob2xkID0gVUlOVF9NQVggKiBPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bWJlck9mVHJpZ2dlckJpdHM7ICsraSkgeworICAgICAgICBib29sIHRyaWdnZXIgPSAodm0u
cmFuZG9tKCkuZ2V0VWludDMyKCkgPD0gdGhyZXNob2xkKTsKKyAgICAgICAgbV90cmlnZ2VyQml0
cyA9IG1fdHJpZ2dlckJpdHMgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIpIDw8IGkp
OworICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJyZWxvYWRlZCBJ
bnRlZ3JpdHkgdHJpZ2dlciBiaXRzICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obV90cmlnZ2VyQml0cykpKTsKKyAgICBBU1NFUlQobV90cmlnZ2VyQml0cyA+PSAoMXVsbCA8
PCA2MykpOworICAgIHJldHVybiB2bS5yYW5kb20oKS5nZXRVaW50MzIoKSA8PSB0aHJlc2hvbGQ7
Cit9CisKK3ZvaWQgYXVkaXRDZWxsRnVsbHkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAg
Vk1JbnNwZWN0b3I6OnZlcmlmeUNlbGw8Vk1JbnNwZWN0b3I6OlJlbGVhc2VBc3NlcnQ+KHZtLCBj
ZWxsKTsKK30KKwordm9pZCBhdWRpdENlbGxNaW5pbWFsbHlTbG93KFZNJiwgSlNDZWxsKiBjZWxs
KQoreworICAgIGlmIChHaWdhY2FnZTo6Y29udGFpbnMoY2VsbCkpIHsKKyAgICAgICAgaWYgKGNl
bGwtPnR5cGUoKSAhPSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIGNlbGwgIiwgUmF3UG9p
bnRlcihjZWxsKSwgIiAiLCBKU1ZhbHVlKGNlbGwpKTsKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEludGVncml0eQorfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNDZWxsOworY2xhc3MgVk07CisKK25hbWVzcGFjZSBJbnRlZ3JpdHkgeworCitlbnVtIGNs
YXNzIEF1ZGl0TGV2ZWwgeworICAgIE5vbmUsCisgICAgTWluaW1hbCwKKyAgICBGdWxsLAorICAg
IFJhbmRvbSwKK307CisKKyNpZmRlZiBOREVCVUcKK3N0YXRpYyBjb25zdGV4cHIgQXVkaXRMZXZl
bCBEZWZhdWx0QXVkaXRMZXZlbCA9IEF1ZGl0TGV2ZWw6Ok5vbmU7CisjZWxzZQorc3RhdGljIGNv
bnN0ZXhwciBBdWRpdExldmVsIERlZmF1bHRBdWRpdExldmVsID0gQXVkaXRMZXZlbDo6UmFuZG9t
OworI2VuZGlmCisKK2NsYXNzIFJhbmRvbSB7CitwdWJsaWM6CisgICAgUmFuZG9tKFZNJik7CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkQXVkaXQoVk0mKTsKKworcHJpdmF0ZToKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbG9hZEFuZENoZWNrU2hvdWxkQXVkaXRTbG93KFZN
Jik7CisKKyAgICB1aW50NjRfdCBtX3RyaWdnZXJCaXRzOworCisgICAgLy8gVGhlIHRvcCBiaXQg
aXMgcmVzZXJ2ZWQgYXMgYSB0ZXJtaW5hdGlvbiBiaXQuIEhlbmNlLCB0aGUgbnVtYmVyIG9mCisg
ICAgLy8gdHJpZ2dlciBiaXRzIGlzIGFsd2F5cyAxIGxlc3MgdGhhbiB3aWxsIGZpdCBpbiBtX3Ry
aWdnZXJCaXRzLgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG51bWJlck9mVHJpZ2dlckJpdHMg
PSAoc2l6ZW9mKG1fdHJpZ2dlckJpdHMpICogQ0hBUl9CSVQpIC0gMTsKK307CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBhdWRpdENlbGxSYW5kb21seShWTSYsIEpTQ2VsbCopOworQUxXQVlTX0lOTElO
RSB2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseShWTSYsIEpTQ2VsbCopOworSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhdWRpdENlbGxNaW5pbWFsbHlTbG93KFZNJiwgSlNDZWxsKik7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGF1ZGl0Q2VsbEZ1bGx5KFZNJiwgSlNDZWxsKik7CisKK3RlbXBsYXRlPEF1
ZGl0TGV2ZWwgPSBBdWRpdExldmVsOjpSYW5kb20sIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IHZvaWQgYXVkaXRDZWxsKFZNJiwgVCkgeyB9CisKK3RlbXBsYXRlPEF1ZGl0TGV2ZWwgYXVkaXRM
ZXZlbCA9IERlZmF1bHRBdWRpdExldmVsPgorQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbChW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExldmVs
OjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExl
dmVsOjpNaW5pbWFsKQorICAgICAgICBhdWRpdENlbGxNaW5pbWFsbHkodm0sIGNlbGwpOworICAg
IGVsc2UgaWYgKGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZlbDo6RnVsbCkKKyAgICAgICAgYXVkaXRD
ZWxsRnVsbHkodm0sIGNlbGwpOworICAgIGVsc2UgaWYgKGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZl
bDo6UmFuZG9tKQorICAgICAgICBhdWRpdENlbGxSYW5kb21seSh2bSwgY2VsbCk7Cit9CisKK3Rl
bXBsYXRlPEF1ZGl0TGV2ZWwgYXVkaXRMZXZlbCA9IERlZmF1bHRBdWRpdExldmVsPgorQUxXQVlT
X0lOTElORSB2b2lkIGF1ZGl0Q2VsbChWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZlbDo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhdWRpdENlbGw8YXVkaXRMZXZlbD4odm0sIHZh
bHVlLmFzQ2VsbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW50ZWdyaXR5CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdy
aXR5SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9JbnRlZ3JpdHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CituYW1lc3BhY2UgSW50ZWdyaXR5IHsKKworQUxXQVlTX0lOTElORSBib29sIFJhbmRvbTo6
c2hvdWxkQXVkaXQoVk0mIHZtKQoreworICAgIGJvb2wgc2hvdWxkQXVkaXQgPSBtX3RyaWdnZXJC
aXRzICYgMTsKKyAgICBtX3RyaWdnZXJCaXRzID0gbV90cmlnZ2VyQml0cyA+PiAxOworICAgIGlm
IChMSUtFTFkoIXNob3VsZEF1ZGl0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgYXVkaXRpbmcgaXMgZW5hYmxlZCwgdGhlbiB0aGUgdG9wIGJpdCBvZiBtX3RyaWdnZXJCaXRz
IGlzIGFsd2F5cyBzZXQKKyAgICAvLyB0byAxIG9uIHJlbG9hZC4gV2hlbiB0aGlzIHRvcCBiaXQg
cmVhY2hlcyB0aGUgYm90dG9tLCBpdCBkb2VzIG5vdAorICAgIC8vIGluZGljYXRlIHRoYXQgd2Ug
c2hvdWxkIHRyaWdnZXIgYW4gYXVkaXQgYnV0IHJhdGhlciB0aGF0IHdlJ3ZlIHNoaWZ0ZWQKKyAg
ICAvLyBvdXQgYWxsIHRoZSBhdmFpbGFibGUgdHJpZ2dlciBiaXRzIGFuZCBoZW5jZSwgbmVlZCB0
byByZWxvYWQuIEluc3RlYWQsCisgICAgLy8gcmVsb2FkQW5kQ2hlY2tTaG91bGRBdWRpdFNsb3co
KSB3aWxsIHJldHVybiB3aGV0aGVyIHdlIGFjdHVhbGx5IG5lZWQgdG8KKyAgICAvLyB0cmlnZ2Vy
IGFuIGF1ZGl0IHRoaXMgdHVybi4KKyAgICBpZiAoIW1fdHJpZ2dlckJpdHMpCisgICAgICAgIHJl
dHVybiByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyh2bSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGxNaW5pbWFsbHkoVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCit7CisgICAgaWYgKFVOTElLRUxZKEdpZ2FjYWdlOjpjb250YWlucyhjZWxsKSkp
CisgICAgICAgIGF1ZGl0Q2VsbE1pbmltYWxseVNsb3codm0sIGNlbGwpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgYXVkaXRDZWxsUmFuZG9tbHkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZtLmludGVncml0eVJhbmRvbSgpLnNob3VsZEF1ZGl0KHZtKSkpCisg
ICAgICAgIGF1ZGl0Q2VsbEZ1bGx5KHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW50
ZWdyaXR5Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5oCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBDZWxsTWVt
b3J5VG9TdHJlYW0oSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkdW1wU3Vic3BhY2VIYXNoZXMoVk0qKTsKIAorICAgIGVudW0gVmVyaWZp
ZXJBY3Rpb24geyBSZWxlYXNlQXNzZXJ0LCBDdXN0b20gfTsKKworICAgIHVzaW5nIFZlcmlmeUZ1
bmN0b3IgPSBib29sKGJvb2wgY29uZGl0aW9uLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgLi4u
KTsKKyAgICBzdGF0aWMgYm9vbCB1bnVzZWRWZXJpZmllcihib29sLCBjb25zdCBjaGFyKiwgLi4u
KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdGVtcGxhdGU8VmVyaWZpZXJBY3Rpb24sIFZlcmlm
eUZ1bmN0b3IgPSB1bnVzZWRWZXJpZmllcj4KKyAgICBzdGF0aWMgYm9vbCB2ZXJpZnlDZWxsU2l6
ZShWTSYsIEpTQ2VsbCosIE9wdGlvbmFsPHNpemVfdD4gYWxsb2NhdG9yQ2VsbFNpemUgPSB7IH0p
OworCisgICAgdGVtcGxhdGU8VmVyaWZpZXJBY3Rpb24sIFZlcmlmeUZ1bmN0b3IgPSB1bnVzZWRW
ZXJpZmllcj4KKyAgICBzdGF0aWMgYm9vbCB2ZXJpZnlDZWxsKFZNJiwgSlNDZWxsKik7CisKIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJKU0JpZ0ludC5oIgorI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisj
aW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI3VuZGVmIEFVRElUX0NPTkRJVElPTgor
I3VuZGVmIEFVRElUX1ZFUklGWQorCisjZGVmaW5lIEFVRElUX0NPTkRJVElPTih4KSAoeCksICN4
CisjZGVmaW5lIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBjb25kLCAuLi4pIGRvIHsg
XAorICAgICAgICBpZiAoYWN0aW9uID09IFZlcmlmaWVyQWN0aW9uOjpSZWxlYXNlQXNzZXJ0KSBc
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICAg
ICAgZWxzZSBpZiAoIXZlcmlmaWVyKEFVRElUX0NPTkRJVElPTihjb25kKSwgX19WQV9BUkdTX18p
KSBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
dGVtcGxhdGU8Vk1JbnNwZWN0b3I6OlZlcmlmaWVyQWN0aW9uIGFjdGlvbiwgVk1JbnNwZWN0b3I6
OlZlcmlmeUZ1bmN0b3IgdmVyaWZpZXI+Citib29sIFZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsU2l6
ZShWTSYgdm0sIEpTQ2VsbCogY2VsbCwgT3B0aW9uYWw8c2l6ZV90PiBvcHRpb25hbEFsbG9jYXRv
ckNlbGxTaXplKQoreworICAgIHNpemVfdCBhbGxvY2F0b3JDZWxsU2l6ZSA9IG9wdGlvbmFsQWxs
b2NhdG9yQ2VsbFNpemUgPyAqb3B0aW9uYWxBbGxvY2F0b3JDZWxsU2l6ZSA6IGNlbGwtPmNlbGxT
aXplKCk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7
CisgICAgSlNUeXBlIGNlbGxUeXBlID0gY2VsbC0+dHlwZSgpOworICAgIEFVRElUX1ZFUklGWShh
Y3Rpb24sIHZlcmlmaWVyLCBjZWxsVHlwZSA9PSBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCksIGNl
bGwsIGNlbGxUeXBlLCBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCkpOworCisgICAgaWYgKGlzRHlu
YW1pY2FsbHlTaXplZFR5cGUoY2VsbFR5cGUpKSB7CisgICAgICAgIHNpemVfdCBjZWxsU2l6ZSA9
IDA7CisgICAgICAgIHN3aXRjaCAoY2VsbFR5cGUpIHsKKyAgICAgICAgY2FzZSBCaWdJbnRUeXBl
OgorICAgICAgICAgICAgYXV0byogYmlnSW50ID0ganNDYXN0PEpTQmlnSW50Kj4oY2VsbCk7Cisg
ICAgICAgICAgICBjZWxsU2l6ZSA9IEpTQmlnSW50OjphbGxvY2F0aW9uU2l6ZShiaWdJbnQtPmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERpcmVjdEFyZ3VtZW50
c1R5cGU6CisgICAgICAgICAgICBhdXRvKiBhcmdzID0ganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+
KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRp
b25TaXplKGFyZ3MtPm1fbWluQ2FwYWNpdHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRmluYWxPYmplY3RUeXBlOgorICAgICAgICAgICAgY2VsbFNpemUgPSBKU0ZpbmFsT2Jq
ZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGV4aWNhbEVudmlyb25tZW50VHlwZToKKyAgICAg
ICAgICAgIGF1dG8qIGVudiA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOwor
ICAgICAgICAgICAgY2VsbFNpemUgPSBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNp
emUoZW52LT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1vZHVsZUVudmlyb25tZW50VHlwZToKKyAgICAgICAgICAgIGF1dG8qIGVudiA9IGpzQ2FzdDxK
U01vZHVsZUVudmlyb25tZW50Kj4oY2VsbCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IEpTTW9k
dWxlRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKGVudi0+c3ltYm9sVGFibGUoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VPYmplY3RUeXBlOgor
ICAgICAgICAgICAgYXV0byogb2JqID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4o
Y2VsbCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShvYmotPm1fbmFtZXMuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIs
IGNlbGxTaXplIDw9IGFsbG9jYXRvckNlbGxTaXplLCBjZWxsLCBjZWxsVHlwZSwgY2VsbFNpemUs
IGFsbG9jYXRvckNlbGxTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIEFVRElUX1ZF
UklGWShhY3Rpb24sIHZlcmlmaWVyLCBjbGFzc0luZm8tPmNwcFNpemUgPD0gYWxsb2NhdG9yQ2Vs
bFNpemUsIGNlbGwsIGNlbGxUeXBlLCBjbGFzc0luZm8tPmNwcFNpemUsIGFsbG9jYXRvckNlbGxT
aXplKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPFZNSW5zcGVjdG9y
OjpWZXJpZmllckFjdGlvbiBhY3Rpb24sIFZNSW5zcGVjdG9yOjpWZXJpZnlGdW5jdG9yIHZlcmlm
aWVyPgorYm9vbCBWTUluc3BlY3Rvcjo6dmVyaWZ5Q2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBzaXplX3QgYWxsb2NhdG9yQ2VsbFNpemUgPSAwOworICAgIGlmIChjZWxsLT5pc0xh
cmdlQWxsb2NhdGlvbigpKSB7CisgICAgICAgIExhcmdlQWxsb2NhdGlvbiYgbGFyZ2VBbGxvY2F0
aW9uID0gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCk7CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rp
b24sIHZlcmlmaWVyLCAmbGFyZ2VBbGxvY2F0aW9uLnZtKCkgPT0gJnZtLCBjZWxsLCBjZWxsLT50
eXBlKCksICZsYXJnZUFsbG9jYXRpb24udm0oKSwgJnZtKTsKKworICAgICAgICBib29sIGlzVmFs
aWRMYXJnZUFsbG9jYXRpb24gPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvKiBpIDogdm0uaGVh
cC5vYmplY3RTcGFjZSgpLmxhcmdlQWxsb2NhdGlvbnMoKSkgeworICAgICAgICAgICAgaWYgKGkg
PT0gJmxhcmdlQWxsb2NhdGlvbikgeworICAgICAgICAgICAgICAgIGlzVmFsaWRMYXJnZUFsbG9j
YXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBpc1ZhbGlkTGFy
Z2VBbGxvY2F0aW9uLCBjZWxsLCBjZWxsLT50eXBlKCkpOworCisgICAgICAgIGFsbG9jYXRvckNl
bGxTaXplID0gbGFyZ2VBbGxvY2F0aW9uLmNlbGxTaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+bWFya2VkQmxvY2soKTsKKyAgICAgICAgTWFy
a2VkQmxvY2s6OkhhbmRsZSYgYmxvY2tIYW5kbGUgPSBibG9jay5oYW5kbGUoKTsKKyAgICAgICAg
QVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsICZibG9jay52bSgpID09ICZ2bSwgY2VsbCwg
Y2VsbC0+dHlwZSgpLCAmYmxvY2sudm0oKSwgJnZtKTsKKworICAgICAgICB1aW50cHRyX3QgYmxv
Y2tTdGFydEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmxvY2tIYW5kbGUu
c3RhcnQoKSk7CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBibG9ja0hh
bmRsZS5jb250YWlucyhjZWxsKSwgY2VsbCwgY2VsbC0+dHlwZSgpLCBibG9ja1N0YXJ0QWRkcmVz
cywgYmxvY2tIYW5kbGUuZW5kKCkpOworCisgICAgICAgIHVpbnRwdHJfdCBjZWxsQWRkcmVzcyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjZWxsKTsKKyAgICAgICAgdWludHB0cl90IGNl
bGxPZmZzZXQgPSBjZWxsQWRkcmVzcyAtIGJsb2NrU3RhcnRBZGRyZXNzOworICAgICAgICBhbGxv
Y2F0b3JDZWxsU2l6ZSA9IGJsb2NrLmNlbGxTaXplKCk7CisgICAgICAgIGJvb2wgY2VsbElzUHJv
cGVybHlBbGlnbmVkID0gIShjZWxsT2Zmc2V0ICUgYWxsb2NhdG9yQ2VsbFNpemUpOworICAgICAg
ICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgY2VsbElzUHJvcGVybHlBbGlnbmVkLCBj
ZWxsLCBjZWxsLT50eXBlKCksIGFsbG9jYXRvckNlbGxTaXplKTsKKyAgICB9CisKKyAgICBhdXRv
IGNlbGxUeXBlID0gY2VsbC0+dHlwZSgpOworICAgIGlmIChjZWxsLT50eXBlKCkgIT0gSlNJbW11
dGFibGVCdXR0ZXJmbHlUeXBlKQorICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmll
ciwgIUdpZ2FjYWdlOjpjb250YWlucyhjZWxsKSwgY2VsbCwgY2VsbFR5cGUpOworCisgICAgaWYg
KCF2ZXJpZnlDZWxsU2l6ZTxhY3Rpb24sIHZlcmlmaWVyPih2bSwgY2VsbCwgYWxsb2NhdG9yQ2Vs
bFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoR2lnYWNhZ2U6OmlzRW5h
YmxlZChHaWdhY2FnZTo6SlNWYWx1ZSkgJiYgY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoY2VsbCk7CisgICAgICAgIGNvbnN0IEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgQVVESVRfVkVSSUZZ
KGFjdGlvbiwgdmVyaWZpZXIsICFidXR0ZXJmbHkgfHwgR2lnYWNhZ2U6OmlzQ2FnZWQoR2lnYWNh
Z2U6OkpTVmFsdWUsIGJ1dHRlcmZseSksIGNlbGwsIGNlbGwtPnR5cGUoKSwgYnV0dGVyZmx5KTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI3VuZGVmIEFVRElUX1ZFUklGWQorI3Vu
ZGVmIEFVRElUX0NPTkRJVElPTgorCit9IC8vIG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="395059"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379383</attachid>
            <date>2019-09-23 11:44:11 -0700</date>
            <delta_ts>2019-09-23 17:29:34 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-202085.patch</filename>
            <type>text/plain</type>
            <size>42743</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwMTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBA
QAorMjAxOS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgSW50ZWdyaXR5IGF1ZGl0IGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gncyBtYWluIGdvYWwgaXMg
dG8gaW50cm9kdWNlIHRoZSBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zLiAgVGhleSBjYW4KKyAg
ICAgICAgYmUgdXNlZCB3aGVyZXZlciB3ZSB3YW50IHRvIGF1ZGl0IGEgY2VsbCB0byBlbnN1cmUg
aXQgaXMgbm90IGNvcnJ1cHRlZC4gIEhvd2V2ZXIsCisgICAgICAgIHRvIGtlZXAgdGhpcyBwYXRj
aCBzbWFsbCwgd2Ugd2lsbCBvbmx5IGludHJvZHVjZSB0aGUgYXVkaXQgdG9vbCBoZXJlIHdpdGgg
b25lCisgICAgICAgIGV4YW1wbGUgdXNlIGluIFNsb3RWaXNpdG9yLiAgV2UnbGwgZm9sbG93IHVw
IGxhdGVyIHdpdGggbW9yZSBwYXRjaGVzIHRvIGRlcGxveQorICAgICAgICB0aGlzIHRvb2wgdGhy
b3VnaG91dCB0aGUgVk0uCisKKyAgICAgICAgMS4gSW50cm9kdWNlZCBJbnRlZ3JpdHkgYXVkaXQg
ZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgc2V2ZXJhbAorICAgICAgICAgICBB
dWRpdExldmVsczoKKyAgICAgICAgICAgICAgIE5vbmUgLSBkb24ndCBkbyBhbnkgYXVkaXRzLgor
ICAgICAgICAgICAgICAgTWluaW1hbCAtIGRvIGEgbWluaW1hbCBxdWljayBhdWRpdCAobWluaW1p
emUgcGVyZiBpbXBhY3QpLgorICAgICAgICAgICAgICAgRnVsbCAtIGRvIGEgZnVsbCBhdWRpdCBv
ZiB0aGUgbWFueSBhc3BlY3RzIG9mIGEgY2VsbC4KKyAgICAgICAgICAgICAgIFJhbmRvbSAtIHJh
bmRvbWx5IGRvIGEgZnVsbCBhdWRpdCB3aXRoIGEgcHJvYmFiaWxpdHkgZGljdGF0ZWQgYnkKKyAg
ICAgICAgICAgICAgICAgICAgT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgYmV0
d2VlbiAwLjAgKG5ldmVyIGF1ZGl0KSBhbmQKKyAgICAgICAgICAgICAgICAgICAgMS4wIChhdWRp
dCBhdCBldmVyeSBjaGFuY2UpLgorCisgICAgICAgICAgIFRoZSBkZWZhdWx0IEF1ZGl0TGV2ZWwg
Zm9yIERlYnVnIGJ1aWxkcyBpcyBSYW5kb20uCisgICAgICAgICAgIFRoZSBkZWZhdWx0IEF1ZGl0
TGV2ZWwgZm9yIFJlbGVhc2UgYnVpbGRzIGlzIE5vbmUuCisgICAgICAgICAgIFRoZSBkZWZhdWx0
IE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIDAuMDUuCisKKyAgICAgICAg
ICAgVGhlIGZ1bGwgYXVkaXQgdXNlcyB0aGUgVk1JbnNwZWN0b3I6OnZlcmlmeUNlbGwoKSB0ZW1w
bGF0ZSBmdW5jdGlvbiB0byBkbyBpdHMKKyAgICAgICAgICAgam9iLiAgVGhlIHJlYXNvbiBmb3Ig
a2VlcGluZyB0aGlzIHNlcGFyYXRlIGlzIHRvIGFsbG93IHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbgor
ICAgICAgICAgICB0byBiZSB1c2VkIGxhdGVyIGZvciBkZWJ1ZyBjaGVja3MgdGhhdCB3YW50IHRv
IHRha2Ugc29tZSBjdXN0b20gYWN0aW9uIG9uCisgICAgICAgICAgIHZlcmlmaWNhdGlvbiBmYWls
dXJlIGluc3RlYWQgb2YgY3Jhc2hpbmcgd2l0aCBhIFJFTEVBU0VfQVNTRVJULgorCisgICAgICAg
ICAgIEhvdyByYW5kb20gYXVkaXRzIHdvcms/CisgICAgICAgICAgID09PT09PT09PT09PT09PT09
PT09PT0KKyAgICAgICAgICAgUmFuZG9tIGF1ZGl0cyBhcmUgdHJpZ2dlcmVkIGJ5IHRoZSBtX3Ry
aWdnZXJCaXRzIGJpdHMgaW4gVk06Om1faW50ZWdyaXR5UmFuZG9tLgorICAgICAgICAgICBtX3Ry
aWdnZXJCaXRzIGlzIGEgNjQtYml0IGJpdGZpZWxkLgorCisgICAgICAgICAgIElmIE9wdGlvbnM6
OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIDAsIG1fdHJpZ2dlckJpdHMgd2lsbCBhbHdh
eXMgYmUgMCwKKyAgICAgICAgICAgYW5kIG5vIGF1ZGl0cyB3aWxsIGJlIGRvbmUuCisKKyAgICAg
ICAgICAgSWYgT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgaXMgbm9uLXplcm8s
IG1fdHJpZ2dlckJpdHMgd2lsbCBiZQorICAgICAgICAgICBpbml0aWFsaXplZCBhcyBmb2xsb3dz
OgorCisgICAgICAgICAgICAgICAgfCAxIHJlbG9hZCBiaXQgfCAuLi4gNjMgdHJpZ2dlciBiaXRz
IC4uLiB8CisKKyAgICAgICAgICAgVGhlIHJlbG9hZCBiaXQgaXMgYWx3YXlzIHNldCAobW9yZSBk
ZXRhaWxzIGJlbG93KS4KKyAgICAgICAgICAgRWFjaCBvZiB0aGUgNjMgdHJpZ2dlciBiaXRzIGFy
ZSByYW5kb21seSBzZXQgZGVwZW5kaW5nIGlmIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZQorICAgICAg
ICAgICBmb3IgdGhlIGJpdDoKKworICAgICAgICAgICAgICAgIFZNOjpyYW5kb20oKSA8PSBPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSAqIFVJTlRfTUFYCisKKyAgICAgICAgICAg
V2hlbiBJbnRlZ3JpdHk6OmF1ZGl0Q2VsbCgpIGlzIGNhbGxlZCwgd2UgdGFrZSB0aGUgYm90dG9t
IGJpdCBhcyB0aGUgdHJpZ2dlcgorICAgICAgICAgICBiaXQgZm9yIHRoZSBjdXJyZW50IGNlbGws
IGFuZCBzaGlmdHMgdGhlIHJlc3QgZG93biBieSAxLgorCisgICAgICAgICAgIElmIG1fdHJpZ2dl
ckJpdHMgaXMgbm9uLW51bGwgYWZ0ZXIgdGhlIHNoaWZ0LCB0aGUgdGFrZW4gdHJpZ2dlciBiaXQg
d2lsbCBkaWN0YXRlCisgICAgICAgICAgIHdoZXRoZXIgd2UgZG8gYSBmdWxsIGF1ZGl0IG9uIHRo
ZSBjdXJyZW50IGNlbGwgb3Igbm90LgorCisgICAgICAgICAgIE9uY2UgdGhlIHJlbG9hZCBiaXQg
cmVhY2hlcyB0aGUgYm90dG9tLCB3ZSBjYWxsIGEgcmVsb2FkIGZ1bmN0aW9uIHRvCisgICAgICAg
ICAgIHJlLWluaXRpYWxpemUgbV90cmlnZ2VyQml0cy4gIFRoZSByZWxvYWQgZnVuY3Rpb24gYWxz
byByZXR1cm5zIGEgYm9vbAorICAgICAgICAgICBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdHJpZ2dl
ciBhIGZ1bGwgYXVkaXQgb2YgdGhlIGN1cnJlbnQgY2VsbC4KKworICAgICAgICAgICBXaXRoIHRo
aXMgc2NoZW1lLCB3ZSBvbmx5IG5lZWQgdG8gY2FsbCB0aGUgcmVsb2FkIGZ1bmN0aW9uIG9uY2Ug
ZXZlcnkgNjQgY2FsbHMKKyAgICAgICAgICAgdG8gSW50ZWdyaXR5OjphdWRpdENlbGwoKSwgYW5k
IGNhbiBlZmZpY2llbnRseSBkZXRlcm1pbmUgd2hldGhlciB0byB0cmlnZ2VyCisgICAgICAgICAg
IHRoZSBhdWRpdCB0aGUgb3RoZXIgNjMgdGltZXMgd2l0aCB0aGUgcHJvYmFiaWxpdHkgc3BlY2lm
aWVkIGluCisgICAgICAgICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpLgor
CisgICAgICAgIDIuIEVtYmVkZGVkIHRoZSBDKysgY2xhc3Mgc2l6ZSBvZiBKU0NlbGxzIGludG8g
dGhlaXIgQ2xhc3NJbmZvLiAgVGhpcyBpcyB1c2VkIGluCisgICAgICAgICAgIHRoZSBmdWxsIGF1
ZGl0cyB0byB2ZXJpZnkgY2VsbCBzaXplcy4KKworICAgICAgICAzLiBBZGRlZCBpc0R5bmFtaWNh
bGx5U2l6ZWRUeXBlKCkgdG8gY2hlY2sgaWYgYSBKU1R5cGUgaGFzIGEgZHluYW1pYyBzaXplIGFs
bG9jYXRpb24KKyAgICAgICAgICAgaS5lLiB0aGUgc2l6ZSBvZiBpbnN0YW5jZXMgb2YgdGhpcyB0
eXBlIGlzIG5vdCBkZXRlcm1pbmVkIGJ5IHRoZSBzdGF0aWMgQysrCisgICAgICAgICAgIHNpemUg
b2YgaXRzIGNsYXNzLCBidXQgcmF0aGVyLCBkZXBlbmRzIG9uIHNvbWUgcnVudGltZSB2YXJpYWJs
ZS4KKworICAgICAgICA0LiBNYWRlIHRoZSBWTUluc3BlY3RvciBhIGZyaWVuZCBvZiBzZXZlcmFs
IGNsYXNzZXMgc28gdGhhdCBpdCBjYW4gYWNjZXNzIHRoZWlyCisgICAgICAgICAgIHByaXZhdGUg
bWV0aG9kcyBhbmQgZmllbGRzLgorCisgICAgICAgIDUuIE1vdmVkIHRoZSBpbmxpbmUgZnVuY3Rp
b24gSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKCkgZnJvbSBCaWdJbnQuY3BwIHRvIGl0cworICAg
ICAgICAgICBoZWFkZXIgZmlsZSBzbyB0aGF0IHdlIGNhbiB1c2UgaXQgaW4gVk1JbnNwZWN0b3I6
OnZlcmlmeUNlbGxTaXplKCkuCisKKyAgICAgICAgNi4gR2F2ZSB0aGUgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QoKSBpdHMgb3duIEpTVHlwZSBzbyB0aGF0IHdlIGNhbiBpZGVudGlmeSBpdAorICAg
ICAgICAgICBhcyBhIGR5bmFtaWNhbGx5IHNpemVkIG9iamVjdC4KKworICAgICAgICA3LiBJbmNy
ZWFzZWQgdGhlIHJhbmRvbW5lc3Mgb2YgVk06OnJhbmRvbSgpICh3aGljaCBpcyBpbXBsZW1lbnRl
ZCB3aXRoIFdlYWtSYW5kb20pCisgICAgICAgICAgIGJ5IHJlLXNlZWRpbmcgaXQgd2l0aCBhIGNy
eXB0b2dyYXBoaWNhbGx5IHJhbmRvbSBudW1iZXIgZWFjaCBHQy4KKworICAgICAgICA4LiBDYWxs
ZWQgSW50ZWdyaXR5OjphdWRpdENlbGwoKSBvbiBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JB
dXhpbGlhcnkoKSdzIGNlbGwKKyAgICAgICAgICAgYXMgYW4gZXhhbXBsZSB1c2Ugb2YgYXVkaXRD
ZWxsKCkuICBNb3JlIHVzZXMgd2lsbCBiZSBhZGRlZCBpbiBsYXRlciBwYXRjaGVzIHRvCisgICAg
ICAgICAgIGZvbGxvdy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNl
cy50eHQ6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6cnVu
QmVnaW5QaGFzZSk6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgICogcnVu
dGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWxsb2NhdGlvblNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0pT
VHlwZS5oOgorICAgICAgICAoSlNDOjppc0R5bmFtaWNhbGx5U2l6ZWRUeXBlKToKKyAgICAgICAg
KiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRP
cHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpy
YW5kb20pOgorICAgICAgICAoSlNDOjpWTTo6aW50ZWdyaXR5UmFuZG9tKToKKyAgICAgICAgKiB0
b29scy9JbnRlZ3JpdHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5OjpSYW5k
b206OlJhbmRvbSk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpyZWxvYWRBbmRD
aGVja1Nob3VsZEF1ZGl0U2xvdyk6CisgICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRDZWxs
RnVsbHkpOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbE1pbmltYWxseVNsb3cp
OgorICAgICAgICAqIHRvb2xzL0ludGVncml0eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW50
ZWdyaXR5OjphdWRpdENlbGwpOgorICAgICAgICAqIHRvb2xzL0ludGVncml0eUlubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpzaG91bGRBdWRpdCk6Cisg
ICAgICAgIChKU0M6OkludGVncml0eTo6YXVkaXRDZWxsTWluaW1hbGx5KToKKyAgICAgICAgKEpT
Qzo6SW50ZWdyaXR5OjphdWRpdENlbGxSYW5kb21seSk6CisgICAgICAgICogdG9vbHMvVk1JbnNw
ZWN0b3IuaDoKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnVudXNlZFZlcmlmaWVyKToKKyAg
ICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnZlcmlmeUNlbGxTaXplKToKKyAgICAgICAgKiB0b29s
cy9WTUluc3BlY3RvcklubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9y
Ojp2ZXJpZnlDZWxsU2l6ZSk6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxs
KToKKwogMjAxOS0wOS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgTW92ZSBKU0xleGljYWxFbnZpcm9ubWVudCwgRGlyZWN0QXJndW1lbnRzLCBhbmQgU2NvcGVk
QXJndW1lbnRzIGNlbGxzIG91dCBvZiB0aGUgR2lnYWNhZ2UuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNiArMTAwMSwxMSBA
QCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBCiAgICAgcnVudGltZS9X
cml0ZUJhcnJpZXIuaAogICAgIHJ1bnRpbWUvV3JpdGVCYXJyaWVySW5saW5lcy5oCiAKKyAgICB0
b29scy9JbnRlZ3JpdHkuaAorICAgIHRvb2xzL0ludGVncml0eUlubGluZXMuaAorICAgIHRvb2xz
L1ZNSW5zcGVjdG9yLmgKKyAgICB0b29scy9WTUluc3BlY3RvcklubGluZXMuaAorCiAgICAgd2Fz
bS9XYXNtQ2FwYWJpbGl0aWVzLmgKICAgICB3YXNtL1dhc21Db2RlQmxvY2suaAogICAgIHdhc20v
V2FzbUNvbXBpbGF0aW9uTW9kZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShy
ZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLwogLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTk4OSw2ICs5ODksNyBAQCB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNw
cAogdG9vbHMvRnVuY3Rpb25PdmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5j
cHAKIHRvb2xzL0hlYXBWZXJpZmllci5jcHAKK3Rvb2xzL0ludGVncml0eS5jcHAKIHRvb2xzL0pT
RG9sbGFyVk0uY3BwCiB0b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAogdG9vbHMvVk1JbnNw
ZWN0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjUw
MTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE5MTEsNiArMTkxMSw5IEBACiAJCUZF
QTNCQkFDMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdDRkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTNCQkFCMjEyQzk3Q0IwMEU5M0FEMSAvKiBERkdD
RkcuaCAqLzsgfTsKIAkJRkVCNTFGNkMxQTk3QjY4ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDku
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUI1MUY2
QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSAqLzsgfTsKIAkJRkVCNThDMTUx
ODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNThDMTMxODdCOEIxNjAwOThFRjBCIC8q
IEVycm9ySGFuZGxpbmdTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUZFQzU3OTczMjMxMDVCNTEwMEJDQTgzRiAvKiBWTUluc3BlY3Rvcklu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
QzU3OTcyMjMxMDVCNDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLzsgfTsKKwkJ
RkVDNTc5NzYyMzEwNUY0RTAwQkNBODNGIC8qIEludGVncml0eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8q
IEludGVncml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUZFQzU3OTc4MjMxMDk1NEMwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUM1Nzk3NzIzMTA5
NTRCMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFQ0I4QjI3MUQyNUJCODUwMDZGMjQ2MyAvKiBG
dW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkVDQjhCMjUxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzVGVzdC5jcHAgKi87IH07CiAJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
Mjg3QjExNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0
IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTEzNSw2ICs1MTM4LDEwIEBA
CiAJCUZFQjUxRjZCMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVncmVzczE0MTgwOS5tbTsgcGF0aCA9
IEFQSS90ZXN0cy9SZWdyZXNzMTQxODA5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRUI1OEMxMjE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9ySGFuZGxpbmdTY29wZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFQjU4QzEzMTg3QjhCMTYwMDk4RUYwQiAv
KiBFcnJvckhhbmRsaW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXJyb3JIYW5kbGluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQzU3
OTcyMjMxMDVCNDgwMEJDQTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFQzU3OTc0MjMxMDVGNDIwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZWdyaXR5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIElu
dGVncml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlZ3JpdHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkVDNTc5NzcyMzEwOTU0QjAwQkNBODNGIC8q
IEludGVncml0eUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50
ZWdyaXR5SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUNCOEIyNTFE
MjVCQjZFMDA2RjI0NjMgLyogRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA7IHBhdGgg
PSBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVDQjhCMjYxRDI1QkI2RTAwNkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVz
VGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGdW5jdGlvbk92ZXJyaWRl
c1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDQjhCMjkxRDI1Q0FCQjAwNkYyNDYzIC8qIHRlc3Rh
cGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBuYW1lID0gInRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIjsgcGF0aCA9ICJBUEkvdGVz
dHMvdGVzdGFwaS1mdW5jdGlvbi1vdmVycmlkZXMuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzU4Myw2ICs3NTkwLDkgQEAKIAkJCQlGRUEwQzQwMTFDREQ3RDBFMDA0ODE5OTEg
LyogRnVuY3Rpb25XaGl0ZWxpc3QuaCAqLywKIAkJCQlGRTFCRDAyMjFFNzIwNTJGMDAxMzRCQzkg
LyogSGVhcFZlcmlmaWVyLmNwcCAqLywKIAkJCQlGRTFCRDAyMzFFNzIwNTJGMDAxMzRCQzkgLyog
SGVhcFZlcmlmaWVyLmggKi8sCisJCQkJRkVDNTc5NzQyMzEwNUY0MjAwQkNBODNGIC8qIEludGVn
cml0eS5jcHAgKi8sCisJCQkJRkVDNTc5NzUyMzEwNUY0MzAwQkNBODNGIC8qIEludGVncml0eS5o
ICovLAorCQkJCUZFQzU3OTc3MjMxMDk1NEIwMEJDQTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmgg
Ki8sCiAJCQkJRkUzODRFRTExQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uY3BwICovLAog
CQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggKi8sCiAJCQkJODZC
NTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovLApAQCAtNzU5MSw2
ICs3NjAxLDcgQEAKIAkJCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyogVGllcmVkTU1hcEFy
cmF5LmggKi8sCiAJCQkJRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNw
cCAqLywKIAkJCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLywK
KwkJCQlGRUM1Nzk3MjIzMTA1QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTg5OTksNiArOTAxMCw3IEBACiAJCQkJMEZFQzNDNjAxRjM3OUY1MzAwRjU5QjZDIC8qIENhZ2Vk
QmFycmllclB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYw
IC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQzU3OTc4MjMxMDk1NEMwMEJD
QTgzRiAvKiBJbnRlZ3JpdHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTZEQUEyQjFF
ODlDQ0Q2MDA1REYyNEEgLyogQ2FsbGVlQml0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4
REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVB
M0JCQTgyMTJCNjU1OTAwRTkzQUQxIC8qIENhbGxGcmFtZUlubGluZXMuaCBpbiBIZWFkZXJzICov
LApAQCAtOTQ5Miw2ICs5NTA0LDcgQEAKIAkJCQk3OTA1QkI2OTFEMTIwNTBFMDAxOUZFNTcgLyog
SW5saW5lQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhBN0JGMDFCODI5NzVBMDAyRDkx
NTcgLyogSW5saW5lQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1NjE3RjBC
NzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RUM1Nzk3NjIzMTA1RjRFMDBCQ0E4M0YgLyogSW50ZWdyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTg0MDMyMDE4QkZGQkUxMDA1QTA4MTEgLyogSW5zcGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1OTNDRjdGMTg0MDM2MkMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudEJhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0
b3JBZ2VudFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTk5MjQsNiArOTkzNyw3IEBACiAJ
CQkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxOTBDQUQxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVy
SmV0dGlzb25SZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJGMTY2QUQzNjAwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVDNTc5NzMyMzEw
NUI1MTAwQkNBODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QzAxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQjEwNThDMTY3NTQ4MzMwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNThFMTY3NTQ4M0EwMEY4QUI2RSAvKiBQcm9maWxl
ck9TUkV4aXRTaXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIldl
YWtNYXBJbXBsSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtTZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaD4KQEAgLTEyNjgsNiAr
MTI2OSw5IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkJlZ2luUGhhc2UoR0MKIAogICAg
IG1fYmVmb3JlR0MgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIAorICAgIC8vIFBpZ2d5IGJhY2sg
b24gdGhlIEdDIHRvIHJhbmRvbWl6ZSBhIGJpdC4KKyAgICB2bSgpLnJhbmRvbSgpLnNldFNlZWQo
Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSk7CisKICAgICBpZiAobV9jb2xsZWN0aW9u
U2NvcGUpIHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBk
dXJpbmcgR0M6ICIsICptX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJIZWFwQW5hbHl6ZXIuaCIKICNpbmNsdWRlICJIZWFwQ2VsbElubGluZXMuaCIK
ICNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKQEAgLTIyMSw2ICsyMjIsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgCiAgICAgICAgIEpTQ2VsbCoganNDZWxs
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcENlbGwpOwogICAgICAgICB2YWxpZGF0ZUNlbGwo
anNDZWxsKTsKKyAgICAgICAgSW50ZWdyaXR5OjphdWRpdENlbGwodm0oKSwganNDZWxsKTsKICAg
ICAgICAgCiAgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6UG9zc2libHlH
cmV5KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJ
KHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNz
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDggQEAgc3RydWN0IE1ldGhvZFRh
YmxlIHsKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSwgXAogICAgICAgICAmQ2xh
c3NOYW1lOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzLCBcCiAgICAgfSwgXAotICAgIENsYXNzTmFt
ZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCisgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFn
ZVR5cGUsIFwKKyAgICBzaXplb2YoQ2xhc3NOYW1lKQogCiBzdHJ1Y3QgQ2xhc3NJbmZvIHsKICAg
ICAvLyBBIHN0cmluZyBkZW5vdGluZyB0aGUgY2xhc3MgbmFtZS4gRXhhbXBsZTogIldpbmRvdyIu
CkBAIC0yMjEsNiArMjIyLDcgQEAgc3RydWN0IENsYXNzSW5mbyB7CiAgICAgTWV0aG9kVGFibGUg
bWV0aG9kVGFibGU7CiAKICAgICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5U3RvcmFnZVR5cGU7
CisgICAgdW5zaWduZWQgY3BwU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAg
ICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBk
ZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1
YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRo
aXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCiAgICAgdXNpbmcgTWFwcGVkQXJndW1lbnRz
ID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1hcHBl
ZEFyZ3VtZW50cyBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRo
YXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9w
ZXJ0aWVzLgorCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
Y3BwCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEyICs4Myw2IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHplcm9CaWdJbnQ7CiB9CiAK
LWlubGluZSBzaXplX3QgSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBzaXplX3Qgc2l6ZVdpdGhQYWRkaW5nID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihzaXplX3QpPihzaXplb2YoSlNCaWdJbnQpKTsKLSAgICByZXR1cm4gc2l6ZVdpdGhQ
YWRkaW5nICsgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KTsKLX0KLQogSlNCaWdJbnQqIEpTQmlnSW50
Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpT
QmlnSW50KiB4KTsKIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQg
bGVuZ3RoKTsKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+
KHNpemVvZihKU0JpZ0ludCkpOwpAQCAtMjQ5LDggKzI0OSwxNiBAQCBwcml2YXRlOgogCiAgICAg
Y29uc3QgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3NpZ24geyBmYWxzZSB9OworCisg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAoraW5saW5lIHNpemVfdCBKU0JpZ0lu
dDo6YWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCBzaXplV2l0
aFBhZGRpbmcgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHNpemVfdCk+KHNpemVv
ZihKU0JpZ0ludCkpOworICAgIHJldHVybiBzaXplV2l0aFBhZGRpbmcgKyBsZW5ndGggKiBzaXpl
b2YoRGlnaXQpOworfQorCiBpbmxpbmUgSlNCaWdJbnQqIGFzQmlnSW50KEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHZhbHVlLmFzQ2VsbCgpLT5pc0JpZ0ludCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAkocmV2aXNpb24gMjUwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQoKSB7IHJldHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQpAQCAtMTAzLDYgKzEwMyw4IEBA
IHByaXZhdGU6CiAgICAgRXhwb3J0TWFwIG1fZXhwb3J0czsKICAgICBWZWN0b3I8SWRlbnRpZmll
cj4gbV9uYW1lczsKICAgICBXcml0ZUJhcnJpZXI8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+IG1fbW9k
dWxlUmVjb3JkOworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5j
cHAJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNiArOTQsNyBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgQ0FTRShNb2R1bGVFbnZpcm9ubWVudFR5cGUpCiAg
ICAgQ0FTRShTdHJpY3RFdmFsQWN0aXZhdGlvblR5cGUpCiAgICAgQ0FTRShXaXRoU2NvcGVUeXBl
KQorICAgIENBU0UoTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSkKICAgICBDQVNFKFJlZ0V4cE9i
amVjdFR5cGUpCiAgICAgQ0FTRShQcm94eU9iamVjdFR5cGUpCiAgICAgQ0FTRShKU0dlbmVyYXRv
clR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMjUwMTg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA2LDYgKzEwNiw3IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgV2l0
aFNjb3BlVHlwZSwKICAgICAvLyBFbmQgSlNTY29wZSB0eXBlcy4KIAorICAgIE1vZHVsZU5hbWVz
cGFjZU9iamVjdFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5
cGUsCiAgICAgSlNHZW5lcmF0b3JUeXBlLApAQCAtMTM5LDYgKzE0MCwxOCBAQCBpbmxpbmUgY29u
c3RleHByIGJvb2wgaXNUeXBlZEFycmF5VHlwZShKCiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHlwZSkgLSBGaXJzdFR5cGVkQXJyYXlUeXBlKSA8IE51bWJlck9mVHlwZWRBcnJh
eVR5cGVzRXhjbHVkaW5nRGF0YVZpZXc7CiB9CiAKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc0R5
bmFtaWNhbGx5U2l6ZWRUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEJpZ0lu
dFR5cGUKKyAgICAgICAgfHwgdHlwZSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlCisgICAgICAgIHx8
IHR5cGUgPT0gRmluYWxPYmplY3RUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gTGV4aWNhbEVudmly
b25tZW50VHlwZQorICAgICAgICB8fCB0eXBlID09IE1vZHVsZUVudmlyb25tZW50VHlwZQorICAg
ICAgICB8fCB0eXBlID09IE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5cGUpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDExIEBAIHN0YXRpYyB2
b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
KworICAgIGlmIChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA8IDApCisgICAg
ICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpID0gMDsKKyAgICBlbHNlIGlm
IChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA+IDEuMCkKKyAgICAgICAgT3B0
aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgPSAxLjA7CiB9CiAKIHZvaWQgT3B0aW9u
czo6aW5pdGlhbGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBcCiAgICAgdihCb29sLCBhbHdheXNHZW5lcmF0ZVBDVG9Db2Rl
T3JpZ2luTWFwLCBmYWxzZSwgTm9ybWFsLCAiVGhpcyB3aWxsIG1ha2Ugc3VyZSB3ZSBhbHdheXMg
Z2VuZXJhdGUgYSBQQ1RvQ29kZU9yaWdpbk1hcCBmb3IgSklUZWQgY29kZS4iKSBcCiAgICAgXAor
ICAgIHYoRG91YmxlLCByYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUsIDAuMDUsIE5vcm1hbCwgIlBy
b2JhYmlsaXR5IG9mIHJhbmRvbSBpbnRlZ3JpdHkgYXVkaXRzICgwLjAgLSAxLjApIikgXAogICAg
IHYoQm9vbCwgdmVyaWZ5SGVhcCwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5z
aWduZWQsIG51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbiwgMywgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgJKHJldmlzaW9uIDI1MDE4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODYsNiArNzg2LDggQEAgcHJp
dmF0ZToKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKIAogICAgIHVpbnQzMl90IG1fcHJv
cGVydHlIYXNoOworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwgbV9ydW5Mb29wKENGUnVuTG9vcEdl
dEN1cnJlbnQoKSkKICNlbmRpZiAvLyBVU0UoQ0YpCisgICAgLCBtX2ludGVncml0eVJhbmRvbSgq
dGhpcykKICAgICAsIGhlYXAoKnRoaXMsIGhlYXBUeXBlKQogICAgICwgZmFzdE1hbGxvY0FsbG9j
YXRvcihtYWtlVW5pcXVlPEZhc3RNYWxsb2NBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPigpKQogICAg
ICwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IobWFrZVVuaXF1ZTxHaWdhY2FnZUFsaWduZWRN
ZW1vcnlBbGxvY2F0b3I+KEdpZ2FjYWdlOjpQcmltaXRpdmUpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiRnV6emVyQWdlbnQuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCiAjaW5jbHVkZSAiSW50
cmluc2ljLmgiCiAjaW5jbHVkZSAiSXNvQ2VsbFNldC5oIgogI2luY2x1ZGUgIklzb1N1YnNwYWNl
LmgiCkBAIC0zMTAsNiArMzExLDkgQEAgcHVibGljOgogICAgIC8vIEdsb2JhbCBvYmplY3QgaW4g
d2hpY2ggZXhlY3V0aW9uIGJlZ2FuLgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTR2xvYmFsT2Jq
ZWN0KiB2bUVudHJ5R2xvYmFsT2JqZWN0KGNvbnN0IENhbGxGcmFtZSopIGNvbnN0OwogCisgICAg
V2Vha1JhbmRvbSYgcmFuZG9tKCkgeyByZXR1cm4gbV9yYW5kb207IH0KKyAgICBJbnRlZ3JpdHk6
OlJhbmRvbSYgaW50ZWdyaXR5UmFuZG9tKCkgeyByZXR1cm4gbV9pbnRlZ3JpdHlSYW5kb207IH0K
KwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBuZXh0SUQoKTsKIApAQCAtMzIyLDYgKzMyNiw5IEBA
IHByaXZhdGU6CiAgICAgUmV0YWluUHRyPENGUnVuTG9vcFJlZj4gbV9ydW5Mb29wOwogI2VuZGlm
CiAKKyAgICBXZWFrUmFuZG9tIG1fcmFuZG9tOworICAgIEludGVncml0eTo6UmFuZG9tIG1faW50
ZWdyaXR5UmFuZG9tOworCiBwdWJsaWM6CiAgICAgSGVhcCBoZWFwOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlZ3JpdHlJbmxpbmVzLmgi
CisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3JJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEludGVncml0eSB7CisKK25hbWVzcGFjZSB7
Citjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CisKK1JhbmRvbTo6UmFuZG9tKFZN
JiB2bSkKK3sKKyAgICByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyh2bSk7IC8vIFRoaXMg
d2lsbCBpbml0aWFsaXplIHRoZSBhdWRpdCB0cmlnZ2VyIGJpdHMuCit9CisKK2Jvb2wgUmFuZG9t
OjpyZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyhWTSYgdm0pCit7CisgICAgaWYgKCFPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSkgeworICAgICAgICBtX3RyaWdnZXJCaXRz
ID0gMDsgLy8gTmV2ZXIgdHJpZ2dlciwgYW5kIGRvbid0IGJvdGhlciByZWxvYWRpbmcuCisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaXNhYmxlZCBJbnRlZ3Jp
dHkgYXVkaXRzOiB0cmlnZ2VyIGJpdHMgIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0PHZv
aWQqPihtX3RyaWdnZXJCaXRzKSkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gUmVsb2FkIHRoZSB0cmlnZ2VyIGJpdHMuCisgICAgbV90cmlnZ2VyQml0cyA9IDF1bGwg
PDwgNjM7IC8vIFNldCB0aGUgdGVybWluYXRvciBiaXQgKGkuZS4gIm5lZWQgcmVsb2FkIikgaW4g
dGhlIGhpZ2ggYml0LgorCisgICAgdWludDMyX3QgdGhyZXNob2xkID0gVUlOVF9NQVggKiBPcHRp
b25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bWJlck9mVHJpZ2dlckJpdHM7ICsraSkgeworICAgICAgICBib29sIHRyaWdnZXIgPSAodm0u
cmFuZG9tKCkuZ2V0VWludDMyKCkgPD0gdGhyZXNob2xkKTsKKyAgICAgICAgbV90cmlnZ2VyQml0
cyA9IG1fdHJpZ2dlckJpdHMgfCAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRyaWdnZXIpIDw8IGkp
OworICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0xuKCJyZWxvYWRlZCBJ
bnRlZ3JpdHkgdHJpZ2dlciBiaXRzICIsIFJhd1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obV90cmlnZ2VyQml0cykpKTsKKyAgICBBU1NFUlQobV90cmlnZ2VyQml0cyA+PSAoMXVsbCA8
PCA2MykpOworICAgIHJldHVybiB2bS5yYW5kb20oKS5nZXRVaW50MzIoKSA8PSB0aHJlc2hvbGQ7
Cit9CisKK3ZvaWQgYXVkaXRDZWxsRnVsbHkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAg
Vk1JbnNwZWN0b3I6OnZlcmlmeUNlbGw8Vk1JbnNwZWN0b3I6OlJlbGVhc2VBc3NlcnQ+KHZtLCBj
ZWxsKTsKK30KKwordm9pZCBhdWRpdENlbGxNaW5pbWFsbHlTbG93KFZNJiwgSlNDZWxsKiBjZWxs
KQoreworICAgIGlmIChHaWdhY2FnZTo6Y29udGFpbnMoY2VsbCkpIHsKKyAgICAgICAgaWYgKGNl
bGwtPnR5cGUoKSAhPSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQmFkIGNlbGwgIiwgUmF3UG9p
bnRlcihjZWxsKSwgIiAiLCBKU1ZhbHVlKGNlbGwpKTsKKyAgICAgICAgICAgIENSQVNIKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEludGVncml0eQorfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eS5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9HaWdhY2FnZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNDZWxsOworY2xhc3MgVk07CisKK25hbWVzcGFjZSBJbnRlZ3JpdHkgeworCitlbnVtIGNs
YXNzIEF1ZGl0TGV2ZWwgeworICAgIE5vbmUsCisgICAgTWluaW1hbCwKKyAgICBGdWxsLAorICAg
IFJhbmRvbSwKK307CisKKyNpZmRlZiBOREVCVUcKK3N0YXRpYyBjb25zdGV4cHIgQXVkaXRMZXZl
bCBEZWZhdWx0QXVkaXRMZXZlbCA9IEF1ZGl0TGV2ZWw6Ok5vbmU7CisjZWxzZQorc3RhdGljIGNv
bnN0ZXhwciBBdWRpdExldmVsIERlZmF1bHRBdWRpdExldmVsID0gQXVkaXRMZXZlbDo6UmFuZG9t
OworI2VuZGlmCisKK2NsYXNzIFJhbmRvbSB7CitwdWJsaWM6CisgICAgUmFuZG9tKFZNJik7CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkQXVkaXQoVk0mKTsKKworcHJpdmF0ZToKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbG9hZEFuZENoZWNrU2hvdWxkQXVkaXRTbG93KFZN
Jik7CisKKyAgICB1aW50NjRfdCBtX3RyaWdnZXJCaXRzOworCisgICAgLy8gVGhlIHRvcCBiaXQg
aXMgcmVzZXJ2ZWQgYXMgYSB0ZXJtaW5hdGlvbiBiaXQuIEhlbmNlLCB0aGUgbnVtYmVyIG9mCisg
ICAgLy8gdHJpZ2dlciBiaXRzIGlzIGFsd2F5cyAxIGxlc3MgdGhhbiB3aWxsIGZpdCBpbiBtX3Ry
aWdnZXJCaXRzLgorICAgIHN0YXRpYyBjb25zdGV4cHIgaW50IG51bWJlck9mVHJpZ2dlckJpdHMg
PSAoc2l6ZW9mKG1fdHJpZ2dlckJpdHMpICogQ0hBUl9CSVQpIC0gMTsKK307CisKK0FMV0FZU19J
TkxJTkUgdm9pZCBhdWRpdENlbGxSYW5kb21seShWTSYsIEpTQ2VsbCopOworQUxXQVlTX0lOTElO
RSB2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseShWTSYsIEpTQ2VsbCopOworSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhdWRpdENlbGxNaW5pbWFsbHlTbG93KFZNJiwgSlNDZWxsKik7CitKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGF1ZGl0Q2VsbEZ1bGx5KFZNJiwgSlNDZWxsKik7CisKK3RlbXBsYXRlPEF1
ZGl0TGV2ZWwgPSBBdWRpdExldmVsOjpSYW5kb20sIHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IHZvaWQgYXVkaXRDZWxsKFZNJiwgVCkgeyB9CisKK3RlbXBsYXRlPEF1ZGl0TGV2ZWwgYXVkaXRM
ZXZlbCA9IERlZmF1bHRBdWRpdExldmVsPgorQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbChW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExldmVs
OjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExl
dmVsOjpNaW5pbWFsKQorICAgICAgICBhdWRpdENlbGxNaW5pbWFsbHkodm0sIGNlbGwpOworICAg
IGVsc2UgaWYgKGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZlbDo6RnVsbCkKKyAgICAgICAgYXVkaXRD
ZWxsRnVsbHkodm0sIGNlbGwpOworICAgIGVsc2UgaWYgKGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZl
bDo6UmFuZG9tKQorICAgICAgICBhdWRpdENlbGxSYW5kb21seSh2bSwgY2VsbCk7Cit9CisKK3Rl
bXBsYXRlPEF1ZGl0TGV2ZWwgYXVkaXRMZXZlbCA9IERlZmF1bHRBdWRpdExldmVsPgorQUxXQVlT
X0lOTElORSB2b2lkIGF1ZGl0Q2VsbChWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KGF1ZGl0TGV2ZWwgPT0gQXVkaXRMZXZlbDo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBhdWRpdENlbGw8YXVkaXRMZXZlbD4odm0sIHZh
bHVlLmFzQ2VsbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW50ZWdyaXR5CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdy
aXR5SW5saW5lcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9JbnRlZ3JpdHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW50ZWdyaXR5LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CituYW1lc3BhY2UgSW50ZWdyaXR5IHsKKworQUxXQVlTX0lOTElORSBib29sIFJhbmRvbTo6
c2hvdWxkQXVkaXQoVk0mIHZtKQoreworICAgIGJvb2wgc2hvdWxkQXVkaXQgPSBtX3RyaWdnZXJC
aXRzICYgMTsKKyAgICBtX3RyaWdnZXJCaXRzID0gbV90cmlnZ2VyQml0cyA+PiAxOworICAgIGlm
IChMSUtFTFkoIXNob3VsZEF1ZGl0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
SWYgYXVkaXRpbmcgaXMgZW5hYmxlZCwgdGhlbiB0aGUgdG9wIGJpdCBvZiBtX3RyaWdnZXJCaXRz
IGlzIGFsd2F5cyBzZXQKKyAgICAvLyB0byAxIG9uIHJlbG9hZC4gV2hlbiB0aGlzIHRvcCBiaXQg
cmVhY2hlcyB0aGUgYm90dG9tLCBpdCBkb2VzIG5vdAorICAgIC8vIGluZGljYXRlIHRoYXQgd2Ug
c2hvdWxkIHRyaWdnZXIgYW4gYXVkaXQgYnV0IHJhdGhlciB0aGF0IHdlJ3ZlIHNoaWZ0ZWQKKyAg
ICAvLyBvdXQgYWxsIHRoZSBhdmFpbGFibGUgdHJpZ2dlciBiaXRzIGFuZCBoZW5jZSwgbmVlZCB0
byByZWxvYWQuIEluc3RlYWQsCisgICAgLy8gcmVsb2FkQW5kQ2hlY2tTaG91bGRBdWRpdFNsb3co
KSB3aWxsIHJldHVybiB3aGV0aGVyIHdlIGFjdHVhbGx5IG5lZWQgdG8KKyAgICAvLyB0cmlnZ2Vy
IGFuIGF1ZGl0IHRoaXMgdHVybi4KKyAgICBpZiAoIW1fdHJpZ2dlckJpdHMpCisgICAgICAgIHJl
dHVybiByZWxvYWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyh2bSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGxNaW5pbWFsbHkoVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCit7CisgICAgaWYgKFVOTElLRUxZKEdpZ2FjYWdlOjpjb250YWlucyhjZWxsKSkp
CisgICAgICAgIGF1ZGl0Q2VsbE1pbmltYWxseVNsb3codm0sIGNlbGwpOworfQorCitBTFdBWVNf
SU5MSU5FIHZvaWQgYXVkaXRDZWxsUmFuZG9tbHkoVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZtLmludGVncml0eVJhbmRvbSgpLnNob3VsZEF1ZGl0KHZtKSkpCisg
ICAgICAgIGF1ZGl0Q2VsbEZ1bGx5KHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW50
ZWdyaXR5Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5oCShyZXZpc2lvbiAyNTAxODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsMTcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBDZWxsTWVt
b3J5VG9TdHJlYW0oSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCBkdW1wU3Vic3BhY2VIYXNoZXMoVk0qKTsKIAorICAgIGVudW0gVmVyaWZp
ZXJBY3Rpb24geyBSZWxlYXNlQXNzZXJ0LCBDdXN0b20gfTsKKworICAgIHVzaW5nIFZlcmlmeUZ1
bmN0b3IgPSBib29sKGJvb2wgY29uZGl0aW9uLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgLi4u
KTsKKyAgICBzdGF0aWMgYm9vbCB1bnVzZWRWZXJpZmllcihib29sLCBjb25zdCBjaGFyKiwgLi4u
KSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdGVtcGxhdGU8VmVyaWZpZXJBY3Rpb24sIFZlcmlm
eUZ1bmN0b3IgPSB1bnVzZWRWZXJpZmllcj4KKyAgICBzdGF0aWMgYm9vbCB2ZXJpZnlDZWxsU2l6
ZShWTSYsIEpTQ2VsbCosIE9wdGlvbmFsPHNpemVfdD4gYWxsb2NhdG9yQ2VsbFNpemUgPSB7IH0p
OworCisgICAgdGVtcGxhdGU8VmVyaWZpZXJBY3Rpb24sIFZlcmlmeUZ1bmN0b3IgPSB1bnVzZWRW
ZXJpZmllcj4KKyAgICBzdGF0aWMgYm9vbCB2ZXJpZnlDZWxsKFZNJiwgSlNDZWxsKik7CisKIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJKU0JpZ0ludC5oIgorI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisj
aW5jbHVkZSAiSlNNb2R1bGVFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI3VuZGVmIEFVRElUX0NPTkRJVElPTgor
I3VuZGVmIEFVRElUX1ZFUklGWQorCisjZGVmaW5lIEFVRElUX0NPTkRJVElPTih4KSAoeCksICN4
CisjZGVmaW5lIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBjb25kLCAuLi4pIGRvIHsg
XAorICAgICAgICBpZiAoYWN0aW9uID09IFZlcmlmaWVyQWN0aW9uOjpSZWxlYXNlQXNzZXJ0KSBc
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kLCBfX1ZBX0FSR1NfXyk7IFwKKyAgICAg
ICAgZWxzZSBpZiAoIXZlcmlmaWVyKEFVRElUX0NPTkRJVElPTihjb25kKSwgX19WQV9BUkdTX18p
KSBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
dGVtcGxhdGU8Vk1JbnNwZWN0b3I6OlZlcmlmaWVyQWN0aW9uIGFjdGlvbiwgVk1JbnNwZWN0b3I6
OlZlcmlmeUZ1bmN0b3IgdmVyaWZpZXI+Citib29sIFZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsU2l6
ZShWTSYgdm0sIEpTQ2VsbCogY2VsbCwgT3B0aW9uYWw8c2l6ZV90PiBvcHRpb25hbEFsbG9jYXRv
ckNlbGxTaXplKQoreworICAgIHNpemVfdCBhbGxvY2F0b3JDZWxsU2l6ZSA9IG9wdGlvbmFsQWxs
b2NhdG9yQ2VsbFNpemUgPyAqb3B0aW9uYWxBbGxvY2F0b3JDZWxsU2l6ZSA6IGNlbGwtPmNlbGxT
aXplKCk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7
CisgICAgSlNUeXBlIGNlbGxUeXBlID0gY2VsbC0+dHlwZSgpOworICAgIEFVRElUX1ZFUklGWShh
Y3Rpb24sIHZlcmlmaWVyLCBjZWxsVHlwZSA9PSBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCksIGNl
bGwsIGNlbGxUeXBlLCBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCkpOworCisgICAgaWYgKGlzRHlu
YW1pY2FsbHlTaXplZFR5cGUoY2VsbFR5cGUpKSB7CisgICAgICAgIHNpemVfdCBjZWxsU2l6ZSA9
IDA7CisgICAgICAgIHN3aXRjaCAoY2VsbFR5cGUpIHsKKyAgICAgICAgY2FzZSBCaWdJbnRUeXBl
OiB7CisgICAgICAgICAgICBhdXRvKiBiaWdJbnQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxsKTsK
KyAgICAgICAgICAgIGNlbGxTaXplID0gSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKGJpZ0ludC0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBE
aXJlY3RBcmd1bWVudHNUeXBlOiB7CisgICAgICAgICAgICBhdXRvKiBhcmdzID0ganNDYXN0PERp
cmVjdEFyZ3VtZW50cyo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBEaXJlY3RBcmd1
bWVudHM6OmFsbG9jYXRpb25TaXplKGFyZ3MtPm1fbWluQ2FwYWNpdHkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6CisgICAgICAg
ICAgICBjZWxsU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMZXhp
Y2FsRW52aXJvbm1lbnRUeXBlOiB7CisgICAgICAgICAgICBhdXRvKiBlbnYgPSBqc0Nhc3Q8SlNM
ZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNMZXhp
Y2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKGVudi0+c3ltYm9sVGFibGUoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1vZHVsZUVudmlyb25tZW50
VHlwZTogeworICAgICAgICAgICAgYXV0byogZW52ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1l
bnQqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNNb2R1bGVFbnZpcm9ubWVudDo6
YWxsb2NhdGlvblNpemUoZW52LT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZTogeworICAg
ICAgICAgICAgYXV0byogb2JqID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4oY2Vs
bCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjphbGxv
Y2F0aW9uU2l6ZShvYmotPm1fbmFtZXMuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2
ZXJpZmllciwgY2VsbFNpemUgPD0gYWxsb2NhdG9yQ2VsbFNpemUsIGNlbGwsIGNlbGxUeXBlLCBj
ZWxsU2l6ZSwgYWxsb2NhdG9yQ2VsbFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAg
QVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGNsYXNzSW5mby0+Y3BwU2l6ZSA8PSBhbGxv
Y2F0b3JDZWxsU2l6ZSwgY2VsbCwgY2VsbFR5cGUsIGNsYXNzSW5mby0+Y3BwU2l6ZSwgYWxsb2Nh
dG9yQ2VsbFNpemUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8Vk1J
bnNwZWN0b3I6OlZlcmlmaWVyQWN0aW9uIGFjdGlvbiwgVk1JbnNwZWN0b3I6OlZlcmlmeUZ1bmN0
b3IgdmVyaWZpZXI+Citib29sIFZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsKFZNJiB2bSwgSlNDZWxs
KiBjZWxsKQoreworICAgIHNpemVfdCBhbGxvY2F0b3JDZWxsU2l6ZSA9IDA7CisgICAgaWYgKGNl
bGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpIHsKKyAgICAgICAgTGFyZ2VBbGxvY2F0aW9uJiBsYXJn
ZUFsbG9jYXRpb24gPSBjZWxsLT5sYXJnZUFsbG9jYXRpb24oKTsKKyAgICAgICAgQVVESVRfVkVS
SUZZKGFjdGlvbiwgdmVyaWZpZXIsICZsYXJnZUFsbG9jYXRpb24udm0oKSA9PSAmdm0sIGNlbGws
IGNlbGwtPnR5cGUoKSwgJmxhcmdlQWxsb2NhdGlvbi52bSgpLCAmdm0pOworCisgICAgICAgIGJv
b2wgaXNWYWxpZExhcmdlQWxsb2NhdGlvbiA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8qIGkg
OiB2bS5oZWFwLm9iamVjdFNwYWNlKCkubGFyZ2VBbGxvY2F0aW9ucygpKSB7CisgICAgICAgICAg
ICBpZiAoaSA9PSAmbGFyZ2VBbGxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgaXNWYWxpZExh
cmdlQWxsb2NhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGlz
VmFsaWRMYXJnZUFsbG9jYXRpb24sIGNlbGwsIGNlbGwtPnR5cGUoKSk7CisKKyAgICAgICAgYWxs
b2NhdG9yQ2VsbFNpemUgPSBsYXJnZUFsbG9jYXRpb24uY2VsbFNpemUoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAg
ICAgICBNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9ja0hhbmRsZSA9IGJsb2NrLmhhbmRsZSgpOwor
ICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgJmJsb2NrLnZtKCkgPT0gJnZt
LCBjZWxsLCBjZWxsLT50eXBlKCksICZibG9jay52bSgpLCAmdm0pOworCisgICAgICAgIHVpbnRw
dHJfdCBibG9ja1N0YXJ0QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihibG9j
a0hhbmRsZS5zdGFydCgpKTsKKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIs
IGJsb2NrSGFuZGxlLmNvbnRhaW5zKGNlbGwpLCBjZWxsLCBjZWxsLT50eXBlKCksIGJsb2NrU3Rh
cnRBZGRyZXNzLCBibG9ja0hhbmRsZS5lbmQoKSk7CisKKyAgICAgICAgdWludHB0cl90IGNlbGxB
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNlbGwpOworICAgICAgICB1aW50
cHRyX3QgY2VsbE9mZnNldCA9IGNlbGxBZGRyZXNzIC0gYmxvY2tTdGFydEFkZHJlc3M7CisgICAg
ICAgIGFsbG9jYXRvckNlbGxTaXplID0gYmxvY2suY2VsbFNpemUoKTsKKyAgICAgICAgYm9vbCBj
ZWxsSXNQcm9wZXJseUFsaWduZWQgPSAhKGNlbGxPZmZzZXQgJSBhbGxvY2F0b3JDZWxsU2l6ZSk7
CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCBjZWxsSXNQcm9wZXJseUFs
aWduZWQsIGNlbGwsIGNlbGwtPnR5cGUoKSwgYWxsb2NhdG9yQ2VsbFNpemUpOworICAgIH0KKwor
ICAgIGF1dG8gY2VsbFR5cGUgPSBjZWxsLT50eXBlKCk7CisgICAgaWYgKGNlbGwtPnR5cGUoKSAh
PSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpCisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24s
IHZlcmlmaWVyLCAhR2lnYWNhZ2U6OmNvbnRhaW5zKGNlbGwpLCBjZWxsLCBjZWxsVHlwZSk7CisK
KyAgICBpZiAoIXZlcmlmeUNlbGxTaXplPGFjdGlvbiwgdmVyaWZpZXI+KHZtLCBjZWxsLCBhbGxv
Y2F0b3JDZWxsU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChHaWdhY2Fn
ZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpKU1ZhbHVlKSAmJiBjZWxsLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChjZWxsKTsKKyAgICAgICAgY29uc3Qg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICBBVURJ
VF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgIWJ1dHRlcmZseSB8fCBHaWdhY2FnZTo6aXNDYWdl
ZChHaWdhY2FnZTo6SlNWYWx1ZSwgYnV0dGVyZmx5KSwgY2VsbCwgY2VsbC0+dHlwZSgpLCBidXR0
ZXJmbHkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisjdW5kZWYgQVVESVRfVkVS
SUZZCisjdW5kZWYgQVVESVRfQ09ORElUSU9OCisKK30gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379412</attachid>
            <date>2019-09-23 17:29:34 -0700</date>
            <delta_ts>2019-09-23 21:53:48 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-202085.patch</filename>
            <type>text/plain</type>
            <size>44195</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxOS0wOS0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgSW50ZWdyaXR5IGF1ZGl0IGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gncyBtYWluIGdvYWwgaXMg
dG8gaW50cm9kdWNlIHRoZSBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zLiAgVGhleSBjYW4KKyAg
ICAgICAgYmUgdXNlZCB3aGVyZXZlciB3ZSB3YW50IHRvIGF1ZGl0IGEgY2VsbCB0byBwcm9iYWJp
bGlzdGljYWxseSBlbnN1cmUgaXQgaXMgbm90CisgICAgICAgIGNvcnJ1cHRlZC4gIEhvd2V2ZXIs
IHRvIGtlZXAgdGhpcyBwYXRjaCBzbWFsbCwgd2Ugd2lsbCBvbmx5IGludHJvZHVjZSB0aGUgYXVk
aXQKKyAgICAgICAgdG9vbCBoZXJlIHdpdGggb25lIGV4YW1wbGUgdXNlIGluIFNsb3RWaXNpdG9y
LiAgV2UnbGwgZm9sbG93IHVwIGxhdGVyIHdpdGggbW9yZQorICAgICAgICBwYXRjaGVzIHRvIGRl
cGxveSB0aGlzIHRvb2wgdGhyb3VnaG91dCB0aGUgVk0uCisKKyAgICAgICAgMS4gSW50cm9kdWNl
ZCBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgc2V2
ZXJhbAorICAgICAgICAgICBBdWRpdExldmVsczoKKyAgICAgICAgICAgICAgIE5vbmUgLSBkb24n
dCBkbyBhbnkgYXVkaXRzLgorICAgICAgICAgICAgICAgTWluaW1hbCAtIGRvIGEgbWluaW1hbCBx
dWljayBhdWRpdCAobWluaW1pemUgcGVyZiBpbXBhY3QpLgorICAgICAgICAgICAgICAgRnVsbCAt
IGRvIGEgZnVsbCBhdWRpdCBvZiB0aGUgbWFueSBhc3BlY3RzIG9mIGEgY2VsbC4KKyAgICAgICAg
ICAgICAgIFJhbmRvbSAtIHJhbmRvbWx5IGRvIGEgZnVsbCBhdWRpdCB3aXRoIGEgcHJvYmFiaWxp
dHkgZGljdGF0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uczo6cmFuZG9tSW50ZWdy
aXR5QXVkaXRSYXRlKCkgYmV0d2VlbiAwLjAgKG5ldmVyIGF1ZGl0KSBhbmQKKyAgICAgICAgICAg
ICAgICAgICAgMS4wIChhdWRpdCBhdCBldmVyeSBjaGFuY2UpLgorCisgICAgICAgICAgIFRoZSBk
ZWZhdWx0IEF1ZGl0TGV2ZWwgZm9yIERlYnVnIGJ1aWxkcyBpcyBSYW5kb20uCisgICAgICAgICAg
IFRoZSBkZWZhdWx0IEF1ZGl0TGV2ZWwgZm9yIFJlbGVhc2UgYnVpbGRzIGlzIE5vbmUuCisgICAg
ICAgICAgIFRoZSBkZWZhdWx0IE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlz
IDAuMDUuCisKKyAgICAgICAgICAgSG93IGZ1bGwgYXVkaXRzIHdvcms/CisgICAgICAgICAgID09
PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgIFRoZSBmdWxsIGF1ZGl0IHVzZXMgdGhlIFZN
SW5zcGVjdG9yOjp2ZXJpZnlDZWxsKCkgdGVtcGxhdGUgZnVuY3Rpb24gdG8gZG8gaXRzCisgICAg
ICAgICAgIGpvYi4gIFRoZSByZWFzb24gZm9yIGtlZXBpbmcgdGhpcyBzZXBhcmF0ZSBpcyB0byBh
bGxvdyB0aGUgdGVtcGxhdGUgZnVuY3Rpb24KKyAgICAgICAgICAgdG8gYmUgdXNlZCBsYXRlciBm
b3IgZGVidWcgY2hlY2tzIHRoYXQgd2FudCB0byB0YWtlIHNvbWUgY3VzdG9tIGFjdGlvbiBvbgor
ICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHVyZSBpbnN0ZWFkIG9mIGNyYXNoaW5nIHdpdGgg
YSBSRUxFQVNFX0FTU0VSVC4KKworICAgICAgICAgICBGdWxsIGF1ZGl0IG9mIGEgY2VsbCBwb2lu
dGVyIGluY2x1ZGVzOgorICAgICAgICAgICBhLiBWZXJpZnkgdGhhdCBhIGNlbGwgZGVzaWduYXRl
ZCBhcyBhIExhcmdlQWxsb2NhdGlvbiBpcyBpbiB0aGUgaGVhcCdzCisgICAgICAgICAgICAgIHNl
dCBvZiBMYXJnZUFsbG9jYXRpb25zLgorCisgICAgICAgICAgIGIuIFZlcmlmeSB0aGF0IGEgY2Vs
bCBub3QgZGVzaWduYXRlZCBhcyBhIExhcmdlQWxsb2NhdGlvbiBpcyBhY3R1YWxseSBpbiBpdHMK
KyAgICAgICAgICAgICAgTWFya2VkQmxvY2sncyBib3VuZHMuCisKKyAgICAgICAgICAgYy4gVmVy
aWZ5IHRoYXQgdGhlIGNlbGwncyBjb250YWluZXIgKExhcmdlQWxsb2NhdGlvbiAvIE1hcmtlZEJs
b2NrKSBhY3R1YWxseQorICAgICAgICAgICAgICBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IFZNLgor
CisgICAgICAgICAgIGQuIFZlcmlmeSB0aGF0IGEgY2VsbCBpbiBhIE1hcmtlZEJsb2NrIGlzIHBy
b3Blcmx5IGFsaWduZWQgb24gdGhlIGJsb2NrJ3MKKyAgICAgICAgICAgICAgYWxsb2NhdGlvbiB1
bml0IHNpemUuCisKKyAgICAgICAgICAgZS4gSWYgdGhlIGNlbGwgaXMgbm90IGFuIEltbXV0YWJs
ZUJ1dHRlcmZseSwgdmVyaWZ5IHRoYXQgaXQgaXMgbm90IGxvY2F0ZWQgaW4KKyAgICAgICAgICAg
ICAgdGhlIEdpZ2FjYWdlLgorCisgICAgICAgICAgIGYuIFZlcmlmeSB0aGF0IHRoZSBjZWxsJ3Mg
SlNUeXBlIG1hdGNoZXMgaXRzIFN0cnVjdHVyZUJsb2IncyBKU1R5cGUuCisKKyAgICAgICAgICAg
Zy4gVmVyaWZ5IHRoYXQgdGhlIGNlbGwgc2l6ZSBhcyBkaWN0YXRlZCBieSB0aGUgY2VsbCBDbGFz
c0luZm8gZG9lcyBub3QgZXhjZWVkCisgICAgICAgICAgICAgIHRoZSBzaXplIG9mIHRoZSBhbGxv
Y2F0aW9uIHVuaXQgc2l6ZSAoYXMgZXhwZWN0ZWQgYnkgdGhlIGNvbnRhaW5lcgorICAgICAgICAg
ICAgICBNYXJrZWRCbG9jayBvciBMYXJnZUFsbG9jYXRpb24pLgorCisgICAgICAgICAgICAgIFNv
bWUgY2VsbHMgYXJlIGR5bmFtaWNhbGx5IHNpemUgKHNlZSBpc0R5bmFtaWNhbGx5U2l6ZWRUeXBl
KCkpLiAgRm9yIHRoZXNlCisgICAgICAgICAgICAgIGNlbGxzLCB3ZSBjb21wdXRlIHRoZWlyIHNp
emVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgc2l6ZSBkb2VzIG5vdCBleGNlZWQgdGhlCisgICAgICAg
ICAgICAgIGFsbG9jYXRpb24gdW5pdCBzaXplLgorCisgICAgICAgICAgIGguIElmIGEgY2VsbCBo
YXMgYSBidXR0ZXJmbHksIHZlcmlmeSB0aGF0IHRoZSBidXR0ZXJmbHkgaXMgaW4gaXRzIHRoZSBK
U1ZhbHVlCisgICAgICAgICAgICAgIEdpZ2FjYWdlLgorCisgICAgICAgICAgIFdlIGNhbiBhZGQg
bW9yZSB2ZXJpZmljYXRpb25zIGxhdGVyLCBvciBtYWtlIHNvbWUgdGhlc2UgbW9yZSByb2J1c3Qs
IGJ1dCB0aGlzCisgICAgICAgICAgIGlzIGEgc3RhcnQgZm9yIG5vdy4KKworICAgICAgICAgICBI
b3cgcmFuZG9tIGF1ZGl0cyB3b3JrPworICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09
CisgICAgICAgICAgIFJhbmRvbSBhdWRpdHMgYXJlIHRyaWdnZXJlZCBieSB0aGUgbV90cmlnZ2Vy
Qml0cyBiaXRzIGluIFZNOjptX2ludGVncml0eVJhbmRvbS4KKyAgICAgICAgICAgbV90cmlnZ2Vy
Qml0cyBpcyBhIDY0LWJpdCBiaXRmaWVsZC4KKworICAgICAgICAgICBJZiBPcHRpb25zOjpyYW5k
b21JbnRlZ3JpdHlBdWRpdFJhdGUoKSBpcyAwLCBtX3RyaWdnZXJCaXRzIHdpbGwgYWx3YXlzIGJl
IDAsCisgICAgICAgICAgIGFuZCBubyBhdWRpdHMgd2lsbCBiZSBkb25lLgorCisgICAgICAgICAg
IElmIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIG5vbi16ZXJvLCBtX3Ry
aWdnZXJCaXRzIHdpbGwgYmUKKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYXMgZm9sbG93czoKKwor
ICAgICAgICAgICAgICAgIHwgMSByZWxvYWQgYml0IHwgLi4uIDYzIHRyaWdnZXIgYml0cyAuLi4g
fAorCisgICAgICAgICAgIFRoZSByZWxvYWQgYml0IGlzIGFsd2F5cyBzZXQgKG1vcmUgZGV0YWls
cyBiZWxvdykuCisgICAgICAgICAgIEVhY2ggb2YgdGhlIDYzIHRyaWdnZXIgYml0cyBhcmUgcmFu
ZG9tbHkgc2V0IGRlcGVuZGluZyBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWUKKyAgICAgICAgICAg
Zm9yIHRoZSBiaXQ6CisKKyAgICAgICAgICAgICAgICBWTTo6cmFuZG9tKCkgPD0gT3B0aW9uczo6
cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgKiBVSU5UX01BWAorCisgICAgICAgICAgIFdoZW4g
SW50ZWdyaXR5OjphdWRpdENlbGwoKSBpcyBjYWxsZWQsIHdlIHRha2UgdGhlIGJvdHRvbSBiaXQg
YXMgdGhlIHRyaWdnZXIKKyAgICAgICAgICAgYml0IGZvciB0aGUgY3VycmVudCBjZWxsLCBhbmQg
c2hpZnRzIHRoZSByZXN0IGRvd24gYnkgMS4KKworICAgICAgICAgICBJZiBtX3RyaWdnZXJCaXRz
IGlzIG5vbi1udWxsIGFmdGVyIHRoZSBzaGlmdCwgdGhlIHRha2VuIHRyaWdnZXIgYml0IHdpbGwg
ZGljdGF0ZQorICAgICAgICAgICB3aGV0aGVyIHdlIGRvIGEgZnVsbCBhdWRpdCBvbiB0aGUgY3Vy
cmVudCBjZWxsIG9yIG5vdC4KKworICAgICAgICAgICBPbmNlIHRoZSByZWxvYWQgYml0IHJlYWNo
ZXMgdGhlIGJvdHRvbSwgd2UgY2FsbCBhIHJlbG9hZCBmdW5jdGlvbiB0bworICAgICAgICAgICBy
ZS1pbml0aWFsaXplIG1fdHJpZ2dlckJpdHMuICBUaGUgcmVsb2FkIGZ1bmN0aW9uIGFsc28gcmV0
dXJucyBhIGJvb2wKKyAgICAgICAgICAgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHRyaWdnZXIgYSBm
dWxsIGF1ZGl0IG9mIHRoZSBjdXJyZW50IGNlbGwuCisKKyAgICAgICAgICAgV2l0aCB0aGlzIHNj
aGVtZSwgd2Ugb25seSBuZWVkIHRvIGNhbGwgdGhlIHJlbG9hZCBmdW5jdGlvbiBvbmNlIGV2ZXJ5
IDY0IGNhbGxzCisgICAgICAgICAgIHRvIEludGVncml0eTo6YXVkaXRDZWxsKCksIGFuZCBjYW4g
ZWZmaWNpZW50bHkgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdHJpZ2dlcgorICAgICAgICAgICB0aGUg
YXVkaXQgdGhlIG90aGVyIDYzIHRpbWVzIHdpdGggdGhlIHByb2JhYmlsaXR5IHNwZWNpZmllZCBp
bgorICAgICAgICAgICBPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKS4KKworICAg
ICAgICAyLiBFbWJlZGRlZCB0aGUgQysrIGNsYXNzIHNpemUgb2YgSlNDZWxscyBpbnRvIHRoZWly
IENsYXNzSW5mby4gIFRoaXMgaXMgdXNlZCBpbgorICAgICAgICAgICB0aGUgZnVsbCBhdWRpdHMg
dG8gdmVyaWZ5IGNlbGwgc2l6ZXMuCisKKyAgICAgICAgMy4gQWRkZWQgaXNEeW5hbWljYWxseVNp
emVkVHlwZSgpIHRvIGNoZWNrIGlmIGEgSlNUeXBlIGhhcyBhIGR5bmFtaWMgc2l6ZSBhbGxvY2F0
aW9uCisgICAgICAgICAgIGkuZS4gdGhlIHNpemUgb2YgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBp
cyBub3QgZGV0ZXJtaW5lZCBieSB0aGUgc3RhdGljIEMrKworICAgICAgICAgICBzaXplIG9mIGl0
cyBjbGFzcywgYnV0IHJhdGhlciwgZGVwZW5kcyBvbiBzb21lIHJ1bnRpbWUgdmFyaWFibGUuCisK
KyAgICAgICAgNC4gTWFkZSB0aGUgVk1JbnNwZWN0b3IgYSBmcmllbmQgb2Ygc2V2ZXJhbCBjbGFz
c2VzIHNvIHRoYXQgaXQgY2FuIGFjY2VzcyB0aGVpcgorICAgICAgICAgICBwcml2YXRlIG1ldGhv
ZHMgYW5kIGZpZWxkcy4KKworICAgICAgICA1LiBNb3ZlZCB0aGUgaW5saW5lIGZ1bmN0aW9uIEpT
QmlnSW50OjphbGxvY2F0aW9uU2l6ZSgpIGZyb20gQmlnSW50LmNwcCB0byBpdHMKKyAgICAgICAg
ICAgaGVhZGVyIGZpbGUgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGluIFZNSW5zcGVjdG9yOjp2ZXJp
ZnlDZWxsU2l6ZSgpLgorCisgICAgICAgIDYuIEdhdmUgdGhlIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KCkgaXRzIG93biBKU1R5cGUgc28gdGhhdCB3ZSBjYW4gaWRlbnRpZnkgaXQKKyAgICAgICAg
ICAgYXMgYSBkeW5hbWljYWxseSBzaXplZCBvYmplY3QuCisKKyAgICAgICAgNy4gSW5jcmVhc2Vk
IHRoZSByYW5kb21uZXNzIG9mIFZNOjpyYW5kb20oKSAod2hpY2ggaXMgaW1wbGVtZW50ZWQgd2l0
aCBXZWFrUmFuZG9tKQorICAgICAgICAgICBieSByZS1zZWVkaW5nIGl0IHdpdGggYSBjcnlwdG9n
cmFwaGljYWxseSByYW5kb20gbnVtYmVyIGVhY2ggR0MuCisKKyAgICAgICAgOC4gQ2FsbGVkIElu
dGVncml0eTo6YXVkaXRDZWxsKCkgb24gU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxp
YXJ5KCkncyBjZWxsCisgICAgICAgICAgIGFzIGFuIGV4YW1wbGUgdXNlIG9mIGF1ZGl0Q2VsbCgp
LiAgTW9yZSB1c2VzIHdpbGwgYmUgYWRkZWQgaW4gbGF0ZXIgcGF0Y2hlcyB0bworICAgICAgICAg
ICBmb2xsb3cuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkJlZ2lu
UGhhc2UpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFsbG9j
YXRpb25TaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmNwcDoK
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
aDoKKyAgICAgICAgKEpTQzo6aXNEeW5hbWljYWxseVNpemVkVHlwZSk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6cmFuZG9t
KToKKyAgICAgICAgKEpTQzo6Vk06OmludGVncml0eVJhbmRvbSk6CisgICAgICAgICogdG9vbHMv
SW50ZWdyaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpS
YW5kb20pOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OlJhbmRvbTo6cmVsb2FkQW5kQ2hlY2tT
aG91bGRBdWRpdFNsb3cpOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbEZ1bGx5
KToKKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5OjphdWRpdENlbGxNaW5pbWFsbHlTbG93KToKKyAg
ICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0
eTo6YXVkaXRDZWxsKToKKyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHlJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OlJhbmRvbTo6c2hvdWxkQXVkaXQpOgorICAgICAg
ICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbE1pbmltYWxseSk6CisgICAgICAgIChKU0M6Oklu
dGVncml0eTo6YXVkaXRDZWxsUmFuZG9tbHkpOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9y
Lmg6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp1bnVzZWRWZXJpZmllcik6CisgICAgICAg
IChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsU2l6ZSk6CisgICAgICAgICogdG9vbHMvVk1J
bnNwZWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6dmVy
aWZ5Q2VsbFNpemUpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6dmVyaWZ5Q2VsbCk6CisK
IDIwMTktMDktMjMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIExh
enkgSlNHbG9iYWxPYmplY3QgcHJvcGVydHkgbWF0ZXJpYWxpemF0aW9uIHNob3VsZCBub3QgdXNl
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAwLDYgKzEwMDAsMTEgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAogCisgICAgdG9vbHMvSW50
ZWdyaXR5LmgKKyAgICB0b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgKKyAgICB0b29scy9WTUluc3Bl
Y3Rvci5oCisgICAgdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgKKwogICAgIHdhc20vV2FzbUNh
cGFiaWxpdGllcy5oCiAgICAgd2FzbS9XYXNtQ29kZUJsb2NrLmgKICAgICB3YXNtL1dhc21Db21w
aWxhdGlvbk1vZGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05ODksNiArOTg5LDcgQEAgdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiB0b29s
cy9IZWFwVmVyaWZpZXIuY3BwCit0b29scy9JbnRlZ3JpdHkuY3BwCiB0b29scy9KU0RvbGxhclZN
LmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5zcGVjdG9yLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MDI3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEwLDYgKzE5MTAsOSBAQAogCQlGRUEzQkJBQzIx
MkM5N0NCMDBFOTNBRDEgLyogREZHQ0ZHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUEzQkJBQjIxMkM5N0NCMDBFOTNBRDEgLyogREZHQ0ZHLmggKi87
IH07CiAJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNTFGNkIxQTk3QjY4
ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0gKi87IH07CiAJCUZFQjU4QzE1MTg3QjhCMTYw
MDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEzMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRUM1Nzk3MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUM1Nzk3MjIz
MTA1QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi87IH07CisJCUZFQzU3OTc2
MjMxMDVGNEUwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3Jp
dHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RUM1Nzk3ODIzMTA5NTRDMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDNTc5NzcyMzEwOTU0QjAwQkNB
ODNGIC8qIEludGVncml0eUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRUNCOEIyNzFEMjVCQjg1MDA2RjI0NjMgLyogRnVuY3Rpb25P
dmVycmlkZXNUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFQ0I4QjI1MUQyNUJCNkUwMDZGMjQ2MyAvKiBGdW5jdGlvbk92ZXJyaWRlc1Rlc3Qu
Y3BwICovOyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVF
QzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRj
aGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
OTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUxMzMsNiArNTEzNiwxMCBAQAogCQlGRUI1
MUY2QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlZ3Jlc3MxNDE4MDkubW07IHBhdGggPSBBUEkvdGVz
dHMvUmVncmVzczE0MTgwOS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNThD
MTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJvckhhbmRsaW5nU2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMxMzE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JI
YW5kbGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9ySGFu
ZGxpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUM1Nzk3MjIzMTA1
QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRUM1Nzk3NDIzMTA1RjQyMDBCQ0E4M0YgLyogSW50ZWdyaXR5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVncml0eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3JpdHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyaXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQzU3OTc3MjMxMDk1NEIwMEJDQTgzRiAvKiBJbnRlZ3Jp
dHlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVncml0eUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDQjhCMjUxRDI1QkI2RTAw
NkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rl
c3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFQ0I4QjI2MUQyNUJCNkUwMDZGMjQ2MyAvKiBGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRnVuY3Rpb25PdmVycmlkZXNUZXN0Lmg7
IHBhdGggPSBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFQ0I4QjI5MUQyNUNBQkIwMDZGMjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0
aW9uLW92ZXJyaWRlcy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9
ICJ0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyI7IHBhdGggPSAiQVBJL3Rlc3RzL3Rlc3Rh
cGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc1ODAsNiArNzU4Nyw5IEBACiAJCQkJRkVBMEM0MDExQ0REN0QwRTAwNDgxOTkxIC8qIEZ1bmN0
aW9uV2hpdGVsaXN0LmggKi8sCiAJCQkJRkUxQkQwMjIxRTcyMDUyRjAwMTM0QkM5IC8qIEhlYXBW
ZXJpZmllci5jcHAgKi8sCiAJCQkJRkUxQkQwMjMxRTcyMDUyRjAwMTM0QkM5IC8qIEhlYXBWZXJp
Zmllci5oICovLAorCQkJCUZFQzU3OTc0MjMxMDVGNDIwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuY3Bw
ICovLAorCQkJCUZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuaCAqLywKKwkJ
CQlGRUM1Nzk3NzIzMTA5NTRCMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oICovLAogCQkJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLywKIAkJCQlGRTM4
NEVFMjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oICovLAogCQkJCTg2QjU4MjJDMTRE
MjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLywKQEAgLTc1ODgsNiArNzU5OCw3
IEBACiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICov
LAogCQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCiAJ
CQkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCisJCQkJRkVD
NTc5NzIyMzEwNUI0ODAwQkNBODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oICovLAogCQkJKTsK
IAkJCXBhdGggPSB0b29sczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTk2LDYg
KzkwMDcsNyBAQAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxs
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENh
bGxFZGdlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUM1Nzk3ODIzMTA5NTRDMDBCQ0E4M0YgLyog
SW50ZWdyaXR5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk2REFBMkIxRTg5Q0NENjAw
NURGMjRBIC8qIENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIw
NUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTNCQkE4MjEy
QjY1NTkwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk0
ODgsNiArOTUwMCw3IEBACiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4QTdCRjAxQjgyOTc1QTAwMkQ5MTU3IC8qIElu
bGluZUNhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTYxN0YwQjcxQzAwQUJC
MjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVDNTc5NzYy
MzEwNUY0RTAwQkNBODNGIC8qIEludGVncml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAz
MjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTkzQ0Y3RjE4NDAzNjJDMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTkzQ0Y4NzE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTIwLDYgKzk5MzMsNyBAQAogCQkJCTBGRjcy
OUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQzU3OTczMjMxMDVCNTEwMEJD
QTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUMw
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkIxMDU4QzE2NzU0ODMzMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkIxMDU4RTE2NzU0ODNBMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0
U2l0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlICJXZWFrTWFwSW1w
bElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg+CkBAIC0xMjY4LDYgKzEyNjksOSBA
QCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5CZWdpblBoYXNlKEdDCiAKICAgICBtX2JlZm9y
ZUdDID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKKyAgICAvLyBQaWdneSBiYWNrIG9uIHRoZSBH
QyB0byByYW5kb21pemUgYSBiaXQuCisgICAgdm0oKS5yYW5kb20oKS5zZXRTZWVkKGNyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpOworCiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7
CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdD
OiAiLCAqbV9jb2xsZWN0aW9uU2NvcGUsICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSGVhcEFuYWx5emVyLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSGVhcFByb2ZpbGVyLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5SW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBw
ZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgIAogICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KGhlYXBDZWxsKTsKICAgICAgICAgdmFsaWRhdGVDZWxsKGpzQ2VsbCk7
CisgICAgICAgIEludGVncml0eTo6YXVkaXRDZWxsKHZtKCksIGpzQ2VsbCk7CiAgICAgICAgIAog
ICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3JleSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lv
biAyNTAyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAg
ICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6
dmlzaXRPdXRwdXRDb25zdHJhaW50cywgXAogICAgIH0sIFwKLSAgICBDbGFzc05hbWU6OlR5cGVk
QXJyYXlTdG9yYWdlVHlwZQorICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlLCBc
CisgICAgc2l6ZW9mKENsYXNzTmFtZSkKIAogc3RydWN0IENsYXNzSW5mbyB7CiAgICAgLy8gQSBz
dHJpbmcgZGVub3RpbmcgdGhlIGNsYXNzIG5hbWUuIEV4YW1wbGU6ICJXaW5kb3ciLgpAQCAtMjIx
LDYgKzIyMiw3IEBAIHN0cnVjdCBDbGFzc0luZm8gewogICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRh
YmxlOwogCiAgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VUeXBlOworICAgIHVu
c2lnbmVkIHN0YXRpY0NsYXNzU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJl
dmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAg
ICB1aW50MzJfdCBtX21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBk
ZXRlcm1pbmVzIHRoZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1
YWwgY2FwYWNpdHksIG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRo
aXMgd2F5IHRvIGJlIGtpbmQgdG8gdGhlIEpJVHMuCiAgICAgdXNpbmcgTWFwcGVkQXJndW1lbnRz
ID0gQ2FnZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1hcHBl
ZEFyZ3VtZW50cyBtX21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRo
YXQgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9w
ZXJ0aWVzLgorCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
Y3BwCShyZXZpc2lvbiAyNTAyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDE3IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEyICs4Myw2IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHplcm9CaWdJbnQ7CiB9CiAK
LWlubGluZSBzaXplX3QgSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCkK
LXsKLSAgICBzaXplX3Qgc2l6ZVdpdGhQYWRkaW5nID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PHNpemVvZihzaXplX3QpPihzaXplb2YoSlNCaWdJbnQpKTsKLSAgICByZXR1cm4gc2l6ZVdpdGhQ
YWRkaW5nICsgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KTsKLX0KLQogSlNCaWdJbnQqIEpTQmlnSW50
Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQmlnSW50LmgJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBA
QCBwcml2YXRlOgogCiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpT
QmlnSW50KiB4KTsKIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQg
bGVuZ3RoKTsKKyAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAg
ewogICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+
KHNpemVvZihKU0JpZ0ludCkpOwpAQCAtMjQ5LDggKzI0OSwxNiBAQCBwcml2YXRlOgogCiAgICAg
Y29uc3QgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3NpZ24geyBmYWxzZSB9OworCisg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAoraW5saW5lIHNpemVfdCBKU0JpZ0lu
dDo6YWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCBzaXplV2l0
aFBhZGRpbmcgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHNpemVfdCk+KHNpemVv
ZihKU0JpZ0ludCkpOworICAgIHJldHVybiBzaXplV2l0aFBhZGRpbmcgKyBsZW5ndGggKiBzaXpl
b2YoRGlnaXQpOworfQorCiBpbmxpbmUgSlNCaWdJbnQqIGFzQmlnSW50KEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHZhbHVlLmFzQ2VsbCgpLT5pc0JpZ0ludCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuaAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTks
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNv
cmQoKSB7IHJldHVybiBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQpAQCAtMTAzLDYgKzEwMyw4IEBA
IHByaXZhdGU6CiAgICAgRXhwb3J0TWFwIG1fZXhwb3J0czsKICAgICBWZWN0b3I8SWRlbnRpZmll
cj4gbV9uYW1lczsKICAgICBXcml0ZUJhcnJpZXI8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+IG1fbW9k
dWxlUmVjb3JkOworCisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5j
cHAJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTQsNiArOTQsNyBAQCB2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgQ0FTRShNb2R1bGVFbnZpcm9ubWVudFR5cGUpCiAg
ICAgQ0FTRShTdHJpY3RFdmFsQWN0aXZhdGlvblR5cGUpCiAgICAgQ0FTRShXaXRoU2NvcGVUeXBl
KQorICAgIENBU0UoTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSkKICAgICBDQVNFKFJlZ0V4cE9i
amVjdFR5cGUpCiAgICAgQ0FTRShQcm94eU9iamVjdFR5cGUpCiAgICAgQ0FTRShKU0dlbmVyYXRv
clR5cGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA2LDYgKzEwNiw3IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgV2l0
aFNjb3BlVHlwZSwKICAgICAvLyBFbmQgSlNTY29wZSB0eXBlcy4KIAorICAgIE1vZHVsZU5hbWVz
cGFjZU9iamVjdFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5
cGUsCiAgICAgSlNHZW5lcmF0b3JUeXBlLApAQCAtMTM5LDYgKzE0MCwxOCBAQCBpbmxpbmUgY29u
c3RleHByIGJvb2wgaXNUeXBlZEFycmF5VHlwZShKCiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4odHlwZSkgLSBGaXJzdFR5cGVkQXJyYXlUeXBlKSA8IE51bWJlck9mVHlwZWRBcnJh
eVR5cGVzRXhjbHVkaW5nRGF0YVZpZXc7CiB9CiAKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc0R5
bmFtaWNhbGx5U2l6ZWRUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEJpZ0lu
dFR5cGUKKyAgICAgICAgfHwgdHlwZSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlCisgICAgICAgIHx8
IHR5cGUgPT0gRmluYWxPYmplY3RUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gTGV4aWNhbEVudmly
b25tZW50VHlwZQorICAgICAgICB8fCB0eXBlID09IE1vZHVsZUVudmlyb25tZW50VHlwZQorICAg
ICAgICB8fCB0eXBlID09IE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5cGUpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5h
bWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDExIEBAIHN0YXRpYyB2
b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VD
b2RlQ2FjaGUoKSkKICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsK
KworICAgIGlmIChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA8IDApCisgICAg
ICAgIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpID0gMDsKKyAgICBlbHNlIGlm
IChPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA+IDEuMCkKKyAgICAgICAgT3B0
aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgPSAxLjA7CiB9CiAKIHZvaWQgT3B0aW9u
czo6aW5pdGlhbGl6ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw2ICs0MDksNyBAQCBl
bnVtIGNsYXNzIE9wdGlvblR5cGVJRCA6IHVpbnQ4X3QgewogICAgIFwKICAgICB2KEJvb2wsIGFs
d2F5c0dlbmVyYXRlUENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWwsICJUaGlzIHdpbGwg
bWFrZSBzdXJlIHdlIGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFwIGZvciBKSVRl
ZCBjb2RlLiIpIFwKICAgICBcCisgICAgdihEb3VibGUsIHJhbmRvbUludGVncml0eUF1ZGl0UmF0
ZSwgMC4wNSwgTm9ybWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVncml0eSBhdWRpdHMg
WzAuMCAtIDEuMF0iKSBcCiAgICAgdihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVy
aWZpY2F0aW9uLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjUwMjc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4Niw2ICs3ODYsOCBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0Owog
CiAgICAgdWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7CisKKyAgICBmcmllbmQgY2xhc3MgVk1JbnNw
ZWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw3IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBVU0UoQ0YpCiAgICAgLCBt
X3J1bkxvb3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogI2VuZGlmIC8vIFVTRShDRikKKyAgICAs
IG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhpcywgaGVhcFR5cGUpCiAg
ICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKG1ha2VVbmlxdWU8RmFzdE1hbGxvY0FsaWduZWRNZW1v
cnlBbGxvY2F0b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihtYWtlVW5p
cXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2ZSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI1MDI3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIKICNpbmNs
dWRlICJGdXp6ZXJBZ2VudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbnRlZ3Jp
dHkuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0LmgiCiAj
aW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKQEAgLTMxMCw2ICszMTEsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoY29uc3QgQ2FsbEZy
YW1lKikgY29uc3Q7CiAKKyAgICBXZWFrUmFuZG9tJiByYW5kb20oKSB7IHJldHVybiBtX3JhbmRv
bTsgfQorICAgIEludGVncml0eTo6UmFuZG9tJiBpbnRlZ3JpdHlSYW5kb20oKSB7IHJldHVybiBt
X2ludGVncml0eVJhbmRvbTsgfQorCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG5leHRJRCgpOwog
CkBAIC0zMjIsNiArMzI2LDkgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wUmVm
PiBtX3J1bkxvb3A7CiAjZW5kaWYKIAorICAgIFdlYWtSYW5kb20gbV9yYW5kb207CisgICAgSW50
ZWdyaXR5OjpSYW5kb20gbV9pbnRlZ3JpdHlSYW5kb207CisKIHB1YmxpYzoKICAgICBIZWFwIGhl
YXA7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5LmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkludGVncml0eUlubGluZXMuaCIKKworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRlICJW
TUluc3BlY3RvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgSW50ZWdy
aXR5IHsKKworbmFtZXNwYWNlIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK30K
KworUmFuZG9tOjpSYW5kb20oVk0mIHZtKQoreworICAgIHJlbG9hZEFuZENoZWNrU2hvdWxkQXVk
aXRTbG93KHZtKTsKK30KKworYm9vbCBSYW5kb206OnJlbG9hZEFuZENoZWNrU2hvdWxkQXVkaXRT
bG93KFZNJiB2bSkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0
ZSgpKSB7CisgICAgICAgIG1fdHJpZ2dlckJpdHMgPSAwOyAvLyBOZXZlciB0cmlnZ2VyLCBhbmQg
ZG9uJ3QgYm90aGVyIHJlbG9hZGluZy4KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nTG4oImRpc2FibGVkIEludGVncml0eSBhdWRpdHM6IHRyaWdnZXIgYml0cyAiLCBS
YXdQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fdHJpZ2dlckJpdHMpKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBSZWxvYWQgdGhlIHRyaWdnZXIgYml0
cy4KKyAgICBtX3RyaWdnZXJCaXRzID0gMXVsbCA8PCA2MzsKKworICAgIHVpbnQzMl90IHRocmVz
aG9sZCA9IFVJTlRfTUFYICogT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlRyaWdnZXJCaXRzOyArK2kpIHsKKyAgICAg
ICAgYm9vbCB0cmlnZ2VyID0gdm0ucmFuZG9tKCkuZ2V0VWludDMyKCkgPD0gdGhyZXNob2xkOwor
ICAgICAgICBtX3RyaWdnZXJCaXRzID0gbV90cmlnZ2VyQml0cyB8IChzdGF0aWNfY2FzdDx1aW50
NjRfdD4odHJpZ2dlcikgPDwgaSk7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nTG4oInJlbG9hZGVkIEludGVncml0eSB0cmlnZ2VyIGJpdHMgIiwgUmF3UG9pbnRlcihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihtX3RyaWdnZXJCaXRzKSkpOworICAgIEFTU0VSVChtX3Ry
aWdnZXJCaXRzID49ICgxdWxsIDw8IDYzKSk7CisgICAgcmV0dXJuIHZtLnJhbmRvbSgpLmdldFVp
bnQzMigpIDw9IHRocmVzaG9sZDsKK30KKwordm9pZCBhdWRpdENlbGxGdWxseShWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBWTUluc3BlY3Rvcjo6dmVyaWZ5Q2VsbDxWTUluc3BlY3Rvcjo6
UmVsZWFzZUFzc2VydD4odm0sIGNlbGwpOworfQorCit2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseVNs
b3coVk0mLCBKU0NlbGwqIGNlbGwpCit7CisgICAgaWYgKEdpZ2FjYWdlOjpjb250YWlucyhjZWxs
KSkgeworICAgICAgICBpZiAoY2VsbC0+dHlwZSgpICE9IEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlw
ZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJCYWQgY2VsbCAiLCBSYXdQb2ludGVyKGNlbGwpLCAiICIsIEpTVmFsdWUoY2VsbCkpOworICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
SW50ZWdyaXR5Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9JbnRlZ3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvSW50ZWdyaXR5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0ludGVncml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0NlbGw7CitjbGFzcyBWTTsKKworbmFtZXNwYWNlIElu
dGVncml0eSB7CisKK2VudW0gY2xhc3MgQXVkaXRMZXZlbCB7CisgICAgTm9uZSwKKyAgICBNaW5p
bWFsLAorICAgIEZ1bGwsCisgICAgUmFuZG9tLAorfTsKKworI2lmZGVmIE5ERUJVRworc3RhdGlj
IGNvbnN0ZXhwciBBdWRpdExldmVsIERlZmF1bHRBdWRpdExldmVsID0gQXVkaXRMZXZlbDo6Tm9u
ZTsKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIEF1ZGl0TGV2ZWwgRGVmYXVsdEF1ZGl0TGV2ZWwg
PSBBdWRpdExldmVsOjpSYW5kb207CisjZW5kaWYKKworY2xhc3MgUmFuZG9tIHsKK3B1YmxpYzoK
KyAgICBSYW5kb20oVk0mKTsKKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRBdWRpdChW
TSYpOworCitwcml2YXRlOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcmVsb2FkQW5kQ2hl
Y2tTaG91bGRBdWRpdFNsb3coVk0mKTsKKworICAgIHVpbnQ2NF90IG1fdHJpZ2dlckJpdHM7CisK
KyAgICAvLyBUaGUgdG9wIGJpdCBpcyByZXNlcnZlZCBhcyBhIHRlcm1pbmF0aW9uIGJpdC4gSGVu
Y2UsIHRoZSBudW1iZXIgb2YKKyAgICAvLyB0cmlnZ2VyIGJpdHMgaXMgYWx3YXlzIDEgbGVzcyB0
aGFuIHdpbGwgZml0IGluIG1fdHJpZ2dlckJpdHMuCisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQg
bnVtYmVyT2ZUcmlnZ2VyQml0cyA9IChzaXplb2YobV90cmlnZ2VyQml0cykgKiBDSEFSX0JJVCkg
LSAxOworfTsKKworQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbFJhbmRvbWx5KFZNJiwgSlND
ZWxsKik7CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRDZWxsTWluaW1hbGx5KFZNJiwgSlNDZWxs
Kik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseVNsb3coVk0mLCBK
U0NlbGwqKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXVkaXRDZWxsRnVsbHkoVk0mLCBKU0Nl
bGwqKTsKKwordGVtcGxhdGU8QXVkaXRMZXZlbCA9IEF1ZGl0TGV2ZWw6OlJhbmRvbSwgdHlwZW5h
bWUgVD4KK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGwoVk0mLCBUKSB7IH0KKwordGVtcGxh
dGU8QXVkaXRMZXZlbCBhdWRpdExldmVsID0gRGVmYXVsdEF1ZGl0TGV2ZWw+CitBTFdBWVNfSU5M
SU5FIHZvaWQgYXVkaXRDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIHN3aXRjaCAo
YXVkaXRMZXZlbCkgeworICAgIGNhc2UgQXVkaXRMZXZlbDo6Tm9uZToKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQXVkaXRMZXZlbDo6TWluaW1hbDoKKyAgICAgICAgcmV0dXJuIGF1ZGl0Q2Vs
bE1pbmltYWxseSh2bSwgY2VsbCk7CisgICAgY2FzZSBBdWRpdExldmVsOjpGdWxsOgorICAgICAg
ICByZXR1cm4gYXVkaXRDZWxsRnVsbHkodm0sIGNlbGwpOworICAgIGNhc2UgQXVkaXRMZXZlbDo6
UmFuZG9tOgorICAgICAgICByZXR1cm4gYXVkaXRDZWxsUmFuZG9tbHkodm0sIGNlbGwpOworICAg
IH0KK30KKwordGVtcGxhdGU8QXVkaXRMZXZlbCBhdWRpdExldmVsID0gRGVmYXVsdEF1ZGl0TGV2
ZWw+CitBTFdBWVNfSU5MSU5FIHZvaWQgYXVkaXRDZWxsKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAoYXVkaXRMZXZlbCA9PSBBdWRpdExldmVsOjpOb25lKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGF1ZGl0Q2VsbDxhdWRpdExl
dmVsPih2bSwgdmFsdWUuYXNDZWxsKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkK
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SW50ZWdyaXR5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0ludGVncml0eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbnRlZ3JpdHkuaCIKKyNpbmNsdWRlICJWTS5oIgorCitu
YW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBJbnRlZ3JpdHkgeworCitBTFdBWVNfSU5MSU5FIGJv
b2wgUmFuZG9tOjpzaG91bGRBdWRpdChWTSYgdm0pCit7CisgICAgYm9vbCBzaG91bGRBdWRpdCA9
IG1fdHJpZ2dlckJpdHMgJiAxOworICAgIG1fdHJpZ2dlckJpdHMgPSBtX3RyaWdnZXJCaXRzID4+
IDE7CisgICAgaWYgKExJS0VMWSghc2hvdWxkQXVkaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBJZiBhdWRpdGluZyBpcyBlbmFibGVkLCB0aGVuIHRoZSB0b3AgYml0IG9mIG1f
dHJpZ2dlckJpdHMgaXMgYWx3YXlzIHNldAorICAgIC8vIHRvIDEgb24gcmVsb2FkLiBXaGVuIHRo
aXMgdG9wIGJpdCByZWFjaGVzIHRoZSBib3R0b20sIGl0IGRvZXMgbm90CisgICAgLy8gaW5kaWNh
dGUgdGhhdCB3ZSBzaG91bGQgdHJpZ2dlciBhbiBhdWRpdCBidXQgcmF0aGVyIHRoYXQgd2UndmUg
c2hpZnRlZAorICAgIC8vIG91dCBhbGwgdGhlIGF2YWlsYWJsZSB0cmlnZ2VyIGJpdHMgYW5kIGhl
bmNlLCBuZWVkIHRvIHJlbG9hZC4gSW5zdGVhZCwKKyAgICAvLyByZWxvYWRBbmRDaGVja1Nob3Vs
ZEF1ZGl0U2xvdygpIHdpbGwgcmV0dXJuIHdoZXRoZXIgd2UgYWN0dWFsbHkgbmVlZCB0bworICAg
IC8vIHRyaWdnZXIgYW4gYXVkaXQgdGhpcyB0dXJuLgorICAgIGlmICghbV90cmlnZ2VyQml0cykK
KyAgICAgICAgcmV0dXJuIHJlbG9hZEFuZENoZWNrU2hvdWxkQXVkaXRTbG93KHZtKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseShW
TSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoR2lnYWNhZ2U6OmNvbnRh
aW5zKGNlbGwpKSkKKyAgICAgICAgYXVkaXRDZWxsTWluaW1hbGx5U2xvdyh2bSwgY2VsbCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGxSYW5kb21seShWTSYgdm0sIEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBpZiAoVU5MSUtFTFkodm0uaW50ZWdyaXR5UmFuZG9tKCkuc2hvdWxkQXVk
aXQodm0pKSkKKyAgICAgICAgYXVkaXRDZWxsRnVsbHkodm0sIGNlbGwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJbnRlZ3JpdHkKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
MCw2ICs4MCwxNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcENlbGxNZW1vcnlUb1N0cmVhbShKU0NlbGwqLCBQcmludFN0cmVhbSYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBTdWJzcGFjZUhhc2hlcyhWTSopOwogCisgICAg
ZW51bSBWZXJpZmllckFjdGlvbiB7IFJlbGVhc2VBc3NlcnQsIEN1c3RvbSB9OworCisgICAgdXNp
bmcgVmVyaWZ5RnVuY3RvciA9IGJvb2woYm9vbCBjb25kaXRpb24sIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uLCAuLi4pOworICAgIHN0YXRpYyBib29sIHVudXNlZFZlcmlmaWVyKGJvb2wsIGNvbnN0
IGNoYXIqLCAuLi4pIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB0ZW1wbGF0ZTxWZXJpZmllckFj
dGlvbiwgVmVyaWZ5RnVuY3RvciA9IHVudXNlZFZlcmlmaWVyPgorICAgIHN0YXRpYyBib29sIHZl
cmlmeUNlbGxTaXplKFZNJiwgSlNDZWxsKiwgT3B0aW9uYWw8c2l6ZV90PiBhbGxvY2F0b3JDZWxs
U2l6ZSA9IHsgfSk7CisKKyAgICB0ZW1wbGF0ZTxWZXJpZmllckFjdGlvbiwgVmVyaWZ5RnVuY3Rv
ciA9IHVudXNlZFZlcmlmaWVyPgorICAgIHN0YXRpYyBib29sIHZlcmlmeUNlbGwoVk0mLCBKU0Nl
bGwqKTsKKwogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBp
dGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3RvcklubGluZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgorI2luY2x1ZGUgIkpTQmlnSW50LmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJv
bm1lbnQuaCIKKyNpbmNsdWRlICJKU01vZHVsZUVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisjdW5kZWYgQVVESVRf
Q09ORElUSU9OCisjdW5kZWYgQVVESVRfVkVSSUZZCisKKyNkZWZpbmUgQVVESVRfQ09ORElUSU9O
KHgpICh4KSwgI3gKKyNkZWZpbmUgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGNvbmQs
IC4uLikgZG8geyBcCisgICAgICAgIGlmIChhY3Rpb24gPT0gVmVyaWZpZXJBY3Rpb246OlJlbGVh
c2VBc3NlcnQpIFwKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmQsIF9fVkFfQVJHU19f
KTsgXAorICAgICAgICBlbHNlIGlmICghdmVyaWZpZXIoQVVESVRfQ09ORElUSU9OKGNvbmQpLCBf
X1ZBX0FSR1NfXykpIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgIH0gd2hpbGUg
KGZhbHNlKQorCit0ZW1wbGF0ZTxWTUluc3BlY3Rvcjo6VmVyaWZpZXJBY3Rpb24gYWN0aW9uLCBW
TUluc3BlY3Rvcjo6VmVyaWZ5RnVuY3RvciB2ZXJpZmllcj4KK2Jvb2wgVk1JbnNwZWN0b3I6OnZl
cmlmeUNlbGxTaXplKFZNJiB2bSwgSlNDZWxsKiBjZWxsLCBPcHRpb25hbDxzaXplX3Q+IG9wdGlv
bmFsQWxsb2NhdG9yQ2VsbFNpemUpCit7CisgICAgc2l6ZV90IGFsbG9jYXRvckNlbGxTaXplID0g
b3B0aW9uYWxBbGxvY2F0b3JDZWxsU2l6ZSA/ICpvcHRpb25hbEFsbG9jYXRvckNlbGxTaXplIDog
Y2VsbC0+Y2VsbFNpemUoKTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3Ry
dWN0dXJlKHZtKTsKKyAgICBKU1R5cGUgY2VsbFR5cGUgPSBjZWxsLT50eXBlKCk7CisgICAgQVVE
SVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGNlbGxUeXBlID09IHN0cnVjdHVyZS0+bV9ibG9i
LnR5cGUoKSwgY2VsbCwgY2VsbFR5cGUsIHN0cnVjdHVyZS0+bV9ibG9iLnR5cGUoKSk7CisKKyAg
ICBpZiAoaXNEeW5hbWljYWxseVNpemVkVHlwZShjZWxsVHlwZSkpIHsKKyAgICAgICAgc2l6ZV90
IGNlbGxTaXplID0gMDsKKyAgICAgICAgc3dpdGNoIChjZWxsVHlwZSkgeworICAgICAgICBjYXNl
IEJpZ0ludFR5cGU6IHsKKyAgICAgICAgICAgIGF1dG8qIGJpZ0ludCA9IGpzQ2FzdDxKU0JpZ0lu
dCo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBKU0JpZ0ludDo6YWxsb2NhdGlvblNp
emUoYmlnSW50LT5sZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIERpcmVjdEFyZ3VtZW50c1R5cGU6IHsKKyAgICAgICAgICAgIGF1dG8qIGFyZ3Mg
PSBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9
IERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUoYXJncy0+bV9taW5DYXBhY2l0eSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VHlw
ZToKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExleGljYWxFbnZpcm9ubWVudFR5cGU6IHsKKyAgICAgICAgICAgIGF1dG8qIGVudiA9
IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNp
emUgPSBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUoZW52LT5zeW1ib2xUYWJs
ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTW9kdWxl
RW52aXJvbm1lbnRUeXBlOiB7CisgICAgICAgICAgICBhdXRvKiBlbnYgPSBqc0Nhc3Q8SlNNb2R1
bGVFbnZpcm9ubWVudCo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBKU01vZHVsZUVu
dmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZShlbnYtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBNb2R1bGVOYW1lc3BhY2VPYmplY3RU
eXBlOiB7CisgICAgICAgICAgICBhdXRvKiBvYmogPSBqc0Nhc3Q8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q6OmFsbG9jYXRpb25TaXplKG9iai0+bV9uYW1lcy5jYXBhY2l0eSgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIEFVRElUX1ZFUklG
WShhY3Rpb24sIHZlcmlmaWVyLCBjZWxsU2l6ZSA8PSBhbGxvY2F0b3JDZWxsU2l6ZSwgY2VsbCwg
Y2VsbFR5cGUsIGNlbGxTaXplLCBhbGxvY2F0b3JDZWxsU2l6ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygp
OworICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgY2xhc3NJbmZvLT5zdGF0
aWNDbGFzc1NpemUgPD0gYWxsb2NhdG9yQ2VsbFNpemUsIGNlbGwsIGNlbGxUeXBlLCBjbGFzc0lu
Zm8tPnN0YXRpY0NsYXNzU2l6ZSwgYWxsb2NhdG9yQ2VsbFNpemUpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8Vk1JbnNwZWN0b3I6OlZlcmlmaWVyQWN0aW9uIGFjdGlv
biwgVk1JbnNwZWN0b3I6OlZlcmlmeUZ1bmN0b3IgdmVyaWZpZXI+Citib29sIFZNSW5zcGVjdG9y
Ojp2ZXJpZnlDZWxsKFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIHNpemVfdCBhbGxvY2F0
b3JDZWxsU2l6ZSA9IDA7CisgICAgaWYgKGNlbGwtPmlzTGFyZ2VBbGxvY2F0aW9uKCkpIHsKKyAg
ICAgICAgTGFyZ2VBbGxvY2F0aW9uJiBsYXJnZUFsbG9jYXRpb24gPSBjZWxsLT5sYXJnZUFsbG9j
YXRpb24oKTsKKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsICZsYXJnZUFs
bG9jYXRpb24udm0oKSA9PSAmdm0sIGNlbGwsIGNlbGwtPnR5cGUoKSwgJmxhcmdlQWxsb2NhdGlv
bi52bSgpLCAmdm0pOworCisgICAgICAgIGJvb2wgaXNWYWxpZExhcmdlQWxsb2NhdGlvbiA9IGZh
bHNlOworICAgICAgICBmb3IgKGF1dG8qIGkgOiB2bS5oZWFwLm9iamVjdFNwYWNlKCkubGFyZ2VB
bGxvY2F0aW9ucygpKSB7CisgICAgICAgICAgICBpZiAoaSA9PSAmbGFyZ2VBbGxvY2F0aW9uKSB7
CisgICAgICAgICAgICAgICAgaXNWYWxpZExhcmdlQWxsb2NhdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVVESVRf
VkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24sIGNlbGwsIGNl
bGwtPnR5cGUoKSk7CisKKyAgICAgICAgYWxsb2NhdG9yQ2VsbFNpemUgPSBsYXJnZUFsbG9jYXRp
b24uY2VsbFNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2sg
PSBjZWxsLT5tYXJrZWRCbG9jaygpOworICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlJiBibG9j
a0hhbmRsZSA9IGJsb2NrLmhhbmRsZSgpOworICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2
ZXJpZmllciwgJmJsb2NrLnZtKCkgPT0gJnZtLCBjZWxsLCBjZWxsLT50eXBlKCksICZibG9jay52
bSgpLCAmdm0pOworCisgICAgICAgIHVpbnRwdHJfdCBibG9ja1N0YXJ0QWRkcmVzcyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihibG9ja0hhbmRsZS5zdGFydCgpKTsKKyAgICAgICAgQVVE
SVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGJsb2NrSGFuZGxlLmNvbnRhaW5zKGNlbGwpLCBj
ZWxsLCBjZWxsLT50eXBlKCksIGJsb2NrU3RhcnRBZGRyZXNzLCBibG9ja0hhbmRsZS5lbmQoKSk7
CisKKyAgICAgICAgdWludHB0cl90IGNlbGxBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGNlbGwpOworICAgICAgICB1aW50cHRyX3QgY2VsbE9mZnNldCA9IGNlbGxBZGRyZXNz
IC0gYmxvY2tTdGFydEFkZHJlc3M7CisgICAgICAgIGFsbG9jYXRvckNlbGxTaXplID0gYmxvY2su
Y2VsbFNpemUoKTsKKyAgICAgICAgYm9vbCBjZWxsSXNQcm9wZXJseUFsaWduZWQgPSAhKGNlbGxP
ZmZzZXQgJSBhbGxvY2F0b3JDZWxsU2l6ZSk7CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24s
IHZlcmlmaWVyLCBjZWxsSXNQcm9wZXJseUFsaWduZWQsIGNlbGwsIGNlbGwtPnR5cGUoKSwgYWxs
b2NhdG9yQ2VsbFNpemUpOworICAgIH0KKworICAgIGF1dG8gY2VsbFR5cGUgPSBjZWxsLT50eXBl
KCk7CisgICAgaWYgKGNlbGwtPnR5cGUoKSAhPSBKU0ltbXV0YWJsZUJ1dHRlcmZseVR5cGUpCisg
ICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCAhR2lnYWNhZ2U6OmNvbnRhaW5z
KGNlbGwpLCBjZWxsLCBjZWxsVHlwZSk7CisKKyAgICBpZiAoIXZlcmlmeUNlbGxTaXplPGFjdGlv
biwgdmVyaWZpZXI+KHZtLCBjZWxsLCBhbGxvY2F0b3JDZWxsU2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpKU1ZhbHVl
KSAmJiBjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChjZWxsKTsKKyAgICAgICAgY29uc3QgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBvYmplY3Qt
PmJ1dHRlcmZseSgpOworICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgIWJ1
dHRlcmZseSB8fCBHaWdhY2FnZTo6aXNDYWdlZChHaWdhY2FnZTo6SlNWYWx1ZSwgYnV0dGVyZmx5
KSwgY2VsbCwgY2VsbC0+dHlwZSgpLCBidXR0ZXJmbHkpOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCisjdW5kZWYgQVVESVRfVkVSSUZZCisjdW5kZWYgQVVESVRfQ09ORElUSU9OCisK
K30gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379429</attachid>
            <date>2019-09-23 21:53:48 -0700</date>
            <delta_ts>2019-09-23 22:04:00 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-202085.patch</filename>
            <type>text/plain</type>
            <size>45327</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxOS0wOS0yMyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW50cm9kdWNpbmcgSW50ZWdyaXR5IGF1ZGl0IGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjA4NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gncyBtYWluIGdvYWwgaXMg
dG8gaW50cm9kdWNlIHRoZSBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zLiAgVGhleSBjYW4KKyAg
ICAgICAgYmUgdXNlZCB3aGVyZXZlciB3ZSB3YW50IHRvIGF1ZGl0IGEgY2VsbCB0byBwcm9iYWJp
bGlzdGljYWxseSBlbnN1cmUgaXQgaXMgbm90CisgICAgICAgIGNvcnJ1cHRlZC4gIEhvd2V2ZXIs
IHRvIGtlZXAgdGhpcyBwYXRjaCBzbWFsbCwgd2Ugd2lsbCBvbmx5IGludHJvZHVjZSB0aGUgYXVk
aXQKKyAgICAgICAgdG9vbCBoZXJlIHdpdGggb25lIGV4YW1wbGUgdXNlIGluIFNsb3RWaXNpdG9y
LiAgV2UnbGwgZm9sbG93IHVwIGxhdGVyIHdpdGggbW9yZQorICAgICAgICBwYXRjaGVzIHRvIGRl
cGxveSB0aGlzIHRvb2wgdGhyb3VnaG91dCB0aGUgVk0uCisKKyAgICAgICAgMS4gSW50cm9kdWNl
ZCBJbnRlZ3JpdHkgYXVkaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgc2V2
ZXJhbAorICAgICAgICAgICBBdWRpdExldmVsczoKKyAgICAgICAgICAgICAgIE5vbmUgLSBkb24n
dCBkbyBhbnkgYXVkaXRzLgorICAgICAgICAgICAgICAgTWluaW1hbCAtIGRvIGEgbWluaW1hbCBx
dWljayBhdWRpdCAobWluaW1pemUgcGVyZiBpbXBhY3QpLgorICAgICAgICAgICAgICAgRnVsbCAt
IGRvIGEgZnVsbCBhdWRpdCBvZiB0aGUgbWFueSBhc3BlY3RzIG9mIGEgY2VsbC4KKyAgICAgICAg
ICAgICAgIFJhbmRvbSAtIHJhbmRvbWx5IGRvIGEgZnVsbCBhdWRpdCB3aXRoIGEgcHJvYmFiaWxp
dHkgZGljdGF0ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uczo6cmFuZG9tSW50ZWdy
aXR5QXVkaXRSYXRlKCkgYmV0d2VlbiAwLjAgKG5ldmVyIGF1ZGl0KSBhbmQKKyAgICAgICAgICAg
ICAgICAgICAgMS4wIChhdWRpdCBhdCBldmVyeSBjaGFuY2UpLgorCisgICAgICAgICAgIFRoZSBk
ZWZhdWx0IEF1ZGl0TGV2ZWwgZm9yIERlYnVnIGJ1aWxkcyBpcyBSYW5kb20uCisgICAgICAgICAg
IFRoZSBkZWZhdWx0IEF1ZGl0TGV2ZWwgZm9yIFJlbGVhc2UgYnVpbGRzIGlzIE5vbmUuCisgICAg
ICAgICAgIFRoZSBkZWZhdWx0IE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlz
IDAuMDUuCisKKyAgICAgICAgICAgSG93IGZ1bGwgYXVkaXRzIHdvcms/CisgICAgICAgICAgID09
PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgIFRoZSBmdWxsIGF1ZGl0IHVzZXMgdGhlIFZN
SW5zcGVjdG9yOjp2ZXJpZnlDZWxsKCkgdGVtcGxhdGUgZnVuY3Rpb24gdG8gZG8gaXRzCisgICAg
ICAgICAgIGpvYi4gIFRoZSByZWFzb24gZm9yIGtlZXBpbmcgdGhpcyBzZXBhcmF0ZSBpcyB0byBh
bGxvdyB0aGUgdGVtcGxhdGUgZnVuY3Rpb24KKyAgICAgICAgICAgdG8gYmUgdXNlZCBsYXRlciBm
b3IgZGVidWcgY2hlY2tzIHRoYXQgd2FudCB0byB0YWtlIHNvbWUgY3VzdG9tIGFjdGlvbiBvbgor
ICAgICAgICAgICB2ZXJpZmljYXRpb24gZmFpbHVyZSBpbnN0ZWFkIG9mIGNyYXNoaW5nIHdpdGgg
YSBSRUxFQVNFX0FTU0VSVC4KKworICAgICAgICAgICBGdWxsIGF1ZGl0IG9mIGEgY2VsbCBwb2lu
dGVyIGluY2x1ZGVzOgorICAgICAgICAgICBhLiBWZXJpZnkgdGhhdCBhIGNlbGwgZGVzaWduYXRl
ZCBhcyBhIExhcmdlQWxsb2NhdGlvbiBpcyBpbiB0aGUgaGVhcCdzCisgICAgICAgICAgICAgIHNl
dCBvZiBMYXJnZUFsbG9jYXRpb25zLgorCisgICAgICAgICAgIGIuIFZlcmlmeSB0aGF0IGEgY2Vs
bCBub3QgZGVzaWduYXRlZCBhcyBhIExhcmdlQWxsb2NhdGlvbiBpcyBhY3R1YWxseSBpbiBpdHMK
KyAgICAgICAgICAgICAgTWFya2VkQmxvY2sncyBib3VuZHMuCisKKyAgICAgICAgICAgYy4gVmVy
aWZ5IHRoYXQgdGhlIGNlbGwncyBjb250YWluZXIgKExhcmdlQWxsb2NhdGlvbiAvIE1hcmtlZEJs
b2NrKSBhY3R1YWxseQorICAgICAgICAgICAgICBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IFZNLgor
CisgICAgICAgICAgIGQuIFZlcmlmeSB0aGF0IGEgY2VsbCBpbiBhIE1hcmtlZEJsb2NrIGlzIHBy
b3Blcmx5IGFsaWduZWQgb24gdGhlIGJsb2NrJ3MKKyAgICAgICAgICAgICAgYWxsb2NhdGlvbiB1
bml0IHNpemUuCisKKyAgICAgICAgICAgZS4gSWYgdGhlIGNlbGwgaXMgbm90IGFuIEltbXV0YWJs
ZUJ1dHRlcmZseSwgdmVyaWZ5IHRoYXQgaXQgaXMgbm90IGxvY2F0ZWQgaW4KKyAgICAgICAgICAg
ICAgdGhlIEdpZ2FjYWdlLgorCisgICAgICAgICAgIGYuIFZlcmlmeSB0aGF0IHRoZSBjZWxsJ3Mg
SlNUeXBlIG1hdGNoZXMgaXRzIFN0cnVjdHVyZUJsb2IncyBKU1R5cGUuCisKKyAgICAgICAgICAg
Zy4gVmVyaWZ5IHRoYXQgdGhlIGNlbGwgc2l6ZSBhcyBkaWN0YXRlZCBieSB0aGUgY2VsbCBDbGFz
c0luZm8gZG9lcyBub3QgZXhjZWVkCisgICAgICAgICAgICAgIHRoZSBzaXplIG9mIHRoZSBhbGxv
Y2F0aW9uIHVuaXQgc2l6ZSAoYXMgZXhwZWN0ZWQgYnkgdGhlIGNvbnRhaW5lcgorICAgICAgICAg
ICAgICBNYXJrZWRCbG9jayBvciBMYXJnZUFsbG9jYXRpb24pLgorCisgICAgICAgICAgICAgIFNv
bWUgY2VsbHMgYXJlIGR5bmFtaWNhbGx5IHNpemUgKHNlZSBpc0R5bmFtaWNhbGx5U2l6ZWRUeXBl
KCkpLiAgRm9yIHRoZXNlCisgICAgICAgICAgICAgIGNlbGxzLCB3ZSBjb21wdXRlIHRoZWlyIHNp
emVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgc2l6ZSBkb2VzIG5vdCBleGNlZWQgdGhlCisgICAgICAg
ICAgICAgIGFsbG9jYXRpb24gdW5pdCBzaXplLgorCisgICAgICAgICAgIGguIElmIGEgY2VsbCBo
YXMgYSBidXR0ZXJmbHksIHZlcmlmeSB0aGF0IHRoZSBidXR0ZXJmbHkgaXMgaW4gaXRzIHRoZSBK
U1ZhbHVlCisgICAgICAgICAgICAgIEdpZ2FjYWdlLgorCisgICAgICAgICAgIFdlIGNhbiBhZGQg
bW9yZSB2ZXJpZmljYXRpb25zIGxhdGVyLCBvciBtYWtlIHNvbWUgdGhlc2UgbW9yZSByb2J1c3Qs
IGJ1dCB0aGlzCisgICAgICAgICAgIGlzIGEgc3RhcnQgZm9yIG5vdy4KKworICAgICAgICAgICBI
b3cgcmFuZG9tIGF1ZGl0cyB3b3JrPworICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09
CisgICAgICAgICAgIFJhbmRvbSBhdWRpdHMgYXJlIHRyaWdnZXJlZCBieSB0aGUgbV90cmlnZ2Vy
Qml0cyBiaXRzIGluIFZNOjptX2ludGVncml0eVJhbmRvbS4KKyAgICAgICAgICAgbV90cmlnZ2Vy
Qml0cyBpcyBhIDY0LWJpdCBiaXRmaWVsZC4KKworICAgICAgICAgICBJZiBPcHRpb25zOjpyYW5k
b21JbnRlZ3JpdHlBdWRpdFJhdGUoKSBpcyAwLCBtX3RyaWdnZXJCaXRzIHdpbGwgYWx3YXlzIGJl
IDAsCisgICAgICAgICAgIGFuZCBubyBhdWRpdHMgd2lsbCBiZSBkb25lLgorCisgICAgICAgICAg
IElmIE9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpIGlzIG5vbi16ZXJvLCBtX3Ry
aWdnZXJCaXRzIHdpbGwgYmUKKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYXMgZm9sbG93czoKKwor
ICAgICAgICAgICAgICAgIHwgMSByZWxvYWQgYml0IHwgLi4uIDYzIHRyaWdnZXIgYml0cyAuLi4g
fAorCisgICAgICAgICAgIFRoZSByZWxvYWQgYml0IGlzIGFsd2F5cyBzZXQgKG1vcmUgZGV0YWls
cyBiZWxvdykuCisgICAgICAgICAgIEVhY2ggb2YgdGhlIDYzIHRyaWdnZXIgYml0cyBhcmUgcmFu
ZG9tbHkgc2V0IGRlcGVuZGluZyBpZiB0aGUgZm9sbG93aW5nIGlzIHRydWUKKyAgICAgICAgICAg
Zm9yIHRoZSBiaXQ6CisKKyAgICAgICAgICAgICAgICBWTTo6cmFuZG9tKCkgPD0gT3B0aW9uczo6
cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCkgKiBVSU5UX01BWAorCisgICAgICAgICAgIFdoZW4g
SW50ZWdyaXR5OjphdWRpdENlbGwoKSBpcyBjYWxsZWQsIHdlIHRha2UgdGhlIGJvdHRvbSBiaXQg
YXMgdGhlIHRyaWdnZXIKKyAgICAgICAgICAgYml0IGZvciB0aGUgY3VycmVudCBjZWxsLCBhbmQg
c2hpZnRzIHRoZSByZXN0IGRvd24gYnkgMS4KKworICAgICAgICAgICBJZiBtX3RyaWdnZXJCaXRz
IGlzIG5vbi1udWxsIGFmdGVyIHRoZSBzaGlmdCwgdGhlIHRha2VuIHRyaWdnZXIgYml0IHdpbGwg
ZGljdGF0ZQorICAgICAgICAgICB3aGV0aGVyIHdlIGRvIGEgZnVsbCBhdWRpdCBvbiB0aGUgY3Vy
cmVudCBjZWxsIG9yIG5vdC4KKworICAgICAgICAgICBPbmNlIHRoZSByZWxvYWQgYml0IHJlYWNo
ZXMgdGhlIGJvdHRvbSwgd2UgY2FsbCBhIHJlbG9hZCBmdW5jdGlvbiB0bworICAgICAgICAgICBy
ZS1pbml0aWFsaXplIG1fdHJpZ2dlckJpdHMuICBUaGUgcmVsb2FkIGZ1bmN0aW9uIGFsc28gcmV0
dXJucyBhIGJvb2wKKyAgICAgICAgICAgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHRyaWdnZXIgYSBm
dWxsIGF1ZGl0IG9mIHRoZSBjdXJyZW50IGNlbGwuCisKKyAgICAgICAgICAgV2l0aCB0aGlzIHNj
aGVtZSwgd2Ugb25seSBuZWVkIHRvIGNhbGwgdGhlIHJlbG9hZCBmdW5jdGlvbiBvbmNlIGV2ZXJ5
IDY0IGNhbGxzCisgICAgICAgICAgIHRvIEludGVncml0eTo6YXVkaXRDZWxsKCksIGFuZCBjYW4g
ZWZmaWNpZW50bHkgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdHJpZ2dlcgorICAgICAgICAgICB0aGUg
YXVkaXQgdGhlIG90aGVyIDYzIHRpbWVzIHdpdGggdGhlIHByb2JhYmlsaXR5IHNwZWNpZmllZCBp
bgorICAgICAgICAgICBPcHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKS4KKworICAg
ICAgICAyLiBFbWJlZGRlZCB0aGUgQysrIGNsYXNzIHNpemUgb2YgSlNDZWxscyBpbnRvIHRoZWly
IENsYXNzSW5mby4gIFRoaXMgaXMgdXNlZCBpbgorICAgICAgICAgICB0aGUgZnVsbCBhdWRpdHMg
dG8gdmVyaWZ5IGNlbGwgc2l6ZXMuCisKKyAgICAgICAgMy4gQWRkZWQgaXNEeW5hbWljYWxseVNp
emVkVHlwZSgpIHRvIGNoZWNrIGlmIGEgSlNUeXBlIGhhcyBhIGR5bmFtaWMgc2l6ZSBhbGxvY2F0
aW9uCisgICAgICAgICAgIGkuZS4gdGhlIHNpemUgb2YgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBp
cyBub3QgZGV0ZXJtaW5lZCBieSB0aGUgc3RhdGljIEMrKworICAgICAgICAgICBzaXplIG9mIGl0
cyBjbGFzcywgYnV0IHJhdGhlciwgZGVwZW5kcyBvbiBzb21lIHJ1bnRpbWUgdmFyaWFibGUuCisK
KyAgICAgICAgNC4gTWFkZSB0aGUgVk1JbnNwZWN0b3IgYSBmcmllbmQgb2Ygc2V2ZXJhbCBjbGFz
c2VzIHNvIHRoYXQgaXQgY2FuIGFjY2VzcyB0aGVpcgorICAgICAgICAgICBwcml2YXRlIG1ldGhv
ZHMgYW5kIGZpZWxkcy4KKworICAgICAgICA1LiBNb3ZlZCB0aGUgaW5saW5lIGZ1bmN0aW9uIEpT
QmlnSW50OjphbGxvY2F0aW9uU2l6ZSgpIGZyb20gQmlnSW50LmNwcCB0byBpdHMKKyAgICAgICAg
ICAgaGVhZGVyIGZpbGUgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGluIFZNSW5zcGVjdG9yOjp2ZXJp
ZnlDZWxsU2l6ZSgpLgorCisgICAgICAgIDYuIEdhdmUgdGhlIEpTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0KCkgaXRzIG93biBKU1R5cGUgc28gdGhhdCB3ZSBjYW4gaWRlbnRpZnkgaXQKKyAgICAgICAg
ICAgYXMgYSBkeW5hbWljYWxseSBzaXplZCBvYmplY3QuCisKKyAgICAgICAgNy4gSW5jcmVhc2Vk
IHRoZSByYW5kb21uZXNzIG9mIFZNOjpyYW5kb20oKSAod2hpY2ggaXMgaW1wbGVtZW50ZWQgd2l0
aCBXZWFrUmFuZG9tKQorICAgICAgICAgICBieSByZS1zZWVkaW5nIGl0IHdpdGggYSBjcnlwdG9n
cmFwaGljYWxseSByYW5kb20gbnVtYmVyIGVhY2ggR0MuCisKKyAgICAgICAgOC4gQ2FsbGVkIElu
dGVncml0eTo6YXVkaXRDZWxsKCkgb24gU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxp
YXJ5KCkncyBjZWxsCisgICAgICAgICAgIGFzIGFuIGV4YW1wbGUgdXNlIG9mIGF1ZGl0Q2VsbCgp
LiAgTW9yZSB1c2VzIHdpbGwgYmUgYWRkZWQgaW4gbGF0ZXIgcGF0Y2hlcyB0bworICAgICAgICAg
ICBmb2xsb3cuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OnJ1bkJlZ2lu
UGhhc2UpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcnkpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0pTQmlnSW50LmNwcDoKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFsbG9j
YXRpb25TaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgICogcnVudGltZS9K
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmNwcDoK
KyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU1R5cGUu
aDoKKyAgICAgICAgKEpTQzo6aXNEeW5hbWljYWxseVNpemVkVHlwZSk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6cmFuZG9t
KToKKyAgICAgICAgKEpTQzo6Vk06OmludGVncml0eVJhbmRvbSk6CisgICAgICAgICogdG9vbHMv
SW50ZWdyaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0eTo6UmFuZG9tOjpS
YW5kb20pOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OlJhbmRvbTo6cmVsb2FkQW5kQ2hlY2tT
aG91bGRBdWRpdFNsb3cpOgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbEZ1bGx5
KToKKyAgICAgICAgKEpTQzo6SW50ZWdyaXR5OjphdWRpdENlbGxNaW5pbWFsbHlTbG93KToKKyAg
ICAgICAgKiB0b29scy9JbnRlZ3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkludGVncml0
eTo6YXVkaXRDZWxsKToKKyAgICAgICAgKiB0b29scy9JbnRlZ3JpdHlJbmxpbmVzLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpJbnRlZ3JpdHk6OlJhbmRvbTo6c2hvdWxkQXVkaXQpOgorICAgICAg
ICAoSlNDOjpJbnRlZ3JpdHk6OmF1ZGl0Q2VsbE1pbmltYWxseSk6CisgICAgICAgIChKU0M6Oklu
dGVncml0eTo6YXVkaXRDZWxsUmFuZG9tbHkpOgorICAgICAgICAqIHRvb2xzL1ZNSW5zcGVjdG9y
Lmg6CisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjp1bnVzZWRWZXJpZmllcik6CisgICAgICAg
IChKU0M6OlZNSW5zcGVjdG9yOjp2ZXJpZnlDZWxsU2l6ZSk6CisgICAgICAgICogdG9vbHMvVk1J
bnNwZWN0b3JJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6dmVy
aWZ5Q2VsbFNpemUpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6dmVyaWZ5Q2VsbCk6CisK
IDIwMTktMDktMjMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIExh
enkgSlNHbG9iYWxPYmplY3QgcHJvcGVydHkgbWF0ZXJpYWxpemF0aW9uIHNob3VsZCBub3QgdXNl
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAwLDYgKzEwMDAsMTEgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIHJ1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKICAgICBydW50aW1lL1dyaXRlQmFycmllcklubGluZXMuaAogCisgICAgdG9vbHMvSW50
ZWdyaXR5LmgKKyAgICB0b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgKKyAgICB0b29scy9WTUluc3Bl
Y3Rvci5oCisgICAgdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgKKwogICAgIHdhc20vV2FzbUNh
cGFiaWxpdGllcy5oCiAgICAgd2FzbS9XYXNtQ29kZUJsb2NrLmgKICAgICB3YXNtL1dhc21Db21w
aWxhdGlvbk1vZGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8KIC8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC05ODksNiArOTg5LDcgQEAgdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiB0b29s
cy9IZWFwVmVyaWZpZXIuY3BwCit0b29scy9JbnRlZ3JpdHkuY3BwCiB0b29scy9KU0RvbGxhclZN
LmNwcAogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKIHRvb2xzL1ZNSW5zcGVjdG9yLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MDI3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEwLDYgKzE5MTAsOSBAQAogCQlGRUEzQkJBQzIx
MkM5N0NCMDBFOTNBRDEgLyogREZHQ0ZHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRUEzQkJBQjIxMkM5N0NCMDBFOTNBRDEgLyogREZHQ0ZHLmggKi87
IH07CiAJCUZFQjUxRjZDMUE5N0I2ODgwMDFGOTIxQyAvKiBSZWdyZXNzMTQxODA5Lm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVCNTFGNkIxQTk3QjY4
ODAwMUY5MjFDIC8qIFJlZ3Jlc3MxNDE4MDkubW0gKi87IH07CiAJCUZFQjU4QzE1MTg3QjhCMTYw
MDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQjU4QzEzMTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRUM1Nzk3MzIzMTA1QjUxMDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUM1Nzk3MjIz
MTA1QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi87IH07CisJCUZFQzU3OTc2
MjMxMDVGNEUwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3Jp
dHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RUM1Nzk3ODIzMTA5NTRDMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVDNTc5NzcyMzEwOTU0QjAwQkNB
ODNGIC8qIEludGVncml0eUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRUNCOEIyNzFEMjVCQjg1MDA2RjI0NjMgLyogRnVuY3Rpb25P
dmVycmlkZXNUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFQ0I4QjI1MUQyNUJCNkUwMDZGMjQ2MyAvKiBGdW5jdGlvbk92ZXJyaWRlc1Rlc3Qu
Y3BwICovOyB9OwogCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDI4N0IxMTVF
QzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRj
aGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVE
OTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTUxMzMsNiArNTEzNiwxMCBAQAogCQlGRUI1
MUY2QjFBOTdCNjg4MDAxRjkyMUMgLyogUmVncmVzczE0MTgwOS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlZ3Jlc3MxNDE4MDkubW07IHBhdGggPSBBUEkvdGVz
dHMvUmVncmVzczE0MTgwOS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVCNThD
MTIxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJvckhhbmRsaW5nU2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRUI1OEMxMzE4N0I4QjE2MDA5OEVGMEIgLyogRXJyb3JI
YW5kbGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9ySGFu
ZGxpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRUM1Nzk3MjIzMTA1
QjQ4MDBCQ0E4M0YgLyogVk1JbnNwZWN0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZNSW5zcGVjdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRUM1Nzk3NDIzMTA1RjQyMDBCQ0E4M0YgLyogSW50ZWdyaXR5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVncml0eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3JpdHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdyaXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFQzU3OTc3MjMxMDk1NEIwMEJDQTgzRiAvKiBJbnRlZ3Jp
dHlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVncml0eUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVDQjhCMjUxRDI1QkI2RTAw
NkYyNDYzIC8qIEZ1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwOyBwYXRoID0gQVBJL3Rl
c3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZFQ0I4QjI2MUQyNUJCNkUwMDZGMjQ2MyAvKiBGdW5jdGlvbk92ZXJyaWRlc1Rlc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRnVuY3Rpb25PdmVycmlkZXNUZXN0Lmg7
IHBhdGggPSBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFQ0I4QjI5MUQyNUNBQkIwMDZGMjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0
aW9uLW92ZXJyaWRlcy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9
ICJ0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyI7IHBhdGggPSAiQVBJL3Rlc3RzL3Rlc3Rh
cGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc1ODAsNiArNzU4Nyw5IEBACiAJCQkJRkVBMEM0MDExQ0REN0QwRTAwNDgxOTkxIC8qIEZ1bmN0
aW9uV2hpdGVsaXN0LmggKi8sCiAJCQkJRkUxQkQwMjIxRTcyMDUyRjAwMTM0QkM5IC8qIEhlYXBW
ZXJpZmllci5jcHAgKi8sCiAJCQkJRkUxQkQwMjMxRTcyMDUyRjAwMTM0QkM5IC8qIEhlYXBWZXJp
Zmllci5oICovLAorCQkJCUZFQzU3OTc0MjMxMDVGNDIwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuY3Bw
ICovLAorCQkJCUZFQzU3OTc1MjMxMDVGNDMwMEJDQTgzRiAvKiBJbnRlZ3JpdHkuaCAqLywKKwkJ
CQlGRUM1Nzk3NzIzMTA5NTRCMDBCQ0E4M0YgLyogSW50ZWdyaXR5SW5saW5lcy5oICovLAogCQkJ
CUZFMzg0RUUxMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmNwcCAqLywKIAkJCQlGRTM4
NEVFMjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oICovLAogCQkJCTg2QjU4MjJDMTRE
MjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLywKQEAgLTc1ODgsNiArNzU5OCw3
IEBACiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICov
LAogCQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCiAJ
CQkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCisJCQkJRkVD
NTc5NzIyMzEwNUI0ODAwQkNBODNGIC8qIFZNSW5zcGVjdG9ySW5saW5lcy5oICovLAogCQkJKTsK
IAkJCXBhdGggPSB0b29sczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTk2LDYg
KzkwMDcsNyBAQAogCQkJCTBGRUMzQzYwMUYzNzlGNTMwMEY1OUI2QyAvKiBDYWdlZEJhcnJpZXJQ
dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDYWxs
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENh
bGxFZGdlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRUM1Nzk3ODIzMTA5NTRDMDBCQ0E4M0YgLyog
SW50ZWdyaXR5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk2REFBMkIxRTg5Q0NENjAw
NURGMjRBIC8qIENhbGxlZUJpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIw
NUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTNCQkE4MjEy
QjY1NTkwMEU5M0FEMSAvKiBDYWxsRnJhbWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk0
ODgsNiArOTUwMCw3IEBACiAJCQkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4QTdCRjAxQjgyOTc1QTAwMkQ5MTU3IC8qIElu
bGluZUNhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTYxN0YwQjcxQzAwQUJC
MjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkVDNTc5NzYy
MzEwNUY0RTAwQkNBODNGIC8qIEludGVncml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAz
MjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTkzQ0Y3RjE4NDAzNjJDMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTkzQ0Y4NzE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTIwLDYgKzk5MzMsNyBAQAogCQkJCTBGRjcy
OUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUZFQzU3OTczMjMxMDVCNTEwMEJD
QTgzRiAvKiBWTUluc3BlY3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUMw
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkIxMDU4QzE2NzU0ODMzMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkIxMDU4RTE2NzU0ODNBMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0
U2l0ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKICNpbmNsdWRlICJXZWFrTWFwSW1w
bElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg+CkBAIC0xMjY4LDYgKzEyNjksOSBA
QCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5CZWdpblBoYXNlKEdDCiAKICAgICBtX2JlZm9y
ZUdDID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAKKyAgICBpZiAoIU9wdGlvbnM6OnNlZWRPZlZN
UmFuZG9tRm9yRnV6emVyKCkpCisgICAgICAgIHZtKCkucmFuZG9tKCkuc2V0U2VlZChjcnlwdG9n
cmFwaGljYWxseVJhbmRvbU51bWJlcigpKTsgLy8gUGlnZ3kgYmFjayBvbiB0aGUgR0MgdG8gcmFu
ZG9taXplIGEgYml0LgorCiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRh
dGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCAqbV9jb2xs
ZWN0aW9uU2NvcGUsICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2
aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSGVhcEFuYWx5
emVyLmgiCiAjaW5jbHVkZSAiSGVhcENlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSGVhcFByb2Zp
bGVyLmgiCisjaW5jbHVkZSAiSW50ZWdyaXR5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JB
dXhpbGlhcgogICAgIAogICAgICAgICBKU0NlbGwqIGpzQ2VsbCA9IHN0YXRpY19jYXN0PEpTQ2Vs
bCo+KGhlYXBDZWxsKTsKICAgICAgICAgdmFsaWRhdGVDZWxsKGpzQ2VsbCk7CisgICAgICAgIElu
dGVncml0eTo6YXVkaXRDZWxsKHZtKCksIGpzQ2VsbCk7CiAgICAgICAgIAogICAgICAgICBqc0Nl
bGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OlBvc3NpYmx5R3JleSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNTAyNzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMTg1LDcgKzE4NSw4IEBAIHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICZDbGFz
c05hbWU6OmVzdGltYXRlZFNpemUsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6dmlzaXRPdXRwdXRD
b25zdHJhaW50cywgXAogICAgIH0sIFwKLSAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdl
VHlwZQorICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlLCBcCisgICAgc2l6ZW9m
KENsYXNzTmFtZSkKIAogc3RydWN0IENsYXNzSW5mbyB7CiAgICAgLy8gQSBzdHJpbmcgZGVub3Rp
bmcgdGhlIGNsYXNzIG5hbWUuIEV4YW1wbGU6ICJXaW5kb3ciLgpAQCAtMjIxLDYgKzIyMiw3IEBA
IHN0cnVjdCBDbGFzc0luZm8gewogICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxlOwogCiAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VUeXBlOworICAgIHVuc2lnbmVkIHN0YXRp
Y0NsYXNzU2l6ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgJKHJldmlzaW9uIDI1MDI3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBt
X21pbkNhcGFjaXR5OyAvLyBUaGUgbWF4IG9mIHRoaXMgYW5kIGxlbmd0aCBkZXRlcm1pbmVzIHRo
ZSBjYXBhY2l0eSBvZiB0aGlzIG9iamVjdC4gSXQgbWF5IGJlIHRoZSBhY3R1YWwgY2FwYWNpdHks
IG9yIG1heWJlIHNvbWV0aGluZyBzbWFsbGVyLiBXZSBhcnJhbmdlIGl0IHRoaXMgd2F5IHRvIGJl
IGtpbmQgdG8gdGhlIEpJVHMuCiAgICAgdXNpbmcgTWFwcGVkQXJndW1lbnRzID0gQ2FnZWRCYXJy
aWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1hcHBlZEFyZ3VtZW50cyBt
X21hcHBlZEFyZ3VtZW50czsgLy8gSWYgbm9uLW51bGwsIGl0IG1lYW5zIHRoYXQgbGVuZ3RoLCBj
YWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBwcm9wZXJ0aWVzLgorCisg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lv
biAyNTAyNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE3
IENhaW8gTGltYSA8dGljYWlvbGltYUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTgzLDEyICs4Myw2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3Jl
YXRlWmVybyhWTSYgdm0pCiAgICAgcmV0dXJuIHplcm9CaWdJbnQ7CiB9CiAKLWlubGluZSBzaXpl
X3QgSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBzaXpl
X3Qgc2l6ZVdpdGhQYWRkaW5nID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihzaXpl
X3QpPihzaXplb2YoSlNCaWdJbnQpKTsKLSAgICByZXR1cm4gc2l6ZVdpdGhQYWRkaW5nICsgbGVu
Z3RoICogc2l6ZW9mKERpZ2l0KTsKLX0KLQogSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVX
aXRoTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmgJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQmlnSW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCBwcml2YXRlOgog
CiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmlnSW50KiB4KTsK
IAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBpbmxpbmUgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpOwog
ICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihEaWdpdCk+KHNpemVvZihKU0Jp
Z0ludCkpOwpAQCAtMjQ5LDggKzI0OSwxNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgdW5zaWdu
ZWQgbV9sZW5ndGg7CiAgICAgYm9vbCBtX3NpZ24geyBmYWxzZSB9OworCisgICAgZnJpZW5kIGNs
YXNzIFZNSW5zcGVjdG9yOwogfTsKIAoraW5saW5lIHNpemVfdCBKU0JpZ0ludDo6YWxsb2NhdGlv
blNpemUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCBzaXplV2l0aFBhZGRpbmcgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHNpemVfdCk+KHNpemVvZihKU0JpZ0ludCkp
OworICAgIHJldHVybiBzaXplV2l0aFBhZGRpbmcgKyBsZW5ndGggKiBzaXplb2YoRGlnaXQpOwor
fQorCiBpbmxpbmUgSlNCaWdJbnQqIGFzQmlnSW50KEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgQVNT
RVJUKHZhbHVlLmFzQ2VsbCgpLT5pc0JpZ0ludCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaAkocmV2
aXNpb24gMjUwMjc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAogICAgIEFic3RyYWN0TW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQoKSB7IHJldHVy
biBtX21vZHVsZVJlY29yZC5nZXQoKTsgfQpAQCAtMTAzLDYgKzEwMyw4IEBAIHByaXZhdGU6CiAg
ICAgRXhwb3J0TWFwIG1fZXhwb3J0czsKICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9uYW1lczsK
ICAgICBXcml0ZUJhcnJpZXI8QWJzdHJhY3RNb2R1bGVSZWNvcmQ+IG1fbW9kdWxlUmVjb3JkOwor
CisgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAJKHJldmlzaW9u
IDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTQsNiArOTQsNyBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgSlNDCiAgICAgQ0FTRShNb2R1bGVFbnZpcm9ubWVudFR5cGUpCiAgICAgQ0FTRShTdHJp
Y3RFdmFsQWN0aXZhdGlvblR5cGUpCiAgICAgQ0FTRShXaXRoU2NvcGVUeXBlKQorICAgIENBU0Uo
TW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZSkKICAgICBDQVNFKFJlZ0V4cE9iamVjdFR5cGUpCiAg
ICAgQ0FTRShQcm94eU9iamVjdFR5cGUpCiAgICAgQ0FTRShKU0dlbmVyYXRvclR5cGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjUwMjc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA2
LDYgKzEwNiw3IEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgV2l0aFNjb3BlVHlwZSwK
ICAgICAvLyBFbmQgSlNTY29wZSB0eXBlcy4KIAorICAgIE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5
cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCiAgICAgSlNH
ZW5lcmF0b3JUeXBlLApAQCAtMTM5LDYgKzE0MCwxOCBAQCBpbmxpbmUgY29uc3RleHByIGJvb2wg
aXNUeXBlZEFycmF5VHlwZShKCiAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlw
ZSkgLSBGaXJzdFR5cGVkQXJyYXlUeXBlKSA8IE51bWJlck9mVHlwZWRBcnJheVR5cGVzRXhjbHVk
aW5nRGF0YVZpZXc7CiB9CiAKK2lubGluZSBjb25zdGV4cHIgYm9vbCBpc0R5bmFtaWNhbGx5U2l6
ZWRUeXBlKEpTVHlwZSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEJpZ0ludFR5cGUKKyAgICAg
ICAgfHwgdHlwZSA9PSBEaXJlY3RBcmd1bWVudHNUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gRmlu
YWxPYmplY3RUeXBlCisgICAgICAgIHx8IHR5cGUgPT0gTGV4aWNhbEVudmlyb25tZW50VHlwZQor
ICAgICAgICB8fCB0eXBlID09IE1vZHVsZUVudmlyb25tZW50VHlwZQorICAgICAgICB8fCB0eXBl
ID09IE1vZHVsZU5hbWVzcGFjZU9iamVjdFR5cGUpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MDMsNiArNTAzLDExIEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0
ZURlcGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKCFPcHRpb25zOjp1c2VDb2RlQ2FjaGUoKSkK
ICAgICAgICAgT3B0aW9uczo6ZGlza0NhY2hlUGF0aCgpID0gbnVsbHB0cjsKKworICAgIGlmIChP
cHRpb25zOjpyYW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA8IDApCisgICAgICAgIE9wdGlvbnM6
OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpID0gMDsKKyAgICBlbHNlIGlmIChPcHRpb25zOjpy
YW5kb21JbnRlZ3JpdHlBdWRpdFJhdGUoKSA+IDEuMCkKKyAgICAgICAgT3B0aW9uczo6cmFuZG9t
SW50ZWdyaXR5QXVkaXRSYXRlKCkgPSAxLjA7CiB9CiAKIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6
ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJ
KHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw2ICs0MDksNyBAQCBlbnVtIGNsYXNzIE9w
dGlvblR5cGVJRCA6IHVpbnQ4X3QgewogICAgIFwKICAgICB2KEJvb2wsIGFsd2F5c0dlbmVyYXRl
UENUb0NvZGVPcmlnaW5NYXAsIGZhbHNlLCBOb3JtYWwsICJUaGlzIHdpbGwgbWFrZSBzdXJlIHdl
IGFsd2F5cyBnZW5lcmF0ZSBhIFBDVG9Db2RlT3JpZ2luTWFwIGZvciBKSVRlZCBjb2RlLiIpIFwK
ICAgICBcCisgICAgdihEb3VibGUsIHJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSwgMC4wNSwgTm9y
bWFsLCAiUHJvYmFiaWxpdHkgb2YgcmFuZG9tIGludGVncml0eSBhdWRpdHMgWzAuMCAtIDEuMF0i
KSBcCiAgICAgdihCb29sLCB2ZXJpZnlIZWFwLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAz
LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCkBAIC00MzEsNiArNDMyLDcgQEAgZW51bSBjbGFz
cyBPcHRpb25UeXBlSUQgOiB1aW50OF90IHsKICAgICB2KFVuc2lnbmVkLCBmaXJlT1NSRXhpdEZ1
enpBdCwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgZmlyZU9TUkV4aXRG
dXp6QXRPckFmdGVyLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCisgICAgdihVbnNpZ25l
ZCwgc2VlZE9mVk1SYW5kb21Gb3JGdXp6ZXIsIDAsIE5vcm1hbCwgIjAgbWVhbnMgbm90IGZ1enpp
bmcgdGhpczsgdXNlIGEgY3J5cHRvZ3JhcGhpY2FsbHkgcmFuZG9tIHNlZWQiKSBcCiAgICAgdihC
b29sLCB1c2VSYW5kb21pemluZ0Z1enplckFnZW50LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihVbnNpZ25lZCwgc2VlZE9mUmFuZG9taXppbmdGdXp6ZXJBZ2VudCwgMSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihCb29sLCBkdW1wUmFuZG9taXppbmdGdXp6ZXJBZ2VudFByZWRp
Y3Rpb25zLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjUwMjc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4Niw2
ICs3ODYsOCBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogCiAgICAg
dWludDMyX3QgbV9wcm9wZXJ0eUhhc2g7CisKKyAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSw4IEBAIFZNOjpWTShWTVR5
cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBVU0UoQ0YpCiAgICAgLCBtX3J1bkxv
b3AoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpKQogI2VuZGlmIC8vIFVTRShDRikKKyAgICAsIG1fcmFu
ZG9tKE9wdGlvbnM6OnNlZWRPZlZNUmFuZG9tRm9yRnV6emVyKCkgPyBPcHRpb25zOjpzZWVkT2ZW
TVJhbmRvbUZvckZ1enplcigpIDogY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKKyAg
ICAsIG1faW50ZWdyaXR5UmFuZG9tKCp0aGlzKQogICAgICwgaGVhcCgqdGhpcywgaGVhcFR5cGUp
CiAgICAgLCBmYXN0TWFsbG9jQWxsb2NhdG9yKG1ha2VVbmlxdWU8RmFzdE1hbGxvY0FsaWduZWRN
ZW1vcnlBbGxvY2F0b3I+KCkpCiAgICAgLCBwcmltaXRpdmVHaWdhY2FnZUFsbG9jYXRvcihtYWtl
VW5pcXVlPEdpZ2FjYWdlQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4oR2lnYWNhZ2U6OlByaW1pdGl2
ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI1MDI3NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIKICNp
bmNsdWRlICJGdXp6ZXJBZ2VudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbnRl
Z3JpdHkuaCIKICNpbmNsdWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJJc29DZWxsU2V0Lmgi
CiAjaW5jbHVkZSAiSXNvU3Vic3BhY2UuaCIKQEAgLTMxMCw2ICszMTEsOSBAQCBwdWJsaWM6CiAg
ICAgLy8gR2xvYmFsIG9iamVjdCBpbiB3aGljaCBleGVjdXRpb24gYmVnYW4uCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNHbG9iYWxPYmplY3QqIHZtRW50cnlHbG9iYWxPYmplY3QoY29uc3QgQ2Fs
bEZyYW1lKikgY29uc3Q7CiAKKyAgICBXZWFrUmFuZG9tJiByYW5kb20oKSB7IHJldHVybiBtX3Jh
bmRvbTsgfQorICAgIEludGVncml0eTo6UmFuZG9tJiBpbnRlZ3JpdHlSYW5kb20oKSB7IHJldHVy
biBtX2ludGVncml0eVJhbmRvbTsgfQorCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG5leHRJRCgp
OwogCkBAIC0zMjIsNiArMzI2LDkgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29w
UmVmPiBtX3J1bkxvb3A7CiAjZW5kaWYKIAorICAgIFdlYWtSYW5kb20gbV9yYW5kb207CisgICAg
SW50ZWdyaXR5OjpSYW5kb20gbV9pbnRlZ3JpdHlSYW5kb207CisKIHB1YmxpYzoKICAgICBIZWFw
IGhlYXA7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdy
aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkludGVncml0eUlubGluZXMuaCIKKworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNpbmNsdWRl
ICJWTUluc3BlY3RvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgSW50
ZWdyaXR5IHsKKworbmFtZXNwYWNlIHsKK2NvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
K30KKworUmFuZG9tOjpSYW5kb20oVk0mIHZtKQoreworICAgIHJlbG9hZEFuZENoZWNrU2hvdWxk
QXVkaXRTbG93KHZtKTsKK30KKworYm9vbCBSYW5kb206OnJlbG9hZEFuZENoZWNrU2hvdWxkQXVk
aXRTbG93KFZNJiB2bSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisK
KyAgICBpZiAoIU9wdGlvbnM6OnJhbmRvbUludGVncml0eUF1ZGl0UmF0ZSgpKSB7CisgICAgICAg
IG1fdHJpZ2dlckJpdHMgPSAwOyAvLyBOZXZlciB0cmlnZ2VyLCBhbmQgZG9uJ3QgYm90aGVyIHJl
bG9hZGluZy4KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oImRp
c2FibGVkIEludGVncml0eSBhdWRpdHM6IHRyaWdnZXIgYml0cyAiLCBSYXdQb2ludGVyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fdHJpZ2dlckJpdHMpKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBSZWxvYWQgdGhlIHRyaWdnZXIgYml0cy4KKyAgICBtX3RyaWdn
ZXJCaXRzID0gMXVsbCA8PCA2MzsKKworICAgIHVpbnQzMl90IHRocmVzaG9sZCA9IFVJTlRfTUFY
ICogT3B0aW9uczo6cmFuZG9tSW50ZWdyaXR5QXVkaXRSYXRlKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1iZXJPZlRyaWdnZXJCaXRzOyArK2kpIHsKKyAgICAgICAgYm9vbCB0cmlnZ2Vy
ID0gdm0ucmFuZG9tKCkuZ2V0VWludDMyKCkgPD0gdGhyZXNob2xkOworICAgICAgICBtX3RyaWdn
ZXJCaXRzID0gbV90cmlnZ2VyQml0cyB8IChzdGF0aWNfY2FzdDx1aW50NjRfdD4odHJpZ2dlcikg
PDwgaSk7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nTG4oInJlbG9h
ZGVkIEludGVncml0eSB0cmlnZ2VyIGJpdHMgIiwgUmF3UG9pbnRlcihyZWludGVycHJldF9jYXN0
PHZvaWQqPihtX3RyaWdnZXJCaXRzKSkpOworICAgIEFTU0VSVChtX3RyaWdnZXJCaXRzID49ICgx
dWxsIDw8IDYzKSk7CisgICAgcmV0dXJuIHZtLnJhbmRvbSgpLmdldFVpbnQzMigpIDw9IHRocmVz
aG9sZDsKK30KKwordm9pZCBhdWRpdENlbGxGdWxseShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBWTUluc3BlY3Rvcjo6dmVyaWZ5Q2VsbDxWTUluc3BlY3Rvcjo6UmVsZWFzZUFzc2VydD4o
dm0sIGNlbGwpOworfQorCit2b2lkIGF1ZGl0Q2VsbE1pbmltYWxseVNsb3coVk0mLCBKU0NlbGwq
IGNlbGwpCit7CisgICAgaWYgKEdpZ2FjYWdlOjpjb250YWlucyhjZWxsKSkgeworICAgICAgICBp
ZiAoY2VsbC0+dHlwZSgpICE9IEpTSW1tdXRhYmxlQnV0dGVyZmx5VHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQgY2VsbCAiLCBS
YXdQb2ludGVyKGNlbGwpLCAiICIsIEpTVmFsdWUoY2VsbCkpOworICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSW50ZWdyaXR5Cit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3Jp
dHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0dpZ2FjYWdlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2su
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQ2VsbDsKK2NsYXNzIFZNOworCituYW1l
c3BhY2UgSW50ZWdyaXR5IHsKKworZW51bSBjbGFzcyBBdWRpdExldmVsIHsKKyAgICBOb25lLAor
ICAgIE1pbmltYWwsCisgICAgRnVsbCwKKyAgICBSYW5kb20sCit9OworCisjaWZkZWYgTkRFQlVH
CitzdGF0aWMgY29uc3RleHByIEF1ZGl0TGV2ZWwgRGVmYXVsdEF1ZGl0TGV2ZWwgPSBBdWRpdExl
dmVsOjpOb25lOworI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgQXVkaXRMZXZlbCBEZWZhdWx0QXVk
aXRMZXZlbCA9IEF1ZGl0TGV2ZWw6OlJhbmRvbTsKKyNlbmRpZgorCitjbGFzcyBSYW5kb20gewor
cHVibGljOgorICAgIFJhbmRvbShWTSYpOworCisgICAgQUxXQVlTX0lOTElORSBib29sIHNob3Vs
ZEF1ZGl0KFZNJik7CisKK3ByaXZhdGU6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCByZWxv
YWRBbmRDaGVja1Nob3VsZEF1ZGl0U2xvdyhWTSYpOworCisgICAgdWludDY0X3QgbV90cmlnZ2Vy
Qml0czsKKyAgICBMb2NrIG1fbG9jazsKKworICAgIC8vIFRoZSB0b3AgYml0IGlzIHJlc2VydmVk
IGFzIGEgdGVybWluYXRpb24gYml0LiBIZW5jZSwgdGhlIG51bWJlciBvZgorICAgIC8vIHRyaWdn
ZXIgYml0cyBpcyBhbHdheXMgMSBsZXNzIHRoYW4gd2lsbCBmaXQgaW4gbV90cmlnZ2VyQml0cy4K
KyAgICBzdGF0aWMgY29uc3RleHByIGludCBudW1iZXJPZlRyaWdnZXJCaXRzID0gKHNpemVvZiht
X3RyaWdnZXJCaXRzKSAqIENIQVJfQklUKSAtIDE7Cit9OworCitBTFdBWVNfSU5MSU5FIHZvaWQg
YXVkaXRDZWxsUmFuZG9tbHkoVk0mLCBKU0NlbGwqKTsKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRp
dENlbGxNaW5pbWFsbHkoVk0mLCBKU0NlbGwqKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXVk
aXRDZWxsTWluaW1hbGx5U2xvdyhWTSYsIEpTQ2VsbCopOworSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBhdWRpdENlbGxGdWxseShWTSYsIEpTQ2VsbCopOworCit0ZW1wbGF0ZTxBdWRpdExldmVsID0g
QXVkaXRMZXZlbDo6UmFuZG9tLCB0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSB2b2lkIGF1ZGl0
Q2VsbChWTSYsIFQpIHsgfQorCit0ZW1wbGF0ZTxBdWRpdExldmVsIGF1ZGl0TGV2ZWwgPSBEZWZh
dWx0QXVkaXRMZXZlbD4KK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGwoVk0mIHZtLCBKU0Nl
bGwqIGNlbGwpCit7CisgICAgc3dpdGNoIChhdWRpdExldmVsKSB7CisgICAgY2FzZSBBdWRpdExl
dmVsOjpOb25lOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBBdWRpdExldmVsOjpNaW5pbWFs
OgorICAgICAgICByZXR1cm4gYXVkaXRDZWxsTWluaW1hbGx5KHZtLCBjZWxsKTsKKyAgICBjYXNl
IEF1ZGl0TGV2ZWw6OkZ1bGw6CisgICAgICAgIHJldHVybiBhdWRpdENlbGxGdWxseSh2bSwgY2Vs
bCk7CisgICAgY2FzZSBBdWRpdExldmVsOjpSYW5kb206CisgICAgICAgIHJldHVybiBhdWRpdENl
bGxSYW5kb21seSh2bSwgY2VsbCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTxBdWRpdExldmVsIGF1
ZGl0TGV2ZWwgPSBEZWZhdWx0QXVkaXRMZXZlbD4KK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENl
bGwoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdWRpdExldmVsID09IEF1ZGl0
TGV2ZWw6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkK
KyAgICAgICAgYXVkaXRDZWxsPGF1ZGl0TGV2ZWw+KHZtLCB2YWx1ZS5hc0NlbGwoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEludGVncml0eQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9JbnRlZ3JpdHlJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0ludGVncml0eUlubGluZXMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSW50ZWdyaXR5SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkludGVncml0
eS5oIgorI2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEludGVn
cml0eSB7CisKK0FMV0FZU19JTkxJTkUgYm9vbCBSYW5kb206OnNob3VsZEF1ZGl0KFZNJiB2bSkK
K3sKKyAgICAvLyBJZiBhdWRpdGluZyBpcyBlbmFibGVkLCB0aGVuIHRoZSB0b3AgYml0IG9mIG1f
dHJpZ2dlckJpdHMgaXMgYWx3YXlzIHNldAorICAgIC8vIHRvIDEgb24gcmVsb2FkLiBXaGVuIHRo
aXMgdG9wIGJpdCByZWFjaGVzIHRoZSBib3R0b20sIGl0IGRvZXMgbm90CisgICAgLy8gaW5kaWNh
dGUgdGhhdCB3ZSBzaG91bGQgdHJpZ2dlciBhbiBhdWRpdCBidXQgcmF0aGVyIHRoYXQgd2UndmUg
c2hpZnRlZAorICAgIC8vIG91dCBhbGwgdGhlIGF2YWlsYWJsZSB0cmlnZ2VyIGJpdHMgYW5kIGhl
bmNlLCBuZWVkIHRvIHJlbG9hZC4gSW5zdGVhZCwKKyAgICAvLyByZWxvYWRBbmRDaGVja1Nob3Vs
ZEF1ZGl0U2xvdygpIHdpbGwgcmV0dXJuIHdoZXRoZXIgd2UgYWN0dWFsbHkgbmVlZCB0bworICAg
IC8vIHRyaWdnZXIgYW4gYXVkaXQgdGhpcyB0dXJuLgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIGFu
ZCBjYW4KKyAgICAvLyBiZSByYWN5LiBGb3IgdGhhdCByZWFzb24sIHdlIGludGVudGlvbmFsbHkg
ZG8gbm90IHdyaXRlIGJhY2sgdG8KKyAgICAvLyBtX3RyaWdnZXJCaXRzIGlmIG5ld1RyaWdnZXJC
aXRzIGlzIG51bGwuIFRoaXMgZW5zdXJlcyB0aGF0IGlmCisgICAgLy8gT3B0aW9uczo6cmFuZG9t
SW50ZWdyaXR5QXVkaXRSYXRlKCkgaXMgbm9uLXplcm8sIHRoZW4gbV90cmlnZ2VyQml0cyB3aWxs
CisgICAgLy8gYWx3YXlzIGhhdmUgYXQgbGVhc3QgMSBiaXQgdG8gdHJpZ2dlciBhIHJlbG9hZC4K
KworICAgIHVpbnQ2NF90IG5ld1RyaWdnZXJCaXRzID0gbV90cmlnZ2VyQml0czsKKyAgICBib29s
IHNob3VsZEF1ZGl0ID0gbmV3VHJpZ2dlckJpdHMgJiAxOworICAgIG5ld1RyaWdnZXJCaXRzID0g
bmV3VHJpZ2dlckJpdHMgPj4gMTsKKyAgICBpZiAoTElLRUxZKCFzaG91bGRBdWRpdCkpIHsKKyAg
ICAgICAgbV90cmlnZ2VyQml0cyA9IG5ld1RyaWdnZXJCaXRzOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFuZXdUcmlnZ2VyQml0cykKKyAgICAgICAgcmV0dXJuIHJl
bG9hZEFuZENoZWNrU2hvdWxkQXVkaXRTbG93KHZtKTsKKworICAgIG1fdHJpZ2dlckJpdHMgPSBu
ZXdUcmlnZ2VyQml0czsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IGF1ZGl0Q2VsbE1pbmltYWxseShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoR2lnYWNhZ2U6OmNvbnRhaW5zKGNlbGwpKSkKKyAgICAgICAgYXVkaXRDZWxsTWluaW1h
bGx5U2xvdyh2bSwgY2VsbCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBhdWRpdENlbGxSYW5k
b21seShWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoVU5MSUtFTFkodm0uaW50ZWdy
aXR5UmFuZG9tKCkuc2hvdWxkQXVkaXQodm0pKSkKKyAgICAgICAgYXVkaXRDZWxsRnVsbHkodm0s
IGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlZ3JpdHkKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHJldmlz
aW9uIDI1MDI3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwxNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcENlbGxNZW1vcnlUb1N0cmVhbShKU0NlbGwqLCBQcmlu
dFN0cmVhbSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBTdWJzcGFj
ZUhhc2hlcyhWTSopOwogCisgICAgZW51bSBWZXJpZmllckFjdGlvbiB7IFJlbGVhc2VBc3NlcnQs
IEN1c3RvbSB9OworCisgICAgdXNpbmcgVmVyaWZ5RnVuY3RvciA9IGJvb2woYm9vbCBjb25kaXRp
b24sIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCAuLi4pOworICAgIHN0YXRpYyBib29sIHVudXNl
ZFZlcmlmaWVyKGJvb2wsIGNvbnN0IGNoYXIqLCAuLi4pIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICB0ZW1wbGF0ZTxWZXJpZmllckFjdGlvbiwgVmVyaWZ5RnVuY3RvciA9IHVudXNlZFZlcmlmaWVy
PgorICAgIHN0YXRpYyBib29sIHZlcmlmeUNlbGxTaXplKFZNJiwgSlNDZWxsKiwgc2l6ZV90IGFs
bG9jYXRvckNlbGxTaXplKTsKKworICAgIHRlbXBsYXRlPFZlcmlmaWVyQWN0aW9uLCBWZXJpZnlG
dW5jdG9yID0gdW51c2VkVmVyaWZpZXI+CisgICAgc3RhdGljIGJvb2wgdmVyaWZ5Q2VsbChWTSYs
IEpTQ2VsbCopOworCiBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9ySW5saW5lcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3RvcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlyZWN0
QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiSlNCaWdJbnQuaCIKKyNpbmNsdWRlICJKU0xleGljYWxF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRl
ICJKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyN1bmRlZiBB
VURJVF9DT05ESVRJT04KKyN1bmRlZiBBVURJVF9WRVJJRlkKKworI2RlZmluZSBBVURJVF9DT05E
SVRJT04oeCkgKHgpLCAjeAorI2RlZmluZSBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwg
Y29uZCwgLi4uKSBkbyB7IFwKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBWZXJpZmllckFjdGlvbjo6
UmVsZWFzZUFzc2VydCkgXAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uZCwgX19WQV9B
UkdTX18pOyBcCisgICAgICAgIGVsc2UgaWYgKCF2ZXJpZmllcihBVURJVF9DT05ESVRJT04oY29u
ZCksIF9fVkFfQVJHU19fKSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgfSB3
aGlsZSAoZmFsc2UpCisKK3RlbXBsYXRlPFZNSW5zcGVjdG9yOjpWZXJpZmllckFjdGlvbiBhY3Rp
b24sIFZNSW5zcGVjdG9yOjpWZXJpZnlGdW5jdG9yIHZlcmlmaWVyPgorYm9vbCBWTUluc3BlY3Rv
cjo6dmVyaWZ5Q2VsbFNpemUoVk0mIHZtLCBKU0NlbGwqIGNlbGwsIHNpemVfdCBhbGxvY2F0b3JD
ZWxsU2l6ZSkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2
bSk7CisgICAgSlNUeXBlIGNlbGxUeXBlID0gY2VsbC0+dHlwZSgpOworICAgIEFVRElUX1ZFUklG
WShhY3Rpb24sIHZlcmlmaWVyLCBjZWxsVHlwZSA9PSBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCks
IGNlbGwsIGNlbGxUeXBlLCBzdHJ1Y3R1cmUtPm1fYmxvYi50eXBlKCkpOworCisgICAgaWYgKGlz
RHluYW1pY2FsbHlTaXplZFR5cGUoY2VsbFR5cGUpKSB7CisgICAgICAgIHNpemVfdCBjZWxsU2l6
ZSA9IDA7CisgICAgICAgIHN3aXRjaCAoY2VsbFR5cGUpIHsKKyAgICAgICAgY2FzZSBCaWdJbnRU
eXBlOiB7CisgICAgICAgICAgICBhdXRvKiBiaWdJbnQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihjZWxs
KTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNCaWdJbnQ6OmFsbG9jYXRpb25TaXplKGJpZ0lu
dC0+bGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBEaXJlY3RBcmd1bWVudHNUeXBlOiB7CisgICAgICAgICAgICBhdXRvKiBhcmdzID0ganNDYXN0
PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpOworICAgICAgICAgICAgY2VsbFNpemUgPSBEaXJlY3RB
cmd1bWVudHM6OmFsbG9jYXRpb25TaXplKGFyZ3MtPm1fbWluQ2FwYWNpdHkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBGaW5hbE9iamVjdFR5cGU6CisgICAg
ICAgICAgICBjZWxsU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBM
ZXhpY2FsRW52aXJvbm1lbnRUeXBlOiB7CisgICAgICAgICAgICBhdXRvKiBlbnYgPSBqc0Nhc3Q8
SlNMZXhpY2FsRW52aXJvbm1lbnQqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNM
ZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKGVudi0+c3ltYm9sVGFibGUoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1vZHVsZUVudmlyb25t
ZW50VHlwZTogeworICAgICAgICAgICAgYXV0byogZW52ID0ganNDYXN0PEpTTW9kdWxlRW52aXJv
bm1lbnQqPihjZWxsKTsKKyAgICAgICAgICAgIGNlbGxTaXplID0gSlNNb2R1bGVFbnZpcm9ubWVu
dDo6YWxsb2NhdGlvblNpemUoZW52LT5zeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTW9kdWxlTmFtZXNwYWNlT2JqZWN0VHlwZTogewor
ICAgICAgICAgICAgYXV0byogb2JqID0ganNDYXN0PEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Kj4o
Y2VsbCk7CisgICAgICAgICAgICBjZWxsU2l6ZSA9IEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Ojph
bGxvY2F0aW9uU2l6ZShvYmotPm1fbmFtZXMuY2FwYWNpdHkoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9u
LCB2ZXJpZmllciwgY2VsbFNpemUgPD0gYWxsb2NhdG9yQ2VsbFNpemUsIGNlbGwsIGNlbGxUeXBl
LCBjZWxsU2l6ZSwgYWxsb2NhdG9yQ2VsbFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAg
ICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsIGNsYXNzSW5mby0+c3RhdGljQ2xhc3NT
aXplIDw9IGFsbG9jYXRvckNlbGxTaXplLCBjZWxsLCBjZWxsVHlwZSwgY2xhc3NJbmZvLT5zdGF0
aWNDbGFzc1NpemUsIGFsbG9jYXRvckNlbGxTaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPFZNSW5zcGVjdG9yOjpWZXJpZmllckFjdGlvbiBhY3Rpb24sIFZNSW5z
cGVjdG9yOjpWZXJpZnlGdW5jdG9yIHZlcmlmaWVyPgorYm9vbCBWTUluc3BlY3Rvcjo6dmVyaWZ5
Q2VsbChWTSYgdm0sIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzaXplX3QgYWxsb2NhdG9yQ2VsbFNp
emUgPSAwOworICAgIGlmIChjZWxsLT5pc0xhcmdlQWxsb2NhdGlvbigpKSB7CisgICAgICAgIExh
cmdlQWxsb2NhdGlvbiYgbGFyZ2VBbGxvY2F0aW9uID0gY2VsbC0+bGFyZ2VBbGxvY2F0aW9uKCk7
CisgICAgICAgIEFVRElUX1ZFUklGWShhY3Rpb24sIHZlcmlmaWVyLCAmbGFyZ2VBbGxvY2F0aW9u
LnZtKCkgPT0gJnZtLCBjZWxsLCBjZWxsLT50eXBlKCksICZsYXJnZUFsbG9jYXRpb24udm0oKSwg
JnZtKTsKKworICAgICAgICBib29sIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24gPSBmYWxzZTsKKyAg
ICAgICAgZm9yIChhdXRvKiBpIDogdm0uaGVhcC5vYmplY3RTcGFjZSgpLmxhcmdlQWxsb2NhdGlv
bnMoKSkgeworICAgICAgICAgICAgaWYgKGkgPT0gJmxhcmdlQWxsb2NhdGlvbikgeworICAgICAg
ICAgICAgICAgIGlzVmFsaWRMYXJnZUFsbG9jYXRpb24gPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFVRElUX1ZFUklGWShh
Y3Rpb24sIHZlcmlmaWVyLCBpc1ZhbGlkTGFyZ2VBbGxvY2F0aW9uLCBjZWxsLCBjZWxsLT50eXBl
KCkpOworCisgICAgICAgIGFsbG9jYXRvckNlbGxTaXplID0gbGFyZ2VBbGxvY2F0aW9uLmNlbGxT
aXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gY2VsbC0+
bWFya2VkQmxvY2soKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSYgYmxvY2tIYW5kbGUg
PSBibG9jay5oYW5kbGUoKTsKKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIs
ICZibG9jay52bSgpID09ICZ2bSwgY2VsbCwgY2VsbC0+dHlwZSgpLCAmYmxvY2sudm0oKSwgJnZt
KTsKKworICAgICAgICB1aW50cHRyX3QgYmxvY2tTdGFydEFkZHJlc3MgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmxvY2tIYW5kbGUuc3RhcnQoKSk7CisgICAgICAgIEFVRElUX1ZFUklG
WShhY3Rpb24sIHZlcmlmaWVyLCBibG9ja0hhbmRsZS5jb250YWlucyhjZWxsKSwgY2VsbCwgY2Vs
bC0+dHlwZSgpLCBibG9ja1N0YXJ0QWRkcmVzcywgYmxvY2tIYW5kbGUuZW5kKCkpOworCisgICAg
ICAgIHVpbnRwdHJfdCBjZWxsQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
ZWxsKTsKKyAgICAgICAgdWludHB0cl90IGNlbGxPZmZzZXQgPSBjZWxsQWRkcmVzcyAtIGJsb2Nr
U3RhcnRBZGRyZXNzOworICAgICAgICBhbGxvY2F0b3JDZWxsU2l6ZSA9IGJsb2NrLmNlbGxTaXpl
KCk7CisgICAgICAgIGJvb2wgY2VsbElzUHJvcGVybHlBbGlnbmVkID0gIShjZWxsT2Zmc2V0ICUg
YWxsb2NhdG9yQ2VsbFNpemUpOworICAgICAgICBBVURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmll
ciwgY2VsbElzUHJvcGVybHlBbGlnbmVkLCBjZWxsLCBjZWxsLT50eXBlKCksIGFsbG9jYXRvckNl
bGxTaXplKTsKKyAgICB9CisKKyAgICBhdXRvIGNlbGxUeXBlID0gY2VsbC0+dHlwZSgpOworICAg
IGlmIChjZWxsLT50eXBlKCkgIT0gSlNJbW11dGFibGVCdXR0ZXJmbHlUeXBlKQorICAgICAgICBB
VURJVF9WRVJJRlkoYWN0aW9uLCB2ZXJpZmllciwgIUdpZ2FjYWdlOjpjb250YWlucyhjZWxsKSwg
Y2VsbCwgY2VsbFR5cGUpOworCisgICAgaWYgKCF2ZXJpZnlDZWxsU2l6ZTxhY3Rpb24sIHZlcmlm
aWVyPih2bSwgY2VsbCwgYWxsb2NhdG9yQ2VsbFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6SlNWYWx1ZSkgJiYgY2Vs
bC0+aXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoY2Vs
bCk7CisgICAgICAgIGNvbnN0IEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gb2JqZWN0LT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgQVVESVRfVkVSSUZZKGFjdGlvbiwgdmVyaWZpZXIsICFidXR0ZXJmbHkg
fHwgR2lnYWNhZ2U6OmlzQ2FnZWQoR2lnYWNhZ2U6OkpTVmFsdWUsIGJ1dHRlcmZseSksIGNlbGws
IGNlbGwtPnR5cGUoKSwgYnV0dGVyZmx5KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworI3VuZGVmIEFVRElUX1ZFUklGWQorI3VuZGVmIEFVRElUX0NPTkRJVElPTgorCit9IC8vIG5h
bWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="395142"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>